@onyx.dev/onyx-database 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +134 -2
- package/dist/gen/cli/generate.cjs +1376 -163
- package/dist/gen/cli/generate.cjs.map +1 -1
- package/dist/index.cjs +109 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +138 -1
- package/dist/index.d.ts +138 -1
- package/dist/index.js +109 -1
- package/dist/index.js.map +1 -1
- package/dist/schema/cli/schema.cjs +1698 -0
- package/dist/schema/cli/schema.cjs.map +1 -0
- package/package.json +6 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/config/defaults.ts","../../../src/errors/config-error.ts","../../../src/config/chain.ts","../../../src/errors/http-error.ts","../../../src/core/http.ts","../../../gen/emit.ts","../../../gen/generate.ts","../../../gen/cli/generate.ts"],"names":["DEFAULTS","process"],"mappings":"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","file":"generate.cjs","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.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';\n\nexport interface ResolvedConfig {\n baseUrl: string;\n databaseId: string;\n apiKey: string;\n apiSecret: string;\n fetch: FetchImpl;\n}\n\nconst gProcess = (globalThis as {\n process?: {\n versions?: { node?: string };\n env?: Record<string, string | undefined>;\n stderr?: { write?: (s: string) => void };\n cwd?: () => string;\n };\n}).process;\nconst isNode = !!gProcess?.versions?.node;\n\n// Optional debug logger — enable with ONYX_DEBUG=true (Node only)\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\n// Lazy import helper to hide Node-only modules from bundlers\nasync function nodeImport<T>(spec: string): Promise<T> {\n return import(/* @vite-ignore */ spec) as Promise<T>;\n}\n\nfunction readEnv(targetId?: string): Partial<OnyxConfig> {\n if (!gProcess?.env) return {};\n const env = gProcess.env;\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\nasync function readProjectFile(databaseId?: string): Promise<Partial<OnyxConfig>> {\n if (!isNode) return {};\n const fs = await nodeImport<typeof import('node:fs/promises')>('node:fs/promises');\n const path = await nodeImport<typeof import('node:path')>('node:path');\n const cwd = gProcess?.cwd?.() ?? '.';\n\n const tryRead = async (p: string): Promise<Partial<OnyxConfig>> => {\n const txt = await fs.readFile(p, 'utf8');\n const sanitized = txt.replace(/[\\r\\n]+/g, '');\n const json = dropUndefined<OnyxConfig>(JSON.parse(sanitized) as Partial<OnyxConfig>);\n dbg('project file:', p, '→', mask(json));\n return json;\n };\n\n if (databaseId) {\n const specific = path.resolve(cwd, `onyx-database-${databaseId}.json`);\n try {\n return await tryRead(specific);\n } catch {\n dbg('project file not found:', specific);\n }\n }\n\n const fallback = path.resolve(cwd, 'onyx-database.json');\n try {\n return await tryRead(fallback);\n } catch {\n dbg('project file not found:', fallback);\n return {};\n }\n}\n\nasync function readHomeProfile(databaseId?: string): Promise<Partial<OnyxConfig>> {\n if (!isNode) return {};\n const fs = await nodeImport<typeof import('node:fs/promises')>('node:fs/promises');\n const os = await nodeImport<typeof import('node:os')>('node:os');\n const path = await nodeImport<typeof import('node:path')>('node:path');\n\n const home = os.homedir();\n const dir = path.join(home, '.onyx');\n\n const fileExists = async (p: string): Promise<boolean> => {\n try {\n await fs.access(p);\n return true;\n } catch {\n return false;\n }\n };\n const readProfile = async (p: string): Promise<Partial<OnyxConfig>> => {\n try {\n const txt = await fs.readFile(p, 'utf8');\n const sanitized = txt.replace(/[\\r\\n]+/g, '');\n const json = dropUndefined<OnyxConfig>(JSON.parse(sanitized) as Partial<OnyxConfig>);\n dbg('home profile used:', p, '→', mask(json));\n return json;\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new OnyxConfigError(`Failed to read ${p}: ${msg}`);\n }\n };\n\n if (databaseId) {\n const specific = `${dir}/onyx-database-${databaseId}.json`;\n if (await fileExists(specific)) return readProfile(specific);\n dbg('no specific profile:', specific);\n }\n\n const defaultInDir = `${dir}/onyx-database.json`;\n if (await fileExists(defaultInDir)) return readProfile(defaultInDir);\n dbg('no default profile in dir:', defaultInDir);\n\n const defaultInHome = `${home}/onyx-database.json`;\n if (await fileExists(defaultInHome)) return readProfile(defaultInHome);\n dbg('no home-root fallback:', defaultInHome);\n\n if (!(await fileExists(dir))) {\n dbg('~/.onyx does not exist:', dir);\n return {};\n }\n const files = await fs.readdir(dir).catch(() => []);\n const matches = files.filter(f => f.startsWith('onyx-database-') && f.endsWith('.json'));\n if (matches.length === 1) {\n const only = `${dir}/${matches[0]}`;\n return readProfile(only);\n }\n if (matches.length > 1) {\n throw new OnyxConfigError(\n 'Multiple ~/.onyx/onyx-database-*.json profiles found. Specify databaseId via env or provide ./onyx-database.json.'\n );\n }\n\n dbg('no usable home profiles found in', dir);\n return {};\n}\n\nasync function readConfigPath(p: string): Promise<Partial<OnyxConfig>> {\n if (!isNode) return {};\n const fs = await nodeImport<typeof import('node:fs/promises')>('node:fs/promises');\n const path = await nodeImport<typeof import('node:path')>('node:path');\n const cwd = gProcess?.cwd?.() ?? '.';\n const resolved = path.isAbsolute(p) ? p : path.resolve(cwd, p);\n try {\n const txt = await fs.readFile(resolved, 'utf8');\n const sanitized = txt.replace(/[\\r\\n]+/g, '');\n const json = dropUndefined<OnyxConfig>(JSON.parse(sanitized) as Partial<OnyxConfig>);\n dbg('config path:', resolved, '→', mask(json));\n return json;\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new OnyxConfigError(`Failed to read ${resolved}: ${msg}`);\n }\n}\n\n/**\n * Resolve configuration using precedence:\n * explicit config (highest) >\n * env vars >\n * ONYX_CONFIG_PATH file >\n * project file >\n * home profile\n */\nexport async function resolveConfig(input?: OnyxConfig): Promise<ResolvedConfig> {\n const configPath = gProcess?.env?.ONYX_CONFIG_PATH;\n const env = readEnv(input?.databaseId);\n\n let cfgPath: Partial<OnyxConfig> = {};\n if (configPath) {\n cfgPath = await readConfigPath(configPath);\n }\n\n const targetId = input?.databaseId ?? env.databaseId ?? cfgPath.databaseId;\n\n let haveDbId = !!(input?.databaseId ?? env.databaseId ?? cfgPath.databaseId);\n let haveApiKey = !!(input?.apiKey ?? env.apiKey ?? cfgPath.apiKey);\n let haveApiSecret = !!(input?.apiSecret ?? env.apiSecret ?? cfgPath.apiSecret);\n\n let project: Partial<OnyxConfig> = {};\n if (!(haveDbId && haveApiKey && haveApiSecret)) {\n project = await readProjectFile(targetId);\n if (project.databaseId) haveDbId = true;\n if (project.apiKey) haveApiKey = true;\n if (project.apiSecret) haveApiSecret = true;\n }\n\n let home: Partial<OnyxConfig> = {};\n if (!(haveDbId && haveApiKey && haveApiSecret)) {\n home = await readHomeProfile(targetId);\n }\n\n const merged: Partial<OnyxConfig> = {\n baseUrl: DEFAULT_BASE_URL,\n ...dropUndefined<OnyxConfig>(home),\n ...dropUndefined<OnyxConfig>(project),\n ...dropUndefined<OnyxConfig>(cfgPath),\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\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 = [\n 'env',\n configPath ?? 'env ONYX_CONFIG_PATH',\n ...(isNode\n ? [\n './onyx-database-<databaseId>.json',\n './onyx-database.json',\n '~/.onyx/onyx-database-<databaseId>.json',\n '~/.onyx/onyx-database.json',\n '~/onyx-database.json',\n ]\n : []),\n 'explicit config',\n ];\n throw new OnyxConfigError(\n `Missing required config: ${missing.join(', ')}. Sources: ${sources.join(', ')}`,\n );\n }\n\n const resolved: ResolvedConfig = { baseUrl, databaseId, apiKey, apiSecret, fetch: fetchImpl };\n const source = {\n databaseId: input?.databaseId\n ? 'explicit config'\n : env.databaseId\n ? 'env'\n : cfgPath.databaseId\n ? 'env ONYX_CONFIG_PATH'\n : project.databaseId\n ? 'project file'\n : home.databaseId\n ? 'home profile'\n : 'unknown',\n apiKey: input?.apiKey\n ? 'explicit config'\n : env.apiKey\n ? 'env'\n : cfgPath.apiKey\n ? 'env ONYX_CONFIG_PATH'\n : project.apiKey\n ? 'project file'\n : home.apiKey\n ? 'home profile'\n : 'unknown',\n apiSecret: input?.apiSecret\n ? 'explicit config'\n : env.apiSecret\n ? 'env'\n : cfgPath.apiSecret\n ? 'env ONYX_CONFIG_PATH'\n : project.apiSecret\n ? 'project file'\n : home.apiSecret\n ? 'home profile'\n : 'unknown',\n };\n dbg('credential source:', JSON.stringify(source));\n dbg('resolved:', mask(resolved));\n return resolved;\n}\n\n// Redacts secrets for debug logging\nfunction mask<T extends object>(obj: T | undefined): T | undefined {\n if (!obj) return obj;\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}\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\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 }\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 if (body == null) 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 const isQuery =\n path.includes('/query/') && !/\\/query\\/(?:update|delete)\\//.test(path);\n const canRetry = method === 'GET' || isQuery;\n const maxAttempts = canRetry ? 3 : 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 await new Promise((r) => setTimeout(r, 100 * 2 ** attempt));\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 await new Promise((r) => setTimeout(r, 100 * 2 ** attempt));\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: gen/emit.ts\nexport type OnyxAttributeType =\n | 'String'\n | 'Int'\n | 'Boolean'\n | 'Timestamp'\n | 'EmbeddedList'\n | 'EmbeddedObject';\n\nexport type OnyxAttribute = Readonly<{\n name: string;\n type: OnyxAttributeType;\n isNullable: boolean;\n}>;\n\nexport type OnyxTable = Readonly<{\n name: string;\n attributes: readonly OnyxAttribute[];\n}>;\n\nexport type OnyxIntrospection = Readonly<{\n tables: readonly OnyxTable[];\n}>;\n\nexport type OptionalStrategy = 'non-null' | 'nullable' | 'none';\n\nexport type EmitOptions = Readonly<{\n /** Exported schema mapping type name. */\n schemaTypeName?: string;\n /** How to represent Timestamp attributes. Default: 'date'. */\n timestampMode?: 'string' | 'date' | 'number';\n /** Prefix added to each generated model/interface name. Example: 'Onyx' -> OnyxVodItem */\n modelNamePrefix?: string;\n /**\n * Where to use the TypeScript optional property modifier `?`.\n * - 'non-null' (default): add `?` on non-nullable fields (isNullable === false)\n * - 'nullable' : add `?` on nullable fields (isNullable === true)\n * - 'none' : never add `?`\n */\n optionalStrategy?: OptionalStrategy;\n}>;\n\nconst DEFAULTS: Required<EmitOptions> = {\n schemaTypeName: 'OnyxSchema',\n timestampMode: 'date',\n modelNamePrefix: '',\n optionalStrategy: 'non-null',\n};\n\nfunction isValidIdentifier(name: string): boolean {\n return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name);\n}\n\nfunction toPascalCase(raw: string): string {\n const cleaned = String(raw).replace(/[^A-Za-z0-9]+/g, ' ');\n const pc = cleaned\n .trim()\n .split(/\\s+/)\n .filter(Boolean)\n .map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n .join('');\n return pc.length === 0 ? 'Table' : (/^[0-9]/.test(pc) ? `T${pc}` : pc);\n}\n\nfunction tsTypeFor(\n attrType: OnyxAttributeType,\n timestampMode: 'string' | 'date' | 'number',\n): string {\n switch (attrType) {\n case 'String':\n return 'string';\n case 'Int':\n return 'number';\n case 'Boolean':\n return 'boolean';\n case 'Timestamp':\n return timestampMode === 'date'\n ? 'Date'\n : timestampMode === 'number'\n ? 'number'\n : 'string';\n case 'EmbeddedList':\n return 'any[]';\n case 'EmbeddedObject':\n return 'any';\n default:\n return 'any';\n }\n}\n\nfunction propertyLine(\n attr: OnyxAttribute,\n timestampMode: 'string' | 'date' | 'number',\n optionalStrategy: OptionalStrategy,\n): string {\n const key = isValidIdentifier(attr.name) ? attr.name : JSON.stringify(attr.name);\n\n // Decide whether to mark the property as optional (with '?')\n const makeOptional =\n optionalStrategy === 'non-null'\n ? !attr.isNullable\n : optionalStrategy === 'nullable'\n ? attr.isNullable\n : false;\n\n const t = tsTypeFor(attr.type, timestampMode);\n const nullableUnion = attr.isNullable ? ' | null' : '';\n\n return ` ${key}${makeOptional ? '?' : ''}: ${t}${nullableUnion};`;\n}\n\nexport function emitTypes(schema: OnyxIntrospection, options?: EmitOptions): string {\n const opts = { ...DEFAULTS, ...(options ?? {}) };\n\n // Track used enum keys to avoid collisions\n const usedEnumKeys = new Set<string>();\n const makeEnumKey = (raw: string): string => {\n const base = toPascalCase(raw);\n let key = base;\n let i = 2;\n while (usedEnumKeys.has(key)) {\n key = `${base}_${i++}`;\n }\n usedEnumKeys.add(key);\n return key;\n };\n\n const lines: string[] = [];\n lines.push(`// AUTO-GENERATED BY onyx-gen. DO NOT EDIT.`);\n lines.push(`// Generated at ${new Date().toISOString()}`);\n lines.push('');\n\n // Per-table interfaces\n for (const t of schema.tables) {\n const typeName = `${opts.modelNamePrefix}${toPascalCase(t.name)}`;\n lines.push(`export interface ${typeName} {`);\n for (const a of t.attributes) {\n lines.push(propertyLine(a, opts.timestampMode, opts.optionalStrategy));\n }\n lines.push(' [key: string]: any;');\n lines.push('}');\n lines.push('');\n }\n\n // Schema mapping\n lines.push(`export type ${opts.schemaTypeName} = {`);\n for (const t of schema.tables) {\n const key = isValidIdentifier(t.name) ? t.name : JSON.stringify(t.name);\n const modelName = `${opts.modelNamePrefix}${toPascalCase(t.name)}`;\n lines.push(` ${key}: ${modelName};`);\n }\n lines.push('};');\n lines.push('');\n\n // Convenience alias so consumers can always `import { Schema }`\n if (opts.schemaTypeName !== 'Schema') {\n lines.push(`export type Schema = ${opts.schemaTypeName};`);\n }\n lines.push(`export const Schema = {} as ${opts.schemaTypeName};`);\n lines.push('');\n\n // Tables enum (for IDE suggestions & safer table refs)\n lines.push('export enum tables {');\n for (const t of schema.tables) {\n const enumKey = makeEnumKey(t.name); // safe TS identifier\n const enumVal = JSON.stringify(t.name); // preserve original table name\n lines.push(` ${enumKey} = ${enumVal},`);\n }\n lines.push('}');\n lines.push('');\n\n return lines.join('\\n');\n}\n","// filename: gen/generate.ts\nimport process from 'node:process';\nimport { resolveConfig } from '../src/config/chain';\nimport { HttpClient } from '../src/core/http';\nimport { emitTypes, type OnyxIntrospection, type EmitOptions, type OptionalStrategy } from './emit';\n\nexport interface GenerateOptions {\n /** Where to read schema from. */\n source?: 'auto' | 'api' | 'file';\n /** When source=file, filesystem path to schema JSON. */\n schemaPath?: string;\n\n /**\n * Output base filename (without extension). Default: \"onyx.schema\".\n * Used only when writing into a directory (see `typesOutDir`).\n */\n outBaseName?: string;\n\n /**\n * Types output directory (when writing into a directory).\n * Default: \"generated\". Back-compat alias: `outDir`.\n */\n typesOutDir?: string;\n\n /**\n * Write the generated types to THIS EXACT FILE (absolute or relative path).\n * If provided and points to a \".ts\" file, this takes precedence over `typesOutDir`.\n * Example: \"./onyx/types.ts\"\n */\n typesOutFile?: string;\n\n /**\n * JSON output directory (only used when `emitJson: true`).\n * Default: same as `typesOutDir` or the directory of `typesOutFile` (if set).\n */\n jsonOutDir?: string;\n\n /**\n * Emit a copy of the schema JSON alongside the TS file.\n * Default: false (do not copy schema).\n */\n emitJson?: boolean;\n\n /** Overwrite existing files. Default: true. */\n overwrite?: boolean;\n\n /** Timestamp representation for TS types. Default: \"date\". */\n timestampMode?: EmitOptions['timestampMode'];\n\n /** Exported schema type name. Default: \"OnyxSchema\". */\n schemaTypeName?: string;\n\n /** Prefix for model/interface names. Example: \"Onyx\" -> OnyxVodItem. Default: \"\" */\n prefix?: string;\n\n /**\n * Optional property strategy. Default: \"non-null\" (add `?` to non-null fields).\n * Other values: \"nullable\", \"none\".\n */\n optional?: OptionalStrategy;\n\n /** Optional candidate API paths (overrides defaults). Must start with \"/\". */\n apiPaths?: string[];\n\n /** Quiet logs. Default: false. */\n quiet?: boolean;\n\n /** @deprecated Legacy single outDir; still accepted to avoid breaking scripts. */\n outDir?: string;\n}\n\nconst DEFAULTS: Required<\n Omit<\n GenerateOptions,\n | 'schemaPath'\n | 'apiPaths'\n | 'typesOutDir'\n | 'jsonOutDir'\n | 'outDir'\n | 'prefix'\n | 'typesOutFile'\n >\n> = {\n source: 'auto',\n outBaseName: 'onyx.schema',\n emitJson: false,\n overwrite: true,\n timestampMode: 'date',\n schemaTypeName: 'OnyxSchema',\n optional: 'non-null',\n quiet: false,\n};\n\nasync function readFileJson<T = unknown>(path: string): Promise<T> {\n const fs = await import('node:fs/promises');\n const txt = await fs.readFile(path, 'utf8');\n return JSON.parse(txt) as T;\n}\n\nasync function ensureDir(dir: string): Promise<void> {\n const fs = await import('node:fs/promises');\n await fs.mkdir(dir, { recursive: true });\n}\n\nasync function writeFile(path: string, data: string, overwrite: boolean): Promise<void> {\n const fs = await import('node:fs/promises');\n if (!overwrite) {\n try {\n await fs.access(path);\n throw new Error(`Refusing to overwrite existing file: ${path}`);\n } catch {\n /* not exists -> ok */\n }\n }\n await fs.writeFile(path, data, 'utf8');\n}\n\nfunction isIntrospection(x: unknown): x is OnyxIntrospection {\n return !!x && typeof x === 'object' && Array.isArray((x as { tables?: unknown }).tables);\n}\n\nasync function fetchSchemaFromApi(\n http: HttpClient,\n databaseId: string,\n candidates?: string[],\n): Promise<OnyxIntrospection> {\n const defaultCandidates = [\n `/schema/${encodeURIComponent(databaseId)}`,\n `/data/${encodeURIComponent(databaseId)}/schema`,\n `/meta/schema/${encodeURIComponent(databaseId)}`,\n `/schema?databaseId=${encodeURIComponent(databaseId)}`,\n `/meta/schema?databaseId=${encodeURIComponent(databaseId)}`,\n ];\n const paths = candidates && candidates.length ? candidates : defaultCandidates;\n\n let lastErr: unknown;\n for (const p of paths) {\n try {\n const res = await http.request<unknown>('GET', p);\n if (isIntrospection(res)) return res;\n } catch (e) {\n lastErr = e;\n }\n }\n const err = lastErr instanceof Error ? lastErr.message : String(lastErr ?? 'Unknown error');\n throw new Error(\n `Unable to fetch schema from API. Tried: ${paths.join(', ')}. Last error: ${err}`,\n );\n}\n\n/**\n * Programmatic codegen entry.\n * Returns the absolute paths of the generated files.\n */\nexport async function generateTypes(\n options?: GenerateOptions,\n): Promise<{ typesPath: string; jsonPath?: string }> {\n const path = await import('node:path');\n const opts = { ...DEFAULTS, ...(options ?? {}) };\n\n // Back-compat: allow legacy outDir to set typesOutDir if not provided\n const typesDir = opts.typesOutDir ?? opts.outDir ?? 'generated';\n\n let schema: OnyxIntrospection | null = null;\n\n if (opts.source === 'file' || (opts.source === 'auto' && opts.schemaPath)) {\n if (!opts.schemaPath) throw new Error('schemaPath is required when source=\"file\"');\n if (!opts.quiet)\n process.stderr.write(`[onyx-gen] reading schema from file: ${opts.schemaPath}\\n`);\n schema = await readFileJson<OnyxIntrospection>(opts.schemaPath);\n }\n\n if (!schema) {\n if (opts.source === 'file') throw new Error('Failed to read schema from file');\n const cfg = await resolveConfig({});\n const http = new HttpClient({\n baseUrl: cfg.baseUrl,\n apiKey: cfg.apiKey,\n apiSecret: cfg.apiSecret,\n fetchImpl: cfg.fetch,\n });\n if (!opts.quiet)\n process.stderr.write(`[onyx-gen] fetching schema from API for db ${cfg.databaseId}\\n`);\n schema = await fetchSchemaFromApi(http, cfg.databaseId, options?.apiPaths);\n }\n\n if (!isIntrospection(schema)) {\n throw new Error('Invalid schema: missing \"tables\" array.');\n }\n\n // Decide file-vs-dir for types\n const outIsFile =\n typeof opts.typesOutFile === 'string' &&\n (opts.typesOutFile.endsWith('.ts') ||\n opts.typesOutFile.endsWith('.mts') ||\n opts.typesOutFile.endsWith('.cts') ||\n opts.typesOutFile.endsWith('.d.ts') ||\n opts.typesOutFile.endsWith('.d.mts') ||\n opts.typesOutFile.endsWith('.d.cts'));\n\n let typesPath: string;\n let jsonBaseName: string; // used only when emitJson = true\n let typesDirAbs: string;\n\n if (outIsFile) {\n const typesOutFile = opts.typesOutFile as string;\n typesPath = path.resolve(process.cwd(), typesOutFile);\n typesDirAbs = path.dirname(typesPath);\n await ensureDir(typesDirAbs);\n jsonBaseName = path.basename(typesPath, path.extname(typesPath));\n } else {\n typesDirAbs = path.resolve(process.cwd(), typesDir);\n await ensureDir(typesDirAbs);\n typesPath = path.join(typesDirAbs, `${opts.outBaseName}.ts`);\n jsonBaseName = opts.outBaseName;\n }\n\n const types = emitTypes(schema, {\n schemaTypeName: opts.schemaTypeName,\n timestampMode: opts.timestampMode,\n modelNamePrefix: opts.prefix ?? '',\n optionalStrategy: opts.optional,\n });\n await writeFile(typesPath, `${types}\\n`, opts.overwrite);\n\n let jsonPath: string | undefined;\n if (opts.emitJson) {\n const jsonOutDirAbs = path.resolve(\n process.cwd(),\n opts.jsonOutDir ?? (outIsFile ? typesDirAbs : typesDirAbs),\n );\n await ensureDir(jsonOutDirAbs);\n jsonPath = path.join(jsonOutDirAbs, `${jsonBaseName}.json`);\n const jsonPretty = JSON.stringify(schema, null, 2);\n await writeFile(jsonPath, `${jsonPretty}\\n`, opts.overwrite);\n }\n\n if (!opts.quiet) {\n process.stderr.write(`[onyx-gen] wrote ${typesPath}\\n`);\n if (jsonPath) process.stderr.write(`[onyx-gen] wrote ${jsonPath}\\n`);\n }\n\n return { typesPath, jsonPath };\n}\n","#!/usr/bin/env node\n// filename: gen/cli/generate.ts\nimport process from 'node:process';\nimport { generateTypes, type GenerateOptions } from '../generate';\n\nfunction isTypesFilePath(p?: string): boolean {\n if (!p) return false;\n return (\n p.endsWith('.ts') ||\n p.endsWith('.mts') ||\n p.endsWith('.cts') ||\n p.endsWith('.d.ts') ||\n p.endsWith('.d.mts') ||\n p.endsWith('.d.cts')\n );\n}\n\nfunction parseArgs(argv: string[]): GenerateOptions {\n const opts: GenerateOptions = {};\n const next = (i: number) => argv[i + 1];\n\n for (let i = 2; i < argv.length; i++) {\n const a = argv[i];\n switch (a) {\n case '--out':\n case '--outDir': { // legacy alias\n const val = next(i);\n if (!val) throw new Error(`Missing value for ${a}`);\n if (isTypesFilePath(val)) opts.typesOutFile = val;\n else opts.typesOutDir = val;\n i++;\n break;\n }\n case '--types-out':\n case '--typesOut': {\n const val = next(i);\n if (!val) throw new Error(`Missing value for ${a}`);\n if (isTypesFilePath(val)) opts.typesOutFile = val;\n else opts.typesOutDir = val;\n i++;\n break;\n }\n case '--types-file':\n case '--typesFile': {\n const val = next(i);\n if (!val) throw new Error(`Missing value for ${a}`);\n opts.typesOutFile = val;\n i++;\n break;\n }\n case '--json-out':\n case '--jsonOut':\n opts.jsonOutDir = next(i);\n i++;\n break;\n case '--base':\n case '--baseName':\n opts.outBaseName = next(i);\n i++;\n break;\n case '--schema':\n opts.schemaPath = next(i);\n i++;\n break;\n case '--source': {\n const v = (next(i) ?? '').toLowerCase();\n if (v === 'api' || v === 'file' || v === 'auto') opts.source = v as GenerateOptions['source'];\n else throw new Error(`Invalid --source: ${v}`);\n i++;\n break;\n }\n case '--timestamps': {\n const v = (next(i) ?? '').toLowerCase();\n if (v === 'string' || v === 'date' || v === 'number') opts.timestampMode = v as GenerateOptions['timestampMode'];\n else throw new Error(`Invalid --timestamps: ${v}`);\n i++;\n break;\n }\n case '--name':\n case '--schemaTypeName':\n opts.schemaTypeName = next(i);\n i++;\n break;\n case '--prefix':\n opts.prefix = next(i);\n i++;\n break;\n case '--optional': {\n const v = (next(i) ?? '').toLowerCase();\n if (v === 'non-null' || v === 'nonnull' || v === 'nonull') {\n opts.optional = 'non-null';\n } else if (v === 'nullable') {\n opts.optional = 'nullable';\n } else if (v === 'none') {\n opts.optional = 'none';\n } else {\n throw new Error(`Invalid --optional: ${v} (use non-null|nullable|none)`);\n }\n i++;\n break;\n }\n case '--emit-json':\n opts.emitJson = true;\n break;\n case '--no-emit-json':\n opts.emitJson = false;\n break;\n case '--api-path': {\n const v = next(i);\n if (!v || !v.startsWith('/')) throw new Error(`--api-path must start with \"/\": ${v}`);\n if (!opts.apiPaths) opts.apiPaths = [];\n opts.apiPaths.push(v);\n i++;\n break;\n }\n case '--overwrite':\n opts.overwrite = true;\n break;\n case '--no-overwrite':\n opts.overwrite = false;\n break;\n case '-q':\n case '--quiet':\n opts.quiet = true;\n break;\n case '-h':\n case '--help':\n printHelp();\n process.exit(0);\n break;\n default:\n if (a.startsWith('-')) throw new Error(`Unknown option: ${a}`);\n break;\n }\n }\n return opts;\n}\n\nfunction printHelp(): void {\n process.stdout.write(`onyx-gen — Generate Onyx schema TypeScript types\n\nUsage:\n onyx-gen [options]\n\nOutput selection:\n --out <path> If <path> ends with \".ts\", writes exactly to that file.\n Otherwise treats <path> as a directory.\n --types-out <dir|file> Same as --out (file-or-dir).\n --types-file <file.ts> Explicit file output.\n --base, --baseName <name> Base filename (without ext) when writing to a directory (default: onyx.schema)\n --json-out <dir> JSON output directory (used only with --emit-json)\n\nSource selection:\n --source <auto|api|file> Where to get schema (default: auto)\n --schema <path> Path to schema JSON when --source=file (or to force local)\n\nType emission:\n --timestamps <string|date|number> Timestamp representation in types (default: date)\n --name, --schemaTypeName <T> Exported schema type name (default: OnyxSchema)\n --prefix <Prefix> Prefix to prepend to generated model names (default: none)\n --optional <non-null|nullable|none>\n Where to add '?' optional props (default: non-null)\n\nOther:\n --emit-json / --no-emit-json Emit schema JSON copy (default: no-emit-json)\n --api-path <path> Candidate API path to fetch schema; can be repeated\n --overwrite / --no-overwrite Overwrite existing files (default: overwrite)\n -q, --quiet Suppress logs\n -h, --help Show this help\n\nNotes:\n • Env/config for --source=api uses the same resolver as onyx.init()\n (env vars, ./onyx-database.json, ~/.onyx/onyx-database-<id>.json, etc.).\n`);\n}\n\n(async () => {\n try {\n const opts = parseArgs(process.argv);\n await generateTypes(opts);\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n process.stderr.write(`onyx-gen: ${msg}\\n`);\n process.exit(1);\n }\n})();\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/config/defaults.ts","../../../src/errors/config-error.ts","../../../src/config/chain.ts","../../../gen/emit.ts","../../../src/errors/http-error.ts","../../../src/core/http.ts","../../../src/core/stream.ts","../../../src/builders/query-results.ts","../../../src/builders/cascade-relationship-builder.ts","../../../src/errors/onyx-error.ts","../../../src/impl/onyx.ts","../../../gen/generate.ts","../../../gen/cli/generate.ts"],"names":["DEFAULTS","process","isTypesFilePath"],"mappings":"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","file":"generate.cjs","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.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';\n\nexport interface ResolvedConfig {\n baseUrl: string;\n databaseId: string;\n apiKey: string;\n apiSecret: string;\n fetch: FetchImpl;\n}\n\nconst gProcess = (globalThis as {\n process?: {\n versions?: { node?: string };\n env?: Record<string, string | undefined>;\n stderr?: { write?: (s: string) => void };\n cwd?: () => string;\n };\n}).process;\nconst isNode = !!gProcess?.versions?.node;\n\n// Optional debug logger — enable with ONYX_DEBUG=true (Node only)\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\n// Lazy import helper to hide Node-only modules from bundlers\nasync function nodeImport<T>(spec: string): Promise<T> {\n return import(/* @vite-ignore */ spec) as Promise<T>;\n}\n\nfunction readEnv(targetId?: string): Partial<OnyxConfig> {\n if (!gProcess?.env) return {};\n const env = gProcess.env;\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\nasync function readProjectFile(databaseId?: string): Promise<Partial<OnyxConfig>> {\n if (!isNode) return {};\n const fs = await nodeImport<typeof import('node:fs/promises')>('node:fs/promises');\n const path = await nodeImport<typeof import('node:path')>('node:path');\n const cwd = gProcess?.cwd?.() ?? '.';\n\n const tryRead = async (p: string): Promise<Partial<OnyxConfig>> => {\n const txt = await fs.readFile(p, 'utf8');\n const sanitized = txt.replace(/[\\r\\n]+/g, '');\n const json = dropUndefined<OnyxConfig>(JSON.parse(sanitized) as Partial<OnyxConfig>);\n dbg('project file:', p, '→', mask(json));\n return json;\n };\n\n if (databaseId) {\n const specific = path.resolve(cwd, `onyx-database-${databaseId}.json`);\n try {\n return await tryRead(specific);\n } catch {\n dbg('project file not found:', specific);\n }\n }\n\n const fallback = path.resolve(cwd, 'onyx-database.json');\n try {\n return await tryRead(fallback);\n } catch {\n dbg('project file not found:', fallback);\n return {};\n }\n}\n\nasync function readHomeProfile(databaseId?: string): Promise<Partial<OnyxConfig>> {\n if (!isNode) return {};\n const fs = await nodeImport<typeof import('node:fs/promises')>('node:fs/promises');\n const os = await nodeImport<typeof import('node:os')>('node:os');\n const path = await nodeImport<typeof import('node:path')>('node:path');\n\n const home = os.homedir();\n const dir = path.join(home, '.onyx');\n\n const fileExists = async (p: string): Promise<boolean> => {\n try {\n await fs.access(p);\n return true;\n } catch {\n return false;\n }\n };\n const readProfile = async (p: string): Promise<Partial<OnyxConfig>> => {\n try {\n const txt = await fs.readFile(p, 'utf8');\n const sanitized = txt.replace(/[\\r\\n]+/g, '');\n const json = dropUndefined<OnyxConfig>(JSON.parse(sanitized) as Partial<OnyxConfig>);\n dbg('home profile used:', p, '→', mask(json));\n return json;\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new OnyxConfigError(`Failed to read ${p}: ${msg}`);\n }\n };\n\n if (databaseId) {\n const specific = `${dir}/onyx-database-${databaseId}.json`;\n if (await fileExists(specific)) return readProfile(specific);\n dbg('no specific profile:', specific);\n }\n\n const defaultInDir = `${dir}/onyx-database.json`;\n if (await fileExists(defaultInDir)) return readProfile(defaultInDir);\n dbg('no default profile in dir:', defaultInDir);\n\n const defaultInHome = `${home}/onyx-database.json`;\n if (await fileExists(defaultInHome)) return readProfile(defaultInHome);\n dbg('no home-root fallback:', defaultInHome);\n\n if (!(await fileExists(dir))) {\n dbg('~/.onyx does not exist:', dir);\n return {};\n }\n const files = await fs.readdir(dir).catch(() => []);\n const matches = files.filter(f => f.startsWith('onyx-database-') && f.endsWith('.json'));\n if (matches.length === 1) {\n const only = `${dir}/${matches[0]}`;\n return readProfile(only);\n }\n if (matches.length > 1) {\n throw new OnyxConfigError(\n 'Multiple ~/.onyx/onyx-database-*.json profiles found. Specify databaseId via env or provide ./onyx-database.json.'\n );\n }\n\n dbg('no usable home profiles found in', dir);\n return {};\n}\n\nasync function readConfigPath(p: string): Promise<Partial<OnyxConfig>> {\n if (!isNode) return {};\n const fs = await nodeImport<typeof import('node:fs/promises')>('node:fs/promises');\n const path = await nodeImport<typeof import('node:path')>('node:path');\n const cwd = gProcess?.cwd?.() ?? '.';\n const resolved = path.isAbsolute(p) ? p : path.resolve(cwd, p);\n try {\n const txt = await fs.readFile(resolved, 'utf8');\n const sanitized = txt.replace(/[\\r\\n]+/g, '');\n const json = dropUndefined<OnyxConfig>(JSON.parse(sanitized) as Partial<OnyxConfig>);\n dbg('config path:', resolved, '→', mask(json));\n return json;\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new OnyxConfigError(`Failed to read ${resolved}: ${msg}`);\n }\n}\n\n/**\n * Resolve configuration using precedence:\n * explicit config (highest) >\n * env vars >\n * ONYX_CONFIG_PATH file >\n * project file >\n * home profile\n */\nexport async function resolveConfig(input?: OnyxConfig): Promise<ResolvedConfig> {\n const configPath = gProcess?.env?.ONYX_CONFIG_PATH;\n const env = readEnv(input?.databaseId);\n\n let cfgPath: Partial<OnyxConfig> = {};\n if (configPath) {\n cfgPath = await readConfigPath(configPath);\n }\n\n const targetId = input?.databaseId ?? env.databaseId ?? cfgPath.databaseId;\n\n let haveDbId = !!(input?.databaseId ?? env.databaseId ?? cfgPath.databaseId);\n let haveApiKey = !!(input?.apiKey ?? env.apiKey ?? cfgPath.apiKey);\n let haveApiSecret = !!(input?.apiSecret ?? env.apiSecret ?? cfgPath.apiSecret);\n\n let project: Partial<OnyxConfig> = {};\n if (!(haveDbId && haveApiKey && haveApiSecret)) {\n project = await readProjectFile(targetId);\n if (project.databaseId) haveDbId = true;\n if (project.apiKey) haveApiKey = true;\n if (project.apiSecret) haveApiSecret = true;\n }\n\n let home: Partial<OnyxConfig> = {};\n if (!(haveDbId && haveApiKey && haveApiSecret)) {\n home = await readHomeProfile(targetId);\n }\n\n const merged: Partial<OnyxConfig> = {\n baseUrl: DEFAULT_BASE_URL,\n ...dropUndefined<OnyxConfig>(home),\n ...dropUndefined<OnyxConfig>(project),\n ...dropUndefined<OnyxConfig>(cfgPath),\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\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 = [\n 'env',\n configPath ?? 'env ONYX_CONFIG_PATH',\n ...(isNode\n ? [\n './onyx-database-<databaseId>.json',\n './onyx-database.json',\n '~/.onyx/onyx-database-<databaseId>.json',\n '~/.onyx/onyx-database.json',\n '~/onyx-database.json',\n ]\n : []),\n 'explicit config',\n ];\n throw new OnyxConfigError(\n `Missing required config: ${missing.join(', ')}. Sources: ${sources.join(', ')}`,\n );\n }\n\n const resolved: ResolvedConfig = { baseUrl, databaseId, apiKey, apiSecret, fetch: fetchImpl };\n const source = {\n databaseId: input?.databaseId\n ? 'explicit config'\n : env.databaseId\n ? 'env'\n : cfgPath.databaseId\n ? 'env ONYX_CONFIG_PATH'\n : project.databaseId\n ? 'project file'\n : home.databaseId\n ? 'home profile'\n : 'unknown',\n apiKey: input?.apiKey\n ? 'explicit config'\n : env.apiKey\n ? 'env'\n : cfgPath.apiKey\n ? 'env ONYX_CONFIG_PATH'\n : project.apiKey\n ? 'project file'\n : home.apiKey\n ? 'home profile'\n : 'unknown',\n apiSecret: input?.apiSecret\n ? 'explicit config'\n : env.apiSecret\n ? 'env'\n : cfgPath.apiSecret\n ? 'env ONYX_CONFIG_PATH'\n : project.apiSecret\n ? 'project file'\n : home.apiSecret\n ? 'home profile'\n : 'unknown',\n };\n dbg('credential source:', JSON.stringify(source));\n dbg('resolved:', mask(resolved));\n return resolved;\n}\n\n// Redacts secrets for debug logging\nfunction mask<T extends object>(obj: T | undefined): T | undefined {\n if (!obj) return obj;\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: gen/emit.ts\nexport type OnyxAttributeType =\n | 'String'\n | 'Int'\n | 'Boolean'\n | 'Timestamp'\n | 'EmbeddedList'\n | 'EmbeddedObject';\n\nexport type OnyxAttribute = Readonly<{\n name: string;\n type: OnyxAttributeType;\n isNullable: boolean;\n}>;\n\nexport type OnyxTable = Readonly<{\n name: string;\n attributes: readonly OnyxAttribute[];\n}>;\n\nexport type OnyxIntrospection = Readonly<{\n tables: readonly OnyxTable[];\n}>;\n\nexport type OptionalStrategy = 'non-null' | 'nullable' | 'none';\n\nexport type EmitOptions = Readonly<{\n /** Exported schema mapping type name. */\n schemaTypeName?: string;\n /** How to represent Timestamp attributes. Default: 'date'. */\n timestampMode?: 'string' | 'date' | 'number';\n /** Prefix added to each generated model/interface name. Example: 'Onyx' -> OnyxVodItem */\n modelNamePrefix?: string;\n /**\n * Where to use the TypeScript optional property modifier `?`.\n * - 'non-null' (default): add `?` on non-nullable fields (isNullable === false)\n * - 'nullable' : add `?` on nullable fields (isNullable === true)\n * - 'none' : never add `?`\n */\n optionalStrategy?: OptionalStrategy;\n}>;\n\nconst DEFAULTS: Required<EmitOptions> = {\n schemaTypeName: 'OnyxSchema',\n timestampMode: 'date',\n modelNamePrefix: '',\n optionalStrategy: 'non-null',\n};\n\nfunction isValidIdentifier(name: string): boolean {\n return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name);\n}\n\nfunction toPascalCase(raw: string): string {\n const cleaned = String(raw).replace(/[^A-Za-z0-9]+/g, ' ');\n const pc = cleaned\n .trim()\n .split(/\\s+/)\n .filter(Boolean)\n .map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n .join('');\n return pc.length === 0 ? 'Table' : (/^[0-9]/.test(pc) ? `T${pc}` : pc);\n}\n\nfunction tsTypeFor(\n attrType: OnyxAttributeType,\n timestampMode: 'string' | 'date' | 'number',\n): string {\n switch (attrType) {\n case 'String':\n return 'string';\n case 'Int':\n return 'number';\n case 'Boolean':\n return 'boolean';\n case 'Timestamp':\n return timestampMode === 'date'\n ? 'Date'\n : timestampMode === 'number'\n ? 'number'\n : 'string';\n case 'EmbeddedList':\n return 'any[]';\n case 'EmbeddedObject':\n return 'any';\n default:\n return 'any';\n }\n}\n\nfunction propertyLine(\n attr: OnyxAttribute,\n timestampMode: 'string' | 'date' | 'number',\n optionalStrategy: OptionalStrategy,\n): string {\n const key = isValidIdentifier(attr.name) ? attr.name : JSON.stringify(attr.name);\n\n // Decide whether to mark the property as optional (with '?')\n const makeOptional =\n optionalStrategy === 'non-null'\n ? !attr.isNullable\n : optionalStrategy === 'nullable'\n ? attr.isNullable\n : false;\n\n const t = tsTypeFor(attr.type, timestampMode);\n const nullableUnion = attr.isNullable ? ' | null' : '';\n\n return ` ${key}${makeOptional ? '?' : ''}: ${t}${nullableUnion};`;\n}\n\nexport function emitTypes(schema: OnyxIntrospection, options?: EmitOptions): string {\n const opts = { ...DEFAULTS, ...(options ?? {}) };\n\n // Track used enum keys to avoid collisions\n const usedEnumKeys = new Set<string>();\n const makeEnumKey = (raw: string): string => {\n const base = toPascalCase(raw);\n let key = base;\n let i = 2;\n while (usedEnumKeys.has(key)) {\n key = `${base}_${i++}`;\n }\n usedEnumKeys.add(key);\n return key;\n };\n\n const lines: string[] = [];\n lines.push(`// AUTO-GENERATED BY onyx-gen. DO NOT EDIT.`);\n lines.push(`// Generated at ${new Date().toISOString()}`);\n lines.push('');\n\n // Per-table interfaces\n for (const t of schema.tables) {\n const typeName = `${opts.modelNamePrefix}${toPascalCase(t.name)}`;\n lines.push(`export interface ${typeName} {`);\n for (const a of t.attributes) {\n lines.push(propertyLine(a, opts.timestampMode, opts.optionalStrategy));\n }\n lines.push(' [key: string]: any;');\n lines.push('}');\n lines.push('');\n }\n\n // Schema mapping\n lines.push(`export type ${opts.schemaTypeName} = {`);\n for (const t of schema.tables) {\n const key = isValidIdentifier(t.name) ? t.name : JSON.stringify(t.name);\n const modelName = `${opts.modelNamePrefix}${toPascalCase(t.name)}`;\n lines.push(` ${key}: ${modelName};`);\n }\n lines.push('};');\n lines.push('');\n\n // Convenience alias so consumers can always `import { Schema }`\n if (opts.schemaTypeName !== 'Schema') {\n lines.push(`export type Schema = ${opts.schemaTypeName};`);\n }\n lines.push(`export const Schema = {} as ${opts.schemaTypeName};`);\n lines.push('');\n\n // Tables enum (for IDE suggestions & safer table refs)\n lines.push('export enum tables {');\n for (const t of schema.tables) {\n const enumKey = makeEnumKey(t.name); // safe TS identifier\n const enumVal = JSON.stringify(t.name); // preserve original table name\n lines.push(` ${enumKey} = ${enumVal},`);\n }\n lines.push('}');\n lines.push('');\n\n return lines.join('\\n');\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}\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\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 }\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 const isQuery =\n path.includes('/query/') && !/\\/query\\/(?:update|delete)\\//.test(path);\n const canRetry = method === 'GET' || isQuery;\n const maxAttempts = canRetry ? 3 : 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 await new Promise((r) => setTimeout(r, 100 * 2 ** attempt));\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 await new Promise((r) => setTimeout(r, 100 * 2 ** attempt));\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","// 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","// filename: src/errors/onyx-error.ts\nexport class OnyxError extends Error {\n readonly name = 'OnyxError';\n constructor(message: string) {\n super(message);\n }\n}\n","// filename: src/impl/onyx.ts\nimport { resolveConfig, type ResolvedConfig } from '../config/chain';\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 type {\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 { OnyxError } from '../errors/onyx-error';\nimport { OnyxHttpError } from '../errors/http-error';\n\nconst DEFAULT_CACHE_TTL = 5 * 60 * 1000; // 5 minutes\n\nlet cachedCfg: { promise: Promise<ResolvedConfig>; expires: number } | null = null;\n\nfunction 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\nfunction clearCacheConfig(): void {\n cachedCfg = null;\n}\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 SchemaValidationPayload = SchemaValidationResult & { schema?: SchemaRevisionPayload };\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 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(input: SchemaRevisionPayload, fallbackDatabaseId: string): SchemaRevision {\n const { meta, createdAt, publishedAt, revisionId, ...rest } = input;\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 ...rest,\n databaseId: input.databaseId ?? fallbackDatabaseId,\n meta: cleanedMeta,\n entities: input.entities ?? [],\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(config?: OnyxConfig) {\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 });\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, T = Schema[Table]>(\n table: Table,\n primaryKey: string,\n options?: { partition?: string; relationships?: string[] },\n ): Promise<T> {\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 return http.request<T>('DELETE', path);\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<SchemaRevisionPayload>('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<SchemaRevisionPayload[]>('GET', path);\n return Array.isArray(res) ? res.map((entry) => normalizeSchemaRevision(entry, databaseId)) : [];\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 = { ...schema, databaseId: schema.databaseId ?? databaseId };\n const res = await http.request<SchemaRevisionPayload>('PUT', path, serializeDates(body));\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 = { ...schema, databaseId: schema.databaseId ?? databaseId };\n const res = await http.request<SchemaValidationPayload>('POST', path, serializeDates(body));\n const normalizedSchema = res.schema ? normalizeSchemaRevision(res.schema, databaseId) : 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<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/delete/${encodeURIComponent(\n table,\n )}${params.toString() ? `?${params.toString()}` : ''}`;\n return http.request('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 toSelectQuery(): SelectQuery {\n return {\n type: 'SelectQuery',\n fields: this.fields,\n conditions: this.conditions,\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 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 if (!this.conditions) throw new OnyxError('firstOrNull() requires a where() clause.');\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<unknown> {\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: UpdateQuery = {\n type: 'UpdateQuery',\n conditions: this.conditions,\n updates: this.updates ?? {},\n sort: this.sort,\n limit: this.limitValue,\n partition: this.partitionValue ?? null,\n };\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<Schema[Table]> {\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 const onyx: OnyxFacade = {\n init<Schema = Record<string, unknown>>(config?: OnyxConfig): IOnyxDatabase<Schema> {\n return new OnyxDatabaseImpl<Schema>(config);\n },\n clearCacheConfig,\n};\n","// filename: gen/generate.ts\nimport process from 'node:process';\nimport { resolveConfig, type ResolvedConfig } from '../src/config/chain';\nimport { emitTypes, type OnyxIntrospection, type EmitOptions, type OptionalStrategy } from './emit';\nimport { onyx } from '../src';\nimport type { SchemaEntity } from '../src/types/public';\nimport type { SchemaEntity } from '../src/types/public';\n\nexport interface GenerateOptions {\n /** Where to read schema from. */\n source?: 'auto' | 'api' | 'file';\n /** When source=file, filesystem path to schema JSON. */\n schemaPath?: string;\n\n /**\n * Output base filename (without extension). Default: \"onyx.schema\".\n * Used only when writing into a directory (see `typesOutDir`).\n */\n outBaseName?: string;\n\n /**\n * Types output directory (when writing into a directory).\n * Back-compat alias: `outDir`.\n * Note: if no output is provided, default output is \"./onyx/types.ts\".\n */\n typesOutDir?: string | string[];\n\n /**\n * Write the generated types to THIS EXACT FILE (absolute or relative path).\n * If provided and points to a \".ts\" file, this takes precedence over `typesOutDir`.\n * Example: \"./onyx/types.ts\"\n * Note: if no output is provided, default output is \"./onyx/types.ts\".\n */\n typesOutFile?: string | string[];\n\n /**\n * JSON output directory (only used when `emitJson: true`).\n * Default: same as `typesOutDir` or the directory of `typesOutFile` (if set).\n */\n jsonOutDir?: string;\n\n /**\n * Emit a copy of the schema JSON alongside the TS file.\n * Default: false (do not copy schema).\n */\n emitJson?: boolean;\n\n /** Overwrite existing files. Default: true. */\n overwrite?: boolean;\n\n /** Timestamp representation for TS types. Default: \"date\". */\n timestampMode?: EmitOptions['timestampMode'];\n\n /** Exported schema type name. Default: \"OnyxSchema\". */\n schemaTypeName?: string;\n\n /** Prefix for model/interface names. Example: \"Onyx\" -> OnyxVodItem. Default: \"\" */\n prefix?: string;\n\n /**\n * Optional property strategy. Default: \"non-null\" (add `?` to non-null fields).\n * Other values: \"nullable\", \"none\".\n */\n optional?: OptionalStrategy;\n\n /** Optional candidate API paths (overrides defaults). Must start with \"/\". */\n apiPaths?: string[];\n\n /** Quiet logs. Default: false. */\n quiet?: boolean;\n\n /** @deprecated Legacy single outDir; still accepted to avoid breaking scripts. */\n outDir?: string | string[];\n}\n\nconst DEFAULT_SCHEMA_PATH = './onyx.schema.json';\nconst DEFAULT_TYPES_OUT = './onyx/types.ts';\n\nconst DEFAULTS: Required<\n Omit<\n GenerateOptions,\n | 'schemaPath'\n | 'apiPaths'\n | 'typesOutDir'\n | 'jsonOutDir'\n | 'outDir'\n | 'prefix'\n | 'typesOutFile'\n >\n> = {\n source: 'file',\n outBaseName: 'onyx.schema',\n emitJson: false,\n overwrite: true,\n timestampMode: 'date',\n schemaTypeName: 'OnyxSchema',\n optional: 'non-null',\n quiet: false,\n};\n\nfunction toArray(val?: string | string[]): string[] {\n if (!val) return [];\n return Array.isArray(val) ? val : [val];\n}\n\nfunction isTypesFilePath(p?: string): boolean {\n if (!p) return false;\n return (\n p.endsWith('.ts') ||\n p.endsWith('.mts') ||\n p.endsWith('.cts') ||\n p.endsWith('.d.ts') ||\n p.endsWith('.d.mts') ||\n p.endsWith('.d.cts')\n );\n}\n\nasync function readFileJson<T = unknown>(path: string): Promise<T> {\n const fs = await import('node:fs/promises');\n const txt = await fs.readFile(path, 'utf8');\n return JSON.parse(txt) as T;\n}\n\nasync function ensureDir(dir: string): Promise<void> {\n const fs = await import('node:fs/promises');\n await fs.mkdir(dir, { recursive: true });\n}\n\nasync function writeFile(path: string, data: string, overwrite: boolean): Promise<void> {\n const fs = await import('node:fs/promises');\n if (!overwrite) {\n try {\n await fs.access(path);\n throw new Error(`Refusing to overwrite existing file: ${path}`);\n } catch {\n /* not exists -> ok */\n }\n }\n await fs.writeFile(path, data, 'utf8');\n}\n\nfunction isIntrospection(x: unknown): x is OnyxIntrospection {\n return !!x && typeof x === 'object' && Array.isArray((x as { tables?: unknown }).tables);\n}\n\nfunction normalizeAttributeType(\n raw: unknown,\n): OnyxIntrospection['tables'][number]['attributes'][number]['type'] {\n const t = typeof raw === 'string' ? raw : '';\n switch (t) {\n case 'String':\n return 'String';\n case 'Boolean':\n return 'Boolean';\n case 'Timestamp':\n return 'Timestamp';\n case 'EmbeddedList':\n return 'EmbeddedList';\n case 'EmbeddedObject':\n return 'EmbeddedObject';\n case 'Int':\n case 'Byte':\n case 'Short':\n case 'Float':\n case 'Double':\n case 'Long':\n return 'Int';\n default:\n return 'EmbeddedObject';\n }\n}\n\nfunction toOnyxIntrospectionFromEntities(entities: SchemaEntity[]): OnyxIntrospection {\n return {\n tables: entities.map((entity) => ({\n name: entity.name,\n attributes: (entity.attributes ?? []).map((attr) => ({\n name: attr.name,\n type: normalizeAttributeType(attr.type),\n isNullable: Boolean(attr.isNullable),\n })),\n })),\n };\n}\n\nfunction normalizeIntrospection(raw: unknown): OnyxIntrospection {\n if (isIntrospection(raw)) return raw;\n const entities = (raw as { entities?: unknown }).entities;\n if (Array.isArray(entities)) {\n return toOnyxIntrospectionFromEntities(entities as SchemaEntity[]);\n }\n throw new Error('Invalid schema: missing \"tables\" array.');\n}\n\nasync function fetchSchemaFromApi(config: ResolvedConfig): Promise<OnyxIntrospection> {\n const db = onyx.init({\n baseUrl: config.baseUrl,\n databaseId: config.databaseId,\n apiKey: config.apiKey,\n apiSecret: config.apiSecret,\n fetch: config.fetch,\n });\n const schema = await db.getSchema();\n return normalizeIntrospection(schema);\n}\n\n/**\n * Programmatic codegen entry.\n * Returns the absolute paths of the generated files.\n */\nexport async function generateTypes(\n options?: GenerateOptions,\n): Promise<{\n typesPath: string;\n jsonPath?: string;\n typesPaths: string[];\n jsonPaths?: string[];\n}> {\n const path = await import('node:path');\n const opts = { ...DEFAULTS, ...(options ?? {}) };\n\n const resolvedSchemaPath =\n opts.schemaPath ?? (opts.source === 'file' ? DEFAULT_SCHEMA_PATH : undefined);\n\n let schemaInput: unknown | null = null;\n\n if (opts.source === 'file' || (opts.source === 'auto' && resolvedSchemaPath)) {\n if (!resolvedSchemaPath) throw new Error('schemaPath is required when source=\"file\"');\n if (!opts.quiet)\n process.stderr.write(`[onyx-gen] reading schema from file: ${resolvedSchemaPath}\\n`);\n schemaInput = await readFileJson<unknown>(resolvedSchemaPath);\n }\n\n if (!schemaInput) {\n if (opts.source === 'file') throw new Error('Failed to read schema from file');\n const cfg = await resolveConfig({});\n if (!cfg.databaseId) {\n throw new Error('Missing databaseId. Set ONYX_DATABASE_ID or pass to onyx.init().');\n }\n if (!opts.quiet)\n process.stderr.write(`[onyx-gen] fetching schema from API for db ${cfg.databaseId}\\n`);\n schemaInput = await fetchSchemaFromApi(cfg);\n }\n\n const schema = normalizeIntrospection(schemaInput);\n\n const outTargets = [\n ...toArray(opts.typesOutFile),\n ...toArray(opts.typesOutDir),\n ...toArray(opts.outDir),\n ]\n .map((p) => p.trim())\n .filter(Boolean);\n\n if (outTargets.length === 0) {\n outTargets.push(DEFAULT_TYPES_OUT);\n }\n\n type OutputTarget = { typesPath: string; typesDirAbs: string; jsonBaseName: string };\n const outputs: OutputTarget[] = outTargets.map((target) => {\n const outIsFile = isTypesFilePath(target);\n const typesPath = outIsFile\n ? path.resolve(process.cwd(), target)\n : path.join(path.resolve(process.cwd(), target), `${opts.outBaseName}.ts`);\n const typesDirAbs = outIsFile ? path.dirname(typesPath) : path.resolve(process.cwd(), target);\n const jsonBaseName = outIsFile ? path.basename(typesPath, path.extname(typesPath)) : opts.outBaseName;\n return { typesPath, typesDirAbs, jsonBaseName };\n });\n\n const types = emitTypes(schema, {\n schemaTypeName: opts.schemaTypeName,\n timestampMode: opts.timestampMode,\n modelNamePrefix: opts.prefix ?? '',\n optionalStrategy: opts.optional,\n });\n const typesPaths: string[] = [];\n for (const out of outputs) {\n await ensureDir(out.typesDirAbs);\n await writeFile(out.typesPath, `${types}\\n`, opts.overwrite);\n typesPaths.push(out.typesPath);\n }\n\n let jsonPaths: string[] | undefined;\n if (opts.emitJson) {\n const jsonPretty = JSON.stringify(schema, null, 2);\n jsonPaths = [];\n for (const out of outputs) {\n const jsonOutDirAbs = path.resolve(process.cwd(), opts.jsonOutDir ?? out.typesDirAbs);\n await ensureDir(jsonOutDirAbs);\n const jsonPath = path.join(jsonOutDirAbs, `${out.jsonBaseName}.json`);\n await writeFile(jsonPath, `${jsonPretty}\\n`, opts.overwrite);\n jsonPaths.push(jsonPath);\n }\n }\n\n if (!opts.quiet) {\n for (const p of typesPaths) {\n process.stderr.write(`[onyx-gen] wrote ${p}\\n`);\n }\n if (jsonPaths) {\n for (const jp of jsonPaths) {\n process.stderr.write(`[onyx-gen] wrote ${jp}\\n`);\n }\n }\n }\n\n return { typesPath: typesPaths[0], jsonPath: jsonPaths?.[0], typesPaths, jsonPaths };\n}\n","#!/usr/bin/env node\n// filename: gen/cli/generate.ts\nimport process from 'node:process';\nimport { generateTypes, type GenerateOptions } from '../generate';\n\nfunction isTypesFilePath(p?: string): boolean {\n if (!p) return false;\n return (\n p.endsWith('.ts') ||\n p.endsWith('.mts') ||\n p.endsWith('.cts') ||\n p.endsWith('.d.ts') ||\n p.endsWith('.d.mts') ||\n p.endsWith('.d.cts')\n );\n}\n\ntype OutCollector = {\n typesOutFile?: string | string[];\n typesOutDir?: string | string[];\n};\n\nfunction appendVal(current: string | string[] | undefined, val: string): string | string[] {\n if (!current) return val;\n return Array.isArray(current) ? [...current, val] : [current, val];\n}\n\nfunction addOut(\n opts: OutCollector,\n raw: string | undefined,\n forceFile = false,\n): OutCollector {\n if (!raw) throw new Error('Missing value for output flag');\n const parts = raw.split(',').map((p) => p.trim()).filter(Boolean);\n for (const val of parts) {\n if (forceFile || isTypesFilePath(val)) {\n opts.typesOutFile = appendVal(opts.typesOutFile, val);\n } else {\n opts.typesOutDir = appendVal(opts.typesOutDir, val);\n }\n }\n return opts;\n}\n\nfunction parseArgs(argv: string[]): GenerateOptions {\n const opts: GenerateOptions = {};\n const next = (i: number) => argv[i + 1];\n\n for (let i = 2; i < argv.length; i++) {\n const a = argv[i];\n switch (a) {\n case '--out':\n case '--outDir': { // legacy alias\n addOut(opts, next(i));\n i++;\n break;\n }\n case '--types-out':\n case '--typesOut': {\n addOut(opts, next(i));\n i++;\n break;\n }\n case '--types-file':\n case '--typesFile': {\n addOut(opts, next(i), true);\n i++;\n break;\n }\n case '--json-out':\n case '--jsonOut':\n opts.jsonOutDir = next(i);\n i++;\n break;\n case '--base':\n case '--baseName':\n opts.outBaseName = next(i);\n i++;\n break;\n case '--schema':\n opts.schemaPath = next(i);\n i++;\n break;\n case '--source': {\n const v = (next(i) ?? '').toLowerCase();\n if (v === 'api' || v === 'file' || v === 'auto') opts.source = v as GenerateOptions['source'];\n else throw new Error(`Invalid --source: ${v}`);\n i++;\n break;\n }\n case '--timestamps': {\n const v = (next(i) ?? '').toLowerCase();\n if (v === 'string' || v === 'date' || v === 'number') opts.timestampMode = v as GenerateOptions['timestampMode'];\n else throw new Error(`Invalid --timestamps: ${v}`);\n i++;\n break;\n }\n case '--name':\n case '--schemaTypeName':\n opts.schemaTypeName = next(i);\n i++;\n break;\n case '--prefix':\n opts.prefix = next(i);\n i++;\n break;\n case '--optional': {\n const v = (next(i) ?? '').toLowerCase();\n if (v === 'non-null' || v === 'nonnull' || v === 'nonull') {\n opts.optional = 'non-null';\n } else if (v === 'nullable') {\n opts.optional = 'nullable';\n } else if (v === 'none') {\n opts.optional = 'none';\n } else {\n throw new Error(`Invalid --optional: ${v} (use non-null|nullable|none)`);\n }\n i++;\n break;\n }\n case '--emit-json':\n opts.emitJson = true;\n break;\n case '--no-emit-json':\n opts.emitJson = false;\n break;\n case '--api-path': {\n const v = next(i);\n if (!v || !v.startsWith('/')) throw new Error(`--api-path must start with \"/\": ${v}`);\n if (!opts.apiPaths) opts.apiPaths = [];\n opts.apiPaths.push(v);\n i++;\n break;\n }\n case '--overwrite':\n opts.overwrite = true;\n break;\n case '--no-overwrite':\n opts.overwrite = false;\n break;\n case '-q':\n case '--quiet':\n opts.quiet = true;\n break;\n case '-h':\n case '--help':\n printHelp();\n process.exit(0);\n break;\n default:\n if (a.startsWith('-')) throw new Error(`Unknown option: ${a}`);\n break;\n }\n }\n return opts;\n}\n\nfunction printHelp(): void {\n process.stdout.write(`onyx-gen — Generate Onyx schema TypeScript types\n\nUsage:\n onyx-gen [options]\n\nOutput selection:\n --out <path[,path2,...]> If a value ends with \".ts\", writes exactly to that file.\n Otherwise treats it as a directory. Comma-separate or repeat to\n write multiple outputs. Default: ./onyx/types.ts\n --types-out <dir|file>[,more] Same as --out (file-or-dir).\n --types-file <file.ts>[,more] Explicit file output(s).\n --base, --baseName <name> Base filename (without ext) when writing to a directory (default: onyx.schema)\n --json-out <dir> JSON output directory (used only with --emit-json)\n\nSource selection:\n --source <auto|api|file> Where to get schema (default: file)\n --schema <path> Path to schema JSON when --source=file (default: ./onyx.schema.json)\n\nType emission:\n --timestamps <string|date|number> Timestamp representation in types (default: date)\n --name, --schemaTypeName <T> Exported schema type name (default: OnyxSchema)\n --prefix <Prefix> Prefix to prepend to generated model names (default: none)\n --optional <non-null|nullable|none>\n Where to add '?' optional props (default: non-null)\n\nOther:\n --emit-json / --no-emit-json Emit schema JSON copy (default: no-emit-json)\n --api-path <path> Candidate API path to fetch schema; can be repeated\n --overwrite / --no-overwrite Overwrite existing files (default: overwrite)\n -q, --quiet Suppress logs\n -h, --help Show this help\n\nNotes:\n • Running with no flags defaults to: --source file --schema ./onyx.schema.json --out ./onyx/types.ts\n • Env/config for --source=api uses the same resolver as onyx.init()\n (env vars, ./onyx-database.json, ~/.onyx/onyx-database-<id>.json, etc.).\n`);\n}\n\n(async () => {\n try {\n const opts = parseArgs(process.argv);\n await generateTypes(opts);\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n process.stderr.write(`onyx-gen: ${msg}\\n`);\n process.exit(1);\n }\n})();\n"]}
|