@onyx.dev/onyx-database 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +104 -1
- package/dist/aggregates-BGXzij4U.d.cts +1424 -0
- package/dist/aggregates-BGXzij4U.d.ts +1424 -0
- package/dist/edge.cjs +1954 -0
- package/dist/edge.cjs.map +1 -0
- package/dist/edge.d.cts +9 -0
- package/dist/edge.d.ts +9 -0
- package/dist/edge.js +1911 -0
- package/dist/edge.js.map +1 -0
- package/dist/gen/cli/generate.cjs +78 -41
- package/dist/gen/cli/generate.cjs.map +1 -1
- package/dist/index.cjs +78 -40
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -1407
- package/dist/index.d.ts +3 -1407
- package/dist/index.js +78 -40
- package/dist/index.js.map +1 -1
- package/dist/schema/cli/schema.cjs +78 -40
- package/dist/schema/cli/schema.cjs.map +1 -1
- package/package.json +22 -5
package/dist/edge.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config/defaults.ts","../src/errors/config-error.ts","../src/config/chain-edge.ts","../src/errors/http-error.ts","../src/core/http.ts","../src/core/stream.ts","../src/builders/query-results.ts","../src/helpers/condition-normalizer.ts","../src/builders/cascade-relationship-builder.ts","../src/helpers/schema-diff.ts","../src/impl/onyx-core.ts","../src/impl/onyx-edge.ts","../src/helpers/sort.ts","../src/builders/condition-builder.ts","../src/helpers/conditions.ts","../src/helpers/aggregates.ts","../src/edge.ts"],"names":["max","min","sum","changed","c","resolveConfig","lower","upper"],"mappings":"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","file":"edge.js","sourcesContent":["// filename: src/config/defaults.ts\nexport const DEFAULT_BASE_URL = 'https://api.onyx.dev';\n\nexport const sanitizeBaseUrl = (u: string): string => u.replace(/\\/+$/, '');","// filename: src/errors/config-error.ts\nexport class OnyxConfigError extends Error {\n readonly name = 'OnyxConfigError';\n constructor(message: string) {\n super(message);\n }\n}","// filename: src/config/chain-edge.ts\nimport { DEFAULT_BASE_URL, sanitizeBaseUrl } from './defaults';\nimport { OnyxConfigError } from '../errors/config-error';\nimport type { OnyxConfig } from '../types/public';\nimport type { FetchImpl } from '../types/common';\nimport type { ResolvedConfig } from './types';\n\nconst gProcess = (globalThis as {\n process?: {\n env?: Record<string, string | undefined>;\n stderr?: { write?: (s: string) => void };\n };\n}).process;\n\nconst dbg = (...args: unknown[]): void => {\n if (gProcess?.env?.ONYX_DEBUG == 'true') {\n const fmt = (v: unknown): string => {\n if (typeof v === 'string') return v;\n try {\n return JSON.stringify(v);\n } catch {\n return String(v);\n }\n };\n gProcess.stderr?.write?.(`[onyx-config] ${args.map(fmt).join(' ')}\\n`);\n }\n};\n\nfunction dropUndefined<T extends object>(obj: Partial<T> | undefined): Partial<T> {\n if (!obj) return {};\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) {\n if (v !== undefined) out[k] = v;\n }\n return out as Partial<T>;\n}\n\nfunction readEnv(targetId?: string): Partial<OnyxConfig> {\n const env = gProcess?.env;\n if (!env) return {};\n const pick = (...keys: string[]): string | undefined => {\n for (const k of keys) {\n const v = env[k];\n if (typeof v === 'string') {\n const cleaned = v.replace(/[\\r\\n]+/g, '').trim();\n if (cleaned !== '') return cleaned;\n }\n }\n return undefined;\n };\n\n const envId = pick('ONYX_DATABASE_ID');\n if (targetId && envId !== targetId) return {};\n const res = dropUndefined<OnyxConfig>({\n baseUrl: pick('ONYX_DATABASE_BASE_URL'),\n databaseId: envId,\n apiKey: pick('ONYX_DATABASE_API_KEY'),\n apiSecret: pick('ONYX_DATABASE_API_SECRET'),\n });\n if (Object.keys(res).length === 0) return {};\n dbg('env:', mask(res));\n return res;\n}\n\nexport async function resolveConfig(input?: OnyxConfig): Promise<ResolvedConfig> {\n const configPath = gProcess?.env?.ONYX_CONFIG_PATH;\n if (configPath) {\n throw new OnyxConfigError(\n 'ONYX_CONFIG_PATH is not supported in edge runtimes. Provide env vars or explicit config.',\n );\n }\n\n const env = readEnv(input?.databaseId);\n const merged: Partial<OnyxConfig> = {\n baseUrl: DEFAULT_BASE_URL,\n ...dropUndefined<OnyxConfig>(env),\n ...dropUndefined<OnyxConfig>(input),\n };\n\n dbg('merged (pre-validate):', mask(merged));\n\n const baseUrl = sanitizeBaseUrl(merged.baseUrl ?? DEFAULT_BASE_URL);\n const databaseId = merged.databaseId ?? '';\n const apiKey = merged.apiKey ?? '';\n const apiSecret = merged.apiSecret ?? '';\n const gfetch = (globalThis as { fetch?: FetchImpl }).fetch;\n const fetchImpl: FetchImpl =\n merged.fetch ??\n (typeof gfetch === 'function'\n ? (u, i) => gfetch(u, i)\n : async () => {\n throw new OnyxConfigError('No fetch available; provide OnyxConfig.fetch');\n });\n const retryConfig = merged.retry ?? {};\n const retryEnabled = retryConfig.enabled ?? true;\n const maxRetries = retryConfig.maxRetries ?? 3;\n const retryInitialDelayMs = retryConfig.initialDelayMs ?? 300;\n\n const missing: string[] = [];\n if (!databaseId) missing.push('databaseId');\n if (!apiKey) missing.push('apiKey');\n if (!apiSecret) missing.push('apiSecret');\n if (missing.length) {\n dbg('validation failed. merged:', mask(merged));\n const sources = ['env', 'explicit config'];\n throw new OnyxConfigError(\n `Missing required config: ${missing.join(', ')}. Sources: ${sources.join(', ')}`,\n );\n }\n\n const resolved: ResolvedConfig = {\n baseUrl,\n databaseId,\n apiKey,\n apiSecret,\n fetch: fetchImpl,\n retryEnabled,\n maxRetries,\n retryInitialDelayMs,\n };\n dbg('resolved:', mask(resolved));\n return resolved;\n}\n\n// Redacts secrets for debug logging\nfunction mask<T extends object>(obj: T): T {\n const clone = { ...(obj as Record<string, unknown>) } as Record<string, unknown>;\n if (typeof clone.apiKey === 'string') clone.apiKey = '***';\n if (typeof clone.apiSecret === 'string') clone.apiSecret = '***';\n return clone as unknown as T;\n}\n","// filename: src/errors/http-error.ts\nexport class OnyxHttpError extends Error {\n readonly name = 'OnyxHttpError';\n readonly status: number;\n readonly statusText: string;\n readonly body: unknown;\n readonly rawBody: string;\n\n constructor(message: string, status: number, statusText: string, body: unknown, rawBody: string) {\n super(message);\n this.status = status;\n this.statusText = statusText;\n this.body = body;\n this.rawBody = rawBody;\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n status: this.status,\n statusText: this.statusText,\n body: this.body,\n rawBody: this.rawBody,\n stack: this.stack,\n };\n }\n\n [Symbol.for('nodejs.util.inspect.custom')](): Record<string, unknown> {\n return this.toJSON();\n }\n}","// filename: src/core/http.ts\nimport { OnyxHttpError } from '../errors/http-error';\nimport { OnyxConfigError } from '../errors/config-error';\nimport type { FetchImpl } from '../types/common';\n\nexport function parseJsonAllowNaN(txt: string): unknown {\n try {\n return JSON.parse(txt);\n } catch {\n const fixed = txt.replace(/(:\\s*)(NaN|Infinity|-Infinity)(\\s*[,}])/g, '$1null$3');\n return JSON.parse(fixed);\n }\n}\n\nexport interface HttpClientOptions {\n baseUrl: string;\n apiKey: string;\n apiSecret: string;\n fetchImpl?: FetchImpl;\n defaultHeaders?: Record<string, string>;\n requestLoggingEnabled?: boolean;\n responseLoggingEnabled?: boolean;\n retryEnabled?: boolean;\n maxRetries?: number;\n retryInitialDelayMs?: number;\n}\n\nexport class HttpClient {\n private readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly apiSecret: string;\n private readonly fetchImpl: FetchImpl;\n private readonly defaults: Record<string, string>;\n private readonly requestLoggingEnabled: boolean;\n private readonly responseLoggingEnabled: boolean;\n private readonly retryEnabled: boolean;\n private readonly maxRetries: number;\n private readonly retryInitialDelayMs: number;\n private readonly shouldRetry: (method: string, path: string) => boolean;\n\n private static parseRetryAfter(header: string | null): number | null {\n if (!header) return null;\n const trimmed = header.trim();\n if (trimmed === '') return null;\n const seconds = Number(trimmed);\n if (Number.isFinite(seconds)) {\n return Math.max(0, seconds * 1000);\n }\n const dateMs = Date.parse(trimmed);\n if (!Number.isNaN(dateMs)) {\n const now = Date.now();\n return Math.max(0, dateMs - now);\n }\n return null;\n }\n\n constructor(opts: HttpClientOptions) {\n if (!opts.baseUrl || opts.baseUrl.trim() === '') {\n throw new OnyxConfigError('baseUrl is required');\n }\n try {\n // ensure baseUrl has protocol; URL constructor will throw otherwise\n new URL(opts.baseUrl);\n } catch {\n throw new OnyxConfigError('baseUrl must include protocol, e.g. https://');\n }\n this.baseUrl = opts.baseUrl.replace(/\\/+$/, '');\n this.apiKey = opts.apiKey;\n this.apiSecret = opts.apiSecret;\n const gfetch = (globalThis as { fetch?: FetchImpl }).fetch;\n if (opts.fetchImpl) {\n this.fetchImpl = opts.fetchImpl;\n } else if (typeof gfetch === 'function') {\n this.fetchImpl = (url, init) => gfetch(url, init);\n } else {\n throw new Error('global fetch is not available; provide OnyxConfig.fetch');\n }\n this.defaults = Object.assign({}, opts.defaultHeaders);\n const envDebug =\n (globalThis as { process?: { env?: Record<string, string | undefined> } }).process\n ?.env?.ONYX_DEBUG === 'true';\n this.requestLoggingEnabled = !!opts.requestLoggingEnabled || envDebug;\n this.responseLoggingEnabled = !!opts.responseLoggingEnabled || envDebug;\n this.retryEnabled = opts.retryEnabled ?? true;\n this.maxRetries = Math.max(0, opts.maxRetries ?? 2);\n this.retryInitialDelayMs = Math.max(0, opts.retryInitialDelayMs ?? 100);\n this.shouldRetry = (method: string, path: string) =>\n method === 'GET' || path.startsWith('/query/');\n }\n\n headers(extra?: Record<string, string>): Record<string, string> {\n const extras = { ...(extra ?? {}) };\n delete extras['x-onyx-key'];\n delete extras['x-onyx-secret'];\n return {\n 'x-onyx-key': this.apiKey,\n 'x-onyx-secret': this.apiSecret,\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n ...this.defaults,\n ...extras,\n };\n }\n\n async request<T = unknown>(\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE',\n path: string,\n body?: unknown,\n extraHeaders?: Record<string, string>\n ): Promise<T> {\n if (!path.startsWith('/')) {\n throw new OnyxConfigError('path must start with /');\n }\n const url = `${this.baseUrl}${path}`;\n const headers = this.headers({\n ...(method === 'DELETE' ? { Prefer: 'return=representation' } : {}),\n ...(extraHeaders ?? {}),\n });\n const hasExplicitContentType =\n (extraHeaders && 'Content-Type' in extraHeaders) ||\n Object.prototype.hasOwnProperty.call(this.defaults, 'Content-Type');\n if (body == null && !hasExplicitContentType) delete headers['Content-Type'];\n if (this.requestLoggingEnabled) {\n console.log(`${method} ${url}`);\n if (body != null) {\n const logBody = typeof body === 'string' ? body : JSON.stringify(body);\n console.log(logBody);\n }\n const headerLog = { ...headers, 'x-onyx-secret': '[REDACTED]' };\n console.log('Headers:', headerLog);\n }\n const payload =\n body == null ? undefined : typeof body === 'string' ? body : JSON.stringify(body);\n const init = {\n method,\n headers,\n body: payload,\n };\n\n // Retries are limited to GET requests to avoid replaying mutations.\n const canRetry = this.retryEnabled && this.shouldRetry(method, path);\n const maxAttempts = canRetry ? this.maxRetries + 1 : 1;\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n const res = await this.fetchImpl(url, init);\n const contentType = res.headers.get('Content-Type') || '';\n const raw = await res.text();\n if (this.responseLoggingEnabled) {\n const statusLine = `${res.status} ${res.statusText}`.trim();\n console.log(statusLine);\n if (raw.trim().length > 0) {\n console.log(raw);\n }\n }\n const isJson =\n raw.trim().length > 0 &&\n (contentType.includes('application/json') || /^[\\[{]/.test(raw.trim()));\n const data = isJson ? parseJsonAllowNaN(raw) : raw;\n if (!res.ok) {\n const msg =\n typeof data === 'object' &&\n data !== null &&\n 'error' in data &&\n typeof (data as { error?: { message?: unknown } }).error?.message === 'string'\n ? String((data as { error: { message: unknown } }).error.message)\n : `${res.status} ${res.statusText}`;\n if (canRetry && res.status >= 500 && attempt + 1 < maxAttempts) {\n const serverRetry = HttpClient.parseRetryAfter(res.headers.get('retry-after'));\n const backoff = this.retryInitialDelayMs * 2 ** attempt;\n const delay = serverRetry ?? backoff;\n await new Promise((r) => setTimeout(r, delay));\n continue;\n }\n throw new OnyxHttpError(msg, res.status, res.statusText, data, raw);\n }\n return data as T;\n } catch (err) {\n const retryable =\n canRetry && (!(err instanceof OnyxHttpError) || err.status >= 500);\n if (attempt + 1 < maxAttempts && retryable) {\n const delay = this.retryInitialDelayMs * 2 ** attempt;\n await new Promise((r) => setTimeout(r, delay));\n continue;\n }\n throw err;\n }\n }\n // unreachable but satisfies TypeScript\n throw new Error('Request failed after retries');\n }\n}\n","// filename: src/core/stream.ts\nimport type { FetchImpl, StreamAction } from '../types/common';\nimport { OnyxHttpError } from '../errors/http-error';\nimport { parseJsonAllowNaN } from './http';\n\nconst debug = (...args: unknown[]): void => {\n if ((globalThis as { process?: { env?: Record<string, string | undefined> } }).process?.env?.ONYX_STREAM_DEBUG == \"true\")\n console.log('[onyx-stream]', ...args);\n};\n\nexport interface StreamHandlers<T = unknown> {\n onItemAdded?: (entity: T) => void;\n onItemUpdated?: (entity: T) => void;\n onItemDeleted?: (entity: T) => void;\n onItem?: (entity: T | null, action: StreamAction) => void;\n}\n\nexport async function openJsonLinesStream<T = unknown>(\n fetchImpl: FetchImpl,\n url: string,\n init: { method?: string; headers?: Record<string, string>; body?: string } = {},\n handlers: StreamHandlers<T> = {},\n): Promise<{ cancel: () => void }> {\n interface Reader {\n cancel(): void;\n read(): Promise<{ done: boolean; value?: Uint8Array }>;\n }\n interface StreamBody { getReader(): Reader; }\n\n const decoder = new TextDecoder('utf-8');\n let buffer = '';\n let canceled = false;\n let currentReader: Reader | null = null;\n let retryCount = 0;\n const maxRetries = 4;\n\n const processLine = (line: string): void => {\n const trimmed = line.trim();\n debug('line', trimmed);\n if (!trimmed || trimmed.startsWith(':')) return;\n const jsonLine = trimmed.startsWith('data:') ? trimmed.slice(5).trim() : trimmed;\n let obj: unknown;\n try {\n obj = parseJsonAllowNaN(jsonLine);\n } catch {\n return;\n }\n const rawAction =\n (obj as {\n action?: string;\n event?: string;\n type?: string;\n eventType?: string;\n changeType?: string;\n }).action ??\n (obj as {\n action?: string;\n event?: string;\n type?: string;\n eventType?: string;\n changeType?: string;\n }).event ??\n (obj as {\n action?: string;\n event?: string;\n type?: string;\n eventType?: string;\n changeType?: string;\n }).type ??\n (obj as {\n action?: string;\n event?: string;\n type?: string;\n eventType?: string;\n changeType?: string;\n }).eventType ??\n (obj as {\n action?: string;\n event?: string;\n type?: string;\n eventType?: string;\n changeType?: string;\n }).changeType;\n const entity = (obj as { entity?: T | null }).entity;\n const action = rawAction?.toUpperCase();\n if (\n action === 'CREATE' ||\n action === 'CREATED' ||\n action === 'ADDED' ||\n action === 'ADD' ||\n action === 'INSERT' ||\n action === 'INSERTED'\n )\n handlers.onItemAdded?.(entity as T);\n else if (action === 'UPDATE' || action === 'UPDATED')\n handlers.onItemUpdated?.(entity as T);\n else if (action === 'DELETE' || action === 'DELETED' || action === 'REMOVE' || action === 'REMOVED')\n handlers.onItemDeleted?.(entity as T);\n const canonical =\n action === 'ADDED' ||\n action === 'ADD' ||\n action === 'CREATE' ||\n action === 'CREATED' ||\n action === 'INSERT' ||\n action === 'INSERTED'\n ? 'CREATE'\n : action === 'UPDATED' || action === 'UPDATE'\n ? 'UPDATE'\n : action === 'DELETED' || action === 'DELETE' || action === 'REMOVE' || action === 'REMOVED'\n ? 'DELETE'\n : action;\n if (canonical && canonical !== 'KEEP_ALIVE')\n handlers.onItem?.(entity ?? null, canonical as StreamAction);\n debug('dispatch', canonical, entity);\n };\n\n const connect = async (): Promise<void> => {\n if (canceled) return;\n debug('connecting', url);\n try {\n const res = await fetchImpl(url, {\n method: init.method ?? 'PUT',\n headers: init.headers ?? {},\n body: init.body,\n });\n debug('response', res.status, res.statusText);\n if (!res.ok) {\n const raw = await res.text();\n let parsed: unknown = raw;\n try { parsed = parseJsonAllowNaN(raw); } catch { /* ignore */ }\n debug('non-ok', res.status);\n throw new OnyxHttpError(`${res.status} ${res.statusText}`, res.status, res.statusText, parsed, raw);\n }\n const body = (res as { body?: StreamBody }).body;\n if (!body || typeof body.getReader !== 'function') {\n debug('no reader');\n return;\n }\n currentReader = body.getReader();\n debug('connected');\n retryCount = 0;\n pump();\n } catch (err) {\n debug('connect error', err);\n if (canceled) return;\n if (retryCount >= maxRetries) return;\n const delay = Math.min(1000 * 2 ** retryCount, 30000);\n retryCount++;\n await new Promise((resolve) => setTimeout(resolve, delay));\n void connect();\n }\n };\n\n const pump = (): void => {\n if (canceled || !currentReader) return;\n currentReader\n .read()\n .then(({ done, value }) => {\n if (canceled) return;\n debug('chunk', { done, length: value?.length ?? 0 });\n if (done) {\n debug('done');\n void connect();\n return;\n }\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n for (const line of lines) processLine(line);\n pump();\n })\n .catch((err) => {\n debug('pump error', err);\n if (!canceled) void connect();\n });\n };\n\n await connect();\n\n return {\n cancel() {\n if (canceled) return;\n canceled = true;\n try { currentReader?.cancel(); } catch { /* ignore */ }\n }\n };\n}\n","/**\n * Array-like container for paginated query results. Provides helper methods\n * to traverse and aggregate records across pages.\n *\n * @example\n * ```ts\n * const results = new QueryResults(users, nextToken, fetchNext);\n * const firstUser = results.first();\n * ```\n */\nexport type QueryResultsPromise<T> = Promise<QueryResults<T>> & {\n [K in keyof QueryResults<T> as QueryResults<T>[K] extends (...args: any[]) => any ? K : never]:\n QueryResults<T>[K] extends (...args: infer P) => infer R ? (...args: P) => Promise<Awaited<R>> : never;\n};\n\nexport class QueryResults<T> extends Array<T> {\n /** Token for the next page of results or null. */\n nextPage: string | null;\n private readonly fetcher?: (token: string) => Promise<QueryResults<T>>;\n\n /**\n * @param records - Records in the current page.\n * @param nextPage - Token representing the next page.\n * @param fetcher - Function used to fetch the next page when needed.\n * @example\n * ```ts\n * const results = new QueryResults(users, token, t => fetchMore(t));\n * ```\n */\n constructor(\n records: Iterable<T> | ArrayLike<T> | T | null | undefined,\n nextPage: string | null,\n fetcher?: (token: string) => Promise<QueryResults<T>>,\n ) {\n const items: T[] = (() => {\n if (records == null) return [];\n if (Array.isArray(records)) return records;\n if (typeof (records as any)[Symbol.iterator] === 'function') {\n return Array.from(records as Iterable<T>);\n }\n if (typeof (records as any).length === 'number') {\n return Array.from(records as ArrayLike<T>);\n }\n return [records as T];\n })();\n\n super(...items);\n Object.setPrototypeOf(this, new.target.prototype);\n this.nextPage = nextPage;\n this.fetcher = fetcher;\n }\n\n /**\n * Returns the first record in the result set.\n * @throws Error if the result set is empty.\n * @example\n * ```ts\n * const user = results.first();\n * ```\n */\n first(): T {\n if (this.length === 0) throw new Error('QueryResults is empty');\n return this[0];\n }\n\n /**\n * Returns the first record or `null` if the result set is empty.\n * @example\n * ```ts\n * const user = results.firstOrNull();\n * ```\n */\n firstOrNull(): T | null {\n return this.length > 0 ? this[0] : null;\n }\n\n /**\n * Checks whether the current page has no records.\n * @example\n * ```ts\n * if (results.isEmpty()) console.log('no data');\n * ```\n */\n isEmpty(): boolean {\n return this.length === 0;\n }\n\n /**\n * Number of records on the current page.\n * @example\n * ```ts\n * console.log(results.size());\n * ```\n */\n size(): number {\n return this.length;\n }\n\n /**\n * Iterates over each record on the current page only.\n * @param action - Function to invoke for each record.\n * @param thisArg - Optional `this` binding for the callback.\n * @example\n * ```ts\n * results.forEachOnPage(u => console.log(u.id));\n * ```\n */\n forEachOnPage(\n action: (item: T, index: number, array: QueryResults<T>) => void,\n thisArg?: unknown,\n ): void {\n super.forEach((value, index) => {\n action.call(thisArg as any, value, index, this);\n });\n }\n\n /**\n * Iterates over every record across all pages sequentially.\n * @param action - Function executed for each record. Returning `false`\n * stops iteration early.\n * @param thisArg - Optional `this` binding for the callback.\n * @example\n * ```ts\n * await results.forEach(u => {\n * console.log(u.id);\n * });\n * ```\n */\n override forEach(action: (item: T, index: number, array: T[]) => void, thisArg?: unknown): Promise<void> {\n let index = 0;\n return this.forEachAll(async item => {\n const result = await (action as any).call(thisArg as any, item, index, this);\n index += 1;\n return result as boolean | void;\n });\n }\n\n /**\n * Iterates over every record across all pages sequentially.\n * @param action - Function executed for each record. Returning `false`\n * stops iteration early.\n * @example\n * ```ts\n * await results.forEachAll(u => {\n * if (u.disabled) return false;\n * });\n * ```\n */\n async forEachAll(action: (item: T) => boolean | void | Promise<boolean | void>): Promise<void> {\n await this.forEachPage(async records => {\n for (const r of records) {\n const res = await action(r);\n if (res === false) return false;\n }\n return true;\n });\n }\n\n /**\n * Iterates page by page across the result set.\n * @param action - Function invoked with each page of records. Returning\n * `false` stops iteration.\n * @example\n * ```ts\n * await results.forEachPage(page => {\n * console.log(page.length);\n * });\n * ```\n */\n async forEachPage(action: (records: T[]) => boolean | void | Promise<boolean | void>): Promise<void> {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let page: QueryResults<T> | null = this;\n while (page) {\n const cont = await action(Array.from(page));\n if (cont === false) return;\n if (page.nextPage && page.fetcher) {\n page = await page.fetcher(page.nextPage);\n } else {\n page = null;\n }\n }\n }\n\n /**\n * Collects all records from every page into a single array.\n * @returns All records.\n * @example\n * ```ts\n * const allUsers = await results.getAllRecords();\n * ```\n */\n async getAllRecords(): Promise<T[]> {\n const all: T[] = [];\n await this.forEachPage(records => {\n all.push(...records);\n });\n return all;\n }\n\n /**\n * Filters all records using the provided predicate.\n * @param predicate - Function used to test each record.\n * @example\n * ```ts\n * const enabled = await results.filterAll(u => u.enabled);\n * ```\n */\n async filterAll(predicate: (record: T) => boolean): Promise<T[]> {\n const all = await this.getAllRecords();\n return all.filter(predicate);\n }\n\n /**\n * Maps all records using the provided transform.\n * @param transform - Mapping function.\n * @example\n * ```ts\n * const names = await results.mapAll(u => u.name);\n * ```\n */\n async mapAll<R>(transform: (record: T) => R): Promise<R[]> {\n const all = await this.getAllRecords();\n return all.map(transform);\n }\n\n /**\n * Extracts values for a field across all records.\n * @param field - Name of the field to pluck.\n * @example\n * ```ts\n * const ids = await results.values('id');\n * ```\n */\n // @ts-expect-error overriding Array#values\n async values<K extends keyof T>(field: K): Promise<Array<T[K]>> {\n const all = await this.getAllRecords();\n return all.map(r => r[field]);\n }\n\n /**\n * Maximum value produced by the selector across all records.\n * @param selector - Function extracting a numeric value.\n * @example\n * ```ts\n * const maxAge = await results.maxOfDouble(u => u.age);\n * ```\n */\n async maxOfDouble(selector: (record: T) => number): Promise<number> {\n const all = await this.getAllRecords();\n return all.reduce((max, r) => Math.max(max, selector(r)), -Infinity);\n }\n\n /**\n * Minimum value produced by the selector across all records.\n * @param selector - Function extracting a numeric value.\n * @example\n * ```ts\n * const minAge = await results.minOfDouble(u => u.age);\n * ```\n */\n async minOfDouble(selector: (record: T) => number): Promise<number> {\n const all = await this.getAllRecords();\n return all.reduce((min, r) => Math.min(min, selector(r)), Infinity);\n }\n\n /**\n * Sum of values produced by the selector across all records.\n * @param selector - Function extracting a numeric value.\n * @example\n * ```ts\n * const total = await results.sumOfDouble(u => u.score);\n * ```\n */\n async sumOfDouble(selector: (record: T) => number): Promise<number> {\n const all = await this.getAllRecords();\n return all.reduce((sum, r) => sum + selector(r), 0);\n }\n\n /**\n * Maximum float value from the selector.\n * @param selector - Function extracting a numeric value.\n */\n async maxOfFloat(selector: (record: T) => number): Promise<number> {\n return this.maxOfDouble(selector);\n }\n /**\n * Minimum float value from the selector.\n * @param selector - Function extracting a numeric value.\n */\n async minOfFloat(selector: (record: T) => number): Promise<number> {\n return this.minOfDouble(selector);\n }\n /**\n * Sum of float values from the selector.\n * @param selector - Function extracting a numeric value.\n */\n async sumOfFloat(selector: (record: T) => number): Promise<number> {\n return this.sumOfDouble(selector);\n }\n /**\n * Maximum integer value from the selector.\n * @param selector - Function extracting a numeric value.\n */\n async maxOfInt(selector: (record: T) => number): Promise<number> {\n return this.maxOfDouble(selector);\n }\n /**\n * Minimum integer value from the selector.\n * @param selector - Function extracting a numeric value.\n */\n async minOfInt(selector: (record: T) => number): Promise<number> {\n return this.minOfDouble(selector);\n }\n /**\n * Sum of integer values from the selector.\n * @param selector - Function extracting a numeric value.\n */\n async sumOfInt(selector: (record: T) => number): Promise<number> {\n return this.sumOfDouble(selector);\n }\n /**\n * Maximum long value from the selector.\n * @param selector - Function extracting a numeric value.\n */\n async maxOfLong(selector: (record: T) => number): Promise<number> {\n return this.maxOfDouble(selector);\n }\n /**\n * Minimum long value from the selector.\n * @param selector - Function extracting a numeric value.\n */\n async minOfLong(selector: (record: T) => number): Promise<number> {\n return this.minOfDouble(selector);\n }\n /**\n * Sum of long values from the selector.\n * @param selector - Function extracting a numeric value.\n */\n async sumOfLong(selector: (record: T) => number): Promise<number> {\n return this.sumOfDouble(selector);\n }\n\n /**\n * Sum of bigint values from the selector.\n * @param selector - Function extracting a bigint value.\n * @example\n * ```ts\n * const total = await results.sumOfBigInt(u => u.balance);\n * ```\n */\n async sumOfBigInt(selector: (record: T) => bigint): Promise<bigint> {\n const all = await this.getAllRecords();\n return all.reduce((sum, r) => sum + selector(r), 0n);\n }\n\n /**\n * Executes an action for each page in parallel.\n * @param action - Function executed for each record concurrently.\n * @example\n * ```ts\n * await results.forEachPageParallel(async u => sendEmail(u));\n * ```\n */\n async forEachPageParallel(action: (item: T) => void | Promise<void>): Promise<void> {\n await this.forEachPage(records => Promise.all(records.map(action)).then(() => true));\n }\n}\n\nexport default QueryResults;\n","import type { QueryCondition } from '../types/protocol';\n\ntype QueryBuilderLike = { toSerializableQueryObject: () => unknown };\n\nfunction isQueryBuilderLike(value: unknown): value is QueryBuilderLike {\n return !!value && typeof (value as QueryBuilderLike).toSerializableQueryObject === 'function';\n}\n\nfunction normalizeCriteriaValue(value: unknown): { value: unknown; changed: boolean } {\n if (Array.isArray(value)) {\n let changed = false;\n const normalized = value.map((item) => {\n const result = normalizeCriteriaValue(item);\n if (result.changed) changed = true;\n return result.value;\n });\n if (!changed) {\n for (let i = 0; i < normalized.length; i += 1) {\n if (normalized[i] !== value[i]) {\n changed = true;\n break;\n }\n }\n }\n return { value: changed ? normalized : value, changed };\n }\n if (isQueryBuilderLike(value)) {\n return { value: value.toSerializableQueryObject(), changed: true };\n }\n return { value, changed: false };\n}\n\nfunction normalizeConditionInternal(condition: QueryCondition): QueryCondition {\n if (condition.conditionType === 'SingleCondition') {\n const { value, changed } = normalizeCriteriaValue(condition.criteria.value);\n if (!changed) return condition;\n return {\n ...condition,\n criteria: { ...condition.criteria, value },\n };\n }\n let changed = false;\n const normalizedConditions = condition.conditions.map((child) => {\n const normalized = normalizeConditionInternal(child);\n if (normalized !== child) changed = true;\n return normalized;\n });\n if (!changed) return condition;\n return { ...condition, conditions: normalizedConditions };\n}\n\nexport function normalizeCondition(condition: QueryCondition | null): QueryCondition | null {\n if (!condition) return condition;\n return normalizeConditionInternal(condition);\n}\n","// filename: src/builders/cascade-relationship-builder.ts\nimport type { ICascadeRelationshipBuilder } from '../types/builders';\n\n/**\n * Builder for constructing cascade relationship strings like\n * `programs:StreamingProgram(channelId, id)`.\n */\nexport class CascadeRelationshipBuilder implements ICascadeRelationshipBuilder {\n private graphName?: string;\n private typeName?: string;\n private target?: string;\n\n /**\n * Set the graph name component.\n *\n * @param name Graph name or namespace.\n * @example\n * ```ts\n * builder.graph('programs');\n * ```\n */\n graph(name: string): ICascadeRelationshipBuilder {\n this.graphName = name;\n return this;\n }\n\n /**\n * Set the graph type component.\n *\n * @param type Graph type to target.\n * @example\n * ```ts\n * builder.graphType('StreamingProgram');\n * ```\n */\n graphType(type: string): ICascadeRelationshipBuilder {\n this.typeName = type;\n return this;\n }\n\n /**\n * Set the target field for the relationship.\n *\n * @param field Target field name.\n * @example\n * ```ts\n * builder.targetField('channelId');\n * ```\n */\n targetField(field: string): ICascadeRelationshipBuilder {\n this.target = field;\n return this;\n }\n\n /**\n * Produce the cascade relationship string using the provided source field.\n *\n * @param field Source field name.\n * @example\n * ```ts\n * const rel = builder\n * .graph('programs')\n * .graphType('StreamingProgram')\n * .targetField('channelId')\n * .sourceField('id');\n * // rel === 'programs:StreamingProgram(channelId, id)'\n * ```\n */\n sourceField(field: string): string {\n if (!this.graphName || !this.typeName || !this.target) {\n throw new Error('Cascade relationship requires graph, type, target, and source fields');\n }\n return `${this.graphName}:${this.typeName}(${this.target}, ${field})`;\n }\n}\n\nexport default CascadeRelationshipBuilder;\n","/* c8 ignore start */\n// filename: src/helpers/schema-diff.ts\nimport type {\n SchemaAttribute,\n SchemaDiff,\n SchemaEntity,\n SchemaIdentifier,\n SchemaIndex,\n SchemaResolver,\n SchemaRevision,\n SchemaTableDiff,\n SchemaTrigger,\n SchemaUpsertRequest,\n} from '../types/public';\n\ntype SchemaLike =\n | SchemaRevision\n | SchemaUpsertRequest\n | { tables?: Array<{ name: string; attributes?: SchemaAttribute[] }> };\n\ntype AttributeChange = SchemaTableDiff['attributes'] extends infer T\n ? T extends { changed: Array<infer C> }\n ? C\n : never\n : never;\ntype IndexChange = SchemaTableDiff['indexes'] extends infer T\n ? T extends { changed: Array<infer C> }\n ? C\n : never\n : never;\ntype ResolverChange = SchemaTableDiff['resolvers'] extends infer T\n ? T extends { changed: Array<infer C> }\n ? C\n : never\n : never;\ntype TriggerChange = SchemaTableDiff['triggers'] extends infer T\n ? T extends { changed: Array<infer C> }\n ? C\n : never\n : never;\n\nfunction mapByName<T extends { name: string }>(items?: T[]): Map<string, T> {\n const map = new Map<string, T>();\n for (const item of items ?? []) {\n if (!item?.name) continue;\n map.set(item.name, item);\n }\n return map;\n}\n\nfunction normalizeEntities(schema: SchemaLike): SchemaEntity[] {\n if (Array.isArray((schema as SchemaRevision).entities)) {\n return (schema as SchemaRevision).entities ?? [];\n }\n const tables = (schema as { tables?: Array<{ name: string; attributes?: SchemaAttribute[] }> }).tables;\n if (!Array.isArray(tables)) return [];\n return tables.map((table) => ({\n name: table.name,\n attributes: table.attributes ?? [],\n }));\n}\n\nfunction normalizePartition(partition?: string): string {\n if (partition == null) return '';\n const trimmed = partition.trim();\n return trimmed;\n}\n\nfunction identifiersEqual(a?: SchemaIdentifier, b?: SchemaIdentifier): boolean {\n if (!a && !b) return true;\n if (!a || !b) return false;\n return a.name === b.name && a.generator === b.generator && a.type === b.type;\n}\n\nfunction diffAttributes(apiAttrs?: SchemaAttribute[], localAttrs?: SchemaAttribute[]): SchemaTableDiff['attributes'] | null {\n const apiMap = mapByName(apiAttrs);\n const localMap = mapByName(localAttrs);\n const added: SchemaAttribute[] = [];\n const removed: string[] = [];\n const changed: AttributeChange[] = [];\n\n for (const [name, local] of localMap.entries()) {\n if (!apiMap.has(name)) {\n added.push(local);\n continue;\n }\n const api = apiMap.get(name)!;\n const apiNull = Boolean(api.isNullable);\n const localNull = Boolean(local.isNullable);\n if (api.type !== local.type || apiNull !== localNull) {\n changed.push({\n name,\n from: { type: api.type, isNullable: apiNull },\n to: { type: local.type, isNullable: localNull },\n });\n }\n }\n\n for (const name of apiMap.keys()) {\n if (!localMap.has(name)) removed.push(name);\n }\n\n added.sort((a, b) => a.name.localeCompare(b.name));\n removed.sort();\n changed.sort((a, b) => a.name.localeCompare(b.name));\n\n if (!added.length && !removed.length && !changed.length) return null;\n return { added, removed, changed };\n}\n\nfunction diffIndexes(apiIndexes?: SchemaIndex[], localIndexes?: SchemaIndex[]): SchemaTableDiff['indexes'] | null {\n const apiMap = mapByName(apiIndexes);\n const localMap = mapByName(localIndexes);\n const added: SchemaIndex[] = [];\n const removed: string[] = [];\n const changed: IndexChange[] = [];\n\n for (const [name, local] of localMap.entries()) {\n if (!apiMap.has(name)) {\n added.push(local);\n continue;\n }\n const api = apiMap.get(name)!;\n const apiType = api.type ?? 'DEFAULT';\n const localType = local.type ?? 'DEFAULT';\n const apiScore = api.minimumScore;\n const localScore = local.minimumScore;\n if (apiType !== localType || apiScore !== localScore) {\n changed.push({ name, from: api, to: local });\n }\n }\n\n for (const name of apiMap.keys()) {\n if (!localMap.has(name)) removed.push(name);\n }\n\n added.sort((a, b) => a.name.localeCompare(b.name));\n removed.sort();\n changed.sort((a, b) => a.name.localeCompare(b.name));\n\n if (!added.length && !removed.length && !changed.length) return null;\n return { added, removed, changed };\n}\n\nfunction diffResolvers(apiResolvers?: SchemaResolver[], localResolvers?: SchemaResolver[]): SchemaTableDiff['resolvers'] | null {\n const apiMap = mapByName(apiResolvers);\n const localMap = mapByName(localResolvers);\n const added: SchemaResolver[] = [];\n const removed: string[] = [];\n const changed: ResolverChange[] = [];\n\n for (const [name, local] of localMap.entries()) {\n if (!apiMap.has(name)) {\n added.push(local);\n continue;\n }\n const api = apiMap.get(name)!;\n if (api.resolver !== local.resolver) {\n changed.push({ name, from: api, to: local });\n }\n }\n\n for (const name of apiMap.keys()) {\n if (!localMap.has(name)) removed.push(name);\n }\n\n added.sort((a, b) => a.name.localeCompare(b.name));\n removed.sort();\n changed.sort((a, b) => a.name.localeCompare(b.name));\n\n if (!added.length && !removed.length && !changed.length) return null;\n return { added, removed, changed };\n}\n\nfunction diffTriggers(apiTriggers?: SchemaTrigger[], localTriggers?: SchemaTrigger[]): SchemaTableDiff['triggers'] | null {\n const apiMap = mapByName(apiTriggers);\n const localMap = mapByName(localTriggers);\n const added: SchemaTrigger[] = [];\n const removed: string[] = [];\n const changed: TriggerChange[] = [];\n\n for (const [name, local] of localMap.entries()) {\n if (!apiMap.has(name)) {\n added.push(local);\n continue;\n }\n const api = apiMap.get(name)!;\n if (api.event !== local.event || api.trigger !== local.trigger) {\n changed.push({ name, from: api, to: local });\n }\n }\n\n for (const name of apiMap.keys()) {\n if (!localMap.has(name)) removed.push(name);\n }\n\n added.sort((a, b) => a.name.localeCompare(b.name));\n removed.sort();\n changed.sort((a, b) => a.name.localeCompare(b.name));\n\n if (!added.length && !removed.length && !changed.length) return null;\n return { added, removed, changed };\n}\n\nexport function computeSchemaDiff(apiSchema: SchemaRevision, localSchema: SchemaUpsertRequest): SchemaDiff {\n const apiEntities = normalizeEntities(apiSchema);\n const localEntities = normalizeEntities(localSchema);\n\n const apiMap = mapByName(apiEntities);\n const localMap = mapByName(localEntities);\n\n const newTables: string[] = [];\n const removedTables: string[] = [];\n const changedTables: SchemaTableDiff[] = [];\n\n for (const [name, localEntity] of localMap.entries()) {\n if (!apiMap.has(name)) {\n newTables.push(name);\n continue;\n }\n const apiEntity = apiMap.get(name)!;\n const tableDiff: SchemaTableDiff = { name };\n const partitionFrom = normalizePartition(apiEntity.partition);\n const partitionTo = normalizePartition(localEntity.partition);\n if (partitionFrom !== partitionTo) {\n tableDiff.partition = { from: partitionFrom || null, to: partitionTo || null };\n }\n\n if (!identifiersEqual(apiEntity.identifier, localEntity.identifier)) {\n tableDiff.identifier = {\n from: apiEntity.identifier ?? null,\n to: localEntity.identifier ?? null,\n };\n }\n\n const attrs = diffAttributes(apiEntity.attributes, localEntity.attributes);\n if (attrs) tableDiff.attributes = attrs;\n\n const indexes = diffIndexes(apiEntity.indexes, localEntity.indexes);\n if (indexes) tableDiff.indexes = indexes;\n\n const resolvers = diffResolvers(apiEntity.resolvers, localEntity.resolvers);\n if (resolvers) tableDiff.resolvers = resolvers;\n\n const triggers = diffTriggers(apiEntity.triggers, localEntity.triggers);\n if (triggers) tableDiff.triggers = triggers;\n\n const hasChange =\n tableDiff.partition ||\n tableDiff.identifier ||\n tableDiff.attributes ||\n tableDiff.indexes ||\n tableDiff.resolvers ||\n tableDiff.triggers;\n\n if (hasChange) {\n changedTables.push(tableDiff);\n }\n }\n\n for (const name of apiMap.keys()) {\n if (!localMap.has(name)) removedTables.push(name);\n }\n\n newTables.sort();\n removedTables.sort();\n changedTables.sort((a, b) => a.name.localeCompare(b.name));\n\n return { newTables, removedTables, changedTables };\n}\n\nfunction isScalar(value: unknown): value is string | number | boolean | null | undefined | Date {\n return (\n value == null ||\n value instanceof Date ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n );\n}\n\nfunction formatScalar(value: string | number | boolean | null | undefined | Date): string {\n if (value === null || value === undefined) return 'null';\n if (value instanceof Date) return JSON.stringify(value.toISOString());\n if (typeof value === 'string') return JSON.stringify(value);\n return String(value);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date);\n}\n\nfunction toYamlLines(value: unknown, indent = 0): string[] {\n const pad = ' '.repeat(indent);\n if (Array.isArray(value)) {\n if (!value.length) return [`${pad}[]`];\n const lines: string[] = [];\n for (const item of value) {\n if (isScalar(item)) {\n lines.push(`${pad}- ${formatScalar(item)}`);\n continue;\n }\n const nested = toYamlLines(item, indent + 2);\n const [first, ...rest] = nested;\n lines.push(`${pad}- ${first ? first.trimStart() : '{}'}`);\n for (const line of rest) lines.push(line);\n }\n return lines;\n }\n\n if (isRecord(value)) {\n const entries = Object.entries(value).filter(([, v]) => v !== undefined);\n if (!entries.length) return [`${pad}{}`];\n const lines: string[] = [];\n for (const [key, val] of entries) {\n if (Array.isArray(val) && val.length === 0) {\n lines.push(`${pad}${key}: []`);\n continue;\n }\n if (isScalar(val)) {\n lines.push(`${pad}${key}: ${formatScalar(val)}`);\n } else {\n lines.push(`${pad}${key}:`);\n lines.push(...toYamlLines(val, indent + 2));\n }\n }\n return lines;\n }\n\n /* v8 ignore next */\n return [`${pad}${formatScalar(value as string | number | boolean | null | undefined)}`];\n}\n\nfunction pruneTableDiff(table: SchemaTableDiff): SchemaTableDiff | null {\n const pruned: SchemaTableDiff = { name: table.name };\n if (table.partition && (table.partition.from !== table.partition.to)) {\n pruned.partition = table.partition;\n }\n if (table.identifier && !identifiersEqual(table.identifier.from ?? undefined, table.identifier.to ?? undefined)) {\n pruned.identifier = table.identifier;\n }\n if (table.attributes) {\n const { added = [], removed = [], changed = [] } = table.attributes;\n if (added.length || removed.length || changed.length) {\n pruned.attributes = { added, removed, changed };\n }\n }\n if (table.indexes) {\n const { added = [], removed = [], changed = [] } = table.indexes;\n if (added.length || removed.length || changed.length) {\n pruned.indexes = { added, removed, changed };\n }\n }\n if (table.resolvers) {\n const { added = [], removed = [], changed = [] } = table.resolvers;\n if (added.length || removed.length || changed.length) {\n pruned.resolvers = { added, removed, changed };\n }\n }\n if (table.triggers) {\n const { added = [], removed = [], changed = [] } = table.triggers;\n if (added.length || removed.length || changed.length) {\n pruned.triggers = { added, removed, changed };\n }\n }\n\n const hasChange =\n pruned.partition ||\n pruned.identifier ||\n (pruned.attributes && (pruned.attributes.added.length || pruned.attributes.removed.length || pruned.attributes.changed.length)) ||\n (pruned.indexes && (pruned.indexes.added.length || pruned.indexes.removed.length || pruned.indexes.changed.length)) ||\n (pruned.resolvers && (pruned.resolvers.added.length || pruned.resolvers.removed.length || pruned.resolvers.changed.length)) ||\n (pruned.triggers && (pruned.triggers.added.length || pruned.triggers.removed.length || pruned.triggers.changed.length));\n\n return hasChange ? pruned : null;\n}\n\nexport function formatSchemaDiff(diff: SchemaDiff, filePath?: string): string {\n const hasChanges = diff.newTables.length || diff.removedTables.length || diff.changedTables.length;\n if (!hasChanges) {\n return `No differences found between API schema and ${filePath ?? 'local schema'}.\\n`;\n }\n\n const header = filePath ? `# Diff between API schema and ${filePath}\\n` : '# Schema diff';\n const prunedTables = diff.changedTables\n .map(pruneTableDiff)\n .filter((t): t is SchemaTableDiff => Boolean(t));\n\n const yamlObject: SchemaDiff = {\n newTables: [...diff.newTables],\n removedTables: [...diff.removedTables],\n changedTables: prunedTables,\n };\n\n const bodyLines = toYamlLines(yamlObject);\n return `${header}\\n${bodyLines.join('\\n')}\\n`;\n}\n\n// Exported for targeted test coverage only.\nexport const __schemaDiffTestUtils = { toYamlLines };\n/* c8 ignore stop */\n","// filename: src/impl/onyx-core.ts\nimport type { ResolvedConfig } from '../config/types';\nimport { HttpClient } from '../core/http';\nimport { openJsonLinesStream } from '../core/stream';\n\nimport type { OnyxFacade, IOnyxDatabase, OnyxConfig } from '../types/public';\nimport type {\n IQueryBuilder,\n ISaveBuilder,\n ICascadeBuilder,\n IConditionBuilder,\n ICascadeRelationshipBuilder,\n} from '../types/builders';\nimport { QueryResults, QueryResultsPromise } from '../builders/query-results';\nimport type {\n QueryCriteria,\n QueryCondition,\n SelectQuery,\n UpdateQuery,\n QueryPage,\n} from '../types/protocol';\nimport type { Sort, StreamAction, OnyxDocument, FetchImpl } from '../types/common';\nimport { normalizeCondition } from '../helpers/condition-normalizer';\nimport type {\n SchemaDiff,\n SchemaEntity,\n SchemaHistoryEntry,\n SchemaRevision,\n SchemaUpsertRequest,\n SchemaValidationResult,\n SecretMetadata,\n SecretRecord,\n SecretsListResponse,\n SecretSaveRequest,\n} from '../types/public';\nimport { CascadeRelationshipBuilder } from '../builders/cascade-relationship-builder';\nimport { OnyxHttpError } from '../errors/http-error';\nimport { computeSchemaDiff } from '../helpers/schema-diff';\n\nexport type ResolveConfig = (config?: OnyxConfig) => Promise<ResolvedConfig>;\n\nconst DEFAULT_CACHE_TTL = 5 * 60 * 1000; // 5 minutes\n\n/** -------------------------\n * Internal helpers\n * --------------------------*/\nfunction toSingleCondition(criteria: QueryCriteria): QueryCondition {\n return { conditionType: 'SingleCondition', criteria };\n}\n\nfunction flattenStrings(values: Array<string | string[]>): string[] {\n const flat: string[] = [];\n for (const value of values) {\n if (Array.isArray(value)) {\n flat.push(...value);\n } else if (typeof value === 'string') {\n flat.push(value);\n }\n }\n return flat;\n}\n\nfunction toCondition(input: IConditionBuilder | QueryCriteria): QueryCondition {\n if (typeof (input as IConditionBuilder).toCondition === 'function') {\n return (input as IConditionBuilder).toCondition();\n }\n const c = input as QueryCriteria;\n if (c && typeof c.field === 'string' && typeof c.operator === 'string') {\n return toSingleCondition(c);\n }\n throw new Error('Invalid condition passed to builder.');\n}\n\ntype SecretMetadataPayload = Omit<SecretMetadata, 'updatedAt'> & { updatedAt: string | Date };\ntype SecretRecordPayload = Omit<SecretRecord, 'updatedAt'> & { updatedAt: string | Date };\ntype SchemaRevisionPayload = Omit<SchemaRevision, 'meta'> & {\n meta?: {\n revisionId?: string;\n createdAt?: string | Date;\n publishedAt?: string | Date;\n };\n createdAt?: string | Date;\n publishedAt?: string | Date;\n revisionId?: string;\n};\ntype SchemaRevisionPayloadWithEntityText = SchemaRevisionPayload & { entityText?: unknown };\ntype SchemaValidationPayload = SchemaValidationResult & { schema?: SchemaRevisionPayload };\ntype SchemaValidationPayloadWithEntityText = SchemaValidationPayload & {\n schema?: SchemaRevisionPayloadWithEntityText;\n};\n\nfunction serializeDates(value: unknown): unknown {\n if (value instanceof Date) return value.toISOString();\n if (Array.isArray(value)) return value.map(serializeDates);\n if (value && typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[k] = serializeDates(v);\n }\n return out;\n }\n return value;\n}\n\nfunction stripEntityText<T extends Record<string, unknown>>(input: T): Omit<T, 'entityText'> {\n const { entityText, ...rest } = input;\n void entityText;\n return rest;\n}\n\nfunction normalizeSecretMetadata(input: SecretMetadataPayload): SecretMetadata {\n return { ...input, updatedAt: new Date(input.updatedAt) };\n}\n\nfunction normalizeSecretRecord(input: SecretRecordPayload): SecretRecord {\n return { ...input, updatedAt: new Date(input.updatedAt) };\n}\n\nfunction normalizeDate(value?: string | Date): Date | undefined {\n if (value == null) return undefined;\n if (value instanceof Date) return value;\n const ts = new Date(value);\n return Number.isNaN(ts.getTime()) ? undefined : ts;\n}\n\nfunction normalizeSchemaRevision(\n input: SchemaRevisionPayloadWithEntityText,\n fallbackDatabaseId: string,\n): SchemaRevision {\n const {\n meta,\n createdAt,\n publishedAt,\n revisionId,\n entityText,\n databaseId,\n entities,\n revisionDescription,\n ...rest\n } = input;\n void entityText;\n const dbId = typeof databaseId === 'string' ? databaseId : fallbackDatabaseId;\n const entityList = Array.isArray(entities) ? (entities as SchemaEntity[]) : [];\n const revisionDesc = typeof revisionDescription === 'string' ? revisionDescription : undefined;\n const mergedMeta = {\n revisionId: meta?.revisionId ?? revisionId,\n createdAt: normalizeDate(meta?.createdAt ?? createdAt),\n publishedAt: normalizeDate(meta?.publishedAt ?? publishedAt),\n };\n const cleanedMeta =\n mergedMeta.revisionId || mergedMeta.createdAt || mergedMeta.publishedAt ? mergedMeta : undefined;\n return {\n databaseId: dbId,\n revisionDescription: revisionDesc,\n entities: entityList,\n meta: cleanedMeta,\n ...rest,\n };\n}\n\n/** -------------------------\n * Onyx Database Implementation\n * --------------------------*/\nclass OnyxDatabaseImpl<Schema = Record<string, unknown>> implements IOnyxDatabase<Schema> {\n private readonly cfgPromise: Promise<ResolvedConfig>;\n private resolved: ResolvedConfig | null = null;\n private http: HttpClient | null = null;\n private readonly streams = new Set<{ cancel: () => void }>();\n private readonly requestLoggingEnabled: boolean;\n private readonly responseLoggingEnabled: boolean;\n private readonly defaultPartition: string | undefined;\n\n constructor(\n config: OnyxConfig | undefined,\n resolveConfigWithCache: (config?: OnyxConfig) => Promise<ResolvedConfig>,\n ) {\n // Defer resolution; keeps init() synchronous\n this.requestLoggingEnabled = !!config?.requestLoggingEnabled;\n this.responseLoggingEnabled = !!config?.responseLoggingEnabled;\n this.defaultPartition = config?.partition;\n this.cfgPromise = resolveConfigWithCache(config);\n }\n\n private async ensureClient(): Promise<{\n http: HttpClient;\n fetchImpl: FetchImpl;\n baseUrl: string;\n databaseId: string;\n }> {\n if (!this.resolved) {\n this.resolved = await this.cfgPromise;\n }\n if (!this.http) {\n this.http = new HttpClient({\n baseUrl: this.resolved.baseUrl,\n apiKey: this.resolved.apiKey,\n apiSecret: this.resolved.apiSecret,\n fetchImpl: this.resolved.fetch,\n requestLoggingEnabled: this.requestLoggingEnabled,\n responseLoggingEnabled: this.responseLoggingEnabled,\n retryEnabled: this.resolved.retryEnabled,\n maxRetries: this.resolved.maxRetries,\n retryInitialDelayMs: this.resolved.retryInitialDelayMs,\n });\n }\n return {\n http: this.http,\n fetchImpl: this.resolved.fetch,\n baseUrl: this.resolved.baseUrl,\n databaseId: this.resolved.databaseId,\n };\n }\n\n private registerStream(handle: { cancel: () => void }): { cancel: () => void } {\n this.streams.add(handle);\n return {\n cancel: () => {\n try {\n handle.cancel();\n } finally {\n this.streams.delete(handle);\n }\n },\n };\n }\n\n /** -------- IOnyxDatabase -------- */\n\n from<Table extends keyof Schema & string>(table: Table): IQueryBuilder<Schema[Table]> {\n return new QueryBuilderImpl<Schema[Table], Schema>(this, String(table), this.defaultPartition);\n }\n\n select(...fields: Array<string | string[]>): IQueryBuilder<Record<string, unknown>> {\n const qb = new QueryBuilderImpl<Record<string, unknown>, Schema>(\n this,\n null,\n this.defaultPartition,\n );\n qb.select(...fields);\n return qb;\n }\n\n cascade(...relationships: Array<string | string[]>): ICascadeBuilder<Schema> {\n const cb = new CascadeBuilderImpl<Schema>(this);\n return cb.cascade(...relationships);\n }\n\n cascadeBuilder(): ICascadeRelationshipBuilder {\n return new CascadeRelationshipBuilder();\n }\n\n // Overload: builder form\n save<Table extends keyof Schema & string>(table: Table): ISaveBuilder<Schema[Table]>;\n // Overload: direct form\n save<Table extends keyof Schema & string>(\n table: Table,\n entityOrEntities: Partial<Schema[Table]> | Array<Partial<Schema[Table]>>,\n options?: { relationships?: string[] },\n ): Promise<unknown>;\n // Impl\n save(\n table: string,\n entityOrEntities?: unknown,\n options?: { relationships?: string[] },\n ): ISaveBuilder<unknown> | Promise<unknown> {\n if (arguments.length === 1) {\n return new SaveBuilderImpl<unknown, Schema>(this, table);\n }\n return this._saveInternal(table, entityOrEntities as unknown, options);\n }\n\n async batchSave<Table extends keyof Schema & string>(\n table: Table,\n entities: Array<Partial<Schema[Table]>>,\n batchSize = 1000,\n options?: { relationships?: string[] },\n ): Promise<void> {\n for (let i = 0; i < entities.length; i += batchSize) {\n const chunk = entities.slice(i, i + batchSize);\n if (chunk.length) {\n await this._saveInternal(String(table), chunk, options);\n }\n }\n }\n\n async findById<Table extends keyof Schema & string, T = Schema[Table]>(\n table: Table,\n primaryKey: string,\n options?: { partition?: string; resolvers?: string[] },\n ): Promise<T | null> {\n const { http, databaseId } = await this.ensureClient();\n const params = new URLSearchParams();\n const partition = options?.partition ?? this.defaultPartition;\n if (partition) params.append('partition', partition);\n if (options?.resolvers?.length) params.append('resolvers', options.resolvers.join(','));\n\n const path = `/data/${encodeURIComponent(databaseId)}/${encodeURIComponent(\n String(table),\n )}/${encodeURIComponent(primaryKey)}${params.toString() ? `?${params.toString()}` : ''}`;\n try {\n return await http.request<T>('GET', path);\n } catch (err) {\n if (err instanceof OnyxHttpError && err.status === 404) return null;\n throw err;\n }\n }\n\n async delete<Table extends keyof Schema & string>(\n table: Table,\n primaryKey: string,\n options?: { partition?: string; relationships?: string[] },\n ): Promise<boolean> {\n const { http, databaseId } = await this.ensureClient();\n const params = new URLSearchParams();\n const partition = options?.partition ?? this.defaultPartition;\n if (partition) params.append('partition', partition);\n if (options?.relationships?.length) {\n params.append('relationships', options.relationships.map(encodeURIComponent).join(','));\n }\n const path = `/data/${encodeURIComponent(databaseId)}/${encodeURIComponent(\n table,\n )}/${encodeURIComponent(primaryKey)}${params.toString() ? `?${params.toString()}` : ''}`;\n await http.request<unknown>('DELETE', path);\n return true;\n }\n\n async saveDocument(doc: OnyxDocument): Promise<unknown> {\n const { http, databaseId } = await this.ensureClient();\n const path = `/data/${encodeURIComponent(databaseId)}/document`;\n return http.request('PUT', path, serializeDates(doc));\n }\n\n async getDocument(\n documentId: string,\n options?: { width?: number; height?: number },\n ): Promise<unknown> {\n const { http, databaseId } = await this.ensureClient();\n const params = new URLSearchParams();\n if (options?.width != null) params.append('width', String(options.width));\n if (options?.height != null) params.append('height', String(options.height));\n const path = `/data/${encodeURIComponent(databaseId)}/document/${encodeURIComponent(\n documentId,\n )}${params.toString() ? `?${params.toString()}` : ''}`;\n return http.request('GET', path);\n }\n\n async deleteDocument(documentId: string): Promise<unknown> {\n const { http, databaseId } = await this.ensureClient();\n const path = `/data/${encodeURIComponent(databaseId)}/document/${encodeURIComponent(\n documentId,\n )}`;\n return http.request('DELETE', path);\n }\n\n async getSchema(options?: { tables?: string | string[] }): Promise<SchemaRevision> {\n const { http, databaseId } = await this.ensureClient();\n const params = new URLSearchParams();\n const tables = options?.tables;\n const tableList = Array.isArray(tables)\n ? tables\n : typeof tables === 'string'\n ? tables.split(',')\n : [];\n const normalizedTables = tableList.map((t) => t.trim()).filter(Boolean);\n if (normalizedTables.length) {\n params.append('tables', normalizedTables.map(encodeURIComponent).join(','));\n }\n const path = `/schemas/${encodeURIComponent(databaseId)}${\n params.size ? `?${params.toString()}` : ''\n }`;\n const res = await http.request<SchemaRevisionPayloadWithEntityText>('GET', path);\n return normalizeSchemaRevision(res, databaseId);\n }\n\n async getSchemaHistory(): Promise<SchemaHistoryEntry[]> {\n const { http, databaseId } = await this.ensureClient();\n const path = `/schemas/history/${encodeURIComponent(databaseId)}`;\n const res = await http.request<SchemaRevisionPayloadWithEntityText[]>('GET', path);\n return Array.isArray(res) ? res.map((entry) => normalizeSchemaRevision(entry, databaseId)) : [];\n }\n\n async diffSchema(localSchema: SchemaUpsertRequest): Promise<SchemaDiff> {\n const apiSchema = await this.getSchema();\n return computeSchemaDiff(apiSchema, localSchema);\n }\n\n async updateSchema(\n schema: SchemaUpsertRequest,\n options?: { publish?: boolean },\n ): Promise<SchemaRevision> {\n const { http, databaseId } = await this.ensureClient();\n const params = new URLSearchParams();\n if (options?.publish) params.append('publish', 'true');\n const path = `/schemas/${encodeURIComponent(databaseId)}${\n params.size ? `?${params.toString()}` : ''\n }`;\n const body = stripEntityText({ ...schema, databaseId: schema.databaseId ?? databaseId });\n const res = await http.request<SchemaRevisionPayloadWithEntityText>(\n 'PUT',\n path,\n serializeDates(body),\n );\n return normalizeSchemaRevision(res, databaseId);\n }\n\n async validateSchema(schema: SchemaUpsertRequest): Promise<SchemaValidationResult> {\n const { http, databaseId } = await this.ensureClient();\n const path = `/schemas/${encodeURIComponent(databaseId)}/validate`;\n const body = stripEntityText({ ...schema, databaseId: schema.databaseId ?? databaseId });\n const res = await http.request<SchemaValidationPayloadWithEntityText>(\n 'POST',\n path,\n serializeDates(body),\n );\n const normalizedSchema = res.schema\n ? normalizeSchemaRevision(res.schema, databaseId)\n : undefined;\n return {\n ...res,\n valid: res.valid ?? true,\n schema: normalizedSchema,\n };\n }\n\n async listSecrets(): Promise<SecretsListResponse> {\n const { http, databaseId } = await this.ensureClient();\n const path = `/database/${encodeURIComponent(databaseId)}/secret`;\n const response = await http.request<SecretsListResponse & { records: SecretMetadataPayload[] }>(\n 'GET',\n path,\n undefined,\n { 'Content-Type': 'application/json' },\n );\n const records = (response.records ?? []).map(normalizeSecretMetadata);\n return {\n ...response,\n records,\n meta: response.meta ?? { totalRecords: records.length },\n };\n }\n\n async getSecret(key: string): Promise<SecretRecord> {\n const { http, databaseId } = await this.ensureClient();\n const path = `/database/${encodeURIComponent(databaseId)}/secret/${encodeURIComponent(key)}`;\n const record = await http.request<SecretRecordPayload>('GET', path, undefined, {\n 'Content-Type': 'application/json',\n });\n return normalizeSecretRecord(record);\n }\n\n async putSecret(key: string, input: SecretSaveRequest): Promise<SecretMetadata> {\n const { http, databaseId } = await this.ensureClient();\n const path = `/database/${encodeURIComponent(databaseId)}/secret/${encodeURIComponent(key)}`;\n const response = await http.request<SecretMetadataPayload>('PUT', path, serializeDates(input));\n return normalizeSecretMetadata(response);\n }\n\n async deleteSecret(key: string): Promise<{ key: string }> {\n const { http, databaseId } = await this.ensureClient();\n const path = `/database/${encodeURIComponent(databaseId)}/secret/${encodeURIComponent(key)}`;\n const response = await http.request<{ key?: string } | { success?: boolean } | undefined>(\n 'DELETE',\n path,\n );\n const deletedKey =\n response && typeof response === 'object' && 'key' in response\n ? (response as { key?: string }).key\n : undefined;\n return { key: deletedKey ?? key };\n }\n\n close(): void {\n for (const h of Array.from(this.streams)) {\n try {\n h.cancel();\n } catch {\n /* ignore */\n } finally {\n this.streams.delete(h);\n }\n }\n }\n\n /** -------- internal helpers used by builders -------- */\n\n async _count(table: string, select: SelectQuery, partition?: string): Promise<number> {\n const { http, databaseId } = await this.ensureClient();\n const params = new URLSearchParams();\n const p = partition ?? this.defaultPartition;\n if (p) params.append('partition', p);\n const path = `/data/${encodeURIComponent(databaseId)}/query/count/${encodeURIComponent(\n table,\n )}${params.toString() ? `?${params.toString()}` : ''}`;\n return http.request<number>('PUT', path, serializeDates(select));\n }\n\n async _queryPage<T>(\n table: string,\n select: SelectQuery,\n opts: { pageSize?: number; nextPage?: string; partition?: string } = {},\n ): Promise<QueryPage<T>> {\n const { http, databaseId } = await this.ensureClient();\n const params = new URLSearchParams();\n if (opts.pageSize != null) params.append('pageSize', String(opts.pageSize));\n if (opts.nextPage) params.append('nextPage', opts.nextPage);\n const p = opts.partition ?? this.defaultPartition;\n if (p) params.append('partition', p);\n const path = `/data/${encodeURIComponent(databaseId)}/query/${encodeURIComponent(\n table,\n )}${params.toString() ? `?${params.toString()}` : ''}`;\n return http.request<QueryPage<T>>('PUT', path, serializeDates(select));\n }\n\n async _update(table: string, update: UpdateQuery, partition?: string): Promise<unknown> {\n const { http, databaseId } = await this.ensureClient();\n const params = new URLSearchParams();\n const p = partition ?? this.defaultPartition;\n if (p) params.append('partition', p);\n const path = `/data/${encodeURIComponent(databaseId)}/query/update/${encodeURIComponent(\n table,\n )}${params.toString() ? `?${params.toString()}` : ''}`;\n return http.request('PUT', path, serializeDates(update));\n }\n\n async _deleteByQuery(table: string, select: SelectQuery, partition?: string): Promise<number> {\n const { http, databaseId } = await this.ensureClient();\n const params = new URLSearchParams();\n const p = partition ?? this.defaultPartition;\n if (p) params.append('partition', p);\n const path = `/data/${encodeURIComponent(databaseId)}/query/delete/${encodeURIComponent(\n table,\n )}${params.toString() ? `?${params.toString()}` : ''}`;\n return http.request<number>('PUT', path, serializeDates(select));\n }\n\n async _stream<T>(\n table: string,\n select: SelectQuery,\n includeQueryResults: boolean,\n keepAlive: boolean,\n handlers: {\n onItemAdded?: (e: T) => void;\n onItemUpdated?: (e: T) => void;\n onItemDeleted?: (e: T) => void;\n onItem?: (e: T | null, a: StreamAction) => void;\n },\n ): Promise<{ cancel: () => void }> {\n const { http, baseUrl, databaseId, fetchImpl } = await this.ensureClient();\n const params = new URLSearchParams();\n if (includeQueryResults) params.append('includeQueryResults', 'true');\n if (keepAlive) params.append('keepAlive', 'true');\n\n const url = `${baseUrl}/data/${encodeURIComponent(databaseId)}/query/stream/${encodeURIComponent(\n table,\n )}${params.toString() ? `?${params.toString()}` : ''}`;\n const handle = await openJsonLinesStream<T>(\n fetchImpl,\n url,\n {\n method: 'PUT',\n headers: http.headers({\n Accept: 'application/x-ndjson',\n 'Content-Type': 'application/json',\n }),\n body: JSON.stringify(serializeDates(select)),\n },\n handlers,\n );\n return this.registerStream(handle);\n }\n\n async _saveInternal(\n table: string,\n entityOrEntities: unknown,\n options?: { relationships?: string[] },\n ): Promise<unknown> {\n const { http, databaseId } = await this.ensureClient();\n const params = new URLSearchParams();\n if (options?.relationships?.length) {\n params.append('relationships', options.relationships.map(encodeURIComponent).join(','));\n }\n const path = `/data/${encodeURIComponent(databaseId)}/${encodeURIComponent(table)}${\n params.toString() ? `?${params.toString()}` : ''\n }`;\n return http.request('PUT', path, serializeDates(entityOrEntities));\n }\n}\n\n/** -------------------------\n * QueryBuilder Implementation\n * --------------------------*/\nclass QueryBuilderImpl<T = unknown, S = Record<string, unknown>> implements IQueryBuilder<T> {\n private readonly db: OnyxDatabaseImpl<S>;\n private table: string | null;\n\n private fields: string[] | null = null;\n private resolvers: string[] | null = null;\n private conditions: QueryCondition | null = null;\n private sort: Sort[] | null = null;\n private limitValue: number | null = null;\n private distinctValue = false;\n private groupByValues: string[] | null = null;\n private partitionValue: string | undefined;\n\n private pageSizeValue: number | null = null;\n private nextPageValue: string | null = null;\n\n private mode: 'select' | 'update' = 'select';\n private updates: Partial<T> | null = null;\n\n private onItemAddedListener: ((e: T) => void) | null = null;\n private onItemUpdatedListener: ((e: T) => void) | null = null;\n private onItemDeletedListener: ((e: T) => void) | null = null;\n private onItemListener: ((e: T | null, a: StreamAction) => void) | null = null;\n\n constructor(db: OnyxDatabaseImpl<S>, table: string | null, partition?: string) {\n this.db = db;\n this.table = table;\n this.partitionValue = partition;\n }\n\n private ensureTable(): string {\n if (!this.table) throw new Error('Table is not defined. Call from(<table>) first.');\n return this.table;\n }\n\n private serializableConditions(): QueryCondition | null {\n return normalizeCondition(this.conditions);\n }\n\n private toSelectQuery(): SelectQuery {\n return {\n type: 'SelectQuery',\n fields: this.fields,\n conditions: this.serializableConditions(),\n sort: this.sort,\n limit: this.limitValue,\n distinct: this.distinctValue,\n groupBy: this.groupByValues,\n partition: this.partitionValue ?? null,\n resolvers: this.resolvers,\n };\n }\n\n private toUpdateQuery(): UpdateQuery {\n return {\n type: 'UpdateQuery',\n conditions: this.serializableConditions(),\n updates: this.updates ?? {},\n sort: this.sort,\n limit: this.limitValue,\n partition: this.partitionValue ?? null,\n };\n }\n\n private toSerializableQueryObject(): (SelectQuery | UpdateQuery) & { table: string } {\n const table = this.ensureTable();\n const payload = this.mode === 'update' ? this.toUpdateQuery() : this.toSelectQuery();\n return { ...payload, table };\n }\n\n from(table: string): IQueryBuilder<T> {\n this.table = table;\n return this;\n }\n\n select(...fields: Array<string | string[]>): IQueryBuilder<T> {\n const flat = flattenStrings(fields);\n this.fields = flat.length > 0 ? flat : null;\n return this;\n }\n\n resolve(...values: Array<string | string[]>): IQueryBuilder<T> {\n const flat = flattenStrings(values);\n this.resolvers = flat.length > 0 ? flat : null;\n return this;\n }\n\n where(condition: IConditionBuilder | QueryCriteria): IQueryBuilder<T> {\n const c = toCondition(condition);\n if (!this.conditions) {\n this.conditions = c;\n } else {\n this.conditions = {\n conditionType: 'CompoundCondition',\n operator: 'AND',\n conditions: [this.conditions, c],\n };\n }\n return this;\n }\n\n and(condition: IConditionBuilder | QueryCriteria): IQueryBuilder<T> {\n const c = toCondition(condition);\n if (!this.conditions) {\n this.conditions = c;\n } else if (\n this.conditions.conditionType === 'CompoundCondition' &&\n this.conditions.operator === 'AND'\n ) {\n this.conditions.conditions.push(c);\n } else {\n this.conditions = {\n conditionType: 'CompoundCondition',\n operator: 'AND',\n conditions: [this.conditions, c],\n };\n }\n return this;\n }\n\n or(condition: IConditionBuilder | QueryCriteria): IQueryBuilder<T> {\n const c = toCondition(condition);\n if (!this.conditions) {\n this.conditions = c;\n } else if (\n this.conditions.conditionType === 'CompoundCondition' &&\n this.conditions.operator === 'OR'\n ) {\n this.conditions.conditions.push(c);\n } else {\n this.conditions = {\n conditionType: 'CompoundCondition',\n operator: 'OR',\n conditions: [this.conditions, c],\n };\n }\n return this;\n }\n\n orderBy(...sorts: Sort[]): IQueryBuilder<T> {\n this.sort = sorts;\n return this;\n }\n\n groupBy(...fields: string[]): IQueryBuilder<T> {\n this.groupByValues = fields.length ? fields : null;\n return this;\n }\n\n distinct(): IQueryBuilder<T> {\n this.distinctValue = true;\n return this;\n }\n\n limit(n: number): IQueryBuilder<T> {\n this.limitValue = n;\n return this;\n }\n\n inPartition(partition: string): IQueryBuilder<T> {\n this.partitionValue = partition;\n return this;\n }\n\n pageSize(n: number): IQueryBuilder<T> {\n this.pageSizeValue = n;\n return this;\n }\n\n nextPage(token: string): IQueryBuilder<T> {\n this.nextPageValue = token;\n return this;\n }\n\n setUpdates(updates: Partial<T>): IQueryBuilder<T> {\n this.mode = 'update';\n this.updates = updates;\n return this;\n }\n\n async count(): Promise<number> {\n if (this.mode !== 'select') throw new Error('Cannot call count() in update mode.');\n const table = this.ensureTable();\n return this.db._count(table, this.toSelectQuery(), this.partitionValue);\n }\n\n async page(\n options: { pageSize?: number; nextPage?: string } = {},\n ): Promise<{ records: T[]; nextPage?: string | null }> {\n if (this.mode !== 'select') throw new Error('Cannot call page() in update mode.');\n const table = this.ensureTable();\n const final = {\n pageSize: this.pageSizeValue ?? options.pageSize,\n nextPage: this.nextPageValue ?? options.nextPage,\n partition: this.partitionValue,\n };\n return this.db._queryPage<T>(table, this.toSelectQuery(), final);\n }\n\n list(options: {\n pageSize?: number;\n nextPage?: string;\n } = {}): QueryResultsPromise<T> {\n const size = this.pageSizeValue ?? options.pageSize;\n const pgPromise = this.page(options).then(pg => {\n const fetcher = (token: string) => this.nextPage(token).list({ pageSize: size });\n return new QueryResults<T>(Array.isArray(pg.records) ? pg.records : [], pg.nextPage ?? null, fetcher);\n });\n for (const m of Object.getOwnPropertyNames(QueryResults.prototype) as string[]) {\n if (m === 'constructor') continue;\n (pgPromise as any)[m] = (...args: any[]) => pgPromise.then(res => (res as any)[m](...args));\n }\n return pgPromise as QueryResultsPromise<T>;\n }\n\n async firstOrNull(): Promise<T | null> {\n if (this.mode !== 'select') throw new Error('Cannot call firstOrNull() in update mode.');\n this.limitValue = 1;\n const pg = await this.page();\n return Array.isArray(pg.records) && pg.records.length > 0 ? pg.records[0] : null;\n }\n\n async one(): Promise<T | null> {\n return this.firstOrNull();\n }\n\n async delete(): Promise<number> {\n if (this.mode !== 'select') throw new Error('delete() is only applicable in select mode.');\n const table = this.ensureTable();\n return this.db._deleteByQuery(table, this.toSelectQuery(), this.partitionValue);\n }\n\n async update(): Promise<unknown> {\n if (this.mode !== 'update') throw new Error('Call setUpdates(...) before update().');\n const table = this.ensureTable();\n const update = this.toUpdateQuery();\n return this.db._update(table, update, this.partitionValue);\n }\n\n onItemAdded(listener: (entity: T) => void): IQueryBuilder<T> {\n this.onItemAddedListener = listener;\n return this;\n }\n\n onItemUpdated(listener: (entity: T) => void): IQueryBuilder<T> {\n this.onItemUpdatedListener = listener;\n return this;\n }\n\n onItemDeleted(listener: (entity: T) => void): IQueryBuilder<T> {\n this.onItemDeletedListener = listener;\n return this;\n }\n\n onItem(listener: (entity: T | null, action: StreamAction) => void): IQueryBuilder<T> {\n this.onItemListener = listener;\n return this;\n }\n\n async streamEventsOnly(keepAlive = true): Promise<{ cancel: () => void }> {\n return this.stream(false, keepAlive);\n }\n\n async streamWithQueryResults(keepAlive = false): Promise<{ cancel: () => void }> {\n return this.stream(true, keepAlive);\n }\n\n async stream(includeQueryResults = true, keepAlive = false): Promise<{ cancel: () => void }> {\n if (this.mode !== 'select') throw new Error('Streaming is only applicable in select mode.');\n const table = this.ensureTable();\n return this.db._stream<T>(table, this.toSelectQuery(), includeQueryResults, keepAlive, {\n onItemAdded: this.onItemAddedListener ?? undefined,\n onItemUpdated: this.onItemUpdatedListener ?? undefined,\n onItemDeleted: this.onItemDeletedListener ?? undefined,\n onItem: this.onItemListener ?? undefined,\n });\n }\n}\n\n/** -------------------------\n * SaveBuilder Implementation\n * --------------------------*/\nclass SaveBuilderImpl<T = unknown, S = Record<string, unknown>> implements ISaveBuilder<T> {\n private readonly db: OnyxDatabaseImpl<S>;\n private readonly table: string;\n private relationships: string[] | null = null;\n\n constructor(db: OnyxDatabaseImpl<S>, table: string) {\n this.db = db;\n this.table = table;\n }\n\n cascade(...relationships: Array<string | string[]>): ISaveBuilder<T> {\n this.relationships = relationships.flat();\n return this;\n }\n\n one(entity: Partial<T>): Promise<unknown> {\n const opts = this.relationships ? { relationships: this.relationships } : undefined;\n return this.db._saveInternal(this.table, entity, opts);\n }\n\n many(entities: Array<Partial<T>>): Promise<unknown> {\n const opts = this.relationships ? { relationships: this.relationships } : undefined;\n return this.db._saveInternal(this.table, entities, opts);\n }\n}\n\n/** -------------------------\n * CascadeBuilder Implementation\n * --------------------------*/\nclass CascadeBuilderImpl<Schema = Record<string, unknown>>\n implements ICascadeBuilder<Schema>\n{\n private readonly db: OnyxDatabaseImpl<Schema>;\n private rels: string[] | null = null;\n\n constructor(db: OnyxDatabaseImpl<Schema>) {\n this.db = db;\n }\n\n cascade(...relationships: Array<string | string[]>): ICascadeBuilder<Schema> {\n this.rels = relationships.flat();\n return this;\n }\n\n save<Table extends keyof Schema & string>(\n table: Table,\n entityOrEntities: Partial<Schema[Table]> | Array<Partial<Schema[Table]>>,\n ): Promise<unknown> {\n const opts = this.rels ? { relationships: this.rels } : undefined;\n return this.db._saveInternal(String(table), entityOrEntities, opts);\n }\n\n delete<Table extends keyof Schema & string>(\n table: Table,\n primaryKey: string,\n ): Promise<boolean> {\n const opts = this.rels ? { relationships: this.rels } : undefined;\n return this.db.delete(table, primaryKey, opts);\n }\n}\n\n/** -------------------------\n * Facade export\n * --------------------------*/\nexport function createOnyxFacade(resolveConfig: ResolveConfig): OnyxFacade {\n let cachedCfg: { promise: Promise<ResolvedConfig>; expires: number } | null = null;\n\n function resolveConfigWithCache(config?: OnyxConfig): Promise<ResolvedConfig> {\n const ttl = config?.ttl ?? DEFAULT_CACHE_TTL;\n const now = Date.now();\n if (cachedCfg && cachedCfg.expires > now) {\n return cachedCfg.promise;\n }\n const { ttl: _ttl, requestLoggingEnabled: _reqLog, responseLoggingEnabled: _resLog, ...rest } = config ?? {};\n void _ttl;\n void _reqLog;\n void _resLog;\n const promise = resolveConfig(rest);\n cachedCfg = { promise, expires: now + ttl };\n return promise;\n }\n\n function clearCacheConfig(): void {\n cachedCfg = null;\n }\n\n return {\n init<Schema = Record<string, unknown>>(config?: OnyxConfig): IOnyxDatabase<Schema> {\n return new OnyxDatabaseImpl<Schema>(config, resolveConfigWithCache);\n },\n clearCacheConfig,\n };\n}\n","// filename: src/impl/onyx-edge.ts\nimport * as chain from '../config/chain-edge';\nimport { createOnyxFacade } from './onyx-core';\n\nexport const onyx = createOnyxFacade((config) => chain.resolveConfig(config));\n","// filename: src/helpers/sort.ts\nimport type { Sort } from '../types/common';\n\nexport const asc = (field: string): Sort => ({ field, order: 'ASC' });\nexport const desc = (field: string): Sort => ({ field, order: 'DESC' });","// filename: src/builders/condition-builder.ts\nimport type { IConditionBuilder } from '../types/builders';\nimport type { QueryCondition, QueryCriteria } from '../types/protocol';\nimport type { LogicalOperator } from '../types/common';\n\n/** Builder for combining query conditions with logical operators. */\nexport class ConditionBuilderImpl implements IConditionBuilder {\n private condition: QueryCondition | null;\n\n /**\n * Initialize with an optional starting criteria.\n *\n * @param criteria Initial query criteria to seed the builder.\n * @example\n * ```ts\n * const builder = new ConditionBuilderImpl({ field: 'id', operator: 'eq', value: '1' });\n * ```\n */\n constructor(criteria: QueryCriteria | null = null) {\n this.condition = criteria ? this.single(criteria) : null;\n }\n\n /**\n * Add a criteria combined with AND.\n *\n * @param condition Another builder or raw criteria to AND.\n * @example\n * ```ts\n * builder.and({ field: 'name', operator: 'eq', value: 'Ada' });\n * ```\n */\n and(condition: IConditionBuilder | QueryCriteria): IConditionBuilder {\n this.addCompound('AND', this.prepare(condition));\n return this;\n }\n\n /**\n * Add a criteria combined with OR.\n *\n * @param condition Another builder or raw criteria to OR.\n * @example\n * ```ts\n * builder.or({ field: 'status', operator: 'eq', value: 'active' });\n * ```\n */\n or(condition: IConditionBuilder | QueryCriteria): IConditionBuilder {\n this.addCompound('OR', this.prepare(condition));\n return this;\n }\n\n /**\n * Produce the composed QueryCondition.\n *\n * @example\n * ```ts\n * const condition = builder.toCondition();\n * ```\n */\n toCondition(): QueryCondition {\n if (!this.condition) {\n throw new Error('ConditionBuilder has no criteria.');\n }\n return this.condition;\n }\n\n /**\n * Wrap raw criteria into a single condition object.\n *\n * @param criteria Criteria to wrap.\n * @example\n * ```ts\n * builder['single']({ field: 'id', operator: 'eq', value: '1' });\n * ```\n */\n private single(criteria: QueryCriteria): QueryCondition {\n return { conditionType: 'SingleCondition', criteria };\n }\n\n /**\n * Create a compound condition using the provided operator.\n *\n * @param operator Logical operator to apply.\n * @param conditions Child conditions to combine.\n * @example\n * ```ts\n * builder['compound']('AND', [condA, condB]);\n * ```\n */\n private compound(operator: LogicalOperator, conditions: QueryCondition[]): QueryCondition {\n return { conditionType: 'CompoundCondition', operator, conditions };\n }\n\n /**\n * Merge the next condition into the existing tree using the operator.\n *\n * @param operator Logical operator for the merge.\n * @param next Condition to merge into the tree.\n * @example\n * ```ts\n * builder['addCompound']('AND', someCondition);\n * ```\n */\n private addCompound(operator: LogicalOperator, next: QueryCondition): void {\n if (!this.condition) {\n this.condition = next;\n return;\n }\n if (this.condition.conditionType === 'CompoundCondition' && this.condition.operator === operator) {\n this.condition.conditions.push(next);\n return;\n }\n this.condition = this.compound(operator, [this.condition, next]);\n }\n\n /**\n * Normalize input into a QueryCondition instance.\n *\n * @param condition Builder or raw criteria to normalize.\n * @example\n * ```ts\n * const qc = builder['prepare']({ field: 'id', operator: 'eq', value: '1' });\n * ```\n */\n private prepare(condition: IConditionBuilder | QueryCriteria): QueryCondition {\n if (typeof (condition as IConditionBuilder).toCondition === 'function') {\n return (condition as IConditionBuilder).toCondition();\n }\n const c = condition as QueryCriteria;\n if (c && typeof c.field === 'string' && typeof c.operator === 'string') {\n return this.single(c);\n }\n throw new Error('Invalid condition');\n }\n}\n","// filename: src/helpers/conditions.ts\nimport { ConditionBuilderImpl } from '../builders/condition-builder';\nimport type { IQueryBuilder } from '../types/builders';\nimport type { QueryCriteria } from '../types/protocol';\nimport type { QueryCriteriaOperator } from '../types/common';\n\nconst c = (field: string, operator: QueryCriteriaOperator, value?: unknown) =>\n new ConditionBuilderImpl({ field, operator, value } as QueryCriteria);\n\nexport const eq = (field: string, value: unknown) => c(field, 'EQUAL', value);\nexport const neq = (field: string, value: unknown) => c(field, 'NOT_EQUAL', value);\nexport function inOp(field: string, values: string): ConditionBuilderImpl;\nexport function inOp<T>(field: string, values: unknown[] | IQueryBuilder<T>): ConditionBuilderImpl;\nexport function inOp(field: string, values: unknown[] | string | IQueryBuilder<unknown>): ConditionBuilderImpl {\n const parsed =\n typeof values === 'string'\n ? values.split(',').map(v => v.trim()).filter(v => v.length)\n : values;\n return c(field, 'IN', parsed);\n}\nexport function within<T>(\n field: string,\n values: string | unknown[] | IQueryBuilder<T>,\n): ConditionBuilderImpl {\n return inOp(field, values as any);\n}\nexport function notIn(field: string, values: string): ConditionBuilderImpl;\nexport function notIn<T>(field: string, values: unknown[] | IQueryBuilder<T>): ConditionBuilderImpl;\nexport function notIn(field: string, values: unknown[] | string | IQueryBuilder<unknown>): ConditionBuilderImpl {\n const parsed =\n typeof values === 'string'\n ? values.split(',').map(v => v.trim()).filter(v => v.length)\n : values;\n return c(field, 'NOT_IN', parsed);\n}\nexport function notWithin<T>(\n field: string,\n values: string | unknown[] | IQueryBuilder<T>,\n): ConditionBuilderImpl {\n return notIn(field, values as any);\n}\nexport const between = (field: string, lower: unknown, upper: unknown) => c(field, 'BETWEEN', [lower, upper]);\nexport const gt = (field: string, value: unknown) => c(field, 'GREATER_THAN', value);\nexport const gte = (field: string, value: unknown) => c(field, 'GREATER_THAN_EQUAL', value);\nexport const lt = (field: string, value: unknown) => c(field, 'LESS_THAN', value);\nexport const lte = (field: string, value: unknown) => c(field, 'LESS_THAN_EQUAL', value);\nexport const matches = (field: string, regex: string) => c(field, 'MATCHES', regex);\nexport const notMatches = (field: string, regex: string) => c(field, 'NOT_MATCHES', regex);\nexport const like = (field: string, pattern: string) => c(field, 'LIKE', pattern);\nexport const notLike = (field: string, pattern: string) => c(field, 'NOT_LIKE', pattern);\nexport const contains = (field: string, value: unknown) => c(field, 'CONTAINS', value);\nexport const containsIgnoreCase = (field: string, value: unknown) => c(field, 'CONTAINS_IGNORE_CASE', value);\nexport const notContains = (field: string, value: unknown) => c(field, 'NOT_CONTAINS', value);\nexport const notContainsIgnoreCase = (field: string, value: unknown) => c(field, 'NOT_CONTAINS_IGNORE_CASE', value);\nexport const startsWith = (field: string, prefix: string) => c(field, 'STARTS_WITH', prefix);\nexport const notStartsWith = (field: string, prefix: string) => c(field, 'NOT_STARTS_WITH', prefix);\nexport const isNull = (field: string) => c(field, 'IS_NULL');\nexport const notNull = (field: string) => c(field, 'NOT_NULL');\n","// filename: src/helpers/aggregates.ts\nexport const avg = (attribute: string): string => `avg(${attribute})`;\nexport const sum = (attribute: string): string => `sum(${attribute})`;\nexport const count = (attribute: string): string => `count(${attribute})`;\nexport const min = (attribute: string): string => `min(${attribute})`;\nexport const max = (attribute: string): string => `max(${attribute})`;\nexport const std = (attribute: string): string => `std(${attribute})`;\nexport const variance = (attribute: string): string => `variance(${attribute})`;\nexport const median = (attribute: string): string => `median(${attribute})`;\nexport const upper = (attribute: string): string => `upper(${attribute})`;\nexport const lower = (attribute: string): string => `lower(${attribute})`;\nexport const substring = (attribute: string, from: number, length: number): string =>\n `substring(${attribute},${from},${length})`;\nexport const replace = (attribute: string, pattern: string, repl: string): string =>\n `replace(${attribute}, '${pattern.replace(/'/g, \"\\\\'\")}', '${repl.replace(/'/g, \"\\\\'\")}')`;\nexport const percentile = (attribute: string, p: number): string => `percentile(${attribute}, ${p})`;","// filename: src/edge.ts\nexport const sdkName = '@onyx.dev/onyx-database';\nexport const sdkVersion = '0.1.0';\n\n// Public types & contracts\nexport * from './types/public';\n\n// client impl (edge)\nexport { onyx } from './impl/onyx-edge';\n\n// Helpers (make these available at top-level)\nexport * from './helpers/sort'; // asc, desc\nexport * from './helpers/conditions'; // eq, neq, inOp, ...\nexport * from './helpers/aggregates'; // avg, sum, count, ...\n\n// Query result helper\nexport { QueryResults } from './builders/query-results';\nexport type { QueryResultsPromise } from './builders/query-results';\n"]}
|
|
@@ -218,6 +218,10 @@ async function resolveConfig(input) {
|
|
|
218
218
|
const fetchImpl = merged.fetch ?? (typeof gfetch === "function" ? (u, i) => gfetch(u, i) : async () => {
|
|
219
219
|
throw new OnyxConfigError("No fetch available; provide OnyxConfig.fetch");
|
|
220
220
|
});
|
|
221
|
+
const retryConfig = input?.retry ?? env.retry ?? cfgPath.retry ?? project.retry ?? home.retry ?? {};
|
|
222
|
+
const retryEnabled = retryConfig.enabled ?? true;
|
|
223
|
+
const maxRetries = retryConfig.maxRetries ?? 3;
|
|
224
|
+
const retryInitialDelayMs = retryConfig.initialDelayMs ?? 300;
|
|
221
225
|
const missing = [];
|
|
222
226
|
if (!databaseId) missing.push("databaseId");
|
|
223
227
|
if (!apiKey) missing.push("apiKey");
|
|
@@ -240,7 +244,16 @@ async function resolveConfig(input) {
|
|
|
240
244
|
`Missing required config: ${missing.join(", ")}. Sources: ${sources.join(", ")}`
|
|
241
245
|
);
|
|
242
246
|
}
|
|
243
|
-
const resolved = {
|
|
247
|
+
const resolved = {
|
|
248
|
+
baseUrl,
|
|
249
|
+
databaseId,
|
|
250
|
+
apiKey,
|
|
251
|
+
apiSecret,
|
|
252
|
+
fetch: fetchImpl,
|
|
253
|
+
retryEnabled,
|
|
254
|
+
maxRetries,
|
|
255
|
+
retryInitialDelayMs
|
|
256
|
+
};
|
|
244
257
|
const source = {
|
|
245
258
|
databaseId: input?.databaseId ? "explicit config" : env.databaseId ? "env" : cfgPath.databaseId ? "env ONYX_CONFIG_PATH" : project.databaseId ? "project file" : home.databaseId ? "home profile" : "unknown",
|
|
246
259
|
apiKey: input?.apiKey ? "explicit config" : env.apiKey ? "env" : cfgPath.apiKey ? "env ONYX_CONFIG_PATH" : project.apiKey ? "project file" : home.apiKey ? "home profile" : "unknown",
|
|
@@ -313,7 +326,6 @@ function emitTypes(schema, options) {
|
|
|
313
326
|
};
|
|
314
327
|
const lines = [];
|
|
315
328
|
lines.push(`// AUTO-GENERATED BY onyx-gen. DO NOT EDIT.`);
|
|
316
|
-
lines.push(`// Generated at ${(/* @__PURE__ */ new Date()).toISOString()}`);
|
|
317
329
|
lines.push("");
|
|
318
330
|
for (const t of schema.tables) {
|
|
319
331
|
const typeName = `${opts.modelNamePrefix}${toPascalCase(t.name)}`;
|
|
@@ -388,7 +400,7 @@ function parseJsonAllowNaN(txt) {
|
|
|
388
400
|
return JSON.parse(fixed);
|
|
389
401
|
}
|
|
390
402
|
}
|
|
391
|
-
var HttpClient = class {
|
|
403
|
+
var HttpClient = class _HttpClient {
|
|
392
404
|
baseUrl;
|
|
393
405
|
apiKey;
|
|
394
406
|
apiSecret;
|
|
@@ -396,6 +408,25 @@ var HttpClient = class {
|
|
|
396
408
|
defaults;
|
|
397
409
|
requestLoggingEnabled;
|
|
398
410
|
responseLoggingEnabled;
|
|
411
|
+
retryEnabled;
|
|
412
|
+
maxRetries;
|
|
413
|
+
retryInitialDelayMs;
|
|
414
|
+
shouldRetry;
|
|
415
|
+
static parseRetryAfter(header) {
|
|
416
|
+
if (!header) return null;
|
|
417
|
+
const trimmed = header.trim();
|
|
418
|
+
if (trimmed === "") return null;
|
|
419
|
+
const seconds = Number(trimmed);
|
|
420
|
+
if (Number.isFinite(seconds)) {
|
|
421
|
+
return Math.max(0, seconds * 1e3);
|
|
422
|
+
}
|
|
423
|
+
const dateMs = Date.parse(trimmed);
|
|
424
|
+
if (!Number.isNaN(dateMs)) {
|
|
425
|
+
const now = Date.now();
|
|
426
|
+
return Math.max(0, dateMs - now);
|
|
427
|
+
}
|
|
428
|
+
return null;
|
|
429
|
+
}
|
|
399
430
|
constructor(opts) {
|
|
400
431
|
if (!opts.baseUrl || opts.baseUrl.trim() === "") {
|
|
401
432
|
throw new OnyxConfigError("baseUrl is required");
|
|
@@ -420,6 +451,10 @@ var HttpClient = class {
|
|
|
420
451
|
const envDebug = globalThis.process?.env?.ONYX_DEBUG === "true";
|
|
421
452
|
this.requestLoggingEnabled = !!opts.requestLoggingEnabled || envDebug;
|
|
422
453
|
this.responseLoggingEnabled = !!opts.responseLoggingEnabled || envDebug;
|
|
454
|
+
this.retryEnabled = opts.retryEnabled ?? true;
|
|
455
|
+
this.maxRetries = Math.max(0, opts.maxRetries ?? 2);
|
|
456
|
+
this.retryInitialDelayMs = Math.max(0, opts.retryInitialDelayMs ?? 100);
|
|
457
|
+
this.shouldRetry = (method, path) => method === "GET" || path.startsWith("/query/");
|
|
423
458
|
}
|
|
424
459
|
headers(extra) {
|
|
425
460
|
const extras = { ...extra ?? {} };
|
|
@@ -460,9 +495,8 @@ var HttpClient = class {
|
|
|
460
495
|
headers,
|
|
461
496
|
body: payload
|
|
462
497
|
};
|
|
463
|
-
const
|
|
464
|
-
const
|
|
465
|
-
const maxAttempts = canRetry ? 3 : 1;
|
|
498
|
+
const canRetry = this.retryEnabled && this.shouldRetry(method, path);
|
|
499
|
+
const maxAttempts = canRetry ? this.maxRetries + 1 : 1;
|
|
466
500
|
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
467
501
|
try {
|
|
468
502
|
const res = await this.fetchImpl(url, init);
|
|
@@ -480,7 +514,10 @@ var HttpClient = class {
|
|
|
480
514
|
if (!res.ok) {
|
|
481
515
|
const msg = typeof data === "object" && data !== null && "error" in data && typeof data.error?.message === "string" ? String(data.error.message) : `${res.status} ${res.statusText}`;
|
|
482
516
|
if (canRetry && res.status >= 500 && attempt + 1 < maxAttempts) {
|
|
483
|
-
|
|
517
|
+
const serverRetry = _HttpClient.parseRetryAfter(res.headers.get("retry-after"));
|
|
518
|
+
const backoff = this.retryInitialDelayMs * 2 ** attempt;
|
|
519
|
+
const delay = serverRetry ?? backoff;
|
|
520
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
484
521
|
continue;
|
|
485
522
|
}
|
|
486
523
|
throw new OnyxHttpError(msg, res.status, res.statusText, data, raw);
|
|
@@ -489,7 +526,8 @@ var HttpClient = class {
|
|
|
489
526
|
} catch (err) {
|
|
490
527
|
const retryable = canRetry && (!(err instanceof OnyxHttpError) || err.status >= 500);
|
|
491
528
|
if (attempt + 1 < maxAttempts && retryable) {
|
|
492
|
-
|
|
529
|
+
const delay = this.retryInitialDelayMs * 2 ** attempt;
|
|
530
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
493
531
|
continue;
|
|
494
532
|
}
|
|
495
533
|
throw err;
|
|
@@ -1050,14 +1088,6 @@ var CascadeRelationshipBuilder = class {
|
|
|
1050
1088
|
}
|
|
1051
1089
|
};
|
|
1052
1090
|
|
|
1053
|
-
// src/errors/onyx-error.ts
|
|
1054
|
-
var OnyxError = class extends Error {
|
|
1055
|
-
name = "OnyxError";
|
|
1056
|
-
constructor(message) {
|
|
1057
|
-
super(message);
|
|
1058
|
-
}
|
|
1059
|
-
};
|
|
1060
|
-
|
|
1061
1091
|
// src/helpers/schema-diff.ts
|
|
1062
1092
|
function mapByName(items) {
|
|
1063
1093
|
const map = /* @__PURE__ */ new Map();
|
|
@@ -1246,23 +1276,8 @@ function computeSchemaDiff(apiSchema, localSchema) {
|
|
|
1246
1276
|
return { newTables, removedTables, changedTables };
|
|
1247
1277
|
}
|
|
1248
1278
|
|
|
1249
|
-
// src/impl/onyx.ts
|
|
1279
|
+
// src/impl/onyx-core.ts
|
|
1250
1280
|
var DEFAULT_CACHE_TTL = 5 * 60 * 1e3;
|
|
1251
|
-
var cachedCfg = null;
|
|
1252
|
-
function resolveConfigWithCache(config) {
|
|
1253
|
-
const ttl = config?.ttl ?? DEFAULT_CACHE_TTL;
|
|
1254
|
-
const now = Date.now();
|
|
1255
|
-
if (cachedCfg && cachedCfg.expires > now) {
|
|
1256
|
-
return cachedCfg.promise;
|
|
1257
|
-
}
|
|
1258
|
-
const { ttl: _ttl, requestLoggingEnabled: _reqLog, responseLoggingEnabled: _resLog, ...rest } = config ?? {};
|
|
1259
|
-
const promise = resolveConfig(rest);
|
|
1260
|
-
cachedCfg = { promise, expires: now + ttl };
|
|
1261
|
-
return promise;
|
|
1262
|
-
}
|
|
1263
|
-
function clearCacheConfig() {
|
|
1264
|
-
cachedCfg = null;
|
|
1265
|
-
}
|
|
1266
1281
|
function toSingleCondition(criteria) {
|
|
1267
1282
|
return { conditionType: "SingleCondition", criteria };
|
|
1268
1283
|
}
|
|
@@ -1352,7 +1367,7 @@ var OnyxDatabaseImpl = class {
|
|
|
1352
1367
|
requestLoggingEnabled;
|
|
1353
1368
|
responseLoggingEnabled;
|
|
1354
1369
|
defaultPartition;
|
|
1355
|
-
constructor(config) {
|
|
1370
|
+
constructor(config, resolveConfigWithCache) {
|
|
1356
1371
|
this.requestLoggingEnabled = !!config?.requestLoggingEnabled;
|
|
1357
1372
|
this.responseLoggingEnabled = !!config?.responseLoggingEnabled;
|
|
1358
1373
|
this.defaultPartition = config?.partition;
|
|
@@ -1369,7 +1384,10 @@ var OnyxDatabaseImpl = class {
|
|
|
1369
1384
|
apiSecret: this.resolved.apiSecret,
|
|
1370
1385
|
fetchImpl: this.resolved.fetch,
|
|
1371
1386
|
requestLoggingEnabled: this.requestLoggingEnabled,
|
|
1372
|
-
responseLoggingEnabled: this.responseLoggingEnabled
|
|
1387
|
+
responseLoggingEnabled: this.responseLoggingEnabled,
|
|
1388
|
+
retryEnabled: this.resolved.retryEnabled,
|
|
1389
|
+
maxRetries: this.resolved.maxRetries,
|
|
1390
|
+
retryInitialDelayMs: this.resolved.retryInitialDelayMs
|
|
1373
1391
|
});
|
|
1374
1392
|
}
|
|
1375
1393
|
return {
|
|
@@ -1834,7 +1852,6 @@ var QueryBuilderImpl = class {
|
|
|
1834
1852
|
}
|
|
1835
1853
|
async firstOrNull() {
|
|
1836
1854
|
if (this.mode !== "select") throw new Error("Cannot call firstOrNull() in update mode.");
|
|
1837
|
-
if (!this.conditions) throw new OnyxError("firstOrNull() requires a where() clause.");
|
|
1838
1855
|
this.limitValue = 1;
|
|
1839
1856
|
const pg = await this.page();
|
|
1840
1857
|
return Array.isArray(pg.records) && pg.records.length > 0 ? pg.records[0] : null;
|
|
@@ -1926,12 +1943,32 @@ var CascadeBuilderImpl = class {
|
|
|
1926
1943
|
return this.db.delete(table, primaryKey, opts);
|
|
1927
1944
|
}
|
|
1928
1945
|
};
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1946
|
+
function createOnyxFacade(resolveConfig2) {
|
|
1947
|
+
let cachedCfg = null;
|
|
1948
|
+
function resolveConfigWithCache(config) {
|
|
1949
|
+
const ttl = config?.ttl ?? DEFAULT_CACHE_TTL;
|
|
1950
|
+
const now = Date.now();
|
|
1951
|
+
if (cachedCfg && cachedCfg.expires > now) {
|
|
1952
|
+
return cachedCfg.promise;
|
|
1953
|
+
}
|
|
1954
|
+
const { ttl: _ttl, requestLoggingEnabled: _reqLog, responseLoggingEnabled: _resLog, ...rest } = config ?? {};
|
|
1955
|
+
const promise = resolveConfig2(rest);
|
|
1956
|
+
cachedCfg = { promise, expires: now + ttl };
|
|
1957
|
+
return promise;
|
|
1958
|
+
}
|
|
1959
|
+
function clearCacheConfig() {
|
|
1960
|
+
cachedCfg = null;
|
|
1961
|
+
}
|
|
1962
|
+
return {
|
|
1963
|
+
init(config) {
|
|
1964
|
+
return new OnyxDatabaseImpl(config, resolveConfigWithCache);
|
|
1965
|
+
},
|
|
1966
|
+
clearCacheConfig
|
|
1967
|
+
};
|
|
1968
|
+
}
|
|
1969
|
+
|
|
1970
|
+
// src/impl/onyx.ts
|
|
1971
|
+
var onyx = createOnyxFacade((config) => resolveConfig(config));
|
|
1935
1972
|
|
|
1936
1973
|
// gen/generate.ts
|
|
1937
1974
|
var DEFAULT_SCHEMA_PATH = "./onyx.schema.json";
|