target-supabase-sdk 0.2.10 → 0.2.12

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.
Files changed (79) hide show
  1. package/dist/browser.d.ts +4 -6
  2. package/dist/browser.d.ts.map +1 -1
  3. package/dist/browser.js +3 -3
  4. package/dist/chunks/{enable-log-persist-BB-unD4p.js → enable-log-persist-Dl55_mv2.js} +160 -30
  5. package/dist/chunks/enable-log-persist-Dl55_mv2.js.map +1 -0
  6. package/dist/chunks/{list.api-6Q4_-7oN.js → list.api-BzbTJBsM.js} +81 -13
  7. package/dist/chunks/list.api-BzbTJBsM.js.map +1 -0
  8. package/dist/chunks/{task-queue-D5uWjqVN.js → task-queue-H4mpSW8R.js} +55 -16
  9. package/dist/chunks/task-queue-H4mpSW8R.js.map +1 -0
  10. package/dist/core.api.d.ts +6 -15
  11. package/dist/core.api.d.ts.map +1 -1
  12. package/dist/core.interface.d.ts +5 -0
  13. package/dist/core.interface.d.ts.map +1 -1
  14. package/dist/core.schema.d.ts +77 -0
  15. package/dist/core.schema.d.ts.map +1 -0
  16. package/dist/link/index.d.ts +10 -0
  17. package/dist/link/index.d.ts.map +1 -0
  18. package/dist/link/link.build.d.ts +45 -0
  19. package/dist/link/link.build.d.ts.map +1 -0
  20. package/dist/list/index.d.ts +10 -0
  21. package/dist/list/index.d.ts.map +1 -0
  22. package/dist/list/list.build.d.ts +21 -0
  23. package/dist/list/list.build.d.ts.map +1 -0
  24. package/dist/node/preload/run-service-preload.d.ts +1 -0
  25. package/dist/node/preload/run-service-preload.d.ts.map +1 -1
  26. package/dist/node/preload/service-preload.interface.d.ts +5 -0
  27. package/dist/node/preload/service-preload.interface.d.ts.map +1 -1
  28. package/dist/node.js +6 -6
  29. package/dist/parcel/parcel.api.d.ts +3 -3
  30. package/dist/parcel/parcel.api.d.ts.map +1 -1
  31. package/dist/preload.js +14 -3
  32. package/dist/preload.js.map +1 -1
  33. package/dist/resource/resource.interface.d.ts +20 -0
  34. package/dist/resource/resource.interface.d.ts.map +1 -0
  35. package/dist/service/config.api.d.ts.map +1 -1
  36. package/dist/service/service.api.d.ts +6 -6
  37. package/dist/service/service.api.d.ts.map +1 -1
  38. package/dist/shared/log/index.d.ts +2 -0
  39. package/dist/shared/log/index.d.ts.map +1 -1
  40. package/dist/shared/log/log-min-level.d.ts +15 -0
  41. package/dist/shared/log/log-min-level.d.ts.map +1 -0
  42. package/dist/shared/log/log-persist-errors.d.ts +4 -0
  43. package/dist/shared/log/log-persist-errors.d.ts.map +1 -0
  44. package/dist/shared/log/log-persist-logger.d.ts +1 -0
  45. package/dist/shared/log/log-persist-logger.d.ts.map +1 -1
  46. package/dist/shared/log/log-persist.config.d.ts.map +1 -1
  47. package/dist/shared/log/log-persist.d.ts +8 -1
  48. package/dist/shared/log/log-persist.d.ts.map +1 -1
  49. package/dist/shared/log/log-persist.interface.d.ts +8 -0
  50. package/dist/shared/log/log-persist.interface.d.ts.map +1 -1
  51. package/dist/task/task-post-validated.api.d.ts +2 -2
  52. package/dist/task/task-post.api.d.ts +6 -6
  53. package/dist/trigger/trigger.api.d.ts +6 -6
  54. package/package.json +1 -1
  55. package/src/browser.ts +6 -5
  56. package/src/core.api.ts +19 -28
  57. package/src/core.interface.ts +6 -0
  58. package/src/core.schema.ts +51 -0
  59. package/src/link/index.ts +10 -0
  60. package/src/link/link.build.ts +48 -0
  61. package/src/list/index.ts +13 -0
  62. package/src/list/list.build.ts +51 -0
  63. package/src/node/preload/run-service-preload.ts +14 -0
  64. package/src/node/preload/service-preload.interface.ts +6 -0
  65. package/src/resource/resource.interface.ts +37 -0
  66. package/src/service/config.api.ts +1 -0
  67. package/src/shared/log/index.ts +7 -0
  68. package/src/shared/log/log-min-level.ts +46 -0
  69. package/src/shared/log/log-persist-errors.ts +16 -0
  70. package/src/shared/log/log-persist-logger.ts +28 -0
  71. package/src/shared/log/log-persist.config.ts +20 -0
  72. package/src/shared/log/log-persist.interface.ts +8 -0
  73. package/src/shared/log/log-persist.ts +161 -43
  74. package/dist/chunks/enable-log-persist-BB-unD4p.js.map +0 -1
  75. package/dist/chunks/list.api-6Q4_-7oN.js.map +0 -1
  76. package/dist/chunks/task-queue-D5uWjqVN.js.map +0 -1
  77. package/dist/idea/idea.interface.d.ts +0 -25
  78. package/dist/idea/idea.interface.d.ts.map +0 -1
  79. package/src/idea/idea.interface.ts +0 -28
@@ -1 +0,0 @@
1
- {"version":3,"file":"enable-log-persist-BB-unD4p.js","sources":["../../src/node/env/require-env.ts","../../src/node/env/env-parsers.ts","../../src/node/env/load-env.ts","../../src/node/env/project-root.ts","../../src/node/fs/file-write-queue.ts","../../src/node/fs/json-state-store.ts","../../src/node/readiness/poll-until.ts","../../src/shared/log/log-persist.config.ts","../../src/shared/log/log-persist-batch-id.ts","../../src/shared/log/log-persist-logger.ts","../../src/shared/log/log-persist-flush.ts","../../src/shared/log/log-persist-registry.ts","../../src/shared/log/log-persist.ts","../../src/shared/log/enable-log-persist.ts"],"sourcesContent":["export function readEnv(name: string, env: NodeJS.ProcessEnv = process.env): string | undefined {\n const value = env[name]?.trim();\n if (value == null || value === \"\") {\n return undefined;\n }\n return value;\n}\n\nexport function requireEnv(name: string, env: NodeJS.ProcessEnv = process.env): string {\n const value = readEnv(name, env);\n if (value == null) {\n throw new Error(`Missing required environment variable: ${name}`);\n }\n return value;\n}\n","import { readEnv } from \"./require-env\";\n\nexport interface EnvIntOptions {\n env?: NodeJS.ProcessEnv;\n min?: number;\n max?: number;\n}\n\nexport function envInt(name: string, defaultValue: number, options?: EnvIntOptions): number {\n const env = options?.env ?? process.env;\n const raw = readEnv(name, env);\n if (raw == null) {\n return defaultValue;\n }\n\n const value = Number(raw);\n if (!Number.isInteger(value)) {\n throw new Error(`Invalid ${name}: ${raw}`);\n }\n\n const min = options?.min;\n if (min != null && value < min) {\n throw new Error(`Invalid ${name}: ${raw}`);\n }\n\n const max = options?.max;\n if (max != null && value > max) {\n throw new Error(`Invalid ${name}: ${raw}`);\n }\n\n return value;\n}\n\nexport function envMs(name: string, defaultMs: number, options?: EnvIntOptions): number {\n return envInt(name, defaultMs, { ...options, min: options?.min ?? 1 });\n}\n\nexport function envPort(defaultPort = 3100, options?: EnvIntOptions & { envKey?: string }): number {\n const envKey = options?.envKey ?? \"PORT\";\n return envInt(envKey, defaultPort, { ...options, min: 1, max: 65535 });\n}\n\nexport interface EnvNumberOptions {\n env?: NodeJS.ProcessEnv;\n min?: number;\n /** When true, use Math.floor on parsed value. */\n floor?: boolean;\n}\n\nexport function envNumber(name: string, defaultValue: number, options?: EnvNumberOptions): number {\n const env = options?.env ?? process.env;\n const raw = readEnv(name, env);\n if (raw == null) {\n return defaultValue;\n }\n\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n throw new Error(`Invalid ${name}: ${raw}`);\n }\n\n const min = options?.min;\n const resolved = options?.floor === true ? Math.floor(value) : value;\n if (min != null && resolved < min) {\n throw new Error(`Invalid ${name}: ${raw}`);\n }\n\n return resolved;\n}\n\nexport function envBool(name: string, defaultValue = false, env: NodeJS.ProcessEnv = process.env): boolean {\n const raw = readEnv(name, env)?.toLowerCase();\n if (raw == null) {\n return defaultValue;\n }\n return raw === \"1\" || raw === \"true\" || raw === \"yes\";\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nconst DEFAULT_ENV_FILES = [\".env.local\", \".env\"] as const;\nconst PROD_ENV_FILES = [\".env.prod\"] as const;\n\nexport const SERVICE_ENV_PROFILE_ENV_KEY = \"SERVICE_ENV_PROFILE\" as const;\nexport const SERVICE_ENV_PROFILE_PROD = \"prod\" as const;\nexport const CLI_PROD_FLAG = \"--prod\" as const;\n\nexport interface EnvProfileFromProcessOptions {\n env?: NodeJS.ProcessEnv;\n argv?: readonly string[];\n}\n\n/** Resolve active env profile from `SERVICE_ENV_PROFILE` or `--prod` on argv. */\nexport function envProfileFromProcess(options?: EnvProfileFromProcessOptions): string | undefined {\n const env = options?.env ?? process.env;\n const argv = options?.argv ?? process.argv;\n const fromEnv = env[SERVICE_ENV_PROFILE_ENV_KEY]?.trim();\n if (fromEnv != null && fromEnv !== \"\") {\n return fromEnv;\n }\n if (argv.includes(CLI_PROD_FLAG)) {\n return SERVICE_ENV_PROFILE_PROD;\n }\n return undefined;\n}\n\n/** Default env file list for a profile (`prod` → `.env.prod`; otherwise `.env.local` → `.env`). */\nexport function resolveDefaultEnvFiles(profile?: string): readonly string[] {\n if (profile === SERVICE_ENV_PROFILE_PROD) {\n return PROD_ENV_FILES;\n }\n return DEFAULT_ENV_FILES;\n}\n\n/** Pin `SERVICE_ENV_PROFILE=prod` when `--prod` is on argv (for child process inheritance). */\nexport function pinEnvProfileFromArgv(\n env: NodeJS.ProcessEnv = process.env,\n argv: readonly string[] = process.argv,\n): void {\n if (env[SERVICE_ENV_PROFILE_ENV_KEY]?.trim()) {\n return;\n }\n if (argv.includes(CLI_PROD_FLAG)) {\n env[SERVICE_ENV_PROFILE_ENV_KEY] = SERVICE_ENV_PROFILE_PROD;\n }\n}\n\nexport interface LoadEnvFilesOptions {\n /** Files to load in order (later files do not override existing env). */\n files?: readonly string[];\n env?: NodeJS.ProcessEnv;\n /** Called after all files are merged (e.g. legacy alias normalization). */\n afterLoad?: () => void;\n}\n\nfunction stripQuotes(value: string): string {\n return value.replace(/^[\"']|[\"']$/g, \"\");\n}\n\n/** Parse one KEY=VALUE line; returns null if line should be skipped. */\nexport function parseEnvLine(line: string): { key: string; value: string } | null {\n const trimmed = line.trim();\n if (trimmed === \"\" || trimmed.startsWith(\"#\")) {\n return null;\n }\n\n const eq = trimmed.indexOf(\"=\");\n if (eq === -1) {\n return null;\n }\n\n const key = trimmed.slice(0, eq).trim();\n const raw = trimmed.slice(eq + 1).trim();\n return { key, value: stripQuotes(raw) };\n}\n\nexport function parseEnvFileContent(content: string, env: NodeJS.ProcessEnv): void {\n for (const line of content.split(\"\\n\")) {\n const parsed = parseEnvLine(line);\n if (parsed == null) {\n continue;\n }\n if (env[parsed.key] == null || env[parsed.key] === \"\") {\n env[parsed.key] = parsed.value;\n }\n }\n}\n\nexport function parseEnvFile(filePath: string, env: NodeJS.ProcessEnv): void {\n if (!existsSync(filePath)) {\n return;\n }\n parseEnvFileContent(readFileSync(filePath, \"utf8\"), env);\n}\n\n/**\n * Load env files into `process.env` (or `options.env`).\n * Default files: `.env.local` → `.env`, or `.env.prod` when profile is `prod` / `--prod`.\n * Existing non-empty env values are not overwritten.\n */\nexport function loadEnvFiles(root: string, options?: LoadEnvFilesOptions): void {\n const env = options?.env ?? process.env;\n const files = options?.files ?? resolveDefaultEnvFiles(envProfileFromProcess({ env }));\n\n for (const name of files) {\n parseEnvFile(resolve(root, name), env);\n }\n\n options?.afterLoad?.();\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\n/**\n * Resolve project root from a module URL (typically `import.meta.url`).\n * @param relativePath Path relative to the module file (default `\"..\"` = parent directory).\n */\nexport function resolveProjectRootFromModule(importMetaUrl: string, relativePath = \"..\"): string {\n return resolve(fileURLToPath(new URL(relativePath, importMetaUrl)));\n}\n\n/**\n * Walk upward from `importMetaUrl` until a `package.json` with matching `name` is found.\n * Use for esbuild bundles under `dist/` where a single `..` hop lands in `dist/`, not repo root.\n */\nexport function resolveProjectRootByPackageName(importMetaUrl: string, packageName: string): string {\n let dir = dirname(fileURLToPath(importMetaUrl));\n for (;;) {\n const packageJsonPath = resolve(dir, \"package.json\");\n if (existsSync(packageJsonPath)) {\n const pkg = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as { name?: string };\n if (pkg.name === packageName) {\n return dir;\n }\n }\n const parent = dirname(dir);\n if (parent === dir) {\n break;\n }\n dir = parent;\n }\n throw new Error(`Could not find package root for \"${packageName}\" from ${importMetaUrl}`);\n}\n","/** Per-file write queue — serializes read-modify-write for a single JSON path within one process. */\nconst writeChains = new Map<string, Promise<unknown>>();\n\nexport function withSerializedFileWrites<T>(filePath: string, operation: () => Promise<T>): Promise<T> {\n const previous = writeChains.get(filePath) ?? Promise.resolve();\n const next = previous.then(operation, operation);\n writeChains.set(\n filePath,\n next.then(\n () => undefined,\n () => undefined,\n ),\n );\n return next;\n}\n","import { randomBytes } from \"node:crypto\";\nimport { mkdir, readFile, rename, unlink, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport { withSerializedFileWrites } from \"./file-write-queue\";\n\nexport type JsonStatePatch<T extends object, NK extends keyof T> = Partial<Omit<T, NK>> & {\n [K in NK]?: T[K] extends object ? Partial<T[K]> : T[K];\n};\n\nexport interface JsonFileStateStore<T extends object, NK extends keyof T = never> {\n read(): Promise<T>;\n write(patch: JsonStatePatch<T, NK>): Promise<T>;\n reset(): Promise<T>;\n}\n\nexport interface CreateJsonFileStateStoreOptions<T extends object, NK extends keyof T = never> {\n filePath: string;\n defaultState: T;\n /** Top-level keys shallow-merged one level deep on read and write. */\n nestedKeys?: NK[];\n /** When set, assigned `new Date().toISOString()` on write and reset. */\n updatedAtKey?: keyof T;\n}\n\nfunction mergeWithNested<T extends object>(\n defaults: T,\n current: Partial<T> | undefined,\n patch: Partial<T>,\n nestedKeys: (keyof T)[],\n): T {\n const merged = {\n ...defaults,\n ...current,\n ...patch,\n } as T;\n\n for (const key of nestedKeys) {\n const defaultNested = defaults[key];\n if (defaultNested != null && typeof defaultNested === \"object\") {\n (merged as Record<keyof T, unknown>)[key] = {\n ...defaultNested,\n ...(current?.[key] as object | undefined),\n ...(patch[key] as object | undefined),\n };\n }\n }\n\n return merged;\n}\n\nasync function atomicWriteJson(filePath: string, data: unknown): Promise<void> {\n await mkdir(dirname(filePath), { recursive: true });\n const content = `${JSON.stringify(data, null, 2)}\\n`;\n JSON.parse(content);\n const tempPath = `${filePath}.${process.pid}.${randomBytes(4).toString(\"hex\")}.tmp`;\n try {\n await writeFile(tempPath, content, \"utf8\");\n await rename(tempPath, filePath);\n } catch (error) {\n await unlink(tempPath).catch(() => undefined);\n throw error;\n }\n}\n\n/** JSON file-backed state with optional nested key merge and atomic writes. */\nexport function createJsonFileStateStore<T extends object, NK extends keyof T = never>(\n options: CreateJsonFileStateStoreOptions<T, NK>,\n): JsonFileStateStore<T, NK> {\n const { filePath, defaultState, nestedKeys = [] as NK[], updatedAtKey } = options;\n\n function touchUpdatedAt(state: T): T {\n if (updatedAtKey == null) {\n return state;\n }\n return {\n ...state,\n [updatedAtKey]: new Date().toISOString(),\n };\n }\n\n async function readFromDisk(): Promise<T> {\n try {\n const raw = await readFile(filePath, \"utf8\");\n const parsed = JSON.parse(raw) as Partial<T>;\n return mergeWithNested(defaultState, parsed, {}, nestedKeys);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return mergeWithNested(defaultState, {}, {}, nestedKeys);\n }\n if (error instanceof SyntaxError) {\n await unlink(filePath).catch(() => undefined);\n return mergeWithNested(defaultState, {}, {}, nestedKeys);\n }\n throw error;\n }\n }\n\n return {\n read(): Promise<T> {\n return readFromDisk();\n },\n\n write(patch: JsonStatePatch<T, NK>): Promise<T> {\n return withSerializedFileWrites(filePath, async () => {\n const current = await readFromDisk();\n const next = touchUpdatedAt(mergeWithNested(defaultState, current, patch as Partial<T>, nestedKeys));\n await atomicWriteJson(filePath, next);\n return next;\n });\n },\n\n reset(): Promise<T> {\n return withSerializedFileWrites(filePath, async () => {\n const next = touchUpdatedAt({ ...defaultState });\n await atomicWriteJson(filePath, next);\n return next;\n });\n },\n };\n}\n","function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport interface PollUntilOptions {\n timeoutMs: number;\n intervalMs?: number;\n until: () => boolean | Promise<boolean>;\n}\n\n/**\n * Poll `until()` until it returns true or `timeoutMs` elapses.\n * @throws Error on timeout\n */\nexport async function pollUntil(options: PollUntilOptions): Promise<void> {\n const intervalMs = options.intervalMs ?? 500;\n const deadline = Date.now() + options.timeoutMs;\n\n while (Date.now() < deadline) {\n if (await options.until()) {\n return;\n }\n await sleep(intervalMs);\n }\n\n throw new Error(`pollUntil timeout after ${options.timeoutMs}ms`);\n}\n","import { envBool, envInt, envMs } from \"../../node/env/env-parsers\";\nimport type { LogPersistConfig } from \"./log-persist.interface\";\n\nexport const DEFAULT_LOG_PERSIST_CONFIG: LogPersistConfig = {\n fast: {\n maxBufferEntries: 500,\n },\n medium: {\n debounceMs: 5_000,\n maxEntries: 20,\n maxBytes: 512 * 1024,\n maxBufferEntries: 1_000,\n },\n slow: {\n maxEntries: 400,\n maxBytes: 512 * 1024,\n maxAgeMs: 120_000,\n maxBufferEntries: 2_000,\n },\n postTimeoutMs: 30_000,\n shutdownDrainTimeoutMs: 15_000,\n};\n\nexport function resolveLogPersistConfig(partial?: Partial<LogPersistConfig>): LogPersistConfig {\n const defaults = DEFAULT_LOG_PERSIST_CONFIG;\n return {\n fast: { ...defaults.fast, ...partial?.fast },\n medium: { ...defaults.medium, ...partial?.medium },\n slow: { ...defaults.slow, ...partial?.slow },\n postTimeoutMs: partial?.postTimeoutMs ?? defaults.postTimeoutMs,\n shutdownDrainTimeoutMs: partial?.shutdownDrainTimeoutMs ?? defaults.shutdownDrainTimeoutMs,\n };\n}\n\nexport function logPersistEnabledFromEnv(env: NodeJS.ProcessEnv = process.env): boolean {\n return envBool(\"LOG_PERSIST_ENABLED\", false, env);\n}\n\nexport function logPersistServiceFromEnv(env: NodeJS.ProcessEnv = process.env): string | undefined {\n const raw = env.LOG_PERSIST_SERVICE?.trim();\n return raw != null && raw !== \"\" ? raw : undefined;\n}\n\nexport function logPersistProcessFromEnv(env: NodeJS.ProcessEnv = process.env): string | undefined {\n const raw = env.LOG_PERSIST_PROCESS?.trim();\n return raw != null && raw !== \"\" ? raw : undefined;\n}\n\nexport function logPersistRegistryDirFromEnv(env: NodeJS.ProcessEnv = process.env): string | undefined {\n const configured = env.LOG_PERSIST_REGISTRY_DIR?.trim();\n if (configured != null && configured !== \"\") {\n return configured;\n }\n const runtime = env.RUNTIME_DATA_DIR?.trim();\n return runtime != null && runtime !== \"\" ? runtime : undefined;\n}\n\nexport function logPersistConfigFromEnv(env: NodeJS.ProcessEnv = process.env): LogPersistConfig {\n return resolveLogPersistConfig({\n fast: {\n maxBufferEntries: envInt(\"LOG_FAST_MAX_BUFFER_ENTRIES\", DEFAULT_LOG_PERSIST_CONFIG.fast.maxBufferEntries, {\n env,\n min: 1,\n }),\n },\n medium: {\n debounceMs: envMs(\"LOG_MEDIUM_DEBOUNCE_MS\", DEFAULT_LOG_PERSIST_CONFIG.medium.debounceMs, { env }),\n maxEntries: envInt(\"LOG_MEDIUM_MAX_ENTRIES\", DEFAULT_LOG_PERSIST_CONFIG.medium.maxEntries, {\n env,\n min: 1,\n }),\n maxBytes: envInt(\"LOG_MEDIUM_MAX_BYTES\", DEFAULT_LOG_PERSIST_CONFIG.medium.maxBytes, { env, min: 1 }),\n maxBufferEntries: envInt(\n \"LOG_MEDIUM_MAX_BUFFER_ENTRIES\",\n DEFAULT_LOG_PERSIST_CONFIG.medium.maxBufferEntries,\n { env, min: 1 },\n ),\n },\n slow: {\n maxEntries: envInt(\"LOG_SLOW_MAX_ENTRIES\", DEFAULT_LOG_PERSIST_CONFIG.slow.maxEntries, { env, min: 1 }),\n maxBytes: envInt(\"LOG_SLOW_MAX_BYTES\", DEFAULT_LOG_PERSIST_CONFIG.slow.maxBytes, { env, min: 1 }),\n maxAgeMs: envMs(\"LOG_SLOW_MAX_AGE_MS\", DEFAULT_LOG_PERSIST_CONFIG.slow.maxAgeMs, { env }),\n maxBufferEntries: envInt(\"LOG_SLOW_MAX_BUFFER_ENTRIES\", DEFAULT_LOG_PERSIST_CONFIG.slow.maxBufferEntries, {\n env,\n min: 1,\n }),\n },\n postTimeoutMs: envMs(\"LOG_PERSIST_POST_TIMEOUT_MS\", DEFAULT_LOG_PERSIST_CONFIG.postTimeoutMs, { env }),\n shutdownDrainTimeoutMs: envMs(\n \"LOG_PERSIST_SHUTDOWN_DRAIN_MS\",\n DEFAULT_LOG_PERSIST_CONFIG.shutdownDrainTimeoutMs,\n { env },\n ),\n });\n}\n","import { createHash } from \"node:crypto\";\nimport type { LogEntry } from \"./log-manager\";\nimport type { LogPersistLane } from \"./log-persist.interface\";\n\nconst BATCH_ID_VERSION = 1;\n\n/** Stable subset of LogEntry for idempotency hashing (same batch → same key). */\nfunction canonicalLogEntry(entry: LogEntry): Record<string, unknown> {\n return {\n timestamp: entry.timestamp,\n level: entry.level,\n message: entry.message,\n topic: entry.topic,\n module: entry.module,\n traceId: entry.traceId,\n traceParentId: entry.traceParentId ?? null,\n extra: entry.extra ?? null,\n data: entry.data ?? null,\n labels: entry.labels ?? null,\n };\n}\n\n/**\n * Deterministic List.value for a log batch — retries after timeout map to the same row key.\n * SHA-256 over canonical JSON (service + process + lane + entries in order).\n */\nexport function computeLogBatchIdempotencyKey(input: {\n service: string;\n process: string;\n lane: LogPersistLane;\n entries: LogEntry[];\n}): string {\n const payload = {\n v: BATCH_ID_VERSION,\n service: input.service,\n process: input.process,\n lane: input.lane,\n entries: input.entries.map(canonicalLogEntry),\n };\n\n const hash = createHash(\"sha256\").update(JSON.stringify(payload), \"utf8\").digest(\"hex\");\n return `${hash.slice(0, 32)}`;\n}\n","import { createLogger } from \"./create-logger\";\n\n/** User-facing / lifecycle logs — may be persisted like normal app logs. */\nexport const LOG_PERSIST_TOPIC = \"log-persist\";\n\n/** Operational logs from the persist pipeline — never re-offered to avoid feedback loops. */\nexport const LOG_PERSIST_INTERNAL_TOPIC = \"log-persist-internal\";\n\nconst logger = createLogger({ module: \"log-persist\" });\n\nexport function isLogPersistInternalTopic(topic: string | undefined): boolean {\n return topic === LOG_PERSIST_INTERNAL_TOPIC;\n}\n\ntype PersistLogData = Record<string, unknown>;\n\nfunction write(level: \"debug\" | \"info\" | \"warn\" | \"error\", message: string, data?: PersistLogData): void {\n logger[level](message, {\n topic: LOG_PERSIST_INTERNAL_TOPIC,\n ...(data != null ? { data } : {}),\n });\n}\n\nexport const persistLogger = {\n debug: (message: string, data?: PersistLogData) => write(\"debug\", message, data),\n info: (message: string, data?: PersistLogData) => write(\"info\", message, data),\n warn: (message: string, data?: PersistLogData) => write(\"warn\", message, data),\n error: (message: string, data?: PersistLogData) => write(\"error\", message, data),\n};\n\nexport function patchPersistLoggerScope(labels: Record<string, string>): void {\n logger.resetScope({ labels });\n}\n","import { isCreateTargetAlreadyExistsError } from \"../../core.api\";\nimport { postLogListCreate } from \"../../list/list.api\";\nimport { CategoryList } from \"../../list/list.interface\";\nimport type { LogEntry } from \"./log-manager\";\nimport type { BuildLogListDraftInput, LogListDraft } from \"./log-persist.interface\";\nimport { LOG_PERSIST_LOADER_KEY } from \"./log-persist.interface\";\nimport { persistLogger } from \"./log-persist-logger\";\n\nexport function estimateEntriesBytes(entries: LogEntry[]): number {\n if (entries.length === 0) {\n return 0;\n }\n try {\n return Buffer.byteLength(JSON.stringify(entries), \"utf8\");\n } catch {\n return entries.length * 512;\n }\n}\n\nexport function buildLogListDraft(input: BuildLogListDraftInput): LogListDraft {\n const { service, process, lane, idempotencyKey, entries } = input;\n const first = entries[0];\n const last = entries[entries.length - 1];\n\n return {\n name: `log-batch:${service}:${process}:${lane}`,\n value: idempotencyKey,\n category: CategoryList.LIST,\n tagList: [\"log\", lane, service],\n details: {\n manifestVersion: 0,\n loaderKey: LOG_PERSIST_LOADER_KEY,\n meta: {\n service,\n process,\n pid: globalThis.process.pid,\n lane,\n count: entries.length,\n from: first?.timestamp ?? null,\n to: last?.timestamp ?? null,\n flushedAt: Date.now(),\n idempotencyKey,\n },\n preview: first?.message ?? \"\",\n items: entries,\n },\n };\n}\n\nasync function withTimeout<T>(promise: Promise<T>, timeoutMs: number, label: string): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | null = null;\n try {\n return await Promise.race([\n promise,\n new Promise<T>((_resolve, reject) => {\n timer = setTimeout(() => {\n reject(new Error(`${label} timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n }),\n ]);\n } finally {\n if (timer != null) {\n clearTimeout(timer);\n }\n }\n}\n\nexport async function postLogBatch(draft: LogListDraft, postTimeoutMs: number): Promise<void> {\n try {\n const result = await withTimeout(\n postLogListCreate({\n name: draft.name,\n value: draft.value,\n category: draft.category,\n details: draft.details,\n }),\n postTimeoutMs,\n \"postLogListCreate\",\n );\n\n if (!result.success) {\n const message = result.error?.message ?? \"postLogListCreate failed\";\n persistLogger.error(\"post log batch failed\", {\n idempotencyKey: draft.value,\n name: draft.name,\n error: message,\n });\n throw new Error(message);\n }\n } catch (error) {\n if (isCreateTargetAlreadyExistsError(error)) {\n persistLogger.error(\"post log batch idempotent duplicate — treating as success\", {\n idempotencyKey: draft.value,\n name: draft.name,\n });\n return;\n }\n throw error;\n }\n}\n\n/** Take a prefix of entries that fits within maxBytes. */\nexport function takeEntriesWithinBytes(entries: LogEntry[], maxBytes: number): LogEntry[] {\n if (entries.length === 0) {\n return [];\n }\n\n const taken: LogEntry[] = [];\n for (const entry of entries) {\n const candidate = [...taken, entry];\n if (taken.length > 0 && estimateEntriesBytes(candidate) > maxBytes) {\n break;\n }\n taken.push(entry);\n }\n\n const result = taken.length > 0 ? taken : [entries[0]];\n if (result.length < entries.length) {\n persistLogger.warn(\"trimmed batch to maxBytes\", {\n requested: entries.length,\n taken: result.length,\n maxBytes,\n takenBytes: estimateEntriesBytes(result),\n });\n }\n\n return result;\n}\n","import { mkdir, readdir, readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { createJsonFileStateStore } from \"../../node/fs/json-state-store\";\nimport type { LogPersistProcessRecord, LogPersistRegistryState } from \"./log-persist.interface\";\nimport { persistLogger } from \"./log-persist-logger\";\n\nconst DEFAULT_REGISTRY: LogPersistRegistryState = {\n updatedAt: new Date(0).toISOString(),\n service: \"\",\n processes: {},\n};\n\n/** Per-process shard — each process owns one file; no cross-process RMW. */\ninterface LogPersistProcessShard extends LogPersistProcessRecord {\n service: string;\n updatedAt: string;\n}\n\nconst DEFAULT_SHARD: LogPersistProcessShard = {\n service: \"\",\n updatedAt: new Date(0).toISOString(),\n pid: 0,\n enabledAt: new Date(0).toISOString(),\n lastHeartbeatAt: new Date(0).toISOString(),\n};\n\nconst legacyStores = new Map<\n string,\n ReturnType<typeof createJsonFileStateStore<LogPersistRegistryState, \"processes\">>\n>();\n\nconst shardStores = new Map<string, ReturnType<typeof createJsonFileStateStore<LogPersistProcessShard>>>();\n\nfunction isLegacyRegistryFile(registryPath: string): boolean {\n return registryPath.endsWith(\".json\");\n}\n\nfunction legacyStoreFor(filePath: string) {\n let store = legacyStores.get(filePath);\n if (store == null) {\n store = createJsonFileStateStore<LogPersistRegistryState, \"processes\">({\n filePath,\n defaultState: DEFAULT_REGISTRY,\n nestedKeys: [\"processes\"],\n updatedAtKey: \"updatedAt\",\n });\n legacyStores.set(filePath, store);\n }\n return store;\n}\n\nfunction shardStoreFor(shardFilePath: string) {\n let store = shardStores.get(shardFilePath);\n if (store == null) {\n store = createJsonFileStateStore<LogPersistProcessShard>({\n filePath: shardFilePath,\n defaultState: DEFAULT_SHARD,\n updatedAtKey: \"updatedAt\",\n });\n shardStores.set(shardFilePath, store);\n }\n return store;\n}\n\nfunction shardFilePath(registryDir: string, process: string): string {\n return join(registryDir, `${process}.json`);\n}\n\n/** Registry root directory — one shard file per process under this path. */\nexport function defaultLogPersistRegistryPath(registryDir: string): string {\n return join(registryDir, \"log-persist-registry\");\n}\n\nasync function readShardedLogPersistRegistry(registryDir: string): Promise<LogPersistRegistryState> {\n await mkdir(registryDir, { recursive: true });\n\n let entries: string[];\n try {\n entries = await readdir(registryDir);\n } catch {\n return { ...DEFAULT_REGISTRY };\n }\n\n const processes: Record<string, LogPersistProcessRecord> = {};\n let service = \"\";\n let updatedAt = new Date(0).toISOString();\n\n for (const name of entries) {\n if (!name.endsWith(\".json\")) {\n continue;\n }\n\n const processName = name.slice(0, -\".json\".length);\n if (processName === \"\" || processName.startsWith(\"_\")) {\n continue;\n }\n\n try {\n const raw = await readFile(join(registryDir, name), \"utf8\");\n const shard = JSON.parse(raw) as Partial<LogPersistProcessShard>;\n if (shard.service != null && shard.service !== \"\") {\n service = shard.service;\n }\n if (shard.updatedAt != null && shard.updatedAt > updatedAt) {\n updatedAt = shard.updatedAt;\n }\n processes[processName] = {\n pid: shard.pid ?? 0,\n enabledAt: shard.enabledAt ?? new Date(0).toISOString(),\n lastHeartbeatAt: shard.lastHeartbeatAt ?? new Date(0).toISOString(),\n };\n } catch {\n persistLogger.warn(\"registry shard read skipped — corrupt or missing\", {\n registryDir,\n shard: name,\n });\n }\n }\n\n return { updatedAt, service, processes };\n}\n\nexport async function registerLogPersistProcess(input: {\n registryFilePath: string;\n service: string;\n process: string;\n}): Promise<void> {\n const now = new Date().toISOString();\n const record: LogPersistProcessRecord = {\n pid: process.pid,\n enabledAt: now,\n lastHeartbeatAt: now,\n };\n\n if (isLegacyRegistryFile(input.registryFilePath)) {\n await legacyStoreFor(input.registryFilePath).write({\n service: input.service,\n processes: {\n [input.process]: record,\n },\n });\n } else {\n await shardStoreFor(shardFilePath(input.registryFilePath, input.process)).write({\n service: input.service,\n pid: record.pid,\n enabledAt: record.enabledAt,\n lastHeartbeatAt: record.lastHeartbeatAt,\n });\n }\n\n persistLogger.info(\"registry process registered\", {\n registryFilePath: input.registryFilePath,\n service: input.service,\n process: input.process,\n pid: record.pid,\n });\n}\n\nexport async function heartbeatLogPersistProcess(input: { registryFilePath: string; process: string }): Promise<void> {\n if (isLegacyRegistryFile(input.registryFilePath)) {\n const current = await legacyStoreFor(input.registryFilePath).read();\n const existing = current.processes[input.process];\n if (existing == null) {\n persistLogger.warn(\"registry heartbeat skipped — process not registered\", {\n registryFilePath: input.registryFilePath,\n process: input.process,\n });\n return;\n }\n\n await legacyStoreFor(input.registryFilePath).write({\n processes: {\n [input.process]: {\n ...existing,\n lastHeartbeatAt: new Date().toISOString(),\n },\n },\n });\n return;\n }\n\n const store = shardStoreFor(shardFilePath(input.registryFilePath, input.process));\n const current = await store.read();\n if (current.pid === 0) {\n persistLogger.warn(\"registry heartbeat skipped — process not registered\", {\n registryFilePath: input.registryFilePath,\n process: input.process,\n });\n return;\n }\n\n await store.write({\n lastHeartbeatAt: new Date().toISOString(),\n });\n}\n\nexport async function unregisterLogPersistProcess(input: { registryFilePath: string; process: string }): Promise<void> {\n if (isLegacyRegistryFile(input.registryFilePath)) {\n const current = await legacyStoreFor(input.registryFilePath).read();\n const existing = current.processes[input.process];\n if (existing == null) {\n persistLogger.warn(\"registry unregister skipped — process not found\", {\n registryFilePath: input.registryFilePath,\n process: input.process,\n });\n return;\n }\n\n await legacyStoreFor(input.registryFilePath).write({\n processes: {\n [input.process]: {\n ...existing,\n pid: 0,\n lastHeartbeatAt: new Date(0).toISOString(),\n },\n },\n });\n\n persistLogger.info(\"registry process unregistered\", {\n registryFilePath: input.registryFilePath,\n process: input.process,\n });\n return;\n }\n\n const store = shardStoreFor(shardFilePath(input.registryFilePath, input.process));\n const current = await store.read();\n if (current.pid === 0) {\n persistLogger.warn(\"registry unregister skipped — process not found\", {\n registryFilePath: input.registryFilePath,\n process: input.process,\n });\n return;\n }\n\n await store.write({\n pid: 0,\n lastHeartbeatAt: new Date(0).toISOString(),\n });\n\n persistLogger.info(\"registry process unregistered\", {\n registryFilePath: input.registryFilePath,\n process: input.process,\n });\n}\n\nexport async function readLogPersistRegistry(registryFilePath: string): Promise<LogPersistRegistryState> {\n if (isLegacyRegistryFile(registryFilePath)) {\n return legacyStoreFor(registryFilePath).read();\n }\n return readShardedLogPersistRegistry(registryFilePath);\n}\n","import { type LogEntry, LogLevel } from \"./log-manager\";\nimport { DEFAULT_LOG_PERSIST_CONFIG, resolveLogPersistConfig } from \"./log-persist.config\";\nimport type {\n EnableLogPersistOptions,\n LogPersistConfig,\n LogPersistLane,\n LogPersistStats,\n} from \"./log-persist.interface\";\nimport { computeLogBatchIdempotencyKey } from \"./log-persist-batch-id\";\nimport { buildLogListDraft, estimateEntriesBytes, postLogBatch, takeEntriesWithinBytes } from \"./log-persist-flush\";\nimport { registerLogPersistOffer } from \"./log-persist-hook\";\nimport { isLogPersistInternalTopic, patchPersistLoggerScope, persistLogger } from \"./log-persist-logger\";\nimport { heartbeatLogPersistProcess } from \"./log-persist-registry\";\n\nconst FAST_RETRY_INTERVAL_MS = 5_000;\nconst HEARTBEAT_INTERVAL_MS = 30_000;\n\nfunction routeLane(level: LogLevel): LogPersistLane {\n if (level === LogLevel.CRITICAL) {\n return \"fast\";\n }\n if (level === LogLevel.ERROR || level === LogLevel.SUCCESS) {\n return \"medium\";\n }\n return \"slow\";\n}\n\nclass LogPersist {\n private static instance: LogPersist | null = null;\n\n private enabled = false;\n private draining = false;\n private service: string | null = null;\n private processName: string | null = null;\n private registryFilePath: string | null = null;\n private config: LogPersistConfig = DEFAULT_LOG_PERSIST_CONFIG;\n\n private fastQueue: LogEntry[] = [];\n private fastRetryQueue: LogEntry[] = [];\n private mediumQueue: LogEntry[] = [];\n private slowQueue: LogEntry[] = [];\n\n private mediumDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n private slowQueueStartedAt: number | null = null;\n private fastRetryTimer: ReturnType<typeof setTimeout> | null = null;\n private heartbeatTimer: ReturnType<typeof setInterval> | null = null;\n private lastHeartbeatAt = 0;\n\n private laneFlushing: Record<LogPersistLane, boolean> = {\n fast: false,\n medium: false,\n slow: false,\n };\n\n private consecutiveFailures: Record<LogPersistLane, number> = {\n fast: 0,\n medium: 0,\n slow: 0,\n };\n\n private lastFlushAt: Record<LogPersistLane, string | null> = {\n fast: null,\n medium: null,\n slow: null,\n };\n\n private lastError: string | null = null;\n private lastErrorAt: string | null = null;\n private shutdownHookInstalled = false;\n private shutdownPromise: Promise<void> | null = null;\n\n static getInstance(): LogPersist {\n LogPersist.instance ??= new LogPersist();\n return LogPersist.instance;\n }\n\n async enable(options: EnableLogPersistOptions): Promise<void> {\n if (this.enabled) {\n persistLogger.warn(\"log persist core enable skipped — already enabled\", {\n service: this.service,\n process: this.processName,\n });\n return;\n }\n\n this.service = options.service;\n this.processName = options.process;\n this.registryFilePath = options.registryFilePath ?? null;\n this.config = resolveLogPersistConfig(options.config);\n this.draining = false;\n this.shutdownPromise = null;\n this.consecutiveFailures = { fast: 0, medium: 0, slow: 0 };\n this.lastError = null;\n this.lastErrorAt = null;\n this.enabled = true;\n\n patchPersistLoggerScope({\n service: options.service,\n process: options.process,\n });\n\n persistLogger.info(\"log persist core enabled\", {\n service: options.service,\n process: options.process,\n registryFilePath: this.registryFilePath,\n config: this.config,\n pid: process.pid,\n });\n\n registerLogPersistOffer((entry) => {\n this.offer(entry);\n });\n\n if (this.registryFilePath != null) {\n const { registerLogPersistProcess } = await import(\"./log-persist-registry\");\n await registerLogPersistProcess({\n registryFilePath: this.registryFilePath,\n service: options.service,\n process: options.process,\n });\n this.startHeartbeat();\n }\n\n this.installShutdownHook();\n }\n\n async disable(): Promise<void> {\n if (!this.enabled && !this.draining) {\n persistLogger.debug(\"disable skipped — not enabled\");\n return;\n }\n\n persistLogger.info(\"log persist core disabling\", this.queueSnapshot());\n this.cancelMediumDebounce();\n this.stopHeartbeat();\n await this.shutdown();\n persistLogger.info(\"log persist core disabled\");\n }\n\n offer(entry: LogEntry): void {\n if (isLogPersistInternalTopic(entry.topic)) {\n return;\n }\n\n if (!this.enabled || this.draining || this.service == null || this.processName == null) {\n return;\n }\n\n void this.touchRegistryHeartbeat();\n\n const lane = routeLane(entry.level);\n\n if (lane === \"fast\") {\n this.fastQueue.push(entry);\n this.evictFastOverflow();\n void this.flushFast();\n return;\n }\n\n if (lane === \"medium\") {\n this.mediumQueue.push(entry);\n this.evictMediumOverflow();\n this.scheduleMediumFlush();\n return;\n }\n\n this.slowQueue.push(entry);\n if (this.slowQueueStartedAt == null) {\n this.slowQueueStartedAt = Date.now();\n }\n this.evictSlowOverflow();\n this.scheduleSlowFlush();\n }\n\n getStats(): LogPersistStats {\n return {\n enabled: this.enabled,\n draining: this.draining,\n service: this.service,\n process: this.processName,\n queues: {\n fast: this.fastQueue.length,\n fastRetry: this.fastRetryQueue.length,\n medium: this.mediumQueue.length,\n slow: this.slowQueue.length,\n },\n queueBytes: {\n fast: estimateEntriesBytes(this.fastQueue),\n fastRetry: estimateEntriesBytes(this.fastRetryQueue),\n medium: estimateEntriesBytes(this.mediumQueue),\n slow: estimateEntriesBytes(this.slowQueue),\n },\n mediumDebouncePending: this.mediumDebounceTimer != null,\n laneFlushing: { ...this.laneFlushing },\n consecutiveFailures: { ...this.consecutiveFailures },\n config: this.config,\n lastFlushAt: { ...this.lastFlushAt },\n lastError: this.lastError,\n lastErrorAt: this.lastErrorAt,\n };\n }\n\n async shutdown(): Promise<void> {\n if (this.shutdownPromise != null) {\n return this.shutdownPromise;\n }\n\n this.shutdownPromise = this.shutdownInner();\n return this.shutdownPromise;\n }\n\n private async shutdownInner(): Promise<void> {\n if (this.draining) {\n return;\n }\n\n this.draining = true;\n this.enabled = false;\n registerLogPersistOffer(null);\n\n persistLogger.info(\"shutdown flush started\", this.queueSnapshot());\n\n this.cancelMediumDebounce();\n await this.drainQueues(this.config.shutdownDrainTimeoutMs);\n\n if (this.registryFilePath != null && this.processName != null) {\n const { unregisterLogPersistProcess } = await import(\"./log-persist-registry\");\n await unregisterLogPersistProcess({\n registryFilePath: this.registryFilePath,\n process: this.processName,\n });\n }\n\n if (this.hasQueued()) {\n persistLogger.warn(\"shutdown drain incomplete — queued logs dropped\", {\n ...this.queueSnapshot(),\n shutdownDrainTimeoutMs: this.config.shutdownDrainTimeoutMs,\n });\n this.fastQueue = [];\n this.fastRetryQueue = [];\n this.mediumQueue = [];\n this.slowQueue = [];\n this.slowQueueStartedAt = null;\n }\n\n persistLogger.info(\"shutdown flush completed\", this.queueSnapshot());\n }\n\n private hasQueued(): boolean {\n return (\n this.fastQueue.length > 0 ||\n this.fastRetryQueue.length > 0 ||\n this.mediumQueue.length > 0 ||\n this.slowQueue.length > 0\n );\n }\n\n private async drainQueues(timeoutMs: number): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n while (this.hasQueued() && Date.now() < deadline) {\n await this.flushFast();\n await this.flushMedium();\n await this.flushSlow();\n }\n }\n\n private recordLaneError(lane: LogPersistLane, error: unknown): void {\n const message = error instanceof Error ? error.message : String(error);\n this.lastError = message;\n this.lastErrorAt = new Date().toISOString();\n this.consecutiveFailures[lane] += 1;\n }\n\n private recordLaneSuccess(lane: LogPersistLane): void {\n this.lastError = null;\n this.consecutiveFailures[lane] = 0;\n }\n\n private queueSnapshot(): Record<string, unknown> {\n return {\n queues: {\n fast: this.fastQueue.length,\n fastRetry: this.fastRetryQueue.length,\n medium: this.mediumQueue.length,\n slow: this.slowQueue.length,\n },\n queueBytes: {\n fast: estimateEntriesBytes(this.fastQueue),\n fastRetry: estimateEntriesBytes(this.fastRetryQueue),\n medium: estimateEntriesBytes(this.mediumQueue),\n slow: estimateEntriesBytes(this.slowQueue),\n },\n laneFlushing: { ...this.laneFlushing },\n consecutiveFailures: { ...this.consecutiveFailures },\n lastError: this.lastError,\n };\n }\n\n private installShutdownHook(): void {\n if (this.shutdownHookInstalled) {\n return;\n }\n this.shutdownHookInstalled = true;\n\n const handler = (signal: NodeJS.Signals) => {\n persistLogger.info(\"shutdown signal received\", { signal });\n void this.shutdown();\n };\n process.once(\"SIGTERM\", handler);\n process.once(\"SIGINT\", handler);\n }\n\n private startHeartbeat(): void {\n this.stopHeartbeat();\n this.heartbeatTimer = setInterval(() => {\n void this.touchRegistryHeartbeat(true);\n }, HEARTBEAT_INTERVAL_MS);\n this.heartbeatTimer.unref?.();\n }\n\n private stopHeartbeat(): void {\n if (this.heartbeatTimer != null) {\n clearInterval(this.heartbeatTimer);\n this.heartbeatTimer = null;\n }\n }\n\n private async touchRegistryHeartbeat(force = false): Promise<void> {\n if (this.registryFilePath == null || this.processName == null) {\n return;\n }\n const now = Date.now();\n if (!force && now - this.lastHeartbeatAt < HEARTBEAT_INTERVAL_MS) {\n return;\n }\n this.lastHeartbeatAt = now;\n await heartbeatLogPersistProcess({\n registryFilePath: this.registryFilePath,\n process: this.processName,\n });\n }\n\n private scheduleMediumFlush(): void {\n const { debounceMs, maxEntries, maxBytes } = this.config.medium;\n const queueBytes = estimateEntriesBytes(this.mediumQueue);\n if (this.mediumQueue.length >= maxEntries || queueBytes >= maxBytes) {\n persistLogger.warn(\"medium flush scheduled — threshold\", {\n reason: this.mediumQueue.length >= maxEntries ? \"maxEntries\" : \"maxBytes\",\n queueLength: this.mediumQueue.length,\n maxEntries,\n queueBytes,\n maxBytes,\n });\n this.cancelMediumDebounce();\n void this.flushMedium();\n return;\n }\n\n if (this.mediumDebounceTimer == null && this.mediumQueue.length > 0) {\n persistLogger.debug(\"medium flush debounce scheduled\", {\n debounceMs,\n queueLength: this.mediumQueue.length,\n queueBytes,\n });\n this.mediumDebounceTimer = setTimeout(() => {\n this.mediumDebounceTimer = null;\n persistLogger.debug(\"medium flush debounce fired\");\n void this.flushMedium();\n }, debounceMs);\n this.mediumDebounceTimer.unref?.();\n }\n }\n\n private cancelMediumDebounce(): void {\n if (this.mediumDebounceTimer != null) {\n clearTimeout(this.mediumDebounceTimer);\n this.mediumDebounceTimer = null;\n persistLogger.debug(\"medium flush debounce cancelled\");\n }\n }\n\n private scheduleSlowFlush(): void {\n const { maxEntries, maxBytes, maxAgeMs } = this.config.slow;\n const queueBytes = estimateEntriesBytes(this.slowQueue);\n const ageMs = this.slowQueueStartedAt != null ? Date.now() - this.slowQueueStartedAt : 0;\n if (this.slowQueue.length >= maxEntries || queueBytes >= maxBytes || ageMs >= maxAgeMs) {\n persistLogger.debug(\"slow flush scheduled — threshold\", {\n reason:\n this.slowQueue.length >= maxEntries\n ? \"maxEntries\"\n : queueBytes >= maxBytes\n ? \"maxBytes\"\n : \"maxAgeMs\",\n queueLength: this.slowQueue.length,\n maxEntries,\n queueBytes,\n maxBytes,\n ageMs,\n maxAgeMs,\n });\n void this.flushSlow();\n }\n }\n\n private evictFastOverflow(): void {\n const { maxBufferEntries } = this.config.fast;\n let evicted = 0;\n while (this.fastQueue.length + this.fastRetryQueue.length > maxBufferEntries) {\n const removed = this.fastQueue.length > 0 ? this.fastQueue.shift() : this.fastRetryQueue.shift();\n evicted += 1;\n persistLogger.warn(\"fast queue overflow — evicted entry\", {\n evictedLevel: removed?.level,\n evictedTopic: removed?.topic,\n fromRetryQueue: this.fastQueue.length === 0,\n maxBufferEntries,\n });\n }\n if (evicted > 0) {\n persistLogger.warn(\"fast queue overflow summary\", { evicted, maxBufferEntries });\n }\n }\n\n private evictMediumOverflow(): void {\n const { maxBufferEntries } = this.config.medium;\n let evicted = 0;\n while (this.mediumQueue.length > maxBufferEntries) {\n const successIndex = this.mediumQueue.findIndex((entry) => entry.level === LogLevel.SUCCESS);\n const removed = successIndex >= 0 ? this.mediumQueue.splice(successIndex, 1)[0] : this.mediumQueue.shift();\n evicted += 1;\n persistLogger.warn(\"medium queue overflow — evicted entry\", {\n evictedLevel: removed?.level,\n evictedTopic: removed?.topic,\n queueLength: this.mediumQueue.length,\n maxBufferEntries,\n });\n }\n if (evicted > 0) {\n persistLogger.warn(\"medium queue overflow summary\", {\n evicted,\n queueLength: this.mediumQueue.length,\n maxBufferEntries,\n });\n }\n }\n\n private evictSlowOverflow(): void {\n const { maxBufferEntries } = this.config.slow;\n let evicted = 0;\n while (this.slowQueue.length > maxBufferEntries) {\n const debugIndex = this.slowQueue.findIndex((entry) => entry.level === LogLevel.DEBUG);\n const removed = debugIndex >= 0 ? this.slowQueue.splice(debugIndex, 1)[0] : this.slowQueue.shift();\n evicted += 1;\n persistLogger.warn(\"slow queue overflow — evicted entry\", {\n evictedLevel: removed?.level,\n evictedTopic: removed?.topic,\n queueLength: this.slowQueue.length,\n maxBufferEntries,\n });\n }\n if (evicted > 0) {\n persistLogger.warn(\"slow queue overflow summary\", {\n evicted,\n queueLength: this.slowQueue.length,\n maxBufferEntries,\n });\n }\n if (this.slowQueue.length === 0) {\n this.slowQueueStartedAt = null;\n }\n }\n\n private async flushFast(): Promise<void> {\n if (this.laneFlushing.fast) {\n persistLogger.debug(\"fast flush skipped — already flushing\");\n return;\n }\n if (this.service == null || this.processName == null) {\n return;\n }\n\n this.laneFlushing.fast = true;\n try {\n while (this.fastQueue.length > 0 || this.fastRetryQueue.length > 0) {\n const fromRetry = this.fastQueue.length === 0;\n const entry = this.fastQueue.shift() ?? this.fastRetryQueue.shift();\n if (entry == null) {\n break;\n }\n\n const idempotencyKey = computeLogBatchIdempotencyKey({\n service: this.service,\n process: this.processName,\n lane: \"fast\",\n entries: [entry],\n });\n\n try {\n const draft = buildLogListDraft({\n service: this.service,\n process: this.processName,\n lane: \"fast\",\n idempotencyKey,\n entries: [entry],\n });\n persistLogger.debug(\"fast flush posting batch\", {\n idempotencyKey,\n fromRetry,\n level: entry.level,\n topic: entry.topic,\n });\n await postLogBatch(draft, this.config.postTimeoutMs);\n this.lastFlushAt.fast = new Date().toISOString();\n this.recordLaneSuccess(\"fast\");\n persistLogger.info(\"fast lane flushed\", {\n idempotencyKey,\n level: entry.level,\n topic: entry.topic,\n fastRetryRemaining: this.fastRetryQueue.length,\n });\n } catch (error) {\n this.recordLaneError(\"fast\", error);\n this.fastRetryQueue.push(entry);\n persistLogger.error(\"fast flush failed — queued for retry\", {\n idempotencyKey,\n error: this.lastError,\n retryInMs: FAST_RETRY_INTERVAL_MS,\n fastRetryQueue: this.fastRetryQueue.length,\n });\n this.scheduleFastRetry();\n break;\n }\n }\n } finally {\n this.laneFlushing.fast = false;\n }\n }\n\n private scheduleFastRetry(): void {\n if (this.fastRetryTimer != null) {\n return;\n }\n persistLogger.warn(\"fast flush retry scheduled\", { retryInMs: FAST_RETRY_INTERVAL_MS });\n this.fastRetryTimer = setTimeout(() => {\n this.fastRetryTimer = null;\n persistLogger.debug(\"fast flush retry timer fired\");\n void this.flushFast();\n }, FAST_RETRY_INTERVAL_MS);\n this.fastRetryTimer.unref?.();\n }\n\n private async flushMedium(): Promise<void> {\n if (this.laneFlushing.medium) {\n persistLogger.debug(\"medium flush skipped — already flushing\");\n return;\n }\n if (this.mediumQueue.length === 0) {\n return;\n }\n if (this.service == null || this.processName == null) {\n return;\n }\n\n this.laneFlushing.medium = true;\n try {\n while (this.mediumQueue.length > 0) {\n const batch = takeEntriesWithinBytes(this.mediumQueue, this.config.medium.maxBytes);\n if (batch.length === 0) {\n break;\n }\n\n const idempotencyKey = computeLogBatchIdempotencyKey({\n service: this.service,\n process: this.processName,\n lane: \"medium\",\n entries: batch,\n });\n const batchBytes = estimateEntriesBytes(batch);\n\n try {\n persistLogger.debug(\"medium flush posting batch\", {\n idempotencyKey,\n batchSize: batch.length,\n batchBytes,\n queueRemaining: this.mediumQueue.length,\n });\n const draft = buildLogListDraft({\n service: this.service,\n process: this.processName,\n lane: \"medium\",\n idempotencyKey,\n entries: batch,\n });\n await postLogBatch(draft, this.config.postTimeoutMs);\n this.mediumQueue.splice(0, batch.length);\n this.lastFlushAt.medium = new Date().toISOString();\n this.recordLaneSuccess(\"medium\");\n persistLogger.info(\"medium lane flushed\", {\n idempotencyKey,\n batchSize: batch.length,\n batchBytes,\n queueRemaining: this.mediumQueue.length,\n });\n } catch (error) {\n this.recordLaneError(\"medium\", error);\n persistLogger.error(\"medium flush failed — entries retained\", {\n idempotencyKey,\n batchSize: batch.length,\n batchBytes,\n error: this.lastError,\n queueRemaining: this.mediumQueue.length,\n });\n this.scheduleMediumFlush();\n break;\n }\n }\n } finally {\n this.laneFlushing.medium = false;\n }\n\n if (this.mediumQueue.length > 0 && !this.laneFlushing.medium) {\n this.scheduleMediumFlush();\n }\n }\n\n private async flushSlow(): Promise<void> {\n if (this.laneFlushing.slow) {\n persistLogger.debug(\"slow flush skipped — already flushing\");\n return;\n }\n if (this.slowQueue.length === 0) {\n return;\n }\n if (this.service == null || this.processName == null) {\n return;\n }\n\n this.laneFlushing.slow = true;\n try {\n while (this.slowQueue.length > 0) {\n const batch = takeEntriesWithinBytes(this.slowQueue, this.config.slow.maxBytes);\n if (batch.length === 0) {\n break;\n }\n\n const idempotencyKey = computeLogBatchIdempotencyKey({\n service: this.service,\n process: this.processName,\n lane: \"slow\",\n entries: batch,\n });\n const batchBytes = estimateEntriesBytes(batch);\n\n try {\n persistLogger.debug(\"slow flush posting batch\", {\n idempotencyKey,\n batchSize: batch.length,\n batchBytes,\n queueRemaining: this.slowQueue.length,\n });\n const draft = buildLogListDraft({\n service: this.service,\n process: this.processName,\n lane: \"slow\",\n idempotencyKey,\n entries: batch,\n });\n await postLogBatch(draft, this.config.postTimeoutMs);\n this.slowQueue.splice(0, batch.length);\n this.lastFlushAt.slow = new Date().toISOString();\n this.recordLaneSuccess(\"slow\");\n persistLogger.info(\"slow lane flushed\", {\n idempotencyKey,\n batchSize: batch.length,\n batchBytes,\n queueRemaining: this.slowQueue.length,\n });\n } catch (error) {\n this.recordLaneError(\"slow\", error);\n persistLogger.error(\"slow flush failed — entries retained\", {\n idempotencyKey,\n batchSize: batch.length,\n batchBytes,\n error: this.lastError,\n queueRemaining: this.slowQueue.length,\n });\n this.scheduleSlowFlush();\n break;\n }\n }\n\n if (this.slowQueue.length === 0) {\n this.slowQueueStartedAt = null;\n }\n } finally {\n this.laneFlushing.slow = false;\n }\n\n if (this.slowQueue.length > 0 && !this.laneFlushing.slow) {\n this.scheduleSlowFlush();\n }\n }\n}\n\nexport { LogPersist };\n","import { resolve } from \"node:path\";\nimport { envBool } from \"../../node/env/env-parsers\";\nimport { readEnv, requireEnv } from \"../../node/env/require-env\";\nimport { pollUntil } from \"../../node/readiness\";\nimport { createLogger } from \"./create-logger\";\nimport { LogPersist } from \"./log-persist\";\nimport {\n logPersistConfigFromEnv,\n logPersistEnabledFromEnv,\n logPersistProcessFromEnv,\n logPersistRegistryDirFromEnv,\n logPersistServiceFromEnv,\n resolveLogPersistConfig,\n} from \"./log-persist.config\";\nimport type {\n EnableLogPersistOptions,\n EnsureLogPersistFromEnvOptions,\n LogPersistReadySnapshot,\n LogPersistStats,\n WaitForLogPersistReadyOptions,\n} from \"./log-persist.interface\";\nimport { registerLogPersistOffer } from \"./log-persist-hook\";\nimport { LOG_PERSIST_TOPIC, persistLogger } from \"./log-persist-logger\";\nimport { defaultLogPersistRegistryPath, readLogPersistRegistry } from \"./log-persist-registry\";\n\nexport { logPersistEnabledFromEnv };\n\nfunction resolveRegistryFilePath(explicit?: string): string {\n if (explicit != null && explicit.trim() !== \"\") {\n return resolve(explicit);\n }\n const dir = logPersistRegistryDirFromEnv();\n if (dir == null) {\n throw new Error(\n \"[LogPersist] registry path required: set registryFilePath option or LOG_PERSIST_REGISTRY_DIR / RUNTIME_DATA_DIR\",\n );\n }\n return defaultLogPersistRegistryPath(resolve(dir));\n}\n\nexport async function enableLogPersist(options: EnableLogPersistOptions): Promise<void> {\n const registryFilePath = options.registryFilePath != null ? resolve(options.registryFilePath) : undefined;\n const resolvedRegistry = registryFilePath ?? resolveRegistryFilePath();\n\n const envConfig = logPersistConfigFromEnv();\n await LogPersist.getInstance().enable({\n ...options,\n registryFilePath: resolvedRegistry,\n config: resolveLogPersistConfig({\n fast: { ...envConfig.fast, ...options.config?.fast },\n medium: { ...envConfig.medium, ...options.config?.medium },\n slow: { ...envConfig.slow, ...options.config?.slow },\n postTimeoutMs: options.config?.postTimeoutMs ?? envConfig.postTimeoutMs,\n shutdownDrainTimeoutMs: options.config?.shutdownDrainTimeoutMs ?? envConfig.shutdownDrainTimeoutMs,\n }),\n });\n}\n\nexport async function disableLogPersist(): Promise<void> {\n await LogPersist.getInstance().disable();\n}\n\nexport function getLogPersistStats(): LogPersistStats {\n return LogPersist.getInstance().getStats();\n}\n\n/**\n * Enable log persistence when LOG_PERSIST_ENABLED=true.\n * `process` / `service` can be passed explicitly or via LOG_PERSIST_PROCESS / LOG_PERSIST_SERVICE.\n */\nexport async function ensureLogPersistFromEnv(options: EnsureLogPersistFromEnvOptions = {}): Promise<boolean> {\n if (!logPersistEnabledFromEnv()) {\n registerLogPersistOffer(null);\n return false;\n }\n\n const service = options.service ?? logPersistServiceFromEnv();\n const processName = options.process ?? logPersistProcessFromEnv();\n if (service == null || service === \"\") {\n throw new Error(\"[LogPersist] LOG_PERSIST_SERVICE is required when LOG_PERSIST_ENABLED=true\");\n }\n if (processName == null || processName === \"\") {\n throw new Error(\n \"[LogPersist] LOG_PERSIST_PROCESS is required when LOG_PERSIST_ENABLED=true (or pass process option)\",\n );\n }\n\n const registryFilePath =\n options.registryFilePath != null ? resolve(options.registryFilePath) : resolveRegistryFilePath();\n\n await enableLogPersist({\n service,\n process: processName,\n registryFilePath,\n config: options.config,\n });\n\n const lifecycleLogger = createLogger({ module: \"log-persist\" });\n lifecycleLogger.info(\"log persist enabled from env\", {\n topic: LOG_PERSIST_TOPIC,\n data: { service, process: processName, registryFilePath },\n });\n\n return true;\n}\n\n/**\n * Preload guard: when persistence is enabled, required env must be present before app code runs.\n */\nexport function validateLogPersistPreloadEnv(env: NodeJS.ProcessEnv = process.env): void {\n if (!envBool(\"LOG_PERSIST_ENABLED\", false, env)) {\n return;\n }\n\n const missing: string[] = [];\n if (readEnv(\"LOG_PERSIST_SERVICE\", env) == null) {\n missing.push(\"LOG_PERSIST_SERVICE\");\n }\n const registryDir = logPersistRegistryDirFromEnv(env);\n if (registryDir == null) {\n missing.push(\"LOG_PERSIST_REGISTRY_DIR or RUNTIME_DATA_DIR\");\n }\n\n if (missing.length > 0) {\n throw new Error(`[LogPersist] preload env incomplete: ${missing.join(\", \")}`);\n }\n}\n\nfunction evaluateLogPersistReady(\n state: Awaited<ReturnType<typeof readLogPersistRegistry>>,\n expectedProcesses: string[],\n staleMs: number,\n now: number,\n): LogPersistReadySnapshot {\n const missing: string[] = [];\n const stale: string[] = [];\n const registered: string[] = [];\n\n for (const processName of expectedProcesses) {\n const record = state.processes[processName];\n if (record == null) {\n missing.push(processName);\n continue;\n }\n\n const heartbeatAt = Date.parse(record.lastHeartbeatAt);\n if (!Number.isFinite(heartbeatAt) || now - heartbeatAt > staleMs) {\n stale.push(processName);\n continue;\n }\n\n registered.push(processName);\n }\n\n return {\n ok: missing.length === 0 && stale.length === 0,\n missing,\n stale,\n registered,\n };\n}\n\n/**\n * Wait until every expected process has registered in the shared registry with a fresh heartbeat.\n * Call from the service main process after spawning children.\n */\nexport async function waitForLogPersistReady(options: WaitForLogPersistReadyOptions): Promise<LogPersistReadySnapshot> {\n const timeoutMs = options.timeoutMs ?? 60_000;\n const pollIntervalMs = options.pollIntervalMs ?? 500;\n const staleMs = options.staleMs ?? 90_000;\n\n let last: LogPersistReadySnapshot = {\n ok: false,\n missing: [...options.expectedProcesses],\n stale: [],\n registered: [],\n };\n\n try {\n await pollUntil({\n intervalMs: pollIntervalMs,\n timeoutMs,\n until: async () => {\n const state = await readLogPersistRegistry(options.registryFilePath);\n if (state.service !== options.service) {\n last = {\n ok: false,\n missing: options.expectedProcesses,\n stale: [],\n registered: [],\n };\n return false;\n }\n last = evaluateLogPersistReady(state, options.expectedProcesses, staleMs, Date.now());\n return last.ok;\n },\n });\n } catch {\n persistLogger.warn(\"waitForLogPersistReady timed out\", {\n timeoutMs,\n expectedProcesses: options.expectedProcesses,\n ...last,\n });\n }\n\n return last;\n}\n\nexport async function snapshotLogPersistReady(options: {\n registryFilePath: string;\n service: string;\n expectedProcesses: string[];\n staleMs?: number;\n}): Promise<LogPersistReadySnapshot> {\n const state = await readLogPersistRegistry(options.registryFilePath);\n return evaluateLogPersistReady(state, options.expectedProcesses, options.staleMs ?? 90_000, Date.now());\n}\n\nexport function resolveLogPersistRegistryPath(registryDir?: string): string {\n const dir = registryDir ?? logPersistRegistryDirFromEnv();\n if (dir == null) {\n requireEnv(\"LOG_PERSIST_REGISTRY_DIR\");\n }\n return defaultLogPersistRegistryPath(resolve(dir ?? \"\"));\n}\n"],"names":[],"mappings":";;;;;;;;AAAM,SAAU,OAAO,CAAC,IAAY,EAAE,GAAA,GAAyB,OAAO,CAAC,GAAG,EAAA;IACtE,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE;IAC/B,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;AAC/B,QAAA,OAAO,SAAS;IACpB;AACA,IAAA,OAAO,KAAK;AAChB;AAEM,SAAU,UAAU,CAAC,IAAY,EAAE,GAAA,GAAyB,OAAO,CAAC,GAAG,EAAA;IACzE,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AAChC,IAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,QAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,CAAA,CAAE,CAAC;IACrE;AACA,IAAA,OAAO,KAAK;AAChB;;SCNgB,MAAM,CAAC,IAAY,EAAE,YAAoB,EAAE,OAAuB,EAAA;IAC9E,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AAC9B,IAAA,IAAI,GAAG,IAAI,IAAI,EAAE;AACb,QAAA,OAAO,YAAY;IACvB;AAEA,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;IACzB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;QAC1B,MAAM,IAAI,KAAK,CAAC,CAAA,QAAA,EAAW,IAAI,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAC;IAC9C;AAEA,IAAA,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG;IACxB,IAAI,GAAG,IAAI,IAAI,IAAI,KAAK,GAAG,GAAG,EAAE;QAC5B,MAAM,IAAI,KAAK,CAAC,CAAA,QAAA,EAAW,IAAI,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAC;IAC9C;AAEA,IAAA,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG;IACxB,IAAI,GAAG,IAAI,IAAI,IAAI,KAAK,GAAG,GAAG,EAAE;QAC5B,MAAM,IAAI,KAAK,CAAC,CAAA,QAAA,EAAW,IAAI,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAC;IAC9C;AAEA,IAAA,OAAO,KAAK;AAChB;SAEgB,KAAK,CAAC,IAAY,EAAE,SAAiB,EAAE,OAAuB,EAAA;AAC1E,IAAA,OAAO,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AAC1E;SAEgB,OAAO,CAAC,WAAW,GAAG,IAAI,EAAE,OAA6C,EAAA;AACrF,IAAA,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,MAAM;AACxC,IAAA,OAAO,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AAC1E;SASgB,SAAS,CAAC,IAAY,EAAE,YAAoB,EAAE,OAA0B,EAAA;IACpF,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AAC9B,IAAA,IAAI,GAAG,IAAI,IAAI,EAAE;AACb,QAAA,OAAO,YAAY;IACvB;AAEA,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;IACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QACzB,MAAM,IAAI,KAAK,CAAC,CAAA,QAAA,EAAW,IAAI,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAC;IAC9C;AAEA,IAAA,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG;IACxB,MAAM,QAAQ,GAAG,OAAO,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK;IACpE,IAAI,GAAG,IAAI,IAAI,IAAI,QAAQ,GAAG,GAAG,EAAE;QAC/B,MAAM,IAAI,KAAK,CAAC,CAAA,QAAA,EAAW,IAAI,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAC;IAC9C;AAEA,IAAA,OAAO,QAAQ;AACnB;AAEM,SAAU,OAAO,CAAC,IAAY,EAAE,YAAY,GAAG,KAAK,EAAE,GAAA,GAAyB,OAAO,CAAC,GAAG,EAAA;IAC5F,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE;AAC7C,IAAA,IAAI,GAAG,IAAI,IAAI,EAAE;AACb,QAAA,OAAO,YAAY;IACvB;IACA,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,KAAK;AACzD;;ACzEA,MAAM,iBAAiB,GAAG,CAAC,YAAY,EAAE,MAAM,CAAU;AACzD,MAAM,cAAc,GAAG,CAAC,WAAW,CAAU;AAEtC,MAAM,2BAA2B,GAAG;AACpC,MAAM,wBAAwB,GAAG;AACjC,MAAM,aAAa,GAAG;AAO7B;AACM,SAAU,qBAAqB,CAAC,OAAsC,EAAA;IACxE,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG;IACvC,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,OAAO,CAAC,IAAI;IAC1C,MAAM,OAAO,GAAG,GAAG,CAAC,2BAA2B,CAAC,EAAE,IAAI,EAAE;IACxD,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,KAAK,EAAE,EAAE;AACnC,QAAA,OAAO,OAAO;IAClB;AACA,IAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AAC9B,QAAA,OAAO,wBAAwB;IACnC;AACA,IAAA,OAAO,SAAS;AACpB;AAEA;AACM,SAAU,sBAAsB,CAAC,OAAgB,EAAA;AACnD,IAAA,IAAI,OAAO,KAAK,wBAAwB,EAAE;AACtC,QAAA,OAAO,cAAc;IACzB;AACA,IAAA,OAAO,iBAAiB;AAC5B;AAEA;AACM,SAAU,qBAAqB,CACjC,GAAA,GAAyB,OAAO,CAAC,GAAG,EACpC,IAAA,GAA0B,OAAO,CAAC,IAAI,EAAA;IAEtC,IAAI,GAAG,CAAC,2BAA2B,CAAC,EAAE,IAAI,EAAE,EAAE;QAC1C;IACJ;AACA,IAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AAC9B,QAAA,GAAG,CAAC,2BAA2B,CAAC,GAAG,wBAAwB;IAC/D;AACJ;AAUA,SAAS,WAAW,CAAC,KAAa,EAAA;IAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;AAC5C;AAEA;AACM,SAAU,YAAY,CAAC,IAAY,EAAA;AACrC,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;IAC3B,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAC3C,QAAA,OAAO,IAAI;IACf;IAEA,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;AAC/B,IAAA,IAAI,EAAE,KAAK,EAAE,EAAE;AACX,QAAA,OAAO,IAAI;IACf;AAEA,IAAA,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;AACvC,IAAA,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;IACxC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE;AAC3C;AAEM,SAAU,mBAAmB,CAAC,OAAe,EAAE,GAAsB,EAAA;IACvE,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACpC,QAAA,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;YAChB;QACJ;AACA,QAAA,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE;YACnD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK;QAClC;IACJ;AACJ;AAEM,SAAU,YAAY,CAAC,QAAgB,EAAE,GAAsB,EAAA;AACjE,IAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QACvB;IACJ;IACA,mBAAmB,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC;AAC5D;AAEA;;;;AAIG;AACG,SAAU,YAAY,CAAC,IAAY,EAAE,OAA6B,EAAA;IACpE,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG;AACvC,IAAA,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,sBAAsB,CAAC,qBAAqB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AAEtF,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACtB,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC;IAC1C;AAEA,IAAA,OAAO,EAAE,SAAS,IAAI;AAC1B;;AC5GA;;;AAGG;SACa,4BAA4B,CAAC,aAAqB,EAAE,YAAY,GAAG,IAAI,EAAA;AACnF,IAAA,OAAO,OAAO,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;AACvE;AAEA;;;AAGG;AACG,SAAU,+BAA+B,CAAC,aAAqB,EAAE,WAAmB,EAAA;IACtF,IAAI,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;AAC/C,IAAA,SAAS;QACL,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC;AACpD,QAAA,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE;AAC7B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAsB;AAClF,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE;AAC1B,gBAAA,OAAO,GAAG;YACd;QACJ;AACA,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;AAC3B,QAAA,IAAI,MAAM,KAAK,GAAG,EAAE;YAChB;QACJ;QACA,GAAG,GAAG,MAAM;IAChB;IACA,MAAM,IAAI,KAAK,CAAC,CAAA,iCAAA,EAAoC,WAAW,CAAA,OAAA,EAAU,aAAa,CAAA,CAAE,CAAC;AAC7F;;ACjCA;AACA,MAAM,WAAW,GAAG,IAAI,GAAG,EAA4B;AAEjD,SAAU,wBAAwB,CAAI,QAAgB,EAAE,SAA2B,EAAA;AACrF,IAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE;IAC/D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;IAChD,WAAW,CAAC,GAAG,CACX,QAAQ,EACR,IAAI,CAAC,IAAI,CACL,MAAM,SAAS,EACf,MAAM,SAAS,CAClB,CACJ;AACD,IAAA,OAAO,IAAI;AACf;;ACUA,SAAS,eAAe,CACpB,QAAW,EACX,OAA+B,EAC/B,KAAiB,EACjB,UAAuB,EAAA;AAEvB,IAAA,MAAM,MAAM,GAAG;AACX,QAAA,GAAG,QAAQ;AACX,QAAA,GAAG,OAAO;AACV,QAAA,GAAG,KAAK;KACN;AAEN,IAAA,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;AAC1B,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC;QACnC,IAAI,aAAa,IAAI,IAAI,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;YAC3D,MAAmC,CAAC,GAAG,CAAC,GAAG;AACxC,gBAAA,GAAG,aAAa;AAChB,gBAAA,GAAI,OAAO,GAAG,GAAG,CAAwB;gBACzC,GAAI,KAAK,CAAC,GAAG,CAAwB;aACxC;QACL;IACJ;AAEA,IAAA,OAAO,MAAM;AACjB;AAEA,eAAe,eAAe,CAAC,QAAgB,EAAE,IAAa,EAAA;AAC1D,IAAA,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACnD,IAAA,MAAM,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;AACpD,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AACnB,IAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,OAAO,CAAC,GAAG,CAAA,CAAA,EAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;AACnF,IAAA,IAAI;QACA,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;AAC1C,QAAA,MAAM,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpC;IAAE,OAAO,KAAK,EAAE;AACZ,QAAA,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;AAC7C,QAAA,MAAM,KAAK;IACf;AACJ;AAEA;AACM,SAAU,wBAAwB,CACpC,OAA+C,EAAA;AAE/C,IAAA,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,GAAG,EAAU,EAAE,YAAY,EAAE,GAAG,OAAO;IAEjF,SAAS,cAAc,CAAC,KAAQ,EAAA;AAC5B,QAAA,IAAI,YAAY,IAAI,IAAI,EAAE;AACtB,YAAA,OAAO,KAAK;QAChB;QACA,OAAO;AACH,YAAA,GAAG,KAAK;YACR,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAC3C;IACL;AAEA,IAAA,eAAe,YAAY,GAAA;AACvB,QAAA,IAAI;YACA,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe;YAC5C,OAAO,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC;QAChE;QAAE,OAAO,KAAK,EAAE;AACZ,YAAA,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACpD,OAAO,eAAe,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC;YAC5D;AACA,YAAA,IAAI,KAAK,YAAY,WAAW,EAAE;AAC9B,gBAAA,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;gBAC7C,OAAO,eAAe,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC;YAC5D;AACA,YAAA,MAAM,KAAK;QACf;IACJ;IAEA,OAAO;QACH,IAAI,GAAA;YACA,OAAO,YAAY,EAAE;QACzB,CAAC;AAED,QAAA,KAAK,CAAC,KAA4B,EAAA;AAC9B,YAAA,OAAO,wBAAwB,CAAC,QAAQ,EAAE,YAAW;AACjD,gBAAA,MAAM,OAAO,GAAG,MAAM,YAAY,EAAE;AACpC,gBAAA,MAAM,IAAI,GAAG,cAAc,CAAC,eAAe,CAAC,YAAY,EAAE,OAAO,EAAE,KAAmB,EAAE,UAAU,CAAC,CAAC;AACpG,gBAAA,MAAM,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC;AACrC,gBAAA,OAAO,IAAI;AACf,YAAA,CAAC,CAAC;QACN,CAAC;QAED,KAAK,GAAA;AACD,YAAA,OAAO,wBAAwB,CAAC,QAAQ,EAAE,YAAW;gBACjD,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,GAAG,YAAY,EAAE,CAAC;AAChD,gBAAA,MAAM,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC;AACrC,gBAAA,OAAO,IAAI;AACf,YAAA,CAAC,CAAC;QACN,CAAC;KACJ;AACL;;ACvHA,SAAS,KAAK,CAAC,EAAU,EAAA;AACrB,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC5D;AAQA;;;AAGG;AACI,eAAe,SAAS,CAAC,OAAyB,EAAA;AACrD,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,GAAG;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS;AAE/C,IAAA,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE;AAC1B,QAAA,IAAI,MAAM,OAAO,CAAC,KAAK,EAAE,EAAE;YACvB;QACJ;AACA,QAAA,MAAM,KAAK,CAAC,UAAU,CAAC;IAC3B;IAEA,MAAM,IAAI,KAAK,CAAC,CAAA,wBAAA,EAA2B,OAAO,CAAC,SAAS,CAAA,EAAA,CAAI,CAAC;AACrE;;ACvBO,MAAM,0BAA0B,GAAqB;AACxD,IAAA,IAAI,EAAE;AACF,QAAA,gBAAgB,EAAE,GAAG;AACxB,KAAA;AACD,IAAA,MAAM,EAAE;AACJ,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,GAAG,GAAG,IAAI;AACpB,QAAA,gBAAgB,EAAE,KAAK;AAC1B,KAAA;AACD,IAAA,IAAI,EAAE;AACF,QAAA,UAAU,EAAE,GAAG;QACf,QAAQ,EAAE,GAAG,GAAG,IAAI;AACpB,QAAA,QAAQ,EAAE,OAAO;AACjB,QAAA,gBAAgB,EAAE,KAAK;AAC1B,KAAA;AACD,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,sBAAsB,EAAE,MAAM;CACjC;AAEK,SAAU,uBAAuB,CAAC,OAAmC,EAAA;IACvE,MAAM,QAAQ,GAAG,0BAA0B;IAC3C,OAAO;QACH,IAAI,EAAE,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE;QAC5C,MAAM,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE;QAClD,IAAI,EAAE,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE;AAC5C,QAAA,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,QAAQ,CAAC,aAAa;AAC/D,QAAA,sBAAsB,EAAE,OAAO,EAAE,sBAAsB,IAAI,QAAQ,CAAC,sBAAsB;KAC7F;AACL;SAEgB,wBAAwB,CAAC,GAAA,GAAyB,OAAO,CAAC,GAAG,EAAA;IACzE,OAAO,OAAO,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAG,CAAC;AACrD;SAEgB,wBAAwB,CAAC,GAAA,GAAyB,OAAO,CAAC,GAAG,EAAA;IACzE,MAAM,GAAG,GAAG,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE;AAC3C,IAAA,OAAO,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,GAAG,GAAG,GAAG,SAAS;AACtD;SAEgB,wBAAwB,CAAC,GAAA,GAAyB,OAAO,CAAC,GAAG,EAAA;IACzE,MAAM,GAAG,GAAG,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE;AAC3C,IAAA,OAAO,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,GAAG,GAAG,GAAG,SAAS;AACtD;SAEgB,4BAA4B,CAAC,GAAA,GAAyB,OAAO,CAAC,GAAG,EAAA;IAC7E,MAAM,UAAU,GAAG,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE;IACvD,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,KAAK,EAAE,EAAE;AACzC,QAAA,OAAO,UAAU;IACrB;IACA,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE;AAC5C,IAAA,OAAO,OAAO,IAAI,IAAI,IAAI,OAAO,KAAK,EAAE,GAAG,OAAO,GAAG,SAAS;AAClE;SAEgB,uBAAuB,CAAC,GAAA,GAAyB,OAAO,CAAC,GAAG,EAAA;AACxE,IAAA,OAAO,uBAAuB,CAAC;AAC3B,QAAA,IAAI,EAAE;YACF,gBAAgB,EAAE,MAAM,CAAC,6BAA6B,EAAE,0BAA0B,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACtG,GAAG;AACH,gBAAA,GAAG,EAAE,CAAC;aACT,CAAC;AACL,SAAA;AACD,QAAA,MAAM,EAAE;AACJ,YAAA,UAAU,EAAE,KAAK,CAAC,wBAAwB,EAAE,0BAA0B,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC;YAClG,UAAU,EAAE,MAAM,CAAC,wBAAwB,EAAE,0BAA0B,CAAC,MAAM,CAAC,UAAU,EAAE;gBACvF,GAAG;AACH,gBAAA,GAAG,EAAE,CAAC;aACT,CAAC;AACF,YAAA,QAAQ,EAAE,MAAM,CAAC,sBAAsB,EAAE,0BAA0B,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AACrG,YAAA,gBAAgB,EAAE,MAAM,CACpB,+BAA+B,EAC/B,0BAA0B,CAAC,MAAM,CAAC,gBAAgB,EAClD,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAClB;AACJ,SAAA;AACD,QAAA,IAAI,EAAE;AACF,YAAA,UAAU,EAAE,MAAM,CAAC,sBAAsB,EAAE,0BAA0B,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AACvG,YAAA,QAAQ,EAAE,MAAM,CAAC,oBAAoB,EAAE,0BAA0B,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AACjG,YAAA,QAAQ,EAAE,KAAK,CAAC,qBAAqB,EAAE,0BAA0B,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC;YACzF,gBAAgB,EAAE,MAAM,CAAC,6BAA6B,EAAE,0BAA0B,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACtG,GAAG;AACH,gBAAA,GAAG,EAAE,CAAC;aACT,CAAC;AACL,SAAA;AACD,QAAA,aAAa,EAAE,KAAK,CAAC,6BAA6B,EAAE,0BAA0B,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,CAAC;AACtG,QAAA,sBAAsB,EAAE,KAAK,CACzB,+BAA+B,EAC/B,0BAA0B,CAAC,sBAAsB,EACjD,EAAE,GAAG,EAAE,CACV;AACJ,KAAA,CAAC;AACN;;AC1FA,MAAM,gBAAgB,GAAG,CAAC;AAE1B;AACA,SAAS,iBAAiB,CAAC,KAAe,EAAA;IACtC,OAAO;QACH,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;AACtB,QAAA,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,IAAI;AAC1C,QAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;AAC1B,QAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;AACxB,QAAA,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;KAC/B;AACL;AAEA;;;AAGG;AACG,SAAU,6BAA6B,CAAC,KAK7C,EAAA;AACG,IAAA,MAAM,OAAO,GAAG;AACZ,QAAA,CAAC,EAAE,gBAAgB;QACnB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;KAChD;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IACvF,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA,CAAE;AACjC;;ACxCA;AACO,MAAM,iBAAiB,GAAG,aAAa;AAE9C;AACO,MAAM,0BAA0B,GAAG,sBAAsB;AAEhE,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AAEhD,SAAU,yBAAyB,CAAC,KAAyB,EAAA;IAC/D,OAAO,KAAK,KAAK,0BAA0B;AAC/C;AAIA,SAAS,KAAK,CAAC,KAA0C,EAAE,OAAe,EAAE,IAAqB,EAAA;AAC7F,IAAA,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE;AACnB,QAAA,KAAK,EAAE,0BAA0B;AACjC,QAAA,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACpC,KAAA,CAAC;AACN;AAEO,MAAM,aAAa,GAAG;AACzB,IAAA,KAAK,EAAE,CAAC,OAAe,EAAE,IAAqB,KAAK,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAChF,IAAA,IAAI,EAAE,CAAC,OAAe,EAAE,IAAqB,KAAK,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAC9E,IAAA,IAAI,EAAE,CAAC,OAAe,EAAE,IAAqB,KAAK,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAC9E,IAAA,KAAK,EAAE,CAAC,OAAe,EAAE,IAAqB,KAAK,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;CACnF;AAEK,SAAU,uBAAuB,CAAC,MAA8B,EAAA;AAClE,IAAA,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;AACjC;;ACxBM,SAAU,oBAAoB,CAAC,OAAmB,EAAA;AACpD,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,QAAA,OAAO,CAAC;IACZ;AACA,IAAA,IAAI;AACA,QAAA,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC7D;AAAE,IAAA,MAAM;AACJ,QAAA,OAAO,OAAO,CAAC,MAAM,GAAG,GAAG;IAC/B;AACJ;AAEM,SAAU,iBAAiB,CAAC,KAA6B,EAAA;AAC3D,IAAA,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,KAAK;AACjE,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAExC,OAAO;AACH,QAAA,IAAI,EAAE,CAAA,UAAA,EAAa,OAAO,IAAI,OAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;AAC/C,QAAA,KAAK,EAAE,cAAc;QACrB,QAAQ,EAAE,YAAY,CAAC,IAAI;AAC3B,QAAA,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC;AAC/B,QAAA,OAAO,EAAE;AACL,YAAA,eAAe,EAAE,CAAC;AAClB,YAAA,SAAS,EAAE,sBAAsB;AACjC,YAAA,IAAI,EAAE;gBACF,OAAO;gBACP,OAAO;AACP,gBAAA,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG;gBAC3B,IAAI;gBACJ,KAAK,EAAE,OAAO,CAAC,MAAM;AACrB,gBAAA,IAAI,EAAE,KAAK,EAAE,SAAS,IAAI,IAAI;AAC9B,gBAAA,EAAE,EAAE,IAAI,EAAE,SAAS,IAAI,IAAI;AAC3B,gBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,cAAc;AACjB,aAAA;AACD,YAAA,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE;AAC7B,YAAA,KAAK,EAAE,OAAO;AACjB,SAAA;KACJ;AACL;AAEA,eAAe,WAAW,CAAI,OAAmB,EAAE,SAAiB,EAAE,KAAa,EAAA;IAC/E,IAAI,KAAK,GAAyC,IAAI;AACtD,IAAA,IAAI;AACA,QAAA,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;YACtB,OAAO;AACP,YAAA,IAAI,OAAO,CAAI,CAAC,QAAQ,EAAE,MAAM,KAAI;AAChC,gBAAA,KAAK,GAAG,UAAU,CAAC,MAAK;oBACpB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAA,EAAG,KAAK,CAAA,iBAAA,EAAoB,SAAS,CAAA,EAAA,CAAI,CAAC,CAAC;gBAChE,CAAC,EAAE,SAAS,CAAC;AACjB,YAAA,CAAC,CAAC;AACL,SAAA,CAAC;IACN;YAAU;AACN,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;YACf,YAAY,CAAC,KAAK,CAAC;QACvB;IACJ;AACJ;AAEO,eAAe,YAAY,CAAC,KAAmB,EAAE,aAAqB,EAAA;AACzE,IAAA,IAAI;AACA,QAAA,MAAM,MAAM,GAAG,MAAM,WAAW,CAC5B,iBAAiB,CAAC;YACd,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO;AACzB,SAAA,CAAC,EACF,aAAa,EACb,mBAAmB,CACtB;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACjB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,0BAA0B;AACnE,YAAA,aAAa,CAAC,KAAK,CAAC,uBAAuB,EAAE;gBACzC,cAAc,EAAE,KAAK,CAAC,KAAK;gBAC3B,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,gBAAA,KAAK,EAAE,OAAO;AACjB,aAAA,CAAC;AACF,YAAA,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC;QAC5B;IACJ;IAAE,OAAO,KAAK,EAAE;AACZ,QAAA,IAAI,gCAAgC,CAAC,KAAK,CAAC,EAAE;AACzC,YAAA,aAAa,CAAC,KAAK,CAAC,2DAA2D,EAAE;gBAC7E,cAAc,EAAE,KAAK,CAAC,KAAK;gBAC3B,IAAI,EAAE,KAAK,CAAC,IAAI;AACnB,aAAA,CAAC;YACF;QACJ;AACA,QAAA,MAAM,KAAK;IACf;AACJ;AAEA;AACM,SAAU,sBAAsB,CAAC,OAAmB,EAAE,QAAgB,EAAA;AACxE,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,QAAA,OAAO,EAAE;IACb;IAEA,MAAM,KAAK,GAAe,EAAE;AAC5B,IAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;QACzB,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC;AACnC,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,oBAAoB,CAAC,SAAS,CAAC,GAAG,QAAQ,EAAE;YAChE;QACJ;AACA,QAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IACrB;IAEA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE;AAChC,QAAA,aAAa,CAAC,IAAI,CAAC,2BAA2B,EAAE;YAC5C,SAAS,EAAE,OAAO,CAAC,MAAM;YACzB,KAAK,EAAE,MAAM,CAAC,MAAM;YACpB,QAAQ;AACR,YAAA,UAAU,EAAE,oBAAoB,CAAC,MAAM,CAAC;AAC3C,SAAA,CAAC;IACN;AAEA,IAAA,OAAO,MAAM;AACjB;;ACzHA,MAAM,gBAAgB,GAA4B;IAC9C,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACpC,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,SAAS,EAAE,EAAE;CAChB;AAQD,MAAM,aAAa,GAA2B;AAC1C,IAAA,OAAO,EAAE,EAAE;IACX,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACpC,IAAA,GAAG,EAAE,CAAC;IACN,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;IACpC,eAAe,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;CAC7C;AAED,MAAM,YAAY,GAAG,IAAI,GAAG,EAGzB;AAEH,MAAM,WAAW,GAAG,IAAI,GAAG,EAA+E;AAE1G,SAAS,oBAAoB,CAAC,YAAoB,EAAA;AAC9C,IAAA,OAAO,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;AACzC;AAEA,SAAS,cAAc,CAAC,QAAgB,EAAA;IACpC,IAAI,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;AACtC,IAAA,IAAI,KAAK,IAAI,IAAI,EAAE;QACf,KAAK,GAAG,wBAAwB,CAAuC;YACnE,QAAQ;AACR,YAAA,YAAY,EAAE,gBAAgB;YAC9B,UAAU,EAAE,CAAC,WAAW,CAAC;AACzB,YAAA,YAAY,EAAE,WAAW;AAC5B,SAAA,CAAC;AACF,QAAA,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC;IACrC;AACA,IAAA,OAAO,KAAK;AAChB;AAEA,SAAS,aAAa,CAAC,aAAqB,EAAA;IACxC,IAAI,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC;AAC1C,IAAA,IAAI,KAAK,IAAI,IAAI,EAAE;QACf,KAAK,GAAG,wBAAwB,CAAyB;AACrD,YAAA,QAAQ,EAAE,aAAa;AACvB,YAAA,YAAY,EAAE,aAAa;AAC3B,YAAA,YAAY,EAAE,WAAW;AAC5B,SAAA,CAAC;AACF,QAAA,WAAW,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC;IACzC;AACA,IAAA,OAAO,KAAK;AAChB;AAEA,SAAS,aAAa,CAAC,WAAmB,EAAE,OAAe,EAAA;IACvD,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO,CAAA,KAAA,CAAO,CAAC;AAC/C;AAEA;AACM,SAAU,6BAA6B,CAAC,WAAmB,EAAA;AAC7D,IAAA,OAAO,IAAI,CAAC,WAAW,EAAE,sBAAsB,CAAC;AACpD;AAEA,eAAe,6BAA6B,CAAC,WAAmB,EAAA;IAC5D,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAE7C,IAAA,IAAI,OAAiB;AACrB,IAAA,IAAI;AACA,QAAA,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC;IACxC;AAAE,IAAA,MAAM;AACJ,QAAA,OAAO,EAAE,GAAG,gBAAgB,EAAE;IAClC;IAEA,MAAM,SAAS,GAA4C,EAAE;IAC7D,IAAI,OAAO,GAAG,EAAE;IAChB,IAAI,SAAS,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AAEzC,IAAA,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE;QACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YACzB;QACJ;AAEA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;QAClD,IAAI,WAAW,KAAK,EAAE,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACnD;QACJ;AAEA,QAAA,IAAI;AACA,YAAA,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoC;AAChE,YAAA,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,EAAE;AAC/C,gBAAA,OAAO,GAAG,KAAK,CAAC,OAAO;YAC3B;AACA,YAAA,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,IAAI,KAAK,CAAC,SAAS,GAAG,SAAS,EAAE;AACxD,gBAAA,SAAS,GAAG,KAAK,CAAC,SAAS;YAC/B;YACA,SAAS,CAAC,WAAW,CAAC,GAAG;AACrB,gBAAA,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;AACnB,gBAAA,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACvD,gBAAA,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;aACtE;QACL;AAAE,QAAA,MAAM;AACJ,YAAA,aAAa,CAAC,IAAI,CAAC,kDAAkD,EAAE;gBACnE,WAAW;AACX,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA,CAAC;QACN;IACJ;AAEA,IAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE;AAC5C;AAEO,eAAe,yBAAyB,CAAC,KAI/C,EAAA;IACG,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACpC,IAAA,MAAM,MAAM,GAA4B;QACpC,GAAG,EAAE,OAAO,CAAC,GAAG;AAChB,QAAA,SAAS,EAAE,GAAG;AACd,QAAA,eAAe,EAAE,GAAG;KACvB;AAED,IAAA,IAAI,oBAAoB,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE;QAC9C,MAAM,cAAc,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC;YAC/C,OAAO,EAAE,KAAK,CAAC,OAAO;AACtB,YAAA,SAAS,EAAE;AACP,gBAAA,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC1B,aAAA;AACJ,SAAA,CAAC;IACN;SAAO;AACH,QAAA,MAAM,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;YAC5E,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,eAAe,EAAE,MAAM,CAAC,eAAe;AAC1C,SAAA,CAAC;IACN;AAEA,IAAA,aAAa,CAAC,IAAI,CAAC,6BAA6B,EAAE;QAC9C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,GAAG,EAAE,MAAM,CAAC,GAAG;AAClB,KAAA,CAAC;AACN;AAEO,eAAe,0BAA0B,CAAC,KAAoD,EAAA;AACjG,IAAA,IAAI,oBAAoB,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE;AAC9C,QAAA,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE;QACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;AACjD,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAA,aAAa,CAAC,IAAI,CAAC,qDAAqD,EAAE;gBACtE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;gBACxC,OAAO,EAAE,KAAK,CAAC,OAAO;AACzB,aAAA,CAAC;YACF;QACJ;QAEA,MAAM,cAAc,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC;AAC/C,YAAA,SAAS,EAAE;AACP,gBAAA,CAAC,KAAK,CAAC,OAAO,GAAG;AACb,oBAAA,GAAG,QAAQ;AACX,oBAAA,eAAe,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC5C,iBAAA;AACJ,aAAA;AACJ,SAAA,CAAC;QACF;IACJ;AAEA,IAAA,MAAM,KAAK,GAAG,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AACjF,IAAA,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE;AAClC,IAAA,IAAI,OAAO,CAAC,GAAG,KAAK,CAAC,EAAE;AACnB,QAAA,aAAa,CAAC,IAAI,CAAC,qDAAqD,EAAE;YACtE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,OAAO,EAAE,KAAK,CAAC,OAAO;AACzB,SAAA,CAAC;QACF;IACJ;IAEA,MAAM,KAAK,CAAC,KAAK,CAAC;AACd,QAAA,eAAe,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC5C,KAAA,CAAC;AACN;AAEO,eAAe,2BAA2B,CAAC,KAAoD,EAAA;AAClG,IAAA,IAAI,oBAAoB,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE;AAC9C,QAAA,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE;QACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;AACjD,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAA,aAAa,CAAC,IAAI,CAAC,iDAAiD,EAAE;gBAClE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;gBACxC,OAAO,EAAE,KAAK,CAAC,OAAO;AACzB,aAAA,CAAC;YACF;QACJ;QAEA,MAAM,cAAc,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC;AAC/C,YAAA,SAAS,EAAE;AACP,gBAAA,CAAC,KAAK,CAAC,OAAO,GAAG;AACb,oBAAA,GAAG,QAAQ;AACX,oBAAA,GAAG,EAAE,CAAC;oBACN,eAAe,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AAC7C,iBAAA;AACJ,aAAA;AACJ,SAAA,CAAC;AAEF,QAAA,aAAa,CAAC,IAAI,CAAC,+BAA+B,EAAE;YAChD,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,OAAO,EAAE,KAAK,CAAC,OAAO;AACzB,SAAA,CAAC;QACF;IACJ;AAEA,IAAA,MAAM,KAAK,GAAG,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AACjF,IAAA,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE;AAClC,IAAA,IAAI,OAAO,CAAC,GAAG,KAAK,CAAC,EAAE;AACnB,QAAA,aAAa,CAAC,IAAI,CAAC,iDAAiD,EAAE;YAClE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,OAAO,EAAE,KAAK,CAAC,OAAO;AACzB,SAAA,CAAC;QACF;IACJ;IAEA,MAAM,KAAK,CAAC,KAAK,CAAC;AACd,QAAA,GAAG,EAAE,CAAC;QACN,eAAe,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AAC7C,KAAA,CAAC;AAEF,IAAA,aAAa,CAAC,IAAI,CAAC,+BAA+B,EAAE;QAChD,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,OAAO,EAAE,KAAK,CAAC,OAAO;AACzB,KAAA,CAAC;AACN;AAEO,eAAe,sBAAsB,CAAC,gBAAwB,EAAA;AACjE,IAAA,IAAI,oBAAoB,CAAC,gBAAgB,CAAC,EAAE;AACxC,QAAA,OAAO,cAAc,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE;IAClD;AACA,IAAA,OAAO,6BAA6B,CAAC,gBAAgB,CAAC;AAC1D;;;;;;;;;;;AC7OA,MAAM,sBAAsB,GAAG,KAAK;AACpC,MAAM,qBAAqB,GAAG,MAAM;AAEpC,SAAS,SAAS,CAAC,KAAe,EAAA;AAC9B,IAAA,IAAI,KAAK,KAAK,QAAQ,CAAC,QAAQ,EAAE;AAC7B,QAAA,OAAO,MAAM;IACjB;AACA,IAAA,IAAI,KAAK,KAAK,QAAQ,CAAC,KAAK,IAAI,KAAK,KAAK,QAAQ,CAAC,OAAO,EAAE;AACxD,QAAA,OAAO,QAAQ;IACnB;AACA,IAAA,OAAO,MAAM;AACjB;AAEA,MAAM,UAAU,CAAA;AACJ,IAAA,OAAO,QAAQ,GAAsB,IAAI;IAEzC,OAAO,GAAG,KAAK;IACf,QAAQ,GAAG,KAAK;IAChB,OAAO,GAAkB,IAAI;IAC7B,WAAW,GAAkB,IAAI;IACjC,gBAAgB,GAAkB,IAAI;IACtC,MAAM,GAAqB,0BAA0B;IAErD,SAAS,GAAe,EAAE;IAC1B,cAAc,GAAe,EAAE;IAC/B,WAAW,GAAe,EAAE;IAC5B,SAAS,GAAe,EAAE;IAE1B,mBAAmB,GAAyC,IAAI;IAChE,kBAAkB,GAAkB,IAAI;IACxC,cAAc,GAAyC,IAAI;IAC3D,cAAc,GAA0C,IAAI;IAC5D,eAAe,GAAG,CAAC;AAEnB,IAAA,YAAY,GAAoC;AACpD,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,IAAI,EAAE,KAAK;KACd;AAEO,IAAA,mBAAmB,GAAmC;AAC1D,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,MAAM,EAAE,CAAC;AACT,QAAA,IAAI,EAAE,CAAC;KACV;AAEO,IAAA,WAAW,GAA0C;AACzD,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,IAAI,EAAE,IAAI;KACb;IAEO,SAAS,GAAkB,IAAI;IAC/B,WAAW,GAAkB,IAAI;IACjC,qBAAqB,GAAG,KAAK;IAC7B,eAAe,GAAyB,IAAI;AAEpD,IAAA,OAAO,WAAW,GAAA;AACd,QAAA,UAAU,CAAC,QAAQ,KAAK,IAAI,UAAU,EAAE;QACxC,OAAO,UAAU,CAAC,QAAQ;IAC9B;IAEA,MAAM,MAAM,CAAC,OAAgC,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,aAAa,CAAC,IAAI,CAAC,mDAAmD,EAAE;gBACpE,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,IAAI,CAAC,WAAW;AAC5B,aAAA,CAAC;YACF;QACJ;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO;QAClC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,IAAI;QACxD,IAAI,CAAC,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC;AACrD,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;AAC1D,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AAEnB,QAAA,uBAAuB,CAAC;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;AAC3B,SAAA,CAAC;AAEF,QAAA,aAAa,CAAC,IAAI,CAAC,0BAA0B,EAAE;YAC3C,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,OAAO,CAAC,GAAG;AACnB,SAAA,CAAC;AAEF,QAAA,uBAAuB,CAAC,CAAC,KAAK,KAAI;AAC9B,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACrB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE;YAC/B,MAAM,EAAE,yBAAyB,EAAE,GAAG,MAAM,kEAAgC;AAC5E,YAAA,MAAM,yBAAyB,CAAC;gBAC5B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;AAC3B,aAAA,CAAC;YACF,IAAI,CAAC,cAAc,EAAE;QACzB;QAEA,IAAI,CAAC,mBAAmB,EAAE;IAC9B;AAEA,IAAA,MAAM,OAAO,GAAA;QACT,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACjC,YAAA,aAAa,CAAC,KAAK,CAAC,+BAA+B,CAAC;YACpD;QACJ;QAEA,aAAa,CAAC,IAAI,CAAC,4BAA4B,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QACtE,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,MAAM,IAAI,CAAC,QAAQ,EAAE;AACrB,QAAA,aAAa,CAAC,IAAI,CAAC,2BAA2B,CAAC;IACnD;AAEA,IAAA,KAAK,CAAC,KAAe,EAAA;AACjB,QAAA,IAAI,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACxC;QACJ;QAEA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;YACpF;QACJ;AAEA,QAAA,KAAK,IAAI,CAAC,sBAAsB,EAAE;QAElC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;AAEnC,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACjB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1B,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,KAAK,IAAI,CAAC,SAAS,EAAE;YACrB;QACJ;AAEA,QAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;YAC5B,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,mBAAmB,EAAE;YAC1B;QACJ;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,EAAE;AACjC,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE;QACxC;QACA,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,iBAAiB,EAAE;IAC5B;IAEA,QAAQ,GAAA;QACJ,OAAO;YACH,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,WAAW;AACzB,YAAA,MAAM,EAAE;AACJ,gBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;AAC3B,gBAAA,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM;AACrC,gBAAA,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;AAC/B,gBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;AAC9B,aAAA;AACD,YAAA,UAAU,EAAE;AACR,gBAAA,IAAI,EAAE,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC;AAC1C,gBAAA,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC;AACpD,gBAAA,MAAM,EAAE,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9C,gBAAA,IAAI,EAAE,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7C,aAAA;AACD,YAAA,qBAAqB,EAAE,IAAI,CAAC,mBAAmB,IAAI,IAAI;AACvD,YAAA,YAAY,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE;AACtC,YAAA,mBAAmB,EAAE,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE;YACpD,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,YAAA,WAAW,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;YACpC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;SAChC;IACL;AAEA,IAAA,MAAM,QAAQ,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE;YAC9B,OAAO,IAAI,CAAC,eAAe;QAC/B;AAEA,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE;QAC3C,OAAO,IAAI,CAAC,eAAe;IAC/B;AAEQ,IAAA,MAAM,aAAa,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf;QACJ;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACpB,uBAAuB,CAAC,IAAI,CAAC;QAE7B,aAAa,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QAElE,IAAI,CAAC,oBAAoB,EAAE;QAC3B,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC;AAE1D,QAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;YAC3D,MAAM,EAAE,2BAA2B,EAAE,GAAG,MAAM,kEAAgC;AAC9E,YAAA,MAAM,2BAA2B,CAAC;gBAC9B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,OAAO,EAAE,IAAI,CAAC,WAAW;AAC5B,aAAA,CAAC;QACN;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AAClB,YAAA,aAAa,CAAC,IAAI,CAAC,iDAAiD,EAAE;gBAClE,GAAG,IAAI,CAAC,aAAa,EAAE;AACvB,gBAAA,sBAAsB,EAAE,IAAI,CAAC,MAAM,CAAC,sBAAsB;AAC7D,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;QAClC;QAEA,aAAa,CAAC,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;IACxE;IAEQ,SAAS,GAAA;AACb,QAAA,QACI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;AACzB,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;IAEjC;IAEQ,MAAM,WAAW,CAAC,SAAiB,EAAA;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;AACvC,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE;AAC9C,YAAA,MAAM,IAAI,CAAC,SAAS,EAAE;AACtB,YAAA,MAAM,IAAI,CAAC,WAAW,EAAE;AACxB,YAAA,MAAM,IAAI,CAAC,SAAS,EAAE;QAC1B;IACJ;IAEQ,eAAe,CAAC,IAAoB,EAAE,KAAc,EAAA;AACxD,QAAA,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AACtE,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO;QACxB,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC3C,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;IACvC;AAEQ,IAAA,iBAAiB,CAAC,IAAoB,EAAA;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;IACtC;IAEQ,aAAa,GAAA;QACjB,OAAO;AACH,YAAA,MAAM,EAAE;AACJ,gBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;AAC3B,gBAAA,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM;AACrC,gBAAA,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;AAC/B,gBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;AAC9B,aAAA;AACD,YAAA,UAAU,EAAE;AACR,gBAAA,IAAI,EAAE,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC;AAC1C,gBAAA,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC;AACpD,gBAAA,MAAM,EAAE,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9C,gBAAA,IAAI,EAAE,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7C,aAAA;AACD,YAAA,YAAY,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE;AACtC,YAAA,mBAAmB,EAAE,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE;YACpD,SAAS,EAAE,IAAI,CAAC,SAAS;SAC5B;IACL;IAEQ,mBAAmB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B;QACJ;AACA,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AAEjC,QAAA,MAAM,OAAO,GAAG,CAAC,MAAsB,KAAI;YACvC,aAAa,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,CAAC;AAC1D,YAAA,KAAK,IAAI,CAAC,QAAQ,EAAE;AACxB,QAAA,CAAC;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;AAChC,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;IACnC;IAEQ,cAAc,GAAA;QAClB,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,MAAK;AACnC,YAAA,KAAK,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;QAC1C,CAAC,EAAE,qBAAqB,CAAC;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI;IACjC;IAEQ,aAAa,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;AAC7B,YAAA,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC;AAClC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC9B;IACJ;AAEQ,IAAA,MAAM,sBAAsB,CAAC,KAAK,GAAG,KAAK,EAAA;AAC9C,QAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;YAC3D;QACJ;AACA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,IAAI,CAAC,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,GAAG,qBAAqB,EAAE;YAC9D;QACJ;AACA,QAAA,IAAI,CAAC,eAAe,GAAG,GAAG;AAC1B,QAAA,MAAM,0BAA0B,CAAC;YAC7B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,OAAO,EAAE,IAAI,CAAC,WAAW;AAC5B,SAAA,CAAC;IACN;IAEQ,mBAAmB,GAAA;AACvB,QAAA,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;QAC/D,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzD,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,UAAU,IAAI,UAAU,IAAI,QAAQ,EAAE;AACjE,YAAA,aAAa,CAAC,IAAI,CAAC,oCAAoC,EAAE;AACrD,gBAAA,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,UAAU,GAAG,YAAY,GAAG,UAAU;AACzE,gBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;gBACpC,UAAU;gBACV,UAAU;gBACV,QAAQ;AACX,aAAA,CAAC;YACF,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,KAAK,IAAI,CAAC,WAAW,EAAE;YACvB;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACjE,YAAA,aAAa,CAAC,KAAK,CAAC,iCAAiC,EAAE;gBACnD,UAAU;AACV,gBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;gBACpC,UAAU;AACb,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC,MAAK;AACvC,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,gBAAA,aAAa,CAAC,KAAK,CAAC,6BAA6B,CAAC;AAClD,gBAAA,KAAK,IAAI,CAAC,WAAW,EAAE;YAC3B,CAAC,EAAE,UAAU,CAAC;AACd,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,IAAI;QACtC;IACJ;IAEQ,oBAAoB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,EAAE;AAClC,YAAA,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC;AACtC,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,YAAA,aAAa,CAAC,KAAK,CAAC,iCAAiC,CAAC;QAC1D;IACJ;IAEQ,iBAAiB,GAAA;AACrB,QAAA,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;QAC3D,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,kBAAkB,GAAG,CAAC;AACxF,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,UAAU,IAAI,UAAU,IAAI,QAAQ,IAAI,KAAK,IAAI,QAAQ,EAAE;AACpF,YAAA,aAAa,CAAC,KAAK,CAAC,kCAAkC,EAAE;AACpD,gBAAA,MAAM,EACF,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI;AACrB,sBAAE;sBACA,UAAU,IAAI;AACd,0BAAE;AACF,0BAAE,UAAU;AACtB,gBAAA,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;gBAClC,UAAU;gBACV,UAAU;gBACV,QAAQ;gBACR,KAAK;gBACL,QAAQ;AACX,aAAA,CAAC;AACF,YAAA,KAAK,IAAI,CAAC,SAAS,EAAE;QACzB;IACJ;IAEQ,iBAAiB,GAAA;QACrB,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;QAC7C,IAAI,OAAO,GAAG,CAAC;AACf,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,gBAAgB,EAAE;YAC1E,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;YAChG,OAAO,IAAI,CAAC;AACZ,YAAA,aAAa,CAAC,IAAI,CAAC,qCAAqC,EAAE;gBACtD,YAAY,EAAE,OAAO,EAAE,KAAK;gBAC5B,YAAY,EAAE,OAAO,EAAE,KAAK;AAC5B,gBAAA,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;gBAC3C,gBAAgB;AACnB,aAAA,CAAC;QACN;AACA,QAAA,IAAI,OAAO,GAAG,CAAC,EAAE;YACb,aAAa,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;QACpF;IACJ;IAEQ,mBAAmB,GAAA;QACvB,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;QAC/C,IAAI,OAAO,GAAG,CAAC;QACf,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,gBAAgB,EAAE;YAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,OAAO,CAAC;AAC5F,YAAA,MAAM,OAAO,GAAG,YAAY,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;YAC1G,OAAO,IAAI,CAAC;AACZ,YAAA,aAAa,CAAC,IAAI,CAAC,uCAAuC,EAAE;gBACxD,YAAY,EAAE,OAAO,EAAE,KAAK;gBAC5B,YAAY,EAAE,OAAO,EAAE,KAAK;AAC5B,gBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;gBACpC,gBAAgB;AACnB,aAAA,CAAC;QACN;AACA,QAAA,IAAI,OAAO,GAAG,CAAC,EAAE;AACb,YAAA,aAAa,CAAC,IAAI,CAAC,+BAA+B,EAAE;gBAChD,OAAO;AACP,gBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;gBACpC,gBAAgB;AACnB,aAAA,CAAC;QACN;IACJ;IAEQ,iBAAiB,GAAA;QACrB,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;QAC7C,IAAI,OAAO,GAAG,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,gBAAgB,EAAE;YAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC;AACtF,YAAA,MAAM,OAAO,GAAG,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YAClG,OAAO,IAAI,CAAC;AACZ,YAAA,aAAa,CAAC,IAAI,CAAC,qCAAqC,EAAE;gBACtD,YAAY,EAAE,OAAO,EAAE,KAAK;gBAC5B,YAAY,EAAE,OAAO,EAAE,KAAK;AAC5B,gBAAA,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;gBAClC,gBAAgB;AACnB,aAAA,CAAC;QACN;AACA,QAAA,IAAI,OAAO,GAAG,CAAC,EAAE;AACb,YAAA,aAAa,CAAC,IAAI,CAAC,6BAA6B,EAAE;gBAC9C,OAAO;AACP,gBAAA,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;gBAClC,gBAAgB;AACnB,aAAA,CAAC;QACN;QACA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;QAClC;IACJ;AAEQ,IAAA,MAAM,SAAS,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AACxB,YAAA,aAAa,CAAC,KAAK,CAAC,uCAAuC,CAAC;YAC5D;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;YAClD;QACJ;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI;AAC7B,QAAA,IAAI;AACA,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;AAC7C,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AACnE,gBAAA,IAAI,KAAK,IAAI,IAAI,EAAE;oBACf;gBACJ;gBAEA,MAAM,cAAc,GAAG,6BAA6B,CAAC;oBACjD,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,OAAO,EAAE,IAAI,CAAC,WAAW;AACzB,oBAAA,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,CAAC,KAAK,CAAC;AACnB,iBAAA,CAAC;AAEF,gBAAA,IAAI;oBACA,MAAM,KAAK,GAAG,iBAAiB,CAAC;wBAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;wBACrB,OAAO,EAAE,IAAI,CAAC,WAAW;AACzB,wBAAA,IAAI,EAAE,MAAM;wBACZ,cAAc;wBACd,OAAO,EAAE,CAAC,KAAK,CAAC;AACnB,qBAAA,CAAC;AACF,oBAAA,aAAa,CAAC,KAAK,CAAC,0BAA0B,EAAE;wBAC5C,cAAc;wBACd,SAAS;wBACT,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,KAAK,EAAE,KAAK,CAAC,KAAK;AACrB,qBAAA,CAAC;oBACF,MAAM,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;oBACpD,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAChD,oBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAC9B,oBAAA,aAAa,CAAC,IAAI,CAAC,mBAAmB,EAAE;wBACpC,cAAc;wBACd,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,wBAAA,kBAAkB,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM;AACjD,qBAAA,CAAC;gBACN;gBAAE,OAAO,KAAK,EAAE;AACZ,oBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC;AACnC,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,oBAAA,aAAa,CAAC,KAAK,CAAC,sCAAsC,EAAE;wBACxD,cAAc;wBACd,KAAK,EAAE,IAAI,CAAC,SAAS;AACrB,wBAAA,SAAS,EAAE,sBAAsB;AACjC,wBAAA,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM;AAC7C,qBAAA,CAAC;oBACF,IAAI,CAAC,iBAAiB,EAAE;oBACxB;gBACJ;YACJ;QACJ;gBAAU;AACN,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,KAAK;QAClC;IACJ;IAEQ,iBAAiB,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;YAC7B;QACJ;QACA,aAAa,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAAC;AACvF,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAK;AAClC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,aAAa,CAAC,KAAK,CAAC,8BAA8B,CAAC;AACnD,YAAA,KAAK,IAAI,CAAC,SAAS,EAAE;QACzB,CAAC,EAAE,sBAAsB,CAAC;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI;IACjC;AAEQ,IAAA,MAAM,WAAW,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC1B,YAAA,aAAa,CAAC,KAAK,CAAC,yCAAyC,CAAC;YAC9D;QACJ;QACA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/B;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;YAClD;QACJ;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI;AAC/B,QAAA,IAAI;YACA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAChC,gBAAA,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;AACnF,gBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;oBACpB;gBACJ;gBAEA,MAAM,cAAc,GAAG,6BAA6B,CAAC;oBACjD,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,OAAO,EAAE,IAAI,CAAC,WAAW;AACzB,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,OAAO,EAAE,KAAK;AACjB,iBAAA,CAAC;AACF,gBAAA,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,CAAC;AAE9C,gBAAA,IAAI;AACA,oBAAA,aAAa,CAAC,KAAK,CAAC,4BAA4B,EAAE;wBAC9C,cAAc;wBACd,SAAS,EAAE,KAAK,CAAC,MAAM;wBACvB,UAAU;AACV,wBAAA,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;AAC1C,qBAAA,CAAC;oBACF,MAAM,KAAK,GAAG,iBAAiB,CAAC;wBAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;wBACrB,OAAO,EAAE,IAAI,CAAC,WAAW;AACzB,wBAAA,IAAI,EAAE,QAAQ;wBACd,cAAc;AACd,wBAAA,OAAO,EAAE,KAAK;AACjB,qBAAA,CAAC;oBACF,MAAM,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;oBACpD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;oBACxC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAClD,oBAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;AAChC,oBAAA,aAAa,CAAC,IAAI,CAAC,qBAAqB,EAAE;wBACtC,cAAc;wBACd,SAAS,EAAE,KAAK,CAAC,MAAM;wBACvB,UAAU;AACV,wBAAA,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;AAC1C,qBAAA,CAAC;gBACN;gBAAE,OAAO,KAAK,EAAE;AACZ,oBAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC;AACrC,oBAAA,aAAa,CAAC,KAAK,CAAC,wCAAwC,EAAE;wBAC1D,cAAc;wBACd,SAAS,EAAE,KAAK,CAAC,MAAM;wBACvB,UAAU;wBACV,KAAK,EAAE,IAAI,CAAC,SAAS;AACrB,wBAAA,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;AAC1C,qBAAA,CAAC;oBACF,IAAI,CAAC,mBAAmB,EAAE;oBAC1B;gBACJ;YACJ;QACJ;gBAAU;AACN,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,KAAK;QACpC;AAEA,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAC1D,IAAI,CAAC,mBAAmB,EAAE;QAC9B;IACJ;AAEQ,IAAA,MAAM,SAAS,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AACxB,YAAA,aAAa,CAAC,KAAK,CAAC,uCAAuC,CAAC;YAC5D;QACJ;QACA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;YAClD;QACJ;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI;AAC7B,QAAA,IAAI;YACA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,gBAAA,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC/E,gBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;oBACpB;gBACJ;gBAEA,MAAM,cAAc,GAAG,6BAA6B,CAAC;oBACjD,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,OAAO,EAAE,IAAI,CAAC,WAAW;AACzB,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,OAAO,EAAE,KAAK;AACjB,iBAAA,CAAC;AACF,gBAAA,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,CAAC;AAE9C,gBAAA,IAAI;AACA,oBAAA,aAAa,CAAC,KAAK,CAAC,0BAA0B,EAAE;wBAC5C,cAAc;wBACd,SAAS,EAAE,KAAK,CAAC,MAAM;wBACvB,UAAU;AACV,wBAAA,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;AACxC,qBAAA,CAAC;oBACF,MAAM,KAAK,GAAG,iBAAiB,CAAC;wBAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;wBACrB,OAAO,EAAE,IAAI,CAAC,WAAW;AACzB,wBAAA,IAAI,EAAE,MAAM;wBACZ,cAAc;AACd,wBAAA,OAAO,EAAE,KAAK;AACjB,qBAAA,CAAC;oBACF,MAAM,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;oBACpD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;oBACtC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAChD,oBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAC9B,oBAAA,aAAa,CAAC,IAAI,CAAC,mBAAmB,EAAE;wBACpC,cAAc;wBACd,SAAS,EAAE,KAAK,CAAC,MAAM;wBACvB,UAAU;AACV,wBAAA,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;AACxC,qBAAA,CAAC;gBACN;gBAAE,OAAO,KAAK,EAAE;AACZ,oBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC;AACnC,oBAAA,aAAa,CAAC,KAAK,CAAC,sCAAsC,EAAE;wBACxD,cAAc;wBACd,SAAS,EAAE,KAAK,CAAC,MAAM;wBACvB,UAAU;wBACV,KAAK,EAAE,IAAI,CAAC,SAAS;AACrB,wBAAA,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;AACxC,qBAAA,CAAC;oBACF,IAAI,CAAC,iBAAiB,EAAE;oBACxB;gBACJ;YACJ;YAEA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;YAClC;QACJ;gBAAU;AACN,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,KAAK;QAClC;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;YACtD,IAAI,CAAC,iBAAiB,EAAE;QAC5B;IACJ;;;ACjqBJ,SAAS,uBAAuB,CAAC,QAAiB,EAAA;AAI9C,IAAA,MAAM,GAAG,GAAG,4BAA4B,EAAE;AAC1C,IAAA,IAAI,GAAG,IAAI,IAAI,EAAE;AACb,QAAA,MAAM,IAAI,KAAK,CACX,iHAAiH,CACpH;IACL;AACA,IAAA,OAAO,6BAA6B,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACtD;AAEO,eAAe,gBAAgB,CAAC,OAAgC,EAAA;IACnE,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,SAAS;AACzG,IAAA,MAAM,gBAAgB,GAAG,gBAAgB,IAAI,uBAAuB,EAAE;AAEtE,IAAA,MAAM,SAAS,GAAG,uBAAuB,EAAE;AAC3C,IAAA,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC;AAClC,QAAA,GAAG,OAAO;AACV,QAAA,gBAAgB,EAAE,gBAAgB;QAClC,MAAM,EAAE,uBAAuB,CAAC;AAC5B,YAAA,IAAI,EAAE,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE;AACpD,YAAA,MAAM,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE;AAC1D,YAAA,IAAI,EAAE,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE;YACpD,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,aAAa,IAAI,SAAS,CAAC,aAAa;YACvE,sBAAsB,EAAE,OAAO,CAAC,MAAM,EAAE,sBAAsB,IAAI,SAAS,CAAC,sBAAsB;SACrG,CAAC;AACL,KAAA,CAAC;AACN;AAEO,eAAe,iBAAiB,GAAA;AACnC,IAAA,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE;AAC5C;SAEgB,kBAAkB,GAAA;AAC9B,IAAA,OAAO,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;AAC9C;AAEA;;;AAGG;AACI,eAAe,uBAAuB,CAAC,UAA0C,EAAE,EAAA;AACtF,IAAA,IAAI,CAAC,wBAAwB,EAAE,EAAE;QAC7B,uBAAuB,CAAC,IAAI,CAAC;AAC7B,QAAA,OAAO,KAAK;IAChB;IAEA,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,wBAAwB,EAAE;IAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,wBAAwB,EAAE;IACjE,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,KAAK,EAAE,EAAE;AACnC,QAAA,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC;IACjG;IACA,IAAI,WAAW,IAAI,IAAI,IAAI,WAAW,KAAK,EAAE,EAAE;AAC3C,QAAA,MAAM,IAAI,KAAK,CACX,qGAAqG,CACxG;IACL;IAEA,MAAM,gBAAgB,GAClB,OAAO,CAAC,gBAAgB,IAAI,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,uBAAuB,EAAE;AAEpG,IAAA,MAAM,gBAAgB,CAAC;QACnB,OAAO;AACP,QAAA,OAAO,EAAE,WAAW;QACpB,gBAAgB;QAChB,MAAM,EAAE,OAAO,CAAC,MAAM;AACzB,KAAA,CAAC;IAEF,MAAM,eAAe,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AAC/D,IAAA,eAAe,CAAC,IAAI,CAAC,8BAA8B,EAAE;AACjD,QAAA,KAAK,EAAE,iBAAiB;QACxB,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE;AAC5D,KAAA,CAAC;AAEF,IAAA,OAAO,IAAI;AACf;AAEA;;AAEG;SACa,4BAA4B,CAAC,GAAA,GAAyB,OAAO,CAAC,GAAG,EAAA;IAC7E,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE;QAC7C;IACJ;IAEA,MAAM,OAAO,GAAa,EAAE;IAC5B,IAAI,OAAO,CAAC,qBAAqB,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;AAC7C,QAAA,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC;IACvC;AACA,IAAA,MAAM,WAAW,GAAG,4BAA4B,CAAC,GAAG,CAAC;AACrD,IAAA,IAAI,WAAW,IAAI,IAAI,EAAE;AACrB,QAAA,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC;IAChE;AAEA,IAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,QAAA,MAAM,IAAI,KAAK,CAAC,CAAA,qCAAA,EAAwC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;IACjF;AACJ;AAEA,SAAS,uBAAuB,CAC5B,KAAyD,EACzD,iBAA2B,EAC3B,OAAe,EACf,GAAW,EAAA;IAEX,MAAM,OAAO,GAAa,EAAE;IAC5B,MAAM,KAAK,GAAa,EAAE;IAC1B,MAAM,UAAU,GAAa,EAAE;AAE/B,IAAA,KAAK,MAAM,WAAW,IAAI,iBAAiB,EAAE;QACzC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC;AAC3C,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAChB,YAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;YACzB;QACJ;QAEA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC;AACtD,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,GAAG,WAAW,GAAG,OAAO,EAAE;AAC9D,YAAA,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;YACvB;QACJ;AAEA,QAAA,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;IAChC;IAEA,OAAO;QACH,EAAE,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAC9C,OAAO;QACP,KAAK;QACL,UAAU;KACb;AACL;AAEA;;;AAGG;AACI,eAAe,sBAAsB,CAAC,OAAsC,EAAA;AAC/E,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM;AAC7C,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,GAAG;AACpD,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM;AAEzC,IAAA,IAAI,IAAI,GAA4B;AAChC,QAAA,EAAE,EAAE,KAAK;AACT,QAAA,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC;AACvC,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,UAAU,EAAE,EAAE;KACjB;AAED,IAAA,IAAI;AACA,QAAA,MAAM,SAAS,CAAC;AACZ,YAAA,UAAU,EAAE,cAAc;YAC1B,SAAS;YACT,KAAK,EAAE,YAAW;gBACd,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,gBAAgB,CAAC;gBACpE,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE;AACnC,oBAAA,IAAI,GAAG;AACH,wBAAA,EAAE,EAAE,KAAK;wBACT,OAAO,EAAE,OAAO,CAAC,iBAAiB;AAClC,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,UAAU,EAAE,EAAE;qBACjB;AACD,oBAAA,OAAO,KAAK;gBAChB;AACA,gBAAA,IAAI,GAAG,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;gBACrF,OAAO,IAAI,CAAC,EAAE;YAClB,CAAC;AACJ,SAAA,CAAC;IACN;AAAE,IAAA,MAAM;AACJ,QAAA,aAAa,CAAC,IAAI,CAAC,kCAAkC,EAAE;YACnD,SAAS;YACT,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;AAC5C,YAAA,GAAG,IAAI;AACV,SAAA,CAAC;IACN;AAEA,IAAA,OAAO,IAAI;AACf;AAEO,eAAe,uBAAuB,CAAC,OAK7C,EAAA;IACG,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,gBAAgB,CAAC;AACpE,IAAA,OAAO,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,OAAO,IAAI,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3G;AAEM,SAAU,6BAA6B,CAAC,WAAoB,EAAA;AAC9D,IAAA,MAAM,GAAG,GAAG,WAAW,IAAI,4BAA4B,EAAE;AACzD,IAAA,IAAI,GAAG,IAAI,IAAI,EAAE;QACb,UAAU,CAAC,0BAA0B,CAAC;IAC1C;IACA,OAAO,6BAA6B,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;AAC5D;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.api-6Q4_-7oN.js","sources":["../../src/core.interface.ts","../../src/core.utils.ts","../../src/supabase.ts","../../src/core.api.ts","../../src/shared/utils/id.utils.ts","../../src/shared/log/log-persist-hook.ts","../../src/shared/log/log-scope.ts","../../src/shared/log/log-manager.ts","../../src/shared/log/create-logger.ts","../../src/shared/log/log-persist.interface.ts","../../src/list/list.interface.ts","../../src/list/list.api.ts"],"sourcesContent":["import type { PostgrestError } from \"@supabase/supabase-js\";\n\nexport interface Target {\n id: string;\n category: string;\n name: string;\n value: string;\n tagList: string[];\n extra?: string;\n details?: unknown;\n created_at: string;\n}\n\n/** Target row before persistence — no `id` or `created_at`. */\nexport type TargetDraft<T extends Target> = Omit<T, \"id\" | \"created_at\">;\n\nexport enum StatusCode {\n SUCCESS = 200,\n ERROR = 400,\n}\n\nexport interface SupabaseResponse<T = unknown> {\n status_code: StatusCode;\n success: boolean;\n message?: string;\n data?: T;\n error?: {\n message: string;\n code?: string;\n };\n}\n\nexport const generateResponse = {\n success<T>(data?: T, message?: string): SupabaseResponse<T> {\n return {\n status_code: StatusCode.SUCCESS,\n success: true,\n message,\n data,\n };\n },\n\n error(\n message: string | { key: string; error: PostgrestError } | { key: string; error: string },\n statusCode?: StatusCode,\n code?: string,\n ): SupabaseResponse {\n if (typeof message === \"string\") {\n return {\n status_code: statusCode ?? StatusCode.ERROR,\n success: false,\n error: {\n message,\n code,\n },\n };\n }\n if (typeof message?.error === \"string\") {\n return {\n status_code: statusCode ?? StatusCode.ERROR,\n success: false,\n error: {\n message: `Error from ${message.key}: ${message.error}`,\n code,\n },\n };\n }\n return {\n status_code: statusCode ?? StatusCode.ERROR,\n success: false,\n error: {\n message: `Error from ${message.key}: ${message?.error?.message}`,\n code,\n },\n };\n },\n};\n","import { pick, pickBy } from \"lodash-es\";\n\n/** True when running in a development build (Vite or Node). Defaults to false for safety. */\nexport function isDevEnvironment(): boolean {\n if (typeof import.meta !== \"undefined\" && \"env\" in import.meta) {\n const env = (import.meta as ImportMeta & { env?: { DEV?: boolean; MODE?: string } }).env;\n if (env?.DEV === true || env?.MODE === \"development\") return true;\n if (env?.DEV === false || env?.MODE === \"production\") return false;\n }\n if (typeof process !== \"undefined\" && process.env?.NODE_ENV) {\n return process.env.NODE_ENV !== \"production\";\n }\n return false;\n}\n\nexport function logDev(...args: unknown[]): void {\n if (isDevEnvironment()) {\n console.log(...args);\n }\n}\n\nexport function logDevGroup(label: string, fn: () => void): void {\n if (!isDevEnvironment()) return;\n console.group(label);\n try {\n fn();\n } finally {\n console.groupEnd();\n }\n}\n\n/** Log internal details, then throw a sanitized error safe to expose to callers. */\nexport function handleSupabaseError(context: string, error: unknown, publicMessage?: string): never {\n console.error(`[${context}] failed:`, error);\n throw new Error(publicMessage ?? `[${context}] Operation failed`);\n}\n\n/** Raw payload -> Available data */\nexport abstract class BaseValidator<T extends object> {\n protected requiredFields: (keyof T)[] = [];\n protected optionalFields: (keyof T)[] = [];\n protected ignoredFields: (keyof T)[] = [];\n protected customValidators: ((val: T) => true | string)[] = [];\n\n addCustomValidator(validator: (val: T) => true | string) {\n this.customValidators.push(validator);\n return this;\n }\n\n protected validateField(_field: keyof T, value: unknown): boolean {\n // TODO now only empty check, later should add type checks\n return value != null;\n }\n\n validate = (val: T): T => {\n const errors: string[] = [];\n\n // Step 1: Check required fields\n this.requiredFields.forEach((field) => {\n if (!this.validateField(field, val[field])) {\n errors.push(`Missing required field: ${String(field)}`);\n }\n });\n\n // Step 2: Run custom validators\n this.customValidators.forEach((validator) => {\n const result = validator(val);\n if (result !== true) {\n errors.push(`Custom validation failed ${result}`);\n }\n });\n\n if (errors.length > 0) {\n const errorCount = errors.length;\n const errorList = errors.map((error, index) => ` ${index + 1}. ${error}`).join(\"\\n\");\n\n throw new Error(\n `[${this.constructor.name}] Validation failed (${errorCount} error${errorCount > 1 ? \"s\" : \"\"}):\\n${errorList}`,\n );\n }\n\n // Step 3: Pick required and optional fields\n const required = pick(val, this.requiredFields);\n const optional = pickBy(val, (value, key) => {\n const typedKey = key as keyof T;\n return this.optionalFields.includes(typedKey) && value != null;\n }) as Partial<T>;\n // TODO ignoredFields\n\n return { ...required, ...optional } as T;\n };\n}\n","import { createClient, type SupabaseClient } from \"@supabase/supabase-js\";\nimport { logDev, logDevGroup } from \"./core.utils\";\n\ninterface SupabaseConfig {\n main: {\n url: string;\n anonKey: string;\n };\n auth: {\n url: string;\n anonKey: string;\n } | null;\n}\n\nexport interface SupabaseInitializerParams {\n supabaseUrl: string;\n supabaseAnonKey: string;\n supabaseNeedAuthUrl?: string;\n supabaseNeedAuthAnonKey?: string;\n}\n\nclass SupabaseInitializer {\n private static instance: SupabaseInitializer;\n private isInitialized = false;\n private _mainClient: SupabaseClient | null = null;\n private _authClient: SupabaseClient | null = null;\n\n private constructor() {}\n\n static getInstance(): SupabaseInitializer {\n if (!SupabaseInitializer.instance) {\n SupabaseInitializer.instance = new SupabaseInitializer();\n }\n return SupabaseInitializer.instance;\n }\n\n /**\n * Initialize Supabase clients\n */\n async initialize(\n params: SupabaseInitializerParams,\n ): Promise<{ supabase: SupabaseClient; supabaseAuth: SupabaseClient | null }> {\n if (this.isInitialized) {\n logDev(\"🚫 Supabase already initialized\");\n return { supabase: this._mainClient!, supabaseAuth: this._authClient };\n }\n\n logDev(\"🔧 Initializing Supabase...\");\n\n // Validate and get environment variables\n const config = this.validateEnvironmentVariables(params);\n\n // Create main client\n this._mainClient = createClient(config.main.url, config.main.anonKey, {\n // TODO\n // auth: {\n // persistSession: true,\n // autoRefreshToken: true,\n // },\n });\n\n // Create auth client if configured\n if (config.auth) {\n this._authClient = createClient(config.auth.url, config.auth.anonKey, {\n // TODO\n // auth: {\n // persistSession: true,\n // autoRefreshToken: true,\n // },\n });\n }\n\n // Log configuration\n this.logConfiguration(config);\n\n this.isInitialized = true;\n logDev(\"✅ Supabase initialization completed\");\n\n return { supabase: this._mainClient, supabaseAuth: this._authClient };\n }\n\n private validateEnvironmentVariables({\n supabaseUrl,\n supabaseAnonKey,\n supabaseNeedAuthUrl,\n supabaseNeedAuthAnonKey,\n }: SupabaseInitializerParams): SupabaseConfig {\n const mainUrl = supabaseUrl;\n const mainAnonKey = supabaseAnonKey;\n const authUrl = supabaseNeedAuthUrl;\n const authAnonKey = supabaseNeedAuthAnonKey;\n\n if (!mainUrl || !mainAnonKey) {\n throw new Error(\"Missing required Supabase environment variables: SUPABASE_URL, SUPABASE_ANON_KEY\");\n }\n\n return {\n main: { url: mainUrl, anonKey: mainAnonKey },\n auth: authUrl && authAnonKey ? { url: authUrl, anonKey: authAnonKey } : null,\n };\n }\n\n private logConfiguration(config: SupabaseConfig) {\n logDevGroup(\"🔧 Supabase Configuration\", () => {\n console.log(\"Main URL:\", config.main.url);\n console.log(\"Auth URL:\", config.auth?.url || \"Not configured\");\n console.log(\"Clients:\", {\n main: !!this._mainClient,\n auth: !!this._authClient,\n });\n });\n }\n\n getClients() {\n if (!this.isInitialized) {\n throw new Error(\"Supabase not initialized. Call initialize() first.\");\n }\n return { supabase: this._mainClient!, supabaseAuth: this._authClient };\n }\n\n get client(): SupabaseClient {\n if (!this.isInitialized) {\n throw new Error(\"Supabase not initialized. Call initialize() first.\");\n }\n if (!this._mainClient) {\n throw new Error(\"Main Supabase client is null. Initialization may have failed.\");\n }\n return this._mainClient;\n }\n\n get authClient(): SupabaseClient | null {\n if (!this.isInitialized) {\n throw new Error(\"Supabase not initialized. Call initialize() first.\");\n }\n return this._authClient;\n }\n\n reset() {\n this.isInitialized = false;\n this._mainClient = null;\n this._authClient = null;\n }\n}\n\n/** Process-wide holder — import this; class is module-private. */\nexport const supabase = SupabaseInitializer.getInstance();\n\n/** Public type for the `supabase` holder instance. */\nexport type SupabaseHolder = typeof supabase;\n","import type { PostgrestFilterBuilder } from \"@supabase/postgrest-js\";\nimport type { ZodError, ZodType } from \"zod\";\nimport { generateResponse, type Target, type TargetDraft } from \"./core.interface\";\nimport { BaseValidator, handleSupabaseError } from \"./core.utils\";\nimport { supabase } from \"./supabase\";\n\nexport interface QueryFilter {\n field: string;\n operator: \"eq\" | \"neq\" | \"in\";\n value: unknown;\n}\n\nexport const MAX_TARGET_LIST_PAGE_SIZE = 100;\n\n/** Alias for {@link pollTargetList} batch size cap. */\nexport const MAX_POLL_TARGET_LIST_SIZE = MAX_TARGET_LIST_PAGE_SIZE;\n\nconst TARGET_LIST_ORDER_FIELDS = new Set<string>([\"created_at\", \"name\", \"value\", \"category\"]);\n\n// biome-ignore lint/suspicious/noExplicitAny: PostgrestFilterBuilder is generic over schema\nexport type TargetFilterBuilder = PostgrestFilterBuilder<any, any, any[], \"target\", unknown>;\n\nfunction validateTargetListPagination(pageNum: number, pageSize: number): void {\n if (!Number.isInteger(pageNum) || pageNum < 0) {\n throw new Error(`[getTargetList] pageNum must be a non-negative integer, got ${pageNum}`);\n }\n if (!Number.isInteger(pageSize) || pageSize < 1 || pageSize > MAX_TARGET_LIST_PAGE_SIZE) {\n throw new Error(\n `[getTargetList] pageSize must be an integer between 1 and ${MAX_TARGET_LIST_PAGE_SIZE}, got ${pageSize}`,\n );\n }\n}\n\nfunction resolveTargetListPagination(params: { pageNum?: number; pageSize?: number; limit?: number }): {\n pageNum: number;\n pageSize: number;\n} {\n if (params.limit != null) {\n validateTargetListPagination(0, params.limit);\n return { pageNum: 0, pageSize: params.limit };\n }\n if (params.pageNum === undefined || params.pageSize === undefined) {\n throw new Error(\"[getTargetList] Provide pageNum and pageSize, or limit.\");\n }\n validateTargetListPagination(params.pageNum, params.pageSize);\n return { pageNum: params.pageNum, pageSize: params.pageSize };\n}\n\nfunction validateTargetListOrderBy(orderBy: QueryOrderBy): void {\n if (!TARGET_LIST_ORDER_FIELDS.has(orderBy.field)) {\n throw new Error(\n `[getTargetList] Unsupported orderBy.field \"${orderBy.field}\"; allowed: ${[...TARGET_LIST_ORDER_FIELDS].join(\", \")}`,\n );\n }\n}\n\n/**\n * 构建带 category 作用域的 target 查询(供 getTargetList / getTargetTotalCount / pollTargetList 共用)。\n *\n * 必要性:\n * 1. category 是 target 表的分区维度,所有列表/计数/出队都必须限定 category,避免跨类型扫表。\n * 2. 传入 filterBuilder 时仍强制 `.eq(\"category\", category)`,防止自定义 builder 漏加 category 导致误查或安全问题。\n * 3. 统一 select 普通列表与 count head 两种查询形态,再叠加 filterList,避免三处复制分支逻辑。\n */\nfunction buildCategoryScopedQuery({\n category,\n filterList,\n filterBuilder,\n select,\n selectOptions,\n}: {\n category: Target[\"category\"];\n filterList: QueryFilter[];\n filterBuilder?: TargetFilterBuilder;\n select: string;\n selectOptions?: { count: \"exact\"; head: true };\n}) {\n const base =\n filterBuilder != null\n ? filterBuilder.eq(\"category\", category)\n : selectOptions != null\n ? supabase.client.from(\"target\").select(select, selectOptions).eq(\"category\", category)\n : supabase.client.from(\"target\").select(select).eq(\"category\", category);\n\n return applyQueryFilters(base, filterList);\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: PostgrestFilterBuilder is generic over schema\nfunction applyQueryFilter<Q extends PostgrestFilterBuilder<any, any, any, any, any>>(query: Q, filter: QueryFilter): Q {\n switch (filter.operator) {\n case \"eq\":\n return query.eq(filter.field, filter.value) as Q;\n case \"neq\":\n return query.neq(filter.field, filter.value) as Q;\n case \"in\":\n return query.in(filter.field, filter.value as unknown[]) as Q;\n default: {\n const unsupportedOperator: never = filter.operator;\n throw new Error(`[applyQueryFilter] Unsupported operator: ${unsupportedOperator}`);\n }\n }\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: PostgrestFilterBuilder is generic over schema\nfunction applyQueryFilters<Q extends PostgrestFilterBuilder<any, any, any, any, any>>(\n query: Q,\n filterList: QueryFilter[],\n): Q {\n return filterList.reduce((q, filter) => applyQueryFilter(q, filter), query);\n}\n\nexport interface QueryOrderBy {\n field: string;\n ascending: boolean;\n}\n\nexport interface BaseQueryParams {\n filterList?: QueryFilter[];\n orderBy?: QueryOrderBy;\n}\n\nexport const getTarget = async ({ id, filterList }: { id: string; filterList?: QueryFilter[] }) => {\n const query =\n filterList != null && filterList.length > 0\n ? applyQueryFilters(supabase.client.from(\"target\").select().eq(\"id\", id), filterList)\n : supabase.client.from(\"target\").select().eq(\"id\", id);\n\n const { data, error } = await query.single();\n if (error) {\n handleSupabaseError(\"getTarget\", error, \"Failed to fetch target.\");\n }\n return generateResponse.success<Target>(data as Target);\n};\n\nexport const getPossibleTarget = async ({ filterList }: { filterList: QueryFilter[] }) => {\n const query = applyQueryFilters(supabase.client.from(\"target\").select(), filterList);\n\n const { data, error } = await query.maybeSingle();\n if (error) {\n handleSupabaseError(\"getPossibleTarget\", error, \"Failed to fetch target.\");\n }\n return generateResponse.success<Target | null>(data);\n};\n\nexport interface GetTargetListParams extends BaseQueryParams {\n category: Target[\"category\"];\n /** 0-based page index. Required with pageSize unless `limit` is set. */\n pageNum?: number;\n pageSize?: number;\n /** Shorthand for `{ pageNum: 0, pageSize: limit }`. Max {@link MAX_TARGET_LIST_PAGE_SIZE}. */\n limit?: number;\n /** PostgREST select clause; defaults to `\"*\"`. */\n selectFields?: string;\n /** Custom query builder; `category` and `filterList` are still applied. */\n filterBuilder?: TargetFilterBuilder;\n}\n\n/**\n * Paginated target list by category. Failures throw via `handleSupabaseError` (no `{ error }` envelope).\n */\nexport const getTargetList = async <T extends Target = Target>({\n pageNum,\n pageSize,\n limit,\n category,\n filterList = [],\n orderBy = { field: \"created_at\", ascending: false },\n selectFields = \"*\",\n filterBuilder,\n}: GetTargetListParams) => {\n const { pageNum: resolvedPageNum, pageSize: resolvedPageSize } = resolveTargetListPagination({\n pageNum,\n pageSize,\n limit,\n });\n validateTargetListOrderBy(orderBy);\n\n const query = buildCategoryScopedQuery({\n category,\n filterList,\n filterBuilder,\n select: selectFields,\n });\n\n const { data, error } = await query\n .order(orderBy.field, { ascending: orderBy.ascending })\n .range(resolvedPageNum * resolvedPageSize, (resolvedPageNum + 1) * resolvedPageSize - 1);\n\n if (error) {\n handleSupabaseError(\"getTargetList\", error, \"Failed to fetch target list.\");\n }\n return generateResponse.success<T[]>((data ?? []) as T[]);\n};\n\nexport interface ScanTargetListParams {\n category: Target[\"category\"];\n filterList?: QueryFilter[];\n orderBy?: QueryOrderBy;\n selectFields?: string;\n filterBuilder?: TargetFilterBuilder;\n /** Stop after this many rows (optional guard against runaway scans). */\n maxRows?: number;\n}\n\n/**\n * Scan all rows matching `category` + `filterList` by paging until exhausted.\n *\n * Use for worker bootstrap / sync jobs that need the full matching set.\n * For UI pagination, use {@link getTargetList} (single page, explicit pageNum).\n *\n * Internal batch size is fixed at {@link MAX_TARGET_LIST_PAGE_SIZE} (PostgREST max-rows).\n * Callers receive the full merged result; they do not pass a per-request page size.\n *\n * Uses offset pagination (`.range`). Stable enough for small catalogs (e.g. Repo registry);\n * for large tables under concurrent writes, consider a DB RPC or keyset pagination later.\n */\nexport const scanTargetList = async <T extends Target = Target>({\n category,\n filterList = [],\n orderBy = { field: \"created_at\", ascending: false },\n selectFields = \"*\",\n filterBuilder,\n maxRows,\n}: ScanTargetListParams) => {\n const batchSize = MAX_TARGET_LIST_PAGE_SIZE;\n validateTargetListOrderBy(orderBy);\n if (maxRows != null && (!Number.isInteger(maxRows) || maxRows < 1)) {\n throw new Error(`[scanTargetList] maxRows must be a positive integer, got ${maxRows}`);\n }\n\n const rows: T[] = [];\n let pageNum = 0;\n\n while (true) {\n const query = buildCategoryScopedQuery({\n category,\n filterList,\n filterBuilder,\n select: selectFields,\n });\n\n const { data, error } = await query\n .order(orderBy.field, { ascending: orderBy.ascending })\n .range(pageNum * batchSize, (pageNum + 1) * batchSize - 1);\n\n if (error) {\n handleSupabaseError(\"scanTargetList\", error, \"Failed to scan target list.\");\n }\n\n const page = (data ?? []) as T[];\n if (page.length === 0) {\n break;\n }\n\n rows.push(...page);\n\n if (maxRows != null && rows.length >= maxRows) {\n rows.length = maxRows;\n break;\n }\n\n if (page.length < batchSize) {\n break;\n }\n\n pageNum += 1;\n }\n\n return generateResponse.success(rows);\n};\n\nexport interface GetTargetTotalCountParams extends BaseQueryParams {\n category: Target[\"category\"];\n /** Custom query builder; `category` and `filterList` are still applied. */\n filterBuilder?: TargetFilterBuilder;\n}\nexport const getTargetTotalCount = async ({ category, filterList = [], filterBuilder }: GetTargetTotalCountParams) => {\n const query = buildCategoryScopedQuery({\n category,\n filterList,\n filterBuilder,\n select: \"id\",\n selectOptions: { count: \"exact\", head: true },\n });\n\n const { count, error } = await query;\n\n if (error) {\n handleSupabaseError(\"getTargetTotalCount\", error, \"Failed to fetch target count.\");\n }\n return generateResponse.success<number>(count ?? 0);\n};\n\nfunction validatePollTargetListSize(size: number): void {\n if (!Number.isInteger(size) || size < 1 || size > MAX_POLL_TARGET_LIST_SIZE) {\n throw new Error(\n `[pollTargetList] size must be an integer between 1 and ${MAX_POLL_TARGET_LIST_SIZE}, got ${size}`,\n );\n }\n}\n\nexport interface PollTargetListParams {\n category: Target[\"category\"];\n /** Max rows to read and attempt dequeue (not offset pagination). */\n size: number;\n filterList?: QueryFilter[];\n /** Order by `created_at`. Default `true` (oldest first). */\n ascending?: boolean;\n selectFields?: string;\n}\n\n/**\n * Queue poll: SELECT up to `size` rows matching `category` + `filterList`, ordered by\n * `created_at`, then DELETE each by `id`. Returns only dequeued rows (at-most-once).\n *\n * Delete failures (concurrent consumer) are skipped silently.\n * Failures on the initial SELECT throw via `handleSupabaseError`.\n *\n * TODO(concurrency): 当前为 SELECT → 逐条 DELETE,非 DB 原子出队,多 consumer 并发时可能:\n * - 重叠读取:两个 worker 同一批 SELECT 命中相同行,靠 DELETE 竞速,后者 skip(多数 at-most-once)\n * - TOCTOU:SELECT 与 DELETE 之间无锁,极端情况下 DELETE 0 行仍不报错 → 可能重复计入 polled\n * - 非 exactly-once:行已删但 worker 崩溃未处理 → 消息丢失\n * 若同一 filter 多实例 poll(或多 worker 同 nodeId),需改为 DB 侧原子方案,例如:\n * - RPC:`DELETE … WHERE id IN (SELECT … FOR UPDATE SKIP LOCKED) RETURNING *`\n * - 或 claim 状态机:UPDATE … WHERE pending → DELETE/标记已消费(类似 patchClaimTask 乐观锁)\n * - 短期加固:DELETE 后校验影响行数,0 行则不 push 到 polled\n */\nexport const pollTargetList = async <T extends Target = Target>({\n category,\n size,\n filterList = [],\n ascending = true,\n selectFields = \"*\",\n}: PollTargetListParams) => {\n validatePollTargetListSize(size);\n\n const query = buildCategoryScopedQuery({\n category,\n filterList,\n select: selectFields,\n });\n\n const { data, error } = await query.order(\"created_at\", { ascending }).limit(size);\n\n if (error) {\n handleSupabaseError(\"pollTargetList\", error, \"Failed to fetch targets for poll.\");\n }\n\n const candidates = (data ?? []) as T[];\n const polled: T[] = [];\n\n for (const row of candidates) {\n try {\n await deleteTarget({ id: row.id });\n polled.push(row);\n } catch {\n // Concurrent dequeue — row already removed\n }\n }\n\n return generateResponse.success<T[]>(polled);\n};\n\nexport const deleteTarget = async ({ id, filterList }: { id: string; filterList?: QueryFilter[] }) => {\n // Check whether the target exists given filterList\n if (filterList != null && filterList.length > 0) {\n const query = applyQueryFilters(supabase.client.from(\"target\").select().eq(\"id\", id), filterList);\n const { data: existingTarget, error: existingError } = await query.single();\n if (existingError || existingTarget == null) {\n const msg = `[deleteTarget] Cannot find the target ${id}`;\n console.error(msg, { filterList }, existingError);\n throw new Error(msg);\n }\n }\n const { error } = await supabase.client.from(\"target\").delete().eq(\"id\", id);\n if (error) {\n handleSupabaseError(\"deleteTarget\", error, `Failed to delete target ${id}.`);\n }\n return generateResponse.success();\n};\n\nexport interface PostTargetPayload {\n name: Target[\"name\"];\n category: Target[\"category\"];\n value: Target[\"value\"];\n tagList: Target[\"tagList\"];\n extra?: Target[\"extra\"];\n details?: Target[\"details\"];\n}\n\nclass PostTargetPayloadValidator extends BaseValidator<PostTargetPayload> {\n protected requiredFields: (keyof PostTargetPayload)[] = [\"category\", \"name\", \"value\", \"tagList\"];\n protected optionalFields: (keyof PostTargetPayload)[] = [\"extra\", \"details\"];\n\n constructor() {\n super();\n // Add custom\n this.addCustomValidator((_val) => {\n return true;\n });\n }\n}\n\nexport const postTarget = async (payload: PostTargetPayload) => {\n const validPayload = new PostTargetPayloadValidator().validate(payload);\n\n const { data, error } = await supabase.client\n .from(\"target\")\n .insert([{ ...validPayload }])\n .select()\n .single();\n\n if (error) {\n handleSupabaseError(\"postTarget\", error, \"Failed to create target.\");\n }\n return generateResponse.success<Target>(data as Target);\n};\n\nexport interface PatchTargetPayload extends PostTargetPayload {\n id: string;\n}\n\nexport const OPTIMISTIC_LOCK_FAILED_MESSAGE =\n \"[updateTargetDetails] Optimistic lock failed: target no longer matches expected state.\";\n\n/** Thrown when UPDATE matched no row and the target id is gone (or no locks were used). */\nexport const UPDATE_TARGET_NOT_FOUND_MESSAGE = \"[updateTarget] Target not found or was deleted.\";\n\n/**\n * @deprecated Use {@link updateTarget} (narrow RMW + optimistic lock) or {@link updateTargetDetails}.\n *\n * Full-row rewrite of create-shaped fields. Forces callers to resupply name/value/category,\n * has no optimistic lock, and can accidentally mutate identity columns. Unused in-tree.\n */\nexport const patchTarget = async ({ id, ...restPayload }: PatchTargetPayload) => {\n const { data: currentData, error: fetchError } = await supabase.client\n .from(\"target\")\n .select()\n .eq(\"id\", id)\n .single();\n if (!currentData) {\n throw new Error(\"Target NOT exists\");\n }\n if (fetchError) handleSupabaseError(\"patchTarget\", fetchError, \"Failed to fetch target.\");\n\n const updatedTarget = new PostTargetPayloadValidator().validate(restPayload);\n\n const { data, error } = await supabase.client\n .from(\"target\")\n .update({\n ...updatedTarget,\n })\n .eq(\"id\", id)\n .select()\n .single();\n\n if (error) {\n handleSupabaseError(\"patchTarget\", error, \"Failed to update target.\");\n }\n return generateResponse.success<Target>(data as Target);\n};\n\n/** Mutable Target columns allowed by {@link updateTarget} (identity fields excluded). */\nexport interface UpdateTargetRowSnapshot<D> {\n tagList: string[];\n details: D;\n extra?: string;\n}\n\n/**\n * Narrow patch returned by `updateTarget` updateFn.\n * Omitted keys are left unchanged on the row.\n */\nexport type UpdateTargetPatch<D> = {\n tagList?: string[];\n details?: D;\n extra?: string;\n};\n\n/**\n * Read-modify-write mutable Target columns (`tagList` / `details` / `extra`) with optional\n * DB-level optimistic locking. Does not write `name` / `value` / `category`.\n *\n * Prefer this when the update may touch `tagList` (and optionally `details`/`extra`) in one UPDATE.\n * For details-only flows, {@link updateTargetDetails} remains the thinner API.\n */\nexport interface UpdateTargetParams<D> {\n /** Target row id. */\n id: string;\n /**\n * Builds a narrow patch from the row fetched immediately before UPDATE.\n * Only returned keys are written; omit a key to leave that column unchanged.\n */\n updateFn: (existing: UpdateTargetRowSnapshot<D>) => UpdateTargetPatch<D>;\n /**\n * Optimistic lock conditions applied on UPDATE (not on the prior SELECT).\n * Same semantics as {@link UpdateTargetDetailsParams.optimisticLockFilterList}.\n */\n optimisticLockFilterList?: QueryFilter[];\n}\n\nexport const updateTarget = async <T, D>({ id, updateFn, optimisticLockFilterList = [] }: UpdateTargetParams<D>) => {\n const { data: currentData, error: fetchError } = await supabase.client\n .from(\"target\")\n .select(\"tagList, details, extra\")\n .eq(\"id\", id)\n .single();\n\n if (fetchError) {\n handleSupabaseError(\"updateTarget\", fetchError, \"Failed to fetch target.\");\n }\n if (!currentData) {\n const msg = `[updateTarget] Target NOT exists: ${id}`;\n console.error(msg);\n throw new Error(msg);\n }\n\n const existing: UpdateTargetRowSnapshot<D> = {\n tagList: Array.isArray(currentData.tagList) ? (currentData.tagList as string[]) : [],\n details: currentData.details as D,\n extra: typeof currentData.extra === \"string\" ? currentData.extra : undefined,\n };\n\n const patch = updateFn(existing);\n const updated: {\n tagList?: string[];\n details?: D;\n extra?: string;\n } = {};\n\n if (patch.tagList !== undefined) {\n updated.tagList = patch.tagList;\n }\n if (patch.details !== undefined) {\n updated.details = patch.details;\n }\n if (patch.extra !== undefined) {\n updated.extra = patch.extra;\n }\n\n if (Object.keys(updated).length === 0) {\n throw new Error(\"[updateTarget] updateFn returned an empty patch\");\n }\n\n const updateQuery = applyQueryFilters(\n supabase.client.from(\"target\").update(updated).eq(\"id\", id),\n optimisticLockFilterList,\n );\n\n const { data, error } = await updateQuery.select().maybeSingle();\n\n if (error) {\n handleSupabaseError(\"updateTarget\", error, \"Failed to update target.\");\n }\n if (!data) {\n if (optimisticLockFilterList.length === 0) {\n throw new Error(UPDATE_TARGET_NOT_FOUND_MESSAGE);\n }\n // Empty UPDATE with locks is ambiguous: concurrent delete vs lock predicate miss.\n // Re-SELECT by id only to disambiguate (same id, no lock filters).\n const { data: stillThere, error: recheckError } = await supabase.client\n .from(\"target\")\n .select(\"id\")\n .eq(\"id\", id)\n .maybeSingle();\n if (recheckError) {\n handleSupabaseError(\"updateTarget\", recheckError, \"Failed to recheck target after lock miss.\");\n }\n if (!stillThere) {\n throw new Error(UPDATE_TARGET_NOT_FOUND_MESSAGE);\n }\n throw new Error(OPTIMISTIC_LOCK_FAILED_MESSAGE);\n }\n\n return data as T;\n};\n\n/**\n * Read-modify-write `target.details` with optional DB-level optimistic locking on UPDATE.\n *\n * Do not use application-layer pre-update validators (e.g. checking state after SELECT then\n * UPDATE with only `id`). That pattern is not atomic and loses under concurrency. Pass expected\n * row conditions via `optimisticLockFilterList` so they are applied on the UPDATE statement.\n *\n * For updates that also need `tagList`, use {@link updateTarget}.\n */\nexport interface UpdateTargetDetailsParams<D> {\n /** Target row id. */\n id: string;\n /**\n * Computes new details from the row fetched immediately before UPDATE.\n * Runs after SELECT; the write still relies on `optimisticLockFilterList` for atomic guards.\n */\n updateFn: (existing: D) => D;\n /**\n * Optional `target.extra` derived from existing details (written together with details).\n */\n updateExtraFn?: (existing: D) => string;\n /**\n * Optimistic lock conditions applied on UPDATE (not on the prior SELECT).\n *\n * Replaces the removed `beforeUpdateValidator`: validators ran in app code between read and\n * write and could not prevent concurrent overwrites. These filters become part of the UPDATE\n * WHERE clause (via `applyQueryFilters`), e.g. `{ field: \"details->>status\", operator: \"eq\", value: \"TODO\" }`.\n *\n * If no row matches after UPDATE:\n * - empty locks → not-found (`UPDATE_TARGET_NOT_FOUND_MESSAGE`)\n * - non-empty locks → re-SELECT by id; gone → not-found, still present → `OPTIMISTIC_LOCK_FAILED_MESSAGE`\n * Empty array = update by id only.\n */\n optimisticLockFilterList?: QueryFilter[];\n}\n\nexport const updateTargetDetails = async <T, D>({\n id,\n updateFn,\n updateExtraFn,\n optimisticLockFilterList = [],\n}: UpdateTargetDetailsParams<D>) => {\n return updateTarget<T, D>({\n id,\n optimisticLockFilterList,\n updateFn: (existing) => {\n const nextDetails = updateFn(existing.details);\n if (updateExtraFn == null) {\n return { details: nextDetails };\n }\n return {\n details: nextDetails,\n extra: updateExtraFn(existing.details),\n };\n },\n });\n};\n\nexport const OPTIMISTIC_LOCK_ERROR_CODE = \"OPTIMISTIC_LOCK\" as const;\n\nexport function isOptimisticLockError(error: unknown): boolean {\n return error instanceof Error && error.message === OPTIMISTIC_LOCK_FAILED_MESSAGE;\n}\n\nexport function isOptimisticLockResponse(error: { code?: string } | null | undefined): boolean {\n return error?.code === OPTIMISTIC_LOCK_ERROR_CODE;\n}\n\nexport const CREATE_TARGET_ALREADY_EXISTS_MESSAGE = \"[createTarget] Target already exists\";\n\nconst CREATE_TARGET_REDUNDANCY_MISMATCH_MESSAGE =\n \"[createTarget] Inserted row does not match checkRedundancyFilterList; verify createFn aligns with filters.\";\n\n/** Max rows to fetch during post-verify — only need to detect one other match. */\nconst REDUNDANCY_VERIFY_ROW_LIMIT = 2;\n\nexport function isCreateTargetAlreadyExistsError(error: unknown): boolean {\n return error instanceof Error && error.message === CREATE_TARGET_ALREADY_EXISTS_MESSAGE;\n}\n\n/** Roll back an optimistic insert when redundancy filters match other rows. */\nasync function rollbackCreateTargetInsert(id: string) {\n const { error } = await supabase.client.from(\"target\").delete().eq(\"id\", id);\n if (error) {\n handleSupabaseError(\"createTarget\", error, \"Failed to rollback conflicting insert.\");\n }\n}\n\n/** Roll back the new row and signal a redundancy conflict to the caller. */\nfunction throwCreateTargetAlreadyExists(checkRedundancyFilterList: QueryFilter[]): never {\n console.error(CREATE_TARGET_ALREADY_EXISTS_MESSAGE, checkRedundancyFilterList);\n throw new Error(CREATE_TARGET_ALREADY_EXISTS_MESSAGE);\n}\n\nasync function failCreateTargetRedundancy(selfId: string, checkRedundancyFilterList: QueryFilter[]): Promise<never> {\n await rollbackCreateTargetInsert(selfId);\n return throwCreateTargetAlreadyExists(checkRedundancyFilterList);\n}\n\n/**\n * Create a `target` row with optional payload validation and optimistic redundancy checks.\n *\n * When `checkRedundancyFilterList` is set, uses insert-first + post-verify (not SELECT-before-INSERT).\n * See `.cursor/skills/create-target-redundancy/SKILL.md`.\n */\nexport const createTarget = async <T extends Target, P extends object>({\n payload,\n validator,\n createFn,\n checkRedundancyFilterList,\n upsert = false,\n}: {\n payload: P;\n validator?: new () => BaseValidator<P>;\n createFn: (validPayload: P) => TargetDraft<T>;\n /** Business-key filters; if another row matches after insert, conflict handling runs. */\n checkRedundancyFilterList?: QueryFilter[];\n /**\n * @deprecated Not supported — ignored at runtime. Use domain patch APIs or future RPC upsert.\n * Reserved for a later release; do not pass `true`.\n */\n upsert?: boolean;\n}) => {\n if (upsert) {\n console.warn(\"[createTarget] `upsert` is deprecated and has no effect.\");\n }\n\n const validPayload = validator != null ? new validator().validate(payload) : payload;\n const newTarget = createFn(validPayload);\n\n const hasRedundancyCheck = checkRedundancyFilterList != null && checkRedundancyFilterList.length > 0;\n\n // 1. Optimistic insert (see create-target-redundancy skill)\n const { data, error } = await supabase.client.from(\"target\").insert([newTarget]).select().single();\n if (error) {\n handleSupabaseError(\"createTarget\", error, \"Failed to create target.\");\n }\n\n if (!hasRedundancyCheck) {\n return generateResponse.success<T>(data);\n }\n\n // 2. Post-verify: limit(2) — enough to detect one other row matching the business-key filters\n const { data: matches, error: matchError } = await applyQueryFilters(\n supabase.client.from(\"target\").select(\"id\"),\n checkRedundancyFilterList,\n ).limit(REDUNDANCY_VERIFY_ROW_LIMIT);\n if (matchError) {\n handleSupabaseError(\"createTarget\", matchError, \"Failed to verify target redundancy.\");\n }\n\n const selfId = data.id as string;\n const rows = matches ?? [];\n const selfMatchesFilters = rows.some((row) => row.id === selfId);\n if (!selfMatchesFilters) {\n console.warn(CREATE_TARGET_REDUNDANCY_MISMATCH_MESSAGE, checkRedundancyFilterList);\n }\n\n const hasOtherRow = rows.some((row) => row.id !== selfId);\n\n // 3. No conflict — keep the inserted row; otherwise rollback and reject\n if (!hasOtherRow) {\n return generateResponse.success<T>(data);\n }\n\n return failCreateTargetRedundancy(selfId, checkRedundancyFilterList);\n};\n\nexport function validateWith<P extends object, V extends BaseValidator<P>>(ValidatorClass: new () => V) {\n return <R>(fn: (validPayload: P) => R) => {\n return (payload: P): R => {\n const validPayload = new ValidatorClass().validate(payload);\n return fn(validPayload);\n };\n };\n}\n\nfunction formatZodValidationError(schemaName: string, error: ZodError): Error {\n const errorList = error.issues\n .map((issue, index) => {\n const path = issue.path.length > 0 ? issue.path.join(\".\") : \"(root)\";\n return ` ${index + 1}. ${path}: ${issue.message}`;\n })\n .join(\"\\n\");\n const errorCount = error.issues.length;\n return new Error(\n `[${schemaName}] Validation failed (${errorCount} error${errorCount > 1 ? \"s\" : \"\"}):\\n${errorList}`,\n );\n}\n\n/** Zod-based counterpart to {@link validateWith} — requires `zod` as a peer dependency. */\nexport function validateWithSchema<T extends ZodType>(schema: T, schemaName = \"Schema\") {\n type Parsed = T[\"_output\"];\n return <R>(fn: (validPayload: Parsed) => R | Promise<R>) => {\n return (payload: Parsed): R | Promise<R> => {\n const result = schema.safeParse(payload);\n if (!result.success) {\n throw formatZodValidationError(schemaName, result.error);\n }\n return fn(result.data);\n };\n };\n}\n","/** RFC 4122 v4 UUID for trace / correlation ids. Requires Node 18+ (`engines` in package.json). */\nexport function generateUniqueId(): string {\n return globalThis.crypto.randomUUID();\n}\n","import type { LogEntry } from \"./log-manager\";\n\ntype LogPersistOfferFn = (entry: LogEntry) => void;\n\nlet offerFn: LogPersistOfferFn | null = null;\n\nexport function registerLogPersistOffer(fn: LogPersistOfferFn | null): void {\n offerFn = fn;\n}\n\nexport function offerToLogPersist(entry: LogEntry): void {\n offerFn?.(entry);\n}\n","import { generateUniqueId } from \"../utils/id.utils\";\n\n/** Logger-bound scope: module + trace chain + optional labels. */\nexport interface LogScope {\n module: string;\n traceId: string;\n traceParentId: string | null;\n labels?: Readonly<Record<string, string>>;\n}\n\n/** Partial update for {@link patchScope}. */\nexport type LogScopePatch = Partial<Omit<LogScope, \"labels\">> & {\n labels?: Record<string, string>;\n};\n\n/** Fields allowed on {@link LoggerWithScope.resetScope} — no trace identity changes. */\nexport type LoggerResetScopePatch = {\n module?: string;\n labels?: Record<string, string>;\n};\n\nexport type LogScopeInput = LogScopePatch & Pick<LogScope, \"module\">;\n\ninterface NormalizeScopeOptions {\n /** When true and traceId is missing, generate a new id. */\n generateTraceId?: boolean;\n}\n\n/** Input for {@link patchScope}. */\nexport type PatchScopeInput = {\n scope: LogScope;\n patch: LogScopePatch;\n /**\n * When `false` (default), `patch.traceId` / `patch.traceParentId` are ignored.\n * New spans: use {@link createScope}.\n */\n allowTraceMutation?: boolean;\n};\n\nfunction mergeLabels(\n base?: Readonly<Record<string, string>>,\n patch?: Record<string, string>,\n): Record<string, string> | undefined {\n const merged: Record<string, string> = { ...base, ...patch };\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\n/** Coerce partial input into a {@link LogScope}. */\nexport function normalizeScope(input: LogScopeInput, options?: NormalizeScopeOptions): LogScope {\n const generateTraceId = options?.generateTraceId ?? false;\n const traceId = input.traceId?.trim() || (generateTraceId ? generateUniqueId() : \"\");\n if (!traceId) {\n throw new Error(\"[LogScope] traceId is required (or enable generateTraceId)\");\n }\n\n return {\n module: input.module,\n traceId,\n traceParentId: input.traceParentId ?? null,\n labels: mergeLabels(undefined, input.labels),\n };\n}\n\n/** Input for {@link createScope}. */\nexport type CreateScopeInput = {\n module: string;\n traceId: string;\n traceParentId?: string | null;\n labels?: Record<string, string>;\n /** When set, default traceParentId to parent.traceId and merge labels. */\n parent?: LogScope;\n};\n\n/** Build a scope; optional parent links trace chain and merges labels. */\nexport function createScope(input: CreateScopeInput): LogScope {\n const { module, parent, traceId, traceParentId, labels } = input;\n return normalizeScope({\n module,\n traceId,\n traceParentId: traceParentId ?? (parent != null ? parent.traceId : null),\n labels: parent != null ? mergeLabels(parent.labels, labels) : mergeLabels(undefined, labels),\n });\n}\n\n/** Merge patch into scope (labels deep-merge). Returns a new scope. */\nexport function patchScope(input: PatchScopeInput): LogScope {\n const { scope, patch, allowTraceMutation = false } = input;\n const traceId = allowTraceMutation && patch.traceId != null && patch.traceId !== \"\" ? patch.traceId : scope.traceId;\n const traceParentId =\n allowTraceMutation && patch.traceParentId !== undefined ? patch.traceParentId : scope.traceParentId;\n\n return normalizeScope({\n module: patch.module ?? scope.module,\n traceId,\n traceParentId,\n labels: mergeLabels(scope.labels, patch.labels),\n });\n}\n\n/** Same trace chain, different module (e.g. prepareTask vs executeTask). */\nexport function withModule(scope: LogScope, module: string): LogScope {\n return patchScope({ scope, patch: { module } });\n}\n\nexport function formatScopeLabels(labels?: Readonly<Record<string, string>>): string {\n if (labels == null || Object.keys(labels).length === 0) {\n return \"--\";\n }\n return Object.entries(labels)\n .map(([key, value]) => `${key}:${value}`)\n .join(\",\");\n}\n\n/** Prefer `data`; fall back to deprecated `context` on log rest params. */\nexport function resolveLogData(rest?: { data?: unknown; context?: unknown }): unknown | undefined {\n if (rest?.data !== undefined) {\n return rest.data;\n }\n if (rest?.context !== undefined) {\n return rest.context;\n }\n return undefined;\n}\n","import { isDevEnvironment } from \"../../core.utils\";\nimport { generateUniqueId } from \"../utils/id.utils\";\nimport { offerToLogPersist } from \"./log-persist-hook\";\nimport { formatScopeLabels, type LoggerResetScopePatch, type LogScope, patchScope, resolveLogData } from \"./log-scope\";\n\n/**\n * Log severity and semantics (low → high). `minLevel` filters by {@link LOG_LEVEL_RANK}.\n *\n * | Level | Rank | When to use |\n * |----------|------|-------------|\n * | DEBUG | 0 | Diagnostic detail for dev/troubleshooting; noisy, safe to drop in prod. |\n * | INFO | 1 | Normal operational flow (startup, polling, state transitions). |\n * | SUCCESS | 2 | Positive milestone within a flow (not a separate severity axis — same band as INFO). |\n * | WARN | 3 | Recoverable anomaly or degradation; work continues but worth watching. |\n * | ERROR | 4 | A concrete operation failed (API, task step, I/O); investigate and retry/fix locally. |\n * | CRITICAL | 5 | Invariant violated — design flaw, data-integrity risk, or business rule broken; escalate and fix urgently. |\n */\nenum LogLevel {\n DEBUG = \"DEBUG\",\n INFO = \"INFO\",\n SUCCESS = \"SUCCESS\",\n WARN = \"WARN\",\n ERROR = \"ERROR\",\n CRITICAL = \"CRITICAL\",\n}\n\nconst LOG_LEVEL_RANK: Record<LogLevel, number> = {\n [LogLevel.DEBUG]: 0,\n [LogLevel.INFO]: 1,\n [LogLevel.SUCCESS]: 2,\n [LogLevel.WARN]: 3,\n [LogLevel.ERROR]: 4,\n [LogLevel.CRITICAL]: 5,\n};\n\ninterface LogEntry extends LogScope {\n timestamp: number;\n level: LogLevel;\n message: string;\n topic: string;\n extra?: string;\n /** Per-line structured business payload. */\n data?: unknown;\n}\n\ntype LogRestParams = {\n topic: string;\n extra?: LogEntry[\"extra\"];\n data?: unknown;\n};\n\ntype LogParams = { message: LogEntry[\"message\"] } & LogRestParams;\n\ninterface LogEntryPayload extends LogScope {\n message: LogEntry[\"message\"];\n topic: LogEntry[\"topic\"];\n extra?: LogEntry[\"extra\"];\n data?: LogEntry[\"data\"];\n level: LogEntry[\"level\"];\n}\n\ninterface LogOptions {\n formatTimestamp: boolean;\n formatEmoji: boolean;\n formatPrefix: string;\n /** Logs below this level are skipped. Defaults to DEBUG in dev, INFO in production. */\n minLevel?: LogLevel;\n onLog?: (entry: LogEntry) => void;\n}\n\n/** Per-scoped-logger options for {@link LogManager.withScope}. */\ninterface WithScopeOptions {\n /** Overrides global {@link LogOptions.minLevel} for this logger instance. */\n minLevel?: LogLevel;\n}\n\nconst DEFAULT_OPTIONS: LogOptions = {\n formatTimestamp: true,\n formatEmoji: true,\n formatPrefix: \"\",\n minLevel: isDevEnvironment() ? LogLevel.DEBUG : LogLevel.INFO,\n};\n\ninterface LoggerWithScope {\n debug: (message: LogParams[\"message\"], restParams: LogRestParams) => void;\n info: (message: LogParams[\"message\"], restParams: LogRestParams) => void;\n success: (message: LogParams[\"message\"], restParams: LogRestParams) => void;\n warn: (message: LogParams[\"message\"], restParams: LogRestParams) => void;\n error: (message: LogParams[\"message\"], restParams: LogRestParams) => void;\n critical: (message: LogParams[\"message\"], restParams: LogRestParams) => void;\n /** Merge labels / module into this logger's bound scope (trace fields are not mutable). */\n resetScope: (patch: LoggerResetScopePatch) => void;\n}\n\nfunction mergeLogOptions(options?: Partial<LogOptions>): LogOptions {\n return { ...DEFAULT_OPTIONS, ...options };\n}\n\nfunction formatDataValue(value: unknown): string {\n if (value === undefined) {\n return \"\";\n }\n if (typeof value === \"string\") {\n return value;\n }\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nfunction validateLogScope(logScope: LogScope): void {\n const missing: string[] = [];\n if (!logScope.module?.trim()) {\n missing.push(\"module\");\n }\n if (!logScope.traceId?.trim()) {\n missing.push(\"traceId\");\n }\n if (logScope.traceParentId !== null && typeof logScope.traceParentId !== \"string\") {\n missing.push(\"traceParentId\");\n }\n if (missing.length > 0) {\n console.warn(`[LogManager] LogScope missing or invalid: ${missing.join(\", \")}`, logScope);\n }\n}\n\nclass LogManager {\n private static instance: LogManager;\n private options: LogOptions;\n private readonly levelEmojis = {\n [LogLevel.DEBUG]: \"🔍\",\n [LogLevel.INFO]: \"ℹ️\",\n [LogLevel.SUCCESS]: \"✅\",\n [LogLevel.WARN]: \"⚠️\",\n [LogLevel.ERROR]: \"❌\",\n [LogLevel.CRITICAL]: \"💀\",\n };\n\n private constructor(options?: Partial<LogOptions>) {\n this.options = mergeLogOptions(options);\n }\n\n public static getInstance(options?: Partial<LogOptions>): LogManager {\n if (!LogManager.instance) {\n LogManager.instance = new LogManager(options);\n } else if (options != null && Object.keys(options).length > 0) {\n console.warn(\n \"[LogManager] getInstance(options) ignored — singleton already created. Use setOptions() instead.\",\n );\n }\n return LogManager.instance;\n }\n\n public setOptions(options: Partial<LogOptions>): void {\n this.options = mergeLogOptions({ ...this.options, ...options });\n }\n\n private getMinLevel(): LogLevel {\n return this.options.minLevel ?? DEFAULT_OPTIONS.minLevel ?? LogLevel.INFO;\n }\n\n private shouldLog(level: LogLevel, scopeMinLevel?: LogLevel): boolean {\n const minLevel = scopeMinLevel ?? this.getMinLevel();\n return LOG_LEVEL_RANK[level] >= LOG_LEVEL_RANK[minLevel];\n }\n\n private createLogEntry(payload: LogEntryPayload): LogEntry {\n const { level, message, topic, extra, data, module, traceId, traceParentId, labels } = payload;\n return {\n timestamp: Date.now(),\n level,\n message,\n topic,\n module,\n traceId,\n traceParentId,\n labels,\n extra,\n data,\n };\n }\n\n private formatLevelTag(entry: LogEntry): string {\n const emoji = this.options.formatEmoji ? `${this.levelEmojis[entry.level]} ` : \"\";\n if (entry.level === LogLevel.CRITICAL) {\n return `[${emoji}*** ${entry.level} ***]`;\n }\n return `[${emoji}${entry.level}]`;\n }\n\n private formatLog(entry: LogEntry): string {\n const parts: string[] = [];\n\n if (this.options.formatTimestamp) {\n parts.push(`[${new Date(entry.timestamp).toISOString()}]`);\n }\n\n parts.push(this.formatLevelTag(entry));\n parts.push(\n `traceId=${entry.traceId} parent=${entry.traceParentId ?? \"null\"} labels=${formatScopeLabels(entry.labels)} module=${entry.module} topic=${entry.topic}`,\n );\n\n if (this.options.formatPrefix) {\n parts.push(`prefix=${this.options.formatPrefix}`);\n }\n\n const message = entry.level === LogLevel.CRITICAL ? `>>> ${entry.message} <<<` : entry.message;\n parts.push(`| ${message}`);\n\n if (entry.extra) {\n parts.push(`| extra=${entry.extra}`);\n }\n\n const dataText = formatDataValue(entry.data);\n if (dataText) {\n parts.push(`| data=${dataText}`);\n }\n\n return parts.join(\" \");\n }\n\n private emitLog(entry: LogEntry, formatted: string): void {\n switch (entry.level) {\n case LogLevel.WARN:\n console.warn(formatted);\n break;\n case LogLevel.ERROR:\n case LogLevel.CRITICAL:\n console.error(formatted);\n break;\n default:\n console.log(formatted);\n }\n }\n\n private log(\n level: LogLevel,\n message: LogParams[\"message\"],\n logScope: LogScope,\n restParams: LogRestParams,\n scopeMinLevel?: LogLevel,\n ) {\n if (!this.shouldLog(level, scopeMinLevel)) {\n return;\n }\n\n validateLogScope(logScope);\n if (!restParams.topic?.trim()) {\n throw new Error(\"[LogManager] topic is required on every log call\");\n }\n\n const { topic, extra } = restParams;\n const data = resolveLogData(restParams);\n const entry = this.createLogEntry({\n level,\n message,\n topic,\n extra,\n data,\n ...logScope,\n });\n\n const formatted = this.formatLog(entry);\n this.emitLog(entry, formatted);\n this.options.onLog?.(entry);\n offerToLogPersist(entry);\n }\n\n public generateTraceId(): string {\n return generateUniqueId();\n }\n\n public debug(message: LogParams[\"message\"], logScope: LogScope, restParams: LogRestParams) {\n this.log(LogLevel.DEBUG, message, logScope, restParams);\n }\n\n public info(message: LogParams[\"message\"], logScope: LogScope, restParams: LogRestParams) {\n this.log(LogLevel.INFO, message, logScope, restParams);\n }\n\n public success(message: LogParams[\"message\"], logScope: LogScope, restParams: LogRestParams) {\n this.log(LogLevel.SUCCESS, message, logScope, restParams);\n }\n\n public warn(message: LogParams[\"message\"], logScope: LogScope, restParams: LogRestParams) {\n this.log(LogLevel.WARN, message, logScope, restParams);\n }\n\n public error(message: LogParams[\"message\"], logScope: LogScope, restParams: LogRestParams) {\n this.log(LogLevel.ERROR, message, logScope, restParams);\n }\n\n public critical(message: LogParams[\"message\"], logScope: LogScope, restParams: LogRestParams) {\n this.log(LogLevel.CRITICAL, message, logScope, restParams);\n }\n\n public withScope(scope: LogScope, options?: WithScopeOptions): { logger: LoggerWithScope; scope: LogScope } {\n const boundScope: LogScope = { ...scope, labels: scope.labels ? { ...scope.labels } : undefined };\n const scopeMinLevel = options?.minLevel;\n\n const logger: LoggerWithScope = {\n debug: (message, restParams) => this.log(LogLevel.DEBUG, message, boundScope, restParams, scopeMinLevel),\n info: (message, restParams) => this.log(LogLevel.INFO, message, boundScope, restParams, scopeMinLevel),\n success: (message, restParams) =>\n this.log(LogLevel.SUCCESS, message, boundScope, restParams, scopeMinLevel),\n warn: (message, restParams) => this.log(LogLevel.WARN, message, boundScope, restParams, scopeMinLevel),\n error: (message, restParams) => this.log(LogLevel.ERROR, message, boundScope, restParams, scopeMinLevel),\n critical: (message, restParams) =>\n this.log(LogLevel.CRITICAL, message, boundScope, restParams, scopeMinLevel),\n resetScope: (patch) => {\n const next = patchScope({\n scope: boundScope,\n patch,\n allowTraceMutation: false,\n });\n boundScope.module = next.module;\n boundScope.traceId = next.traceId;\n boundScope.traceParentId = next.traceParentId;\n boundScope.labels = next.labels;\n },\n };\n\n return { logger, scope: boundScope };\n }\n}\n\nexport const logManager = LogManager.getInstance();\nexport type { LogEntry, LoggerWithScope, LogOptions, LogRestParams, WithScopeOptions };\nexport { LogLevel, LogManager };\n","import { type LoggerWithScope, type LogLevel, logManager } from \"./log-manager\";\nimport { createScope, type LogScope, type LogScopePatch } from \"./log-scope\";\n\ntype CreateLoggerLevelOption = {\n /** Overrides global minimum level for this logger only. */\n minLevel?: LogLevel;\n};\n\n/** Build scope from fields, then bind a logger. */\nexport type CreateLoggerFromModuleInput = {\n module: string;\n traceId?: string;\n traceParentId?: string | null;\n labels?: Record<string, string>;\n} & CreateLoggerLevelOption;\n\n/** Bind a logger to an existing {@link LogScope}. */\nexport type CreateLoggerFromScopeInput = {\n scope: LogScope;\n} & CreateLoggerLevelOption;\n\nexport type CreateLoggerInput = CreateLoggerFromModuleInput | CreateLoggerFromScopeInput;\n\nfunction isScopeInput(input: CreateLoggerInput): input is CreateLoggerFromScopeInput {\n return \"scope\" in input;\n}\n\n/**\n * Returns a scoped logger — one entry for all call sites.\n *\n * - `{ module, traceId?, labels?, … }` — creates a scope (API handlers, one-shot calls)\n * - `{ scope, minLevel? }` — binds an existing scope (`createScope`, `patchScope`, …)\n */\nexport function createLogger(input: CreateLoggerInput): LoggerWithScope {\n const { minLevel } = input;\n const scopeOptions = minLevel != null ? { minLevel } : undefined;\n\n if (isScopeInput(input)) {\n return logManager.withScope(input.scope, scopeOptions).logger;\n }\n\n const scope = createScope({\n module: input.module,\n traceId: input.traceId?.trim() || logManager.generateTraceId(),\n traceParentId: input.traceParentId,\n labels: input.labels,\n });\n return logManager.withScope(scope, scopeOptions).logger;\n}\n\nexport type { LogScopePatch };\n","import type { TargetDraft } from \"../../core.interface\";\nimport type { List } from \"../../list/list.interface\";\nimport type { LogEntry } from \"./log-manager\";\n\n/**\n * `ListDetails.loaderKey` stamped on every persisted log batch (write + read side).\n * Business type: **LogBatch** (transport flush). Pairs with log-service **LogTrace**\n * (`LogTrace.0`) after rekeying by `traceId`.\n */\nexport const LOG_PERSIST_LOADER_KEY = \"LogBatch.0\";\n\n/** Alias for {@link LOG_PERSIST_LOADER_KEY} — preferred when contrasting with LogTrace. */\nexport const LOG_BATCH_LOADER_KEY = LOG_PERSIST_LOADER_KEY;\n\n/** Persistence lane — maps to List tagList and flush policy. */\nexport type LogPersistLane = \"fast\" | \"medium\" | \"slow\";\n\nexport interface LogPersistFastConfig {\n maxBufferEntries: number;\n}\n\nexport interface LogPersistMediumConfig {\n debounceMs: number;\n maxEntries: number;\n maxBytes: number;\n maxBufferEntries: number;\n}\n\nexport interface LogPersistSlowConfig {\n maxEntries: number;\n maxBytes: number;\n maxAgeMs: number;\n maxBufferEntries: number;\n}\n\nexport interface LogPersistConfig {\n fast: LogPersistFastConfig;\n medium: LogPersistMediumConfig;\n slow: LogPersistSlowConfig;\n /** postListCreate / network ceiling per batch */\n postTimeoutMs: number;\n /** Graceful shutdown drain ceiling */\n shutdownDrainTimeoutMs: number;\n}\n\nexport interface EnableLogPersistOptions {\n service: string;\n process: string;\n /** Shared registry root directory — all processes use the same path; each writes its own shard file. */\n registryFilePath?: string;\n config?: Partial<LogPersistConfig>;\n}\n\nexport interface EnsureLogPersistFromEnvOptions {\n /** Overrides LOG_PERSIST_PROCESS when set. */\n process?: string;\n /** Overrides LOG_PERSIST_SERVICE when set. */\n service?: string;\n registryFilePath?: string;\n config?: Partial<LogPersistConfig>;\n}\n\nexport interface LogPersistProcessRecord {\n pid: number;\n enabledAt: string;\n lastHeartbeatAt: string;\n}\n\nexport interface LogPersistRegistryState {\n updatedAt: string;\n service: string;\n processes: Record<string, LogPersistProcessRecord>;\n}\n\nexport interface LogPersistQueueStats {\n fast: number;\n fastRetry: number;\n medium: number;\n slow: number;\n}\n\nexport interface LogPersistQueueBytesStats {\n fast: number;\n fastRetry: number;\n medium: number;\n slow: number;\n}\n\nexport interface LogPersistStats {\n enabled: boolean;\n draining: boolean;\n service: string | null;\n process: string | null;\n queues: LogPersistQueueStats;\n queueBytes: LogPersistQueueBytesStats;\n mediumDebouncePending: boolean;\n laneFlushing: Record<LogPersistLane, boolean>;\n consecutiveFailures: Record<LogPersistLane, number>;\n config: LogPersistConfig;\n lastFlushAt: Record<LogPersistLane, string | null>;\n lastError: string | null;\n lastErrorAt: string | null;\n}\n\nexport interface WaitForLogPersistReadyOptions {\n registryFilePath: string;\n service: string;\n expectedProcesses: string[];\n timeoutMs?: number;\n pollIntervalMs?: number;\n /** Process heartbeat older than this is treated as missing. */\n staleMs?: number;\n}\n\nexport interface LogPersistReadySnapshot {\n ok: boolean;\n missing: string[];\n stale: string[];\n registered: string[];\n}\n\nexport interface LogBatchMeta {\n service: string;\n process: string;\n pid: number;\n lane: LogPersistLane;\n count: number;\n from: number | null;\n to: number | null;\n flushedAt: number;\n idempotencyKey: string;\n}\n\nexport interface BuildLogListDraftInput {\n service: string;\n process: string;\n lane: LogPersistLane;\n idempotencyKey: string;\n entries: LogEntry[];\n}\n\nexport type LogListDraft = TargetDraft<List>;\n","import type { Target } from \"../core.interface\";\n\nexport enum CategoryList {\n LIST = \"list\",\n}\n\nexport interface List extends Target {\n name: string;\n value: string;\n details: ListDetails;\n category: CategoryList;\n}\n\nexport interface ListDetails {\n manifestVersion: number;\n /** Optional list metadata (shape depends on `loaderKey`). */\n meta: unknown;\n /** If string, it is the url of the preview TODO */\n preview: string;\n /** How to render the List */\n loaderKey: string;\n items: Array<unknown>;\n}\n","import { createTarget } from \"../core.api\";\nimport { BaseValidator } from \"../core.utils\";\nimport { CategoryList, type List, type ListDetails } from \"./list.interface\";\n\nexport interface PostListCreatePayload {\n name: List[\"name\"];\n value: List[\"value\"];\n category: List[\"category\"];\n details: ListDetails;\n}\n\nexport class PostListValidator extends BaseValidator<PostListCreatePayload> {\n protected requiredFields: (keyof PostListCreatePayload)[] = [\"name\", \"value\", \"category\", \"details\"];\n protected optionalFields: (keyof PostListCreatePayload)[] = [];\n\n constructor() {\n super();\n // Add custom\n this.addCustomValidator((_val) => {\n return true;\n });\n }\n}\n\nexport const postListCreate = async (payload: PostListCreatePayload) => {\n return createTarget<List, PostListCreatePayload>({\n payload: payload,\n validator: PostListValidator,\n createFn: (validPayload) => {\n const { name, value, category, details } = validPayload;\n\n return {\n name,\n category,\n value,\n tagList: [],\n details,\n };\n },\n });\n};\n\n/** Log batch create — idempotent on List.value (stable batch hash). */\nexport const postLogListCreate = async (payload: PostListCreatePayload) => {\n return createTarget<List, PostListCreatePayload>({\n payload,\n validator: PostListValidator,\n checkRedundancyFilterList: [\n { field: \"category\", operator: \"eq\", value: CategoryList.LIST },\n { field: \"value\", operator: \"eq\", value: payload.value },\n ],\n createFn: (validPayload) => {\n const { name, value, category, details } = validPayload;\n\n return {\n name,\n category,\n value,\n tagList: [],\n details,\n };\n },\n });\n};\n"],"names":[],"mappings":"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"}