@murumets-ee/db 0.61.0 → 0.63.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/dist/extensions-CEyIHQA7.mjs +2 -0
- package/dist/extensions-CEyIHQA7.mjs.map +1 -0
- package/dist/index.d.mts +27 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +6 -6
- package/dist/index.mjs.map +1 -1
- package/dist/test-utils.d.mts.map +1 -1
- package/dist/test-utils.mjs +1 -1
- package/dist/test-utils.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/extensions-CyFQK8AR.mjs +0 -2
- package/dist/extensions-CyFQK8AR.mjs.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=Symbol.for(`@murumets-ee/db:transaction-hooks`),t=Symbol.for(`@murumets-ee/db:transaction-hooks:tracked`);function n(){let t=globalThis,n=t[e];return n||(n={handles:new WeakMap},t[e]=n),n}function r(e){if(e[t])return e;let n=e.transaction.bind(e);return e.transaction=(e,t)=>o(e=>n(e,t),e),Object.defineProperty(e,t,{value:!0}),e}function i(e,t){if(e==null)return!1;let r=n().handles.get(e),i=r?.stack[r.stack.length-1];return i?(i.callbacks.push(t),!0):!1}function a(e){return e!=null&&n().handles.has(e)}async function o(e,t){let r={stack:[{callbacks:[]}]},i=await e(async e=>{s(e,r);try{return await t(e)}finally{n().handles.delete(e)}}),a=[...r.stack[0]?.callbacks??[]];for(let e of a)await c(e);return i}function s(e,t){n().handles.set(e,t);let r=e.transaction.bind(e);e.transaction=async e=>{let i=t.stack[t.stack.length-1];if(!i)throw Error(`transaction-hooks: a savepoint opened on a transaction with no open frame`);let a={callbacks:[]},o=await r(async r=>{t.stack.push(a),s(r,t);try{return await e(r)}finally{n().handles.delete(r);let e=t.stack.lastIndexOf(a);e!==-1&&t.stack.splice(e,1)}});return i.callbacks.push(...a.callbacks),o}}async function c(e){try{await e()}catch(e){let t=e instanceof Error?e.stack:void 0;process.emitWarning(`An on-commit callback threw after its transaction committed. The write stands, and the remaining callbacks still ran: `+(e instanceof Error?e.message:String(e)),{code:`TOOLKIT_ON_COMMIT_CALLBACK_FAILED`,...t!==void 0&&{detail:t}})}}const l=/^[a-z_][a-z0-9_]*$/;function u(e){if(!l.test(e))throw Error(`Invalid Postgres extension name: ${JSON.stringify(e)}. Must match ${l} (lowercase letters, digits, underscores; no quotes, whitespace, or punctuation).`)}function d(e){return u(e),`CREATE EXTENSION IF NOT EXISTS "${e}"`}export{i as a,a as i,u as n,r as o,d as r,l as t};
|
|
2
|
+
//# sourceMappingURL=extensions-CEyIHQA7.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensions-CEyIHQA7.mjs","names":["marked"],"sources":["../src/transaction-hooks.ts","../src/extensions.ts"],"sourcesContent":["/**\n * Per-transaction on-commit callbacks — Django's `transaction.on_commit`, for\n * drizzle's postgres-js driver (rent-go-live PR13, F023).\n *\n * ## Why this exists\n *\n * Some work is only correct once a write is TRUE: telling another process its\n * cache is stale, maintaining an index that other connections read. Inside a\n * transaction the CALLER owns, the code making the write cannot know whether it\n * will commit — and drizzle exposes no after-commit hook (postgres-js offers\n * `begin` and `savepoint`, nothing that runs after COMMIT). Firing immediately\n * announces writes that a later statement in the same transaction may still\n * roll back, which is exactly what F023 found `AdminClient` doing.\n *\n * ## Semantics — Django's, deliberately\n *\n * - A callback registered on a tracked transaction runs after that transaction\n * COMMITS and before `db.transaction()` resolves, in registration order, each\n * awaited — so a caller's next statement cannot race its own side effects.\n * - A rollback discards every callback the transaction registered, and \"a\n * rollback\" is whatever postgres-js decides, not only a throw out of the body:\n * `tx.rollback()`, a COMMIT that fails (a deferred constraint is checked\n * there), and a body that CAUGHT a failed statement and returned normally —\n * postgres-js records every statement's error on its transaction and rolls it\n * back once the body returns.\n * - A savepoint (`tx.transaction(...)`) is a frame of its own. Its callbacks join\n * the enclosing frame only once its savepoint scope has settled without a\n * ROLLBACK TO — never merely because its body returned, since the same\n * caught-statement rule can still roll it back after that. (postgres-js never\n * sends RELEASE SAVEPOINT; a completed savepoint simply stays part of its\n * parent until COMMIT.) Rolled back, its callbacks are discarded and the\n * enclosing frame's are kept.\n * - Registration binds to the innermost OPEN frame, whichever handle it arrives\n * through. One connection runs every statement, so a write made through the\n * outer `tx` while a savepoint is open is inside that savepoint and rolls back\n * with it — its callback must too.\n * - A callback that throws cannot fail the transaction: it has already\n * committed, and reporting a committed write as failed invites a retry of work\n * that is done. It is reported through `process.emitWarning` (this package is\n * logger-free, as `table/registry.ts` notes) and the remaining callbacks still\n * run. Callers that own a logger should catch and log themselves; this is the\n * last resort, not the reporting channel.\n * - `onCommit` on anything that is not an OPEN tracked transaction returns\n * `false` and does nothing. Django runs the callback immediately there;\n * returning instead leaves \"no transaction\" to the caller, whose immediate\n * path may rightly want errors to propagate.\n *\n * ## What running later means for a caller\n *\n * - A callback runs in the async context of the `db.transaction()` CALL, not of\n * the statement that registered it. A body that switches `AsyncLocalStorage`\n * context inside the transaction (elevating with `runWithContextAsync`, say)\n * must not expect its callbacks to inherit the switch.\n * - A connection lost DURING COMMIT rejects `db.transaction()` and discards the\n * callbacks, although the COMMIT may have reached the server. Django has the\n * same gap; it is the one case where \"discarded\" can mean \"not run for a write\n * that happened\".\n * - A transaction holds its callbacks, and whatever they close over, until it\n * commits: one closure per registration. That is the work the caller would\n * have done inline, moved later — it adds no fan-out of its own.\n *\n * ## Where tracking is installed\n *\n * `createDbClient` — so every `app.db.readWrite` built by `createApp`, and the\n * CLI's — and `createTestDb`, so integration suites run the production shape. A\n * client built with a bare `drizzle(...)` is untracked and `onCommit` refuses\n * its transactions.\n *\n * ## Why the registry lives on `globalThis`\n *\n * Tracking is installed through one entry (`createDbClient` in `.`,\n * `createTestDb` in `./test-utils`) and read through another (`onCommit`,\n * imported by `@murumets-ee/entity`). Our own build emits this module once, into\n * a chunk both entries share — but a consumer's bundler is free to duplicate it,\n * and Turbopack's dev module duplication is a failure mode this repo has already\n * shipped. A module-local registry would then exist twice, and a transaction\n * tracked by one copy would be invisible to `onCommit` from the other: silently,\n * with every callback refused and every seam falling back to firing in-tx. Same\n * `Symbol.for` slot shape as `@murumets-ee/queue`'s enqueue-on-commit slot and\n * `@murumets-ee/entity`'s write-observer slot.\n *\n * ## Not supported\n *\n * Concurrent savepoints on one transaction (`Promise.all` over\n * `tx.transaction(...)`). They share a connection, their SAVEPOINT and ROLLBACK TO\n * statements interleave, and a frame stack cannot know which callback belongs to\n * which; drizzle gives that shape no defined meaning either. Nor a savepoint the\n * body does not await: its callbacks merge whenever its promise settles, and if\n * that is after the transaction committed, they never run.\n */\n\nimport type { PostgresJsDatabase } from 'drizzle-orm/postgres-js'\n\n/** Work to run once the transaction it was registered on has committed. */\nexport type CommitCallback = () => void | Promise<void>\n\ntype DatabaseTransaction = PostgresJsDatabase['transaction']\n/** The handle drizzle passes to a transaction body — outer or savepoint. */\ntype TransactionHandle = Parameters<Parameters<DatabaseTransaction>[0]>[0]\ntype TransactionConfig = Parameters<DatabaseTransaction>[1]\n\n/** Callbacks registered while one transaction or savepoint was the innermost open one. */\ninterface Frame {\n callbacks: CommitCallback[]\n}\n\n/**\n * One outermost transaction. `stack[0]` is the transaction's own frame; each\n * open savepoint pushes one above it.\n */\ninterface Root {\n stack: Frame[]\n}\n\ninterface HookState {\n /** Every OPEN handle (outer or savepoint) → the root transaction it belongs to. */\n handles: WeakMap<object, Root>\n}\n\nconst STATE_KEY = Symbol.for('@murumets-ee/db:transaction-hooks')\nconst TRACKED_KEY = Symbol.for('@murumets-ee/db:transaction-hooks:tracked')\n\nfunction hookState(): HookState {\n const slot = globalThis as { [STATE_KEY]?: HookState }\n let state = slot[STATE_KEY]\n if (!state) {\n state = { handles: new WeakMap() }\n slot[STATE_KEY] = state\n }\n return state\n}\n\n/**\n * Install on-commit tracking on a read-write client, in place, and return it.\n *\n * Idempotent: a client that is already tracked is returned untouched, so a\n * callback never runs twice because two layers each installed tracking.\n */\nexport function trackTransactions<TDb extends PostgresJsDatabase>(db: TDb): TDb {\n const marked = db as TDb & { [TRACKED_KEY]?: true }\n if (marked[TRACKED_KEY]) return db\n\n const begin = db.transaction.bind(db)\n db.transaction = <T>(\n run: (tx: TransactionHandle) => Promise<T>,\n config?: TransactionConfig,\n ): Promise<T> => runOutermost((body) => begin(body, config), run)\n\n Object.defineProperty(db, TRACKED_KEY, { value: true })\n return db\n}\n\n/**\n * Register `callback` to run after the transaction `executor` belongs to\n * commits. Returns `true` when it was registered, and `false` — having done\n * nothing — when `executor` is not an open tracked transaction, in which case\n * the caller decides whether to run the work now.\n */\nexport function onCommit(executor: object | null | undefined, callback: CommitCallback): boolean {\n if (executor === null || executor === undefined) return false\n const root = hookState().handles.get(executor)\n const frame = root?.stack[root.stack.length - 1]\n if (!frame) return false\n frame.callbacks.push(callback)\n return true\n}\n\n/** Whether `executor` is a transaction handle that is open and tracked right now. */\nexport function isTrackedTransaction(executor: object | null | undefined): boolean {\n return executor !== null && executor !== undefined && hookState().handles.has(executor)\n}\n\nasync function runOutermost<T>(\n begin: (body: (tx: TransactionHandle) => Promise<T>) => Promise<T>,\n run: (tx: TransactionHandle) => Promise<T>,\n): Promise<T> {\n const root: Root = { stack: [{ callbacks: [] }] }\n\n // Any rollback — a throw, `tx.rollback()`, a caught statement error, a failed\n // COMMIT — rejects here, before a callback is read, and the root is dropped\n // with everything registered on it.\n const result = await begin(async (tx) => {\n adopt(tx, root)\n try {\n return await run(tx)\n } finally {\n // No registrations once the body is done: it can no longer write.\n hookState().handles.delete(tx)\n }\n })\n\n // COMMITTED. A snapshot, so a straggler merging in while these run — an\n // unawaited savepoint settling late — is not picked up mid-iteration.\n const callbacks = [...(root.stack[0]?.callbacks ?? [])]\n for (const callback of callbacks) {\n await runCallback(callback)\n }\n return result\n}\n\n/** Track an open handle, and make its savepoints keep frames of their own. */\nfunction adopt(tx: TransactionHandle, root: Root): void {\n hookState().handles.set(tx, root)\n\n const savepoint = tx.transaction.bind(tx)\n tx.transaction = async <T>(run: (sp: TransactionHandle) => Promise<T>): Promise<T> => {\n const enclosing = root.stack[root.stack.length - 1]\n if (!enclosing) {\n throw new Error('transaction-hooks: a savepoint opened on a transaction with no open frame')\n }\n const frame: Frame = { callbacks: [] }\n\n // Rejects when postgres-js rolls the savepoint back — including for a failed\n // statement the body caught, which it only acts on AFTER the body returns —\n // and then `frame` is simply dropped.\n const value = await savepoint(async (sp) => {\n root.stack.push(frame)\n adopt(sp, root)\n try {\n return await run(sp)\n } finally {\n hookState().handles.delete(sp)\n const index = root.stack.lastIndexOf(frame)\n if (index !== -1) root.stack.splice(index, 1)\n }\n })\n\n // Settled without ROLLBACK TO — only now do these callbacks belong to the\n // enclosing frame.\n enclosing.callbacks.push(...frame.callbacks)\n return value\n }\n}\n\nasync function runCallback(callback: CommitCallback): Promise<void> {\n try {\n await callback()\n } catch (error) {\n const stack = error instanceof Error ? error.stack : undefined\n process.emitWarning(\n 'An on-commit callback threw after its transaction committed. The write stands, ' +\n 'and the remaining callbacks still ran: ' +\n (error instanceof Error ? error.message : String(error)),\n {\n code: 'TOOLKIT_ON_COMMIT_CALLBACK_FAILED',\n ...(stack !== undefined && { detail: stack }),\n },\n )\n }\n}\n","/**\n * Postgres extension helpers — the single source of truth for how the toolkit\n * enables a Postgres extension.\n *\n * Declarative source: plugins declare `server.extensions: ['btree_gist']`\n * (see `@murumets-ee/core`'s `PluginServer`). Consumers — `lumi migrate`\n * (emits into the generated migration) and `@murumets-ee/db`'s `createTestDb`\n * (enables before `pushSchema`) — both route through the helpers here so the\n * validation rule and the emitted SQL are identical everywhere (the migrate\n * dedup-scan relies on the canonical statement being byte-for-byte stable).\n *\n * Why validate the name: `CREATE EXTENSION` cannot parameterize an identifier,\n * so the extension name is interpolated as a literal. Names come from plugin\n * code (not request input), but per the \"validate at the boundary\" rule we\n * still whitelist the identifier shape so a typo or a hostile plugin can't\n * inject SQL through the one place a raw identifier reaches a DDL string.\n */\n\n/**\n * Valid Postgres extension identifier: a lowercase unquoted identifier —\n * leading letter/underscore, then letters/digits/underscores. Covers every\n * real extension name (`btree_gist`, `pg_trgm`, `uuid-ossp` is the lone\n * hyphenated outlier and is intentionally rejected here; declare it quoted via\n * a custom migration if ever needed). Anchored, so no embedded whitespace,\n * quotes, semicolons, or comment markers can slip through.\n */\nexport const EXTENSION_NAME_PATTERN = /^[a-z_][a-z0-9_]*$/\n\n/**\n * Throw if `name` is not a safe, unquoted Postgres extension identifier.\n * Kept separate from {@link createExtensionStatement} so callers that only\n * want to validate (e.g. a config linter) don't have to build SQL.\n */\nexport function assertValidExtensionName(name: string): void {\n if (!EXTENSION_NAME_PATTERN.test(name)) {\n throw new Error(\n `Invalid Postgres extension name: ${JSON.stringify(name)}. ` +\n `Must match ${EXTENSION_NAME_PATTERN} (lowercase letters, digits, underscores; ` +\n 'no quotes, whitespace, or punctuation).',\n )\n }\n}\n\n/**\n * The canonical, idempotent statement that enables one extension.\n * Validates first, then double-quotes the (already-safe) identifier.\n *\n * This exact string is what `lumi migrate` writes into migration files AND\n * what it scans prior migrations for to avoid re-emitting — do not change the\n * shape without updating the dedup scan in `packages/cli/src/commands/migrate.ts`.\n */\nexport function createExtensionStatement(name: string): string {\n assertValidExtensionName(name)\n return `CREATE EXTENSION IF NOT EXISTS \"${name}\"`\n}\n"],"mappings":"AAuHA,MAAM,EAAY,OAAO,IAAI,mCAAmC,EAC1D,EAAc,OAAO,IAAI,2CAA2C,EAE1E,SAAS,GAAuB,CAC9B,IAAM,EAAO,WACT,EAAQ,EAAK,GAKjB,OAJK,IACH,EAAQ,CAAE,QAAS,IAAI,OAAU,EACjC,EAAK,GAAa,GAEb,CACT,CAQA,SAAgB,EAAkD,EAAc,CAE9E,GAAIA,EAAO,GAAc,OAAO,EAEhC,IAAM,EAAQ,EAAG,YAAY,KAAK,CAAE,EAOpC,MANA,GAAG,aACD,EACA,IACe,EAAc,GAAS,EAAM,EAAM,CAAM,EAAG,CAAG,EAEhE,OAAO,eAAe,EAAI,EAAa,CAAE,MAAO,EAAK,CAAC,EAC/C,CACT,CAQA,SAAgB,EAAS,EAAqC,EAAmC,CAC/F,GAAI,GAAa,KAAgC,MAAO,GACxD,IAAM,EAAO,EAAU,CAAC,CAAC,QAAQ,IAAI,CAAQ,EACvC,EAAQ,GAAM,MAAM,EAAK,MAAM,OAAS,GAG9C,OAFK,GACL,EAAM,UAAU,KAAK,CAAQ,EACtB,IAFY,EAGrB,CAGA,SAAgB,EAAqB,EAA8C,CACjF,OAAO,GAAa,MAAkC,EAAU,CAAC,CAAC,QAAQ,IAAI,CAAQ,CACxF,CAEA,eAAe,EACb,EACA,EACY,CACZ,IAAM,EAAa,CAAE,MAAO,CAAC,CAAE,UAAW,CAAC,CAAE,CAAC,CAAE,EAK1C,EAAS,MAAM,EAAM,KAAO,IAAO,CACvC,EAAM,EAAI,CAAI,EACd,GAAI,CACF,OAAO,MAAM,EAAI,CAAE,CACrB,QAAU,CAER,EAAU,CAAC,CAAC,QAAQ,OAAO,CAAE,CAC/B,CACF,CAAC,EAIK,EAAY,CAAC,GAAI,EAAK,MAAM,EAAE,EAAE,WAAa,CAAC,CAAE,EACtD,IAAK,IAAM,KAAY,EACrB,MAAM,EAAY,CAAQ,EAE5B,OAAO,CACT,CAGA,SAAS,EAAM,EAAuB,EAAkB,CACtD,EAAU,CAAC,CAAC,QAAQ,IAAI,EAAI,CAAI,EAEhC,IAAM,EAAY,EAAG,YAAY,KAAK,CAAE,EACxC,EAAG,YAAc,KAAU,IAA2D,CACpF,IAAM,EAAY,EAAK,MAAM,EAAK,MAAM,OAAS,GACjD,GAAI,CAAC,EACH,MAAU,MAAM,2EAA2E,EAE7F,IAAM,EAAe,CAAE,UAAW,CAAC,CAAE,EAK/B,EAAQ,MAAM,EAAU,KAAO,IAAO,CAC1C,EAAK,MAAM,KAAK,CAAK,EACrB,EAAM,EAAI,CAAI,EACd,GAAI,CACF,OAAO,MAAM,EAAI,CAAE,CACrB,QAAU,CACR,EAAU,CAAC,CAAC,QAAQ,OAAO,CAAE,EAC7B,IAAM,EAAQ,EAAK,MAAM,YAAY,CAAK,EACtC,IAAU,IAAI,EAAK,MAAM,OAAO,EAAO,CAAC,CAC9C,CACF,CAAC,EAKD,OADA,EAAU,UAAU,KAAK,GAAG,EAAM,SAAS,EACpC,CACT,CACF,CAEA,eAAe,EAAY,EAAyC,CAClE,GAAI,CACF,MAAM,EAAS,CACjB,OAAS,EAAO,CACd,IAAM,EAAQ,aAAiB,MAAQ,EAAM,MAAQ,IAAA,GACrD,QAAQ,YACN,0HAEG,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GACxD,CACE,KAAM,oCACN,GAAI,IAAU,IAAA,IAAa,CAAE,OAAQ,CAAM,CAC7C,CACF,CACF,CACF,CC/NA,MAAa,EAAyB,qBAOtC,SAAgB,EAAyB,EAAoB,CAC3D,GAAI,CAAC,EAAuB,KAAK,CAAI,EACnC,MAAU,MACR,oCAAoC,KAAK,UAAU,CAAI,EAAE,eACzC,EAAuB,kFAEzC,CAEJ,CAUA,SAAgB,EAAyB,EAAsB,CAE7D,OADA,EAAyB,CAAI,EACtB,mCAAmC,EAAK,EACjD"}
|
package/dist/index.d.mts
CHANGED
|
@@ -69,6 +69,12 @@ declare const MAX_STATEMENT_TIMEOUT_MS = 2147483647;
|
|
|
69
69
|
declare function parseStatementTimeoutEnv(raw: string | undefined): number | undefined;
|
|
70
70
|
/**
|
|
71
71
|
* Create a full read-write database client.
|
|
72
|
+
*
|
|
73
|
+
* Its transactions are tracked (`trackTransactions`), so `onCommit` works on
|
|
74
|
+
* every `tx` it hands out. This is where `app.db.readWrite` and the CLI's
|
|
75
|
+
* client come from, which is what lets `AdminClient` hold its post-commit
|
|
76
|
+
* seams until a caller's transaction actually commits — with no change at any
|
|
77
|
+
* call site that opens one.
|
|
72
78
|
*/
|
|
73
79
|
declare function createDbClient(config: DbConfig): PostgresJsDatabase;
|
|
74
80
|
/**
|
|
@@ -1374,5 +1380,25 @@ declare class WhereBuilderError extends Error {
|
|
|
1374
1380
|
*/
|
|
1375
1381
|
declare function isNonEmptyWhere(clause: unknown): boolean;
|
|
1376
1382
|
//#endregion
|
|
1377
|
-
|
|
1383
|
+
//#region src/transaction-hooks.d.ts
|
|
1384
|
+
/** Work to run once the transaction it was registered on has committed. */
|
|
1385
|
+
type CommitCallback = () => void | Promise<void>;
|
|
1386
|
+
/**
|
|
1387
|
+
* Install on-commit tracking on a read-write client, in place, and return it.
|
|
1388
|
+
*
|
|
1389
|
+
* Idempotent: a client that is already tracked is returned untouched, so a
|
|
1390
|
+
* callback never runs twice because two layers each installed tracking.
|
|
1391
|
+
*/
|
|
1392
|
+
declare function trackTransactions<TDb extends PostgresJsDatabase>(db: TDb): TDb;
|
|
1393
|
+
/**
|
|
1394
|
+
* Register `callback` to run after the transaction `executor` belongs to
|
|
1395
|
+
* commits. Returns `true` when it was registered, and `false` — having done
|
|
1396
|
+
* nothing — when `executor` is not an open tracked transaction, in which case
|
|
1397
|
+
* the caller decides whether to run the work now.
|
|
1398
|
+
*/
|
|
1399
|
+
declare function onCommit(executor: object | null | undefined, callback: CommitCallback): boolean;
|
|
1400
|
+
/** Whether `executor` is a transaction handle that is open and tracked right now. */
|
|
1401
|
+
declare function isTrackedTransaction(executor: object | null | undefined): boolean;
|
|
1402
|
+
//#endregion
|
|
1403
|
+
export { type AnyPgColumn, type ClaimOptions, type ColumnFactory, type ColumnKind, type ColumnOperators, type ColumnValue, type CommitCallback, DEFAULT_LIMIT, DEFAULT_READ_ONLY_STATEMENT_TIMEOUT_MS, type DbConfig, type DefinedTable, type DependentCleanup, EXTENSION_NAME_PATTERN, type FindManyOptions, type IndexDefinition, type InsertRow, MAX_BATCH, MAX_LIMIT, MAX_STATEMENT_TIMEOUT_MS, type MigrateArgs, type MigrationLoader, type MigrationModule, type MigrationSource, type MigrationStatus, type OrderBySpec, type QueryStats, type Row, type SchemaRegistry, type TableCleanupDescriptor, TableClient, TableClientError, type TableDefinition, type TableDependency, type UniqueDefinition, WhereBuilderError, type WhereClause, __clearDependentCleanups, assertValidExtensionName, column, createDbClient, createExtensionStatement, createListenClient, createReadOnlyClient, defineTable, getDependentCleanups, getMigrationStatus, getQueryStats, getTableCleanupDescriptors, isNonEmptyWhere, isQueryCounterEnabled, isTrackedTransaction, onCommit, parseStatementTimeoutEnv, queryCountingLogger, registerDependentCleanup, rollbackMigrations, runMigrations, runWithQueryStats, schemaRegistry, tableRegistry, trackTransactions };
|
|
1378
1404
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/client.ts","../src/extensions.ts","../src/listen.ts","../src/migrate.ts","../src/query-counter.ts","../src/schema-registry.ts","../src/table/types.ts","../src/table/client.ts","../src/table/columns.ts","../src/table/define.ts","../src/table/dependency-registry.ts","../src/table/registry.ts","../src/table/where-builder.ts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/client.ts","../src/extensions.ts","../src/listen.ts","../src/migrate.ts","../src/query-counter.ts","../src/schema-registry.ts","../src/table/types.ts","../src/table/client.ts","../src/table/columns.ts","../src/table/define.ts","../src/table/dependency-registry.ts","../src/table/registry.ts","../src/table/where-builder.ts","../src/transaction-hooks.ts"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{a as e,i as t,n,o as r,r as i,t as a}from"./extensions-CEyIHQA7.mjs";import{drizzle as o}from"drizzle-orm/postgres-js";import s from"postgres";import{AsyncLocalStorage as c}from"node:async_hooks";import{readdir as l}from"node:fs/promises";import{join as u}from"node:path";import{and as d,count as f,eq as p,getTableColumns as m,getTableName as h,gt as ee,gte as te,ilike as g,inArray as _,isNotNull as v,isNull as y,lt as ne,lte as re,ne as ie,not as ae,notInArray as oe,or as se,sql as b}from"drizzle-orm";import{bigint as ce,boolean as le,doublePrecision as x,index as ue,integer as de,jsonb as fe,pgTable as S,primaryKey as pe,real as me,text as he,timestamp as ge,unique as _e,uniqueIndex as ve,uuid as C,varchar as w}from"drizzle-orm/pg-core";const T=new c;function ye(){return T.getStore()}function be(e){let t={count:0};return T.run(t,()=>e(t))}const E=new class{logQuery(e,t){let n=T.getStore();n&&n.count++}};function D(){return process.env.LUMI_DB_QUERY_COUNTER===`1`}const O=5e3,k=2147483647;function A(e){if(e===void 0||e.trim()===``)return;let t=e.trim(),n=/^\d+$/.test(t)?Number(t):NaN;if(!Number.isInteger(n)||n<=0||n>2147483647){console.warn(`[db] Ignoring invalid read-only statement timeout override ${JSON.stringify(e)}: expected an integer between 1 and ${k} milliseconds. Falling back to the ${O} ms default.`);return}return n}function j(){return D()?{logger:E}:void 0}function M(e){let t=s(e.url,{max:e.poolMax||10,idle_timeout:20,max_lifetime:1800}),n=j();return r(n?o(t,n):o(t))}function N(e){let t=e.readOnlyUrl||e.url,n=e.readOnlyStatementTimeoutMs??5e3;if(!Number.isInteger(n)||n<=0||n>2147483647)throw Error(`Invalid db.readOnlyStatementTimeoutMs: expected an integer between 1 and ${k} milliseconds, got ${String(e.readOnlyStatementTimeoutMs)}. To relax the ceiling, raise the value; it cannot be disabled.`);let r=s(t,{max:e.poolMax||10,idle_timeout:20,max_lifetime:1800,connection:{application_name:`toolkit_readonly`,default_transaction_read_only:!0,statement_timeout:n},onnotice:()=>{}}),i=j();return i?o(r,i):o(r)}function xe(e){return s(e.url,{max:2,idle_timeout:0,max_lifetime:3600,connection:{application_name:`toolkit_realtime`},onnotice:()=>{}})}async function P(e){try{return(await l(e)).filter(e=>e.endsWith(`.ts`))}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function F(e){await e.execute(b`
|
|
2
2
|
CREATE TABLE IF NOT EXISTS _toolkit_migrations (
|
|
3
3
|
id SERIAL PRIMARY KEY,
|
|
4
4
|
namespace VARCHAR(50) NOT NULL,
|
|
@@ -6,15 +6,15 @@ import{n as e,r as t,t as n}from"./extensions-CyFQK8AR.mjs";import{drizzle as r}
|
|
|
6
6
|
applied_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
7
7
|
UNIQUE(namespace, name)
|
|
8
8
|
)
|
|
9
|
-
`)}async function
|
|
9
|
+
`)}async function Se(e){let t=u(e,`migrations`),n=u(t,`.toolkit`),[r,i]=await Promise.all([P(n),P(t)]),a=r.map(e=>({path:u(n,e),namespace:`toolkit`,name:e})).sort((e,t)=>e.name.localeCompare(t.name)),o=i.filter(e=>e!==`.toolkit`).map(e=>({path:u(t,e),namespace:`project`,name:e})).sort((e,t)=>e.name.localeCompare(t.name));return[...a,...o]}async function I(e,t){await F(e);let n=await Se(t),r=await e.execute(b`
|
|
10
10
|
SELECT namespace, name FROM _toolkit_migrations
|
|
11
11
|
ORDER BY applied_at ASC
|
|
12
|
-
`),i=new Set(r.map(e=>`${e.namespace}:${e.name}`)),a=[],o=[];for(let e of n)i.has(`${e.namespace}:${e.name}`)?a.push(e):o.push(e);return{applied:a,pending:o}}async function
|
|
12
|
+
`),i=new Set(r.map(e=>`${e.namespace}:${e.name}`)),a=[],o=[];for(let e of n)i.has(`${e.namespace}:${e.name}`)?a.push(e):o.push(e);return{applied:a,pending:o}}async function Ce(e,t,n){await F(e);let{pending:r}=await I(e,t);if(r.length===0){console.log(`No pending migrations`);return}console.log(`Running ${r.length} pending migration${r.length===1?``:`s`}...`);for(let t of r){console.log(` Applying ${t.namespace}/${t.name}...`);let r=await n(t.path);if(typeof r.up!=`function`)throw Error(`Migration ${t.namespace}/${t.name} has no \`up\` export. Every migration file must export an async \`up({ db })\` function.`);try{await e.transaction(async e=>{await r.up({db:e}),await e.execute(b`
|
|
13
13
|
INSERT INTO _toolkit_migrations (namespace, name)
|
|
14
14
|
VALUES (${t.namespace}, ${t.name})
|
|
15
|
-
`)}),console.log(` ✓ Applied ${t.namespace}/${t.name}`)}catch(e){throw console.error(` ✗ Failed to apply ${t.namespace}/${t.name}:`,e),e}}console.log(`Successfully applied ${r.length} migration${r.length===1?``:`s`}`)}async function
|
|
15
|
+
`)}),console.log(` ✓ Applied ${t.namespace}/${t.name}`)}catch(e){throw console.error(` ✗ Failed to apply ${t.namespace}/${t.name}:`,e),e}}console.log(`Successfully applied ${r.length} migration${r.length===1?``:`s`}`)}async function we(e,t,n,r=1){await F(e);let{applied:i}=await I(e,t);if(i.length===0){console.log(`No applied migrations to roll back`);return}let a=i.slice(-r).reverse(),o=await Promise.all(a.map(async e=>({meta:e,mod:await n(e.path)})));for(let{meta:e,mod:t}of o)if(typeof t.down!=`function`)throw Error(`Migration ${e.namespace}/${e.name} has no \`down\` export — cannot roll back. Add an async \`down({ db })\` function to the migration file.`);for(let{meta:t,mod:n}of o){console.log(` Rolling back ${t.namespace}/${t.name}...`);try{await e.transaction(async e=>{await n.down({db:e}),await e.execute(b`
|
|
16
16
|
DELETE FROM _toolkit_migrations
|
|
17
17
|
WHERE namespace = ${t.namespace} AND name = ${t.name}
|
|
18
|
-
`)}),console.log(` ✓ Rolled back ${t.namespace}/${t.name}`)}catch(e){throw console.error(` ✗ Failed to roll back ${t.namespace}/${t.name}:`,e),e}}console.log(`Successfully rolled back ${o.length} migration${o.length===1?``:`s`}`)}const Se=new class{schemas=new Map;register(e,t){this.schemas.set(e,t)}get(e){return this.schemas.get(e)}all(){let e={};for(let[t,n]of this.schemas.entries())e[t]=n;return e}has(e){return this.schemas.has(e)}},Ce=/^[a-zA-Z_][a-zA-Z0-9_-]*$|^\d+$/,we=new Set([`$and`,`$or`,`$not`]),Te=new Set([`eq`,`ne`,`in`,`notIn`,`gt`,`gte`,`lt`,`lte`,`isNull`,`isNotNull`,`ilike`,`startsWith`]);var L=class extends Error{constructor(e){super(`WhereBuilder: ${e}`),this.name=`WhereBuilderError`}};function R(e){return e.replace(/[\\%_]/g,`\\$&`)}function Ee(e,t,n){let r=d(e);if(!n.includes(`.`)){let e=r[n];if(!e)throw new L(`unknown column "${n}"`);return e}let[i,...a]=n.split(`.`);if(!i||a.length===0)throw new L(`malformed dotted key "${n}"`);let o=t[i];if(!o)throw new L(`unknown column "${i}" in dotted key "${n}"`);if(o!==`jsonb`)throw new L(`dotted-path access is only supported on jsonb columns, but "${i}" is ${o}`);for(let e of a)if(!Ce.test(e))throw new L(`invalid jsonb path segment "${e}" — must match [a-zA-Z_][a-zA-Z0-9_-]* or be a non-negative integer`);let s=r[i];if(!s)throw new L(`unknown column "${i}"`);let c=y`${s}`;for(let e=0;e<a.length;e++){let t=a[e];if(t===void 0)throw new L(`jsonb path segment at index ${e} is undefined`);let n=e===a.length-1;if(/^\d+$/.test(t)){if(t.length>10)throw new L(`jsonb path index "${t}" is too large`);let e=y.raw(t);c=n?y`${c}->>${e}`:y`${c}->${e}`}else c=n?y`${c}->>${t}`:y`${c}->${t}`}return c}function De(e,t){if(t===null)return v(e);if(typeof t==`string`||typeof t==`number`||typeof t==`boolean`||typeof t==`bigint`||t instanceof Date)return u(e,t);if(Array.isArray(t))throw new L(`arrays must be wrapped in an operator (e.g. { in: [...] }) — bare arrays are not allowed`);if(typeof t!=`object`)throw new L(`unsupported value type: ${typeof t}`);let n=t,r=Object.keys(n);if(r.length===0)throw new L(`empty operator object`);let i=[];for(let t of r){if(!Te.has(t))throw new L(`unknown operator "${t}"`);let r=n[t];switch(t){case`eq`:i.push(u(e,r));break;case`ne`:i.push(ne(e,r));break;case`in`:if(!Array.isArray(r))throw new L(`"in" operator requires an array`);r.length===0?i.push(y`false`):i.push(g(e,r));break;case`notIn`:if(!Array.isArray(r))throw new L(`"notIn" operator requires an array`);r.length===0?i.push(y`true`):i.push(ie(e,r));break;case`gt`:i.push(p(e,r));break;case`gte`:i.push(m(e,r));break;case`lt`:i.push(ee(e,r));break;case`lte`:i.push(te(e,r));break;case`isNull`:if(r!==!0)throw new L('"isNull" operator must be `true`');i.push(v(e));break;case`isNotNull`:if(r!==!0)throw new L('"isNotNull" operator must be `true`');i.push(_(e));break;case`ilike`:if(typeof r!=`string`)throw new L(`"ilike" operator requires a string`);i.push(h(e,`%${R(r)}%`));break;case`startsWith`:if(typeof r!=`string`)throw new L(`"startsWith" operator requires a string`);i.push(h(e,`${R(r)}%`));break}}if(i.length!==0)return i.length===1?i[0]:c(...i)}function z(e,t,n,r=0){if(!n)return;if(typeof n!=`object`||Array.isArray(n))throw new L(`where clause must be a plain object`);if(r>16)throw new L(`where clause exceeds maximum nesting depth of 16 — real queries should not need this much nesting; if yours does, reconsider whether it should be expressed differently`);let i=[];for(let a of Object.keys(n)){let o=n[a];if(a===`$and`){if(!Array.isArray(o))throw new L(`$and must be an array`);if(o.length===0)throw new L(`$and must contain at least one clause`);let n=o.map(n=>z(e,t,n,r+1)).filter(e=>e!==void 0);n.length>0&&i.push(c(...n));continue}if(a===`$or`){if(!Array.isArray(o))throw new L(`$or must be an array`);if(o.length===0)throw new L(`$or must contain at least one clause`);let n=o.map(n=>z(e,t,n,r+1)).filter(e=>e!==void 0);n.length>0&&i.push(ae(...n));continue}if(a===`$not`){if(!B(o))throw new L(`$not must contain a non-empty clause`);let n=z(e,t,o,r+1);n&&i.push(re(n));continue}if(we.has(a))continue;let s=De(Ee(e,t,a),o);s&&i.push(s)}if(i.length!==0)return i.length===1?i[0]:c(...i)}function B(e){return typeof e!=`object`||!e||Array.isArray(e)?!1:Object.keys(e).length>0}const V=/^[a-zA-Z_][a-zA-Z0-9_]*$/,H=S(`pg_class`,{relname:w(`relname`,{length:63}).notNull(),reltuples:de(`reltuples`).notNull()}),Oe=100,U=1e3,W=1e3;var G=class extends Error{constructor(e){super(`TableClient: ${e}`),this.name=`TableClientError`}},K=class e{table;columnKinds;db;primaryKeyColumns;constructor(e,t,n,r=[]){this.table=e,this.columnKinds=t,this.db=n,this.primaryKeyColumns=r}get _selectTable(){return this.table}getColumnOrThrow(e,t){let n=d(this.table)[e];if(!n)throw new G(`${t}: unknown column "${e}"`);return n}buildOrderBy(e,t){return e.map(e=>{let n=this.getColumnOrThrow(e.column,`${t}: orderBy`);return e.dir===`desc`?y`${n} DESC`:y`${n} ASC`})}requireNonEmptyWhere(e,t){if(!B(e))throw new G(`${t} requires a non-empty where clause`)}validateColumnKeys(e,t){if(e.length===0)return;let n=d(this.table);for(let r of e)if(!Object.hasOwn(n,r))throw new G(`${t}: unknown column "${r}"`)}async findOne(e){this.requireNonEmptyWhere(e,`findOne`);let t=this.buildWhereOrThrow(e);return(await this.db.select().from(this._selectTable).where(t).limit(1))[0]??null}async findMany(e={}){let t=this.validateLimit(e.limit);if(e.offset!==void 0&&(!Number.isInteger(e.offset)||e.offset<0))throw new G(`offset must be a non-negative integer, got ${e.offset}`);let n=e.orderBy&&e.orderBy.length>0?this.buildOrderBy(e.orderBy,`findMany`):void 0,r=e.where?this.buildWhereOrThrow(e.where):void 0,i=this.db.select().from(this._selectTable).$dynamic();return r&&(i=i.where(r)),n&&(i=i.orderBy(...n)),i=i.limit(t),e.offset!==void 0&&(i=i.offset(e.offset)),await i}async count(e){let t=e?this.buildWhereOrThrow(e):void 0,n=this.db.select({value:l()}).from(this._selectTable).$dynamic();t&&(n=n.where(t));let r=await n;return Number(r[0]?.value??0)}async exists(e){this.requireNonEmptyWhere(e,`exists`);let t=this.buildWhereOrThrow(e);return(await this.db.select({one:y`1`}).from(this._selectTable).where(t).limit(1)).length>0}async distinct(e,t){let n=this.getColumnOrThrow(e,`distinct`),r=[];t?.includeNull||r.push(_(n)),t?.where&&r.push(this.buildWhereOrThrow(t.where));let i=this.db.selectDistinct({value:n}).from(this._selectTable).$dynamic();if(r.length===1?i=i.where(r[0]):r.length>1&&(i=i.where(c(...r))),t?.orderBy){let e=t.orderBy===`desc`?y`${n} DESC`:y`${n} ASC`;i=i.orderBy(e)}return(await i).map(e=>e.value)}async insert(e){return(await this.db.insert(this.table).values(e).returning())[0]}async upsert(e,t){let n=Array.isArray(t.target)?t.target:[t.target];if(n.length===0)throw new G(`upsert requires at least one target column`);let r=n.map(e=>this.getColumnOrThrow(e,`upsert target`)),i=t.set??e;t.set&&this.validateColumnKeys(Object.keys(t.set),`upsert set`);let a=t.setWhere&&B(t.setWhere)?this.buildWhereOrThrow(t.setWhere):void 0,o=await this.db.insert(this.table).values(e).onConflictDoUpdate({target:r,set:i,...a?{setWhere:a}:{}}).returning();if(o.length>0)return o[0];let s={};for(let t of n)s[t]=e[t];let c=await this.findOne(s);if(!c)throw new G(`upsert with setWhere: conflicting row was deleted concurrently — retry the operation`);return c}async tryClaim(e,t){let n=Array.isArray(t.target)?t.target:[t.target];if(n.length===0)throw new G(`tryClaim requires at least one target column`);let r=n.map(e=>this.getColumnOrThrow(e,`tryClaim target`)),i=t.set??e;if(t.set&&this.validateColumnKeys(Object.keys(t.set),`tryClaim set`),!B(t.replaceWhen))throw new G(`tryClaim requires a non-empty replaceWhen clause`);let a=this.buildWhereOrThrow(t.replaceWhen),o=await this.db.insert(this.table).values(e).onConflictDoUpdate({target:r,set:i,setWhere:a}).returning();if(o.length>0)return{acquired:!0,row:o[0]};let s={};for(let t of n)s[t]=e[t];let c=await this.findOne(s);if(!c)throw new G(`tryClaim: conflicting row was deleted concurrently — retry the operation`);return{acquired:!1,row:c}}async insertMany(e){if(!Array.isArray(e))throw new G(`insertMany requires an array of rows`);if(e.length===0)return[];if(e.length>1e3)throw new G(`insertMany batch too large: ${e.length} > ${W}`);return await this.db.insert(this.table).values(e).returning()}async update(e,t){this.requireNonEmptyWhere(e,`update`),this.validateColumnKeys(Object.keys(t),`update`);let n=this.buildWhereOrThrow(e),r=await this.db.update(this.table).set(t).where(n).returning();if(r.length>1)throw new G(`update matched ${r.length} rows but is expected to match at most one — use updateMany for bulk updates. WARNING: the update has already been applied; wrap in a transaction if you need rollback.`);return r[0]??null}async updateMany(e,t){this.requireNonEmptyWhere(e,`updateMany`),this.validateColumnKeys(Object.keys(t),`updateMany`);let n=this.buildWhereOrThrow(e);return await this.db.update(this.table).set(t).where(n).returning()}async delete(e){this.requireNonEmptyWhere(e,`delete`);let t=this.buildWhereOrThrow(e),n=await this.db.delete(this.table).where(t).returning();if(n.length>1)throw new G(`delete matched ${n.length} rows but is expected to match at most one — use deleteMany for bulk deletes. WARNING: the delete has already been applied; wrap in a transaction if you need rollback.`);return n[0]??null}async deleteMany(e){this.requireNonEmptyWhere(e,`deleteMany`);let t=this.buildWhereOrThrow(e);return await this.db.delete(this.table).where(t).returning()}async transaction(t){return await this.db.transaction(async n=>await t(new e(this.table,this.columnKinds,n,this.primaryKeyColumns)))}async claim(e){if(this.primaryKeyColumns.length===0)throw new G(`claim() requires the table to have a primary key — declare primaryKey in defineTable() or use column.uuid({ primaryKey: true })`);if(this.primaryKeyColumns.length>1)throw new G(`claim() does not support composite primary keys — use a single-column primary key or call transaction() with FOR UPDATE directly`);if(this.requireNonEmptyWhere(e.where,`claim`),!Number.isInteger(e.limit)||e.limit<1)throw new G(`claim limit must be a positive integer, got ${e.limit}`);if(e.limit>1e3)throw new G(`claim limit ${e.limit} exceeds MAX_LIMIT ${U}`);let t=Object.keys(e.set??{}),n=Object.keys(e.setSql??{});if(t.length===0&&n.length===0)throw new G(`claim requires at least one field in set or setSql`);this.validateColumnKeys(t,`claim set`),this.validateColumnKeys(n,`claim setSql`);let r=this.buildWhereOrThrow(e.where),i=e.orderBy&&e.orderBy.length>0?this.buildOrderBy(e.orderBy,`claim`):void 0,a=this.primaryKeyColumns[0],o=this.getColumnOrThrow(a,`claim primary key`);return await this.db.transaction(async t=>{let n=t.select({_pk:o}).from(this._selectTable).where(r).limit(e.limit).for(`update`,{skipLocked:!0}).$dynamic();i&&(n=n.orderBy(...i));let a=await n;if(a.length===0)return[];let s=a.map(e=>e._pk),c={...e.set??{}};if(e.setSql)for(let[t,n]of Object.entries(e.setSql))c[t]=n;return await t.update(this.table).set(c).where(g(o,s)).returning()})}async aggregate(e){let t=Object.entries(e.select);if(t.length===0)throw new G(`aggregate requires at least one select field`);for(let[e]of t)if(!V.test(e))throw new G(`aggregate: invalid output alias "${e}" — must match ${V.source}`);let n={};if(e.groupBy)for(let t of e.groupBy)n[t]=this.getColumnOrThrow(t,`aggregate groupBy`);for(let[e,r]of t)n[e]=this.buildAggregateExpr(r);let r=this.db.select(n).from(this._selectTable).$dynamic();if(e.where&&(r=r.where(this.buildWhereOrThrow(e.where))),e.groupBy&&e.groupBy.length>0){let t=e.groupBy.map(e=>this.getColumnOrThrow(e,`aggregate groupBy`));r=r.groupBy(...t)}return e.orderBy&&e.orderBy.length>0&&(r=r.orderBy(...this.buildOrderBy(e.orderBy,`aggregate`))),e.limit!==void 0&&(r=r.limit(this.validateLimit(e.limit))),await r}async countEstimate(){let e=f(this.table),[t]=await this.db.select({estimate:y`greatest(${H.reltuples}::bigint, 0)`}).from(H).where(u(H.relname,e)).limit(1);return t?Number(t.estimate):0}buildAggregateExpr(e){if(`column`in e&&e.column){let t=this.getColumnOrThrow(e.column,`aggregate`);switch(e.fn){case`count`:return y`count(${t})::int`;case`sum`:return y`sum(${t})`;case`avg`:return y`avg(${t})`;case`min`:return y`min(${t})`;case`max`:return y`max(${t})`;default:throw new G(`aggregate: unknown function "${e.fn}"`)}}if(e.fn===`count`)return y`count(*)::int`;throw new G(`aggregate: ${e.fn} requires a column`)}buildWhereOrThrow(e){try{let t=z(this.table,this.columnKinds,e);if(!t)throw new G(`where clause produced no SQL predicate`);return t}catch(e){throw e instanceof L?new G(e.message.replace(/^WhereBuilder: /,``)):e}}validateLimit(e){if(e===void 0)return 100;if(!Number.isInteger(e)||e<1)throw new G(`limit must be a positive integer, got ${e}`);if(e>1e3)throw new G(`limit ${e} exceeds MAX_LIMIT ${U} — paginate or use claim() for batch processing`);return e}};function q(e,t){let n=e;return Object.defineProperty(n,"__kind",{value:t.kind,enumerable:!1}),Object.defineProperty(n,"__notNull",{value:t.notNull,enumerable:!1}),Object.defineProperty(n,"__hasDefault",{value:t.hasDefault,enumerable:!1}),Object.defineProperty(n,"__type",{value:void 0,enumerable:!1}),t.pgName&&Object.defineProperty(n,"__pgName",{value:t.pgName,enumerable:!1}),t.primaryKey&&Object.defineProperty(n,"__primaryKey",{value:!0,enumerable:!1}),n}const ke={uuid(e){let t=e?.notNull??!1,n=e?.defaultRandom??!1,r=e?.primaryKey??!1;return q(n=>{let i=C(n);return r&&(i=i.primaryKey()),e?.defaultRandom&&(i=i.defaultRandom()),t&&!r&&(i=i.notNull()),i},{kind:`uuid`,notNull:t||r,hasDefault:n||r,pgName:e?.pgName,primaryKey:r||void 0})},varchar(e){if(!Number.isInteger(e.length)||e.length<1||e.length>1073741823)throw Error(`column.varchar: length must be an integer between 1 and 1073741823, got ${e.length}`);let t=e.notNull??!1;return q(n=>{let r=w(n,{length:e.length});return t&&(r=r.notNull()),e.default!==void 0&&(r=r.default(e.default)),r},{kind:`varchar`,notNull:t,hasDefault:e.default!==void 0,pgName:e.pgName})},text(e){let t=e?.notNull??!1;return q(n=>{let r=fe(n);return t&&(r=r.notNull()),e?.default!==void 0&&(r=r.default(e.default)),r},{kind:`text`,notNull:t,hasDefault:e?.default!==void 0,pgName:e?.pgName})},integer(e){let t=e?.notNull??!1;return q(n=>{let r=x(n);return t&&(r=r.notNull()),e?.default!==void 0&&(r=r.default(e.default)),r},{kind:`integer`,notNull:t,hasDefault:e?.default!==void 0,pgName:e?.pgName})},bigint(e){let t=e?.mode??`number`,n=e?.notNull??!1;return q(r=>{let i=oe(r,{mode:t});return n&&(i=i.notNull()),e?.default!==void 0&&(i=i.default(e.default)),i},{kind:`bigint`,notNull:n,hasDefault:e?.default!==void 0,pgName:e?.pgName})},double(e){let t=e?.notNull??!1;return q(n=>{let r=ce(n);return t&&(r=r.notNull()),e?.default!==void 0&&(r=r.default(e.default)),r},{kind:`double`,notNull:t,hasDefault:e?.default!==void 0,pgName:e?.pgName})},boolean(e){let t=e?.notNull??!1;return q(n=>{let r=se(n);return t&&(r=r.notNull()),e?.default!==void 0&&(r=r.default(e.default)),r},{kind:`boolean`,notNull:t,hasDefault:e?.default!==void 0,pgName:e?.pgName})},timestamp(e){let t=e?.notNull??!1,n=e?.defaultNow??!1,r=e?.withTimezone??!0;return q(n=>{let i=pe(n,{withTimezone:r});return t&&(i=i.notNull()),e?.defaultNow&&(i=i.defaultNow()),i},{kind:`timestamp`,notNull:t,hasDefault:n,pgName:e?.pgName})},jsonb(e){let t=e?.notNull??!1;return q(n=>{let r=le(n);return t&&(r=r.notNull()),e?.default!==void 0&&(r=r.default(e.default)),r},{kind:`jsonb`,notNull:t,hasDefault:e?.default!==void 0,pgName:e?.pgName})},uuidArray(e){let t=e?.notNull??!1;return q(e=>{let n=C(e).array();return t?n.notNull():n},{kind:`uuidArray`,notNull:t,hasDefault:!1,pgName:e?.pgName})}},J=new Map;function Ae(e,t){let n=J.get(e);n?n.push(t):J.set(e,[t])}function je(e){return J.get(e)??[]}function Y(){J.clear()}const X=new WeakMap;function Me(e,t){X.set(e,t)}function Ne(e){return X.get(e)??[]}function Z(e){let t=d(e),n=Object.entries(t).map(([e,t])=>`${e}:${t.name}:${t.getSQLType()}:${t.notNull?`1`:`0`}`).sort().join(`|`);return`${f(e)}#${n}`}function Pe(e,t){try{return Z(e)===Z(t)}catch{return!1}}const Q=new class{byName=new Map;warnedDuplicates=new Set;register(e,t,n){let r=this.byName.get(e);if(r){if(r.table===t||r.source&&n&&r.source===n)return;if(r.source&&n&&r.source!==n&&Pe(r.table,t)){this.warnedDuplicates.has(e)||(this.warnedDuplicates.add(e),process.emitWarning(`table "${e}" was registered from two different bundles (first "${r.source}", now "${n}"). Tolerated because the definitions are structurally identical — a bundler inlined one defineTable() into separate output chunks. Emit the shared table from a single chunk to remove the duplicate.`,{code:`TOOLKIT_TABLE_REGISTRY_DUPLICATE`}));return}throw Error(`tableRegistry: a different table is already registered under name "${e}". Did you call defineTable twice? First registered from ${r.source??`<unknown>`}, now from ${n??`<unknown>`}.`)}this.byName.set(e,{name:e,table:t,source:n})}get(e){return this.byName.get(e)?.table}has(e){return this.byName.has(e)}allTables(){let e={};for(let t of this.byName.values())e[t.name]=t.table;return e}clear(){if(process.env.NODE_ENV===`production`)throw Error(`tableRegistry.clear() is not allowed when NODE_ENV=production — this is a test-only utility. If you reached this from production code, you have a bug.`);this.byName.clear(),this.warnedDuplicates.clear()}},Fe=/^[a-z][a-z0-9_]*$/;function $(e,t,n){if(e.length>63)throw Error(`defineTable: ${t} "${e}" is ${e.length} characters — Postgres truncates identifiers at 63 chars silently, which can cause name collisions${n?`. ${n}`:``}`)}function Ie(e){if(!Fe.test(e.name))throw Error(`defineTable: invalid table name "${e.name}" — must match /^[a-z][a-z0-9_]*$/`);$(e.name,`table name`);let t={},n={};for(let[r,i]of Object.entries(e.columns)){if(typeof i!=`function`)throw Error(`defineTable: column "${r}" is not a column factory — did you call e.g. column.uuid() with parens?`);$(r,`column name in table "${e.name}"`);let a=i.__pgName;a&&$(a,`pgName for column "${r}" in table "${e.name}"`),t[r]=i(a??r),n[r]=i.__kind}let r=new Set(Object.keys(t));if(e.primaryKey!==void 0){let t=Array.isArray(e.primaryKey)?e.primaryKey:[e.primaryKey];for(let e of t)if(!r.has(String(e)))throw Error(`defineTable: primaryKey references unknown column "${String(e)}"`)}if(e.unique)for(let t of e.unique){for(let e of t.on)if(!r.has(String(e)))throw Error(`defineTable: unique constraint references unknown column "${String(e)}"`);$(t.name??`uq_${e.name}_${t.on.map(String).join(`_`)}`,t.name?`unique constraint name`:`auto-generated unique constraint name`,t.name?void 0:"Supply a shorter explicit `name` to the unique definition.")}if(e.indexes)for(let t of e.indexes){for(let e of t.on)if(!r.has(String(e)))throw Error(`defineTable: index references unknown column "${String(e)}"`);$(t.name??`idx_${e.name}_${t.on.map(String).join(`_`)}`,t.name?`index name`:`auto-generated index name`,t.name?void 0:"Supply a shorter explicit `name` to the index definition.")}let i=e.primaryKey!==void 0||e.unique&&e.unique.length>0||e.indexes&&e.indexes.length>0;function a(e,t,n){let r=e[t];if(!r)throw Error(`defineTable: ${n} references unknown column "${t}"`);return r}function o(e,t){return typeof e==`function`?e(t):e}let s=i?S(e.name,t,t=>{let n=t,r=[];if(e.primaryKey!==void 0){let t=Array.isArray(e.primaryKey)?e.primaryKey:[e.primaryKey],i=a(n,String(t[0]),`primaryKey`),o=t.slice(1).map(e=>a(n,String(e),`primaryKey`));r.push(ue({columns:[i,...o]}))}if(e.unique)for(let t of e.unique){let i=a(n,String(t.on[0]),`unique constraint`),s=t.on.slice(1).map(e=>a(n,String(e),`unique constraint`));if(t.where!==void 0){let a=t.name??`uq_${e.name}_${t.on.map(String).join(`_`)}`;r.push(he(a).on(i,...s).where(o(t.where,n)))}else r.push(me().on(i,...s))}if(e.indexes)for(let t of e.indexes){let i=a(n,String(t.on[0]),`index`),s=t.on.slice(1).map(e=>a(n,String(e),`index`)),c=b(t.name??`idx_${e.name}_${t.on.map(String).join(`_`)}`).on(i,...s);r.push(t.where===void 0?c:c.where(o(t.where,n)))}return r}):S(e.name,t),c=Le();Q.register(e.name,s,c);let l=Object.freeze({...n}),u;if(e.primaryKey!==void 0)u=Array.isArray(e.primaryKey)?e.primaryKey.map(String):[String(e.primaryKey)];else{u=[];for(let[t,n]of Object.entries(e.columns))n.__primaryKey&&u.push(t)}let d=Object.freeze([...u]),f=e=>new K(s,l,e,d),p=e.dependsOn??[];for(let t of p){if(typeof t.entity!=`string`||t.entity.trim().length===0)throw Error(`defineTable: dependsOn.entity must be a non-empty string on table "${e.name}"`);let n=e.columns[t.column];if(!r.has(String(t.column))||n===void 0)throw Error(`defineTable: dependsOn references unknown column "${String(t.column)}" on table "${e.name}"`);if(t.onDelete!==`cascade`&&t.onDelete!==`set-null`)throw Error(`defineTable: dependsOn.onDelete must be 'cascade' or 'set-null' on table "${e.name}", got "${String(t.onDelete)}"`);if(t.onDelete===`set-null`&&n.__notNull===!0)throw Error(`defineTable: dependsOn onDelete:'set-null' targets non-nullable column "${String(t.column)}" on table "${e.name}" — make the column nullable or use 'cascade'`)}function m(e){let t=e.column;return async(n,r)=>{if(r.length===0)return;let i=f(n),a={[t]:{in:r}};if(e.onDelete===`cascade`)await i.deleteMany(a);else{let e={[t]:null};await i.updateMany(a,e)}}}let h=p.map(e=>({entity:e.entity,cleanup:m(e)}));return h.length>0&&Me(s,h),{table:s,schema:e,columnKinds:l,primaryKeyColumns:d,makeClient:f}}function Le(){let e=Error().stack;if(!e)return;let t=e.split(`
|
|
19
|
-
`).slice(1);for(let e of t){if(e.includes(`/table/define.`)||e.includes(`/table/registry.`))continue;let t=e.match(/\(([^)]+)\)/)??e.match(/at (.+)$/);if(t?.[1])return t[1].trim()}}export{
|
|
18
|
+
`)}),console.log(` ✓ Rolled back ${t.namespace}/${t.name}`)}catch(e){throw console.error(` ✗ Failed to roll back ${t.namespace}/${t.name}:`,e),e}}console.log(`Successfully rolled back ${o.length} migration${o.length===1?``:`s`}`)}const Te=new class{schemas=new Map;register(e,t){this.schemas.set(e,t)}get(e){return this.schemas.get(e)}all(){let e={};for(let[t,n]of this.schemas.entries())e[t]=n;return e}has(e){return this.schemas.has(e)}},L=/^[a-zA-Z_][a-zA-Z0-9_-]*$|^\d+$/,Ee=new Set([`$and`,`$or`,`$not`]),De=new Set([`eq`,`ne`,`in`,`notIn`,`gt`,`gte`,`lt`,`lte`,`isNull`,`isNotNull`,`ilike`,`startsWith`]);var R=class extends Error{constructor(e){super(`WhereBuilder: ${e}`),this.name=`WhereBuilderError`}};function z(e){return e.replace(/[\\%_]/g,`\\$&`)}function Oe(e,t,n){let r=m(e);if(!n.includes(`.`)){let e=r[n];if(!e)throw new R(`unknown column "${n}"`);return e}let[i,...a]=n.split(`.`);if(!i||a.length===0)throw new R(`malformed dotted key "${n}"`);let o=t[i];if(!o)throw new R(`unknown column "${i}" in dotted key "${n}"`);if(o!==`jsonb`)throw new R(`dotted-path access is only supported on jsonb columns, but "${i}" is ${o}`);for(let e of a)if(!L.test(e))throw new R(`invalid jsonb path segment "${e}" — must match [a-zA-Z_][a-zA-Z0-9_-]* or be a non-negative integer`);let s=r[i];if(!s)throw new R(`unknown column "${i}"`);let c=b`${s}`;for(let e=0;e<a.length;e++){let t=a[e];if(t===void 0)throw new R(`jsonb path segment at index ${e} is undefined`);let n=e===a.length-1;if(/^\d+$/.test(t)){if(t.length>10)throw new R(`jsonb path index "${t}" is too large`);let e=b.raw(t);c=n?b`${c}->>${e}`:b`${c}->${e}`}else c=n?b`${c}->>${t}`:b`${c}->${t}`}return c}function ke(e,t){if(t===null)return y(e);if(typeof t==`string`||typeof t==`number`||typeof t==`boolean`||typeof t==`bigint`||t instanceof Date)return p(e,t);if(Array.isArray(t))throw new R(`arrays must be wrapped in an operator (e.g. { in: [...] }) — bare arrays are not allowed`);if(typeof t!=`object`)throw new R(`unsupported value type: ${typeof t}`);let n=t,r=Object.keys(n);if(r.length===0)throw new R(`empty operator object`);let i=[];for(let t of r){if(!De.has(t))throw new R(`unknown operator "${t}"`);let r=n[t];switch(t){case`eq`:i.push(p(e,r));break;case`ne`:i.push(ie(e,r));break;case`in`:if(!Array.isArray(r))throw new R(`"in" operator requires an array`);r.length===0?i.push(b`false`):i.push(_(e,r));break;case`notIn`:if(!Array.isArray(r))throw new R(`"notIn" operator requires an array`);r.length===0?i.push(b`true`):i.push(oe(e,r));break;case`gt`:i.push(ee(e,r));break;case`gte`:i.push(te(e,r));break;case`lt`:i.push(ne(e,r));break;case`lte`:i.push(re(e,r));break;case`isNull`:if(r!==!0)throw new R('"isNull" operator must be `true`');i.push(y(e));break;case`isNotNull`:if(r!==!0)throw new R('"isNotNull" operator must be `true`');i.push(v(e));break;case`ilike`:if(typeof r!=`string`)throw new R(`"ilike" operator requires a string`);i.push(g(e,`%${z(r)}%`));break;case`startsWith`:if(typeof r!=`string`)throw new R(`"startsWith" operator requires a string`);i.push(g(e,`${z(r)}%`));break}}if(i.length!==0)return i.length===1?i[0]:d(...i)}function B(e,t,n,r=0){if(!n)return;if(typeof n!=`object`||Array.isArray(n))throw new R(`where clause must be a plain object`);if(r>16)throw new R(`where clause exceeds maximum nesting depth of 16 — real queries should not need this much nesting; if yours does, reconsider whether it should be expressed differently`);let i=[];for(let a of Object.keys(n)){let o=n[a];if(a===`$and`){if(!Array.isArray(o))throw new R(`$and must be an array`);if(o.length===0)throw new R(`$and must contain at least one clause`);let n=o.map(n=>B(e,t,n,r+1)).filter(e=>e!==void 0);n.length>0&&i.push(d(...n));continue}if(a===`$or`){if(!Array.isArray(o))throw new R(`$or must be an array`);if(o.length===0)throw new R(`$or must contain at least one clause`);let n=o.map(n=>B(e,t,n,r+1)).filter(e=>e!==void 0);n.length>0&&i.push(se(...n));continue}if(a===`$not`){if(!V(o))throw new R(`$not must contain a non-empty clause`);let n=B(e,t,o,r+1);n&&i.push(ae(n));continue}if(Ee.has(a))continue;let s=ke(Oe(e,t,a),o);s&&i.push(s)}if(i.length!==0)return i.length===1?i[0]:d(...i)}function V(e){return typeof e!=`object`||!e||Array.isArray(e)?!1:Object.keys(e).length>0}const H=/^[a-zA-Z_][a-zA-Z0-9_]*$/,U=S(`pg_class`,{relname:w(`relname`,{length:63}).notNull(),reltuples:me(`reltuples`).notNull()}),Ae=100,W=1e3,G=1e3;var K=class extends Error{constructor(e){super(`TableClient: ${e}`),this.name=`TableClientError`}},q=class e{table;columnKinds;db;primaryKeyColumns;constructor(e,t,n,r=[]){this.table=e,this.columnKinds=t,this.db=n,this.primaryKeyColumns=r}get _selectTable(){return this.table}getColumnOrThrow(e,t){let n=m(this.table)[e];if(!n)throw new K(`${t}: unknown column "${e}"`);return n}buildOrderBy(e,t){return e.map(e=>{let n=this.getColumnOrThrow(e.column,`${t}: orderBy`);return e.dir===`desc`?b`${n} DESC`:b`${n} ASC`})}requireNonEmptyWhere(e,t){if(!V(e))throw new K(`${t} requires a non-empty where clause`)}validateColumnKeys(e,t){if(e.length===0)return;let n=m(this.table);for(let r of e)if(!Object.hasOwn(n,r))throw new K(`${t}: unknown column "${r}"`)}async findOne(e){this.requireNonEmptyWhere(e,`findOne`);let t=this.buildWhereOrThrow(e);return(await this.db.select().from(this._selectTable).where(t).limit(1))[0]??null}async findMany(e={}){let t=this.validateLimit(e.limit);if(e.offset!==void 0&&(!Number.isInteger(e.offset)||e.offset<0))throw new K(`offset must be a non-negative integer, got ${e.offset}`);let n=e.orderBy&&e.orderBy.length>0?this.buildOrderBy(e.orderBy,`findMany`):void 0,r=e.where?this.buildWhereOrThrow(e.where):void 0,i=this.db.select().from(this._selectTable).$dynamic();return r&&(i=i.where(r)),n&&(i=i.orderBy(...n)),i=i.limit(t),e.offset!==void 0&&(i=i.offset(e.offset)),await i}async count(e){let t=e?this.buildWhereOrThrow(e):void 0,n=this.db.select({value:f()}).from(this._selectTable).$dynamic();t&&(n=n.where(t));let r=await n;return Number(r[0]?.value??0)}async exists(e){this.requireNonEmptyWhere(e,`exists`);let t=this.buildWhereOrThrow(e);return(await this.db.select({one:b`1`}).from(this._selectTable).where(t).limit(1)).length>0}async distinct(e,t){let n=this.getColumnOrThrow(e,`distinct`),r=[];t?.includeNull||r.push(v(n)),t?.where&&r.push(this.buildWhereOrThrow(t.where));let i=this.db.selectDistinct({value:n}).from(this._selectTable).$dynamic();if(r.length===1?i=i.where(r[0]):r.length>1&&(i=i.where(d(...r))),t?.orderBy){let e=t.orderBy===`desc`?b`${n} DESC`:b`${n} ASC`;i=i.orderBy(e)}return(await i).map(e=>e.value)}async insert(e){return(await this.db.insert(this.table).values(e).returning())[0]}async upsert(e,t){let n=Array.isArray(t.target)?t.target:[t.target];if(n.length===0)throw new K(`upsert requires at least one target column`);let r=n.map(e=>this.getColumnOrThrow(e,`upsert target`)),i=t.set??e;t.set&&this.validateColumnKeys(Object.keys(t.set),`upsert set`);let a=t.setWhere&&V(t.setWhere)?this.buildWhereOrThrow(t.setWhere):void 0,o=await this.db.insert(this.table).values(e).onConflictDoUpdate({target:r,set:i,...a?{setWhere:a}:{}}).returning();if(o.length>0)return o[0];let s={};for(let t of n)s[t]=e[t];let c=await this.findOne(s);if(!c)throw new K(`upsert with setWhere: conflicting row was deleted concurrently — retry the operation`);return c}async tryClaim(e,t){let n=Array.isArray(t.target)?t.target:[t.target];if(n.length===0)throw new K(`tryClaim requires at least one target column`);let r=n.map(e=>this.getColumnOrThrow(e,`tryClaim target`)),i=t.set??e;if(t.set&&this.validateColumnKeys(Object.keys(t.set),`tryClaim set`),!V(t.replaceWhen))throw new K(`tryClaim requires a non-empty replaceWhen clause`);let a=this.buildWhereOrThrow(t.replaceWhen),o=await this.db.insert(this.table).values(e).onConflictDoUpdate({target:r,set:i,setWhere:a}).returning();if(o.length>0)return{acquired:!0,row:o[0]};let s={};for(let t of n)s[t]=e[t];let c=await this.findOne(s);if(!c)throw new K(`tryClaim: conflicting row was deleted concurrently — retry the operation`);return{acquired:!1,row:c}}async insertMany(e){if(!Array.isArray(e))throw new K(`insertMany requires an array of rows`);if(e.length===0)return[];if(e.length>1e3)throw new K(`insertMany batch too large: ${e.length} > ${G}`);return await this.db.insert(this.table).values(e).returning()}async update(e,t){this.requireNonEmptyWhere(e,`update`),this.validateColumnKeys(Object.keys(t),`update`);let n=this.buildWhereOrThrow(e),r=await this.db.update(this.table).set(t).where(n).returning();if(r.length>1)throw new K(`update matched ${r.length} rows but is expected to match at most one — use updateMany for bulk updates. WARNING: the update has already been applied; wrap in a transaction if you need rollback.`);return r[0]??null}async updateMany(e,t){this.requireNonEmptyWhere(e,`updateMany`),this.validateColumnKeys(Object.keys(t),`updateMany`);let n=this.buildWhereOrThrow(e);return await this.db.update(this.table).set(t).where(n).returning()}async delete(e){this.requireNonEmptyWhere(e,`delete`);let t=this.buildWhereOrThrow(e),n=await this.db.delete(this.table).where(t).returning();if(n.length>1)throw new K(`delete matched ${n.length} rows but is expected to match at most one — use deleteMany for bulk deletes. WARNING: the delete has already been applied; wrap in a transaction if you need rollback.`);return n[0]??null}async deleteMany(e){this.requireNonEmptyWhere(e,`deleteMany`);let t=this.buildWhereOrThrow(e);return await this.db.delete(this.table).where(t).returning()}async transaction(t){return await this.db.transaction(async n=>await t(new e(this.table,this.columnKinds,n,this.primaryKeyColumns)))}async claim(e){if(this.primaryKeyColumns.length===0)throw new K(`claim() requires the table to have a primary key — declare primaryKey in defineTable() or use column.uuid({ primaryKey: true })`);if(this.primaryKeyColumns.length>1)throw new K(`claim() does not support composite primary keys — use a single-column primary key or call transaction() with FOR UPDATE directly`);if(this.requireNonEmptyWhere(e.where,`claim`),!Number.isInteger(e.limit)||e.limit<1)throw new K(`claim limit must be a positive integer, got ${e.limit}`);if(e.limit>1e3)throw new K(`claim limit ${e.limit} exceeds MAX_LIMIT ${W}`);let t=Object.keys(e.set??{}),n=Object.keys(e.setSql??{});if(t.length===0&&n.length===0)throw new K(`claim requires at least one field in set or setSql`);this.validateColumnKeys(t,`claim set`),this.validateColumnKeys(n,`claim setSql`);let r=this.buildWhereOrThrow(e.where),i=e.orderBy&&e.orderBy.length>0?this.buildOrderBy(e.orderBy,`claim`):void 0,a=this.primaryKeyColumns[0],o=this.getColumnOrThrow(a,`claim primary key`);return await this.db.transaction(async t=>{let n=t.select({_pk:o}).from(this._selectTable).where(r).limit(e.limit).for(`update`,{skipLocked:!0}).$dynamic();i&&(n=n.orderBy(...i));let a=await n;if(a.length===0)return[];let s=a.map(e=>e._pk),c={...e.set??{}};if(e.setSql)for(let[t,n]of Object.entries(e.setSql))c[t]=n;return await t.update(this.table).set(c).where(_(o,s)).returning()})}async aggregate(e){let t=Object.entries(e.select);if(t.length===0)throw new K(`aggregate requires at least one select field`);for(let[e]of t)if(!H.test(e))throw new K(`aggregate: invalid output alias "${e}" — must match ${H.source}`);let n={};if(e.groupBy)for(let t of e.groupBy)n[t]=this.getColumnOrThrow(t,`aggregate groupBy`);for(let[e,r]of t)n[e]=this.buildAggregateExpr(r);let r=this.db.select(n).from(this._selectTable).$dynamic();if(e.where&&(r=r.where(this.buildWhereOrThrow(e.where))),e.groupBy&&e.groupBy.length>0){let t=e.groupBy.map(e=>this.getColumnOrThrow(e,`aggregate groupBy`));r=r.groupBy(...t)}return e.orderBy&&e.orderBy.length>0&&(r=r.orderBy(...this.buildOrderBy(e.orderBy,`aggregate`))),e.limit!==void 0&&(r=r.limit(this.validateLimit(e.limit))),await r}async countEstimate(){let e=h(this.table),[t]=await this.db.select({estimate:b`greatest(${U.reltuples}::bigint, 0)`}).from(U).where(p(U.relname,e)).limit(1);return t?Number(t.estimate):0}buildAggregateExpr(e){if(`column`in e&&e.column){let t=this.getColumnOrThrow(e.column,`aggregate`);switch(e.fn){case`count`:return b`count(${t})::int`;case`sum`:return b`sum(${t})`;case`avg`:return b`avg(${t})`;case`min`:return b`min(${t})`;case`max`:return b`max(${t})`;default:throw new K(`aggregate: unknown function "${e.fn}"`)}}if(e.fn===`count`)return b`count(*)::int`;throw new K(`aggregate: ${e.fn} requires a column`)}buildWhereOrThrow(e){try{let t=B(this.table,this.columnKinds,e);if(!t)throw new K(`where clause produced no SQL predicate`);return t}catch(e){throw e instanceof R?new K(e.message.replace(/^WhereBuilder: /,``)):e}}validateLimit(e){if(e===void 0)return 100;if(!Number.isInteger(e)||e<1)throw new K(`limit must be a positive integer, got ${e}`);if(e>1e3)throw new K(`limit ${e} exceeds MAX_LIMIT ${W} — paginate or use claim() for batch processing`);return e}};function J(e,t){let n=e;return Object.defineProperty(n,"__kind",{value:t.kind,enumerable:!1}),Object.defineProperty(n,"__notNull",{value:t.notNull,enumerable:!1}),Object.defineProperty(n,"__hasDefault",{value:t.hasDefault,enumerable:!1}),Object.defineProperty(n,"__type",{value:void 0,enumerable:!1}),t.pgName&&Object.defineProperty(n,"__pgName",{value:t.pgName,enumerable:!1}),t.primaryKey&&Object.defineProperty(n,"__primaryKey",{value:!0,enumerable:!1}),n}const je={uuid(e){let t=e?.notNull??!1,n=e?.defaultRandom??!1,r=e?.primaryKey??!1;return J(n=>{let i=C(n);return r&&(i=i.primaryKey()),e?.defaultRandom&&(i=i.defaultRandom()),t&&!r&&(i=i.notNull()),i},{kind:`uuid`,notNull:t||r,hasDefault:n||r,pgName:e?.pgName,primaryKey:r||void 0})},varchar(e){if(!Number.isInteger(e.length)||e.length<1||e.length>1073741823)throw Error(`column.varchar: length must be an integer between 1 and 1073741823, got ${e.length}`);let t=e.notNull??!1;return J(n=>{let r=w(n,{length:e.length});return t&&(r=r.notNull()),e.default!==void 0&&(r=r.default(e.default)),r},{kind:`varchar`,notNull:t,hasDefault:e.default!==void 0,pgName:e.pgName})},text(e){let t=e?.notNull??!1;return J(n=>{let r=he(n);return t&&(r=r.notNull()),e?.default!==void 0&&(r=r.default(e.default)),r},{kind:`text`,notNull:t,hasDefault:e?.default!==void 0,pgName:e?.pgName})},integer(e){let t=e?.notNull??!1;return J(n=>{let r=de(n);return t&&(r=r.notNull()),e?.default!==void 0&&(r=r.default(e.default)),r},{kind:`integer`,notNull:t,hasDefault:e?.default!==void 0,pgName:e?.pgName})},bigint(e){let t=e?.mode??`number`,n=e?.notNull??!1;return J(r=>{let i=ce(r,{mode:t});return n&&(i=i.notNull()),e?.default!==void 0&&(i=i.default(e.default)),i},{kind:`bigint`,notNull:n,hasDefault:e?.default!==void 0,pgName:e?.pgName})},double(e){let t=e?.notNull??!1;return J(n=>{let r=x(n);return t&&(r=r.notNull()),e?.default!==void 0&&(r=r.default(e.default)),r},{kind:`double`,notNull:t,hasDefault:e?.default!==void 0,pgName:e?.pgName})},boolean(e){let t=e?.notNull??!1;return J(n=>{let r=le(n);return t&&(r=r.notNull()),e?.default!==void 0&&(r=r.default(e.default)),r},{kind:`boolean`,notNull:t,hasDefault:e?.default!==void 0,pgName:e?.pgName})},timestamp(e){let t=e?.notNull??!1,n=e?.defaultNow??!1,r=e?.withTimezone??!0;return J(n=>{let i=ge(n,{withTimezone:r});return t&&(i=i.notNull()),e?.defaultNow&&(i=i.defaultNow()),i},{kind:`timestamp`,notNull:t,hasDefault:n,pgName:e?.pgName})},jsonb(e){let t=e?.notNull??!1;return J(n=>{let r=fe(n);return t&&(r=r.notNull()),e?.default!==void 0&&(r=r.default(e.default)),r},{kind:`jsonb`,notNull:t,hasDefault:e?.default!==void 0,pgName:e?.pgName})},uuidArray(e){let t=e?.notNull??!1;return J(e=>{let n=C(e).array();return t?n.notNull():n},{kind:`uuidArray`,notNull:t,hasDefault:!1,pgName:e?.pgName})}},Y=new Map;function Me(e,t){let n=Y.get(e);n?n.push(t):Y.set(e,[t])}function Ne(e){return Y.get(e)??[]}function Pe(){Y.clear()}const X=new WeakMap;function Fe(e,t){X.set(e,t)}function Ie(e){return X.get(e)??[]}function Z(e){let t=m(e),n=Object.entries(t).map(([e,t])=>`${e}:${t.name}:${t.getSQLType()}:${t.notNull?`1`:`0`}`).sort().join(`|`);return`${h(e)}#${n}`}function Le(e,t){try{return Z(e)===Z(t)}catch{return!1}}const Q=new class{byName=new Map;warnedDuplicates=new Set;register(e,t,n){let r=this.byName.get(e);if(r){if(r.table===t||r.source&&n&&r.source===n)return;if(r.source&&n&&r.source!==n&&Le(r.table,t)){this.warnedDuplicates.has(e)||(this.warnedDuplicates.add(e),process.emitWarning(`table "${e}" was registered from two different bundles (first "${r.source}", now "${n}"). Tolerated because the definitions are structurally identical — a bundler inlined one defineTable() into separate output chunks. Emit the shared table from a single chunk to remove the duplicate.`,{code:`TOOLKIT_TABLE_REGISTRY_DUPLICATE`}));return}throw Error(`tableRegistry: a different table is already registered under name "${e}". Did you call defineTable twice? First registered from ${r.source??`<unknown>`}, now from ${n??`<unknown>`}.`)}this.byName.set(e,{name:e,table:t,source:n})}get(e){return this.byName.get(e)?.table}has(e){return this.byName.has(e)}allTables(){let e={};for(let t of this.byName.values())e[t.name]=t.table;return e}clear(){if(process.env.NODE_ENV===`production`)throw Error(`tableRegistry.clear() is not allowed when NODE_ENV=production — this is a test-only utility. If you reached this from production code, you have a bug.`);this.byName.clear(),this.warnedDuplicates.clear()}},Re=/^[a-z][a-z0-9_]*$/;function $(e,t,n){if(e.length>63)throw Error(`defineTable: ${t} "${e}" is ${e.length} characters — Postgres truncates identifiers at 63 chars silently, which can cause name collisions${n?`. ${n}`:``}`)}function ze(e){if(!Re.test(e.name))throw Error(`defineTable: invalid table name "${e.name}" — must match /^[a-z][a-z0-9_]*$/`);$(e.name,`table name`);let t={},n={};for(let[r,i]of Object.entries(e.columns)){if(typeof i!=`function`)throw Error(`defineTable: column "${r}" is not a column factory — did you call e.g. column.uuid() with parens?`);$(r,`column name in table "${e.name}"`);let a=i.__pgName;a&&$(a,`pgName for column "${r}" in table "${e.name}"`),t[r]=i(a??r),n[r]=i.__kind}let r=new Set(Object.keys(t));if(e.primaryKey!==void 0){let t=Array.isArray(e.primaryKey)?e.primaryKey:[e.primaryKey];for(let e of t)if(!r.has(String(e)))throw Error(`defineTable: primaryKey references unknown column "${String(e)}"`)}if(e.unique)for(let t of e.unique){for(let e of t.on)if(!r.has(String(e)))throw Error(`defineTable: unique constraint references unknown column "${String(e)}"`);$(t.name??`uq_${e.name}_${t.on.map(String).join(`_`)}`,t.name?`unique constraint name`:`auto-generated unique constraint name`,t.name?void 0:"Supply a shorter explicit `name` to the unique definition.")}if(e.indexes)for(let t of e.indexes){for(let e of t.on)if(!r.has(String(e)))throw Error(`defineTable: index references unknown column "${String(e)}"`);$(t.name??`idx_${e.name}_${t.on.map(String).join(`_`)}`,t.name?`index name`:`auto-generated index name`,t.name?void 0:"Supply a shorter explicit `name` to the index definition.")}let i=e.primaryKey!==void 0||e.unique&&e.unique.length>0||e.indexes&&e.indexes.length>0;function a(e,t,n){let r=e[t];if(!r)throw Error(`defineTable: ${n} references unknown column "${t}"`);return r}function o(e,t){return typeof e==`function`?e(t):e}let s=i?S(e.name,t,t=>{let n=t,r=[];if(e.primaryKey!==void 0){let t=Array.isArray(e.primaryKey)?e.primaryKey:[e.primaryKey],i=a(n,String(t[0]),`primaryKey`),o=t.slice(1).map(e=>a(n,String(e),`primaryKey`));r.push(pe({columns:[i,...o]}))}if(e.unique)for(let t of e.unique){let i=a(n,String(t.on[0]),`unique constraint`),s=t.on.slice(1).map(e=>a(n,String(e),`unique constraint`));if(t.where!==void 0){let a=t.name??`uq_${e.name}_${t.on.map(String).join(`_`)}`;r.push(ve(a).on(i,...s).where(o(t.where,n)))}else r.push(_e().on(i,...s))}if(e.indexes)for(let t of e.indexes){let i=a(n,String(t.on[0]),`index`),s=t.on.slice(1).map(e=>a(n,String(e),`index`)),c=ue(t.name??`idx_${e.name}_${t.on.map(String).join(`_`)}`).on(i,...s);r.push(t.where===void 0?c:c.where(o(t.where,n)))}return r}):S(e.name,t),c=Be();Q.register(e.name,s,c);let l=Object.freeze({...n}),u;if(e.primaryKey!==void 0)u=Array.isArray(e.primaryKey)?e.primaryKey.map(String):[String(e.primaryKey)];else{u=[];for(let[t,n]of Object.entries(e.columns))n.__primaryKey&&u.push(t)}let d=Object.freeze([...u]),f=e=>new q(s,l,e,d),p=e.dependsOn??[];for(let t of p){if(typeof t.entity!=`string`||t.entity.trim().length===0)throw Error(`defineTable: dependsOn.entity must be a non-empty string on table "${e.name}"`);let n=e.columns[t.column];if(!r.has(String(t.column))||n===void 0)throw Error(`defineTable: dependsOn references unknown column "${String(t.column)}" on table "${e.name}"`);if(t.onDelete!==`cascade`&&t.onDelete!==`set-null`)throw Error(`defineTable: dependsOn.onDelete must be 'cascade' or 'set-null' on table "${e.name}", got "${String(t.onDelete)}"`);if(t.onDelete===`set-null`&&n.__notNull===!0)throw Error(`defineTable: dependsOn onDelete:'set-null' targets non-nullable column "${String(t.column)}" on table "${e.name}" — make the column nullable or use 'cascade'`)}function m(e){let t=e.column;return async(n,r)=>{if(r.length===0)return;let i=f(n),a={[t]:{in:r}};if(e.onDelete===`cascade`)await i.deleteMany(a);else{let e={[t]:null};await i.updateMany(a,e)}}}let h=p.map(e=>({entity:e.entity,cleanup:m(e)}));return h.length>0&&Fe(s,h),{table:s,schema:e,columnKinds:l,primaryKeyColumns:d,makeClient:f}}function Be(){let e=Error().stack;if(!e)return;let t=e.split(`
|
|
19
|
+
`).slice(1);for(let e of t){if(e.includes(`/table/define.`)||e.includes(`/table/registry.`))continue;let t=e.match(/\(([^)]+)\)/)??e.match(/at (.+)$/);if(t?.[1])return t[1].trim()}}export{Ae as DEFAULT_LIMIT,O as DEFAULT_READ_ONLY_STATEMENT_TIMEOUT_MS,a as EXTENSION_NAME_PATTERN,G as MAX_BATCH,W as MAX_LIMIT,k as MAX_STATEMENT_TIMEOUT_MS,q as TableClient,K as TableClientError,R as WhereBuilderError,Pe as __clearDependentCleanups,n as assertValidExtensionName,je as column,M as createDbClient,i as createExtensionStatement,xe as createListenClient,N as createReadOnlyClient,ze as defineTable,Ne as getDependentCleanups,I as getMigrationStatus,ye as getQueryStats,Ie as getTableCleanupDescriptors,V as isNonEmptyWhere,D as isQueryCounterEnabled,t as isTrackedTransaction,e as onCommit,A as parseStatementTimeoutEnv,E as queryCountingLogger,Me as registerDependentCleanup,we as rollbackMigrations,Ce as runMigrations,be as runWithQueryStats,Te as schemaRegistry,Q as tableRegistry,r as trackTransactions};
|
|
20
20
|
//# sourceMappingURL=index.mjs.map
|