nomnomtokens 0.1.0 → 0.2.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 +10 -9
- package/dist/index.js +283 -13
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/web/nitro.json +1 -1
- package/web/public/_nuxt/{CC85Q8DD.js → 075nz0Lp.js} +1 -1
- package/web/public/_nuxt/{CoCv6Hmx.js → BGnU88BC.js} +1 -1
- package/web/public/_nuxt/{DvKiMgoh.js → BnfUOzcc.js} +1 -1
- package/web/public/_nuxt/{Dw4si2jw.js → CiWIPYVi.js} +1 -1
- package/web/public/_nuxt/{Cay8LZ9u.js → CqSNCP5f.js} +1 -1
- package/web/public/_nuxt/{CNp1wm92.js → Cu3rIkF2.js} +1 -1
- package/web/public/_nuxt/Cutk9Ewh.js +1 -0
- package/web/public/_nuxt/DCVp7cZB.js +96 -0
- package/web/public/_nuxt/builds/latest.json +1 -1
- package/web/public/_nuxt/builds/meta/63ad5f37-5b40-456d-8f53-69ff57b4903c.json +1 -0
- package/web/public/_nuxt/entry.DTNjKx6y.css +2 -0
- package/web/public/_nuxt/{C-xeWIVA.js → fjfS4ymU.js} +1 -1
- package/web/public/_nuxt/limits.DDC9tNkw.css +1 -0
- package/web/public/_nuxt/{Cy-tzONg.js → moFy8lON.js} +2 -2
- package/web/server/chunks/_/filters.mjs +1 -1
- package/web/server/chunks/build/{Sparkline-DDDyGBE4.mjs → Sparkline-Cxifh2uK.mjs} +2 -2
- package/web/server/chunks/build/{Sparkline-DDDyGBE4.mjs.map → Sparkline-Cxifh2uK.mjs.map} +1 -1
- package/web/server/chunks/build/{_id_-HbVNBXK4.mjs → _id_-BKmH0aHH.mjs} +3 -3
- package/web/server/chunks/build/{_id_-HbVNBXK4.mjs.map → _id_-BKmH0aHH.mjs.map} +1 -1
- package/web/server/chunks/build/{limits-B44okAo1.mjs → limits-CnRLojCD.mjs} +25 -20
- package/web/server/chunks/build/limits-CnRLojCD.mjs.map +1 -0
- package/web/server/chunks/build/limits-styles.CKdzkgZ8.mjs +8 -0
- package/web/server/chunks/build/limits-styles.CKdzkgZ8.mjs.map +1 -0
- package/web/server/chunks/build/nuxt-link-mYiLFsJs.mjs +1 -1
- package/web/server/chunks/build/{pages-CffxtNMi.mjs → pages-DlIWqsLr.mjs} +3 -3
- package/web/server/chunks/build/{pages-CffxtNMi.mjs.map → pages-DlIWqsLr.mjs.map} +1 -1
- package/web/server/chunks/build/{providers-CUjXlgDS.mjs → providers-DOMeWSDZ.mjs} +2 -2
- package/web/server/chunks/build/{providers-CUjXlgDS.mjs.map → providers-DOMeWSDZ.mjs.map} +1 -1
- package/web/server/chunks/build/{scopes-CQokoqM9.mjs → scopes-Bagepvnf.mjs} +15 -9
- package/web/server/chunks/build/scopes-Bagepvnf.mjs.map +1 -0
- package/web/server/chunks/build/{sessions-BvRUAKPl.mjs → sessions-peyhKv2_.mjs} +2 -2
- package/web/server/chunks/build/{sessions-BvRUAKPl.mjs.map → sessions-peyhKv2_.mjs.map} +1 -1
- package/web/server/chunks/build/{timeline-BbSoi8xO.mjs → timeline-P2RrZyBs.mjs} +2 -2
- package/web/server/chunks/build/{timeline-BbSoi8xO.mjs.map → timeline-P2RrZyBs.mjs.map} +1 -1
- package/web/server/chunks/build/{useFormat-D8in50HT.mjs → useFormat-BfI0x0lv.mjs} +6 -3
- package/web/server/chunks/build/{useFormat-D8in50HT.mjs.map → useFormat-BfI0x0lv.mjs.map} +1 -1
- package/web/server/chunks/nitro/nitro.mjs +430 -152
- package/web/server/chunks/nitro/nitro.mjs.map +1 -1
- package/web/server/chunks/routes/api/stats/limits.get.mjs +4 -3
- package/web/server/chunks/routes/api/stats/limits.get.mjs.map +1 -1
- package/web/server/chunks/routes/api/stats/providers.get.mjs +1 -1
- package/web/server/chunks/routes/api/stats/scopes.get.mjs +1 -1
- package/web/server/chunks/routes/api/stats/series.get.mjs +1 -1
- package/web/server/chunks/routes/api/stats/session/_id_.get.mjs +1 -1
- package/web/server/chunks/routes/api/stats/sessions.get.mjs +1 -1
- package/web/server/chunks/routes/api/stats/summary.get.mjs +1 -1
- package/web/server/chunks/routes/renderer.mjs +2 -2
- package/web/server/chunks/virtual/entry.mjs +8 -8
- package/web/server/chunks/virtual/precomputed.mjs +1 -1
- package/web/server/chunks/virtual/precomputed.mjs.map +1 -1
- package/web/server/chunks/virtual/styles.mjs +3 -1
- package/web/server/chunks/virtual/styles.mjs.map +1 -1
- package/web/server/index.mjs +1 -1
- package/web/public/_nuxt/CYcD169V.js +0 -1
- package/web/public/_nuxt/TnCE9lfg.js +0 -86
- package/web/public/_nuxt/builds/meta/57c20bc9-f17f-4623-94bd-ea8746650367.json +0 -1
- package/web/public/_nuxt/entry.CwLI8Fh7.css +0 -2
- package/web/server/chunks/build/limits-B44okAo1.mjs.map +0 -1
- package/web/server/chunks/build/scopes-CQokoqM9.mjs.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/core/src/types.ts","../packages/core/src/pricing.ts","../packages/core/src/hash.ts","../packages/core/src/aggregate.ts","../packages/core/src/forecast.ts","../packages/adapters/src/claude-code/jsonl.ts","../packages/adapters/src/claude-code/statusline.ts","../packages/adapters/src/claude-code/index.ts","../packages/adapters/src/cursor/paths.ts","../packages/adapters/src/cursor/db.ts","../packages/adapters/src/cursor/parse.ts","../packages/adapters/src/cursor/index.ts","../packages/adapters/src/index.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/entity.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/logger.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/table.utils.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/table.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/column.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/column-builder.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/pg-core/columns/enum.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/subquery.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/tracing.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/view-common.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sql/sql.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/utils.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/pg-core/table.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/pg-core/primary-keys.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sql/expressions/conditions.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sql/expressions/select.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/relations.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/alias.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/selection-proxy.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/query-promise.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/foreign-keys.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/unique-constraint.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/columns/common.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/columns/blob.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/columns/custom.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/columns/integer.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/columns/numeric.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/columns/real.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/columns/text.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/columns/all.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/table.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/indexes.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/primary-keys.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/utils.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/query-builders/delete.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/casing.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/errors.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/view-base.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/dialect.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/query-builders/query-builder.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/query-builders/select.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/query-builders/query-builder.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/query-builders/insert.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/query-builders/update.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/query-builders/count.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/query-builders/query.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/query-builders/raw.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/db.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/cache/core/cache.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/session.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/better-sqlite3/session.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/better-sqlite3/driver.ts","../packages/db/src/schema/sqlite.ts","../packages/db/src/client.ts","../packages/db/src/repo.ts","../packages/db/src/queries.ts","../packages/cli/src/format.ts","../packages/cli/src/commands/doctor.ts","../packages/cli/src/commands/init.ts","../packages/cli/src/commands/scan.ts","../packages/cli/src/commands/serve.ts","../packages/cli/src/commands/statusline.ts","../packages/cli/src/index.ts"],"names":["homedir","join","existsSync","Database","num","scopeHash","events","stat","sql","param","placeholder","name","SQL","result","index","c","relations","primaryKey","ForeignKeyBuilder","ForeignKey","uniqueKeyName","ref","actions","InlineForeignKeys","PrimaryKeyBuilder","PrimaryKey","table","select","joinOn","field","cache","instance","drizzle","batch","readFileSync","exists","text","mkdirSync","dirname","resolve","limits","fileURLToPath"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * The two record types the core knows about. Everything else is an adapter's problem.\n *\n * Two hard rules, enforced by the types themselves:\n * 1. no free-form string fields carrying user content — no prompts, no code, no paths;\n * 2. `meta` holds numbers only, so no text can leak out through an adapter.\n */\n\n/** A unit of spend. Not tied to AI: `kind` says what exactly was consumed. */\nexport interface SpendEvent {\n /** stable deduplication key: `${provider}:${requestId}:${messageId}`, hash of a CSV row, ... */\n id: string\n /** unix ms */\n ts: number\n /** which adapter produced the event: 'claude-code' | 'codex' | 'csv' | ... */\n provider: string\n /** what we're measuring: 'tokens' | 'requests' | 'minutes' | 'currency' | ... */\n kind: string\n sessionId: string | null\n /** sha256(project path).slice(0,16); the human-readable alias lives only in the local DB */\n scopeHash: string\n /** free-form detail: model, runner type, SKU — whatever is meaningful for the provider */\n unitLabel: string | null\n /** quantities in units of `kind`; for tokens — unpacked by type */\n qty: Record<string, number>\n costUsd: number | null\n /** numbers only, never strings */\n meta: Record<string, number>\n}\n\n/** A constraint snapshot (subscription limits, CI quotas, ...) */\nexport interface LimitSnapshot {\n ts: number\n provider: string\n /** '5h' | '7d' | 'month' | ... */\n window: string\n usedPct: number\n resetsAt: number | null\n}\n\nexport type IngestRecord =\n | { type: 'event', event: SpendEvent }\n | { type: 'limit', limit: LimitSnapshot }\n | { type: 'scope', scopeHash: string, label: string, provider: string }\n\n/** Where an incremental scan left off, per source file. */\nexport interface ScanCursor {\n sourcePath: string\n mtime: number\n size: number\n offset: number\n}\n\nexport interface ScanState {\n get(sourcePath: string): ScanCursor | undefined\n set(cursor: ScanCursor): void\n}\n\nexport interface Adapter {\n name: string\n /** is there anything to read on this machine (detection by presence of dirs/config) */\n detect(): Promise<boolean>\n /** passive collection: walk the sources from the last known position */\n scan(state: ScanState): AsyncIterable<IngestRecord>\n /** active collection: subscribe to changes (watcher, http receiver) */\n watch?(emit: (r: IngestRecord) => void): () => void\n}\n\n/** Token quantity keys used by every token-kind provider. */\nexport interface TokenQty extends Record<string, number> {\n in: number\n out: number\n cacheCreate: number\n cacheCreate1h: number\n cacheRead: number\n}\n\nexport const EMPTY_TOKEN_QTY: TokenQty = {\n in: 0,\n out: 0,\n cacheCreate: 0,\n cacheCreate1h: 0,\n cacheRead: 0,\n}\n\n/** Total billable tokens for a token-kind event. */\nexport function totalTokens(qty: Record<string, number>): number {\n return (\n (qty.in ?? 0) + (qty.out ?? 0) + (qty.cacheCreate ?? 0)\n + (qty.cacheCreate1h ?? 0) + (qty.cacheRead ?? 0)\n )\n}\n","/**\n * Model price table.\n *\n * Prices are USD per million tokens, as published on platform.claude.com.\n * Modern Claude Code JSONL carries no `costUSD` field, so every cost figure in\n * nomnomtokens is computed here — which makes this table load-bearing and\n * therefore something we must be able to refresh without shipping a release.\n *\n * Strategy (see docs/architecture.md): this file is the bundled fallback. When\n * online, `nnt scan` can refresh `~/.nomnomtokens/prices.json` and that file\n * wins. Stale prices are a visible risk in the README, not a silent one.\n */\n\nexport interface ModelPrice {\n /** USD per 1M input tokens */\n input: number\n /** USD per 1M output tokens */\n output: number\n /**\n * Cache multipliers relative to `input`. The API charges 1.25x for a 5-minute\n * cache write, 2x for a 1-hour write, and 0.1x for a cache read.\n */\n cacheWrite5m?: number\n cacheWrite1h?: number\n cacheRead?: number\n}\n\nexport const DEFAULT_CACHE_MULTIPLIERS = {\n write5m: 1.25,\n write1h: 2,\n read: 0.1,\n} as const\n\n/** Keyed by canonical model id. Aliases are resolved in `resolveModelKey`. */\nexport const PRICES: Record<string, ModelPrice> = {\n 'claude-fable-5': { input: 10, output: 50 },\n 'claude-mythos-5': { input: 10, output: 50 },\n 'claude-opus-5': { input: 5, output: 25 },\n 'claude-opus-4-8': { input: 5, output: 25 },\n 'claude-opus-4-7': { input: 5, output: 25 },\n 'claude-opus-4-6': { input: 5, output: 25 },\n 'claude-opus-4-5': { input: 5, output: 25 },\n 'claude-opus-4-1': { input: 15, output: 75 },\n 'claude-opus-4-0': { input: 15, output: 75 },\n 'claude-sonnet-5': { input: 3, output: 15 },\n 'claude-sonnet-4-6': { input: 3, output: 15 },\n 'claude-sonnet-4-5': { input: 3, output: 15 },\n 'claude-sonnet-4-0': { input: 3, output: 15 },\n 'claude-haiku-4-5': { input: 1, output: 5 },\n 'claude-3-5-haiku': { input: 0.8, output: 4 },\n 'claude-3-haiku': { input: 0.25, output: 1.25 },\n\n // Cursor-routed third-party ids (public list prices; Composer itself is unpriced).\n 'gpt-5.2': { input: 1.75, output: 14 },\n 'gpt-5-2': { input: 1.75, output: 14 },\n 'gpt-5.2-codex': { input: 1.75, output: 14 },\n 'gpt-5-2-codex': { input: 1.75, output: 14 },\n 'gpt-5': { input: 1.25, output: 10 },\n 'gpt-4.1': { input: 2, output: 8 },\n 'gpt-4-1': { input: 2, output: 8 },\n 'gemini-3-flash': { input: 0.5, output: 3 },\n 'gemini-2.5-pro': { input: 1.25, output: 10 },\n 'gemini-2-5-pro': { input: 1.25, output: 10 },\n 'grok-4.5': { input: 3, output: 15 },\n 'grok-4-5': { input: 3, output: 15 },\n 'grok-code-fast-1': { input: 0.2, output: 1.5 },\n}\n\n/**\n * Claude Code writes ids like `claude-haiku-4-5-20251001` or `<synthetic>`.\n * Strip trailing date snapshots and fast-mode suffixes, then match longest-prefix.\n */\n/** `<synthetic>` and friends: client-generated messages that never hit the API. */\nexport function isSynthetic(model: string | null | undefined): boolean {\n return typeof model === 'string' && model.trim().startsWith('<')\n}\n\n/**\n * Cursor writes Anthropic ids as `claude-4.5-sonnet-thinking` rather than\n * `claude-sonnet-4-5`. Flip the family/version order when we recognise the\n * pattern so the existing Claude price rows still match.\n */\nfunction normalizeCursorClaudeId(id: string): string {\n const m = id.match(/^claude-(\\d+(?:-\\d+)*)-(sonnet|opus|haiku)(?:-.*)?$/)\n if (!m) return id\n return `claude-${m[2]}-${m[1]}`\n}\n\nexport function resolveModelKey(model: string | null | undefined): string | null {\n if (!model) return null\n const id = model.trim().toLowerCase()\n if (!id || isSynthetic(id)) return null\n\n // Cursor's `default` / proprietary Composer models have no public token price.\n // Also collapse repeated Auto placeholders: `default,default,default,default`.\n if (\n id === 'default'\n || id.startsWith('composer-')\n || id.split(',').every(p => p.trim() === 'default')\n ) {\n return null\n }\n\n const normalized = normalizeCursorClaudeId(\n id\n .replace(/^anthropic\\./, '')\n .replace(/\\./g, '-')\n .replace(/-thinking$/, '')\n .replace(/-high-thinking$/, '')\n .replace(/-high$/, '')\n .replace(/-\\d{8}$/, '')\n .replace(/-fast$/, '')\n .replace(/\\[1m\\]$/, ''),\n )\n\n if (PRICES[normalized]) return normalized\n\n // longest-prefix match handles ids we haven't catalogued yet but that share a family\n let best: string | null = null\n for (const key of Object.keys(PRICES)) {\n if (normalized.startsWith(key) && (best === null || key.length > best.length)) best = key\n }\n return best\n}\n\nexport interface PriceTable {\n get(model: string | null | undefined): ModelPrice | null\n}\n\nexport function makePriceTable(overrides: Record<string, ModelPrice> = {}): PriceTable {\n const table = { ...PRICES, ...overrides }\n return {\n get(model) {\n const key = resolveModelKey(model)\n if (!key) return null\n return table[key] ?? null\n },\n }\n}\n\nexport const defaultPrices = makePriceTable()\n\n/**\n * Cost in USD for one token-kind event. Returns null for models we cannot\n * price — showing \"unknown\" beats quietly reporting $0.\n */\nexport function costOf(\n model: string | null | undefined,\n qty: Record<string, number>,\n prices: PriceTable = defaultPrices,\n): number | null {\n // `<synthetic>` marks a message the client generated locally — an interrupt\n // notice, an error placeholder. No API call happened, so it costs exactly\n // zero. That is different from \"we don't know the price\", and conflating the\n // two makes `nnt doctor` report a problem that isn't one.\n if (isSynthetic(model)) return 0\n\n const p = prices.get(model)\n if (!p) return null\n\n const m = DEFAULT_CACHE_MULTIPLIERS\n const perToken = p.input / 1_000_000\n const outPerToken = p.output / 1_000_000\n\n return (\n (qty.in ?? 0) * perToken\n + (qty.out ?? 0) * outPerToken\n + (qty.cacheCreate ?? 0) * perToken * (p.cacheWrite5m ?? m.write5m)\n + (qty.cacheCreate1h ?? 0) * perToken * (p.cacheWrite1h ?? m.write1h)\n + (qty.cacheRead ?? 0) * perToken * (p.cacheRead ?? m.read)\n )\n}\n","/**\n * Scope hashing.\n *\n * A \"scope\" is whatever the provider considers a project. We never store the\n * path in an event — only sha256(path).slice(0,16). The readable label lives in\n * the local `scopes` table and never leaves the machine (see docs/privacy.md).\n *\n * Uses Web Crypto so this module stays isomorphic; results are memoised because\n * a scan hashes the same handful of project paths millions of times.\n */\n\nconst cache = new Map<string, string>()\n\nexport async function scopeHash(input: string): Promise<string> {\n const cached = cache.get(input)\n if (cached) return cached\n\n const bytes = new TextEncoder().encode(input)\n const digest = await globalThis.crypto.subtle.digest('SHA-256', bytes)\n const hex = Array.from(new Uint8Array(digest))\n .map(b => b.toString(16).padStart(2, '0'))\n .join('')\n .slice(0, 16)\n\n cache.set(input, hex)\n return hex\n}\n\n/** Last path segment, used as the default human-readable label. Stays local. */\nexport function scopeLabel(path: string): string {\n const cleaned = path.replace(/[/\\\\]+$/, '')\n const seg = cleaned.split(/[/\\\\]/).pop()\n return seg && seg.length > 0 ? seg : cleaned\n}\n","import type { SpendEvent } from './types.js'\nimport { totalTokens } from './types.js'\n\nexport type Granularity = 'hour' | 'day' | 'week' | 'month'\n\nexport interface Totals {\n costUsd: number\n /** null when at least one contributing event had no price */\n costComplete: boolean\n tokens: number\n qty: Record<string, number>\n events: number\n sessions: number\n}\n\nexport function emptyTotals(): Totals {\n return { costUsd: 0, costComplete: true, tokens: 0, qty: {}, events: 0, sessions: 0 }\n}\n\nexport function addEvent(t: Totals, e: SpendEvent, seenSessions?: Set<string>): Totals {\n t.events += 1\n t.tokens += totalTokens(e.qty)\n for (const [k, v] of Object.entries(e.qty)) t.qty[k] = (t.qty[k] ?? 0) + v\n if (e.costUsd === null) t.costComplete = false\n else t.costUsd += e.costUsd\n if (e.sessionId && seenSessions && !seenSessions.has(e.sessionId)) {\n seenSessions.add(e.sessionId)\n t.sessions += 1\n }\n return t\n}\n\nexport function sumEvents(events: Iterable<SpendEvent>): Totals {\n const t = emptyTotals()\n const sessions = new Set<string>()\n for (const e of events) addEvent(t, e, sessions)\n return t\n}\n\n/**\n * Bucket start in local time. Local, not UTC: \"eaten today\" has to mean the\n * user's today, or the headline number is wrong for most of the planet.\n */\nexport function bucketStart(ts: number, g: Granularity): number {\n const d = new Date(ts)\n switch (g) {\n case 'hour':\n d.setMinutes(0, 0, 0)\n return d.getTime()\n case 'day':\n d.setHours(0, 0, 0, 0)\n return d.getTime()\n case 'week': {\n d.setHours(0, 0, 0, 0)\n // ISO weeks start Monday\n const shift = (d.getDay() + 6) % 7\n d.setDate(d.getDate() - shift)\n return d.getTime()\n }\n case 'month':\n d.setHours(0, 0, 0, 0)\n d.setDate(1)\n return d.getTime()\n }\n}\n\nexport interface Point {\n ts: number\n totals: Totals\n}\n\nexport function timeSeries(events: Iterable<SpendEvent>, g: Granularity): Point[] {\n const buckets = new Map<number, { totals: Totals, sessions: Set<string> }>()\n for (const e of events) {\n const key = bucketStart(e.ts, g)\n let b = buckets.get(key)\n if (!b) {\n b = { totals: emptyTotals(), sessions: new Set() }\n buckets.set(key, b)\n }\n addEvent(b.totals, e, b.sessions)\n }\n return [...buckets.entries()]\n .sort((a, b) => a[0] - b[0])\n .map(([ts, b]) => ({ ts, totals: b.totals }))\n}\n\n/** hour-of-day x day-of-week grid, GitHub-contributions style. */\nexport interface HeatCell { weekday: number, hour: number, value: number }\n\nexport function heatmap(\n events: Iterable<SpendEvent>,\n metric: (e: SpendEvent) => number = e => e.costUsd ?? 0,\n): HeatCell[] {\n const grid = new Float64Array(7 * 24)\n for (const e of events) {\n const d = new Date(e.ts)\n grid[d.getDay() * 24 + d.getHours()]! += metric(e)\n }\n const cells: HeatCell[] = []\n for (let weekday = 0; weekday < 7; weekday++) {\n for (let hour = 0; hour < 24; hour++) {\n cells.push({ weekday, hour, value: grid[weekday * 24 + hour]! })\n }\n }\n return cells\n}\n\n/**\n * Cache hit rate — cacheRead / (cacheRead + in). The single most useful\n * efficiency number for an agent: it says how much of the context you are\n * re-reading at 10% price instead of paying full freight for.\n */\nexport function cacheHitRate(qty: Record<string, number>): number | null {\n const read = qty.cacheRead ?? 0\n const fresh = qty.in ?? 0\n const denom = read + fresh\n return denom === 0 ? null : read / denom\n}\n\n/** Cost per 1,000 changed lines — the \"what did this actually buy me\" metric. */\nexport function costPerKLines(costUsd: number, meta: Record<string, number>): number | null {\n const lines = (meta.linesAdded ?? 0) + (meta.linesRemoved ?? 0)\n return lines === 0 ? null : (costUsd / lines) * 1000\n}\n","import type { LimitSnapshot } from './types.js'\n\nexport interface Line { slope: number, intercept: number }\n\n/** Ordinary least squares. Returns null when the points can't define a line. */\nexport function linearRegression(points: Array<{ x: number, y: number }>): Line | null {\n const n = points.length\n if (n < 2) return null\n\n let sx = 0, sy = 0, sxx = 0, sxy = 0\n for (const { x, y } of points) {\n sx += x\n sy += y\n sxx += x * x\n sxy += x * y\n }\n const denom = n * sxx - sx * sx\n if (denom === 0) return null\n\n const slope = (n * sxy - sx * sy) / denom\n return { slope, intercept: (sy - slope * sx) / n }\n}\n\nexport interface LimitForecast {\n provider: string\n window: string\n usedPct: number\n /** percentage points per hour */\n burnRatePctPerHour: number\n /** unix ms when the window is projected to hit 100%, or null if it won't */\n exhaustsAt: number | null\n /** when the window resets regardless of usage */\n resetsAt: number | null\n /** true when the projection lands before the reset — i.e. you will actually hit the cap */\n willExhaustBeforeReset: boolean\n /** how many snapshots the projection is based on */\n samples: number\n}\n\n/**\n * Project when a limit window fills.\n *\n * Snapshots are per (provider, window) and must be sorted by ts. We regress\n * only over the current window — a reset makes usedPct fall off a cliff, and\n * fitting across that discontinuity produces a negative burn rate and a\n * confidently wrong \"you'll never hit the cap\".\n */\nexport function forecastLimit(snapshots: LimitSnapshot[], now = Date.now()): LimitForecast | null {\n if (snapshots.length === 0) return null\n\n const sorted = [...snapshots].sort((a, b) => a.ts - b.ts)\n const last = sorted[sorted.length - 1]!\n\n // walk back to the start of the current window (the last point where usage dropped)\n let start = sorted.length - 1\n while (start > 0 && sorted[start - 1]!.usedPct <= sorted[start]!.usedPct) start -= 1\n const current = sorted.slice(start)\n\n const hours = (ts: number) => (ts - current[0]!.ts) / 3_600_000\n const fit = linearRegression(current.map(s => ({ x: hours(s.ts), y: s.usedPct })))\n\n const burn = fit && fit.slope > 0 ? fit.slope : 0\n let exhaustsAt: number | null = null\n if (burn > 0) {\n const hoursToFull = (100 - last.usedPct) / burn\n if (hoursToFull >= 0 && Number.isFinite(hoursToFull)) {\n exhaustsAt = now + hoursToFull * 3_600_000\n }\n }\n\n return {\n provider: last.provider,\n window: last.window,\n usedPct: last.usedPct,\n burnRatePctPerHour: burn,\n exhaustsAt,\n resetsAt: last.resetsAt,\n willExhaustBeforeReset:\n exhaustsAt !== null && (last.resetsAt === null || exhaustsAt < last.resetsAt),\n samples: current.length,\n }\n}\n\n/** Extrapolate a spend series to the end of a period (e.g. month-to-date -> month-end). */\nexport function projectSpend(\n points: Array<{ ts: number, costUsd: number }>,\n periodEnd: number,\n): number | null {\n if (points.length === 0) return null\n const sorted = [...points].sort((a, b) => a.ts - b.ts)\n const first = sorted[0]!.ts\n const spent = sorted.reduce((s, p) => s + p.costUsd, 0)\n const elapsed = (sorted[sorted.length - 1]!.ts - first) || 1\n const remaining = periodEnd - sorted[sorted.length - 1]!.ts\n if (remaining <= 0) return spent\n return spent + (spent / elapsed) * remaining\n}\n\n/**\n * The mascot's mood. Purely cosmetic, but it is the product's differentiator —\n * so it lives in core next to the number that drives it, not in a component.\n */\nexport type Mood = 'hungry' | 'content' | 'full' | 'stuffed' | 'overstuffed'\n\nexport function moodFor(usedPct: number): Mood {\n if (usedPct < 5) return 'hungry'\n if (usedPct < 50) return 'content'\n if (usedPct < 80) return 'full'\n if (usedPct < 100) return 'stuffed'\n return 'overstuffed'\n}\n","import type { PriceTable, SpendEvent } from '@nomnomtokens/core'\nimport { costOf, defaultPrices, scopeHash } from '@nomnomtokens/core'\n\n/**\n * Parser for `~/.claude/projects/**\\/*.jsonl`.\n *\n * Written to be tolerant by construction: an unknown field is not an\n * exception, and a line that doesn't look like a priced assistant turn is\n * simply skipped. Claude Code's log format is not a public contract, so the\n * parser's job is to extract what it recognises and stay quiet about the rest.\n *\n * Two things this parser knows that a naive reader does not:\n *\n * 1. **The same turn is written more than once.** On a 25k-line corpus, 3,269\n * of 4,806 distinct (requestId, message.id) pairs appeared 2-3 times in the\n * *same* file, byte-identical apart from `uuid`. Summing without dedup\n * over-reports by ~2.3x. The dedup key is therefore requestId + message.id,\n * never `uuid`.\n * 2. **Modern logs carry no cost.** `costUSD` is absent from every record in\n * current versions, so cost is computed from the model and the token\n * counts (see packages/core/src/pricing.ts).\n */\n\n/** Shape we care about. Everything is optional — the log is not a contract. */\ninterface RawLine {\n type?: string\n timestamp?: string\n sessionId?: string\n cwd?: string\n requestId?: string\n isSidechain?: boolean\n costUSD?: number\n message?: {\n id?: string\n model?: string\n usage?: RawUsage\n }\n toolUseResult?: {\n structuredPatch?: Array<{ lines?: string[] }>\n }\n}\n\ninterface RawUsage {\n input_tokens?: number\n output_tokens?: number\n cache_read_input_tokens?: number\n cache_creation_input_tokens?: number\n cache_creation?: {\n ephemeral_5m_input_tokens?: number\n ephemeral_1h_input_tokens?: number\n }\n}\n\nexport interface JsonlParserOptions {\n prices?: PriceTable\n /** Overrides the provider name; used by tests and by the OTLP receiver. */\n provider?: string\n}\n\nfunction num(v: unknown): number {\n return typeof v === 'number' && Number.isFinite(v) ? v : 0\n}\n\n/** Count +/- lines in a unified-diff hunk set. */\nexport function countPatchLines(patch: Array<{ lines?: string[] }> | undefined): {\n added: number\n removed: number\n} {\n let added = 0\n let removed = 0\n for (const hunk of patch ?? []) {\n for (const line of hunk.lines ?? []) {\n if (line.startsWith('+')) added += 1\n else if (line.startsWith('-')) removed += 1\n }\n }\n return { added, removed }\n}\n\n/**\n * Stateful because line attribution crosses records: an edit's diff arrives in\n * a later `user`/`toolUseResult` line than the assistant turn that requested\n * it. We accumulate pending line counts per session and attach them to the\n * next priced turn, so `SUM(meta.linesAdded)` over any filter is the number of\n * lines the agent changed while earning that spend.\n */\nexport class ClaudeCodeJsonlParser {\n private readonly prices: PriceTable\n private readonly provider: string\n private readonly pendingLines = new Map<string, { added: number, removed: number }>()\n\n constructor(opts: JsonlParserOptions = {}) {\n this.prices = opts.prices ?? defaultPrices\n this.provider = opts.provider ?? 'claude-code'\n }\n\n /** @returns the event, or null when the line carries no spend. */\n async parseLine(line: string): Promise<SpendEvent | null> {\n const trimmed = line.trim()\n if (trimmed.length === 0) return null\n\n let raw: RawLine\n try {\n raw = JSON.parse(trimmed) as RawLine\n } catch {\n return null // a torn write at the tail of a live file; the next scan gets it\n }\n\n // Diffs arrive on their own records — bank them for the next priced turn.\n if (raw.toolUseResult?.structuredPatch && raw.sessionId) {\n const { added, removed } = countPatchLines(raw.toolUseResult.structuredPatch)\n const pending = this.pendingLines.get(raw.sessionId) ?? { added: 0, removed: 0 }\n pending.added += added\n pending.removed += removed\n this.pendingLines.set(raw.sessionId, pending)\n return null\n }\n\n const usage = raw.message?.usage\n if (raw.type !== 'assistant' || !usage) return null\n\n const ts = raw.timestamp ? Date.parse(raw.timestamp) : Number.NaN\n if (!Number.isFinite(ts)) return null\n\n // cache_creation splits the total by TTL, and the two are priced\n // differently (1.25x vs 2x input). Fall back to the flat total when the\n // breakdown is missing, attributing it to the cheaper 5m bucket.\n const create5m = usage.cache_creation?.ephemeral_5m_input_tokens\n const create1h = num(usage.cache_creation?.ephemeral_1h_input_tokens)\n const createTotal = num(usage.cache_creation_input_tokens)\n\n const qty = {\n in: num(usage.input_tokens),\n out: num(usage.output_tokens),\n cacheCreate: create5m === undefined ? createTotal - create1h : num(create5m),\n cacheCreate1h: create1h,\n cacheRead: num(usage.cache_read_input_tokens),\n }\n\n const model = raw.message?.model ?? null\n const sessionId = raw.sessionId ?? null\n\n const lines = sessionId ? this.pendingLines.get(sessionId) : undefined\n if (sessionId) this.pendingLines.delete(sessionId)\n\n const meta: Record<string, number> = {\n linesAdded: lines?.added ?? 0,\n linesRemoved: lines?.removed ?? 0,\n }\n if (raw.isSidechain) meta.sidechain = 1\n\n return {\n // requestId+message.id, never uuid — see the class docblock\n id: `${this.provider}:${raw.requestId ?? 'norid'}:${raw.message?.id ?? ts}`,\n ts,\n provider: this.provider,\n kind: 'tokens',\n sessionId,\n scopeHash: raw.cwd ? await scopeHash(raw.cwd) : 'unknown',\n unitLabel: model,\n qty,\n // costUSD survives in archived logs from older versions; prefer it when present\n costUsd: typeof raw.costUSD === 'number' ? raw.costUSD : costOf(model, qty, this.prices),\n meta,\n }\n }\n\n /** Drop per-session accumulators; call between files to bound memory. */\n reset(): void {\n this.pendingLines.clear()\n }\n}\n","import type { IngestRecord, LimitSnapshot, SpendEvent } from '@nomnomtokens/core'\nimport { scopeHash, scopeLabel } from '@nomnomtokens/core'\n\n/**\n * Parser for the statusLine hook payload (stdin JSON).\n *\n * This is the *live* half of the claude-code adapter. JSONL is the history and\n * is only written when a turn completes; the statusline fires on every render,\n * which is what makes the dashboard move in real time.\n *\n * It is also the only source of subscription limits — `rate_limits.five_hour`\n * and `rate_limits.seven_day` exist nowhere in the transcript — and the only\n * source of authoritative per-session line counts.\n */\n\nexport interface StatuslinePayload {\n session_id?: string\n cwd?: string\n workspace?: { current_dir?: string, project_dir?: string }\n model?: { id?: string, display_name?: string }\n version?: string\n cost?: {\n total_cost_usd?: number\n total_duration_ms?: number\n total_api_duration_ms?: number\n total_lines_added?: number\n total_lines_removed?: number\n }\n context_window?: {\n total_input_tokens?: number\n total_output_tokens?: number\n context_window_size?: number\n used_percentage?: number\n }\n rate_limits?: {\n five_hour?: RawRateLimit\n seven_day?: RawRateLimit\n }\n}\n\ninterface RawRateLimit {\n used_percentage?: number\n /** unix SECONDS, not ms */\n resets_at?: number\n}\n\nconst WINDOWS: Array<[keyof NonNullable<StatuslinePayload['rate_limits']>, string]> = [\n ['five_hour', '5h'],\n ['seven_day', '7d'],\n]\n\nexport function parseLimits(payload: StatuslinePayload, now = Date.now()): LimitSnapshot[] {\n const out: LimitSnapshot[] = []\n for (const [key, window] of WINDOWS) {\n const raw = payload.rate_limits?.[key]\n if (!raw || typeof raw.used_percentage !== 'number') continue\n out.push({\n ts: now,\n provider: 'claude-code',\n window,\n usedPct: raw.used_percentage,\n // the payload uses unix seconds; everything downstream is unix ms\n resetsAt: typeof raw.resets_at === 'number' ? raw.resets_at * 1000 : null,\n })\n }\n return out\n}\n\n/**\n * Session-level rollup as a spend event.\n *\n * `kind: 'session'` rather than `'tokens'` and a stable id per session, so\n * repeated statusline fires upsert one row instead of accumulating thousands.\n * It never double-counts against the JSONL token events because the UI only\n * ever sums within a single `kind`.\n */\nexport async function parseSessionRollup(\n payload: StatuslinePayload,\n now = Date.now(),\n): Promise<SpendEvent | null> {\n const sessionId = payload.session_id\n if (!sessionId) return null\n\n const dir = payload.workspace?.project_dir ?? payload.workspace?.current_dir ?? payload.cwd\n const cost = payload.cost ?? {}\n\n const meta: Record<string, number> = {\n linesAdded: cost.total_lines_added ?? 0,\n linesRemoved: cost.total_lines_removed ?? 0,\n durationMs: cost.total_duration_ms ?? 0,\n apiDurationMs: cost.total_api_duration_ms ?? 0,\n }\n if (typeof payload.context_window?.used_percentage === 'number') {\n meta.contextUsedPct = payload.context_window.used_percentage\n }\n\n return {\n id: `claude-code:session:${sessionId}`,\n ts: now,\n provider: 'claude-code',\n kind: 'session',\n sessionId,\n scopeHash: dir ? await scopeHash(dir) : 'unknown',\n unitLabel: payload.model?.id ?? null,\n qty: {\n sessions: 1,\n linesChanged: (cost.total_lines_added ?? 0) + (cost.total_lines_removed ?? 0),\n },\n // Claude Code's own figure for the session. We keep it as reported rather\n // than recomputing: when it disagrees with our JSONL sum, that disagreement\n // is information (see docs/architecture.md, \"Which number to trust\").\n costUsd: typeof cost.total_cost_usd === 'number' ? cost.total_cost_usd : null,\n meta,\n }\n}\n\n/** Everything a single statusline fire contributes to the store. */\nexport async function parseStatusline(\n payload: StatuslinePayload,\n now = Date.now(),\n): Promise<IngestRecord[]> {\n const records: IngestRecord[] = []\n\n const dir = payload.workspace?.project_dir ?? payload.workspace?.current_dir ?? payload.cwd\n if (dir) {\n records.push({\n type: 'scope',\n scopeHash: await scopeHash(dir),\n label: scopeLabel(dir),\n provider: 'claude-code',\n })\n }\n\n const rollup = await parseSessionRollup(payload, now)\n if (rollup) records.push({ type: 'event', event: rollup })\n\n for (const limit of parseLimits(payload, now)) records.push({ type: 'limit', limit })\n\n return records\n}\n","import { createReadStream, existsSync } from 'node:fs'\nimport type { Dirent } from 'node:fs'\nimport { readdir, stat } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { StringDecoder } from 'node:string_decoder'\nimport type { Adapter, IngestRecord, PriceTable, ScanState } from '@nomnomtokens/core'\nimport { ClaudeCodeJsonlParser } from './jsonl.js'\n\nexport * from './jsonl.js'\nexport * from './statusline.js'\n\nexport function claudeProjectsDir(): string {\n return process.env.CLAUDE_PROJECTS_DIR ?? join(homedir(), '.claude', 'projects')\n}\n\n/**\n * Claude Code encodes the project path into the directory name by replacing\n * separators with dashes (`/Users/me/dev/app` -> `-Users-me-dev-app`). The\n * mapping is lossy — a real dash is indistinguishable from a separator — so we\n * only ever use this for a fallback label, never to reconstruct a path.\n */\nexport function labelFromProjectDir(dirName: string): string {\n const parts = dirName.split('-').filter(Boolean)\n return parts.length > 0 ? parts[parts.length - 1]! : dirName\n}\n\n/**\n * Read newline-delimited records from `start`, yielding whole lines only.\n *\n * Returns the byte offset of the last complete line so a live file that is\n * mid-write is resumed exactly where it was left, rather than losing or\n * duplicating the torn record.\n */\nasync function* readLinesFrom(\n path: string,\n start: number,\n): AsyncGenerator<{ line: string, offset: number }> {\n const stream = createReadStream(path, { start })\n // A StringDecoder, not chunk.toString(): transcripts are full of non-ASCII,\n // and a multi-byte character straddling a chunk boundary decodes to U+FFFD,\n // corrupting that line's JSON and silently dropping the record.\n const decoder = new StringDecoder('utf8')\n let buffer = ''\n let consumed = start\n\n for await (const chunk of stream) {\n buffer += decoder.write(chunk as Buffer)\n let nl = buffer.indexOf('\\n')\n while (nl !== -1) {\n const line = buffer.slice(0, nl)\n buffer = buffer.slice(nl + 1)\n consumed += Buffer.byteLength(line, 'utf8') + 1\n yield { line, offset: consumed }\n nl = buffer.indexOf('\\n')\n }\n }\n}\n\n/**\n * Walk every transcript under the projects root, at any depth.\n *\n * Depth matters more than it looks. Top-level sessions sit at\n * `projects/<project>/<session>.jsonl`, but **subagent transcripts are nested\n * three levels further down**, at\n * `projects/<project>/<session>/subagents/agent-*.jsonl`. Anything that globs\n * `projects/*/*.jsonl` silently omits every Task-tool subagent — which is real,\n * often expensive spend. On the corpus this parser was built against that was\n * 836 records across 13 files, invisible.\n */\nasync function* walkJsonl(\n root: string,\n projectDir?: string,\n): AsyncGenerator<{ path: string, projectDir: string }> {\n let entries: Dirent[]\n try {\n entries = await readdir(root, { withFileTypes: true })\n } catch {\n return\n }\n\n for (const entry of entries) {\n const path = join(root, entry.name)\n if (entry.isDirectory()) {\n // the first level under the root is the project; deeper levels inherit it\n yield* walkJsonl(path, projectDir ?? entry.name)\n } else if (entry.isFile() && entry.name.endsWith('.jsonl')) {\n yield { path, projectDir: projectDir ?? entry.name }\n }\n }\n}\n\nexport interface ClaudeCodeAdapterOptions {\n root?: string\n prices?: PriceTable\n}\n\nexport class ClaudeCodeAdapter implements Adapter {\n readonly name = 'claude-code'\n private readonly root: string\n private readonly prices: PriceTable | undefined\n\n constructor(opts: ClaudeCodeAdapterOptions = {}) {\n this.root = opts.root ?? claudeProjectsDir()\n this.prices = opts.prices\n }\n\n async detect(): Promise<boolean> {\n return existsSync(this.root)\n }\n\n async *scan(state: ScanState): AsyncIterable<IngestRecord> {\n const seenScopes = new Set<string>()\n\n for await (const { path, projectDir } of walkJsonl(this.root)) {\n const info = await stat(path).catch(() => null)\n if (!info) continue\n\n const cursor = state.get(path)\n // Same size and mtime as last time: nothing appended, skip the read\n // entirely. This is what makes a re-scan sub-second on a year of logs.\n if (cursor && cursor.size === info.size && cursor.mtime === info.mtimeMs) continue\n\n // A file that shrank was rotated or rewritten — the old offset is\n // meaningless, so re-read it from the top and let upsert absorb the\n // repeats.\n const start = cursor && info.size >= cursor.size ? cursor.offset : 0\n\n const parser = new ClaudeCodeJsonlParser(this.prices ? { prices: this.prices } : {})\n let offset = start\n\n for await (const { line, offset: next } of readLinesFrom(path, start)) {\n offset = next\n const event = await parser.parseLine(line)\n if (!event) continue\n\n if (!seenScopes.has(event.scopeHash)) {\n seenScopes.add(event.scopeHash)\n yield {\n type: 'scope',\n scopeHash: event.scopeHash,\n label: labelFromProjectDir(projectDir),\n provider: this.name,\n }\n }\n yield { type: 'event', event }\n }\n\n state.set({ sourcePath: path, mtime: info.mtimeMs, size: info.size, offset })\n }\n }\n\n /**\n * Tail the transcript directory. Chokidar rather than fs.watch: we need\n * recursive watching that behaves the same on macOS, Linux and Windows.\n */\n watch(emit: (r: IngestRecord) => void): () => void {\n const offsets = new Map<string, number>()\n const inFlight = new Set<string>()\n const parser = new ClaudeCodeJsonlParser(this.prices ? { prices: this.prices } : {})\n let closed = false\n\n const pump = async (path: string) => {\n // chokidar can fire several times for one append; without this guard two\n // concurrent reads share a stale offset and emit the same lines twice.\n if (closed || inFlight.has(path)) return\n inFlight.add(path)\n try {\n const info = await stat(path).catch(() => null)\n if (!info) return\n\n const known = offsets.get(path)\n // Unseen file: start at its current end. `scan()` owns history; the\n // watcher only owns what happens from now on.\n let offset = known === undefined ? info.size : info.size < known ? 0 : known\n\n for await (const { line, offset: next } of readLinesFrom(path, offset)) {\n offset = next\n const event = await parser.parseLine(line)\n if (event) emit({ type: 'event', event })\n }\n offsets.set(path, offset)\n } finally {\n inFlight.delete(path)\n }\n }\n\n // chokidar is imported lazily so that `packages/core` consumers and the\n // browser build never pull a filesystem watcher into the graph\n const watcherPromise = import('chokidar').then(({ watch }) => {\n const w = watch(this.root, {\n // project / session / subagents / agent-*.jsonl\n depth: 4,\n ignoreInitial: true,\n awaitWriteFinish: { stabilityThreshold: 200, pollInterval: 50 },\n })\n w.on('add', p => void (p.endsWith('.jsonl') && pump(p)))\n w.on('change', p => void (p.endsWith('.jsonl') && pump(p)))\n return w\n })\n\n return () => {\n closed = true\n void watcherPromise.then(w => w.close())\n }\n }\n}\n","import { existsSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\n/**\n * Resolve Cursor's user-data directories across platforms.\n *\n * Cursor follows the VS Code layout:\n * macOS: ~/Library/Application Support/Cursor\n * Linux: ~/.config/Cursor\n * Windows: %APPDATA%/Cursor\n */\nexport function cursorUserDataDir(): string {\n if (process.env.CURSOR_USER_DATA_DIR) return process.env.CURSOR_USER_DATA_DIR\n\n const home = homedir()\n if (process.platform === 'darwin') {\n return join(home, 'Library', 'Application Support', 'Cursor')\n }\n if (process.platform === 'win32') {\n const appdata = process.env.APPDATA ?? join(home, 'AppData', 'Roaming')\n return join(appdata, 'Cursor')\n }\n return join(process.env.XDG_CONFIG_HOME ?? join(home, '.config'), 'Cursor')\n}\n\nexport function cursorGlobalStorageDir(userData = cursorUserDataDir()): string {\n return join(userData, 'User', 'globalStorage')\n}\n\nexport function cursorStateDbPath(userData = cursorUserDataDir()): string {\n return join(cursorGlobalStorageDir(userData), 'state.vscdb')\n}\n\nexport function cursorWorkspaceStorageDir(userData = cursorUserDataDir()): string {\n return join(userData, 'User', 'workspaceStorage')\n}\n\nexport function cursorStateDbExists(userData = cursorUserDataDir()): boolean {\n return existsSync(cursorStateDbPath(userData))\n}\n\n/**\n * Turn a VS Code folder URI into a filesystem path.\n * `file:///Users/me/app` → `/Users/me/app`\n * Remote URIs (ssh-remote, etc.) are returned as-is for hashing/labeling.\n */\nexport function pathFromFolderUri(uri: string | null | undefined): string | null {\n if (!uri || typeof uri !== 'string') return null\n if (uri.startsWith('file://')) {\n try {\n return decodeURIComponent(uri.slice('file://'.length))\n } catch {\n return uri.slice('file://'.length)\n }\n }\n return uri\n}\n\n/** Last path segment for the local scopes label — never reconstruct a full path. */\nexport function labelFromWorkspacePath(path: string): string {\n const cleaned = path.replace(/[/\\\\]+$/, '')\n const parts = cleaned.split(/[/\\\\]/).filter(Boolean)\n const last = parts[parts.length - 1]\n if (!last) return 'workspace'\n // vscode-remote://…/home/user/proj → proj\n try {\n return decodeURIComponent(last)\n } catch {\n return last\n }\n}\n","import { readdirSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport Database from 'better-sqlite3'\nimport type { CursorBubble, CursorComposerInfo } from './parse.js'\nimport { pathFromFolderUri } from './paths.js'\n\nexport interface CursorWorkspaceMap {\n /** workspaceStorage folder id → filesystem / remote URI path */\n byId: Map<string, string>\n}\n\nexport interface CursorSnapshot {\n composers: Map<string, CursorComposerInfo>\n /** composerId → bubbles */\n bubbles: Map<string, CursorBubble[]>\n /** composerId → workspace path for hashing */\n workspaceByComposer: Map<string, string | null>\n}\n\ninterface ComposerHeader {\n composerId?: string\n totalLinesAdded?: number\n totalLinesRemoved?: number\n workspaceIdentifier?: {\n id?: string\n uri?: { external?: string, path?: string } | string\n }\n}\n\ninterface ComposerDataRow {\n composerId?: string\n modelConfig?: { modelName?: string, model?: string } | string\n totalLinesAdded?: number\n totalLinesRemoved?: number\n}\n\nfunction decodeValue(value: unknown): unknown {\n if (value == null) return null\n if (Buffer.isBuffer(value)) {\n try {\n return JSON.parse(value.toString('utf8'))\n } catch {\n return null\n }\n }\n if (typeof value === 'string') {\n try {\n return JSON.parse(value)\n } catch {\n return value\n }\n }\n return value\n}\n\n/**\n * Cursor often stores Auto-mode as `default`, and occasionally as a repeated\n * join (`default,default,default,default`). Neither is a real model id — treat\n * them as absent so the UI buckets them under \"unknown\".\n */\nexport function normalizeCursorModelName(raw: string | null | undefined): string | null {\n if (raw == null) return null\n const name = raw.trim()\n if (!name) return null\n\n const parts = name.split(',').map(p => p.trim().toLowerCase()).filter(Boolean)\n if (parts.length > 0 && parts.every(p => p === 'default')) return null\n\n return name === 'default' ? null : name\n}\n\nfunction modelFromConfig(mc: ComposerDataRow['modelConfig']): string | null {\n if (!mc) return null\n if (typeof mc === 'string') return normalizeCursorModelName(mc)\n return normalizeCursorModelName(mc.modelName ?? mc.model ?? null)\n}\n\nfunction workspacePathFromHeader(\n header: ComposerHeader,\n workspaces: CursorWorkspaceMap,\n): string | null {\n const wi = header.workspaceIdentifier\n if (!wi) return null\n\n if (wi.id) {\n const mapped = workspaces.byId.get(wi.id)\n if (mapped) return mapped\n }\n\n const uri = wi.uri\n if (typeof uri === 'string') return pathFromFolderUri(uri)\n if (uri && typeof uri === 'object') {\n if (typeof uri.external === 'string') return pathFromFolderUri(uri.external)\n if (typeof uri.path === 'string') return uri.path\n }\n return null\n}\n\n/** Load workspaceStorage/<id>/workspace.json → id → folder path. */\nexport function loadWorkspaceMap(workspaceStorageDir: string): CursorWorkspaceMap {\n const byId = new Map<string, string>()\n let entries: string[]\n try {\n entries = readdirSync(workspaceStorageDir)\n } catch {\n return { byId }\n }\n\n for (const id of entries) {\n try {\n const raw = readFileSync(join(workspaceStorageDir, id, 'workspace.json'), 'utf8')\n const meta = JSON.parse(raw) as { folder?: string }\n const path = pathFromFolderUri(meta.folder)\n if (path) byId.set(id, path)\n } catch {\n // missing or malformed — skip\n }\n }\n return { byId }\n}\n\n/**\n * Read-only snapshot of the spend-relevant bits of Cursor's state.vscdb.\n *\n * Opens with `mode=ro` so a live Cursor process holding a write lock does not\n * block us, and we never risk writing to the IDE's database.\n */\nexport function readCursorSnapshot(\n stateDbPath: string,\n workspaces: CursorWorkspaceMap,\n): CursorSnapshot {\n const db = new Database(stateDbPath, { readonly: true, fileMustExist: true })\n try {\n // Prefer WAL-friendly read; ignore if the pragma fails on a plain copy.\n try {\n db.pragma('query_only = ON')\n } catch {\n // ignore\n }\n\n const composers = new Map<string, CursorComposerInfo>()\n const workspaceByComposer = new Map<string, string | null>()\n const linesByComposer = new Map<string, { added: number, removed: number }>()\n\n // Headers: workspace + line totals\n const headerRow = db\n .prepare(`SELECT value FROM ItemTable WHERE key = ?`)\n .get('composer.composerHeaders') as { value: unknown } | undefined\n\n if (headerRow) {\n const parsed = decodeValue(headerRow.value) as { allComposers?: ComposerHeader[] } | null\n for (const h of parsed?.allComposers ?? []) {\n if (!h.composerId) continue\n linesByComposer.set(h.composerId, {\n added: typeof h.totalLinesAdded === 'number' ? h.totalLinesAdded : 0,\n removed: typeof h.totalLinesRemoved === 'number' ? h.totalLinesRemoved : 0,\n })\n workspaceByComposer.set(h.composerId, workspacePathFromHeader(h, workspaces))\n }\n }\n\n // composerData: model + possibly fresher line totals\n const dataRows = db\n .prepare(`SELECT key, value FROM cursorDiskKV WHERE key LIKE 'composerData:%'`)\n .all() as Array<{ key: string, value: unknown }>\n\n for (const row of dataRows) {\n const raw = decodeValue(row.value) as ComposerDataRow | null\n if (!raw) continue\n const composerId = raw.composerId ?? row.key.slice('composerData:'.length)\n if (!composerId) continue\n\n const lines = linesByComposer.get(composerId) ?? { added: 0, removed: 0 }\n const added = typeof raw.totalLinesAdded === 'number' ? raw.totalLinesAdded : lines.added\n const removed = typeof raw.totalLinesRemoved === 'number' ? raw.totalLinesRemoved : lines.removed\n\n composers.set(composerId, {\n composerId,\n model: modelFromConfig(raw.modelConfig),\n linesAdded: added,\n linesRemoved: removed,\n })\n\n if (!workspaceByComposer.has(composerId)) {\n workspaceByComposer.set(composerId, null)\n }\n }\n\n // Ensure composers that only appear in headers still exist\n for (const [id, lines] of linesByComposer) {\n if (!composers.has(id)) {\n composers.set(id, {\n composerId: id,\n model: null,\n linesAdded: lines.added,\n linesRemoved: lines.removed,\n })\n }\n }\n\n const bubbles = new Map<string, CursorBubble[]>()\n const bubbleRows = db\n .prepare(`SELECT key, value FROM cursorDiskKV WHERE key LIKE 'bubbleId:%'`)\n .all() as Array<{ key: string, value: unknown }>\n\n for (const row of bubbleRows) {\n // bubbleId:<composerId>:<bubbleId>\n const parts = row.key.split(':')\n if (parts.length < 3) continue\n const composerId = parts[1]!\n const bubbleId = parts.slice(2).join(':')\n\n const raw = decodeValue(row.value) as Record<string, unknown> | null\n if (!raw || typeof raw !== 'object') continue\n\n // Pull only the numeric / id fields — never text, diffs, or tool payloads.\n const tokenCount = raw.tokenCount as CursorBubble['tokenCount'] | undefined\n const ctx = raw.contextWindowStatusAtCreation as\n | CursorBubble['contextWindowStatusAtCreation']\n | undefined\n\n const bubble: CursorBubble = {\n bubbleId: typeof raw.bubbleId === 'string' ? raw.bubbleId : bubbleId,\n composerId,\n type: typeof raw.type === 'number' ? raw.type : undefined,\n createdAt: (raw.createdAt as string | number | undefined)\n ?? (raw.timestamp as string | number | undefined),\n tokenCount: tokenCount && typeof tokenCount === 'object'\n ? {\n inputTokens: typeof tokenCount.inputTokens === 'number' ? tokenCount.inputTokens : 0,\n outputTokens: typeof tokenCount.outputTokens === 'number' ? tokenCount.outputTokens : 0,\n }\n : undefined,\n contextWindowStatusAtCreation: ctx && typeof ctx === 'object'\n ? {\n tokensUsed: typeof ctx.tokensUsed === 'number' ? ctx.tokensUsed : undefined,\n tokenLimit: typeof ctx.tokenLimit === 'number' ? ctx.tokenLimit : undefined,\n }\n : undefined,\n }\n\n const list = bubbles.get(composerId) ?? []\n list.push(bubble)\n bubbles.set(composerId, list)\n }\n\n return { composers, bubbles, workspaceByComposer }\n } finally {\n db.close()\n }\n}\n","import type { PriceTable, SpendEvent } from '@nomnomtokens/core'\nimport { costOf, defaultPrices, EMPTY_TOKEN_QTY } from '@nomnomtokens/core'\n\n/** Fields we read from a Cursor bubble. Everything else is ignored on purpose. */\nexport interface CursorBubble {\n bubbleId: string\n composerId: string\n /** 1 = user, 2 = assistant — Cursor's internal enum, not a contract. */\n type?: number\n createdAt?: string | number\n tokenCount?: {\n inputTokens?: number\n outputTokens?: number\n }\n contextWindowStatusAtCreation?: {\n tokensUsed?: number\n tokenLimit?: number\n }\n}\n\nexport interface CursorComposerInfo {\n composerId: string\n model: string | null\n linesAdded: number\n linesRemoved: number\n}\n\nexport interface ParseOptions {\n prices?: PriceTable\n provider?: string\n}\n\nfunction num(v: unknown): number {\n return typeof v === 'number' && Number.isFinite(v) && v > 0 ? v : 0\n}\n\nfunction parseTs(raw: string | number | undefined): number | null {\n if (typeof raw === 'number' && Number.isFinite(raw)) {\n // Cursor sometimes stores ms epochs, sometimes seconds-looking values that\n // are already ms (createdAt in headers is ms). ISO strings are preferred.\n return raw < 1e12 ? raw * 1000 : raw\n }\n if (typeof raw === 'string' && raw.length > 0) {\n const ms = Date.parse(raw)\n return Number.isFinite(ms) ? ms : null\n }\n return null\n}\n\nfunction hasExactTokens(b: CursorBubble): boolean {\n const tc = b.tokenCount\n return num(tc?.inputTokens) > 0 || num(tc?.outputTokens) > 0\n}\n\nfunction tokensUsedOf(b: CursorBubble): number {\n return num(b.contextWindowStatusAtCreation?.tokensUsed)\n}\n\n/**\n * Turn a composer's bubbles into spend events.\n *\n * Cursor's local DB is incomplete: most bubbles store `tokenCount: {0,0}`.\n * When exact counts exist we use them. Otherwise we fall back to\n * `contextWindowStatusAtCreation.tokensUsed` (input) and the growth between\n * consecutive `tokensUsed` values as an approximate output — the same delta\n * method other local Cursor trackers use. We never estimate from message text.\n *\n * To avoid double-counting a turn that has both signals on different bubbles,\n * a composer that has any exact `tokenCount` emits only those; otherwise it\n * uses the tokensUsed path.\n */\nexport function eventsFromComposer(\n composer: CursorComposerInfo,\n bubbles: CursorBubble[],\n scopeHash: string,\n opts: ParseOptions = {},\n): SpendEvent[] {\n const prices = opts.prices ?? defaultPrices\n const provider = opts.provider ?? 'cursor'\n const model = composer.model\n\n const sorted = [...bubbles].sort((a, b) => {\n const ta = parseTs(a.createdAt) ?? 0\n const tb = parseTs(b.createdAt) ?? 0\n return ta - tb\n })\n\n const useExact = sorted.some(hasExactTokens)\n const events: SpendEvent[] = []\n let linesAttached = false\n\n const attachLines = (): Record<string, number> => {\n if (linesAttached) return { linesAdded: 0, linesRemoved: 0 }\n linesAttached = true\n return {\n linesAdded: composer.linesAdded,\n linesRemoved: composer.linesRemoved,\n }\n }\n\n if (useExact) {\n for (const b of sorted) {\n if (!hasExactTokens(b)) continue\n const ts = parseTs(b.createdAt)\n if (ts === null) continue\n\n const qty = {\n ...EMPTY_TOKEN_QTY,\n in: num(b.tokenCount?.inputTokens),\n out: num(b.tokenCount?.outputTokens),\n }\n events.push({\n id: `${provider}:${b.composerId}:${b.bubbleId}`,\n ts,\n provider,\n kind: 'tokens',\n sessionId: composer.composerId,\n scopeHash,\n unitLabel: model,\n qty,\n costUsd: costOf(model, qty, prices),\n meta: attachLines(),\n })\n }\n return events\n }\n\n // tokensUsed fallback — only bubbles that actually recorded a context size\n const withUsed = sorted.filter(b => tokensUsedOf(b) > 0)\n for (let i = 0; i < withUsed.length; i++) {\n const b = withUsed[i]!\n const ts = parseTs(b.createdAt)\n if (ts === null) continue\n\n const used = tokensUsedOf(b)\n const next = withUsed[i + 1]\n const nextUsed = next ? tokensUsedOf(next) : 0\n const out = nextUsed > used ? nextUsed - used : 0\n\n const qty = {\n ...EMPTY_TOKEN_QTY,\n in: used,\n out,\n }\n\n events.push({\n id: `${provider}:${b.composerId}:${b.bubbleId}`,\n ts,\n provider,\n kind: 'tokens',\n sessionId: composer.composerId,\n scopeHash,\n unitLabel: model,\n qty,\n costUsd: costOf(model, qty, prices),\n meta: attachLines(),\n })\n }\n\n return events\n}\n","import { existsSync } from 'node:fs'\nimport { stat } from 'node:fs/promises'\nimport type { Adapter, IngestRecord, PriceTable, ScanState } from '@nomnomtokens/core'\nimport { scopeHash } from '@nomnomtokens/core'\nimport { loadWorkspaceMap, readCursorSnapshot } from './db.js'\nimport { eventsFromComposer } from './parse.js'\nimport {\n cursorStateDbExists,\n cursorStateDbPath,\n cursorUserDataDir,\n cursorWorkspaceStorageDir,\n labelFromWorkspacePath,\n} from './paths.js'\n\nexport * from './parse.js'\nexport * from './paths.js'\nexport { loadWorkspaceMap, normalizeCursorModelName, readCursorSnapshot } from './db.js'\n\nexport interface CursorAdapterOptions {\n /** Override Cursor user-data root (tests). */\n userDataDir?: string\n /** Override path to state.vscdb (tests). */\n stateDbPath?: string\n prices?: PriceTable\n}\n\n/**\n * Adapter for Cursor IDE local spend data.\n *\n * Reads User/globalStorage/state.vscdb (composer bubbles + headers) and maps\n * workspaces via workspaceStorage/<id>/workspace.json. Cursor often stores\n * zero token counts locally — bubbles without numbers are skipped rather than\n * estimated from message text.\n */\nexport class CursorAdapter implements Adapter {\n readonly name = 'cursor'\n private readonly userDataDir: string\n private readonly stateDbPath: string\n private readonly prices: PriceTable | undefined\n\n constructor(opts: CursorAdapterOptions = {}) {\n this.userDataDir = opts.userDataDir ?? cursorUserDataDir()\n this.stateDbPath = opts.stateDbPath ?? cursorStateDbPath(this.userDataDir)\n this.prices = opts.prices\n }\n\n async detect(): Promise<boolean> {\n return existsSync(this.stateDbPath) || cursorStateDbExists(this.userDataDir)\n }\n\n async *scan(state: ScanState): AsyncIterable<IngestRecord> {\n const info = await stat(this.stateDbPath).catch(() => null)\n if (!info) return\n\n const cursor = state.get(this.stateDbPath)\n if (cursor && cursor.size === info.size && cursor.mtime === info.mtimeMs) return\n\n yield* this.emitSnapshot()\n\n state.set({\n sourcePath: this.stateDbPath,\n mtime: info.mtimeMs,\n size: info.size,\n offset: info.size,\n })\n }\n\n /**\n * Rescan when the DB or its WAL changes. History is owned by scan();\n * upsert makes a full re-emit of unchanged bubbles a no-op.\n */\n watch(emit: (r: IngestRecord) => void): () => void {\n let closed = false\n let timer: ReturnType<typeof setTimeout> | null = null\n let inFlight = false\n\n const run = async () => {\n if (closed || inFlight) return\n inFlight = true\n try {\n for await (const record of this.emitSnapshot()) {\n if (closed) return\n emit(record)\n }\n } catch {\n // A mid-write torn read is fine — the next change event retries.\n } finally {\n inFlight = false\n }\n }\n\n const schedule = () => {\n if (closed) return\n if (timer) clearTimeout(timer)\n timer = setTimeout(() => {\n timer = null\n void run()\n }, 400)\n }\n\n const watcherPromise = import('chokidar').then(({ watch }) => {\n const w = watch(\n [this.stateDbPath, `${this.stateDbPath}-wal`, `${this.stateDbPath}-shm`],\n {\n ignoreInitial: true,\n awaitWriteFinish: { stabilityThreshold: 300, pollInterval: 100 },\n },\n )\n w.on('add', schedule)\n w.on('change', schedule)\n return w\n })\n\n return () => {\n closed = true\n if (timer) clearTimeout(timer)\n void watcherPromise.then(w => w.close())\n }\n }\n\n private async *emitSnapshot(): AsyncIterable<IngestRecord> {\n const workspaces = loadWorkspaceMap(cursorWorkspaceStorageDir(this.userDataDir))\n const snapshot = readCursorSnapshot(this.stateDbPath, workspaces)\n const seenScopes = new Set<string>()\n const parseOpts = this.prices ? { prices: this.prices } : {}\n\n for (const [composerId, composer] of snapshot.composers) {\n const bubbles = snapshot.bubbles.get(composerId) ?? []\n if (bubbles.length === 0) continue\n\n const workspacePath = snapshot.workspaceByComposer.get(composerId)\n const hash = workspacePath ? await scopeHash(workspacePath) : 'unknown'\n\n if (!seenScopes.has(hash)) {\n seenScopes.add(hash)\n yield {\n type: 'scope',\n scopeHash: hash,\n label: workspacePath ? labelFromWorkspacePath(workspacePath) : 'workspace',\n provider: this.name,\n }\n }\n\n for (const event of eventsFromComposer(composer, bubbles, hash, parseOpts)) {\n yield { type: 'event', event }\n }\n }\n }\n}\n","import type { Adapter } from '@nomnomtokens/core'\nimport { ClaudeCodeAdapter } from './claude-code/index.js'\nimport { CursorAdapter } from './cursor/index.js'\n\nexport * from './claude-code/index.js'\nexport * from './cursor/index.js'\nexport * from './csv/index.js'\n\n/**\n * The adapter registry.\n *\n * Adding a source is: a new directory under src/, one line here. If a new\n * adapter ever needs a change in core or the UI, the contract was designed\n * wrong — fix the contract, not the adapter. See docs/adapters.md.\n */\nexport function allAdapters(): Adapter[] {\n return [new ClaudeCodeAdapter(), new CursorAdapter()]\n}\n\nexport async function detectAdapters(): Promise<Adapter[]> {\n const found: Adapter[] = []\n for (const adapter of allAdapters()) {\n if (await adapter.detect()) found.push(adapter)\n }\n return found\n}\n","export const entityKind = Symbol.for('drizzle:entityKind');\nexport const hasOwnEntityKind = Symbol.for('drizzle:hasOwnEntityKind');\n\nexport interface DrizzleEntity {\n\t[entityKind]: string;\n}\n\nexport type DrizzleEntityClass<T> =\n\t& ((abstract new(...args: any[]) => T) | (new(...args: any[]) => T))\n\t& DrizzleEntity;\n\nexport function is<T extends DrizzleEntityClass<any>>(value: any, type: T): value is InstanceType<T> {\n\tif (!value || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\n\tif (value instanceof type) { // eslint-disable-line no-instanceof/no-instanceof\n\t\treturn true;\n\t}\n\n\tif (!Object.prototype.hasOwnProperty.call(type, entityKind)) {\n\t\tthrow new Error(\n\t\t\t`Class \"${\n\t\t\t\ttype.name ?? '<unknown>'\n\t\t\t}\" doesn't look like a Drizzle entity. If this is incorrect and the class is provided by Drizzle, please report this as a bug.`,\n\t\t);\n\t}\n\n\tlet cls = Object.getPrototypeOf(value).constructor;\n\tif (cls) {\n\t\t// Traverse the prototype chain to find the entityKind\n\t\twhile (cls) {\n\t\t\tif (entityKind in cls && cls[entityKind] === type[entityKind]) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcls = Object.getPrototypeOf(cls);\n\t\t}\n\t}\n\n\treturn false;\n}\n","import { entityKind } from '~/entity.ts';\n\nexport interface Logger {\n\tlogQuery(query: string, params: unknown[]): void;\n}\n\nexport interface LogWriter {\n\twrite(message: string): void;\n}\n\nexport class ConsoleLogWriter implements LogWriter {\n\tstatic readonly [entityKind]: string = 'ConsoleLogWriter';\n\n\twrite(message: string) {\n\t\tconsole.log(message);\n\t}\n}\n\nexport class DefaultLogger implements Logger {\n\tstatic readonly [entityKind]: string = 'DefaultLogger';\n\n\treadonly writer: LogWriter;\n\n\tconstructor(config?: { writer: LogWriter }) {\n\t\tthis.writer = config?.writer ?? new ConsoleLogWriter();\n\t}\n\n\tlogQuery(query: string, params: unknown[]): void {\n\t\tconst stringifiedParams = params.map((p) => {\n\t\t\ttry {\n\t\t\t\treturn JSON.stringify(p);\n\t\t\t} catch {\n\t\t\t\treturn String(p);\n\t\t\t}\n\t\t});\n\t\tconst paramsStr = stringifiedParams.length ? ` -- params: [${stringifiedParams.join(', ')}]` : '';\n\t\tthis.writer.write(`Query: ${query}${paramsStr}`);\n\t}\n}\n\nexport class NoopLogger implements Logger {\n\tstatic readonly [entityKind]: string = 'NoopLogger';\n\n\tlogQuery(): void {\n\t\t// noop\n\t}\n}\n","/** @internal */\nexport const TableName = Symbol.for('drizzle:Name');\n","import type { Column, GetColumnData } from './column.ts';\nimport { entityKind } from './entity.ts';\nimport type { OptionalKeyOnly, RequiredKeyOnly } from './operations.ts';\nimport type { SQLWrapper } from './sql/sql.ts';\nimport { TableName } from './table.utils.ts';\nimport type { Simplify, Update } from './utils.ts';\n\nexport interface TableConfig<TColumn extends Column = Column<any>> {\n\tname: string;\n\tschema: string | undefined;\n\tcolumns: Record<string, TColumn>;\n\tdialect: string;\n}\n\nexport type UpdateTableConfig<T extends TableConfig, TUpdate extends Partial<TableConfig>> = Required<\n\tUpdate<T, TUpdate>\n>;\n\n/** @internal */\nexport const Schema = Symbol.for('drizzle:Schema');\n\n/** @internal */\nexport const Columns = Symbol.for('drizzle:Columns');\n\n/** @internal */\nexport const ExtraConfigColumns = Symbol.for('drizzle:ExtraConfigColumns');\n\n/** @internal */\nexport const OriginalName = Symbol.for('drizzle:OriginalName');\n\n/** @internal */\nexport const BaseName = Symbol.for('drizzle:BaseName');\n\n/** @internal */\nexport const IsAlias = Symbol.for('drizzle:IsAlias');\n\n/** @internal */\nexport const ExtraConfigBuilder = Symbol.for('drizzle:ExtraConfigBuilder');\n\nconst IsDrizzleTable = Symbol.for('drizzle:IsDrizzleTable');\n\nexport interface Table<\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tT extends TableConfig = TableConfig,\n> extends SQLWrapper {\n\t// SQLWrapper runtime implementation is defined in 'sql/sql.ts'\n}\n\nexport class Table<T extends TableConfig = TableConfig> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Table';\n\n\tdeclare readonly _: {\n\t\treadonly brand: 'Table';\n\t\treadonly config: T;\n\t\treadonly name: T['name'];\n\t\treadonly schema: T['schema'];\n\t\treadonly columns: T['columns'];\n\t\treadonly inferSelect: InferSelectModel<Table<T>>;\n\t\treadonly inferInsert: InferInsertModel<Table<T>>;\n\t};\n\n\tdeclare readonly $inferSelect: InferSelectModel<Table<T>>;\n\tdeclare readonly $inferInsert: InferInsertModel<Table<T>>;\n\n\t/** @internal */\n\tstatic readonly Symbol = {\n\t\tName: TableName as typeof TableName,\n\t\tSchema: Schema as typeof Schema,\n\t\tOriginalName: OriginalName as typeof OriginalName,\n\t\tColumns: Columns as typeof Columns,\n\t\tExtraConfigColumns: ExtraConfigColumns as typeof ExtraConfigColumns,\n\t\tBaseName: BaseName as typeof BaseName,\n\t\tIsAlias: IsAlias as typeof IsAlias,\n\t\tExtraConfigBuilder: ExtraConfigBuilder as typeof ExtraConfigBuilder,\n\t};\n\n\t/**\n\t * @internal\n\t * Can be changed if the table is aliased.\n\t */\n\t[TableName]: string;\n\n\t/**\n\t * @internal\n\t * Used to store the original name of the table, before any aliasing.\n\t */\n\t[OriginalName]: string;\n\n\t/** @internal */\n\t[Schema]: string | undefined;\n\n\t/** @internal */\n\t[Columns]!: T['columns'];\n\n\t/** @internal */\n\t[ExtraConfigColumns]!: Record<string, unknown>;\n\n\t/**\n\t * @internal\n\t * Used to store the table name before the transformation via the `tableCreator` functions.\n\t */\n\t[BaseName]: string;\n\n\t/** @internal */\n\t[IsAlias] = false;\n\n\t/** @internal */\n\t[IsDrizzleTable] = true;\n\n\t/** @internal */\n\t[ExtraConfigBuilder]: ((self: any) => Record<string, unknown> | unknown[]) | undefined = undefined;\n\n\tconstructor(name: string, schema: string | undefined, baseName: string) {\n\t\tthis[TableName] = this[OriginalName] = name;\n\t\tthis[Schema] = schema;\n\t\tthis[BaseName] = baseName;\n\t}\n}\n\nexport function isTable(table: unknown): table is Table {\n\treturn typeof table === 'object' && table !== null && IsDrizzleTable in table;\n}\n\n/**\n * Any table with a specified boundary.\n *\n * @example\n\t```ts\n\t// Any table with a specific name\n\ttype AnyUsersTable = AnyTable<{ name: 'users' }>;\n\t```\n *\n * To describe any table with any config, simply use `Table` without any type arguments, like this:\n *\n\t```ts\n\tfunction needsTable(table: Table) {\n\t\t...\n\t}\n\t```\n */\nexport type AnyTable<TPartial extends Partial<TableConfig>> = Table<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport function getTableName<T extends Table>(table: T): T['_']['name'] {\n\treturn table[TableName];\n}\n\nexport function getTableUniqueName<T extends Table>(table: T): `${T['_']['schema']}.${T['_']['name']}` {\n\treturn `${table[Schema] ?? 'public'}.${table[TableName]}`;\n}\n\nexport type MapColumnName<TName extends string, TColumn extends Column, TDBColumNames extends boolean> =\n\tTDBColumNames extends true ? TColumn['_']['name']\n\t\t: TName;\n\nexport type InferModelFromColumns<\n\tTColumns extends Record<string, Column>,\n\tTInferMode extends 'select' | 'insert' = 'select',\n\tTConfig extends { dbColumnNames: boolean; override?: boolean } = { dbColumnNames: false; override: false },\n> = Simplify<\n\tTInferMode extends 'insert' ?\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as RequiredKeyOnly<\n\t\t\t\t\t\tMapColumnName<Key, TColumns[Key], TConfig['dbColumnNames']>,\n\t\t\t\t\t\tTColumns[Key]\n\t\t\t\t\t>\n\t\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t\t}\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as OptionalKeyOnly<\n\t\t\t\t\t\tMapColumnName<Key, TColumns[Key], TConfig['dbColumnNames']>,\n\t\t\t\t\t\tTColumns[Key],\n\t\t\t\t\t\tTConfig['override']\n\t\t\t\t\t>\n\t\t\t\t]?: GetColumnData<TColumns[Key], 'query'> | undefined;\n\t\t\t}\n\t\t: {\n\t\t\t[\n\t\t\t\tKey in keyof TColumns & string as MapColumnName<\n\t\t\t\t\tKey,\n\t\t\t\t\tTColumns[Key],\n\t\t\t\t\tTConfig['dbColumnNames']\n\t\t\t\t>\n\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t}\n>;\n\n/** @deprecated Use one of the alternatives: {@link InferSelectModel} / {@link InferInsertModel}, or `table.$inferSelect` / `table.$inferInsert`\n */\nexport type InferModel<\n\tTTable extends Table,\n\tTInferMode extends 'select' | 'insert' = 'select',\n\tTConfig extends { dbColumnNames: boolean } = { dbColumnNames: false },\n> = InferModelFromColumns<TTable['_']['columns'], TInferMode, TConfig>;\n\nexport type InferSelectModel<\n\tTTable extends Table,\n\tTConfig extends { dbColumnNames: boolean } = { dbColumnNames: false },\n> = InferModelFromColumns<TTable['_']['columns'], 'select', TConfig>;\n\nexport type InferInsertModel<\n\tTTable extends Table,\n\tTConfig extends { dbColumnNames: boolean; override?: boolean } = { dbColumnNames: false; override: false },\n> = InferModelFromColumns<TTable['_']['columns'], 'insert', TConfig>;\n\nexport type InferEnum<T> = T extends { enumValues: readonly (infer U)[] } ? U\n\t: never;\n","import type {\n\tColumnBuilderBaseConfig,\n\tColumnBuilderRuntimeConfig,\n\tColumnDataType,\n\tGeneratedColumnConfig,\n\tGeneratedIdentityConfig,\n} from './column-builder.ts';\nimport { entityKind } from './entity.ts';\nimport type { DriverValueMapper, SQL, SQLWrapper } from './sql/sql.ts';\nimport type { Table } from './table.ts';\nimport type { Update } from './utils.ts';\n\nexport interface ColumnBaseConfig<\n\tTDataType extends ColumnDataType,\n\tTColumnType extends string,\n> extends ColumnBuilderBaseConfig<TDataType, TColumnType> {\n\ttableName: string;\n\tnotNull: boolean;\n\thasDefault: boolean;\n\tisPrimaryKey: boolean;\n\tisAutoincrement: boolean;\n\thasRuntimeDefault: boolean;\n}\n\nexport type ColumnTypeConfig<T extends ColumnBaseConfig<ColumnDataType, string>, TTypeConfig extends object> = T & {\n\tbrand: 'Column';\n\ttableName: T['tableName'];\n\tname: T['name'];\n\tdataType: T['dataType'];\n\tcolumnType: T['columnType'];\n\tdata: T['data'];\n\tdriverParam: T['driverParam'];\n\tnotNull: T['notNull'];\n\thasDefault: T['hasDefault'];\n\tisPrimaryKey: T['isPrimaryKey'];\n\tisAutoincrement: T['isAutoincrement'];\n\thasRuntimeDefault: T['hasRuntimeDefault'];\n\tenumValues: T['enumValues'];\n\tbaseColumn: T extends { baseColumn: infer U } ? U : unknown;\n\tgenerated: GeneratedColumnConfig<T['data']> | undefined;\n\tidentity: undefined | 'always' | 'byDefault';\n} & TTypeConfig;\n\nexport type ColumnRuntimeConfig<TData, TRuntimeConfig extends object> = ColumnBuilderRuntimeConfig<\n\tTData,\n\tTRuntimeConfig\n>;\n\nexport interface Column<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTRuntimeConfig extends object = object,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTTypeConfig extends object = object,\n> extends DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {\n\t// SQLWrapper runtime implementation is defined in 'sql/sql.ts'\n}\n/*\n\t`Column` only accepts a full `ColumnConfig` as its generic.\n\tTo infer parts of the config, use `AnyColumn` that accepts a partial config.\n\tSee `GetColumnData` for example usage of inferring.\n*/\nexport abstract class Column<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n\tTTypeConfig extends object = object,\n> implements DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Column';\n\n\tdeclare readonly _: ColumnTypeConfig<T, TTypeConfig>;\n\n\treadonly name: string;\n\treadonly keyAsName: boolean;\n\treadonly primary: boolean;\n\treadonly notNull: boolean;\n\treadonly default: T['data'] | SQL | undefined;\n\treadonly defaultFn: (() => T['data'] | SQL) | undefined;\n\treadonly onUpdateFn: (() => T['data'] | SQL) | undefined;\n\treadonly hasDefault: boolean;\n\treadonly isUnique: boolean;\n\treadonly uniqueName: string | undefined;\n\treadonly uniqueType: string | undefined;\n\treadonly dataType: T['dataType'];\n\treadonly columnType: T['columnType'];\n\treadonly enumValues: T['enumValues'] = undefined;\n\treadonly generated: GeneratedColumnConfig<T['data']> | undefined = undefined;\n\treadonly generatedIdentity: GeneratedIdentityConfig | undefined = undefined;\n\n\tprotected config: ColumnRuntimeConfig<T['data'], TRuntimeConfig>;\n\n\tconstructor(\n\t\treadonly table: Table,\n\t\tconfig: ColumnRuntimeConfig<T['data'], TRuntimeConfig>,\n\t) {\n\t\tthis.config = config;\n\t\tthis.name = config.name;\n\t\tthis.keyAsName = config.keyAsName;\n\t\tthis.notNull = config.notNull;\n\t\tthis.default = config.default;\n\t\tthis.defaultFn = config.defaultFn;\n\t\tthis.onUpdateFn = config.onUpdateFn;\n\t\tthis.hasDefault = config.hasDefault;\n\t\tthis.primary = config.primaryKey;\n\t\tthis.isUnique = config.isUnique;\n\t\tthis.uniqueName = config.uniqueName;\n\t\tthis.uniqueType = config.uniqueType;\n\t\tthis.dataType = config.dataType as T['dataType'];\n\t\tthis.columnType = config.columnType;\n\t\tthis.generated = config.generated;\n\t\tthis.generatedIdentity = config.generatedIdentity;\n\t}\n\n\tabstract getSQLType(): string;\n\n\tmapFromDriverValue(value: unknown): unknown {\n\t\treturn value;\n\t}\n\n\tmapToDriverValue(value: unknown): unknown {\n\t\treturn value;\n\t}\n\n\t// ** @internal */\n\tshouldDisableInsert(): boolean {\n\t\treturn this.config.generated !== undefined && this.config.generated.type !== 'byDefault';\n\t}\n}\n\nexport type UpdateColConfig<\n\tT extends ColumnBaseConfig<ColumnDataType, string>,\n\tTUpdate extends Partial<ColumnBaseConfig<ColumnDataType, string>>,\n> = Update<T, TUpdate>;\n\nexport type AnyColumn<TPartial extends Partial<ColumnBaseConfig<ColumnDataType, string>> = {}> = Column<\n\tRequired<Update<ColumnBaseConfig<ColumnDataType, string>, TPartial>>\n>;\n\nexport type GetColumnData<TColumn extends Column, TInferMode extends 'query' | 'raw' = 'query'> =\n\t// dprint-ignore\n\tTInferMode extends 'raw' // Raw mode\n\t\t? TColumn['_']['data'] // Just return the underlying type\n\t\t: TColumn['_']['notNull'] extends true // Query mode\n\t\t? TColumn['_']['data'] // Query mode, not null\n\t\t: TColumn['_']['data'] | null; // Query mode, nullable\n\nexport type InferColumnsDataTypes<TColumns extends Record<string, Column>> = {\n\t[Key in keyof TColumns]: GetColumnData<TColumns[Key], 'query'>;\n};\n","import { entityKind } from '~/entity.ts';\nimport type { Column } from './column.ts';\nimport type { GelColumn, GelExtraConfigColumn } from './gel-core/index.ts';\nimport type { MySqlColumn } from './mysql-core/index.ts';\nimport type { ExtraConfigColumn, PgColumn, PgSequenceOptions } from './pg-core/index.ts';\nimport type { SingleStoreColumn } from './singlestore-core/index.ts';\nimport type { SQL } from './sql/sql.ts';\nimport type { SQLiteColumn } from './sqlite-core/index.ts';\nimport type { Assume, Simplify } from './utils.ts';\n\nexport type ColumnDataType =\n\t| 'string'\n\t| 'number'\n\t| 'boolean'\n\t| 'array'\n\t| 'json'\n\t| 'date'\n\t| 'bigint'\n\t| 'custom'\n\t| 'buffer'\n\t| 'dateDuration'\n\t| 'duration'\n\t| 'relDuration'\n\t| 'localTime'\n\t| 'localDate'\n\t| 'localDateTime';\n\nexport type Dialect = 'pg' | 'mysql' | 'sqlite' | 'singlestore' | 'common' | 'gel';\n\nexport type GeneratedStorageMode = 'virtual' | 'stored';\n\nexport type GeneratedType = 'always' | 'byDefault';\n\nexport type GeneratedColumnConfig<TDataType> = {\n\tas: TDataType | SQL | (() => SQL);\n\ttype?: GeneratedType;\n\tmode?: GeneratedStorageMode;\n};\n\nexport type GeneratedIdentityConfig = {\n\tsequenceName?: string;\n\tsequenceOptions?: PgSequenceOptions;\n\ttype: 'always' | 'byDefault';\n};\n\nexport interface ColumnBuilderBaseConfig<TDataType extends ColumnDataType, TColumnType extends string> {\n\tname: string;\n\tdataType: TDataType;\n\tcolumnType: TColumnType;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tenumValues: string[] | undefined;\n}\n\nexport type MakeColumnConfig<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTableName extends string,\n\tTData = T extends { $type: infer U } ? U : T['data'],\n> = {\n\tname: T['name'];\n\ttableName: TTableName;\n\tdataType: T['dataType'];\n\tcolumnType: T['columnType'];\n\tdata: TData;\n\tdriverParam: T['driverParam'];\n\tnotNull: T extends { notNull: true } ? true : false;\n\thasDefault: T extends { hasDefault: true } ? true : false;\n\tisPrimaryKey: T extends { isPrimaryKey: true } ? true : false;\n\tisAutoincrement: T extends { isAutoincrement: true } ? true : false;\n\thasRuntimeDefault: T extends { hasRuntimeDefault: true } ? true : false;\n\tenumValues: T['enumValues'];\n\tbaseColumn: T extends { baseBuilder: infer U extends ColumnBuilderBase } ? BuildColumn<TTableName, U, 'common'>\n\t\t: never;\n\tidentity: T extends { identity: 'always' } ? 'always' : T extends { identity: 'byDefault' } ? 'byDefault' : undefined;\n\tgenerated: T extends { generated: infer G } ? unknown extends G ? undefined\n\t\t: G extends undefined ? undefined\n\t\t: G\n\t\t: undefined;\n} & {};\n\nexport type ColumnBuilderTypeConfig<\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTypeConfig extends object = object,\n> = Simplify<\n\t& {\n\t\tbrand: 'ColumnBuilder';\n\t\tname: T['name'];\n\t\tdataType: T['dataType'];\n\t\tcolumnType: T['columnType'];\n\t\tdata: T['data'];\n\t\tdriverParam: T['driverParam'];\n\t\tnotNull: T extends { notNull: infer U } ? U : boolean;\n\t\thasDefault: T extends { hasDefault: infer U } ? U : boolean;\n\t\tenumValues: T['enumValues'];\n\t\tidentity: T extends { identity: infer U } ? U : unknown;\n\t\tgenerated: T extends { generated: infer G } ? G extends undefined ? unknown : G : unknown;\n\t}\n\t& TTypeConfig\n>;\n\nexport type ColumnBuilderRuntimeConfig<TData, TRuntimeConfig extends object = object> = {\n\tname: string;\n\tkeyAsName: boolean;\n\tnotNull: boolean;\n\tdefault: TData | SQL | undefined;\n\tdefaultFn: (() => TData | SQL) | undefined;\n\tonUpdateFn: (() => TData | SQL) | undefined;\n\thasDefault: boolean;\n\tprimaryKey: boolean;\n\tisUnique: boolean;\n\tuniqueName: string | undefined;\n\tuniqueType: string | undefined;\n\tdataType: string;\n\tcolumnType: string;\n\tgenerated: GeneratedColumnConfig<TData> | undefined;\n\tgeneratedIdentity: GeneratedIdentityConfig | undefined;\n} & TRuntimeConfig;\n\nexport interface ColumnBuilderExtraConfig {\n\tprimaryKeyHasDefault?: boolean;\n}\n\nexport type NotNull<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\tnotNull: true;\n\t};\n};\n\nexport type HasDefault<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\thasDefault: true;\n\t};\n};\n\nexport type IsPrimaryKey<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\tisPrimaryKey: true;\n\t};\n};\n\nexport type IsAutoincrement<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\tisAutoincrement: true;\n\t};\n};\n\nexport type HasRuntimeDefault<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\thasRuntimeDefault: true;\n\t};\n};\n\nexport type $Type<T extends ColumnBuilderBase, TType> = T & {\n\t_: {\n\t\t$type: TType;\n\t};\n};\n\nexport type HasGenerated<T extends ColumnBuilderBase, TGenerated extends {} = {}> = T & {\n\t_: {\n\t\thasDefault: true;\n\t\tgenerated: TGenerated;\n\t};\n};\n\nexport type IsIdentity<\n\tT extends ColumnBuilderBase,\n\tTType extends 'always' | 'byDefault',\n> = T & {\n\t_: {\n\t\tnotNull: true;\n\t\thasDefault: true;\n\t\tidentity: TType;\n\t};\n};\nexport interface ColumnBuilderBase<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTypeConfig extends object = object,\n> {\n\t_: ColumnBuilderTypeConfig<T, TTypeConfig>;\n}\n\n// To understand how to use `ColumnBuilder` and `AnyColumnBuilder`, see `Column` and `AnyColumn` documentation.\nexport abstract class ColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n\tTTypeConfig extends object = object,\n\tTExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig,\n> implements ColumnBuilderBase<T, TTypeConfig> {\n\tstatic readonly [entityKind]: string = 'ColumnBuilder';\n\n\tdeclare _: ColumnBuilderTypeConfig<T, TTypeConfig>;\n\n\tprotected config: ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>;\n\n\tconstructor(name: T['name'], dataType: T['dataType'], columnType: T['columnType']) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tkeyAsName: name === '',\n\t\t\tnotNull: false,\n\t\t\tdefault: undefined,\n\t\t\thasDefault: false,\n\t\t\tprimaryKey: false,\n\t\t\tisUnique: false,\n\t\t\tuniqueName: undefined,\n\t\t\tuniqueType: undefined,\n\t\t\tdataType,\n\t\t\tcolumnType,\n\t\t\tgenerated: undefined,\n\t\t} as ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>;\n\t}\n\n\t/**\n\t * Changes the data type of the column. Commonly used with `json` columns. Also, useful for branded types.\n\t *\n\t * @example\n\t * ```ts\n\t * const users = pgTable('users', {\n\t * \tid: integer('id').$type<UserId>().primaryKey(),\n\t * \tdetails: json('details').$type<UserDetails>().notNull(),\n\t * });\n\t * ```\n\t */\n\t$type<TType>(): $Type<this, TType> {\n\t\treturn this as $Type<this, TType>;\n\t}\n\n\t/**\n\t * Adds a `not null` clause to the column definition.\n\t *\n\t * Affects the `select` model of the table - columns *without* `not null` will be nullable on select.\n\t */\n\tnotNull(): NotNull<this> {\n\t\tthis.config.notNull = true;\n\t\treturn this as NotNull<this>;\n\t}\n\n\t/**\n\t * Adds a `default <value>` clause to the column definition.\n\t *\n\t * Affects the `insert` model of the table - columns *with* `default` are optional on insert.\n\t *\n\t * If you need to set a dynamic default value, use {@link $defaultFn} instead.\n\t */\n\tdefault(value: (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL): HasDefault<this> {\n\t\tthis.config.default = value;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Adds a dynamic default value to the column.\n\t * The function will be called when the row is inserted, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$defaultFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasRuntimeDefault<HasDefault<this>> {\n\t\tthis.config.defaultFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasRuntimeDefault<HasDefault<this>>;\n\t}\n\n\t/**\n\t * Alias for {@link $defaultFn}.\n\t */\n\t$default = this.$defaultFn;\n\n\t/**\n\t * Adds a dynamic update value to the column.\n\t * The function will be called when the row is updated, and the returned value will be used as the column value if none is provided.\n\t * If no `default` (or `$defaultFn`) value is provided, the function will be called when the row is inserted as well, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$onUpdateFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasDefault<this> {\n\t\tthis.config.onUpdateFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $onUpdateFn}.\n\t */\n\t$onUpdate = this.$onUpdateFn;\n\n\t/**\n\t * Adds a `primary key` clause to the column definition. This implicitly makes the column `not null`.\n\t *\n\t * In SQLite, `integer primary key` implicitly makes the column auto-incrementing.\n\t */\n\tprimaryKey(): TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<NotNull<this>>>\n\t\t: IsPrimaryKey<NotNull<this>>\n\t{\n\t\tthis.config.primaryKey = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<NotNull<this>>>\n\t\t\t: IsPrimaryKey<NotNull<this>>;\n\t}\n\n\tabstract generatedAlwaysAs(\n\t\tas: SQL | T['data'] | (() => SQL),\n\t\tconfig?: Partial<GeneratedColumnConfig<unknown>>,\n\t): HasGenerated<this, {\n\t\ttype: 'always';\n\t}>;\n\n\t/** @internal Sets the name of the column to the key within the table definition if a name was not given. */\n\tsetName(name: string) {\n\t\tif (this.config.name !== '') return;\n\t\tthis.config.name = name;\n\t}\n}\n\nexport type BuildColumn<\n\tTTableName extends string,\n\tTBuilder extends ColumnBuilderBase,\n\tTDialect extends Dialect,\n> = TDialect extends 'pg' ? PgColumn<\n\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t{},\n\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t>\n\t: TDialect extends 'mysql' ? MySqlColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<\n\t\t\t\tOmit<\n\t\t\t\t\tTBuilder['_'],\n\t\t\t\t\t| keyof MakeColumnConfig<TBuilder['_'], TTableName>\n\t\t\t\t\t| 'brand'\n\t\t\t\t\t| 'dialect'\n\t\t\t\t\t| 'primaryKeyHasDefault'\n\t\t\t\t\t| 'mysqlColumnBuilderBrand'\n\t\t\t\t>\n\t\t\t>\n\t\t>\n\t: TDialect extends 'sqlite' ? SQLiteColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t\t>\n\t: TDialect extends 'common' ? Column<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t\t>\n\t: TDialect extends 'singlestore' ? SingleStoreColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<\n\t\t\t\tOmit<\n\t\t\t\t\tTBuilder['_'],\n\t\t\t\t\t| keyof MakeColumnConfig<TBuilder['_'], TTableName>\n\t\t\t\t\t| 'brand'\n\t\t\t\t\t| 'dialect'\n\t\t\t\t\t| 'primaryKeyHasDefault'\n\t\t\t\t\t| 'singlestoreColumnBuilderBrand'\n\t\t\t\t>\n\t\t\t>\n\t\t>\n\t: TDialect extends 'gel' ? GelColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t\t>\n\t: never;\n\nexport type BuildIndexColumn<\n\tTDialect extends Dialect,\n> = TDialect extends 'pg' ? ExtraConfigColumn\n\t: TDialect extends 'gel' ? GelExtraConfigColumn\n\t: never;\n\n// TODO\n// try to make sql as well + indexRaw\n\n// optional after everything will be working as expected\n// also try to leave only needed methods for extraConfig\n// make an error if I pass .asc() to fk and so on\n\nexport type BuildColumns<\n\tTTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildColumn<TTableName, {\n\t\t\t_:\n\t\t\t\t& Omit<TConfigMap[Key]['_'], 'name'>\n\t\t\t\t& { name: TConfigMap[Key]['_']['name'] extends '' ? Assume<Key, string> : TConfigMap[Key]['_']['name'] };\n\t\t}, TDialect>;\n\t}\n\t& {};\n\nexport type BuildExtraConfigColumns<\n\t_TTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildIndexColumn<TDialect>;\n\t}\n\t& {};\n\nexport type ChangeColumnTableName<TColumn extends Column, TAlias extends string, TDialect extends Dialect> =\n\tTDialect extends 'pg' ? PgColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'mysql' ? MySqlColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'singlestore' ? SingleStoreColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'sqlite' ? SQLiteColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'gel' ? GelColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: never;\n","import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport type { NonArray, Writable } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\n// Enum as ts enum\n\nexport type PgEnumObjectColumnBuilderInitial<TName extends string, TValues extends object> = PgEnumObjectColumnBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgEnumObjectColumn';\n\tdata: TValues[keyof TValues];\n\tenumValues: string[];\n\tdriverParam: string;\n}>;\n\nexport interface PgEnumObject<TValues extends object> {\n\t(): PgEnumObjectColumnBuilderInitial<'', TValues>;\n\t<TName extends string>(name: TName): PgEnumObjectColumnBuilderInitial<TName, TValues>;\n\t<TName extends string>(name?: TName): PgEnumObjectColumnBuilderInitial<TName, TValues>;\n\n\treadonly enumName: string;\n\treadonly enumValues: string[];\n\treadonly schema: string | undefined;\n\t/** @internal */\n\t[isPgEnumSym]: true;\n}\n\nexport class PgEnumObjectColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<'string', 'PgEnumObjectColumn'> & { enumValues: string[] },\n> extends PgColumnBuilder<T, { enum: PgEnumObject<any> }> {\n\tstatic override readonly [entityKind]: string = 'PgEnumObjectColumnBuilder';\n\n\tconstructor(name: T['name'], enumInstance: PgEnumObject<any>) {\n\t\tsuper(name, 'string', 'PgEnumObjectColumn');\n\t\tthis.config.enum = enumInstance;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgEnumObjectColumn<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgEnumObjectColumn<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgEnumObjectColumn<T extends ColumnBaseConfig<'string', 'PgEnumObjectColumn'> & { enumValues: object }>\n\textends PgColumn<T, { enum: PgEnumObject<object> }>\n{\n\tstatic override readonly [entityKind]: string = 'PgEnumObjectColumn';\n\n\treadonly enum;\n\toverride readonly enumValues = this.config.enum.enumValues;\n\n\tconstructor(\n\t\ttable: AnyPgTable<{ name: T['tableName'] }>,\n\t\tconfig: PgEnumObjectColumnBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config);\n\t\tthis.enum = config.enum;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn this.enum.enumName;\n\t}\n}\n\n// Enum as string union\n\nexport type PgEnumColumnBuilderInitial<TName extends string, TValues extends [string, ...string[]]> =\n\tPgEnumColumnBuilder<{\n\t\tname: TName;\n\t\tdataType: 'string';\n\t\tcolumnType: 'PgEnumColumn';\n\t\tdata: TValues[number];\n\t\tenumValues: TValues;\n\t\tdriverParam: string;\n\t}>;\n\nconst isPgEnumSym = Symbol.for('drizzle:isPgEnum');\nexport interface PgEnum<TValues extends [string, ...string[]]> {\n\t(): PgEnumColumnBuilderInitial<'', TValues>;\n\t<TName extends string>(name: TName): PgEnumColumnBuilderInitial<TName, TValues>;\n\t<TName extends string>(name?: TName): PgEnumColumnBuilderInitial<TName, TValues>;\n\n\treadonly enumName: string;\n\treadonly enumValues: TValues;\n\treadonly schema: string | undefined;\n\t/** @internal */\n\t[isPgEnumSym]: true;\n}\n\nexport function isPgEnum(obj: unknown): obj is PgEnum<[string, ...string[]]> {\n\treturn !!obj && typeof obj === 'function' && isPgEnumSym in obj && obj[isPgEnumSym] === true;\n}\n\nexport class PgEnumColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<'string', 'PgEnumColumn'> & { enumValues: [string, ...string[]] },\n> extends PgColumnBuilder<T, { enum: PgEnum<T['enumValues']> }> {\n\tstatic override readonly [entityKind]: string = 'PgEnumColumnBuilder';\n\n\tconstructor(name: T['name'], enumInstance: PgEnum<T['enumValues']>) {\n\t\tsuper(name, 'string', 'PgEnumColumn');\n\t\tthis.config.enum = enumInstance;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgEnumColumn<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgEnumColumn<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgEnumColumn<T extends ColumnBaseConfig<'string', 'PgEnumColumn'> & { enumValues: [string, ...string[]] }>\n\textends PgColumn<T, { enum: PgEnum<T['enumValues']> }>\n{\n\tstatic override readonly [entityKind]: string = 'PgEnumColumn';\n\n\treadonly enum = this.config.enum;\n\toverride readonly enumValues = this.config.enum.enumValues;\n\n\tconstructor(\n\t\ttable: AnyPgTable<{ name: T['tableName'] }>,\n\t\tconfig: PgEnumColumnBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config);\n\t\tthis.enum = config.enum;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn this.enum.enumName;\n\t}\n}\n\nexport function pgEnum<U extends string, T extends Readonly<[U, ...U[]]>>(\n\tenumName: string,\n\tvalues: T | Writable<T>,\n): PgEnum<Writable<T>>;\n\nexport function pgEnum<E extends Record<string, string>>(\n\tenumName: string,\n\tenumObj: NonArray<E>,\n): PgEnumObject<E>;\n\nexport function pgEnum(\n\tenumName: any,\n\tinput: any,\n): any {\n\treturn Array.isArray(input)\n\t\t? pgEnumWithSchema(enumName, [...input] as [string, ...string[]], undefined)\n\t\t: pgEnumObjectWithSchema(enumName, input, undefined);\n}\n\n/** @internal */\nexport function pgEnumWithSchema<U extends string, T extends Readonly<[U, ...U[]]>>(\n\tenumName: string,\n\tvalues: T | Writable<T>,\n\tschema?: string,\n): PgEnum<Writable<T>> {\n\tconst enumInstance: PgEnum<Writable<T>> = Object.assign(\n\t\t<TName extends string>(name?: TName): PgEnumColumnBuilderInitial<TName, Writable<T>> =>\n\t\t\tnew PgEnumColumnBuilder(name ?? '' as TName, enumInstance),\n\t\t{\n\t\t\tenumName,\n\t\t\tenumValues: values,\n\t\t\tschema,\n\t\t\t[isPgEnumSym]: true,\n\t\t} as const,\n\t);\n\n\treturn enumInstance;\n}\n\n/** @internal */\nexport function pgEnumObjectWithSchema<T extends object>(\n\tenumName: string,\n\tvalues: T,\n\tschema?: string,\n): PgEnumObject<T> {\n\tconst enumInstance: PgEnumObject<T> = Object.assign(\n\t\t<TName extends string>(name?: TName): PgEnumObjectColumnBuilderInitial<TName, T> =>\n\t\t\tnew PgEnumObjectColumnBuilder(name ?? '' as TName, enumInstance),\n\t\t{\n\t\t\tenumName,\n\t\t\tenumValues: Object.values(values),\n\t\t\tschema,\n\t\t\t[isPgEnumSym]: true,\n\t\t} as const,\n\t);\n\n\treturn enumInstance;\n}\n","import { entityKind } from './entity.ts';\nimport type { SQL, SQLWrapper } from './sql/sql.ts';\n\nexport interface Subquery<\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTAlias extends string = string,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTSelectedFields extends Record<string, unknown> = Record<string, unknown>,\n> extends SQLWrapper {\n\t// SQLWrapper runtime implementation is defined in 'sql/sql.ts'\n}\nexport class Subquery<\n\tTAlias extends string = string,\n\tTSelectedFields extends Record<string, unknown> = Record<string, unknown>,\n> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Subquery';\n\n\tdeclare _: {\n\t\tbrand: 'Subquery';\n\t\tsql: SQL;\n\t\tselectedFields: TSelectedFields;\n\t\talias: TAlias;\n\t\tisWith: boolean;\n\t\tusedTables?: string[];\n\t};\n\n\tconstructor(sql: SQL, fields: TSelectedFields, alias: string, isWith = false, usedTables: string[] = []) {\n\t\tthis._ = {\n\t\t\tbrand: 'Subquery',\n\t\t\tsql,\n\t\t\tselectedFields: fields as TSelectedFields,\n\t\t\talias: alias as TAlias,\n\t\t\tisWith,\n\t\t\tusedTables,\n\t\t};\n\t}\n\n\t// getSQL(): SQL<unknown> {\n\t// \treturn new SQL([this]);\n\t// }\n}\n\nexport class WithSubquery<\n\tTAlias extends string = string,\n\tTSelection extends Record<string, unknown> = Record<string, unknown>,\n> extends Subquery<TAlias, TSelection> {\n\tstatic override readonly [entityKind]: string = 'WithSubquery';\n}\n\nexport type WithSubqueryWithoutSelection<TAlias extends string> = WithSubquery<TAlias, {}>;\n","import type { Span, Tracer } from '@opentelemetry/api';\nimport { iife } from '~/tracing-utils.ts';\nimport { npmVersion } from '~/version.ts';\n\nlet otel: typeof import('@opentelemetry/api') | undefined;\nlet rawTracer: Tracer | undefined;\n// try {\n// \totel = await import('@opentelemetry/api');\n// } catch (err: any) {\n// \tif (err.code !== 'MODULE_NOT_FOUND' && err.code !== 'ERR_MODULE_NOT_FOUND') {\n// \t\tthrow err;\n// \t}\n// }\n\ntype SpanName =\n\t| 'drizzle.operation'\n\t| 'drizzle.prepareQuery'\n\t| 'drizzle.buildSQL'\n\t| 'drizzle.execute'\n\t| 'drizzle.driver.execute'\n\t| 'drizzle.mapResponse';\n\n/** @internal */\nexport const tracer = {\n\tstartActiveSpan<F extends (span?: Span) => unknown>(name: SpanName, fn: F): ReturnType<F> {\n\t\tif (!otel) {\n\t\t\treturn fn() as ReturnType<F>;\n\t\t}\n\n\t\tif (!rawTracer) {\n\t\t\trawTracer = otel.trace.getTracer('drizzle-orm', npmVersion);\n\t\t}\n\n\t\treturn iife(\n\t\t\t(otel, rawTracer) =>\n\t\t\t\trawTracer.startActiveSpan(\n\t\t\t\t\tname,\n\t\t\t\t\t((span: Span) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\treturn fn(span);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\t\t\tcode: otel.SpanStatusCode.ERROR,\n\t\t\t\t\t\t\t\tmessage: e instanceof Error ? e.message : 'Unknown error', // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tspan.end();\n\t\t\t\t\t\t}\n\t\t\t\t\t}) as F,\n\t\t\t\t),\n\t\t\totel,\n\t\t\trawTracer,\n\t\t);\n\t},\n};\n","export const ViewBaseConfig = Symbol.for('drizzle:ViewBaseConfig');\n","import type { CasingCache } from '~/casing.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { isPgEnum } from '~/pg-core/columns/enum.ts';\nimport type { SelectResult } from '~/query-builders/select.types.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { tracer } from '~/tracing.ts';\nimport type { Assume, Equal } from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type { AnyColumn } from '../column.ts';\nimport { Column } from '../column.ts';\nimport { IsAlias, Table } from '../table.ts';\n\n/**\n * This class is used to indicate a primitive param value that is used in `sql` tag.\n * It is only used on type level and is never instantiated at runtime.\n * If you see a value of this type in the code, its runtime value is actually the primitive param value.\n */\nexport class FakePrimitiveParam {\n\tstatic readonly [entityKind]: string = 'FakePrimitiveParam';\n}\n\nexport type Chunk =\n\t| string\n\t| Table\n\t| View\n\t| AnyColumn\n\t| Name\n\t| Param\n\t| Placeholder\n\t| SQL;\n\nexport interface BuildQueryConfig {\n\tcasing: CasingCache;\n\tescapeName(name: string): string;\n\tescapeParam(num: number, value: unknown): string;\n\tescapeString(str: string): string;\n\tprepareTyping?: (encoder: DriverValueEncoder<unknown, unknown>) => QueryTypingsValue;\n\tparamStartIndex?: { value: number };\n\tinlineParams?: boolean;\n\tinvokeSource?: 'indexes' | undefined;\n}\n\nexport type QueryTypingsValue = 'json' | 'decimal' | 'time' | 'timestamp' | 'uuid' | 'date' | 'none';\n\nexport interface Query {\n\tsql: string;\n\tparams: unknown[];\n}\n\nexport interface QueryWithTypings extends Query {\n\ttypings?: QueryTypingsValue[];\n}\n\n/**\n * Any value that implements the `getSQL` method. The implementations include:\n * - `Table`\n * - `Column`\n * - `View`\n * - `Subquery`\n * - `SQL`\n * - `SQL.Aliased`\n * - `Placeholder`\n * - `Param`\n */\nexport interface SQLWrapper {\n\tgetSQL(): SQL;\n\tshouldOmitSQLParens?(): boolean;\n}\n\nexport function isSQLWrapper(value: unknown): value is SQLWrapper {\n\treturn value !== null && value !== undefined && typeof (value as any).getSQL === 'function';\n}\n\nfunction mergeQueries(queries: QueryWithTypings[]): QueryWithTypings {\n\tconst result: QueryWithTypings = { sql: '', params: [] };\n\tfor (const query of queries) {\n\t\tresult.sql += query.sql;\n\t\tresult.params.push(...query.params);\n\t\tif (query.typings?.length) {\n\t\t\tif (!result.typings) {\n\t\t\t\tresult.typings = [];\n\t\t\t}\n\t\t\tresult.typings.push(...query.typings);\n\t\t}\n\t}\n\treturn result;\n}\n\nexport class StringChunk implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'StringChunk';\n\n\treadonly value: string[];\n\n\tconstructor(value: string | string[]) {\n\t\tthis.value = Array.isArray(value) ? value : [value];\n\t}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\nexport class SQL<T = unknown> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'SQL';\n\n\tdeclare _: {\n\t\tbrand: 'SQL';\n\t\ttype: T;\n\t};\n\n\t/** @internal */\n\tdecoder: DriverValueDecoder<T, any> = noopDecoder;\n\tprivate shouldInlineParams = false;\n\n\t/** @internal */\n\tusedTables: string[] = [];\n\n\tconstructor(readonly queryChunks: SQLChunk[]) {\n\t\tfor (const chunk of queryChunks) {\n\t\t\tif (is(chunk, Table)) {\n\t\t\t\tconst schemaName = chunk[Table.Symbol.Schema];\n\n\t\t\t\tthis.usedTables.push(\n\t\t\t\t\tschemaName === undefined\n\t\t\t\t\t\t? chunk[Table.Symbol.Name]\n\t\t\t\t\t\t: schemaName + '.' + chunk[Table.Symbol.Name],\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tappend(query: SQL): this {\n\t\tthis.queryChunks.push(...query.queryChunks);\n\t\treturn this;\n\t}\n\n\ttoQuery(config: BuildQueryConfig): QueryWithTypings {\n\t\treturn tracer.startActiveSpan('drizzle.buildSQL', (span) => {\n\t\t\tconst query = this.buildQueryFromSourceParams(this.queryChunks, config);\n\t\t\tspan?.setAttributes({\n\t\t\t\t'drizzle.query.text': query.sql,\n\t\t\t\t'drizzle.query.params': JSON.stringify(query.params),\n\t\t\t});\n\t\t\treturn query;\n\t\t});\n\t}\n\n\tbuildQueryFromSourceParams(chunks: SQLChunk[], _config: BuildQueryConfig): Query {\n\t\tconst config = Object.assign({}, _config, {\n\t\t\tinlineParams: _config.inlineParams || this.shouldInlineParams,\n\t\t\tparamStartIndex: _config.paramStartIndex || { value: 0 },\n\t\t});\n\n\t\tconst {\n\t\t\tcasing,\n\t\t\tescapeName,\n\t\t\tescapeParam,\n\t\t\tprepareTyping,\n\t\t\tinlineParams,\n\t\t\tparamStartIndex,\n\t\t} = config;\n\n\t\treturn mergeQueries(chunks.map((chunk): QueryWithTypings => {\n\t\t\tif (is(chunk, StringChunk)) {\n\t\t\t\treturn { sql: chunk.value.join(''), params: [] };\n\t\t\t}\n\n\t\t\tif (is(chunk, Name)) {\n\t\t\t\treturn { sql: escapeName(chunk.value), params: [] };\n\t\t\t}\n\n\t\t\tif (chunk === undefined) {\n\t\t\t\treturn { sql: '', params: [] };\n\t\t\t}\n\n\t\t\tif (Array.isArray(chunk)) {\n\t\t\t\tconst result: SQLChunk[] = [new StringChunk('(')];\n\t\t\t\tfor (const [i, p] of chunk.entries()) {\n\t\t\t\t\tresult.push(p);\n\t\t\t\t\tif (i < chunk.length - 1) {\n\t\t\t\t\t\tresult.push(new StringChunk(', '));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult.push(new StringChunk(')'));\n\t\t\t\treturn this.buildQueryFromSourceParams(result, config);\n\t\t\t}\n\n\t\t\tif (is(chunk, SQL)) {\n\t\t\t\treturn this.buildQueryFromSourceParams(chunk.queryChunks, {\n\t\t\t\t\t...config,\n\t\t\t\t\tinlineParams: inlineParams || chunk.shouldInlineParams,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (is(chunk, Table)) {\n\t\t\t\tconst schemaName = chunk[Table.Symbol.Schema];\n\t\t\t\tconst tableName = chunk[Table.Symbol.Name];\n\t\t\t\treturn {\n\t\t\t\t\tsql: schemaName === undefined || chunk[IsAlias]\n\t\t\t\t\t\t? escapeName(tableName)\n\t\t\t\t\t\t: escapeName(schemaName) + '.' + escapeName(tableName),\n\t\t\t\t\tparams: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, Column)) {\n\t\t\t\tconst columnName = casing.getColumnCasing(chunk);\n\t\t\t\tif (_config.invokeSource === 'indexes') {\n\t\t\t\t\treturn { sql: escapeName(columnName), params: [] };\n\t\t\t\t}\n\n\t\t\t\tconst schemaName = chunk.table[Table.Symbol.Schema];\n\t\t\t\treturn {\n\t\t\t\t\tsql: chunk.table[IsAlias] || schemaName === undefined\n\t\t\t\t\t\t? escapeName(chunk.table[Table.Symbol.Name]) + '.' + escapeName(columnName)\n\t\t\t\t\t\t: escapeName(schemaName) + '.' + escapeName(chunk.table[Table.Symbol.Name]) + '.'\n\t\t\t\t\t\t\t+ escapeName(columnName),\n\t\t\t\t\tparams: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, View)) {\n\t\t\t\tconst schemaName = chunk[ViewBaseConfig].schema;\n\t\t\t\tconst viewName = chunk[ViewBaseConfig].name;\n\t\t\t\treturn {\n\t\t\t\t\tsql: schemaName === undefined || chunk[ViewBaseConfig].isAlias\n\t\t\t\t\t\t? escapeName(viewName)\n\t\t\t\t\t\t: escapeName(schemaName) + '.' + escapeName(viewName),\n\t\t\t\t\tparams: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, Param)) {\n\t\t\t\tif (is(chunk.value, Placeholder)) {\n\t\t\t\t\treturn { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ['none'] };\n\t\t\t\t}\n\n\t\t\t\tconst mappedValue = chunk.value === null ? null : chunk.encoder.mapToDriverValue(chunk.value);\n\n\t\t\t\tif (is(mappedValue, SQL)) {\n\t\t\t\t\treturn this.buildQueryFromSourceParams([mappedValue], config);\n\t\t\t\t}\n\n\t\t\t\tif (inlineParams) {\n\t\t\t\t\treturn { sql: this.mapInlineParam(mappedValue, config), params: [] };\n\t\t\t\t}\n\n\t\t\t\tlet typings: QueryTypingsValue[] = ['none'];\n\t\t\t\tif (prepareTyping) {\n\t\t\t\t\ttypings = [prepareTyping(chunk.encoder)];\n\t\t\t\t}\n\n\t\t\t\treturn { sql: escapeParam(paramStartIndex.value++, mappedValue), params: [mappedValue], typings };\n\t\t\t}\n\n\t\t\tif (is(chunk, Placeholder)) {\n\t\t\t\treturn { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ['none'] };\n\t\t\t}\n\n\t\t\tif (is(chunk, SQL.Aliased) && chunk.fieldAlias !== undefined) {\n\t\t\t\treturn { sql: escapeName(chunk.fieldAlias), params: [] };\n\t\t\t}\n\n\t\t\tif (is(chunk, Subquery)) {\n\t\t\t\tif (chunk._.isWith) {\n\t\t\t\t\treturn { sql: escapeName(chunk._.alias), params: [] };\n\t\t\t\t}\n\t\t\t\treturn this.buildQueryFromSourceParams([\n\t\t\t\t\tnew StringChunk('('),\n\t\t\t\t\tchunk._.sql,\n\t\t\t\t\tnew StringChunk(') '),\n\t\t\t\t\tnew Name(chunk._.alias),\n\t\t\t\t], config);\n\t\t\t}\n\n\t\t\tif (isPgEnum(chunk)) {\n\t\t\t\tif (chunk.schema) {\n\t\t\t\t\treturn { sql: escapeName(chunk.schema) + '.' + escapeName(chunk.enumName), params: [] };\n\t\t\t\t}\n\t\t\t\treturn { sql: escapeName(chunk.enumName), params: [] };\n\t\t\t}\n\n\t\t\tif (isSQLWrapper(chunk)) {\n\t\t\t\tif (chunk.shouldOmitSQLParens?.()) {\n\t\t\t\t\treturn this.buildQueryFromSourceParams([chunk.getSQL()], config);\n\t\t\t\t}\n\t\t\t\treturn this.buildQueryFromSourceParams([\n\t\t\t\t\tnew StringChunk('('),\n\t\t\t\t\tchunk.getSQL(),\n\t\t\t\t\tnew StringChunk(')'),\n\t\t\t\t], config);\n\t\t\t}\n\n\t\t\tif (inlineParams) {\n\t\t\t\treturn { sql: this.mapInlineParam(chunk, config), params: [] };\n\t\t\t}\n\n\t\t\treturn { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ['none'] };\n\t\t}));\n\t}\n\n\tprivate mapInlineParam(\n\t\tchunk: unknown,\n\t\t{ escapeString }: BuildQueryConfig,\n\t): string {\n\t\tif (chunk === null) {\n\t\t\treturn 'null';\n\t\t}\n\t\tif (typeof chunk === 'number' || typeof chunk === 'boolean') {\n\t\t\treturn chunk.toString();\n\t\t}\n\t\tif (typeof chunk === 'string') {\n\t\t\treturn escapeString(chunk);\n\t\t}\n\t\tif (typeof chunk === 'object') {\n\t\t\tconst mappedValueAsString = chunk.toString();\n\t\t\tif (mappedValueAsString === '[object Object]') {\n\t\t\t\treturn escapeString(JSON.stringify(chunk));\n\t\t\t}\n\t\t\treturn escapeString(mappedValueAsString);\n\t\t}\n\t\tthrow new Error('Unexpected param value: ' + chunk);\n\t}\n\n\tgetSQL(): SQL {\n\t\treturn this;\n\t}\n\n\tas(alias: string): SQL.Aliased<T>;\n\t/**\n\t * @deprecated\n\t * Use ``sql<DataType>`query`.as(alias)`` instead.\n\t */\n\tas<TData>(): SQL<TData>;\n\t/**\n\t * @deprecated\n\t * Use ``sql<DataType>`query`.as(alias)`` instead.\n\t */\n\tas<TData>(alias: string): SQL.Aliased<TData>;\n\tas(alias?: string): SQL<T> | SQL.Aliased<T> {\n\t\t// TODO: remove with deprecated overloads\n\t\tif (alias === undefined) {\n\t\t\treturn this;\n\t\t}\n\n\t\treturn new SQL.Aliased(this, alias);\n\t}\n\n\tmapWith<\n\t\tTDecoder extends\n\t\t\t| DriverValueDecoder<any, any>\n\t\t\t| DriverValueDecoder<any, any>['mapFromDriverValue'],\n\t>(decoder: TDecoder): SQL<GetDecoderResult<TDecoder>> {\n\t\tthis.decoder = typeof decoder === 'function' ? { mapFromDriverValue: decoder } : decoder;\n\t\treturn this as SQL<GetDecoderResult<TDecoder>>;\n\t}\n\n\tinlineParams(): this {\n\t\tthis.shouldInlineParams = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * This method is used to conditionally include a part of the query.\n\t *\n\t * @param condition - Condition to check\n\t * @returns itself if the condition is `true`, otherwise `undefined`\n\t */\n\tif(condition: any | undefined): this | undefined {\n\t\treturn condition ? this : undefined;\n\t}\n}\n\nexport type GetDecoderResult<T> = T extends Column ? T['_']['data'] : T extends\n\t| DriverValueDecoder<infer TData, any>\n\t| DriverValueDecoder<infer TData, any>['mapFromDriverValue'] ? TData\n: never;\n\n/**\n * Any DB name (table, column, index etc.)\n */\nexport class Name implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Name';\n\n\tprotected brand!: 'Name';\n\n\tconstructor(readonly value: string) {}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\n/**\n * Any DB name (table, column, index etc.)\n * @deprecated Use `sql.identifier` instead.\n */\nexport function name(value: string): Name {\n\treturn new Name(value);\n}\n\nexport interface DriverValueDecoder<TData, TDriverParam> {\n\tmapFromDriverValue(value: TDriverParam): TData;\n}\n\nexport interface DriverValueEncoder<TData, TDriverParam> {\n\tmapToDriverValue(value: TData): TDriverParam | SQL;\n}\n\nexport function isDriverValueEncoder(value: unknown): value is DriverValueEncoder<any, any> {\n\treturn typeof value === 'object' && value !== null && 'mapToDriverValue' in value\n\t\t&& typeof (value as any).mapToDriverValue === 'function';\n}\n\nexport const noopDecoder: DriverValueDecoder<any, any> = {\n\tmapFromDriverValue: (value) => value,\n};\n\nexport const noopEncoder: DriverValueEncoder<any, any> = {\n\tmapToDriverValue: (value) => value,\n};\n\nexport interface DriverValueMapper<TData, TDriverParam>\n\textends DriverValueDecoder<TData, TDriverParam>, DriverValueEncoder<TData, TDriverParam>\n{}\n\nexport const noopMapper: DriverValueMapper<any, any> = {\n\t...noopDecoder,\n\t...noopEncoder,\n};\n\n/** Parameter value that is optionally bound to an encoder (for example, a column). */\nexport class Param<TDataType = unknown, TDriverParamType = TDataType> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Param';\n\n\tprotected brand!: 'BoundParamValue';\n\n\t/**\n\t * @param value - Parameter value\n\t * @param encoder - Encoder to convert the value to a driver parameter\n\t */\n\tconstructor(\n\t\treadonly value: TDataType,\n\t\treadonly encoder: DriverValueEncoder<TDataType, TDriverParamType> = noopEncoder,\n\t) {}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\n/** @deprecated Use `sql.param` instead. */\nexport function param<TData, TDriver>(\n\tvalue: TData,\n\tencoder?: DriverValueEncoder<TData, TDriver>,\n): Param<TData, TDriver> {\n\treturn new Param(value, encoder);\n}\n\n/**\n * Anything that can be passed to the `` sql`...` `` tagged function.\n */\nexport type SQLChunk =\n\t| StringChunk\n\t| SQLChunk[]\n\t| SQLWrapper\n\t| SQL\n\t| Table\n\t| View\n\t| Subquery\n\t| AnyColumn\n\t| Param\n\t| Name\n\t| undefined\n\t| FakePrimitiveParam\n\t| Placeholder;\n\nexport function sql<T>(strings: TemplateStringsArray, ...params: any[]): SQL<T>;\n/*\n\tThe type of `params` is specified as `SQLChunk[]`, but that's slightly incorrect -\n\tin runtime, users won't pass `FakePrimitiveParam` instances as `params` - they will pass primitive values\n\twhich will be wrapped in `Param`. That's why the overload specifies `params` as `any[]` and not as `SQLSourceParam[]`.\n\tThis type is used to make our lives easier and the type checker happy.\n*/\nexport function sql(strings: TemplateStringsArray, ...params: SQLChunk[]): SQL {\n\tconst queryChunks: SQLChunk[] = [];\n\tif (params.length > 0 || (strings.length > 0 && strings[0] !== '')) {\n\t\tqueryChunks.push(new StringChunk(strings[0]!));\n\t}\n\tfor (const [paramIndex, param] of params.entries()) {\n\t\tqueryChunks.push(param, new StringChunk(strings[paramIndex + 1]!));\n\t}\n\n\treturn new SQL(queryChunks);\n}\n\nexport namespace sql {\n\texport function empty(): SQL {\n\t\treturn new SQL([]);\n\t}\n\n\t/** @deprecated - use `sql.join()` */\n\texport function fromList(list: SQLChunk[]): SQL {\n\t\treturn new SQL(list);\n\t}\n\n\t/**\n\t * Convenience function to create an SQL query from a raw string.\n\t * @param str The raw SQL query string.\n\t */\n\texport function raw(str: string): SQL {\n\t\treturn new SQL([new StringChunk(str)]);\n\t}\n\n\t/**\n\t * Join a list of SQL chunks with a separator.\n\t * @example\n\t * ```ts\n\t * const query = sql.join([sql`a`, sql`b`, sql`c`]);\n\t * // sql`abc`\n\t * ```\n\t * @example\n\t * ```ts\n\t * const query = sql.join([sql`a`, sql`b`, sql`c`], sql`, `);\n\t * // sql`a, b, c`\n\t * ```\n\t */\n\texport function join(chunks: SQLChunk[], separator?: SQLChunk): SQL {\n\t\tconst result: SQLChunk[] = [];\n\t\tfor (const [i, chunk] of chunks.entries()) {\n\t\t\tif (i > 0 && separator !== undefined) {\n\t\t\t\tresult.push(separator);\n\t\t\t}\n\t\t\tresult.push(chunk);\n\t\t}\n\t\treturn new SQL(result);\n\t}\n\n\t/**\n\t * Create a SQL chunk that represents a DB identifier (table, column, index etc.).\n\t * When used in a query, the identifier will be escaped based on the DB engine.\n\t * For example, in PostgreSQL, identifiers are escaped with double quotes.\n\t *\n\t * **WARNING: This function does not offer any protection against SQL injections, so you must validate any user input beforehand.**\n\t *\n\t * @example ```ts\n\t * const query = sql`SELECT * FROM ${sql.identifier('my-table')}`;\n\t * // 'SELECT * FROM \"my-table\"'\n\t * ```\n\t */\n\texport function identifier(value: string): Name {\n\t\treturn new Name(value);\n\t}\n\n\texport function placeholder<TName extends string>(name: TName): Placeholder<TName> {\n\t\treturn new Placeholder(name);\n\t}\n\n\texport function param<TData, TDriver>(\n\t\tvalue: TData,\n\t\tencoder?: DriverValueEncoder<TData, TDriver>,\n\t): Param<TData, TDriver> {\n\t\treturn new Param(value, encoder);\n\t}\n}\n\nexport namespace SQL {\n\texport class Aliased<T = unknown> implements SQLWrapper {\n\t\tstatic readonly [entityKind]: string = 'SQL.Aliased';\n\n\t\tdeclare _: {\n\t\t\tbrand: 'SQL.Aliased';\n\t\t\ttype: T;\n\t\t};\n\n\t\t/** @internal */\n\t\tisSelectionField = false;\n\n\t\tconstructor(\n\t\t\treadonly sql: SQL,\n\t\t\treadonly fieldAlias: string,\n\t\t) {}\n\n\t\tgetSQL(): SQL {\n\t\t\treturn this.sql;\n\t\t}\n\n\t\t/** @internal */\n\t\tclone() {\n\t\t\treturn new Aliased(this.sql, this.fieldAlias);\n\t\t}\n\t}\n}\n\nexport class Placeholder<TName extends string = string, TValue = any> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Placeholder';\n\n\tdeclare protected: TValue;\n\n\tconstructor(readonly name: TName) {}\n\n\tgetSQL(): SQL {\n\t\treturn new SQL([this]);\n\t}\n}\n\n/** @deprecated Use `sql.placeholder` instead. */\nexport function placeholder<TName extends string>(name: TName): Placeholder<TName> {\n\treturn new Placeholder(name);\n}\n\nexport function fillPlaceholders(params: unknown[], values: Record<string, unknown>): unknown[] {\n\treturn params.map((p) => {\n\t\tif (is(p, Placeholder)) {\n\t\t\tif (!(p.name in values)) {\n\t\t\t\tthrow new Error(`No value for placeholder \"${p.name}\" was provided`);\n\t\t\t}\n\n\t\t\treturn values[p.name];\n\t\t}\n\n\t\tif (is(p, Param) && is(p.value, Placeholder)) {\n\t\t\tif (!(p.value.name in values)) {\n\t\t\t\tthrow new Error(`No value for placeholder \"${p.value.name}\" was provided`);\n\t\t\t}\n\n\t\t\treturn p.encoder.mapToDriverValue(values[p.value.name]);\n\t\t}\n\n\t\treturn p;\n\t});\n}\n\nexport type ColumnsSelection = Record<string, unknown>;\n\nconst IsDrizzleView = Symbol.for('drizzle:IsDrizzleView');\n\nexport abstract class View<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelection extends ColumnsSelection = ColumnsSelection,\n> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'View';\n\n\tdeclare _: {\n\t\tbrand: 'View';\n\t\tviewBrand: string;\n\t\tname: TName;\n\t\texisting: TExisting;\n\t\tselectedFields: TSelection;\n\t};\n\n\t/** @internal */\n\t[ViewBaseConfig]: {\n\t\tname: TName;\n\t\toriginalName: TName;\n\t\tschema: string | undefined;\n\t\tselectedFields: ColumnsSelection;\n\t\tisExisting: TExisting;\n\t\tquery: TExisting extends true ? undefined : SQL;\n\t\tisAlias: boolean;\n\t};\n\n\t/** @internal */\n\t[IsDrizzleView] = true;\n\n\tdeclare readonly $inferSelect: InferSelectViewModel<View<Assume<TName, string>, TExisting, TSelection>>;\n\n\tconstructor(\n\t\t{ name, schema, selectedFields, query }: {\n\t\t\tname: TName;\n\t\t\tschema: string | undefined;\n\t\t\tselectedFields: ColumnsSelection;\n\t\t\tquery: SQL | undefined;\n\t\t},\n\t) {\n\t\tthis[ViewBaseConfig] = {\n\t\t\tname,\n\t\t\toriginalName: name,\n\t\t\tschema,\n\t\t\tselectedFields,\n\t\t\tquery: query as (TExisting extends true ? undefined : SQL),\n\t\t\tisExisting: !query as TExisting,\n\t\t\tisAlias: false,\n\t\t};\n\t}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\nexport function isView(view: unknown): view is View {\n\treturn typeof view === 'object' && view !== null && IsDrizzleView in view;\n}\n\nexport function getViewName<T extends View>(view: T): T['_']['name'] {\n\treturn view[ViewBaseConfig].name;\n}\n\nexport type InferSelectViewModel<TView extends View> =\n\tEqual<TView['_']['selectedFields'], { [x: string]: unknown }> extends true ? { [x: string]: unknown }\n\t\t: SelectResult<\n\t\t\tTView['_']['selectedFields'],\n\t\t\t'single',\n\t\t\tRecord<TView['_']['name'], 'not-null'>\n\t\t>;\n\n// Defined separately from the Column class to resolve circular dependency\nColumn.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\n\n// Defined separately from the Table class to resolve circular dependency\nTable.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\n\n// Defined separately from the Column class to resolve circular dependency\nSubquery.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\n","import type { Cache } from './cache/core/cache.ts';\nimport type { AnyColumn } from './column.ts';\nimport { Column } from './column.ts';\nimport { is } from './entity.ts';\nimport type { Logger } from './logger.ts';\nimport type { SelectedFieldsOrdered } from './operations.ts';\nimport type { TableLike } from './query-builders/select.types.ts';\nimport { Param, SQL, View } from './sql/sql.ts';\nimport type { DriverValueDecoder } from './sql/sql.ts';\nimport { Subquery } from './subquery.ts';\nimport { getTableName, Table } from './table.ts';\nimport { ViewBaseConfig } from './view-common.ts';\n\n/** @internal */\nexport function mapResultRow<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\trow: unknown[],\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): TResult {\n\t// Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n\tconst nullifyMap: Record<string, string | false> = {};\n\n\tconst result = columns.reduce<Record<string, any>>(\n\t\t(result, { path, field }, columnIndex) => {\n\t\t\tlet decoder: DriverValueDecoder<unknown, unknown>;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else if (is(field, Subquery)) {\n\t\t\t\tdecoder = field._.sql.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tlet node = result;\n\t\t\tfor (const [pathChunkIndex, pathChunk] of path.entries()) {\n\t\t\t\tif (pathChunkIndex < path.length - 1) {\n\t\t\t\t\tif (!(pathChunk in node)) {\n\t\t\t\t\t\tnode[pathChunk] = {};\n\t\t\t\t\t}\n\t\t\t\t\tnode = node[pathChunk];\n\t\t\t\t} else {\n\t\t\t\t\tconst rawValue = row[columnIndex]!;\n\t\t\t\t\tconst value = node[pathChunk] = rawValue === null ? null : decoder.mapFromDriverValue(rawValue);\n\n\t\t\t\t\tif (joinsNotNullableMap && is(field, Column) && path.length === 2) {\n\t\t\t\t\t\tconst objectName = path[0]!;\n\t\t\t\t\t\tif (!(objectName in nullifyMap)) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\ttypeof nullifyMap[objectName] === 'string' && nullifyMap[objectName] !== getTableName(field.table)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\t{},\n\t);\n\n\t// Nullify all nested objects from nullifyMap that are nullable\n\tif (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n\t\tfor (const [objectName, tableName] of Object.entries(nullifyMap)) {\n\t\t\tif (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n\t\t\t\tresult[objectName] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result as TResult;\n}\n\n/** @internal */\nexport function orderSelectedFields<TColumn extends AnyColumn>(\n\tfields: Record<string, unknown>,\n\tpathPrefix?: string[],\n): SelectedFieldsOrdered<TColumn> {\n\treturn Object.entries(fields).reduce<SelectedFieldsOrdered<AnyColumn>>((result, [name, field]) => {\n\t\tif (typeof name !== 'string') {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst newPath = pathPrefix ? [...pathPrefix, name] : [name];\n\t\tif (is(field, Column) || is(field, SQL) || is(field, SQL.Aliased) || is(field, Subquery)) {\n\t\t\tresult.push({ path: newPath, field });\n\t\t} else if (is(field, Table)) {\n\t\t\tresult.push(...orderSelectedFields(field[Table.Symbol.Columns], newPath));\n\t\t} else {\n\t\t\tresult.push(...orderSelectedFields(field as Record<string, unknown>, newPath));\n\t\t}\n\t\treturn result;\n\t}, []) as SelectedFieldsOrdered<TColumn>;\n}\n\nexport function haveSameKeys(left: Record<string, unknown>, right: Record<string, unknown>) {\n\tconst leftKeys = Object.keys(left);\n\tconst rightKeys = Object.keys(right);\n\n\tif (leftKeys.length !== rightKeys.length) {\n\t\treturn false;\n\t}\n\n\tfor (const [index, key] of leftKeys.entries()) {\n\t\tif (key !== rightKeys[index]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/** @internal */\nexport function mapUpdateSet(table: Table, values: Record<string, unknown>): UpdateSet {\n\tconst entries: [string, UpdateSet[string]][] = Object.entries(values)\n\t\t.filter(([, value]) => value !== undefined)\n\t\t.map(([key, value]) => {\n\t\t\t// eslint-disable-next-line unicorn/prefer-ternary\n\t\t\tif (is(value, SQL) || is(value, Column)) {\n\t\t\t\treturn [key, value];\n\t\t\t} else {\n\t\t\t\treturn [key, new Param(value, table[Table.Symbol.Columns][key])];\n\t\t\t}\n\t\t});\n\n\tif (entries.length === 0) {\n\t\tthrow new Error('No values to set');\n\t}\n\n\treturn Object.fromEntries(entries);\n}\n\nexport type UpdateSet = Record<string, SQL | Param | AnyColumn | null | undefined>;\n\nexport type OneOrMany<T> = T | T[];\n\nexport type Update<T, TUpdate> =\n\t& {\n\t\t[K in Exclude<keyof T, keyof TUpdate>]: T[K];\n\t}\n\t& TUpdate;\n\nexport type Simplify<T> =\n\t& {\n\t\t// @ts-ignore - \"Type parameter 'K' has a circular constraint\", not sure why\n\t\t[K in keyof T]: T[K];\n\t}\n\t& {};\n\nexport type Not<T extends boolean> = T extends true ? false : true;\n\nexport type IsNever<T> = [T] extends [never] ? true : false;\n\nexport type IsUnion<T, U extends T = T> = (T extends any ? (U extends T ? false : true) : never) extends false ? false\n\t: true;\n\nexport type SingleKeyObject<T, TError extends string, K = keyof T> = IsNever<K> extends true ? never\n\t: IsUnion<K> extends true ? DrizzleTypeError<TError>\n\t: T;\n\nexport type FromSingleKeyObject<T, Result, TError extends string, K = keyof T> = IsNever<K> extends true ? never\n\t: IsUnion<K> extends true ? DrizzleTypeError<TError>\n\t: Result;\n\nexport type SimplifyMappedType<T> = [T] extends [unknown] ? T : never;\n\nexport type ShallowRecord<K extends keyof any, T> = SimplifyMappedType<{ [P in K]: T }>;\n\nexport type Assume<T, U> = T extends U ? T : U;\n\nexport type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false;\n\nexport interface DrizzleTypeError<T extends string> {\n\t$drizzleTypeError: T;\n}\n\nexport type ValueOrArray<T> = T | T[];\n\n/** @internal */\nexport function applyMixins(baseClass: any, extendedClasses: any[]) {\n\tfor (const extendedClass of extendedClasses) {\n\t\tfor (const name of Object.getOwnPropertyNames(extendedClass.prototype)) {\n\t\t\tif (name === 'constructor') continue;\n\n\t\t\tObject.defineProperty(\n\t\t\t\tbaseClass.prototype,\n\t\t\t\tname,\n\t\t\t\tObject.getOwnPropertyDescriptor(extendedClass.prototype, name) || Object.create(null),\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport type Or<T1, T2> = T1 extends true ? true : T2 extends true ? true : false;\n\nexport type IfThenElse<If, Then, Else> = If extends true ? Then : Else;\n\nexport type PromiseOf<T> = T extends Promise<infer U> ? U : T;\n\nexport type Writable<T> = {\n\t-readonly [P in keyof T]: T[P];\n};\n\nexport type NonArray<T> = T extends any[] ? never : T;\n\nexport function getTableColumns<T extends Table>(table: T): T['_']['columns'] {\n\treturn table[Table.Symbol.Columns];\n}\n\nexport function getViewSelectedFields<T extends View>(view: T): T['_']['selectedFields'] {\n\treturn view[ViewBaseConfig].selectedFields;\n}\n\n/** @internal */\nexport function getTableLikeName(table: TableLike): string | undefined {\n\treturn is(table, Subquery)\n\t\t? table._.alias\n\t\t: is(table, View)\n\t\t? table[ViewBaseConfig].name\n\t\t: is(table, SQL)\n\t\t? undefined\n\t\t: table[Table.Symbol.IsAlias]\n\t\t? table[Table.Symbol.Name]\n\t\t: table[Table.Symbol.BaseName];\n}\n\nexport type ColumnsWithTable<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends AnyColumn<{ tableName: TTableName }>[],\n> = { [Key in keyof TColumns]: AnyColumn<{ tableName: TForeignTableName }> };\n\nexport type Casing = 'snake_case' | 'camelCase';\n\nexport interface DrizzleConfig<TSchema extends Record<string, unknown> = Record<string, never>> {\n\tlogger?: boolean | Logger;\n\tschema?: TSchema;\n\tcasing?: Casing;\n\tcache?: Cache;\n}\nexport type ValidateShape<T, ValidShape, TResult = T> = T extends ValidShape\n\t? Exclude<keyof T, keyof ValidShape> extends never ? TResult\n\t: DrizzleTypeError<\n\t\t`Invalid key(s): ${Exclude<(keyof T) & (string | number | bigint | boolean | null | undefined), keyof ValidShape>}`\n\t>\n\t: never;\n\nexport type KnownKeysOnly<T, U> = {\n\t[K in keyof T]: K extends keyof U ? T[K] : never;\n};\n\nexport type IsAny<T> = 0 extends (1 & T) ? true : false;\n\n/** @internal */\nexport function getColumnNameAndConfig<\n\tTConfig extends Record<string, any> | undefined,\n>(a: string | TConfig | undefined, b: TConfig | undefined) {\n\treturn {\n\t\tname: typeof a === 'string' && a.length > 0 ? a : '' as string,\n\t\tconfig: typeof a === 'object' ? a : b as TConfig,\n\t};\n}\n\nexport type IfNotImported<T, Y, N> = unknown extends T ? Y : N;\n\nexport type ImportTypeError<TPackageName extends string> =\n\t`Please install \\`${TPackageName}\\` to allow Drizzle ORM to connect to the database`;\n\nexport type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Keys extends any\n\t? Required<Pick<T, Keys>> & Partial<Omit<T, Keys>>\n\t: never;\n\ntype ExpectedConfigShape = {\n\tlogger?: boolean | {\n\t\tlogQuery(query: string, params: unknown[]): void;\n\t};\n\tschema?: Record<string, never>;\n\tcasing?: 'snake_case' | 'camelCase';\n};\n\n// If this errors, you must update config shape checker function with new config specs\nconst _: DrizzleConfig = {} as ExpectedConfigShape;\nconst __: ExpectedConfigShape = {} as DrizzleConfig;\n\nexport function isConfig(data: any): boolean {\n\tif (typeof data !== 'object' || data === null) return false;\n\n\tif (data.constructor.name !== 'Object') return false;\n\n\tif ('logger' in data) {\n\t\tconst type = typeof data['logger'];\n\t\tif (\n\t\t\ttype !== 'boolean' && (type !== 'object' || typeof data['logger']['logQuery'] !== 'function')\n\t\t\t&& type !== 'undefined'\n\t\t) return false;\n\n\t\treturn true;\n\t}\n\n\tif ('schema' in data) {\n\t\tconst type = typeof data['schema'];\n\t\tif (type !== 'object' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('casing' in data) {\n\t\tconst type = typeof data['casing'];\n\t\tif (type !== 'string' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('mode' in data) {\n\t\tif (data['mode'] !== 'default' || data['mode'] !== 'planetscale' || data['mode'] !== undefined) return false;\n\n\t\treturn true;\n\t}\n\n\tif ('connection' in data) {\n\t\tconst type = typeof data['connection'];\n\t\tif (type !== 'string' && type !== 'object' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('client' in data) {\n\t\tconst type = typeof data['client'];\n\t\tif (type !== 'object' && type !== 'function' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif (Object.keys(data).length === 0) return true;\n\n\treturn false;\n}\n\nexport type NeonAuthToken = string | (() => string | Promise<string>);\n\nexport const textDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder();\n","import type { BuildColumns, BuildExtraConfigColumns } from '~/column-builder.ts';\nimport { entityKind } from '~/entity.ts';\nimport { Table, type TableConfig as TableConfigBase, type UpdateTableConfig } from '~/table.ts';\nimport type { CheckBuilder } from './checks.ts';\nimport { getPgColumnBuilders, type PgColumnsBuilders } from './columns/all.ts';\nimport type { ExtraConfigColumn, PgColumn, PgColumnBuilder, PgColumnBuilderBase } from './columns/common.ts';\nimport type { ForeignKey, ForeignKeyBuilder } from './foreign-keys.ts';\nimport type { AnyIndexBuilder } from './indexes.ts';\nimport type { PgPolicy } from './policies.ts';\nimport type { PrimaryKeyBuilder } from './primary-keys.ts';\nimport type { UniqueConstraintBuilder } from './unique-constraint.ts';\n\nexport type PgTableExtraConfigValue =\n\t| AnyIndexBuilder\n\t| CheckBuilder\n\t| ForeignKeyBuilder\n\t| PrimaryKeyBuilder\n\t| UniqueConstraintBuilder\n\t| PgPolicy;\n\nexport type PgTableExtraConfig = Record<\n\tstring,\n\tPgTableExtraConfigValue\n>;\n\nexport type TableConfig = TableConfigBase<PgColumn>;\n\n/** @internal */\nexport const InlineForeignKeys = Symbol.for('drizzle:PgInlineForeignKeys');\n/** @internal */\nexport const EnableRLS = Symbol.for('drizzle:EnableRLS');\n\nexport class PgTable<T extends TableConfig = TableConfig> extends Table<T> {\n\tstatic override readonly [entityKind]: string = 'PgTable';\n\n\t/** @internal */\n\tstatic override readonly Symbol = Object.assign({}, Table.Symbol, {\n\t\tInlineForeignKeys: InlineForeignKeys as typeof InlineForeignKeys,\n\t\tEnableRLS: EnableRLS as typeof EnableRLS,\n\t});\n\n\t/**@internal */\n\t[InlineForeignKeys]: ForeignKey[] = [];\n\n\t/** @internal */\n\t[EnableRLS]: boolean = false;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigBuilder]: ((self: Record<string, PgColumn>) => PgTableExtraConfig) | undefined =\n\t\tundefined;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigColumns]: Record<string, ExtraConfigColumn> = {};\n}\n\nexport type AnyPgTable<TPartial extends Partial<TableConfig> = {}> = PgTable<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport type PgTableWithColumns<T extends TableConfig> =\n\t& PgTable<T>\n\t& {\n\t\t[Key in keyof T['columns']]: T['columns'][Key];\n\t}\n\t& {\n\t\tenableRLS: () => Omit<\n\t\t\tPgTableWithColumns<T>,\n\t\t\t'enableRLS'\n\t\t>;\n\t};\n\n/** @internal */\nexport function pgTableWithSchema<\n\tTTableName extends string,\n\tTSchemaName extends string | undefined,\n\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n>(\n\tname: TTableName,\n\tcolumns: TColumnsMap | ((columnTypes: PgColumnsBuilders) => TColumnsMap),\n\textraConfig:\n\t\t| ((self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>) => PgTableExtraConfig | PgTableExtraConfigValue[])\n\t\t| undefined,\n\tschema: TSchemaName,\n\tbaseName = name,\n): PgTableWithColumns<{\n\tname: TTableName;\n\tschema: TSchemaName;\n\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\tdialect: 'pg';\n}> {\n\tconst rawTable = new PgTable<{\n\t\tname: TTableName;\n\t\tschema: TSchemaName;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>(name, schema, baseName);\n\n\tconst parsedColumns: TColumnsMap = typeof columns === 'function' ? columns(getPgColumnBuilders()) : columns;\n\n\tconst builtColumns = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.build(rawTable);\n\t\t\trawTable[InlineForeignKeys].push(...colBuilder.buildForeignKeys(column, rawTable));\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\n\tconst builtColumnsForExtraConfig = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.buildExtraConfigColumn(rawTable);\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>;\n\n\tconst table = Object.assign(rawTable, builtColumns);\n\n\ttable[Table.Symbol.Columns] = builtColumns;\n\ttable[Table.Symbol.ExtraConfigColumns] = builtColumnsForExtraConfig;\n\n\tif (extraConfig) {\n\t\ttable[PgTable.Symbol.ExtraConfigBuilder] = extraConfig as any;\n\t}\n\n\treturn Object.assign(table, {\n\t\tenableRLS: () => {\n\t\t\ttable[PgTable.Symbol.EnableRLS] = true;\n\t\t\treturn table as PgTableWithColumns<{\n\t\t\t\tname: TTableName;\n\t\t\t\tschema: TSchemaName;\n\t\t\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\t\t\tdialect: 'pg';\n\t\t\t}>;\n\t\t},\n\t});\n}\n\nexport interface PgTableFn<TSchema extends string | undefined = undefined> {\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig?: (\n\t\t\tself: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>,\n\t\t) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig?: (self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig: (\n\t\t\tself: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>,\n\t\t) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig: (self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n}\n\nexport const pgTable: PgTableFn = (name, columns, extraConfig) => {\n\treturn pgTableWithSchema(name, columns, extraConfig, undefined);\n};\n\nexport function pgTableCreator(customizeTableName: (name: string) => string): PgTableFn {\n\treturn (name, columns, extraConfig) => {\n\t\treturn pgTableWithSchema(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);\n\t};\n}\n","import { entityKind } from '~/entity.ts';\nimport type { AnyPgColumn, PgColumn } from './columns/index.ts';\nimport { PgTable } from './table.ts';\n\nexport function primaryKey<\n\tTTableName extends string,\n\tTColumn extends AnyPgColumn<{ tableName: TTableName }>,\n\tTColumns extends AnyPgColumn<{ tableName: TTableName }>[],\n>(config: { name?: string; columns: [TColumn, ...TColumns] }): PrimaryKeyBuilder;\n/**\n * @deprecated: Please use primaryKey({ columns: [] }) instead of this function\n * @param columns\n */\nexport function primaryKey<\n\tTTableName extends string,\n\tTColumns extends AnyPgColumn<{ tableName: TTableName }>[],\n>(...columns: TColumns): PrimaryKeyBuilder;\nexport function primaryKey(...config: any) {\n\tif (config[0].columns) {\n\t\treturn new PrimaryKeyBuilder(config[0].columns, config[0].name);\n\t}\n\treturn new PrimaryKeyBuilder(config);\n}\n\nexport class PrimaryKeyBuilder {\n\tstatic readonly [entityKind]: string = 'PgPrimaryKeyBuilder';\n\n\t/** @internal */\n\tcolumns: PgColumn[];\n\n\t/** @internal */\n\tname?: string;\n\n\tconstructor(\n\t\tcolumns: PgColumn[],\n\t\tname?: string,\n\t) {\n\t\tthis.columns = columns;\n\t\tthis.name = name;\n\t}\n\n\t/** @internal */\n\tbuild(table: PgTable): PrimaryKey {\n\t\treturn new PrimaryKey(table, this.columns, this.name);\n\t}\n}\n\nexport class PrimaryKey {\n\tstatic readonly [entityKind]: string = 'PgPrimaryKey';\n\n\treadonly columns: AnyPgColumn<{}>[];\n\treadonly name?: string;\n\n\tconstructor(readonly table: PgTable, columns: AnyPgColumn<{}>[], name?: string) {\n\t\tthis.columns = columns;\n\t\tthis.name = name;\n\t}\n\n\tgetName(): string {\n\t\treturn this.name ?? `${this.table[PgTable.Symbol.Name]}_${this.columns.map((column) => column.name).join('_')}_pk`;\n\t}\n}\n","import { type AnyColumn, Column, type GetColumnData } from '~/column.ts';\nimport { is } from '~/entity.ts';\nimport { Table } from '~/table.ts';\nimport {\n\tisDriverValueEncoder,\n\tisSQLWrapper,\n\tParam,\n\tPlaceholder,\n\tSQL,\n\tsql,\n\ttype SQLChunk,\n\ttype SQLWrapper,\n\tStringChunk,\n\tView,\n} from '../sql.ts';\n\nexport function bindIfParam(value: unknown, column: SQLWrapper): SQLChunk {\n\tif (\n\t\tisDriverValueEncoder(column)\n\t\t&& !isSQLWrapper(value)\n\t\t&& !is(value, Param)\n\t\t&& !is(value, Placeholder)\n\t\t&& !is(value, Column)\n\t\t&& !is(value, Table)\n\t\t&& !is(value, View)\n\t) {\n\t\treturn new Param(value, column);\n\t}\n\treturn value as SQLChunk;\n}\n\nexport interface BinaryOperator {\n\t<TColumn extends Column>(\n\t\tleft: TColumn,\n\t\tright: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n\t): SQL;\n\t<T>(left: SQL.Aliased<T>, right: T | SQLWrapper): SQL;\n\t<T extends SQLWrapper>(\n\t\tleft: Exclude<T, SQL.Aliased | Column>,\n\t\tright: unknown,\n\t): SQL;\n}\n\n/**\n * Test that two values are equal.\n *\n * Remember that the SQL standard dictates that\n * two NULL values are not equal, so if you want to test\n * whether a value is null, you may want to use\n * `isNull` instead.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made by Ford\n * db.select().from(cars)\n * .where(eq(cars.make, 'Ford'))\n * ```\n *\n * @see isNull for a way to test equality to NULL.\n */\nexport const eq: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} = ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that two values are not equal.\n *\n * Remember that the SQL standard dictates that\n * two NULL values are not equal, so if you want to test\n * whether a value is not null, you may want to use\n * `isNotNull` instead.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars not made by Ford\n * db.select().from(cars)\n * .where(ne(cars.make, 'Ford'))\n * ```\n *\n * @see isNotNull for a way to test whether a value is not null.\n */\nexport const ne: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} <> ${bindIfParam(right, left)}`;\n};\n\n/**\n * Combine a list of conditions with the `and` operator. Conditions\n * that are equal `undefined` are automatically ignored.\n *\n * ## Examples\n *\n * ```ts\n * db.select().from(cars)\n * .where(\n * and(\n * eq(cars.make, 'Volvo'),\n * eq(cars.year, 1950),\n * )\n * )\n * ```\n */\nexport function and(...conditions: (SQLWrapper | undefined)[]): SQL | undefined;\nexport function and(\n\t...unfilteredConditions: (SQLWrapper | undefined)[]\n): SQL | undefined {\n\tconst conditions = unfilteredConditions.filter(\n\t\t(c): c is Exclude<typeof c, undefined> => c !== undefined,\n\t);\n\n\tif (conditions.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tif (conditions.length === 1) {\n\t\treturn new SQL(conditions);\n\t}\n\n\treturn new SQL([\n\t\tnew StringChunk('('),\n\t\tsql.join(conditions, new StringChunk(' and ')),\n\t\tnew StringChunk(')'),\n\t]);\n}\n\n/**\n * Combine a list of conditions with the `or` operator. Conditions\n * that are equal `undefined` are automatically ignored.\n *\n * ## Examples\n *\n * ```ts\n * db.select().from(cars)\n * .where(\n * or(\n * eq(cars.make, 'GM'),\n * eq(cars.make, 'Ford'),\n * )\n * )\n * ```\n */\nexport function or(...conditions: (SQLWrapper | undefined)[]): SQL | undefined;\nexport function or(\n\t...unfilteredConditions: (SQLWrapper | undefined)[]\n): SQL | undefined {\n\tconst conditions = unfilteredConditions.filter(\n\t\t(c): c is Exclude<typeof c, undefined> => c !== undefined,\n\t);\n\n\tif (conditions.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tif (conditions.length === 1) {\n\t\treturn new SQL(conditions);\n\t}\n\n\treturn new SQL([\n\t\tnew StringChunk('('),\n\t\tsql.join(conditions, new StringChunk(' or ')),\n\t\tnew StringChunk(')'),\n\t]);\n}\n\n/**\n * Negate the meaning of an expression using the `not` keyword.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars _not_ made by GM or Ford.\n * db.select().from(cars)\n * .where(not(inArray(cars.make, ['GM', 'Ford'])))\n * ```\n */\nexport function not(condition: SQLWrapper): SQL {\n\treturn sql`not ${condition}`;\n}\n\n/**\n * Test that the first expression passed is greater than\n * the second expression.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made after 2000.\n * db.select().from(cars)\n * .where(gt(cars.year, 2000))\n * ```\n *\n * @see gte for greater-than-or-equal\n */\nexport const gt: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} > ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that the first expression passed is greater than\n * or equal to the second expression. Use `gt` to\n * test whether an expression is strictly greater\n * than another.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made on or after 2000.\n * db.select().from(cars)\n * .where(gte(cars.year, 2000))\n * ```\n *\n * @see gt for a strictly greater-than condition\n */\nexport const gte: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} >= ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that the first expression passed is less than\n * the second expression.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made before 2000.\n * db.select().from(cars)\n * .where(lt(cars.year, 2000))\n * ```\n *\n * @see lte for less-than-or-equal\n */\nexport const lt: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} < ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that the first expression passed is less than\n * or equal to the second expression.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made before 2000.\n * db.select().from(cars)\n * .where(lte(cars.year, 2000))\n * ```\n *\n * @see lt for a strictly less-than condition\n */\nexport const lte: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} <= ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test whether the first parameter, a column or expression,\n * has a value from a list passed as the second argument.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made by Ford or GM.\n * db.select().from(cars)\n * .where(inArray(cars.make, ['Ford', 'GM']))\n * ```\n *\n * @see notInArray for the inverse of this test\n */\nexport function inArray<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function inArray<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: ReadonlyArray<GetColumnData<TColumn, 'raw'> | Placeholder> | SQLWrapper,\n): SQL;\nexport function inArray<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: ReadonlyArray<unknown | Placeholder> | SQLWrapper,\n): SQL;\nexport function inArray(\n\tcolumn: SQLWrapper,\n\tvalues: ReadonlyArray<unknown | Placeholder> | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\treturn sql`false`;\n\t\t}\n\t\treturn sql`${column} in ${values.map((v) => bindIfParam(v, column))}`;\n\t}\n\n\treturn sql`${column} in ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test whether the first parameter, a column or expression,\n * has a value that is not present in a list passed as the\n * second argument.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made by any company except Ford or GM.\n * db.select().from(cars)\n * .where(notInArray(cars.make, ['Ford', 'GM']))\n * ```\n *\n * @see inArray for the inverse of this test\n */\nexport function notInArray<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function notInArray<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function notInArray<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function notInArray(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\treturn sql`true`;\n\t\t}\n\t\treturn sql`${column} not in ${values.map((v) => bindIfParam(v, column))}`;\n\t}\n\n\treturn sql`${column} not in ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test whether an expression is NULL. By the SQL standard,\n * NULL is neither equal nor not equal to itself, so\n * it's recommended to use `isNull` and `notIsNull` for\n * comparisons to NULL.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars that have no discontinuedAt date.\n * db.select().from(cars)\n * .where(isNull(cars.discontinuedAt))\n * ```\n *\n * @see isNotNull for the inverse of this test\n */\nexport function isNull(value: SQLWrapper): SQL {\n\treturn sql`${value} is null`;\n}\n\n/**\n * Test whether an expression is not NULL. By the SQL standard,\n * NULL is neither equal nor not equal to itself, so\n * it's recommended to use `isNull` and `notIsNull` for\n * comparisons to NULL.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars that have been discontinued.\n * db.select().from(cars)\n * .where(isNotNull(cars.discontinuedAt))\n * ```\n *\n * @see isNull for the inverse of this test\n */\nexport function isNotNull(value: SQLWrapper): SQL {\n\treturn sql`${value} is not null`;\n}\n\n/**\n * Test whether a subquery evaluates to have any rows.\n *\n * ## Examples\n *\n * ```ts\n * // Users whose `homeCity` column has a match in a cities\n * // table.\n * db\n * .select()\n * .from(users)\n * .where(\n * exists(db.select()\n * .from(cities)\n * .where(eq(users.homeCity, cities.id))),\n * );\n * ```\n *\n * @see notExists for the inverse of this test\n */\nexport function exists(subquery: SQLWrapper): SQL {\n\treturn sql`exists ${subquery}`;\n}\n\n/**\n * Test whether a subquery doesn't include any result\n * rows.\n *\n * ## Examples\n *\n * ```ts\n * // Users whose `homeCity` column doesn't match\n * // a row in the cities table.\n * db\n * .select()\n * .from(users)\n * .where(\n * notExists(db.select()\n * .from(cities)\n * .where(eq(users.homeCity, cities.id))),\n * );\n * ```\n *\n * @see exists for the inverse of this test\n */\nexport function notExists(subquery: SQLWrapper): SQL {\n\treturn sql`not exists ${subquery}`;\n}\n\n/**\n * Test whether an expression is between two values. This\n * is an easier way to express range tests, which would be\n * expressed mathematically as `x <= a <= y` but in SQL\n * would have to be like `a >= x AND a <= y`.\n *\n * Between is inclusive of the endpoints: if `column`\n * is equal to `min` or `max`, it will be TRUE.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made between 1990 and 2000\n * db.select().from(cars)\n * .where(between(cars.year, 1990, 2000))\n * ```\n *\n * @see notBetween for the inverse of this test\n */\nexport function between<T>(\n\tcolumn: SQL.Aliased,\n\tmin: T | SQLWrapper,\n\tmax: T | SQLWrapper,\n): SQL;\nexport function between<TColumn extends AnyColumn>(\n\tcolumn: TColumn,\n\tmin: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n\tmax: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n): SQL;\nexport function between<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tmin: unknown,\n\tmax: unknown,\n): SQL;\nexport function between(column: SQLWrapper, min: unknown, max: unknown): SQL {\n\treturn sql`${column} between ${bindIfParam(min, column)} and ${\n\t\tbindIfParam(\n\t\t\tmax,\n\t\t\tcolumn,\n\t\t)\n\t}`;\n}\n\n/**\n * Test whether an expression is not between two values.\n *\n * This, like `between`, includes its endpoints, so if\n * the `column` is equal to `min` or `max`, in this case\n * it will evaluate to FALSE.\n *\n * ## Examples\n *\n * ```ts\n * // Exclude cars made in the 1970s\n * db.select().from(cars)\n * .where(notBetween(cars.year, 1970, 1979))\n * ```\n *\n * @see between for the inverse of this test\n */\nexport function notBetween<T>(\n\tcolumn: SQL.Aliased,\n\tmin: T | SQLWrapper,\n\tmax: T | SQLWrapper,\n): SQL;\nexport function notBetween<TColumn extends AnyColumn>(\n\tcolumn: TColumn,\n\tmin: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n\tmax: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n): SQL;\nexport function notBetween<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tmin: unknown,\n\tmax: unknown,\n): SQL;\nexport function notBetween(\n\tcolumn: SQLWrapper,\n\tmin: unknown,\n\tmax: unknown,\n): SQL {\n\treturn sql`${column} not between ${\n\t\tbindIfParam(\n\t\t\tmin,\n\t\t\tcolumn,\n\t\t)\n\t} and ${bindIfParam(max, column)}`;\n}\n\n/**\n * Compare a column to a pattern, which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars with 'Turbo' in their names.\n * db.select().from(cars)\n * .where(like(cars.name, '%Turbo%'))\n * ```\n *\n * @see ilike for a case-insensitive version of this condition\n */\nexport function like(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} like ${value}`;\n}\n\n/**\n * The inverse of like - this tests that a given column\n * does not match a pattern, which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars that don't have \"ROver\" in their name.\n * db.select().from(cars)\n * .where(notLike(cars.name, '%Rover%'))\n * ```\n *\n * @see like for the inverse condition\n * @see notIlike for a case-insensitive version of this condition\n */\nexport function notLike(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} not like ${value}`;\n}\n\n/**\n * Case-insensitively compare a column to a pattern,\n * which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * Unlike like, this performs a case-insensitive comparison.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars with 'Turbo' in their names.\n * db.select().from(cars)\n * .where(ilike(cars.name, '%Turbo%'))\n * ```\n *\n * @see like for a case-sensitive version of this condition\n */\nexport function ilike(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} ilike ${value}`;\n}\n\n/**\n * The inverse of ilike - this case-insensitively tests that a given column\n * does not match a pattern, which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars that don't have \"Rover\" in their name.\n * db.select().from(cars)\n * .where(notLike(cars.name, '%Rover%'))\n * ```\n *\n * @see ilike for the inverse condition\n * @see notLike for a case-sensitive version of this condition\n */\nexport function notIlike(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} not ilike ${value}`;\n}\n\n/**\n * Test that a column or expression contains all elements of\n * the list passed as the second argument.\n *\n * ## Throws\n *\n * The argument passed in the second array can't be empty:\n * if an empty is provided, this method will throw.\n *\n * ## Examples\n *\n * ```ts\n * // Select posts where its tags contain \"Typescript\" and \"ORM\".\n * db.select().from(posts)\n * .where(arrayContains(posts.tags, ['Typescript', 'ORM']))\n * ```\n *\n * @see arrayContained to find if an array contains all elements of a column or expression\n * @see arrayOverlaps to find if a column or expression contains any elements of an array\n */\nexport function arrayContains<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContains<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContains<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function arrayContains(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('arrayContains requires at least one value');\n\t\t}\n\t\tconst array = sql`${bindIfParam(values, column)}`;\n\t\treturn sql`${column} @> ${array}`;\n\t}\n\n\treturn sql`${column} @> ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test that the list passed as the second argument contains\n * all elements of a column or expression.\n *\n * ## Throws\n *\n * The argument passed in the second array can't be empty:\n * if an empty is provided, this method will throw.\n *\n * ## Examples\n *\n * ```ts\n * // Select posts where its tags contain \"Typescript\", \"ORM\" or both,\n * // but filtering posts that have additional tags.\n * db.select().from(posts)\n * .where(arrayContained(posts.tags, ['Typescript', 'ORM']))\n * ```\n *\n * @see arrayContains to find if a column or expression contains all elements of an array\n * @see arrayOverlaps to find if a column or expression contains any elements of an array\n */\nexport function arrayContained<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContained<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContained<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function arrayContained(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('arrayContained requires at least one value');\n\t\t}\n\t\tconst array = sql`${bindIfParam(values, column)}`;\n\t\treturn sql`${column} <@ ${array}`;\n\t}\n\n\treturn sql`${column} <@ ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test that a column or expression contains any elements of\n * the list passed as the second argument.\n *\n * ## Throws\n *\n * The argument passed in the second array can't be empty:\n * if an empty is provided, this method will throw.\n *\n * ## Examples\n *\n * ```ts\n * // Select posts where its tags contain \"Typescript\", \"ORM\" or both.\n * db.select().from(posts)\n * .where(arrayOverlaps(posts.tags, ['Typescript', 'ORM']))\n * ```\n *\n * @see arrayContains to find if a column or expression contains all elements of an array\n * @see arrayContained to find if an array contains all elements of a column or expression\n */\nexport function arrayOverlaps<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayOverlaps<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayOverlaps<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function arrayOverlaps(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('arrayOverlaps requires at least one value');\n\t\t}\n\t\tconst array = sql`${bindIfParam(values, column)}`;\n\t\treturn sql`${column} && ${array}`;\n\t}\n\n\treturn sql`${column} && ${bindIfParam(values, column)}`;\n}\n","import type { AnyColumn } from '../../column.ts';\nimport type { SQL, SQLWrapper } from '../sql.ts';\nimport { sql } from '../sql.ts';\n\n/**\n * Used in sorting, this specifies that the given\n * column or expression should be sorted in ascending\n * order. By the SQL standard, ascending order is the\n * default, so it is not usually necessary to specify\n * ascending sort order.\n *\n * ## Examples\n *\n * ```ts\n * // Return cars, starting with the oldest models\n * // and going in ascending order to the newest.\n * db.select().from(cars)\n * .orderBy(asc(cars.year));\n * ```\n *\n * @see desc to sort in descending order\n */\nexport function asc(column: AnyColumn | SQLWrapper): SQL {\n\treturn sql`${column} asc`;\n}\n\n/**\n * Used in sorting, this specifies that the given\n * column or expression should be sorted in descending\n * order.\n *\n * ## Examples\n *\n * ```ts\n * // Select users, with the most recently created\n * // records coming first.\n * db.select().from(users)\n * .orderBy(desc(users.createdAt));\n * ```\n *\n * @see asc to sort in ascending order\n */\nexport function desc(column: AnyColumn | SQLWrapper): SQL {\n\treturn sql`${column} desc`;\n}\n","import { type AnyTable, getTableUniqueName, type InferModelFromColumns, Table } from '~/table.ts';\nimport { type AnyColumn, Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { PrimaryKeyBuilder } from './pg-core/primary-keys.ts';\nimport {\n\tand,\n\tasc,\n\tbetween,\n\tdesc,\n\teq,\n\texists,\n\tgt,\n\tgte,\n\tilike,\n\tinArray,\n\tisNotNull,\n\tisNull,\n\tlike,\n\tlt,\n\tlte,\n\tne,\n\tnot,\n\tnotBetween,\n\tnotExists,\n\tnotIlike,\n\tnotInArray,\n\tnotLike,\n\tor,\n} from './sql/expressions/index.ts';\nimport { type Placeholder, SQL, sql } from './sql/sql.ts';\nimport type { Assume, ColumnsWithTable, Equal, Simplify, ValueOrArray } from './utils.ts';\n\nexport abstract class Relation<TTableName extends string = string> {\n\tstatic readonly [entityKind]: string = 'Relation';\n\n\tdeclare readonly $brand: 'Relation';\n\treadonly referencedTableName: TTableName;\n\tfieldName!: string;\n\n\tconstructor(\n\t\treadonly sourceTable: Table,\n\t\treadonly referencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly relationName: string | undefined,\n\t) {\n\t\tthis.referencedTableName = referencedTable[Table.Symbol.Name] as TTableName;\n\t}\n\n\tabstract withFieldName(fieldName: string): Relation<TTableName>;\n}\n\nexport class Relations<\n\tTTableName extends string = string,\n\tTConfig extends Record<string, Relation> = Record<string, Relation>,\n> {\n\tstatic readonly [entityKind]: string = 'Relations';\n\n\tdeclare readonly $brand: 'Relations';\n\n\tconstructor(\n\t\treadonly table: AnyTable<{ name: TTableName }>,\n\t\treadonly config: (helpers: TableRelationsHelpers<TTableName>) => TConfig,\n\t) {}\n}\n\nexport class One<\n\tTTableName extends string = string,\n\tTIsNullable extends boolean = boolean,\n> extends Relation<TTableName> {\n\tstatic override readonly [entityKind]: string = 'One';\n\n\tdeclare protected $relationBrand: 'One';\n\n\tconstructor(\n\t\tsourceTable: Table,\n\t\treferencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly config:\n\t\t\t| RelationConfig<\n\t\t\t\tTTableName,\n\t\t\t\tstring,\n\t\t\t\tAnyColumn<{ tableName: TTableName }>[]\n\t\t\t>\n\t\t\t| undefined,\n\t\treadonly isNullable: TIsNullable,\n\t) {\n\t\tsuper(sourceTable, referencedTable, config?.relationName);\n\t}\n\n\twithFieldName(fieldName: string): One<TTableName> {\n\t\tconst relation = new One(\n\t\t\tthis.sourceTable,\n\t\t\tthis.referencedTable,\n\t\t\tthis.config,\n\t\t\tthis.isNullable,\n\t\t);\n\t\trelation.fieldName = fieldName;\n\t\treturn relation;\n\t}\n}\n\nexport class Many<TTableName extends string> extends Relation<TTableName> {\n\tstatic override readonly [entityKind]: string = 'Many';\n\n\tdeclare protected $relationBrand: 'Many';\n\n\tconstructor(\n\t\tsourceTable: Table,\n\t\treferencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly config: { relationName: string } | undefined,\n\t) {\n\t\tsuper(sourceTable, referencedTable, config?.relationName);\n\t}\n\n\twithFieldName(fieldName: string): Many<TTableName> {\n\t\tconst relation = new Many(\n\t\t\tthis.sourceTable,\n\t\t\tthis.referencedTable,\n\t\t\tthis.config,\n\t\t);\n\t\trelation.fieldName = fieldName;\n\t\treturn relation;\n\t}\n}\n\nexport type TableRelationsKeysOnly<\n\tTSchema extends Record<string, unknown>,\n\tTTableName extends string,\n\tK extends keyof TSchema,\n> = TSchema[K] extends Relations<TTableName> ? K : never;\n\nexport type ExtractTableRelationsFromSchema<\n\tTSchema extends Record<string, unknown>,\n\tTTableName extends string,\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TSchema as TableRelationsKeysOnly<\n\t\t\t\tTSchema,\n\t\t\t\tTTableName,\n\t\t\t\tK\n\t\t\t>\n\t\t]: TSchema[K] extends Relations<TTableName, infer TConfig> ? TConfig : never;\n\t}\n>;\n\nexport type ExtractObjectValues<T> = T[keyof T];\n\nexport type ExtractRelationsFromTableExtraConfigSchema<\n\tTConfig extends unknown[],\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TConfig as TConfig[K] extends Relations<any> ? K\n\t\t\t\t: never\n\t\t]: TConfig[K] extends Relations<infer TRelationConfig> ? TRelationConfig\n\t\t\t: never;\n\t}\n>;\n\nexport function getOperators() {\n\treturn {\n\t\tand,\n\t\tbetween,\n\t\teq,\n\t\texists,\n\t\tgt,\n\t\tgte,\n\t\tilike,\n\t\tinArray,\n\t\tisNull,\n\t\tisNotNull,\n\t\tlike,\n\t\tlt,\n\t\tlte,\n\t\tne,\n\t\tnot,\n\t\tnotBetween,\n\t\tnotExists,\n\t\tnotLike,\n\t\tnotIlike,\n\t\tnotInArray,\n\t\tor,\n\t\tsql,\n\t};\n}\n\nexport type Operators = ReturnType<typeof getOperators>;\n\nexport function getOrderByOperators() {\n\treturn {\n\t\tsql,\n\t\tasc,\n\t\tdesc,\n\t};\n}\n\nexport type OrderByOperators = ReturnType<typeof getOrderByOperators>;\n\nexport type FindTableByDBName<\n\tTSchema extends TablesRelationalConfig,\n\tTTableName extends string,\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TSchema as TSchema[K]['dbName'] extends TTableName ? K\n\t\t\t\t: never\n\t\t]: TSchema[K];\n\t}\n>;\n\nexport type DBQueryConfig<\n\tTRelationType extends 'one' | 'many' = 'one' | 'many',\n\tTIsRoot extends boolean = boolean,\n\tTSchema extends TablesRelationalConfig = TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig = TableRelationalConfig,\n> =\n\t& {\n\t\tcolumns?:\n\t\t\t| {\n\t\t\t\t[K in keyof TTableConfig['columns']]?: boolean;\n\t\t\t}\n\t\t\t| undefined;\n\t\twith?:\n\t\t\t| {\n\t\t\t\t[K in keyof TTableConfig['relations']]?:\n\t\t\t\t\t| true\n\t\t\t\t\t| DBQueryConfig<\n\t\t\t\t\t\tTTableConfig['relations'][K] extends One ? 'one' : 'many',\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tTSchema,\n\t\t\t\t\t\tFindTableByDBName<\n\t\t\t\t\t\t\tTSchema,\n\t\t\t\t\t\t\tTTableConfig['relations'][K]['referencedTableName']\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t\t| undefined;\n\t\t\t}\n\t\t\t| undefined;\n\t\textras?:\n\t\t\t| Record<string, SQL.Aliased>\n\t\t\t| ((\n\t\t\t\tfields: Simplify<\n\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t>,\n\t\t\t\toperators: { sql: Operators['sql'] },\n\t\t\t) => Record<string, SQL.Aliased>)\n\t\t\t| undefined;\n\t}\n\t& (TRelationType extends 'many' ?\n\t\t\t& {\n\t\t\t\twhere?:\n\t\t\t\t\t| SQL\n\t\t\t\t\t| undefined\n\t\t\t\t\t| ((\n\t\t\t\t\t\tfields: Simplify<\n\t\t\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t\t\t>,\n\t\t\t\t\t\toperators: Operators,\n\t\t\t\t\t) => SQL | undefined);\n\t\t\t\torderBy?:\n\t\t\t\t\t| ValueOrArray<AnyColumn | SQL>\n\t\t\t\t\t| ((\n\t\t\t\t\t\tfields: Simplify<\n\t\t\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t\t\t>,\n\t\t\t\t\t\toperators: OrderByOperators,\n\t\t\t\t\t) => ValueOrArray<AnyColumn | SQL>)\n\t\t\t\t\t| undefined;\n\t\t\t\tlimit?: number | Placeholder | undefined;\n\t\t\t}\n\t\t\t& (TIsRoot extends true ? {\n\t\t\t\t\toffset?: number | Placeholder | undefined;\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t: {});\n\nexport interface TableRelationalConfig {\n\ttsName: string;\n\tdbName: string;\n\tcolumns: Record<string, Column>;\n\trelations: Record<string, Relation>;\n\tprimaryKey: AnyColumn[];\n\tschema?: string;\n}\n\nexport type TablesRelationalConfig = Record<string, TableRelationalConfig>;\n\nexport interface RelationalSchemaConfig<\n\tTSchema extends TablesRelationalConfig,\n> {\n\tfullSchema: Record<string, unknown>;\n\tschema: TSchema;\n\ttableNamesMap: Record<string, string>;\n}\n\nexport type ExtractTablesWithRelations<\n\tTSchema extends Record<string, unknown>,\n> = {\n\t[\n\t\tK in keyof TSchema as TSchema[K] extends Table ? K\n\t\t\t: never\n\t]: TSchema[K] extends Table ? {\n\t\t\ttsName: K & string;\n\t\t\tdbName: TSchema[K]['_']['name'];\n\t\t\tcolumns: TSchema[K]['_']['columns'];\n\t\t\trelations: ExtractTableRelationsFromSchema<\n\t\t\t\tTSchema,\n\t\t\t\tTSchema[K]['_']['name']\n\t\t\t>;\n\t\t\tprimaryKey: AnyColumn[];\n\t\t}\n\t\t: never;\n};\n\nexport type ReturnTypeOrValue<T> = T extends (...args: any[]) => infer R ? R\n\t: T;\n\nexport type BuildRelationResult<\n\tTSchema extends TablesRelationalConfig,\n\tTInclude,\n\tTRelations extends Record<string, Relation>,\n> = {\n\t[\n\t\tK in\n\t\t\t& NonUndefinedKeysOnly<TInclude>\n\t\t\t& keyof TRelations\n\t]: TRelations[K] extends infer TRel extends Relation ? BuildQueryResult<\n\t\t\tTSchema,\n\t\t\tFindTableByDBName<TSchema, TRel['referencedTableName']>,\n\t\t\tAssume<TInclude[K], true | Record<string, unknown>>\n\t\t> extends infer TResult ? TRel extends One ?\n\t\t\t\t\t| TResult\n\t\t\t\t\t| (Equal<TRel['isNullable'], false> extends true ? null : never)\n\t\t\t: TResult[]\n\t\t: never\n\t\t: never;\n};\n\nexport type NonUndefinedKeysOnly<T> =\n\t& ExtractObjectValues<\n\t\t{\n\t\t\t[K in keyof T as T[K] extends undefined ? never : K]: K;\n\t\t}\n\t>\n\t& keyof T;\n\nexport type BuildQueryResult<\n\tTSchema extends TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig,\n\tTFullSelection extends true | Record<string, unknown>,\n> = Equal<TFullSelection, true> extends true ? InferModelFromColumns<TTableConfig['columns']>\n\t: TFullSelection extends Record<string, unknown> ? Simplify<\n\t\t\t& (TFullSelection['columns'] extends Record<string, unknown> ? InferModelFromColumns<\n\t\t\t\t\t{\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tK in Equal<\n\t\t\t\t\t\t\t\tExclude<\n\t\t\t\t\t\t\t\t\tTFullSelection['columns'][\n\t\t\t\t\t\t\t\t\t\t& keyof TFullSelection['columns']\n\t\t\t\t\t\t\t\t\t\t& keyof TTableConfig['columns']\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t\t\t>,\n\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t> extends true ? Exclude<\n\t\t\t\t\t\t\t\t\tkeyof TTableConfig['columns'],\n\t\t\t\t\t\t\t\t\tNonUndefinedKeysOnly<TFullSelection['columns']>\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t& {\n\t\t\t\t\t\t\t\t\t\t[K in keyof TFullSelection['columns']]: Equal<\n\t\t\t\t\t\t\t\t\t\t\tTFullSelection['columns'][K],\n\t\t\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t\t\t> extends true ? K\n\t\t\t\t\t\t\t\t\t\t\t: never;\n\t\t\t\t\t\t\t\t\t}[keyof TFullSelection['columns']]\n\t\t\t\t\t\t\t\t\t& keyof TTableConfig['columns']\n\t\t\t\t\t\t]: TTableConfig['columns'][K];\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t: InferModelFromColumns<TTableConfig['columns']>)\n\t\t\t& (TFullSelection['extras'] extends\n\t\t\t\t| Record<string, unknown>\n\t\t\t\t| ((...args: any[]) => Record<string, unknown>) ? {\n\t\t\t\t\t[\n\t\t\t\t\t\tK in NonUndefinedKeysOnly<\n\t\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>\n\t\t\t\t\t\t>\n\t\t\t\t\t]: Assume<\n\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>[K],\n\t\t\t\t\t\tSQL.Aliased\n\t\t\t\t\t>['_']['type'];\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t\t& (TFullSelection['with'] extends Record<string, unknown> ? BuildRelationResult<\n\t\t\t\t\tTSchema,\n\t\t\t\t\tTFullSelection['with'],\n\t\t\t\t\tTTableConfig['relations']\n\t\t\t\t>\n\t\t\t\t: {})\n\t\t>\n\t: never;\n\nexport interface RelationConfig<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends AnyColumn<{ tableName: TTableName }>[],\n> {\n\trelationName?: string;\n\tfields: TColumns;\n\treferences: ColumnsWithTable<TTableName, TForeignTableName, TColumns>;\n}\n\nexport function extractTablesRelationalConfig<\n\tTTables extends TablesRelationalConfig,\n>(\n\tschema: Record<string, unknown>,\n\tconfigHelpers: (table: Table) => any,\n): { tables: TTables; tableNamesMap: Record<string, string> } {\n\tif (\n\t\tObject.keys(schema).length === 1\n\t\t&& 'default' in schema\n\t\t&& !is(schema['default'], Table)\n\t) {\n\t\tschema = schema['default'] as Record<string, unknown>;\n\t}\n\n\t// table DB name -> schema table key\n\tconst tableNamesMap: Record<string, string> = {};\n\t// Table relations found before their tables - need to buffer them until we know the schema table key\n\tconst relationsBuffer: Record<\n\t\tstring,\n\t\t{ relations: Record<string, Relation>; primaryKey?: AnyColumn[] }\n\t> = {};\n\tconst tablesConfig: TablesRelationalConfig = {};\n\tfor (const [key, value] of Object.entries(schema)) {\n\t\tif (is(value, Table)) {\n\t\t\tconst dbName = getTableUniqueName(value);\n\t\t\tconst bufferedRelations = relationsBuffer[dbName];\n\t\t\ttableNamesMap[dbName] = key;\n\t\t\ttablesConfig[key] = {\n\t\t\t\ttsName: key,\n\t\t\t\tdbName: value[Table.Symbol.Name],\n\t\t\t\tschema: value[Table.Symbol.Schema],\n\t\t\t\tcolumns: value[Table.Symbol.Columns],\n\t\t\t\trelations: bufferedRelations?.relations ?? {},\n\t\t\t\tprimaryKey: bufferedRelations?.primaryKey ?? [],\n\t\t\t};\n\n\t\t\t// Fill in primary keys\n\t\t\tfor (\n\t\t\t\tconst column of Object.values(\n\t\t\t\t\t(value as Table)[Table.Symbol.Columns],\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tif (column.primary) {\n\t\t\t\t\ttablesConfig[key]!.primaryKey.push(column);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst extraConfig = value[Table.Symbol.ExtraConfigBuilder]?.((value as Table)[Table.Symbol.ExtraConfigColumns]);\n\t\t\tif (extraConfig) {\n\t\t\t\tfor (const configEntry of Object.values(extraConfig)) {\n\t\t\t\t\tif (is(configEntry, PrimaryKeyBuilder)) {\n\t\t\t\t\t\ttablesConfig[key]!.primaryKey.push(...configEntry.columns);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (is(value, Relations)) {\n\t\t\tconst dbName = getTableUniqueName(value.table);\n\t\t\tconst tableName = tableNamesMap[dbName];\n\t\t\tconst relations: Record<string, Relation> = value.config(\n\t\t\t\tconfigHelpers(value.table),\n\t\t\t);\n\t\t\tlet primaryKey: AnyColumn[] | undefined;\n\n\t\t\tfor (const [relationName, relation] of Object.entries(relations)) {\n\t\t\t\tif (tableName) {\n\t\t\t\t\tconst tableConfig = tablesConfig[tableName]!;\n\t\t\t\t\ttableConfig.relations[relationName] = relation;\n\t\t\t\t\tif (primaryKey) {\n\t\t\t\t\t\ttableConfig.primaryKey.push(...primaryKey);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!(dbName in relationsBuffer)) {\n\t\t\t\t\t\trelationsBuffer[dbName] = {\n\t\t\t\t\t\t\trelations: {},\n\t\t\t\t\t\t\tprimaryKey,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\trelationsBuffer[dbName]!.relations[relationName] = relation;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { tables: tablesConfig as TTables, tableNamesMap };\n}\n\nexport function relations<\n\tTTableName extends string,\n\tTRelations extends Record<string, Relation<any>>,\n>(\n\ttable: AnyTable<{ name: TTableName }>,\n\trelations: (helpers: TableRelationsHelpers<TTableName>) => TRelations,\n): Relations<TTableName, TRelations> {\n\treturn new Relations<TTableName, TRelations>(\n\t\ttable,\n\t\t(helpers: TableRelationsHelpers<TTableName>) =>\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.entries(relations(helpers)).map(([key, value]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue.withFieldName(key),\n\t\t\t\t]),\n\t\t\t) as TRelations,\n\t);\n}\n\nexport function createOne<TTableName extends string>(sourceTable: Table) {\n\treturn function one<\n\t\tTForeignTable extends Table,\n\t\tTColumns extends [\n\t\t\tAnyColumn<{ tableName: TTableName }>,\n\t\t\t...AnyColumn<{ tableName: TTableName }>[],\n\t\t],\n\t>(\n\t\ttable: TForeignTable,\n\t\tconfig?: RelationConfig<TTableName, TForeignTable['_']['name'], TColumns>,\n\t): One<\n\t\tTForeignTable['_']['name'],\n\t\tEqual<TColumns[number]['_']['notNull'], true>\n\t> {\n\t\treturn new One(\n\t\t\tsourceTable,\n\t\t\ttable,\n\t\t\tconfig,\n\t\t\t(config?.fields.reduce<boolean>((res, f) => res && f.notNull, true)\n\t\t\t\t?? false) as Equal<TColumns[number]['_']['notNull'], true>,\n\t\t);\n\t};\n}\n\nexport function createMany(sourceTable: Table) {\n\treturn function many<TForeignTable extends Table>(\n\t\treferencedTable: TForeignTable,\n\t\tconfig?: { relationName: string },\n\t): Many<TForeignTable['_']['name']> {\n\t\treturn new Many(sourceTable, referencedTable, config);\n\t};\n}\n\nexport interface NormalizedRelation {\n\tfields: AnyColumn[];\n\treferences: AnyColumn[];\n}\n\nexport function normalizeRelation(\n\tschema: TablesRelationalConfig,\n\ttableNamesMap: Record<string, string>,\n\trelation: Relation,\n): NormalizedRelation {\n\tif (is(relation, One) && relation.config) {\n\t\treturn {\n\t\t\tfields: relation.config.fields,\n\t\t\treferences: relation.config.references,\n\t\t};\n\t}\n\n\tconst referencedTableTsName = tableNamesMap[getTableUniqueName(relation.referencedTable)];\n\tif (!referencedTableTsName) {\n\t\tthrow new Error(\n\t\t\t`Table \"${relation.referencedTable[Table.Symbol.Name]}\" not found in schema`,\n\t\t);\n\t}\n\n\tconst referencedTableConfig = schema[referencedTableTsName];\n\tif (!referencedTableConfig) {\n\t\tthrow new Error(`Table \"${referencedTableTsName}\" not found in schema`);\n\t}\n\n\tconst sourceTable = relation.sourceTable;\n\tconst sourceTableTsName = tableNamesMap[getTableUniqueName(sourceTable)];\n\tif (!sourceTableTsName) {\n\t\tthrow new Error(\n\t\t\t`Table \"${sourceTable[Table.Symbol.Name]}\" not found in schema`,\n\t\t);\n\t}\n\n\tconst reverseRelations: Relation[] = [];\n\tfor (\n\t\tconst referencedTableRelation of Object.values(\n\t\t\treferencedTableConfig.relations,\n\t\t)\n\t) {\n\t\tif (\n\t\t\t(relation.relationName\n\t\t\t\t&& relation !== referencedTableRelation\n\t\t\t\t&& referencedTableRelation.relationName === relation.relationName)\n\t\t\t|| (!relation.relationName\n\t\t\t\t&& referencedTableRelation.referencedTable === relation.sourceTable)\n\t\t) {\n\t\t\treverseRelations.push(referencedTableRelation);\n\t\t}\n\t}\n\n\tif (reverseRelations.length > 1) {\n\t\tthrow relation.relationName\n\t\t\t? new Error(\n\t\t\t\t`There are multiple relations with name \"${relation.relationName}\" in table \"${referencedTableTsName}\"`,\n\t\t\t)\n\t\t\t: new Error(\n\t\t\t\t`There are multiple relations between \"${referencedTableTsName}\" and \"${\n\t\t\t\t\trelation.sourceTable[Table.Symbol.Name]\n\t\t\t\t}\". Please specify relation name`,\n\t\t\t);\n\t}\n\n\tif (\n\t\treverseRelations[0]\n\t\t&& is(reverseRelations[0], One)\n\t\t&& reverseRelations[0].config\n\t) {\n\t\treturn {\n\t\t\tfields: reverseRelations[0].config.references,\n\t\t\treferences: reverseRelations[0].config.fields,\n\t\t};\n\t}\n\n\tthrow new Error(\n\t\t`There is not enough information to infer relation \"${sourceTableTsName}.${relation.fieldName}\"`,\n\t);\n}\n\nexport function createTableRelationsHelpers<TTableName extends string>(\n\tsourceTable: AnyTable<{ name: TTableName }>,\n) {\n\treturn {\n\t\tone: createOne<TTableName>(sourceTable),\n\t\tmany: createMany(sourceTable),\n\t};\n}\n\nexport type TableRelationsHelpers<TTableName extends string> = ReturnType<\n\ttypeof createTableRelationsHelpers<TTableName>\n>;\n\nexport interface BuildRelationalQueryResult<\n\tTTable extends Table = Table,\n\tTColumn extends Column = Column,\n> {\n\ttableTsKey: string;\n\tselection: {\n\t\tdbKey: string;\n\t\ttsKey: string;\n\t\tfield: TColumn | SQL | SQL.Aliased;\n\t\trelationTableTsKey: string | undefined;\n\t\tisJson: boolean;\n\t\tisExtra?: boolean;\n\t\tselection: BuildRelationalQueryResult<TTable>['selection'];\n\t}[];\n\tsql: TTable | SQL;\n}\n\nexport function mapRelationalRow(\n\ttablesConfig: TablesRelationalConfig,\n\ttableConfig: TableRelationalConfig,\n\trow: unknown[],\n\tbuildQueryResultSelection: BuildRelationalQueryResult['selection'],\n\tmapColumnValue: (value: unknown) => unknown = (value) => value,\n): Record<string, unknown> {\n\tconst result: Record<string, unknown> = {};\n\n\tfor (\n\t\tconst [\n\t\t\tselectionItemIndex,\n\t\t\tselectionItem,\n\t\t] of buildQueryResultSelection.entries()\n\t) {\n\t\tif (selectionItem.isJson) {\n\t\t\tconst relation = tableConfig.relations[selectionItem.tsKey]!;\n\t\t\tconst rawSubRows = row[selectionItemIndex] as\n\t\t\t\t| unknown[]\n\t\t\t\t| null\n\t\t\t\t| [null]\n\t\t\t\t| string;\n\t\t\tconst subRows = typeof rawSubRows === 'string'\n\t\t\t\t? (JSON.parse(rawSubRows) as unknown[])\n\t\t\t\t: rawSubRows;\n\t\t\tresult[selectionItem.tsKey] = is(relation, One)\n\t\t\t\t? subRows\n\t\t\t\t\t&& mapRelationalRow(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRows,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t: (subRows as unknown[][]).map((subRow) =>\n\t\t\t\t\tmapRelationalRow(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRow,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t} else {\n\t\t\tconst value = mapColumnValue(row[selectionItemIndex]);\n\t\t\tconst field = selectionItem.field!;\n\t\t\tlet decoder;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tresult[selectionItem.tsKey] = value === null ? null : decoder.mapFromDriverValue(value);\n\t\t}\n\t}\n\n\treturn result;\n}\n","import type { AnyColumn } from './column.ts';\nimport { Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport type { Relation } from './relations.ts';\nimport type { View } from './sql/sql.ts';\nimport { SQL, sql } from './sql/sql.ts';\nimport { Table } from './table.ts';\nimport { ViewBaseConfig } from './view-common.ts';\n\nexport class ColumnAliasProxyHandler<TColumn extends Column> implements ProxyHandler<TColumn> {\n\tstatic readonly [entityKind]: string = 'ColumnAliasProxyHandler';\n\n\tconstructor(private table: Table | View) {}\n\n\tget(columnObj: TColumn, prop: string | symbol): any {\n\t\tif (prop === 'table') {\n\t\t\treturn this.table;\n\t\t}\n\n\t\treturn columnObj[prop as keyof TColumn];\n\t}\n}\n\nexport class TableAliasProxyHandler<T extends Table | View> implements ProxyHandler<T> {\n\tstatic readonly [entityKind]: string = 'TableAliasProxyHandler';\n\n\tconstructor(private alias: string, private replaceOriginalName: boolean) {}\n\n\tget(target: T, prop: string | symbol): any {\n\t\tif (prop === Table.Symbol.IsAlias) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (prop === Table.Symbol.Name) {\n\t\t\treturn this.alias;\n\t\t}\n\n\t\tif (this.replaceOriginalName && prop === Table.Symbol.OriginalName) {\n\t\t\treturn this.alias;\n\t\t}\n\n\t\tif (prop === ViewBaseConfig) {\n\t\t\treturn {\n\t\t\t\t...target[ViewBaseConfig as keyof typeof target],\n\t\t\t\tname: this.alias,\n\t\t\t\tisAlias: true,\n\t\t\t};\n\t\t}\n\n\t\tif (prop === Table.Symbol.Columns) {\n\t\t\tconst columns = (target as Table)[Table.Symbol.Columns];\n\t\t\tif (!columns) {\n\t\t\t\treturn columns;\n\t\t\t}\n\n\t\t\tconst proxiedColumns: { [key: string]: any } = {};\n\n\t\t\tObject.keys(columns).map((key) => {\n\t\t\t\tproxiedColumns[key] = new Proxy(\n\t\t\t\t\tcolumns[key]!,\n\t\t\t\t\tnew ColumnAliasProxyHandler(new Proxy(target, this)),\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn proxiedColumns;\n\t\t}\n\n\t\tconst value = target[prop as keyof typeof target];\n\t\tif (is(value, Column)) {\n\t\t\treturn new Proxy(value as AnyColumn, new ColumnAliasProxyHandler(new Proxy(target, this)));\n\t\t}\n\n\t\treturn value;\n\t}\n}\n\nexport class RelationTableAliasProxyHandler<T extends Relation> implements ProxyHandler<T> {\n\tstatic readonly [entityKind]: string = 'RelationTableAliasProxyHandler';\n\n\tconstructor(private alias: string) {}\n\n\tget(target: T, prop: string | symbol): any {\n\t\tif (prop === 'sourceTable') {\n\t\t\treturn aliasedTable(target.sourceTable, this.alias);\n\t\t}\n\n\t\treturn target[prop as keyof typeof target];\n\t}\n}\n\nexport function aliasedTable<T extends Table | View>(\n\ttable: T,\n\ttableAlias: string,\n): T {\n\treturn new Proxy(table, new TableAliasProxyHandler(tableAlias, false)) as any;\n}\n\nexport function aliasedRelation<T extends Relation>(relation: T, tableAlias: string): T {\n\treturn new Proxy(relation, new RelationTableAliasProxyHandler(tableAlias));\n}\n\nexport function aliasedTableColumn<T extends AnyColumn>(column: T, tableAlias: string): T {\n\treturn new Proxy(\n\t\tcolumn,\n\t\tnew ColumnAliasProxyHandler(new Proxy(column.table, new TableAliasProxyHandler(tableAlias, false))),\n\t);\n}\n\nexport function mapColumnsInAliasedSQLToAlias(query: SQL.Aliased, alias: string): SQL.Aliased {\n\treturn new SQL.Aliased(mapColumnsInSQLToAlias(query.sql, alias), query.fieldAlias);\n}\n\nexport function mapColumnsInSQLToAlias(query: SQL, alias: string): SQL {\n\treturn sql.join(query.queryChunks.map((c) => {\n\t\tif (is(c, Column)) {\n\t\t\treturn aliasedTableColumn(c, alias);\n\t\t}\n\t\tif (is(c, SQL)) {\n\t\t\treturn mapColumnsInSQLToAlias(c, alias);\n\t\t}\n\t\tif (is(c, SQL.Aliased)) {\n\t\t\treturn mapColumnsInAliasedSQLToAlias(c, alias);\n\t\t}\n\t\treturn c;\n\t}));\n}\n","import { ColumnAliasProxyHandler, TableAliasProxyHandler } from './alias.ts';\nimport { Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { SQL, View } from './sql/sql.ts';\nimport { Subquery } from './subquery.ts';\nimport { ViewBaseConfig } from './view-common.ts';\n\nexport class SelectionProxyHandler<T extends Subquery | Record<string, unknown> | View>\n\timplements ProxyHandler<Subquery | Record<string, unknown> | View>\n{\n\tstatic readonly [entityKind]: string = 'SelectionProxyHandler';\n\n\tprivate config: {\n\t\t/**\n\t\t * Table alias for the columns\n\t\t */\n\t\talias?: string;\n\t\t/**\n\t\t * What to do when a field is an instance of `SQL.Aliased` and it's not a selection field (from a subquery)\n\t\t *\n\t\t * `sql` - return the underlying SQL expression\n\t\t *\n\t\t * `alias` - return the field alias\n\t\t */\n\t\tsqlAliasedBehavior: 'sql' | 'alias';\n\t\t/**\n\t\t * What to do when a field is an instance of `SQL` and it doesn't have an alias declared\n\t\t *\n\t\t * `sql` - return the underlying SQL expression\n\t\t *\n\t\t * `error` - return a DrizzleTypeError on type level and throw an error on runtime\n\t\t */\n\t\tsqlBehavior: 'sql' | 'error';\n\n\t\t/**\n\t\t * Whether to replace the original name of the column with the alias\n\t\t * Should be set to `true` for views creation\n\t\t * @default false\n\t\t */\n\t\treplaceOriginalName?: boolean;\n\t};\n\n\tconstructor(config: SelectionProxyHandler<T>['config']) {\n\t\tthis.config = { ...config };\n\t}\n\n\tget(subquery: T, prop: string | symbol): any {\n\t\tif (prop === '_') {\n\t\t\treturn {\n\t\t\t\t...subquery['_' as keyof typeof subquery],\n\t\t\t\tselectedFields: new Proxy(\n\t\t\t\t\t(subquery as Subquery)._.selectedFields,\n\t\t\t\t\tthis as ProxyHandler<Record<string, unknown>>,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\tif (prop === ViewBaseConfig) {\n\t\t\treturn {\n\t\t\t\t...subquery[ViewBaseConfig as keyof typeof subquery],\n\t\t\t\tselectedFields: new Proxy(\n\t\t\t\t\t(subquery as View)[ViewBaseConfig].selectedFields,\n\t\t\t\t\tthis as ProxyHandler<Record<string, unknown>>,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\tif (typeof prop === 'symbol') {\n\t\t\treturn subquery[prop as keyof typeof subquery];\n\t\t}\n\n\t\tconst columns = is(subquery, Subquery)\n\t\t\t? subquery._.selectedFields\n\t\t\t: is(subquery, View)\n\t\t\t? subquery[ViewBaseConfig].selectedFields\n\t\t\t: subquery;\n\t\tconst value: unknown = columns[prop as keyof typeof columns];\n\n\t\tif (is(value, SQL.Aliased)) {\n\t\t\t// Never return the underlying SQL expression for a field previously selected in a subquery\n\t\t\tif (this.config.sqlAliasedBehavior === 'sql' && !value.isSelectionField) {\n\t\t\t\treturn value.sql;\n\t\t\t}\n\n\t\t\tconst newValue = value.clone();\n\t\t\tnewValue.isSelectionField = true;\n\t\t\treturn newValue;\n\t\t}\n\n\t\tif (is(value, SQL)) {\n\t\t\tif (this.config.sqlBehavior === 'sql') {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tthrow new Error(\n\t\t\t\t`You tried to reference \"${prop}\" field from a subquery, which is a raw SQL field, but it doesn't have an alias declared. Please add an alias to the field using \".as('alias')\" method.`,\n\t\t\t);\n\t\t}\n\n\t\tif (is(value, Column)) {\n\t\t\tif (this.config.alias) {\n\t\t\t\treturn new Proxy(\n\t\t\t\t\tvalue,\n\t\t\t\t\tnew ColumnAliasProxyHandler(\n\t\t\t\t\t\tnew Proxy(\n\t\t\t\t\t\t\tvalue.table,\n\t\t\t\t\t\t\tnew TableAliasProxyHandler(this.config.alias, this.config.replaceOriginalName ?? false),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\n\t\tif (typeof value !== 'object' || value === null) {\n\t\t\treturn value;\n\t\t}\n\n\t\treturn new Proxy(value, new SelectionProxyHandler(this.config));\n\t}\n}\n","import { entityKind } from '~/entity.ts';\n\nexport abstract class QueryPromise<T> implements Promise<T> {\n\tstatic readonly [entityKind]: string = 'QueryPromise';\n\n\t[Symbol.toStringTag] = 'QueryPromise';\n\n\tcatch<TResult = never>(\n\t\tonRejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null | undefined,\n\t): Promise<T | TResult> {\n\t\treturn this.then(undefined, onRejected);\n\t}\n\n\tfinally(onFinally?: (() => void) | null | undefined): Promise<T> {\n\t\treturn this.then(\n\t\t\t(value) => {\n\t\t\t\tonFinally?.();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\t(reason) => {\n\t\t\t\tonFinally?.();\n\t\t\t\tthrow reason;\n\t\t\t},\n\t\t);\n\t}\n\n\tthen<TResult1 = T, TResult2 = never>(\n\t\tonFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n\t\tonRejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n\t): Promise<TResult1 | TResult2> {\n\t\treturn this.execute().then(onFulfilled, onRejected);\n\t}\n\n\tabstract execute(): Promise<T>;\n}\n","import { entityKind } from '~/entity.ts';\nimport { TableName } from '~/table.utils.ts';\nimport type { AnySQLiteColumn, SQLiteColumn } from './columns/index.ts';\nimport type { SQLiteTable } from './table.ts';\n\nexport type UpdateDeleteAction = 'cascade' | 'restrict' | 'no action' | 'set null' | 'set default';\n\nexport type Reference = () => {\n\treadonly name?: string;\n\treadonly columns: SQLiteColumn[];\n\treadonly foreignTable: SQLiteTable;\n\treadonly foreignColumns: SQLiteColumn[];\n};\n\nexport class ForeignKeyBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteForeignKeyBuilder';\n\n\tdeclare _: {\n\t\tbrand: 'SQLiteForeignKeyBuilder';\n\t\tforeignTableName: 'TForeignTableName';\n\t};\n\n\t/** @internal */\n\treference: Reference;\n\n\t/** @internal */\n\t_onUpdate: UpdateDeleteAction | undefined;\n\n\t/** @internal */\n\t_onDelete: UpdateDeleteAction | undefined;\n\n\tconstructor(\n\t\tconfig: () => {\n\t\t\tname?: string;\n\t\t\tcolumns: SQLiteColumn[];\n\t\t\tforeignColumns: SQLiteColumn[];\n\t\t},\n\t\tactions?: {\n\t\t\tonUpdate?: UpdateDeleteAction;\n\t\t\tonDelete?: UpdateDeleteAction;\n\t\t} | undefined,\n\t) {\n\t\tthis.reference = () => {\n\t\t\tconst { name, columns, foreignColumns } = config();\n\t\t\treturn { name, columns, foreignTable: foreignColumns[0]!.table as SQLiteTable, foreignColumns };\n\t\t};\n\t\tif (actions) {\n\t\t\tthis._onUpdate = actions.onUpdate;\n\t\t\tthis._onDelete = actions.onDelete;\n\t\t}\n\t}\n\n\tonUpdate(action: UpdateDeleteAction): this {\n\t\tthis._onUpdate = action;\n\t\treturn this;\n\t}\n\n\tonDelete(action: UpdateDeleteAction): this {\n\t\tthis._onDelete = action;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: SQLiteTable): ForeignKey {\n\t\treturn new ForeignKey(table, this);\n\t}\n}\n\nexport class ForeignKey {\n\tstatic readonly [entityKind]: string = 'SQLiteForeignKey';\n\n\treadonly reference: Reference;\n\treadonly onUpdate: UpdateDeleteAction | undefined;\n\treadonly onDelete: UpdateDeleteAction | undefined;\n\n\tconstructor(readonly table: SQLiteTable, builder: ForeignKeyBuilder) {\n\t\tthis.reference = builder.reference;\n\t\tthis.onUpdate = builder._onUpdate;\n\t\tthis.onDelete = builder._onDelete;\n\t}\n\n\tgetName(): string {\n\t\tconst { name, columns, foreignColumns } = this.reference();\n\t\tconst columnNames = columns.map((column) => column.name);\n\t\tconst foreignColumnNames = foreignColumns.map((column) => column.name);\n\t\tconst chunks = [\n\t\t\tthis.table[TableName],\n\t\t\t...columnNames,\n\t\t\tforeignColumns[0]!.table[TableName],\n\t\t\t...foreignColumnNames,\n\t\t];\n\t\treturn name ?? `${chunks.join('_')}_fk`;\n\t}\n}\n\ntype ColumnsWithTable<\n\tTTableName extends string,\n\tTColumns extends SQLiteColumn[],\n> = { [Key in keyof TColumns]: AnySQLiteColumn<{ tableName: TTableName }> };\n\n/**\n * @deprecated please use `foreignKey({ columns: [], foreignColumns: [] })` syntax without callback\n * @param config\n * @returns\n */\nexport function foreignKey<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends [AnySQLiteColumn<{ tableName: TTableName }>, ...AnySQLiteColumn<{ tableName: TTableName }>[]],\n>(\n\tconfig: () => {\n\t\tname?: string;\n\t\tcolumns: TColumns;\n\t\tforeignColumns: ColumnsWithTable<TForeignTableName, TColumns>;\n\t},\n): ForeignKeyBuilder;\nexport function foreignKey<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends [AnySQLiteColumn<{ tableName: TTableName }>, ...AnySQLiteColumn<{ tableName: TTableName }>[]],\n>(\n\tconfig: {\n\t\tname?: string;\n\t\tcolumns: TColumns;\n\t\tforeignColumns: ColumnsWithTable<TForeignTableName, TColumns>;\n\t},\n): ForeignKeyBuilder;\nexport function foreignKey(\n\tconfig: any,\n): ForeignKeyBuilder {\n\tfunction mappedConfig() {\n\t\tif (typeof config === 'function') {\n\t\t\tconst { name, columns, foreignColumns } = config();\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\tcolumns,\n\t\t\t\tforeignColumns,\n\t\t\t};\n\t\t}\n\t\treturn config;\n\t}\n\n\treturn new ForeignKeyBuilder(mappedConfig);\n}\n","import { entityKind } from '~/entity.ts';\nimport { TableName } from '~/table.utils.ts';\nimport type { SQLiteColumn } from './columns/common.ts';\nimport type { SQLiteTable } from './table.ts';\n\nexport function uniqueKeyName(table: SQLiteTable, columns: string[]) {\n\treturn `${table[TableName]}_${columns.join('_')}_unique`;\n}\n\nexport function unique(name?: string): UniqueOnConstraintBuilder {\n\treturn new UniqueOnConstraintBuilder(name);\n}\n\nexport class UniqueConstraintBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteUniqueConstraintBuilder';\n\n\t/** @internal */\n\tcolumns: SQLiteColumn[];\n\n\tconstructor(\n\t\tcolumns: SQLiteColumn[],\n\t\tprivate name?: string,\n\t) {\n\t\tthis.columns = columns;\n\t}\n\n\t/** @internal */\n\tbuild(table: SQLiteTable): UniqueConstraint {\n\t\treturn new UniqueConstraint(table, this.columns, this.name);\n\t}\n}\n\nexport class UniqueOnConstraintBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteUniqueOnConstraintBuilder';\n\n\t/** @internal */\n\tname?: string;\n\n\tconstructor(\n\t\tname?: string,\n\t) {\n\t\tthis.name = name;\n\t}\n\n\ton(...columns: [SQLiteColumn, ...SQLiteColumn[]]) {\n\t\treturn new UniqueConstraintBuilder(columns, this.name);\n\t}\n}\n\nexport class UniqueConstraint {\n\tstatic readonly [entityKind]: string = 'SQLiteUniqueConstraint';\n\n\treadonly columns: SQLiteColumn[];\n\treadonly name?: string;\n\n\tconstructor(readonly table: SQLiteTable, columns: SQLiteColumn[], name?: string) {\n\t\tthis.columns = columns;\n\t\tthis.name = name ?? uniqueKeyName(this.table, this.columns.map((column) => column.name));\n\t}\n\n\tgetName() {\n\t\treturn this.name;\n\t}\n}\n","import type {\n\tColumnBuilderBase,\n\tColumnBuilderBaseConfig,\n\tColumnBuilderExtraConfig,\n\tColumnBuilderRuntimeConfig,\n\tColumnDataType,\n\tHasGenerated,\n\tMakeColumnConfig,\n} from '~/column-builder.ts';\nimport { ColumnBuilder } from '~/column-builder.ts';\nimport { Column } from '~/column.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport type { ForeignKey, UpdateDeleteAction } from '~/sqlite-core/foreign-keys.ts';\nimport { ForeignKeyBuilder } from '~/sqlite-core/foreign-keys.ts';\nimport type { AnySQLiteTable, SQLiteTable } from '~/sqlite-core/table.ts';\nimport type { Update } from '~/utils.ts';\nimport { uniqueKeyName } from '../unique-constraint.ts';\n\nexport interface ReferenceConfig {\n\tref: () => SQLiteColumn;\n\tactions: {\n\t\tonUpdate?: UpdateDeleteAction;\n\t\tonDelete?: UpdateDeleteAction;\n\t};\n}\n\nexport interface SQLiteColumnBuilderBase<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTypeConfig extends object = object,\n> extends ColumnBuilderBase<T, TTypeConfig & { dialect: 'sqlite' }> {}\n\nexport interface SQLiteGeneratedColumnConfig {\n\tmode?: 'virtual' | 'stored';\n}\n\nexport abstract class SQLiteColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n\tTTypeConfig extends object = object,\n\tTExtraConfig extends ColumnBuilderExtraConfig = object,\n> extends ColumnBuilder<T, TRuntimeConfig, TTypeConfig & { dialect: 'sqlite' }, TExtraConfig>\n\timplements SQLiteColumnBuilderBase<T, TTypeConfig>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteColumnBuilder';\n\n\tprivate foreignKeyConfigs: ReferenceConfig[] = [];\n\n\treferences(\n\t\tref: ReferenceConfig['ref'],\n\t\tactions: ReferenceConfig['actions'] = {},\n\t): this {\n\t\tthis.foreignKeyConfigs.push({ ref, actions });\n\t\treturn this;\n\t}\n\n\tunique(\n\t\tname?: string,\n\t): this {\n\t\tthis.config.isUnique = true;\n\t\tthis.config.uniqueName = name;\n\t\treturn this;\n\t}\n\n\tgeneratedAlwaysAs(as: SQL | T['data'] | (() => SQL), config?: SQLiteGeneratedColumnConfig): HasGenerated<this, {\n\t\ttype: 'always';\n\t}> {\n\t\tthis.config.generated = {\n\t\t\tas,\n\t\t\ttype: 'always',\n\t\t\tmode: config?.mode ?? 'virtual',\n\t\t};\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tbuildForeignKeys(column: SQLiteColumn, table: SQLiteTable): ForeignKey[] {\n\t\treturn this.foreignKeyConfigs.map(({ ref, actions }) => {\n\t\t\treturn ((ref, actions) => {\n\t\t\t\tconst builder = new ForeignKeyBuilder(() => {\n\t\t\t\t\tconst foreignColumn = ref();\n\t\t\t\t\treturn { columns: [column], foreignColumns: [foreignColumn] };\n\t\t\t\t});\n\t\t\t\tif (actions.onUpdate) {\n\t\t\t\t\tbuilder.onUpdate(actions.onUpdate);\n\t\t\t\t}\n\t\t\t\tif (actions.onDelete) {\n\t\t\t\t\tbuilder.onDelete(actions.onDelete);\n\t\t\t\t}\n\t\t\t\treturn builder.build(table);\n\t\t\t})(ref, actions);\n\t\t});\n\t}\n\n\t/** @internal */\n\tabstract build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteColumn<MakeColumnConfig<T, TTableName>>;\n}\n\n// To understand how to use `SQLiteColumn` and `AnySQLiteColumn`, see `Column` and `AnyColumn` documentation.\nexport abstract class SQLiteColumn<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = {},\n\tTTypeConfig extends object = {},\n> extends Column<T, TRuntimeConfig, TTypeConfig & { dialect: 'sqlite' }> {\n\tstatic override readonly [entityKind]: string = 'SQLiteColumn';\n\n\tconstructor(\n\t\toverride readonly table: SQLiteTable,\n\t\tconfig: ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>,\n\t) {\n\t\tif (!config.uniqueName) {\n\t\t\tconfig.uniqueName = uniqueKeyName(table, [config.name]);\n\t\t}\n\t\tsuper(table, config);\n\t}\n}\n\nexport type AnySQLiteColumn<TPartial extends Partial<ColumnBaseConfig<ColumnDataType, string>> = {}> = SQLiteColumn<\n\tRequired<Update<ColumnBaseConfig<ColumnDataType, string>, TPartial>>\n>;\n","import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnySQLiteTable } from '~/sqlite-core/table.ts';\nimport { type Equal, getColumnNameAndConfig, textDecoder } from '~/utils.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\ntype BlobMode = 'buffer' | 'json' | 'bigint';\n\nexport type SQLiteBigIntBuilderInitial<TName extends string> = SQLiteBigIntBuilder<{\n\tname: TName;\n\tdataType: 'bigint';\n\tcolumnType: 'SQLiteBigInt';\n\tdata: bigint;\n\tdriverParam: Buffer;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteBigIntBuilder<T extends ColumnBuilderBaseConfig<'bigint', 'SQLiteBigInt'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBigIntBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'bigint', 'SQLiteBigInt');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBigInt<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteBigInt<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any>);\n\t}\n}\n\nexport class SQLiteBigInt<T extends ColumnBaseConfig<'bigint', 'SQLiteBigInt'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBigInt';\n\n\tgetSQLType(): string {\n\t\treturn 'blob';\n\t}\n\n\toverride mapFromDriverValue(value: Buffer | Uint8Array | ArrayBuffer): bigint {\n\t\tif (typeof Buffer !== 'undefined' && Buffer.from) {\n\t\t\tconst buf = Buffer.isBuffer(value)\n\t\t\t\t? value\n\t\t\t\t// eslint-disable-next-line no-instanceof/no-instanceof\n\t\t\t\t: value instanceof ArrayBuffer\n\t\t\t\t? Buffer.from(value)\n\t\t\t\t: value.buffer\n\t\t\t\t? Buffer.from(value.buffer, value.byteOffset, value.byteLength)\n\t\t\t\t: Buffer.from(value);\n\t\t\treturn BigInt(buf.toString('utf8'));\n\t\t}\n\n\t\treturn BigInt(textDecoder!.decode(value));\n\t}\n\n\toverride mapToDriverValue(value: bigint): Buffer {\n\t\treturn Buffer.from(value.toString());\n\t}\n}\n\nexport type SQLiteBlobJsonBuilderInitial<TName extends string> = SQLiteBlobJsonBuilder<{\n\tname: TName;\n\tdataType: 'json';\n\tcolumnType: 'SQLiteBlobJson';\n\tdata: unknown;\n\tdriverParam: Buffer;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteBlobJsonBuilder<T extends ColumnBuilderBaseConfig<'json', 'SQLiteBlobJson'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBlobJsonBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'json', 'SQLiteBlobJson');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBlobJson<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteBlobJson<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteBlobJson<T extends ColumnBaseConfig<'json', 'SQLiteBlobJson'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBlobJson';\n\n\tgetSQLType(): string {\n\t\treturn 'blob';\n\t}\n\n\toverride mapFromDriverValue(value: Buffer | Uint8Array | ArrayBuffer): T['data'] {\n\t\tif (typeof Buffer !== 'undefined' && Buffer.from) {\n\t\t\tconst buf = Buffer.isBuffer(value)\n\t\t\t\t? value\n\t\t\t\t// eslint-disable-next-line no-instanceof/no-instanceof\n\t\t\t\t: value instanceof ArrayBuffer\n\t\t\t\t? Buffer.from(value)\n\t\t\t\t: value.buffer\n\t\t\t\t? Buffer.from(value.buffer, value.byteOffset, value.byteLength)\n\t\t\t\t: Buffer.from(value);\n\t\t\treturn JSON.parse(buf.toString('utf8'));\n\t\t}\n\n\t\treturn JSON.parse(textDecoder!.decode(value));\n\t}\n\n\toverride mapToDriverValue(value: T['data']): Buffer {\n\t\treturn Buffer.from(JSON.stringify(value));\n\t}\n}\n\nexport type SQLiteBlobBufferBuilderInitial<TName extends string> = SQLiteBlobBufferBuilder<{\n\tname: TName;\n\tdataType: 'buffer';\n\tcolumnType: 'SQLiteBlobBuffer';\n\tdata: Buffer;\n\tdriverParam: Buffer;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteBlobBufferBuilder<T extends ColumnBuilderBaseConfig<'buffer', 'SQLiteBlobBuffer'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBlobBufferBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'buffer', 'SQLiteBlobBuffer');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBlobBuffer<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteBlobBuffer<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any>);\n\t}\n}\n\nexport class SQLiteBlobBuffer<T extends ColumnBaseConfig<'buffer', 'SQLiteBlobBuffer'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBlobBuffer';\n\n\toverride mapFromDriverValue(value: Buffer | Uint8Array | ArrayBuffer): T['data'] {\n\t\tif (Buffer.isBuffer(value)) {\n\t\t\treturn value;\n\t\t}\n\n\t\treturn Buffer.from(value as Uint8Array);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn 'blob';\n\t}\n}\n\nexport interface BlobConfig<TMode extends BlobMode = BlobMode> {\n\tmode: TMode;\n}\n\n/**\n * It's recommended to use `text('...', { mode: 'json' })` instead of `blob` in JSON mode, because it supports JSON functions:\n * >All JSON functions currently throw an error if any of their arguments are BLOBs because BLOBs are reserved for a future enhancement in which BLOBs will store the binary encoding for JSON.\n *\n * https://www.sqlite.org/json1.html\n */\nexport function blob(): SQLiteBlobJsonBuilderInitial<''>;\nexport function blob<TMode extends BlobMode = BlobMode>(\n\tconfig?: BlobConfig<TMode>,\n): Equal<TMode, 'bigint'> extends true ? SQLiteBigIntBuilderInitial<''>\n\t: Equal<TMode, 'buffer'> extends true ? SQLiteBlobBufferBuilderInitial<''>\n\t: SQLiteBlobJsonBuilderInitial<''>;\nexport function blob<TName extends string, TMode extends BlobMode = BlobMode>(\n\tname: TName,\n\tconfig?: BlobConfig<TMode>,\n): Equal<TMode, 'bigint'> extends true ? SQLiteBigIntBuilderInitial<TName>\n\t: Equal<TMode, 'buffer'> extends true ? SQLiteBlobBufferBuilderInitial<TName>\n\t: SQLiteBlobJsonBuilderInitial<TName>;\nexport function blob(a?: string | BlobConfig, b?: BlobConfig) {\n\tconst { name, config } = getColumnNameAndConfig<BlobConfig | undefined>(a, b);\n\tif (config?.mode === 'json') {\n\t\treturn new SQLiteBlobJsonBuilder(name);\n\t}\n\tif (config?.mode === 'bigint') {\n\t\treturn new SQLiteBigIntBuilder(name);\n\t}\n\treturn new SQLiteBlobBufferBuilder(name);\n}\n","import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport type { AnySQLiteTable } from '~/sqlite-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport type ConvertCustomConfig<TName extends string, T extends Partial<CustomTypeValues>> =\n\t& {\n\t\tname: TName;\n\t\tdataType: 'custom';\n\t\tcolumnType: 'SQLiteCustomColumn';\n\t\tdata: T['data'];\n\t\tdriverParam: T['driverData'];\n\t\tenumValues: undefined;\n\t}\n\t& (T['notNull'] extends true ? { notNull: true } : {})\n\t& (T['default'] extends true ? { hasDefault: true } : {});\n\nexport interface SQLiteCustomColumnInnerConfig {\n\tcustomTypeValues: CustomTypeValues;\n}\n\nexport class SQLiteCustomColumnBuilder<T extends ColumnBuilderBaseConfig<'custom', 'SQLiteCustomColumn'>>\n\textends SQLiteColumnBuilder<\n\t\tT,\n\t\t{\n\t\t\tfieldConfig: CustomTypeValues['config'];\n\t\t\tcustomTypeParams: CustomTypeParams<any>;\n\t\t},\n\t\t{\n\t\t\tsqliteColumnBuilderBrand: 'SQLiteCustomColumnBuilderBrand';\n\t\t}\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteCustomColumnBuilder';\n\n\tconstructor(\n\t\tname: T['name'],\n\t\tfieldConfig: CustomTypeValues['config'],\n\t\tcustomTypeParams: CustomTypeParams<any>,\n\t) {\n\t\tsuper(name, 'custom', 'SQLiteCustomColumn');\n\t\tthis.config.fieldConfig = fieldConfig;\n\t\tthis.config.customTypeParams = customTypeParams;\n\t}\n\n\t/** @internal */\n\tbuild<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteCustomColumn<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteCustomColumn<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteCustomColumn<T extends ColumnBaseConfig<'custom', 'SQLiteCustomColumn'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteCustomColumn';\n\n\tprivate sqlName: string;\n\tprivate mapTo?: (value: T['data']) => T['driverParam'];\n\tprivate mapFrom?: (value: T['driverParam']) => T['data'];\n\n\tconstructor(\n\t\ttable: AnySQLiteTable<{ name: T['tableName'] }>,\n\t\tconfig: SQLiteCustomColumnBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config);\n\t\tthis.sqlName = config.customTypeParams.dataType(config.fieldConfig);\n\t\tthis.mapTo = config.customTypeParams.toDriver;\n\t\tthis.mapFrom = config.customTypeParams.fromDriver;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn this.sqlName;\n\t}\n\n\toverride mapFromDriverValue(value: T['driverParam']): T['data'] {\n\t\treturn typeof this.mapFrom === 'function' ? this.mapFrom(value) : value as T['data'];\n\t}\n\n\toverride mapToDriverValue(value: T['data']): T['driverParam'] {\n\t\treturn typeof this.mapTo === 'function' ? this.mapTo(value) : value as T['data'];\n\t}\n}\n\nexport type CustomTypeValues = {\n\t/**\n\t * Required type for custom column, that will infer proper type model\n\t *\n\t * Examples:\n\t *\n\t * If you want your column to be `string` type after selecting/or on inserting - use `data: string`. Like `text`, `varchar`\n\t *\n\t * If you want your column to be `number` type after selecting/or on inserting - use `data: number`. Like `integer`\n\t */\n\tdata: unknown;\n\n\t/**\n\t * Type helper, that represents what type database driver is accepting for specific database data type\n\t */\n\tdriverData?: unknown;\n\n\t/**\n\t * What config type should be used for {@link CustomTypeParams} `dataType` generation\n\t */\n\tconfig?: Record<string, any>;\n\n\t/**\n\t * Whether the config argument should be required or not\n\t * @default false\n\t */\n\tconfigRequired?: boolean;\n\n\t/**\n\t * If your custom data type should be notNull by default you can use `notNull: true`\n\t *\n\t * @example\n\t * const customSerial = customType<{ data: number, notNull: true, default: true }>({\n\t * \t dataType() {\n\t * \t return 'serial';\n\t * },\n\t * });\n\t */\n\tnotNull?: boolean;\n\n\t/**\n\t * If your custom data type has default you can use `default: true`\n\t *\n\t * @example\n\t * const customSerial = customType<{ data: number, notNull: true, default: true }>({\n\t * \t dataType() {\n\t * \t return 'serial';\n\t * },\n\t * });\n\t */\n\tdefault?: boolean;\n};\n\nexport interface CustomTypeParams<T extends CustomTypeValues> {\n\t/**\n\t * Database data type string representation, that is used for migrations\n\t * @example\n\t * ```\n\t * `jsonb`, `text`\n\t * ```\n\t *\n\t * If database data type needs additional params you can use them from `config` param\n\t * @example\n\t * ```\n\t * `varchar(256)`, `numeric(2,3)`\n\t * ```\n\t *\n\t * To make `config` be of specific type please use config generic in {@link CustomTypeValues}\n\t *\n\t * @example\n\t * Usage example\n\t * ```\n\t * dataType() {\n\t * return 'boolean';\n\t * },\n\t * ```\n\t * Or\n\t * ```\n\t * dataType(config) {\n\t * \t return typeof config.length !== 'undefined' ? `varchar(${config.length})` : `varchar`;\n\t * \t }\n\t * ```\n\t */\n\tdataType: (config: T['config'] | (Equal<T['configRequired'], true> extends true ? never : undefined)) => string;\n\n\t/**\n\t * Optional mapping function, between user input and driver\n\t * @example\n\t * For example, when using jsonb we need to map JS/TS object to string before writing to database\n\t * ```\n\t * toDriver(value: TData): string {\n\t * \t return JSON.stringify(value);\n\t * }\n\t * ```\n\t */\n\ttoDriver?: (value: T['data']) => T['driverData'] | SQL;\n\n\t/**\n\t * Optional mapping function, that is responsible for data mapping from database to JS/TS code\n\t * @example\n\t * For example, when using timestamp we need to map string Date representation to JS Date\n\t * ```\n\t * fromDriver(value: string): Date {\n\t * \treturn new Date(value);\n\t * },\n\t * ```\n\t */\n\tfromDriver?: (value: T['driverData']) => T['data'];\n}\n\n/**\n * Custom sqlite database data type generator\n */\nexport function customType<T extends CustomTypeValues = CustomTypeValues>(\n\tcustomTypeParams: CustomTypeParams<T>,\n): Equal<T['configRequired'], true> extends true ? {\n\t\t<TConfig extends Record<string, any> & T['config']>(\n\t\t\tfieldConfig: TConfig,\n\t\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<'', T>>;\n\t\t<TName extends string>(\n\t\t\tdbName: TName,\n\t\t\tfieldConfig: T['config'],\n\t\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<TName, T>>;\n\t}\n\t: {\n\t\t(): SQLiteCustomColumnBuilder<ConvertCustomConfig<'', T>>;\n\t\t<TConfig extends Record<string, any> & T['config']>(\n\t\t\tfieldConfig?: TConfig,\n\t\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<'', T>>;\n\t\t<TName extends string>(\n\t\t\tdbName: TName,\n\t\t\tfieldConfig?: T['config'],\n\t\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<TName, T>>;\n\t}\n{\n\treturn <TName extends string>(\n\t\ta?: TName | T['config'],\n\t\tb?: T['config'],\n\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<TName, T>> => {\n\t\tconst { name, config } = getColumnNameAndConfig<T['config']>(a, b);\n\t\treturn new SQLiteCustomColumnBuilder(\n\t\t\tname as ConvertCustomConfig<TName, T>['name'],\n\t\t\tconfig,\n\t\t\tcustomTypeParams,\n\t\t);\n\t};\n}\n","import type {\n\tColumnBuilderBaseConfig,\n\tColumnBuilderRuntimeConfig,\n\tColumnDataType,\n\tHasDefault,\n\tIsPrimaryKey,\n\tMakeColumnConfig,\n\tNotNull,\n} from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport { sql } from '~/sql/sql.ts';\nimport type { OnConflict } from '~/sqlite-core/utils.ts';\nimport { type Equal, getColumnNameAndConfig, type Or } from '~/utils.ts';\nimport type { AnySQLiteTable } from '../table.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport interface PrimaryKeyConfig {\n\tautoIncrement?: boolean;\n\tonConflict?: OnConflict;\n}\n\nexport abstract class SQLiteBaseIntegerBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n> extends SQLiteColumnBuilder<\n\tT,\n\tTRuntimeConfig & { autoIncrement: boolean },\n\t{},\n\t{ primaryKeyHasDefault: true }\n> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBaseIntegerBuilder';\n\n\tconstructor(name: T['name'], dataType: T['dataType'], columnType: T['columnType']) {\n\t\tsuper(name, dataType, columnType);\n\t\tthis.config.autoIncrement = false;\n\t}\n\n\toverride primaryKey(config?: PrimaryKeyConfig): IsPrimaryKey<HasDefault<NotNull<this>>> {\n\t\tif (config?.autoIncrement) {\n\t\t\tthis.config.autoIncrement = true;\n\t\t}\n\t\tthis.config.hasDefault = true;\n\t\treturn super.primaryKey() as IsPrimaryKey<HasDefault<NotNull<this>>>;\n\t}\n\n\t/** @internal */\n\tabstract override build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBaseInteger<MakeColumnConfig<T, TTableName>>;\n}\n\nexport abstract class SQLiteBaseInteger<\n\tT extends ColumnBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n> extends SQLiteColumn<T, TRuntimeConfig & { autoIncrement: boolean }> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBaseInteger';\n\n\treadonly autoIncrement: boolean = this.config.autoIncrement;\n\n\tgetSQLType(): string {\n\t\treturn 'integer';\n\t}\n}\n\nexport type SQLiteIntegerBuilderInitial<TName extends string> = SQLiteIntegerBuilder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'SQLiteInteger';\n\tdata: number;\n\tdriverParam: number;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteIntegerBuilder<T extends ColumnBuilderBaseConfig<'number', 'SQLiteInteger'>>\n\textends SQLiteBaseIntegerBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteIntegerBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'number', 'SQLiteInteger');\n\t}\n\n\tbuild<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteInteger<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteInteger<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteInteger<T extends ColumnBaseConfig<'number', 'SQLiteInteger'>> extends SQLiteBaseInteger<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteInteger';\n}\n\nexport type SQLiteTimestampBuilderInitial<TName extends string> = SQLiteTimestampBuilder<{\n\tname: TName;\n\tdataType: 'date';\n\tcolumnType: 'SQLiteTimestamp';\n\tdata: Date;\n\tdriverParam: number;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteTimestampBuilder<T extends ColumnBuilderBaseConfig<'date', 'SQLiteTimestamp'>>\n\textends SQLiteBaseIntegerBuilder<T, { mode: 'timestamp' | 'timestamp_ms' }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteTimestampBuilder';\n\n\tconstructor(name: T['name'], mode: 'timestamp' | 'timestamp_ms') {\n\t\tsuper(name, 'date', 'SQLiteTimestamp');\n\t\tthis.config.mode = mode;\n\t}\n\n\t/**\n\t * @deprecated Use `default()` with your own expression instead.\n\t *\n\t * Adds `DEFAULT (cast((julianday('now') - 2440587.5)*86400000 as integer))` to the column, which is the current epoch timestamp in milliseconds.\n\t */\n\tdefaultNow(): HasDefault<this> {\n\t\treturn this.default(sql`(cast((julianday('now') - 2440587.5)*86400000 as integer))`) as any;\n\t}\n\n\tbuild<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteTimestamp<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteTimestamp<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteTimestamp<T extends ColumnBaseConfig<'date', 'SQLiteTimestamp'>>\n\textends SQLiteBaseInteger<T, { mode: 'timestamp' | 'timestamp_ms' }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteTimestamp';\n\n\treadonly mode: 'timestamp' | 'timestamp_ms' = this.config.mode;\n\n\toverride mapFromDriverValue(value: number): Date {\n\t\tif (this.config.mode === 'timestamp') {\n\t\t\treturn new Date(value * 1000);\n\t\t}\n\t\treturn new Date(value);\n\t}\n\n\toverride mapToDriverValue(value: Date): number {\n\t\tconst unix = value.getTime();\n\t\tif (this.config.mode === 'timestamp') {\n\t\t\treturn Math.floor(unix / 1000);\n\t\t}\n\t\treturn unix;\n\t}\n}\n\nexport type SQLiteBooleanBuilderInitial<TName extends string> = SQLiteBooleanBuilder<{\n\tname: TName;\n\tdataType: 'boolean';\n\tcolumnType: 'SQLiteBoolean';\n\tdata: boolean;\n\tdriverParam: number;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteBooleanBuilder<T extends ColumnBuilderBaseConfig<'boolean', 'SQLiteBoolean'>>\n\textends SQLiteBaseIntegerBuilder<T, { mode: 'boolean' }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBooleanBuilder';\n\n\tconstructor(name: T['name'], mode: 'boolean') {\n\t\tsuper(name, 'boolean', 'SQLiteBoolean');\n\t\tthis.config.mode = mode;\n\t}\n\n\tbuild<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBoolean<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteBoolean<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteBoolean<T extends ColumnBaseConfig<'boolean', 'SQLiteBoolean'>>\n\textends SQLiteBaseInteger<T, { mode: 'boolean' }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBoolean';\n\n\treadonly mode: 'boolean' = this.config.mode;\n\n\toverride mapFromDriverValue(value: number): boolean {\n\t\treturn Number(value) === 1;\n\t}\n\n\toverride mapToDriverValue(value: boolean): number {\n\t\treturn value ? 1 : 0;\n\t}\n}\n\nexport interface IntegerConfig<\n\tTMode extends 'number' | 'timestamp' | 'timestamp_ms' | 'boolean' =\n\t\t| 'number'\n\t\t| 'timestamp'\n\t\t| 'timestamp_ms'\n\t\t| 'boolean',\n> {\n\tmode: TMode;\n}\n\nexport function integer(): SQLiteIntegerBuilderInitial<''>;\nexport function integer<TMode extends IntegerConfig['mode']>(\n\tconfig?: IntegerConfig<TMode>,\n): Or<Equal<TMode, 'timestamp'>, Equal<TMode, 'timestamp_ms'>> extends true ? SQLiteTimestampBuilderInitial<''>\n\t: Equal<TMode, 'boolean'> extends true ? SQLiteBooleanBuilderInitial<''>\n\t: SQLiteIntegerBuilderInitial<''>;\nexport function integer<TName extends string, TMode extends IntegerConfig['mode']>(\n\tname: TName,\n\tconfig?: IntegerConfig<TMode>,\n): Or<Equal<TMode, 'timestamp'>, Equal<TMode, 'timestamp_ms'>> extends true ? SQLiteTimestampBuilderInitial<TName>\n\t: Equal<TMode, 'boolean'> extends true ? SQLiteBooleanBuilderInitial<TName>\n\t: SQLiteIntegerBuilderInitial<TName>;\nexport function integer(a?: string | IntegerConfig, b?: IntegerConfig) {\n\tconst { name, config } = getColumnNameAndConfig<IntegerConfig | undefined>(a, b);\n\tif (config?.mode === 'timestamp' || config?.mode === 'timestamp_ms') {\n\t\treturn new SQLiteTimestampBuilder(name, config.mode);\n\t}\n\tif (config?.mode === 'boolean') {\n\t\treturn new SQLiteBooleanBuilder(name, config.mode);\n\t}\n\treturn new SQLiteIntegerBuilder(name);\n}\n\nexport const int = integer;\n","import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnySQLiteTable } from '~/sqlite-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport type SQLiteNumericBuilderInitial<TName extends string> = SQLiteNumericBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'SQLiteNumeric';\n\tdata: string;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteNumericBuilder<T extends ColumnBuilderBaseConfig<'string', 'SQLiteNumeric'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'string', 'SQLiteNumeric');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteNumeric<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteNumeric<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteNumeric<T extends ColumnBaseConfig<'string', 'SQLiteNumeric'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteNumeric';\n\n\toverride mapFromDriverValue(value: unknown): string {\n\t\tif (typeof value === 'string') return value;\n\n\t\treturn String(value);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn 'numeric';\n\t}\n}\n\nexport type SQLiteNumericNumberBuilderInitial<TName extends string> = SQLiteNumericNumberBuilder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'SQLiteNumericNumber';\n\tdata: number;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteNumericNumberBuilder<T extends ColumnBuilderBaseConfig<'number', 'SQLiteNumericNumber'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericNumberBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'number', 'SQLiteNumericNumber');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteNumericNumber<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteNumericNumber<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteNumericNumber<T extends ColumnBaseConfig<'number', 'SQLiteNumericNumber'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericNumber';\n\n\toverride mapFromDriverValue(value: unknown): number {\n\t\tif (typeof value === 'number') return value;\n\n\t\treturn Number(value);\n\t}\n\n\toverride mapToDriverValue = String;\n\n\tgetSQLType(): string {\n\t\treturn 'numeric';\n\t}\n}\n\nexport type SQLiteNumericBigIntBuilderInitial<TName extends string> = SQLiteNumericBigIntBuilder<{\n\tname: TName;\n\tdataType: 'bigint';\n\tcolumnType: 'SQLiteNumericBigInt';\n\tdata: bigint;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteNumericBigIntBuilder<T extends ColumnBuilderBaseConfig<'bigint', 'SQLiteNumericBigInt'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericBigIntBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'bigint', 'SQLiteNumericBigInt');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteNumericBigInt<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteNumericBigInt<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteNumericBigInt<T extends ColumnBaseConfig<'bigint', 'SQLiteNumericBigInt'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericBigInt';\n\n\toverride mapFromDriverValue = BigInt;\n\n\toverride mapToDriverValue = String;\n\n\tgetSQLType(): string {\n\t\treturn 'numeric';\n\t}\n}\n\nexport type SQLiteNumericConfig<T extends 'string' | 'number' | 'bigint' = 'string' | 'number' | 'bigint'> = {\n\tmode: T;\n};\n\nexport function numeric<TMode extends SQLiteNumericConfig['mode']>(\n\tconfig?: SQLiteNumericConfig<TMode>,\n): Equal<TMode, 'number'> extends true ? SQLiteNumericNumberBuilderInitial<''>\n\t: Equal<TMode, 'bigint'> extends true ? SQLiteNumericBigIntBuilderInitial<''>\n\t: SQLiteNumericBuilderInitial<''>;\nexport function numeric<TName extends string, TMode extends SQLiteNumericConfig['mode']>(\n\tname: TName,\n\tconfig?: SQLiteNumericConfig<TMode>,\n): Equal<TMode, 'number'> extends true ? SQLiteNumericNumberBuilderInitial<TName>\n\t: Equal<TMode, 'bigint'> extends true ? SQLiteNumericBigIntBuilderInitial<TName>\n\t: SQLiteNumericBuilderInitial<TName>;\nexport function numeric(a?: string | SQLiteNumericConfig, b?: SQLiteNumericConfig) {\n\tconst { name, config } = getColumnNameAndConfig<SQLiteNumericConfig>(a, b);\n\tconst mode = config?.mode;\n\treturn mode === 'number'\n\t\t? new SQLiteNumericNumberBuilder(name)\n\t\t: mode === 'bigint'\n\t\t? new SQLiteNumericBigIntBuilder(name)\n\t\t: new SQLiteNumericBuilder(name);\n}\n","import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnySQLiteTable } from '../table.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport type SQLiteRealBuilderInitial<TName extends string> = SQLiteRealBuilder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'SQLiteReal';\n\tdata: number;\n\tdriverParam: number;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteRealBuilder<T extends ColumnBuilderBaseConfig<'number', 'SQLiteReal'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteRealBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'number', 'SQLiteReal');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteReal<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteReal<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class SQLiteReal<T extends ColumnBaseConfig<'number', 'SQLiteReal'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteReal';\n\n\tgetSQLType(): string {\n\t\treturn 'real';\n\t}\n}\n\nexport function real(): SQLiteRealBuilderInitial<''>;\nexport function real<TName extends string>(name: TName): SQLiteRealBuilderInitial<TName>;\nexport function real(name?: string) {\n\treturn new SQLiteRealBuilder(name ?? '');\n}\n","import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnySQLiteTable } from '~/sqlite-core/table.ts';\nimport { type Equal, getColumnNameAndConfig, type Writable } from '~/utils.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport type SQLiteTextBuilderInitial<\n\tTName extends string,\n\tTEnum extends [string, ...string[]],\n\tTLength extends number | undefined,\n> = SQLiteTextBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'SQLiteText';\n\tdata: TEnum[number];\n\tdriverParam: string;\n\tenumValues: TEnum;\n\tlength: TLength;\n}>;\n\nexport class SQLiteTextBuilder<\n\tT extends ColumnBuilderBaseConfig<'string', 'SQLiteText'> & { length?: number | undefined },\n> extends SQLiteColumnBuilder<\n\tT,\n\t{ length: T['length']; enumValues: T['enumValues'] },\n\t{ length: T['length'] }\n> {\n\tstatic override readonly [entityKind]: string = 'SQLiteTextBuilder';\n\n\tconstructor(name: T['name'], config: SQLiteTextConfig<'text', T['enumValues'], T['length']>) {\n\t\tsuper(name, 'string', 'SQLiteText');\n\t\tthis.config.enumValues = config.enum;\n\t\tthis.config.length = config.length;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteText<MakeColumnConfig<T, TTableName> & { length: T['length'] }> {\n\t\treturn new SQLiteText<MakeColumnConfig<T, TTableName> & { length: T['length'] }>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteText<T extends ColumnBaseConfig<'string', 'SQLiteText'> & { length?: number | undefined }>\n\textends SQLiteColumn<T, { length: T['length']; enumValues: T['enumValues'] }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteText';\n\n\toverride readonly enumValues = this.config.enumValues;\n\n\treadonly length: T['length'] = this.config.length;\n\n\tconstructor(\n\t\ttable: AnySQLiteTable<{ name: T['tableName'] }>,\n\t\tconfig: SQLiteTextBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn `text${this.config.length ? `(${this.config.length})` : ''}`;\n\t}\n}\n\nexport type SQLiteTextJsonBuilderInitial<TName extends string> = SQLiteTextJsonBuilder<{\n\tname: TName;\n\tdataType: 'json';\n\tcolumnType: 'SQLiteTextJson';\n\tdata: unknown;\n\tdriverParam: string;\n\tenumValues: undefined;\n\tgenerated: undefined;\n}>;\n\nexport class SQLiteTextJsonBuilder<T extends ColumnBuilderBaseConfig<'json', 'SQLiteTextJson'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteTextJsonBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'json', 'SQLiteTextJson');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteTextJson<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteTextJson<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteTextJson<T extends ColumnBaseConfig<'json', 'SQLiteTextJson'>>\n\textends SQLiteColumn<T, { length: number | undefined; enumValues: T['enumValues'] }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteTextJson';\n\n\tgetSQLType(): string {\n\t\treturn 'text';\n\t}\n\n\toverride mapFromDriverValue(value: string): T['data'] {\n\t\treturn JSON.parse(value);\n\t}\n\n\toverride mapToDriverValue(value: T['data']): string {\n\t\treturn JSON.stringify(value);\n\t}\n}\n\nexport type SQLiteTextConfig<\n\tTMode extends 'text' | 'json' = 'text' | 'json',\n\tTEnum extends readonly string[] | string[] | undefined = readonly string[] | string[] | undefined,\n\tTLength extends number | undefined = number | undefined,\n> = TMode extends 'text' ? {\n\t\tmode?: TMode;\n\t\tlength?: TLength;\n\t\tenum?: TEnum;\n\t}\n\t: {\n\t\tmode?: TMode;\n\t};\n\nexport function text(): SQLiteTextBuilderInitial<'', [string, ...string[]], undefined>;\nexport function text<\n\tU extends string,\n\tT extends Readonly<[U, ...U[]]>,\n\tL extends number | undefined,\n\tTMode extends 'text' | 'json' = 'text' | 'json',\n>(\n\tconfig?: SQLiteTextConfig<TMode, T | Writable<T>, L>,\n): Equal<TMode, 'json'> extends true ? SQLiteTextJsonBuilderInitial<''>\n\t: SQLiteTextBuilderInitial<'', Writable<T>, L>;\nexport function text<\n\tTName extends string,\n\tU extends string,\n\tT extends Readonly<[U, ...U[]]>,\n\tL extends number | undefined,\n\tTMode extends 'text' | 'json' = 'text' | 'json',\n>(\n\tname: TName,\n\tconfig?: SQLiteTextConfig<TMode, T | Writable<T>, L>,\n): Equal<TMode, 'json'> extends true ? SQLiteTextJsonBuilderInitial<TName>\n\t: SQLiteTextBuilderInitial<TName, Writable<T>, L>;\nexport function text(a?: string | SQLiteTextConfig, b: SQLiteTextConfig = {}): any {\n\tconst { name, config } = getColumnNameAndConfig<SQLiteTextConfig>(a, b);\n\tif (config.mode === 'json') {\n\t\treturn new SQLiteTextJsonBuilder(name);\n\t}\n\treturn new SQLiteTextBuilder(name, config as any);\n}\n","import { blob } from './blob.ts';\nimport { customType } from './custom.ts';\nimport { integer } from './integer.ts';\nimport { numeric } from './numeric.ts';\nimport { real } from './real.ts';\nimport { text } from './text.ts';\n\nexport function getSQLiteColumnBuilders() {\n\treturn {\n\t\tblob,\n\t\tcustomType,\n\t\tinteger,\n\t\tnumeric,\n\t\treal,\n\t\ttext,\n\t};\n}\n\nexport type SQLiteColumnBuilders = ReturnType<typeof getSQLiteColumnBuilders>;\n","import type { BuildColumns, BuildExtraConfigColumns } from '~/column-builder.ts';\nimport { entityKind } from '~/entity.ts';\nimport { Table, type TableConfig as TableConfigBase, type UpdateTableConfig } from '~/table.ts';\nimport type { CheckBuilder } from './checks.ts';\nimport { getSQLiteColumnBuilders, type SQLiteColumnBuilders } from './columns/all.ts';\nimport type { SQLiteColumn, SQLiteColumnBuilder, SQLiteColumnBuilderBase } from './columns/common.ts';\nimport type { ForeignKey, ForeignKeyBuilder } from './foreign-keys.ts';\nimport type { IndexBuilder } from './indexes.ts';\nimport type { PrimaryKeyBuilder } from './primary-keys.ts';\nimport type { UniqueConstraintBuilder } from './unique-constraint.ts';\n\nexport type SQLiteTableExtraConfigValue =\n\t| IndexBuilder\n\t| CheckBuilder\n\t| ForeignKeyBuilder\n\t| PrimaryKeyBuilder\n\t| UniqueConstraintBuilder;\n\nexport type SQLiteTableExtraConfig = Record<\n\tstring,\n\tSQLiteTableExtraConfigValue\n>;\n\nexport type TableConfig = TableConfigBase<SQLiteColumn<any>>;\n\n/** @internal */\nexport const InlineForeignKeys = Symbol.for('drizzle:SQLiteInlineForeignKeys');\n\nexport class SQLiteTable<T extends TableConfig = TableConfig> extends Table<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteTable';\n\n\t/** @internal */\n\tstatic override readonly Symbol = Object.assign({}, Table.Symbol, {\n\t\tInlineForeignKeys: InlineForeignKeys as typeof InlineForeignKeys,\n\t});\n\n\t/** @internal */\n\toverride [Table.Symbol.Columns]!: NonNullable<T['columns']>;\n\n\t/** @internal */\n\t[InlineForeignKeys]: ForeignKey[] = [];\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigBuilder]:\n\t\t| ((self: Record<string, SQLiteColumn>) => SQLiteTableExtraConfig)\n\t\t| undefined = undefined;\n}\n\nexport type AnySQLiteTable<TPartial extends Partial<TableConfig> = {}> = SQLiteTable<\n\tUpdateTableConfig<TableConfig, TPartial>\n>;\n\nexport type SQLiteTableWithColumns<T extends TableConfig> =\n\t& SQLiteTable<T>\n\t& {\n\t\t[Key in keyof T['columns']]: T['columns'][Key];\n\t};\n\nexport interface SQLiteTableFn<TSchema extends string | undefined = undefined> {\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig?: (\n\t\t\tself: BuildColumns<TTableName, TColumnsMap, 'sqlite'>,\n\t\t) => SQLiteTableExtraConfigValue[],\n\t): SQLiteTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>;\n\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: SQLiteColumnBuilders) => TColumnsMap,\n\t\textraConfig?: (self: BuildColumns<TTableName, TColumnsMap, 'sqlite'>) => SQLiteTableExtraConfigValue[],\n\t): SQLiteTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>;\n\t/**\n\t * @deprecated The third parameter of sqliteTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = sqliteTable(\"users\", {\n\t * \tid: int(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = sqliteTable(\"users\", {\n\t * \tid: int(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig?: (self: BuildColumns<TTableName, TColumnsMap, 'sqlite'>) => SQLiteTableExtraConfig,\n\t): SQLiteTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>;\n\n\t/**\n\t * @deprecated The third parameter of sqliteTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = sqliteTable(\"users\", {\n\t * \tid: int(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = sqliteTable(\"users\", {\n\t * \tid: int(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: SQLiteColumnBuilders) => TColumnsMap,\n\t\textraConfig?: (self: BuildColumns<TTableName, TColumnsMap, 'sqlite'>) => SQLiteTableExtraConfig,\n\t): SQLiteTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>;\n}\n\nfunction sqliteTableBase<\n\tTTableName extends string,\n\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\tTSchema extends string | undefined,\n>(\n\tname: TTableName,\n\tcolumns: TColumnsMap | ((columnTypes: SQLiteColumnBuilders) => TColumnsMap),\n\textraConfig:\n\t\t| ((\n\t\t\tself: BuildColumns<TTableName, TColumnsMap, 'sqlite'>,\n\t\t) => SQLiteTableExtraConfig | SQLiteTableExtraConfigValue[])\n\t\t| undefined,\n\tschema?: TSchema,\n\tbaseName = name,\n): SQLiteTableWithColumns<{\n\tname: TTableName;\n\tschema: TSchema;\n\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\tdialect: 'sqlite';\n}> {\n\tconst rawTable = new SQLiteTable<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>(name, schema, baseName);\n\n\tconst parsedColumns: TColumnsMap = typeof columns === 'function' ? columns(getSQLiteColumnBuilders()) : columns;\n\n\tconst builtColumns = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as SQLiteColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.build(rawTable);\n\t\t\trawTable[InlineForeignKeys].push(...colBuilder.buildForeignKeys(column, rawTable));\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\n\tconst table = Object.assign(rawTable, builtColumns);\n\n\ttable[Table.Symbol.Columns] = builtColumns;\n\ttable[Table.Symbol.ExtraConfigColumns] = builtColumns as unknown as BuildExtraConfigColumns<\n\t\tTTableName,\n\t\tTColumnsMap,\n\t\t'sqlite'\n\t>;\n\n\tif (extraConfig) {\n\t\ttable[SQLiteTable.Symbol.ExtraConfigBuilder] = extraConfig as (\n\t\t\tself: Record<string, SQLiteColumn>,\n\t\t) => SQLiteTableExtraConfig;\n\t}\n\n\treturn table;\n}\n\nexport const sqliteTable: SQLiteTableFn = (name, columns, extraConfig) => {\n\treturn sqliteTableBase(name, columns, extraConfig);\n};\n\nexport function sqliteTableCreator(customizeTableName: (name: string) => string): SQLiteTableFn {\n\treturn (name, columns, extraConfig) => {\n\t\treturn sqliteTableBase(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);\n\t};\n}\n","import { entityKind } from '~/entity.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport type { SQLiteColumn } from './columns/index.ts';\nimport type { SQLiteTable } from './table.ts';\n\nexport interface IndexConfig {\n\tname: string;\n\tcolumns: IndexColumn[];\n\tunique: boolean;\n\twhere: SQL | undefined;\n}\n\nexport type IndexColumn = SQLiteColumn | SQL;\n\nexport class IndexBuilderOn {\n\tstatic readonly [entityKind]: string = 'SQLiteIndexBuilderOn';\n\n\tconstructor(private name: string, private unique: boolean) {}\n\n\ton(...columns: [IndexColumn, ...IndexColumn[]]): IndexBuilder {\n\t\treturn new IndexBuilder(this.name, columns, this.unique);\n\t}\n}\n\nexport class IndexBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteIndexBuilder';\n\n\tdeclare _: {\n\t\tbrand: 'SQLiteIndexBuilder';\n\t};\n\n\t/** @internal */\n\tconfig: IndexConfig;\n\n\tconstructor(name: string, columns: IndexColumn[], unique: boolean) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tcolumns,\n\t\t\tunique,\n\t\t\twhere: undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Condition for partial index.\n\t */\n\twhere(condition: SQL): this {\n\t\tthis.config.where = condition;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: SQLiteTable): Index {\n\t\treturn new Index(this.config, table);\n\t}\n}\n\nexport class Index {\n\tstatic readonly [entityKind]: string = 'SQLiteIndex';\n\n\tdeclare _: {\n\t\tbrand: 'SQLiteIndex';\n\t};\n\n\treadonly config: IndexConfig & { table: SQLiteTable };\n\n\tconstructor(config: IndexConfig, table: SQLiteTable) {\n\t\tthis.config = { ...config, table };\n\t}\n}\n\nexport function index(name: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(name, false);\n}\n\nexport function uniqueIndex(name: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(name, true);\n}\n","import { entityKind } from '~/entity.ts';\nimport type { AnySQLiteColumn, SQLiteColumn } from './columns/index.ts';\nimport { SQLiteTable } from './table.ts';\n\nexport function primaryKey<\n\tTTableName extends string,\n\tTColumn extends AnySQLiteColumn<{ tableName: TTableName }>,\n\tTColumns extends AnySQLiteColumn<{ tableName: TTableName }>[],\n>(config: { name?: string; columns: [TColumn, ...TColumns] }): PrimaryKeyBuilder;\n/**\n * @deprecated: Please use primaryKey({ columns: [] }) instead of this function\n * @param columns\n */\nexport function primaryKey<\n\tTTableName extends string,\n\tTColumns extends AnySQLiteColumn<{ tableName: TTableName }>[],\n>(...columns: TColumns): PrimaryKeyBuilder;\nexport function primaryKey(...config: any) {\n\tif (config[0].columns) {\n\t\treturn new PrimaryKeyBuilder(config[0].columns, config[0].name);\n\t}\n\treturn new PrimaryKeyBuilder(config);\n}\nexport class PrimaryKeyBuilder {\n\tstatic readonly [entityKind]: string = 'SQLitePrimaryKeyBuilder';\n\n\tdeclare _: {\n\t\tbrand: 'SQLitePrimaryKeyBuilder';\n\t};\n\n\t/** @internal */\n\tcolumns: SQLiteColumn[];\n\n\t/** @internal */\n\tname?: string;\n\n\tconstructor(\n\t\tcolumns: SQLiteColumn[],\n\t\tname?: string,\n\t) {\n\t\tthis.columns = columns;\n\t\tthis.name = name;\n\t}\n\n\t/** @internal */\n\tbuild(table: SQLiteTable): PrimaryKey {\n\t\treturn new PrimaryKey(table, this.columns, this.name);\n\t}\n}\n\nexport class PrimaryKey {\n\tstatic readonly [entityKind]: string = 'SQLitePrimaryKey';\n\n\treadonly columns: SQLiteColumn[];\n\treadonly name?: string;\n\n\tconstructor(readonly table: SQLiteTable, columns: SQLiteColumn[], name?: string) {\n\t\tthis.columns = columns;\n\t\tthis.name = name;\n\t}\n\n\tgetName(): string {\n\t\treturn this.name\n\t\t\t?? `${this.table[SQLiteTable.Symbol.Name]}_${this.columns.map((column) => column.name).join('_')}_pk`;\n\t}\n}\n","import { is } from '~/entity.ts';\nimport { SQL } from '~/sql/sql.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { Table } from '~/table.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type { Check } from './checks.ts';\nimport { CheckBuilder } from './checks.ts';\nimport type { ForeignKey } from './foreign-keys.ts';\nimport { ForeignKeyBuilder } from './foreign-keys.ts';\nimport type { Index } from './indexes.ts';\nimport { IndexBuilder } from './indexes.ts';\nimport type { PrimaryKey } from './primary-keys.ts';\nimport { PrimaryKeyBuilder } from './primary-keys.ts';\nimport { SQLiteTable } from './table.ts';\nimport { type UniqueConstraint, UniqueConstraintBuilder } from './unique-constraint.ts';\nimport type { SQLiteViewBase } from './view-base.ts';\nimport type { SQLiteView } from './view.ts';\n\nexport function getTableConfig<TTable extends SQLiteTable>(table: TTable) {\n\tconst columns = Object.values(table[SQLiteTable.Symbol.Columns]);\n\tconst indexes: Index[] = [];\n\tconst checks: Check[] = [];\n\tconst primaryKeys: PrimaryKey[] = [];\n\tconst uniqueConstraints: UniqueConstraint[] = [];\n\tconst foreignKeys: ForeignKey[] = Object.values(table[SQLiteTable.Symbol.InlineForeignKeys]);\n\tconst name = table[Table.Symbol.Name];\n\n\tconst extraConfigBuilder = table[SQLiteTable.Symbol.ExtraConfigBuilder];\n\n\tif (extraConfigBuilder !== undefined) {\n\t\tconst extraConfig = extraConfigBuilder(table[SQLiteTable.Symbol.Columns]);\n\t\tconst extraValues = Array.isArray(extraConfig) ? extraConfig.flat(1) as any[] : Object.values(extraConfig);\n\t\tfor (const builder of Object.values(extraValues)) {\n\t\t\tif (is(builder, IndexBuilder)) {\n\t\t\t\tindexes.push(builder.build(table));\n\t\t\t} else if (is(builder, CheckBuilder)) {\n\t\t\t\tchecks.push(builder.build(table));\n\t\t\t} else if (is(builder, UniqueConstraintBuilder)) {\n\t\t\t\tuniqueConstraints.push(builder.build(table));\n\t\t\t} else if (is(builder, PrimaryKeyBuilder)) {\n\t\t\t\tprimaryKeys.push(builder.build(table));\n\t\t\t} else if (is(builder, ForeignKeyBuilder)) {\n\t\t\t\tforeignKeys.push(builder.build(table));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tcolumns,\n\t\tindexes,\n\t\tforeignKeys,\n\t\tchecks,\n\t\tprimaryKeys,\n\t\tuniqueConstraints,\n\t\tname,\n\t};\n}\n\nexport function extractUsedTable(table: SQLiteTable | Subquery | SQLiteViewBase | SQL): string[] {\n\tif (is(table, SQLiteTable)) {\n\t\treturn [`${table[Table.Symbol.BaseName]}`];\n\t}\n\tif (is(table, Subquery)) {\n\t\treturn table._.usedTables ?? [];\n\t}\n\tif (is(table, SQL)) {\n\t\treturn table.usedTables ?? [];\n\t}\n\treturn [];\n}\n\nexport type OnConflict = 'rollback' | 'abort' | 'fail' | 'ignore' | 'replace';\n\nexport function getViewConfig<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n>(view: SQLiteView<TName, TExisting>) {\n\treturn {\n\t\t...view[ViewBaseConfig],\n\t\t// ...view[SQLiteViewConfig],\n\t};\n}\n","import { entityKind } from '~/entity.ts';\nimport type { SelectResultFields } from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { Placeholder, Query, SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteDialect } from '~/sqlite-core/dialect.ts';\nimport type { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport type { Subquery } from '~/subquery.ts';\nimport { Table } from '~/table.ts';\nimport { type DrizzleTypeError, orderSelectedFields, type ValueOrArray } from '~/utils.ts';\nimport type { SQLiteColumn } from '../columns/common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport type { SelectedFieldsFlat, SelectedFieldsOrdered } from './select.types.ts';\n\nexport type SQLiteDeleteWithout<\n\tT extends AnySQLiteDeleteBase,\n\tTDynamic extends boolean,\n\tK extends keyof T & string,\n> = TDynamic extends true ? T\n\t: Omit<\n\t\tSQLiteDeleteBase<\n\t\t\tT['_']['table'],\n\t\t\tT['_']['resultType'],\n\t\t\tT['_']['runResult'],\n\t\t\tT['_']['returning'],\n\t\t\tTDynamic,\n\t\t\tT['_']['excludedMethods'] | K\n\t\t>,\n\t\tT['_']['excludedMethods'] | K\n\t>;\n\nexport type SQLiteDelete<\n\tTTable extends SQLiteTable = SQLiteTable,\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = unknown,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n> = SQLiteDeleteBase<TTable, TResultType, TRunResult, TReturning, true, never>;\n\nexport interface SQLiteDeleteConfig {\n\twhere?: SQL | undefined;\n\tlimit?: number | Placeholder;\n\torderBy?: (SQLiteColumn | SQL | SQL.Aliased)[];\n\ttable: SQLiteTable;\n\treturning?: SelectedFieldsOrdered;\n\twithList?: Subquery[];\n}\n\nexport type SQLiteDeleteReturningAll<\n\tT extends AnySQLiteDeleteBase,\n\tTDynamic extends boolean,\n> = SQLiteDeleteWithout<\n\tSQLiteDeleteBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['table']['$inferSelect'],\n\t\tT['_']['dynamic'],\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteDeleteReturning<\n\tT extends AnySQLiteDeleteBase,\n\tTDynamic extends boolean,\n\tTSelectedFields extends SelectedFieldsFlat,\n> = SQLiteDeleteWithout<\n\tSQLiteDeleteBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tSelectResultFields<TSelectedFields>,\n\t\tT['_']['dynamic'],\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteDeleteExecute<T extends AnySQLiteDeleteBase> = T['_']['returning'] extends undefined\n\t? T['_']['runResult']\n\t: T['_']['returning'][];\n\nexport type SQLiteDeletePrepare<T extends AnySQLiteDeleteBase> = SQLitePreparedQuery<{\n\ttype: T['_']['resultType'];\n\trun: T['_']['runResult'];\n\tall: T['_']['returning'] extends undefined ? DrizzleTypeError<'.all() cannot be used without .returning()'>\n\t\t: T['_']['returning'][];\n\tget: T['_']['returning'] extends undefined ? DrizzleTypeError<'.get() cannot be used without .returning()'>\n\t\t: T['_']['returning'] | undefined;\n\tvalues: T['_']['returning'] extends undefined ? DrizzleTypeError<'.values() cannot be used without .returning()'>\n\t\t: any[][];\n\texecute: SQLiteDeleteExecute<T>;\n}>;\n\nexport type SQLiteDeleteDynamic<T extends AnySQLiteDeleteBase> = SQLiteDelete<\n\tT['_']['table'],\n\tT['_']['resultType'],\n\tT['_']['runResult'],\n\tT['_']['returning']\n>;\n\nexport type AnySQLiteDeleteBase = SQLiteDeleteBase<any, any, any, any, any, any>;\n\nexport interface SQLiteDeleteBase<\n\tTTable extends SQLiteTable,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n> extends\n\tQueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>,\n\tRunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>,\n\tSQLWrapper\n{\n\treadonly _: {\n\t\tdialect: 'sqlite';\n\t\treadonly table: TTable;\n\t\treadonly resultType: TResultType;\n\t\treadonly runResult: TRunResult;\n\t\treadonly returning: TReturning;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TReturning extends undefined ? TRunResult : TReturning[];\n\t};\n}\n\nexport class SQLiteDeleteBase<\n\tTTable extends SQLiteTable,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n\tTDynamic extends boolean = false,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>\n\timplements RunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteDelete';\n\n\t/** @internal */\n\tconfig: SQLiteDeleteConfig;\n\n\tconstructor(\n\t\tprivate table: TTable,\n\t\tprivate session: SQLiteSession<any, any, any, any>,\n\t\tprivate dialect: SQLiteDialect,\n\t\twithList?: Subquery[],\n\t) {\n\t\tsuper();\n\t\tthis.config = { table, withList };\n\t}\n\n\t/**\n\t * Adds a `where` clause to the query.\n\t *\n\t * Calling this method will delete only those rows that fulfill a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t *\n\t * @param where the `where` clause.\n\t *\n\t * @example\n\t * You can use conditional operators and `sql function` to filter the rows to be deleted.\n\t *\n\t * ```ts\n\t * // Delete all cars with green color\n\t * db.delete(cars).where(eq(cars.color, 'green'));\n\t * // or\n\t * db.delete(cars).where(sql`${cars.color} = 'green'`)\n\t * ```\n\t *\n\t * You can logically combine conditional operators with `and()` and `or()` operators:\n\t *\n\t * ```ts\n\t * // Delete all BMW cars with a green color\n\t * db.delete(cars).where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));\n\t *\n\t * // Delete all cars with the green or blue color\n\t * db.delete(cars).where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));\n\t * ```\n\t */\n\twhere(where: SQL | undefined): SQLiteDeleteWithout<this, TDynamic, 'where'> {\n\t\tthis.config.where = where;\n\t\treturn this as any;\n\t}\n\n\torderBy(\n\t\tbuilder: (deleteTable: TTable) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>,\n\t): SQLiteDeleteWithout<this, TDynamic, 'orderBy'>;\n\torderBy(...columns: (SQLiteColumn | SQL | SQL.Aliased)[]): SQLiteDeleteWithout<this, TDynamic, 'orderBy'>;\n\torderBy(\n\t\t...columns:\n\t\t\t| [(deleteTable: TTable) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>]\n\t\t\t| (SQLiteColumn | SQL | SQL.Aliased)[]\n\t): SQLiteDeleteWithout<this, TDynamic, 'orderBy'> {\n\t\tif (typeof columns[0] === 'function') {\n\t\t\tconst orderBy = columns[0](\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.table[Table.Symbol.Columns],\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'alias', sqlBehavior: 'sql' }),\n\t\t\t\t) as any,\n\t\t\t);\n\n\t\t\tconst orderByArray = Array.isArray(orderBy) ? orderBy : [orderBy];\n\t\t\tthis.config.orderBy = orderByArray;\n\t\t} else {\n\t\t\tconst orderByArray = columns as (SQLiteColumn | SQL | SQL.Aliased)[];\n\t\t\tthis.config.orderBy = orderByArray;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\tlimit(limit: number | Placeholder): SQLiteDeleteWithout<this, TDynamic, 'limit'> {\n\t\tthis.config.limit = limit;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `returning` clause to the query.\n\t *\n\t * Calling this method will return the specified fields of the deleted rows. If no fields are specified, all fields will be returned.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/delete#delete-with-return}\n\t *\n\t * @example\n\t * ```ts\n\t * // Delete all cars with the green color and return all fields\n\t * const deletedCars: Car[] = await db.delete(cars)\n\t * .where(eq(cars.color, 'green'))\n\t * .returning();\n\t *\n\t * // Delete all cars with the green color and return only their id and brand fields\n\t * const deletedCarsIdsAndBrands: { id: number, brand: string }[] = await db.delete(cars)\n\t * .where(eq(cars.color, 'green'))\n\t * .returning({ id: cars.id, brand: cars.brand });\n\t * ```\n\t */\n\treturning(): SQLiteDeleteReturningAll<this, TDynamic>;\n\treturning<TSelectedFields extends SelectedFieldsFlat>(\n\t\tfields: TSelectedFields,\n\t): SQLiteDeleteReturning<this, TDynamic, TSelectedFields>;\n\treturning(\n\t\tfields: SelectedFieldsFlat = this.table[SQLiteTable.Symbol.Columns],\n\t): SQLiteDeleteReturning<this, TDynamic, any> {\n\t\tthis.config.returning = orderSelectedFields<SQLiteColumn>(fields);\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildDeleteQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\t/** @internal */\n\t_prepare(isOneTimeQuery = true): SQLiteDeletePrepare<this> {\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tthis.dialect.sqlToQuery(this.getSQL()),\n\t\t\tthis.config.returning,\n\t\t\tthis.config.returning ? 'all' : 'run',\n\t\t\ttrue,\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\ttype: 'delete',\n\t\t\t\ttables: extractUsedTable(this.config.table),\n\t\t\t},\n\t\t) as SQLiteDeletePrepare<this>;\n\t}\n\n\tprepare(): SQLiteDeletePrepare<this> {\n\t\treturn this._prepare(false);\n\t}\n\n\trun: ReturnType<this['prepare']>['run'] = (placeholderValues) => {\n\t\treturn this._prepare().run(placeholderValues);\n\t};\n\n\tall: ReturnType<this['prepare']>['all'] = (placeholderValues) => {\n\t\treturn this._prepare().all(placeholderValues);\n\t};\n\n\tget: ReturnType<this['prepare']>['get'] = (placeholderValues) => {\n\t\treturn this._prepare().get(placeholderValues);\n\t};\n\n\tvalues: ReturnType<this['prepare']>['values'] = (placeholderValues) => {\n\t\treturn this._prepare().values(placeholderValues);\n\t};\n\n\toverride async execute(placeholderValues?: Record<string, unknown>): Promise<SQLiteDeleteExecute<this>> {\n\t\treturn this._prepare().execute(placeholderValues) as SQLiteDeleteExecute<this>;\n\t}\n\n\t$dynamic(): SQLiteDeleteDynamic<this> {\n\t\treturn this as any;\n\t}\n}\n","import type { Column } from '~/column.ts';\nimport { entityKind } from './entity.ts';\nimport { Table } from './table.ts';\nimport type { Casing } from './utils.ts';\n\nexport function toSnakeCase(input: string) {\n\tconst words = input\n\t\t.replace(/['\\u2019]/g, '')\n\t\t.match(/[\\da-z]+|[A-Z]+(?![a-z])|[A-Z][\\da-z]+/g) ?? [];\n\n\treturn words.map((word) => word.toLowerCase()).join('_');\n}\n\nexport function toCamelCase(input: string) {\n\tconst words = input\n\t\t.replace(/['\\u2019]/g, '')\n\t\t.match(/[\\da-z]+|[A-Z]+(?![a-z])|[A-Z][\\da-z]+/g) ?? [];\n\n\treturn words.reduce((acc, word, i) => {\n\t\tconst formattedWord = i === 0 ? word.toLowerCase() : `${word[0]!.toUpperCase()}${word.slice(1)}`;\n\t\treturn acc + formattedWord;\n\t}, '');\n}\n\nfunction noopCase(input: string) {\n\treturn input;\n}\n\nexport class CasingCache {\n\tstatic readonly [entityKind]: string = 'CasingCache';\n\n\t/** @internal */\n\tcache: Record<string, string> = {};\n\tprivate cachedTables: Record<string, true> = {};\n\tprivate convert: (input: string) => string;\n\n\tconstructor(casing?: Casing) {\n\t\tthis.convert = casing === 'snake_case'\n\t\t\t? toSnakeCase\n\t\t\t: casing === 'camelCase'\n\t\t\t? toCamelCase\n\t\t\t: noopCase;\n\t}\n\n\tgetColumnCasing(column: Column): string {\n\t\tif (!column.keyAsName) return column.name;\n\n\t\tconst schema = column.table[Table.Symbol.Schema] ?? 'public';\n\t\tconst tableName = column.table[Table.Symbol.OriginalName];\n\t\tconst key = `${schema}.${tableName}.${column.name}`;\n\n\t\tif (!this.cache[key]) {\n\t\t\tthis.cacheTable(column.table);\n\t\t}\n\t\treturn this.cache[key]!;\n\t}\n\n\tprivate cacheTable(table: Table) {\n\t\tconst schema = table[Table.Symbol.Schema] ?? 'public';\n\t\tconst tableName = table[Table.Symbol.OriginalName];\n\t\tconst tableKey = `${schema}.${tableName}`;\n\n\t\tif (!this.cachedTables[tableKey]) {\n\t\t\tfor (const column of Object.values(table[Table.Symbol.Columns])) {\n\t\t\t\tconst columnKey = `${tableKey}.${column.name}`;\n\t\t\t\tthis.cache[columnKey] = this.convert(column.name);\n\t\t\t}\n\t\t\tthis.cachedTables[tableKey] = true;\n\t\t}\n\t}\n\n\tclearCache() {\n\t\tthis.cache = {};\n\t\tthis.cachedTables = {};\n\t}\n}\n","import { entityKind } from '~/entity.ts';\n\nexport class DrizzleError extends Error {\n\tstatic readonly [entityKind]: string = 'DrizzleError';\n\n\tconstructor({ message, cause }: { message?: string; cause?: unknown }) {\n\t\tsuper(message);\n\t\tthis.name = 'DrizzleError';\n\t\tthis.cause = cause;\n\t}\n}\n\nexport class DrizzleQueryError extends Error {\n\tconstructor(\n\t\tpublic query: string,\n\t\tpublic params: any[],\n\t\tpublic override cause?: Error,\n\t) {\n\t\tsuper(`Failed query: ${query}\\nparams: ${params}`);\n\t\tError.captureStackTrace(this, DrizzleQueryError);\n\n\t\t// ES2022+: preserves original error on `.cause`\n\t\tif (cause) (this as any).cause = cause;\n\t}\n}\n\nexport class TransactionRollbackError extends DrizzleError {\n\tstatic override readonly [entityKind]: string = 'TransactionRollbackError';\n\n\tconstructor() {\n\t\tsuper({ message: 'Rollback' });\n\t}\n}\n","import { entityKind } from '~/entity.ts';\nimport type { ColumnsSelection } from '~/sql/sql.ts';\nimport { View } from '~/sql/sql.ts';\n\nexport abstract class SQLiteViewBase<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelection extends ColumnsSelection = ColumnsSelection,\n> extends View<TName, TExisting, TSelection> {\n\tstatic override readonly [entityKind]: string = 'SQLiteViewBase';\n\n\tdeclare _: View<TName, TExisting, TSelection>['_'] & {\n\t\tviewBrand: 'SQLiteView';\n\t};\n}\n","import { aliasedTable, aliasedTableColumn, mapColumnsInAliasedSQLToAlias, mapColumnsInSQLToAlias } from '~/alias.ts';\nimport { CasingCache } from '~/casing.ts';\nimport type { AnyColumn } from '~/column.ts';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { DrizzleError } from '~/errors.ts';\nimport type { MigrationConfig, MigrationMeta } from '~/migrator.ts';\nimport {\n\ttype BuildRelationalQueryResult,\n\ttype DBQueryConfig,\n\tgetOperators,\n\tgetOrderByOperators,\n\tMany,\n\tnormalizeRelation,\n\tOne,\n\ttype Relation,\n\ttype TableRelationalConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { Name, Placeholder } from '~/sql/index.ts';\nimport { and, eq } from '~/sql/index.ts';\nimport { Param, type QueryWithTypings, SQL, sql, type SQLChunk } from '~/sql/sql.ts';\nimport { SQLiteColumn } from '~/sqlite-core/columns/index.ts';\nimport type {\n\tAnySQLiteSelectQueryBuilder,\n\tSQLiteDeleteConfig,\n\tSQLiteInsertConfig,\n\tSQLiteUpdateConfig,\n} from '~/sqlite-core/query-builders/index.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { getTableName, getTableUniqueName, Table } from '~/table.ts';\nimport { type Casing, orderSelectedFields, type UpdateSet } from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type {\n\tSelectedFieldsOrdered,\n\tSQLiteSelectConfig,\n\tSQLiteSelectJoinConfig,\n} from './query-builders/select.types.ts';\nimport type { SQLiteSession } from './session.ts';\nimport { SQLiteViewBase } from './view-base.ts';\n\nexport interface SQLiteDialectConfig {\n\tcasing?: Casing;\n}\n\nexport abstract class SQLiteDialect {\n\tstatic readonly [entityKind]: string = 'SQLiteDialect';\n\n\t/** @internal */\n\treadonly casing: CasingCache;\n\n\tconstructor(config?: SQLiteDialectConfig) {\n\t\tthis.casing = new CasingCache(config?.casing);\n\t}\n\n\tescapeName(name: string): string {\n\t\treturn `\"${name.replace(/\"/g, '\"\"')}\"`;\n\t}\n\n\tescapeParam(_num: number): string {\n\t\treturn '?';\n\t}\n\n\tescapeString(str: string): string {\n\t\treturn `'${str.replace(/'/g, \"''\")}'`;\n\t}\n\n\tprivate buildWithCTE(queries: Subquery[] | undefined): SQL | undefined {\n\t\tif (!queries?.length) return undefined;\n\n\t\tconst withSqlChunks = [sql`with `];\n\t\tfor (const [i, w] of queries.entries()) {\n\t\t\twithSqlChunks.push(sql`${sql.identifier(w._.alias)} as (${w._.sql})`);\n\t\t\tif (i < queries.length - 1) {\n\t\t\t\twithSqlChunks.push(sql`, `);\n\t\t\t}\n\t\t}\n\t\twithSqlChunks.push(sql` `);\n\t\treturn sql.join(withSqlChunks);\n\t}\n\n\tbuildDeleteQuery({\n\t\ttable,\n\t\twhere,\n\t\treturning,\n\t\twithList,\n\t\tlimit,\n\t\torderBy,\n\t}: SQLiteDeleteConfig): SQL {\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\tconst orderBySql = this.buildOrderBy(orderBy);\n\n\t\tconst limitSql = this.buildLimit(limit);\n\n\t\treturn sql`${withSql}delete from ${table}${whereSql}${returningSql}${orderBySql}${limitSql}`;\n\t}\n\n\tbuildUpdateSet(table: SQLiteTable, set: UpdateSet): SQL {\n\t\tconst tableColumns = table[Table.Symbol.Columns];\n\n\t\tconst columnNames = Object.keys(tableColumns).filter(\n\t\t\t(colName) =>\n\t\t\t\tset[colName] !== undefined\n\t\t\t\t|| tableColumns[colName]?.onUpdateFn !== undefined,\n\t\t);\n\n\t\tconst setSize = columnNames.length;\n\t\treturn sql.join(\n\t\t\tcolumnNames.flatMap((colName, i) => {\n\t\t\t\tconst col = tableColumns[colName]!;\n\n\t\t\t\tconst onUpdateFnResult = col.onUpdateFn?.();\n\t\t\t\tconst value = set[colName]\n\t\t\t\t\t?? (is(onUpdateFnResult, SQL)\n\t\t\t\t\t\t? onUpdateFnResult\n\t\t\t\t\t\t: sql.param(onUpdateFnResult, col));\n\t\t\t\tconst res = sql`${sql.identifier(this.casing.getColumnCasing(col))} = ${value}`;\n\n\t\t\t\tif (i < setSize - 1) {\n\t\t\t\t\treturn [res, sql.raw(', ')];\n\t\t\t\t}\n\t\t\t\treturn [res];\n\t\t\t}),\n\t\t);\n\t}\n\n\tbuildUpdateQuery({\n\t\ttable,\n\t\tset,\n\t\twhere,\n\t\treturning,\n\t\twithList,\n\t\tjoins,\n\t\tfrom,\n\t\tlimit,\n\t\torderBy,\n\t}: SQLiteUpdateConfig): SQL {\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst setSql = this.buildUpdateSet(table, set);\n\n\t\tconst fromSql = from && sql.join([sql.raw(' from '), this.buildFromTable(from)]);\n\n\t\tconst joinsSql = this.buildJoins(joins);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\tconst orderBySql = this.buildOrderBy(orderBy);\n\n\t\tconst limitSql = this.buildLimit(limit);\n\n\t\treturn sql`${withSql}update ${table} set ${setSql}${fromSql}${joinsSql}${whereSql}${returningSql}${orderBySql}${limitSql}`;\n\t}\n\n\t/**\n\t * Builds selection SQL with provided fields/expressions\n\t *\n\t * Examples:\n\t *\n\t * `select <selection> from`\n\t *\n\t * `insert ... returning <selection>`\n\t *\n\t * If `isSingleTable` is true, then columns won't be prefixed with table name\n\t */\n\tprivate buildSelection(\n\t\tfields: SelectedFieldsOrdered,\n\t\t{ isSingleTable = false }: { isSingleTable?: boolean } = {},\n\t): SQL {\n\t\tconst columnsLen = fields.length;\n\n\t\tconst chunks = fields.flatMap(({ field }, i) => {\n\t\t\tconst chunk: SQLChunk[] = [];\n\n\t\t\tif (is(field, SQL.Aliased) && field.isSelectionField) {\n\t\t\t\tchunk.push(sql.identifier(field.fieldAlias));\n\t\t\t} else if (is(field, SQL.Aliased) || is(field, SQL)) {\n\t\t\t\tconst query = is(field, SQL.Aliased) ? field.sql : field;\n\n\t\t\t\tif (isSingleTable) {\n\t\t\t\t\tchunk.push(\n\t\t\t\t\t\tnew SQL(\n\t\t\t\t\t\t\tquery.queryChunks.map((c) => {\n\t\t\t\t\t\t\t\tif (is(c, Column)) {\n\t\t\t\t\t\t\t\t\treturn sql.identifier(this.casing.getColumnCasing(c));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn c;\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tchunk.push(query);\n\t\t\t\t}\n\n\t\t\t\tif (is(field, SQL.Aliased)) {\n\t\t\t\t\tchunk.push(sql` as ${sql.identifier(field.fieldAlias)}`);\n\t\t\t\t}\n\t\t\t} else if (is(field, Column)) {\n\t\t\t\tconst tableName = field.table[Table.Symbol.Name];\n\t\t\t\tif (field.columnType === 'SQLiteNumericBigInt') {\n\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\tsql`cast(${sql.identifier(this.casing.getColumnCasing(field))} as text)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\tsql`cast(${sql.identifier(tableName)}.${sql.identifier(this.casing.getColumnCasing(field))} as text)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\tchunk.push(sql.identifier(this.casing.getColumnCasing(field)));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\tsql`${sql.identifier(tableName)}.${sql.identifier(this.casing.getColumnCasing(field))}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (is(field, Subquery)) {\n\t\t\t\tconst entries = Object.entries(field._.selectedFields) as [\n\t\t\t\t\tstring,\n\t\t\t\t\tSQL.Aliased | Column | SQL,\n\t\t\t\t][];\n\n\t\t\t\tif (entries.length === 1) {\n\t\t\t\t\tconst entry = entries[0]![1];\n\n\t\t\t\t\tconst fieldDecoder = is(entry, SQL)\n\t\t\t\t\t\t? entry.decoder\n\t\t\t\t\t\t: is(entry, Column)\n\t\t\t\t\t\t? { mapFromDriverValue: (v: any) => entry.mapFromDriverValue(v) }\n\t\t\t\t\t\t: entry.sql.decoder;\n\t\t\t\t\tif (fieldDecoder) field._.sql.decoder = fieldDecoder;\n\t\t\t\t}\n\t\t\t\tchunk.push(field);\n\t\t\t}\n\n\t\t\tif (i < columnsLen - 1) {\n\t\t\t\tchunk.push(sql`, `);\n\t\t\t}\n\n\t\t\treturn chunk;\n\t\t});\n\n\t\treturn sql.join(chunks);\n\t}\n\n\tprivate buildJoins(\n\t\tjoins: SQLiteSelectJoinConfig[] | undefined,\n\t): SQL | undefined {\n\t\tif (!joins || joins.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst joinsArray: SQL[] = [];\n\n\t\tif (joins) {\n\t\t\tfor (const [index, joinMeta] of joins.entries()) {\n\t\t\t\tif (index === 0) {\n\t\t\t\t\tjoinsArray.push(sql` `);\n\t\t\t\t}\n\t\t\t\tconst table = joinMeta.table;\n\t\t\t\tconst onSql = joinMeta.on ? sql` on ${joinMeta.on}` : undefined;\n\n\t\t\t\tif (is(table, SQLiteTable)) {\n\t\t\t\t\tconst tableName = table[SQLiteTable.Symbol.Name];\n\t\t\t\t\tconst tableSchema = table[SQLiteTable.Symbol.Schema];\n\t\t\t\t\tconst origTableName = table[SQLiteTable.Symbol.OriginalName];\n\t\t\t\t\tconst alias = tableName === origTableName ? undefined : joinMeta.alias;\n\t\t\t\t\tjoinsArray.push(\n\t\t\t\t\t\tsql`${sql.raw(joinMeta.joinType)} join ${tableSchema ? sql`${sql.identifier(tableSchema)}.` : undefined}${\n\t\t\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\t\t\torigTableName,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}${alias && sql` ${sql.identifier(alias)}`}${onSql}`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tjoinsArray.push(\n\t\t\t\t\t\tsql`${sql.raw(joinMeta.joinType)} join ${table}${onSql}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (index < joins.length - 1) {\n\t\t\t\t\tjoinsArray.push(sql` `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn sql.join(joinsArray);\n\t}\n\n\tprivate buildLimit(limit: number | Placeholder | undefined): SQL | undefined {\n\t\treturn typeof limit === 'object'\n\t\t\t\t|| (typeof limit === 'number' && limit >= 0)\n\t\t\t? sql` limit ${limit}`\n\t\t\t: undefined;\n\t}\n\n\tprivate buildOrderBy(\n\t\torderBy: (SQLiteColumn | SQL | SQL.Aliased)[] | undefined,\n\t): SQL | undefined {\n\t\tconst orderByList: (SQLiteColumn | SQL | SQL.Aliased)[] = [];\n\n\t\tif (orderBy) {\n\t\t\tfor (const [index, orderByValue] of orderBy.entries()) {\n\t\t\t\torderByList.push(orderByValue);\n\n\t\t\t\tif (index < orderBy.length - 1) {\n\t\t\t\t\torderByList.push(sql`, `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn orderByList.length > 0\n\t\t\t? sql` order by ${sql.join(orderByList)}`\n\t\t\t: undefined;\n\t}\n\n\tprivate buildFromTable(\n\t\ttable: SQL | Subquery | SQLiteViewBase | SQLiteTable | undefined,\n\t): SQL | Subquery | SQLiteViewBase | SQLiteTable | undefined {\n\t\tif (is(table, Table) && table[Table.Symbol.IsAlias]) {\n\t\t\treturn sql`${sql`${sql.identifier(table[Table.Symbol.Schema] ?? '')}.`.if(table[Table.Symbol.Schema])}${\n\t\t\t\tsql.identifier(\n\t\t\t\t\ttable[Table.Symbol.OriginalName],\n\t\t\t\t)\n\t\t\t} ${sql.identifier(table[Table.Symbol.Name])}`;\n\t\t}\n\n\t\treturn table;\n\t}\n\n\tbuildSelectQuery({\n\t\twithList,\n\t\tfields,\n\t\tfieldsFlat,\n\t\twhere,\n\t\thaving,\n\t\ttable,\n\t\tjoins,\n\t\torderBy,\n\t\tgroupBy,\n\t\tlimit,\n\t\toffset,\n\t\tdistinct,\n\t\tsetOperators,\n\t}: SQLiteSelectConfig): SQL {\n\t\tconst fieldsList = fieldsFlat ?? orderSelectedFields<SQLiteColumn>(fields);\n\t\tfor (const f of fieldsList) {\n\t\t\tif (\n\t\t\t\tis(f.field, Column)\n\t\t\t\t&& getTableName(f.field.table)\n\t\t\t\t\t!== (is(table, Subquery)\n\t\t\t\t\t\t? table._.alias\n\t\t\t\t\t\t: is(table, SQLiteViewBase)\n\t\t\t\t\t\t? table[ViewBaseConfig].name\n\t\t\t\t\t\t: is(table, SQL)\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: getTableName(table))\n\t\t\t\t&& !((table) =>\n\t\t\t\t\tjoins?.some(\n\t\t\t\t\t\t({ alias }) =>\n\t\t\t\t\t\t\talias\n\t\t\t\t\t\t\t\t=== (table[Table.Symbol.IsAlias]\n\t\t\t\t\t\t\t\t\t? getTableName(table)\n\t\t\t\t\t\t\t\t\t: table[Table.Symbol.BaseName]),\n\t\t\t\t\t))(f.field.table)\n\t\t\t) {\n\t\t\t\tconst tableName = getTableName(f.field.table);\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Your \"${\n\t\t\t\t\t\tf.path.join(\n\t\t\t\t\t\t\t'->',\n\t\t\t\t\t\t)\n\t\t\t\t\t}\" field references a column \"${tableName}\".\"${f.field.name}\", but the table \"${tableName}\" is not part of the query! Did you forget to join it?`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst isSingleTable = !joins || joins.length === 0;\n\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst distinctSql = distinct ? sql` distinct` : undefined;\n\n\t\tconst selection = this.buildSelection(fieldsList, { isSingleTable });\n\n\t\tconst tableSql = this.buildFromTable(table);\n\n\t\tconst joinsSql = this.buildJoins(joins);\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\tconst havingSql = having ? sql` having ${having}` : undefined;\n\n\t\tconst groupByList: (SQL | AnyColumn | SQL.Aliased)[] = [];\n\t\tif (groupBy) {\n\t\t\tfor (const [index, groupByValue] of groupBy.entries()) {\n\t\t\t\tgroupByList.push(groupByValue);\n\n\t\t\t\tif (index < groupBy.length - 1) {\n\t\t\t\t\tgroupByList.push(sql`, `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst groupBySql = groupByList.length > 0\n\t\t\t? sql` group by ${sql.join(groupByList)}`\n\t\t\t: undefined;\n\n\t\tconst orderBySql = this.buildOrderBy(orderBy);\n\n\t\tconst limitSql = this.buildLimit(limit);\n\n\t\tconst offsetSql = offset ? sql` offset ${offset}` : undefined;\n\n\t\tconst finalQuery =\n\t\t\tsql`${withSql}select${distinctSql} ${selection} from ${tableSql}${joinsSql}${whereSql}${groupBySql}${havingSql}${orderBySql}${limitSql}${offsetSql}`;\n\n\t\tif (setOperators.length > 0) {\n\t\t\treturn this.buildSetOperations(finalQuery, setOperators);\n\t\t}\n\n\t\treturn finalQuery;\n\t}\n\n\tbuildSetOperations(\n\t\tleftSelect: SQL,\n\t\tsetOperators: SQLiteSelectConfig['setOperators'],\n\t): SQL {\n\t\tconst [setOperator, ...rest] = setOperators;\n\n\t\tif (!setOperator) {\n\t\t\tthrow new Error('Cannot pass undefined values to any set operator');\n\t\t}\n\n\t\tif (rest.length === 0) {\n\t\t\treturn this.buildSetOperationQuery({ leftSelect, setOperator });\n\t\t}\n\n\t\t// Some recursive magic here\n\t\treturn this.buildSetOperations(\n\t\t\tthis.buildSetOperationQuery({ leftSelect, setOperator }),\n\t\t\trest,\n\t\t);\n\t}\n\n\tbuildSetOperationQuery({\n\t\tleftSelect,\n\t\tsetOperator: { type, isAll, rightSelect, limit, orderBy, offset },\n\t}: {\n\t\tleftSelect: SQL;\n\t\tsetOperator: SQLiteSelectConfig['setOperators'][number];\n\t}): SQL {\n\t\t// SQLite doesn't support parenthesis in set operations\n\t\tconst leftChunk = sql`${leftSelect.getSQL()} `;\n\t\tconst rightChunk = sql`${rightSelect.getSQL()}`;\n\n\t\tlet orderBySql;\n\t\tif (orderBy && orderBy.length > 0) {\n\t\t\tconst orderByValues: (SQL<unknown> | Name)[] = [];\n\n\t\t\t// The next bit is necessary because the sql operator replaces ${table.column} with `table`.`column`\n\t\t\t// which is invalid Sql syntax, Table from one of the SELECTs cannot be used in global ORDER clause\n\t\t\tfor (const singleOrderBy of orderBy) {\n\t\t\t\tif (is(singleOrderBy, SQLiteColumn)) {\n\t\t\t\t\torderByValues.push(sql.identifier(singleOrderBy.name));\n\t\t\t\t} else if (is(singleOrderBy, SQL)) {\n\t\t\t\t\tfor (let i = 0; i < singleOrderBy.queryChunks.length; i++) {\n\t\t\t\t\t\tconst chunk = singleOrderBy.queryChunks[i];\n\n\t\t\t\t\t\tif (is(chunk, SQLiteColumn)) {\n\t\t\t\t\t\t\tsingleOrderBy.queryChunks[i] = sql.identifier(\n\t\t\t\t\t\t\t\tthis.casing.getColumnCasing(chunk),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\torderByValues.push(sql`${singleOrderBy}`);\n\t\t\t\t} else {\n\t\t\t\t\torderByValues.push(sql`${singleOrderBy}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\torderBySql = sql` order by ${sql.join(orderByValues, sql`, `)}`;\n\t\t}\n\n\t\tconst limitSql = typeof limit === 'object' || (typeof limit === 'number' && limit >= 0)\n\t\t\t? sql` limit ${limit}`\n\t\t\t: undefined;\n\n\t\tconst operatorChunk = sql.raw(`${type} ${isAll ? 'all ' : ''}`);\n\n\t\tconst offsetSql = offset ? sql` offset ${offset}` : undefined;\n\n\t\treturn sql`${leftChunk}${operatorChunk}${rightChunk}${orderBySql}${limitSql}${offsetSql}`;\n\t}\n\n\tbuildInsertQuery({\n\t\ttable,\n\t\tvalues: valuesOrSelect,\n\t\tonConflict,\n\t\treturning,\n\t\twithList,\n\t\tselect,\n\t}: SQLiteInsertConfig): SQL {\n\t\t// const isSingleValue = values.length === 1;\n\t\tconst valuesSqlList: ((SQLChunk | SQL)[] | SQL)[] = [];\n\t\tconst columns: Record<string, SQLiteColumn> = table[Table.Symbol.Columns];\n\n\t\tconst colEntries: [string, SQLiteColumn][] = Object.entries(columns).filter(\n\t\t\t([_, col]) => !col.shouldDisableInsert(),\n\t\t);\n\t\tconst insertOrder = colEntries.map(([, column]) => sql.identifier(this.casing.getColumnCasing(column)));\n\n\t\tif (select) {\n\t\t\tconst select = valuesOrSelect as AnySQLiteSelectQueryBuilder | SQL;\n\n\t\t\tif (is(select, SQL)) {\n\t\t\t\tvaluesSqlList.push(select);\n\t\t\t} else {\n\t\t\t\tvaluesSqlList.push(select.getSQL());\n\t\t\t}\n\t\t} else {\n\t\t\tconst values = valuesOrSelect as Record<string, Param | SQL>[];\n\t\t\tvaluesSqlList.push(sql.raw('values '));\n\n\t\t\tfor (const [valueIndex, value] of values.entries()) {\n\t\t\t\tconst valueList: (SQLChunk | SQL)[] = [];\n\t\t\t\tfor (const [fieldName, col] of colEntries) {\n\t\t\t\t\tconst colValue = value[fieldName];\n\t\t\t\t\tif (\n\t\t\t\t\t\tcolValue === undefined\n\t\t\t\t\t\t|| (is(colValue, Param) && colValue.value === undefined)\n\t\t\t\t\t) {\n\t\t\t\t\t\tlet defaultValue;\n\t\t\t\t\t\tif (col.default !== null && col.default !== undefined) {\n\t\t\t\t\t\t\tdefaultValue = is(col.default, SQL)\n\t\t\t\t\t\t\t\t? col.default\n\t\t\t\t\t\t\t\t: sql.param(col.default, col);\n\t\t\t\t\t\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t\t\t\t\t\t} else if (col.defaultFn !== undefined) {\n\t\t\t\t\t\t\tconst defaultFnResult = col.defaultFn();\n\t\t\t\t\t\t\tdefaultValue = is(defaultFnResult, SQL)\n\t\t\t\t\t\t\t\t? defaultFnResult\n\t\t\t\t\t\t\t\t: sql.param(defaultFnResult, col);\n\t\t\t\t\t\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t\t\t\t\t\t} else if (!col.default && col.onUpdateFn !== undefined) {\n\t\t\t\t\t\t\tconst onUpdateFnResult = col.onUpdateFn();\n\t\t\t\t\t\t\tdefaultValue = is(onUpdateFnResult, SQL)\n\t\t\t\t\t\t\t\t? onUpdateFnResult\n\t\t\t\t\t\t\t\t: sql.param(onUpdateFnResult, col);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdefaultValue = sql`null`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalueList.push(defaultValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalueList.push(colValue);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvaluesSqlList.push(valueList);\n\t\t\t\tif (valueIndex < values.length - 1) {\n\t\t\t\t\tvaluesSqlList.push(sql`, `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst valuesSql = sql.join(valuesSqlList);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst onConflictSql = onConflict?.length ? sql.join(onConflict) : undefined;\n\n\t\t// if (isSingleValue && valuesSqlList.length === 0){\n\t\t// \treturn sql`insert into ${table} default values ${onConflictSql}${returningSql}`;\n\t\t// }\n\n\t\treturn sql`${withSql}insert into ${table} ${insertOrder} ${valuesSql}${onConflictSql}${returningSql}`;\n\t}\n\n\tsqlToQuery(sql: SQL, invokeSource?: 'indexes' | undefined): QueryWithTypings {\n\t\treturn sql.toQuery({\n\t\t\tcasing: this.casing,\n\t\t\tescapeName: this.escapeName,\n\t\t\tescapeParam: this.escapeParam,\n\t\t\tescapeString: this.escapeString,\n\t\t\tinvokeSource,\n\t\t});\n\t}\n\n\tbuildRelationalQuery({\n\t\tfullSchema,\n\t\tschema,\n\t\ttableNamesMap,\n\t\ttable,\n\t\ttableConfig,\n\t\tqueryConfig: config,\n\t\ttableAlias,\n\t\tnestedQueryRelation,\n\t\tjoinOn,\n\t}: {\n\t\tfullSchema: Record<string, unknown>;\n\t\tschema: TablesRelationalConfig;\n\t\ttableNamesMap: Record<string, string>;\n\t\ttable: SQLiteTable;\n\t\ttableConfig: TableRelationalConfig;\n\t\tqueryConfig: true | DBQueryConfig<'many', true>;\n\t\ttableAlias: string;\n\t\tnestedQueryRelation?: Relation;\n\t\tjoinOn?: SQL;\n\t}): BuildRelationalQueryResult<SQLiteTable, SQLiteColumn> {\n\t\tlet selection: BuildRelationalQueryResult<\n\t\t\tSQLiteTable,\n\t\t\tSQLiteColumn\n\t\t>['selection'] = [];\n\t\tlet limit,\n\t\t\toffset,\n\t\t\torderBy: SQLiteSelectConfig['orderBy'] = [],\n\t\t\twhere;\n\t\tconst joins: SQLiteSelectJoinConfig[] = [];\n\n\t\tif (config === true) {\n\t\t\tconst selectionEntries = Object.entries(tableConfig.columns);\n\t\t\tselection = selectionEntries.map(([key, value]) => ({\n\t\t\t\tdbKey: value.name,\n\t\t\t\ttsKey: key,\n\t\t\t\tfield: aliasedTableColumn(value as SQLiteColumn, tableAlias),\n\t\t\t\trelationTableTsKey: undefined,\n\t\t\t\tisJson: false,\n\t\t\t\tselection: [],\n\t\t\t}));\n\t\t} else {\n\t\t\tconst aliasedColumns = Object.fromEntries(\n\t\t\t\tObject.entries(tableConfig.columns).map(([key, value]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\taliasedTableColumn(value, tableAlias),\n\t\t\t\t]),\n\t\t\t);\n\n\t\t\tif (config.where) {\n\t\t\t\tconst whereSql = typeof config.where === 'function'\n\t\t\t\t\t? config.where(aliasedColumns, getOperators())\n\t\t\t\t\t: config.where;\n\t\t\t\twhere = whereSql && mapColumnsInSQLToAlias(whereSql, tableAlias);\n\t\t\t}\n\n\t\t\tconst fieldsSelection: {\n\t\t\t\ttsKey: string;\n\t\t\t\tvalue: SQLiteColumn | SQL.Aliased;\n\t\t\t}[] = [];\n\t\t\tlet selectedColumns: string[] = [];\n\n\t\t\t// Figure out which columns to select\n\t\t\tif (config.columns) {\n\t\t\t\tlet isIncludeMode = false;\n\n\t\t\t\tfor (const [field, value] of Object.entries(config.columns)) {\n\t\t\t\t\tif (value === undefined) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (field in tableConfig.columns) {\n\t\t\t\t\t\tif (!isIncludeMode && value === true) {\n\t\t\t\t\t\t\tisIncludeMode = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tselectedColumns.push(field);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (selectedColumns.length > 0) {\n\t\t\t\t\tselectedColumns = isIncludeMode\n\t\t\t\t\t\t? selectedColumns.filter((c) => config.columns?.[c] === true)\n\t\t\t\t\t\t: Object.keys(tableConfig.columns).filter(\n\t\t\t\t\t\t\t(key) => !selectedColumns.includes(key),\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Select all columns if selection is not specified\n\t\t\t\tselectedColumns = Object.keys(tableConfig.columns);\n\t\t\t}\n\n\t\t\tfor (const field of selectedColumns) {\n\t\t\t\tconst column = tableConfig.columns[field]! as SQLiteColumn;\n\t\t\t\tfieldsSelection.push({ tsKey: field, value: column });\n\t\t\t}\n\n\t\t\tlet selectedRelations: {\n\t\t\t\ttsKey: string;\n\t\t\t\tqueryConfig: true | DBQueryConfig<'many', false>;\n\t\t\t\trelation: Relation;\n\t\t\t}[] = [];\n\n\t\t\t// Figure out which relations to select\n\t\t\tif (config.with) {\n\t\t\t\tselectedRelations = Object.entries(config.with)\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tentry,\n\t\t\t\t\t\t): entry is [(typeof entry)[0], NonNullable<(typeof entry)[1]>] => !!entry[1],\n\t\t\t\t\t)\n\t\t\t\t\t.map(([tsKey, queryConfig]) => ({\n\t\t\t\t\t\ttsKey,\n\t\t\t\t\t\tqueryConfig,\n\t\t\t\t\t\trelation: tableConfig.relations[tsKey]!,\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\tlet extras;\n\n\t\t\t// Figure out which extras to select\n\t\t\tif (config.extras) {\n\t\t\t\textras = typeof config.extras === 'function'\n\t\t\t\t\t? config.extras(aliasedColumns, { sql })\n\t\t\t\t\t: config.extras;\n\t\t\t\tfor (const [tsKey, value] of Object.entries(extras)) {\n\t\t\t\t\tfieldsSelection.push({\n\t\t\t\t\t\ttsKey,\n\t\t\t\t\t\tvalue: mapColumnsInAliasedSQLToAlias(value, tableAlias),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Transform `fieldsSelection` into `selection`\n\t\t\t// `fieldsSelection` shouldn't be used after this point\n\t\t\tfor (const { tsKey, value } of fieldsSelection) {\n\t\t\t\tselection.push({\n\t\t\t\t\tdbKey: is(value, SQL.Aliased)\n\t\t\t\t\t\t? value.fieldAlias\n\t\t\t\t\t\t: tableConfig.columns[tsKey]!.name,\n\t\t\t\t\ttsKey,\n\t\t\t\t\tfield: is(value, Column)\n\t\t\t\t\t\t? aliasedTableColumn(value, tableAlias)\n\t\t\t\t\t\t: value,\n\t\t\t\t\trelationTableTsKey: undefined,\n\t\t\t\t\tisJson: false,\n\t\t\t\t\tselection: [],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet orderByOrig = typeof config.orderBy === 'function'\n\t\t\t\t? config.orderBy(aliasedColumns, getOrderByOperators())\n\t\t\t\t: (config.orderBy ?? []);\n\t\t\tif (!Array.isArray(orderByOrig)) {\n\t\t\t\torderByOrig = [orderByOrig];\n\t\t\t}\n\t\t\torderBy = orderByOrig.map((orderByValue) => {\n\t\t\t\tif (is(orderByValue, Column)) {\n\t\t\t\t\treturn aliasedTableColumn(orderByValue, tableAlias) as SQLiteColumn;\n\t\t\t\t}\n\t\t\t\treturn mapColumnsInSQLToAlias(orderByValue, tableAlias);\n\t\t\t});\n\n\t\t\tlimit = config.limit;\n\t\t\toffset = config.offset;\n\n\t\t\t// Process all relations\n\t\t\tfor (\n\t\t\t\tconst {\n\t\t\t\t\ttsKey: selectedRelationTsKey,\n\t\t\t\t\tqueryConfig: selectedRelationConfigValue,\n\t\t\t\t\trelation,\n\t\t\t\t} of selectedRelations\n\t\t\t) {\n\t\t\t\tconst normalizedRelation = normalizeRelation(\n\t\t\t\t\tschema,\n\t\t\t\t\ttableNamesMap,\n\t\t\t\t\trelation,\n\t\t\t\t);\n\t\t\t\tconst relationTableName = getTableUniqueName(relation.referencedTable);\n\t\t\t\tconst relationTableTsName = tableNamesMap[relationTableName]!;\n\t\t\t\tconst relationTableAlias = `${tableAlias}_${selectedRelationTsKey}`;\n\t\t\t\t// const relationTable = schema[relationTableTsName]!;\n\t\t\t\tconst joinOn = and(\n\t\t\t\t\t...normalizedRelation.fields.map((field, i) =>\n\t\t\t\t\t\teq(\n\t\t\t\t\t\t\taliasedTableColumn(\n\t\t\t\t\t\t\t\tnormalizedRelation.references[i]!,\n\t\t\t\t\t\t\t\trelationTableAlias,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\taliasedTableColumn(field, tableAlias),\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tconst builtRelation = this.buildRelationalQuery({\n\t\t\t\t\tfullSchema,\n\t\t\t\t\tschema,\n\t\t\t\t\ttableNamesMap,\n\t\t\t\t\ttable: fullSchema[relationTableTsName] as SQLiteTable,\n\t\t\t\t\ttableConfig: schema[relationTableTsName]!,\n\t\t\t\t\tqueryConfig: is(relation, One)\n\t\t\t\t\t\t? selectedRelationConfigValue === true\n\t\t\t\t\t\t\t? { limit: 1 }\n\t\t\t\t\t\t\t: { ...selectedRelationConfigValue, limit: 1 }\n\t\t\t\t\t\t: selectedRelationConfigValue,\n\t\t\t\t\ttableAlias: relationTableAlias,\n\t\t\t\t\tjoinOn,\n\t\t\t\t\tnestedQueryRelation: relation,\n\t\t\t\t});\n\t\t\t\tconst field = sql`(${builtRelation.sql})`.as(selectedRelationTsKey);\n\t\t\t\tselection.push({\n\t\t\t\t\tdbKey: selectedRelationTsKey,\n\t\t\t\t\ttsKey: selectedRelationTsKey,\n\t\t\t\t\tfield,\n\t\t\t\t\trelationTableTsKey: relationTableTsName,\n\t\t\t\t\tisJson: true,\n\t\t\t\t\tselection: builtRelation.selection,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (selection.length === 0) {\n\t\t\tthrow new DrizzleError({\n\t\t\t\tmessage:\n\t\t\t\t\t`No fields selected for table \"${tableConfig.tsName}\" (\"${tableAlias}\"). You need to have at least one item in \"columns\", \"with\" or \"extras\". If you need to select all columns, omit the \"columns\" key or set it to undefined.`,\n\t\t\t});\n\t\t}\n\n\t\tlet result;\n\n\t\twhere = and(joinOn, where);\n\n\t\tif (nestedQueryRelation) {\n\t\t\tlet field = sql`json_array(${\n\t\t\t\tsql.join(\n\t\t\t\t\tselection.map(({ field }) =>\n\t\t\t\t\t\tis(field, SQLiteColumn)\n\t\t\t\t\t\t\t? sql.identifier(this.casing.getColumnCasing(field))\n\t\t\t\t\t\t\t: is(field, SQL.Aliased)\n\t\t\t\t\t\t\t? field.sql\n\t\t\t\t\t\t\t: field\n\t\t\t\t\t),\n\t\t\t\t\tsql`, `,\n\t\t\t\t)\n\t\t\t})`;\n\t\t\tif (is(nestedQueryRelation, Many)) {\n\t\t\t\tfield = sql`coalesce(json_group_array(${field}), json_array())`;\n\t\t\t}\n\t\t\tconst nestedSelection = [\n\t\t\t\t{\n\t\t\t\t\tdbKey: 'data',\n\t\t\t\t\ttsKey: 'data',\n\t\t\t\t\tfield: field.as('data'),\n\t\t\t\t\tisJson: true,\n\t\t\t\t\trelationTableTsKey: tableConfig.tsName,\n\t\t\t\t\tselection,\n\t\t\t\t},\n\t\t\t];\n\n\t\t\tconst needsSubquery = limit !== undefined || offset !== undefined || orderBy.length > 0;\n\n\t\t\tif (needsSubquery) {\n\t\t\t\tresult = this.buildSelectQuery({\n\t\t\t\t\ttable: aliasedTable(table, tableAlias),\n\t\t\t\t\tfields: {},\n\t\t\t\t\tfieldsFlat: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpath: [],\n\t\t\t\t\t\t\tfield: sql.raw('*'),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\twhere,\n\t\t\t\t\tlimit,\n\t\t\t\t\toffset,\n\t\t\t\t\torderBy,\n\t\t\t\t\tsetOperators: [],\n\t\t\t\t});\n\n\t\t\t\twhere = undefined;\n\t\t\t\tlimit = undefined;\n\t\t\t\toffset = undefined;\n\t\t\t\torderBy = undefined;\n\t\t\t} else {\n\t\t\t\tresult = aliasedTable(table, tableAlias);\n\t\t\t}\n\n\t\t\tresult = this.buildSelectQuery({\n\t\t\t\ttable: is(result, SQLiteTable)\n\t\t\t\t\t? result\n\t\t\t\t\t: new Subquery(result, {}, tableAlias),\n\t\t\t\tfields: {},\n\t\t\t\tfieldsFlat: nestedSelection.map(({ field }) => ({\n\t\t\t\t\tpath: [],\n\t\t\t\t\tfield: is(field, Column)\n\t\t\t\t\t\t? aliasedTableColumn(field, tableAlias)\n\t\t\t\t\t\t: field,\n\t\t\t\t})),\n\t\t\t\tjoins,\n\t\t\t\twhere,\n\t\t\t\tlimit,\n\t\t\t\toffset,\n\t\t\t\torderBy,\n\t\t\t\tsetOperators: [],\n\t\t\t});\n\t\t} else {\n\t\t\tresult = this.buildSelectQuery({\n\t\t\t\ttable: aliasedTable(table, tableAlias),\n\t\t\t\tfields: {},\n\t\t\t\tfieldsFlat: selection.map(({ field }) => ({\n\t\t\t\t\tpath: [],\n\t\t\t\t\tfield: is(field, Column)\n\t\t\t\t\t\t? aliasedTableColumn(field, tableAlias)\n\t\t\t\t\t\t: field,\n\t\t\t\t})),\n\t\t\t\tjoins,\n\t\t\t\twhere,\n\t\t\t\tlimit,\n\t\t\t\toffset,\n\t\t\t\torderBy,\n\t\t\t\tsetOperators: [],\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\ttableTsKey: tableConfig.tsName,\n\t\t\tsql: result,\n\t\t\tselection,\n\t\t};\n\t}\n}\n\nexport class SQLiteSyncDialect extends SQLiteDialect {\n\tstatic override readonly [entityKind]: string = 'SQLiteSyncDialect';\n\n\tmigrate(\n\t\tmigrations: MigrationMeta[],\n\t\tsession: SQLiteSession<\n\t\t\t'sync',\n\t\t\tunknown,\n\t\t\tRecord<string, unknown>,\n\t\t\tTablesRelationalConfig\n\t\t>,\n\t\tconfig?: string | MigrationConfig,\n\t): void {\n\t\tconst migrationsTable = config === undefined\n\t\t\t? '__drizzle_migrations'\n\t\t\t: typeof config === 'string'\n\t\t\t? '__drizzle_migrations'\n\t\t\t: (config.migrationsTable ?? '__drizzle_migrations');\n\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at numeric\n\t\t\t)\n\t\t`;\n\t\tsession.run(migrationTableCreate);\n\n\t\tconst dbMigrations = session.values<[number, string, string]>(\n\t\t\tsql`SELECT id, hash, created_at FROM ${sql.identifier(migrationsTable)} ORDER BY created_at DESC LIMIT 1`,\n\t\t);\n\n\t\tconst lastDbMigration = dbMigrations[0] ?? undefined;\n\t\tsession.run(sql`BEGIN`);\n\n\t\ttry {\n\t\t\tfor (const migration of migrations) {\n\t\t\t\tif (\n\t\t\t\t\t!lastDbMigration\n\t\t\t\t\t|| Number(lastDbMigration[2])! < migration.folderMillis\n\t\t\t\t) {\n\t\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\t\tsession.run(sql.raw(stmt));\n\t\t\t\t\t}\n\t\t\t\t\tsession.run(\n\t\t\t\t\t\tsql`INSERT INTO ${\n\t\t\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\t\t\tmigrationsTable,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t} (\"hash\", \"created_at\") VALUES(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsession.run(sql`COMMIT`);\n\t\t} catch (e) {\n\t\t\tsession.run(sql`ROLLBACK`);\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport class SQLiteAsyncDialect extends SQLiteDialect {\n\tstatic override readonly [entityKind]: string = 'SQLiteAsyncDialect';\n\n\tasync migrate(\n\t\tmigrations: MigrationMeta[],\n\t\tsession: SQLiteSession<'async', any, any, any>,\n\t\tconfig?: string | MigrationConfig,\n\t): Promise<void> {\n\t\tconst migrationsTable = config === undefined\n\t\t\t? '__drizzle_migrations'\n\t\t\t: typeof config === 'string'\n\t\t\t? '__drizzle_migrations'\n\t\t\t: (config.migrationsTable ?? '__drizzle_migrations');\n\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at numeric\n\t\t\t)\n\t\t`;\n\t\tawait session.run(migrationTableCreate);\n\n\t\tconst dbMigrations = await session.values<[number, string, string]>(\n\t\t\tsql`SELECT id, hash, created_at FROM ${sql.identifier(migrationsTable)} ORDER BY created_at DESC LIMIT 1`,\n\t\t);\n\n\t\tconst lastDbMigration = dbMigrations[0] ?? undefined;\n\n\t\tawait session.transaction(async (tx) => {\n\t\t\tfor (const migration of migrations) {\n\t\t\t\tif (\n\t\t\t\t\t!lastDbMigration\n\t\t\t\t\t|| Number(lastDbMigration[2])! < migration.folderMillis\n\t\t\t\t) {\n\t\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\t\tawait tx.run(sql.raw(stmt));\n\t\t\t\t\t}\n\t\t\t\t\tawait tx.run(\n\t\t\t\t\t\tsql`INSERT INTO ${\n\t\t\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\t\t\tmigrationsTable,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t} (\"hash\", \"created_at\") VALUES(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n","import { entityKind } from '~/entity.ts';\nimport type { SQL, SQLWrapper } from '~/sql/index.ts';\n\nexport abstract class TypedQueryBuilder<TSelection, TResult = unknown, TConfig = unknown> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'TypedQueryBuilder';\n\n\tdeclare _: {\n\t\tselectedFields: TSelection;\n\t\tresult: TResult;\n\t\tconfig?: TConfig;\n\t};\n\n\t/** @internal */\n\tgetSelectedFields(): TSelection {\n\t\treturn this._.selectedFields;\n\t}\n\n\tabstract getSQL(): SQL;\n}\n","import type { CacheConfig, WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type {\n\tBuildSubquerySelection,\n\tGetSelectTableName,\n\tGetSelectTableSelection,\n\tJoinNullability,\n\tJoinType,\n\tSelectMode,\n\tSelectResult,\n\tSetOperator,\n} from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport { SQL, View } from '~/sql/sql.ts';\nimport type { ColumnsSelection, Placeholder, Query, SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteColumn } from '~/sqlite-core/columns/index.ts';\nimport type { SQLiteDialect } from '~/sqlite-core/dialect.ts';\nimport type { SQLiteSession } from '~/sqlite-core/session.ts';\nimport type { SubqueryWithSelection } from '~/sqlite-core/subquery.ts';\nimport type { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { Table } from '~/table.ts';\nimport {\n\tapplyMixins,\n\tgetTableColumns,\n\tgetTableLikeName,\n\thaveSameKeys,\n\torderSelectedFields,\n\ttype ValueOrArray,\n} from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport { SQLiteViewBase } from '../view-base.ts';\nimport type {\n\tAnySQLiteSelect,\n\tCreateSQLiteSelectFromBuilderMode,\n\tGetSQLiteSetOperators,\n\tSelectedFields,\n\tSetOperatorRightSelect,\n\tSQLiteCreateSetOperatorFn,\n\tSQLiteSelectConfig,\n\tSQLiteSelectCrossJoinFn,\n\tSQLiteSelectDynamic,\n\tSQLiteSelectExecute,\n\tSQLiteSelectHKT,\n\tSQLiteSelectHKTBase,\n\tSQLiteSelectJoinFn,\n\tSQLiteSelectPrepare,\n\tSQLiteSelectWithout,\n\tSQLiteSetOperatorExcludedMethods,\n\tSQLiteSetOperatorWithResult,\n} from './select.types.ts';\n\nexport class SQLiteSelectBuilder<\n\tTSelection extends SelectedFields | undefined,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTBuilderMode extends 'db' | 'qb' = 'db',\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteSelectBuilder';\n\n\tprivate fields: TSelection;\n\tprivate session: SQLiteSession<any, any, any, any> | undefined;\n\tprivate dialect: SQLiteDialect;\n\tprivate withList: Subquery[] | undefined;\n\tprivate distinct: boolean | undefined;\n\n\tconstructor(\n\t\tconfig: {\n\t\t\tfields: TSelection;\n\t\t\tsession: SQLiteSession<any, any, any, any> | undefined;\n\t\t\tdialect: SQLiteDialect;\n\t\t\twithList?: Subquery[];\n\t\t\tdistinct?: boolean;\n\t\t},\n\t) {\n\t\tthis.fields = config.fields;\n\t\tthis.session = config.session;\n\t\tthis.dialect = config.dialect;\n\t\tthis.withList = config.withList;\n\t\tthis.distinct = config.distinct;\n\t}\n\n\tfrom<TFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL>(\n\t\tsource: TFrom,\n\t): CreateSQLiteSelectFromBuilderMode<\n\t\tTBuilderMode,\n\t\tGetSelectTableName<TFrom>,\n\t\tTResultType,\n\t\tTRunResult,\n\t\tTSelection extends undefined ? GetSelectTableSelection<TFrom> : TSelection,\n\t\tTSelection extends undefined ? 'single' : 'partial'\n\t> {\n\t\tconst isPartialSelect = !!this.fields;\n\n\t\tlet fields: SelectedFields;\n\t\tif (this.fields) {\n\t\t\tfields = this.fields;\n\t\t} else if (is(source, Subquery)) {\n\t\t\t// This is required to use the proxy handler to get the correct field values from the subquery\n\t\t\tfields = Object.fromEntries(\n\t\t\t\tObject.keys(source._.selectedFields).map((\n\t\t\t\t\tkey,\n\t\t\t\t) => [key, source[key as unknown as keyof typeof source] as unknown as SelectedFields[string]]),\n\t\t\t);\n\t\t} else if (is(source, SQLiteViewBase)) {\n\t\t\tfields = source[ViewBaseConfig].selectedFields as SelectedFields;\n\t\t} else if (is(source, SQL)) {\n\t\t\tfields = {};\n\t\t} else {\n\t\t\tfields = getTableColumns<SQLiteTable>(source);\n\t\t}\n\n\t\treturn new SQLiteSelectBase({\n\t\t\ttable: source,\n\t\t\tfields,\n\t\t\tisPartialSelect,\n\t\t\tsession: this.session,\n\t\t\tdialect: this.dialect,\n\t\t\twithList: this.withList,\n\t\t\tdistinct: this.distinct,\n\t\t}) as any;\n\t}\n}\n\nexport abstract class SQLiteSelectQueryBuilderBase<\n\tTHKT extends SQLiteSelectHKTBase,\n\tTTableName extends string | undefined,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTSelection extends ColumnsSelection,\n\tTSelectMode extends SelectMode,\n\tTNullabilityMap extends Record<string, JoinNullability> = TTableName extends string ? Record<TTableName, 'not-null'>\n\t\t: {},\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n\tTResult extends any[] = SelectResult<TSelection, TSelectMode, TNullabilityMap>[],\n\tTSelectedFields extends ColumnsSelection = BuildSubquerySelection<TSelection, TNullabilityMap>,\n> extends TypedQueryBuilder<TSelectedFields, TResult> {\n\tstatic override readonly [entityKind]: string = 'SQLiteSelectQueryBuilder';\n\n\toverride readonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly hkt: THKT;\n\t\treadonly tableName: TTableName;\n\t\treadonly resultType: TResultType;\n\t\treadonly runResult: TRunResult;\n\t\treadonly selection: TSelection;\n\t\treadonly selectMode: TSelectMode;\n\t\treadonly nullabilityMap: TNullabilityMap;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TResult;\n\t\treadonly selectedFields: TSelectedFields;\n\t\treadonly config: SQLiteSelectConfig;\n\t};\n\n\t/** @internal */\n\tconfig: SQLiteSelectConfig;\n\tprotected joinsNotNullableMap: Record<string, boolean>;\n\tprivate tableName: string | undefined;\n\tprivate isPartialSelect: boolean;\n\tprotected session: SQLiteSession<any, any, any, any> | undefined;\n\tprotected dialect: SQLiteDialect;\n\tprotected cacheConfig?: WithCacheConfig = undefined;\n\tprotected usedTables: Set<string> = new Set();\n\n\tconstructor(\n\t\t{ table, fields, isPartialSelect, session, dialect, withList, distinct }: {\n\t\t\ttable: SQLiteSelectConfig['table'];\n\t\t\tfields: SQLiteSelectConfig['fields'];\n\t\t\tisPartialSelect: boolean;\n\t\t\tsession: SQLiteSession<any, any, any, any> | undefined;\n\t\t\tdialect: SQLiteDialect;\n\t\t\twithList: Subquery[] | undefined;\n\t\t\tdistinct: boolean | undefined;\n\t\t},\n\t) {\n\t\tsuper();\n\t\tthis.config = {\n\t\t\twithList,\n\t\t\ttable,\n\t\t\tfields: { ...fields },\n\t\t\tdistinct,\n\t\t\tsetOperators: [],\n\t\t};\n\t\tthis.isPartialSelect = isPartialSelect;\n\t\tthis.session = session;\n\t\tthis.dialect = dialect;\n\t\tthis._ = {\n\t\t\tselectedFields: fields as TSelectedFields,\n\t\t\tconfig: this.config,\n\t\t} as this['_'];\n\t\tthis.tableName = getTableLikeName(table);\n\t\tthis.joinsNotNullableMap = typeof this.tableName === 'string' ? { [this.tableName]: true } : {};\n\t\tfor (const item of extractUsedTable(table)) this.usedTables.add(item);\n\t}\n\n\t/** @internal */\n\tgetUsedTables() {\n\t\treturn [...this.usedTables];\n\t}\n\n\tprivate createJoin<TJoinType extends JoinType>(\n\t\tjoinType: TJoinType,\n\t): 'cross' extends TJoinType ? SQLiteSelectCrossJoinFn<this, TDynamic>\n\t\t: SQLiteSelectJoinFn<this, TDynamic, TJoinType>\n\t{\n\t\treturn (\n\t\t\ttable: SQLiteTable | Subquery | SQLiteViewBase | SQL,\n\t\t\ton?: ((aliases: TSelection) => SQL | undefined) | SQL | undefined,\n\t\t) => {\n\t\t\tconst baseTableName = this.tableName;\n\t\t\tconst tableName = getTableLikeName(table);\n\n\t\t\t// store all tables used in a query\n\t\t\tfor (const item of extractUsedTable(table)) this.usedTables.add(item);\n\n\t\t\tif (typeof tableName === 'string' && this.config.joins?.some((join) => join.alias === tableName)) {\n\t\t\t\tthrow new Error(`Alias \"${tableName}\" is already used in this query`);\n\t\t\t}\n\n\t\t\tif (!this.isPartialSelect) {\n\t\t\t\t// If this is the first join and this is not a partial select and we're not selecting from raw SQL, \"move\" the fields from the main table to the nested object\n\t\t\t\tif (Object.keys(this.joinsNotNullableMap).length === 1 && typeof baseTableName === 'string') {\n\t\t\t\t\tthis.config.fields = {\n\t\t\t\t\t\t[baseTableName]: this.config.fields,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (typeof tableName === 'string' && !is(table, SQL)) {\n\t\t\t\t\tconst selection = is(table, Subquery)\n\t\t\t\t\t\t? table._.selectedFields\n\t\t\t\t\t\t: is(table, View)\n\t\t\t\t\t\t? table[ViewBaseConfig].selectedFields\n\t\t\t\t\t\t: table[Table.Symbol.Columns];\n\t\t\t\t\tthis.config.fields[tableName] = selection;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof on === 'function') {\n\t\t\t\ton = on(\n\t\t\t\t\tnew Proxy(\n\t\t\t\t\t\tthis.config.fields,\n\t\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t\t) as TSelection,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (!this.config.joins) {\n\t\t\t\tthis.config.joins = [];\n\t\t\t}\n\t\t\tthis.config.joins.push({ on, table, joinType, alias: tableName });\n\n\t\t\tif (typeof tableName === 'string') {\n\t\t\t\tswitch (joinType) {\n\t\t\t\t\tcase 'left': {\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'right': {\n\t\t\t\t\t\tthis.joinsNotNullableMap = Object.fromEntries(\n\t\t\t\t\t\t\tObject.entries(this.joinsNotNullableMap).map(([key]) => [key, false]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'cross':\n\t\t\t\t\tcase 'inner': {\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'full': {\n\t\t\t\t\t\tthis.joinsNotNullableMap = Object.fromEntries(\n\t\t\t\t\t\t\tObject.entries(this.joinsNotNullableMap).map(([key]) => [key, false]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this as any;\n\t\t};\n\t}\n\n\t/**\n\t * Executes a `left join` operation by adding another table to the current query.\n\t *\n\t * Calling this method associates each row of the table with the corresponding row from the joined table, if a match is found. If no matching row exists, it sets all columns of the joined table to null.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#left-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User; pets: Pet | null; }[] = await db.select()\n\t * .from(users)\n\t * .leftJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number; petId: number | null; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .leftJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\tleftJoin = this.createJoin('left');\n\n\t/**\n\t * Executes a `right join` operation by adding another table to the current query.\n\t *\n\t * Calling this method associates each row of the joined table with the corresponding row from the main table, if a match is found. If no matching row exists, it sets all columns of the main table to null.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#right-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User | null; pets: Pet; }[] = await db.select()\n\t * .from(users)\n\t * .rightJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number | null; petId: number; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .rightJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\trightJoin = this.createJoin('right');\n\n\t/**\n\t * Executes an `inner join` operation, creating a new table by combining rows from two tables that have matching values.\n\t *\n\t * Calling this method retrieves rows that have corresponding entries in both joined tables. Rows without matching entries in either table are excluded, resulting in a table that includes only matching pairs.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#inner-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User; pets: Pet; }[] = await db.select()\n\t * .from(users)\n\t * .innerJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number; petId: number; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .innerJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\tinnerJoin = this.createJoin('inner');\n\n\t/**\n\t * Executes a `full join` operation by combining rows from two tables into a new table.\n\t *\n\t * Calling this method retrieves all rows from both main and joined tables, merging rows with matching values and filling in `null` for non-matching columns.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#full-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User | null; pets: Pet | null; }[] = await db.select()\n\t * .from(users)\n\t * .fullJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number | null; petId: number | null; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .fullJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\tfullJoin = this.createJoin('full');\n\n\t/**\n\t * Executes a `cross join` operation by combining rows from two tables into a new table.\n\t *\n\t * Calling this method retrieves all rows from both main and joined tables, merging all rows from each table.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#cross-join}\n\t *\n\t * @param table the table to join.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users, each user with every pet\n\t * const usersWithPets: { user: User; pets: Pet; }[] = await db.select()\n\t * .from(users)\n\t * .crossJoin(pets)\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number; petId: number; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .crossJoin(pets)\n\t * ```\n\t */\n\tcrossJoin = this.createJoin('cross');\n\n\tprivate createSetOperator(\n\t\ttype: SetOperator,\n\t\tisAll: boolean,\n\t): <TValue extends SQLiteSetOperatorWithResult<TResult>>(\n\t\trightSelection:\n\t\t\t| ((setOperators: GetSQLiteSetOperators) => SetOperatorRightSelect<TValue, TResult>)\n\t\t\t| SetOperatorRightSelect<TValue, TResult>,\n\t) => SQLiteSelectWithout<\n\t\tthis,\n\t\tTDynamic,\n\t\tSQLiteSetOperatorExcludedMethods,\n\t\ttrue\n\t> {\n\t\treturn (rightSelection) => {\n\t\t\tconst rightSelect = (typeof rightSelection === 'function'\n\t\t\t\t? rightSelection(getSQLiteSetOperators())\n\t\t\t\t: rightSelection) as TypedQueryBuilder<\n\t\t\t\t\tany,\n\t\t\t\t\tTResult\n\t\t\t\t>;\n\n\t\t\tif (!haveSameKeys(this.getSelectedFields(), rightSelect.getSelectedFields())) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Set operator error (union / intersect / except): selected fields are not the same or are in a different order',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.config.setOperators.push({ type, isAll, rightSelect });\n\t\t\treturn this as any;\n\t\t};\n\t}\n\n\t/**\n\t * Adds `union` set operator to the query.\n\t *\n\t * Calling this method will combine the result sets of the `select` statements and remove any duplicate rows that appear across them.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#union}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all unique names from customers and users tables\n\t * await db.select({ name: users.name })\n\t * .from(users)\n\t * .union(\n\t * db.select({ name: customers.name }).from(customers)\n\t * );\n\t * // or\n\t * import { union } from 'drizzle-orm/sqlite-core'\n\t *\n\t * await union(\n\t * db.select({ name: users.name }).from(users),\n\t * db.select({ name: customers.name }).from(customers)\n\t * );\n\t * ```\n\t */\n\tunion = this.createSetOperator('union', false);\n\n\t/**\n\t * Adds `union all` set operator to the query.\n\t *\n\t * Calling this method will combine the result-set of the `select` statements and keep all duplicate rows that appear across them.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#union-all}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all transaction ids from both online and in-store sales\n\t * await db.select({ transaction: onlineSales.transactionId })\n\t * .from(onlineSales)\n\t * .unionAll(\n\t * db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n\t * );\n\t * // or\n\t * import { unionAll } from 'drizzle-orm/sqlite-core'\n\t *\n\t * await unionAll(\n\t * db.select({ transaction: onlineSales.transactionId }).from(onlineSales),\n\t * db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n\t * );\n\t * ```\n\t */\n\tunionAll = this.createSetOperator('union', true);\n\n\t/**\n\t * Adds `intersect` set operator to the query.\n\t *\n\t * Calling this method will retain only the rows that are present in both result sets and eliminate duplicates.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#intersect}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select course names that are offered in both departments A and B\n\t * await db.select({ courseName: depA.courseName })\n\t * .from(depA)\n\t * .intersect(\n\t * db.select({ courseName: depB.courseName }).from(depB)\n\t * );\n\t * // or\n\t * import { intersect } from 'drizzle-orm/sqlite-core'\n\t *\n\t * await intersect(\n\t * db.select({ courseName: depA.courseName }).from(depA),\n\t * db.select({ courseName: depB.courseName }).from(depB)\n\t * );\n\t * ```\n\t */\n\tintersect = this.createSetOperator('intersect', false);\n\n\t/**\n\t * Adds `except` set operator to the query.\n\t *\n\t * Calling this method will retrieve all unique rows from the left query, except for the rows that are present in the result set of the right query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#except}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all courses offered in department A but not in department B\n\t * await db.select({ courseName: depA.courseName })\n\t * .from(depA)\n\t * .except(\n\t * db.select({ courseName: depB.courseName }).from(depB)\n\t * );\n\t * // or\n\t * import { except } from 'drizzle-orm/sqlite-core'\n\t *\n\t * await except(\n\t * db.select({ courseName: depA.courseName }).from(depA),\n\t * db.select({ courseName: depB.courseName }).from(depB)\n\t * );\n\t * ```\n\t */\n\texcept = this.createSetOperator('except', false);\n\n\t/** @internal */\n\taddSetOperators(setOperators: SQLiteSelectConfig['setOperators']): SQLiteSelectWithout<\n\t\tthis,\n\t\tTDynamic,\n\t\tSQLiteSetOperatorExcludedMethods,\n\t\ttrue\n\t> {\n\t\tthis.config.setOperators.push(...setOperators);\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `where` clause to the query.\n\t *\n\t * Calling this method will select only those rows that fulfill a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#filtering}\n\t *\n\t * @param where the `where` clause.\n\t *\n\t * @example\n\t * You can use conditional operators and `sql function` to filter the rows to be selected.\n\t *\n\t * ```ts\n\t * // Select all cars with green color\n\t * await db.select().from(cars).where(eq(cars.color, 'green'));\n\t * // or\n\t * await db.select().from(cars).where(sql`${cars.color} = 'green'`)\n\t * ```\n\t *\n\t * You can logically combine conditional operators with `and()` and `or()` operators:\n\t *\n\t * ```ts\n\t * // Select all BMW cars with a green color\n\t * await db.select().from(cars).where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));\n\t *\n\t * // Select all cars with the green or blue color\n\t * await db.select().from(cars).where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));\n\t * ```\n\t */\n\twhere(\n\t\twhere: ((aliases: TSelection) => SQL | undefined) | SQL | undefined,\n\t): SQLiteSelectWithout<this, TDynamic, 'where'> {\n\t\tif (typeof where === 'function') {\n\t\t\twhere = where(\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\t\t}\n\t\tthis.config.where = where;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `having` clause to the query.\n\t *\n\t * Calling this method will select only those rows that fulfill a specified condition. It is typically used with aggregate functions to filter the aggregated data based on a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#aggregations}\n\t *\n\t * @param having the `having` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all brands with more than one car\n\t * await db.select({\n\t * \tbrand: cars.brand,\n\t * \tcount: sql<number>`cast(count(${cars.id}) as int)`,\n\t * })\n\t * .from(cars)\n\t * .groupBy(cars.brand)\n\t * .having(({ count }) => gt(count, 1));\n\t * ```\n\t */\n\thaving(\n\t\thaving: ((aliases: this['_']['selection']) => SQL | undefined) | SQL | undefined,\n\t): SQLiteSelectWithout<this, TDynamic, 'having'> {\n\t\tif (typeof having === 'function') {\n\t\t\thaving = having(\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\t\t}\n\t\tthis.config.having = having;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `group by` clause to the query.\n\t *\n\t * Calling this method will group rows that have the same values into summary rows, often used for aggregation purposes.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#aggregations}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Group and count people by their last names\n\t * await db.select({\n\t * lastName: people.lastName,\n\t * count: sql<number>`cast(count(*) as int)`\n\t * })\n\t * .from(people)\n\t * .groupBy(people.lastName);\n\t * ```\n\t */\n\tgroupBy(\n\t\tbuilder: (aliases: this['_']['selection']) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>,\n\t): SQLiteSelectWithout<this, TDynamic, 'groupBy'>;\n\tgroupBy(...columns: (SQLiteColumn | SQL)[]): SQLiteSelectWithout<this, TDynamic, 'groupBy'>;\n\tgroupBy(\n\t\t...columns:\n\t\t\t| [(aliases: this['_']['selection']) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>]\n\t\t\t| (SQLiteColumn | SQL | SQL.Aliased)[]\n\t): SQLiteSelectWithout<this, TDynamic, 'groupBy'> {\n\t\tif (typeof columns[0] === 'function') {\n\t\t\tconst groupBy = columns[0](\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'alias', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\t\t\tthis.config.groupBy = Array.isArray(groupBy) ? groupBy : [groupBy];\n\t\t} else {\n\t\t\tthis.config.groupBy = columns as (SQLiteColumn | SQL | SQL.Aliased)[];\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds an `order by` clause to the query.\n\t *\n\t * Calling this method will sort the result-set in ascending or descending order. By default, the sort order is ascending.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#order-by}\n\t *\n\t * @example\n\t *\n\t * ```\n\t * // Select cars ordered by year\n\t * await db.select().from(cars).orderBy(cars.year);\n\t * ```\n\t *\n\t * You can specify whether results are in ascending or descending order with the `asc()` and `desc()` operators.\n\t *\n\t * ```ts\n\t * // Select cars ordered by year in descending order\n\t * await db.select().from(cars).orderBy(desc(cars.year));\n\t *\n\t * // Select cars ordered by year and price\n\t * await db.select().from(cars).orderBy(asc(cars.year), desc(cars.price));\n\t * ```\n\t */\n\torderBy(\n\t\tbuilder: (aliases: this['_']['selection']) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>,\n\t): SQLiteSelectWithout<this, TDynamic, 'orderBy'>;\n\torderBy(...columns: (SQLiteColumn | SQL)[]): SQLiteSelectWithout<this, TDynamic, 'orderBy'>;\n\torderBy(\n\t\t...columns:\n\t\t\t| [(aliases: this['_']['selection']) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>]\n\t\t\t| (SQLiteColumn | SQL | SQL.Aliased)[]\n\t): SQLiteSelectWithout<this, TDynamic, 'orderBy'> {\n\t\tif (typeof columns[0] === 'function') {\n\t\t\tconst orderBy = columns[0](\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'alias', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\n\t\t\tconst orderByArray = Array.isArray(orderBy) ? orderBy : [orderBy];\n\n\t\t\tif (this.config.setOperators.length > 0) {\n\t\t\t\tthis.config.setOperators.at(-1)!.orderBy = orderByArray;\n\t\t\t} else {\n\t\t\t\tthis.config.orderBy = orderByArray;\n\t\t\t}\n\t\t} else {\n\t\t\tconst orderByArray = columns as (SQLiteColumn | SQL | SQL.Aliased)[];\n\n\t\t\tif (this.config.setOperators.length > 0) {\n\t\t\t\tthis.config.setOperators.at(-1)!.orderBy = orderByArray;\n\t\t\t} else {\n\t\t\t\tthis.config.orderBy = orderByArray;\n\t\t\t}\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `limit` clause to the query.\n\t *\n\t * Calling this method will set the maximum number of rows that will be returned by this query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#limit--offset}\n\t *\n\t * @param limit the `limit` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Get the first 10 people from this query.\n\t * await db.select().from(people).limit(10);\n\t * ```\n\t */\n\tlimit(limit: number | Placeholder): SQLiteSelectWithout<this, TDynamic, 'limit'> {\n\t\tif (this.config.setOperators.length > 0) {\n\t\t\tthis.config.setOperators.at(-1)!.limit = limit;\n\t\t} else {\n\t\t\tthis.config.limit = limit;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds an `offset` clause to the query.\n\t *\n\t * Calling this method will skip a number of rows when returning results from this query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#limit--offset}\n\t *\n\t * @param offset the `offset` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Get the 10th-20th people from this query.\n\t * await db.select().from(people).offset(10).limit(10);\n\t * ```\n\t */\n\toffset(offset: number | Placeholder): SQLiteSelectWithout<this, TDynamic, 'offset'> {\n\t\tif (this.config.setOperators.length > 0) {\n\t\t\tthis.config.setOperators.at(-1)!.offset = offset;\n\t\t} else {\n\t\t\tthis.config.offset = offset;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildSelectQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\tas<TAlias extends string>(\n\t\talias: TAlias,\n\t): SubqueryWithSelection<this['_']['selectedFields'], TAlias> {\n\t\tconst usedTables: string[] = [];\n\t\tusedTables.push(...extractUsedTable(this.config.table));\n\t\tif (this.config.joins) { for (const it of this.config.joins) usedTables.push(...extractUsedTable(it.table)); }\n\n\t\treturn new Proxy(\n\t\t\tnew Subquery(this.getSQL(), this.config.fields, alias, false, [...new Set(usedTables)]),\n\t\t\tnew SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t) as SubqueryWithSelection<this['_']['selectedFields'], TAlias>;\n\t}\n\n\t/** @internal */\n\toverride getSelectedFields(): this['_']['selectedFields'] {\n\t\treturn new Proxy(\n\t\t\tthis.config.fields,\n\t\t\tnew SelectionProxyHandler({ alias: this.tableName, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t) as this['_']['selectedFields'];\n\t}\n\n\t$dynamic(): SQLiteSelectDynamic<this> {\n\t\treturn this;\n\t}\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface SQLiteSelectBase<\n\tTTableName extends string | undefined,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTSelection extends ColumnsSelection,\n\tTSelectMode extends SelectMode = 'single',\n\tTNullabilityMap extends Record<string, JoinNullability> = TTableName extends string ? Record<TTableName, 'not-null'>\n\t\t: {},\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n\tTResult extends any[] = SelectResult<TSelection, TSelectMode, TNullabilityMap>[],\n\tTSelectedFields extends ColumnsSelection = BuildSubquerySelection<TSelection, TNullabilityMap>,\n> extends\n\tSQLiteSelectQueryBuilderBase<\n\t\tSQLiteSelectHKT,\n\t\tTTableName,\n\t\tTResultType,\n\t\tTRunResult,\n\t\tTSelection,\n\t\tTSelectMode,\n\t\tTNullabilityMap,\n\t\tTDynamic,\n\t\tTExcludedMethods,\n\t\tTResult,\n\t\tTSelectedFields\n\t>,\n\tQueryPromise<TResult>\n{}\n\nexport class SQLiteSelectBase<\n\tTTableName extends string | undefined,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTSelection,\n\tTSelectMode extends SelectMode = 'single',\n\tTNullabilityMap extends Record<string, JoinNullability> = TTableName extends string ? Record<TTableName, 'not-null'>\n\t\t: {},\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n\tTResult = SelectResult<TSelection, TSelectMode, TNullabilityMap>[],\n\tTSelectedFields extends ColumnsSelection = BuildSubquerySelection<TSelection, TNullabilityMap>,\n> extends SQLiteSelectQueryBuilderBase<\n\tSQLiteSelectHKT,\n\tTTableName,\n\tTResultType,\n\tTRunResult,\n\tTSelection,\n\tTSelectMode,\n\tTNullabilityMap,\n\tTDynamic,\n\tTExcludedMethods,\n\tTResult,\n\tTSelectedFields\n> implements RunnableQuery<TResult, 'sqlite'>, SQLWrapper {\n\tstatic override readonly [entityKind]: string = 'SQLiteSelect';\n\n\t/** @internal */\n\t_prepare(isOneTimeQuery = true): SQLiteSelectPrepare<this> {\n\t\tif (!this.session) {\n\t\t\tthrow new Error('Cannot execute a query on a query builder. Please use a database instance instead.');\n\t\t}\n\t\tconst fieldsList = orderSelectedFields<SQLiteColumn>(this.config.fields);\n\t\tconst query = this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tthis.dialect.sqlToQuery(this.getSQL()),\n\t\t\tfieldsList,\n\t\t\t'all',\n\t\t\ttrue,\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\ttype: 'select',\n\t\t\t\ttables: [...this.usedTables],\n\t\t\t},\n\t\t\tthis.cacheConfig,\n\t\t);\n\t\tquery.joinsNotNullableMap = this.joinsNotNullableMap;\n\t\treturn query as ReturnType<this['prepare']>;\n\t}\n\n\t$withCache(config?: { config?: CacheConfig; tag?: string; autoInvalidate?: boolean } | false) {\n\t\tthis.cacheConfig = config === undefined\n\t\t\t? { config: {}, enable: true, autoInvalidate: true }\n\t\t\t: config === false\n\t\t\t? { enable: false }\n\t\t\t: { enable: true, autoInvalidate: true, ...config };\n\t\treturn this;\n\t}\n\n\tprepare(): SQLiteSelectPrepare<this> {\n\t\treturn this._prepare(false);\n\t}\n\n\trun: ReturnType<this['prepare']>['run'] = (placeholderValues) => {\n\t\treturn this._prepare().run(placeholderValues);\n\t};\n\n\tall: ReturnType<this['prepare']>['all'] = (placeholderValues) => {\n\t\treturn this._prepare().all(placeholderValues);\n\t};\n\n\tget: ReturnType<this['prepare']>['get'] = (placeholderValues) => {\n\t\treturn this._prepare().get(placeholderValues);\n\t};\n\n\tvalues: ReturnType<this['prepare']>['values'] = (placeholderValues) => {\n\t\treturn this._prepare().values(placeholderValues);\n\t};\n\n\tasync execute(): Promise<SQLiteSelectExecute<this>> {\n\t\treturn this.all() as SQLiteSelectExecute<this>;\n\t}\n}\n\napplyMixins(SQLiteSelectBase, [QueryPromise]);\n\nfunction createSetOperator(type: SetOperator, isAll: boolean): SQLiteCreateSetOperatorFn {\n\treturn (leftSelect, rightSelect, ...restSelects) => {\n\t\tconst setOperators = [rightSelect, ...restSelects].map((select) => ({\n\t\t\ttype,\n\t\t\tisAll,\n\t\t\trightSelect: select as AnySQLiteSelect,\n\t\t}));\n\n\t\tfor (const setOperator of setOperators) {\n\t\t\tif (!haveSameKeys((leftSelect as any).getSelectedFields(), setOperator.rightSelect.getSelectedFields())) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Set operator error (union / intersect / except): selected fields are not the same or are in a different order',\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn (leftSelect as AnySQLiteSelect).addSetOperators(setOperators) as any;\n\t};\n}\n\nconst getSQLiteSetOperators = () => ({\n\tunion,\n\tunionAll,\n\tintersect,\n\texcept,\n});\n\n/**\n * Adds `union` set operator to the query.\n *\n * Calling this method will combine the result sets of the `select` statements and remove any duplicate rows that appear across them.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#union}\n *\n * @example\n *\n * ```ts\n * // Select all unique names from customers and users tables\n * import { union } from 'drizzle-orm/sqlite-core'\n *\n * await union(\n * db.select({ name: users.name }).from(users),\n * db.select({ name: customers.name }).from(customers)\n * );\n * // or\n * await db.select({ name: users.name })\n * .from(users)\n * .union(\n * db.select({ name: customers.name }).from(customers)\n * );\n * ```\n */\nexport const union = createSetOperator('union', false);\n\n/**\n * Adds `union all` set operator to the query.\n *\n * Calling this method will combine the result-set of the `select` statements and keep all duplicate rows that appear across them.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#union-all}\n *\n * @example\n *\n * ```ts\n * // Select all transaction ids from both online and in-store sales\n * import { unionAll } from 'drizzle-orm/sqlite-core'\n *\n * await unionAll(\n * db.select({ transaction: onlineSales.transactionId }).from(onlineSales),\n * db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n * );\n * // or\n * await db.select({ transaction: onlineSales.transactionId })\n * .from(onlineSales)\n * .unionAll(\n * db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n * );\n * ```\n */\nexport const unionAll = createSetOperator('union', true);\n\n/**\n * Adds `intersect` set operator to the query.\n *\n * Calling this method will retain only the rows that are present in both result sets and eliminate duplicates.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#intersect}\n *\n * @example\n *\n * ```ts\n * // Select course names that are offered in both departments A and B\n * import { intersect } from 'drizzle-orm/sqlite-core'\n *\n * await intersect(\n * db.select({ courseName: depA.courseName }).from(depA),\n * db.select({ courseName: depB.courseName }).from(depB)\n * );\n * // or\n * await db.select({ courseName: depA.courseName })\n * .from(depA)\n * .intersect(\n * db.select({ courseName: depB.courseName }).from(depB)\n * );\n * ```\n */\nexport const intersect = createSetOperator('intersect', false);\n\n/**\n * Adds `except` set operator to the query.\n *\n * Calling this method will retrieve all unique rows from the left query, except for the rows that are present in the result set of the right query.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#except}\n *\n * @example\n *\n * ```ts\n * // Select all courses offered in department A but not in department B\n * import { except } from 'drizzle-orm/sqlite-core'\n *\n * await except(\n * db.select({ courseName: depA.courseName }).from(depA),\n * db.select({ courseName: depB.courseName }).from(depB)\n * );\n * // or\n * await db.select({ courseName: depA.courseName })\n * .from(depA)\n * .except(\n * db.select({ courseName: depB.courseName }).from(depB)\n * );\n * ```\n */\nexport const except = createSetOperator('except', false);\n","import { entityKind, is } from '~/entity.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { ColumnsSelection, SQL } from '~/sql/sql.ts';\nimport type { SQLiteDialectConfig } from '~/sqlite-core/dialect.ts';\nimport { SQLiteDialect, SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport type { WithBuilder } from '~/sqlite-core/subquery.ts';\nimport { WithSubquery } from '~/subquery.ts';\nimport { SQLiteSelectBuilder } from './select.ts';\nimport type { SelectedFields } from './select.types.ts';\n\nexport class QueryBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteQueryBuilder';\n\n\tprivate dialect: SQLiteDialect | undefined;\n\tprivate dialectConfig: SQLiteDialectConfig | undefined;\n\n\tconstructor(dialect?: SQLiteDialect | SQLiteDialectConfig) {\n\t\tthis.dialect = is(dialect, SQLiteDialect) ? dialect : undefined;\n\t\tthis.dialectConfig = is(dialect, SQLiteDialect) ? undefined : dialect;\n\t}\n\n\t$with: WithBuilder = (alias: string, selection?: ColumnsSelection) => {\n\t\tconst queryBuilder = this;\n\t\tconst as = (\n\t\t\tqb:\n\t\t\t\t| TypedQueryBuilder<ColumnsSelection | undefined>\n\t\t\t\t| SQL\n\t\t\t\t| ((qb: QueryBuilder) => TypedQueryBuilder<ColumnsSelection | undefined> | SQL),\n\t\t) => {\n\t\t\tif (typeof qb === 'function') {\n\t\t\t\tqb = qb(queryBuilder);\n\t\t\t}\n\n\t\t\treturn new Proxy(\n\t\t\t\tnew WithSubquery(\n\t\t\t\t\tqb.getSQL(),\n\t\t\t\t\tselection ?? ('getSelectedFields' in qb ? qb.getSelectedFields() ?? {} : {}) as SelectedFields,\n\t\t\t\t\talias,\n\t\t\t\t\ttrue,\n\t\t\t\t),\n\t\t\t\tnew SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t\t) as any;\n\t\t};\n\t\treturn { as };\n\t};\n\n\twith(...queries: WithSubquery[]) {\n\t\tconst self = this;\n\n\t\tfunction select(): SQLiteSelectBuilder<undefined, 'sync', void, 'qb'>;\n\t\tfunction select<TSelection extends SelectedFields>(\n\t\t\tfields: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection, 'sync', void, 'qb'>;\n\t\tfunction select<TSelection extends SelectedFields>(\n\t\t\tfields?: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection | undefined, 'sync', void, 'qb'> {\n\t\t\treturn new SQLiteSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: undefined,\n\t\t\t\tdialect: self.getDialect(),\n\t\t\t\twithList: queries,\n\t\t\t});\n\t\t}\n\n\t\tfunction selectDistinct(): SQLiteSelectBuilder<undefined, 'sync', void, 'qb'>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(\n\t\t\tfields: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection, 'sync', void, 'qb'>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(\n\t\t\tfields?: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection | undefined, 'sync', void, 'qb'> {\n\t\t\treturn new SQLiteSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: undefined,\n\t\t\t\tdialect: self.getDialect(),\n\t\t\t\twithList: queries,\n\t\t\t\tdistinct: true,\n\t\t\t});\n\t\t}\n\n\t\treturn { select, selectDistinct };\n\t}\n\n\tselect(): SQLiteSelectBuilder<undefined, 'sync', void, 'qb'>;\n\tselect<TSelection extends SelectedFields>(\n\t\tfields: TSelection,\n\t): SQLiteSelectBuilder<TSelection, 'sync', void, 'qb'>;\n\tselect<TSelection extends SelectedFields>(\n\t\tfields?: TSelection,\n\t): SQLiteSelectBuilder<TSelection | undefined, 'sync', void, 'qb'> {\n\t\treturn new SQLiteSelectBuilder({ fields: fields ?? undefined, session: undefined, dialect: this.getDialect() });\n\t}\n\n\tselectDistinct(): SQLiteSelectBuilder<undefined, 'sync', void, 'qb'>;\n\tselectDistinct<TSelection extends SelectedFields>(\n\t\tfields: TSelection,\n\t): SQLiteSelectBuilder<TSelection, 'sync', void, 'qb'>;\n\tselectDistinct<TSelection extends SelectedFields>(\n\t\tfields?: TSelection,\n\t): SQLiteSelectBuilder<TSelection | undefined, 'sync', void, 'qb'> {\n\t\treturn new SQLiteSelectBuilder({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: undefined,\n\t\t\tdialect: this.getDialect(),\n\t\t\tdistinct: true,\n\t\t});\n\t}\n\n\t// Lazy load dialect to avoid circular dependency\n\tprivate getDialect() {\n\t\tif (!this.dialect) {\n\t\t\tthis.dialect = new SQLiteSyncDialect(this.dialectConfig);\n\t\t}\n\n\t\treturn this.dialect;\n\t}\n}\n","import { entityKind, is } from '~/entity.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type { SelectResultFields } from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport type { Placeholder, Query, SQLWrapper } from '~/sql/sql.ts';\nimport { Param, SQL, sql } from '~/sql/sql.ts';\nimport type { SQLiteDialect } from '~/sqlite-core/dialect.ts';\nimport type { IndexColumn } from '~/sqlite-core/indexes.ts';\nimport type { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport type { Subquery } from '~/subquery.ts';\nimport { Columns, Table } from '~/table.ts';\nimport { type DrizzleTypeError, haveSameKeys, mapUpdateSet, orderSelectedFields, type Simplify } from '~/utils.ts';\nimport type { AnySQLiteColumn, SQLiteColumn } from '../columns/common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport { QueryBuilder } from './query-builder.ts';\nimport type { SelectedFieldsFlat, SelectedFieldsOrdered } from './select.types.ts';\nimport type { SQLiteUpdateSetSource } from './update.ts';\n\nexport interface SQLiteInsertConfig<TTable extends SQLiteTable = SQLiteTable> {\n\ttable: TTable;\n\tvalues: Record<string, Param | SQL>[] | SQLiteInsertSelectQueryBuilder<TTable> | SQL;\n\twithList?: Subquery[];\n\tonConflict?: SQL[];\n\treturning?: SelectedFieldsOrdered;\n\tselect?: boolean;\n}\n\nexport type SQLiteInsertValue<TTable extends SQLiteTable> = Simplify<\n\t{\n\t\t[Key in keyof TTable['$inferInsert']]: TTable['$inferInsert'][Key] | SQL | Placeholder;\n\t}\n>;\n\nexport type SQLiteInsertSelectQueryBuilder<TTable extends SQLiteTable> = TypedQueryBuilder<\n\t{ [K in keyof TTable['$inferInsert']]: AnySQLiteColumn | SQL | SQL.Aliased | TTable['$inferInsert'][K] }\n>;\n\nexport class SQLiteInsertBuilder<\n\tTTable extends SQLiteTable,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteInsertBuilder';\n\n\tconstructor(\n\t\tprotected table: TTable,\n\t\tprotected session: SQLiteSession<any, any, any, any>,\n\t\tprotected dialect: SQLiteDialect,\n\t\tprivate withList?: Subquery[],\n\t) {}\n\n\tvalues(value: SQLiteInsertValue<TTable>): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tvalues(values: SQLiteInsertValue<TTable>[]): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tvalues(\n\t\tvalues: SQLiteInsertValue<TTable> | SQLiteInsertValue<TTable>[],\n\t): SQLiteInsertBase<TTable, TResultType, TRunResult> {\n\t\tvalues = Array.isArray(values) ? values : [values];\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('values() must be called with at least one value');\n\t\t}\n\t\tconst mappedValues = values.map((entry) => {\n\t\t\tconst result: Record<string, Param | SQL> = {};\n\t\t\tconst cols = this.table[Table.Symbol.Columns];\n\t\t\tfor (const colKey of Object.keys(entry)) {\n\t\t\t\tconst colValue = entry[colKey as keyof typeof entry];\n\t\t\t\tresult[colKey] = is(colValue, SQL) ? colValue : new Param(colValue, cols[colKey]);\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\n\t\t// if (mappedValues.length > 1 && mappedValues.some((t) => Object.keys(t).length === 0)) {\n\t\t// \tthrow new Error(\n\t\t// \t\t`One of the values you want to insert is empty. In SQLite you can insert only one empty object per statement. For this case Drizzle with use \"INSERT INTO ... DEFAULT VALUES\" syntax`,\n\t\t// \t);\n\t\t// }\n\n\t\treturn new SQLiteInsertBase(this.table, mappedValues, this.session, this.dialect, this.withList);\n\t}\n\n\tselect(\n\t\tselectQuery: (qb: QueryBuilder) => SQLiteInsertSelectQueryBuilder<TTable>,\n\t): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tselect(selectQuery: (qb: QueryBuilder) => SQL): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tselect(selectQuery: SQL): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tselect(selectQuery: SQLiteInsertSelectQueryBuilder<TTable>): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tselect(\n\t\tselectQuery:\n\t\t\t| SQL\n\t\t\t| SQLiteInsertSelectQueryBuilder<TTable>\n\t\t\t| ((qb: QueryBuilder) => SQLiteInsertSelectQueryBuilder<TTable> | SQL),\n\t): SQLiteInsertBase<TTable, TResultType, TRunResult> {\n\t\tconst select = typeof selectQuery === 'function' ? selectQuery(new QueryBuilder()) : selectQuery;\n\n\t\tif (\n\t\t\t!is(select, SQL)\n\t\t\t&& !haveSameKeys(this.table[Columns], select._.selectedFields)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t'Insert select error: selected fields are not the same or are in a different order compared to the table definition',\n\t\t\t);\n\t\t}\n\n\t\treturn new SQLiteInsertBase(this.table, select, this.session, this.dialect, this.withList, true);\n\t}\n}\n\nexport type SQLiteInsertWithout<T extends AnySQLiteInsert, TDynamic extends boolean, K extends keyof T & string> =\n\tTDynamic extends true ? T\n\t\t: Omit<\n\t\t\tSQLiteInsertBase<\n\t\t\t\tT['_']['table'],\n\t\t\t\tT['_']['resultType'],\n\t\t\t\tT['_']['runResult'],\n\t\t\t\tT['_']['returning'],\n\t\t\t\tTDynamic,\n\t\t\t\tT['_']['excludedMethods'] | K\n\t\t\t>,\n\t\t\tT['_']['excludedMethods'] | K\n\t\t>;\n\nexport type SQLiteInsertReturning<\n\tT extends AnySQLiteInsert,\n\tTDynamic extends boolean,\n\tTSelectedFields extends SelectedFieldsFlat,\n> = SQLiteInsertWithout<\n\tSQLiteInsertBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tSelectResultFields<TSelectedFields>,\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteInsertReturningAll<\n\tT extends AnySQLiteInsert,\n\tTDynamic extends boolean,\n> = SQLiteInsertWithout<\n\tSQLiteInsertBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['table']['$inferSelect'],\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteInsertOnConflictDoUpdateConfig<T extends AnySQLiteInsert> = {\n\ttarget: IndexColumn | IndexColumn[];\n\t/** @deprecated - use either `targetWhere` or `setWhere` */\n\twhere?: SQL;\n\t// TODO: add tests for targetWhere and setWhere\n\ttargetWhere?: SQL;\n\tsetWhere?: SQL;\n\tset: SQLiteUpdateSetSource<T['_']['table']>;\n};\n\nexport type SQLiteInsertDynamic<T extends AnySQLiteInsert> = SQLiteInsert<\n\tT['_']['table'],\n\tT['_']['resultType'],\n\tT['_']['runResult'],\n\tT['_']['returning']\n>;\n\nexport type SQLiteInsertExecute<T extends AnySQLiteInsert> = T['_']['returning'] extends undefined ? T['_']['runResult']\n\t: T['_']['returning'][];\n\nexport type SQLiteInsertPrepare<T extends AnySQLiteInsert> = SQLitePreparedQuery<\n\t{\n\t\ttype: T['_']['resultType'];\n\t\trun: T['_']['runResult'];\n\t\tall: T['_']['returning'] extends undefined ? DrizzleTypeError<'.all() cannot be used without .returning()'>\n\t\t\t: T['_']['returning'][];\n\t\tget: T['_']['returning'] extends undefined ? DrizzleTypeError<'.get() cannot be used without .returning()'>\n\t\t\t: T['_']['returning'];\n\t\tvalues: T['_']['returning'] extends undefined ? DrizzleTypeError<'.values() cannot be used without .returning()'>\n\t\t\t: any[][];\n\t\texecute: SQLiteInsertExecute<T>;\n\t}\n>;\n\nexport type AnySQLiteInsert = SQLiteInsertBase<any, any, any, any, any, any>;\n\nexport type SQLiteInsert<\n\tTTable extends SQLiteTable = SQLiteTable,\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = unknown,\n\tTReturning = any,\n> = SQLiteInsertBase<TTable, TResultType, TRunResult, TReturning, true, never>;\n\nexport interface SQLiteInsertBase<\n\tTTable extends SQLiteTable,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTReturning = undefined,\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n> extends\n\tSQLWrapper,\n\tQueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>,\n\tRunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>\n{\n\treadonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly table: TTable;\n\t\treadonly resultType: TResultType;\n\t\treadonly runResult: TRunResult;\n\t\treadonly returning: TReturning;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TReturning extends undefined ? TRunResult : TReturning[];\n\t};\n}\n\nexport class SQLiteInsertBase<\n\tTTable extends SQLiteTable,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTReturning = undefined,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTDynamic extends boolean = false,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>\n\timplements RunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteInsert';\n\n\t/** @internal */\n\tconfig: SQLiteInsertConfig<TTable>;\n\n\tconstructor(\n\t\ttable: TTable,\n\t\tvalues: SQLiteInsertConfig['values'],\n\t\tprivate session: SQLiteSession<any, any, any, any>,\n\t\tprivate dialect: SQLiteDialect,\n\t\twithList?: Subquery[],\n\t\tselect?: boolean,\n\t) {\n\t\tsuper();\n\t\tthis.config = { table, values: values as any, withList, select };\n\t}\n\n\t/**\n\t * Adds a `returning` clause to the query.\n\t *\n\t * Calling this method will return the specified fields of the inserted rows. If no fields are specified, all fields will be returned.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert#insert-returning}\n\t *\n\t * @example\n\t * ```ts\n\t * // Insert one row and return all fields\n\t * const insertedCar: Car[] = await db.insert(cars)\n\t * .values({ brand: 'BMW' })\n\t * .returning();\n\t *\n\t * // Insert one row and return only the id\n\t * const insertedCarId: { id: number }[] = await db.insert(cars)\n\t * .values({ brand: 'BMW' })\n\t * .returning({ id: cars.id });\n\t * ```\n\t */\n\treturning(): SQLiteInsertReturningAll<this, TDynamic>;\n\treturning<TSelectedFields extends SelectedFieldsFlat>(\n\t\tfields: TSelectedFields,\n\t): SQLiteInsertReturning<this, TDynamic, TSelectedFields>;\n\treturning(\n\t\tfields: SelectedFieldsFlat = this.config.table[SQLiteTable.Symbol.Columns],\n\t): SQLiteInsertWithout<AnySQLiteInsert, TDynamic, 'returning'> {\n\t\tthis.config.returning = orderSelectedFields<SQLiteColumn>(fields);\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds an `on conflict do nothing` clause to the query.\n\t *\n\t * Calling this method simply avoids inserting a row as its alternative action.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert#on-conflict-do-nothing}\n\t *\n\t * @param config The `target` and `where` clauses.\n\t *\n\t * @example\n\t * ```ts\n\t * // Insert one row and cancel the insert if there's a conflict\n\t * await db.insert(cars)\n\t * .values({ id: 1, brand: 'BMW' })\n\t * .onConflictDoNothing();\n\t *\n\t * // Explicitly specify conflict target\n\t * await db.insert(cars)\n\t * .values({ id: 1, brand: 'BMW' })\n\t * .onConflictDoNothing({ target: cars.id });\n\t * ```\n\t */\n\tonConflictDoNothing(config: { target?: IndexColumn | IndexColumn[]; where?: SQL } = {}): this {\n\t\tif (!this.config.onConflict) this.config.onConflict = [];\n\n\t\tif (config.target === undefined) {\n\t\t\tthis.config.onConflict.push(sql` on conflict do nothing`);\n\t\t} else {\n\t\t\tconst targetSql = Array.isArray(config.target) ? sql`${config.target}` : sql`${[config.target]}`;\n\t\t\tconst whereSql = config.where ? sql` where ${config.where}` : sql``;\n\t\t\tthis.config.onConflict.push(sql` on conflict ${targetSql} do nothing${whereSql}`);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds an `on conflict do update` clause to the query.\n\t *\n\t * Calling this method will update the existing row that conflicts with the row proposed for insertion as its alternative action.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert#upserts-and-conflicts}\n\t *\n\t * @param config The `target`, `set` and `where` clauses.\n\t *\n\t * @example\n\t * ```ts\n\t * // Update the row if there's a conflict\n\t * await db.insert(cars)\n\t * .values({ id: 1, brand: 'BMW' })\n\t * .onConflictDoUpdate({\n\t * target: cars.id,\n\t * set: { brand: 'Porsche' }\n\t * });\n\t *\n\t * // Upsert with 'where' clause\n\t * await db.insert(cars)\n\t * .values({ id: 1, brand: 'BMW' })\n\t * .onConflictDoUpdate({\n\t * target: cars.id,\n\t * set: { brand: 'newBMW' },\n\t * where: sql`${cars.createdAt} > '2023-01-01'::date`,\n\t * });\n\t * ```\n\t */\n\tonConflictDoUpdate(config: SQLiteInsertOnConflictDoUpdateConfig<this>): this {\n\t\tif (config.where && (config.targetWhere || config.setWhere)) {\n\t\t\tthrow new Error(\n\t\t\t\t'You cannot use both \"where\" and \"targetWhere\"/\"setWhere\" at the same time - \"where\" is deprecated, use \"targetWhere\" or \"setWhere\" instead.',\n\t\t\t);\n\t\t}\n\n\t\tif (!this.config.onConflict) this.config.onConflict = [];\n\n\t\tconst whereSql = config.where ? sql` where ${config.where}` : undefined;\n\t\tconst targetWhereSql = config.targetWhere ? sql` where ${config.targetWhere}` : undefined;\n\t\tconst setWhereSql = config.setWhere ? sql` where ${config.setWhere}` : undefined;\n\t\tconst targetSql = Array.isArray(config.target) ? sql`${config.target}` : sql`${[config.target]}`;\n\t\tconst setSql = this.dialect.buildUpdateSet(this.config.table, mapUpdateSet(this.config.table, config.set));\n\t\tthis.config.onConflict.push(\n\t\t\tsql` on conflict ${targetSql}${targetWhereSql} do update set ${setSql}${whereSql}${setWhereSql}`,\n\t\t);\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildInsertQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\t/** @internal */\n\t_prepare(isOneTimeQuery = true): SQLiteInsertPrepare<this> {\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tthis.dialect.sqlToQuery(this.getSQL()),\n\t\t\tthis.config.returning,\n\t\t\tthis.config.returning ? 'all' : 'run',\n\t\t\ttrue,\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\ttype: 'insert',\n\t\t\t\ttables: extractUsedTable(this.config.table),\n\t\t\t},\n\t\t) as SQLiteInsertPrepare<this>;\n\t}\n\n\tprepare(): SQLiteInsertPrepare<this> {\n\t\treturn this._prepare(false);\n\t}\n\n\trun: ReturnType<this['prepare']>['run'] = (placeholderValues) => {\n\t\treturn this._prepare().run(placeholderValues);\n\t};\n\n\tall: ReturnType<this['prepare']>['all'] = (placeholderValues) => {\n\t\treturn this._prepare().all(placeholderValues);\n\t};\n\n\tget: ReturnType<this['prepare']>['get'] = (placeholderValues) => {\n\t\treturn this._prepare().get(placeholderValues);\n\t};\n\n\tvalues: ReturnType<this['prepare']>['values'] = (placeholderValues) => {\n\t\treturn this._prepare().values(placeholderValues);\n\t};\n\n\toverride async execute(): Promise<SQLiteInsertExecute<this>> {\n\t\treturn (this.config.returning ? this.all() : this.run()) as SQLiteInsertExecute<this>;\n\t}\n\n\t$dynamic(): SQLiteInsertDynamic<this> {\n\t\treturn this as any;\n\t}\n}\n","import type { GetColumnData } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { JoinType, SelectResultFields } from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { Placeholder, Query, SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteDialect } from '~/sqlite-core/dialect.ts';\nimport type { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { Table } from '~/table.ts';\nimport {\n\ttype DrizzleTypeError,\n\tgetTableLikeName,\n\tmapUpdateSet,\n\torderSelectedFields,\n\ttype UpdateSet,\n\ttype ValueOrArray,\n} from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type { SQLiteColumn } from '../columns/common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport { SQLiteViewBase } from '../view-base.ts';\nimport type { SelectedFields, SelectedFieldsOrdered, SQLiteSelectJoinConfig } from './select.types.ts';\n\nexport interface SQLiteUpdateConfig {\n\twhere?: SQL | undefined;\n\tlimit?: number | Placeholder;\n\torderBy?: (SQLiteColumn | SQL | SQL.Aliased)[];\n\tset: UpdateSet;\n\ttable: SQLiteTable;\n\tfrom?: SQLiteTable | Subquery | SQLiteViewBase | SQL;\n\tjoins: SQLiteSelectJoinConfig[];\n\treturning?: SelectedFieldsOrdered;\n\twithList?: Subquery[];\n}\n\nexport type SQLiteUpdateSetSource<TTable extends SQLiteTable> =\n\t& {\n\t\t[Key in keyof TTable['$inferInsert']]?:\n\t\t\t| GetColumnData<TTable['_']['columns'][Key], 'query'>\n\t\t\t| SQL\n\t\t\t| SQLiteColumn\n\t\t\t| undefined;\n\t}\n\t& {};\n\nexport class SQLiteUpdateBuilder<\n\tTTable extends SQLiteTable,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteUpdateBuilder';\n\n\tdeclare readonly _: {\n\t\treadonly table: TTable;\n\t};\n\n\tconstructor(\n\t\tprotected table: TTable,\n\t\tprotected session: SQLiteSession<any, any, any, any>,\n\t\tprotected dialect: SQLiteDialect,\n\t\tprivate withList?: Subquery[],\n\t) {}\n\n\tset(\n\t\tvalues: SQLiteUpdateSetSource<TTable>,\n\t): SQLiteUpdateWithout<\n\t\tSQLiteUpdateBase<TTable, TResultType, TRunResult>,\n\t\tfalse,\n\t\t'leftJoin' | 'rightJoin' | 'innerJoin' | 'fullJoin'\n\t> {\n\t\treturn new SQLiteUpdateBase(\n\t\t\tthis.table,\n\t\t\tmapUpdateSet(this.table, values),\n\t\t\tthis.session,\n\t\t\tthis.dialect,\n\t\t\tthis.withList,\n\t\t) as any;\n\t}\n}\n\nexport type SQLiteUpdateWithout<\n\tT extends AnySQLiteUpdate,\n\tTDynamic extends boolean,\n\tK extends keyof T & string,\n> = TDynamic extends true ? T : Omit<\n\tSQLiteUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['from'],\n\t\tT['_']['returning'],\n\t\tTDynamic,\n\t\tT['_']['excludedMethods'] | K\n\t>,\n\tT['_']['excludedMethods'] | K\n>;\n\nexport type SQLiteUpdateWithJoins<\n\tT extends AnySQLiteUpdate,\n\tTDynamic extends boolean,\n\tTFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL,\n> = TDynamic extends true ? T : Omit<\n\tSQLiteUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tTFrom,\n\t\tT['_']['returning'],\n\t\tTDynamic,\n\t\tExclude<T['_']['excludedMethods'] | 'from', 'leftJoin' | 'rightJoin' | 'innerJoin' | 'fullJoin'>\n\t>,\n\tExclude<T['_']['excludedMethods'] | 'from', 'leftJoin' | 'rightJoin' | 'innerJoin' | 'fullJoin'>\n>;\n\nexport type SQLiteUpdateReturningAll<T extends AnySQLiteUpdate, TDynamic extends boolean> = SQLiteUpdateWithout<\n\tSQLiteUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['from'],\n\t\tT['_']['table']['$inferSelect'],\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteUpdateReturning<\n\tT extends AnySQLiteUpdate,\n\tTDynamic extends boolean,\n\tTSelectedFields extends SelectedFields,\n> = SQLiteUpdateWithout<\n\tSQLiteUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['from'],\n\t\tSelectResultFields<TSelectedFields>,\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteUpdateExecute<T extends AnySQLiteUpdate> = T['_']['returning'] extends undefined ? T['_']['runResult']\n\t: T['_']['returning'][];\n\nexport type SQLiteUpdatePrepare<T extends AnySQLiteUpdate> = SQLitePreparedQuery<\n\t{\n\t\ttype: T['_']['resultType'];\n\t\trun: T['_']['runResult'];\n\t\tall: T['_']['returning'] extends undefined ? DrizzleTypeError<'.all() cannot be used without .returning()'>\n\t\t\t: T['_']['returning'][];\n\t\tget: T['_']['returning'] extends undefined ? DrizzleTypeError<'.get() cannot be used without .returning()'>\n\t\t\t: T['_']['returning'];\n\t\tvalues: T['_']['returning'] extends undefined ? DrizzleTypeError<'.values() cannot be used without .returning()'>\n\t\t\t: any[][];\n\t\texecute: SQLiteUpdateExecute<T>;\n\t}\n>;\n\nexport type SQLiteUpdateJoinFn<\n\tT extends AnySQLiteUpdate,\n> = <\n\tTJoinedTable extends SQLiteTable | Subquery | SQLiteViewBase | SQL,\n>(\n\ttable: TJoinedTable,\n\ton:\n\t\t| (\n\t\t\t(\n\t\t\t\tupdateTable: T['_']['table']['_']['columns'],\n\t\t\t\tfrom: T['_']['from'] extends SQLiteTable ? T['_']['from']['_']['columns']\n\t\t\t\t\t: T['_']['from'] extends Subquery | SQLiteViewBase ? T['_']['from']['_']['selectedFields']\n\t\t\t\t\t: never,\n\t\t\t) => SQL | undefined\n\t\t)\n\t\t| SQL\n\t\t| undefined,\n) => T;\n\nexport type SQLiteUpdateDynamic<T extends AnySQLiteUpdate> = SQLiteUpdate<\n\tT['_']['table'],\n\tT['_']['resultType'],\n\tT['_']['runResult'],\n\tT['_']['returning']\n>;\n\nexport type SQLiteUpdate<\n\tTTable extends SQLiteTable = SQLiteTable,\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = any,\n\tTFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL | undefined = undefined,\n\tTReturning extends Record<string, unknown> | undefined = Record<string, unknown> | undefined,\n> = SQLiteUpdateBase<TTable, TResultType, TRunResult, TFrom, TReturning, true, never>;\n\nexport type AnySQLiteUpdate = SQLiteUpdateBase<any, any, any, any, any, any, any>;\n\nexport interface SQLiteUpdateBase<\n\tTTable extends SQLiteTable = SQLiteTable,\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = unknown,\n\tTFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL | undefined = undefined,\n\tTReturning = undefined,\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n> extends SQLWrapper, QueryPromise<TReturning extends undefined ? TRunResult : TReturning[]> {\n\treadonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly table: TTable;\n\t\treadonly resultType: TResultType;\n\t\treadonly runResult: TRunResult;\n\t\treadonly from: TFrom;\n\t\treadonly returning: TReturning;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TReturning extends undefined ? TRunResult : TReturning[];\n\t};\n}\n\nexport class SQLiteUpdateBase<\n\tTTable extends SQLiteTable = SQLiteTable,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = unknown,\n\tTFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL | undefined = undefined,\n\tTReturning = undefined,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTDynamic extends boolean = false,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>\n\timplements RunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteUpdate';\n\n\t/** @internal */\n\tconfig: SQLiteUpdateConfig;\n\n\tconstructor(\n\t\ttable: TTable,\n\t\tset: UpdateSet,\n\t\tprivate session: SQLiteSession<any, any, any, any>,\n\t\tprivate dialect: SQLiteDialect,\n\t\twithList?: Subquery[],\n\t) {\n\t\tsuper();\n\t\tthis.config = { set, table, withList, joins: [] };\n\t}\n\n\tfrom<TFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL>(\n\t\tsource: TFrom,\n\t): SQLiteUpdateWithJoins<this, TDynamic, TFrom> {\n\t\tthis.config.from = source;\n\t\treturn this as any;\n\t}\n\n\tprivate createJoin<TJoinType extends JoinType>(\n\t\tjoinType: TJoinType,\n\t): SQLiteUpdateJoinFn<this> {\n\t\treturn ((\n\t\t\ttable: SQLiteTable | Subquery | SQLiteViewBase | SQL,\n\t\t\ton: ((updateTable: TTable, from: TFrom) => SQL | undefined) | SQL | undefined,\n\t\t) => {\n\t\t\tconst tableName = getTableLikeName(table);\n\n\t\t\tif (typeof tableName === 'string' && this.config.joins.some((join) => join.alias === tableName)) {\n\t\t\t\tthrow new Error(`Alias \"${tableName}\" is already used in this query`);\n\t\t\t}\n\n\t\t\tif (typeof on === 'function') {\n\t\t\t\tconst from = this.config.from\n\t\t\t\t\t? is(table, SQLiteTable)\n\t\t\t\t\t\t? table[Table.Symbol.Columns]\n\t\t\t\t\t\t: is(table, Subquery)\n\t\t\t\t\t\t? table._.selectedFields\n\t\t\t\t\t\t: is(table, SQLiteViewBase)\n\t\t\t\t\t\t? table[ViewBaseConfig].selectedFields\n\t\t\t\t\t\t: undefined\n\t\t\t\t\t: undefined;\n\t\t\t\ton = on(\n\t\t\t\t\tnew Proxy(\n\t\t\t\t\t\tthis.config.table[Table.Symbol.Columns],\n\t\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t\t) as any,\n\t\t\t\t\tfrom && new Proxy(\n\t\t\t\t\t\tfrom,\n\t\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t\t) as any,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.config.joins.push({ on, table, joinType, alias: tableName });\n\n\t\t\treturn this as any;\n\t\t}) as any;\n\t}\n\n\tleftJoin = this.createJoin('left');\n\n\trightJoin = this.createJoin('right');\n\n\tinnerJoin = this.createJoin('inner');\n\n\tfullJoin = this.createJoin('full');\n\n\t/**\n\t * Adds a 'where' clause to the query.\n\t *\n\t * Calling this method will update only those rows that fulfill a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t *\n\t * @param where the 'where' clause.\n\t *\n\t * @example\n\t * You can use conditional operators and `sql function` to filter the rows to be updated.\n\t *\n\t * ```ts\n\t * // Update all cars with green color\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(eq(cars.color, 'green'));\n\t * // or\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(sql`${cars.color} = 'green'`)\n\t * ```\n\t *\n\t * You can logically combine conditional operators with `and()` and `or()` operators:\n\t *\n\t * ```ts\n\t * // Update all BMW cars with a green color\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));\n\t *\n\t * // Update all cars with the green or blue color\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));\n\t * ```\n\t */\n\twhere(where: SQL | undefined): SQLiteUpdateWithout<this, TDynamic, 'where'> {\n\t\tthis.config.where = where;\n\t\treturn this as any;\n\t}\n\n\torderBy(\n\t\tbuilder: (updateTable: TTable) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>,\n\t): SQLiteUpdateWithout<this, TDynamic, 'orderBy'>;\n\torderBy(...columns: (SQLiteColumn | SQL | SQL.Aliased)[]): SQLiteUpdateWithout<this, TDynamic, 'orderBy'>;\n\torderBy(\n\t\t...columns:\n\t\t\t| [(updateTable: TTable) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>]\n\t\t\t| (SQLiteColumn | SQL | SQL.Aliased)[]\n\t): SQLiteUpdateWithout<this, TDynamic, 'orderBy'> {\n\t\tif (typeof columns[0] === 'function') {\n\t\t\tconst orderBy = columns[0](\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.table[Table.Symbol.Columns],\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'alias', sqlBehavior: 'sql' }),\n\t\t\t\t) as any,\n\t\t\t);\n\n\t\t\tconst orderByArray = Array.isArray(orderBy) ? orderBy : [orderBy];\n\t\t\tthis.config.orderBy = orderByArray;\n\t\t} else {\n\t\t\tconst orderByArray = columns as (SQLiteColumn | SQL | SQL.Aliased)[];\n\t\t\tthis.config.orderBy = orderByArray;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\tlimit(limit: number | Placeholder): SQLiteUpdateWithout<this, TDynamic, 'limit'> {\n\t\tthis.config.limit = limit;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `returning` clause to the query.\n\t *\n\t * Calling this method will return the specified fields of the updated rows. If no fields are specified, all fields will be returned.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/update#update-with-returning}\n\t *\n\t * @example\n\t * ```ts\n\t * // Update all cars with the green color and return all fields\n\t * const updatedCars: Car[] = await db.update(cars)\n\t * .set({ color: 'red' })\n\t * .where(eq(cars.color, 'green'))\n\t * .returning();\n\t *\n\t * // Update all cars with the green color and return only their id and brand fields\n\t * const updatedCarsIdsAndBrands: { id: number, brand: string }[] = await db.update(cars)\n\t * .set({ color: 'red' })\n\t * .where(eq(cars.color, 'green'))\n\t * .returning({ id: cars.id, brand: cars.brand });\n\t * ```\n\t */\n\treturning(): SQLiteUpdateReturningAll<this, TDynamic>;\n\treturning<TSelectedFields extends SelectedFields>(\n\t\tfields: TSelectedFields,\n\t): SQLiteUpdateReturning<this, TDynamic, TSelectedFields>;\n\treturning(\n\t\tfields: SelectedFields = this.config.table[SQLiteTable.Symbol.Columns],\n\t): SQLiteUpdateWithout<AnySQLiteUpdate, TDynamic, 'returning'> {\n\t\tthis.config.returning = orderSelectedFields<SQLiteColumn>(fields);\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildUpdateQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\t/** @internal */\n\t_prepare(isOneTimeQuery = true): SQLiteUpdatePrepare<this> {\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tthis.dialect.sqlToQuery(this.getSQL()),\n\t\t\tthis.config.returning,\n\t\t\tthis.config.returning ? 'all' : 'run',\n\t\t\ttrue,\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\ttype: 'insert',\n\t\t\t\ttables: extractUsedTable(this.config.table),\n\t\t\t},\n\t\t) as SQLiteUpdatePrepare<this>;\n\t}\n\n\tprepare(): SQLiteUpdatePrepare<this> {\n\t\treturn this._prepare(false);\n\t}\n\n\trun: ReturnType<this['prepare']>['run'] = (placeholderValues) => {\n\t\treturn this._prepare().run(placeholderValues);\n\t};\n\n\tall: ReturnType<this['prepare']>['all'] = (placeholderValues) => {\n\t\treturn this._prepare().all(placeholderValues);\n\t};\n\n\tget: ReturnType<this['prepare']>['get'] = (placeholderValues) => {\n\t\treturn this._prepare().get(placeholderValues);\n\t};\n\n\tvalues: ReturnType<this['prepare']>['values'] = (placeholderValues) => {\n\t\treturn this._prepare().values(placeholderValues);\n\t};\n\n\toverride async execute(): Promise<SQLiteUpdateExecute<this>> {\n\t\treturn (this.config.returning ? this.all() : this.run()) as SQLiteUpdateExecute<this>;\n\t}\n\n\t$dynamic(): SQLiteUpdateDynamic<this> {\n\t\treturn this as any;\n\t}\n}\n","import { entityKind } from '~/entity.ts';\nimport { SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteSession } from '../session.ts';\nimport type { SQLiteTable } from '../table.ts';\nimport type { SQLiteView } from '../view.ts';\n\nexport class SQLiteCountBuilder<\n\tTSession extends SQLiteSession<any, any, any, any>,\n> extends SQL<number> implements Promise<number>, SQLWrapper {\n\tprivate sql: SQL<number>;\n\n\tstatic override readonly [entityKind] = 'SQLiteCountBuilderAsync';\n\t[Symbol.toStringTag] = 'SQLiteCountBuilderAsync';\n\n\tprivate session: TSession;\n\n\tprivate static buildEmbeddedCount(\n\t\tsource: SQLiteTable | SQLiteView | SQL | SQLWrapper,\n\t\tfilters?: SQL<unknown>,\n\t): SQL<number> {\n\t\treturn sql<number>`(select count(*) from ${source}${sql.raw(' where ').if(filters)}${filters})`;\n\t}\n\n\tprivate static buildCount(\n\t\tsource: SQLiteTable | SQLiteView | SQL | SQLWrapper,\n\t\tfilters?: SQL<unknown>,\n\t): SQL<number> {\n\t\treturn sql<number>`select count(*) from ${source}${sql.raw(' where ').if(filters)}${filters}`;\n\t}\n\n\tconstructor(\n\t\treadonly params: {\n\t\t\tsource: SQLiteTable | SQLiteView | SQL | SQLWrapper;\n\t\t\tfilters?: SQL<unknown>;\n\t\t\tsession: TSession;\n\t\t},\n\t) {\n\t\tsuper(SQLiteCountBuilder.buildEmbeddedCount(params.source, params.filters).queryChunks);\n\n\t\tthis.session = params.session;\n\n\t\tthis.sql = SQLiteCountBuilder.buildCount(\n\t\t\tparams.source,\n\t\t\tparams.filters,\n\t\t);\n\t}\n\n\tthen<TResult1 = number, TResult2 = never>(\n\t\tonfulfilled?: ((value: number) => TResult1 | PromiseLike<TResult1>) | null | undefined,\n\t\tonrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined,\n\t): Promise<TResult1 | TResult2> {\n\t\treturn Promise.resolve(this.session.count(this.sql)).then(\n\t\t\tonfulfilled,\n\t\t\tonrejected,\n\t\t);\n\t}\n\n\tcatch(\n\t\tonRejected?: ((reason: any) => never | PromiseLike<never>) | null | undefined,\n\t): Promise<number> {\n\t\treturn this.then(undefined, onRejected);\n\t}\n\n\tfinally(onFinally?: (() => void) | null | undefined): Promise<number> {\n\t\treturn this.then(\n\t\t\t(value) => {\n\t\t\t\tonFinally?.();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\t(reason) => {\n\t\t\t\tonFinally?.();\n\t\t\t\tthrow reason;\n\t\t\t},\n\t\t);\n\t}\n}\n","import { entityKind } from '~/entity.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport {\n\ttype BuildQueryResult,\n\ttype BuildRelationalQueryResult,\n\ttype DBQueryConfig,\n\tmapRelationalRow,\n\ttype TableRelationalConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport type { Query, QueryWithTypings, SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { KnownKeysOnly } from '~/utils.ts';\nimport type { SQLiteDialect } from '../dialect.ts';\nimport type { PreparedQueryConfig, SQLitePreparedQuery, SQLiteSession } from '../session.ts';\nimport type { SQLiteTable } from '../table.ts';\n\nexport type SQLiteRelationalQueryKind<TMode extends 'sync' | 'async', TResult> = TMode extends 'async'\n\t? SQLiteRelationalQuery<TMode, TResult>\n\t: SQLiteSyncRelationalQuery<TResult>;\n\nexport class RelationalQueryBuilder<\n\tTMode extends 'sync' | 'async',\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n\tTFields extends TableRelationalConfig,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteAsyncRelationalQueryBuilder';\n\n\tconstructor(\n\t\tprotected mode: TMode,\n\t\tprotected fullSchema: Record<string, unknown>,\n\t\tprotected schema: TSchema,\n\t\tprotected tableNamesMap: Record<string, string>,\n\t\tprotected table: SQLiteTable,\n\t\tprotected tableConfig: TableRelationalConfig,\n\t\tprotected dialect: SQLiteDialect,\n\t\tprotected session: SQLiteSession<'async', unknown, TFullSchema, TSchema>,\n\t) {}\n\n\tfindMany<TConfig extends DBQueryConfig<'many', true, TSchema, TFields>>(\n\t\tconfig?: KnownKeysOnly<TConfig, DBQueryConfig<'many', true, TSchema, TFields>>,\n\t): SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]> {\n\t\treturn (this.mode === 'sync'\n\t\t\t? new SQLiteSyncRelationalQuery(\n\t\t\t\tthis.fullSchema,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig ? (config as DBQueryConfig<'many', true>) : {},\n\t\t\t\t'many',\n\t\t\t)\n\t\t\t: new SQLiteRelationalQuery(\n\t\t\t\tthis.fullSchema,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig ? (config as DBQueryConfig<'many', true>) : {},\n\t\t\t\t'many',\n\t\t\t)) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]>;\n\t}\n\n\tfindFirst<TSelection extends Omit<DBQueryConfig<'many', true, TSchema, TFields>, 'limit'>>(\n\t\tconfig?: KnownKeysOnly<TSelection, Omit<DBQueryConfig<'many', true, TSchema, TFields>, 'limit'>>,\n\t): SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TSelection> | undefined> {\n\t\treturn (this.mode === 'sync'\n\t\t\t? new SQLiteSyncRelationalQuery(\n\t\t\t\tthis.fullSchema,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig ? { ...(config as DBQueryConfig<'many', true> | undefined), limit: 1 } : { limit: 1 },\n\t\t\t\t'first',\n\t\t\t)\n\t\t\t: new SQLiteRelationalQuery(\n\t\t\t\tthis.fullSchema,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig ? { ...(config as DBQueryConfig<'many', true> | undefined), limit: 1 } : { limit: 1 },\n\t\t\t\t'first',\n\t\t\t)) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TSelection> | undefined>;\n\t}\n}\n\nexport class SQLiteRelationalQuery<TType extends 'sync' | 'async', TResult> extends QueryPromise<TResult>\n\timplements RunnableQuery<TResult, 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteAsyncRelationalQuery';\n\n\tdeclare readonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly type: TType;\n\t\treadonly result: TResult;\n\t};\n\n\t/** @internal */\n\tmode: 'many' | 'first';\n\n\tconstructor(\n\t\tprivate fullSchema: Record<string, unknown>,\n\t\tprivate schema: TablesRelationalConfig,\n\t\tprivate tableNamesMap: Record<string, string>,\n\t\t/** @internal */\n\t\tpublic table: SQLiteTable,\n\t\tprivate tableConfig: TableRelationalConfig,\n\t\tprivate dialect: SQLiteDialect,\n\t\tprivate session: SQLiteSession<'sync' | 'async', unknown, Record<string, unknown>, TablesRelationalConfig>,\n\t\tprivate config: DBQueryConfig<'many', true> | true,\n\t\tmode: 'many' | 'first',\n\t) {\n\t\tsuper();\n\t\tthis.mode = mode;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildRelationalQuery({\n\t\t\tfullSchema: this.fullSchema,\n\t\t\tschema: this.schema,\n\t\t\ttableNamesMap: this.tableNamesMap,\n\t\t\ttable: this.table,\n\t\t\ttableConfig: this.tableConfig,\n\t\t\tqueryConfig: this.config,\n\t\t\ttableAlias: this.tableConfig.tsName,\n\t\t}).sql as SQL;\n\t}\n\n\t/** @internal */\n\t_prepare(\n\t\tisOneTimeQuery = false,\n\t): SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }> {\n\t\tconst { query, builtQuery } = this._toSQL();\n\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tbuiltQuery,\n\t\t\tundefined,\n\t\t\tthis.mode === 'first' ? 'get' : 'all',\n\t\t\ttrue,\n\t\t\t(rawRows, mapColumnValue) => {\n\t\t\t\tconst rows = rawRows.map((row) =>\n\t\t\t\t\tmapRelationalRow(this.schema, this.tableConfig, row, query.selection, mapColumnValue)\n\t\t\t\t);\n\t\t\t\tif (this.mode === 'first') {\n\t\t\t\t\treturn rows[0] as TResult;\n\t\t\t\t}\n\t\t\t\treturn rows as TResult;\n\t\t\t},\n\t\t) as SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }>;\n\t}\n\n\tprepare(): SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }> {\n\t\treturn this._prepare(false);\n\t}\n\n\tprivate _toSQL(): { query: BuildRelationalQueryResult; builtQuery: QueryWithTypings } {\n\t\tconst query = this.dialect.buildRelationalQuery({\n\t\t\tfullSchema: this.fullSchema,\n\t\t\tschema: this.schema,\n\t\t\ttableNamesMap: this.tableNamesMap,\n\t\t\ttable: this.table,\n\t\t\ttableConfig: this.tableConfig,\n\t\t\tqueryConfig: this.config,\n\t\t\ttableAlias: this.tableConfig.tsName,\n\t\t});\n\n\t\tconst builtQuery = this.dialect.sqlToQuery(query.sql as SQL);\n\n\t\treturn { query, builtQuery };\n\t}\n\n\ttoSQL(): Query {\n\t\treturn this._toSQL().builtQuery;\n\t}\n\n\t/** @internal */\n\texecuteRaw(): TResult {\n\t\tif (this.mode === 'first') {\n\t\t\treturn this._prepare(false).get() as TResult;\n\t\t}\n\t\treturn this._prepare(false).all() as TResult;\n\t}\n\n\toverride async execute(): Promise<TResult> {\n\t\treturn this.executeRaw();\n\t}\n}\n\nexport class SQLiteSyncRelationalQuery<TResult> extends SQLiteRelationalQuery<'sync', TResult> {\n\tstatic override readonly [entityKind]: string = 'SQLiteSyncRelationalQuery';\n\n\tsync(): TResult {\n\t\treturn this.executeRaw();\n\t}\n}\n","import { entityKind } from '~/entity.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport type { SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '../dialect.ts';\n\ntype SQLiteRawAction = 'all' | 'get' | 'values' | 'run';\nexport interface SQLiteRawConfig {\n\taction: SQLiteRawAction;\n}\n\nexport interface SQLiteRaw<TResult> extends QueryPromise<TResult>, RunnableQuery<TResult, 'sqlite'>, SQLWrapper {}\n\nexport class SQLiteRaw<TResult> extends QueryPromise<TResult>\n\timplements RunnableQuery<TResult, 'sqlite'>, SQLWrapper, PreparedQuery\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteRaw';\n\n\tdeclare readonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly result: TResult;\n\t};\n\n\t/** @internal */\n\tconfig: SQLiteRawConfig;\n\n\tconstructor(\n\t\tpublic execute: () => Promise<TResult>,\n\t\t/** @internal */\n\t\tpublic getSQL: () => SQL,\n\t\taction: SQLiteRawAction,\n\t\tprivate dialect: SQLiteAsyncDialect,\n\t\tprivate mapBatchResult: (result: unknown) => unknown,\n\t) {\n\t\tsuper();\n\t\tthis.config = { action };\n\t}\n\n\tgetQuery() {\n\t\treturn { ...this.dialect.sqlToQuery(this.getSQL()), method: this.config.action };\n\t}\n\n\tmapResult(result: unknown, isFromBatch?: boolean) {\n\t\treturn isFromBatch ? this.mapBatchResult(result) : result;\n\t}\n\n\t_prepare(): PreparedQuery {\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn false;\n\t}\n}\n","import type { Cache } from '~/cache/core/cache.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport { type ColumnsSelection, type SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect, SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport {\n\tQueryBuilder,\n\tSQLiteDeleteBase,\n\tSQLiteInsertBuilder,\n\tSQLiteSelectBuilder,\n\tSQLiteUpdateBuilder,\n} from '~/sqlite-core/query-builders/index.ts';\nimport type {\n\tDBResult,\n\tResult,\n\tSQLiteSession,\n\tSQLiteTransaction,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport type { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { WithSubquery } from '~/subquery.ts';\nimport type { DrizzleTypeError } from '~/utils.ts';\nimport { SQLiteCountBuilder } from './query-builders/count.ts';\nimport { RelationalQueryBuilder } from './query-builders/query.ts';\nimport { SQLiteRaw } from './query-builders/raw.ts';\nimport type { SelectedFields } from './query-builders/select.types.ts';\nimport type { WithBuilder } from './subquery.ts';\nimport type { SQLiteViewBase } from './view-base.ts';\n\nexport class BaseSQLiteDatabase<\n\tTResultKind extends 'sync' | 'async',\n\tTRunResult,\n\tTFullSchema extends Record<string, unknown> = Record<string, never>,\n\tTSchema extends TablesRelationalConfig = ExtractTablesWithRelations<TFullSchema>,\n> {\n\tstatic readonly [entityKind]: string = 'BaseSQLiteDatabase';\n\n\tdeclare readonly _: {\n\t\treadonly schema: TSchema | undefined;\n\t\treadonly fullSchema: TFullSchema;\n\t\treadonly tableNamesMap: Record<string, string>;\n\t};\n\n\tquery: TFullSchema extends Record<string, never>\n\t\t? DrizzleTypeError<'Seems like the schema generic is missing - did you forget to add it to your DB type?'>\n\t\t: {\n\t\t\t[K in keyof TSchema]: RelationalQueryBuilder<TResultKind, TFullSchema, TSchema, TSchema[K]>;\n\t\t};\n\n\tconstructor(\n\t\tprivate resultKind: TResultKind,\n\t\t/** @internal */\n\t\treadonly dialect: { sync: SQLiteSyncDialect; async: SQLiteAsyncDialect }[TResultKind],\n\t\t/** @internal */\n\t\treadonly session: SQLiteSession<TResultKind, TRunResult, TFullSchema, TSchema>,\n\t\tschema: RelationalSchemaConfig<TSchema> | undefined,\n\t) {\n\t\tthis._ = schema\n\t\t\t? {\n\t\t\t\tschema: schema.schema,\n\t\t\t\tfullSchema: schema.fullSchema as TFullSchema,\n\t\t\t\ttableNamesMap: schema.tableNamesMap,\n\t\t\t}\n\t\t\t: {\n\t\t\t\tschema: undefined,\n\t\t\t\tfullSchema: {} as TFullSchema,\n\t\t\t\ttableNamesMap: {},\n\t\t\t};\n\t\tthis.query = {} as typeof this['query'];\n\t\tconst query = this.query as {\n\t\t\t[K in keyof TSchema]: RelationalQueryBuilder<TResultKind, TFullSchema, TSchema, TSchema[K]>;\n\t\t};\n\t\tif (this._.schema) {\n\t\t\tfor (const [tableName, columns] of Object.entries(this._.schema)) {\n\t\t\t\tquery[tableName as keyof TSchema] = new RelationalQueryBuilder(\n\t\t\t\t\tresultKind,\n\t\t\t\t\tschema!.fullSchema,\n\t\t\t\t\tthis._.schema,\n\t\t\t\t\tthis._.tableNamesMap,\n\t\t\t\t\tschema!.fullSchema[tableName] as SQLiteTable,\n\t\t\t\t\tcolumns,\n\t\t\t\t\tdialect,\n\t\t\t\t\tsession as SQLiteSession<any, any, any, any> as any,\n\t\t\t\t) as typeof query[keyof TSchema];\n\t\t\t}\n\t\t}\n\t\tthis.$cache = { invalidate: async (_params: any) => {} };\n\t}\n\n\t/**\n\t * Creates a subquery that defines a temporary named result set as a CTE.\n\t *\n\t * It is useful for breaking down complex queries into simpler parts and for reusing the result set in subsequent parts of the query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#with-clause}\n\t *\n\t * @param alias The alias for the subquery.\n\t *\n\t * Failure to provide an alias will result in a DrizzleTypeError, preventing the subquery from being referenced in other queries.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Create a subquery with alias 'sq' and use it in the select query\n\t * const sq = db.$with('sq').as(db.select().from(users).where(eq(users.id, 42)));\n\t *\n\t * const result = await db.with(sq).select().from(sq);\n\t * ```\n\t *\n\t * To select arbitrary SQL values as fields in a CTE and reference them in other CTEs or in the main query, you need to add aliases to them:\n\t *\n\t * ```ts\n\t * // Select an arbitrary SQL value as a field in a CTE and reference it in the main query\n\t * const sq = db.$with('sq').as(db.select({\n\t * name: sql<string>`upper(${users.name})`.as('name'),\n\t * })\n\t * .from(users));\n\t *\n\t * const result = await db.with(sq).select({ name: sq.name }).from(sq);\n\t * ```\n\t */\n\t$with: WithBuilder = (alias: string, selection?: ColumnsSelection) => {\n\t\tconst self = this;\n\t\tconst as = (\n\t\t\tqb:\n\t\t\t\t| TypedQueryBuilder<ColumnsSelection | undefined>\n\t\t\t\t| SQL\n\t\t\t\t| ((qb: QueryBuilder) => TypedQueryBuilder<ColumnsSelection | undefined> | SQL),\n\t\t) => {\n\t\t\tif (typeof qb === 'function') {\n\t\t\t\tqb = qb(new QueryBuilder(self.dialect));\n\t\t\t}\n\n\t\t\treturn new Proxy(\n\t\t\t\tnew WithSubquery(\n\t\t\t\t\tqb.getSQL(),\n\t\t\t\t\tselection ?? ('getSelectedFields' in qb ? qb.getSelectedFields() ?? {} : {}) as SelectedFields,\n\t\t\t\t\talias,\n\t\t\t\t\ttrue,\n\t\t\t\t),\n\t\t\t\tnew SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t\t);\n\t\t};\n\t\treturn { as };\n\t};\n\n\t$count(\n\t\tsource: SQLiteTable | SQLiteViewBase | SQL | SQLWrapper,\n\t\tfilters?: SQL<unknown>,\n\t) {\n\t\treturn new SQLiteCountBuilder({ source, filters, session: this.session });\n\t}\n\n\t/**\n\t * Incorporates a previously defined CTE (using `$with`) into the main query.\n\t *\n\t * This method allows the main query to reference a temporary named result set.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#with-clause}\n\t *\n\t * @param queries The CTEs to incorporate into the main query.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Define a subquery 'sq' as a CTE using $with\n\t * const sq = db.$with('sq').as(db.select().from(users).where(eq(users.id, 42)));\n\t *\n\t * // Incorporate the CTE 'sq' into the main query and select from it\n\t * const result = await db.with(sq).select().from(sq);\n\t * ```\n\t */\n\twith(...queries: WithSubquery[]) {\n\t\tconst self = this;\n\n\t\t/**\n\t\t * Creates a select query.\n\t\t *\n\t\t * Calling this method with no arguments will select all columns from the table. Pass a selection object to specify the columns you want to select.\n\t\t *\n\t\t * Use `.from()` method to specify which table to select from.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/select}\n\t\t *\n\t\t * @param fields The selection object.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Select all columns and all rows from the 'cars' table\n\t\t * const allCars: Car[] = await db.select().from(cars);\n\t\t *\n\t\t * // Select specific columns and all rows from the 'cars' table\n\t\t * const carsIdsAndBrands: { id: number; brand: string }[] = await db.select({\n\t\t * id: cars.id,\n\t\t * brand: cars.brand\n\t\t * })\n\t\t * .from(cars);\n\t\t * ```\n\t\t *\n\t\t * Like in SQL, you can use arbitrary expressions as selection fields, not just table columns:\n\t\t *\n\t\t * ```ts\n\t\t * // Select specific columns along with expression and all rows from the 'cars' table\n\t\t * const carsIdsAndLowerNames: { id: number; lowerBrand: string }[] = await db.select({\n\t\t * id: cars.id,\n\t\t * lowerBrand: sql<string>`lower(${cars.brand})`,\n\t\t * })\n\t\t * .from(cars);\n\t\t * ```\n\t\t */\n\t\tfunction select(): SQLiteSelectBuilder<undefined, TResultKind, TRunResult>;\n\t\tfunction select<TSelection extends SelectedFields>(\n\t\t\tfields: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection, TResultKind, TRunResult>;\n\t\tfunction select(\n\t\t\tfields?: SelectedFields,\n\t\t): SQLiteSelectBuilder<SelectedFields | undefined, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: self.session,\n\t\t\t\tdialect: self.dialect,\n\t\t\t\twithList: queries,\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Adds `distinct` expression to the select query.\n\t\t *\n\t\t * Calling this method will return only unique values. When multiple columns are selected, it returns rows with unique combinations of values in these columns.\n\t\t *\n\t\t * Use `.from()` method to specify which table to select from.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t\t *\n\t\t * @param fields The selection object.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Select all unique rows from the 'cars' table\n\t\t * await db.selectDistinct()\n\t\t * .from(cars)\n\t\t * .orderBy(cars.id, cars.brand, cars.color);\n\t\t *\n\t\t * // Select all unique brands from the 'cars' table\n\t\t * await db.selectDistinct({ brand: cars.brand })\n\t\t * .from(cars)\n\t\t * .orderBy(cars.brand);\n\t\t * ```\n\t\t */\n\t\tfunction selectDistinct(): SQLiteSelectBuilder<undefined, TResultKind, TRunResult>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(\n\t\t\tfields: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection, TResultKind, TRunResult>;\n\t\tfunction selectDistinct(\n\t\t\tfields?: SelectedFields,\n\t\t): SQLiteSelectBuilder<SelectedFields | undefined, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: self.session,\n\t\t\t\tdialect: self.dialect,\n\t\t\t\twithList: queries,\n\t\t\t\tdistinct: true,\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Creates an update query.\n\t\t *\n\t\t * Calling this method without `.where()` clause will update all rows in a table. The `.where()` clause specifies which rows should be updated.\n\t\t *\n\t\t * Use `.set()` method to specify which values to update.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t\t *\n\t\t * @param table The table to update.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Update all rows in the 'cars' table\n\t\t * await db.update(cars).set({ color: 'red' });\n\t\t *\n\t\t * // Update rows with filters and conditions\n\t\t * await db.update(cars).set({ color: 'red' }).where(eq(cars.brand, 'BMW'));\n\t\t *\n\t\t * // Update with returning clause\n\t\t * const updatedCar: Car[] = await db.update(cars)\n\t\t * .set({ color: 'red' })\n\t\t * .where(eq(cars.id, 1))\n\t\t * .returning();\n\t\t * ```\n\t\t */\n\t\tfunction update<TTable extends SQLiteTable>(table: TTable): SQLiteUpdateBuilder<TTable, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteUpdateBuilder(table, self.session, self.dialect, queries);\n\t\t}\n\n\t\t/**\n\t\t * Creates an insert query.\n\t\t *\n\t\t * Calling this method will create new rows in a table. Use `.values()` method to specify which values to insert.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/insert}\n\t\t *\n\t\t * @param table The table to insert into.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Insert one row\n\t\t * await db.insert(cars).values({ brand: 'BMW' });\n\t\t *\n\t\t * // Insert multiple rows\n\t\t * await db.insert(cars).values([{ brand: 'BMW' }, { brand: 'Porsche' }]);\n\t\t *\n\t\t * // Insert with returning clause\n\t\t * const insertedCar: Car[] = await db.insert(cars)\n\t\t * .values({ brand: 'BMW' })\n\t\t * .returning();\n\t\t * ```\n\t\t */\n\t\tfunction insert<TTable extends SQLiteTable>(into: TTable): SQLiteInsertBuilder<TTable, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteInsertBuilder(into, self.session, self.dialect, queries);\n\t\t}\n\n\t\t/**\n\t\t * Creates a delete query.\n\t\t *\n\t\t * Calling this method without `.where()` clause will delete all rows in a table. The `.where()` clause specifies which rows should be deleted.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t\t *\n\t\t * @param table The table to delete from.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Delete all rows in the 'cars' table\n\t\t * await db.delete(cars);\n\t\t *\n\t\t * // Delete rows with filters and conditions\n\t\t * await db.delete(cars).where(eq(cars.color, 'green'));\n\t\t *\n\t\t * // Delete with returning clause\n\t\t * const deletedCar: Car[] = await db.delete(cars)\n\t\t * .where(eq(cars.id, 1))\n\t\t * .returning();\n\t\t * ```\n\t\t */\n\t\tfunction delete_<TTable extends SQLiteTable>(from: TTable): SQLiteDeleteBase<TTable, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteDeleteBase(from, self.session, self.dialect, queries);\n\t\t}\n\n\t\treturn { select, selectDistinct, update, insert, delete: delete_ };\n\t}\n\n\t/**\n\t * Creates a select query.\n\t *\n\t * Calling this method with no arguments will select all columns from the table. Pass a selection object to specify the columns you want to select.\n\t *\n\t * Use `.from()` method to specify which table to select from.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select}\n\t *\n\t * @param fields The selection object.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all columns and all rows from the 'cars' table\n\t * const allCars: Car[] = await db.select().from(cars);\n\t *\n\t * // Select specific columns and all rows from the 'cars' table\n\t * const carsIdsAndBrands: { id: number; brand: string }[] = await db.select({\n\t * id: cars.id,\n\t * brand: cars.brand\n\t * })\n\t * .from(cars);\n\t * ```\n\t *\n\t * Like in SQL, you can use arbitrary expressions as selection fields, not just table columns:\n\t *\n\t * ```ts\n\t * // Select specific columns along with expression and all rows from the 'cars' table\n\t * const carsIdsAndLowerNames: { id: number; lowerBrand: string }[] = await db.select({\n\t * id: cars.id,\n\t * lowerBrand: sql<string>`lower(${cars.brand})`,\n\t * })\n\t * .from(cars);\n\t * ```\n\t */\n\tselect(): SQLiteSelectBuilder<undefined, TResultKind, TRunResult>;\n\tselect<TSelection extends SelectedFields>(\n\t\tfields: TSelection,\n\t): SQLiteSelectBuilder<TSelection, TResultKind, TRunResult>;\n\tselect(fields?: SelectedFields): SQLiteSelectBuilder<SelectedFields | undefined, TResultKind, TRunResult> {\n\t\treturn new SQLiteSelectBuilder({ fields: fields ?? undefined, session: this.session, dialect: this.dialect });\n\t}\n\n\t/**\n\t * Adds `distinct` expression to the select query.\n\t *\n\t * Calling this method will return only unique values. When multiple columns are selected, it returns rows with unique combinations of values in these columns.\n\t *\n\t * Use `.from()` method to specify which table to select from.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t *\n\t * @param fields The selection object.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all unique rows from the 'cars' table\n\t * await db.selectDistinct()\n\t * .from(cars)\n\t * .orderBy(cars.id, cars.brand, cars.color);\n\t *\n\t * // Select all unique brands from the 'cars' table\n\t * await db.selectDistinct({ brand: cars.brand })\n\t * .from(cars)\n\t * .orderBy(cars.brand);\n\t * ```\n\t */\n\tselectDistinct(): SQLiteSelectBuilder<undefined, TResultKind, TRunResult>;\n\tselectDistinct<TSelection extends SelectedFields>(\n\t\tfields: TSelection,\n\t): SQLiteSelectBuilder<TSelection, TResultKind, TRunResult>;\n\tselectDistinct(\n\t\tfields?: SelectedFields,\n\t): SQLiteSelectBuilder<SelectedFields | undefined, TResultKind, TRunResult> {\n\t\treturn new SQLiteSelectBuilder({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: this.session,\n\t\t\tdialect: this.dialect,\n\t\t\tdistinct: true,\n\t\t});\n\t}\n\n\t/**\n\t * Creates an update query.\n\t *\n\t * Calling this method without `.where()` clause will update all rows in a table. The `.where()` clause specifies which rows should be updated.\n\t *\n\t * Use `.set()` method to specify which values to update.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t *\n\t * @param table The table to update.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Update all rows in the 'cars' table\n\t * await db.update(cars).set({ color: 'red' });\n\t *\n\t * // Update rows with filters and conditions\n\t * await db.update(cars).set({ color: 'red' }).where(eq(cars.brand, 'BMW'));\n\t *\n\t * // Update with returning clause\n\t * const updatedCar: Car[] = await db.update(cars)\n\t * .set({ color: 'red' })\n\t * .where(eq(cars.id, 1))\n\t * .returning();\n\t * ```\n\t */\n\tupdate<TTable extends SQLiteTable>(table: TTable): SQLiteUpdateBuilder<TTable, TResultKind, TRunResult> {\n\t\treturn new SQLiteUpdateBuilder(table, this.session, this.dialect);\n\t}\n\n\t$cache: { invalidate: Cache['onMutate'] };\n\n\t/**\n\t * Creates an insert query.\n\t *\n\t * Calling this method will create new rows in a table. Use `.values()` method to specify which values to insert.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert}\n\t *\n\t * @param table The table to insert into.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Insert one row\n\t * await db.insert(cars).values({ brand: 'BMW' });\n\t *\n\t * // Insert multiple rows\n\t * await db.insert(cars).values([{ brand: 'BMW' }, { brand: 'Porsche' }]);\n\t *\n\t * // Insert with returning clause\n\t * const insertedCar: Car[] = await db.insert(cars)\n\t * .values({ brand: 'BMW' })\n\t * .returning();\n\t * ```\n\t */\n\tinsert<TTable extends SQLiteTable>(into: TTable): SQLiteInsertBuilder<TTable, TResultKind, TRunResult> {\n\t\treturn new SQLiteInsertBuilder(into, this.session, this.dialect);\n\t}\n\n\t/**\n\t * Creates a delete query.\n\t *\n\t * Calling this method without `.where()` clause will delete all rows in a table. The `.where()` clause specifies which rows should be deleted.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t *\n\t * @param table The table to delete from.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Delete all rows in the 'cars' table\n\t * await db.delete(cars);\n\t *\n\t * // Delete rows with filters and conditions\n\t * await db.delete(cars).where(eq(cars.color, 'green'));\n\t *\n\t * // Delete with returning clause\n\t * const deletedCar: Car[] = await db.delete(cars)\n\t * .where(eq(cars.id, 1))\n\t * .returning();\n\t * ```\n\t */\n\tdelete<TTable extends SQLiteTable>(from: TTable): SQLiteDeleteBase<TTable, TResultKind, TRunResult> {\n\t\treturn new SQLiteDeleteBase(from, this.session, this.dialect);\n\t}\n\n\trun(query: SQLWrapper | string): DBResult<TResultKind, TRunResult> {\n\t\tconst sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();\n\t\tif (this.resultKind === 'async') {\n\t\t\treturn new SQLiteRaw(\n\t\t\t\tasync () => this.session.run(sequel),\n\t\t\t\t() => sequel,\n\t\t\t\t'run',\n\t\t\t\tthis.dialect as SQLiteAsyncDialect,\n\t\t\t\tthis.session.extractRawRunValueFromBatchResult.bind(this.session),\n\t\t\t) as DBResult<TResultKind, TRunResult>;\n\t\t}\n\t\treturn this.session.run(sequel) as DBResult<TResultKind, TRunResult>;\n\t}\n\n\tall<T = unknown>(query: SQLWrapper | string): DBResult<TResultKind, T[]> {\n\t\tconst sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();\n\t\tif (this.resultKind === 'async') {\n\t\t\treturn new SQLiteRaw(\n\t\t\t\tasync () => this.session.all(sequel),\n\t\t\t\t() => sequel,\n\t\t\t\t'all',\n\t\t\t\tthis.dialect as SQLiteAsyncDialect,\n\t\t\t\tthis.session.extractRawAllValueFromBatchResult.bind(this.session),\n\t\t\t) as any;\n\t\t}\n\t\treturn this.session.all(sequel) as DBResult<TResultKind, T[]>;\n\t}\n\n\tget<T = unknown>(query: SQLWrapper | string): DBResult<TResultKind, T> {\n\t\tconst sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();\n\t\tif (this.resultKind === 'async') {\n\t\t\treturn new SQLiteRaw(\n\t\t\t\tasync () => this.session.get(sequel),\n\t\t\t\t() => sequel,\n\t\t\t\t'get',\n\t\t\t\tthis.dialect as SQLiteAsyncDialect,\n\t\t\t\tthis.session.extractRawGetValueFromBatchResult.bind(this.session),\n\t\t\t) as DBResult<TResultKind, T>;\n\t\t}\n\t\treturn this.session.get(sequel) as DBResult<TResultKind, T>;\n\t}\n\n\tvalues<T extends unknown[] = unknown[]>(query: SQLWrapper | string): DBResult<TResultKind, T[]> {\n\t\tconst sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();\n\t\tif (this.resultKind === 'async') {\n\t\t\treturn new SQLiteRaw(\n\t\t\t\tasync () => this.session.values(sequel),\n\t\t\t\t() => sequel,\n\t\t\t\t'values',\n\t\t\t\tthis.dialect as SQLiteAsyncDialect,\n\t\t\t\tthis.session.extractRawValuesValueFromBatchResult.bind(this.session),\n\t\t\t) as any;\n\t\t}\n\t\treturn this.session.values(sequel) as DBResult<TResultKind, T[]>;\n\t}\n\n\ttransaction<T>(\n\t\ttransaction: (tx: SQLiteTransaction<TResultKind, TRunResult, TFullSchema, TSchema>) => Result<TResultKind, T>,\n\t\tconfig?: SQLiteTransactionConfig,\n\t): Result<TResultKind, T> {\n\t\treturn this.session.transaction(transaction, config);\n\t}\n}\n\nexport type SQLiteWithReplicas<Q> = Q & { $primary: Q; $replicas: Q[] };\n\nexport const withReplicas = <\n\tTResultKind extends 'sync' | 'async',\n\tTRunResult,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n\tQ extends BaseSQLiteDatabase<\n\t\tTResultKind,\n\t\tTRunResult,\n\t\tTFullSchema,\n\t\tTSchema extends Record<string, unknown> ? ExtractTablesWithRelations<TFullSchema> : TSchema\n\t>,\n>(\n\tprimary: Q,\n\treplicas: [Q, ...Q[]],\n\tgetReplica: (replicas: Q[]) => Q = () => replicas[Math.floor(Math.random() * replicas.length)]!,\n): SQLiteWithReplicas<Q> => {\n\tconst select: Q['select'] = (...args: []) => getReplica(replicas).select(...args);\n\tconst selectDistinct: Q['selectDistinct'] = (...args: []) => getReplica(replicas).selectDistinct(...args);\n\tconst $count: Q['$count'] = (...args: [any]) => getReplica(replicas).$count(...args);\n\tconst $with: Q['with'] = (...args: []) => getReplica(replicas).with(...args);\n\n\tconst update: Q['update'] = (...args: [any]) => primary.update(...args);\n\tconst insert: Q['insert'] = (...args: [any]) => primary.insert(...args);\n\tconst $delete: Q['delete'] = (...args: [any]) => primary.delete(...args);\n\tconst run: Q['run'] = (...args: [any]) => primary.run(...args);\n\tconst all: Q['all'] = (...args: [any]) => primary.all(...args);\n\tconst get: Q['get'] = (...args: [any]) => primary.get(...args);\n\tconst values: Q['values'] = (...args: [any]) => primary.values(...args);\n\tconst transaction: Q['transaction'] = (...args: [any]) => primary.transaction(...args);\n\n\treturn {\n\t\t...primary,\n\t\tupdate,\n\t\tinsert,\n\t\tdelete: $delete,\n\t\trun,\n\t\tall,\n\t\tget,\n\t\tvalues,\n\t\ttransaction,\n\t\t$primary: primary,\n\t\t$replicas: replicas,\n\t\tselect,\n\t\tselectDistinct,\n\t\t$count,\n\t\twith: $with,\n\t\tget query() {\n\t\t\treturn getReplica(replicas).query;\n\t\t},\n\t};\n};\n","import { entityKind } from '~/entity.ts';\nimport type { Table } from '~/index.ts';\nimport type { CacheConfig } from './types.ts';\n\nexport abstract class Cache {\n\tstatic readonly [entityKind]: string = 'Cache';\n\n\tabstract strategy(): 'explicit' | 'all';\n\n\t/**\n\t * Invoked if we should check cache for cached response\n\t * @param sql\n\t * @param tables\n\t */\n\tabstract get(\n\t\tkey: string,\n\t\ttables: string[],\n\t\tisTag: boolean,\n\t\tisAutoInvalidate?: boolean,\n\t): Promise<any[] | undefined>;\n\n\t/**\n\t * Invoked if new query should be inserted to cache\n\t * @param sql\n\t * @param tables\n\t */\n\tabstract put(\n\t\thashedQuery: string,\n\t\tresponse: any,\n\t\ttables: string[],\n\t\tisTag: boolean,\n\t\tconfig?: CacheConfig,\n\t): Promise<void>;\n\n\t/**\n\t * Invoked if insert, update, delete was invoked\n\t * @param tables\n\t */\n\tabstract onMutate(\n\t\tparams: MutationOption,\n\t): Promise<void>;\n}\n\nexport class NoopCache extends Cache {\n\toverride strategy() {\n\t\treturn 'all' as const;\n\t}\n\n\tstatic override readonly [entityKind]: string = 'NoopCache';\n\n\toverride async get(_key: string): Promise<any[] | undefined> {\n\t\treturn undefined;\n\t}\n\toverride async put(\n\t\t_hashedQuery: string,\n\t\t_response: any,\n\t\t_tables: string[],\n\t\t_config?: any,\n\t): Promise<void> {\n\t\t// noop\n\t}\n\toverride async onMutate(_params: MutationOption): Promise<void> {\n\t\t// noop\n\t}\n}\n\nexport type MutationOption = { tags?: string | string[]; tables?: Table<any> | Table<any>[] | string | string[] };\n\nexport async function hashQuery(sql: string, params?: any[]) {\n\tconst dataToHash = `${sql}-${JSON.stringify(params)}`;\n\tconst encoder = new TextEncoder();\n\tconst data = encoder.encode(dataToHash);\n\tconst hashBuffer = await crypto.subtle.digest('SHA-256', data);\n\tconst hashArray = [...new Uint8Array(hashBuffer)];\n\tconst hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n\n\treturn hashHex;\n}\n","import { type Cache, hashQuery, NoopCache } from '~/cache/core/cache.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { DrizzleError, DrizzleQueryError, TransactionRollbackError } from '~/errors.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport type { Query, SQL } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect, SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { BaseSQLiteDatabase } from './db.ts';\nimport type { SQLiteRaw } from './query-builders/raw.ts';\nimport type { SelectedFieldsOrdered } from './query-builders/select.types.ts';\n\nexport interface PreparedQueryConfig {\n\ttype: 'sync' | 'async';\n\trun: unknown;\n\tall: unknown;\n\tget: unknown;\n\tvalues: unknown;\n\texecute: unknown;\n}\n\nexport class ExecuteResultSync<T> extends QueryPromise<T> {\n\tstatic override readonly [entityKind]: string = 'ExecuteResultSync';\n\n\tconstructor(private resultCb: () => T) {\n\t\tsuper();\n\t}\n\n\toverride async execute(): Promise<T> {\n\t\treturn this.resultCb();\n\t}\n\n\tsync(): T {\n\t\treturn this.resultCb();\n\t}\n}\n\nexport type ExecuteResult<TType extends 'sync' | 'async', TResult> = TType extends 'async' ? Promise<TResult>\n\t: ExecuteResultSync<TResult>;\n\nexport abstract class SQLitePreparedQuery<T extends PreparedQueryConfig> implements PreparedQuery {\n\tstatic readonly [entityKind]: string = 'PreparedQuery';\n\n\t/** @internal */\n\tjoinsNotNullableMap?: Record<string, boolean>;\n\n\tconstructor(\n\t\tprivate mode: 'sync' | 'async',\n\t\tprivate executeMethod: SQLiteExecuteMethod,\n\t\tprotected query: Query,\n\t\tprivate cache?: Cache,\n\t\t// per query related metadata\n\t\tprivate queryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\t// config that was passed through $withCache\n\t\tprivate cacheConfig?: WithCacheConfig,\n\t) {\n\t\t// it means that no $withCache options were passed and it should be just enabled\n\t\tif (cache && cache.strategy() === 'all' && cacheConfig === undefined) {\n\t\t\tthis.cacheConfig = { enable: true, autoInvalidate: true };\n\t\t}\n\t\tif (!this.cacheConfig?.enable) {\n\t\t\tthis.cacheConfig = undefined;\n\t\t}\n\t}\n\n\t/** @internal */\n\tprotected async queryWithCache<T>(\n\t\tqueryString: string,\n\t\tparams: any[],\n\t\tquery: () => Promise<T>,\n\t): Promise<T> {\n\t\tif (this.cache === undefined || is(this.cache, NoopCache) || this.queryMetadata === undefined) {\n\t\t\ttry {\n\t\t\t\treturn await query();\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\t// don't do any mutations, if globally is false\n\t\tif (this.cacheConfig && !this.cacheConfig.enable) {\n\t\t\ttry {\n\t\t\t\treturn await query();\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\t// For mutate queries, we should query the database, wait for a response, and then perform invalidation\n\t\tif (\n\t\t\t(\n\t\t\t\tthis.queryMetadata.type === 'insert' || this.queryMetadata.type === 'update'\n\t\t\t\t|| this.queryMetadata.type === 'delete'\n\t\t\t) && this.queryMetadata.tables.length > 0\n\t\t) {\n\t\t\ttry {\n\t\t\t\tconst [res] = await Promise.all([\n\t\t\t\t\tquery(),\n\t\t\t\t\tthis.cache.onMutate({ tables: this.queryMetadata.tables }),\n\t\t\t\t]);\n\t\t\t\treturn res;\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\t// don't do any reads if globally disabled\n\t\tif (!this.cacheConfig) {\n\t\t\ttry {\n\t\t\t\treturn await query();\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\tif (this.queryMetadata.type === 'select') {\n\t\t\tconst fromCache = await this.cache.get(\n\t\t\t\tthis.cacheConfig.tag ?? await hashQuery(queryString, params),\n\t\t\t\tthis.queryMetadata.tables,\n\t\t\t\tthis.cacheConfig.tag !== undefined,\n\t\t\t\tthis.cacheConfig.autoInvalidate,\n\t\t\t);\n\t\t\tif (fromCache === undefined) {\n\t\t\t\tlet result;\n\t\t\t\ttry {\n\t\t\t\t\tresult = await query();\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t\t}\n\n\t\t\t\t// put actual key\n\t\t\t\tawait this.cache.put(\n\t\t\t\t\tthis.cacheConfig.tag ?? await hashQuery(queryString, params),\n\t\t\t\t\tresult,\n\t\t\t\t\t// make sure we send tables that were used in a query only if user wants to invalidate it on each write\n\t\t\t\t\tthis.cacheConfig.autoInvalidate ? this.queryMetadata.tables : [],\n\t\t\t\t\tthis.cacheConfig.tag !== undefined,\n\t\t\t\t\tthis.cacheConfig.config,\n\t\t\t\t);\n\t\t\t\t// put flag if we should invalidate or not\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\treturn fromCache as unknown as T;\n\t\t}\n\t\ttry {\n\t\t\treturn await query();\n\t\t} catch (e) {\n\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t}\n\t}\n\n\tgetQuery(): Query {\n\t\treturn this.query;\n\t}\n\n\tabstract run(placeholderValues?: Record<string, unknown>): Result<T['type'], T['run']>;\n\n\tmapRunResult(result: unknown, _isFromBatch?: boolean): unknown {\n\t\treturn result;\n\t}\n\n\tabstract all(placeholderValues?: Record<string, unknown>): Result<T['type'], T['all']>;\n\n\tmapAllResult(_result: unknown, _isFromBatch?: boolean): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n\n\tabstract get(placeholderValues?: Record<string, unknown>): Result<T['type'], T['get']>;\n\n\tmapGetResult(_result: unknown, _isFromBatch?: boolean): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n\n\tabstract values(placeholderValues?: Record<string, unknown>): Result<T['type'], T['values']>;\n\n\texecute(placeholderValues?: Record<string, unknown>): ExecuteResult<T['type'], T['execute']> {\n\t\tif (this.mode === 'async') {\n\t\t\treturn this[this.executeMethod](placeholderValues) as ExecuteResult<T['type'], T['execute']>;\n\t\t}\n\t\treturn new ExecuteResultSync(() => this[this.executeMethod](placeholderValues));\n\t}\n\n\tmapResult(response: unknown, isFromBatch?: boolean) {\n\t\tswitch (this.executeMethod) {\n\t\t\tcase 'run': {\n\t\t\t\treturn this.mapRunResult(response, isFromBatch);\n\t\t\t}\n\t\t\tcase 'all': {\n\t\t\t\treturn this.mapAllResult(response, isFromBatch);\n\t\t\t}\n\t\t\tcase 'get': {\n\t\t\t\treturn this.mapGetResult(response, isFromBatch);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @internal */\n\tabstract isResponseInArrayMode(): boolean;\n}\n\nexport interface SQLiteTransactionConfig {\n\tbehavior?: 'deferred' | 'immediate' | 'exclusive';\n}\n\nexport type SQLiteExecuteMethod = 'run' | 'all' | 'get';\n\nexport abstract class SQLiteSession<\n\tTResultKind extends 'sync' | 'async',\n\tTRunResult,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteSession';\n\n\tconstructor(\n\t\t/** @internal */\n\t\treadonly dialect: { sync: SQLiteSyncDialect; async: SQLiteAsyncDialect }[TResultKind],\n\t) {}\n\n\tabstract prepareQuery(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): SQLitePreparedQuery<PreparedQueryConfig & { type: TResultKind }>;\n\n\tprepareOneTimeQuery(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): SQLitePreparedQuery<PreparedQueryConfig & { type: TResultKind }> {\n\t\treturn this.prepareQuery(\n\t\t\tquery,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t);\n\t}\n\n\tabstract transaction<T>(\n\t\ttransaction: (tx: SQLiteTransaction<TResultKind, TRunResult, TFullSchema, TSchema>) => Result<TResultKind, T>,\n\t\tconfig?: SQLiteTransactionConfig,\n\t): Result<TResultKind, T>;\n\n\trun(query: SQL): Result<TResultKind, TRunResult> {\n\t\tconst staticQuery = this.dialect.sqlToQuery(query);\n\t\ttry {\n\t\t\treturn this.prepareOneTimeQuery(staticQuery, undefined, 'run', false).run() as Result<TResultKind, TRunResult>;\n\t\t} catch (err) {\n\t\t\tthrow new DrizzleError({ cause: err, message: `Failed to run the query '${staticQuery.sql}'` });\n\t\t}\n\t}\n\n\t/** @internal */\n\textractRawRunValueFromBatchResult(result: unknown) {\n\t\treturn result;\n\t}\n\n\tall<T = unknown>(query: SQL): Result<TResultKind, T[]> {\n\t\treturn this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run', false).all() as Result<\n\t\t\tTResultKind,\n\t\t\tT[]\n\t\t>;\n\t}\n\n\t/** @internal */\n\textractRawAllValueFromBatchResult(_result: unknown): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n\n\tget<T = unknown>(query: SQL): Result<TResultKind, T> {\n\t\treturn this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run', false).get() as Result<\n\t\t\tTResultKind,\n\t\t\tT\n\t\t>;\n\t}\n\n\t/** @internal */\n\textractRawGetValueFromBatchResult(_result: unknown): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n\n\tvalues<T extends any[] = unknown[]>(\n\t\tquery: SQL,\n\t): Result<TResultKind, T[]> {\n\t\treturn this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run', false).values() as Result<\n\t\t\tTResultKind,\n\t\t\tT[]\n\t\t>;\n\t}\n\n\tasync count(sql: SQL) {\n\t\tconst result = await this.values(sql) as [[number]];\n\n\t\treturn result[0][0];\n\t}\n\n\t/** @internal */\n\textractRawValuesValueFromBatchResult(_result: unknown): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n}\n\nexport type Result<TKind extends 'sync' | 'async', TResult> = { sync: TResult; async: Promise<TResult> }[TKind];\n\nexport type DBResult<TKind extends 'sync' | 'async', TResult> = { sync: TResult; async: SQLiteRaw<TResult> }[TKind];\n\nexport abstract class SQLiteTransaction<\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends BaseSQLiteDatabase<TResultType, TRunResult, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLiteTransaction';\n\n\tconstructor(\n\t\tresultType: TResultType,\n\t\tdialect: { sync: SQLiteSyncDialect; async: SQLiteAsyncDialect }[TResultType],\n\t\tsession: SQLiteSession<TResultType, TRunResult, TFullSchema, TSchema>,\n\t\tprotected schema: {\n\t\t\tfullSchema: Record<string, unknown>;\n\t\t\tschema: TSchema;\n\t\t\ttableNamesMap: Record<string, string>;\n\t\t} | undefined,\n\t\tprotected readonly nestedIndex = 0,\n\t) {\n\t\tsuper(resultType, dialect, session, schema);\n\t}\n\n\trollback(): never {\n\t\tthrow new TransactionRollbackError();\n\t}\n}\n","import type { Database, RunResult, Statement } from 'better-sqlite3';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport {\n\ttype PreparedQueryConfig as PreparedQueryConfigBase,\n\ttype SQLiteExecuteMethod,\n\tSQLitePreparedQuery as PreparedQueryBase,\n\tSQLiteSession,\n\ttype SQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface BetterSQLiteSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class BetterSQLiteSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'sync', RunResult, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'BetterSQLiteSession';\n\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: Database,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: BetterSQLiteSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache ?? new NoopCache();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): PreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: BetterSQLiteTransaction<TFullSchema, TSchema>) => T,\n\t\tconfig: SQLiteTransactionConfig = {},\n\t): T {\n\t\tconst tx = new BetterSQLiteTransaction('sync', this.dialect, this, this.schema);\n\t\tconst nativeTx = this.client.transaction(transaction);\n\t\treturn nativeTx[config.behavior ?? 'deferred'](tx);\n\t}\n}\n\nexport class BetterSQLiteTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'sync', RunResult, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'BetterSQLiteTransaction';\n\n\toverride transaction<T>(transaction: (tx: BetterSQLiteTransaction<TFullSchema, TSchema>) => T): T {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new BetterSQLiteTransaction('sync', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tthis.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class PreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends PreparedQueryBase<\n\t{ type: 'sync'; run: RunResult; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic override readonly [entityKind]: string = 'BetterSQLitePreparedQuery';\n\n\tconstructor(\n\t\tprivate stmt: Statement,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tcache: Cache,\n\t\tqueryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tcacheConfig: WithCacheConfig | undefined,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => unknown,\n\t) {\n\t\tsuper('sync', executeMethod, query, cache, queryMetadata, cacheConfig);\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): RunResult {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.stmt.run(...params);\n\t}\n\n\tall(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tconst { fields, joinsNotNullableMap, query, logger, stmt, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn stmt.all(...params);\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows) as T['all'];\n\t\t}\n\t\treturn rows.map((row) => mapResultRow(fields!, row, joinsNotNullableMap));\n\t}\n\n\tget(placeholderValues?: Record<string, unknown>): T['get'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { fields, stmt, joinsNotNullableMap, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn stmt.get(...params);\n\t\t}\n\n\t\tconst row = stmt.raw().get(...params) as unknown[];\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper([row]) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, row, joinsNotNullableMap);\n\t}\n\n\tvalues(placeholderValues?: Record<string, unknown>): T['values'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.stmt.raw().all(...params) as T['values'];\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n","import Client, { type Database, type Options, type RunResult } from 'better-sqlite3';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { BetterSQLiteSession } from './session.ts';\n\nexport type DrizzleBetterSQLite3DatabaseConfig =\n\t| ({\n\t\tsource?:\n\t\t\t| string\n\t\t\t| Buffer;\n\t} & Options)\n\t| string\n\t| undefined;\n\nexport class BetterSQLite3Database<TSchema extends Record<string, unknown> = Record<string, never>>\n\textends BaseSQLiteDatabase<'sync', RunResult, TSchema>\n{\n\tstatic override readonly [entityKind]: string = 'BetterSQLite3Database';\n}\n\nfunction construct<TSchema extends Record<string, unknown> = Record<string, never>>(\n\tclient: Database,\n\tconfig: Omit<DrizzleConfig<TSchema>, 'cache'> = {},\n): BetterSQLite3Database<TSchema> & {\n\t$client: Database;\n} {\n\tconst dialect = new SQLiteSyncDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst session = new BetterSQLiteSession(client, dialect, schema, { logger });\n\tconst db = new BetterSQLite3Database('sync', dialect, session, schema);\n\t(<any> db).$client = client;\n\t// (<any> db).$cache = config.cache;\n\t// if ((<any> db).$cache) {\n\t// \t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t// }\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n>(\n\t...params:\n\t\t| []\n\t\t| [\n\t\t\tDatabase | string,\n\t\t]\n\t\t| [\n\t\t\tDatabase | string,\n\t\t\tDrizzleConfig<TSchema>,\n\t\t]\n\t\t| [\n\t\t\t(\n\t\t\t\t& DrizzleConfig<TSchema>\n\t\t\t\t& ({\n\t\t\t\t\tconnection?: DrizzleBetterSQLite3DatabaseConfig;\n\t\t\t\t} | {\n\t\t\t\t\tclient: Database;\n\t\t\t\t})\n\t\t\t),\n\t\t]\n): BetterSQLite3Database<TSchema> & {\n\t$client: Database;\n} {\n\tif (params[0] === undefined || typeof params[0] === 'string') {\n\t\tconst instance = params[0] === undefined ? new Client() : new Client(params[0]);\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?: DrizzleBetterSQLite3DatabaseConfig;\n\t\t\t\tclient?: Database;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig) as any;\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { source, ...options } = connection;\n\n\t\t\tconst instance = new Client(source, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = new Client(connection);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as Database, params[1] as DrizzleConfig<TSchema> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: DrizzleConfig<TSchema>,\n\t): BetterSQLite3Database<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n","import { index, integer, primaryKey, real, sqliteTable, text } from 'drizzle-orm/sqlite-core'\n\n/**\n * Phase-1 schema. Deliberately dialect-portable: phase 2 swaps this file for a\n * pg one and nothing above the repository layer changes.\n */\n\nexport const events = sqliteTable('events', {\n /** dedup key from the adapter — see docs/adapters.md */\n id: text('id').primaryKey(),\n ts: integer('ts').notNull(),\n provider: text('provider').notNull(),\n kind: text('kind').notNull(),\n sessionId: text('session_id'),\n scopeHash: text('scope_hash').notNull(),\n unitLabel: text('unit_label'),\n /** JSON object of quantities in units of `kind` */\n qtyJson: text('qty_json').notNull(),\n costUsd: real('cost_usd'),\n /** JSON object, numbers only */\n metaJson: text('meta_json').notNull(),\n /** sum of qty values; denormalised so \"biggest events\" doesn't parse JSON per row */\n qtyTotal: real('qty_total').notNull().default(0),\n}, t => [\n index('idx_events_ts').on(t.ts),\n index('idx_events_scope').on(t.scopeHash, t.ts),\n index('idx_events_provider').on(t.provider, t.ts),\n index('idx_events_session').on(t.sessionId, t.ts),\n])\n\nexport const scopes = sqliteTable('scopes', {\n scopeHash: text('scope_hash').primaryKey(),\n /** human-readable alias — local only, never synced */\n label: text('label').notNull(),\n provider: text('provider').notNull(),\n lastSeen: integer('last_seen').notNull(),\n})\n\nexport const limits = sqliteTable('limits', {\n ts: integer('ts').notNull(),\n provider: text('provider').notNull(),\n window: text('window').notNull(),\n usedPct: real('used_pct').notNull(),\n resetsAt: integer('resets_at'),\n}, t => [\n primaryKey({ columns: [t.provider, t.window, t.ts] }),\n index('idx_limits_lookup').on(t.provider, t.window, t.ts),\n])\n\nexport const scanState = sqliteTable('scan_state', {\n sourcePath: text('source_path').primaryKey(),\n mtime: integer('mtime').notNull(),\n size: integer('size').notNull(),\n offset: integer('offset').notNull(),\n})\n\nexport type EventRow = typeof events.$inferSelect\nexport type ScopeRow = typeof scopes.$inferSelect\nexport type LimitRow = typeof limits.$inferSelect\nexport type ScanStateRow = typeof scanState.$inferSelect\n","import { mkdirSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { dirname, join } from 'node:path'\nimport Database from 'better-sqlite3'\nimport type BetterSqlite3 from 'better-sqlite3'\nimport { drizzle } from 'drizzle-orm/better-sqlite3'\nimport * as schema from './schema/sqlite.js'\n\nexport const SCHEMA_VERSION = 1\n\nexport function defaultDataDir(): string {\n return process.env.NOMNOMTOKENS_HOME ?? join(homedir(), '.nomnomtokens')\n}\n\nexport function defaultDbPath(): string {\n return join(defaultDataDir(), 'data.db')\n}\n\n/**\n * DDL is hand-written rather than generated so that opening the database is a\n * single synchronous step with no migration runner in the npx path. The Drizzle\n * schema in schema/sqlite.ts is the query-building view of these same tables;\n * they must stay in sync, which `db.test.ts` asserts.\n */\nconst DDL = `\nCREATE TABLE IF NOT EXISTS events (\n id TEXT PRIMARY KEY,\n ts INTEGER NOT NULL,\n provider TEXT NOT NULL,\n kind TEXT NOT NULL,\n session_id TEXT,\n scope_hash TEXT NOT NULL,\n unit_label TEXT,\n qty_json TEXT NOT NULL,\n cost_usd REAL,\n meta_json TEXT NOT NULL,\n qty_total REAL NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_events_ts ON events(ts);\nCREATE INDEX IF NOT EXISTS idx_events_scope ON events(scope_hash, ts);\nCREATE INDEX IF NOT EXISTS idx_events_provider ON events(provider, ts);\nCREATE INDEX IF NOT EXISTS idx_events_session ON events(session_id, ts);\n\nCREATE TABLE IF NOT EXISTS scopes (\n scope_hash TEXT PRIMARY KEY,\n label TEXT NOT NULL,\n provider TEXT NOT NULL,\n last_seen INTEGER NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS limits (\n ts INTEGER NOT NULL,\n provider TEXT NOT NULL,\n window TEXT NOT NULL,\n used_pct REAL NOT NULL,\n resets_at INTEGER,\n PRIMARY KEY (provider, window, ts)\n);\nCREATE INDEX IF NOT EXISTS idx_limits_lookup ON limits(provider, window, ts);\n\nCREATE TABLE IF NOT EXISTS scan_state (\n source_path TEXT PRIMARY KEY,\n mtime INTEGER NOT NULL,\n size INTEGER NOT NULL,\n offset INTEGER NOT NULL\n);\n`\n\nexport interface DbHandle {\n db: ReturnType<typeof drizzle<typeof schema>>\n sqlite: BetterSqlite3.Database\n path: string\n}\n\nexport type Db = DbHandle['db']\n\nexport function openDb(path: string = defaultDbPath()): DbHandle {\n if (path !== ':memory:') mkdirSync(dirname(path), { recursive: true })\n\n const sqlite = new Database(path)\n // WAL keeps `nnt serve` reading while a scan writes — without it the dashboard\n // freezes for the duration of every scan.\n sqlite.pragma('journal_mode = WAL')\n sqlite.pragma('synchronous = NORMAL')\n sqlite.pragma('foreign_keys = ON')\n sqlite.exec(DDL)\n\n const found = (sqlite.pragma('user_version', { simple: true }) as number) ?? 0\n if (found === 0) sqlite.pragma(`user_version = ${SCHEMA_VERSION}`)\n else if (found > SCHEMA_VERSION) {\n throw new Error(\n `Database at ${path} was written by a newer nomnomtokens (schema v${found}, this build understands v${SCHEMA_VERSION}). Upgrade the CLI.`,\n )\n }\n\n const db = drizzle(sqlite, { schema })\n return { db, sqlite, path }\n}\n","import type { IngestRecord, ScanCursor, ScanState, SpendEvent } from '@nomnomtokens/core'\nimport { totalTokens } from '@nomnomtokens/core'\nimport type BetterSqlite3 from 'better-sqlite3'\n\nexport interface IngestResult {\n /** spend events seen in the source */\n events: number\n /** rows actually written (a first insert, or an upsert that raised the counts) */\n written: number\n /** events the source repeated with counts we already had — see docs/architecture.md */\n duplicates: number\n limits: number\n scopes: number\n}\n\n/**\n * Writes go through prepared statements rather than the query builder: a full\n * scan of a year of history is ~100k statements, and the builder's per-call\n * overhead is the difference between \"instant\" and \"coffee\".\n */\nexport class Repo {\n private readonly insertEvent: BetterSqlite3.Statement\n private readonly upsertScope: BetterSqlite3.Statement\n private readonly insertLimit: BetterSqlite3.Statement\n private readonly getCursor: BetterSqlite3.Statement\n private readonly setCursor: BetterSqlite3.Statement\n\n constructor(private readonly sqlite: BetterSqlite3.Database) {\n // Always upsert. JSONL gets re-read, agents restart, a request that timed out\n // returns a 200 later — without this the numbers drift within the first week.\n //\n // The `WHERE excluded.qty_total >= events.qty_total` guard exists because\n // Claude Code writes the same (requestId, message.id) several times per\n // session, and an early write can be a streaming partial with lower counts.\n // Last-write-wins would let a partial clobber the final figure.\n this.insertEvent = sqlite.prepare(`\n INSERT INTO events (id, ts, provider, kind, session_id, scope_hash, unit_label, qty_json, cost_usd, meta_json, qty_total)\n VALUES (@id, @ts, @provider, @kind, @sessionId, @scopeHash, @unitLabel, @qtyJson, @costUsd, @metaJson, @qtyTotal)\n ON CONFLICT(id) DO UPDATE SET\n ts = excluded.ts,\n provider = excluded.provider,\n kind = excluded.kind,\n session_id = excluded.session_id,\n scope_hash = excluded.scope_hash,\n unit_label = excluded.unit_label,\n qty_json = excluded.qty_json,\n cost_usd = excluded.cost_usd,\n meta_json = excluded.meta_json,\n qty_total = excluded.qty_total\n WHERE excluded.qty_total >= events.qty_total\n `)\n\n this.upsertScope = sqlite.prepare(`\n INSERT INTO scopes (scope_hash, label, provider, last_seen)\n VALUES (@scopeHash, @label, @provider, @lastSeen)\n ON CONFLICT(scope_hash) DO UPDATE SET\n label = excluded.label,\n last_seen = MAX(scopes.last_seen, excluded.last_seen)\n `)\n\n this.insertLimit = sqlite.prepare(`\n INSERT INTO limits (ts, provider, window, used_pct, resets_at)\n VALUES (@ts, @provider, @window, @usedPct, @resetsAt)\n ON CONFLICT(provider, window, ts) DO UPDATE SET\n used_pct = excluded.used_pct,\n resets_at = excluded.resets_at\n `)\n\n this.getCursor = sqlite.prepare(\n 'SELECT source_path AS sourcePath, mtime, size, offset FROM scan_state WHERE source_path = ?',\n )\n this.setCursor = sqlite.prepare(`\n INSERT INTO scan_state (source_path, mtime, size, offset)\n VALUES (@sourcePath, @mtime, @size, @offset)\n ON CONFLICT(source_path) DO UPDATE SET\n mtime = excluded.mtime, size = excluded.size, offset = excluded.offset\n `)\n }\n\n /** @returns true when the row was actually written (a lower-count duplicate is a no-op) */\n putEvent(e: SpendEvent): boolean {\n const info = this.insertEvent.run({\n id: e.id,\n ts: e.ts,\n provider: e.provider,\n kind: e.kind,\n sessionId: e.sessionId,\n scopeHash: e.scopeHash,\n unitLabel: e.unitLabel,\n qtyJson: JSON.stringify(e.qty),\n costUsd: e.costUsd,\n metaJson: JSON.stringify(e.meta),\n qtyTotal: e.kind === 'tokens'\n ? totalTokens(e.qty)\n : Object.values(e.qty).reduce((a, b) => a + b, 0),\n })\n return info.changes > 0\n }\n\n /** Bulk ingest inside one transaction. Returns counts for `nnt scan` output. */\n ingest(records: Iterable<IngestRecord>): IngestResult {\n const result: IngestResult = { events: 0, written: 0, duplicates: 0, limits: 0, scopes: 0 }\n\n const run = this.sqlite.transaction((batch: IngestRecord[]) => {\n for (const rec of batch) {\n if (rec.type === 'event') {\n result.events += 1\n if (this.putEvent(rec.event)) result.written += 1\n else result.duplicates += 1\n } else if (rec.type === 'limit') {\n this.insertLimit.run(rec.limit)\n result.limits += 1\n } else {\n this.upsertScope.run({\n scopeHash: rec.scopeHash,\n label: rec.label,\n provider: rec.provider,\n lastSeen: Date.now(),\n })\n result.scopes += 1\n }\n }\n })\n\n // chunk so a very large scan doesn't hold one enormous transaction open\n let batch: IngestRecord[] = []\n for (const rec of records) {\n batch.push(rec)\n if (batch.length >= 5000) {\n run(batch)\n batch = []\n }\n }\n if (batch.length > 0) run(batch)\n\n return result\n }\n\n scanState(): ScanState {\n return {\n get: (sourcePath: string) => this.getCursor.get(sourcePath) as ScanCursor | undefined,\n set: (cursor: ScanCursor) => {\n this.setCursor.run(cursor)\n },\n }\n }\n\n latestEventTs(): number | null {\n const row = this.sqlite.prepare('SELECT MAX(ts) AS ts FROM events').get() as { ts: number | null }\n return row?.ts ?? null\n }\n\n eventCount(): number {\n return this.sqlite.prepare('SELECT COUNT(*) AS c FROM events').pluck().get() as number\n }\n\n /**\n * Collapse Cursor Auto-mode placeholders (`default`, `default,default,…`)\n * into a null unit_label so the UI shows a single \"unknown\" bucket.\n */\n repairPlaceholderLabels(): number {\n const rows = this.sqlite.prepare(\n `SELECT DISTINCT unit_label AS label FROM events WHERE unit_label IS NOT NULL`,\n ).all() as Array<{ label: string }>\n\n let changes = 0\n const update = this.sqlite.prepare(\n `UPDATE events SET unit_label = NULL WHERE unit_label = ?`,\n )\n const run = this.sqlite.transaction(() => {\n for (const { label } of rows) {\n if (!isDefaultPlaceholderLabel(label)) continue\n changes += update.run(label).changes\n }\n })\n run()\n return changes\n }\n}\n\n/** True when a stored model id is only Cursor's Auto `default` (possibly repeated). */\nfunction isDefaultPlaceholderLabel(label: string): boolean {\n const parts = label.split(',').map(p => p.trim().toLowerCase()).filter(Boolean)\n return parts.length > 0 && parts.every(p => p === 'default')\n}\n","import type BetterSqlite3 from 'better-sqlite3'\nimport type { Granularity, LimitSnapshot } from '@nomnomtokens/core'\n\n/**\n * The read layer. Aggregation runs in SQL rather than in JS: the dashboard has\n * to stay responsive over a year of history, and pulling 100k rows into the\n * Nitro process to sum them in a loop does not.\n */\n\nexport interface Filters {\n /** unix ms, inclusive */\n from?: number\n /** unix ms, exclusive */\n to?: number\n provider?: string[]\n scopeHash?: string[]\n sessionId?: string\n /** tokens don't add up with minutes — the UI always pins a kind before summing */\n kind?: string\n}\n\ninterface Where { sql: string, params: Record<string, unknown> }\n\nfunction buildWhere(f: Filters, prefix = 'e'): Where {\n const clauses: string[] = []\n const params: Record<string, unknown> = {}\n\n if (f.from !== undefined) {\n clauses.push(`${prefix}.ts >= @from`)\n params.from = f.from\n }\n if (f.to !== undefined) {\n clauses.push(`${prefix}.ts < @to`)\n params.to = f.to\n }\n if (f.kind) {\n clauses.push(`${prefix}.kind = @kind`)\n params.kind = f.kind\n }\n if (f.sessionId) {\n clauses.push(`${prefix}.session_id = @sessionId`)\n params.sessionId = f.sessionId\n }\n // named parameters can't hold a list, so these are expanded positionally into\n // uniquely-named placeholders rather than interpolated\n if (f.provider?.length) {\n const names = f.provider.map((v, i) => {\n params[`prov${i}`] = v\n return `@prov${i}`\n })\n clauses.push(`${prefix}.provider IN (${names.join(', ')})`)\n }\n if (f.scopeHash?.length) {\n const names = f.scopeHash.map((v, i) => {\n params[`scope${i}`] = v\n return `@scope${i}`\n })\n clauses.push(`${prefix}.scope_hash IN (${names.join(', ')})`)\n }\n\n return { sql: clauses.length ? `WHERE ${clauses.join(' AND ')}` : '', params }\n}\n\n/** SQLite has no date_trunc; these are the local-time bucket expressions. */\nconst BUCKET: Record<Granularity, string> = {\n hour: `strftime('%Y-%m-%dT%H:00:00', e.ts / 1000, 'unixepoch', 'localtime')`,\n day: `strftime('%Y-%m-%dT00:00:00', e.ts / 1000, 'unixepoch', 'localtime')`,\n week: `strftime('%Y-%m-%dT00:00:00', e.ts / 1000, 'unixepoch', 'localtime', 'weekday 1', '-7 days')`,\n month: `strftime('%Y-%m-01T00:00:00', e.ts / 1000, 'unixepoch', 'localtime')`,\n}\n\n/**\n * Sums of individual token buckets. `qty_json` is JSON rather than columns\n * because the contract is provider-agnostic, so the numbers come back out with\n * json_extract. SQLite's JSON1 handles this fine at our row counts.\n */\nconst QTY_SUMS = `\n COALESCE(SUM(json_extract(e.qty_json, '$.in')), 0) AS qtyIn,\n COALESCE(SUM(json_extract(e.qty_json, '$.out')), 0) AS qtyOut,\n COALESCE(SUM(json_extract(e.qty_json, '$.cacheCreate')), 0) AS qtyCacheCreate,\n COALESCE(SUM(json_extract(e.qty_json, '$.cacheCreate1h')), 0) AS qtyCacheCreate1h,\n COALESCE(SUM(json_extract(e.qty_json, '$.cacheRead')), 0) AS qtyCacheRead\n`\n\nconst TOTALS = `\n COALESCE(SUM(e.cost_usd), 0) AS costUsd,\n SUM(CASE WHEN e.cost_usd IS NULL THEN 1 ELSE 0 END) AS unpricedEvents,\n COALESCE(SUM(e.qty_total), 0) AS tokens,\n COUNT(*) AS events,\n COUNT(DISTINCT e.session_id) AS sessions,\n ${QTY_SUMS}\n`\n\nexport interface TotalsRow {\n costUsd: number\n unpricedEvents: number\n tokens: number\n events: number\n sessions: number\n qtyIn: number\n qtyOut: number\n qtyCacheCreate: number\n qtyCacheCreate1h: number\n qtyCacheRead: number\n}\n\nexport class Queries {\n constructor(private readonly sqlite: BetterSqlite3.Database) {}\n\n totals(f: Filters = {}): TotalsRow {\n const w = buildWhere(f)\n return this.sqlite\n .prepare(`SELECT ${TOTALS} FROM events e ${w.sql}`)\n .get(w.params) as TotalsRow\n }\n\n /**\n * Time series, optionally split by a dimension so the Timeline screen can\n * stack by model without N round trips.\n */\n series(\n granularity: Granularity,\n f: Filters = {},\n groupBy?: 'unitLabel' | 'provider' | 'scopeHash',\n ): Array<TotalsRow & { bucket: string, group: string | null }> {\n const w = buildWhere(f)\n const col = groupBy === 'unitLabel'\n ? 'e.unit_label'\n : groupBy === 'provider'\n ? 'e.provider'\n : groupBy === 'scopeHash' ? 'e.scope_hash' : null\n\n const groupSelect = col ? `${col} AS \"group\",` : `NULL AS \"group\",`\n const groupClause = col ? `, ${col}` : ''\n\n return this.sqlite.prepare(`\n SELECT ${BUCKET[granularity]} AS bucket, ${groupSelect} ${TOTALS}\n FROM events e ${w.sql}\n GROUP BY bucket${groupClause}\n ORDER BY bucket ASC\n `).all(w.params) as Array<TotalsRow & { bucket: string, group: string | null }>\n }\n\n /** weekday (0=Sunday) x hour grid for the Timeline heatmap. */\n heatmap(f: Filters = {}): Array<{ weekday: number, hour: number, costUsd: number, tokens: number, events: number }> {\n const w = buildWhere(f)\n return this.sqlite.prepare(`\n SELECT\n CAST(strftime('%w', e.ts / 1000, 'unixepoch', 'localtime') AS INTEGER) AS weekday,\n CAST(strftime('%H', e.ts / 1000, 'unixepoch', 'localtime') AS INTEGER) AS hour,\n COALESCE(SUM(e.cost_usd), 0) AS costUsd,\n COALESCE(SUM(e.qty_total), 0) AS tokens,\n COUNT(*) AS events\n FROM events e ${w.sql}\n GROUP BY weekday, hour\n `).all(w.params) as Array<{ weekday: number, hour: number, costUsd: number, tokens: number, events: number }>\n }\n\n byScope(f: Filters = {}): Array<TotalsRow & { scopeHash: string, label: string | null, lastSeen: number | null }> {\n const w = buildWhere(f)\n return this.sqlite.prepare(`\n SELECT e.scope_hash AS scopeHash, s.label AS label, s.last_seen AS lastSeen, ${TOTALS}\n FROM events e\n LEFT JOIN scopes s ON s.scope_hash = e.scope_hash\n ${w.sql}\n GROUP BY e.scope_hash\n ORDER BY costUsd DESC\n `).all(w.params) as Array<TotalsRow & { scopeHash: string, label: string | null, lastSeen: number | null }>\n }\n\n byProvider(f: Filters = {}): Array<TotalsRow & { provider: string }> {\n const w = buildWhere(f)\n return this.sqlite.prepare(`\n SELECT e.provider AS provider, ${TOTALS}\n FROM events e ${w.sql}\n GROUP BY e.provider\n ORDER BY costUsd DESC\n `).all(w.params) as Array<TotalsRow & { provider: string }>\n }\n\n byUnitLabel(f: Filters = {}): Array<TotalsRow & { unitLabel: string | null }> {\n const w = buildWhere(f)\n return this.sqlite.prepare(`\n SELECT e.unit_label AS unitLabel, ${TOTALS}\n FROM events e ${w.sql}\n GROUP BY e.unit_label\n ORDER BY costUsd DESC\n `).all(w.params) as Array<TotalsRow & { unitLabel: string | null }>\n }\n\n sessions(f: Filters = {}, limit = 200): Array<TotalsRow & {\n sessionId: string\n scopeHash: string\n label: string | null\n startedAt: number\n endedAt: number\n }> {\n const w = buildWhere(f)\n const params = { ...w.params, limit }\n return this.sqlite.prepare(`\n SELECT\n e.session_id AS sessionId,\n MIN(e.scope_hash) AS scopeHash,\n MIN(e.ts) AS startedAt,\n MAX(e.ts) AS endedAt,\n ${TOTALS}\n FROM events e\n ${w.sql}${w.sql ? ' AND' : 'WHERE'} e.session_id IS NOT NULL\n GROUP BY e.session_id\n ORDER BY endedAt DESC\n LIMIT @limit\n `).all(params).map((row) => {\n const r = row as TotalsRow & { sessionId: string, scopeHash: string, startedAt: number, endedAt: number }\n const scope = this.sqlite\n .prepare('SELECT label FROM scopes WHERE scope_hash = ?')\n .pluck()\n .get(r.scopeHash) as string | undefined\n return { ...r, label: scope ?? null }\n })\n }\n\n /** Raw events for one session, for the drill-down timeline. */\n sessionEvents(sessionId: string, limit = 2000): Array<{\n id: string\n ts: number\n unitLabel: string | null\n costUsd: number | null\n qty: Record<string, number>\n meta: Record<string, number>\n }> {\n return this.sqlite.prepare(`\n SELECT id, ts, unit_label AS unitLabel, cost_usd AS costUsd, qty_json AS qtyJson, meta_json AS metaJson\n FROM events WHERE session_id = ? ORDER BY ts ASC LIMIT ?\n `).all(sessionId, limit).map((row) => {\n const r = row as { id: string, ts: number, unitLabel: string | null, costUsd: number | null, qtyJson: string, metaJson: string }\n return {\n id: r.id,\n ts: r.ts,\n unitLabel: r.unitLabel,\n costUsd: r.costUsd,\n qty: JSON.parse(r.qtyJson) as Record<string, number>,\n meta: JSON.parse(r.metaJson) as Record<string, number>,\n }\n })\n }\n\n limitSnapshots(provider?: string, window?: string, since?: number): LimitSnapshot[] {\n const clauses: string[] = []\n const params: Record<string, unknown> = {}\n if (provider) {\n clauses.push('provider = @provider')\n params.provider = provider\n }\n if (window) {\n clauses.push('window = @window')\n params.window = window\n }\n if (since !== undefined) {\n clauses.push('ts >= @since')\n params.since = since\n }\n const where = clauses.length ? `WHERE ${clauses.join(' AND ')}` : ''\n return this.sqlite.prepare(`\n SELECT ts, provider, window, used_pct AS usedPct, resets_at AS resetsAt\n FROM limits ${where} ORDER BY ts ASC\n `).all(params) as LimitSnapshot[]\n }\n\n /** Distinct (provider, window) pairs that have any limit history. */\n limitWindows(): Array<{ provider: string, window: string }> {\n return this.sqlite\n .prepare('SELECT DISTINCT provider, window FROM limits ORDER BY provider, window')\n .all() as Array<{ provider: string, window: string }>\n }\n\n scopeLabels(): Array<{ scopeHash: string, label: string, provider: string, lastSeen: number }> {\n return this.sqlite.prepare(`\n SELECT scope_hash AS scopeHash, label, provider, last_seen AS lastSeen\n FROM scopes ORDER BY last_seen DESC\n `).all() as Array<{ scopeHash: string, label: string, provider: string, lastSeen: number }>\n }\n\n /**\n * Lines the agent changed while earning the spend in `f`.\n *\n * Read from token-kind events, where the JSONL parser attributes each diff to\n * the turn that produced it, so this works with no status line hook\n * installed. `meta` is numbers-only by contract, so json_extract is safe here.\n */\n lineTotals(f: Filters = {}): { added: number, removed: number } {\n const w = buildWhere(f)\n const row = this.sqlite.prepare(`\n SELECT\n COALESCE(SUM(json_extract(e.meta_json, '$.linesAdded')), 0) AS added,\n COALESCE(SUM(json_extract(e.meta_json, '$.linesRemoved')), 0) AS removed\n FROM events e ${w.sql}\n `).get(w.params) as { added: number, removed: number }\n return row\n }\n\n /** Bounds of the whole dataset — drives the empty state and default range. */\n bounds(): { first: number | null, last: number | null, events: number } {\n return this.sqlite\n .prepare('SELECT MIN(ts) AS first, MAX(ts) AS last, COUNT(*) AS events FROM events')\n .get() as { first: number | null, last: number | null, events: number }\n }\n}\n","/** Terminal formatting helpers. No dependency — colours are eight escape codes. */\n\nconst ESC = '\u001b'\nconst useColor = process.stdout.isTTY && process.env.NO_COLOR === undefined\n\nconst wrap = (code: string) => (s: string) =>\n useColor ? `${ESC}[${code}m${s}${ESC}[0m` : s\n\nexport const c = {\n bold: wrap('1'),\n dim: wrap('2'),\n red: wrap('31'),\n green: wrap('32'),\n yellow: wrap('33'),\n blue: wrap('34'),\n magenta: wrap('35'),\n cyan: wrap('36'),\n}\n\nexport function usd(n: number | null | undefined): string {\n if (n === null || n === undefined) return '—'\n if (n === 0) return '$0.00'\n if (n < 0.01) return `$${n.toFixed(4)}`\n return `$${n.toFixed(2)}`\n}\n\nexport function compactNumber(n: number): string {\n const abs = Math.abs(n)\n if (abs >= 1e9) return `${(n / 1e9).toFixed(1)}B`\n if (abs >= 1e6) return `${(n / 1e6).toFixed(1)}M`\n if (abs >= 1e3) return `${(n / 1e3).toFixed(1)}k`\n return String(Math.round(n))\n}\n\nexport function duration(ms: number): string {\n if (ms < 1000) return `${Math.round(ms)}ms`\n return `${(ms / 1000).toFixed(1)}s`\n}\n\nexport function pct(n: number | null | undefined): string {\n return n === null || n === undefined ? '—' : `${n.toFixed(1)}%`\n}\n\nexport const MASCOT = String.raw`\n (\\_/)\n ( o.o ) nom nom nom\n > ^ <\n`\n","import { existsSync, readFileSync, statSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { claudeProjectsDir, cursorStateDbPath, detectAdapters } from '@nomnomtokens/adapters'\nimport { defaultDbPath, openDb, Queries } from '@nomnomtokens/db'\nimport { c, compactNumber, usd } from '../format.js'\n\n/** `nnt doctor` answers \"why is the dashboard empty?\" without reading source. */\n\nfunction check(ok: boolean, label: string, detail?: string): void {\n const mark = ok ? c.green('✔') : c.yellow('✗')\n console.log(`${mark} ${label}${detail ? c.dim(` ${detail}`) : ''}`)\n}\n\nexport async function doctor(opts: { db?: string } = {}): Promise<void> {\n console.log(c.bold('nomnomtokens doctor'))\n console.log()\n\n console.log(c.bold('Sources'))\n const projects = claudeProjectsDir()\n check(existsSync(projects), 'Claude Code transcripts', projects)\n\n const cursorDb = cursorStateDbPath()\n check(existsSync(cursorDb), 'Cursor state database', cursorDb)\n\n const adapters = await detectAdapters()\n check(adapters.length > 0, `${adapters.length} adapter(s) detected`, adapters.map(a => a.name).join(', ') || 'none')\n\n console.log()\n console.log(c.bold('Status line'))\n const settingsFile = join(homedir(), '.claude', 'settings.json')\n let statusLineCommand: string | undefined\n if (existsSync(settingsFile)) {\n try {\n const parsed = JSON.parse(readFileSync(settingsFile, 'utf8')) as {\n statusLine?: { command?: string }\n }\n statusLineCommand = parsed.statusLine?.command\n } catch {\n statusLineCommand = undefined\n }\n }\n const wired = statusLineCommand?.includes('nomnomtokens') ?? false\n check(wired, 'hook installed', statusLineCommand ?? 'not configured — run `nnt init`')\n if (!wired) {\n console.log(c.dim(' Without it: history still works, but limits and live updates do not.'))\n }\n\n console.log()\n console.log(c.bold('Store'))\n const dbPath = opts.db ?? defaultDbPath()\n const exists = existsSync(dbPath)\n check(exists, 'database', exists ? `${dbPath} (${(statSync(dbPath).size / 1e6).toFixed(1)} MB)` : `${dbPath} — run \\`nnt scan\\``)\n\n if (exists) {\n const { sqlite } = openDb(dbPath)\n const q = new Queries(sqlite)\n const bounds = q.bounds()\n const totals = q.totals({ kind: 'tokens' })\n const windows = q.limitWindows()\n\n check(bounds.events > 0, `${bounds.events} events`, bounds.first\n ? `${new Date(bounds.first).toISOString().slice(0, 10)} → ${new Date(bounds.last!).toISOString().slice(0, 10)}`\n : 'empty — run `nnt scan`')\n console.log(c.dim(` lifetime: ${usd(totals.costUsd)}, ${compactNumber(totals.tokens)} tokens, ${totals.sessions} sessions`))\n\n if (totals.unpricedEvents > 0) {\n check(false, `${totals.unpricedEvents} events could not be priced`, 'unknown model id — see packages/core/src/pricing.ts')\n }\n check(windows.length > 0, 'limit history', windows.length > 0\n ? windows.map(w => `${w.provider}/${w.window}`).join(', ')\n : 'none yet — the status line hook has not fired')\n\n sqlite.close()\n }\n\n console.log()\n console.log(c.dim('Nothing above ever leaves this machine. See docs/privacy.md.'))\n}\n","import { copyFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { dirname, join } from 'node:path'\nimport { c } from '../format.js'\n\n/**\n * Wire the statusline hook into ~/.claude/settings.json.\n *\n * We are editing a file the user owns and that another program reads on every\n * keystroke, so: back it up, preserve unknown keys, refuse to clobber an\n * existing statusLine without --force, and print exactly what changed.\n */\n\nexport interface InitOptions {\n settings?: string\n force?: boolean\n /** print the change without writing it */\n dryRun?: boolean\n}\n\nfunction settingsPath(override?: string): string {\n return override ?? join(homedir(), '.claude', 'settings.json')\n}\n\ninterface ClaudeSettings {\n statusLine?: { type?: string, command?: string, padding?: number }\n [key: string]: unknown\n}\n\nexport function init(opts: InitOptions = {}): void {\n const path = settingsPath(opts.settings)\n const command = 'npx -y nomnomtokens statusline'\n\n let settings: ClaudeSettings = {}\n if (existsSync(path)) {\n const text = readFileSync(path, 'utf8')\n try {\n settings = JSON.parse(text) as ClaudeSettings\n } catch {\n console.error(c.red(`${path} is not valid JSON — refusing to overwrite it.`))\n console.error(c.dim('Fix the file (or pass --settings elsewhere) and run `nnt init` again.'))\n process.exitCode = 1\n return\n }\n }\n\n const existing = settings.statusLine?.command\n if (existing && existing !== command && !opts.force) {\n console.error(c.yellow('You already have a status line configured:'))\n console.error(` ${existing}`)\n console.error()\n console.error('nomnomtokens can capture limits without owning the status line — it only')\n console.error('needs to be invoked with the session JSON. Either:')\n console.error(` • add ${c.cyan('| npx -y nomnomtokens statusline')} to your own script, or`)\n console.error(` • run ${c.cyan('nnt init --force')} to replace it.`)\n process.exitCode = 1\n return\n }\n\n if (existing === command) {\n console.log(c.green('Already wired up.'))\n console.log(c.dim(` ${path} -> statusLine.command = ${command}`))\n return\n }\n\n settings.statusLine = { type: 'command', command, padding: 0 }\n const next = `${JSON.stringify(settings, null, 2)}\\n`\n\n if (opts.dryRun) {\n console.log(c.dim(`would write ${path}:`))\n console.log(next)\n return\n }\n\n mkdirSync(dirname(path), { recursive: true })\n if (existsSync(path)) {\n const backup = `${path}.nnt-backup`\n copyFileSync(path, backup)\n console.log(c.dim(`backed up ${path} -> ${backup}`))\n }\n writeFileSync(path, next, 'utf8')\n\n console.log(c.green('Status line wired up.'))\n console.log(c.dim(` ${path} -> statusLine.command = ${command}`))\n console.log()\n console.log('Restart Claude Code, then run `nnt serve` to open the dashboard.')\n console.log(c.dim('Limits and live updates only start flowing once the hook has fired once.'))\n}\n","import { detectAdapters } from '@nomnomtokens/adapters'\nimport type { IngestRecord } from '@nomnomtokens/core'\nimport { openDb, Queries, Repo } from '@nomnomtokens/db'\nimport { bucketStart } from '@nomnomtokens/core'\nimport { c, compactNumber, duration, usd } from '../format.js'\n\nexport interface ScanOptions {\n db?: string\n watch?: boolean\n quiet?: boolean\n}\n\nexport async function scan(opts: ScanOptions = {}): Promise<void> {\n const started = Date.now()\n const { db: _drizzle, sqlite, path } = openDb(opts.db)\n const repo = new Repo(sqlite)\n const queries = new Queries(sqlite)\n const state = repo.scanState()\n\n const adapters = await detectAdapters()\n if (adapters.length === 0) {\n console.error(c.yellow('No sources detected on this machine.'))\n console.error(c.dim('Looks for ~/.claude/projects and Cursor state.vscdb. Run `nnt doctor`.'))\n process.exitCode = 1\n return\n }\n\n for (const adapter of adapters) {\n // Drained in chunks so a first scan of a year of logs never materialises in\n // memory, and so a Ctrl-C halfway through still leaves the earlier chunks\n // committed with their scan cursors.\n const records: AsyncIterable<IngestRecord> = adapter.scan(state)\n const result = { events: 0, written: 0, duplicates: 0, limits: 0, scopes: 0 }\n // Row count before/after is the only honest measure of \"new\": an upsert\n // that rewrites an identical row still reports a change, so `written`\n // alone would count Claude Code's repeated turns as fresh data.\n const rowsBefore = repo.eventCount()\n let batch: IngestRecord[] = []\n\n const flush = () => {\n if (batch.length === 0) return\n const r = repo.ingest(batch)\n result.events += r.events\n result.written += r.written\n result.duplicates += r.duplicates\n result.limits += r.limits\n result.scopes += r.scopes\n batch = []\n }\n\n for await (const rec of records) {\n batch.push(rec)\n if (batch.length >= 5000) flush()\n }\n flush()\n\n const added = repo.eventCount() - rowsBefore\n if (!opts.quiet) {\n const repeats = result.events - added\n console.log(\n `${c.cyan(adapter.name)} `\n + `${c.bold(String(added))} new `\n + c.dim(\n `${result.events} seen, ${repeats} repeated by the source, `\n + `${result.limits} limits, ${result.scopes} scopes`,\n ),\n )\n }\n }\n\n const repaired = repo.repairPlaceholderLabels()\n if (!opts.quiet && repaired > 0) {\n console.log(c.dim(`normalized ${repaired} Cursor Auto placeholder label(s) → unknown`))\n }\n\n if (!opts.quiet) {\n const todayStart = bucketStart(Date.now(), 'day')\n const today = queries.totals({ from: todayStart, kind: 'tokens' })\n const all = queries.bounds()\n\n console.log()\n console.log(\n `${c.bold('Eaten today')} ${c.green(usd(today.costUsd))} `\n + c.dim(`${compactNumber(today.tokens)} tokens, ${today.sessions} sessions`),\n )\n if (today.unpricedEvents > 0) {\n console.log(c.dim(` (${today.unpricedEvents} events had no price and are excluded from cost)`))\n }\n console.log(\n c.dim(`${all.events} events in ${path} — scanned in ${duration(Date.now() - started)}`),\n )\n }\n\n if (opts.watch) {\n console.log(c.dim('\\nWatching for changes. Ctrl-C to stop.'))\n const stops = adapters\n .filter(a => a.watch)\n .map(a => a.watch!(rec => repo.ingest([rec])))\n await new Promise<void>((resolve) => {\n process.on('SIGINT', () => {\n stops.forEach(stop => stop())\n resolve()\n })\n })\n }\n\n sqlite.close()\n}\n","import { spawn } from 'node:child_process'\nimport { existsSync } from 'node:fs'\nimport { dirname, join, resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { defaultDbPath } from '@nomnomtokens/db'\nimport { c, MASCOT } from '../format.js'\nimport { scan } from './scan.js'\n\nexport interface ServeOptions {\n port?: number\n db?: string\n open?: boolean\n /** skip the catch-up scan before starting */\n noScan?: boolean\n}\n\nconst here = dirname(fileURLToPath(import.meta.url))\n\n/**\n * Locate the built Nuxt server.\n *\n * Three layouts have to work: the published package (`web/` shipped next to\n * `dist/`), the workspace running from source via tsx, and the workspace\n * running from `dist/`. Rather than count `..` segments per layout — which is\n * how this broke the first time — walk up and look for either shape.\n */\nfunction findBuiltServer(): string | null {\n let dir = here\n for (let depth = 0; depth < 8; depth++) {\n const candidates = [\n join(dir, 'web', 'server', 'index.mjs'),\n join(dir, 'apps', 'web', '.output', 'server', 'index.mjs'),\n ]\n const found = candidates.find(existsSync)\n if (found) return found\n\n const parent = resolve(dir, '..')\n if (parent === dir) break\n dir = parent\n }\n return null\n}\n\nfunction openBrowser(url: string): void {\n const cmd = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open'\n spawn(cmd, [url], { stdio: 'ignore', detached: true, shell: process.platform === 'win32' }).unref()\n}\n\nexport async function serve(opts: ServeOptions = {}): Promise<void> {\n const port = opts.port ?? 4269\n const dbPath = opts.db ?? defaultDbPath()\n\n // Catch up on history before the browser opens, so the first paint has data\n // in it rather than an empty state that fills in a second later.\n if (!opts.noScan) {\n console.log(c.dim('catching up on history…'))\n await scan({ db: dbPath, quiet: true })\n // Having nothing to scan is a failure for `nnt scan` but not for `serve`:\n // a first-run machine with no agent history should still get a dashboard\n // and its empty state, and should still exit 0 when you close it.\n process.exitCode = undefined\n }\n\n const entry = findBuiltServer()\n if (!entry) {\n console.error(c.yellow('No built dashboard found.'))\n console.error(c.dim('In this repo, run: pnpm --filter @nomnomtokens/web build'))\n console.error(c.dim('or for live reload: pnpm dev'))\n process.exitCode = 1\n return\n }\n\n const url = `http://localhost:${port}`\n console.log(MASCOT)\n console.log(` ${c.bold('nomnomtokens')} ${c.dim('→')} ${c.cyan(url)}`)\n console.log(c.dim(` reading ${dbPath}`))\n console.log()\n\n const child = spawn(process.execPath, [entry], {\n stdio: 'inherit',\n env: {\n ...process.env,\n PORT: String(port),\n NITRO_PORT: String(port),\n NOMNOMTOKENS_DB: dbPath,\n },\n })\n\n if (opts.open !== false) setTimeout(() => openBrowser(url), 600)\n\n await new Promise<void>((resolvePromise) => {\n child.on('exit', () => resolvePromise())\n process.on('SIGINT', () => child.kill('SIGINT'))\n })\n}\n","import type { StatuslinePayload } from '@nomnomtokens/adapters'\nimport { parseStatusline } from '@nomnomtokens/adapters'\nimport { moodFor } from '@nomnomtokens/core'\nimport { openDb, Repo } from '@nomnomtokens/db'\nimport { compactNumber, usd } from '../format.js'\n\n/**\n * `nnt statusline` is both an ingest hook and a real status line.\n *\n * Claude Code pipes its session JSON to whatever `statusLine.command` points\n * at and renders the stdout. We use that call to capture the two things the\n * transcript never contains — subscription limits and per-session line counts —\n * and pay the user back by printing something worth having in the bar.\n *\n * It must be fast and it must never fail loudly: a hook that throws puts an\n * error in the user's status bar on every render.\n */\n\nconst MOOD_FACE: Record<string, string> = {\n hungry: '(・_・)',\n content: '(^_^)',\n full: '(^u^)',\n stuffed: '(>_<)',\n overstuffed: '(x_x)',\n}\n\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = []\n for await (const chunk of process.stdin) chunks.push(chunk as Buffer)\n return Buffer.concat(chunks).toString('utf8')\n}\n\nexport interface StatuslineOptions {\n db?: string\n /** skip the write and only render — useful for testing the output format */\n dryRun?: boolean\n}\n\nexport async function statusline(opts: StatuslineOptions = {}): Promise<void> {\n let payload: StatuslinePayload\n try {\n payload = JSON.parse(await readStdin()) as StatuslinePayload\n } catch {\n // No payload means we were run by hand. Say so instead of printing nothing.\n process.stdout.write('nomnomtokens: expected Claude Code session JSON on stdin\\n')\n return\n }\n\n const limits = payload.rate_limits\n const fiveHour = limits?.five_hour?.used_percentage ?? null\n const sevenDay = limits?.seven_day?.used_percentage ?? null\n const cost = payload.cost?.total_cost_usd ?? null\n const ctx = payload.context_window?.used_percentage ?? null\n\n // Render first, persist second: the user's status bar should not wait on a\n // database write, and a locked DB must never blank the bar.\n const parts: string[] = []\n parts.push(MOOD_FACE[moodFor(Math.max(fiveHour ?? 0, sevenDay ?? 0))] ?? '(^_^)')\n if (cost !== null) parts.push(usd(cost))\n if (ctx !== null) parts.push(`ctx ${Math.round(ctx)}%`)\n if (fiveHour !== null) parts.push(`5h ${Math.round(fiveHour)}%`)\n if (sevenDay !== null) parts.push(`7d ${Math.round(sevenDay)}%`)\n\n const lines = (payload.cost?.total_lines_added ?? 0) + (payload.cost?.total_lines_removed ?? 0)\n if (lines > 0) parts.push(`${compactNumber(lines)} lines`)\n\n process.stdout.write(`${parts.join(' ')}\\n`)\n\n if (opts.dryRun) return\n\n try {\n const { sqlite } = openDb(opts.db)\n const repo = new Repo(sqlite)\n repo.ingest(await parseStatusline(payload))\n sqlite.close()\n } catch {\n // Swallowed on purpose. Losing one statusline sample is invisible; an\n // exception here would print a stack trace into the status bar forever.\n }\n}\n","#!/usr/bin/env node\nimport { readFileSync } from 'node:fs'\nimport { dirname, join, resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { Command } from 'commander'\nimport { doctor } from './commands/doctor.js'\nimport { init } from './commands/init.js'\nimport { scan } from './commands/scan.js'\nimport { serve } from './commands/serve.js'\nimport { statusline } from './commands/statusline.js'\n\n/** Walk up from this file until we find the published root package.json. */\nfunction packageVersion(): string {\n let dir = dirname(fileURLToPath(import.meta.url))\n for (let i = 0; i < 8; i++) {\n try {\n const pkg = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8')) as {\n name?: string\n version?: string\n }\n if (pkg.name === 'nomnomtokens' && pkg.version) return pkg.version\n } catch {\n // keep walking\n }\n const parent = resolve(dir, '..')\n if (parent === dir) break\n dir = parent\n }\n return '0.0.0'\n}\n\nconst program = new Command()\n\nprogram\n .name('nnt')\n .description('nom nom nom — your agent is eating tokens. The dashboard shows exactly how many.')\n .version(packageVersion())\n .option('--db <path>', 'database file (default: ~/.nomnomtokens/data.db)')\n\nprogram\n .command('scan', { isDefault: false })\n .description('read new records from every detected source into the local store')\n .option('-w, --watch', 'stay running and ingest new records as they are written')\n .option('-q, --quiet', 'suppress the summary')\n .action(async (opts: { watch?: boolean, quiet?: boolean }) => {\n await scan({ ...opts, db: program.opts().db as string | undefined })\n })\n\nprogram\n .command('serve')\n .description('scan, then open the dashboard')\n .option('-p, --port <port>', 'port to listen on', v => Number.parseInt(v, 10), 4269)\n .option('--no-open', 'do not open a browser')\n .option('--no-scan', 'skip the catch-up scan')\n .action(async (opts: { port: number, open: boolean, scan: boolean }) => {\n await serve({\n port: opts.port,\n open: opts.open,\n noScan: !opts.scan,\n db: program.opts().db as string | undefined,\n })\n })\n\nprogram\n .command('init')\n .description('wire the statusline hook into ~/.claude/settings.json')\n .option('-f, --force', 'replace an existing status line')\n .option('-n, --dry-run', 'print the change without writing it')\n .option('--settings <path>', 'settings file to edit')\n .action((opts: { force?: boolean, dryRun?: boolean, settings?: string }) => {\n init(opts)\n })\n\nprogram\n .command('statusline')\n .description('read Claude Code session JSON on stdin; record limits and print a status line')\n .option('-n, --dry-run', 'render without writing to the store')\n .action(async (opts: { dryRun?: boolean }) => {\n await statusline({ ...opts, db: program.opts().db as string | undefined })\n })\n\nprogram\n .command('doctor')\n .description('check sources, hook wiring and the local store')\n .action(async () => {\n await doctor({ db: program.opts().db as string | undefined })\n })\n\n/**\n * `npx nomnomtokens` is the advertised entry point, so an invocation with no\n * subcommand means \"open the dashboard\" rather than \"print help at someone who\n * just wanted the dashboard\".\n *\n * That has to hold for `nnt --port 5000` too, not only for a bare `nnt` — the\n * flags belong to serve, and making the user type the word `serve` to use them\n * is the kind of papercut that gets a tool uninstalled. So: if the arguments\n * name no command and aren't asking for help, insert `serve`.\n */\nconst COMMANDS = new Set(['scan', 'serve', 'init', 'statusline', 'doctor', 'help'])\nconst META_FLAGS = new Set(['-h', '--help', '-V', '--version'])\n\nconst args = process.argv.slice(2)\nconst isImplicitServe\n = !args.some(arg => COMMANDS.has(arg))\n && !args.some(arg => META_FLAGS.has(arg))\n\nawait program.parseAsync(\n isImplicitServe ? [...process.argv.slice(0, 2), 'serve', ...args] : process.argv,\n)\n"]}
|
|
1
|
+
{"version":3,"sources":["../packages/core/src/types.ts","../packages/core/src/pricing.ts","../packages/core/src/hash.ts","../packages/core/src/aggregate.ts","../packages/core/src/forecast.ts","../packages/adapters/src/claude-code/jsonl.ts","../packages/adapters/src/claude-code/statusline.ts","../packages/adapters/src/claude-code/index.ts","../packages/adapters/src/codex/parse.ts","../packages/adapters/src/codex/paths.ts","../packages/adapters/src/codex/index.ts","../packages/adapters/src/cursor/paths.ts","../packages/adapters/src/cursor/db.ts","../packages/adapters/src/cursor/parse.ts","../packages/adapters/src/cursor/index.ts","../packages/adapters/src/index.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/entity.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/logger.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/table.utils.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/table.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/column.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/column-builder.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/pg-core/columns/enum.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/subquery.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/tracing.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/view-common.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sql/sql.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/utils.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/pg-core/table.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/pg-core/primary-keys.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sql/expressions/conditions.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sql/expressions/select.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/relations.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/alias.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/selection-proxy.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/query-promise.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/foreign-keys.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/unique-constraint.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/columns/common.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/columns/blob.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/columns/custom.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/columns/integer.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/columns/numeric.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/columns/real.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/columns/text.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/columns/all.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/table.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/indexes.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/primary-keys.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/utils.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/query-builders/delete.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/casing.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/errors.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/view-base.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/dialect.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/query-builders/query-builder.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/query-builders/select.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/query-builders/query-builder.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/query-builders/insert.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/query-builders/update.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/query-builders/count.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/query-builders/query.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/query-builders/raw.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/db.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/cache/core/cache.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/sqlite-core/session.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/better-sqlite3/session.ts","../node_modules/.pnpm/drizzle-orm@0.45.2_@types+better-sqlite3@7.6.13_better-sqlite3@13.0.2/node_modules/src/better-sqlite3/driver.ts","../packages/db/src/schema/sqlite.ts","../packages/db/src/client.ts","../packages/db/src/repo.ts","../packages/db/src/queries.ts","../packages/cli/src/format.ts","../packages/cli/src/commands/doctor.ts","../packages/cli/src/commands/init.ts","../packages/cli/src/commands/scan.ts","../packages/cli/src/commands/serve.ts","../packages/cli/src/commands/statusline.ts","../packages/cli/src/index.ts"],"names":["num","parseLimits","join","homedir","readLinesFrom","createReadStream","StringDecoder","readdir","existsSync","stat","Database","scopeHash","events","sql","param","placeholder","name","SQL","result","index","c","relations","primaryKey","ForeignKeyBuilder","ForeignKey","uniqueKeyName","ref","actions","InlineForeignKeys","PrimaryKeyBuilder","PrimaryKey","table","select","joinOn","field","cache","instance","drizzle","batch","readFileSync","exists","text","mkdirSync","dirname","resolve","limits","fileURLToPath"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * The two record types the core knows about. Everything else is an adapter's problem.\n *\n * Two hard rules, enforced by the types themselves:\n * 1. no free-form string fields carrying user content — no prompts, no code, no paths;\n * 2. `meta` holds numbers only, so no text can leak out through an adapter.\n */\n\n/** A unit of spend. Not tied to AI: `kind` says what exactly was consumed. */\nexport interface SpendEvent {\n /** stable deduplication key: `${provider}:${requestId}:${messageId}`, hash of a CSV row, ... */\n id: string\n /** unix ms */\n ts: number\n /** which adapter produced the event: 'claude-code' | 'codex' | 'csv' | ... */\n provider: string\n /** what we're measuring: 'tokens' | 'requests' | 'minutes' | 'currency' | ... */\n kind: string\n sessionId: string | null\n /** sha256(project path).slice(0,16); the human-readable alias lives only in the local DB */\n scopeHash: string\n /** free-form detail: model, runner type, SKU — whatever is meaningful for the provider */\n unitLabel: string | null\n /** quantities in units of `kind`; for tokens — unpacked by type */\n qty: Record<string, number>\n costUsd: number | null\n /** numbers only, never strings */\n meta: Record<string, number>\n}\n\n/** A constraint snapshot (subscription limits, CI quotas, ...) */\nexport interface LimitSnapshot {\n ts: number\n provider: string\n /** '5h' | '7d' | 'month' | ... */\n window: string\n usedPct: number\n resetsAt: number | null\n}\n\nexport type IngestRecord =\n | { type: 'event', event: SpendEvent }\n | { type: 'limit', limit: LimitSnapshot }\n | { type: 'scope', scopeHash: string, label: string, provider: string }\n\n/** Where an incremental scan left off, per source file. */\nexport interface ScanCursor {\n sourcePath: string\n mtime: number\n size: number\n offset: number\n}\n\nexport interface ScanState {\n get(sourcePath: string): ScanCursor | undefined\n set(cursor: ScanCursor): void\n}\n\nexport interface Adapter {\n name: string\n /** is there anything to read on this machine (detection by presence of dirs/config) */\n detect(): Promise<boolean>\n /** passive collection: walk the sources from the last known position */\n scan(state: ScanState): AsyncIterable<IngestRecord>\n /** active collection: subscribe to changes (watcher, http receiver) */\n watch?(emit: (r: IngestRecord) => void): () => void\n}\n\n/** Token quantity keys used by every token-kind provider. */\nexport interface TokenQty extends Record<string, number> {\n in: number\n out: number\n cacheCreate: number\n cacheCreate1h: number\n cacheRead: number\n}\n\nexport const EMPTY_TOKEN_QTY: TokenQty = {\n in: 0,\n out: 0,\n cacheCreate: 0,\n cacheCreate1h: 0,\n cacheRead: 0,\n}\n\n/** Total billable tokens for a token-kind event. */\nexport function totalTokens(qty: Record<string, number>): number {\n return (\n (qty.in ?? 0) + (qty.out ?? 0) + (qty.cacheCreate ?? 0)\n + (qty.cacheCreate1h ?? 0) + (qty.cacheRead ?? 0)\n )\n}\n","/**\n * Model price table.\n *\n * Prices are USD per million tokens, as published on platform.claude.com.\n * Modern Claude Code JSONL carries no `costUSD` field, so every cost figure in\n * nomnomtokens is computed here — which makes this table load-bearing and\n * therefore something we must be able to refresh without shipping a release.\n *\n * Strategy (see docs/architecture.md): this file is the bundled fallback. When\n * online, `nnt scan` can refresh `~/.nomnomtokens/prices.json` and that file\n * wins. Stale prices are a visible risk in the README, not a silent one.\n */\n\nexport interface ModelPrice {\n /** USD per 1M input tokens */\n input: number\n /** USD per 1M output tokens */\n output: number\n /**\n * Cache multipliers relative to `input`. The API charges 1.25x for a 5-minute\n * cache write, 2x for a 1-hour write, and 0.1x for a cache read.\n */\n cacheWrite5m?: number\n cacheWrite1h?: number\n cacheRead?: number\n}\n\nexport const DEFAULT_CACHE_MULTIPLIERS = {\n write5m: 1.25,\n write1h: 2,\n read: 0.1,\n} as const\n\n/** Keyed by canonical model id. Aliases are resolved in `resolveModelKey`. */\nexport const PRICES: Record<string, ModelPrice> = {\n 'claude-fable-5': { input: 10, output: 50 },\n 'claude-mythos-5': { input: 10, output: 50 },\n 'claude-opus-5': { input: 5, output: 25 },\n 'claude-opus-4-8': { input: 5, output: 25 },\n 'claude-opus-4-7': { input: 5, output: 25 },\n 'claude-opus-4-6': { input: 5, output: 25 },\n 'claude-opus-4-5': { input: 5, output: 25 },\n 'claude-opus-4-1': { input: 15, output: 75 },\n 'claude-opus-4-0': { input: 15, output: 75 },\n 'claude-sonnet-5': { input: 3, output: 15 },\n 'claude-sonnet-4-6': { input: 3, output: 15 },\n 'claude-sonnet-4-5': { input: 3, output: 15 },\n 'claude-sonnet-4-0': { input: 3, output: 15 },\n 'claude-haiku-4-5': { input: 1, output: 5 },\n 'claude-3-5-haiku': { input: 0.8, output: 4 },\n 'claude-3-haiku': { input: 0.25, output: 1.25 },\n\n // Cursor / Codex-routed OpenAI ids (public list prices where known; Composer is unpriced).\n // Dotted and dashed forms: resolveModelKey normalises `.` → `-`.\n 'gpt-5.6': { input: 1.75, output: 14 },\n 'gpt-5-6': { input: 1.75, output: 14 },\n 'gpt-5.6-terra': { input: 1.75, output: 14 },\n 'gpt-5-6-terra': { input: 1.75, output: 14 },\n 'gpt-5.6-luna': { input: 1.75, output: 14 },\n 'gpt-5-6-luna': { input: 1.75, output: 14 },\n 'gpt-5.5': { input: 1.25, output: 10 },\n 'gpt-5-5': { input: 1.25, output: 10 },\n 'gpt-5.4-mini': { input: 0.25, output: 2 },\n 'gpt-5-4-mini': { input: 0.25, output: 2 },\n 'gpt-5.2': { input: 1.75, output: 14 },\n 'gpt-5-2': { input: 1.75, output: 14 },\n 'gpt-5.2-codex': { input: 1.75, output: 14 },\n 'gpt-5-2-codex': { input: 1.75, output: 14 },\n 'gpt-5': { input: 1.25, output: 10 },\n 'gpt-4.1': { input: 2, output: 8 },\n 'gpt-4-1': { input: 2, output: 8 },\n 'gemini-3-flash': { input: 0.5, output: 3 },\n 'gemini-2.5-pro': { input: 1.25, output: 10 },\n 'gemini-2-5-pro': { input: 1.25, output: 10 },\n 'grok-4.5': { input: 3, output: 15 },\n 'grok-4-5': { input: 3, output: 15 },\n 'grok-code-fast-1': { input: 0.2, output: 1.5 },\n}\n\n/**\n * Claude Code writes ids like `claude-haiku-4-5-20251001` or `<synthetic>`.\n * Strip trailing date snapshots and fast-mode suffixes, then match longest-prefix.\n */\n/** `<synthetic>` and friends: client-generated messages that never hit the API. */\nexport function isSynthetic(model: string | null | undefined): boolean {\n return typeof model === 'string' && model.trim().startsWith('<')\n}\n\n/**\n * Cursor writes Anthropic ids as `claude-4.5-sonnet-thinking` rather than\n * `claude-sonnet-4-5`. Flip the family/version order when we recognise the\n * pattern so the existing Claude price rows still match.\n */\nfunction normalizeCursorClaudeId(id: string): string {\n const m = id.match(/^claude-(\\d+(?:-\\d+)*)-(sonnet|opus|haiku)(?:-.*)?$/)\n if (!m) return id\n return `claude-${m[2]}-${m[1]}`\n}\n\nexport function resolveModelKey(model: string | null | undefined): string | null {\n if (!model) return null\n const id = model.trim().toLowerCase()\n if (!id || isSynthetic(id)) return null\n\n // Cursor's `default` / proprietary Composer models have no public token price.\n // Also collapse repeated Auto placeholders: `default,default,default,default`.\n if (\n id === 'default'\n || id.startsWith('composer-')\n || id.split(',').every(p => p.trim() === 'default')\n ) {\n return null\n }\n\n const normalized = normalizeCursorClaudeId(\n id\n .replace(/^anthropic\\./, '')\n .replace(/\\./g, '-')\n .replace(/-thinking$/, '')\n .replace(/-high-thinking$/, '')\n .replace(/-high$/, '')\n .replace(/-\\d{8}$/, '')\n .replace(/-fast$/, '')\n .replace(/\\[1m\\]$/, ''),\n )\n\n if (PRICES[normalized]) return normalized\n\n // longest-prefix match handles ids we haven't catalogued yet but that share a family\n let best: string | null = null\n for (const key of Object.keys(PRICES)) {\n if (normalized.startsWith(key) && (best === null || key.length > best.length)) best = key\n }\n return best\n}\n\nexport interface PriceTable {\n get(model: string | null | undefined): ModelPrice | null\n}\n\nexport function makePriceTable(overrides: Record<string, ModelPrice> = {}): PriceTable {\n const table = { ...PRICES, ...overrides }\n return {\n get(model) {\n const key = resolveModelKey(model)\n if (!key) return null\n return table[key] ?? null\n },\n }\n}\n\nexport const defaultPrices = makePriceTable()\n\n/**\n * Cost in USD for one token-kind event. Returns null for models we cannot\n * price — showing \"unknown\" beats quietly reporting $0.\n */\nexport function costOf(\n model: string | null | undefined,\n qty: Record<string, number>,\n prices: PriceTable = defaultPrices,\n): number | null {\n // `<synthetic>` marks a message the client generated locally — an interrupt\n // notice, an error placeholder. No API call happened, so it costs exactly\n // zero. That is different from \"we don't know the price\", and conflating the\n // two makes `nnt doctor` report a problem that isn't one.\n if (isSynthetic(model)) return 0\n\n const p = prices.get(model)\n if (!p) return null\n\n const m = DEFAULT_CACHE_MULTIPLIERS\n const perToken = p.input / 1_000_000\n const outPerToken = p.output / 1_000_000\n\n return (\n (qty.in ?? 0) * perToken\n + (qty.out ?? 0) * outPerToken\n + (qty.cacheCreate ?? 0) * perToken * (p.cacheWrite5m ?? m.write5m)\n + (qty.cacheCreate1h ?? 0) * perToken * (p.cacheWrite1h ?? m.write1h)\n + (qty.cacheRead ?? 0) * perToken * (p.cacheRead ?? m.read)\n )\n}\n","/**\n * Scope hashing.\n *\n * A \"scope\" is whatever the provider considers a project. We never store the\n * path in an event — only sha256(path).slice(0,16). The readable label lives in\n * the local `scopes` table and never leaves the machine (see docs/privacy.md).\n *\n * Uses Web Crypto so this module stays isomorphic; results are memoised because\n * a scan hashes the same handful of project paths millions of times.\n */\n\nconst cache = new Map<string, string>()\n\nexport async function scopeHash(input: string): Promise<string> {\n const cached = cache.get(input)\n if (cached) return cached\n\n const bytes = new TextEncoder().encode(input)\n const digest = await globalThis.crypto.subtle.digest('SHA-256', bytes)\n const hex = Array.from(new Uint8Array(digest))\n .map(b => b.toString(16).padStart(2, '0'))\n .join('')\n .slice(0, 16)\n\n cache.set(input, hex)\n return hex\n}\n\n/** Last path segment, used as the default human-readable label. Stays local. */\nexport function scopeLabel(path: string): string {\n const cleaned = path.replace(/[/\\\\]+$/, '')\n const seg = cleaned.split(/[/\\\\]/).pop()\n return seg && seg.length > 0 ? seg : cleaned\n}\n","import type { SpendEvent } from './types.js'\nimport { totalTokens } from './types.js'\n\nexport type Granularity = 'hour' | 'day' | 'week' | 'month'\n\nexport interface Totals {\n costUsd: number\n /** null when at least one contributing event had no price */\n costComplete: boolean\n tokens: number\n qty: Record<string, number>\n events: number\n sessions: number\n}\n\nexport function emptyTotals(): Totals {\n return { costUsd: 0, costComplete: true, tokens: 0, qty: {}, events: 0, sessions: 0 }\n}\n\nexport function addEvent(t: Totals, e: SpendEvent, seenSessions?: Set<string>): Totals {\n t.events += 1\n t.tokens += totalTokens(e.qty)\n for (const [k, v] of Object.entries(e.qty)) t.qty[k] = (t.qty[k] ?? 0) + v\n if (e.costUsd === null) t.costComplete = false\n else t.costUsd += e.costUsd\n if (e.sessionId && seenSessions && !seenSessions.has(e.sessionId)) {\n seenSessions.add(e.sessionId)\n t.sessions += 1\n }\n return t\n}\n\nexport function sumEvents(events: Iterable<SpendEvent>): Totals {\n const t = emptyTotals()\n const sessions = new Set<string>()\n for (const e of events) addEvent(t, e, sessions)\n return t\n}\n\n/**\n * Bucket start in local time. Local, not UTC: \"eaten today\" has to mean the\n * user's today, or the headline number is wrong for most of the planet.\n */\nexport function bucketStart(ts: number, g: Granularity): number {\n const d = new Date(ts)\n switch (g) {\n case 'hour':\n d.setMinutes(0, 0, 0)\n return d.getTime()\n case 'day':\n d.setHours(0, 0, 0, 0)\n return d.getTime()\n case 'week': {\n d.setHours(0, 0, 0, 0)\n // ISO weeks start Monday\n const shift = (d.getDay() + 6) % 7\n d.setDate(d.getDate() - shift)\n return d.getTime()\n }\n case 'month':\n d.setHours(0, 0, 0, 0)\n d.setDate(1)\n return d.getTime()\n }\n}\n\nexport interface Point {\n ts: number\n totals: Totals\n}\n\nexport function timeSeries(events: Iterable<SpendEvent>, g: Granularity): Point[] {\n const buckets = new Map<number, { totals: Totals, sessions: Set<string> }>()\n for (const e of events) {\n const key = bucketStart(e.ts, g)\n let b = buckets.get(key)\n if (!b) {\n b = { totals: emptyTotals(), sessions: new Set() }\n buckets.set(key, b)\n }\n addEvent(b.totals, e, b.sessions)\n }\n return [...buckets.entries()]\n .sort((a, b) => a[0] - b[0])\n .map(([ts, b]) => ({ ts, totals: b.totals }))\n}\n\n/** hour-of-day x day-of-week grid, GitHub-contributions style. */\nexport interface HeatCell { weekday: number, hour: number, value: number }\n\nexport function heatmap(\n events: Iterable<SpendEvent>,\n metric: (e: SpendEvent) => number = e => e.costUsd ?? 0,\n): HeatCell[] {\n const grid = new Float64Array(7 * 24)\n for (const e of events) {\n const d = new Date(e.ts)\n grid[d.getDay() * 24 + d.getHours()]! += metric(e)\n }\n const cells: HeatCell[] = []\n for (let weekday = 0; weekday < 7; weekday++) {\n for (let hour = 0; hour < 24; hour++) {\n cells.push({ weekday, hour, value: grid[weekday * 24 + hour]! })\n }\n }\n return cells\n}\n\n/**\n * Cache hit rate — cacheRead / (cacheRead + in). The single most useful\n * efficiency number for an agent: it says how much of the context you are\n * re-reading at 10% price instead of paying full freight for.\n */\nexport function cacheHitRate(qty: Record<string, number>): number | null {\n const read = qty.cacheRead ?? 0\n const fresh = qty.in ?? 0\n const denom = read + fresh\n return denom === 0 ? null : read / denom\n}\n\n/** Cost per 1,000 changed lines — the \"what did this actually buy me\" metric. */\nexport function costPerKLines(costUsd: number, meta: Record<string, number>): number | null {\n const lines = (meta.linesAdded ?? 0) + (meta.linesRemoved ?? 0)\n return lines === 0 ? null : (costUsd / lines) * 1000\n}\n","import type { LimitSnapshot } from './types.js'\n\nexport interface Line { slope: number, intercept: number }\n\n/** Ordinary least squares. Returns null when the points can't define a line. */\nexport function linearRegression(points: Array<{ x: number, y: number }>): Line | null {\n const n = points.length\n if (n < 2) return null\n\n let sx = 0, sy = 0, sxx = 0, sxy = 0\n for (const { x, y } of points) {\n sx += x\n sy += y\n sxx += x * x\n sxy += x * y\n }\n const denom = n * sxx - sx * sx\n if (denom === 0) return null\n\n const slope = (n * sxy - sx * sy) / denom\n return { slope, intercept: (sy - slope * sx) / n }\n}\n\nexport interface LimitForecast {\n provider: string\n window: string\n usedPct: number\n /** percentage points per hour */\n burnRatePctPerHour: number\n /** unix ms when the window is projected to hit 100%, or null if it won't */\n exhaustsAt: number | null\n /** when the window resets regardless of usage */\n resetsAt: number | null\n /** true when the projection lands before the reset — i.e. you will actually hit the cap */\n willExhaustBeforeReset: boolean\n /** how many snapshots the projection is based on */\n samples: number\n}\n\n/**\n * Snapshots belonging to the current fill cycle (after the last reset).\n *\n * A reset makes usedPct fall off a cliff; charts and regressions that span that\n * discontinuity draw a fake V and invent a nonsense burn rate.\n */\nexport function currentWindowSnapshots<T extends { usedPct: number, ts: number }>(\n snapshots: T[],\n): T[] {\n if (snapshots.length === 0) return []\n const sorted = [...snapshots].sort((a, b) => a.ts - b.ts)\n let start = sorted.length - 1\n while (start > 0 && sorted[start - 1]!.usedPct <= sorted[start]!.usedPct) start -= 1\n return sorted.slice(start)\n}\n\n/**\n * Project when a limit window fills.\n *\n * Snapshots are per (provider, window) and must be sorted by ts. We regress\n * only over the current window — a reset makes usedPct fall off a cliff, and\n * fitting across that discontinuity produces a negative burn rate and a\n * confidently wrong \"you'll never hit the cap\".\n */\nexport function forecastLimit(snapshots: LimitSnapshot[], now = Date.now()): LimitForecast | null {\n if (snapshots.length === 0) return null\n\n const current = currentWindowSnapshots(snapshots)\n const last = current[current.length - 1]!\n\n const hours = (ts: number) => (ts - current[0]!.ts) / 3_600_000\n const fit = linearRegression(current.map(s => ({ x: hours(s.ts), y: s.usedPct })))\n\n const burn = fit && fit.slope > 0 ? fit.slope : 0\n let exhaustsAt: number | null = null\n if (burn > 0) {\n const hoursToFull = (100 - last.usedPct) / burn\n if (hoursToFull >= 0 && Number.isFinite(hoursToFull)) {\n exhaustsAt = now + hoursToFull * 3_600_000\n }\n }\n\n return {\n provider: last.provider,\n window: last.window,\n usedPct: last.usedPct,\n burnRatePctPerHour: burn,\n exhaustsAt,\n resetsAt: last.resetsAt,\n willExhaustBeforeReset:\n exhaustsAt !== null && (last.resetsAt === null || exhaustsAt < last.resetsAt),\n samples: current.length,\n }\n}\n\n/** Extrapolate a spend series to the end of a period (e.g. month-to-date -> month-end). */\nexport function projectSpend(\n points: Array<{ ts: number, costUsd: number }>,\n periodEnd: number,\n): number | null {\n if (points.length === 0) return null\n const sorted = [...points].sort((a, b) => a.ts - b.ts)\n const first = sorted[0]!.ts\n const spent = sorted.reduce((s, p) => s + p.costUsd, 0)\n const elapsed = (sorted[sorted.length - 1]!.ts - first) || 1\n const remaining = periodEnd - sorted[sorted.length - 1]!.ts\n if (remaining <= 0) return spent\n return spent + (spent / elapsed) * remaining\n}\n\n/**\n * The mascot's mood. Purely cosmetic, but it is the product's differentiator —\n * so it lives in core next to the number that drives it, not in a component.\n */\nexport type Mood = 'hungry' | 'content' | 'full' | 'stuffed' | 'overstuffed'\n\nexport function moodFor(usedPct: number): Mood {\n if (usedPct < 5) return 'hungry'\n if (usedPct < 50) return 'content'\n if (usedPct < 80) return 'full'\n if (usedPct < 100) return 'stuffed'\n return 'overstuffed'\n}\n","import type { PriceTable, SpendEvent } from '@nomnomtokens/core'\nimport { costOf, defaultPrices, scopeHash } from '@nomnomtokens/core'\n\n/**\n * Parser for `~/.claude/projects/**\\/*.jsonl`.\n *\n * Written to be tolerant by construction: an unknown field is not an\n * exception, and a line that doesn't look like a priced assistant turn is\n * simply skipped. Claude Code's log format is not a public contract, so the\n * parser's job is to extract what it recognises and stay quiet about the rest.\n *\n * Two things this parser knows that a naive reader does not:\n *\n * 1. **The same turn is written more than once.** On a 25k-line corpus, 3,269\n * of 4,806 distinct (requestId, message.id) pairs appeared 2-3 times in the\n * *same* file, byte-identical apart from `uuid`. Summing without dedup\n * over-reports by ~2.3x. The dedup key is therefore requestId + message.id,\n * never `uuid`.\n * 2. **Modern logs carry no cost.** `costUSD` is absent from every record in\n * current versions, so cost is computed from the model and the token\n * counts (see packages/core/src/pricing.ts).\n */\n\n/** Shape we care about. Everything is optional — the log is not a contract. */\ninterface RawLine {\n type?: string\n timestamp?: string\n sessionId?: string\n cwd?: string\n requestId?: string\n isSidechain?: boolean\n costUSD?: number\n message?: {\n id?: string\n model?: string\n usage?: RawUsage\n }\n toolUseResult?: {\n structuredPatch?: Array<{ lines?: string[] }>\n }\n}\n\ninterface RawUsage {\n input_tokens?: number\n output_tokens?: number\n cache_read_input_tokens?: number\n cache_creation_input_tokens?: number\n cache_creation?: {\n ephemeral_5m_input_tokens?: number\n ephemeral_1h_input_tokens?: number\n }\n}\n\nexport interface JsonlParserOptions {\n prices?: PriceTable\n /** Overrides the provider name; used by tests and by the OTLP receiver. */\n provider?: string\n}\n\nfunction num(v: unknown): number {\n return typeof v === 'number' && Number.isFinite(v) ? v : 0\n}\n\n/** Count +/- lines in a unified-diff hunk set. */\nexport function countPatchLines(patch: Array<{ lines?: string[] }> | undefined): {\n added: number\n removed: number\n} {\n let added = 0\n let removed = 0\n for (const hunk of patch ?? []) {\n for (const line of hunk.lines ?? []) {\n if (line.startsWith('+')) added += 1\n else if (line.startsWith('-')) removed += 1\n }\n }\n return { added, removed }\n}\n\n/**\n * Stateful because line attribution crosses records: an edit's diff arrives in\n * a later `user`/`toolUseResult` line than the assistant turn that requested\n * it. We accumulate pending line counts per session and attach them to the\n * next priced turn, so `SUM(meta.linesAdded)` over any filter is the number of\n * lines the agent changed while earning that spend.\n */\nexport class ClaudeCodeJsonlParser {\n private readonly prices: PriceTable\n private readonly provider: string\n private readonly pendingLines = new Map<string, { added: number, removed: number }>()\n\n constructor(opts: JsonlParserOptions = {}) {\n this.prices = opts.prices ?? defaultPrices\n this.provider = opts.provider ?? 'claude-code'\n }\n\n /** @returns the event, or null when the line carries no spend. */\n async parseLine(line: string): Promise<SpendEvent | null> {\n const trimmed = line.trim()\n if (trimmed.length === 0) return null\n\n let raw: RawLine\n try {\n raw = JSON.parse(trimmed) as RawLine\n } catch {\n return null // a torn write at the tail of a live file; the next scan gets it\n }\n\n // Diffs arrive on their own records — bank them for the next priced turn.\n if (raw.toolUseResult?.structuredPatch && raw.sessionId) {\n const { added, removed } = countPatchLines(raw.toolUseResult.structuredPatch)\n const pending = this.pendingLines.get(raw.sessionId) ?? { added: 0, removed: 0 }\n pending.added += added\n pending.removed += removed\n this.pendingLines.set(raw.sessionId, pending)\n return null\n }\n\n const usage = raw.message?.usage\n if (raw.type !== 'assistant' || !usage) return null\n\n const ts = raw.timestamp ? Date.parse(raw.timestamp) : Number.NaN\n if (!Number.isFinite(ts)) return null\n\n // cache_creation splits the total by TTL, and the two are priced\n // differently (1.25x vs 2x input). Fall back to the flat total when the\n // breakdown is missing, attributing it to the cheaper 5m bucket.\n const create5m = usage.cache_creation?.ephemeral_5m_input_tokens\n const create1h = num(usage.cache_creation?.ephemeral_1h_input_tokens)\n const createTotal = num(usage.cache_creation_input_tokens)\n\n const qty = {\n in: num(usage.input_tokens),\n out: num(usage.output_tokens),\n cacheCreate: create5m === undefined ? createTotal - create1h : num(create5m),\n cacheCreate1h: create1h,\n cacheRead: num(usage.cache_read_input_tokens),\n }\n\n const model = raw.message?.model ?? null\n const sessionId = raw.sessionId ?? null\n\n const lines = sessionId ? this.pendingLines.get(sessionId) : undefined\n if (sessionId) this.pendingLines.delete(sessionId)\n\n const meta: Record<string, number> = {\n linesAdded: lines?.added ?? 0,\n linesRemoved: lines?.removed ?? 0,\n }\n if (raw.isSidechain) meta.sidechain = 1\n\n return {\n // requestId+message.id, never uuid — see the class docblock\n id: `${this.provider}:${raw.requestId ?? 'norid'}:${raw.message?.id ?? ts}`,\n ts,\n provider: this.provider,\n kind: 'tokens',\n sessionId,\n scopeHash: raw.cwd ? await scopeHash(raw.cwd) : 'unknown',\n unitLabel: model,\n qty,\n // costUSD survives in archived logs from older versions; prefer it when present\n costUsd: typeof raw.costUSD === 'number' ? raw.costUSD : costOf(model, qty, this.prices),\n meta,\n }\n }\n\n /** Drop per-session accumulators; call between files to bound memory. */\n reset(): void {\n this.pendingLines.clear()\n }\n}\n","import type { IngestRecord, LimitSnapshot, SpendEvent } from '@nomnomtokens/core'\nimport { scopeHash, scopeLabel } from '@nomnomtokens/core'\n\n/**\n * Parser for the statusLine hook payload (stdin JSON).\n *\n * This is the *live* half of the claude-code adapter. JSONL is the history and\n * is only written when a turn completes; the statusline fires on every render,\n * which is what makes the dashboard move in real time.\n *\n * It is also the only source of subscription limits — `rate_limits.five_hour`\n * and `rate_limits.seven_day` exist nowhere in the transcript — and the only\n * source of authoritative per-session line counts.\n */\n\nexport interface StatuslinePayload {\n session_id?: string\n cwd?: string\n workspace?: { current_dir?: string, project_dir?: string }\n model?: { id?: string, display_name?: string }\n version?: string\n cost?: {\n total_cost_usd?: number\n total_duration_ms?: number\n total_api_duration_ms?: number\n total_lines_added?: number\n total_lines_removed?: number\n }\n context_window?: {\n total_input_tokens?: number\n total_output_tokens?: number\n context_window_size?: number\n used_percentage?: number\n }\n rate_limits?: {\n five_hour?: RawRateLimit\n seven_day?: RawRateLimit\n }\n}\n\ninterface RawRateLimit {\n used_percentage?: number\n /** unix SECONDS, not ms */\n resets_at?: number\n}\n\nconst WINDOWS: Array<[keyof NonNullable<StatuslinePayload['rate_limits']>, string]> = [\n ['five_hour', '5h'],\n ['seven_day', '7d'],\n]\n\nexport function parseLimits(payload: StatuslinePayload, now = Date.now()): LimitSnapshot[] {\n const out: LimitSnapshot[] = []\n for (const [key, window] of WINDOWS) {\n const raw = payload.rate_limits?.[key]\n if (!raw || typeof raw.used_percentage !== 'number') continue\n out.push({\n ts: now,\n provider: 'claude-code',\n window,\n usedPct: raw.used_percentage,\n // the payload uses unix seconds; everything downstream is unix ms\n resetsAt: typeof raw.resets_at === 'number' && Number.isFinite(raw.resets_at)\n ? raw.resets_at * 1000\n : null,\n })\n }\n return out\n}\n\n/**\n * Session-level rollup as a spend event.\n *\n * `kind: 'session'` rather than `'tokens'` and a stable id per session, so\n * repeated statusline fires upsert one row instead of accumulating thousands.\n * It never double-counts against the JSONL token events because the UI only\n * ever sums within a single `kind`.\n */\nexport async function parseSessionRollup(\n payload: StatuslinePayload,\n now = Date.now(),\n): Promise<SpendEvent | null> {\n const sessionId = payload.session_id\n if (!sessionId) return null\n\n const dir = payload.workspace?.project_dir ?? payload.workspace?.current_dir ?? payload.cwd\n const cost = payload.cost ?? {}\n\n const meta: Record<string, number> = {\n linesAdded: cost.total_lines_added ?? 0,\n linesRemoved: cost.total_lines_removed ?? 0,\n durationMs: cost.total_duration_ms ?? 0,\n apiDurationMs: cost.total_api_duration_ms ?? 0,\n }\n if (typeof payload.context_window?.used_percentage === 'number') {\n meta.contextUsedPct = payload.context_window.used_percentage\n }\n\n return {\n id: `claude-code:session:${sessionId}`,\n ts: now,\n provider: 'claude-code',\n kind: 'session',\n sessionId,\n scopeHash: dir ? await scopeHash(dir) : 'unknown',\n unitLabel: payload.model?.id ?? null,\n qty: {\n sessions: 1,\n linesChanged: (cost.total_lines_added ?? 0) + (cost.total_lines_removed ?? 0),\n },\n // Claude Code's own figure for the session. We keep it as reported rather\n // than recomputing: when it disagrees with our JSONL sum, that disagreement\n // is information (see docs/architecture.md, \"Which number to trust\").\n costUsd: typeof cost.total_cost_usd === 'number' ? cost.total_cost_usd : null,\n meta,\n }\n}\n\n/** Everything a single statusline fire contributes to the store. */\nexport async function parseStatusline(\n payload: StatuslinePayload,\n now = Date.now(),\n): Promise<IngestRecord[]> {\n const records: IngestRecord[] = []\n\n const dir = payload.workspace?.project_dir ?? payload.workspace?.current_dir ?? payload.cwd\n if (dir) {\n records.push({\n type: 'scope',\n scopeHash: await scopeHash(dir),\n label: scopeLabel(dir),\n provider: 'claude-code',\n })\n }\n\n const rollup = await parseSessionRollup(payload, now)\n if (rollup) records.push({ type: 'event', event: rollup })\n\n for (const limit of parseLimits(payload, now)) records.push({ type: 'limit', limit })\n\n return records\n}\n","import { createReadStream, existsSync } from 'node:fs'\nimport type { Dirent } from 'node:fs'\nimport { readdir, stat } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { StringDecoder } from 'node:string_decoder'\nimport type { Adapter, IngestRecord, PriceTable, ScanState } from '@nomnomtokens/core'\nimport { ClaudeCodeJsonlParser } from './jsonl.js'\n\nexport * from './jsonl.js'\nexport * from './statusline.js'\n\nexport function claudeProjectsDir(): string {\n return process.env.CLAUDE_PROJECTS_DIR ?? join(homedir(), '.claude', 'projects')\n}\n\n/**\n * Claude Code encodes the project path into the directory name by replacing\n * separators with dashes (`/Users/me/dev/app` -> `-Users-me-dev-app`). The\n * mapping is lossy — a real dash is indistinguishable from a separator — so we\n * only ever use this for a fallback label, never to reconstruct a path.\n */\nexport function labelFromProjectDir(dirName: string): string {\n const parts = dirName.split('-').filter(Boolean)\n return parts.length > 0 ? parts[parts.length - 1]! : dirName\n}\n\n/**\n * Read newline-delimited records from `start`, yielding whole lines only.\n *\n * Returns the byte offset of the last complete line so a live file that is\n * mid-write is resumed exactly where it was left, rather than losing or\n * duplicating the torn record.\n */\nasync function* readLinesFrom(\n path: string,\n start: number,\n): AsyncGenerator<{ line: string, offset: number }> {\n const stream = createReadStream(path, { start })\n // A StringDecoder, not chunk.toString(): transcripts are full of non-ASCII,\n // and a multi-byte character straddling a chunk boundary decodes to U+FFFD,\n // corrupting that line's JSON and silently dropping the record.\n const decoder = new StringDecoder('utf8')\n let buffer = ''\n let consumed = start\n\n for await (const chunk of stream) {\n buffer += decoder.write(chunk as Buffer)\n let nl = buffer.indexOf('\\n')\n while (nl !== -1) {\n const line = buffer.slice(0, nl)\n buffer = buffer.slice(nl + 1)\n consumed += Buffer.byteLength(line, 'utf8') + 1\n yield { line, offset: consumed }\n nl = buffer.indexOf('\\n')\n }\n }\n}\n\n/**\n * Walk every transcript under the projects root, at any depth.\n *\n * Depth matters more than it looks. Top-level sessions sit at\n * `projects/<project>/<session>.jsonl`, but **subagent transcripts are nested\n * three levels further down**, at\n * `projects/<project>/<session>/subagents/agent-*.jsonl`. Anything that globs\n * `projects/*/*.jsonl` silently omits every Task-tool subagent — which is real,\n * often expensive spend. On the corpus this parser was built against that was\n * 836 records across 13 files, invisible.\n */\nasync function* walkJsonl(\n root: string,\n projectDir?: string,\n): AsyncGenerator<{ path: string, projectDir: string }> {\n let entries: Dirent[]\n try {\n entries = await readdir(root, { withFileTypes: true })\n } catch {\n return\n }\n\n for (const entry of entries) {\n const path = join(root, entry.name)\n if (entry.isDirectory()) {\n // the first level under the root is the project; deeper levels inherit it\n yield* walkJsonl(path, projectDir ?? entry.name)\n } else if (entry.isFile() && entry.name.endsWith('.jsonl')) {\n yield { path, projectDir: projectDir ?? entry.name }\n }\n }\n}\n\nexport interface ClaudeCodeAdapterOptions {\n root?: string\n prices?: PriceTable\n}\n\nexport class ClaudeCodeAdapter implements Adapter {\n readonly name = 'claude-code'\n private readonly root: string\n private readonly prices: PriceTable | undefined\n\n constructor(opts: ClaudeCodeAdapterOptions = {}) {\n this.root = opts.root ?? claudeProjectsDir()\n this.prices = opts.prices\n }\n\n async detect(): Promise<boolean> {\n return existsSync(this.root)\n }\n\n async *scan(state: ScanState): AsyncIterable<IngestRecord> {\n const seenScopes = new Set<string>()\n\n for await (const { path, projectDir } of walkJsonl(this.root)) {\n const info = await stat(path).catch(() => null)\n if (!info) continue\n\n const cursor = state.get(path)\n // Same size and mtime as last time: nothing appended, skip the read\n // entirely. This is what makes a re-scan sub-second on a year of logs.\n if (cursor && cursor.size === info.size && cursor.mtime === info.mtimeMs) continue\n\n // A file that shrank was rotated or rewritten — the old offset is\n // meaningless, so re-read it from the top and let upsert absorb the\n // repeats.\n const start = cursor && info.size >= cursor.size ? cursor.offset : 0\n\n const parser = new ClaudeCodeJsonlParser(this.prices ? { prices: this.prices } : {})\n let offset = start\n\n for await (const { line, offset: next } of readLinesFrom(path, start)) {\n offset = next\n const event = await parser.parseLine(line)\n if (!event) continue\n\n if (!seenScopes.has(event.scopeHash)) {\n seenScopes.add(event.scopeHash)\n yield {\n type: 'scope',\n scopeHash: event.scopeHash,\n label: labelFromProjectDir(projectDir),\n provider: this.name,\n }\n }\n yield { type: 'event', event }\n }\n\n state.set({ sourcePath: path, mtime: info.mtimeMs, size: info.size, offset })\n }\n }\n\n /**\n * Tail the transcript directory. Chokidar rather than fs.watch: we need\n * recursive watching that behaves the same on macOS, Linux and Windows.\n */\n watch(emit: (r: IngestRecord) => void): () => void {\n const offsets = new Map<string, number>()\n const inFlight = new Set<string>()\n const parser = new ClaudeCodeJsonlParser(this.prices ? { prices: this.prices } : {})\n let closed = false\n\n const pump = async (path: string) => {\n // chokidar can fire several times for one append; without this guard two\n // concurrent reads share a stale offset and emit the same lines twice.\n if (closed || inFlight.has(path)) return\n inFlight.add(path)\n try {\n const info = await stat(path).catch(() => null)\n if (!info) return\n\n const known = offsets.get(path)\n // Unseen file: start at its current end. `scan()` owns history; the\n // watcher only owns what happens from now on.\n let offset = known === undefined ? info.size : info.size < known ? 0 : known\n\n for await (const { line, offset: next } of readLinesFrom(path, offset)) {\n offset = next\n const event = await parser.parseLine(line)\n if (event) emit({ type: 'event', event })\n }\n offsets.set(path, offset)\n } finally {\n inFlight.delete(path)\n }\n }\n\n // chokidar is imported lazily so that `packages/core` consumers and the\n // browser build never pull a filesystem watcher into the graph\n const watcherPromise = import('chokidar').then(({ watch }) => {\n const w = watch(this.root, {\n // project / session / subagents / agent-*.jsonl\n depth: 4,\n ignoreInitial: true,\n awaitWriteFinish: { stabilityThreshold: 200, pollInterval: 50 },\n })\n w.on('add', p => void (p.endsWith('.jsonl') && pump(p)))\n w.on('change', p => void (p.endsWith('.jsonl') && pump(p)))\n return w\n })\n\n return () => {\n closed = true\n void watcherPromise.then(w => w.close())\n }\n }\n}\n","import type { IngestRecord, LimitSnapshot, PriceTable, SpendEvent } from '@nomnomtokens/core'\nimport { costOf, defaultPrices, scopeHash } from '@nomnomtokens/core'\n\n/**\n * Parser for Codex CLI / IDE rollout JSONL under `~/.codex/sessions/**`.\n *\n * The format is not a public contract. We keep only:\n * - `session_meta` → session id + cwd (for hashing)\n * - `turn_context` → current model id\n * - `event_msg` / `token_count` → per-turn `last_token_usage` + rate limits\n *\n * Message text, tool inputs, diffs, and git metadata are ignored.\n *\n * `last_token_usage` is the turn delta; `total_token_usage` is cumulative and\n * becomes the stable half of the dedup key so re-scans upsert cleanly.\n */\n\ninterface RawLine {\n timestamp?: string\n type?: string\n payload?: RawPayload\n}\n\ninterface RawPayload {\n type?: string\n session_id?: string\n id?: string\n cwd?: string\n model?: string\n turn_id?: string\n info?: {\n total_token_usage?: RawUsage\n last_token_usage?: RawUsage\n }\n rate_limits?: RawRateLimits\n}\n\ninterface RawUsage {\n input_tokens?: number\n cached_input_tokens?: number\n cache_write_input_tokens?: number\n output_tokens?: number\n reasoning_output_tokens?: number\n total_tokens?: number\n}\n\ninterface RawRateWindow {\n used_percent?: number\n window_minutes?: number\n resets_at?: number\n}\n\ninterface RawRateLimits {\n primary?: RawRateWindow | null\n secondary?: RawRateWindow | null\n}\n\nexport interface CodexParserOptions {\n prices?: PriceTable\n provider?: string\n}\n\nfunction num(v: unknown): number {\n return typeof v === 'number' && Number.isFinite(v) ? v : 0\n}\n\n/** Map Codex window lengths onto the short labels the Limits screen already uses. */\nexport function windowLabel(minutes: number | undefined): string | null {\n if (typeof minutes !== 'number' || !Number.isFinite(minutes) || minutes <= 0) return null\n if (minutes === 300) return '5h'\n if (minutes === 10080) return '7d'\n if (minutes === 43200) return '30d'\n if (minutes % (24 * 60) === 0) return `${minutes / (24 * 60)}d`\n if (minutes % 60 === 0) return `${minutes / 60}h`\n return `${minutes}m`\n}\n\nexport function labelFromCwd(cwd: string | null | undefined): string {\n if (!cwd) return 'unknown'\n const parts = cwd.replace(/\\\\/g, '/').split('/').filter(Boolean)\n return parts[parts.length - 1] ?? 'unknown'\n}\n\nfunction qtyFromUsage(usage: RawUsage): {\n in: number\n out: number\n cacheCreate: number\n cacheCreate1h: number\n cacheRead: number\n} {\n const input = num(usage.input_tokens)\n const cached = num(usage.cached_input_tokens)\n // Codex reports cached as a subset of input; split so totals don't double-count\n // and so cache reads get the cheaper multiplier in `costOf`.\n return {\n in: Math.max(0, input - cached),\n out: num(usage.output_tokens),\n cacheCreate: num(usage.cache_write_input_tokens),\n cacheCreate1h: 0,\n cacheRead: cached,\n }\n}\n\nfunction parseLimits(\n rate: RawRateLimits | undefined,\n provider: string,\n ts: number,\n): LimitSnapshot[] {\n if (!rate) return []\n const out: LimitSnapshot[] = []\n for (const key of ['primary', 'secondary'] as const) {\n const win = rate[key]\n if (!win || typeof win.used_percent !== 'number') continue\n const window = windowLabel(win.window_minutes) ?? key\n out.push({\n ts,\n provider,\n window,\n usedPct: win.used_percent,\n resetsAt: typeof win.resets_at === 'number' && Number.isFinite(win.resets_at)\n ? win.resets_at * 1000\n : null,\n })\n }\n return out\n}\n\n/**\n * Stateful across lines of one rollout file: session id / cwd / model arrive\n * before the token_count rows that need them.\n */\nexport class CodexRolloutParser {\n private readonly prices: PriceTable\n private readonly provider: string\n private sessionId: string | null = null\n private cwd: string | null = null\n private model: string | null = null\n /** Last emitted limit per window — Codex repeats the same % on every token_count. */\n private lastLimits = new Map<string, { usedPct: number, resetsAt: number | null }>()\n\n constructor(opts: CodexParserOptions = {}) {\n this.prices = opts.prices ?? defaultPrices\n this.provider = opts.provider ?? 'codex'\n }\n\n reset(): void {\n this.sessionId = null\n this.cwd = null\n this.model = null\n this.lastLimits.clear()\n }\n\n /** Last path segment of the session cwd — safe to show as a project label. */\n scopeLabel(): string {\n return labelFromCwd(this.cwd)\n }\n\n /** @returns zero or more ingest records for this line. */\n async parseLine(line: string): Promise<IngestRecord[]> {\n const trimmed = line.trim()\n if (!trimmed) return []\n\n let raw: RawLine\n try {\n raw = JSON.parse(trimmed) as RawLine\n } catch {\n return []\n }\n\n const payload = raw.payload\n if (!payload) return []\n\n if (raw.type === 'session_meta') {\n this.sessionId = payload.session_id ?? payload.id ?? this.sessionId\n if (typeof payload.cwd === 'string' && payload.cwd) this.cwd = payload.cwd\n return []\n }\n\n if (raw.type === 'turn_context') {\n if (typeof payload.model === 'string' && payload.model) this.model = payload.model\n if (typeof payload.cwd === 'string' && payload.cwd) this.cwd = payload.cwd\n return []\n }\n\n if (raw.type !== 'event_msg' || payload.type !== 'token_count') return []\n\n const ts = raw.timestamp ? Date.parse(raw.timestamp) : Number.NaN\n if (!Number.isFinite(ts)) return []\n\n const records: IngestRecord[] = []\n for (const limit of parseLimits(payload.rate_limits, this.provider, ts)) {\n // Skip unchanged snapshots — otherwise dozens of identical rows in one\n // session invent a nonsense burn rate (hundreds of %/h).\n const prev = this.lastLimits.get(limit.window)\n if (\n prev\n && prev.usedPct === limit.usedPct\n && prev.resetsAt === limit.resetsAt\n ) {\n continue\n }\n this.lastLimits.set(limit.window, { usedPct: limit.usedPct, resetsAt: limit.resetsAt })\n records.push({ type: 'limit', limit })\n }\n\n const last = payload.info?.last_token_usage\n const total = payload.info?.total_token_usage\n if (!last) return records\n\n const qty = qtyFromUsage(last)\n if (qty.in + qty.out + qty.cacheCreate + qty.cacheRead === 0) return records\n\n const sessionId = this.sessionId\n const totalIn = num(total?.input_tokens)\n const totalOut = num(total?.output_tokens)\n // Cumulative totals uniquely identify the row inside a session; timestamps\n // alone can collide when several tool calls land in the same millisecond.\n const id = `${this.provider}:${sessionId ?? 'nosession'}:${totalIn}:${totalOut}`\n\n const hash = this.cwd ? await scopeHash(this.cwd) : 'unknown'\n const event: SpendEvent = {\n id,\n ts,\n provider: this.provider,\n kind: 'tokens',\n sessionId,\n scopeHash: hash,\n unitLabel: this.model,\n qty,\n costUsd: costOf(this.model, qty, this.prices),\n meta: {\n reasoningOutputTokens: num(last.reasoning_output_tokens),\n },\n }\n records.push({ type: 'event', event })\n return records\n }\n}\n","import { homedir } from 'node:os'\nimport { join } from 'node:path'\n\n/**\n * Codex stores config, auth, and session rollouts under `CODEX_HOME`\n * (default `~/.codex`). Override via env for tests / alternate installs.\n */\nexport function codexHome(): string {\n return process.env.CODEX_HOME ?? join(homedir(), '.codex')\n}\n\n/** Dated rollout transcripts: `sessions/YYYY/MM/DD/rollout-*.jsonl`. */\nexport function codexSessionsDir(home = codexHome()): string {\n return join(home, 'sessions')\n}\n","import { createReadStream, existsSync } from 'node:fs'\nimport type { Dirent } from 'node:fs'\nimport { readdir, stat } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { StringDecoder } from 'node:string_decoder'\nimport type { Adapter, IngestRecord, PriceTable, ScanState } from '@nomnomtokens/core'\nimport { CodexRolloutParser } from './parse.js'\nimport { codexHome, codexSessionsDir } from './paths.js'\n\nexport * from './parse.js'\nexport * from './paths.js'\n\nasync function* readLinesFrom(\n path: string,\n start: number,\n): AsyncGenerator<{ line: string, offset: number }> {\n const stream = createReadStream(path, { start })\n const decoder = new StringDecoder('utf8')\n let buffer = ''\n let consumed = start\n\n for await (const chunk of stream) {\n buffer += decoder.write(chunk as Buffer)\n let nl = buffer.indexOf('\\n')\n while (nl !== -1) {\n const line = buffer.slice(0, nl)\n buffer = buffer.slice(nl + 1)\n consumed += Buffer.byteLength(line, 'utf8') + 1\n yield { line, offset: consumed }\n nl = buffer.indexOf('\\n')\n }\n }\n}\n\nasync function* walkRollouts(root: string): AsyncGenerator<string> {\n let entries: Dirent[]\n try {\n entries = await readdir(root, { withFileTypes: true })\n } catch {\n return\n }\n\n for (const entry of entries) {\n const path = join(root, entry.name)\n if (entry.isDirectory()) {\n yield* walkRollouts(path)\n } else if (\n entry.isFile()\n && entry.name.endsWith('.jsonl')\n && entry.name.startsWith('rollout-')\n ) {\n yield path\n }\n }\n}\n\nexport interface CodexAdapterOptions {\n /** Override `CODEX_HOME` / `~/.codex`. */\n home?: string\n prices?: PriceTable\n}\n\nexport class CodexAdapter implements Adapter {\n readonly name = 'codex'\n private readonly home: string\n private readonly sessions: string\n private readonly prices: PriceTable | undefined\n\n constructor(opts: CodexAdapterOptions = {}) {\n this.home = opts.home ?? codexHome()\n this.sessions = codexSessionsDir(this.home)\n this.prices = opts.prices\n }\n\n async detect(): Promise<boolean> {\n return existsSync(this.sessions) || existsSync(this.home)\n }\n\n async *scan(state: ScanState): AsyncIterable<IngestRecord> {\n const seenScopes = new Set<string>()\n\n for await (const path of walkRollouts(this.sessions)) {\n const info = await stat(path).catch(() => null)\n if (!info) continue\n\n const cursor = state.get(path)\n if (cursor && cursor.size === info.size && cursor.mtime === info.mtimeMs) continue\n\n const start = cursor && info.size >= cursor.size ? cursor.offset : 0\n const parser = new CodexRolloutParser(this.prices ? { prices: this.prices } : {})\n let offset = start\n\n for await (const { line, offset: next } of readLinesFrom(path, start)) {\n offset = next\n for (const record of await parser.parseLine(line)) {\n if (record.type === 'event' && !seenScopes.has(record.event.scopeHash)) {\n seenScopes.add(record.event.scopeHash)\n yield {\n type: 'scope',\n scopeHash: record.event.scopeHash,\n label: parser.scopeLabel(),\n provider: this.name,\n }\n }\n yield record\n }\n }\n\n state.set({ sourcePath: path, mtime: info.mtimeMs, size: info.size, offset })\n }\n }\n\n watch(emit: (r: IngestRecord) => void): () => void {\n const offsets = new Map<string, number>()\n const inFlight = new Set<string>()\n const parsers = new Map<string, CodexRolloutParser>()\n let closed = false\n\n const pump = async (path: string) => {\n if (closed || inFlight.has(path) || !path.endsWith('.jsonl')) return\n inFlight.add(path)\n try {\n const info = await stat(path).catch(() => null)\n if (!info) return\n\n const known = offsets.get(path)\n // Unseen file: start at end — `scan()` owns history.\n let offset = known === undefined ? info.size : info.size < known ? 0 : known\n let parser = parsers.get(path)\n if (!parser || offset === 0) {\n parser = new CodexRolloutParser(this.prices ? { prices: this.prices } : {})\n parsers.set(path, parser)\n }\n\n for await (const { line, offset: next } of readLinesFrom(path, offset)) {\n offset = next\n for (const record of await parser.parseLine(line)) emit(record)\n }\n offsets.set(path, offset)\n } finally {\n inFlight.delete(path)\n }\n }\n\n const watcherPromise = import('chokidar').then(({ watch }) => {\n const w = watch(this.sessions, {\n // sessions / YYYY / MM / DD / rollout-*.jsonl\n depth: 4,\n ignoreInitial: true,\n awaitWriteFinish: { stabilityThreshold: 200, pollInterval: 50 },\n })\n w.on('add', p => void pump(p))\n w.on('change', p => void pump(p))\n return w\n })\n\n return () => {\n closed = true\n void watcherPromise.then(w => w.close())\n }\n }\n}\n","import { existsSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\n/**\n * Resolve Cursor's user-data directories across platforms.\n *\n * Cursor follows the VS Code layout:\n * macOS: ~/Library/Application Support/Cursor\n * Linux: ~/.config/Cursor\n * Windows: %APPDATA%/Cursor\n */\nexport function cursorUserDataDir(): string {\n if (process.env.CURSOR_USER_DATA_DIR) return process.env.CURSOR_USER_DATA_DIR\n\n const home = homedir()\n if (process.platform === 'darwin') {\n return join(home, 'Library', 'Application Support', 'Cursor')\n }\n if (process.platform === 'win32') {\n const appdata = process.env.APPDATA ?? join(home, 'AppData', 'Roaming')\n return join(appdata, 'Cursor')\n }\n return join(process.env.XDG_CONFIG_HOME ?? join(home, '.config'), 'Cursor')\n}\n\nexport function cursorGlobalStorageDir(userData = cursorUserDataDir()): string {\n return join(userData, 'User', 'globalStorage')\n}\n\nexport function cursorStateDbPath(userData = cursorUserDataDir()): string {\n return join(cursorGlobalStorageDir(userData), 'state.vscdb')\n}\n\nexport function cursorWorkspaceStorageDir(userData = cursorUserDataDir()): string {\n return join(userData, 'User', 'workspaceStorage')\n}\n\nexport function cursorStateDbExists(userData = cursorUserDataDir()): boolean {\n return existsSync(cursorStateDbPath(userData))\n}\n\n/**\n * Turn a VS Code folder URI into a filesystem path.\n * `file:///Users/me/app` → `/Users/me/app`\n * Remote URIs (ssh-remote, etc.) are returned as-is for hashing/labeling.\n */\nexport function pathFromFolderUri(uri: string | null | undefined): string | null {\n if (!uri || typeof uri !== 'string') return null\n if (uri.startsWith('file://')) {\n try {\n return decodeURIComponent(uri.slice('file://'.length))\n } catch {\n return uri.slice('file://'.length)\n }\n }\n return uri\n}\n\n/** Last path segment for the local scopes label — never reconstruct a full path. */\nexport function labelFromWorkspacePath(path: string): string {\n const cleaned = path.replace(/[/\\\\]+$/, '')\n const parts = cleaned.split(/[/\\\\]/).filter(Boolean)\n const last = parts[parts.length - 1]\n if (!last) return 'workspace'\n // vscode-remote://…/home/user/proj → proj\n try {\n return decodeURIComponent(last)\n } catch {\n return last\n }\n}\n","import { readdirSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport Database from 'better-sqlite3'\nimport type { CursorBubble, CursorComposerInfo } from './parse.js'\nimport { pathFromFolderUri } from './paths.js'\n\nexport interface CursorWorkspaceMap {\n /** workspaceStorage folder id → filesystem / remote URI path */\n byId: Map<string, string>\n}\n\nexport interface CursorSnapshot {\n composers: Map<string, CursorComposerInfo>\n /** composerId → bubbles */\n bubbles: Map<string, CursorBubble[]>\n /** composerId → workspace path for hashing */\n workspaceByComposer: Map<string, string | null>\n}\n\ninterface ComposerHeader {\n composerId?: string\n totalLinesAdded?: number\n totalLinesRemoved?: number\n workspaceIdentifier?: {\n id?: string\n uri?: { external?: string, path?: string } | string\n }\n}\n\ninterface ComposerDataRow {\n composerId?: string\n modelConfig?: { modelName?: string, model?: string } | string\n totalLinesAdded?: number\n totalLinesRemoved?: number\n}\n\nfunction decodeValue(value: unknown): unknown {\n if (value == null) return null\n if (Buffer.isBuffer(value)) {\n try {\n return JSON.parse(value.toString('utf8'))\n } catch {\n return null\n }\n }\n if (typeof value === 'string') {\n try {\n return JSON.parse(value)\n } catch {\n return value\n }\n }\n return value\n}\n\n/**\n * Cursor often stores Auto-mode as `default`, and occasionally as a repeated\n * join (`default,default,default,default`). Neither is a real model id — treat\n * them as absent so the UI buckets them under \"unknown\".\n */\nexport function normalizeCursorModelName(raw: string | null | undefined): string | null {\n if (raw == null) return null\n const name = raw.trim()\n if (!name) return null\n\n const parts = name.split(',').map(p => p.trim().toLowerCase()).filter(Boolean)\n if (parts.length > 0 && parts.every(p => p === 'default')) return null\n\n return name === 'default' ? null : name\n}\n\nfunction modelFromConfig(mc: ComposerDataRow['modelConfig']): string | null {\n if (!mc) return null\n if (typeof mc === 'string') return normalizeCursorModelName(mc)\n return normalizeCursorModelName(mc.modelName ?? mc.model ?? null)\n}\n\nfunction workspacePathFromHeader(\n header: ComposerHeader,\n workspaces: CursorWorkspaceMap,\n): string | null {\n const wi = header.workspaceIdentifier\n if (!wi) return null\n\n if (wi.id) {\n const mapped = workspaces.byId.get(wi.id)\n if (mapped) return mapped\n }\n\n const uri = wi.uri\n if (typeof uri === 'string') return pathFromFolderUri(uri)\n if (uri && typeof uri === 'object') {\n if (typeof uri.external === 'string') return pathFromFolderUri(uri.external)\n if (typeof uri.path === 'string') return uri.path\n }\n return null\n}\n\n/** Load workspaceStorage/<id>/workspace.json → id → folder path. */\nexport function loadWorkspaceMap(workspaceStorageDir: string): CursorWorkspaceMap {\n const byId = new Map<string, string>()\n let entries: string[]\n try {\n entries = readdirSync(workspaceStorageDir)\n } catch {\n return { byId }\n }\n\n for (const id of entries) {\n try {\n const raw = readFileSync(join(workspaceStorageDir, id, 'workspace.json'), 'utf8')\n const meta = JSON.parse(raw) as { folder?: string }\n const path = pathFromFolderUri(meta.folder)\n if (path) byId.set(id, path)\n } catch {\n // missing or malformed — skip\n }\n }\n return { byId }\n}\n\n/**\n * Read-only snapshot of the spend-relevant bits of Cursor's state.vscdb.\n *\n * Opens with `mode=ro` so a live Cursor process holding a write lock does not\n * block us, and we never risk writing to the IDE's database.\n */\nexport function readCursorSnapshot(\n stateDbPath: string,\n workspaces: CursorWorkspaceMap,\n): CursorSnapshot {\n const db = new Database(stateDbPath, { readonly: true, fileMustExist: true })\n try {\n // Prefer WAL-friendly read; ignore if the pragma fails on a plain copy.\n try {\n db.pragma('query_only = ON')\n } catch {\n // ignore\n }\n\n const composers = new Map<string, CursorComposerInfo>()\n const workspaceByComposer = new Map<string, string | null>()\n const linesByComposer = new Map<string, { added: number, removed: number }>()\n\n // Headers: workspace + line totals\n const headerRow = db\n .prepare(`SELECT value FROM ItemTable WHERE key = ?`)\n .get('composer.composerHeaders') as { value: unknown } | undefined\n\n if (headerRow) {\n const parsed = decodeValue(headerRow.value) as { allComposers?: ComposerHeader[] } | null\n for (const h of parsed?.allComposers ?? []) {\n if (!h.composerId) continue\n linesByComposer.set(h.composerId, {\n added: typeof h.totalLinesAdded === 'number' ? h.totalLinesAdded : 0,\n removed: typeof h.totalLinesRemoved === 'number' ? h.totalLinesRemoved : 0,\n })\n workspaceByComposer.set(h.composerId, workspacePathFromHeader(h, workspaces))\n }\n }\n\n // composerData: model + possibly fresher line totals\n const dataRows = db\n .prepare(`SELECT key, value FROM cursorDiskKV WHERE key LIKE 'composerData:%'`)\n .all() as Array<{ key: string, value: unknown }>\n\n for (const row of dataRows) {\n const raw = decodeValue(row.value) as ComposerDataRow | null\n if (!raw) continue\n const composerId = raw.composerId ?? row.key.slice('composerData:'.length)\n if (!composerId) continue\n\n const lines = linesByComposer.get(composerId) ?? { added: 0, removed: 0 }\n const added = typeof raw.totalLinesAdded === 'number' ? raw.totalLinesAdded : lines.added\n const removed = typeof raw.totalLinesRemoved === 'number' ? raw.totalLinesRemoved : lines.removed\n\n composers.set(composerId, {\n composerId,\n model: modelFromConfig(raw.modelConfig),\n linesAdded: added,\n linesRemoved: removed,\n })\n\n if (!workspaceByComposer.has(composerId)) {\n workspaceByComposer.set(composerId, null)\n }\n }\n\n // Ensure composers that only appear in headers still exist\n for (const [id, lines] of linesByComposer) {\n if (!composers.has(id)) {\n composers.set(id, {\n composerId: id,\n model: null,\n linesAdded: lines.added,\n linesRemoved: lines.removed,\n })\n }\n }\n\n const bubbles = new Map<string, CursorBubble[]>()\n const bubbleRows = db\n .prepare(`SELECT key, value FROM cursorDiskKV WHERE key LIKE 'bubbleId:%'`)\n .all() as Array<{ key: string, value: unknown }>\n\n for (const row of bubbleRows) {\n // bubbleId:<composerId>:<bubbleId>\n const parts = row.key.split(':')\n if (parts.length < 3) continue\n const composerId = parts[1]!\n const bubbleId = parts.slice(2).join(':')\n\n const raw = decodeValue(row.value) as Record<string, unknown> | null\n if (!raw || typeof raw !== 'object') continue\n\n // Pull only the numeric / id fields — never text, diffs, or tool payloads.\n const tokenCount = raw.tokenCount as CursorBubble['tokenCount'] | undefined\n const ctx = raw.contextWindowStatusAtCreation as\n | CursorBubble['contextWindowStatusAtCreation']\n | undefined\n\n const bubble: CursorBubble = {\n bubbleId: typeof raw.bubbleId === 'string' ? raw.bubbleId : bubbleId,\n composerId,\n type: typeof raw.type === 'number' ? raw.type : undefined,\n createdAt: (raw.createdAt as string | number | undefined)\n ?? (raw.timestamp as string | number | undefined),\n tokenCount: tokenCount && typeof tokenCount === 'object'\n ? {\n inputTokens: typeof tokenCount.inputTokens === 'number' ? tokenCount.inputTokens : 0,\n outputTokens: typeof tokenCount.outputTokens === 'number' ? tokenCount.outputTokens : 0,\n }\n : undefined,\n contextWindowStatusAtCreation: ctx && typeof ctx === 'object'\n ? {\n tokensUsed: typeof ctx.tokensUsed === 'number' ? ctx.tokensUsed : undefined,\n tokenLimit: typeof ctx.tokenLimit === 'number' ? ctx.tokenLimit : undefined,\n }\n : undefined,\n }\n\n const list = bubbles.get(composerId) ?? []\n list.push(bubble)\n bubbles.set(composerId, list)\n }\n\n return { composers, bubbles, workspaceByComposer }\n } finally {\n db.close()\n }\n}\n","import type { PriceTable, SpendEvent } from '@nomnomtokens/core'\nimport { costOf, defaultPrices, EMPTY_TOKEN_QTY } from '@nomnomtokens/core'\n\n/** Fields we read from a Cursor bubble. Everything else is ignored on purpose. */\nexport interface CursorBubble {\n bubbleId: string\n composerId: string\n /** 1 = user, 2 = assistant — Cursor's internal enum, not a contract. */\n type?: number\n createdAt?: string | number\n tokenCount?: {\n inputTokens?: number\n outputTokens?: number\n }\n contextWindowStatusAtCreation?: {\n tokensUsed?: number\n tokenLimit?: number\n }\n}\n\nexport interface CursorComposerInfo {\n composerId: string\n model: string | null\n linesAdded: number\n linesRemoved: number\n}\n\nexport interface ParseOptions {\n prices?: PriceTable\n provider?: string\n}\n\nfunction num(v: unknown): number {\n return typeof v === 'number' && Number.isFinite(v) && v > 0 ? v : 0\n}\n\nfunction parseTs(raw: string | number | undefined): number | null {\n if (typeof raw === 'number' && Number.isFinite(raw)) {\n // Cursor sometimes stores ms epochs, sometimes seconds-looking values that\n // are already ms (createdAt in headers is ms). ISO strings are preferred.\n return raw < 1e12 ? raw * 1000 : raw\n }\n if (typeof raw === 'string' && raw.length > 0) {\n const ms = Date.parse(raw)\n return Number.isFinite(ms) ? ms : null\n }\n return null\n}\n\nfunction hasExactTokens(b: CursorBubble): boolean {\n const tc = b.tokenCount\n return num(tc?.inputTokens) > 0 || num(tc?.outputTokens) > 0\n}\n\nfunction tokensUsedOf(b: CursorBubble): number {\n return num(b.contextWindowStatusAtCreation?.tokensUsed)\n}\n\n/**\n * Turn a composer's bubbles into spend events.\n *\n * Cursor's local DB is incomplete: most bubbles store `tokenCount: {0,0}`.\n * When exact counts exist we use them. Otherwise we fall back to\n * `contextWindowStatusAtCreation.tokensUsed` (input) and the growth between\n * consecutive `tokensUsed` values as an approximate output — the same delta\n * method other local Cursor trackers use. We never estimate from message text.\n *\n * To avoid double-counting a turn that has both signals on different bubbles,\n * a composer that has any exact `tokenCount` emits only those; otherwise it\n * uses the tokensUsed path.\n */\nexport function eventsFromComposer(\n composer: CursorComposerInfo,\n bubbles: CursorBubble[],\n scopeHash: string,\n opts: ParseOptions = {},\n): SpendEvent[] {\n const prices = opts.prices ?? defaultPrices\n const provider = opts.provider ?? 'cursor'\n const model = composer.model\n\n const sorted = [...bubbles].sort((a, b) => {\n const ta = parseTs(a.createdAt) ?? 0\n const tb = parseTs(b.createdAt) ?? 0\n return ta - tb\n })\n\n const useExact = sorted.some(hasExactTokens)\n const events: SpendEvent[] = []\n let linesAttached = false\n\n const attachLines = (): Record<string, number> => {\n if (linesAttached) return { linesAdded: 0, linesRemoved: 0 }\n linesAttached = true\n return {\n linesAdded: composer.linesAdded,\n linesRemoved: composer.linesRemoved,\n }\n }\n\n if (useExact) {\n for (const b of sorted) {\n if (!hasExactTokens(b)) continue\n const ts = parseTs(b.createdAt)\n if (ts === null) continue\n\n const qty = {\n ...EMPTY_TOKEN_QTY,\n in: num(b.tokenCount?.inputTokens),\n out: num(b.tokenCount?.outputTokens),\n }\n events.push({\n id: `${provider}:${b.composerId}:${b.bubbleId}`,\n ts,\n provider,\n kind: 'tokens',\n sessionId: composer.composerId,\n scopeHash,\n unitLabel: model,\n qty,\n costUsd: costOf(model, qty, prices),\n meta: attachLines(),\n })\n }\n return events\n }\n\n // tokensUsed fallback — only bubbles that actually recorded a context size\n const withUsed = sorted.filter(b => tokensUsedOf(b) > 0)\n for (let i = 0; i < withUsed.length; i++) {\n const b = withUsed[i]!\n const ts = parseTs(b.createdAt)\n if (ts === null) continue\n\n const used = tokensUsedOf(b)\n const next = withUsed[i + 1]\n const nextUsed = next ? tokensUsedOf(next) : 0\n const out = nextUsed > used ? nextUsed - used : 0\n\n const qty = {\n ...EMPTY_TOKEN_QTY,\n in: used,\n out,\n }\n\n events.push({\n id: `${provider}:${b.composerId}:${b.bubbleId}`,\n ts,\n provider,\n kind: 'tokens',\n sessionId: composer.composerId,\n scopeHash,\n unitLabel: model,\n qty,\n costUsd: costOf(model, qty, prices),\n meta: attachLines(),\n })\n }\n\n return events\n}\n","import { existsSync } from 'node:fs'\nimport { stat } from 'node:fs/promises'\nimport type { Adapter, IngestRecord, PriceTable, ScanState } from '@nomnomtokens/core'\nimport { scopeHash } from '@nomnomtokens/core'\nimport { loadWorkspaceMap, readCursorSnapshot } from './db.js'\nimport { eventsFromComposer } from './parse.js'\nimport {\n cursorStateDbExists,\n cursorStateDbPath,\n cursorUserDataDir,\n cursorWorkspaceStorageDir,\n labelFromWorkspacePath,\n} from './paths.js'\n\nexport * from './parse.js'\nexport * from './paths.js'\nexport { loadWorkspaceMap, normalizeCursorModelName, readCursorSnapshot } from './db.js'\n\nexport interface CursorAdapterOptions {\n /** Override Cursor user-data root (tests). */\n userDataDir?: string\n /** Override path to state.vscdb (tests). */\n stateDbPath?: string\n prices?: PriceTable\n}\n\n/**\n * Adapter for Cursor IDE local spend data.\n *\n * Reads User/globalStorage/state.vscdb (composer bubbles + headers) and maps\n * workspaces via workspaceStorage/<id>/workspace.json. Cursor often stores\n * zero token counts locally — bubbles without numbers are skipped rather than\n * estimated from message text.\n */\nexport class CursorAdapter implements Adapter {\n readonly name = 'cursor'\n private readonly userDataDir: string\n private readonly stateDbPath: string\n private readonly prices: PriceTable | undefined\n\n constructor(opts: CursorAdapterOptions = {}) {\n this.userDataDir = opts.userDataDir ?? cursorUserDataDir()\n this.stateDbPath = opts.stateDbPath ?? cursorStateDbPath(this.userDataDir)\n this.prices = opts.prices\n }\n\n async detect(): Promise<boolean> {\n return existsSync(this.stateDbPath) || cursorStateDbExists(this.userDataDir)\n }\n\n async *scan(state: ScanState): AsyncIterable<IngestRecord> {\n const info = await stat(this.stateDbPath).catch(() => null)\n if (!info) return\n\n const cursor = state.get(this.stateDbPath)\n if (cursor && cursor.size === info.size && cursor.mtime === info.mtimeMs) return\n\n yield* this.emitSnapshot()\n\n state.set({\n sourcePath: this.stateDbPath,\n mtime: info.mtimeMs,\n size: info.size,\n offset: info.size,\n })\n }\n\n /**\n * Rescan when the DB or its WAL changes. History is owned by scan();\n * upsert makes a full re-emit of unchanged bubbles a no-op.\n */\n watch(emit: (r: IngestRecord) => void): () => void {\n let closed = false\n let timer: ReturnType<typeof setTimeout> | null = null\n let inFlight = false\n\n const run = async () => {\n if (closed || inFlight) return\n inFlight = true\n try {\n for await (const record of this.emitSnapshot()) {\n if (closed) return\n emit(record)\n }\n } catch {\n // A mid-write torn read is fine — the next change event retries.\n } finally {\n inFlight = false\n }\n }\n\n const schedule = () => {\n if (closed) return\n if (timer) clearTimeout(timer)\n timer = setTimeout(() => {\n timer = null\n void run()\n }, 400)\n }\n\n const watcherPromise = import('chokidar').then(({ watch }) => {\n const w = watch(\n [this.stateDbPath, `${this.stateDbPath}-wal`, `${this.stateDbPath}-shm`],\n {\n ignoreInitial: true,\n awaitWriteFinish: { stabilityThreshold: 300, pollInterval: 100 },\n },\n )\n w.on('add', schedule)\n w.on('change', schedule)\n return w\n })\n\n return () => {\n closed = true\n if (timer) clearTimeout(timer)\n void watcherPromise.then(w => w.close())\n }\n }\n\n private async *emitSnapshot(): AsyncIterable<IngestRecord> {\n const workspaces = loadWorkspaceMap(cursorWorkspaceStorageDir(this.userDataDir))\n const snapshot = readCursorSnapshot(this.stateDbPath, workspaces)\n const seenScopes = new Set<string>()\n const parseOpts = this.prices ? { prices: this.prices } : {}\n\n for (const [composerId, composer] of snapshot.composers) {\n const bubbles = snapshot.bubbles.get(composerId) ?? []\n if (bubbles.length === 0) continue\n\n const workspacePath = snapshot.workspaceByComposer.get(composerId)\n const hash = workspacePath ? await scopeHash(workspacePath) : 'unknown'\n\n if (!seenScopes.has(hash)) {\n seenScopes.add(hash)\n yield {\n type: 'scope',\n scopeHash: hash,\n label: workspacePath ? labelFromWorkspacePath(workspacePath) : 'workspace',\n provider: this.name,\n }\n }\n\n for (const event of eventsFromComposer(composer, bubbles, hash, parseOpts)) {\n yield { type: 'event', event }\n }\n }\n }\n}\n","import type { Adapter } from '@nomnomtokens/core'\nimport { ClaudeCodeAdapter } from './claude-code/index.js'\nimport { CodexAdapter } from './codex/index.js'\nimport { CursorAdapter } from './cursor/index.js'\n\nexport * from './claude-code/index.js'\nexport * from './codex/index.js'\nexport * from './cursor/index.js'\nexport * from './csv/index.js'\n\n/**\n * The adapter registry.\n *\n * Adding a source is: a new directory under src/, one line here. If a new\n * adapter ever needs a change in core or the UI, the contract was designed\n * wrong — fix the contract, not the adapter. See docs/adapters.md.\n */\nexport function allAdapters(): Adapter[] {\n return [new ClaudeCodeAdapter(), new CursorAdapter(), new CodexAdapter()]\n}\n\nexport async function detectAdapters(): Promise<Adapter[]> {\n const found: Adapter[] = []\n for (const adapter of allAdapters()) {\n if (await adapter.detect()) found.push(adapter)\n }\n return found\n}\n","export const entityKind = Symbol.for('drizzle:entityKind');\nexport const hasOwnEntityKind = Symbol.for('drizzle:hasOwnEntityKind');\n\nexport interface DrizzleEntity {\n\t[entityKind]: string;\n}\n\nexport type DrizzleEntityClass<T> =\n\t& ((abstract new(...args: any[]) => T) | (new(...args: any[]) => T))\n\t& DrizzleEntity;\n\nexport function is<T extends DrizzleEntityClass<any>>(value: any, type: T): value is InstanceType<T> {\n\tif (!value || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\n\tif (value instanceof type) { // eslint-disable-line no-instanceof/no-instanceof\n\t\treturn true;\n\t}\n\n\tif (!Object.prototype.hasOwnProperty.call(type, entityKind)) {\n\t\tthrow new Error(\n\t\t\t`Class \"${\n\t\t\t\ttype.name ?? '<unknown>'\n\t\t\t}\" doesn't look like a Drizzle entity. If this is incorrect and the class is provided by Drizzle, please report this as a bug.`,\n\t\t);\n\t}\n\n\tlet cls = Object.getPrototypeOf(value).constructor;\n\tif (cls) {\n\t\t// Traverse the prototype chain to find the entityKind\n\t\twhile (cls) {\n\t\t\tif (entityKind in cls && cls[entityKind] === type[entityKind]) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcls = Object.getPrototypeOf(cls);\n\t\t}\n\t}\n\n\treturn false;\n}\n","import { entityKind } from '~/entity.ts';\n\nexport interface Logger {\n\tlogQuery(query: string, params: unknown[]): void;\n}\n\nexport interface LogWriter {\n\twrite(message: string): void;\n}\n\nexport class ConsoleLogWriter implements LogWriter {\n\tstatic readonly [entityKind]: string = 'ConsoleLogWriter';\n\n\twrite(message: string) {\n\t\tconsole.log(message);\n\t}\n}\n\nexport class DefaultLogger implements Logger {\n\tstatic readonly [entityKind]: string = 'DefaultLogger';\n\n\treadonly writer: LogWriter;\n\n\tconstructor(config?: { writer: LogWriter }) {\n\t\tthis.writer = config?.writer ?? new ConsoleLogWriter();\n\t}\n\n\tlogQuery(query: string, params: unknown[]): void {\n\t\tconst stringifiedParams = params.map((p) => {\n\t\t\ttry {\n\t\t\t\treturn JSON.stringify(p);\n\t\t\t} catch {\n\t\t\t\treturn String(p);\n\t\t\t}\n\t\t});\n\t\tconst paramsStr = stringifiedParams.length ? ` -- params: [${stringifiedParams.join(', ')}]` : '';\n\t\tthis.writer.write(`Query: ${query}${paramsStr}`);\n\t}\n}\n\nexport class NoopLogger implements Logger {\n\tstatic readonly [entityKind]: string = 'NoopLogger';\n\n\tlogQuery(): void {\n\t\t// noop\n\t}\n}\n","/** @internal */\nexport const TableName = Symbol.for('drizzle:Name');\n","import type { Column, GetColumnData } from './column.ts';\nimport { entityKind } from './entity.ts';\nimport type { OptionalKeyOnly, RequiredKeyOnly } from './operations.ts';\nimport type { SQLWrapper } from './sql/sql.ts';\nimport { TableName } from './table.utils.ts';\nimport type { Simplify, Update } from './utils.ts';\n\nexport interface TableConfig<TColumn extends Column = Column<any>> {\n\tname: string;\n\tschema: string | undefined;\n\tcolumns: Record<string, TColumn>;\n\tdialect: string;\n}\n\nexport type UpdateTableConfig<T extends TableConfig, TUpdate extends Partial<TableConfig>> = Required<\n\tUpdate<T, TUpdate>\n>;\n\n/** @internal */\nexport const Schema = Symbol.for('drizzle:Schema');\n\n/** @internal */\nexport const Columns = Symbol.for('drizzle:Columns');\n\n/** @internal */\nexport const ExtraConfigColumns = Symbol.for('drizzle:ExtraConfigColumns');\n\n/** @internal */\nexport const OriginalName = Symbol.for('drizzle:OriginalName');\n\n/** @internal */\nexport const BaseName = Symbol.for('drizzle:BaseName');\n\n/** @internal */\nexport const IsAlias = Symbol.for('drizzle:IsAlias');\n\n/** @internal */\nexport const ExtraConfigBuilder = Symbol.for('drizzle:ExtraConfigBuilder');\n\nconst IsDrizzleTable = Symbol.for('drizzle:IsDrizzleTable');\n\nexport interface Table<\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tT extends TableConfig = TableConfig,\n> extends SQLWrapper {\n\t// SQLWrapper runtime implementation is defined in 'sql/sql.ts'\n}\n\nexport class Table<T extends TableConfig = TableConfig> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Table';\n\n\tdeclare readonly _: {\n\t\treadonly brand: 'Table';\n\t\treadonly config: T;\n\t\treadonly name: T['name'];\n\t\treadonly schema: T['schema'];\n\t\treadonly columns: T['columns'];\n\t\treadonly inferSelect: InferSelectModel<Table<T>>;\n\t\treadonly inferInsert: InferInsertModel<Table<T>>;\n\t};\n\n\tdeclare readonly $inferSelect: InferSelectModel<Table<T>>;\n\tdeclare readonly $inferInsert: InferInsertModel<Table<T>>;\n\n\t/** @internal */\n\tstatic readonly Symbol = {\n\t\tName: TableName as typeof TableName,\n\t\tSchema: Schema as typeof Schema,\n\t\tOriginalName: OriginalName as typeof OriginalName,\n\t\tColumns: Columns as typeof Columns,\n\t\tExtraConfigColumns: ExtraConfigColumns as typeof ExtraConfigColumns,\n\t\tBaseName: BaseName as typeof BaseName,\n\t\tIsAlias: IsAlias as typeof IsAlias,\n\t\tExtraConfigBuilder: ExtraConfigBuilder as typeof ExtraConfigBuilder,\n\t};\n\n\t/**\n\t * @internal\n\t * Can be changed if the table is aliased.\n\t */\n\t[TableName]: string;\n\n\t/**\n\t * @internal\n\t * Used to store the original name of the table, before any aliasing.\n\t */\n\t[OriginalName]: string;\n\n\t/** @internal */\n\t[Schema]: string | undefined;\n\n\t/** @internal */\n\t[Columns]!: T['columns'];\n\n\t/** @internal */\n\t[ExtraConfigColumns]!: Record<string, unknown>;\n\n\t/**\n\t * @internal\n\t * Used to store the table name before the transformation via the `tableCreator` functions.\n\t */\n\t[BaseName]: string;\n\n\t/** @internal */\n\t[IsAlias] = false;\n\n\t/** @internal */\n\t[IsDrizzleTable] = true;\n\n\t/** @internal */\n\t[ExtraConfigBuilder]: ((self: any) => Record<string, unknown> | unknown[]) | undefined = undefined;\n\n\tconstructor(name: string, schema: string | undefined, baseName: string) {\n\t\tthis[TableName] = this[OriginalName] = name;\n\t\tthis[Schema] = schema;\n\t\tthis[BaseName] = baseName;\n\t}\n}\n\nexport function isTable(table: unknown): table is Table {\n\treturn typeof table === 'object' && table !== null && IsDrizzleTable in table;\n}\n\n/**\n * Any table with a specified boundary.\n *\n * @example\n\t```ts\n\t// Any table with a specific name\n\ttype AnyUsersTable = AnyTable<{ name: 'users' }>;\n\t```\n *\n * To describe any table with any config, simply use `Table` without any type arguments, like this:\n *\n\t```ts\n\tfunction needsTable(table: Table) {\n\t\t...\n\t}\n\t```\n */\nexport type AnyTable<TPartial extends Partial<TableConfig>> = Table<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport function getTableName<T extends Table>(table: T): T['_']['name'] {\n\treturn table[TableName];\n}\n\nexport function getTableUniqueName<T extends Table>(table: T): `${T['_']['schema']}.${T['_']['name']}` {\n\treturn `${table[Schema] ?? 'public'}.${table[TableName]}`;\n}\n\nexport type MapColumnName<TName extends string, TColumn extends Column, TDBColumNames extends boolean> =\n\tTDBColumNames extends true ? TColumn['_']['name']\n\t\t: TName;\n\nexport type InferModelFromColumns<\n\tTColumns extends Record<string, Column>,\n\tTInferMode extends 'select' | 'insert' = 'select',\n\tTConfig extends { dbColumnNames: boolean; override?: boolean } = { dbColumnNames: false; override: false },\n> = Simplify<\n\tTInferMode extends 'insert' ?\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as RequiredKeyOnly<\n\t\t\t\t\t\tMapColumnName<Key, TColumns[Key], TConfig['dbColumnNames']>,\n\t\t\t\t\t\tTColumns[Key]\n\t\t\t\t\t>\n\t\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t\t}\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as OptionalKeyOnly<\n\t\t\t\t\t\tMapColumnName<Key, TColumns[Key], TConfig['dbColumnNames']>,\n\t\t\t\t\t\tTColumns[Key],\n\t\t\t\t\t\tTConfig['override']\n\t\t\t\t\t>\n\t\t\t\t]?: GetColumnData<TColumns[Key], 'query'> | undefined;\n\t\t\t}\n\t\t: {\n\t\t\t[\n\t\t\t\tKey in keyof TColumns & string as MapColumnName<\n\t\t\t\t\tKey,\n\t\t\t\t\tTColumns[Key],\n\t\t\t\t\tTConfig['dbColumnNames']\n\t\t\t\t>\n\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t}\n>;\n\n/** @deprecated Use one of the alternatives: {@link InferSelectModel} / {@link InferInsertModel}, or `table.$inferSelect` / `table.$inferInsert`\n */\nexport type InferModel<\n\tTTable extends Table,\n\tTInferMode extends 'select' | 'insert' = 'select',\n\tTConfig extends { dbColumnNames: boolean } = { dbColumnNames: false },\n> = InferModelFromColumns<TTable['_']['columns'], TInferMode, TConfig>;\n\nexport type InferSelectModel<\n\tTTable extends Table,\n\tTConfig extends { dbColumnNames: boolean } = { dbColumnNames: false },\n> = InferModelFromColumns<TTable['_']['columns'], 'select', TConfig>;\n\nexport type InferInsertModel<\n\tTTable extends Table,\n\tTConfig extends { dbColumnNames: boolean; override?: boolean } = { dbColumnNames: false; override: false },\n> = InferModelFromColumns<TTable['_']['columns'], 'insert', TConfig>;\n\nexport type InferEnum<T> = T extends { enumValues: readonly (infer U)[] } ? U\n\t: never;\n","import type {\n\tColumnBuilderBaseConfig,\n\tColumnBuilderRuntimeConfig,\n\tColumnDataType,\n\tGeneratedColumnConfig,\n\tGeneratedIdentityConfig,\n} from './column-builder.ts';\nimport { entityKind } from './entity.ts';\nimport type { DriverValueMapper, SQL, SQLWrapper } from './sql/sql.ts';\nimport type { Table } from './table.ts';\nimport type { Update } from './utils.ts';\n\nexport interface ColumnBaseConfig<\n\tTDataType extends ColumnDataType,\n\tTColumnType extends string,\n> extends ColumnBuilderBaseConfig<TDataType, TColumnType> {\n\ttableName: string;\n\tnotNull: boolean;\n\thasDefault: boolean;\n\tisPrimaryKey: boolean;\n\tisAutoincrement: boolean;\n\thasRuntimeDefault: boolean;\n}\n\nexport type ColumnTypeConfig<T extends ColumnBaseConfig<ColumnDataType, string>, TTypeConfig extends object> = T & {\n\tbrand: 'Column';\n\ttableName: T['tableName'];\n\tname: T['name'];\n\tdataType: T['dataType'];\n\tcolumnType: T['columnType'];\n\tdata: T['data'];\n\tdriverParam: T['driverParam'];\n\tnotNull: T['notNull'];\n\thasDefault: T['hasDefault'];\n\tisPrimaryKey: T['isPrimaryKey'];\n\tisAutoincrement: T['isAutoincrement'];\n\thasRuntimeDefault: T['hasRuntimeDefault'];\n\tenumValues: T['enumValues'];\n\tbaseColumn: T extends { baseColumn: infer U } ? U : unknown;\n\tgenerated: GeneratedColumnConfig<T['data']> | undefined;\n\tidentity: undefined | 'always' | 'byDefault';\n} & TTypeConfig;\n\nexport type ColumnRuntimeConfig<TData, TRuntimeConfig extends object> = ColumnBuilderRuntimeConfig<\n\tTData,\n\tTRuntimeConfig\n>;\n\nexport interface Column<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTRuntimeConfig extends object = object,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTTypeConfig extends object = object,\n> extends DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {\n\t// SQLWrapper runtime implementation is defined in 'sql/sql.ts'\n}\n/*\n\t`Column` only accepts a full `ColumnConfig` as its generic.\n\tTo infer parts of the config, use `AnyColumn` that accepts a partial config.\n\tSee `GetColumnData` for example usage of inferring.\n*/\nexport abstract class Column<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n\tTTypeConfig extends object = object,\n> implements DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Column';\n\n\tdeclare readonly _: ColumnTypeConfig<T, TTypeConfig>;\n\n\treadonly name: string;\n\treadonly keyAsName: boolean;\n\treadonly primary: boolean;\n\treadonly notNull: boolean;\n\treadonly default: T['data'] | SQL | undefined;\n\treadonly defaultFn: (() => T['data'] | SQL) | undefined;\n\treadonly onUpdateFn: (() => T['data'] | SQL) | undefined;\n\treadonly hasDefault: boolean;\n\treadonly isUnique: boolean;\n\treadonly uniqueName: string | undefined;\n\treadonly uniqueType: string | undefined;\n\treadonly dataType: T['dataType'];\n\treadonly columnType: T['columnType'];\n\treadonly enumValues: T['enumValues'] = undefined;\n\treadonly generated: GeneratedColumnConfig<T['data']> | undefined = undefined;\n\treadonly generatedIdentity: GeneratedIdentityConfig | undefined = undefined;\n\n\tprotected config: ColumnRuntimeConfig<T['data'], TRuntimeConfig>;\n\n\tconstructor(\n\t\treadonly table: Table,\n\t\tconfig: ColumnRuntimeConfig<T['data'], TRuntimeConfig>,\n\t) {\n\t\tthis.config = config;\n\t\tthis.name = config.name;\n\t\tthis.keyAsName = config.keyAsName;\n\t\tthis.notNull = config.notNull;\n\t\tthis.default = config.default;\n\t\tthis.defaultFn = config.defaultFn;\n\t\tthis.onUpdateFn = config.onUpdateFn;\n\t\tthis.hasDefault = config.hasDefault;\n\t\tthis.primary = config.primaryKey;\n\t\tthis.isUnique = config.isUnique;\n\t\tthis.uniqueName = config.uniqueName;\n\t\tthis.uniqueType = config.uniqueType;\n\t\tthis.dataType = config.dataType as T['dataType'];\n\t\tthis.columnType = config.columnType;\n\t\tthis.generated = config.generated;\n\t\tthis.generatedIdentity = config.generatedIdentity;\n\t}\n\n\tabstract getSQLType(): string;\n\n\tmapFromDriverValue(value: unknown): unknown {\n\t\treturn value;\n\t}\n\n\tmapToDriverValue(value: unknown): unknown {\n\t\treturn value;\n\t}\n\n\t// ** @internal */\n\tshouldDisableInsert(): boolean {\n\t\treturn this.config.generated !== undefined && this.config.generated.type !== 'byDefault';\n\t}\n}\n\nexport type UpdateColConfig<\n\tT extends ColumnBaseConfig<ColumnDataType, string>,\n\tTUpdate extends Partial<ColumnBaseConfig<ColumnDataType, string>>,\n> = Update<T, TUpdate>;\n\nexport type AnyColumn<TPartial extends Partial<ColumnBaseConfig<ColumnDataType, string>> = {}> = Column<\n\tRequired<Update<ColumnBaseConfig<ColumnDataType, string>, TPartial>>\n>;\n\nexport type GetColumnData<TColumn extends Column, TInferMode extends 'query' | 'raw' = 'query'> =\n\t// dprint-ignore\n\tTInferMode extends 'raw' // Raw mode\n\t\t? TColumn['_']['data'] // Just return the underlying type\n\t\t: TColumn['_']['notNull'] extends true // Query mode\n\t\t? TColumn['_']['data'] // Query mode, not null\n\t\t: TColumn['_']['data'] | null; // Query mode, nullable\n\nexport type InferColumnsDataTypes<TColumns extends Record<string, Column>> = {\n\t[Key in keyof TColumns]: GetColumnData<TColumns[Key], 'query'>;\n};\n","import { entityKind } from '~/entity.ts';\nimport type { Column } from './column.ts';\nimport type { GelColumn, GelExtraConfigColumn } from './gel-core/index.ts';\nimport type { MySqlColumn } from './mysql-core/index.ts';\nimport type { ExtraConfigColumn, PgColumn, PgSequenceOptions } from './pg-core/index.ts';\nimport type { SingleStoreColumn } from './singlestore-core/index.ts';\nimport type { SQL } from './sql/sql.ts';\nimport type { SQLiteColumn } from './sqlite-core/index.ts';\nimport type { Assume, Simplify } from './utils.ts';\n\nexport type ColumnDataType =\n\t| 'string'\n\t| 'number'\n\t| 'boolean'\n\t| 'array'\n\t| 'json'\n\t| 'date'\n\t| 'bigint'\n\t| 'custom'\n\t| 'buffer'\n\t| 'dateDuration'\n\t| 'duration'\n\t| 'relDuration'\n\t| 'localTime'\n\t| 'localDate'\n\t| 'localDateTime';\n\nexport type Dialect = 'pg' | 'mysql' | 'sqlite' | 'singlestore' | 'common' | 'gel';\n\nexport type GeneratedStorageMode = 'virtual' | 'stored';\n\nexport type GeneratedType = 'always' | 'byDefault';\n\nexport type GeneratedColumnConfig<TDataType> = {\n\tas: TDataType | SQL | (() => SQL);\n\ttype?: GeneratedType;\n\tmode?: GeneratedStorageMode;\n};\n\nexport type GeneratedIdentityConfig = {\n\tsequenceName?: string;\n\tsequenceOptions?: PgSequenceOptions;\n\ttype: 'always' | 'byDefault';\n};\n\nexport interface ColumnBuilderBaseConfig<TDataType extends ColumnDataType, TColumnType extends string> {\n\tname: string;\n\tdataType: TDataType;\n\tcolumnType: TColumnType;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tenumValues: string[] | undefined;\n}\n\nexport type MakeColumnConfig<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTableName extends string,\n\tTData = T extends { $type: infer U } ? U : T['data'],\n> = {\n\tname: T['name'];\n\ttableName: TTableName;\n\tdataType: T['dataType'];\n\tcolumnType: T['columnType'];\n\tdata: TData;\n\tdriverParam: T['driverParam'];\n\tnotNull: T extends { notNull: true } ? true : false;\n\thasDefault: T extends { hasDefault: true } ? true : false;\n\tisPrimaryKey: T extends { isPrimaryKey: true } ? true : false;\n\tisAutoincrement: T extends { isAutoincrement: true } ? true : false;\n\thasRuntimeDefault: T extends { hasRuntimeDefault: true } ? true : false;\n\tenumValues: T['enumValues'];\n\tbaseColumn: T extends { baseBuilder: infer U extends ColumnBuilderBase } ? BuildColumn<TTableName, U, 'common'>\n\t\t: never;\n\tidentity: T extends { identity: 'always' } ? 'always' : T extends { identity: 'byDefault' } ? 'byDefault' : undefined;\n\tgenerated: T extends { generated: infer G } ? unknown extends G ? undefined\n\t\t: G extends undefined ? undefined\n\t\t: G\n\t\t: undefined;\n} & {};\n\nexport type ColumnBuilderTypeConfig<\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTypeConfig extends object = object,\n> = Simplify<\n\t& {\n\t\tbrand: 'ColumnBuilder';\n\t\tname: T['name'];\n\t\tdataType: T['dataType'];\n\t\tcolumnType: T['columnType'];\n\t\tdata: T['data'];\n\t\tdriverParam: T['driverParam'];\n\t\tnotNull: T extends { notNull: infer U } ? U : boolean;\n\t\thasDefault: T extends { hasDefault: infer U } ? U : boolean;\n\t\tenumValues: T['enumValues'];\n\t\tidentity: T extends { identity: infer U } ? U : unknown;\n\t\tgenerated: T extends { generated: infer G } ? G extends undefined ? unknown : G : unknown;\n\t}\n\t& TTypeConfig\n>;\n\nexport type ColumnBuilderRuntimeConfig<TData, TRuntimeConfig extends object = object> = {\n\tname: string;\n\tkeyAsName: boolean;\n\tnotNull: boolean;\n\tdefault: TData | SQL | undefined;\n\tdefaultFn: (() => TData | SQL) | undefined;\n\tonUpdateFn: (() => TData | SQL) | undefined;\n\thasDefault: boolean;\n\tprimaryKey: boolean;\n\tisUnique: boolean;\n\tuniqueName: string | undefined;\n\tuniqueType: string | undefined;\n\tdataType: string;\n\tcolumnType: string;\n\tgenerated: GeneratedColumnConfig<TData> | undefined;\n\tgeneratedIdentity: GeneratedIdentityConfig | undefined;\n} & TRuntimeConfig;\n\nexport interface ColumnBuilderExtraConfig {\n\tprimaryKeyHasDefault?: boolean;\n}\n\nexport type NotNull<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\tnotNull: true;\n\t};\n};\n\nexport type HasDefault<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\thasDefault: true;\n\t};\n};\n\nexport type IsPrimaryKey<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\tisPrimaryKey: true;\n\t};\n};\n\nexport type IsAutoincrement<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\tisAutoincrement: true;\n\t};\n};\n\nexport type HasRuntimeDefault<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\thasRuntimeDefault: true;\n\t};\n};\n\nexport type $Type<T extends ColumnBuilderBase, TType> = T & {\n\t_: {\n\t\t$type: TType;\n\t};\n};\n\nexport type HasGenerated<T extends ColumnBuilderBase, TGenerated extends {} = {}> = T & {\n\t_: {\n\t\thasDefault: true;\n\t\tgenerated: TGenerated;\n\t};\n};\n\nexport type IsIdentity<\n\tT extends ColumnBuilderBase,\n\tTType extends 'always' | 'byDefault',\n> = T & {\n\t_: {\n\t\tnotNull: true;\n\t\thasDefault: true;\n\t\tidentity: TType;\n\t};\n};\nexport interface ColumnBuilderBase<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTypeConfig extends object = object,\n> {\n\t_: ColumnBuilderTypeConfig<T, TTypeConfig>;\n}\n\n// To understand how to use `ColumnBuilder` and `AnyColumnBuilder`, see `Column` and `AnyColumn` documentation.\nexport abstract class ColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n\tTTypeConfig extends object = object,\n\tTExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig,\n> implements ColumnBuilderBase<T, TTypeConfig> {\n\tstatic readonly [entityKind]: string = 'ColumnBuilder';\n\n\tdeclare _: ColumnBuilderTypeConfig<T, TTypeConfig>;\n\n\tprotected config: ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>;\n\n\tconstructor(name: T['name'], dataType: T['dataType'], columnType: T['columnType']) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tkeyAsName: name === '',\n\t\t\tnotNull: false,\n\t\t\tdefault: undefined,\n\t\t\thasDefault: false,\n\t\t\tprimaryKey: false,\n\t\t\tisUnique: false,\n\t\t\tuniqueName: undefined,\n\t\t\tuniqueType: undefined,\n\t\t\tdataType,\n\t\t\tcolumnType,\n\t\t\tgenerated: undefined,\n\t\t} as ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>;\n\t}\n\n\t/**\n\t * Changes the data type of the column. Commonly used with `json` columns. Also, useful for branded types.\n\t *\n\t * @example\n\t * ```ts\n\t * const users = pgTable('users', {\n\t * \tid: integer('id').$type<UserId>().primaryKey(),\n\t * \tdetails: json('details').$type<UserDetails>().notNull(),\n\t * });\n\t * ```\n\t */\n\t$type<TType>(): $Type<this, TType> {\n\t\treturn this as $Type<this, TType>;\n\t}\n\n\t/**\n\t * Adds a `not null` clause to the column definition.\n\t *\n\t * Affects the `select` model of the table - columns *without* `not null` will be nullable on select.\n\t */\n\tnotNull(): NotNull<this> {\n\t\tthis.config.notNull = true;\n\t\treturn this as NotNull<this>;\n\t}\n\n\t/**\n\t * Adds a `default <value>` clause to the column definition.\n\t *\n\t * Affects the `insert` model of the table - columns *with* `default` are optional on insert.\n\t *\n\t * If you need to set a dynamic default value, use {@link $defaultFn} instead.\n\t */\n\tdefault(value: (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL): HasDefault<this> {\n\t\tthis.config.default = value;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Adds a dynamic default value to the column.\n\t * The function will be called when the row is inserted, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$defaultFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasRuntimeDefault<HasDefault<this>> {\n\t\tthis.config.defaultFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasRuntimeDefault<HasDefault<this>>;\n\t}\n\n\t/**\n\t * Alias for {@link $defaultFn}.\n\t */\n\t$default = this.$defaultFn;\n\n\t/**\n\t * Adds a dynamic update value to the column.\n\t * The function will be called when the row is updated, and the returned value will be used as the column value if none is provided.\n\t * If no `default` (or `$defaultFn`) value is provided, the function will be called when the row is inserted as well, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$onUpdateFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasDefault<this> {\n\t\tthis.config.onUpdateFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $onUpdateFn}.\n\t */\n\t$onUpdate = this.$onUpdateFn;\n\n\t/**\n\t * Adds a `primary key` clause to the column definition. This implicitly makes the column `not null`.\n\t *\n\t * In SQLite, `integer primary key` implicitly makes the column auto-incrementing.\n\t */\n\tprimaryKey(): TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<NotNull<this>>>\n\t\t: IsPrimaryKey<NotNull<this>>\n\t{\n\t\tthis.config.primaryKey = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<NotNull<this>>>\n\t\t\t: IsPrimaryKey<NotNull<this>>;\n\t}\n\n\tabstract generatedAlwaysAs(\n\t\tas: SQL | T['data'] | (() => SQL),\n\t\tconfig?: Partial<GeneratedColumnConfig<unknown>>,\n\t): HasGenerated<this, {\n\t\ttype: 'always';\n\t}>;\n\n\t/** @internal Sets the name of the column to the key within the table definition if a name was not given. */\n\tsetName(name: string) {\n\t\tif (this.config.name !== '') return;\n\t\tthis.config.name = name;\n\t}\n}\n\nexport type BuildColumn<\n\tTTableName extends string,\n\tTBuilder extends ColumnBuilderBase,\n\tTDialect extends Dialect,\n> = TDialect extends 'pg' ? PgColumn<\n\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t{},\n\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t>\n\t: TDialect extends 'mysql' ? MySqlColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<\n\t\t\t\tOmit<\n\t\t\t\t\tTBuilder['_'],\n\t\t\t\t\t| keyof MakeColumnConfig<TBuilder['_'], TTableName>\n\t\t\t\t\t| 'brand'\n\t\t\t\t\t| 'dialect'\n\t\t\t\t\t| 'primaryKeyHasDefault'\n\t\t\t\t\t| 'mysqlColumnBuilderBrand'\n\t\t\t\t>\n\t\t\t>\n\t\t>\n\t: TDialect extends 'sqlite' ? SQLiteColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t\t>\n\t: TDialect extends 'common' ? Column<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t\t>\n\t: TDialect extends 'singlestore' ? SingleStoreColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<\n\t\t\t\tOmit<\n\t\t\t\t\tTBuilder['_'],\n\t\t\t\t\t| keyof MakeColumnConfig<TBuilder['_'], TTableName>\n\t\t\t\t\t| 'brand'\n\t\t\t\t\t| 'dialect'\n\t\t\t\t\t| 'primaryKeyHasDefault'\n\t\t\t\t\t| 'singlestoreColumnBuilderBrand'\n\t\t\t\t>\n\t\t\t>\n\t\t>\n\t: TDialect extends 'gel' ? GelColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t\t>\n\t: never;\n\nexport type BuildIndexColumn<\n\tTDialect extends Dialect,\n> = TDialect extends 'pg' ? ExtraConfigColumn\n\t: TDialect extends 'gel' ? GelExtraConfigColumn\n\t: never;\n\n// TODO\n// try to make sql as well + indexRaw\n\n// optional after everything will be working as expected\n// also try to leave only needed methods for extraConfig\n// make an error if I pass .asc() to fk and so on\n\nexport type BuildColumns<\n\tTTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildColumn<TTableName, {\n\t\t\t_:\n\t\t\t\t& Omit<TConfigMap[Key]['_'], 'name'>\n\t\t\t\t& { name: TConfigMap[Key]['_']['name'] extends '' ? Assume<Key, string> : TConfigMap[Key]['_']['name'] };\n\t\t}, TDialect>;\n\t}\n\t& {};\n\nexport type BuildExtraConfigColumns<\n\t_TTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildIndexColumn<TDialect>;\n\t}\n\t& {};\n\nexport type ChangeColumnTableName<TColumn extends Column, TAlias extends string, TDialect extends Dialect> =\n\tTDialect extends 'pg' ? PgColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'mysql' ? MySqlColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'singlestore' ? SingleStoreColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'sqlite' ? SQLiteColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'gel' ? GelColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: never;\n","import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport type { NonArray, Writable } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\n// Enum as ts enum\n\nexport type PgEnumObjectColumnBuilderInitial<TName extends string, TValues extends object> = PgEnumObjectColumnBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgEnumObjectColumn';\n\tdata: TValues[keyof TValues];\n\tenumValues: string[];\n\tdriverParam: string;\n}>;\n\nexport interface PgEnumObject<TValues extends object> {\n\t(): PgEnumObjectColumnBuilderInitial<'', TValues>;\n\t<TName extends string>(name: TName): PgEnumObjectColumnBuilderInitial<TName, TValues>;\n\t<TName extends string>(name?: TName): PgEnumObjectColumnBuilderInitial<TName, TValues>;\n\n\treadonly enumName: string;\n\treadonly enumValues: string[];\n\treadonly schema: string | undefined;\n\t/** @internal */\n\t[isPgEnumSym]: true;\n}\n\nexport class PgEnumObjectColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<'string', 'PgEnumObjectColumn'> & { enumValues: string[] },\n> extends PgColumnBuilder<T, { enum: PgEnumObject<any> }> {\n\tstatic override readonly [entityKind]: string = 'PgEnumObjectColumnBuilder';\n\n\tconstructor(name: T['name'], enumInstance: PgEnumObject<any>) {\n\t\tsuper(name, 'string', 'PgEnumObjectColumn');\n\t\tthis.config.enum = enumInstance;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgEnumObjectColumn<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgEnumObjectColumn<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgEnumObjectColumn<T extends ColumnBaseConfig<'string', 'PgEnumObjectColumn'> & { enumValues: object }>\n\textends PgColumn<T, { enum: PgEnumObject<object> }>\n{\n\tstatic override readonly [entityKind]: string = 'PgEnumObjectColumn';\n\n\treadonly enum;\n\toverride readonly enumValues = this.config.enum.enumValues;\n\n\tconstructor(\n\t\ttable: AnyPgTable<{ name: T['tableName'] }>,\n\t\tconfig: PgEnumObjectColumnBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config);\n\t\tthis.enum = config.enum;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn this.enum.enumName;\n\t}\n}\n\n// Enum as string union\n\nexport type PgEnumColumnBuilderInitial<TName extends string, TValues extends [string, ...string[]]> =\n\tPgEnumColumnBuilder<{\n\t\tname: TName;\n\t\tdataType: 'string';\n\t\tcolumnType: 'PgEnumColumn';\n\t\tdata: TValues[number];\n\t\tenumValues: TValues;\n\t\tdriverParam: string;\n\t}>;\n\nconst isPgEnumSym = Symbol.for('drizzle:isPgEnum');\nexport interface PgEnum<TValues extends [string, ...string[]]> {\n\t(): PgEnumColumnBuilderInitial<'', TValues>;\n\t<TName extends string>(name: TName): PgEnumColumnBuilderInitial<TName, TValues>;\n\t<TName extends string>(name?: TName): PgEnumColumnBuilderInitial<TName, TValues>;\n\n\treadonly enumName: string;\n\treadonly enumValues: TValues;\n\treadonly schema: string | undefined;\n\t/** @internal */\n\t[isPgEnumSym]: true;\n}\n\nexport function isPgEnum(obj: unknown): obj is PgEnum<[string, ...string[]]> {\n\treturn !!obj && typeof obj === 'function' && isPgEnumSym in obj && obj[isPgEnumSym] === true;\n}\n\nexport class PgEnumColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<'string', 'PgEnumColumn'> & { enumValues: [string, ...string[]] },\n> extends PgColumnBuilder<T, { enum: PgEnum<T['enumValues']> }> {\n\tstatic override readonly [entityKind]: string = 'PgEnumColumnBuilder';\n\n\tconstructor(name: T['name'], enumInstance: PgEnum<T['enumValues']>) {\n\t\tsuper(name, 'string', 'PgEnumColumn');\n\t\tthis.config.enum = enumInstance;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgEnumColumn<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgEnumColumn<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgEnumColumn<T extends ColumnBaseConfig<'string', 'PgEnumColumn'> & { enumValues: [string, ...string[]] }>\n\textends PgColumn<T, { enum: PgEnum<T['enumValues']> }>\n{\n\tstatic override readonly [entityKind]: string = 'PgEnumColumn';\n\n\treadonly enum = this.config.enum;\n\toverride readonly enumValues = this.config.enum.enumValues;\n\n\tconstructor(\n\t\ttable: AnyPgTable<{ name: T['tableName'] }>,\n\t\tconfig: PgEnumColumnBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config);\n\t\tthis.enum = config.enum;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn this.enum.enumName;\n\t}\n}\n\nexport function pgEnum<U extends string, T extends Readonly<[U, ...U[]]>>(\n\tenumName: string,\n\tvalues: T | Writable<T>,\n): PgEnum<Writable<T>>;\n\nexport function pgEnum<E extends Record<string, string>>(\n\tenumName: string,\n\tenumObj: NonArray<E>,\n): PgEnumObject<E>;\n\nexport function pgEnum(\n\tenumName: any,\n\tinput: any,\n): any {\n\treturn Array.isArray(input)\n\t\t? pgEnumWithSchema(enumName, [...input] as [string, ...string[]], undefined)\n\t\t: pgEnumObjectWithSchema(enumName, input, undefined);\n}\n\n/** @internal */\nexport function pgEnumWithSchema<U extends string, T extends Readonly<[U, ...U[]]>>(\n\tenumName: string,\n\tvalues: T | Writable<T>,\n\tschema?: string,\n): PgEnum<Writable<T>> {\n\tconst enumInstance: PgEnum<Writable<T>> = Object.assign(\n\t\t<TName extends string>(name?: TName): PgEnumColumnBuilderInitial<TName, Writable<T>> =>\n\t\t\tnew PgEnumColumnBuilder(name ?? '' as TName, enumInstance),\n\t\t{\n\t\t\tenumName,\n\t\t\tenumValues: values,\n\t\t\tschema,\n\t\t\t[isPgEnumSym]: true,\n\t\t} as const,\n\t);\n\n\treturn enumInstance;\n}\n\n/** @internal */\nexport function pgEnumObjectWithSchema<T extends object>(\n\tenumName: string,\n\tvalues: T,\n\tschema?: string,\n): PgEnumObject<T> {\n\tconst enumInstance: PgEnumObject<T> = Object.assign(\n\t\t<TName extends string>(name?: TName): PgEnumObjectColumnBuilderInitial<TName, T> =>\n\t\t\tnew PgEnumObjectColumnBuilder(name ?? '' as TName, enumInstance),\n\t\t{\n\t\t\tenumName,\n\t\t\tenumValues: Object.values(values),\n\t\t\tschema,\n\t\t\t[isPgEnumSym]: true,\n\t\t} as const,\n\t);\n\n\treturn enumInstance;\n}\n","import { entityKind } from './entity.ts';\nimport type { SQL, SQLWrapper } from './sql/sql.ts';\n\nexport interface Subquery<\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTAlias extends string = string,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTSelectedFields extends Record<string, unknown> = Record<string, unknown>,\n> extends SQLWrapper {\n\t// SQLWrapper runtime implementation is defined in 'sql/sql.ts'\n}\nexport class Subquery<\n\tTAlias extends string = string,\n\tTSelectedFields extends Record<string, unknown> = Record<string, unknown>,\n> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Subquery';\n\n\tdeclare _: {\n\t\tbrand: 'Subquery';\n\t\tsql: SQL;\n\t\tselectedFields: TSelectedFields;\n\t\talias: TAlias;\n\t\tisWith: boolean;\n\t\tusedTables?: string[];\n\t};\n\n\tconstructor(sql: SQL, fields: TSelectedFields, alias: string, isWith = false, usedTables: string[] = []) {\n\t\tthis._ = {\n\t\t\tbrand: 'Subquery',\n\t\t\tsql,\n\t\t\tselectedFields: fields as TSelectedFields,\n\t\t\talias: alias as TAlias,\n\t\t\tisWith,\n\t\t\tusedTables,\n\t\t};\n\t}\n\n\t// getSQL(): SQL<unknown> {\n\t// \treturn new SQL([this]);\n\t// }\n}\n\nexport class WithSubquery<\n\tTAlias extends string = string,\n\tTSelection extends Record<string, unknown> = Record<string, unknown>,\n> extends Subquery<TAlias, TSelection> {\n\tstatic override readonly [entityKind]: string = 'WithSubquery';\n}\n\nexport type WithSubqueryWithoutSelection<TAlias extends string> = WithSubquery<TAlias, {}>;\n","import type { Span, Tracer } from '@opentelemetry/api';\nimport { iife } from '~/tracing-utils.ts';\nimport { npmVersion } from '~/version.ts';\n\nlet otel: typeof import('@opentelemetry/api') | undefined;\nlet rawTracer: Tracer | undefined;\n// try {\n// \totel = await import('@opentelemetry/api');\n// } catch (err: any) {\n// \tif (err.code !== 'MODULE_NOT_FOUND' && err.code !== 'ERR_MODULE_NOT_FOUND') {\n// \t\tthrow err;\n// \t}\n// }\n\ntype SpanName =\n\t| 'drizzle.operation'\n\t| 'drizzle.prepareQuery'\n\t| 'drizzle.buildSQL'\n\t| 'drizzle.execute'\n\t| 'drizzle.driver.execute'\n\t| 'drizzle.mapResponse';\n\n/** @internal */\nexport const tracer = {\n\tstartActiveSpan<F extends (span?: Span) => unknown>(name: SpanName, fn: F): ReturnType<F> {\n\t\tif (!otel) {\n\t\t\treturn fn() as ReturnType<F>;\n\t\t}\n\n\t\tif (!rawTracer) {\n\t\t\trawTracer = otel.trace.getTracer('drizzle-orm', npmVersion);\n\t\t}\n\n\t\treturn iife(\n\t\t\t(otel, rawTracer) =>\n\t\t\t\trawTracer.startActiveSpan(\n\t\t\t\t\tname,\n\t\t\t\t\t((span: Span) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\treturn fn(span);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\t\t\tcode: otel.SpanStatusCode.ERROR,\n\t\t\t\t\t\t\t\tmessage: e instanceof Error ? e.message : 'Unknown error', // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tspan.end();\n\t\t\t\t\t\t}\n\t\t\t\t\t}) as F,\n\t\t\t\t),\n\t\t\totel,\n\t\t\trawTracer,\n\t\t);\n\t},\n};\n","export const ViewBaseConfig = Symbol.for('drizzle:ViewBaseConfig');\n","import type { CasingCache } from '~/casing.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { isPgEnum } from '~/pg-core/columns/enum.ts';\nimport type { SelectResult } from '~/query-builders/select.types.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { tracer } from '~/tracing.ts';\nimport type { Assume, Equal } from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type { AnyColumn } from '../column.ts';\nimport { Column } from '../column.ts';\nimport { IsAlias, Table } from '../table.ts';\n\n/**\n * This class is used to indicate a primitive param value that is used in `sql` tag.\n * It is only used on type level and is never instantiated at runtime.\n * If you see a value of this type in the code, its runtime value is actually the primitive param value.\n */\nexport class FakePrimitiveParam {\n\tstatic readonly [entityKind]: string = 'FakePrimitiveParam';\n}\n\nexport type Chunk =\n\t| string\n\t| Table\n\t| View\n\t| AnyColumn\n\t| Name\n\t| Param\n\t| Placeholder\n\t| SQL;\n\nexport interface BuildQueryConfig {\n\tcasing: CasingCache;\n\tescapeName(name: string): string;\n\tescapeParam(num: number, value: unknown): string;\n\tescapeString(str: string): string;\n\tprepareTyping?: (encoder: DriverValueEncoder<unknown, unknown>) => QueryTypingsValue;\n\tparamStartIndex?: { value: number };\n\tinlineParams?: boolean;\n\tinvokeSource?: 'indexes' | undefined;\n}\n\nexport type QueryTypingsValue = 'json' | 'decimal' | 'time' | 'timestamp' | 'uuid' | 'date' | 'none';\n\nexport interface Query {\n\tsql: string;\n\tparams: unknown[];\n}\n\nexport interface QueryWithTypings extends Query {\n\ttypings?: QueryTypingsValue[];\n}\n\n/**\n * Any value that implements the `getSQL` method. The implementations include:\n * - `Table`\n * - `Column`\n * - `View`\n * - `Subquery`\n * - `SQL`\n * - `SQL.Aliased`\n * - `Placeholder`\n * - `Param`\n */\nexport interface SQLWrapper {\n\tgetSQL(): SQL;\n\tshouldOmitSQLParens?(): boolean;\n}\n\nexport function isSQLWrapper(value: unknown): value is SQLWrapper {\n\treturn value !== null && value !== undefined && typeof (value as any).getSQL === 'function';\n}\n\nfunction mergeQueries(queries: QueryWithTypings[]): QueryWithTypings {\n\tconst result: QueryWithTypings = { sql: '', params: [] };\n\tfor (const query of queries) {\n\t\tresult.sql += query.sql;\n\t\tresult.params.push(...query.params);\n\t\tif (query.typings?.length) {\n\t\t\tif (!result.typings) {\n\t\t\t\tresult.typings = [];\n\t\t\t}\n\t\t\tresult.typings.push(...query.typings);\n\t\t}\n\t}\n\treturn result;\n}\n\nexport class StringChunk implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'StringChunk';\n\n\treadonly value: string[];\n\n\tconstructor(value: string | string[]) {\n\t\tthis.value = Array.isArray(value) ? value : [value];\n\t}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\nexport class SQL<T = unknown> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'SQL';\n\n\tdeclare _: {\n\t\tbrand: 'SQL';\n\t\ttype: T;\n\t};\n\n\t/** @internal */\n\tdecoder: DriverValueDecoder<T, any> = noopDecoder;\n\tprivate shouldInlineParams = false;\n\n\t/** @internal */\n\tusedTables: string[] = [];\n\n\tconstructor(readonly queryChunks: SQLChunk[]) {\n\t\tfor (const chunk of queryChunks) {\n\t\t\tif (is(chunk, Table)) {\n\t\t\t\tconst schemaName = chunk[Table.Symbol.Schema];\n\n\t\t\t\tthis.usedTables.push(\n\t\t\t\t\tschemaName === undefined\n\t\t\t\t\t\t? chunk[Table.Symbol.Name]\n\t\t\t\t\t\t: schemaName + '.' + chunk[Table.Symbol.Name],\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tappend(query: SQL): this {\n\t\tthis.queryChunks.push(...query.queryChunks);\n\t\treturn this;\n\t}\n\n\ttoQuery(config: BuildQueryConfig): QueryWithTypings {\n\t\treturn tracer.startActiveSpan('drizzle.buildSQL', (span) => {\n\t\t\tconst query = this.buildQueryFromSourceParams(this.queryChunks, config);\n\t\t\tspan?.setAttributes({\n\t\t\t\t'drizzle.query.text': query.sql,\n\t\t\t\t'drizzle.query.params': JSON.stringify(query.params),\n\t\t\t});\n\t\t\treturn query;\n\t\t});\n\t}\n\n\tbuildQueryFromSourceParams(chunks: SQLChunk[], _config: BuildQueryConfig): Query {\n\t\tconst config = Object.assign({}, _config, {\n\t\t\tinlineParams: _config.inlineParams || this.shouldInlineParams,\n\t\t\tparamStartIndex: _config.paramStartIndex || { value: 0 },\n\t\t});\n\n\t\tconst {\n\t\t\tcasing,\n\t\t\tescapeName,\n\t\t\tescapeParam,\n\t\t\tprepareTyping,\n\t\t\tinlineParams,\n\t\t\tparamStartIndex,\n\t\t} = config;\n\n\t\treturn mergeQueries(chunks.map((chunk): QueryWithTypings => {\n\t\t\tif (is(chunk, StringChunk)) {\n\t\t\t\treturn { sql: chunk.value.join(''), params: [] };\n\t\t\t}\n\n\t\t\tif (is(chunk, Name)) {\n\t\t\t\treturn { sql: escapeName(chunk.value), params: [] };\n\t\t\t}\n\n\t\t\tif (chunk === undefined) {\n\t\t\t\treturn { sql: '', params: [] };\n\t\t\t}\n\n\t\t\tif (Array.isArray(chunk)) {\n\t\t\t\tconst result: SQLChunk[] = [new StringChunk('(')];\n\t\t\t\tfor (const [i, p] of chunk.entries()) {\n\t\t\t\t\tresult.push(p);\n\t\t\t\t\tif (i < chunk.length - 1) {\n\t\t\t\t\t\tresult.push(new StringChunk(', '));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult.push(new StringChunk(')'));\n\t\t\t\treturn this.buildQueryFromSourceParams(result, config);\n\t\t\t}\n\n\t\t\tif (is(chunk, SQL)) {\n\t\t\t\treturn this.buildQueryFromSourceParams(chunk.queryChunks, {\n\t\t\t\t\t...config,\n\t\t\t\t\tinlineParams: inlineParams || chunk.shouldInlineParams,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (is(chunk, Table)) {\n\t\t\t\tconst schemaName = chunk[Table.Symbol.Schema];\n\t\t\t\tconst tableName = chunk[Table.Symbol.Name];\n\t\t\t\treturn {\n\t\t\t\t\tsql: schemaName === undefined || chunk[IsAlias]\n\t\t\t\t\t\t? escapeName(tableName)\n\t\t\t\t\t\t: escapeName(schemaName) + '.' + escapeName(tableName),\n\t\t\t\t\tparams: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, Column)) {\n\t\t\t\tconst columnName = casing.getColumnCasing(chunk);\n\t\t\t\tif (_config.invokeSource === 'indexes') {\n\t\t\t\t\treturn { sql: escapeName(columnName), params: [] };\n\t\t\t\t}\n\n\t\t\t\tconst schemaName = chunk.table[Table.Symbol.Schema];\n\t\t\t\treturn {\n\t\t\t\t\tsql: chunk.table[IsAlias] || schemaName === undefined\n\t\t\t\t\t\t? escapeName(chunk.table[Table.Symbol.Name]) + '.' + escapeName(columnName)\n\t\t\t\t\t\t: escapeName(schemaName) + '.' + escapeName(chunk.table[Table.Symbol.Name]) + '.'\n\t\t\t\t\t\t\t+ escapeName(columnName),\n\t\t\t\t\tparams: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, View)) {\n\t\t\t\tconst schemaName = chunk[ViewBaseConfig].schema;\n\t\t\t\tconst viewName = chunk[ViewBaseConfig].name;\n\t\t\t\treturn {\n\t\t\t\t\tsql: schemaName === undefined || chunk[ViewBaseConfig].isAlias\n\t\t\t\t\t\t? escapeName(viewName)\n\t\t\t\t\t\t: escapeName(schemaName) + '.' + escapeName(viewName),\n\t\t\t\t\tparams: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, Param)) {\n\t\t\t\tif (is(chunk.value, Placeholder)) {\n\t\t\t\t\treturn { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ['none'] };\n\t\t\t\t}\n\n\t\t\t\tconst mappedValue = chunk.value === null ? null : chunk.encoder.mapToDriverValue(chunk.value);\n\n\t\t\t\tif (is(mappedValue, SQL)) {\n\t\t\t\t\treturn this.buildQueryFromSourceParams([mappedValue], config);\n\t\t\t\t}\n\n\t\t\t\tif (inlineParams) {\n\t\t\t\t\treturn { sql: this.mapInlineParam(mappedValue, config), params: [] };\n\t\t\t\t}\n\n\t\t\t\tlet typings: QueryTypingsValue[] = ['none'];\n\t\t\t\tif (prepareTyping) {\n\t\t\t\t\ttypings = [prepareTyping(chunk.encoder)];\n\t\t\t\t}\n\n\t\t\t\treturn { sql: escapeParam(paramStartIndex.value++, mappedValue), params: [mappedValue], typings };\n\t\t\t}\n\n\t\t\tif (is(chunk, Placeholder)) {\n\t\t\t\treturn { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ['none'] };\n\t\t\t}\n\n\t\t\tif (is(chunk, SQL.Aliased) && chunk.fieldAlias !== undefined) {\n\t\t\t\treturn { sql: escapeName(chunk.fieldAlias), params: [] };\n\t\t\t}\n\n\t\t\tif (is(chunk, Subquery)) {\n\t\t\t\tif (chunk._.isWith) {\n\t\t\t\t\treturn { sql: escapeName(chunk._.alias), params: [] };\n\t\t\t\t}\n\t\t\t\treturn this.buildQueryFromSourceParams([\n\t\t\t\t\tnew StringChunk('('),\n\t\t\t\t\tchunk._.sql,\n\t\t\t\t\tnew StringChunk(') '),\n\t\t\t\t\tnew Name(chunk._.alias),\n\t\t\t\t], config);\n\t\t\t}\n\n\t\t\tif (isPgEnum(chunk)) {\n\t\t\t\tif (chunk.schema) {\n\t\t\t\t\treturn { sql: escapeName(chunk.schema) + '.' + escapeName(chunk.enumName), params: [] };\n\t\t\t\t}\n\t\t\t\treturn { sql: escapeName(chunk.enumName), params: [] };\n\t\t\t}\n\n\t\t\tif (isSQLWrapper(chunk)) {\n\t\t\t\tif (chunk.shouldOmitSQLParens?.()) {\n\t\t\t\t\treturn this.buildQueryFromSourceParams([chunk.getSQL()], config);\n\t\t\t\t}\n\t\t\t\treturn this.buildQueryFromSourceParams([\n\t\t\t\t\tnew StringChunk('('),\n\t\t\t\t\tchunk.getSQL(),\n\t\t\t\t\tnew StringChunk(')'),\n\t\t\t\t], config);\n\t\t\t}\n\n\t\t\tif (inlineParams) {\n\t\t\t\treturn { sql: this.mapInlineParam(chunk, config), params: [] };\n\t\t\t}\n\n\t\t\treturn { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ['none'] };\n\t\t}));\n\t}\n\n\tprivate mapInlineParam(\n\t\tchunk: unknown,\n\t\t{ escapeString }: BuildQueryConfig,\n\t): string {\n\t\tif (chunk === null) {\n\t\t\treturn 'null';\n\t\t}\n\t\tif (typeof chunk === 'number' || typeof chunk === 'boolean') {\n\t\t\treturn chunk.toString();\n\t\t}\n\t\tif (typeof chunk === 'string') {\n\t\t\treturn escapeString(chunk);\n\t\t}\n\t\tif (typeof chunk === 'object') {\n\t\t\tconst mappedValueAsString = chunk.toString();\n\t\t\tif (mappedValueAsString === '[object Object]') {\n\t\t\t\treturn escapeString(JSON.stringify(chunk));\n\t\t\t}\n\t\t\treturn escapeString(mappedValueAsString);\n\t\t}\n\t\tthrow new Error('Unexpected param value: ' + chunk);\n\t}\n\n\tgetSQL(): SQL {\n\t\treturn this;\n\t}\n\n\tas(alias: string): SQL.Aliased<T>;\n\t/**\n\t * @deprecated\n\t * Use ``sql<DataType>`query`.as(alias)`` instead.\n\t */\n\tas<TData>(): SQL<TData>;\n\t/**\n\t * @deprecated\n\t * Use ``sql<DataType>`query`.as(alias)`` instead.\n\t */\n\tas<TData>(alias: string): SQL.Aliased<TData>;\n\tas(alias?: string): SQL<T> | SQL.Aliased<T> {\n\t\t// TODO: remove with deprecated overloads\n\t\tif (alias === undefined) {\n\t\t\treturn this;\n\t\t}\n\n\t\treturn new SQL.Aliased(this, alias);\n\t}\n\n\tmapWith<\n\t\tTDecoder extends\n\t\t\t| DriverValueDecoder<any, any>\n\t\t\t| DriverValueDecoder<any, any>['mapFromDriverValue'],\n\t>(decoder: TDecoder): SQL<GetDecoderResult<TDecoder>> {\n\t\tthis.decoder = typeof decoder === 'function' ? { mapFromDriverValue: decoder } : decoder;\n\t\treturn this as SQL<GetDecoderResult<TDecoder>>;\n\t}\n\n\tinlineParams(): this {\n\t\tthis.shouldInlineParams = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * This method is used to conditionally include a part of the query.\n\t *\n\t * @param condition - Condition to check\n\t * @returns itself if the condition is `true`, otherwise `undefined`\n\t */\n\tif(condition: any | undefined): this | undefined {\n\t\treturn condition ? this : undefined;\n\t}\n}\n\nexport type GetDecoderResult<T> = T extends Column ? T['_']['data'] : T extends\n\t| DriverValueDecoder<infer TData, any>\n\t| DriverValueDecoder<infer TData, any>['mapFromDriverValue'] ? TData\n: never;\n\n/**\n * Any DB name (table, column, index etc.)\n */\nexport class Name implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Name';\n\n\tprotected brand!: 'Name';\n\n\tconstructor(readonly value: string) {}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\n/**\n * Any DB name (table, column, index etc.)\n * @deprecated Use `sql.identifier` instead.\n */\nexport function name(value: string): Name {\n\treturn new Name(value);\n}\n\nexport interface DriverValueDecoder<TData, TDriverParam> {\n\tmapFromDriverValue(value: TDriverParam): TData;\n}\n\nexport interface DriverValueEncoder<TData, TDriverParam> {\n\tmapToDriverValue(value: TData): TDriverParam | SQL;\n}\n\nexport function isDriverValueEncoder(value: unknown): value is DriverValueEncoder<any, any> {\n\treturn typeof value === 'object' && value !== null && 'mapToDriverValue' in value\n\t\t&& typeof (value as any).mapToDriverValue === 'function';\n}\n\nexport const noopDecoder: DriverValueDecoder<any, any> = {\n\tmapFromDriverValue: (value) => value,\n};\n\nexport const noopEncoder: DriverValueEncoder<any, any> = {\n\tmapToDriverValue: (value) => value,\n};\n\nexport interface DriverValueMapper<TData, TDriverParam>\n\textends DriverValueDecoder<TData, TDriverParam>, DriverValueEncoder<TData, TDriverParam>\n{}\n\nexport const noopMapper: DriverValueMapper<any, any> = {\n\t...noopDecoder,\n\t...noopEncoder,\n};\n\n/** Parameter value that is optionally bound to an encoder (for example, a column). */\nexport class Param<TDataType = unknown, TDriverParamType = TDataType> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Param';\n\n\tprotected brand!: 'BoundParamValue';\n\n\t/**\n\t * @param value - Parameter value\n\t * @param encoder - Encoder to convert the value to a driver parameter\n\t */\n\tconstructor(\n\t\treadonly value: TDataType,\n\t\treadonly encoder: DriverValueEncoder<TDataType, TDriverParamType> = noopEncoder,\n\t) {}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\n/** @deprecated Use `sql.param` instead. */\nexport function param<TData, TDriver>(\n\tvalue: TData,\n\tencoder?: DriverValueEncoder<TData, TDriver>,\n): Param<TData, TDriver> {\n\treturn new Param(value, encoder);\n}\n\n/**\n * Anything that can be passed to the `` sql`...` `` tagged function.\n */\nexport type SQLChunk =\n\t| StringChunk\n\t| SQLChunk[]\n\t| SQLWrapper\n\t| SQL\n\t| Table\n\t| View\n\t| Subquery\n\t| AnyColumn\n\t| Param\n\t| Name\n\t| undefined\n\t| FakePrimitiveParam\n\t| Placeholder;\n\nexport function sql<T>(strings: TemplateStringsArray, ...params: any[]): SQL<T>;\n/*\n\tThe type of `params` is specified as `SQLChunk[]`, but that's slightly incorrect -\n\tin runtime, users won't pass `FakePrimitiveParam` instances as `params` - they will pass primitive values\n\twhich will be wrapped in `Param`. That's why the overload specifies `params` as `any[]` and not as `SQLSourceParam[]`.\n\tThis type is used to make our lives easier and the type checker happy.\n*/\nexport function sql(strings: TemplateStringsArray, ...params: SQLChunk[]): SQL {\n\tconst queryChunks: SQLChunk[] = [];\n\tif (params.length > 0 || (strings.length > 0 && strings[0] !== '')) {\n\t\tqueryChunks.push(new StringChunk(strings[0]!));\n\t}\n\tfor (const [paramIndex, param] of params.entries()) {\n\t\tqueryChunks.push(param, new StringChunk(strings[paramIndex + 1]!));\n\t}\n\n\treturn new SQL(queryChunks);\n}\n\nexport namespace sql {\n\texport function empty(): SQL {\n\t\treturn new SQL([]);\n\t}\n\n\t/** @deprecated - use `sql.join()` */\n\texport function fromList(list: SQLChunk[]): SQL {\n\t\treturn new SQL(list);\n\t}\n\n\t/**\n\t * Convenience function to create an SQL query from a raw string.\n\t * @param str The raw SQL query string.\n\t */\n\texport function raw(str: string): SQL {\n\t\treturn new SQL([new StringChunk(str)]);\n\t}\n\n\t/**\n\t * Join a list of SQL chunks with a separator.\n\t * @example\n\t * ```ts\n\t * const query = sql.join([sql`a`, sql`b`, sql`c`]);\n\t * // sql`abc`\n\t * ```\n\t * @example\n\t * ```ts\n\t * const query = sql.join([sql`a`, sql`b`, sql`c`], sql`, `);\n\t * // sql`a, b, c`\n\t * ```\n\t */\n\texport function join(chunks: SQLChunk[], separator?: SQLChunk): SQL {\n\t\tconst result: SQLChunk[] = [];\n\t\tfor (const [i, chunk] of chunks.entries()) {\n\t\t\tif (i > 0 && separator !== undefined) {\n\t\t\t\tresult.push(separator);\n\t\t\t}\n\t\t\tresult.push(chunk);\n\t\t}\n\t\treturn new SQL(result);\n\t}\n\n\t/**\n\t * Create a SQL chunk that represents a DB identifier (table, column, index etc.).\n\t * When used in a query, the identifier will be escaped based on the DB engine.\n\t * For example, in PostgreSQL, identifiers are escaped with double quotes.\n\t *\n\t * **WARNING: This function does not offer any protection against SQL injections, so you must validate any user input beforehand.**\n\t *\n\t * @example ```ts\n\t * const query = sql`SELECT * FROM ${sql.identifier('my-table')}`;\n\t * // 'SELECT * FROM \"my-table\"'\n\t * ```\n\t */\n\texport function identifier(value: string): Name {\n\t\treturn new Name(value);\n\t}\n\n\texport function placeholder<TName extends string>(name: TName): Placeholder<TName> {\n\t\treturn new Placeholder(name);\n\t}\n\n\texport function param<TData, TDriver>(\n\t\tvalue: TData,\n\t\tencoder?: DriverValueEncoder<TData, TDriver>,\n\t): Param<TData, TDriver> {\n\t\treturn new Param(value, encoder);\n\t}\n}\n\nexport namespace SQL {\n\texport class Aliased<T = unknown> implements SQLWrapper {\n\t\tstatic readonly [entityKind]: string = 'SQL.Aliased';\n\n\t\tdeclare _: {\n\t\t\tbrand: 'SQL.Aliased';\n\t\t\ttype: T;\n\t\t};\n\n\t\t/** @internal */\n\t\tisSelectionField = false;\n\n\t\tconstructor(\n\t\t\treadonly sql: SQL,\n\t\t\treadonly fieldAlias: string,\n\t\t) {}\n\n\t\tgetSQL(): SQL {\n\t\t\treturn this.sql;\n\t\t}\n\n\t\t/** @internal */\n\t\tclone() {\n\t\t\treturn new Aliased(this.sql, this.fieldAlias);\n\t\t}\n\t}\n}\n\nexport class Placeholder<TName extends string = string, TValue = any> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Placeholder';\n\n\tdeclare protected: TValue;\n\n\tconstructor(readonly name: TName) {}\n\n\tgetSQL(): SQL {\n\t\treturn new SQL([this]);\n\t}\n}\n\n/** @deprecated Use `sql.placeholder` instead. */\nexport function placeholder<TName extends string>(name: TName): Placeholder<TName> {\n\treturn new Placeholder(name);\n}\n\nexport function fillPlaceholders(params: unknown[], values: Record<string, unknown>): unknown[] {\n\treturn params.map((p) => {\n\t\tif (is(p, Placeholder)) {\n\t\t\tif (!(p.name in values)) {\n\t\t\t\tthrow new Error(`No value for placeholder \"${p.name}\" was provided`);\n\t\t\t}\n\n\t\t\treturn values[p.name];\n\t\t}\n\n\t\tif (is(p, Param) && is(p.value, Placeholder)) {\n\t\t\tif (!(p.value.name in values)) {\n\t\t\t\tthrow new Error(`No value for placeholder \"${p.value.name}\" was provided`);\n\t\t\t}\n\n\t\t\treturn p.encoder.mapToDriverValue(values[p.value.name]);\n\t\t}\n\n\t\treturn p;\n\t});\n}\n\nexport type ColumnsSelection = Record<string, unknown>;\n\nconst IsDrizzleView = Symbol.for('drizzle:IsDrizzleView');\n\nexport abstract class View<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelection extends ColumnsSelection = ColumnsSelection,\n> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'View';\n\n\tdeclare _: {\n\t\tbrand: 'View';\n\t\tviewBrand: string;\n\t\tname: TName;\n\t\texisting: TExisting;\n\t\tselectedFields: TSelection;\n\t};\n\n\t/** @internal */\n\t[ViewBaseConfig]: {\n\t\tname: TName;\n\t\toriginalName: TName;\n\t\tschema: string | undefined;\n\t\tselectedFields: ColumnsSelection;\n\t\tisExisting: TExisting;\n\t\tquery: TExisting extends true ? undefined : SQL;\n\t\tisAlias: boolean;\n\t};\n\n\t/** @internal */\n\t[IsDrizzleView] = true;\n\n\tdeclare readonly $inferSelect: InferSelectViewModel<View<Assume<TName, string>, TExisting, TSelection>>;\n\n\tconstructor(\n\t\t{ name, schema, selectedFields, query }: {\n\t\t\tname: TName;\n\t\t\tschema: string | undefined;\n\t\t\tselectedFields: ColumnsSelection;\n\t\t\tquery: SQL | undefined;\n\t\t},\n\t) {\n\t\tthis[ViewBaseConfig] = {\n\t\t\tname,\n\t\t\toriginalName: name,\n\t\t\tschema,\n\t\t\tselectedFields,\n\t\t\tquery: query as (TExisting extends true ? undefined : SQL),\n\t\t\tisExisting: !query as TExisting,\n\t\t\tisAlias: false,\n\t\t};\n\t}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\nexport function isView(view: unknown): view is View {\n\treturn typeof view === 'object' && view !== null && IsDrizzleView in view;\n}\n\nexport function getViewName<T extends View>(view: T): T['_']['name'] {\n\treturn view[ViewBaseConfig].name;\n}\n\nexport type InferSelectViewModel<TView extends View> =\n\tEqual<TView['_']['selectedFields'], { [x: string]: unknown }> extends true ? { [x: string]: unknown }\n\t\t: SelectResult<\n\t\t\tTView['_']['selectedFields'],\n\t\t\t'single',\n\t\t\tRecord<TView['_']['name'], 'not-null'>\n\t\t>;\n\n// Defined separately from the Column class to resolve circular dependency\nColumn.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\n\n// Defined separately from the Table class to resolve circular dependency\nTable.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\n\n// Defined separately from the Column class to resolve circular dependency\nSubquery.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\n","import type { Cache } from './cache/core/cache.ts';\nimport type { AnyColumn } from './column.ts';\nimport { Column } from './column.ts';\nimport { is } from './entity.ts';\nimport type { Logger } from './logger.ts';\nimport type { SelectedFieldsOrdered } from './operations.ts';\nimport type { TableLike } from './query-builders/select.types.ts';\nimport { Param, SQL, View } from './sql/sql.ts';\nimport type { DriverValueDecoder } from './sql/sql.ts';\nimport { Subquery } from './subquery.ts';\nimport { getTableName, Table } from './table.ts';\nimport { ViewBaseConfig } from './view-common.ts';\n\n/** @internal */\nexport function mapResultRow<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\trow: unknown[],\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): TResult {\n\t// Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n\tconst nullifyMap: Record<string, string | false> = {};\n\n\tconst result = columns.reduce<Record<string, any>>(\n\t\t(result, { path, field }, columnIndex) => {\n\t\t\tlet decoder: DriverValueDecoder<unknown, unknown>;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else if (is(field, Subquery)) {\n\t\t\t\tdecoder = field._.sql.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tlet node = result;\n\t\t\tfor (const [pathChunkIndex, pathChunk] of path.entries()) {\n\t\t\t\tif (pathChunkIndex < path.length - 1) {\n\t\t\t\t\tif (!(pathChunk in node)) {\n\t\t\t\t\t\tnode[pathChunk] = {};\n\t\t\t\t\t}\n\t\t\t\t\tnode = node[pathChunk];\n\t\t\t\t} else {\n\t\t\t\t\tconst rawValue = row[columnIndex]!;\n\t\t\t\t\tconst value = node[pathChunk] = rawValue === null ? null : decoder.mapFromDriverValue(rawValue);\n\n\t\t\t\t\tif (joinsNotNullableMap && is(field, Column) && path.length === 2) {\n\t\t\t\t\t\tconst objectName = path[0]!;\n\t\t\t\t\t\tif (!(objectName in nullifyMap)) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\ttypeof nullifyMap[objectName] === 'string' && nullifyMap[objectName] !== getTableName(field.table)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\t{},\n\t);\n\n\t// Nullify all nested objects from nullifyMap that are nullable\n\tif (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n\t\tfor (const [objectName, tableName] of Object.entries(nullifyMap)) {\n\t\t\tif (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n\t\t\t\tresult[objectName] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result as TResult;\n}\n\n/** @internal */\nexport function orderSelectedFields<TColumn extends AnyColumn>(\n\tfields: Record<string, unknown>,\n\tpathPrefix?: string[],\n): SelectedFieldsOrdered<TColumn> {\n\treturn Object.entries(fields).reduce<SelectedFieldsOrdered<AnyColumn>>((result, [name, field]) => {\n\t\tif (typeof name !== 'string') {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst newPath = pathPrefix ? [...pathPrefix, name] : [name];\n\t\tif (is(field, Column) || is(field, SQL) || is(field, SQL.Aliased) || is(field, Subquery)) {\n\t\t\tresult.push({ path: newPath, field });\n\t\t} else if (is(field, Table)) {\n\t\t\tresult.push(...orderSelectedFields(field[Table.Symbol.Columns], newPath));\n\t\t} else {\n\t\t\tresult.push(...orderSelectedFields(field as Record<string, unknown>, newPath));\n\t\t}\n\t\treturn result;\n\t}, []) as SelectedFieldsOrdered<TColumn>;\n}\n\nexport function haveSameKeys(left: Record<string, unknown>, right: Record<string, unknown>) {\n\tconst leftKeys = Object.keys(left);\n\tconst rightKeys = Object.keys(right);\n\n\tif (leftKeys.length !== rightKeys.length) {\n\t\treturn false;\n\t}\n\n\tfor (const [index, key] of leftKeys.entries()) {\n\t\tif (key !== rightKeys[index]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/** @internal */\nexport function mapUpdateSet(table: Table, values: Record<string, unknown>): UpdateSet {\n\tconst entries: [string, UpdateSet[string]][] = Object.entries(values)\n\t\t.filter(([, value]) => value !== undefined)\n\t\t.map(([key, value]) => {\n\t\t\t// eslint-disable-next-line unicorn/prefer-ternary\n\t\t\tif (is(value, SQL) || is(value, Column)) {\n\t\t\t\treturn [key, value];\n\t\t\t} else {\n\t\t\t\treturn [key, new Param(value, table[Table.Symbol.Columns][key])];\n\t\t\t}\n\t\t});\n\n\tif (entries.length === 0) {\n\t\tthrow new Error('No values to set');\n\t}\n\n\treturn Object.fromEntries(entries);\n}\n\nexport type UpdateSet = Record<string, SQL | Param | AnyColumn | null | undefined>;\n\nexport type OneOrMany<T> = T | T[];\n\nexport type Update<T, TUpdate> =\n\t& {\n\t\t[K in Exclude<keyof T, keyof TUpdate>]: T[K];\n\t}\n\t& TUpdate;\n\nexport type Simplify<T> =\n\t& {\n\t\t// @ts-ignore - \"Type parameter 'K' has a circular constraint\", not sure why\n\t\t[K in keyof T]: T[K];\n\t}\n\t& {};\n\nexport type Not<T extends boolean> = T extends true ? false : true;\n\nexport type IsNever<T> = [T] extends [never] ? true : false;\n\nexport type IsUnion<T, U extends T = T> = (T extends any ? (U extends T ? false : true) : never) extends false ? false\n\t: true;\n\nexport type SingleKeyObject<T, TError extends string, K = keyof T> = IsNever<K> extends true ? never\n\t: IsUnion<K> extends true ? DrizzleTypeError<TError>\n\t: T;\n\nexport type FromSingleKeyObject<T, Result, TError extends string, K = keyof T> = IsNever<K> extends true ? never\n\t: IsUnion<K> extends true ? DrizzleTypeError<TError>\n\t: Result;\n\nexport type SimplifyMappedType<T> = [T] extends [unknown] ? T : never;\n\nexport type ShallowRecord<K extends keyof any, T> = SimplifyMappedType<{ [P in K]: T }>;\n\nexport type Assume<T, U> = T extends U ? T : U;\n\nexport type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false;\n\nexport interface DrizzleTypeError<T extends string> {\n\t$drizzleTypeError: T;\n}\n\nexport type ValueOrArray<T> = T | T[];\n\n/** @internal */\nexport function applyMixins(baseClass: any, extendedClasses: any[]) {\n\tfor (const extendedClass of extendedClasses) {\n\t\tfor (const name of Object.getOwnPropertyNames(extendedClass.prototype)) {\n\t\t\tif (name === 'constructor') continue;\n\n\t\t\tObject.defineProperty(\n\t\t\t\tbaseClass.prototype,\n\t\t\t\tname,\n\t\t\t\tObject.getOwnPropertyDescriptor(extendedClass.prototype, name) || Object.create(null),\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport type Or<T1, T2> = T1 extends true ? true : T2 extends true ? true : false;\n\nexport type IfThenElse<If, Then, Else> = If extends true ? Then : Else;\n\nexport type PromiseOf<T> = T extends Promise<infer U> ? U : T;\n\nexport type Writable<T> = {\n\t-readonly [P in keyof T]: T[P];\n};\n\nexport type NonArray<T> = T extends any[] ? never : T;\n\nexport function getTableColumns<T extends Table>(table: T): T['_']['columns'] {\n\treturn table[Table.Symbol.Columns];\n}\n\nexport function getViewSelectedFields<T extends View>(view: T): T['_']['selectedFields'] {\n\treturn view[ViewBaseConfig].selectedFields;\n}\n\n/** @internal */\nexport function getTableLikeName(table: TableLike): string | undefined {\n\treturn is(table, Subquery)\n\t\t? table._.alias\n\t\t: is(table, View)\n\t\t? table[ViewBaseConfig].name\n\t\t: is(table, SQL)\n\t\t? undefined\n\t\t: table[Table.Symbol.IsAlias]\n\t\t? table[Table.Symbol.Name]\n\t\t: table[Table.Symbol.BaseName];\n}\n\nexport type ColumnsWithTable<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends AnyColumn<{ tableName: TTableName }>[],\n> = { [Key in keyof TColumns]: AnyColumn<{ tableName: TForeignTableName }> };\n\nexport type Casing = 'snake_case' | 'camelCase';\n\nexport interface DrizzleConfig<TSchema extends Record<string, unknown> = Record<string, never>> {\n\tlogger?: boolean | Logger;\n\tschema?: TSchema;\n\tcasing?: Casing;\n\tcache?: Cache;\n}\nexport type ValidateShape<T, ValidShape, TResult = T> = T extends ValidShape\n\t? Exclude<keyof T, keyof ValidShape> extends never ? TResult\n\t: DrizzleTypeError<\n\t\t`Invalid key(s): ${Exclude<(keyof T) & (string | number | bigint | boolean | null | undefined), keyof ValidShape>}`\n\t>\n\t: never;\n\nexport type KnownKeysOnly<T, U> = {\n\t[K in keyof T]: K extends keyof U ? T[K] : never;\n};\n\nexport type IsAny<T> = 0 extends (1 & T) ? true : false;\n\n/** @internal */\nexport function getColumnNameAndConfig<\n\tTConfig extends Record<string, any> | undefined,\n>(a: string | TConfig | undefined, b: TConfig | undefined) {\n\treturn {\n\t\tname: typeof a === 'string' && a.length > 0 ? a : '' as string,\n\t\tconfig: typeof a === 'object' ? a : b as TConfig,\n\t};\n}\n\nexport type IfNotImported<T, Y, N> = unknown extends T ? Y : N;\n\nexport type ImportTypeError<TPackageName extends string> =\n\t`Please install \\`${TPackageName}\\` to allow Drizzle ORM to connect to the database`;\n\nexport type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Keys extends any\n\t? Required<Pick<T, Keys>> & Partial<Omit<T, Keys>>\n\t: never;\n\ntype ExpectedConfigShape = {\n\tlogger?: boolean | {\n\t\tlogQuery(query: string, params: unknown[]): void;\n\t};\n\tschema?: Record<string, never>;\n\tcasing?: 'snake_case' | 'camelCase';\n};\n\n// If this errors, you must update config shape checker function with new config specs\nconst _: DrizzleConfig = {} as ExpectedConfigShape;\nconst __: ExpectedConfigShape = {} as DrizzleConfig;\n\nexport function isConfig(data: any): boolean {\n\tif (typeof data !== 'object' || data === null) return false;\n\n\tif (data.constructor.name !== 'Object') return false;\n\n\tif ('logger' in data) {\n\t\tconst type = typeof data['logger'];\n\t\tif (\n\t\t\ttype !== 'boolean' && (type !== 'object' || typeof data['logger']['logQuery'] !== 'function')\n\t\t\t&& type !== 'undefined'\n\t\t) return false;\n\n\t\treturn true;\n\t}\n\n\tif ('schema' in data) {\n\t\tconst type = typeof data['schema'];\n\t\tif (type !== 'object' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('casing' in data) {\n\t\tconst type = typeof data['casing'];\n\t\tif (type !== 'string' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('mode' in data) {\n\t\tif (data['mode'] !== 'default' || data['mode'] !== 'planetscale' || data['mode'] !== undefined) return false;\n\n\t\treturn true;\n\t}\n\n\tif ('connection' in data) {\n\t\tconst type = typeof data['connection'];\n\t\tif (type !== 'string' && type !== 'object' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('client' in data) {\n\t\tconst type = typeof data['client'];\n\t\tif (type !== 'object' && type !== 'function' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif (Object.keys(data).length === 0) return true;\n\n\treturn false;\n}\n\nexport type NeonAuthToken = string | (() => string | Promise<string>);\n\nexport const textDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder();\n","import type { BuildColumns, BuildExtraConfigColumns } from '~/column-builder.ts';\nimport { entityKind } from '~/entity.ts';\nimport { Table, type TableConfig as TableConfigBase, type UpdateTableConfig } from '~/table.ts';\nimport type { CheckBuilder } from './checks.ts';\nimport { getPgColumnBuilders, type PgColumnsBuilders } from './columns/all.ts';\nimport type { ExtraConfigColumn, PgColumn, PgColumnBuilder, PgColumnBuilderBase } from './columns/common.ts';\nimport type { ForeignKey, ForeignKeyBuilder } from './foreign-keys.ts';\nimport type { AnyIndexBuilder } from './indexes.ts';\nimport type { PgPolicy } from './policies.ts';\nimport type { PrimaryKeyBuilder } from './primary-keys.ts';\nimport type { UniqueConstraintBuilder } from './unique-constraint.ts';\n\nexport type PgTableExtraConfigValue =\n\t| AnyIndexBuilder\n\t| CheckBuilder\n\t| ForeignKeyBuilder\n\t| PrimaryKeyBuilder\n\t| UniqueConstraintBuilder\n\t| PgPolicy;\n\nexport type PgTableExtraConfig = Record<\n\tstring,\n\tPgTableExtraConfigValue\n>;\n\nexport type TableConfig = TableConfigBase<PgColumn>;\n\n/** @internal */\nexport const InlineForeignKeys = Symbol.for('drizzle:PgInlineForeignKeys');\n/** @internal */\nexport const EnableRLS = Symbol.for('drizzle:EnableRLS');\n\nexport class PgTable<T extends TableConfig = TableConfig> extends Table<T> {\n\tstatic override readonly [entityKind]: string = 'PgTable';\n\n\t/** @internal */\n\tstatic override readonly Symbol = Object.assign({}, Table.Symbol, {\n\t\tInlineForeignKeys: InlineForeignKeys as typeof InlineForeignKeys,\n\t\tEnableRLS: EnableRLS as typeof EnableRLS,\n\t});\n\n\t/**@internal */\n\t[InlineForeignKeys]: ForeignKey[] = [];\n\n\t/** @internal */\n\t[EnableRLS]: boolean = false;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigBuilder]: ((self: Record<string, PgColumn>) => PgTableExtraConfig) | undefined =\n\t\tundefined;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigColumns]: Record<string, ExtraConfigColumn> = {};\n}\n\nexport type AnyPgTable<TPartial extends Partial<TableConfig> = {}> = PgTable<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport type PgTableWithColumns<T extends TableConfig> =\n\t& PgTable<T>\n\t& {\n\t\t[Key in keyof T['columns']]: T['columns'][Key];\n\t}\n\t& {\n\t\tenableRLS: () => Omit<\n\t\t\tPgTableWithColumns<T>,\n\t\t\t'enableRLS'\n\t\t>;\n\t};\n\n/** @internal */\nexport function pgTableWithSchema<\n\tTTableName extends string,\n\tTSchemaName extends string | undefined,\n\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n>(\n\tname: TTableName,\n\tcolumns: TColumnsMap | ((columnTypes: PgColumnsBuilders) => TColumnsMap),\n\textraConfig:\n\t\t| ((self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>) => PgTableExtraConfig | PgTableExtraConfigValue[])\n\t\t| undefined,\n\tschema: TSchemaName,\n\tbaseName = name,\n): PgTableWithColumns<{\n\tname: TTableName;\n\tschema: TSchemaName;\n\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\tdialect: 'pg';\n}> {\n\tconst rawTable = new PgTable<{\n\t\tname: TTableName;\n\t\tschema: TSchemaName;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>(name, schema, baseName);\n\n\tconst parsedColumns: TColumnsMap = typeof columns === 'function' ? columns(getPgColumnBuilders()) : columns;\n\n\tconst builtColumns = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.build(rawTable);\n\t\t\trawTable[InlineForeignKeys].push(...colBuilder.buildForeignKeys(column, rawTable));\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\n\tconst builtColumnsForExtraConfig = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.buildExtraConfigColumn(rawTable);\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>;\n\n\tconst table = Object.assign(rawTable, builtColumns);\n\n\ttable[Table.Symbol.Columns] = builtColumns;\n\ttable[Table.Symbol.ExtraConfigColumns] = builtColumnsForExtraConfig;\n\n\tif (extraConfig) {\n\t\ttable[PgTable.Symbol.ExtraConfigBuilder] = extraConfig as any;\n\t}\n\n\treturn Object.assign(table, {\n\t\tenableRLS: () => {\n\t\t\ttable[PgTable.Symbol.EnableRLS] = true;\n\t\t\treturn table as PgTableWithColumns<{\n\t\t\t\tname: TTableName;\n\t\t\t\tschema: TSchemaName;\n\t\t\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\t\t\tdialect: 'pg';\n\t\t\t}>;\n\t\t},\n\t});\n}\n\nexport interface PgTableFn<TSchema extends string | undefined = undefined> {\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig?: (\n\t\t\tself: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>,\n\t\t) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig?: (self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig: (\n\t\t\tself: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>,\n\t\t) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig: (self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n}\n\nexport const pgTable: PgTableFn = (name, columns, extraConfig) => {\n\treturn pgTableWithSchema(name, columns, extraConfig, undefined);\n};\n\nexport function pgTableCreator(customizeTableName: (name: string) => string): PgTableFn {\n\treturn (name, columns, extraConfig) => {\n\t\treturn pgTableWithSchema(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);\n\t};\n}\n","import { entityKind } from '~/entity.ts';\nimport type { AnyPgColumn, PgColumn } from './columns/index.ts';\nimport { PgTable } from './table.ts';\n\nexport function primaryKey<\n\tTTableName extends string,\n\tTColumn extends AnyPgColumn<{ tableName: TTableName }>,\n\tTColumns extends AnyPgColumn<{ tableName: TTableName }>[],\n>(config: { name?: string; columns: [TColumn, ...TColumns] }): PrimaryKeyBuilder;\n/**\n * @deprecated: Please use primaryKey({ columns: [] }) instead of this function\n * @param columns\n */\nexport function primaryKey<\n\tTTableName extends string,\n\tTColumns extends AnyPgColumn<{ tableName: TTableName }>[],\n>(...columns: TColumns): PrimaryKeyBuilder;\nexport function primaryKey(...config: any) {\n\tif (config[0].columns) {\n\t\treturn new PrimaryKeyBuilder(config[0].columns, config[0].name);\n\t}\n\treturn new PrimaryKeyBuilder(config);\n}\n\nexport class PrimaryKeyBuilder {\n\tstatic readonly [entityKind]: string = 'PgPrimaryKeyBuilder';\n\n\t/** @internal */\n\tcolumns: PgColumn[];\n\n\t/** @internal */\n\tname?: string;\n\n\tconstructor(\n\t\tcolumns: PgColumn[],\n\t\tname?: string,\n\t) {\n\t\tthis.columns = columns;\n\t\tthis.name = name;\n\t}\n\n\t/** @internal */\n\tbuild(table: PgTable): PrimaryKey {\n\t\treturn new PrimaryKey(table, this.columns, this.name);\n\t}\n}\n\nexport class PrimaryKey {\n\tstatic readonly [entityKind]: string = 'PgPrimaryKey';\n\n\treadonly columns: AnyPgColumn<{}>[];\n\treadonly name?: string;\n\n\tconstructor(readonly table: PgTable, columns: AnyPgColumn<{}>[], name?: string) {\n\t\tthis.columns = columns;\n\t\tthis.name = name;\n\t}\n\n\tgetName(): string {\n\t\treturn this.name ?? `${this.table[PgTable.Symbol.Name]}_${this.columns.map((column) => column.name).join('_')}_pk`;\n\t}\n}\n","import { type AnyColumn, Column, type GetColumnData } from '~/column.ts';\nimport { is } from '~/entity.ts';\nimport { Table } from '~/table.ts';\nimport {\n\tisDriverValueEncoder,\n\tisSQLWrapper,\n\tParam,\n\tPlaceholder,\n\tSQL,\n\tsql,\n\ttype SQLChunk,\n\ttype SQLWrapper,\n\tStringChunk,\n\tView,\n} from '../sql.ts';\n\nexport function bindIfParam(value: unknown, column: SQLWrapper): SQLChunk {\n\tif (\n\t\tisDriverValueEncoder(column)\n\t\t&& !isSQLWrapper(value)\n\t\t&& !is(value, Param)\n\t\t&& !is(value, Placeholder)\n\t\t&& !is(value, Column)\n\t\t&& !is(value, Table)\n\t\t&& !is(value, View)\n\t) {\n\t\treturn new Param(value, column);\n\t}\n\treturn value as SQLChunk;\n}\n\nexport interface BinaryOperator {\n\t<TColumn extends Column>(\n\t\tleft: TColumn,\n\t\tright: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n\t): SQL;\n\t<T>(left: SQL.Aliased<T>, right: T | SQLWrapper): SQL;\n\t<T extends SQLWrapper>(\n\t\tleft: Exclude<T, SQL.Aliased | Column>,\n\t\tright: unknown,\n\t): SQL;\n}\n\n/**\n * Test that two values are equal.\n *\n * Remember that the SQL standard dictates that\n * two NULL values are not equal, so if you want to test\n * whether a value is null, you may want to use\n * `isNull` instead.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made by Ford\n * db.select().from(cars)\n * .where(eq(cars.make, 'Ford'))\n * ```\n *\n * @see isNull for a way to test equality to NULL.\n */\nexport const eq: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} = ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that two values are not equal.\n *\n * Remember that the SQL standard dictates that\n * two NULL values are not equal, so if you want to test\n * whether a value is not null, you may want to use\n * `isNotNull` instead.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars not made by Ford\n * db.select().from(cars)\n * .where(ne(cars.make, 'Ford'))\n * ```\n *\n * @see isNotNull for a way to test whether a value is not null.\n */\nexport const ne: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} <> ${bindIfParam(right, left)}`;\n};\n\n/**\n * Combine a list of conditions with the `and` operator. Conditions\n * that are equal `undefined` are automatically ignored.\n *\n * ## Examples\n *\n * ```ts\n * db.select().from(cars)\n * .where(\n * and(\n * eq(cars.make, 'Volvo'),\n * eq(cars.year, 1950),\n * )\n * )\n * ```\n */\nexport function and(...conditions: (SQLWrapper | undefined)[]): SQL | undefined;\nexport function and(\n\t...unfilteredConditions: (SQLWrapper | undefined)[]\n): SQL | undefined {\n\tconst conditions = unfilteredConditions.filter(\n\t\t(c): c is Exclude<typeof c, undefined> => c !== undefined,\n\t);\n\n\tif (conditions.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tif (conditions.length === 1) {\n\t\treturn new SQL(conditions);\n\t}\n\n\treturn new SQL([\n\t\tnew StringChunk('('),\n\t\tsql.join(conditions, new StringChunk(' and ')),\n\t\tnew StringChunk(')'),\n\t]);\n}\n\n/**\n * Combine a list of conditions with the `or` operator. Conditions\n * that are equal `undefined` are automatically ignored.\n *\n * ## Examples\n *\n * ```ts\n * db.select().from(cars)\n * .where(\n * or(\n * eq(cars.make, 'GM'),\n * eq(cars.make, 'Ford'),\n * )\n * )\n * ```\n */\nexport function or(...conditions: (SQLWrapper | undefined)[]): SQL | undefined;\nexport function or(\n\t...unfilteredConditions: (SQLWrapper | undefined)[]\n): SQL | undefined {\n\tconst conditions = unfilteredConditions.filter(\n\t\t(c): c is Exclude<typeof c, undefined> => c !== undefined,\n\t);\n\n\tif (conditions.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tif (conditions.length === 1) {\n\t\treturn new SQL(conditions);\n\t}\n\n\treturn new SQL([\n\t\tnew StringChunk('('),\n\t\tsql.join(conditions, new StringChunk(' or ')),\n\t\tnew StringChunk(')'),\n\t]);\n}\n\n/**\n * Negate the meaning of an expression using the `not` keyword.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars _not_ made by GM or Ford.\n * db.select().from(cars)\n * .where(not(inArray(cars.make, ['GM', 'Ford'])))\n * ```\n */\nexport function not(condition: SQLWrapper): SQL {\n\treturn sql`not ${condition}`;\n}\n\n/**\n * Test that the first expression passed is greater than\n * the second expression.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made after 2000.\n * db.select().from(cars)\n * .where(gt(cars.year, 2000))\n * ```\n *\n * @see gte for greater-than-or-equal\n */\nexport const gt: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} > ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that the first expression passed is greater than\n * or equal to the second expression. Use `gt` to\n * test whether an expression is strictly greater\n * than another.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made on or after 2000.\n * db.select().from(cars)\n * .where(gte(cars.year, 2000))\n * ```\n *\n * @see gt for a strictly greater-than condition\n */\nexport const gte: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} >= ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that the first expression passed is less than\n * the second expression.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made before 2000.\n * db.select().from(cars)\n * .where(lt(cars.year, 2000))\n * ```\n *\n * @see lte for less-than-or-equal\n */\nexport const lt: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} < ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that the first expression passed is less than\n * or equal to the second expression.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made before 2000.\n * db.select().from(cars)\n * .where(lte(cars.year, 2000))\n * ```\n *\n * @see lt for a strictly less-than condition\n */\nexport const lte: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} <= ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test whether the first parameter, a column or expression,\n * has a value from a list passed as the second argument.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made by Ford or GM.\n * db.select().from(cars)\n * .where(inArray(cars.make, ['Ford', 'GM']))\n * ```\n *\n * @see notInArray for the inverse of this test\n */\nexport function inArray<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function inArray<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: ReadonlyArray<GetColumnData<TColumn, 'raw'> | Placeholder> | SQLWrapper,\n): SQL;\nexport function inArray<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: ReadonlyArray<unknown | Placeholder> | SQLWrapper,\n): SQL;\nexport function inArray(\n\tcolumn: SQLWrapper,\n\tvalues: ReadonlyArray<unknown | Placeholder> | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\treturn sql`false`;\n\t\t}\n\t\treturn sql`${column} in ${values.map((v) => bindIfParam(v, column))}`;\n\t}\n\n\treturn sql`${column} in ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test whether the first parameter, a column or expression,\n * has a value that is not present in a list passed as the\n * second argument.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made by any company except Ford or GM.\n * db.select().from(cars)\n * .where(notInArray(cars.make, ['Ford', 'GM']))\n * ```\n *\n * @see inArray for the inverse of this test\n */\nexport function notInArray<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function notInArray<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function notInArray<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function notInArray(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\treturn sql`true`;\n\t\t}\n\t\treturn sql`${column} not in ${values.map((v) => bindIfParam(v, column))}`;\n\t}\n\n\treturn sql`${column} not in ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test whether an expression is NULL. By the SQL standard,\n * NULL is neither equal nor not equal to itself, so\n * it's recommended to use `isNull` and `notIsNull` for\n * comparisons to NULL.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars that have no discontinuedAt date.\n * db.select().from(cars)\n * .where(isNull(cars.discontinuedAt))\n * ```\n *\n * @see isNotNull for the inverse of this test\n */\nexport function isNull(value: SQLWrapper): SQL {\n\treturn sql`${value} is null`;\n}\n\n/**\n * Test whether an expression is not NULL. By the SQL standard,\n * NULL is neither equal nor not equal to itself, so\n * it's recommended to use `isNull` and `notIsNull` for\n * comparisons to NULL.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars that have been discontinued.\n * db.select().from(cars)\n * .where(isNotNull(cars.discontinuedAt))\n * ```\n *\n * @see isNull for the inverse of this test\n */\nexport function isNotNull(value: SQLWrapper): SQL {\n\treturn sql`${value} is not null`;\n}\n\n/**\n * Test whether a subquery evaluates to have any rows.\n *\n * ## Examples\n *\n * ```ts\n * // Users whose `homeCity` column has a match in a cities\n * // table.\n * db\n * .select()\n * .from(users)\n * .where(\n * exists(db.select()\n * .from(cities)\n * .where(eq(users.homeCity, cities.id))),\n * );\n * ```\n *\n * @see notExists for the inverse of this test\n */\nexport function exists(subquery: SQLWrapper): SQL {\n\treturn sql`exists ${subquery}`;\n}\n\n/**\n * Test whether a subquery doesn't include any result\n * rows.\n *\n * ## Examples\n *\n * ```ts\n * // Users whose `homeCity` column doesn't match\n * // a row in the cities table.\n * db\n * .select()\n * .from(users)\n * .where(\n * notExists(db.select()\n * .from(cities)\n * .where(eq(users.homeCity, cities.id))),\n * );\n * ```\n *\n * @see exists for the inverse of this test\n */\nexport function notExists(subquery: SQLWrapper): SQL {\n\treturn sql`not exists ${subquery}`;\n}\n\n/**\n * Test whether an expression is between two values. This\n * is an easier way to express range tests, which would be\n * expressed mathematically as `x <= a <= y` but in SQL\n * would have to be like `a >= x AND a <= y`.\n *\n * Between is inclusive of the endpoints: if `column`\n * is equal to `min` or `max`, it will be TRUE.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made between 1990 and 2000\n * db.select().from(cars)\n * .where(between(cars.year, 1990, 2000))\n * ```\n *\n * @see notBetween for the inverse of this test\n */\nexport function between<T>(\n\tcolumn: SQL.Aliased,\n\tmin: T | SQLWrapper,\n\tmax: T | SQLWrapper,\n): SQL;\nexport function between<TColumn extends AnyColumn>(\n\tcolumn: TColumn,\n\tmin: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n\tmax: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n): SQL;\nexport function between<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tmin: unknown,\n\tmax: unknown,\n): SQL;\nexport function between(column: SQLWrapper, min: unknown, max: unknown): SQL {\n\treturn sql`${column} between ${bindIfParam(min, column)} and ${\n\t\tbindIfParam(\n\t\t\tmax,\n\t\t\tcolumn,\n\t\t)\n\t}`;\n}\n\n/**\n * Test whether an expression is not between two values.\n *\n * This, like `between`, includes its endpoints, so if\n * the `column` is equal to `min` or `max`, in this case\n * it will evaluate to FALSE.\n *\n * ## Examples\n *\n * ```ts\n * // Exclude cars made in the 1970s\n * db.select().from(cars)\n * .where(notBetween(cars.year, 1970, 1979))\n * ```\n *\n * @see between for the inverse of this test\n */\nexport function notBetween<T>(\n\tcolumn: SQL.Aliased,\n\tmin: T | SQLWrapper,\n\tmax: T | SQLWrapper,\n): SQL;\nexport function notBetween<TColumn extends AnyColumn>(\n\tcolumn: TColumn,\n\tmin: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n\tmax: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n): SQL;\nexport function notBetween<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tmin: unknown,\n\tmax: unknown,\n): SQL;\nexport function notBetween(\n\tcolumn: SQLWrapper,\n\tmin: unknown,\n\tmax: unknown,\n): SQL {\n\treturn sql`${column} not between ${\n\t\tbindIfParam(\n\t\t\tmin,\n\t\t\tcolumn,\n\t\t)\n\t} and ${bindIfParam(max, column)}`;\n}\n\n/**\n * Compare a column to a pattern, which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars with 'Turbo' in their names.\n * db.select().from(cars)\n * .where(like(cars.name, '%Turbo%'))\n * ```\n *\n * @see ilike for a case-insensitive version of this condition\n */\nexport function like(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} like ${value}`;\n}\n\n/**\n * The inverse of like - this tests that a given column\n * does not match a pattern, which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars that don't have \"ROver\" in their name.\n * db.select().from(cars)\n * .where(notLike(cars.name, '%Rover%'))\n * ```\n *\n * @see like for the inverse condition\n * @see notIlike for a case-insensitive version of this condition\n */\nexport function notLike(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} not like ${value}`;\n}\n\n/**\n * Case-insensitively compare a column to a pattern,\n * which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * Unlike like, this performs a case-insensitive comparison.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars with 'Turbo' in their names.\n * db.select().from(cars)\n * .where(ilike(cars.name, '%Turbo%'))\n * ```\n *\n * @see like for a case-sensitive version of this condition\n */\nexport function ilike(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} ilike ${value}`;\n}\n\n/**\n * The inverse of ilike - this case-insensitively tests that a given column\n * does not match a pattern, which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars that don't have \"Rover\" in their name.\n * db.select().from(cars)\n * .where(notLike(cars.name, '%Rover%'))\n * ```\n *\n * @see ilike for the inverse condition\n * @see notLike for a case-sensitive version of this condition\n */\nexport function notIlike(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} not ilike ${value}`;\n}\n\n/**\n * Test that a column or expression contains all elements of\n * the list passed as the second argument.\n *\n * ## Throws\n *\n * The argument passed in the second array can't be empty:\n * if an empty is provided, this method will throw.\n *\n * ## Examples\n *\n * ```ts\n * // Select posts where its tags contain \"Typescript\" and \"ORM\".\n * db.select().from(posts)\n * .where(arrayContains(posts.tags, ['Typescript', 'ORM']))\n * ```\n *\n * @see arrayContained to find if an array contains all elements of a column or expression\n * @see arrayOverlaps to find if a column or expression contains any elements of an array\n */\nexport function arrayContains<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContains<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContains<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function arrayContains(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('arrayContains requires at least one value');\n\t\t}\n\t\tconst array = sql`${bindIfParam(values, column)}`;\n\t\treturn sql`${column} @> ${array}`;\n\t}\n\n\treturn sql`${column} @> ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test that the list passed as the second argument contains\n * all elements of a column or expression.\n *\n * ## Throws\n *\n * The argument passed in the second array can't be empty:\n * if an empty is provided, this method will throw.\n *\n * ## Examples\n *\n * ```ts\n * // Select posts where its tags contain \"Typescript\", \"ORM\" or both,\n * // but filtering posts that have additional tags.\n * db.select().from(posts)\n * .where(arrayContained(posts.tags, ['Typescript', 'ORM']))\n * ```\n *\n * @see arrayContains to find if a column or expression contains all elements of an array\n * @see arrayOverlaps to find if a column or expression contains any elements of an array\n */\nexport function arrayContained<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContained<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContained<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function arrayContained(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('arrayContained requires at least one value');\n\t\t}\n\t\tconst array = sql`${bindIfParam(values, column)}`;\n\t\treturn sql`${column} <@ ${array}`;\n\t}\n\n\treturn sql`${column} <@ ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test that a column or expression contains any elements of\n * the list passed as the second argument.\n *\n * ## Throws\n *\n * The argument passed in the second array can't be empty:\n * if an empty is provided, this method will throw.\n *\n * ## Examples\n *\n * ```ts\n * // Select posts where its tags contain \"Typescript\", \"ORM\" or both.\n * db.select().from(posts)\n * .where(arrayOverlaps(posts.tags, ['Typescript', 'ORM']))\n * ```\n *\n * @see arrayContains to find if a column or expression contains all elements of an array\n * @see arrayContained to find if an array contains all elements of a column or expression\n */\nexport function arrayOverlaps<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayOverlaps<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayOverlaps<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function arrayOverlaps(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('arrayOverlaps requires at least one value');\n\t\t}\n\t\tconst array = sql`${bindIfParam(values, column)}`;\n\t\treturn sql`${column} && ${array}`;\n\t}\n\n\treturn sql`${column} && ${bindIfParam(values, column)}`;\n}\n","import type { AnyColumn } from '../../column.ts';\nimport type { SQL, SQLWrapper } from '../sql.ts';\nimport { sql } from '../sql.ts';\n\n/**\n * Used in sorting, this specifies that the given\n * column or expression should be sorted in ascending\n * order. By the SQL standard, ascending order is the\n * default, so it is not usually necessary to specify\n * ascending sort order.\n *\n * ## Examples\n *\n * ```ts\n * // Return cars, starting with the oldest models\n * // and going in ascending order to the newest.\n * db.select().from(cars)\n * .orderBy(asc(cars.year));\n * ```\n *\n * @see desc to sort in descending order\n */\nexport function asc(column: AnyColumn | SQLWrapper): SQL {\n\treturn sql`${column} asc`;\n}\n\n/**\n * Used in sorting, this specifies that the given\n * column or expression should be sorted in descending\n * order.\n *\n * ## Examples\n *\n * ```ts\n * // Select users, with the most recently created\n * // records coming first.\n * db.select().from(users)\n * .orderBy(desc(users.createdAt));\n * ```\n *\n * @see asc to sort in ascending order\n */\nexport function desc(column: AnyColumn | SQLWrapper): SQL {\n\treturn sql`${column} desc`;\n}\n","import { type AnyTable, getTableUniqueName, type InferModelFromColumns, Table } from '~/table.ts';\nimport { type AnyColumn, Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { PrimaryKeyBuilder } from './pg-core/primary-keys.ts';\nimport {\n\tand,\n\tasc,\n\tbetween,\n\tdesc,\n\teq,\n\texists,\n\tgt,\n\tgte,\n\tilike,\n\tinArray,\n\tisNotNull,\n\tisNull,\n\tlike,\n\tlt,\n\tlte,\n\tne,\n\tnot,\n\tnotBetween,\n\tnotExists,\n\tnotIlike,\n\tnotInArray,\n\tnotLike,\n\tor,\n} from './sql/expressions/index.ts';\nimport { type Placeholder, SQL, sql } from './sql/sql.ts';\nimport type { Assume, ColumnsWithTable, Equal, Simplify, ValueOrArray } from './utils.ts';\n\nexport abstract class Relation<TTableName extends string = string> {\n\tstatic readonly [entityKind]: string = 'Relation';\n\n\tdeclare readonly $brand: 'Relation';\n\treadonly referencedTableName: TTableName;\n\tfieldName!: string;\n\n\tconstructor(\n\t\treadonly sourceTable: Table,\n\t\treadonly referencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly relationName: string | undefined,\n\t) {\n\t\tthis.referencedTableName = referencedTable[Table.Symbol.Name] as TTableName;\n\t}\n\n\tabstract withFieldName(fieldName: string): Relation<TTableName>;\n}\n\nexport class Relations<\n\tTTableName extends string = string,\n\tTConfig extends Record<string, Relation> = Record<string, Relation>,\n> {\n\tstatic readonly [entityKind]: string = 'Relations';\n\n\tdeclare readonly $brand: 'Relations';\n\n\tconstructor(\n\t\treadonly table: AnyTable<{ name: TTableName }>,\n\t\treadonly config: (helpers: TableRelationsHelpers<TTableName>) => TConfig,\n\t) {}\n}\n\nexport class One<\n\tTTableName extends string = string,\n\tTIsNullable extends boolean = boolean,\n> extends Relation<TTableName> {\n\tstatic override readonly [entityKind]: string = 'One';\n\n\tdeclare protected $relationBrand: 'One';\n\n\tconstructor(\n\t\tsourceTable: Table,\n\t\treferencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly config:\n\t\t\t| RelationConfig<\n\t\t\t\tTTableName,\n\t\t\t\tstring,\n\t\t\t\tAnyColumn<{ tableName: TTableName }>[]\n\t\t\t>\n\t\t\t| undefined,\n\t\treadonly isNullable: TIsNullable,\n\t) {\n\t\tsuper(sourceTable, referencedTable, config?.relationName);\n\t}\n\n\twithFieldName(fieldName: string): One<TTableName> {\n\t\tconst relation = new One(\n\t\t\tthis.sourceTable,\n\t\t\tthis.referencedTable,\n\t\t\tthis.config,\n\t\t\tthis.isNullable,\n\t\t);\n\t\trelation.fieldName = fieldName;\n\t\treturn relation;\n\t}\n}\n\nexport class Many<TTableName extends string> extends Relation<TTableName> {\n\tstatic override readonly [entityKind]: string = 'Many';\n\n\tdeclare protected $relationBrand: 'Many';\n\n\tconstructor(\n\t\tsourceTable: Table,\n\t\treferencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly config: { relationName: string } | undefined,\n\t) {\n\t\tsuper(sourceTable, referencedTable, config?.relationName);\n\t}\n\n\twithFieldName(fieldName: string): Many<TTableName> {\n\t\tconst relation = new Many(\n\t\t\tthis.sourceTable,\n\t\t\tthis.referencedTable,\n\t\t\tthis.config,\n\t\t);\n\t\trelation.fieldName = fieldName;\n\t\treturn relation;\n\t}\n}\n\nexport type TableRelationsKeysOnly<\n\tTSchema extends Record<string, unknown>,\n\tTTableName extends string,\n\tK extends keyof TSchema,\n> = TSchema[K] extends Relations<TTableName> ? K : never;\n\nexport type ExtractTableRelationsFromSchema<\n\tTSchema extends Record<string, unknown>,\n\tTTableName extends string,\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TSchema as TableRelationsKeysOnly<\n\t\t\t\tTSchema,\n\t\t\t\tTTableName,\n\t\t\t\tK\n\t\t\t>\n\t\t]: TSchema[K] extends Relations<TTableName, infer TConfig> ? TConfig : never;\n\t}\n>;\n\nexport type ExtractObjectValues<T> = T[keyof T];\n\nexport type ExtractRelationsFromTableExtraConfigSchema<\n\tTConfig extends unknown[],\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TConfig as TConfig[K] extends Relations<any> ? K\n\t\t\t\t: never\n\t\t]: TConfig[K] extends Relations<infer TRelationConfig> ? TRelationConfig\n\t\t\t: never;\n\t}\n>;\n\nexport function getOperators() {\n\treturn {\n\t\tand,\n\t\tbetween,\n\t\teq,\n\t\texists,\n\t\tgt,\n\t\tgte,\n\t\tilike,\n\t\tinArray,\n\t\tisNull,\n\t\tisNotNull,\n\t\tlike,\n\t\tlt,\n\t\tlte,\n\t\tne,\n\t\tnot,\n\t\tnotBetween,\n\t\tnotExists,\n\t\tnotLike,\n\t\tnotIlike,\n\t\tnotInArray,\n\t\tor,\n\t\tsql,\n\t};\n}\n\nexport type Operators = ReturnType<typeof getOperators>;\n\nexport function getOrderByOperators() {\n\treturn {\n\t\tsql,\n\t\tasc,\n\t\tdesc,\n\t};\n}\n\nexport type OrderByOperators = ReturnType<typeof getOrderByOperators>;\n\nexport type FindTableByDBName<\n\tTSchema extends TablesRelationalConfig,\n\tTTableName extends string,\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TSchema as TSchema[K]['dbName'] extends TTableName ? K\n\t\t\t\t: never\n\t\t]: TSchema[K];\n\t}\n>;\n\nexport type DBQueryConfig<\n\tTRelationType extends 'one' | 'many' = 'one' | 'many',\n\tTIsRoot extends boolean = boolean,\n\tTSchema extends TablesRelationalConfig = TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig = TableRelationalConfig,\n> =\n\t& {\n\t\tcolumns?:\n\t\t\t| {\n\t\t\t\t[K in keyof TTableConfig['columns']]?: boolean;\n\t\t\t}\n\t\t\t| undefined;\n\t\twith?:\n\t\t\t| {\n\t\t\t\t[K in keyof TTableConfig['relations']]?:\n\t\t\t\t\t| true\n\t\t\t\t\t| DBQueryConfig<\n\t\t\t\t\t\tTTableConfig['relations'][K] extends One ? 'one' : 'many',\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tTSchema,\n\t\t\t\t\t\tFindTableByDBName<\n\t\t\t\t\t\t\tTSchema,\n\t\t\t\t\t\t\tTTableConfig['relations'][K]['referencedTableName']\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t\t| undefined;\n\t\t\t}\n\t\t\t| undefined;\n\t\textras?:\n\t\t\t| Record<string, SQL.Aliased>\n\t\t\t| ((\n\t\t\t\tfields: Simplify<\n\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t>,\n\t\t\t\toperators: { sql: Operators['sql'] },\n\t\t\t) => Record<string, SQL.Aliased>)\n\t\t\t| undefined;\n\t}\n\t& (TRelationType extends 'many' ?\n\t\t\t& {\n\t\t\t\twhere?:\n\t\t\t\t\t| SQL\n\t\t\t\t\t| undefined\n\t\t\t\t\t| ((\n\t\t\t\t\t\tfields: Simplify<\n\t\t\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t\t\t>,\n\t\t\t\t\t\toperators: Operators,\n\t\t\t\t\t) => SQL | undefined);\n\t\t\t\torderBy?:\n\t\t\t\t\t| ValueOrArray<AnyColumn | SQL>\n\t\t\t\t\t| ((\n\t\t\t\t\t\tfields: Simplify<\n\t\t\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t\t\t>,\n\t\t\t\t\t\toperators: OrderByOperators,\n\t\t\t\t\t) => ValueOrArray<AnyColumn | SQL>)\n\t\t\t\t\t| undefined;\n\t\t\t\tlimit?: number | Placeholder | undefined;\n\t\t\t}\n\t\t\t& (TIsRoot extends true ? {\n\t\t\t\t\toffset?: number | Placeholder | undefined;\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t: {});\n\nexport interface TableRelationalConfig {\n\ttsName: string;\n\tdbName: string;\n\tcolumns: Record<string, Column>;\n\trelations: Record<string, Relation>;\n\tprimaryKey: AnyColumn[];\n\tschema?: string;\n}\n\nexport type TablesRelationalConfig = Record<string, TableRelationalConfig>;\n\nexport interface RelationalSchemaConfig<\n\tTSchema extends TablesRelationalConfig,\n> {\n\tfullSchema: Record<string, unknown>;\n\tschema: TSchema;\n\ttableNamesMap: Record<string, string>;\n}\n\nexport type ExtractTablesWithRelations<\n\tTSchema extends Record<string, unknown>,\n> = {\n\t[\n\t\tK in keyof TSchema as TSchema[K] extends Table ? K\n\t\t\t: never\n\t]: TSchema[K] extends Table ? {\n\t\t\ttsName: K & string;\n\t\t\tdbName: TSchema[K]['_']['name'];\n\t\t\tcolumns: TSchema[K]['_']['columns'];\n\t\t\trelations: ExtractTableRelationsFromSchema<\n\t\t\t\tTSchema,\n\t\t\t\tTSchema[K]['_']['name']\n\t\t\t>;\n\t\t\tprimaryKey: AnyColumn[];\n\t\t}\n\t\t: never;\n};\n\nexport type ReturnTypeOrValue<T> = T extends (...args: any[]) => infer R ? R\n\t: T;\n\nexport type BuildRelationResult<\n\tTSchema extends TablesRelationalConfig,\n\tTInclude,\n\tTRelations extends Record<string, Relation>,\n> = {\n\t[\n\t\tK in\n\t\t\t& NonUndefinedKeysOnly<TInclude>\n\t\t\t& keyof TRelations\n\t]: TRelations[K] extends infer TRel extends Relation ? BuildQueryResult<\n\t\t\tTSchema,\n\t\t\tFindTableByDBName<TSchema, TRel['referencedTableName']>,\n\t\t\tAssume<TInclude[K], true | Record<string, unknown>>\n\t\t> extends infer TResult ? TRel extends One ?\n\t\t\t\t\t| TResult\n\t\t\t\t\t| (Equal<TRel['isNullable'], false> extends true ? null : never)\n\t\t\t: TResult[]\n\t\t: never\n\t\t: never;\n};\n\nexport type NonUndefinedKeysOnly<T> =\n\t& ExtractObjectValues<\n\t\t{\n\t\t\t[K in keyof T as T[K] extends undefined ? never : K]: K;\n\t\t}\n\t>\n\t& keyof T;\n\nexport type BuildQueryResult<\n\tTSchema extends TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig,\n\tTFullSelection extends true | Record<string, unknown>,\n> = Equal<TFullSelection, true> extends true ? InferModelFromColumns<TTableConfig['columns']>\n\t: TFullSelection extends Record<string, unknown> ? Simplify<\n\t\t\t& (TFullSelection['columns'] extends Record<string, unknown> ? InferModelFromColumns<\n\t\t\t\t\t{\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tK in Equal<\n\t\t\t\t\t\t\t\tExclude<\n\t\t\t\t\t\t\t\t\tTFullSelection['columns'][\n\t\t\t\t\t\t\t\t\t\t& keyof TFullSelection['columns']\n\t\t\t\t\t\t\t\t\t\t& keyof TTableConfig['columns']\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t\t\t>,\n\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t> extends true ? Exclude<\n\t\t\t\t\t\t\t\t\tkeyof TTableConfig['columns'],\n\t\t\t\t\t\t\t\t\tNonUndefinedKeysOnly<TFullSelection['columns']>\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t& {\n\t\t\t\t\t\t\t\t\t\t[K in keyof TFullSelection['columns']]: Equal<\n\t\t\t\t\t\t\t\t\t\t\tTFullSelection['columns'][K],\n\t\t\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t\t\t> extends true ? K\n\t\t\t\t\t\t\t\t\t\t\t: never;\n\t\t\t\t\t\t\t\t\t}[keyof TFullSelection['columns']]\n\t\t\t\t\t\t\t\t\t& keyof TTableConfig['columns']\n\t\t\t\t\t\t]: TTableConfig['columns'][K];\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t: InferModelFromColumns<TTableConfig['columns']>)\n\t\t\t& (TFullSelection['extras'] extends\n\t\t\t\t| Record<string, unknown>\n\t\t\t\t| ((...args: any[]) => Record<string, unknown>) ? {\n\t\t\t\t\t[\n\t\t\t\t\t\tK in NonUndefinedKeysOnly<\n\t\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>\n\t\t\t\t\t\t>\n\t\t\t\t\t]: Assume<\n\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>[K],\n\t\t\t\t\t\tSQL.Aliased\n\t\t\t\t\t>['_']['type'];\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t\t& (TFullSelection['with'] extends Record<string, unknown> ? BuildRelationResult<\n\t\t\t\t\tTSchema,\n\t\t\t\t\tTFullSelection['with'],\n\t\t\t\t\tTTableConfig['relations']\n\t\t\t\t>\n\t\t\t\t: {})\n\t\t>\n\t: never;\n\nexport interface RelationConfig<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends AnyColumn<{ tableName: TTableName }>[],\n> {\n\trelationName?: string;\n\tfields: TColumns;\n\treferences: ColumnsWithTable<TTableName, TForeignTableName, TColumns>;\n}\n\nexport function extractTablesRelationalConfig<\n\tTTables extends TablesRelationalConfig,\n>(\n\tschema: Record<string, unknown>,\n\tconfigHelpers: (table: Table) => any,\n): { tables: TTables; tableNamesMap: Record<string, string> } {\n\tif (\n\t\tObject.keys(schema).length === 1\n\t\t&& 'default' in schema\n\t\t&& !is(schema['default'], Table)\n\t) {\n\t\tschema = schema['default'] as Record<string, unknown>;\n\t}\n\n\t// table DB name -> schema table key\n\tconst tableNamesMap: Record<string, string> = {};\n\t// Table relations found before their tables - need to buffer them until we know the schema table key\n\tconst relationsBuffer: Record<\n\t\tstring,\n\t\t{ relations: Record<string, Relation>; primaryKey?: AnyColumn[] }\n\t> = {};\n\tconst tablesConfig: TablesRelationalConfig = {};\n\tfor (const [key, value] of Object.entries(schema)) {\n\t\tif (is(value, Table)) {\n\t\t\tconst dbName = getTableUniqueName(value);\n\t\t\tconst bufferedRelations = relationsBuffer[dbName];\n\t\t\ttableNamesMap[dbName] = key;\n\t\t\ttablesConfig[key] = {\n\t\t\t\ttsName: key,\n\t\t\t\tdbName: value[Table.Symbol.Name],\n\t\t\t\tschema: value[Table.Symbol.Schema],\n\t\t\t\tcolumns: value[Table.Symbol.Columns],\n\t\t\t\trelations: bufferedRelations?.relations ?? {},\n\t\t\t\tprimaryKey: bufferedRelations?.primaryKey ?? [],\n\t\t\t};\n\n\t\t\t// Fill in primary keys\n\t\t\tfor (\n\t\t\t\tconst column of Object.values(\n\t\t\t\t\t(value as Table)[Table.Symbol.Columns],\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tif (column.primary) {\n\t\t\t\t\ttablesConfig[key]!.primaryKey.push(column);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst extraConfig = value[Table.Symbol.ExtraConfigBuilder]?.((value as Table)[Table.Symbol.ExtraConfigColumns]);\n\t\t\tif (extraConfig) {\n\t\t\t\tfor (const configEntry of Object.values(extraConfig)) {\n\t\t\t\t\tif (is(configEntry, PrimaryKeyBuilder)) {\n\t\t\t\t\t\ttablesConfig[key]!.primaryKey.push(...configEntry.columns);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (is(value, Relations)) {\n\t\t\tconst dbName = getTableUniqueName(value.table);\n\t\t\tconst tableName = tableNamesMap[dbName];\n\t\t\tconst relations: Record<string, Relation> = value.config(\n\t\t\t\tconfigHelpers(value.table),\n\t\t\t);\n\t\t\tlet primaryKey: AnyColumn[] | undefined;\n\n\t\t\tfor (const [relationName, relation] of Object.entries(relations)) {\n\t\t\t\tif (tableName) {\n\t\t\t\t\tconst tableConfig = tablesConfig[tableName]!;\n\t\t\t\t\ttableConfig.relations[relationName] = relation;\n\t\t\t\t\tif (primaryKey) {\n\t\t\t\t\t\ttableConfig.primaryKey.push(...primaryKey);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!(dbName in relationsBuffer)) {\n\t\t\t\t\t\trelationsBuffer[dbName] = {\n\t\t\t\t\t\t\trelations: {},\n\t\t\t\t\t\t\tprimaryKey,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\trelationsBuffer[dbName]!.relations[relationName] = relation;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { tables: tablesConfig as TTables, tableNamesMap };\n}\n\nexport function relations<\n\tTTableName extends string,\n\tTRelations extends Record<string, Relation<any>>,\n>(\n\ttable: AnyTable<{ name: TTableName }>,\n\trelations: (helpers: TableRelationsHelpers<TTableName>) => TRelations,\n): Relations<TTableName, TRelations> {\n\treturn new Relations<TTableName, TRelations>(\n\t\ttable,\n\t\t(helpers: TableRelationsHelpers<TTableName>) =>\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.entries(relations(helpers)).map(([key, value]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue.withFieldName(key),\n\t\t\t\t]),\n\t\t\t) as TRelations,\n\t);\n}\n\nexport function createOne<TTableName extends string>(sourceTable: Table) {\n\treturn function one<\n\t\tTForeignTable extends Table,\n\t\tTColumns extends [\n\t\t\tAnyColumn<{ tableName: TTableName }>,\n\t\t\t...AnyColumn<{ tableName: TTableName }>[],\n\t\t],\n\t>(\n\t\ttable: TForeignTable,\n\t\tconfig?: RelationConfig<TTableName, TForeignTable['_']['name'], TColumns>,\n\t): One<\n\t\tTForeignTable['_']['name'],\n\t\tEqual<TColumns[number]['_']['notNull'], true>\n\t> {\n\t\treturn new One(\n\t\t\tsourceTable,\n\t\t\ttable,\n\t\t\tconfig,\n\t\t\t(config?.fields.reduce<boolean>((res, f) => res && f.notNull, true)\n\t\t\t\t?? false) as Equal<TColumns[number]['_']['notNull'], true>,\n\t\t);\n\t};\n}\n\nexport function createMany(sourceTable: Table) {\n\treturn function many<TForeignTable extends Table>(\n\t\treferencedTable: TForeignTable,\n\t\tconfig?: { relationName: string },\n\t): Many<TForeignTable['_']['name']> {\n\t\treturn new Many(sourceTable, referencedTable, config);\n\t};\n}\n\nexport interface NormalizedRelation {\n\tfields: AnyColumn[];\n\treferences: AnyColumn[];\n}\n\nexport function normalizeRelation(\n\tschema: TablesRelationalConfig,\n\ttableNamesMap: Record<string, string>,\n\trelation: Relation,\n): NormalizedRelation {\n\tif (is(relation, One) && relation.config) {\n\t\treturn {\n\t\t\tfields: relation.config.fields,\n\t\t\treferences: relation.config.references,\n\t\t};\n\t}\n\n\tconst referencedTableTsName = tableNamesMap[getTableUniqueName(relation.referencedTable)];\n\tif (!referencedTableTsName) {\n\t\tthrow new Error(\n\t\t\t`Table \"${relation.referencedTable[Table.Symbol.Name]}\" not found in schema`,\n\t\t);\n\t}\n\n\tconst referencedTableConfig = schema[referencedTableTsName];\n\tif (!referencedTableConfig) {\n\t\tthrow new Error(`Table \"${referencedTableTsName}\" not found in schema`);\n\t}\n\n\tconst sourceTable = relation.sourceTable;\n\tconst sourceTableTsName = tableNamesMap[getTableUniqueName(sourceTable)];\n\tif (!sourceTableTsName) {\n\t\tthrow new Error(\n\t\t\t`Table \"${sourceTable[Table.Symbol.Name]}\" not found in schema`,\n\t\t);\n\t}\n\n\tconst reverseRelations: Relation[] = [];\n\tfor (\n\t\tconst referencedTableRelation of Object.values(\n\t\t\treferencedTableConfig.relations,\n\t\t)\n\t) {\n\t\tif (\n\t\t\t(relation.relationName\n\t\t\t\t&& relation !== referencedTableRelation\n\t\t\t\t&& referencedTableRelation.relationName === relation.relationName)\n\t\t\t|| (!relation.relationName\n\t\t\t\t&& referencedTableRelation.referencedTable === relation.sourceTable)\n\t\t) {\n\t\t\treverseRelations.push(referencedTableRelation);\n\t\t}\n\t}\n\n\tif (reverseRelations.length > 1) {\n\t\tthrow relation.relationName\n\t\t\t? new Error(\n\t\t\t\t`There are multiple relations with name \"${relation.relationName}\" in table \"${referencedTableTsName}\"`,\n\t\t\t)\n\t\t\t: new Error(\n\t\t\t\t`There are multiple relations between \"${referencedTableTsName}\" and \"${\n\t\t\t\t\trelation.sourceTable[Table.Symbol.Name]\n\t\t\t\t}\". Please specify relation name`,\n\t\t\t);\n\t}\n\n\tif (\n\t\treverseRelations[0]\n\t\t&& is(reverseRelations[0], One)\n\t\t&& reverseRelations[0].config\n\t) {\n\t\treturn {\n\t\t\tfields: reverseRelations[0].config.references,\n\t\t\treferences: reverseRelations[0].config.fields,\n\t\t};\n\t}\n\n\tthrow new Error(\n\t\t`There is not enough information to infer relation \"${sourceTableTsName}.${relation.fieldName}\"`,\n\t);\n}\n\nexport function createTableRelationsHelpers<TTableName extends string>(\n\tsourceTable: AnyTable<{ name: TTableName }>,\n) {\n\treturn {\n\t\tone: createOne<TTableName>(sourceTable),\n\t\tmany: createMany(sourceTable),\n\t};\n}\n\nexport type TableRelationsHelpers<TTableName extends string> = ReturnType<\n\ttypeof createTableRelationsHelpers<TTableName>\n>;\n\nexport interface BuildRelationalQueryResult<\n\tTTable extends Table = Table,\n\tTColumn extends Column = Column,\n> {\n\ttableTsKey: string;\n\tselection: {\n\t\tdbKey: string;\n\t\ttsKey: string;\n\t\tfield: TColumn | SQL | SQL.Aliased;\n\t\trelationTableTsKey: string | undefined;\n\t\tisJson: boolean;\n\t\tisExtra?: boolean;\n\t\tselection: BuildRelationalQueryResult<TTable>['selection'];\n\t}[];\n\tsql: TTable | SQL;\n}\n\nexport function mapRelationalRow(\n\ttablesConfig: TablesRelationalConfig,\n\ttableConfig: TableRelationalConfig,\n\trow: unknown[],\n\tbuildQueryResultSelection: BuildRelationalQueryResult['selection'],\n\tmapColumnValue: (value: unknown) => unknown = (value) => value,\n): Record<string, unknown> {\n\tconst result: Record<string, unknown> = {};\n\n\tfor (\n\t\tconst [\n\t\t\tselectionItemIndex,\n\t\t\tselectionItem,\n\t\t] of buildQueryResultSelection.entries()\n\t) {\n\t\tif (selectionItem.isJson) {\n\t\t\tconst relation = tableConfig.relations[selectionItem.tsKey]!;\n\t\t\tconst rawSubRows = row[selectionItemIndex] as\n\t\t\t\t| unknown[]\n\t\t\t\t| null\n\t\t\t\t| [null]\n\t\t\t\t| string;\n\t\t\tconst subRows = typeof rawSubRows === 'string'\n\t\t\t\t? (JSON.parse(rawSubRows) as unknown[])\n\t\t\t\t: rawSubRows;\n\t\t\tresult[selectionItem.tsKey] = is(relation, One)\n\t\t\t\t? subRows\n\t\t\t\t\t&& mapRelationalRow(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRows,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t: (subRows as unknown[][]).map((subRow) =>\n\t\t\t\t\tmapRelationalRow(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRow,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t} else {\n\t\t\tconst value = mapColumnValue(row[selectionItemIndex]);\n\t\t\tconst field = selectionItem.field!;\n\t\t\tlet decoder;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tresult[selectionItem.tsKey] = value === null ? null : decoder.mapFromDriverValue(value);\n\t\t}\n\t}\n\n\treturn result;\n}\n","import type { AnyColumn } from './column.ts';\nimport { Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport type { Relation } from './relations.ts';\nimport type { View } from './sql/sql.ts';\nimport { SQL, sql } from './sql/sql.ts';\nimport { Table } from './table.ts';\nimport { ViewBaseConfig } from './view-common.ts';\n\nexport class ColumnAliasProxyHandler<TColumn extends Column> implements ProxyHandler<TColumn> {\n\tstatic readonly [entityKind]: string = 'ColumnAliasProxyHandler';\n\n\tconstructor(private table: Table | View) {}\n\n\tget(columnObj: TColumn, prop: string | symbol): any {\n\t\tif (prop === 'table') {\n\t\t\treturn this.table;\n\t\t}\n\n\t\treturn columnObj[prop as keyof TColumn];\n\t}\n}\n\nexport class TableAliasProxyHandler<T extends Table | View> implements ProxyHandler<T> {\n\tstatic readonly [entityKind]: string = 'TableAliasProxyHandler';\n\n\tconstructor(private alias: string, private replaceOriginalName: boolean) {}\n\n\tget(target: T, prop: string | symbol): any {\n\t\tif (prop === Table.Symbol.IsAlias) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (prop === Table.Symbol.Name) {\n\t\t\treturn this.alias;\n\t\t}\n\n\t\tif (this.replaceOriginalName && prop === Table.Symbol.OriginalName) {\n\t\t\treturn this.alias;\n\t\t}\n\n\t\tif (prop === ViewBaseConfig) {\n\t\t\treturn {\n\t\t\t\t...target[ViewBaseConfig as keyof typeof target],\n\t\t\t\tname: this.alias,\n\t\t\t\tisAlias: true,\n\t\t\t};\n\t\t}\n\n\t\tif (prop === Table.Symbol.Columns) {\n\t\t\tconst columns = (target as Table)[Table.Symbol.Columns];\n\t\t\tif (!columns) {\n\t\t\t\treturn columns;\n\t\t\t}\n\n\t\t\tconst proxiedColumns: { [key: string]: any } = {};\n\n\t\t\tObject.keys(columns).map((key) => {\n\t\t\t\tproxiedColumns[key] = new Proxy(\n\t\t\t\t\tcolumns[key]!,\n\t\t\t\t\tnew ColumnAliasProxyHandler(new Proxy(target, this)),\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn proxiedColumns;\n\t\t}\n\n\t\tconst value = target[prop as keyof typeof target];\n\t\tif (is(value, Column)) {\n\t\t\treturn new Proxy(value as AnyColumn, new ColumnAliasProxyHandler(new Proxy(target, this)));\n\t\t}\n\n\t\treturn value;\n\t}\n}\n\nexport class RelationTableAliasProxyHandler<T extends Relation> implements ProxyHandler<T> {\n\tstatic readonly [entityKind]: string = 'RelationTableAliasProxyHandler';\n\n\tconstructor(private alias: string) {}\n\n\tget(target: T, prop: string | symbol): any {\n\t\tif (prop === 'sourceTable') {\n\t\t\treturn aliasedTable(target.sourceTable, this.alias);\n\t\t}\n\n\t\treturn target[prop as keyof typeof target];\n\t}\n}\n\nexport function aliasedTable<T extends Table | View>(\n\ttable: T,\n\ttableAlias: string,\n): T {\n\treturn new Proxy(table, new TableAliasProxyHandler(tableAlias, false)) as any;\n}\n\nexport function aliasedRelation<T extends Relation>(relation: T, tableAlias: string): T {\n\treturn new Proxy(relation, new RelationTableAliasProxyHandler(tableAlias));\n}\n\nexport function aliasedTableColumn<T extends AnyColumn>(column: T, tableAlias: string): T {\n\treturn new Proxy(\n\t\tcolumn,\n\t\tnew ColumnAliasProxyHandler(new Proxy(column.table, new TableAliasProxyHandler(tableAlias, false))),\n\t);\n}\n\nexport function mapColumnsInAliasedSQLToAlias(query: SQL.Aliased, alias: string): SQL.Aliased {\n\treturn new SQL.Aliased(mapColumnsInSQLToAlias(query.sql, alias), query.fieldAlias);\n}\n\nexport function mapColumnsInSQLToAlias(query: SQL, alias: string): SQL {\n\treturn sql.join(query.queryChunks.map((c) => {\n\t\tif (is(c, Column)) {\n\t\t\treturn aliasedTableColumn(c, alias);\n\t\t}\n\t\tif (is(c, SQL)) {\n\t\t\treturn mapColumnsInSQLToAlias(c, alias);\n\t\t}\n\t\tif (is(c, SQL.Aliased)) {\n\t\t\treturn mapColumnsInAliasedSQLToAlias(c, alias);\n\t\t}\n\t\treturn c;\n\t}));\n}\n","import { ColumnAliasProxyHandler, TableAliasProxyHandler } from './alias.ts';\nimport { Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { SQL, View } from './sql/sql.ts';\nimport { Subquery } from './subquery.ts';\nimport { ViewBaseConfig } from './view-common.ts';\n\nexport class SelectionProxyHandler<T extends Subquery | Record<string, unknown> | View>\n\timplements ProxyHandler<Subquery | Record<string, unknown> | View>\n{\n\tstatic readonly [entityKind]: string = 'SelectionProxyHandler';\n\n\tprivate config: {\n\t\t/**\n\t\t * Table alias for the columns\n\t\t */\n\t\talias?: string;\n\t\t/**\n\t\t * What to do when a field is an instance of `SQL.Aliased` and it's not a selection field (from a subquery)\n\t\t *\n\t\t * `sql` - return the underlying SQL expression\n\t\t *\n\t\t * `alias` - return the field alias\n\t\t */\n\t\tsqlAliasedBehavior: 'sql' | 'alias';\n\t\t/**\n\t\t * What to do when a field is an instance of `SQL` and it doesn't have an alias declared\n\t\t *\n\t\t * `sql` - return the underlying SQL expression\n\t\t *\n\t\t * `error` - return a DrizzleTypeError on type level and throw an error on runtime\n\t\t */\n\t\tsqlBehavior: 'sql' | 'error';\n\n\t\t/**\n\t\t * Whether to replace the original name of the column with the alias\n\t\t * Should be set to `true` for views creation\n\t\t * @default false\n\t\t */\n\t\treplaceOriginalName?: boolean;\n\t};\n\n\tconstructor(config: SelectionProxyHandler<T>['config']) {\n\t\tthis.config = { ...config };\n\t}\n\n\tget(subquery: T, prop: string | symbol): any {\n\t\tif (prop === '_') {\n\t\t\treturn {\n\t\t\t\t...subquery['_' as keyof typeof subquery],\n\t\t\t\tselectedFields: new Proxy(\n\t\t\t\t\t(subquery as Subquery)._.selectedFields,\n\t\t\t\t\tthis as ProxyHandler<Record<string, unknown>>,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\tif (prop === ViewBaseConfig) {\n\t\t\treturn {\n\t\t\t\t...subquery[ViewBaseConfig as keyof typeof subquery],\n\t\t\t\tselectedFields: new Proxy(\n\t\t\t\t\t(subquery as View)[ViewBaseConfig].selectedFields,\n\t\t\t\t\tthis as ProxyHandler<Record<string, unknown>>,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\tif (typeof prop === 'symbol') {\n\t\t\treturn subquery[prop as keyof typeof subquery];\n\t\t}\n\n\t\tconst columns = is(subquery, Subquery)\n\t\t\t? subquery._.selectedFields\n\t\t\t: is(subquery, View)\n\t\t\t? subquery[ViewBaseConfig].selectedFields\n\t\t\t: subquery;\n\t\tconst value: unknown = columns[prop as keyof typeof columns];\n\n\t\tif (is(value, SQL.Aliased)) {\n\t\t\t// Never return the underlying SQL expression for a field previously selected in a subquery\n\t\t\tif (this.config.sqlAliasedBehavior === 'sql' && !value.isSelectionField) {\n\t\t\t\treturn value.sql;\n\t\t\t}\n\n\t\t\tconst newValue = value.clone();\n\t\t\tnewValue.isSelectionField = true;\n\t\t\treturn newValue;\n\t\t}\n\n\t\tif (is(value, SQL)) {\n\t\t\tif (this.config.sqlBehavior === 'sql') {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tthrow new Error(\n\t\t\t\t`You tried to reference \"${prop}\" field from a subquery, which is a raw SQL field, but it doesn't have an alias declared. Please add an alias to the field using \".as('alias')\" method.`,\n\t\t\t);\n\t\t}\n\n\t\tif (is(value, Column)) {\n\t\t\tif (this.config.alias) {\n\t\t\t\treturn new Proxy(\n\t\t\t\t\tvalue,\n\t\t\t\t\tnew ColumnAliasProxyHandler(\n\t\t\t\t\t\tnew Proxy(\n\t\t\t\t\t\t\tvalue.table,\n\t\t\t\t\t\t\tnew TableAliasProxyHandler(this.config.alias, this.config.replaceOriginalName ?? false),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\n\t\tif (typeof value !== 'object' || value === null) {\n\t\t\treturn value;\n\t\t}\n\n\t\treturn new Proxy(value, new SelectionProxyHandler(this.config));\n\t}\n}\n","import { entityKind } from '~/entity.ts';\n\nexport abstract class QueryPromise<T> implements Promise<T> {\n\tstatic readonly [entityKind]: string = 'QueryPromise';\n\n\t[Symbol.toStringTag] = 'QueryPromise';\n\n\tcatch<TResult = never>(\n\t\tonRejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null | undefined,\n\t): Promise<T | TResult> {\n\t\treturn this.then(undefined, onRejected);\n\t}\n\n\tfinally(onFinally?: (() => void) | null | undefined): Promise<T> {\n\t\treturn this.then(\n\t\t\t(value) => {\n\t\t\t\tonFinally?.();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\t(reason) => {\n\t\t\t\tonFinally?.();\n\t\t\t\tthrow reason;\n\t\t\t},\n\t\t);\n\t}\n\n\tthen<TResult1 = T, TResult2 = never>(\n\t\tonFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n\t\tonRejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n\t): Promise<TResult1 | TResult2> {\n\t\treturn this.execute().then(onFulfilled, onRejected);\n\t}\n\n\tabstract execute(): Promise<T>;\n}\n","import { entityKind } from '~/entity.ts';\nimport { TableName } from '~/table.utils.ts';\nimport type { AnySQLiteColumn, SQLiteColumn } from './columns/index.ts';\nimport type { SQLiteTable } from './table.ts';\n\nexport type UpdateDeleteAction = 'cascade' | 'restrict' | 'no action' | 'set null' | 'set default';\n\nexport type Reference = () => {\n\treadonly name?: string;\n\treadonly columns: SQLiteColumn[];\n\treadonly foreignTable: SQLiteTable;\n\treadonly foreignColumns: SQLiteColumn[];\n};\n\nexport class ForeignKeyBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteForeignKeyBuilder';\n\n\tdeclare _: {\n\t\tbrand: 'SQLiteForeignKeyBuilder';\n\t\tforeignTableName: 'TForeignTableName';\n\t};\n\n\t/** @internal */\n\treference: Reference;\n\n\t/** @internal */\n\t_onUpdate: UpdateDeleteAction | undefined;\n\n\t/** @internal */\n\t_onDelete: UpdateDeleteAction | undefined;\n\n\tconstructor(\n\t\tconfig: () => {\n\t\t\tname?: string;\n\t\t\tcolumns: SQLiteColumn[];\n\t\t\tforeignColumns: SQLiteColumn[];\n\t\t},\n\t\tactions?: {\n\t\t\tonUpdate?: UpdateDeleteAction;\n\t\t\tonDelete?: UpdateDeleteAction;\n\t\t} | undefined,\n\t) {\n\t\tthis.reference = () => {\n\t\t\tconst { name, columns, foreignColumns } = config();\n\t\t\treturn { name, columns, foreignTable: foreignColumns[0]!.table as SQLiteTable, foreignColumns };\n\t\t};\n\t\tif (actions) {\n\t\t\tthis._onUpdate = actions.onUpdate;\n\t\t\tthis._onDelete = actions.onDelete;\n\t\t}\n\t}\n\n\tonUpdate(action: UpdateDeleteAction): this {\n\t\tthis._onUpdate = action;\n\t\treturn this;\n\t}\n\n\tonDelete(action: UpdateDeleteAction): this {\n\t\tthis._onDelete = action;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: SQLiteTable): ForeignKey {\n\t\treturn new ForeignKey(table, this);\n\t}\n}\n\nexport class ForeignKey {\n\tstatic readonly [entityKind]: string = 'SQLiteForeignKey';\n\n\treadonly reference: Reference;\n\treadonly onUpdate: UpdateDeleteAction | undefined;\n\treadonly onDelete: UpdateDeleteAction | undefined;\n\n\tconstructor(readonly table: SQLiteTable, builder: ForeignKeyBuilder) {\n\t\tthis.reference = builder.reference;\n\t\tthis.onUpdate = builder._onUpdate;\n\t\tthis.onDelete = builder._onDelete;\n\t}\n\n\tgetName(): string {\n\t\tconst { name, columns, foreignColumns } = this.reference();\n\t\tconst columnNames = columns.map((column) => column.name);\n\t\tconst foreignColumnNames = foreignColumns.map((column) => column.name);\n\t\tconst chunks = [\n\t\t\tthis.table[TableName],\n\t\t\t...columnNames,\n\t\t\tforeignColumns[0]!.table[TableName],\n\t\t\t...foreignColumnNames,\n\t\t];\n\t\treturn name ?? `${chunks.join('_')}_fk`;\n\t}\n}\n\ntype ColumnsWithTable<\n\tTTableName extends string,\n\tTColumns extends SQLiteColumn[],\n> = { [Key in keyof TColumns]: AnySQLiteColumn<{ tableName: TTableName }> };\n\n/**\n * @deprecated please use `foreignKey({ columns: [], foreignColumns: [] })` syntax without callback\n * @param config\n * @returns\n */\nexport function foreignKey<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends [AnySQLiteColumn<{ tableName: TTableName }>, ...AnySQLiteColumn<{ tableName: TTableName }>[]],\n>(\n\tconfig: () => {\n\t\tname?: string;\n\t\tcolumns: TColumns;\n\t\tforeignColumns: ColumnsWithTable<TForeignTableName, TColumns>;\n\t},\n): ForeignKeyBuilder;\nexport function foreignKey<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends [AnySQLiteColumn<{ tableName: TTableName }>, ...AnySQLiteColumn<{ tableName: TTableName }>[]],\n>(\n\tconfig: {\n\t\tname?: string;\n\t\tcolumns: TColumns;\n\t\tforeignColumns: ColumnsWithTable<TForeignTableName, TColumns>;\n\t},\n): ForeignKeyBuilder;\nexport function foreignKey(\n\tconfig: any,\n): ForeignKeyBuilder {\n\tfunction mappedConfig() {\n\t\tif (typeof config === 'function') {\n\t\t\tconst { name, columns, foreignColumns } = config();\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\tcolumns,\n\t\t\t\tforeignColumns,\n\t\t\t};\n\t\t}\n\t\treturn config;\n\t}\n\n\treturn new ForeignKeyBuilder(mappedConfig);\n}\n","import { entityKind } from '~/entity.ts';\nimport { TableName } from '~/table.utils.ts';\nimport type { SQLiteColumn } from './columns/common.ts';\nimport type { SQLiteTable } from './table.ts';\n\nexport function uniqueKeyName(table: SQLiteTable, columns: string[]) {\n\treturn `${table[TableName]}_${columns.join('_')}_unique`;\n}\n\nexport function unique(name?: string): UniqueOnConstraintBuilder {\n\treturn new UniqueOnConstraintBuilder(name);\n}\n\nexport class UniqueConstraintBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteUniqueConstraintBuilder';\n\n\t/** @internal */\n\tcolumns: SQLiteColumn[];\n\n\tconstructor(\n\t\tcolumns: SQLiteColumn[],\n\t\tprivate name?: string,\n\t) {\n\t\tthis.columns = columns;\n\t}\n\n\t/** @internal */\n\tbuild(table: SQLiteTable): UniqueConstraint {\n\t\treturn new UniqueConstraint(table, this.columns, this.name);\n\t}\n}\n\nexport class UniqueOnConstraintBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteUniqueOnConstraintBuilder';\n\n\t/** @internal */\n\tname?: string;\n\n\tconstructor(\n\t\tname?: string,\n\t) {\n\t\tthis.name = name;\n\t}\n\n\ton(...columns: [SQLiteColumn, ...SQLiteColumn[]]) {\n\t\treturn new UniqueConstraintBuilder(columns, this.name);\n\t}\n}\n\nexport class UniqueConstraint {\n\tstatic readonly [entityKind]: string = 'SQLiteUniqueConstraint';\n\n\treadonly columns: SQLiteColumn[];\n\treadonly name?: string;\n\n\tconstructor(readonly table: SQLiteTable, columns: SQLiteColumn[], name?: string) {\n\t\tthis.columns = columns;\n\t\tthis.name = name ?? uniqueKeyName(this.table, this.columns.map((column) => column.name));\n\t}\n\n\tgetName() {\n\t\treturn this.name;\n\t}\n}\n","import type {\n\tColumnBuilderBase,\n\tColumnBuilderBaseConfig,\n\tColumnBuilderExtraConfig,\n\tColumnBuilderRuntimeConfig,\n\tColumnDataType,\n\tHasGenerated,\n\tMakeColumnConfig,\n} from '~/column-builder.ts';\nimport { ColumnBuilder } from '~/column-builder.ts';\nimport { Column } from '~/column.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport type { ForeignKey, UpdateDeleteAction } from '~/sqlite-core/foreign-keys.ts';\nimport { ForeignKeyBuilder } from '~/sqlite-core/foreign-keys.ts';\nimport type { AnySQLiteTable, SQLiteTable } from '~/sqlite-core/table.ts';\nimport type { Update } from '~/utils.ts';\nimport { uniqueKeyName } from '../unique-constraint.ts';\n\nexport interface ReferenceConfig {\n\tref: () => SQLiteColumn;\n\tactions: {\n\t\tonUpdate?: UpdateDeleteAction;\n\t\tonDelete?: UpdateDeleteAction;\n\t};\n}\n\nexport interface SQLiteColumnBuilderBase<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTypeConfig extends object = object,\n> extends ColumnBuilderBase<T, TTypeConfig & { dialect: 'sqlite' }> {}\n\nexport interface SQLiteGeneratedColumnConfig {\n\tmode?: 'virtual' | 'stored';\n}\n\nexport abstract class SQLiteColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n\tTTypeConfig extends object = object,\n\tTExtraConfig extends ColumnBuilderExtraConfig = object,\n> extends ColumnBuilder<T, TRuntimeConfig, TTypeConfig & { dialect: 'sqlite' }, TExtraConfig>\n\timplements SQLiteColumnBuilderBase<T, TTypeConfig>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteColumnBuilder';\n\n\tprivate foreignKeyConfigs: ReferenceConfig[] = [];\n\n\treferences(\n\t\tref: ReferenceConfig['ref'],\n\t\tactions: ReferenceConfig['actions'] = {},\n\t): this {\n\t\tthis.foreignKeyConfigs.push({ ref, actions });\n\t\treturn this;\n\t}\n\n\tunique(\n\t\tname?: string,\n\t): this {\n\t\tthis.config.isUnique = true;\n\t\tthis.config.uniqueName = name;\n\t\treturn this;\n\t}\n\n\tgeneratedAlwaysAs(as: SQL | T['data'] | (() => SQL), config?: SQLiteGeneratedColumnConfig): HasGenerated<this, {\n\t\ttype: 'always';\n\t}> {\n\t\tthis.config.generated = {\n\t\t\tas,\n\t\t\ttype: 'always',\n\t\t\tmode: config?.mode ?? 'virtual',\n\t\t};\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tbuildForeignKeys(column: SQLiteColumn, table: SQLiteTable): ForeignKey[] {\n\t\treturn this.foreignKeyConfigs.map(({ ref, actions }) => {\n\t\t\treturn ((ref, actions) => {\n\t\t\t\tconst builder = new ForeignKeyBuilder(() => {\n\t\t\t\t\tconst foreignColumn = ref();\n\t\t\t\t\treturn { columns: [column], foreignColumns: [foreignColumn] };\n\t\t\t\t});\n\t\t\t\tif (actions.onUpdate) {\n\t\t\t\t\tbuilder.onUpdate(actions.onUpdate);\n\t\t\t\t}\n\t\t\t\tif (actions.onDelete) {\n\t\t\t\t\tbuilder.onDelete(actions.onDelete);\n\t\t\t\t}\n\t\t\t\treturn builder.build(table);\n\t\t\t})(ref, actions);\n\t\t});\n\t}\n\n\t/** @internal */\n\tabstract build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteColumn<MakeColumnConfig<T, TTableName>>;\n}\n\n// To understand how to use `SQLiteColumn` and `AnySQLiteColumn`, see `Column` and `AnyColumn` documentation.\nexport abstract class SQLiteColumn<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = {},\n\tTTypeConfig extends object = {},\n> extends Column<T, TRuntimeConfig, TTypeConfig & { dialect: 'sqlite' }> {\n\tstatic override readonly [entityKind]: string = 'SQLiteColumn';\n\n\tconstructor(\n\t\toverride readonly table: SQLiteTable,\n\t\tconfig: ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>,\n\t) {\n\t\tif (!config.uniqueName) {\n\t\t\tconfig.uniqueName = uniqueKeyName(table, [config.name]);\n\t\t}\n\t\tsuper(table, config);\n\t}\n}\n\nexport type AnySQLiteColumn<TPartial extends Partial<ColumnBaseConfig<ColumnDataType, string>> = {}> = SQLiteColumn<\n\tRequired<Update<ColumnBaseConfig<ColumnDataType, string>, TPartial>>\n>;\n","import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnySQLiteTable } from '~/sqlite-core/table.ts';\nimport { type Equal, getColumnNameAndConfig, textDecoder } from '~/utils.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\ntype BlobMode = 'buffer' | 'json' | 'bigint';\n\nexport type SQLiteBigIntBuilderInitial<TName extends string> = SQLiteBigIntBuilder<{\n\tname: TName;\n\tdataType: 'bigint';\n\tcolumnType: 'SQLiteBigInt';\n\tdata: bigint;\n\tdriverParam: Buffer;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteBigIntBuilder<T extends ColumnBuilderBaseConfig<'bigint', 'SQLiteBigInt'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBigIntBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'bigint', 'SQLiteBigInt');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBigInt<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteBigInt<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any>);\n\t}\n}\n\nexport class SQLiteBigInt<T extends ColumnBaseConfig<'bigint', 'SQLiteBigInt'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBigInt';\n\n\tgetSQLType(): string {\n\t\treturn 'blob';\n\t}\n\n\toverride mapFromDriverValue(value: Buffer | Uint8Array | ArrayBuffer): bigint {\n\t\tif (typeof Buffer !== 'undefined' && Buffer.from) {\n\t\t\tconst buf = Buffer.isBuffer(value)\n\t\t\t\t? value\n\t\t\t\t// eslint-disable-next-line no-instanceof/no-instanceof\n\t\t\t\t: value instanceof ArrayBuffer\n\t\t\t\t? Buffer.from(value)\n\t\t\t\t: value.buffer\n\t\t\t\t? Buffer.from(value.buffer, value.byteOffset, value.byteLength)\n\t\t\t\t: Buffer.from(value);\n\t\t\treturn BigInt(buf.toString('utf8'));\n\t\t}\n\n\t\treturn BigInt(textDecoder!.decode(value));\n\t}\n\n\toverride mapToDriverValue(value: bigint): Buffer {\n\t\treturn Buffer.from(value.toString());\n\t}\n}\n\nexport type SQLiteBlobJsonBuilderInitial<TName extends string> = SQLiteBlobJsonBuilder<{\n\tname: TName;\n\tdataType: 'json';\n\tcolumnType: 'SQLiteBlobJson';\n\tdata: unknown;\n\tdriverParam: Buffer;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteBlobJsonBuilder<T extends ColumnBuilderBaseConfig<'json', 'SQLiteBlobJson'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBlobJsonBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'json', 'SQLiteBlobJson');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBlobJson<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteBlobJson<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteBlobJson<T extends ColumnBaseConfig<'json', 'SQLiteBlobJson'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBlobJson';\n\n\tgetSQLType(): string {\n\t\treturn 'blob';\n\t}\n\n\toverride mapFromDriverValue(value: Buffer | Uint8Array | ArrayBuffer): T['data'] {\n\t\tif (typeof Buffer !== 'undefined' && Buffer.from) {\n\t\t\tconst buf = Buffer.isBuffer(value)\n\t\t\t\t? value\n\t\t\t\t// eslint-disable-next-line no-instanceof/no-instanceof\n\t\t\t\t: value instanceof ArrayBuffer\n\t\t\t\t? Buffer.from(value)\n\t\t\t\t: value.buffer\n\t\t\t\t? Buffer.from(value.buffer, value.byteOffset, value.byteLength)\n\t\t\t\t: Buffer.from(value);\n\t\t\treturn JSON.parse(buf.toString('utf8'));\n\t\t}\n\n\t\treturn JSON.parse(textDecoder!.decode(value));\n\t}\n\n\toverride mapToDriverValue(value: T['data']): Buffer {\n\t\treturn Buffer.from(JSON.stringify(value));\n\t}\n}\n\nexport type SQLiteBlobBufferBuilderInitial<TName extends string> = SQLiteBlobBufferBuilder<{\n\tname: TName;\n\tdataType: 'buffer';\n\tcolumnType: 'SQLiteBlobBuffer';\n\tdata: Buffer;\n\tdriverParam: Buffer;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteBlobBufferBuilder<T extends ColumnBuilderBaseConfig<'buffer', 'SQLiteBlobBuffer'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBlobBufferBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'buffer', 'SQLiteBlobBuffer');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBlobBuffer<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteBlobBuffer<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any>);\n\t}\n}\n\nexport class SQLiteBlobBuffer<T extends ColumnBaseConfig<'buffer', 'SQLiteBlobBuffer'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBlobBuffer';\n\n\toverride mapFromDriverValue(value: Buffer | Uint8Array | ArrayBuffer): T['data'] {\n\t\tif (Buffer.isBuffer(value)) {\n\t\t\treturn value;\n\t\t}\n\n\t\treturn Buffer.from(value as Uint8Array);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn 'blob';\n\t}\n}\n\nexport interface BlobConfig<TMode extends BlobMode = BlobMode> {\n\tmode: TMode;\n}\n\n/**\n * It's recommended to use `text('...', { mode: 'json' })` instead of `blob` in JSON mode, because it supports JSON functions:\n * >All JSON functions currently throw an error if any of their arguments are BLOBs because BLOBs are reserved for a future enhancement in which BLOBs will store the binary encoding for JSON.\n *\n * https://www.sqlite.org/json1.html\n */\nexport function blob(): SQLiteBlobJsonBuilderInitial<''>;\nexport function blob<TMode extends BlobMode = BlobMode>(\n\tconfig?: BlobConfig<TMode>,\n): Equal<TMode, 'bigint'> extends true ? SQLiteBigIntBuilderInitial<''>\n\t: Equal<TMode, 'buffer'> extends true ? SQLiteBlobBufferBuilderInitial<''>\n\t: SQLiteBlobJsonBuilderInitial<''>;\nexport function blob<TName extends string, TMode extends BlobMode = BlobMode>(\n\tname: TName,\n\tconfig?: BlobConfig<TMode>,\n): Equal<TMode, 'bigint'> extends true ? SQLiteBigIntBuilderInitial<TName>\n\t: Equal<TMode, 'buffer'> extends true ? SQLiteBlobBufferBuilderInitial<TName>\n\t: SQLiteBlobJsonBuilderInitial<TName>;\nexport function blob(a?: string | BlobConfig, b?: BlobConfig) {\n\tconst { name, config } = getColumnNameAndConfig<BlobConfig | undefined>(a, b);\n\tif (config?.mode === 'json') {\n\t\treturn new SQLiteBlobJsonBuilder(name);\n\t}\n\tif (config?.mode === 'bigint') {\n\t\treturn new SQLiteBigIntBuilder(name);\n\t}\n\treturn new SQLiteBlobBufferBuilder(name);\n}\n","import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport type { AnySQLiteTable } from '~/sqlite-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport type ConvertCustomConfig<TName extends string, T extends Partial<CustomTypeValues>> =\n\t& {\n\t\tname: TName;\n\t\tdataType: 'custom';\n\t\tcolumnType: 'SQLiteCustomColumn';\n\t\tdata: T['data'];\n\t\tdriverParam: T['driverData'];\n\t\tenumValues: undefined;\n\t}\n\t& (T['notNull'] extends true ? { notNull: true } : {})\n\t& (T['default'] extends true ? { hasDefault: true } : {});\n\nexport interface SQLiteCustomColumnInnerConfig {\n\tcustomTypeValues: CustomTypeValues;\n}\n\nexport class SQLiteCustomColumnBuilder<T extends ColumnBuilderBaseConfig<'custom', 'SQLiteCustomColumn'>>\n\textends SQLiteColumnBuilder<\n\t\tT,\n\t\t{\n\t\t\tfieldConfig: CustomTypeValues['config'];\n\t\t\tcustomTypeParams: CustomTypeParams<any>;\n\t\t},\n\t\t{\n\t\t\tsqliteColumnBuilderBrand: 'SQLiteCustomColumnBuilderBrand';\n\t\t}\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteCustomColumnBuilder';\n\n\tconstructor(\n\t\tname: T['name'],\n\t\tfieldConfig: CustomTypeValues['config'],\n\t\tcustomTypeParams: CustomTypeParams<any>,\n\t) {\n\t\tsuper(name, 'custom', 'SQLiteCustomColumn');\n\t\tthis.config.fieldConfig = fieldConfig;\n\t\tthis.config.customTypeParams = customTypeParams;\n\t}\n\n\t/** @internal */\n\tbuild<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteCustomColumn<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteCustomColumn<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteCustomColumn<T extends ColumnBaseConfig<'custom', 'SQLiteCustomColumn'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteCustomColumn';\n\n\tprivate sqlName: string;\n\tprivate mapTo?: (value: T['data']) => T['driverParam'];\n\tprivate mapFrom?: (value: T['driverParam']) => T['data'];\n\n\tconstructor(\n\t\ttable: AnySQLiteTable<{ name: T['tableName'] }>,\n\t\tconfig: SQLiteCustomColumnBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config);\n\t\tthis.sqlName = config.customTypeParams.dataType(config.fieldConfig);\n\t\tthis.mapTo = config.customTypeParams.toDriver;\n\t\tthis.mapFrom = config.customTypeParams.fromDriver;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn this.sqlName;\n\t}\n\n\toverride mapFromDriverValue(value: T['driverParam']): T['data'] {\n\t\treturn typeof this.mapFrom === 'function' ? this.mapFrom(value) : value as T['data'];\n\t}\n\n\toverride mapToDriverValue(value: T['data']): T['driverParam'] {\n\t\treturn typeof this.mapTo === 'function' ? this.mapTo(value) : value as T['data'];\n\t}\n}\n\nexport type CustomTypeValues = {\n\t/**\n\t * Required type for custom column, that will infer proper type model\n\t *\n\t * Examples:\n\t *\n\t * If you want your column to be `string` type after selecting/or on inserting - use `data: string`. Like `text`, `varchar`\n\t *\n\t * If you want your column to be `number` type after selecting/or on inserting - use `data: number`. Like `integer`\n\t */\n\tdata: unknown;\n\n\t/**\n\t * Type helper, that represents what type database driver is accepting for specific database data type\n\t */\n\tdriverData?: unknown;\n\n\t/**\n\t * What config type should be used for {@link CustomTypeParams} `dataType` generation\n\t */\n\tconfig?: Record<string, any>;\n\n\t/**\n\t * Whether the config argument should be required or not\n\t * @default false\n\t */\n\tconfigRequired?: boolean;\n\n\t/**\n\t * If your custom data type should be notNull by default you can use `notNull: true`\n\t *\n\t * @example\n\t * const customSerial = customType<{ data: number, notNull: true, default: true }>({\n\t * \t dataType() {\n\t * \t return 'serial';\n\t * },\n\t * });\n\t */\n\tnotNull?: boolean;\n\n\t/**\n\t * If your custom data type has default you can use `default: true`\n\t *\n\t * @example\n\t * const customSerial = customType<{ data: number, notNull: true, default: true }>({\n\t * \t dataType() {\n\t * \t return 'serial';\n\t * },\n\t * });\n\t */\n\tdefault?: boolean;\n};\n\nexport interface CustomTypeParams<T extends CustomTypeValues> {\n\t/**\n\t * Database data type string representation, that is used for migrations\n\t * @example\n\t * ```\n\t * `jsonb`, `text`\n\t * ```\n\t *\n\t * If database data type needs additional params you can use them from `config` param\n\t * @example\n\t * ```\n\t * `varchar(256)`, `numeric(2,3)`\n\t * ```\n\t *\n\t * To make `config` be of specific type please use config generic in {@link CustomTypeValues}\n\t *\n\t * @example\n\t * Usage example\n\t * ```\n\t * dataType() {\n\t * return 'boolean';\n\t * },\n\t * ```\n\t * Or\n\t * ```\n\t * dataType(config) {\n\t * \t return typeof config.length !== 'undefined' ? `varchar(${config.length})` : `varchar`;\n\t * \t }\n\t * ```\n\t */\n\tdataType: (config: T['config'] | (Equal<T['configRequired'], true> extends true ? never : undefined)) => string;\n\n\t/**\n\t * Optional mapping function, between user input and driver\n\t * @example\n\t * For example, when using jsonb we need to map JS/TS object to string before writing to database\n\t * ```\n\t * toDriver(value: TData): string {\n\t * \t return JSON.stringify(value);\n\t * }\n\t * ```\n\t */\n\ttoDriver?: (value: T['data']) => T['driverData'] | SQL;\n\n\t/**\n\t * Optional mapping function, that is responsible for data mapping from database to JS/TS code\n\t * @example\n\t * For example, when using timestamp we need to map string Date representation to JS Date\n\t * ```\n\t * fromDriver(value: string): Date {\n\t * \treturn new Date(value);\n\t * },\n\t * ```\n\t */\n\tfromDriver?: (value: T['driverData']) => T['data'];\n}\n\n/**\n * Custom sqlite database data type generator\n */\nexport function customType<T extends CustomTypeValues = CustomTypeValues>(\n\tcustomTypeParams: CustomTypeParams<T>,\n): Equal<T['configRequired'], true> extends true ? {\n\t\t<TConfig extends Record<string, any> & T['config']>(\n\t\t\tfieldConfig: TConfig,\n\t\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<'', T>>;\n\t\t<TName extends string>(\n\t\t\tdbName: TName,\n\t\t\tfieldConfig: T['config'],\n\t\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<TName, T>>;\n\t}\n\t: {\n\t\t(): SQLiteCustomColumnBuilder<ConvertCustomConfig<'', T>>;\n\t\t<TConfig extends Record<string, any> & T['config']>(\n\t\t\tfieldConfig?: TConfig,\n\t\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<'', T>>;\n\t\t<TName extends string>(\n\t\t\tdbName: TName,\n\t\t\tfieldConfig?: T['config'],\n\t\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<TName, T>>;\n\t}\n{\n\treturn <TName extends string>(\n\t\ta?: TName | T['config'],\n\t\tb?: T['config'],\n\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<TName, T>> => {\n\t\tconst { name, config } = getColumnNameAndConfig<T['config']>(a, b);\n\t\treturn new SQLiteCustomColumnBuilder(\n\t\t\tname as ConvertCustomConfig<TName, T>['name'],\n\t\t\tconfig,\n\t\t\tcustomTypeParams,\n\t\t);\n\t};\n}\n","import type {\n\tColumnBuilderBaseConfig,\n\tColumnBuilderRuntimeConfig,\n\tColumnDataType,\n\tHasDefault,\n\tIsPrimaryKey,\n\tMakeColumnConfig,\n\tNotNull,\n} from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport { sql } from '~/sql/sql.ts';\nimport type { OnConflict } from '~/sqlite-core/utils.ts';\nimport { type Equal, getColumnNameAndConfig, type Or } from '~/utils.ts';\nimport type { AnySQLiteTable } from '../table.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport interface PrimaryKeyConfig {\n\tautoIncrement?: boolean;\n\tonConflict?: OnConflict;\n}\n\nexport abstract class SQLiteBaseIntegerBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n> extends SQLiteColumnBuilder<\n\tT,\n\tTRuntimeConfig & { autoIncrement: boolean },\n\t{},\n\t{ primaryKeyHasDefault: true }\n> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBaseIntegerBuilder';\n\n\tconstructor(name: T['name'], dataType: T['dataType'], columnType: T['columnType']) {\n\t\tsuper(name, dataType, columnType);\n\t\tthis.config.autoIncrement = false;\n\t}\n\n\toverride primaryKey(config?: PrimaryKeyConfig): IsPrimaryKey<HasDefault<NotNull<this>>> {\n\t\tif (config?.autoIncrement) {\n\t\t\tthis.config.autoIncrement = true;\n\t\t}\n\t\tthis.config.hasDefault = true;\n\t\treturn super.primaryKey() as IsPrimaryKey<HasDefault<NotNull<this>>>;\n\t}\n\n\t/** @internal */\n\tabstract override build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBaseInteger<MakeColumnConfig<T, TTableName>>;\n}\n\nexport abstract class SQLiteBaseInteger<\n\tT extends ColumnBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n> extends SQLiteColumn<T, TRuntimeConfig & { autoIncrement: boolean }> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBaseInteger';\n\n\treadonly autoIncrement: boolean = this.config.autoIncrement;\n\n\tgetSQLType(): string {\n\t\treturn 'integer';\n\t}\n}\n\nexport type SQLiteIntegerBuilderInitial<TName extends string> = SQLiteIntegerBuilder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'SQLiteInteger';\n\tdata: number;\n\tdriverParam: number;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteIntegerBuilder<T extends ColumnBuilderBaseConfig<'number', 'SQLiteInteger'>>\n\textends SQLiteBaseIntegerBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteIntegerBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'number', 'SQLiteInteger');\n\t}\n\n\tbuild<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteInteger<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteInteger<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteInteger<T extends ColumnBaseConfig<'number', 'SQLiteInteger'>> extends SQLiteBaseInteger<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteInteger';\n}\n\nexport type SQLiteTimestampBuilderInitial<TName extends string> = SQLiteTimestampBuilder<{\n\tname: TName;\n\tdataType: 'date';\n\tcolumnType: 'SQLiteTimestamp';\n\tdata: Date;\n\tdriverParam: number;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteTimestampBuilder<T extends ColumnBuilderBaseConfig<'date', 'SQLiteTimestamp'>>\n\textends SQLiteBaseIntegerBuilder<T, { mode: 'timestamp' | 'timestamp_ms' }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteTimestampBuilder';\n\n\tconstructor(name: T['name'], mode: 'timestamp' | 'timestamp_ms') {\n\t\tsuper(name, 'date', 'SQLiteTimestamp');\n\t\tthis.config.mode = mode;\n\t}\n\n\t/**\n\t * @deprecated Use `default()` with your own expression instead.\n\t *\n\t * Adds `DEFAULT (cast((julianday('now') - 2440587.5)*86400000 as integer))` to the column, which is the current epoch timestamp in milliseconds.\n\t */\n\tdefaultNow(): HasDefault<this> {\n\t\treturn this.default(sql`(cast((julianday('now') - 2440587.5)*86400000 as integer))`) as any;\n\t}\n\n\tbuild<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteTimestamp<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteTimestamp<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteTimestamp<T extends ColumnBaseConfig<'date', 'SQLiteTimestamp'>>\n\textends SQLiteBaseInteger<T, { mode: 'timestamp' | 'timestamp_ms' }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteTimestamp';\n\n\treadonly mode: 'timestamp' | 'timestamp_ms' = this.config.mode;\n\n\toverride mapFromDriverValue(value: number): Date {\n\t\tif (this.config.mode === 'timestamp') {\n\t\t\treturn new Date(value * 1000);\n\t\t}\n\t\treturn new Date(value);\n\t}\n\n\toverride mapToDriverValue(value: Date): number {\n\t\tconst unix = value.getTime();\n\t\tif (this.config.mode === 'timestamp') {\n\t\t\treturn Math.floor(unix / 1000);\n\t\t}\n\t\treturn unix;\n\t}\n}\n\nexport type SQLiteBooleanBuilderInitial<TName extends string> = SQLiteBooleanBuilder<{\n\tname: TName;\n\tdataType: 'boolean';\n\tcolumnType: 'SQLiteBoolean';\n\tdata: boolean;\n\tdriverParam: number;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteBooleanBuilder<T extends ColumnBuilderBaseConfig<'boolean', 'SQLiteBoolean'>>\n\textends SQLiteBaseIntegerBuilder<T, { mode: 'boolean' }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBooleanBuilder';\n\n\tconstructor(name: T['name'], mode: 'boolean') {\n\t\tsuper(name, 'boolean', 'SQLiteBoolean');\n\t\tthis.config.mode = mode;\n\t}\n\n\tbuild<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBoolean<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteBoolean<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteBoolean<T extends ColumnBaseConfig<'boolean', 'SQLiteBoolean'>>\n\textends SQLiteBaseInteger<T, { mode: 'boolean' }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBoolean';\n\n\treadonly mode: 'boolean' = this.config.mode;\n\n\toverride mapFromDriverValue(value: number): boolean {\n\t\treturn Number(value) === 1;\n\t}\n\n\toverride mapToDriverValue(value: boolean): number {\n\t\treturn value ? 1 : 0;\n\t}\n}\n\nexport interface IntegerConfig<\n\tTMode extends 'number' | 'timestamp' | 'timestamp_ms' | 'boolean' =\n\t\t| 'number'\n\t\t| 'timestamp'\n\t\t| 'timestamp_ms'\n\t\t| 'boolean',\n> {\n\tmode: TMode;\n}\n\nexport function integer(): SQLiteIntegerBuilderInitial<''>;\nexport function integer<TMode extends IntegerConfig['mode']>(\n\tconfig?: IntegerConfig<TMode>,\n): Or<Equal<TMode, 'timestamp'>, Equal<TMode, 'timestamp_ms'>> extends true ? SQLiteTimestampBuilderInitial<''>\n\t: Equal<TMode, 'boolean'> extends true ? SQLiteBooleanBuilderInitial<''>\n\t: SQLiteIntegerBuilderInitial<''>;\nexport function integer<TName extends string, TMode extends IntegerConfig['mode']>(\n\tname: TName,\n\tconfig?: IntegerConfig<TMode>,\n): Or<Equal<TMode, 'timestamp'>, Equal<TMode, 'timestamp_ms'>> extends true ? SQLiteTimestampBuilderInitial<TName>\n\t: Equal<TMode, 'boolean'> extends true ? SQLiteBooleanBuilderInitial<TName>\n\t: SQLiteIntegerBuilderInitial<TName>;\nexport function integer(a?: string | IntegerConfig, b?: IntegerConfig) {\n\tconst { name, config } = getColumnNameAndConfig<IntegerConfig | undefined>(a, b);\n\tif (config?.mode === 'timestamp' || config?.mode === 'timestamp_ms') {\n\t\treturn new SQLiteTimestampBuilder(name, config.mode);\n\t}\n\tif (config?.mode === 'boolean') {\n\t\treturn new SQLiteBooleanBuilder(name, config.mode);\n\t}\n\treturn new SQLiteIntegerBuilder(name);\n}\n\nexport const int = integer;\n","import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnySQLiteTable } from '~/sqlite-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport type SQLiteNumericBuilderInitial<TName extends string> = SQLiteNumericBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'SQLiteNumeric';\n\tdata: string;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteNumericBuilder<T extends ColumnBuilderBaseConfig<'string', 'SQLiteNumeric'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'string', 'SQLiteNumeric');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteNumeric<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteNumeric<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteNumeric<T extends ColumnBaseConfig<'string', 'SQLiteNumeric'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteNumeric';\n\n\toverride mapFromDriverValue(value: unknown): string {\n\t\tif (typeof value === 'string') return value;\n\n\t\treturn String(value);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn 'numeric';\n\t}\n}\n\nexport type SQLiteNumericNumberBuilderInitial<TName extends string> = SQLiteNumericNumberBuilder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'SQLiteNumericNumber';\n\tdata: number;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteNumericNumberBuilder<T extends ColumnBuilderBaseConfig<'number', 'SQLiteNumericNumber'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericNumberBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'number', 'SQLiteNumericNumber');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteNumericNumber<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteNumericNumber<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteNumericNumber<T extends ColumnBaseConfig<'number', 'SQLiteNumericNumber'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericNumber';\n\n\toverride mapFromDriverValue(value: unknown): number {\n\t\tif (typeof value === 'number') return value;\n\n\t\treturn Number(value);\n\t}\n\n\toverride mapToDriverValue = String;\n\n\tgetSQLType(): string {\n\t\treturn 'numeric';\n\t}\n}\n\nexport type SQLiteNumericBigIntBuilderInitial<TName extends string> = SQLiteNumericBigIntBuilder<{\n\tname: TName;\n\tdataType: 'bigint';\n\tcolumnType: 'SQLiteNumericBigInt';\n\tdata: bigint;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteNumericBigIntBuilder<T extends ColumnBuilderBaseConfig<'bigint', 'SQLiteNumericBigInt'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericBigIntBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'bigint', 'SQLiteNumericBigInt');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteNumericBigInt<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteNumericBigInt<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteNumericBigInt<T extends ColumnBaseConfig<'bigint', 'SQLiteNumericBigInt'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericBigInt';\n\n\toverride mapFromDriverValue = BigInt;\n\n\toverride mapToDriverValue = String;\n\n\tgetSQLType(): string {\n\t\treturn 'numeric';\n\t}\n}\n\nexport type SQLiteNumericConfig<T extends 'string' | 'number' | 'bigint' = 'string' | 'number' | 'bigint'> = {\n\tmode: T;\n};\n\nexport function numeric<TMode extends SQLiteNumericConfig['mode']>(\n\tconfig?: SQLiteNumericConfig<TMode>,\n): Equal<TMode, 'number'> extends true ? SQLiteNumericNumberBuilderInitial<''>\n\t: Equal<TMode, 'bigint'> extends true ? SQLiteNumericBigIntBuilderInitial<''>\n\t: SQLiteNumericBuilderInitial<''>;\nexport function numeric<TName extends string, TMode extends SQLiteNumericConfig['mode']>(\n\tname: TName,\n\tconfig?: SQLiteNumericConfig<TMode>,\n): Equal<TMode, 'number'> extends true ? SQLiteNumericNumberBuilderInitial<TName>\n\t: Equal<TMode, 'bigint'> extends true ? SQLiteNumericBigIntBuilderInitial<TName>\n\t: SQLiteNumericBuilderInitial<TName>;\nexport function numeric(a?: string | SQLiteNumericConfig, b?: SQLiteNumericConfig) {\n\tconst { name, config } = getColumnNameAndConfig<SQLiteNumericConfig>(a, b);\n\tconst mode = config?.mode;\n\treturn mode === 'number'\n\t\t? new SQLiteNumericNumberBuilder(name)\n\t\t: mode === 'bigint'\n\t\t? new SQLiteNumericBigIntBuilder(name)\n\t\t: new SQLiteNumericBuilder(name);\n}\n","import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnySQLiteTable } from '../table.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport type SQLiteRealBuilderInitial<TName extends string> = SQLiteRealBuilder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'SQLiteReal';\n\tdata: number;\n\tdriverParam: number;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteRealBuilder<T extends ColumnBuilderBaseConfig<'number', 'SQLiteReal'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteRealBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'number', 'SQLiteReal');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteReal<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteReal<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class SQLiteReal<T extends ColumnBaseConfig<'number', 'SQLiteReal'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteReal';\n\n\tgetSQLType(): string {\n\t\treturn 'real';\n\t}\n}\n\nexport function real(): SQLiteRealBuilderInitial<''>;\nexport function real<TName extends string>(name: TName): SQLiteRealBuilderInitial<TName>;\nexport function real(name?: string) {\n\treturn new SQLiteRealBuilder(name ?? '');\n}\n","import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnySQLiteTable } from '~/sqlite-core/table.ts';\nimport { type Equal, getColumnNameAndConfig, type Writable } from '~/utils.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport type SQLiteTextBuilderInitial<\n\tTName extends string,\n\tTEnum extends [string, ...string[]],\n\tTLength extends number | undefined,\n> = SQLiteTextBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'SQLiteText';\n\tdata: TEnum[number];\n\tdriverParam: string;\n\tenumValues: TEnum;\n\tlength: TLength;\n}>;\n\nexport class SQLiteTextBuilder<\n\tT extends ColumnBuilderBaseConfig<'string', 'SQLiteText'> & { length?: number | undefined },\n> extends SQLiteColumnBuilder<\n\tT,\n\t{ length: T['length']; enumValues: T['enumValues'] },\n\t{ length: T['length'] }\n> {\n\tstatic override readonly [entityKind]: string = 'SQLiteTextBuilder';\n\n\tconstructor(name: T['name'], config: SQLiteTextConfig<'text', T['enumValues'], T['length']>) {\n\t\tsuper(name, 'string', 'SQLiteText');\n\t\tthis.config.enumValues = config.enum;\n\t\tthis.config.length = config.length;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteText<MakeColumnConfig<T, TTableName> & { length: T['length'] }> {\n\t\treturn new SQLiteText<MakeColumnConfig<T, TTableName> & { length: T['length'] }>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteText<T extends ColumnBaseConfig<'string', 'SQLiteText'> & { length?: number | undefined }>\n\textends SQLiteColumn<T, { length: T['length']; enumValues: T['enumValues'] }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteText';\n\n\toverride readonly enumValues = this.config.enumValues;\n\n\treadonly length: T['length'] = this.config.length;\n\n\tconstructor(\n\t\ttable: AnySQLiteTable<{ name: T['tableName'] }>,\n\t\tconfig: SQLiteTextBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn `text${this.config.length ? `(${this.config.length})` : ''}`;\n\t}\n}\n\nexport type SQLiteTextJsonBuilderInitial<TName extends string> = SQLiteTextJsonBuilder<{\n\tname: TName;\n\tdataType: 'json';\n\tcolumnType: 'SQLiteTextJson';\n\tdata: unknown;\n\tdriverParam: string;\n\tenumValues: undefined;\n\tgenerated: undefined;\n}>;\n\nexport class SQLiteTextJsonBuilder<T extends ColumnBuilderBaseConfig<'json', 'SQLiteTextJson'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteTextJsonBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'json', 'SQLiteTextJson');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteTextJson<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteTextJson<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteTextJson<T extends ColumnBaseConfig<'json', 'SQLiteTextJson'>>\n\textends SQLiteColumn<T, { length: number | undefined; enumValues: T['enumValues'] }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteTextJson';\n\n\tgetSQLType(): string {\n\t\treturn 'text';\n\t}\n\n\toverride mapFromDriverValue(value: string): T['data'] {\n\t\treturn JSON.parse(value);\n\t}\n\n\toverride mapToDriverValue(value: T['data']): string {\n\t\treturn JSON.stringify(value);\n\t}\n}\n\nexport type SQLiteTextConfig<\n\tTMode extends 'text' | 'json' = 'text' | 'json',\n\tTEnum extends readonly string[] | string[] | undefined = readonly string[] | string[] | undefined,\n\tTLength extends number | undefined = number | undefined,\n> = TMode extends 'text' ? {\n\t\tmode?: TMode;\n\t\tlength?: TLength;\n\t\tenum?: TEnum;\n\t}\n\t: {\n\t\tmode?: TMode;\n\t};\n\nexport function text(): SQLiteTextBuilderInitial<'', [string, ...string[]], undefined>;\nexport function text<\n\tU extends string,\n\tT extends Readonly<[U, ...U[]]>,\n\tL extends number | undefined,\n\tTMode extends 'text' | 'json' = 'text' | 'json',\n>(\n\tconfig?: SQLiteTextConfig<TMode, T | Writable<T>, L>,\n): Equal<TMode, 'json'> extends true ? SQLiteTextJsonBuilderInitial<''>\n\t: SQLiteTextBuilderInitial<'', Writable<T>, L>;\nexport function text<\n\tTName extends string,\n\tU extends string,\n\tT extends Readonly<[U, ...U[]]>,\n\tL extends number | undefined,\n\tTMode extends 'text' | 'json' = 'text' | 'json',\n>(\n\tname: TName,\n\tconfig?: SQLiteTextConfig<TMode, T | Writable<T>, L>,\n): Equal<TMode, 'json'> extends true ? SQLiteTextJsonBuilderInitial<TName>\n\t: SQLiteTextBuilderInitial<TName, Writable<T>, L>;\nexport function text(a?: string | SQLiteTextConfig, b: SQLiteTextConfig = {}): any {\n\tconst { name, config } = getColumnNameAndConfig<SQLiteTextConfig>(a, b);\n\tif (config.mode === 'json') {\n\t\treturn new SQLiteTextJsonBuilder(name);\n\t}\n\treturn new SQLiteTextBuilder(name, config as any);\n}\n","import { blob } from './blob.ts';\nimport { customType } from './custom.ts';\nimport { integer } from './integer.ts';\nimport { numeric } from './numeric.ts';\nimport { real } from './real.ts';\nimport { text } from './text.ts';\n\nexport function getSQLiteColumnBuilders() {\n\treturn {\n\t\tblob,\n\t\tcustomType,\n\t\tinteger,\n\t\tnumeric,\n\t\treal,\n\t\ttext,\n\t};\n}\n\nexport type SQLiteColumnBuilders = ReturnType<typeof getSQLiteColumnBuilders>;\n","import type { BuildColumns, BuildExtraConfigColumns } from '~/column-builder.ts';\nimport { entityKind } from '~/entity.ts';\nimport { Table, type TableConfig as TableConfigBase, type UpdateTableConfig } from '~/table.ts';\nimport type { CheckBuilder } from './checks.ts';\nimport { getSQLiteColumnBuilders, type SQLiteColumnBuilders } from './columns/all.ts';\nimport type { SQLiteColumn, SQLiteColumnBuilder, SQLiteColumnBuilderBase } from './columns/common.ts';\nimport type { ForeignKey, ForeignKeyBuilder } from './foreign-keys.ts';\nimport type { IndexBuilder } from './indexes.ts';\nimport type { PrimaryKeyBuilder } from './primary-keys.ts';\nimport type { UniqueConstraintBuilder } from './unique-constraint.ts';\n\nexport type SQLiteTableExtraConfigValue =\n\t| IndexBuilder\n\t| CheckBuilder\n\t| ForeignKeyBuilder\n\t| PrimaryKeyBuilder\n\t| UniqueConstraintBuilder;\n\nexport type SQLiteTableExtraConfig = Record<\n\tstring,\n\tSQLiteTableExtraConfigValue\n>;\n\nexport type TableConfig = TableConfigBase<SQLiteColumn<any>>;\n\n/** @internal */\nexport const InlineForeignKeys = Symbol.for('drizzle:SQLiteInlineForeignKeys');\n\nexport class SQLiteTable<T extends TableConfig = TableConfig> extends Table<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteTable';\n\n\t/** @internal */\n\tstatic override readonly Symbol = Object.assign({}, Table.Symbol, {\n\t\tInlineForeignKeys: InlineForeignKeys as typeof InlineForeignKeys,\n\t});\n\n\t/** @internal */\n\toverride [Table.Symbol.Columns]!: NonNullable<T['columns']>;\n\n\t/** @internal */\n\t[InlineForeignKeys]: ForeignKey[] = [];\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigBuilder]:\n\t\t| ((self: Record<string, SQLiteColumn>) => SQLiteTableExtraConfig)\n\t\t| undefined = undefined;\n}\n\nexport type AnySQLiteTable<TPartial extends Partial<TableConfig> = {}> = SQLiteTable<\n\tUpdateTableConfig<TableConfig, TPartial>\n>;\n\nexport type SQLiteTableWithColumns<T extends TableConfig> =\n\t& SQLiteTable<T>\n\t& {\n\t\t[Key in keyof T['columns']]: T['columns'][Key];\n\t};\n\nexport interface SQLiteTableFn<TSchema extends string | undefined = undefined> {\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig?: (\n\t\t\tself: BuildColumns<TTableName, TColumnsMap, 'sqlite'>,\n\t\t) => SQLiteTableExtraConfigValue[],\n\t): SQLiteTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>;\n\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: SQLiteColumnBuilders) => TColumnsMap,\n\t\textraConfig?: (self: BuildColumns<TTableName, TColumnsMap, 'sqlite'>) => SQLiteTableExtraConfigValue[],\n\t): SQLiteTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>;\n\t/**\n\t * @deprecated The third parameter of sqliteTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = sqliteTable(\"users\", {\n\t * \tid: int(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = sqliteTable(\"users\", {\n\t * \tid: int(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig?: (self: BuildColumns<TTableName, TColumnsMap, 'sqlite'>) => SQLiteTableExtraConfig,\n\t): SQLiteTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>;\n\n\t/**\n\t * @deprecated The third parameter of sqliteTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = sqliteTable(\"users\", {\n\t * \tid: int(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = sqliteTable(\"users\", {\n\t * \tid: int(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: SQLiteColumnBuilders) => TColumnsMap,\n\t\textraConfig?: (self: BuildColumns<TTableName, TColumnsMap, 'sqlite'>) => SQLiteTableExtraConfig,\n\t): SQLiteTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>;\n}\n\nfunction sqliteTableBase<\n\tTTableName extends string,\n\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\tTSchema extends string | undefined,\n>(\n\tname: TTableName,\n\tcolumns: TColumnsMap | ((columnTypes: SQLiteColumnBuilders) => TColumnsMap),\n\textraConfig:\n\t\t| ((\n\t\t\tself: BuildColumns<TTableName, TColumnsMap, 'sqlite'>,\n\t\t) => SQLiteTableExtraConfig | SQLiteTableExtraConfigValue[])\n\t\t| undefined,\n\tschema?: TSchema,\n\tbaseName = name,\n): SQLiteTableWithColumns<{\n\tname: TTableName;\n\tschema: TSchema;\n\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\tdialect: 'sqlite';\n}> {\n\tconst rawTable = new SQLiteTable<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>(name, schema, baseName);\n\n\tconst parsedColumns: TColumnsMap = typeof columns === 'function' ? columns(getSQLiteColumnBuilders()) : columns;\n\n\tconst builtColumns = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as SQLiteColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.build(rawTable);\n\t\t\trawTable[InlineForeignKeys].push(...colBuilder.buildForeignKeys(column, rawTable));\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\n\tconst table = Object.assign(rawTable, builtColumns);\n\n\ttable[Table.Symbol.Columns] = builtColumns;\n\ttable[Table.Symbol.ExtraConfigColumns] = builtColumns as unknown as BuildExtraConfigColumns<\n\t\tTTableName,\n\t\tTColumnsMap,\n\t\t'sqlite'\n\t>;\n\n\tif (extraConfig) {\n\t\ttable[SQLiteTable.Symbol.ExtraConfigBuilder] = extraConfig as (\n\t\t\tself: Record<string, SQLiteColumn>,\n\t\t) => SQLiteTableExtraConfig;\n\t}\n\n\treturn table;\n}\n\nexport const sqliteTable: SQLiteTableFn = (name, columns, extraConfig) => {\n\treturn sqliteTableBase(name, columns, extraConfig);\n};\n\nexport function sqliteTableCreator(customizeTableName: (name: string) => string): SQLiteTableFn {\n\treturn (name, columns, extraConfig) => {\n\t\treturn sqliteTableBase(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);\n\t};\n}\n","import { entityKind } from '~/entity.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport type { SQLiteColumn } from './columns/index.ts';\nimport type { SQLiteTable } from './table.ts';\n\nexport interface IndexConfig {\n\tname: string;\n\tcolumns: IndexColumn[];\n\tunique: boolean;\n\twhere: SQL | undefined;\n}\n\nexport type IndexColumn = SQLiteColumn | SQL;\n\nexport class IndexBuilderOn {\n\tstatic readonly [entityKind]: string = 'SQLiteIndexBuilderOn';\n\n\tconstructor(private name: string, private unique: boolean) {}\n\n\ton(...columns: [IndexColumn, ...IndexColumn[]]): IndexBuilder {\n\t\treturn new IndexBuilder(this.name, columns, this.unique);\n\t}\n}\n\nexport class IndexBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteIndexBuilder';\n\n\tdeclare _: {\n\t\tbrand: 'SQLiteIndexBuilder';\n\t};\n\n\t/** @internal */\n\tconfig: IndexConfig;\n\n\tconstructor(name: string, columns: IndexColumn[], unique: boolean) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tcolumns,\n\t\t\tunique,\n\t\t\twhere: undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Condition for partial index.\n\t */\n\twhere(condition: SQL): this {\n\t\tthis.config.where = condition;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: SQLiteTable): Index {\n\t\treturn new Index(this.config, table);\n\t}\n}\n\nexport class Index {\n\tstatic readonly [entityKind]: string = 'SQLiteIndex';\n\n\tdeclare _: {\n\t\tbrand: 'SQLiteIndex';\n\t};\n\n\treadonly config: IndexConfig & { table: SQLiteTable };\n\n\tconstructor(config: IndexConfig, table: SQLiteTable) {\n\t\tthis.config = { ...config, table };\n\t}\n}\n\nexport function index(name: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(name, false);\n}\n\nexport function uniqueIndex(name: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(name, true);\n}\n","import { entityKind } from '~/entity.ts';\nimport type { AnySQLiteColumn, SQLiteColumn } from './columns/index.ts';\nimport { SQLiteTable } from './table.ts';\n\nexport function primaryKey<\n\tTTableName extends string,\n\tTColumn extends AnySQLiteColumn<{ tableName: TTableName }>,\n\tTColumns extends AnySQLiteColumn<{ tableName: TTableName }>[],\n>(config: { name?: string; columns: [TColumn, ...TColumns] }): PrimaryKeyBuilder;\n/**\n * @deprecated: Please use primaryKey({ columns: [] }) instead of this function\n * @param columns\n */\nexport function primaryKey<\n\tTTableName extends string,\n\tTColumns extends AnySQLiteColumn<{ tableName: TTableName }>[],\n>(...columns: TColumns): PrimaryKeyBuilder;\nexport function primaryKey(...config: any) {\n\tif (config[0].columns) {\n\t\treturn new PrimaryKeyBuilder(config[0].columns, config[0].name);\n\t}\n\treturn new PrimaryKeyBuilder(config);\n}\nexport class PrimaryKeyBuilder {\n\tstatic readonly [entityKind]: string = 'SQLitePrimaryKeyBuilder';\n\n\tdeclare _: {\n\t\tbrand: 'SQLitePrimaryKeyBuilder';\n\t};\n\n\t/** @internal */\n\tcolumns: SQLiteColumn[];\n\n\t/** @internal */\n\tname?: string;\n\n\tconstructor(\n\t\tcolumns: SQLiteColumn[],\n\t\tname?: string,\n\t) {\n\t\tthis.columns = columns;\n\t\tthis.name = name;\n\t}\n\n\t/** @internal */\n\tbuild(table: SQLiteTable): PrimaryKey {\n\t\treturn new PrimaryKey(table, this.columns, this.name);\n\t}\n}\n\nexport class PrimaryKey {\n\tstatic readonly [entityKind]: string = 'SQLitePrimaryKey';\n\n\treadonly columns: SQLiteColumn[];\n\treadonly name?: string;\n\n\tconstructor(readonly table: SQLiteTable, columns: SQLiteColumn[], name?: string) {\n\t\tthis.columns = columns;\n\t\tthis.name = name;\n\t}\n\n\tgetName(): string {\n\t\treturn this.name\n\t\t\t?? `${this.table[SQLiteTable.Symbol.Name]}_${this.columns.map((column) => column.name).join('_')}_pk`;\n\t}\n}\n","import { is } from '~/entity.ts';\nimport { SQL } from '~/sql/sql.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { Table } from '~/table.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type { Check } from './checks.ts';\nimport { CheckBuilder } from './checks.ts';\nimport type { ForeignKey } from './foreign-keys.ts';\nimport { ForeignKeyBuilder } from './foreign-keys.ts';\nimport type { Index } from './indexes.ts';\nimport { IndexBuilder } from './indexes.ts';\nimport type { PrimaryKey } from './primary-keys.ts';\nimport { PrimaryKeyBuilder } from './primary-keys.ts';\nimport { SQLiteTable } from './table.ts';\nimport { type UniqueConstraint, UniqueConstraintBuilder } from './unique-constraint.ts';\nimport type { SQLiteViewBase } from './view-base.ts';\nimport type { SQLiteView } from './view.ts';\n\nexport function getTableConfig<TTable extends SQLiteTable>(table: TTable) {\n\tconst columns = Object.values(table[SQLiteTable.Symbol.Columns]);\n\tconst indexes: Index[] = [];\n\tconst checks: Check[] = [];\n\tconst primaryKeys: PrimaryKey[] = [];\n\tconst uniqueConstraints: UniqueConstraint[] = [];\n\tconst foreignKeys: ForeignKey[] = Object.values(table[SQLiteTable.Symbol.InlineForeignKeys]);\n\tconst name = table[Table.Symbol.Name];\n\n\tconst extraConfigBuilder = table[SQLiteTable.Symbol.ExtraConfigBuilder];\n\n\tif (extraConfigBuilder !== undefined) {\n\t\tconst extraConfig = extraConfigBuilder(table[SQLiteTable.Symbol.Columns]);\n\t\tconst extraValues = Array.isArray(extraConfig) ? extraConfig.flat(1) as any[] : Object.values(extraConfig);\n\t\tfor (const builder of Object.values(extraValues)) {\n\t\t\tif (is(builder, IndexBuilder)) {\n\t\t\t\tindexes.push(builder.build(table));\n\t\t\t} else if (is(builder, CheckBuilder)) {\n\t\t\t\tchecks.push(builder.build(table));\n\t\t\t} else if (is(builder, UniqueConstraintBuilder)) {\n\t\t\t\tuniqueConstraints.push(builder.build(table));\n\t\t\t} else if (is(builder, PrimaryKeyBuilder)) {\n\t\t\t\tprimaryKeys.push(builder.build(table));\n\t\t\t} else if (is(builder, ForeignKeyBuilder)) {\n\t\t\t\tforeignKeys.push(builder.build(table));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tcolumns,\n\t\tindexes,\n\t\tforeignKeys,\n\t\tchecks,\n\t\tprimaryKeys,\n\t\tuniqueConstraints,\n\t\tname,\n\t};\n}\n\nexport function extractUsedTable(table: SQLiteTable | Subquery | SQLiteViewBase | SQL): string[] {\n\tif (is(table, SQLiteTable)) {\n\t\treturn [`${table[Table.Symbol.BaseName]}`];\n\t}\n\tif (is(table, Subquery)) {\n\t\treturn table._.usedTables ?? [];\n\t}\n\tif (is(table, SQL)) {\n\t\treturn table.usedTables ?? [];\n\t}\n\treturn [];\n}\n\nexport type OnConflict = 'rollback' | 'abort' | 'fail' | 'ignore' | 'replace';\n\nexport function getViewConfig<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n>(view: SQLiteView<TName, TExisting>) {\n\treturn {\n\t\t...view[ViewBaseConfig],\n\t\t// ...view[SQLiteViewConfig],\n\t};\n}\n","import { entityKind } from '~/entity.ts';\nimport type { SelectResultFields } from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { Placeholder, Query, SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteDialect } from '~/sqlite-core/dialect.ts';\nimport type { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport type { Subquery } from '~/subquery.ts';\nimport { Table } from '~/table.ts';\nimport { type DrizzleTypeError, orderSelectedFields, type ValueOrArray } from '~/utils.ts';\nimport type { SQLiteColumn } from '../columns/common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport type { SelectedFieldsFlat, SelectedFieldsOrdered } from './select.types.ts';\n\nexport type SQLiteDeleteWithout<\n\tT extends AnySQLiteDeleteBase,\n\tTDynamic extends boolean,\n\tK extends keyof T & string,\n> = TDynamic extends true ? T\n\t: Omit<\n\t\tSQLiteDeleteBase<\n\t\t\tT['_']['table'],\n\t\t\tT['_']['resultType'],\n\t\t\tT['_']['runResult'],\n\t\t\tT['_']['returning'],\n\t\t\tTDynamic,\n\t\t\tT['_']['excludedMethods'] | K\n\t\t>,\n\t\tT['_']['excludedMethods'] | K\n\t>;\n\nexport type SQLiteDelete<\n\tTTable extends SQLiteTable = SQLiteTable,\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = unknown,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n> = SQLiteDeleteBase<TTable, TResultType, TRunResult, TReturning, true, never>;\n\nexport interface SQLiteDeleteConfig {\n\twhere?: SQL | undefined;\n\tlimit?: number | Placeholder;\n\torderBy?: (SQLiteColumn | SQL | SQL.Aliased)[];\n\ttable: SQLiteTable;\n\treturning?: SelectedFieldsOrdered;\n\twithList?: Subquery[];\n}\n\nexport type SQLiteDeleteReturningAll<\n\tT extends AnySQLiteDeleteBase,\n\tTDynamic extends boolean,\n> = SQLiteDeleteWithout<\n\tSQLiteDeleteBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['table']['$inferSelect'],\n\t\tT['_']['dynamic'],\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteDeleteReturning<\n\tT extends AnySQLiteDeleteBase,\n\tTDynamic extends boolean,\n\tTSelectedFields extends SelectedFieldsFlat,\n> = SQLiteDeleteWithout<\n\tSQLiteDeleteBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tSelectResultFields<TSelectedFields>,\n\t\tT['_']['dynamic'],\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteDeleteExecute<T extends AnySQLiteDeleteBase> = T['_']['returning'] extends undefined\n\t? T['_']['runResult']\n\t: T['_']['returning'][];\n\nexport type SQLiteDeletePrepare<T extends AnySQLiteDeleteBase> = SQLitePreparedQuery<{\n\ttype: T['_']['resultType'];\n\trun: T['_']['runResult'];\n\tall: T['_']['returning'] extends undefined ? DrizzleTypeError<'.all() cannot be used without .returning()'>\n\t\t: T['_']['returning'][];\n\tget: T['_']['returning'] extends undefined ? DrizzleTypeError<'.get() cannot be used without .returning()'>\n\t\t: T['_']['returning'] | undefined;\n\tvalues: T['_']['returning'] extends undefined ? DrizzleTypeError<'.values() cannot be used without .returning()'>\n\t\t: any[][];\n\texecute: SQLiteDeleteExecute<T>;\n}>;\n\nexport type SQLiteDeleteDynamic<T extends AnySQLiteDeleteBase> = SQLiteDelete<\n\tT['_']['table'],\n\tT['_']['resultType'],\n\tT['_']['runResult'],\n\tT['_']['returning']\n>;\n\nexport type AnySQLiteDeleteBase = SQLiteDeleteBase<any, any, any, any, any, any>;\n\nexport interface SQLiteDeleteBase<\n\tTTable extends SQLiteTable,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n> extends\n\tQueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>,\n\tRunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>,\n\tSQLWrapper\n{\n\treadonly _: {\n\t\tdialect: 'sqlite';\n\t\treadonly table: TTable;\n\t\treadonly resultType: TResultType;\n\t\treadonly runResult: TRunResult;\n\t\treadonly returning: TReturning;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TReturning extends undefined ? TRunResult : TReturning[];\n\t};\n}\n\nexport class SQLiteDeleteBase<\n\tTTable extends SQLiteTable,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n\tTDynamic extends boolean = false,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>\n\timplements RunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteDelete';\n\n\t/** @internal */\n\tconfig: SQLiteDeleteConfig;\n\n\tconstructor(\n\t\tprivate table: TTable,\n\t\tprivate session: SQLiteSession<any, any, any, any>,\n\t\tprivate dialect: SQLiteDialect,\n\t\twithList?: Subquery[],\n\t) {\n\t\tsuper();\n\t\tthis.config = { table, withList };\n\t}\n\n\t/**\n\t * Adds a `where` clause to the query.\n\t *\n\t * Calling this method will delete only those rows that fulfill a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t *\n\t * @param where the `where` clause.\n\t *\n\t * @example\n\t * You can use conditional operators and `sql function` to filter the rows to be deleted.\n\t *\n\t * ```ts\n\t * // Delete all cars with green color\n\t * db.delete(cars).where(eq(cars.color, 'green'));\n\t * // or\n\t * db.delete(cars).where(sql`${cars.color} = 'green'`)\n\t * ```\n\t *\n\t * You can logically combine conditional operators with `and()` and `or()` operators:\n\t *\n\t * ```ts\n\t * // Delete all BMW cars with a green color\n\t * db.delete(cars).where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));\n\t *\n\t * // Delete all cars with the green or blue color\n\t * db.delete(cars).where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));\n\t * ```\n\t */\n\twhere(where: SQL | undefined): SQLiteDeleteWithout<this, TDynamic, 'where'> {\n\t\tthis.config.where = where;\n\t\treturn this as any;\n\t}\n\n\torderBy(\n\t\tbuilder: (deleteTable: TTable) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>,\n\t): SQLiteDeleteWithout<this, TDynamic, 'orderBy'>;\n\torderBy(...columns: (SQLiteColumn | SQL | SQL.Aliased)[]): SQLiteDeleteWithout<this, TDynamic, 'orderBy'>;\n\torderBy(\n\t\t...columns:\n\t\t\t| [(deleteTable: TTable) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>]\n\t\t\t| (SQLiteColumn | SQL | SQL.Aliased)[]\n\t): SQLiteDeleteWithout<this, TDynamic, 'orderBy'> {\n\t\tif (typeof columns[0] === 'function') {\n\t\t\tconst orderBy = columns[0](\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.table[Table.Symbol.Columns],\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'alias', sqlBehavior: 'sql' }),\n\t\t\t\t) as any,\n\t\t\t);\n\n\t\t\tconst orderByArray = Array.isArray(orderBy) ? orderBy : [orderBy];\n\t\t\tthis.config.orderBy = orderByArray;\n\t\t} else {\n\t\t\tconst orderByArray = columns as (SQLiteColumn | SQL | SQL.Aliased)[];\n\t\t\tthis.config.orderBy = orderByArray;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\tlimit(limit: number | Placeholder): SQLiteDeleteWithout<this, TDynamic, 'limit'> {\n\t\tthis.config.limit = limit;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `returning` clause to the query.\n\t *\n\t * Calling this method will return the specified fields of the deleted rows. If no fields are specified, all fields will be returned.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/delete#delete-with-return}\n\t *\n\t * @example\n\t * ```ts\n\t * // Delete all cars with the green color and return all fields\n\t * const deletedCars: Car[] = await db.delete(cars)\n\t * .where(eq(cars.color, 'green'))\n\t * .returning();\n\t *\n\t * // Delete all cars with the green color and return only their id and brand fields\n\t * const deletedCarsIdsAndBrands: { id: number, brand: string }[] = await db.delete(cars)\n\t * .where(eq(cars.color, 'green'))\n\t * .returning({ id: cars.id, brand: cars.brand });\n\t * ```\n\t */\n\treturning(): SQLiteDeleteReturningAll<this, TDynamic>;\n\treturning<TSelectedFields extends SelectedFieldsFlat>(\n\t\tfields: TSelectedFields,\n\t): SQLiteDeleteReturning<this, TDynamic, TSelectedFields>;\n\treturning(\n\t\tfields: SelectedFieldsFlat = this.table[SQLiteTable.Symbol.Columns],\n\t): SQLiteDeleteReturning<this, TDynamic, any> {\n\t\tthis.config.returning = orderSelectedFields<SQLiteColumn>(fields);\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildDeleteQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\t/** @internal */\n\t_prepare(isOneTimeQuery = true): SQLiteDeletePrepare<this> {\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tthis.dialect.sqlToQuery(this.getSQL()),\n\t\t\tthis.config.returning,\n\t\t\tthis.config.returning ? 'all' : 'run',\n\t\t\ttrue,\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\ttype: 'delete',\n\t\t\t\ttables: extractUsedTable(this.config.table),\n\t\t\t},\n\t\t) as SQLiteDeletePrepare<this>;\n\t}\n\n\tprepare(): SQLiteDeletePrepare<this> {\n\t\treturn this._prepare(false);\n\t}\n\n\trun: ReturnType<this['prepare']>['run'] = (placeholderValues) => {\n\t\treturn this._prepare().run(placeholderValues);\n\t};\n\n\tall: ReturnType<this['prepare']>['all'] = (placeholderValues) => {\n\t\treturn this._prepare().all(placeholderValues);\n\t};\n\n\tget: ReturnType<this['prepare']>['get'] = (placeholderValues) => {\n\t\treturn this._prepare().get(placeholderValues);\n\t};\n\n\tvalues: ReturnType<this['prepare']>['values'] = (placeholderValues) => {\n\t\treturn this._prepare().values(placeholderValues);\n\t};\n\n\toverride async execute(placeholderValues?: Record<string, unknown>): Promise<SQLiteDeleteExecute<this>> {\n\t\treturn this._prepare().execute(placeholderValues) as SQLiteDeleteExecute<this>;\n\t}\n\n\t$dynamic(): SQLiteDeleteDynamic<this> {\n\t\treturn this as any;\n\t}\n}\n","import type { Column } from '~/column.ts';\nimport { entityKind } from './entity.ts';\nimport { Table } from './table.ts';\nimport type { Casing } from './utils.ts';\n\nexport function toSnakeCase(input: string) {\n\tconst words = input\n\t\t.replace(/['\\u2019]/g, '')\n\t\t.match(/[\\da-z]+|[A-Z]+(?![a-z])|[A-Z][\\da-z]+/g) ?? [];\n\n\treturn words.map((word) => word.toLowerCase()).join('_');\n}\n\nexport function toCamelCase(input: string) {\n\tconst words = input\n\t\t.replace(/['\\u2019]/g, '')\n\t\t.match(/[\\da-z]+|[A-Z]+(?![a-z])|[A-Z][\\da-z]+/g) ?? [];\n\n\treturn words.reduce((acc, word, i) => {\n\t\tconst formattedWord = i === 0 ? word.toLowerCase() : `${word[0]!.toUpperCase()}${word.slice(1)}`;\n\t\treturn acc + formattedWord;\n\t}, '');\n}\n\nfunction noopCase(input: string) {\n\treturn input;\n}\n\nexport class CasingCache {\n\tstatic readonly [entityKind]: string = 'CasingCache';\n\n\t/** @internal */\n\tcache: Record<string, string> = {};\n\tprivate cachedTables: Record<string, true> = {};\n\tprivate convert: (input: string) => string;\n\n\tconstructor(casing?: Casing) {\n\t\tthis.convert = casing === 'snake_case'\n\t\t\t? toSnakeCase\n\t\t\t: casing === 'camelCase'\n\t\t\t? toCamelCase\n\t\t\t: noopCase;\n\t}\n\n\tgetColumnCasing(column: Column): string {\n\t\tif (!column.keyAsName) return column.name;\n\n\t\tconst schema = column.table[Table.Symbol.Schema] ?? 'public';\n\t\tconst tableName = column.table[Table.Symbol.OriginalName];\n\t\tconst key = `${schema}.${tableName}.${column.name}`;\n\n\t\tif (!this.cache[key]) {\n\t\t\tthis.cacheTable(column.table);\n\t\t}\n\t\treturn this.cache[key]!;\n\t}\n\n\tprivate cacheTable(table: Table) {\n\t\tconst schema = table[Table.Symbol.Schema] ?? 'public';\n\t\tconst tableName = table[Table.Symbol.OriginalName];\n\t\tconst tableKey = `${schema}.${tableName}`;\n\n\t\tif (!this.cachedTables[tableKey]) {\n\t\t\tfor (const column of Object.values(table[Table.Symbol.Columns])) {\n\t\t\t\tconst columnKey = `${tableKey}.${column.name}`;\n\t\t\t\tthis.cache[columnKey] = this.convert(column.name);\n\t\t\t}\n\t\t\tthis.cachedTables[tableKey] = true;\n\t\t}\n\t}\n\n\tclearCache() {\n\t\tthis.cache = {};\n\t\tthis.cachedTables = {};\n\t}\n}\n","import { entityKind } from '~/entity.ts';\n\nexport class DrizzleError extends Error {\n\tstatic readonly [entityKind]: string = 'DrizzleError';\n\n\tconstructor({ message, cause }: { message?: string; cause?: unknown }) {\n\t\tsuper(message);\n\t\tthis.name = 'DrizzleError';\n\t\tthis.cause = cause;\n\t}\n}\n\nexport class DrizzleQueryError extends Error {\n\tconstructor(\n\t\tpublic query: string,\n\t\tpublic params: any[],\n\t\tpublic override cause?: Error,\n\t) {\n\t\tsuper(`Failed query: ${query}\\nparams: ${params}`);\n\t\tError.captureStackTrace(this, DrizzleQueryError);\n\n\t\t// ES2022+: preserves original error on `.cause`\n\t\tif (cause) (this as any).cause = cause;\n\t}\n}\n\nexport class TransactionRollbackError extends DrizzleError {\n\tstatic override readonly [entityKind]: string = 'TransactionRollbackError';\n\n\tconstructor() {\n\t\tsuper({ message: 'Rollback' });\n\t}\n}\n","import { entityKind } from '~/entity.ts';\nimport type { ColumnsSelection } from '~/sql/sql.ts';\nimport { View } from '~/sql/sql.ts';\n\nexport abstract class SQLiteViewBase<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelection extends ColumnsSelection = ColumnsSelection,\n> extends View<TName, TExisting, TSelection> {\n\tstatic override readonly [entityKind]: string = 'SQLiteViewBase';\n\n\tdeclare _: View<TName, TExisting, TSelection>['_'] & {\n\t\tviewBrand: 'SQLiteView';\n\t};\n}\n","import { aliasedTable, aliasedTableColumn, mapColumnsInAliasedSQLToAlias, mapColumnsInSQLToAlias } from '~/alias.ts';\nimport { CasingCache } from '~/casing.ts';\nimport type { AnyColumn } from '~/column.ts';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { DrizzleError } from '~/errors.ts';\nimport type { MigrationConfig, MigrationMeta } from '~/migrator.ts';\nimport {\n\ttype BuildRelationalQueryResult,\n\ttype DBQueryConfig,\n\tgetOperators,\n\tgetOrderByOperators,\n\tMany,\n\tnormalizeRelation,\n\tOne,\n\ttype Relation,\n\ttype TableRelationalConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { Name, Placeholder } from '~/sql/index.ts';\nimport { and, eq } from '~/sql/index.ts';\nimport { Param, type QueryWithTypings, SQL, sql, type SQLChunk } from '~/sql/sql.ts';\nimport { SQLiteColumn } from '~/sqlite-core/columns/index.ts';\nimport type {\n\tAnySQLiteSelectQueryBuilder,\n\tSQLiteDeleteConfig,\n\tSQLiteInsertConfig,\n\tSQLiteUpdateConfig,\n} from '~/sqlite-core/query-builders/index.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { getTableName, getTableUniqueName, Table } from '~/table.ts';\nimport { type Casing, orderSelectedFields, type UpdateSet } from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type {\n\tSelectedFieldsOrdered,\n\tSQLiteSelectConfig,\n\tSQLiteSelectJoinConfig,\n} from './query-builders/select.types.ts';\nimport type { SQLiteSession } from './session.ts';\nimport { SQLiteViewBase } from './view-base.ts';\n\nexport interface SQLiteDialectConfig {\n\tcasing?: Casing;\n}\n\nexport abstract class SQLiteDialect {\n\tstatic readonly [entityKind]: string = 'SQLiteDialect';\n\n\t/** @internal */\n\treadonly casing: CasingCache;\n\n\tconstructor(config?: SQLiteDialectConfig) {\n\t\tthis.casing = new CasingCache(config?.casing);\n\t}\n\n\tescapeName(name: string): string {\n\t\treturn `\"${name.replace(/\"/g, '\"\"')}\"`;\n\t}\n\n\tescapeParam(_num: number): string {\n\t\treturn '?';\n\t}\n\n\tescapeString(str: string): string {\n\t\treturn `'${str.replace(/'/g, \"''\")}'`;\n\t}\n\n\tprivate buildWithCTE(queries: Subquery[] | undefined): SQL | undefined {\n\t\tif (!queries?.length) return undefined;\n\n\t\tconst withSqlChunks = [sql`with `];\n\t\tfor (const [i, w] of queries.entries()) {\n\t\t\twithSqlChunks.push(sql`${sql.identifier(w._.alias)} as (${w._.sql})`);\n\t\t\tif (i < queries.length - 1) {\n\t\t\t\twithSqlChunks.push(sql`, `);\n\t\t\t}\n\t\t}\n\t\twithSqlChunks.push(sql` `);\n\t\treturn sql.join(withSqlChunks);\n\t}\n\n\tbuildDeleteQuery({\n\t\ttable,\n\t\twhere,\n\t\treturning,\n\t\twithList,\n\t\tlimit,\n\t\torderBy,\n\t}: SQLiteDeleteConfig): SQL {\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\tconst orderBySql = this.buildOrderBy(orderBy);\n\n\t\tconst limitSql = this.buildLimit(limit);\n\n\t\treturn sql`${withSql}delete from ${table}${whereSql}${returningSql}${orderBySql}${limitSql}`;\n\t}\n\n\tbuildUpdateSet(table: SQLiteTable, set: UpdateSet): SQL {\n\t\tconst tableColumns = table[Table.Symbol.Columns];\n\n\t\tconst columnNames = Object.keys(tableColumns).filter(\n\t\t\t(colName) =>\n\t\t\t\tset[colName] !== undefined\n\t\t\t\t|| tableColumns[colName]?.onUpdateFn !== undefined,\n\t\t);\n\n\t\tconst setSize = columnNames.length;\n\t\treturn sql.join(\n\t\t\tcolumnNames.flatMap((colName, i) => {\n\t\t\t\tconst col = tableColumns[colName]!;\n\n\t\t\t\tconst onUpdateFnResult = col.onUpdateFn?.();\n\t\t\t\tconst value = set[colName]\n\t\t\t\t\t?? (is(onUpdateFnResult, SQL)\n\t\t\t\t\t\t? onUpdateFnResult\n\t\t\t\t\t\t: sql.param(onUpdateFnResult, col));\n\t\t\t\tconst res = sql`${sql.identifier(this.casing.getColumnCasing(col))} = ${value}`;\n\n\t\t\t\tif (i < setSize - 1) {\n\t\t\t\t\treturn [res, sql.raw(', ')];\n\t\t\t\t}\n\t\t\t\treturn [res];\n\t\t\t}),\n\t\t);\n\t}\n\n\tbuildUpdateQuery({\n\t\ttable,\n\t\tset,\n\t\twhere,\n\t\treturning,\n\t\twithList,\n\t\tjoins,\n\t\tfrom,\n\t\tlimit,\n\t\torderBy,\n\t}: SQLiteUpdateConfig): SQL {\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst setSql = this.buildUpdateSet(table, set);\n\n\t\tconst fromSql = from && sql.join([sql.raw(' from '), this.buildFromTable(from)]);\n\n\t\tconst joinsSql = this.buildJoins(joins);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\tconst orderBySql = this.buildOrderBy(orderBy);\n\n\t\tconst limitSql = this.buildLimit(limit);\n\n\t\treturn sql`${withSql}update ${table} set ${setSql}${fromSql}${joinsSql}${whereSql}${returningSql}${orderBySql}${limitSql}`;\n\t}\n\n\t/**\n\t * Builds selection SQL with provided fields/expressions\n\t *\n\t * Examples:\n\t *\n\t * `select <selection> from`\n\t *\n\t * `insert ... returning <selection>`\n\t *\n\t * If `isSingleTable` is true, then columns won't be prefixed with table name\n\t */\n\tprivate buildSelection(\n\t\tfields: SelectedFieldsOrdered,\n\t\t{ isSingleTable = false }: { isSingleTable?: boolean } = {},\n\t): SQL {\n\t\tconst columnsLen = fields.length;\n\n\t\tconst chunks = fields.flatMap(({ field }, i) => {\n\t\t\tconst chunk: SQLChunk[] = [];\n\n\t\t\tif (is(field, SQL.Aliased) && field.isSelectionField) {\n\t\t\t\tchunk.push(sql.identifier(field.fieldAlias));\n\t\t\t} else if (is(field, SQL.Aliased) || is(field, SQL)) {\n\t\t\t\tconst query = is(field, SQL.Aliased) ? field.sql : field;\n\n\t\t\t\tif (isSingleTable) {\n\t\t\t\t\tchunk.push(\n\t\t\t\t\t\tnew SQL(\n\t\t\t\t\t\t\tquery.queryChunks.map((c) => {\n\t\t\t\t\t\t\t\tif (is(c, Column)) {\n\t\t\t\t\t\t\t\t\treturn sql.identifier(this.casing.getColumnCasing(c));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn c;\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tchunk.push(query);\n\t\t\t\t}\n\n\t\t\t\tif (is(field, SQL.Aliased)) {\n\t\t\t\t\tchunk.push(sql` as ${sql.identifier(field.fieldAlias)}`);\n\t\t\t\t}\n\t\t\t} else if (is(field, Column)) {\n\t\t\t\tconst tableName = field.table[Table.Symbol.Name];\n\t\t\t\tif (field.columnType === 'SQLiteNumericBigInt') {\n\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\tsql`cast(${sql.identifier(this.casing.getColumnCasing(field))} as text)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\tsql`cast(${sql.identifier(tableName)}.${sql.identifier(this.casing.getColumnCasing(field))} as text)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\tchunk.push(sql.identifier(this.casing.getColumnCasing(field)));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\tsql`${sql.identifier(tableName)}.${sql.identifier(this.casing.getColumnCasing(field))}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (is(field, Subquery)) {\n\t\t\t\tconst entries = Object.entries(field._.selectedFields) as [\n\t\t\t\t\tstring,\n\t\t\t\t\tSQL.Aliased | Column | SQL,\n\t\t\t\t][];\n\n\t\t\t\tif (entries.length === 1) {\n\t\t\t\t\tconst entry = entries[0]![1];\n\n\t\t\t\t\tconst fieldDecoder = is(entry, SQL)\n\t\t\t\t\t\t? entry.decoder\n\t\t\t\t\t\t: is(entry, Column)\n\t\t\t\t\t\t? { mapFromDriverValue: (v: any) => entry.mapFromDriverValue(v) }\n\t\t\t\t\t\t: entry.sql.decoder;\n\t\t\t\t\tif (fieldDecoder) field._.sql.decoder = fieldDecoder;\n\t\t\t\t}\n\t\t\t\tchunk.push(field);\n\t\t\t}\n\n\t\t\tif (i < columnsLen - 1) {\n\t\t\t\tchunk.push(sql`, `);\n\t\t\t}\n\n\t\t\treturn chunk;\n\t\t});\n\n\t\treturn sql.join(chunks);\n\t}\n\n\tprivate buildJoins(\n\t\tjoins: SQLiteSelectJoinConfig[] | undefined,\n\t): SQL | undefined {\n\t\tif (!joins || joins.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst joinsArray: SQL[] = [];\n\n\t\tif (joins) {\n\t\t\tfor (const [index, joinMeta] of joins.entries()) {\n\t\t\t\tif (index === 0) {\n\t\t\t\t\tjoinsArray.push(sql` `);\n\t\t\t\t}\n\t\t\t\tconst table = joinMeta.table;\n\t\t\t\tconst onSql = joinMeta.on ? sql` on ${joinMeta.on}` : undefined;\n\n\t\t\t\tif (is(table, SQLiteTable)) {\n\t\t\t\t\tconst tableName = table[SQLiteTable.Symbol.Name];\n\t\t\t\t\tconst tableSchema = table[SQLiteTable.Symbol.Schema];\n\t\t\t\t\tconst origTableName = table[SQLiteTable.Symbol.OriginalName];\n\t\t\t\t\tconst alias = tableName === origTableName ? undefined : joinMeta.alias;\n\t\t\t\t\tjoinsArray.push(\n\t\t\t\t\t\tsql`${sql.raw(joinMeta.joinType)} join ${tableSchema ? sql`${sql.identifier(tableSchema)}.` : undefined}${\n\t\t\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\t\t\torigTableName,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}${alias && sql` ${sql.identifier(alias)}`}${onSql}`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tjoinsArray.push(\n\t\t\t\t\t\tsql`${sql.raw(joinMeta.joinType)} join ${table}${onSql}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (index < joins.length - 1) {\n\t\t\t\t\tjoinsArray.push(sql` `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn sql.join(joinsArray);\n\t}\n\n\tprivate buildLimit(limit: number | Placeholder | undefined): SQL | undefined {\n\t\treturn typeof limit === 'object'\n\t\t\t\t|| (typeof limit === 'number' && limit >= 0)\n\t\t\t? sql` limit ${limit}`\n\t\t\t: undefined;\n\t}\n\n\tprivate buildOrderBy(\n\t\torderBy: (SQLiteColumn | SQL | SQL.Aliased)[] | undefined,\n\t): SQL | undefined {\n\t\tconst orderByList: (SQLiteColumn | SQL | SQL.Aliased)[] = [];\n\n\t\tif (orderBy) {\n\t\t\tfor (const [index, orderByValue] of orderBy.entries()) {\n\t\t\t\torderByList.push(orderByValue);\n\n\t\t\t\tif (index < orderBy.length - 1) {\n\t\t\t\t\torderByList.push(sql`, `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn orderByList.length > 0\n\t\t\t? sql` order by ${sql.join(orderByList)}`\n\t\t\t: undefined;\n\t}\n\n\tprivate buildFromTable(\n\t\ttable: SQL | Subquery | SQLiteViewBase | SQLiteTable | undefined,\n\t): SQL | Subquery | SQLiteViewBase | SQLiteTable | undefined {\n\t\tif (is(table, Table) && table[Table.Symbol.IsAlias]) {\n\t\t\treturn sql`${sql`${sql.identifier(table[Table.Symbol.Schema] ?? '')}.`.if(table[Table.Symbol.Schema])}${\n\t\t\t\tsql.identifier(\n\t\t\t\t\ttable[Table.Symbol.OriginalName],\n\t\t\t\t)\n\t\t\t} ${sql.identifier(table[Table.Symbol.Name])}`;\n\t\t}\n\n\t\treturn table;\n\t}\n\n\tbuildSelectQuery({\n\t\twithList,\n\t\tfields,\n\t\tfieldsFlat,\n\t\twhere,\n\t\thaving,\n\t\ttable,\n\t\tjoins,\n\t\torderBy,\n\t\tgroupBy,\n\t\tlimit,\n\t\toffset,\n\t\tdistinct,\n\t\tsetOperators,\n\t}: SQLiteSelectConfig): SQL {\n\t\tconst fieldsList = fieldsFlat ?? orderSelectedFields<SQLiteColumn>(fields);\n\t\tfor (const f of fieldsList) {\n\t\t\tif (\n\t\t\t\tis(f.field, Column)\n\t\t\t\t&& getTableName(f.field.table)\n\t\t\t\t\t!== (is(table, Subquery)\n\t\t\t\t\t\t? table._.alias\n\t\t\t\t\t\t: is(table, SQLiteViewBase)\n\t\t\t\t\t\t? table[ViewBaseConfig].name\n\t\t\t\t\t\t: is(table, SQL)\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: getTableName(table))\n\t\t\t\t&& !((table) =>\n\t\t\t\t\tjoins?.some(\n\t\t\t\t\t\t({ alias }) =>\n\t\t\t\t\t\t\talias\n\t\t\t\t\t\t\t\t=== (table[Table.Symbol.IsAlias]\n\t\t\t\t\t\t\t\t\t? getTableName(table)\n\t\t\t\t\t\t\t\t\t: table[Table.Symbol.BaseName]),\n\t\t\t\t\t))(f.field.table)\n\t\t\t) {\n\t\t\t\tconst tableName = getTableName(f.field.table);\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Your \"${\n\t\t\t\t\t\tf.path.join(\n\t\t\t\t\t\t\t'->',\n\t\t\t\t\t\t)\n\t\t\t\t\t}\" field references a column \"${tableName}\".\"${f.field.name}\", but the table \"${tableName}\" is not part of the query! Did you forget to join it?`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst isSingleTable = !joins || joins.length === 0;\n\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst distinctSql = distinct ? sql` distinct` : undefined;\n\n\t\tconst selection = this.buildSelection(fieldsList, { isSingleTable });\n\n\t\tconst tableSql = this.buildFromTable(table);\n\n\t\tconst joinsSql = this.buildJoins(joins);\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\tconst havingSql = having ? sql` having ${having}` : undefined;\n\n\t\tconst groupByList: (SQL | AnyColumn | SQL.Aliased)[] = [];\n\t\tif (groupBy) {\n\t\t\tfor (const [index, groupByValue] of groupBy.entries()) {\n\t\t\t\tgroupByList.push(groupByValue);\n\n\t\t\t\tif (index < groupBy.length - 1) {\n\t\t\t\t\tgroupByList.push(sql`, `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst groupBySql = groupByList.length > 0\n\t\t\t? sql` group by ${sql.join(groupByList)}`\n\t\t\t: undefined;\n\n\t\tconst orderBySql = this.buildOrderBy(orderBy);\n\n\t\tconst limitSql = this.buildLimit(limit);\n\n\t\tconst offsetSql = offset ? sql` offset ${offset}` : undefined;\n\n\t\tconst finalQuery =\n\t\t\tsql`${withSql}select${distinctSql} ${selection} from ${tableSql}${joinsSql}${whereSql}${groupBySql}${havingSql}${orderBySql}${limitSql}${offsetSql}`;\n\n\t\tif (setOperators.length > 0) {\n\t\t\treturn this.buildSetOperations(finalQuery, setOperators);\n\t\t}\n\n\t\treturn finalQuery;\n\t}\n\n\tbuildSetOperations(\n\t\tleftSelect: SQL,\n\t\tsetOperators: SQLiteSelectConfig['setOperators'],\n\t): SQL {\n\t\tconst [setOperator, ...rest] = setOperators;\n\n\t\tif (!setOperator) {\n\t\t\tthrow new Error('Cannot pass undefined values to any set operator');\n\t\t}\n\n\t\tif (rest.length === 0) {\n\t\t\treturn this.buildSetOperationQuery({ leftSelect, setOperator });\n\t\t}\n\n\t\t// Some recursive magic here\n\t\treturn this.buildSetOperations(\n\t\t\tthis.buildSetOperationQuery({ leftSelect, setOperator }),\n\t\t\trest,\n\t\t);\n\t}\n\n\tbuildSetOperationQuery({\n\t\tleftSelect,\n\t\tsetOperator: { type, isAll, rightSelect, limit, orderBy, offset },\n\t}: {\n\t\tleftSelect: SQL;\n\t\tsetOperator: SQLiteSelectConfig['setOperators'][number];\n\t}): SQL {\n\t\t// SQLite doesn't support parenthesis in set operations\n\t\tconst leftChunk = sql`${leftSelect.getSQL()} `;\n\t\tconst rightChunk = sql`${rightSelect.getSQL()}`;\n\n\t\tlet orderBySql;\n\t\tif (orderBy && orderBy.length > 0) {\n\t\t\tconst orderByValues: (SQL<unknown> | Name)[] = [];\n\n\t\t\t// The next bit is necessary because the sql operator replaces ${table.column} with `table`.`column`\n\t\t\t// which is invalid Sql syntax, Table from one of the SELECTs cannot be used in global ORDER clause\n\t\t\tfor (const singleOrderBy of orderBy) {\n\t\t\t\tif (is(singleOrderBy, SQLiteColumn)) {\n\t\t\t\t\torderByValues.push(sql.identifier(singleOrderBy.name));\n\t\t\t\t} else if (is(singleOrderBy, SQL)) {\n\t\t\t\t\tfor (let i = 0; i < singleOrderBy.queryChunks.length; i++) {\n\t\t\t\t\t\tconst chunk = singleOrderBy.queryChunks[i];\n\n\t\t\t\t\t\tif (is(chunk, SQLiteColumn)) {\n\t\t\t\t\t\t\tsingleOrderBy.queryChunks[i] = sql.identifier(\n\t\t\t\t\t\t\t\tthis.casing.getColumnCasing(chunk),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\torderByValues.push(sql`${singleOrderBy}`);\n\t\t\t\t} else {\n\t\t\t\t\torderByValues.push(sql`${singleOrderBy}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\torderBySql = sql` order by ${sql.join(orderByValues, sql`, `)}`;\n\t\t}\n\n\t\tconst limitSql = typeof limit === 'object' || (typeof limit === 'number' && limit >= 0)\n\t\t\t? sql` limit ${limit}`\n\t\t\t: undefined;\n\n\t\tconst operatorChunk = sql.raw(`${type} ${isAll ? 'all ' : ''}`);\n\n\t\tconst offsetSql = offset ? sql` offset ${offset}` : undefined;\n\n\t\treturn sql`${leftChunk}${operatorChunk}${rightChunk}${orderBySql}${limitSql}${offsetSql}`;\n\t}\n\n\tbuildInsertQuery({\n\t\ttable,\n\t\tvalues: valuesOrSelect,\n\t\tonConflict,\n\t\treturning,\n\t\twithList,\n\t\tselect,\n\t}: SQLiteInsertConfig): SQL {\n\t\t// const isSingleValue = values.length === 1;\n\t\tconst valuesSqlList: ((SQLChunk | SQL)[] | SQL)[] = [];\n\t\tconst columns: Record<string, SQLiteColumn> = table[Table.Symbol.Columns];\n\n\t\tconst colEntries: [string, SQLiteColumn][] = Object.entries(columns).filter(\n\t\t\t([_, col]) => !col.shouldDisableInsert(),\n\t\t);\n\t\tconst insertOrder = colEntries.map(([, column]) => sql.identifier(this.casing.getColumnCasing(column)));\n\n\t\tif (select) {\n\t\t\tconst select = valuesOrSelect as AnySQLiteSelectQueryBuilder | SQL;\n\n\t\t\tif (is(select, SQL)) {\n\t\t\t\tvaluesSqlList.push(select);\n\t\t\t} else {\n\t\t\t\tvaluesSqlList.push(select.getSQL());\n\t\t\t}\n\t\t} else {\n\t\t\tconst values = valuesOrSelect as Record<string, Param | SQL>[];\n\t\t\tvaluesSqlList.push(sql.raw('values '));\n\n\t\t\tfor (const [valueIndex, value] of values.entries()) {\n\t\t\t\tconst valueList: (SQLChunk | SQL)[] = [];\n\t\t\t\tfor (const [fieldName, col] of colEntries) {\n\t\t\t\t\tconst colValue = value[fieldName];\n\t\t\t\t\tif (\n\t\t\t\t\t\tcolValue === undefined\n\t\t\t\t\t\t|| (is(colValue, Param) && colValue.value === undefined)\n\t\t\t\t\t) {\n\t\t\t\t\t\tlet defaultValue;\n\t\t\t\t\t\tif (col.default !== null && col.default !== undefined) {\n\t\t\t\t\t\t\tdefaultValue = is(col.default, SQL)\n\t\t\t\t\t\t\t\t? col.default\n\t\t\t\t\t\t\t\t: sql.param(col.default, col);\n\t\t\t\t\t\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t\t\t\t\t\t} else if (col.defaultFn !== undefined) {\n\t\t\t\t\t\t\tconst defaultFnResult = col.defaultFn();\n\t\t\t\t\t\t\tdefaultValue = is(defaultFnResult, SQL)\n\t\t\t\t\t\t\t\t? defaultFnResult\n\t\t\t\t\t\t\t\t: sql.param(defaultFnResult, col);\n\t\t\t\t\t\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t\t\t\t\t\t} else if (!col.default && col.onUpdateFn !== undefined) {\n\t\t\t\t\t\t\tconst onUpdateFnResult = col.onUpdateFn();\n\t\t\t\t\t\t\tdefaultValue = is(onUpdateFnResult, SQL)\n\t\t\t\t\t\t\t\t? onUpdateFnResult\n\t\t\t\t\t\t\t\t: sql.param(onUpdateFnResult, col);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdefaultValue = sql`null`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalueList.push(defaultValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalueList.push(colValue);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvaluesSqlList.push(valueList);\n\t\t\t\tif (valueIndex < values.length - 1) {\n\t\t\t\t\tvaluesSqlList.push(sql`, `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst valuesSql = sql.join(valuesSqlList);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst onConflictSql = onConflict?.length ? sql.join(onConflict) : undefined;\n\n\t\t// if (isSingleValue && valuesSqlList.length === 0){\n\t\t// \treturn sql`insert into ${table} default values ${onConflictSql}${returningSql}`;\n\t\t// }\n\n\t\treturn sql`${withSql}insert into ${table} ${insertOrder} ${valuesSql}${onConflictSql}${returningSql}`;\n\t}\n\n\tsqlToQuery(sql: SQL, invokeSource?: 'indexes' | undefined): QueryWithTypings {\n\t\treturn sql.toQuery({\n\t\t\tcasing: this.casing,\n\t\t\tescapeName: this.escapeName,\n\t\t\tescapeParam: this.escapeParam,\n\t\t\tescapeString: this.escapeString,\n\t\t\tinvokeSource,\n\t\t});\n\t}\n\n\tbuildRelationalQuery({\n\t\tfullSchema,\n\t\tschema,\n\t\ttableNamesMap,\n\t\ttable,\n\t\ttableConfig,\n\t\tqueryConfig: config,\n\t\ttableAlias,\n\t\tnestedQueryRelation,\n\t\tjoinOn,\n\t}: {\n\t\tfullSchema: Record<string, unknown>;\n\t\tschema: TablesRelationalConfig;\n\t\ttableNamesMap: Record<string, string>;\n\t\ttable: SQLiteTable;\n\t\ttableConfig: TableRelationalConfig;\n\t\tqueryConfig: true | DBQueryConfig<'many', true>;\n\t\ttableAlias: string;\n\t\tnestedQueryRelation?: Relation;\n\t\tjoinOn?: SQL;\n\t}): BuildRelationalQueryResult<SQLiteTable, SQLiteColumn> {\n\t\tlet selection: BuildRelationalQueryResult<\n\t\t\tSQLiteTable,\n\t\t\tSQLiteColumn\n\t\t>['selection'] = [];\n\t\tlet limit,\n\t\t\toffset,\n\t\t\torderBy: SQLiteSelectConfig['orderBy'] = [],\n\t\t\twhere;\n\t\tconst joins: SQLiteSelectJoinConfig[] = [];\n\n\t\tif (config === true) {\n\t\t\tconst selectionEntries = Object.entries(tableConfig.columns);\n\t\t\tselection = selectionEntries.map(([key, value]) => ({\n\t\t\t\tdbKey: value.name,\n\t\t\t\ttsKey: key,\n\t\t\t\tfield: aliasedTableColumn(value as SQLiteColumn, tableAlias),\n\t\t\t\trelationTableTsKey: undefined,\n\t\t\t\tisJson: false,\n\t\t\t\tselection: [],\n\t\t\t}));\n\t\t} else {\n\t\t\tconst aliasedColumns = Object.fromEntries(\n\t\t\t\tObject.entries(tableConfig.columns).map(([key, value]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\taliasedTableColumn(value, tableAlias),\n\t\t\t\t]),\n\t\t\t);\n\n\t\t\tif (config.where) {\n\t\t\t\tconst whereSql = typeof config.where === 'function'\n\t\t\t\t\t? config.where(aliasedColumns, getOperators())\n\t\t\t\t\t: config.where;\n\t\t\t\twhere = whereSql && mapColumnsInSQLToAlias(whereSql, tableAlias);\n\t\t\t}\n\n\t\t\tconst fieldsSelection: {\n\t\t\t\ttsKey: string;\n\t\t\t\tvalue: SQLiteColumn | SQL.Aliased;\n\t\t\t}[] = [];\n\t\t\tlet selectedColumns: string[] = [];\n\n\t\t\t// Figure out which columns to select\n\t\t\tif (config.columns) {\n\t\t\t\tlet isIncludeMode = false;\n\n\t\t\t\tfor (const [field, value] of Object.entries(config.columns)) {\n\t\t\t\t\tif (value === undefined) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (field in tableConfig.columns) {\n\t\t\t\t\t\tif (!isIncludeMode && value === true) {\n\t\t\t\t\t\t\tisIncludeMode = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tselectedColumns.push(field);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (selectedColumns.length > 0) {\n\t\t\t\t\tselectedColumns = isIncludeMode\n\t\t\t\t\t\t? selectedColumns.filter((c) => config.columns?.[c] === true)\n\t\t\t\t\t\t: Object.keys(tableConfig.columns).filter(\n\t\t\t\t\t\t\t(key) => !selectedColumns.includes(key),\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Select all columns if selection is not specified\n\t\t\t\tselectedColumns = Object.keys(tableConfig.columns);\n\t\t\t}\n\n\t\t\tfor (const field of selectedColumns) {\n\t\t\t\tconst column = tableConfig.columns[field]! as SQLiteColumn;\n\t\t\t\tfieldsSelection.push({ tsKey: field, value: column });\n\t\t\t}\n\n\t\t\tlet selectedRelations: {\n\t\t\t\ttsKey: string;\n\t\t\t\tqueryConfig: true | DBQueryConfig<'many', false>;\n\t\t\t\trelation: Relation;\n\t\t\t}[] = [];\n\n\t\t\t// Figure out which relations to select\n\t\t\tif (config.with) {\n\t\t\t\tselectedRelations = Object.entries(config.with)\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tentry,\n\t\t\t\t\t\t): entry is [(typeof entry)[0], NonNullable<(typeof entry)[1]>] => !!entry[1],\n\t\t\t\t\t)\n\t\t\t\t\t.map(([tsKey, queryConfig]) => ({\n\t\t\t\t\t\ttsKey,\n\t\t\t\t\t\tqueryConfig,\n\t\t\t\t\t\trelation: tableConfig.relations[tsKey]!,\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\tlet extras;\n\n\t\t\t// Figure out which extras to select\n\t\t\tif (config.extras) {\n\t\t\t\textras = typeof config.extras === 'function'\n\t\t\t\t\t? config.extras(aliasedColumns, { sql })\n\t\t\t\t\t: config.extras;\n\t\t\t\tfor (const [tsKey, value] of Object.entries(extras)) {\n\t\t\t\t\tfieldsSelection.push({\n\t\t\t\t\t\ttsKey,\n\t\t\t\t\t\tvalue: mapColumnsInAliasedSQLToAlias(value, tableAlias),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Transform `fieldsSelection` into `selection`\n\t\t\t// `fieldsSelection` shouldn't be used after this point\n\t\t\tfor (const { tsKey, value } of fieldsSelection) {\n\t\t\t\tselection.push({\n\t\t\t\t\tdbKey: is(value, SQL.Aliased)\n\t\t\t\t\t\t? value.fieldAlias\n\t\t\t\t\t\t: tableConfig.columns[tsKey]!.name,\n\t\t\t\t\ttsKey,\n\t\t\t\t\tfield: is(value, Column)\n\t\t\t\t\t\t? aliasedTableColumn(value, tableAlias)\n\t\t\t\t\t\t: value,\n\t\t\t\t\trelationTableTsKey: undefined,\n\t\t\t\t\tisJson: false,\n\t\t\t\t\tselection: [],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet orderByOrig = typeof config.orderBy === 'function'\n\t\t\t\t? config.orderBy(aliasedColumns, getOrderByOperators())\n\t\t\t\t: (config.orderBy ?? []);\n\t\t\tif (!Array.isArray(orderByOrig)) {\n\t\t\t\torderByOrig = [orderByOrig];\n\t\t\t}\n\t\t\torderBy = orderByOrig.map((orderByValue) => {\n\t\t\t\tif (is(orderByValue, Column)) {\n\t\t\t\t\treturn aliasedTableColumn(orderByValue, tableAlias) as SQLiteColumn;\n\t\t\t\t}\n\t\t\t\treturn mapColumnsInSQLToAlias(orderByValue, tableAlias);\n\t\t\t});\n\n\t\t\tlimit = config.limit;\n\t\t\toffset = config.offset;\n\n\t\t\t// Process all relations\n\t\t\tfor (\n\t\t\t\tconst {\n\t\t\t\t\ttsKey: selectedRelationTsKey,\n\t\t\t\t\tqueryConfig: selectedRelationConfigValue,\n\t\t\t\t\trelation,\n\t\t\t\t} of selectedRelations\n\t\t\t) {\n\t\t\t\tconst normalizedRelation = normalizeRelation(\n\t\t\t\t\tschema,\n\t\t\t\t\ttableNamesMap,\n\t\t\t\t\trelation,\n\t\t\t\t);\n\t\t\t\tconst relationTableName = getTableUniqueName(relation.referencedTable);\n\t\t\t\tconst relationTableTsName = tableNamesMap[relationTableName]!;\n\t\t\t\tconst relationTableAlias = `${tableAlias}_${selectedRelationTsKey}`;\n\t\t\t\t// const relationTable = schema[relationTableTsName]!;\n\t\t\t\tconst joinOn = and(\n\t\t\t\t\t...normalizedRelation.fields.map((field, i) =>\n\t\t\t\t\t\teq(\n\t\t\t\t\t\t\taliasedTableColumn(\n\t\t\t\t\t\t\t\tnormalizedRelation.references[i]!,\n\t\t\t\t\t\t\t\trelationTableAlias,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\taliasedTableColumn(field, tableAlias),\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tconst builtRelation = this.buildRelationalQuery({\n\t\t\t\t\tfullSchema,\n\t\t\t\t\tschema,\n\t\t\t\t\ttableNamesMap,\n\t\t\t\t\ttable: fullSchema[relationTableTsName] as SQLiteTable,\n\t\t\t\t\ttableConfig: schema[relationTableTsName]!,\n\t\t\t\t\tqueryConfig: is(relation, One)\n\t\t\t\t\t\t? selectedRelationConfigValue === true\n\t\t\t\t\t\t\t? { limit: 1 }\n\t\t\t\t\t\t\t: { ...selectedRelationConfigValue, limit: 1 }\n\t\t\t\t\t\t: selectedRelationConfigValue,\n\t\t\t\t\ttableAlias: relationTableAlias,\n\t\t\t\t\tjoinOn,\n\t\t\t\t\tnestedQueryRelation: relation,\n\t\t\t\t});\n\t\t\t\tconst field = sql`(${builtRelation.sql})`.as(selectedRelationTsKey);\n\t\t\t\tselection.push({\n\t\t\t\t\tdbKey: selectedRelationTsKey,\n\t\t\t\t\ttsKey: selectedRelationTsKey,\n\t\t\t\t\tfield,\n\t\t\t\t\trelationTableTsKey: relationTableTsName,\n\t\t\t\t\tisJson: true,\n\t\t\t\t\tselection: builtRelation.selection,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (selection.length === 0) {\n\t\t\tthrow new DrizzleError({\n\t\t\t\tmessage:\n\t\t\t\t\t`No fields selected for table \"${tableConfig.tsName}\" (\"${tableAlias}\"). You need to have at least one item in \"columns\", \"with\" or \"extras\". If you need to select all columns, omit the \"columns\" key or set it to undefined.`,\n\t\t\t});\n\t\t}\n\n\t\tlet result;\n\n\t\twhere = and(joinOn, where);\n\n\t\tif (nestedQueryRelation) {\n\t\t\tlet field = sql`json_array(${\n\t\t\t\tsql.join(\n\t\t\t\t\tselection.map(({ field }) =>\n\t\t\t\t\t\tis(field, SQLiteColumn)\n\t\t\t\t\t\t\t? sql.identifier(this.casing.getColumnCasing(field))\n\t\t\t\t\t\t\t: is(field, SQL.Aliased)\n\t\t\t\t\t\t\t? field.sql\n\t\t\t\t\t\t\t: field\n\t\t\t\t\t),\n\t\t\t\t\tsql`, `,\n\t\t\t\t)\n\t\t\t})`;\n\t\t\tif (is(nestedQueryRelation, Many)) {\n\t\t\t\tfield = sql`coalesce(json_group_array(${field}), json_array())`;\n\t\t\t}\n\t\t\tconst nestedSelection = [\n\t\t\t\t{\n\t\t\t\t\tdbKey: 'data',\n\t\t\t\t\ttsKey: 'data',\n\t\t\t\t\tfield: field.as('data'),\n\t\t\t\t\tisJson: true,\n\t\t\t\t\trelationTableTsKey: tableConfig.tsName,\n\t\t\t\t\tselection,\n\t\t\t\t},\n\t\t\t];\n\n\t\t\tconst needsSubquery = limit !== undefined || offset !== undefined || orderBy.length > 0;\n\n\t\t\tif (needsSubquery) {\n\t\t\t\tresult = this.buildSelectQuery({\n\t\t\t\t\ttable: aliasedTable(table, tableAlias),\n\t\t\t\t\tfields: {},\n\t\t\t\t\tfieldsFlat: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpath: [],\n\t\t\t\t\t\t\tfield: sql.raw('*'),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\twhere,\n\t\t\t\t\tlimit,\n\t\t\t\t\toffset,\n\t\t\t\t\torderBy,\n\t\t\t\t\tsetOperators: [],\n\t\t\t\t});\n\n\t\t\t\twhere = undefined;\n\t\t\t\tlimit = undefined;\n\t\t\t\toffset = undefined;\n\t\t\t\torderBy = undefined;\n\t\t\t} else {\n\t\t\t\tresult = aliasedTable(table, tableAlias);\n\t\t\t}\n\n\t\t\tresult = this.buildSelectQuery({\n\t\t\t\ttable: is(result, SQLiteTable)\n\t\t\t\t\t? result\n\t\t\t\t\t: new Subquery(result, {}, tableAlias),\n\t\t\t\tfields: {},\n\t\t\t\tfieldsFlat: nestedSelection.map(({ field }) => ({\n\t\t\t\t\tpath: [],\n\t\t\t\t\tfield: is(field, Column)\n\t\t\t\t\t\t? aliasedTableColumn(field, tableAlias)\n\t\t\t\t\t\t: field,\n\t\t\t\t})),\n\t\t\t\tjoins,\n\t\t\t\twhere,\n\t\t\t\tlimit,\n\t\t\t\toffset,\n\t\t\t\torderBy,\n\t\t\t\tsetOperators: [],\n\t\t\t});\n\t\t} else {\n\t\t\tresult = this.buildSelectQuery({\n\t\t\t\ttable: aliasedTable(table, tableAlias),\n\t\t\t\tfields: {},\n\t\t\t\tfieldsFlat: selection.map(({ field }) => ({\n\t\t\t\t\tpath: [],\n\t\t\t\t\tfield: is(field, Column)\n\t\t\t\t\t\t? aliasedTableColumn(field, tableAlias)\n\t\t\t\t\t\t: field,\n\t\t\t\t})),\n\t\t\t\tjoins,\n\t\t\t\twhere,\n\t\t\t\tlimit,\n\t\t\t\toffset,\n\t\t\t\torderBy,\n\t\t\t\tsetOperators: [],\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\ttableTsKey: tableConfig.tsName,\n\t\t\tsql: result,\n\t\t\tselection,\n\t\t};\n\t}\n}\n\nexport class SQLiteSyncDialect extends SQLiteDialect {\n\tstatic override readonly [entityKind]: string = 'SQLiteSyncDialect';\n\n\tmigrate(\n\t\tmigrations: MigrationMeta[],\n\t\tsession: SQLiteSession<\n\t\t\t'sync',\n\t\t\tunknown,\n\t\t\tRecord<string, unknown>,\n\t\t\tTablesRelationalConfig\n\t\t>,\n\t\tconfig?: string | MigrationConfig,\n\t): void {\n\t\tconst migrationsTable = config === undefined\n\t\t\t? '__drizzle_migrations'\n\t\t\t: typeof config === 'string'\n\t\t\t? '__drizzle_migrations'\n\t\t\t: (config.migrationsTable ?? '__drizzle_migrations');\n\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at numeric\n\t\t\t)\n\t\t`;\n\t\tsession.run(migrationTableCreate);\n\n\t\tconst dbMigrations = session.values<[number, string, string]>(\n\t\t\tsql`SELECT id, hash, created_at FROM ${sql.identifier(migrationsTable)} ORDER BY created_at DESC LIMIT 1`,\n\t\t);\n\n\t\tconst lastDbMigration = dbMigrations[0] ?? undefined;\n\t\tsession.run(sql`BEGIN`);\n\n\t\ttry {\n\t\t\tfor (const migration of migrations) {\n\t\t\t\tif (\n\t\t\t\t\t!lastDbMigration\n\t\t\t\t\t|| Number(lastDbMigration[2])! < migration.folderMillis\n\t\t\t\t) {\n\t\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\t\tsession.run(sql.raw(stmt));\n\t\t\t\t\t}\n\t\t\t\t\tsession.run(\n\t\t\t\t\t\tsql`INSERT INTO ${\n\t\t\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\t\t\tmigrationsTable,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t} (\"hash\", \"created_at\") VALUES(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsession.run(sql`COMMIT`);\n\t\t} catch (e) {\n\t\t\tsession.run(sql`ROLLBACK`);\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport class SQLiteAsyncDialect extends SQLiteDialect {\n\tstatic override readonly [entityKind]: string = 'SQLiteAsyncDialect';\n\n\tasync migrate(\n\t\tmigrations: MigrationMeta[],\n\t\tsession: SQLiteSession<'async', any, any, any>,\n\t\tconfig?: string | MigrationConfig,\n\t): Promise<void> {\n\t\tconst migrationsTable = config === undefined\n\t\t\t? '__drizzle_migrations'\n\t\t\t: typeof config === 'string'\n\t\t\t? '__drizzle_migrations'\n\t\t\t: (config.migrationsTable ?? '__drizzle_migrations');\n\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at numeric\n\t\t\t)\n\t\t`;\n\t\tawait session.run(migrationTableCreate);\n\n\t\tconst dbMigrations = await session.values<[number, string, string]>(\n\t\t\tsql`SELECT id, hash, created_at FROM ${sql.identifier(migrationsTable)} ORDER BY created_at DESC LIMIT 1`,\n\t\t);\n\n\t\tconst lastDbMigration = dbMigrations[0] ?? undefined;\n\n\t\tawait session.transaction(async (tx) => {\n\t\t\tfor (const migration of migrations) {\n\t\t\t\tif (\n\t\t\t\t\t!lastDbMigration\n\t\t\t\t\t|| Number(lastDbMigration[2])! < migration.folderMillis\n\t\t\t\t) {\n\t\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\t\tawait tx.run(sql.raw(stmt));\n\t\t\t\t\t}\n\t\t\t\t\tawait tx.run(\n\t\t\t\t\t\tsql`INSERT INTO ${\n\t\t\t\t\t\t\tsql.identifier(\n\t\t\t\t\t\t\t\tmigrationsTable,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t} (\"hash\", \"created_at\") VALUES(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n","import { entityKind } from '~/entity.ts';\nimport type { SQL, SQLWrapper } from '~/sql/index.ts';\n\nexport abstract class TypedQueryBuilder<TSelection, TResult = unknown, TConfig = unknown> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'TypedQueryBuilder';\n\n\tdeclare _: {\n\t\tselectedFields: TSelection;\n\t\tresult: TResult;\n\t\tconfig?: TConfig;\n\t};\n\n\t/** @internal */\n\tgetSelectedFields(): TSelection {\n\t\treturn this._.selectedFields;\n\t}\n\n\tabstract getSQL(): SQL;\n}\n","import type { CacheConfig, WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type {\n\tBuildSubquerySelection,\n\tGetSelectTableName,\n\tGetSelectTableSelection,\n\tJoinNullability,\n\tJoinType,\n\tSelectMode,\n\tSelectResult,\n\tSetOperator,\n} from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport { SQL, View } from '~/sql/sql.ts';\nimport type { ColumnsSelection, Placeholder, Query, SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteColumn } from '~/sqlite-core/columns/index.ts';\nimport type { SQLiteDialect } from '~/sqlite-core/dialect.ts';\nimport type { SQLiteSession } from '~/sqlite-core/session.ts';\nimport type { SubqueryWithSelection } from '~/sqlite-core/subquery.ts';\nimport type { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { Table } from '~/table.ts';\nimport {\n\tapplyMixins,\n\tgetTableColumns,\n\tgetTableLikeName,\n\thaveSameKeys,\n\torderSelectedFields,\n\ttype ValueOrArray,\n} from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport { SQLiteViewBase } from '../view-base.ts';\nimport type {\n\tAnySQLiteSelect,\n\tCreateSQLiteSelectFromBuilderMode,\n\tGetSQLiteSetOperators,\n\tSelectedFields,\n\tSetOperatorRightSelect,\n\tSQLiteCreateSetOperatorFn,\n\tSQLiteSelectConfig,\n\tSQLiteSelectCrossJoinFn,\n\tSQLiteSelectDynamic,\n\tSQLiteSelectExecute,\n\tSQLiteSelectHKT,\n\tSQLiteSelectHKTBase,\n\tSQLiteSelectJoinFn,\n\tSQLiteSelectPrepare,\n\tSQLiteSelectWithout,\n\tSQLiteSetOperatorExcludedMethods,\n\tSQLiteSetOperatorWithResult,\n} from './select.types.ts';\n\nexport class SQLiteSelectBuilder<\n\tTSelection extends SelectedFields | undefined,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTBuilderMode extends 'db' | 'qb' = 'db',\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteSelectBuilder';\n\n\tprivate fields: TSelection;\n\tprivate session: SQLiteSession<any, any, any, any> | undefined;\n\tprivate dialect: SQLiteDialect;\n\tprivate withList: Subquery[] | undefined;\n\tprivate distinct: boolean | undefined;\n\n\tconstructor(\n\t\tconfig: {\n\t\t\tfields: TSelection;\n\t\t\tsession: SQLiteSession<any, any, any, any> | undefined;\n\t\t\tdialect: SQLiteDialect;\n\t\t\twithList?: Subquery[];\n\t\t\tdistinct?: boolean;\n\t\t},\n\t) {\n\t\tthis.fields = config.fields;\n\t\tthis.session = config.session;\n\t\tthis.dialect = config.dialect;\n\t\tthis.withList = config.withList;\n\t\tthis.distinct = config.distinct;\n\t}\n\n\tfrom<TFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL>(\n\t\tsource: TFrom,\n\t): CreateSQLiteSelectFromBuilderMode<\n\t\tTBuilderMode,\n\t\tGetSelectTableName<TFrom>,\n\t\tTResultType,\n\t\tTRunResult,\n\t\tTSelection extends undefined ? GetSelectTableSelection<TFrom> : TSelection,\n\t\tTSelection extends undefined ? 'single' : 'partial'\n\t> {\n\t\tconst isPartialSelect = !!this.fields;\n\n\t\tlet fields: SelectedFields;\n\t\tif (this.fields) {\n\t\t\tfields = this.fields;\n\t\t} else if (is(source, Subquery)) {\n\t\t\t// This is required to use the proxy handler to get the correct field values from the subquery\n\t\t\tfields = Object.fromEntries(\n\t\t\t\tObject.keys(source._.selectedFields).map((\n\t\t\t\t\tkey,\n\t\t\t\t) => [key, source[key as unknown as keyof typeof source] as unknown as SelectedFields[string]]),\n\t\t\t);\n\t\t} else if (is(source, SQLiteViewBase)) {\n\t\t\tfields = source[ViewBaseConfig].selectedFields as SelectedFields;\n\t\t} else if (is(source, SQL)) {\n\t\t\tfields = {};\n\t\t} else {\n\t\t\tfields = getTableColumns<SQLiteTable>(source);\n\t\t}\n\n\t\treturn new SQLiteSelectBase({\n\t\t\ttable: source,\n\t\t\tfields,\n\t\t\tisPartialSelect,\n\t\t\tsession: this.session,\n\t\t\tdialect: this.dialect,\n\t\t\twithList: this.withList,\n\t\t\tdistinct: this.distinct,\n\t\t}) as any;\n\t}\n}\n\nexport abstract class SQLiteSelectQueryBuilderBase<\n\tTHKT extends SQLiteSelectHKTBase,\n\tTTableName extends string | undefined,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTSelection extends ColumnsSelection,\n\tTSelectMode extends SelectMode,\n\tTNullabilityMap extends Record<string, JoinNullability> = TTableName extends string ? Record<TTableName, 'not-null'>\n\t\t: {},\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n\tTResult extends any[] = SelectResult<TSelection, TSelectMode, TNullabilityMap>[],\n\tTSelectedFields extends ColumnsSelection = BuildSubquerySelection<TSelection, TNullabilityMap>,\n> extends TypedQueryBuilder<TSelectedFields, TResult> {\n\tstatic override readonly [entityKind]: string = 'SQLiteSelectQueryBuilder';\n\n\toverride readonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly hkt: THKT;\n\t\treadonly tableName: TTableName;\n\t\treadonly resultType: TResultType;\n\t\treadonly runResult: TRunResult;\n\t\treadonly selection: TSelection;\n\t\treadonly selectMode: TSelectMode;\n\t\treadonly nullabilityMap: TNullabilityMap;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TResult;\n\t\treadonly selectedFields: TSelectedFields;\n\t\treadonly config: SQLiteSelectConfig;\n\t};\n\n\t/** @internal */\n\tconfig: SQLiteSelectConfig;\n\tprotected joinsNotNullableMap: Record<string, boolean>;\n\tprivate tableName: string | undefined;\n\tprivate isPartialSelect: boolean;\n\tprotected session: SQLiteSession<any, any, any, any> | undefined;\n\tprotected dialect: SQLiteDialect;\n\tprotected cacheConfig?: WithCacheConfig = undefined;\n\tprotected usedTables: Set<string> = new Set();\n\n\tconstructor(\n\t\t{ table, fields, isPartialSelect, session, dialect, withList, distinct }: {\n\t\t\ttable: SQLiteSelectConfig['table'];\n\t\t\tfields: SQLiteSelectConfig['fields'];\n\t\t\tisPartialSelect: boolean;\n\t\t\tsession: SQLiteSession<any, any, any, any> | undefined;\n\t\t\tdialect: SQLiteDialect;\n\t\t\twithList: Subquery[] | undefined;\n\t\t\tdistinct: boolean | undefined;\n\t\t},\n\t) {\n\t\tsuper();\n\t\tthis.config = {\n\t\t\twithList,\n\t\t\ttable,\n\t\t\tfields: { ...fields },\n\t\t\tdistinct,\n\t\t\tsetOperators: [],\n\t\t};\n\t\tthis.isPartialSelect = isPartialSelect;\n\t\tthis.session = session;\n\t\tthis.dialect = dialect;\n\t\tthis._ = {\n\t\t\tselectedFields: fields as TSelectedFields,\n\t\t\tconfig: this.config,\n\t\t} as this['_'];\n\t\tthis.tableName = getTableLikeName(table);\n\t\tthis.joinsNotNullableMap = typeof this.tableName === 'string' ? { [this.tableName]: true } : {};\n\t\tfor (const item of extractUsedTable(table)) this.usedTables.add(item);\n\t}\n\n\t/** @internal */\n\tgetUsedTables() {\n\t\treturn [...this.usedTables];\n\t}\n\n\tprivate createJoin<TJoinType extends JoinType>(\n\t\tjoinType: TJoinType,\n\t): 'cross' extends TJoinType ? SQLiteSelectCrossJoinFn<this, TDynamic>\n\t\t: SQLiteSelectJoinFn<this, TDynamic, TJoinType>\n\t{\n\t\treturn (\n\t\t\ttable: SQLiteTable | Subquery | SQLiteViewBase | SQL,\n\t\t\ton?: ((aliases: TSelection) => SQL | undefined) | SQL | undefined,\n\t\t) => {\n\t\t\tconst baseTableName = this.tableName;\n\t\t\tconst tableName = getTableLikeName(table);\n\n\t\t\t// store all tables used in a query\n\t\t\tfor (const item of extractUsedTable(table)) this.usedTables.add(item);\n\n\t\t\tif (typeof tableName === 'string' && this.config.joins?.some((join) => join.alias === tableName)) {\n\t\t\t\tthrow new Error(`Alias \"${tableName}\" is already used in this query`);\n\t\t\t}\n\n\t\t\tif (!this.isPartialSelect) {\n\t\t\t\t// If this is the first join and this is not a partial select and we're not selecting from raw SQL, \"move\" the fields from the main table to the nested object\n\t\t\t\tif (Object.keys(this.joinsNotNullableMap).length === 1 && typeof baseTableName === 'string') {\n\t\t\t\t\tthis.config.fields = {\n\t\t\t\t\t\t[baseTableName]: this.config.fields,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (typeof tableName === 'string' && !is(table, SQL)) {\n\t\t\t\t\tconst selection = is(table, Subquery)\n\t\t\t\t\t\t? table._.selectedFields\n\t\t\t\t\t\t: is(table, View)\n\t\t\t\t\t\t? table[ViewBaseConfig].selectedFields\n\t\t\t\t\t\t: table[Table.Symbol.Columns];\n\t\t\t\t\tthis.config.fields[tableName] = selection;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof on === 'function') {\n\t\t\t\ton = on(\n\t\t\t\t\tnew Proxy(\n\t\t\t\t\t\tthis.config.fields,\n\t\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t\t) as TSelection,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (!this.config.joins) {\n\t\t\t\tthis.config.joins = [];\n\t\t\t}\n\t\t\tthis.config.joins.push({ on, table, joinType, alias: tableName });\n\n\t\t\tif (typeof tableName === 'string') {\n\t\t\t\tswitch (joinType) {\n\t\t\t\t\tcase 'left': {\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'right': {\n\t\t\t\t\t\tthis.joinsNotNullableMap = Object.fromEntries(\n\t\t\t\t\t\t\tObject.entries(this.joinsNotNullableMap).map(([key]) => [key, false]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'cross':\n\t\t\t\t\tcase 'inner': {\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'full': {\n\t\t\t\t\t\tthis.joinsNotNullableMap = Object.fromEntries(\n\t\t\t\t\t\t\tObject.entries(this.joinsNotNullableMap).map(([key]) => [key, false]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this as any;\n\t\t};\n\t}\n\n\t/**\n\t * Executes a `left join` operation by adding another table to the current query.\n\t *\n\t * Calling this method associates each row of the table with the corresponding row from the joined table, if a match is found. If no matching row exists, it sets all columns of the joined table to null.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#left-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User; pets: Pet | null; }[] = await db.select()\n\t * .from(users)\n\t * .leftJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number; petId: number | null; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .leftJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\tleftJoin = this.createJoin('left');\n\n\t/**\n\t * Executes a `right join` operation by adding another table to the current query.\n\t *\n\t * Calling this method associates each row of the joined table with the corresponding row from the main table, if a match is found. If no matching row exists, it sets all columns of the main table to null.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#right-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User | null; pets: Pet; }[] = await db.select()\n\t * .from(users)\n\t * .rightJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number | null; petId: number; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .rightJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\trightJoin = this.createJoin('right');\n\n\t/**\n\t * Executes an `inner join` operation, creating a new table by combining rows from two tables that have matching values.\n\t *\n\t * Calling this method retrieves rows that have corresponding entries in both joined tables. Rows without matching entries in either table are excluded, resulting in a table that includes only matching pairs.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#inner-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User; pets: Pet; }[] = await db.select()\n\t * .from(users)\n\t * .innerJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number; petId: number; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .innerJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\tinnerJoin = this.createJoin('inner');\n\n\t/**\n\t * Executes a `full join` operation by combining rows from two tables into a new table.\n\t *\n\t * Calling this method retrieves all rows from both main and joined tables, merging rows with matching values and filling in `null` for non-matching columns.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#full-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User | null; pets: Pet | null; }[] = await db.select()\n\t * .from(users)\n\t * .fullJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number | null; petId: number | null; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .fullJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\tfullJoin = this.createJoin('full');\n\n\t/**\n\t * Executes a `cross join` operation by combining rows from two tables into a new table.\n\t *\n\t * Calling this method retrieves all rows from both main and joined tables, merging all rows from each table.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#cross-join}\n\t *\n\t * @param table the table to join.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users, each user with every pet\n\t * const usersWithPets: { user: User; pets: Pet; }[] = await db.select()\n\t * .from(users)\n\t * .crossJoin(pets)\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number; petId: number; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .crossJoin(pets)\n\t * ```\n\t */\n\tcrossJoin = this.createJoin('cross');\n\n\tprivate createSetOperator(\n\t\ttype: SetOperator,\n\t\tisAll: boolean,\n\t): <TValue extends SQLiteSetOperatorWithResult<TResult>>(\n\t\trightSelection:\n\t\t\t| ((setOperators: GetSQLiteSetOperators) => SetOperatorRightSelect<TValue, TResult>)\n\t\t\t| SetOperatorRightSelect<TValue, TResult>,\n\t) => SQLiteSelectWithout<\n\t\tthis,\n\t\tTDynamic,\n\t\tSQLiteSetOperatorExcludedMethods,\n\t\ttrue\n\t> {\n\t\treturn (rightSelection) => {\n\t\t\tconst rightSelect = (typeof rightSelection === 'function'\n\t\t\t\t? rightSelection(getSQLiteSetOperators())\n\t\t\t\t: rightSelection) as TypedQueryBuilder<\n\t\t\t\t\tany,\n\t\t\t\t\tTResult\n\t\t\t\t>;\n\n\t\t\tif (!haveSameKeys(this.getSelectedFields(), rightSelect.getSelectedFields())) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Set operator error (union / intersect / except): selected fields are not the same or are in a different order',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.config.setOperators.push({ type, isAll, rightSelect });\n\t\t\treturn this as any;\n\t\t};\n\t}\n\n\t/**\n\t * Adds `union` set operator to the query.\n\t *\n\t * Calling this method will combine the result sets of the `select` statements and remove any duplicate rows that appear across them.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#union}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all unique names from customers and users tables\n\t * await db.select({ name: users.name })\n\t * .from(users)\n\t * .union(\n\t * db.select({ name: customers.name }).from(customers)\n\t * );\n\t * // or\n\t * import { union } from 'drizzle-orm/sqlite-core'\n\t *\n\t * await union(\n\t * db.select({ name: users.name }).from(users),\n\t * db.select({ name: customers.name }).from(customers)\n\t * );\n\t * ```\n\t */\n\tunion = this.createSetOperator('union', false);\n\n\t/**\n\t * Adds `union all` set operator to the query.\n\t *\n\t * Calling this method will combine the result-set of the `select` statements and keep all duplicate rows that appear across them.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#union-all}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all transaction ids from both online and in-store sales\n\t * await db.select({ transaction: onlineSales.transactionId })\n\t * .from(onlineSales)\n\t * .unionAll(\n\t * db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n\t * );\n\t * // or\n\t * import { unionAll } from 'drizzle-orm/sqlite-core'\n\t *\n\t * await unionAll(\n\t * db.select({ transaction: onlineSales.transactionId }).from(onlineSales),\n\t * db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n\t * );\n\t * ```\n\t */\n\tunionAll = this.createSetOperator('union', true);\n\n\t/**\n\t * Adds `intersect` set operator to the query.\n\t *\n\t * Calling this method will retain only the rows that are present in both result sets and eliminate duplicates.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#intersect}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select course names that are offered in both departments A and B\n\t * await db.select({ courseName: depA.courseName })\n\t * .from(depA)\n\t * .intersect(\n\t * db.select({ courseName: depB.courseName }).from(depB)\n\t * );\n\t * // or\n\t * import { intersect } from 'drizzle-orm/sqlite-core'\n\t *\n\t * await intersect(\n\t * db.select({ courseName: depA.courseName }).from(depA),\n\t * db.select({ courseName: depB.courseName }).from(depB)\n\t * );\n\t * ```\n\t */\n\tintersect = this.createSetOperator('intersect', false);\n\n\t/**\n\t * Adds `except` set operator to the query.\n\t *\n\t * Calling this method will retrieve all unique rows from the left query, except for the rows that are present in the result set of the right query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#except}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all courses offered in department A but not in department B\n\t * await db.select({ courseName: depA.courseName })\n\t * .from(depA)\n\t * .except(\n\t * db.select({ courseName: depB.courseName }).from(depB)\n\t * );\n\t * // or\n\t * import { except } from 'drizzle-orm/sqlite-core'\n\t *\n\t * await except(\n\t * db.select({ courseName: depA.courseName }).from(depA),\n\t * db.select({ courseName: depB.courseName }).from(depB)\n\t * );\n\t * ```\n\t */\n\texcept = this.createSetOperator('except', false);\n\n\t/** @internal */\n\taddSetOperators(setOperators: SQLiteSelectConfig['setOperators']): SQLiteSelectWithout<\n\t\tthis,\n\t\tTDynamic,\n\t\tSQLiteSetOperatorExcludedMethods,\n\t\ttrue\n\t> {\n\t\tthis.config.setOperators.push(...setOperators);\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `where` clause to the query.\n\t *\n\t * Calling this method will select only those rows that fulfill a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#filtering}\n\t *\n\t * @param where the `where` clause.\n\t *\n\t * @example\n\t * You can use conditional operators and `sql function` to filter the rows to be selected.\n\t *\n\t * ```ts\n\t * // Select all cars with green color\n\t * await db.select().from(cars).where(eq(cars.color, 'green'));\n\t * // or\n\t * await db.select().from(cars).where(sql`${cars.color} = 'green'`)\n\t * ```\n\t *\n\t * You can logically combine conditional operators with `and()` and `or()` operators:\n\t *\n\t * ```ts\n\t * // Select all BMW cars with a green color\n\t * await db.select().from(cars).where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));\n\t *\n\t * // Select all cars with the green or blue color\n\t * await db.select().from(cars).where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));\n\t * ```\n\t */\n\twhere(\n\t\twhere: ((aliases: TSelection) => SQL | undefined) | SQL | undefined,\n\t): SQLiteSelectWithout<this, TDynamic, 'where'> {\n\t\tif (typeof where === 'function') {\n\t\t\twhere = where(\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\t\t}\n\t\tthis.config.where = where;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `having` clause to the query.\n\t *\n\t * Calling this method will select only those rows that fulfill a specified condition. It is typically used with aggregate functions to filter the aggregated data based on a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#aggregations}\n\t *\n\t * @param having the `having` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all brands with more than one car\n\t * await db.select({\n\t * \tbrand: cars.brand,\n\t * \tcount: sql<number>`cast(count(${cars.id}) as int)`,\n\t * })\n\t * .from(cars)\n\t * .groupBy(cars.brand)\n\t * .having(({ count }) => gt(count, 1));\n\t * ```\n\t */\n\thaving(\n\t\thaving: ((aliases: this['_']['selection']) => SQL | undefined) | SQL | undefined,\n\t): SQLiteSelectWithout<this, TDynamic, 'having'> {\n\t\tif (typeof having === 'function') {\n\t\t\thaving = having(\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\t\t}\n\t\tthis.config.having = having;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `group by` clause to the query.\n\t *\n\t * Calling this method will group rows that have the same values into summary rows, often used for aggregation purposes.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#aggregations}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Group and count people by their last names\n\t * await db.select({\n\t * lastName: people.lastName,\n\t * count: sql<number>`cast(count(*) as int)`\n\t * })\n\t * .from(people)\n\t * .groupBy(people.lastName);\n\t * ```\n\t */\n\tgroupBy(\n\t\tbuilder: (aliases: this['_']['selection']) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>,\n\t): SQLiteSelectWithout<this, TDynamic, 'groupBy'>;\n\tgroupBy(...columns: (SQLiteColumn | SQL)[]): SQLiteSelectWithout<this, TDynamic, 'groupBy'>;\n\tgroupBy(\n\t\t...columns:\n\t\t\t| [(aliases: this['_']['selection']) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>]\n\t\t\t| (SQLiteColumn | SQL | SQL.Aliased)[]\n\t): SQLiteSelectWithout<this, TDynamic, 'groupBy'> {\n\t\tif (typeof columns[0] === 'function') {\n\t\t\tconst groupBy = columns[0](\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'alias', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\t\t\tthis.config.groupBy = Array.isArray(groupBy) ? groupBy : [groupBy];\n\t\t} else {\n\t\t\tthis.config.groupBy = columns as (SQLiteColumn | SQL | SQL.Aliased)[];\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds an `order by` clause to the query.\n\t *\n\t * Calling this method will sort the result-set in ascending or descending order. By default, the sort order is ascending.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#order-by}\n\t *\n\t * @example\n\t *\n\t * ```\n\t * // Select cars ordered by year\n\t * await db.select().from(cars).orderBy(cars.year);\n\t * ```\n\t *\n\t * You can specify whether results are in ascending or descending order with the `asc()` and `desc()` operators.\n\t *\n\t * ```ts\n\t * // Select cars ordered by year in descending order\n\t * await db.select().from(cars).orderBy(desc(cars.year));\n\t *\n\t * // Select cars ordered by year and price\n\t * await db.select().from(cars).orderBy(asc(cars.year), desc(cars.price));\n\t * ```\n\t */\n\torderBy(\n\t\tbuilder: (aliases: this['_']['selection']) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>,\n\t): SQLiteSelectWithout<this, TDynamic, 'orderBy'>;\n\torderBy(...columns: (SQLiteColumn | SQL)[]): SQLiteSelectWithout<this, TDynamic, 'orderBy'>;\n\torderBy(\n\t\t...columns:\n\t\t\t| [(aliases: this['_']['selection']) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>]\n\t\t\t| (SQLiteColumn | SQL | SQL.Aliased)[]\n\t): SQLiteSelectWithout<this, TDynamic, 'orderBy'> {\n\t\tif (typeof columns[0] === 'function') {\n\t\t\tconst orderBy = columns[0](\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'alias', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\n\t\t\tconst orderByArray = Array.isArray(orderBy) ? orderBy : [orderBy];\n\n\t\t\tif (this.config.setOperators.length > 0) {\n\t\t\t\tthis.config.setOperators.at(-1)!.orderBy = orderByArray;\n\t\t\t} else {\n\t\t\t\tthis.config.orderBy = orderByArray;\n\t\t\t}\n\t\t} else {\n\t\t\tconst orderByArray = columns as (SQLiteColumn | SQL | SQL.Aliased)[];\n\n\t\t\tif (this.config.setOperators.length > 0) {\n\t\t\t\tthis.config.setOperators.at(-1)!.orderBy = orderByArray;\n\t\t\t} else {\n\t\t\t\tthis.config.orderBy = orderByArray;\n\t\t\t}\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `limit` clause to the query.\n\t *\n\t * Calling this method will set the maximum number of rows that will be returned by this query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#limit--offset}\n\t *\n\t * @param limit the `limit` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Get the first 10 people from this query.\n\t * await db.select().from(people).limit(10);\n\t * ```\n\t */\n\tlimit(limit: number | Placeholder): SQLiteSelectWithout<this, TDynamic, 'limit'> {\n\t\tif (this.config.setOperators.length > 0) {\n\t\t\tthis.config.setOperators.at(-1)!.limit = limit;\n\t\t} else {\n\t\t\tthis.config.limit = limit;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds an `offset` clause to the query.\n\t *\n\t * Calling this method will skip a number of rows when returning results from this query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#limit--offset}\n\t *\n\t * @param offset the `offset` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Get the 10th-20th people from this query.\n\t * await db.select().from(people).offset(10).limit(10);\n\t * ```\n\t */\n\toffset(offset: number | Placeholder): SQLiteSelectWithout<this, TDynamic, 'offset'> {\n\t\tif (this.config.setOperators.length > 0) {\n\t\t\tthis.config.setOperators.at(-1)!.offset = offset;\n\t\t} else {\n\t\t\tthis.config.offset = offset;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildSelectQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\tas<TAlias extends string>(\n\t\talias: TAlias,\n\t): SubqueryWithSelection<this['_']['selectedFields'], TAlias> {\n\t\tconst usedTables: string[] = [];\n\t\tusedTables.push(...extractUsedTable(this.config.table));\n\t\tif (this.config.joins) { for (const it of this.config.joins) usedTables.push(...extractUsedTable(it.table)); }\n\n\t\treturn new Proxy(\n\t\t\tnew Subquery(this.getSQL(), this.config.fields, alias, false, [...new Set(usedTables)]),\n\t\t\tnew SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t) as SubqueryWithSelection<this['_']['selectedFields'], TAlias>;\n\t}\n\n\t/** @internal */\n\toverride getSelectedFields(): this['_']['selectedFields'] {\n\t\treturn new Proxy(\n\t\t\tthis.config.fields,\n\t\t\tnew SelectionProxyHandler({ alias: this.tableName, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t) as this['_']['selectedFields'];\n\t}\n\n\t$dynamic(): SQLiteSelectDynamic<this> {\n\t\treturn this;\n\t}\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface SQLiteSelectBase<\n\tTTableName extends string | undefined,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTSelection extends ColumnsSelection,\n\tTSelectMode extends SelectMode = 'single',\n\tTNullabilityMap extends Record<string, JoinNullability> = TTableName extends string ? Record<TTableName, 'not-null'>\n\t\t: {},\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n\tTResult extends any[] = SelectResult<TSelection, TSelectMode, TNullabilityMap>[],\n\tTSelectedFields extends ColumnsSelection = BuildSubquerySelection<TSelection, TNullabilityMap>,\n> extends\n\tSQLiteSelectQueryBuilderBase<\n\t\tSQLiteSelectHKT,\n\t\tTTableName,\n\t\tTResultType,\n\t\tTRunResult,\n\t\tTSelection,\n\t\tTSelectMode,\n\t\tTNullabilityMap,\n\t\tTDynamic,\n\t\tTExcludedMethods,\n\t\tTResult,\n\t\tTSelectedFields\n\t>,\n\tQueryPromise<TResult>\n{}\n\nexport class SQLiteSelectBase<\n\tTTableName extends string | undefined,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTSelection,\n\tTSelectMode extends SelectMode = 'single',\n\tTNullabilityMap extends Record<string, JoinNullability> = TTableName extends string ? Record<TTableName, 'not-null'>\n\t\t: {},\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n\tTResult = SelectResult<TSelection, TSelectMode, TNullabilityMap>[],\n\tTSelectedFields extends ColumnsSelection = BuildSubquerySelection<TSelection, TNullabilityMap>,\n> extends SQLiteSelectQueryBuilderBase<\n\tSQLiteSelectHKT,\n\tTTableName,\n\tTResultType,\n\tTRunResult,\n\tTSelection,\n\tTSelectMode,\n\tTNullabilityMap,\n\tTDynamic,\n\tTExcludedMethods,\n\tTResult,\n\tTSelectedFields\n> implements RunnableQuery<TResult, 'sqlite'>, SQLWrapper {\n\tstatic override readonly [entityKind]: string = 'SQLiteSelect';\n\n\t/** @internal */\n\t_prepare(isOneTimeQuery = true): SQLiteSelectPrepare<this> {\n\t\tif (!this.session) {\n\t\t\tthrow new Error('Cannot execute a query on a query builder. Please use a database instance instead.');\n\t\t}\n\t\tconst fieldsList = orderSelectedFields<SQLiteColumn>(this.config.fields);\n\t\tconst query = this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tthis.dialect.sqlToQuery(this.getSQL()),\n\t\t\tfieldsList,\n\t\t\t'all',\n\t\t\ttrue,\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\ttype: 'select',\n\t\t\t\ttables: [...this.usedTables],\n\t\t\t},\n\t\t\tthis.cacheConfig,\n\t\t);\n\t\tquery.joinsNotNullableMap = this.joinsNotNullableMap;\n\t\treturn query as ReturnType<this['prepare']>;\n\t}\n\n\t$withCache(config?: { config?: CacheConfig; tag?: string; autoInvalidate?: boolean } | false) {\n\t\tthis.cacheConfig = config === undefined\n\t\t\t? { config: {}, enable: true, autoInvalidate: true }\n\t\t\t: config === false\n\t\t\t? { enable: false }\n\t\t\t: { enable: true, autoInvalidate: true, ...config };\n\t\treturn this;\n\t}\n\n\tprepare(): SQLiteSelectPrepare<this> {\n\t\treturn this._prepare(false);\n\t}\n\n\trun: ReturnType<this['prepare']>['run'] = (placeholderValues) => {\n\t\treturn this._prepare().run(placeholderValues);\n\t};\n\n\tall: ReturnType<this['prepare']>['all'] = (placeholderValues) => {\n\t\treturn this._prepare().all(placeholderValues);\n\t};\n\n\tget: ReturnType<this['prepare']>['get'] = (placeholderValues) => {\n\t\treturn this._prepare().get(placeholderValues);\n\t};\n\n\tvalues: ReturnType<this['prepare']>['values'] = (placeholderValues) => {\n\t\treturn this._prepare().values(placeholderValues);\n\t};\n\n\tasync execute(): Promise<SQLiteSelectExecute<this>> {\n\t\treturn this.all() as SQLiteSelectExecute<this>;\n\t}\n}\n\napplyMixins(SQLiteSelectBase, [QueryPromise]);\n\nfunction createSetOperator(type: SetOperator, isAll: boolean): SQLiteCreateSetOperatorFn {\n\treturn (leftSelect, rightSelect, ...restSelects) => {\n\t\tconst setOperators = [rightSelect, ...restSelects].map((select) => ({\n\t\t\ttype,\n\t\t\tisAll,\n\t\t\trightSelect: select as AnySQLiteSelect,\n\t\t}));\n\n\t\tfor (const setOperator of setOperators) {\n\t\t\tif (!haveSameKeys((leftSelect as any).getSelectedFields(), setOperator.rightSelect.getSelectedFields())) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Set operator error (union / intersect / except): selected fields are not the same or are in a different order',\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn (leftSelect as AnySQLiteSelect).addSetOperators(setOperators) as any;\n\t};\n}\n\nconst getSQLiteSetOperators = () => ({\n\tunion,\n\tunionAll,\n\tintersect,\n\texcept,\n});\n\n/**\n * Adds `union` set operator to the query.\n *\n * Calling this method will combine the result sets of the `select` statements and remove any duplicate rows that appear across them.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#union}\n *\n * @example\n *\n * ```ts\n * // Select all unique names from customers and users tables\n * import { union } from 'drizzle-orm/sqlite-core'\n *\n * await union(\n * db.select({ name: users.name }).from(users),\n * db.select({ name: customers.name }).from(customers)\n * );\n * // or\n * await db.select({ name: users.name })\n * .from(users)\n * .union(\n * db.select({ name: customers.name }).from(customers)\n * );\n * ```\n */\nexport const union = createSetOperator('union', false);\n\n/**\n * Adds `union all` set operator to the query.\n *\n * Calling this method will combine the result-set of the `select` statements and keep all duplicate rows that appear across them.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#union-all}\n *\n * @example\n *\n * ```ts\n * // Select all transaction ids from both online and in-store sales\n * import { unionAll } from 'drizzle-orm/sqlite-core'\n *\n * await unionAll(\n * db.select({ transaction: onlineSales.transactionId }).from(onlineSales),\n * db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n * );\n * // or\n * await db.select({ transaction: onlineSales.transactionId })\n * .from(onlineSales)\n * .unionAll(\n * db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n * );\n * ```\n */\nexport const unionAll = createSetOperator('union', true);\n\n/**\n * Adds `intersect` set operator to the query.\n *\n * Calling this method will retain only the rows that are present in both result sets and eliminate duplicates.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#intersect}\n *\n * @example\n *\n * ```ts\n * // Select course names that are offered in both departments A and B\n * import { intersect } from 'drizzle-orm/sqlite-core'\n *\n * await intersect(\n * db.select({ courseName: depA.courseName }).from(depA),\n * db.select({ courseName: depB.courseName }).from(depB)\n * );\n * // or\n * await db.select({ courseName: depA.courseName })\n * .from(depA)\n * .intersect(\n * db.select({ courseName: depB.courseName }).from(depB)\n * );\n * ```\n */\nexport const intersect = createSetOperator('intersect', false);\n\n/**\n * Adds `except` set operator to the query.\n *\n * Calling this method will retrieve all unique rows from the left query, except for the rows that are present in the result set of the right query.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#except}\n *\n * @example\n *\n * ```ts\n * // Select all courses offered in department A but not in department B\n * import { except } from 'drizzle-orm/sqlite-core'\n *\n * await except(\n * db.select({ courseName: depA.courseName }).from(depA),\n * db.select({ courseName: depB.courseName }).from(depB)\n * );\n * // or\n * await db.select({ courseName: depA.courseName })\n * .from(depA)\n * .except(\n * db.select({ courseName: depB.courseName }).from(depB)\n * );\n * ```\n */\nexport const except = createSetOperator('except', false);\n","import { entityKind, is } from '~/entity.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { ColumnsSelection, SQL } from '~/sql/sql.ts';\nimport type { SQLiteDialectConfig } from '~/sqlite-core/dialect.ts';\nimport { SQLiteDialect, SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport type { WithBuilder } from '~/sqlite-core/subquery.ts';\nimport { WithSubquery } from '~/subquery.ts';\nimport { SQLiteSelectBuilder } from './select.ts';\nimport type { SelectedFields } from './select.types.ts';\n\nexport class QueryBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteQueryBuilder';\n\n\tprivate dialect: SQLiteDialect | undefined;\n\tprivate dialectConfig: SQLiteDialectConfig | undefined;\n\n\tconstructor(dialect?: SQLiteDialect | SQLiteDialectConfig) {\n\t\tthis.dialect = is(dialect, SQLiteDialect) ? dialect : undefined;\n\t\tthis.dialectConfig = is(dialect, SQLiteDialect) ? undefined : dialect;\n\t}\n\n\t$with: WithBuilder = (alias: string, selection?: ColumnsSelection) => {\n\t\tconst queryBuilder = this;\n\t\tconst as = (\n\t\t\tqb:\n\t\t\t\t| TypedQueryBuilder<ColumnsSelection | undefined>\n\t\t\t\t| SQL\n\t\t\t\t| ((qb: QueryBuilder) => TypedQueryBuilder<ColumnsSelection | undefined> | SQL),\n\t\t) => {\n\t\t\tif (typeof qb === 'function') {\n\t\t\t\tqb = qb(queryBuilder);\n\t\t\t}\n\n\t\t\treturn new Proxy(\n\t\t\t\tnew WithSubquery(\n\t\t\t\t\tqb.getSQL(),\n\t\t\t\t\tselection ?? ('getSelectedFields' in qb ? qb.getSelectedFields() ?? {} : {}) as SelectedFields,\n\t\t\t\t\talias,\n\t\t\t\t\ttrue,\n\t\t\t\t),\n\t\t\t\tnew SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t\t) as any;\n\t\t};\n\t\treturn { as };\n\t};\n\n\twith(...queries: WithSubquery[]) {\n\t\tconst self = this;\n\n\t\tfunction select(): SQLiteSelectBuilder<undefined, 'sync', void, 'qb'>;\n\t\tfunction select<TSelection extends SelectedFields>(\n\t\t\tfields: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection, 'sync', void, 'qb'>;\n\t\tfunction select<TSelection extends SelectedFields>(\n\t\t\tfields?: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection | undefined, 'sync', void, 'qb'> {\n\t\t\treturn new SQLiteSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: undefined,\n\t\t\t\tdialect: self.getDialect(),\n\t\t\t\twithList: queries,\n\t\t\t});\n\t\t}\n\n\t\tfunction selectDistinct(): SQLiteSelectBuilder<undefined, 'sync', void, 'qb'>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(\n\t\t\tfields: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection, 'sync', void, 'qb'>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(\n\t\t\tfields?: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection | undefined, 'sync', void, 'qb'> {\n\t\t\treturn new SQLiteSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: undefined,\n\t\t\t\tdialect: self.getDialect(),\n\t\t\t\twithList: queries,\n\t\t\t\tdistinct: true,\n\t\t\t});\n\t\t}\n\n\t\treturn { select, selectDistinct };\n\t}\n\n\tselect(): SQLiteSelectBuilder<undefined, 'sync', void, 'qb'>;\n\tselect<TSelection extends SelectedFields>(\n\t\tfields: TSelection,\n\t): SQLiteSelectBuilder<TSelection, 'sync', void, 'qb'>;\n\tselect<TSelection extends SelectedFields>(\n\t\tfields?: TSelection,\n\t): SQLiteSelectBuilder<TSelection | undefined, 'sync', void, 'qb'> {\n\t\treturn new SQLiteSelectBuilder({ fields: fields ?? undefined, session: undefined, dialect: this.getDialect() });\n\t}\n\n\tselectDistinct(): SQLiteSelectBuilder<undefined, 'sync', void, 'qb'>;\n\tselectDistinct<TSelection extends SelectedFields>(\n\t\tfields: TSelection,\n\t): SQLiteSelectBuilder<TSelection, 'sync', void, 'qb'>;\n\tselectDistinct<TSelection extends SelectedFields>(\n\t\tfields?: TSelection,\n\t): SQLiteSelectBuilder<TSelection | undefined, 'sync', void, 'qb'> {\n\t\treturn new SQLiteSelectBuilder({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: undefined,\n\t\t\tdialect: this.getDialect(),\n\t\t\tdistinct: true,\n\t\t});\n\t}\n\n\t// Lazy load dialect to avoid circular dependency\n\tprivate getDialect() {\n\t\tif (!this.dialect) {\n\t\t\tthis.dialect = new SQLiteSyncDialect(this.dialectConfig);\n\t\t}\n\n\t\treturn this.dialect;\n\t}\n}\n","import { entityKind, is } from '~/entity.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type { SelectResultFields } from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport type { Placeholder, Query, SQLWrapper } from '~/sql/sql.ts';\nimport { Param, SQL, sql } from '~/sql/sql.ts';\nimport type { SQLiteDialect } from '~/sqlite-core/dialect.ts';\nimport type { IndexColumn } from '~/sqlite-core/indexes.ts';\nimport type { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport type { Subquery } from '~/subquery.ts';\nimport { Columns, Table } from '~/table.ts';\nimport { type DrizzleTypeError, haveSameKeys, mapUpdateSet, orderSelectedFields, type Simplify } from '~/utils.ts';\nimport type { AnySQLiteColumn, SQLiteColumn } from '../columns/common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport { QueryBuilder } from './query-builder.ts';\nimport type { SelectedFieldsFlat, SelectedFieldsOrdered } from './select.types.ts';\nimport type { SQLiteUpdateSetSource } from './update.ts';\n\nexport interface SQLiteInsertConfig<TTable extends SQLiteTable = SQLiteTable> {\n\ttable: TTable;\n\tvalues: Record<string, Param | SQL>[] | SQLiteInsertSelectQueryBuilder<TTable> | SQL;\n\twithList?: Subquery[];\n\tonConflict?: SQL[];\n\treturning?: SelectedFieldsOrdered;\n\tselect?: boolean;\n}\n\nexport type SQLiteInsertValue<TTable extends SQLiteTable> = Simplify<\n\t{\n\t\t[Key in keyof TTable['$inferInsert']]: TTable['$inferInsert'][Key] | SQL | Placeholder;\n\t}\n>;\n\nexport type SQLiteInsertSelectQueryBuilder<TTable extends SQLiteTable> = TypedQueryBuilder<\n\t{ [K in keyof TTable['$inferInsert']]: AnySQLiteColumn | SQL | SQL.Aliased | TTable['$inferInsert'][K] }\n>;\n\nexport class SQLiteInsertBuilder<\n\tTTable extends SQLiteTable,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteInsertBuilder';\n\n\tconstructor(\n\t\tprotected table: TTable,\n\t\tprotected session: SQLiteSession<any, any, any, any>,\n\t\tprotected dialect: SQLiteDialect,\n\t\tprivate withList?: Subquery[],\n\t) {}\n\n\tvalues(value: SQLiteInsertValue<TTable>): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tvalues(values: SQLiteInsertValue<TTable>[]): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tvalues(\n\t\tvalues: SQLiteInsertValue<TTable> | SQLiteInsertValue<TTable>[],\n\t): SQLiteInsertBase<TTable, TResultType, TRunResult> {\n\t\tvalues = Array.isArray(values) ? values : [values];\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('values() must be called with at least one value');\n\t\t}\n\t\tconst mappedValues = values.map((entry) => {\n\t\t\tconst result: Record<string, Param | SQL> = {};\n\t\t\tconst cols = this.table[Table.Symbol.Columns];\n\t\t\tfor (const colKey of Object.keys(entry)) {\n\t\t\t\tconst colValue = entry[colKey as keyof typeof entry];\n\t\t\t\tresult[colKey] = is(colValue, SQL) ? colValue : new Param(colValue, cols[colKey]);\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\n\t\t// if (mappedValues.length > 1 && mappedValues.some((t) => Object.keys(t).length === 0)) {\n\t\t// \tthrow new Error(\n\t\t// \t\t`One of the values you want to insert is empty. In SQLite you can insert only one empty object per statement. For this case Drizzle with use \"INSERT INTO ... DEFAULT VALUES\" syntax`,\n\t\t// \t);\n\t\t// }\n\n\t\treturn new SQLiteInsertBase(this.table, mappedValues, this.session, this.dialect, this.withList);\n\t}\n\n\tselect(\n\t\tselectQuery: (qb: QueryBuilder) => SQLiteInsertSelectQueryBuilder<TTable>,\n\t): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tselect(selectQuery: (qb: QueryBuilder) => SQL): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tselect(selectQuery: SQL): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tselect(selectQuery: SQLiteInsertSelectQueryBuilder<TTable>): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tselect(\n\t\tselectQuery:\n\t\t\t| SQL\n\t\t\t| SQLiteInsertSelectQueryBuilder<TTable>\n\t\t\t| ((qb: QueryBuilder) => SQLiteInsertSelectQueryBuilder<TTable> | SQL),\n\t): SQLiteInsertBase<TTable, TResultType, TRunResult> {\n\t\tconst select = typeof selectQuery === 'function' ? selectQuery(new QueryBuilder()) : selectQuery;\n\n\t\tif (\n\t\t\t!is(select, SQL)\n\t\t\t&& !haveSameKeys(this.table[Columns], select._.selectedFields)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t'Insert select error: selected fields are not the same or are in a different order compared to the table definition',\n\t\t\t);\n\t\t}\n\n\t\treturn new SQLiteInsertBase(this.table, select, this.session, this.dialect, this.withList, true);\n\t}\n}\n\nexport type SQLiteInsertWithout<T extends AnySQLiteInsert, TDynamic extends boolean, K extends keyof T & string> =\n\tTDynamic extends true ? T\n\t\t: Omit<\n\t\t\tSQLiteInsertBase<\n\t\t\t\tT['_']['table'],\n\t\t\t\tT['_']['resultType'],\n\t\t\t\tT['_']['runResult'],\n\t\t\t\tT['_']['returning'],\n\t\t\t\tTDynamic,\n\t\t\t\tT['_']['excludedMethods'] | K\n\t\t\t>,\n\t\t\tT['_']['excludedMethods'] | K\n\t\t>;\n\nexport type SQLiteInsertReturning<\n\tT extends AnySQLiteInsert,\n\tTDynamic extends boolean,\n\tTSelectedFields extends SelectedFieldsFlat,\n> = SQLiteInsertWithout<\n\tSQLiteInsertBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tSelectResultFields<TSelectedFields>,\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteInsertReturningAll<\n\tT extends AnySQLiteInsert,\n\tTDynamic extends boolean,\n> = SQLiteInsertWithout<\n\tSQLiteInsertBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['table']['$inferSelect'],\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteInsertOnConflictDoUpdateConfig<T extends AnySQLiteInsert> = {\n\ttarget: IndexColumn | IndexColumn[];\n\t/** @deprecated - use either `targetWhere` or `setWhere` */\n\twhere?: SQL;\n\t// TODO: add tests for targetWhere and setWhere\n\ttargetWhere?: SQL;\n\tsetWhere?: SQL;\n\tset: SQLiteUpdateSetSource<T['_']['table']>;\n};\n\nexport type SQLiteInsertDynamic<T extends AnySQLiteInsert> = SQLiteInsert<\n\tT['_']['table'],\n\tT['_']['resultType'],\n\tT['_']['runResult'],\n\tT['_']['returning']\n>;\n\nexport type SQLiteInsertExecute<T extends AnySQLiteInsert> = T['_']['returning'] extends undefined ? T['_']['runResult']\n\t: T['_']['returning'][];\n\nexport type SQLiteInsertPrepare<T extends AnySQLiteInsert> = SQLitePreparedQuery<\n\t{\n\t\ttype: T['_']['resultType'];\n\t\trun: T['_']['runResult'];\n\t\tall: T['_']['returning'] extends undefined ? DrizzleTypeError<'.all() cannot be used without .returning()'>\n\t\t\t: T['_']['returning'][];\n\t\tget: T['_']['returning'] extends undefined ? DrizzleTypeError<'.get() cannot be used without .returning()'>\n\t\t\t: T['_']['returning'];\n\t\tvalues: T['_']['returning'] extends undefined ? DrizzleTypeError<'.values() cannot be used without .returning()'>\n\t\t\t: any[][];\n\t\texecute: SQLiteInsertExecute<T>;\n\t}\n>;\n\nexport type AnySQLiteInsert = SQLiteInsertBase<any, any, any, any, any, any>;\n\nexport type SQLiteInsert<\n\tTTable extends SQLiteTable = SQLiteTable,\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = unknown,\n\tTReturning = any,\n> = SQLiteInsertBase<TTable, TResultType, TRunResult, TReturning, true, never>;\n\nexport interface SQLiteInsertBase<\n\tTTable extends SQLiteTable,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTReturning = undefined,\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n> extends\n\tSQLWrapper,\n\tQueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>,\n\tRunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>\n{\n\treadonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly table: TTable;\n\t\treadonly resultType: TResultType;\n\t\treadonly runResult: TRunResult;\n\t\treadonly returning: TReturning;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TReturning extends undefined ? TRunResult : TReturning[];\n\t};\n}\n\nexport class SQLiteInsertBase<\n\tTTable extends SQLiteTable,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTReturning = undefined,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTDynamic extends boolean = false,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>\n\timplements RunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteInsert';\n\n\t/** @internal */\n\tconfig: SQLiteInsertConfig<TTable>;\n\n\tconstructor(\n\t\ttable: TTable,\n\t\tvalues: SQLiteInsertConfig['values'],\n\t\tprivate session: SQLiteSession<any, any, any, any>,\n\t\tprivate dialect: SQLiteDialect,\n\t\twithList?: Subquery[],\n\t\tselect?: boolean,\n\t) {\n\t\tsuper();\n\t\tthis.config = { table, values: values as any, withList, select };\n\t}\n\n\t/**\n\t * Adds a `returning` clause to the query.\n\t *\n\t * Calling this method will return the specified fields of the inserted rows. If no fields are specified, all fields will be returned.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert#insert-returning}\n\t *\n\t * @example\n\t * ```ts\n\t * // Insert one row and return all fields\n\t * const insertedCar: Car[] = await db.insert(cars)\n\t * .values({ brand: 'BMW' })\n\t * .returning();\n\t *\n\t * // Insert one row and return only the id\n\t * const insertedCarId: { id: number }[] = await db.insert(cars)\n\t * .values({ brand: 'BMW' })\n\t * .returning({ id: cars.id });\n\t * ```\n\t */\n\treturning(): SQLiteInsertReturningAll<this, TDynamic>;\n\treturning<TSelectedFields extends SelectedFieldsFlat>(\n\t\tfields: TSelectedFields,\n\t): SQLiteInsertReturning<this, TDynamic, TSelectedFields>;\n\treturning(\n\t\tfields: SelectedFieldsFlat = this.config.table[SQLiteTable.Symbol.Columns],\n\t): SQLiteInsertWithout<AnySQLiteInsert, TDynamic, 'returning'> {\n\t\tthis.config.returning = orderSelectedFields<SQLiteColumn>(fields);\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds an `on conflict do nothing` clause to the query.\n\t *\n\t * Calling this method simply avoids inserting a row as its alternative action.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert#on-conflict-do-nothing}\n\t *\n\t * @param config The `target` and `where` clauses.\n\t *\n\t * @example\n\t * ```ts\n\t * // Insert one row and cancel the insert if there's a conflict\n\t * await db.insert(cars)\n\t * .values({ id: 1, brand: 'BMW' })\n\t * .onConflictDoNothing();\n\t *\n\t * // Explicitly specify conflict target\n\t * await db.insert(cars)\n\t * .values({ id: 1, brand: 'BMW' })\n\t * .onConflictDoNothing({ target: cars.id });\n\t * ```\n\t */\n\tonConflictDoNothing(config: { target?: IndexColumn | IndexColumn[]; where?: SQL } = {}): this {\n\t\tif (!this.config.onConflict) this.config.onConflict = [];\n\n\t\tif (config.target === undefined) {\n\t\t\tthis.config.onConflict.push(sql` on conflict do nothing`);\n\t\t} else {\n\t\t\tconst targetSql = Array.isArray(config.target) ? sql`${config.target}` : sql`${[config.target]}`;\n\t\t\tconst whereSql = config.where ? sql` where ${config.where}` : sql``;\n\t\t\tthis.config.onConflict.push(sql` on conflict ${targetSql} do nothing${whereSql}`);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds an `on conflict do update` clause to the query.\n\t *\n\t * Calling this method will update the existing row that conflicts with the row proposed for insertion as its alternative action.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert#upserts-and-conflicts}\n\t *\n\t * @param config The `target`, `set` and `where` clauses.\n\t *\n\t * @example\n\t * ```ts\n\t * // Update the row if there's a conflict\n\t * await db.insert(cars)\n\t * .values({ id: 1, brand: 'BMW' })\n\t * .onConflictDoUpdate({\n\t * target: cars.id,\n\t * set: { brand: 'Porsche' }\n\t * });\n\t *\n\t * // Upsert with 'where' clause\n\t * await db.insert(cars)\n\t * .values({ id: 1, brand: 'BMW' })\n\t * .onConflictDoUpdate({\n\t * target: cars.id,\n\t * set: { brand: 'newBMW' },\n\t * where: sql`${cars.createdAt} > '2023-01-01'::date`,\n\t * });\n\t * ```\n\t */\n\tonConflictDoUpdate(config: SQLiteInsertOnConflictDoUpdateConfig<this>): this {\n\t\tif (config.where && (config.targetWhere || config.setWhere)) {\n\t\t\tthrow new Error(\n\t\t\t\t'You cannot use both \"where\" and \"targetWhere\"/\"setWhere\" at the same time - \"where\" is deprecated, use \"targetWhere\" or \"setWhere\" instead.',\n\t\t\t);\n\t\t}\n\n\t\tif (!this.config.onConflict) this.config.onConflict = [];\n\n\t\tconst whereSql = config.where ? sql` where ${config.where}` : undefined;\n\t\tconst targetWhereSql = config.targetWhere ? sql` where ${config.targetWhere}` : undefined;\n\t\tconst setWhereSql = config.setWhere ? sql` where ${config.setWhere}` : undefined;\n\t\tconst targetSql = Array.isArray(config.target) ? sql`${config.target}` : sql`${[config.target]}`;\n\t\tconst setSql = this.dialect.buildUpdateSet(this.config.table, mapUpdateSet(this.config.table, config.set));\n\t\tthis.config.onConflict.push(\n\t\t\tsql` on conflict ${targetSql}${targetWhereSql} do update set ${setSql}${whereSql}${setWhereSql}`,\n\t\t);\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildInsertQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\t/** @internal */\n\t_prepare(isOneTimeQuery = true): SQLiteInsertPrepare<this> {\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tthis.dialect.sqlToQuery(this.getSQL()),\n\t\t\tthis.config.returning,\n\t\t\tthis.config.returning ? 'all' : 'run',\n\t\t\ttrue,\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\ttype: 'insert',\n\t\t\t\ttables: extractUsedTable(this.config.table),\n\t\t\t},\n\t\t) as SQLiteInsertPrepare<this>;\n\t}\n\n\tprepare(): SQLiteInsertPrepare<this> {\n\t\treturn this._prepare(false);\n\t}\n\n\trun: ReturnType<this['prepare']>['run'] = (placeholderValues) => {\n\t\treturn this._prepare().run(placeholderValues);\n\t};\n\n\tall: ReturnType<this['prepare']>['all'] = (placeholderValues) => {\n\t\treturn this._prepare().all(placeholderValues);\n\t};\n\n\tget: ReturnType<this['prepare']>['get'] = (placeholderValues) => {\n\t\treturn this._prepare().get(placeholderValues);\n\t};\n\n\tvalues: ReturnType<this['prepare']>['values'] = (placeholderValues) => {\n\t\treturn this._prepare().values(placeholderValues);\n\t};\n\n\toverride async execute(): Promise<SQLiteInsertExecute<this>> {\n\t\treturn (this.config.returning ? this.all() : this.run()) as SQLiteInsertExecute<this>;\n\t}\n\n\t$dynamic(): SQLiteInsertDynamic<this> {\n\t\treturn this as any;\n\t}\n}\n","import type { GetColumnData } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { JoinType, SelectResultFields } from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { Placeholder, Query, SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteDialect } from '~/sqlite-core/dialect.ts';\nimport type { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { Table } from '~/table.ts';\nimport {\n\ttype DrizzleTypeError,\n\tgetTableLikeName,\n\tmapUpdateSet,\n\torderSelectedFields,\n\ttype UpdateSet,\n\ttype ValueOrArray,\n} from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type { SQLiteColumn } from '../columns/common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport { SQLiteViewBase } from '../view-base.ts';\nimport type { SelectedFields, SelectedFieldsOrdered, SQLiteSelectJoinConfig } from './select.types.ts';\n\nexport interface SQLiteUpdateConfig {\n\twhere?: SQL | undefined;\n\tlimit?: number | Placeholder;\n\torderBy?: (SQLiteColumn | SQL | SQL.Aliased)[];\n\tset: UpdateSet;\n\ttable: SQLiteTable;\n\tfrom?: SQLiteTable | Subquery | SQLiteViewBase | SQL;\n\tjoins: SQLiteSelectJoinConfig[];\n\treturning?: SelectedFieldsOrdered;\n\twithList?: Subquery[];\n}\n\nexport type SQLiteUpdateSetSource<TTable extends SQLiteTable> =\n\t& {\n\t\t[Key in keyof TTable['$inferInsert']]?:\n\t\t\t| GetColumnData<TTable['_']['columns'][Key], 'query'>\n\t\t\t| SQL\n\t\t\t| SQLiteColumn\n\t\t\t| undefined;\n\t}\n\t& {};\n\nexport class SQLiteUpdateBuilder<\n\tTTable extends SQLiteTable,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteUpdateBuilder';\n\n\tdeclare readonly _: {\n\t\treadonly table: TTable;\n\t};\n\n\tconstructor(\n\t\tprotected table: TTable,\n\t\tprotected session: SQLiteSession<any, any, any, any>,\n\t\tprotected dialect: SQLiteDialect,\n\t\tprivate withList?: Subquery[],\n\t) {}\n\n\tset(\n\t\tvalues: SQLiteUpdateSetSource<TTable>,\n\t): SQLiteUpdateWithout<\n\t\tSQLiteUpdateBase<TTable, TResultType, TRunResult>,\n\t\tfalse,\n\t\t'leftJoin' | 'rightJoin' | 'innerJoin' | 'fullJoin'\n\t> {\n\t\treturn new SQLiteUpdateBase(\n\t\t\tthis.table,\n\t\t\tmapUpdateSet(this.table, values),\n\t\t\tthis.session,\n\t\t\tthis.dialect,\n\t\t\tthis.withList,\n\t\t) as any;\n\t}\n}\n\nexport type SQLiteUpdateWithout<\n\tT extends AnySQLiteUpdate,\n\tTDynamic extends boolean,\n\tK extends keyof T & string,\n> = TDynamic extends true ? T : Omit<\n\tSQLiteUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['from'],\n\t\tT['_']['returning'],\n\t\tTDynamic,\n\t\tT['_']['excludedMethods'] | K\n\t>,\n\tT['_']['excludedMethods'] | K\n>;\n\nexport type SQLiteUpdateWithJoins<\n\tT extends AnySQLiteUpdate,\n\tTDynamic extends boolean,\n\tTFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL,\n> = TDynamic extends true ? T : Omit<\n\tSQLiteUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tTFrom,\n\t\tT['_']['returning'],\n\t\tTDynamic,\n\t\tExclude<T['_']['excludedMethods'] | 'from', 'leftJoin' | 'rightJoin' | 'innerJoin' | 'fullJoin'>\n\t>,\n\tExclude<T['_']['excludedMethods'] | 'from', 'leftJoin' | 'rightJoin' | 'innerJoin' | 'fullJoin'>\n>;\n\nexport type SQLiteUpdateReturningAll<T extends AnySQLiteUpdate, TDynamic extends boolean> = SQLiteUpdateWithout<\n\tSQLiteUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['from'],\n\t\tT['_']['table']['$inferSelect'],\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteUpdateReturning<\n\tT extends AnySQLiteUpdate,\n\tTDynamic extends boolean,\n\tTSelectedFields extends SelectedFields,\n> = SQLiteUpdateWithout<\n\tSQLiteUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['from'],\n\t\tSelectResultFields<TSelectedFields>,\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteUpdateExecute<T extends AnySQLiteUpdate> = T['_']['returning'] extends undefined ? T['_']['runResult']\n\t: T['_']['returning'][];\n\nexport type SQLiteUpdatePrepare<T extends AnySQLiteUpdate> = SQLitePreparedQuery<\n\t{\n\t\ttype: T['_']['resultType'];\n\t\trun: T['_']['runResult'];\n\t\tall: T['_']['returning'] extends undefined ? DrizzleTypeError<'.all() cannot be used without .returning()'>\n\t\t\t: T['_']['returning'][];\n\t\tget: T['_']['returning'] extends undefined ? DrizzleTypeError<'.get() cannot be used without .returning()'>\n\t\t\t: T['_']['returning'];\n\t\tvalues: T['_']['returning'] extends undefined ? DrizzleTypeError<'.values() cannot be used without .returning()'>\n\t\t\t: any[][];\n\t\texecute: SQLiteUpdateExecute<T>;\n\t}\n>;\n\nexport type SQLiteUpdateJoinFn<\n\tT extends AnySQLiteUpdate,\n> = <\n\tTJoinedTable extends SQLiteTable | Subquery | SQLiteViewBase | SQL,\n>(\n\ttable: TJoinedTable,\n\ton:\n\t\t| (\n\t\t\t(\n\t\t\t\tupdateTable: T['_']['table']['_']['columns'],\n\t\t\t\tfrom: T['_']['from'] extends SQLiteTable ? T['_']['from']['_']['columns']\n\t\t\t\t\t: T['_']['from'] extends Subquery | SQLiteViewBase ? T['_']['from']['_']['selectedFields']\n\t\t\t\t\t: never,\n\t\t\t) => SQL | undefined\n\t\t)\n\t\t| SQL\n\t\t| undefined,\n) => T;\n\nexport type SQLiteUpdateDynamic<T extends AnySQLiteUpdate> = SQLiteUpdate<\n\tT['_']['table'],\n\tT['_']['resultType'],\n\tT['_']['runResult'],\n\tT['_']['returning']\n>;\n\nexport type SQLiteUpdate<\n\tTTable extends SQLiteTable = SQLiteTable,\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = any,\n\tTFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL | undefined = undefined,\n\tTReturning extends Record<string, unknown> | undefined = Record<string, unknown> | undefined,\n> = SQLiteUpdateBase<TTable, TResultType, TRunResult, TFrom, TReturning, true, never>;\n\nexport type AnySQLiteUpdate = SQLiteUpdateBase<any, any, any, any, any, any, any>;\n\nexport interface SQLiteUpdateBase<\n\tTTable extends SQLiteTable = SQLiteTable,\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = unknown,\n\tTFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL | undefined = undefined,\n\tTReturning = undefined,\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n> extends SQLWrapper, QueryPromise<TReturning extends undefined ? TRunResult : TReturning[]> {\n\treadonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly table: TTable;\n\t\treadonly resultType: TResultType;\n\t\treadonly runResult: TRunResult;\n\t\treadonly from: TFrom;\n\t\treadonly returning: TReturning;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TReturning extends undefined ? TRunResult : TReturning[];\n\t};\n}\n\nexport class SQLiteUpdateBase<\n\tTTable extends SQLiteTable = SQLiteTable,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = unknown,\n\tTFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL | undefined = undefined,\n\tTReturning = undefined,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTDynamic extends boolean = false,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>\n\timplements RunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteUpdate';\n\n\t/** @internal */\n\tconfig: SQLiteUpdateConfig;\n\n\tconstructor(\n\t\ttable: TTable,\n\t\tset: UpdateSet,\n\t\tprivate session: SQLiteSession<any, any, any, any>,\n\t\tprivate dialect: SQLiteDialect,\n\t\twithList?: Subquery[],\n\t) {\n\t\tsuper();\n\t\tthis.config = { set, table, withList, joins: [] };\n\t}\n\n\tfrom<TFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL>(\n\t\tsource: TFrom,\n\t): SQLiteUpdateWithJoins<this, TDynamic, TFrom> {\n\t\tthis.config.from = source;\n\t\treturn this as any;\n\t}\n\n\tprivate createJoin<TJoinType extends JoinType>(\n\t\tjoinType: TJoinType,\n\t): SQLiteUpdateJoinFn<this> {\n\t\treturn ((\n\t\t\ttable: SQLiteTable | Subquery | SQLiteViewBase | SQL,\n\t\t\ton: ((updateTable: TTable, from: TFrom) => SQL | undefined) | SQL | undefined,\n\t\t) => {\n\t\t\tconst tableName = getTableLikeName(table);\n\n\t\t\tif (typeof tableName === 'string' && this.config.joins.some((join) => join.alias === tableName)) {\n\t\t\t\tthrow new Error(`Alias \"${tableName}\" is already used in this query`);\n\t\t\t}\n\n\t\t\tif (typeof on === 'function') {\n\t\t\t\tconst from = this.config.from\n\t\t\t\t\t? is(table, SQLiteTable)\n\t\t\t\t\t\t? table[Table.Symbol.Columns]\n\t\t\t\t\t\t: is(table, Subquery)\n\t\t\t\t\t\t? table._.selectedFields\n\t\t\t\t\t\t: is(table, SQLiteViewBase)\n\t\t\t\t\t\t? table[ViewBaseConfig].selectedFields\n\t\t\t\t\t\t: undefined\n\t\t\t\t\t: undefined;\n\t\t\t\ton = on(\n\t\t\t\t\tnew Proxy(\n\t\t\t\t\t\tthis.config.table[Table.Symbol.Columns],\n\t\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t\t) as any,\n\t\t\t\t\tfrom && new Proxy(\n\t\t\t\t\t\tfrom,\n\t\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t\t) as any,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.config.joins.push({ on, table, joinType, alias: tableName });\n\n\t\t\treturn this as any;\n\t\t}) as any;\n\t}\n\n\tleftJoin = this.createJoin('left');\n\n\trightJoin = this.createJoin('right');\n\n\tinnerJoin = this.createJoin('inner');\n\n\tfullJoin = this.createJoin('full');\n\n\t/**\n\t * Adds a 'where' clause to the query.\n\t *\n\t * Calling this method will update only those rows that fulfill a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t *\n\t * @param where the 'where' clause.\n\t *\n\t * @example\n\t * You can use conditional operators and `sql function` to filter the rows to be updated.\n\t *\n\t * ```ts\n\t * // Update all cars with green color\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(eq(cars.color, 'green'));\n\t * // or\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(sql`${cars.color} = 'green'`)\n\t * ```\n\t *\n\t * You can logically combine conditional operators with `and()` and `or()` operators:\n\t *\n\t * ```ts\n\t * // Update all BMW cars with a green color\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));\n\t *\n\t * // Update all cars with the green or blue color\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));\n\t * ```\n\t */\n\twhere(where: SQL | undefined): SQLiteUpdateWithout<this, TDynamic, 'where'> {\n\t\tthis.config.where = where;\n\t\treturn this as any;\n\t}\n\n\torderBy(\n\t\tbuilder: (updateTable: TTable) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>,\n\t): SQLiteUpdateWithout<this, TDynamic, 'orderBy'>;\n\torderBy(...columns: (SQLiteColumn | SQL | SQL.Aliased)[]): SQLiteUpdateWithout<this, TDynamic, 'orderBy'>;\n\torderBy(\n\t\t...columns:\n\t\t\t| [(updateTable: TTable) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>]\n\t\t\t| (SQLiteColumn | SQL | SQL.Aliased)[]\n\t): SQLiteUpdateWithout<this, TDynamic, 'orderBy'> {\n\t\tif (typeof columns[0] === 'function') {\n\t\t\tconst orderBy = columns[0](\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.table[Table.Symbol.Columns],\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'alias', sqlBehavior: 'sql' }),\n\t\t\t\t) as any,\n\t\t\t);\n\n\t\t\tconst orderByArray = Array.isArray(orderBy) ? orderBy : [orderBy];\n\t\t\tthis.config.orderBy = orderByArray;\n\t\t} else {\n\t\t\tconst orderByArray = columns as (SQLiteColumn | SQL | SQL.Aliased)[];\n\t\t\tthis.config.orderBy = orderByArray;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\tlimit(limit: number | Placeholder): SQLiteUpdateWithout<this, TDynamic, 'limit'> {\n\t\tthis.config.limit = limit;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `returning` clause to the query.\n\t *\n\t * Calling this method will return the specified fields of the updated rows. If no fields are specified, all fields will be returned.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/update#update-with-returning}\n\t *\n\t * @example\n\t * ```ts\n\t * // Update all cars with the green color and return all fields\n\t * const updatedCars: Car[] = await db.update(cars)\n\t * .set({ color: 'red' })\n\t * .where(eq(cars.color, 'green'))\n\t * .returning();\n\t *\n\t * // Update all cars with the green color and return only their id and brand fields\n\t * const updatedCarsIdsAndBrands: { id: number, brand: string }[] = await db.update(cars)\n\t * .set({ color: 'red' })\n\t * .where(eq(cars.color, 'green'))\n\t * .returning({ id: cars.id, brand: cars.brand });\n\t * ```\n\t */\n\treturning(): SQLiteUpdateReturningAll<this, TDynamic>;\n\treturning<TSelectedFields extends SelectedFields>(\n\t\tfields: TSelectedFields,\n\t): SQLiteUpdateReturning<this, TDynamic, TSelectedFields>;\n\treturning(\n\t\tfields: SelectedFields = this.config.table[SQLiteTable.Symbol.Columns],\n\t): SQLiteUpdateWithout<AnySQLiteUpdate, TDynamic, 'returning'> {\n\t\tthis.config.returning = orderSelectedFields<SQLiteColumn>(fields);\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildUpdateQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\t/** @internal */\n\t_prepare(isOneTimeQuery = true): SQLiteUpdatePrepare<this> {\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tthis.dialect.sqlToQuery(this.getSQL()),\n\t\t\tthis.config.returning,\n\t\t\tthis.config.returning ? 'all' : 'run',\n\t\t\ttrue,\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\ttype: 'insert',\n\t\t\t\ttables: extractUsedTable(this.config.table),\n\t\t\t},\n\t\t) as SQLiteUpdatePrepare<this>;\n\t}\n\n\tprepare(): SQLiteUpdatePrepare<this> {\n\t\treturn this._prepare(false);\n\t}\n\n\trun: ReturnType<this['prepare']>['run'] = (placeholderValues) => {\n\t\treturn this._prepare().run(placeholderValues);\n\t};\n\n\tall: ReturnType<this['prepare']>['all'] = (placeholderValues) => {\n\t\treturn this._prepare().all(placeholderValues);\n\t};\n\n\tget: ReturnType<this['prepare']>['get'] = (placeholderValues) => {\n\t\treturn this._prepare().get(placeholderValues);\n\t};\n\n\tvalues: ReturnType<this['prepare']>['values'] = (placeholderValues) => {\n\t\treturn this._prepare().values(placeholderValues);\n\t};\n\n\toverride async execute(): Promise<SQLiteUpdateExecute<this>> {\n\t\treturn (this.config.returning ? this.all() : this.run()) as SQLiteUpdateExecute<this>;\n\t}\n\n\t$dynamic(): SQLiteUpdateDynamic<this> {\n\t\treturn this as any;\n\t}\n}\n","import { entityKind } from '~/entity.ts';\nimport { SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteSession } from '../session.ts';\nimport type { SQLiteTable } from '../table.ts';\nimport type { SQLiteView } from '../view.ts';\n\nexport class SQLiteCountBuilder<\n\tTSession extends SQLiteSession<any, any, any, any>,\n> extends SQL<number> implements Promise<number>, SQLWrapper {\n\tprivate sql: SQL<number>;\n\n\tstatic override readonly [entityKind] = 'SQLiteCountBuilderAsync';\n\t[Symbol.toStringTag] = 'SQLiteCountBuilderAsync';\n\n\tprivate session: TSession;\n\n\tprivate static buildEmbeddedCount(\n\t\tsource: SQLiteTable | SQLiteView | SQL | SQLWrapper,\n\t\tfilters?: SQL<unknown>,\n\t): SQL<number> {\n\t\treturn sql<number>`(select count(*) from ${source}${sql.raw(' where ').if(filters)}${filters})`;\n\t}\n\n\tprivate static buildCount(\n\t\tsource: SQLiteTable | SQLiteView | SQL | SQLWrapper,\n\t\tfilters?: SQL<unknown>,\n\t): SQL<number> {\n\t\treturn sql<number>`select count(*) from ${source}${sql.raw(' where ').if(filters)}${filters}`;\n\t}\n\n\tconstructor(\n\t\treadonly params: {\n\t\t\tsource: SQLiteTable | SQLiteView | SQL | SQLWrapper;\n\t\t\tfilters?: SQL<unknown>;\n\t\t\tsession: TSession;\n\t\t},\n\t) {\n\t\tsuper(SQLiteCountBuilder.buildEmbeddedCount(params.source, params.filters).queryChunks);\n\n\t\tthis.session = params.session;\n\n\t\tthis.sql = SQLiteCountBuilder.buildCount(\n\t\t\tparams.source,\n\t\t\tparams.filters,\n\t\t);\n\t}\n\n\tthen<TResult1 = number, TResult2 = never>(\n\t\tonfulfilled?: ((value: number) => TResult1 | PromiseLike<TResult1>) | null | undefined,\n\t\tonrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined,\n\t): Promise<TResult1 | TResult2> {\n\t\treturn Promise.resolve(this.session.count(this.sql)).then(\n\t\t\tonfulfilled,\n\t\t\tonrejected,\n\t\t);\n\t}\n\n\tcatch(\n\t\tonRejected?: ((reason: any) => never | PromiseLike<never>) | null | undefined,\n\t): Promise<number> {\n\t\treturn this.then(undefined, onRejected);\n\t}\n\n\tfinally(onFinally?: (() => void) | null | undefined): Promise<number> {\n\t\treturn this.then(\n\t\t\t(value) => {\n\t\t\t\tonFinally?.();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\t(reason) => {\n\t\t\t\tonFinally?.();\n\t\t\t\tthrow reason;\n\t\t\t},\n\t\t);\n\t}\n}\n","import { entityKind } from '~/entity.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport {\n\ttype BuildQueryResult,\n\ttype BuildRelationalQueryResult,\n\ttype DBQueryConfig,\n\tmapRelationalRow,\n\ttype TableRelationalConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport type { Query, QueryWithTypings, SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { KnownKeysOnly } from '~/utils.ts';\nimport type { SQLiteDialect } from '../dialect.ts';\nimport type { PreparedQueryConfig, SQLitePreparedQuery, SQLiteSession } from '../session.ts';\nimport type { SQLiteTable } from '../table.ts';\n\nexport type SQLiteRelationalQueryKind<TMode extends 'sync' | 'async', TResult> = TMode extends 'async'\n\t? SQLiteRelationalQuery<TMode, TResult>\n\t: SQLiteSyncRelationalQuery<TResult>;\n\nexport class RelationalQueryBuilder<\n\tTMode extends 'sync' | 'async',\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n\tTFields extends TableRelationalConfig,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteAsyncRelationalQueryBuilder';\n\n\tconstructor(\n\t\tprotected mode: TMode,\n\t\tprotected fullSchema: Record<string, unknown>,\n\t\tprotected schema: TSchema,\n\t\tprotected tableNamesMap: Record<string, string>,\n\t\tprotected table: SQLiteTable,\n\t\tprotected tableConfig: TableRelationalConfig,\n\t\tprotected dialect: SQLiteDialect,\n\t\tprotected session: SQLiteSession<'async', unknown, TFullSchema, TSchema>,\n\t) {}\n\n\tfindMany<TConfig extends DBQueryConfig<'many', true, TSchema, TFields>>(\n\t\tconfig?: KnownKeysOnly<TConfig, DBQueryConfig<'many', true, TSchema, TFields>>,\n\t): SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]> {\n\t\treturn (this.mode === 'sync'\n\t\t\t? new SQLiteSyncRelationalQuery(\n\t\t\t\tthis.fullSchema,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig ? (config as DBQueryConfig<'many', true>) : {},\n\t\t\t\t'many',\n\t\t\t)\n\t\t\t: new SQLiteRelationalQuery(\n\t\t\t\tthis.fullSchema,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig ? (config as DBQueryConfig<'many', true>) : {},\n\t\t\t\t'many',\n\t\t\t)) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]>;\n\t}\n\n\tfindFirst<TSelection extends Omit<DBQueryConfig<'many', true, TSchema, TFields>, 'limit'>>(\n\t\tconfig?: KnownKeysOnly<TSelection, Omit<DBQueryConfig<'many', true, TSchema, TFields>, 'limit'>>,\n\t): SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TSelection> | undefined> {\n\t\treturn (this.mode === 'sync'\n\t\t\t? new SQLiteSyncRelationalQuery(\n\t\t\t\tthis.fullSchema,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig ? { ...(config as DBQueryConfig<'many', true> | undefined), limit: 1 } : { limit: 1 },\n\t\t\t\t'first',\n\t\t\t)\n\t\t\t: new SQLiteRelationalQuery(\n\t\t\t\tthis.fullSchema,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig ? { ...(config as DBQueryConfig<'many', true> | undefined), limit: 1 } : { limit: 1 },\n\t\t\t\t'first',\n\t\t\t)) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TSelection> | undefined>;\n\t}\n}\n\nexport class SQLiteRelationalQuery<TType extends 'sync' | 'async', TResult> extends QueryPromise<TResult>\n\timplements RunnableQuery<TResult, 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteAsyncRelationalQuery';\n\n\tdeclare readonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly type: TType;\n\t\treadonly result: TResult;\n\t};\n\n\t/** @internal */\n\tmode: 'many' | 'first';\n\n\tconstructor(\n\t\tprivate fullSchema: Record<string, unknown>,\n\t\tprivate schema: TablesRelationalConfig,\n\t\tprivate tableNamesMap: Record<string, string>,\n\t\t/** @internal */\n\t\tpublic table: SQLiteTable,\n\t\tprivate tableConfig: TableRelationalConfig,\n\t\tprivate dialect: SQLiteDialect,\n\t\tprivate session: SQLiteSession<'sync' | 'async', unknown, Record<string, unknown>, TablesRelationalConfig>,\n\t\tprivate config: DBQueryConfig<'many', true> | true,\n\t\tmode: 'many' | 'first',\n\t) {\n\t\tsuper();\n\t\tthis.mode = mode;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildRelationalQuery({\n\t\t\tfullSchema: this.fullSchema,\n\t\t\tschema: this.schema,\n\t\t\ttableNamesMap: this.tableNamesMap,\n\t\t\ttable: this.table,\n\t\t\ttableConfig: this.tableConfig,\n\t\t\tqueryConfig: this.config,\n\t\t\ttableAlias: this.tableConfig.tsName,\n\t\t}).sql as SQL;\n\t}\n\n\t/** @internal */\n\t_prepare(\n\t\tisOneTimeQuery = false,\n\t): SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }> {\n\t\tconst { query, builtQuery } = this._toSQL();\n\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tbuiltQuery,\n\t\t\tundefined,\n\t\t\tthis.mode === 'first' ? 'get' : 'all',\n\t\t\ttrue,\n\t\t\t(rawRows, mapColumnValue) => {\n\t\t\t\tconst rows = rawRows.map((row) =>\n\t\t\t\t\tmapRelationalRow(this.schema, this.tableConfig, row, query.selection, mapColumnValue)\n\t\t\t\t);\n\t\t\t\tif (this.mode === 'first') {\n\t\t\t\t\treturn rows[0] as TResult;\n\t\t\t\t}\n\t\t\t\treturn rows as TResult;\n\t\t\t},\n\t\t) as SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }>;\n\t}\n\n\tprepare(): SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }> {\n\t\treturn this._prepare(false);\n\t}\n\n\tprivate _toSQL(): { query: BuildRelationalQueryResult; builtQuery: QueryWithTypings } {\n\t\tconst query = this.dialect.buildRelationalQuery({\n\t\t\tfullSchema: this.fullSchema,\n\t\t\tschema: this.schema,\n\t\t\ttableNamesMap: this.tableNamesMap,\n\t\t\ttable: this.table,\n\t\t\ttableConfig: this.tableConfig,\n\t\t\tqueryConfig: this.config,\n\t\t\ttableAlias: this.tableConfig.tsName,\n\t\t});\n\n\t\tconst builtQuery = this.dialect.sqlToQuery(query.sql as SQL);\n\n\t\treturn { query, builtQuery };\n\t}\n\n\ttoSQL(): Query {\n\t\treturn this._toSQL().builtQuery;\n\t}\n\n\t/** @internal */\n\texecuteRaw(): TResult {\n\t\tif (this.mode === 'first') {\n\t\t\treturn this._prepare(false).get() as TResult;\n\t\t}\n\t\treturn this._prepare(false).all() as TResult;\n\t}\n\n\toverride async execute(): Promise<TResult> {\n\t\treturn this.executeRaw();\n\t}\n}\n\nexport class SQLiteSyncRelationalQuery<TResult> extends SQLiteRelationalQuery<'sync', TResult> {\n\tstatic override readonly [entityKind]: string = 'SQLiteSyncRelationalQuery';\n\n\tsync(): TResult {\n\t\treturn this.executeRaw();\n\t}\n}\n","import { entityKind } from '~/entity.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport type { SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '../dialect.ts';\n\ntype SQLiteRawAction = 'all' | 'get' | 'values' | 'run';\nexport interface SQLiteRawConfig {\n\taction: SQLiteRawAction;\n}\n\nexport interface SQLiteRaw<TResult> extends QueryPromise<TResult>, RunnableQuery<TResult, 'sqlite'>, SQLWrapper {}\n\nexport class SQLiteRaw<TResult> extends QueryPromise<TResult>\n\timplements RunnableQuery<TResult, 'sqlite'>, SQLWrapper, PreparedQuery\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteRaw';\n\n\tdeclare readonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly result: TResult;\n\t};\n\n\t/** @internal */\n\tconfig: SQLiteRawConfig;\n\n\tconstructor(\n\t\tpublic execute: () => Promise<TResult>,\n\t\t/** @internal */\n\t\tpublic getSQL: () => SQL,\n\t\taction: SQLiteRawAction,\n\t\tprivate dialect: SQLiteAsyncDialect,\n\t\tprivate mapBatchResult: (result: unknown) => unknown,\n\t) {\n\t\tsuper();\n\t\tthis.config = { action };\n\t}\n\n\tgetQuery() {\n\t\treturn { ...this.dialect.sqlToQuery(this.getSQL()), method: this.config.action };\n\t}\n\n\tmapResult(result: unknown, isFromBatch?: boolean) {\n\t\treturn isFromBatch ? this.mapBatchResult(result) : result;\n\t}\n\n\t_prepare(): PreparedQuery {\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn false;\n\t}\n}\n","import type { Cache } from '~/cache/core/cache.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport { type ColumnsSelection, type SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect, SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport {\n\tQueryBuilder,\n\tSQLiteDeleteBase,\n\tSQLiteInsertBuilder,\n\tSQLiteSelectBuilder,\n\tSQLiteUpdateBuilder,\n} from '~/sqlite-core/query-builders/index.ts';\nimport type {\n\tDBResult,\n\tResult,\n\tSQLiteSession,\n\tSQLiteTransaction,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport type { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { WithSubquery } from '~/subquery.ts';\nimport type { DrizzleTypeError } from '~/utils.ts';\nimport { SQLiteCountBuilder } from './query-builders/count.ts';\nimport { RelationalQueryBuilder } from './query-builders/query.ts';\nimport { SQLiteRaw } from './query-builders/raw.ts';\nimport type { SelectedFields } from './query-builders/select.types.ts';\nimport type { WithBuilder } from './subquery.ts';\nimport type { SQLiteViewBase } from './view-base.ts';\n\nexport class BaseSQLiteDatabase<\n\tTResultKind extends 'sync' | 'async',\n\tTRunResult,\n\tTFullSchema extends Record<string, unknown> = Record<string, never>,\n\tTSchema extends TablesRelationalConfig = ExtractTablesWithRelations<TFullSchema>,\n> {\n\tstatic readonly [entityKind]: string = 'BaseSQLiteDatabase';\n\n\tdeclare readonly _: {\n\t\treadonly schema: TSchema | undefined;\n\t\treadonly fullSchema: TFullSchema;\n\t\treadonly tableNamesMap: Record<string, string>;\n\t};\n\n\tquery: TFullSchema extends Record<string, never>\n\t\t? DrizzleTypeError<'Seems like the schema generic is missing - did you forget to add it to your DB type?'>\n\t\t: {\n\t\t\t[K in keyof TSchema]: RelationalQueryBuilder<TResultKind, TFullSchema, TSchema, TSchema[K]>;\n\t\t};\n\n\tconstructor(\n\t\tprivate resultKind: TResultKind,\n\t\t/** @internal */\n\t\treadonly dialect: { sync: SQLiteSyncDialect; async: SQLiteAsyncDialect }[TResultKind],\n\t\t/** @internal */\n\t\treadonly session: SQLiteSession<TResultKind, TRunResult, TFullSchema, TSchema>,\n\t\tschema: RelationalSchemaConfig<TSchema> | undefined,\n\t) {\n\t\tthis._ = schema\n\t\t\t? {\n\t\t\t\tschema: schema.schema,\n\t\t\t\tfullSchema: schema.fullSchema as TFullSchema,\n\t\t\t\ttableNamesMap: schema.tableNamesMap,\n\t\t\t}\n\t\t\t: {\n\t\t\t\tschema: undefined,\n\t\t\t\tfullSchema: {} as TFullSchema,\n\t\t\t\ttableNamesMap: {},\n\t\t\t};\n\t\tthis.query = {} as typeof this['query'];\n\t\tconst query = this.query as {\n\t\t\t[K in keyof TSchema]: RelationalQueryBuilder<TResultKind, TFullSchema, TSchema, TSchema[K]>;\n\t\t};\n\t\tif (this._.schema) {\n\t\t\tfor (const [tableName, columns] of Object.entries(this._.schema)) {\n\t\t\t\tquery[tableName as keyof TSchema] = new RelationalQueryBuilder(\n\t\t\t\t\tresultKind,\n\t\t\t\t\tschema!.fullSchema,\n\t\t\t\t\tthis._.schema,\n\t\t\t\t\tthis._.tableNamesMap,\n\t\t\t\t\tschema!.fullSchema[tableName] as SQLiteTable,\n\t\t\t\t\tcolumns,\n\t\t\t\t\tdialect,\n\t\t\t\t\tsession as SQLiteSession<any, any, any, any> as any,\n\t\t\t\t) as typeof query[keyof TSchema];\n\t\t\t}\n\t\t}\n\t\tthis.$cache = { invalidate: async (_params: any) => {} };\n\t}\n\n\t/**\n\t * Creates a subquery that defines a temporary named result set as a CTE.\n\t *\n\t * It is useful for breaking down complex queries into simpler parts and for reusing the result set in subsequent parts of the query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#with-clause}\n\t *\n\t * @param alias The alias for the subquery.\n\t *\n\t * Failure to provide an alias will result in a DrizzleTypeError, preventing the subquery from being referenced in other queries.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Create a subquery with alias 'sq' and use it in the select query\n\t * const sq = db.$with('sq').as(db.select().from(users).where(eq(users.id, 42)));\n\t *\n\t * const result = await db.with(sq).select().from(sq);\n\t * ```\n\t *\n\t * To select arbitrary SQL values as fields in a CTE and reference them in other CTEs or in the main query, you need to add aliases to them:\n\t *\n\t * ```ts\n\t * // Select an arbitrary SQL value as a field in a CTE and reference it in the main query\n\t * const sq = db.$with('sq').as(db.select({\n\t * name: sql<string>`upper(${users.name})`.as('name'),\n\t * })\n\t * .from(users));\n\t *\n\t * const result = await db.with(sq).select({ name: sq.name }).from(sq);\n\t * ```\n\t */\n\t$with: WithBuilder = (alias: string, selection?: ColumnsSelection) => {\n\t\tconst self = this;\n\t\tconst as = (\n\t\t\tqb:\n\t\t\t\t| TypedQueryBuilder<ColumnsSelection | undefined>\n\t\t\t\t| SQL\n\t\t\t\t| ((qb: QueryBuilder) => TypedQueryBuilder<ColumnsSelection | undefined> | SQL),\n\t\t) => {\n\t\t\tif (typeof qb === 'function') {\n\t\t\t\tqb = qb(new QueryBuilder(self.dialect));\n\t\t\t}\n\n\t\t\treturn new Proxy(\n\t\t\t\tnew WithSubquery(\n\t\t\t\t\tqb.getSQL(),\n\t\t\t\t\tselection ?? ('getSelectedFields' in qb ? qb.getSelectedFields() ?? {} : {}) as SelectedFields,\n\t\t\t\t\talias,\n\t\t\t\t\ttrue,\n\t\t\t\t),\n\t\t\t\tnew SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t\t);\n\t\t};\n\t\treturn { as };\n\t};\n\n\t$count(\n\t\tsource: SQLiteTable | SQLiteViewBase | SQL | SQLWrapper,\n\t\tfilters?: SQL<unknown>,\n\t) {\n\t\treturn new SQLiteCountBuilder({ source, filters, session: this.session });\n\t}\n\n\t/**\n\t * Incorporates a previously defined CTE (using `$with`) into the main query.\n\t *\n\t * This method allows the main query to reference a temporary named result set.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#with-clause}\n\t *\n\t * @param queries The CTEs to incorporate into the main query.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Define a subquery 'sq' as a CTE using $with\n\t * const sq = db.$with('sq').as(db.select().from(users).where(eq(users.id, 42)));\n\t *\n\t * // Incorporate the CTE 'sq' into the main query and select from it\n\t * const result = await db.with(sq).select().from(sq);\n\t * ```\n\t */\n\twith(...queries: WithSubquery[]) {\n\t\tconst self = this;\n\n\t\t/**\n\t\t * Creates a select query.\n\t\t *\n\t\t * Calling this method with no arguments will select all columns from the table. Pass a selection object to specify the columns you want to select.\n\t\t *\n\t\t * Use `.from()` method to specify which table to select from.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/select}\n\t\t *\n\t\t * @param fields The selection object.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Select all columns and all rows from the 'cars' table\n\t\t * const allCars: Car[] = await db.select().from(cars);\n\t\t *\n\t\t * // Select specific columns and all rows from the 'cars' table\n\t\t * const carsIdsAndBrands: { id: number; brand: string }[] = await db.select({\n\t\t * id: cars.id,\n\t\t * brand: cars.brand\n\t\t * })\n\t\t * .from(cars);\n\t\t * ```\n\t\t *\n\t\t * Like in SQL, you can use arbitrary expressions as selection fields, not just table columns:\n\t\t *\n\t\t * ```ts\n\t\t * // Select specific columns along with expression and all rows from the 'cars' table\n\t\t * const carsIdsAndLowerNames: { id: number; lowerBrand: string }[] = await db.select({\n\t\t * id: cars.id,\n\t\t * lowerBrand: sql<string>`lower(${cars.brand})`,\n\t\t * })\n\t\t * .from(cars);\n\t\t * ```\n\t\t */\n\t\tfunction select(): SQLiteSelectBuilder<undefined, TResultKind, TRunResult>;\n\t\tfunction select<TSelection extends SelectedFields>(\n\t\t\tfields: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection, TResultKind, TRunResult>;\n\t\tfunction select(\n\t\t\tfields?: SelectedFields,\n\t\t): SQLiteSelectBuilder<SelectedFields | undefined, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: self.session,\n\t\t\t\tdialect: self.dialect,\n\t\t\t\twithList: queries,\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Adds `distinct` expression to the select query.\n\t\t *\n\t\t * Calling this method will return only unique values. When multiple columns are selected, it returns rows with unique combinations of values in these columns.\n\t\t *\n\t\t * Use `.from()` method to specify which table to select from.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t\t *\n\t\t * @param fields The selection object.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Select all unique rows from the 'cars' table\n\t\t * await db.selectDistinct()\n\t\t * .from(cars)\n\t\t * .orderBy(cars.id, cars.brand, cars.color);\n\t\t *\n\t\t * // Select all unique brands from the 'cars' table\n\t\t * await db.selectDistinct({ brand: cars.brand })\n\t\t * .from(cars)\n\t\t * .orderBy(cars.brand);\n\t\t * ```\n\t\t */\n\t\tfunction selectDistinct(): SQLiteSelectBuilder<undefined, TResultKind, TRunResult>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(\n\t\t\tfields: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection, TResultKind, TRunResult>;\n\t\tfunction selectDistinct(\n\t\t\tfields?: SelectedFields,\n\t\t): SQLiteSelectBuilder<SelectedFields | undefined, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: self.session,\n\t\t\t\tdialect: self.dialect,\n\t\t\t\twithList: queries,\n\t\t\t\tdistinct: true,\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Creates an update query.\n\t\t *\n\t\t * Calling this method without `.where()` clause will update all rows in a table. The `.where()` clause specifies which rows should be updated.\n\t\t *\n\t\t * Use `.set()` method to specify which values to update.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t\t *\n\t\t * @param table The table to update.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Update all rows in the 'cars' table\n\t\t * await db.update(cars).set({ color: 'red' });\n\t\t *\n\t\t * // Update rows with filters and conditions\n\t\t * await db.update(cars).set({ color: 'red' }).where(eq(cars.brand, 'BMW'));\n\t\t *\n\t\t * // Update with returning clause\n\t\t * const updatedCar: Car[] = await db.update(cars)\n\t\t * .set({ color: 'red' })\n\t\t * .where(eq(cars.id, 1))\n\t\t * .returning();\n\t\t * ```\n\t\t */\n\t\tfunction update<TTable extends SQLiteTable>(table: TTable): SQLiteUpdateBuilder<TTable, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteUpdateBuilder(table, self.session, self.dialect, queries);\n\t\t}\n\n\t\t/**\n\t\t * Creates an insert query.\n\t\t *\n\t\t * Calling this method will create new rows in a table. Use `.values()` method to specify which values to insert.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/insert}\n\t\t *\n\t\t * @param table The table to insert into.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Insert one row\n\t\t * await db.insert(cars).values({ brand: 'BMW' });\n\t\t *\n\t\t * // Insert multiple rows\n\t\t * await db.insert(cars).values([{ brand: 'BMW' }, { brand: 'Porsche' }]);\n\t\t *\n\t\t * // Insert with returning clause\n\t\t * const insertedCar: Car[] = await db.insert(cars)\n\t\t * .values({ brand: 'BMW' })\n\t\t * .returning();\n\t\t * ```\n\t\t */\n\t\tfunction insert<TTable extends SQLiteTable>(into: TTable): SQLiteInsertBuilder<TTable, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteInsertBuilder(into, self.session, self.dialect, queries);\n\t\t}\n\n\t\t/**\n\t\t * Creates a delete query.\n\t\t *\n\t\t * Calling this method without `.where()` clause will delete all rows in a table. The `.where()` clause specifies which rows should be deleted.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t\t *\n\t\t * @param table The table to delete from.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Delete all rows in the 'cars' table\n\t\t * await db.delete(cars);\n\t\t *\n\t\t * // Delete rows with filters and conditions\n\t\t * await db.delete(cars).where(eq(cars.color, 'green'));\n\t\t *\n\t\t * // Delete with returning clause\n\t\t * const deletedCar: Car[] = await db.delete(cars)\n\t\t * .where(eq(cars.id, 1))\n\t\t * .returning();\n\t\t * ```\n\t\t */\n\t\tfunction delete_<TTable extends SQLiteTable>(from: TTable): SQLiteDeleteBase<TTable, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteDeleteBase(from, self.session, self.dialect, queries);\n\t\t}\n\n\t\treturn { select, selectDistinct, update, insert, delete: delete_ };\n\t}\n\n\t/**\n\t * Creates a select query.\n\t *\n\t * Calling this method with no arguments will select all columns from the table. Pass a selection object to specify the columns you want to select.\n\t *\n\t * Use `.from()` method to specify which table to select from.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select}\n\t *\n\t * @param fields The selection object.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all columns and all rows from the 'cars' table\n\t * const allCars: Car[] = await db.select().from(cars);\n\t *\n\t * // Select specific columns and all rows from the 'cars' table\n\t * const carsIdsAndBrands: { id: number; brand: string }[] = await db.select({\n\t * id: cars.id,\n\t * brand: cars.brand\n\t * })\n\t * .from(cars);\n\t * ```\n\t *\n\t * Like in SQL, you can use arbitrary expressions as selection fields, not just table columns:\n\t *\n\t * ```ts\n\t * // Select specific columns along with expression and all rows from the 'cars' table\n\t * const carsIdsAndLowerNames: { id: number; lowerBrand: string }[] = await db.select({\n\t * id: cars.id,\n\t * lowerBrand: sql<string>`lower(${cars.brand})`,\n\t * })\n\t * .from(cars);\n\t * ```\n\t */\n\tselect(): SQLiteSelectBuilder<undefined, TResultKind, TRunResult>;\n\tselect<TSelection extends SelectedFields>(\n\t\tfields: TSelection,\n\t): SQLiteSelectBuilder<TSelection, TResultKind, TRunResult>;\n\tselect(fields?: SelectedFields): SQLiteSelectBuilder<SelectedFields | undefined, TResultKind, TRunResult> {\n\t\treturn new SQLiteSelectBuilder({ fields: fields ?? undefined, session: this.session, dialect: this.dialect });\n\t}\n\n\t/**\n\t * Adds `distinct` expression to the select query.\n\t *\n\t * Calling this method will return only unique values. When multiple columns are selected, it returns rows with unique combinations of values in these columns.\n\t *\n\t * Use `.from()` method to specify which table to select from.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t *\n\t * @param fields The selection object.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all unique rows from the 'cars' table\n\t * await db.selectDistinct()\n\t * .from(cars)\n\t * .orderBy(cars.id, cars.brand, cars.color);\n\t *\n\t * // Select all unique brands from the 'cars' table\n\t * await db.selectDistinct({ brand: cars.brand })\n\t * .from(cars)\n\t * .orderBy(cars.brand);\n\t * ```\n\t */\n\tselectDistinct(): SQLiteSelectBuilder<undefined, TResultKind, TRunResult>;\n\tselectDistinct<TSelection extends SelectedFields>(\n\t\tfields: TSelection,\n\t): SQLiteSelectBuilder<TSelection, TResultKind, TRunResult>;\n\tselectDistinct(\n\t\tfields?: SelectedFields,\n\t): SQLiteSelectBuilder<SelectedFields | undefined, TResultKind, TRunResult> {\n\t\treturn new SQLiteSelectBuilder({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: this.session,\n\t\t\tdialect: this.dialect,\n\t\t\tdistinct: true,\n\t\t});\n\t}\n\n\t/**\n\t * Creates an update query.\n\t *\n\t * Calling this method without `.where()` clause will update all rows in a table. The `.where()` clause specifies which rows should be updated.\n\t *\n\t * Use `.set()` method to specify which values to update.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t *\n\t * @param table The table to update.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Update all rows in the 'cars' table\n\t * await db.update(cars).set({ color: 'red' });\n\t *\n\t * // Update rows with filters and conditions\n\t * await db.update(cars).set({ color: 'red' }).where(eq(cars.brand, 'BMW'));\n\t *\n\t * // Update with returning clause\n\t * const updatedCar: Car[] = await db.update(cars)\n\t * .set({ color: 'red' })\n\t * .where(eq(cars.id, 1))\n\t * .returning();\n\t * ```\n\t */\n\tupdate<TTable extends SQLiteTable>(table: TTable): SQLiteUpdateBuilder<TTable, TResultKind, TRunResult> {\n\t\treturn new SQLiteUpdateBuilder(table, this.session, this.dialect);\n\t}\n\n\t$cache: { invalidate: Cache['onMutate'] };\n\n\t/**\n\t * Creates an insert query.\n\t *\n\t * Calling this method will create new rows in a table. Use `.values()` method to specify which values to insert.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert}\n\t *\n\t * @param table The table to insert into.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Insert one row\n\t * await db.insert(cars).values({ brand: 'BMW' });\n\t *\n\t * // Insert multiple rows\n\t * await db.insert(cars).values([{ brand: 'BMW' }, { brand: 'Porsche' }]);\n\t *\n\t * // Insert with returning clause\n\t * const insertedCar: Car[] = await db.insert(cars)\n\t * .values({ brand: 'BMW' })\n\t * .returning();\n\t * ```\n\t */\n\tinsert<TTable extends SQLiteTable>(into: TTable): SQLiteInsertBuilder<TTable, TResultKind, TRunResult> {\n\t\treturn new SQLiteInsertBuilder(into, this.session, this.dialect);\n\t}\n\n\t/**\n\t * Creates a delete query.\n\t *\n\t * Calling this method without `.where()` clause will delete all rows in a table. The `.where()` clause specifies which rows should be deleted.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t *\n\t * @param table The table to delete from.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Delete all rows in the 'cars' table\n\t * await db.delete(cars);\n\t *\n\t * // Delete rows with filters and conditions\n\t * await db.delete(cars).where(eq(cars.color, 'green'));\n\t *\n\t * // Delete with returning clause\n\t * const deletedCar: Car[] = await db.delete(cars)\n\t * .where(eq(cars.id, 1))\n\t * .returning();\n\t * ```\n\t */\n\tdelete<TTable extends SQLiteTable>(from: TTable): SQLiteDeleteBase<TTable, TResultKind, TRunResult> {\n\t\treturn new SQLiteDeleteBase(from, this.session, this.dialect);\n\t}\n\n\trun(query: SQLWrapper | string): DBResult<TResultKind, TRunResult> {\n\t\tconst sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();\n\t\tif (this.resultKind === 'async') {\n\t\t\treturn new SQLiteRaw(\n\t\t\t\tasync () => this.session.run(sequel),\n\t\t\t\t() => sequel,\n\t\t\t\t'run',\n\t\t\t\tthis.dialect as SQLiteAsyncDialect,\n\t\t\t\tthis.session.extractRawRunValueFromBatchResult.bind(this.session),\n\t\t\t) as DBResult<TResultKind, TRunResult>;\n\t\t}\n\t\treturn this.session.run(sequel) as DBResult<TResultKind, TRunResult>;\n\t}\n\n\tall<T = unknown>(query: SQLWrapper | string): DBResult<TResultKind, T[]> {\n\t\tconst sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();\n\t\tif (this.resultKind === 'async') {\n\t\t\treturn new SQLiteRaw(\n\t\t\t\tasync () => this.session.all(sequel),\n\t\t\t\t() => sequel,\n\t\t\t\t'all',\n\t\t\t\tthis.dialect as SQLiteAsyncDialect,\n\t\t\t\tthis.session.extractRawAllValueFromBatchResult.bind(this.session),\n\t\t\t) as any;\n\t\t}\n\t\treturn this.session.all(sequel) as DBResult<TResultKind, T[]>;\n\t}\n\n\tget<T = unknown>(query: SQLWrapper | string): DBResult<TResultKind, T> {\n\t\tconst sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();\n\t\tif (this.resultKind === 'async') {\n\t\t\treturn new SQLiteRaw(\n\t\t\t\tasync () => this.session.get(sequel),\n\t\t\t\t() => sequel,\n\t\t\t\t'get',\n\t\t\t\tthis.dialect as SQLiteAsyncDialect,\n\t\t\t\tthis.session.extractRawGetValueFromBatchResult.bind(this.session),\n\t\t\t) as DBResult<TResultKind, T>;\n\t\t}\n\t\treturn this.session.get(sequel) as DBResult<TResultKind, T>;\n\t}\n\n\tvalues<T extends unknown[] = unknown[]>(query: SQLWrapper | string): DBResult<TResultKind, T[]> {\n\t\tconst sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();\n\t\tif (this.resultKind === 'async') {\n\t\t\treturn new SQLiteRaw(\n\t\t\t\tasync () => this.session.values(sequel),\n\t\t\t\t() => sequel,\n\t\t\t\t'values',\n\t\t\t\tthis.dialect as SQLiteAsyncDialect,\n\t\t\t\tthis.session.extractRawValuesValueFromBatchResult.bind(this.session),\n\t\t\t) as any;\n\t\t}\n\t\treturn this.session.values(sequel) as DBResult<TResultKind, T[]>;\n\t}\n\n\ttransaction<T>(\n\t\ttransaction: (tx: SQLiteTransaction<TResultKind, TRunResult, TFullSchema, TSchema>) => Result<TResultKind, T>,\n\t\tconfig?: SQLiteTransactionConfig,\n\t): Result<TResultKind, T> {\n\t\treturn this.session.transaction(transaction, config);\n\t}\n}\n\nexport type SQLiteWithReplicas<Q> = Q & { $primary: Q; $replicas: Q[] };\n\nexport const withReplicas = <\n\tTResultKind extends 'sync' | 'async',\n\tTRunResult,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n\tQ extends BaseSQLiteDatabase<\n\t\tTResultKind,\n\t\tTRunResult,\n\t\tTFullSchema,\n\t\tTSchema extends Record<string, unknown> ? ExtractTablesWithRelations<TFullSchema> : TSchema\n\t>,\n>(\n\tprimary: Q,\n\treplicas: [Q, ...Q[]],\n\tgetReplica: (replicas: Q[]) => Q = () => replicas[Math.floor(Math.random() * replicas.length)]!,\n): SQLiteWithReplicas<Q> => {\n\tconst select: Q['select'] = (...args: []) => getReplica(replicas).select(...args);\n\tconst selectDistinct: Q['selectDistinct'] = (...args: []) => getReplica(replicas).selectDistinct(...args);\n\tconst $count: Q['$count'] = (...args: [any]) => getReplica(replicas).$count(...args);\n\tconst $with: Q['with'] = (...args: []) => getReplica(replicas).with(...args);\n\n\tconst update: Q['update'] = (...args: [any]) => primary.update(...args);\n\tconst insert: Q['insert'] = (...args: [any]) => primary.insert(...args);\n\tconst $delete: Q['delete'] = (...args: [any]) => primary.delete(...args);\n\tconst run: Q['run'] = (...args: [any]) => primary.run(...args);\n\tconst all: Q['all'] = (...args: [any]) => primary.all(...args);\n\tconst get: Q['get'] = (...args: [any]) => primary.get(...args);\n\tconst values: Q['values'] = (...args: [any]) => primary.values(...args);\n\tconst transaction: Q['transaction'] = (...args: [any]) => primary.transaction(...args);\n\n\treturn {\n\t\t...primary,\n\t\tupdate,\n\t\tinsert,\n\t\tdelete: $delete,\n\t\trun,\n\t\tall,\n\t\tget,\n\t\tvalues,\n\t\ttransaction,\n\t\t$primary: primary,\n\t\t$replicas: replicas,\n\t\tselect,\n\t\tselectDistinct,\n\t\t$count,\n\t\twith: $with,\n\t\tget query() {\n\t\t\treturn getReplica(replicas).query;\n\t\t},\n\t};\n};\n","import { entityKind } from '~/entity.ts';\nimport type { Table } from '~/index.ts';\nimport type { CacheConfig } from './types.ts';\n\nexport abstract class Cache {\n\tstatic readonly [entityKind]: string = 'Cache';\n\n\tabstract strategy(): 'explicit' | 'all';\n\n\t/**\n\t * Invoked if we should check cache for cached response\n\t * @param sql\n\t * @param tables\n\t */\n\tabstract get(\n\t\tkey: string,\n\t\ttables: string[],\n\t\tisTag: boolean,\n\t\tisAutoInvalidate?: boolean,\n\t): Promise<any[] | undefined>;\n\n\t/**\n\t * Invoked if new query should be inserted to cache\n\t * @param sql\n\t * @param tables\n\t */\n\tabstract put(\n\t\thashedQuery: string,\n\t\tresponse: any,\n\t\ttables: string[],\n\t\tisTag: boolean,\n\t\tconfig?: CacheConfig,\n\t): Promise<void>;\n\n\t/**\n\t * Invoked if insert, update, delete was invoked\n\t * @param tables\n\t */\n\tabstract onMutate(\n\t\tparams: MutationOption,\n\t): Promise<void>;\n}\n\nexport class NoopCache extends Cache {\n\toverride strategy() {\n\t\treturn 'all' as const;\n\t}\n\n\tstatic override readonly [entityKind]: string = 'NoopCache';\n\n\toverride async get(_key: string): Promise<any[] | undefined> {\n\t\treturn undefined;\n\t}\n\toverride async put(\n\t\t_hashedQuery: string,\n\t\t_response: any,\n\t\t_tables: string[],\n\t\t_config?: any,\n\t): Promise<void> {\n\t\t// noop\n\t}\n\toverride async onMutate(_params: MutationOption): Promise<void> {\n\t\t// noop\n\t}\n}\n\nexport type MutationOption = { tags?: string | string[]; tables?: Table<any> | Table<any>[] | string | string[] };\n\nexport async function hashQuery(sql: string, params?: any[]) {\n\tconst dataToHash = `${sql}-${JSON.stringify(params)}`;\n\tconst encoder = new TextEncoder();\n\tconst data = encoder.encode(dataToHash);\n\tconst hashBuffer = await crypto.subtle.digest('SHA-256', data);\n\tconst hashArray = [...new Uint8Array(hashBuffer)];\n\tconst hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n\n\treturn hashHex;\n}\n","import { type Cache, hashQuery, NoopCache } from '~/cache/core/cache.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { DrizzleError, DrizzleQueryError, TransactionRollbackError } from '~/errors.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport type { Query, SQL } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect, SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { BaseSQLiteDatabase } from './db.ts';\nimport type { SQLiteRaw } from './query-builders/raw.ts';\nimport type { SelectedFieldsOrdered } from './query-builders/select.types.ts';\n\nexport interface PreparedQueryConfig {\n\ttype: 'sync' | 'async';\n\trun: unknown;\n\tall: unknown;\n\tget: unknown;\n\tvalues: unknown;\n\texecute: unknown;\n}\n\nexport class ExecuteResultSync<T> extends QueryPromise<T> {\n\tstatic override readonly [entityKind]: string = 'ExecuteResultSync';\n\n\tconstructor(private resultCb: () => T) {\n\t\tsuper();\n\t}\n\n\toverride async execute(): Promise<T> {\n\t\treturn this.resultCb();\n\t}\n\n\tsync(): T {\n\t\treturn this.resultCb();\n\t}\n}\n\nexport type ExecuteResult<TType extends 'sync' | 'async', TResult> = TType extends 'async' ? Promise<TResult>\n\t: ExecuteResultSync<TResult>;\n\nexport abstract class SQLitePreparedQuery<T extends PreparedQueryConfig> implements PreparedQuery {\n\tstatic readonly [entityKind]: string = 'PreparedQuery';\n\n\t/** @internal */\n\tjoinsNotNullableMap?: Record<string, boolean>;\n\n\tconstructor(\n\t\tprivate mode: 'sync' | 'async',\n\t\tprivate executeMethod: SQLiteExecuteMethod,\n\t\tprotected query: Query,\n\t\tprivate cache?: Cache,\n\t\t// per query related metadata\n\t\tprivate queryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\t// config that was passed through $withCache\n\t\tprivate cacheConfig?: WithCacheConfig,\n\t) {\n\t\t// it means that no $withCache options were passed and it should be just enabled\n\t\tif (cache && cache.strategy() === 'all' && cacheConfig === undefined) {\n\t\t\tthis.cacheConfig = { enable: true, autoInvalidate: true };\n\t\t}\n\t\tif (!this.cacheConfig?.enable) {\n\t\t\tthis.cacheConfig = undefined;\n\t\t}\n\t}\n\n\t/** @internal */\n\tprotected async queryWithCache<T>(\n\t\tqueryString: string,\n\t\tparams: any[],\n\t\tquery: () => Promise<T>,\n\t): Promise<T> {\n\t\tif (this.cache === undefined || is(this.cache, NoopCache) || this.queryMetadata === undefined) {\n\t\t\ttry {\n\t\t\t\treturn await query();\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\t// don't do any mutations, if globally is false\n\t\tif (this.cacheConfig && !this.cacheConfig.enable) {\n\t\t\ttry {\n\t\t\t\treturn await query();\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\t// For mutate queries, we should query the database, wait for a response, and then perform invalidation\n\t\tif (\n\t\t\t(\n\t\t\t\tthis.queryMetadata.type === 'insert' || this.queryMetadata.type === 'update'\n\t\t\t\t|| this.queryMetadata.type === 'delete'\n\t\t\t) && this.queryMetadata.tables.length > 0\n\t\t) {\n\t\t\ttry {\n\t\t\t\tconst [res] = await Promise.all([\n\t\t\t\t\tquery(),\n\t\t\t\t\tthis.cache.onMutate({ tables: this.queryMetadata.tables }),\n\t\t\t\t]);\n\t\t\t\treturn res;\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\t// don't do any reads if globally disabled\n\t\tif (!this.cacheConfig) {\n\t\t\ttry {\n\t\t\t\treturn await query();\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\tif (this.queryMetadata.type === 'select') {\n\t\t\tconst fromCache = await this.cache.get(\n\t\t\t\tthis.cacheConfig.tag ?? await hashQuery(queryString, params),\n\t\t\t\tthis.queryMetadata.tables,\n\t\t\t\tthis.cacheConfig.tag !== undefined,\n\t\t\t\tthis.cacheConfig.autoInvalidate,\n\t\t\t);\n\t\t\tif (fromCache === undefined) {\n\t\t\t\tlet result;\n\t\t\t\ttry {\n\t\t\t\t\tresult = await query();\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t\t}\n\n\t\t\t\t// put actual key\n\t\t\t\tawait this.cache.put(\n\t\t\t\t\tthis.cacheConfig.tag ?? await hashQuery(queryString, params),\n\t\t\t\t\tresult,\n\t\t\t\t\t// make sure we send tables that were used in a query only if user wants to invalidate it on each write\n\t\t\t\t\tthis.cacheConfig.autoInvalidate ? this.queryMetadata.tables : [],\n\t\t\t\t\tthis.cacheConfig.tag !== undefined,\n\t\t\t\t\tthis.cacheConfig.config,\n\t\t\t\t);\n\t\t\t\t// put flag if we should invalidate or not\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\treturn fromCache as unknown as T;\n\t\t}\n\t\ttry {\n\t\t\treturn await query();\n\t\t} catch (e) {\n\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t}\n\t}\n\n\tgetQuery(): Query {\n\t\treturn this.query;\n\t}\n\n\tabstract run(placeholderValues?: Record<string, unknown>): Result<T['type'], T['run']>;\n\n\tmapRunResult(result: unknown, _isFromBatch?: boolean): unknown {\n\t\treturn result;\n\t}\n\n\tabstract all(placeholderValues?: Record<string, unknown>): Result<T['type'], T['all']>;\n\n\tmapAllResult(_result: unknown, _isFromBatch?: boolean): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n\n\tabstract get(placeholderValues?: Record<string, unknown>): Result<T['type'], T['get']>;\n\n\tmapGetResult(_result: unknown, _isFromBatch?: boolean): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n\n\tabstract values(placeholderValues?: Record<string, unknown>): Result<T['type'], T['values']>;\n\n\texecute(placeholderValues?: Record<string, unknown>): ExecuteResult<T['type'], T['execute']> {\n\t\tif (this.mode === 'async') {\n\t\t\treturn this[this.executeMethod](placeholderValues) as ExecuteResult<T['type'], T['execute']>;\n\t\t}\n\t\treturn new ExecuteResultSync(() => this[this.executeMethod](placeholderValues));\n\t}\n\n\tmapResult(response: unknown, isFromBatch?: boolean) {\n\t\tswitch (this.executeMethod) {\n\t\t\tcase 'run': {\n\t\t\t\treturn this.mapRunResult(response, isFromBatch);\n\t\t\t}\n\t\t\tcase 'all': {\n\t\t\t\treturn this.mapAllResult(response, isFromBatch);\n\t\t\t}\n\t\t\tcase 'get': {\n\t\t\t\treturn this.mapGetResult(response, isFromBatch);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @internal */\n\tabstract isResponseInArrayMode(): boolean;\n}\n\nexport interface SQLiteTransactionConfig {\n\tbehavior?: 'deferred' | 'immediate' | 'exclusive';\n}\n\nexport type SQLiteExecuteMethod = 'run' | 'all' | 'get';\n\nexport abstract class SQLiteSession<\n\tTResultKind extends 'sync' | 'async',\n\tTRunResult,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteSession';\n\n\tconstructor(\n\t\t/** @internal */\n\t\treadonly dialect: { sync: SQLiteSyncDialect; async: SQLiteAsyncDialect }[TResultKind],\n\t) {}\n\n\tabstract prepareQuery(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): SQLitePreparedQuery<PreparedQueryConfig & { type: TResultKind }>;\n\n\tprepareOneTimeQuery(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): SQLitePreparedQuery<PreparedQueryConfig & { type: TResultKind }> {\n\t\treturn this.prepareQuery(\n\t\t\tquery,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t);\n\t}\n\n\tabstract transaction<T>(\n\t\ttransaction: (tx: SQLiteTransaction<TResultKind, TRunResult, TFullSchema, TSchema>) => Result<TResultKind, T>,\n\t\tconfig?: SQLiteTransactionConfig,\n\t): Result<TResultKind, T>;\n\n\trun(query: SQL): Result<TResultKind, TRunResult> {\n\t\tconst staticQuery = this.dialect.sqlToQuery(query);\n\t\ttry {\n\t\t\treturn this.prepareOneTimeQuery(staticQuery, undefined, 'run', false).run() as Result<TResultKind, TRunResult>;\n\t\t} catch (err) {\n\t\t\tthrow new DrizzleError({ cause: err, message: `Failed to run the query '${staticQuery.sql}'` });\n\t\t}\n\t}\n\n\t/** @internal */\n\textractRawRunValueFromBatchResult(result: unknown) {\n\t\treturn result;\n\t}\n\n\tall<T = unknown>(query: SQL): Result<TResultKind, T[]> {\n\t\treturn this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run', false).all() as Result<\n\t\t\tTResultKind,\n\t\t\tT[]\n\t\t>;\n\t}\n\n\t/** @internal */\n\textractRawAllValueFromBatchResult(_result: unknown): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n\n\tget<T = unknown>(query: SQL): Result<TResultKind, T> {\n\t\treturn this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run', false).get() as Result<\n\t\t\tTResultKind,\n\t\t\tT\n\t\t>;\n\t}\n\n\t/** @internal */\n\textractRawGetValueFromBatchResult(_result: unknown): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n\n\tvalues<T extends any[] = unknown[]>(\n\t\tquery: SQL,\n\t): Result<TResultKind, T[]> {\n\t\treturn this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run', false).values() as Result<\n\t\t\tTResultKind,\n\t\t\tT[]\n\t\t>;\n\t}\n\n\tasync count(sql: SQL) {\n\t\tconst result = await this.values(sql) as [[number]];\n\n\t\treturn result[0][0];\n\t}\n\n\t/** @internal */\n\textractRawValuesValueFromBatchResult(_result: unknown): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n}\n\nexport type Result<TKind extends 'sync' | 'async', TResult> = { sync: TResult; async: Promise<TResult> }[TKind];\n\nexport type DBResult<TKind extends 'sync' | 'async', TResult> = { sync: TResult; async: SQLiteRaw<TResult> }[TKind];\n\nexport abstract class SQLiteTransaction<\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends BaseSQLiteDatabase<TResultType, TRunResult, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLiteTransaction';\n\n\tconstructor(\n\t\tresultType: TResultType,\n\t\tdialect: { sync: SQLiteSyncDialect; async: SQLiteAsyncDialect }[TResultType],\n\t\tsession: SQLiteSession<TResultType, TRunResult, TFullSchema, TSchema>,\n\t\tprotected schema: {\n\t\t\tfullSchema: Record<string, unknown>;\n\t\t\tschema: TSchema;\n\t\t\ttableNamesMap: Record<string, string>;\n\t\t} | undefined,\n\t\tprotected readonly nestedIndex = 0,\n\t) {\n\t\tsuper(resultType, dialect, session, schema);\n\t}\n\n\trollback(): never {\n\t\tthrow new TransactionRollbackError();\n\t}\n}\n","import type { Database, RunResult, Statement } from 'better-sqlite3';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport {\n\ttype PreparedQueryConfig as PreparedQueryConfigBase,\n\ttype SQLiteExecuteMethod,\n\tSQLitePreparedQuery as PreparedQueryBase,\n\tSQLiteSession,\n\ttype SQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface BetterSQLiteSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class BetterSQLiteSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'sync', RunResult, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'BetterSQLiteSession';\n\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: Database,\n\t\tdialect: SQLiteSyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\toptions: BetterSQLiteSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache ?? new NoopCache();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): PreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new PreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: BetterSQLiteTransaction<TFullSchema, TSchema>) => T,\n\t\tconfig: SQLiteTransactionConfig = {},\n\t): T {\n\t\tconst tx = new BetterSQLiteTransaction('sync', this.dialect, this, this.schema);\n\t\tconst nativeTx = this.client.transaction(transaction);\n\t\treturn nativeTx[config.behavior ?? 'deferred'](tx);\n\t}\n}\n\nexport class BetterSQLiteTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'sync', RunResult, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'BetterSQLiteTransaction';\n\n\toverride transaction<T>(transaction: (tx: BetterSQLiteTransaction<TFullSchema, TSchema>) => T): T {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new BetterSQLiteTransaction('sync', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tthis.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tthis.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class PreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends PreparedQueryBase<\n\t{ type: 'sync'; run: RunResult; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic override readonly [entityKind]: string = 'BetterSQLitePreparedQuery';\n\n\tconstructor(\n\t\tprivate stmt: Statement,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tcache: Cache,\n\t\tqueryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tcacheConfig: WithCacheConfig | undefined,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => unknown,\n\t) {\n\t\tsuper('sync', executeMethod, query, cache, queryMetadata, cacheConfig);\n\t}\n\n\trun(placeholderValues?: Record<string, unknown>): RunResult {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.stmt.run(...params);\n\t}\n\n\tall(placeholderValues?: Record<string, unknown>): T['all'] {\n\t\tconst { fields, joinsNotNullableMap, query, logger, stmt, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn stmt.all(...params);\n\t\t}\n\n\t\tconst rows = this.values(placeholderValues) as unknown[][];\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows) as T['all'];\n\t\t}\n\t\treturn rows.map((row) => mapResultRow(fields!, row, joinsNotNullableMap));\n\t}\n\n\tget(placeholderValues?: Record<string, unknown>): T['get'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\n\t\tconst { fields, stmt, joinsNotNullableMap, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn stmt.get(...params);\n\t\t}\n\n\t\tconst row = stmt.raw().get(...params) as unknown[];\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper([row]) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, row, joinsNotNullableMap);\n\t}\n\n\tvalues(placeholderValues?: Record<string, unknown>): T['values'] {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn this.stmt.raw().all(...params) as T['values'];\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n","import Client, { type Database, type Options, type RunResult } from 'better-sqlite3';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { BetterSQLiteSession } from './session.ts';\n\nexport type DrizzleBetterSQLite3DatabaseConfig =\n\t| ({\n\t\tsource?:\n\t\t\t| string\n\t\t\t| Buffer;\n\t} & Options)\n\t| string\n\t| undefined;\n\nexport class BetterSQLite3Database<TSchema extends Record<string, unknown> = Record<string, never>>\n\textends BaseSQLiteDatabase<'sync', RunResult, TSchema>\n{\n\tstatic override readonly [entityKind]: string = 'BetterSQLite3Database';\n}\n\nfunction construct<TSchema extends Record<string, unknown> = Record<string, never>>(\n\tclient: Database,\n\tconfig: Omit<DrizzleConfig<TSchema>, 'cache'> = {},\n): BetterSQLite3Database<TSchema> & {\n\t$client: Database;\n} {\n\tconst dialect = new SQLiteSyncDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst session = new BetterSQLiteSession(client, dialect, schema, { logger });\n\tconst db = new BetterSQLite3Database('sync', dialect, session, schema);\n\t(<any> db).$client = client;\n\t// (<any> db).$cache = config.cache;\n\t// if ((<any> db).$cache) {\n\t// \t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t// }\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n>(\n\t...params:\n\t\t| []\n\t\t| [\n\t\t\tDatabase | string,\n\t\t]\n\t\t| [\n\t\t\tDatabase | string,\n\t\t\tDrizzleConfig<TSchema>,\n\t\t]\n\t\t| [\n\t\t\t(\n\t\t\t\t& DrizzleConfig<TSchema>\n\t\t\t\t& ({\n\t\t\t\t\tconnection?: DrizzleBetterSQLite3DatabaseConfig;\n\t\t\t\t} | {\n\t\t\t\t\tclient: Database;\n\t\t\t\t})\n\t\t\t),\n\t\t]\n): BetterSQLite3Database<TSchema> & {\n\t$client: Database;\n} {\n\tif (params[0] === undefined || typeof params[0] === 'string') {\n\t\tconst instance = params[0] === undefined ? new Client() : new Client(params[0]);\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?: DrizzleBetterSQLite3DatabaseConfig;\n\t\t\t\tclient?: Database;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig) as any;\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { source, ...options } = connection;\n\n\t\t\tconst instance = new Client(source, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = new Client(connection);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as Database, params[1] as DrizzleConfig<TSchema> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: DrizzleConfig<TSchema>,\n\t): BetterSQLite3Database<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n","import { index, integer, primaryKey, real, sqliteTable, text } from 'drizzle-orm/sqlite-core'\n\n/**\n * Phase-1 schema. Deliberately dialect-portable: phase 2 swaps this file for a\n * pg one and nothing above the repository layer changes.\n */\n\nexport const events = sqliteTable('events', {\n /** dedup key from the adapter — see docs/adapters.md */\n id: text('id').primaryKey(),\n ts: integer('ts').notNull(),\n provider: text('provider').notNull(),\n kind: text('kind').notNull(),\n sessionId: text('session_id'),\n scopeHash: text('scope_hash').notNull(),\n unitLabel: text('unit_label'),\n /** JSON object of quantities in units of `kind` */\n qtyJson: text('qty_json').notNull(),\n costUsd: real('cost_usd'),\n /** JSON object, numbers only */\n metaJson: text('meta_json').notNull(),\n /** sum of qty values; denormalised so \"biggest events\" doesn't parse JSON per row */\n qtyTotal: real('qty_total').notNull().default(0),\n}, t => [\n index('idx_events_ts').on(t.ts),\n index('idx_events_scope').on(t.scopeHash, t.ts),\n index('idx_events_provider').on(t.provider, t.ts),\n index('idx_events_session').on(t.sessionId, t.ts),\n])\n\nexport const scopes = sqliteTable('scopes', {\n scopeHash: text('scope_hash').primaryKey(),\n /** human-readable alias — local only, never synced */\n label: text('label').notNull(),\n provider: text('provider').notNull(),\n lastSeen: integer('last_seen').notNull(),\n})\n\nexport const limits = sqliteTable('limits', {\n ts: integer('ts').notNull(),\n provider: text('provider').notNull(),\n window: text('window').notNull(),\n usedPct: real('used_pct').notNull(),\n resetsAt: integer('resets_at'),\n}, t => [\n primaryKey({ columns: [t.provider, t.window, t.ts] }),\n index('idx_limits_lookup').on(t.provider, t.window, t.ts),\n])\n\nexport const scanState = sqliteTable('scan_state', {\n sourcePath: text('source_path').primaryKey(),\n mtime: integer('mtime').notNull(),\n size: integer('size').notNull(),\n offset: integer('offset').notNull(),\n})\n\nexport type EventRow = typeof events.$inferSelect\nexport type ScopeRow = typeof scopes.$inferSelect\nexport type LimitRow = typeof limits.$inferSelect\nexport type ScanStateRow = typeof scanState.$inferSelect\n","import { mkdirSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { dirname, join } from 'node:path'\nimport Database from 'better-sqlite3'\nimport type BetterSqlite3 from 'better-sqlite3'\nimport { drizzle } from 'drizzle-orm/better-sqlite3'\nimport * as schema from './schema/sqlite.js'\n\nexport const SCHEMA_VERSION = 1\n\nexport function defaultDataDir(): string {\n return process.env.NOMNOMTOKENS_HOME ?? join(homedir(), '.nomnomtokens')\n}\n\nexport function defaultDbPath(): string {\n return join(defaultDataDir(), 'data.db')\n}\n\n/**\n * DDL is hand-written rather than generated so that opening the database is a\n * single synchronous step with no migration runner in the npx path. The Drizzle\n * schema in schema/sqlite.ts is the query-building view of these same tables;\n * they must stay in sync, which `db.test.ts` asserts.\n */\nconst DDL = `\nCREATE TABLE IF NOT EXISTS events (\n id TEXT PRIMARY KEY,\n ts INTEGER NOT NULL,\n provider TEXT NOT NULL,\n kind TEXT NOT NULL,\n session_id TEXT,\n scope_hash TEXT NOT NULL,\n unit_label TEXT,\n qty_json TEXT NOT NULL,\n cost_usd REAL,\n meta_json TEXT NOT NULL,\n qty_total REAL NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_events_ts ON events(ts);\nCREATE INDEX IF NOT EXISTS idx_events_scope ON events(scope_hash, ts);\nCREATE INDEX IF NOT EXISTS idx_events_provider ON events(provider, ts);\nCREATE INDEX IF NOT EXISTS idx_events_session ON events(session_id, ts);\n\nCREATE TABLE IF NOT EXISTS scopes (\n scope_hash TEXT PRIMARY KEY,\n label TEXT NOT NULL,\n provider TEXT NOT NULL,\n last_seen INTEGER NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS limits (\n ts INTEGER NOT NULL,\n provider TEXT NOT NULL,\n window TEXT NOT NULL,\n used_pct REAL NOT NULL,\n resets_at INTEGER,\n PRIMARY KEY (provider, window, ts)\n);\nCREATE INDEX IF NOT EXISTS idx_limits_lookup ON limits(provider, window, ts);\n\nCREATE TABLE IF NOT EXISTS scan_state (\n source_path TEXT PRIMARY KEY,\n mtime INTEGER NOT NULL,\n size INTEGER NOT NULL,\n offset INTEGER NOT NULL\n);\n`\n\nexport interface DbHandle {\n db: ReturnType<typeof drizzle<typeof schema>>\n sqlite: BetterSqlite3.Database\n path: string\n}\n\nexport type Db = DbHandle['db']\n\nexport function openDb(path: string = defaultDbPath()): DbHandle {\n if (path !== ':memory:') mkdirSync(dirname(path), { recursive: true })\n\n const sqlite = new Database(path)\n // WAL keeps `nnt serve` reading while a scan writes — without it the dashboard\n // freezes for the duration of every scan.\n sqlite.pragma('journal_mode = WAL')\n sqlite.pragma('synchronous = NORMAL')\n sqlite.pragma('foreign_keys = ON')\n sqlite.exec(DDL)\n\n const found = (sqlite.pragma('user_version', { simple: true }) as number) ?? 0\n if (found === 0) sqlite.pragma(`user_version = ${SCHEMA_VERSION}`)\n else if (found > SCHEMA_VERSION) {\n throw new Error(\n `Database at ${path} was written by a newer nomnomtokens (schema v${found}, this build understands v${SCHEMA_VERSION}). Upgrade the CLI.`,\n )\n }\n\n const db = drizzle(sqlite, { schema })\n return { db, sqlite, path }\n}\n","import type { IngestRecord, ScanCursor, ScanState, SpendEvent } from '@nomnomtokens/core'\nimport { totalTokens } from '@nomnomtokens/core'\nimport type BetterSqlite3 from 'better-sqlite3'\n\nexport interface IngestResult {\n /** spend events seen in the source */\n events: number\n /** rows actually written (a first insert, or an upsert that raised the counts) */\n written: number\n /** events the source repeated with counts we already had — see docs/architecture.md */\n duplicates: number\n limits: number\n scopes: number\n}\n\n/**\n * Writes go through prepared statements rather than the query builder: a full\n * scan of a year of history is ~100k statements, and the builder's per-call\n * overhead is the difference between \"instant\" and \"coffee\".\n */\nexport class Repo {\n private readonly insertEvent: BetterSqlite3.Statement\n private readonly upsertScope: BetterSqlite3.Statement\n private readonly insertLimit: BetterSqlite3.Statement\n private readonly getCursor: BetterSqlite3.Statement\n private readonly setCursor: BetterSqlite3.Statement\n\n constructor(private readonly sqlite: BetterSqlite3.Database) {\n // Always upsert. JSONL gets re-read, agents restart, a request that timed out\n // returns a 200 later — without this the numbers drift within the first week.\n //\n // The `WHERE excluded.qty_total >= events.qty_total` guard exists because\n // Claude Code writes the same (requestId, message.id) several times per\n // session, and an early write can be a streaming partial with lower counts.\n // Last-write-wins would let a partial clobber the final figure.\n this.insertEvent = sqlite.prepare(`\n INSERT INTO events (id, ts, provider, kind, session_id, scope_hash, unit_label, qty_json, cost_usd, meta_json, qty_total)\n VALUES (@id, @ts, @provider, @kind, @sessionId, @scopeHash, @unitLabel, @qtyJson, @costUsd, @metaJson, @qtyTotal)\n ON CONFLICT(id) DO UPDATE SET\n ts = excluded.ts,\n provider = excluded.provider,\n kind = excluded.kind,\n session_id = excluded.session_id,\n scope_hash = excluded.scope_hash,\n unit_label = excluded.unit_label,\n qty_json = excluded.qty_json,\n cost_usd = excluded.cost_usd,\n meta_json = excluded.meta_json,\n qty_total = excluded.qty_total\n WHERE excluded.qty_total >= events.qty_total\n `)\n\n this.upsertScope = sqlite.prepare(`\n INSERT INTO scopes (scope_hash, label, provider, last_seen)\n VALUES (@scopeHash, @label, @provider, @lastSeen)\n ON CONFLICT(scope_hash) DO UPDATE SET\n label = excluded.label,\n last_seen = MAX(scopes.last_seen, excluded.last_seen)\n `)\n\n this.insertLimit = sqlite.prepare(`\n INSERT INTO limits (ts, provider, window, used_pct, resets_at)\n VALUES (@ts, @provider, @window, @usedPct, @resetsAt)\n ON CONFLICT(provider, window, ts) DO UPDATE SET\n used_pct = excluded.used_pct,\n resets_at = excluded.resets_at\n `)\n\n this.getCursor = sqlite.prepare(\n 'SELECT source_path AS sourcePath, mtime, size, offset FROM scan_state WHERE source_path = ?',\n )\n this.setCursor = sqlite.prepare(`\n INSERT INTO scan_state (source_path, mtime, size, offset)\n VALUES (@sourcePath, @mtime, @size, @offset)\n ON CONFLICT(source_path) DO UPDATE SET\n mtime = excluded.mtime, size = excluded.size, offset = excluded.offset\n `)\n }\n\n /** @returns true when the row was actually written (a lower-count duplicate is a no-op) */\n putEvent(e: SpendEvent): boolean {\n const info = this.insertEvent.run({\n id: e.id,\n ts: e.ts,\n provider: e.provider,\n kind: e.kind,\n sessionId: e.sessionId,\n scopeHash: e.scopeHash,\n unitLabel: e.unitLabel,\n qtyJson: JSON.stringify(e.qty),\n costUsd: e.costUsd,\n metaJson: JSON.stringify(e.meta),\n qtyTotal: e.kind === 'tokens'\n ? totalTokens(e.qty)\n : Object.values(e.qty).reduce((a, b) => a + b, 0),\n })\n return info.changes > 0\n }\n\n /** Bulk ingest inside one transaction. Returns counts for `nnt scan` output. */\n ingest(records: Iterable<IngestRecord>): IngestResult {\n const result: IngestResult = { events: 0, written: 0, duplicates: 0, limits: 0, scopes: 0 }\n\n const run = this.sqlite.transaction((batch: IngestRecord[]) => {\n for (const rec of batch) {\n if (rec.type === 'event') {\n result.events += 1\n if (this.putEvent(rec.event)) result.written += 1\n else result.duplicates += 1\n } else if (rec.type === 'limit') {\n this.insertLimit.run(rec.limit)\n result.limits += 1\n } else {\n this.upsertScope.run({\n scopeHash: rec.scopeHash,\n label: rec.label,\n provider: rec.provider,\n lastSeen: Date.now(),\n })\n result.scopes += 1\n }\n }\n })\n\n // chunk so a very large scan doesn't hold one enormous transaction open\n let batch: IngestRecord[] = []\n for (const rec of records) {\n batch.push(rec)\n if (batch.length >= 5000) {\n run(batch)\n batch = []\n }\n }\n if (batch.length > 0) run(batch)\n\n return result\n }\n\n scanState(): ScanState {\n return {\n get: (sourcePath: string) => this.getCursor.get(sourcePath) as ScanCursor | undefined,\n set: (cursor: ScanCursor) => {\n this.setCursor.run(cursor)\n },\n }\n }\n\n latestEventTs(): number | null {\n const row = this.sqlite.prepare('SELECT MAX(ts) AS ts FROM events').get() as { ts: number | null }\n return row?.ts ?? null\n }\n\n eventCount(): number {\n return this.sqlite.prepare('SELECT COUNT(*) AS c FROM events').pluck().get() as number\n }\n\n /**\n * Collapse Cursor Auto-mode placeholders (`default`, `default,default,…`)\n * into a null unit_label so the UI shows a single \"unknown\" bucket.\n */\n repairPlaceholderLabels(): number {\n const rows = this.sqlite.prepare(\n `SELECT DISTINCT unit_label AS label FROM events WHERE unit_label IS NOT NULL`,\n ).all() as Array<{ label: string }>\n\n let changes = 0\n const update = this.sqlite.prepare(\n `UPDATE events SET unit_label = NULL WHERE unit_label = ?`,\n )\n const run = this.sqlite.transaction(() => {\n for (const { label } of rows) {\n if (!isDefaultPlaceholderLabel(label)) continue\n changes += update.run(label).changes\n }\n })\n run()\n return changes\n }\n}\n\n/** True when a stored model id is only Cursor's Auto `default` (possibly repeated). */\nfunction isDefaultPlaceholderLabel(label: string): boolean {\n const parts = label.split(',').map(p => p.trim().toLowerCase()).filter(Boolean)\n return parts.length > 0 && parts.every(p => p === 'default')\n}\n","import type BetterSqlite3 from 'better-sqlite3'\nimport type { Granularity, LimitSnapshot } from '@nomnomtokens/core'\n\n/**\n * The read layer. Aggregation runs in SQL rather than in JS: the dashboard has\n * to stay responsive over a year of history, and pulling 100k rows into the\n * Nitro process to sum them in a loop does not.\n */\n\nexport interface Filters {\n /** unix ms, inclusive */\n from?: number\n /** unix ms, exclusive */\n to?: number\n provider?: string[]\n scopeHash?: string[]\n sessionId?: string\n /** tokens don't add up with minutes — the UI always pins a kind before summing */\n kind?: string\n}\n\ninterface Where { sql: string, params: Record<string, unknown> }\n\nfunction buildWhere(f: Filters, prefix = 'e'): Where {\n const clauses: string[] = []\n const params: Record<string, unknown> = {}\n\n if (f.from !== undefined) {\n clauses.push(`${prefix}.ts >= @from`)\n params.from = f.from\n }\n if (f.to !== undefined) {\n clauses.push(`${prefix}.ts < @to`)\n params.to = f.to\n }\n if (f.kind) {\n clauses.push(`${prefix}.kind = @kind`)\n params.kind = f.kind\n }\n if (f.sessionId) {\n clauses.push(`${prefix}.session_id = @sessionId`)\n params.sessionId = f.sessionId\n }\n // named parameters can't hold a list, so these are expanded positionally into\n // uniquely-named placeholders rather than interpolated\n if (f.provider?.length) {\n const names = f.provider.map((v, i) => {\n params[`prov${i}`] = v\n return `@prov${i}`\n })\n clauses.push(`${prefix}.provider IN (${names.join(', ')})`)\n }\n if (f.scopeHash?.length) {\n const names = f.scopeHash.map((v, i) => {\n params[`scope${i}`] = v\n return `@scope${i}`\n })\n clauses.push(`${prefix}.scope_hash IN (${names.join(', ')})`)\n }\n\n return { sql: clauses.length ? `WHERE ${clauses.join(' AND ')}` : '', params }\n}\n\n/** SQLite has no date_trunc; these are the local-time bucket expressions. */\nconst BUCKET: Record<Granularity, string> = {\n hour: `strftime('%Y-%m-%dT%H:00:00', e.ts / 1000, 'unixepoch', 'localtime')`,\n day: `strftime('%Y-%m-%dT00:00:00', e.ts / 1000, 'unixepoch', 'localtime')`,\n week: `strftime('%Y-%m-%dT00:00:00', e.ts / 1000, 'unixepoch', 'localtime', 'weekday 1', '-7 days')`,\n month: `strftime('%Y-%m-01T00:00:00', e.ts / 1000, 'unixepoch', 'localtime')`,\n}\n\n/**\n * Sums of individual token buckets. `qty_json` is JSON rather than columns\n * because the contract is provider-agnostic, so the numbers come back out with\n * json_extract. SQLite's JSON1 handles this fine at our row counts.\n */\nconst QTY_SUMS = `\n COALESCE(SUM(json_extract(e.qty_json, '$.in')), 0) AS qtyIn,\n COALESCE(SUM(json_extract(e.qty_json, '$.out')), 0) AS qtyOut,\n COALESCE(SUM(json_extract(e.qty_json, '$.cacheCreate')), 0) AS qtyCacheCreate,\n COALESCE(SUM(json_extract(e.qty_json, '$.cacheCreate1h')), 0) AS qtyCacheCreate1h,\n COALESCE(SUM(json_extract(e.qty_json, '$.cacheRead')), 0) AS qtyCacheRead\n`\n\nconst TOTALS = `\n COALESCE(SUM(e.cost_usd), 0) AS costUsd,\n SUM(CASE WHEN e.cost_usd IS NULL THEN 1 ELSE 0 END) AS unpricedEvents,\n COALESCE(SUM(e.qty_total), 0) AS tokens,\n COUNT(*) AS events,\n COUNT(DISTINCT e.session_id) AS sessions,\n ${QTY_SUMS}\n`\n\nexport interface TotalsRow {\n costUsd: number\n unpricedEvents: number\n tokens: number\n events: number\n sessions: number\n qtyIn: number\n qtyOut: number\n qtyCacheCreate: number\n qtyCacheCreate1h: number\n qtyCacheRead: number\n}\n\nexport class Queries {\n constructor(private readonly sqlite: BetterSqlite3.Database) {}\n\n totals(f: Filters = {}): TotalsRow {\n const w = buildWhere(f)\n return this.sqlite\n .prepare(`SELECT ${TOTALS} FROM events e ${w.sql}`)\n .get(w.params) as TotalsRow\n }\n\n /**\n * Time series, optionally split by a dimension so the Timeline screen can\n * stack by model without N round trips.\n */\n series(\n granularity: Granularity,\n f: Filters = {},\n groupBy?: 'unitLabel' | 'provider' | 'scopeHash',\n ): Array<TotalsRow & { bucket: string, group: string | null }> {\n const w = buildWhere(f)\n const col = groupBy === 'unitLabel'\n ? 'e.unit_label'\n : groupBy === 'provider'\n ? 'e.provider'\n : groupBy === 'scopeHash' ? 'e.scope_hash' : null\n\n const groupSelect = col ? `${col} AS \"group\",` : `NULL AS \"group\",`\n const groupClause = col ? `, ${col}` : ''\n\n return this.sqlite.prepare(`\n SELECT ${BUCKET[granularity]} AS bucket, ${groupSelect} ${TOTALS}\n FROM events e ${w.sql}\n GROUP BY bucket${groupClause}\n ORDER BY bucket ASC\n `).all(w.params) as Array<TotalsRow & { bucket: string, group: string | null }>\n }\n\n /** weekday (0=Sunday) x hour grid for the Timeline heatmap. */\n heatmap(f: Filters = {}): Array<{ weekday: number, hour: number, costUsd: number, tokens: number, events: number }> {\n const w = buildWhere(f)\n return this.sqlite.prepare(`\n SELECT\n CAST(strftime('%w', e.ts / 1000, 'unixepoch', 'localtime') AS INTEGER) AS weekday,\n CAST(strftime('%H', e.ts / 1000, 'unixepoch', 'localtime') AS INTEGER) AS hour,\n COALESCE(SUM(e.cost_usd), 0) AS costUsd,\n COALESCE(SUM(e.qty_total), 0) AS tokens,\n COUNT(*) AS events\n FROM events e ${w.sql}\n GROUP BY weekday, hour\n `).all(w.params) as Array<{ weekday: number, hour: number, costUsd: number, tokens: number, events: number }>\n }\n\n byScope(f: Filters = {}): Array<TotalsRow & { scopeHash: string, label: string | null, lastSeen: number | null }> {\n const w = buildWhere(f)\n return this.sqlite.prepare(`\n SELECT e.scope_hash AS scopeHash, s.label AS label, s.last_seen AS lastSeen, ${TOTALS}\n FROM events e\n LEFT JOIN scopes s ON s.scope_hash = e.scope_hash\n ${w.sql}\n GROUP BY e.scope_hash\n ORDER BY costUsd DESC\n `).all(w.params) as Array<TotalsRow & { scopeHash: string, label: string | null, lastSeen: number | null }>\n }\n\n byProvider(f: Filters = {}): Array<TotalsRow & { provider: string }> {\n const w = buildWhere(f)\n return this.sqlite.prepare(`\n SELECT e.provider AS provider, ${TOTALS}\n FROM events e ${w.sql}\n GROUP BY e.provider\n ORDER BY costUsd DESC\n `).all(w.params) as Array<TotalsRow & { provider: string }>\n }\n\n byUnitLabel(f: Filters = {}): Array<TotalsRow & { unitLabel: string | null }> {\n const w = buildWhere(f)\n return this.sqlite.prepare(`\n SELECT e.unit_label AS unitLabel, ${TOTALS}\n FROM events e ${w.sql}\n GROUP BY e.unit_label\n ORDER BY costUsd DESC\n `).all(w.params) as Array<TotalsRow & { unitLabel: string | null }>\n }\n\n sessions(f: Filters = {}, limit = 200): Array<TotalsRow & {\n sessionId: string\n scopeHash: string\n label: string | null\n startedAt: number\n endedAt: number\n }> {\n const w = buildWhere(f)\n const params = { ...w.params, limit }\n return this.sqlite.prepare(`\n SELECT\n e.session_id AS sessionId,\n MIN(e.scope_hash) AS scopeHash,\n MIN(e.ts) AS startedAt,\n MAX(e.ts) AS endedAt,\n ${TOTALS}\n FROM events e\n ${w.sql}${w.sql ? ' AND' : 'WHERE'} e.session_id IS NOT NULL\n GROUP BY e.session_id\n ORDER BY endedAt DESC\n LIMIT @limit\n `).all(params).map((row) => {\n const r = row as TotalsRow & { sessionId: string, scopeHash: string, startedAt: number, endedAt: number }\n const scope = this.sqlite\n .prepare('SELECT label FROM scopes WHERE scope_hash = ?')\n .pluck()\n .get(r.scopeHash) as string | undefined\n return { ...r, label: scope ?? null }\n })\n }\n\n /** Raw events for one session, for the drill-down timeline. */\n sessionEvents(sessionId: string, limit = 2000): Array<{\n id: string\n ts: number\n unitLabel: string | null\n costUsd: number | null\n qty: Record<string, number>\n meta: Record<string, number>\n }> {\n return this.sqlite.prepare(`\n SELECT id, ts, unit_label AS unitLabel, cost_usd AS costUsd, qty_json AS qtyJson, meta_json AS metaJson\n FROM events WHERE session_id = ? ORDER BY ts ASC LIMIT ?\n `).all(sessionId, limit).map((row) => {\n const r = row as { id: string, ts: number, unitLabel: string | null, costUsd: number | null, qtyJson: string, metaJson: string }\n return {\n id: r.id,\n ts: r.ts,\n unitLabel: r.unitLabel,\n costUsd: r.costUsd,\n qty: JSON.parse(r.qtyJson) as Record<string, number>,\n meta: JSON.parse(r.metaJson) as Record<string, number>,\n }\n })\n }\n\n limitSnapshots(provider?: string, window?: string, since?: number): LimitSnapshot[] {\n const clauses: string[] = []\n const params: Record<string, unknown> = {}\n if (provider) {\n clauses.push('provider = @provider')\n params.provider = provider\n }\n if (window) {\n clauses.push('window = @window')\n params.window = window\n }\n if (since !== undefined) {\n clauses.push('ts >= @since')\n params.since = since\n }\n const where = clauses.length ? `WHERE ${clauses.join(' AND ')}` : ''\n return this.sqlite.prepare(`\n SELECT ts, provider, window, used_pct AS usedPct, resets_at AS resetsAt\n FROM limits ${where} ORDER BY ts ASC\n `).all(params) as LimitSnapshot[]\n }\n\n /** Distinct (provider, window) pairs that have any limit history. */\n limitWindows(): Array<{ provider: string, window: string }> {\n return this.sqlite\n .prepare('SELECT DISTINCT provider, window FROM limits ORDER BY provider, window')\n .all() as Array<{ provider: string, window: string }>\n }\n\n scopeLabels(): Array<{ scopeHash: string, label: string, provider: string, lastSeen: number }> {\n return this.sqlite.prepare(`\n SELECT scope_hash AS scopeHash, label, provider, last_seen AS lastSeen\n FROM scopes ORDER BY last_seen DESC\n `).all() as Array<{ scopeHash: string, label: string, provider: string, lastSeen: number }>\n }\n\n /**\n * Lines the agent changed while earning the spend in `f`.\n *\n * Read from token-kind events, where the JSONL parser attributes each diff to\n * the turn that produced it, so this works with no status line hook\n * installed. `meta` is numbers-only by contract, so json_extract is safe here.\n */\n lineTotals(f: Filters = {}): { added: number, removed: number } {\n const w = buildWhere(f)\n const row = this.sqlite.prepare(`\n SELECT\n COALESCE(SUM(json_extract(e.meta_json, '$.linesAdded')), 0) AS added,\n COALESCE(SUM(json_extract(e.meta_json, '$.linesRemoved')), 0) AS removed\n FROM events e ${w.sql}\n `).get(w.params) as { added: number, removed: number }\n return row\n }\n\n /** Bounds of the whole dataset — drives the empty state and default range. */\n bounds(): { first: number | null, last: number | null, events: number } {\n return this.sqlite\n .prepare('SELECT MIN(ts) AS first, MAX(ts) AS last, COUNT(*) AS events FROM events')\n .get() as { first: number | null, last: number | null, events: number }\n }\n}\n","/** Terminal formatting helpers. No dependency — colours are eight escape codes. */\n\nconst ESC = '\u001b'\nconst useColor = process.stdout.isTTY && process.env.NO_COLOR === undefined\n\nconst wrap = (code: string) => (s: string) =>\n useColor ? `${ESC}[${code}m${s}${ESC}[0m` : s\n\nexport const c = {\n bold: wrap('1'),\n dim: wrap('2'),\n red: wrap('31'),\n green: wrap('32'),\n yellow: wrap('33'),\n blue: wrap('34'),\n magenta: wrap('35'),\n cyan: wrap('36'),\n}\n\nexport function usd(n: number | null | undefined): string {\n if (n === null || n === undefined) return '—'\n if (n === 0) return '$0.00'\n if (n < 0.01) return `$${n.toFixed(4)}`\n return `$${n.toFixed(2)}`\n}\n\nexport function compactNumber(n: number): string {\n const abs = Math.abs(n)\n if (abs >= 1e9) return `${(n / 1e9).toFixed(1)}B`\n if (abs >= 1e6) return `${(n / 1e6).toFixed(1)}M`\n if (abs >= 1e3) return `${(n / 1e3).toFixed(1)}k`\n return String(Math.round(n))\n}\n\nexport function duration(ms: number): string {\n if (ms < 1000) return `${Math.round(ms)}ms`\n return `${(ms / 1000).toFixed(1)}s`\n}\n\nexport function pct(n: number | null | undefined): string {\n return n === null || n === undefined ? '—' : `${n.toFixed(1)}%`\n}\n\nexport const MASCOT = String.raw`\n (\\_/)\n ( o.o ) nom nom nom\n > ^ <\n`\n","import { existsSync, readFileSync, statSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport {\n claudeProjectsDir,\n codexSessionsDir,\n cursorStateDbPath,\n detectAdapters,\n} from '@nomnomtokens/adapters'\nimport { defaultDbPath, openDb, Queries } from '@nomnomtokens/db'\nimport { c, compactNumber, usd } from '../format.js'\n\n/** `nnt doctor` answers \"why is the dashboard empty?\" without reading source. */\n\nfunction check(ok: boolean, label: string, detail?: string): void {\n const mark = ok ? c.green('✔') : c.yellow('✗')\n console.log(`${mark} ${label}${detail ? c.dim(` ${detail}`) : ''}`)\n}\n\nexport async function doctor(opts: { db?: string } = {}): Promise<void> {\n console.log(c.bold('nomnomtokens doctor'))\n console.log()\n\n console.log(c.bold('Sources'))\n const projects = claudeProjectsDir()\n check(existsSync(projects), 'Claude Code transcripts', projects)\n\n const cursorDb = cursorStateDbPath()\n check(existsSync(cursorDb), 'Cursor state database', cursorDb)\n\n const codexSessions = codexSessionsDir()\n check(existsSync(codexSessions), 'Codex session rollouts', codexSessions)\n\n const adapters = await detectAdapters()\n check(adapters.length > 0, `${adapters.length} adapter(s) detected`, adapters.map(a => a.name).join(', ') || 'none')\n\n console.log()\n console.log(c.bold('Status line'))\n const settingsFile = join(homedir(), '.claude', 'settings.json')\n let statusLineCommand: string | undefined\n if (existsSync(settingsFile)) {\n try {\n const parsed = JSON.parse(readFileSync(settingsFile, 'utf8')) as {\n statusLine?: { command?: string }\n }\n statusLineCommand = parsed.statusLine?.command\n } catch {\n statusLineCommand = undefined\n }\n }\n const wired = statusLineCommand?.includes('nomnomtokens') ?? false\n check(wired, 'hook installed', statusLineCommand ?? 'not configured — run `nnt init`')\n if (!wired) {\n console.log(c.dim(' Without it: history still works, but limits and live updates do not.'))\n }\n\n console.log()\n console.log(c.bold('Store'))\n const dbPath = opts.db ?? defaultDbPath()\n const exists = existsSync(dbPath)\n check(exists, 'database', exists ? `${dbPath} (${(statSync(dbPath).size / 1e6).toFixed(1)} MB)` : `${dbPath} — run \\`nnt scan\\``)\n\n if (exists) {\n const { sqlite } = openDb(dbPath)\n const q = new Queries(sqlite)\n const bounds = q.bounds()\n const totals = q.totals({ kind: 'tokens' })\n const windows = q.limitWindows()\n\n check(bounds.events > 0, `${bounds.events} events`, bounds.first\n ? `${new Date(bounds.first).toISOString().slice(0, 10)} → ${new Date(bounds.last!).toISOString().slice(0, 10)}`\n : 'empty — run `nnt scan`')\n console.log(c.dim(` lifetime: ${usd(totals.costUsd)}, ${compactNumber(totals.tokens)} tokens, ${totals.sessions} sessions`))\n\n if (totals.unpricedEvents > 0) {\n check(false, `${totals.unpricedEvents} events could not be priced`, 'unknown model id — see packages/core/src/pricing.ts')\n }\n check(windows.length > 0, 'limit history', windows.length > 0\n ? windows.map(w => `${w.provider}/${w.window}`).join(', ')\n : 'none yet — the status line hook has not fired')\n\n sqlite.close()\n }\n\n console.log()\n console.log(c.dim('Nothing above ever leaves this machine. See docs/privacy.md.'))\n}\n","import { copyFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { dirname, join } from 'node:path'\nimport { c } from '../format.js'\n\n/**\n * Wire the statusline hook into ~/.claude/settings.json.\n *\n * We are editing a file the user owns and that another program reads on every\n * keystroke, so: back it up, preserve unknown keys, refuse to clobber an\n * existing statusLine without --force, and print exactly what changed.\n */\n\nexport interface InitOptions {\n settings?: string\n force?: boolean\n /** print the change without writing it */\n dryRun?: boolean\n}\n\nfunction settingsPath(override?: string): string {\n return override ?? join(homedir(), '.claude', 'settings.json')\n}\n\ninterface ClaudeSettings {\n statusLine?: { type?: string, command?: string, padding?: number }\n [key: string]: unknown\n}\n\nexport function init(opts: InitOptions = {}): void {\n const path = settingsPath(opts.settings)\n const command = 'npx -y nomnomtokens statusline'\n\n let settings: ClaudeSettings = {}\n if (existsSync(path)) {\n const text = readFileSync(path, 'utf8')\n try {\n settings = JSON.parse(text) as ClaudeSettings\n } catch {\n console.error(c.red(`${path} is not valid JSON — refusing to overwrite it.`))\n console.error(c.dim('Fix the file (or pass --settings elsewhere) and run `nnt init` again.'))\n process.exitCode = 1\n return\n }\n }\n\n const existing = settings.statusLine?.command\n if (existing && existing !== command && !opts.force) {\n console.error(c.yellow('You already have a status line configured:'))\n console.error(` ${existing}`)\n console.error()\n console.error('nomnomtokens can capture limits without owning the status line — it only')\n console.error('needs to be invoked with the session JSON. Either:')\n console.error(` • add ${c.cyan('| npx -y nomnomtokens statusline')} to your own script, or`)\n console.error(` • run ${c.cyan('nnt init --force')} to replace it.`)\n process.exitCode = 1\n return\n }\n\n if (existing === command) {\n console.log(c.green('Already wired up.'))\n console.log(c.dim(` ${path} -> statusLine.command = ${command}`))\n return\n }\n\n settings.statusLine = { type: 'command', command, padding: 0 }\n const next = `${JSON.stringify(settings, null, 2)}\\n`\n\n if (opts.dryRun) {\n console.log(c.dim(`would write ${path}:`))\n console.log(next)\n return\n }\n\n mkdirSync(dirname(path), { recursive: true })\n if (existsSync(path)) {\n const backup = `${path}.nnt-backup`\n copyFileSync(path, backup)\n console.log(c.dim(`backed up ${path} -> ${backup}`))\n }\n writeFileSync(path, next, 'utf8')\n\n console.log(c.green('Status line wired up.'))\n console.log(c.dim(` ${path} -> statusLine.command = ${command}`))\n console.log()\n console.log('Restart Claude Code, then run `nnt serve` to open the dashboard.')\n console.log(c.dim('Limits and live updates only start flowing once the hook has fired once.'))\n}\n","import { detectAdapters } from '@nomnomtokens/adapters'\nimport type { IngestRecord } from '@nomnomtokens/core'\nimport { openDb, Queries, Repo } from '@nomnomtokens/db'\nimport { bucketStart } from '@nomnomtokens/core'\nimport { c, compactNumber, duration, usd } from '../format.js'\n\nexport interface ScanOptions {\n db?: string\n watch?: boolean\n quiet?: boolean\n}\n\nexport async function scan(opts: ScanOptions = {}): Promise<void> {\n const started = Date.now()\n const { db: _drizzle, sqlite, path } = openDb(opts.db)\n const repo = new Repo(sqlite)\n const queries = new Queries(sqlite)\n const state = repo.scanState()\n\n const adapters = await detectAdapters()\n if (adapters.length === 0) {\n console.error(c.yellow('No sources detected on this machine.'))\n console.error(c.dim('Looks for ~/.claude/projects, Cursor state.vscdb, and ~/.codex/sessions. Run `nnt doctor`.'))\n process.exitCode = 1\n return\n }\n\n for (const adapter of adapters) {\n // Drained in chunks so a first scan of a year of logs never materialises in\n // memory, and so a Ctrl-C halfway through still leaves the earlier chunks\n // committed with their scan cursors.\n const records: AsyncIterable<IngestRecord> = adapter.scan(state)\n const result = { events: 0, written: 0, duplicates: 0, limits: 0, scopes: 0 }\n // Row count before/after is the only honest measure of \"new\": an upsert\n // that rewrites an identical row still reports a change, so `written`\n // alone would count Claude Code's repeated turns as fresh data.\n const rowsBefore = repo.eventCount()\n let batch: IngestRecord[] = []\n\n const flush = () => {\n if (batch.length === 0) return\n const r = repo.ingest(batch)\n result.events += r.events\n result.written += r.written\n result.duplicates += r.duplicates\n result.limits += r.limits\n result.scopes += r.scopes\n batch = []\n }\n\n for await (const rec of records) {\n batch.push(rec)\n if (batch.length >= 5000) flush()\n }\n flush()\n\n const added = repo.eventCount() - rowsBefore\n if (!opts.quiet) {\n const repeats = result.events - added\n console.log(\n `${c.cyan(adapter.name)} `\n + `${c.bold(String(added))} new `\n + c.dim(\n `${result.events} seen, ${repeats} repeated by the source, `\n + `${result.limits} limits, ${result.scopes} scopes`,\n ),\n )\n }\n }\n\n const repaired = repo.repairPlaceholderLabels()\n if (!opts.quiet && repaired > 0) {\n console.log(c.dim(`normalized ${repaired} Cursor Auto placeholder label(s) → unknown`))\n }\n\n if (!opts.quiet) {\n const todayStart = bucketStart(Date.now(), 'day')\n const today = queries.totals({ from: todayStart, kind: 'tokens' })\n const all = queries.bounds()\n\n console.log()\n console.log(\n `${c.bold('Eaten today')} ${c.green(usd(today.costUsd))} `\n + c.dim(`${compactNumber(today.tokens)} tokens, ${today.sessions} sessions`),\n )\n if (today.unpricedEvents > 0) {\n console.log(c.dim(` (${today.unpricedEvents} events had no price and are excluded from cost)`))\n }\n console.log(\n c.dim(`${all.events} events in ${path} — scanned in ${duration(Date.now() - started)}`),\n )\n }\n\n if (opts.watch) {\n console.log(c.dim('\\nWatching for changes. Ctrl-C to stop.'))\n const stops = adapters\n .filter(a => a.watch)\n .map(a => a.watch!(rec => repo.ingest([rec])))\n await new Promise<void>((resolve) => {\n process.on('SIGINT', () => {\n stops.forEach(stop => stop())\n resolve()\n })\n })\n }\n\n sqlite.close()\n}\n","import { spawn } from 'node:child_process'\nimport { existsSync } from 'node:fs'\nimport { dirname, join, resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { defaultDbPath } from '@nomnomtokens/db'\nimport { c, MASCOT } from '../format.js'\nimport { scan } from './scan.js'\n\nexport interface ServeOptions {\n port?: number\n db?: string\n open?: boolean\n /** skip the catch-up scan before starting */\n noScan?: boolean\n}\n\nconst here = dirname(fileURLToPath(import.meta.url))\n\n/**\n * Locate the built Nuxt server.\n *\n * Three layouts have to work: the published package (`web/` shipped next to\n * `dist/`), the workspace running from source via tsx, and the workspace\n * running from `dist/`. Rather than count `..` segments per layout — which is\n * how this broke the first time — walk up and look for either shape.\n */\nfunction findBuiltServer(): string | null {\n let dir = here\n for (let depth = 0; depth < 8; depth++) {\n const candidates = [\n join(dir, 'web', 'server', 'index.mjs'),\n join(dir, 'apps', 'web', '.output', 'server', 'index.mjs'),\n ]\n const found = candidates.find(existsSync)\n if (found) return found\n\n const parent = resolve(dir, '..')\n if (parent === dir) break\n dir = parent\n }\n return null\n}\n\nfunction openBrowser(url: string): void {\n const cmd = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open'\n spawn(cmd, [url], { stdio: 'ignore', detached: true, shell: process.platform === 'win32' }).unref()\n}\n\nexport async function serve(opts: ServeOptions = {}): Promise<void> {\n const port = opts.port ?? 4269\n const dbPath = opts.db ?? defaultDbPath()\n\n // Catch up on history before the browser opens, so the first paint has data\n // in it rather than an empty state that fills in a second later.\n if (!opts.noScan) {\n console.log(c.dim('catching up on history…'))\n await scan({ db: dbPath, quiet: true })\n // Having nothing to scan is a failure for `nnt scan` but not for `serve`:\n // a first-run machine with no agent history should still get a dashboard\n // and its empty state, and should still exit 0 when you close it.\n process.exitCode = undefined\n }\n\n const entry = findBuiltServer()\n if (!entry) {\n console.error(c.yellow('No built dashboard found.'))\n console.error(c.dim('In this repo, run: pnpm --filter @nomnomtokens/web build'))\n console.error(c.dim('or for live reload: pnpm dev'))\n process.exitCode = 1\n return\n }\n\n const url = `http://localhost:${port}`\n console.log(MASCOT)\n console.log(` ${c.bold('nomnomtokens')} ${c.dim('→')} ${c.cyan(url)}`)\n console.log(c.dim(` reading ${dbPath}`))\n console.log()\n\n const child = spawn(process.execPath, [entry], {\n stdio: 'inherit',\n env: {\n ...process.env,\n PORT: String(port),\n NITRO_PORT: String(port),\n NOMNOMTOKENS_DB: dbPath,\n },\n })\n\n if (opts.open !== false) setTimeout(() => openBrowser(url), 600)\n\n await new Promise<void>((resolvePromise) => {\n child.on('exit', () => resolvePromise())\n process.on('SIGINT', () => child.kill('SIGINT'))\n })\n}\n","import type { StatuslinePayload } from '@nomnomtokens/adapters'\nimport { parseStatusline } from '@nomnomtokens/adapters'\nimport { moodFor } from '@nomnomtokens/core'\nimport { openDb, Repo } from '@nomnomtokens/db'\nimport { compactNumber, usd } from '../format.js'\n\n/**\n * `nnt statusline` is both an ingest hook and a real status line.\n *\n * Claude Code pipes its session JSON to whatever `statusLine.command` points\n * at and renders the stdout. We use that call to capture the two things the\n * transcript never contains — subscription limits and per-session line counts —\n * and pay the user back by printing something worth having in the bar.\n *\n * It must be fast and it must never fail loudly: a hook that throws puts an\n * error in the user's status bar on every render.\n */\n\nconst MOOD_FACE: Record<string, string> = {\n hungry: '(・_・)',\n content: '(^_^)',\n full: '(^u^)',\n stuffed: '(>_<)',\n overstuffed: '(x_x)',\n}\n\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = []\n for await (const chunk of process.stdin) chunks.push(chunk as Buffer)\n return Buffer.concat(chunks).toString('utf8')\n}\n\nexport interface StatuslineOptions {\n db?: string\n /** skip the write and only render — useful for testing the output format */\n dryRun?: boolean\n}\n\nexport async function statusline(opts: StatuslineOptions = {}): Promise<void> {\n let payload: StatuslinePayload\n try {\n payload = JSON.parse(await readStdin()) as StatuslinePayload\n } catch {\n // No payload means we were run by hand. Say so instead of printing nothing.\n process.stdout.write('nomnomtokens: expected Claude Code session JSON on stdin\\n')\n return\n }\n\n const limits = payload.rate_limits\n const fiveHour = limits?.five_hour?.used_percentage ?? null\n const sevenDay = limits?.seven_day?.used_percentage ?? null\n const cost = payload.cost?.total_cost_usd ?? null\n const ctx = payload.context_window?.used_percentage ?? null\n\n // Render first, persist second: the user's status bar should not wait on a\n // database write, and a locked DB must never blank the bar.\n const parts: string[] = []\n parts.push(MOOD_FACE[moodFor(Math.max(fiveHour ?? 0, sevenDay ?? 0))] ?? '(^_^)')\n if (cost !== null) parts.push(usd(cost))\n if (ctx !== null) parts.push(`ctx ${Math.round(ctx)}%`)\n if (fiveHour !== null) parts.push(`5h ${Math.round(fiveHour)}%`)\n if (sevenDay !== null) parts.push(`7d ${Math.round(sevenDay)}%`)\n\n const lines = (payload.cost?.total_lines_added ?? 0) + (payload.cost?.total_lines_removed ?? 0)\n if (lines > 0) parts.push(`${compactNumber(lines)} lines`)\n\n process.stdout.write(`${parts.join(' ')}\\n`)\n\n if (opts.dryRun) return\n\n try {\n const { sqlite } = openDb(opts.db)\n const repo = new Repo(sqlite)\n repo.ingest(await parseStatusline(payload))\n sqlite.close()\n } catch {\n // Swallowed on purpose. Losing one statusline sample is invisible; an\n // exception here would print a stack trace into the status bar forever.\n }\n}\n","#!/usr/bin/env node\nimport { readFileSync } from 'node:fs'\nimport { dirname, join, resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { Command } from 'commander'\nimport { doctor } from './commands/doctor.js'\nimport { init } from './commands/init.js'\nimport { scan } from './commands/scan.js'\nimport { serve } from './commands/serve.js'\nimport { statusline } from './commands/statusline.js'\n\n/** Walk up from this file until we find the published root package.json. */\nfunction packageVersion(): string {\n let dir = dirname(fileURLToPath(import.meta.url))\n for (let i = 0; i < 8; i++) {\n try {\n const pkg = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8')) as {\n name?: string\n version?: string\n }\n if (pkg.name === 'nomnomtokens' && pkg.version) return pkg.version\n } catch {\n // keep walking\n }\n const parent = resolve(dir, '..')\n if (parent === dir) break\n dir = parent\n }\n return '0.0.0'\n}\n\nconst program = new Command()\n\nprogram\n .name('nnt')\n .description('nom nom nom — your agent is eating tokens. The dashboard shows exactly how many.')\n .version(packageVersion())\n .option('--db <path>', 'database file (default: ~/.nomnomtokens/data.db)')\n\nprogram\n .command('scan', { isDefault: false })\n .description('read new records from every detected source into the local store')\n .option('-w, --watch', 'stay running and ingest new records as they are written')\n .option('-q, --quiet', 'suppress the summary')\n .action(async (opts: { watch?: boolean, quiet?: boolean }) => {\n await scan({ ...opts, db: program.opts().db as string | undefined })\n })\n\nprogram\n .command('serve')\n .description('scan, then open the dashboard')\n .option('-p, --port <port>', 'port to listen on', v => Number.parseInt(v, 10), 4269)\n .option('--no-open', 'do not open a browser')\n .option('--no-scan', 'skip the catch-up scan')\n .action(async (opts: { port: number, open: boolean, scan: boolean }) => {\n await serve({\n port: opts.port,\n open: opts.open,\n noScan: !opts.scan,\n db: program.opts().db as string | undefined,\n })\n })\n\nprogram\n .command('init')\n .description('wire the statusline hook into ~/.claude/settings.json')\n .option('-f, --force', 'replace an existing status line')\n .option('-n, --dry-run', 'print the change without writing it')\n .option('--settings <path>', 'settings file to edit')\n .action((opts: { force?: boolean, dryRun?: boolean, settings?: string }) => {\n init(opts)\n })\n\nprogram\n .command('statusline')\n .description('read Claude Code session JSON on stdin; record limits and print a status line')\n .option('-n, --dry-run', 'render without writing to the store')\n .action(async (opts: { dryRun?: boolean }) => {\n await statusline({ ...opts, db: program.opts().db as string | undefined })\n })\n\nprogram\n .command('doctor')\n .description('check sources, hook wiring and the local store')\n .action(async () => {\n await doctor({ db: program.opts().db as string | undefined })\n })\n\n/**\n * `npx nomnomtokens` is the advertised entry point, so an invocation with no\n * subcommand means \"open the dashboard\" rather than \"print help at someone who\n * just wanted the dashboard\".\n *\n * That has to hold for `nnt --port 5000` too, not only for a bare `nnt` — the\n * flags belong to serve, and making the user type the word `serve` to use them\n * is the kind of papercut that gets a tool uninstalled. So: if the arguments\n * name no command and aren't asking for help, insert `serve`.\n */\nconst COMMANDS = new Set(['scan', 'serve', 'init', 'statusline', 'doctor', 'help'])\nconst META_FLAGS = new Set(['-h', '--help', '-V', '--version'])\n\nconst args = process.argv.slice(2)\nconst isImplicitServe\n = !args.some(arg => COMMANDS.has(arg))\n && !args.some(arg => META_FLAGS.has(arg))\n\nawait program.parseAsync(\n isImplicitServe ? [...process.argv.slice(0, 2), 'serve', ...args] : process.argv,\n)\n"]}
|