@danceroutine/tango-orm 1.11.0 → 1.11.2
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/Adapter-DKxAaL4l.d.ts +73 -0
- package/dist/DBClient-DuYcXolQ.d.ts +27 -0
- package/dist/{InternalDialect-ClSaUNso.js → InternalDialect-U3mwJjKA.js} +3 -4
- package/dist/InternalDialect-U3mwJjKA.js.map +1 -0
- package/dist/QuerySetState-CjyvAUBs.d.ts +1310 -0
- package/dist/SqliteAdapter-6oyUmoJf.js +279 -0
- package/dist/SqliteAdapter-6oyUmoJf.js.map +1 -0
- package/dist/chunk-8H4AJuhK.js +14 -0
- package/dist/connection/index.d.ts +4 -11
- package/dist/connection/index.js +3 -6
- package/dist/{connection-Dmhgx31M.js → connection-D-E6_Yf1.js} +28 -30
- package/dist/connection-D-E6_Yf1.js.map +1 -0
- package/dist/{defaultRuntime-DzqBQ9Hb.js → defaultRuntime-CdTX8cXm.js} +41 -35
- package/dist/defaultRuntime-CdTX8cXm.js.map +1 -0
- package/dist/index-B-aibguC.d.ts +226 -0
- package/dist/index-D9B6gKez.d.ts +70 -0
- package/dist/index-rjKca3U_.d.ts +31 -0
- package/dist/index-uuG57Y7C.d.ts +97 -0
- package/dist/index.d.ts +9 -22
- package/dist/index.js +9 -12
- package/dist/manager/index.d.ts +4 -12
- package/dist/manager/index.js +3 -9
- package/dist/{manager-DrDTiCAz.js → manager-CiYqAYpn.js} +7 -11
- package/dist/{manager-DrDTiCAz.js.map → manager-CiYqAYpn.js.map} +1 -1
- package/dist/query/index.d.ts +3 -14
- package/dist/query/index.js +2 -4
- package/dist/{query-DUZnBFhf.js → query-CP1UMIX6.js} +163 -121
- package/dist/query-CP1UMIX6.js.map +1 -0
- package/dist/registerModelObjects-C-MliIiM.d.ts +229 -0
- package/dist/{registerModelObjects-Djpt45KK.js → registerModelObjects-DZfZ20fa.js} +150 -69
- package/dist/registerModelObjects-DZfZ20fa.js.map +1 -0
- package/dist/runtime/index.d.ts +3 -15
- package/dist/runtime/index.js +15 -8
- package/dist/runtime/index.js.map +1 -0
- package/dist/transaction/index.d.ts +2 -6
- package/dist/transaction/index.js +2 -7
- package/dist/{transaction-ZhfDf-f8.js → transaction-2_2m7VUo.js} +26 -10
- package/dist/transaction-2_2m7VUo.js.map +1 -0
- package/package.json +8 -8
- package/dist/InternalDialect-ClSaUNso.js.map +0 -1
- package/dist/PostgresAdapter-CXKdKBG-.js +0 -4
- package/dist/PostgresAdapter-DySFW6vy.js +0 -128
- package/dist/PostgresAdapter-DySFW6vy.js.map +0 -1
- package/dist/SqliteAdapter-CDdOjRmW.js +0 -151
- package/dist/SqliteAdapter-CDdOjRmW.js.map +0 -1
- package/dist/SqliteAdapter-mjtXuVTg.js +0 -4
- package/dist/chunk-DLY2FNSh.js +0 -12
- package/dist/connection/adapters/Adapter.d.ts +0 -60
- package/dist/connection/adapters/AdapterRegistry.d.ts +0 -44
- package/dist/connection/adapters/dialects/PostgresAdapter.d.ts +0 -30
- package/dist/connection/adapters/dialects/SqliteAdapter.d.ts +0 -22
- package/dist/connection/adapters/dialects/index.d.ts +0 -5
- package/dist/connection/adapters/index.d.ts +0 -8
- package/dist/connection/clients/DBClient.d.ts +0 -23
- package/dist/connection/clients/dialects/PostgresClient.d.ts +0 -54
- package/dist/connection/clients/dialects/SqliteClient.d.ts +0 -54
- package/dist/connection/clients/dialects/index.d.ts +0 -5
- package/dist/connection/clients/index.d.ts +0 -7
- package/dist/connection-Dmhgx31M.js.map +0 -1
- package/dist/defaultRuntime-DzqBQ9Hb.js.map +0 -1
- package/dist/manager/ManagerLike.d.ts +0 -34
- package/dist/manager/ModelManager.d.ts +0 -97
- package/dist/manager/internal/MutationCompiler.d.ts +0 -23
- package/dist/manager/internal/RuntimeBoundClient.d.ts +0 -20
- package/dist/manager/registerModelObjects.d.ts +0 -5
- package/dist/manager/relations/ManyToManyRelatedManager.d.ts +0 -181
- package/dist/manager/relations/ManyToManyRelatedQuerySet.d.ts +0 -62
- package/dist/manager/relations/MaterializedModelRecord.d.ts +0 -28
- package/dist/manager/relations/index.d.ts +0 -9
- package/dist/manager/relations/internal/ThroughTableManager.d.ts +0 -85
- package/dist/query/ModelQuerySet.d.ts +0 -20
- package/dist/query/QBuilder.d.ts +0 -29
- package/dist/query/QuerySet.d.ts +0 -215
- package/dist/query/compiler/QueryCompiler.d.ts +0 -49
- package/dist/query/compiler/index.d.ts +0 -4
- package/dist/query/domain/CompiledQuery.d.ts +0 -209
- package/dist/query/domain/Dialect.d.ts +0 -2
- package/dist/query/domain/Direction.d.ts +0 -2
- package/dist/query/domain/FilterInput.d.ts +0 -3
- package/dist/query/domain/FilterKey.d.ts +0 -4
- package/dist/query/domain/FilterValue.d.ts +0 -1
- package/dist/query/domain/LookupType.d.ts +0 -2
- package/dist/query/domain/OrderSpec.d.ts +0 -5
- package/dist/query/domain/OrderToken.d.ts +0 -1
- package/dist/query/domain/QNode.d.ts +0 -9
- package/dist/query/domain/QueryResult.d.ts +0 -35
- package/dist/query/domain/QuerySetState.d.ts +0 -13
- package/dist/query/domain/RelationMeta.d.ts +0 -56
- package/dist/query/domain/RelationTyping.d.ts +0 -163
- package/dist/query/domain/TableMeta.d.ts +0 -16
- package/dist/query/domain/TableMetaFactory.d.ts +0 -10
- package/dist/query/domain/WhereClause.d.ts +0 -4
- package/dist/query/domain/index.d.ts +0 -21
- package/dist/query/domain/internal/InternalDialect.d.ts +0 -4
- package/dist/query/domain/internal/InternalDirection.d.ts +0 -4
- package/dist/query/domain/internal/InternalLookupType.d.ts +0 -15
- package/dist/query/domain/internal/InternalPrefetchQueryKind.d.ts +0 -20
- package/dist/query/domain/internal/InternalQNodeType.d.ts +0 -6
- package/dist/query/domain/internal/InternalRelationKind.d.ts +0 -6
- package/dist/query/internal/isQNodeLike.d.ts +0 -3
- package/dist/query/planning/QueryPlanner.d.ts +0 -16
- package/dist/query/planning/domain/QueryHydrationPlan.d.ts +0 -20
- package/dist/query/planning/index.d.ts +0 -2
- package/dist/query-DUZnBFhf.js.map +0 -1
- package/dist/registerModelObjects-Djpt45KK.js.map +0 -1
- package/dist/runtime/TangoRuntime.d.ts +0 -56
- package/dist/runtime/defaultRuntime.d.ts +0 -13
- package/dist/runtime/internal/DBClientProvider.d.ts +0 -12
- package/dist/runtime/internal/PostgresDBClientProvider.d.ts +0 -12
- package/dist/runtime/internal/SqliteDBClientProvider.d.ts +0 -19
- package/dist/runtime/internal/createDBClientProvider.d.ts +0 -5
- package/dist/runtime-1H88J3nN.js +0 -18
- package/dist/runtime-1H88J3nN.js.map +0 -1
- package/dist/transaction/AtomicTransaction.d.ts +0 -32
- package/dist/transaction/UnitOfWork.d.ts +0 -52
- package/dist/transaction/atomic.d.ts +0 -2
- package/dist/transaction/internal/context/AsyncLocalTransactionEngine.d.ts +0 -21
- package/dist/transaction/internal/context/CallbackRecord.d.ts +0 -5
- package/dist/transaction/internal/context/FrameBoundTransaction.d.ts +0 -20
- package/dist/transaction/internal/context/FrameTransactionHandle.d.ts +0 -4
- package/dist/transaction/internal/context/TransactionEngine.d.ts +0 -16
- package/dist/transaction/internal/context/TransactionFrame.d.ts +0 -7
- package/dist/transaction/internal/context/TransactionState.d.ts +0 -10
- package/dist/transaction/internal/context/index.d.ts +0 -1
- package/dist/transaction-ZhfDf-f8.js.map +0 -1
- package/dist/validation/OrmSqlSafetyAdapter.d.ts +0 -22
- package/dist/validation/SQLValidationEngine.d.ts +0 -68
- package/dist/validation/SqlValidationPlan.d.ts +0 -43
- package/dist/validation/index.d.ts +0 -3
- package/dist/validation/internal/InternalSqlValidationPlanKind.d.ts +0 -25
- package/dist/validation/internal/InternalValidatedFilterDescriptorKind.d.ts +0 -4
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import { PostgresAdapter, PostgresClient } from "./
|
|
2
|
-
import { InternalDialect } from "./InternalDialect-
|
|
3
|
-
import { SqliteAdapter, SqliteClient } from "./SqliteAdapter-CDdOjRmW.js";
|
|
4
|
-
import pg from "pg";
|
|
1
|
+
import { i as PostgresAdapter, o as PostgresClient, r as SqliteClient, t as SqliteAdapter } from "./SqliteAdapter-6oyUmoJf.js";
|
|
2
|
+
import { t as InternalDialect } from "./InternalDialect-U3mwJjKA.js";
|
|
5
3
|
import { createRequire } from "node:module";
|
|
4
|
+
import pg from "pg";
|
|
6
5
|
import { getLogger } from "@danceroutine/tango-core";
|
|
7
6
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
8
7
|
import { loadConfig, loadConfigFromProjectRoot } from "@danceroutine/tango-config";
|
|
9
|
-
|
|
10
8
|
//#region src/transaction/internal/context/FrameBoundTransaction.ts
|
|
11
9
|
var FrameBoundTransaction = class {
|
|
10
|
+
engine;
|
|
11
|
+
state;
|
|
12
|
+
frame;
|
|
12
13
|
active = true;
|
|
13
14
|
constructor(engine, state, frame) {
|
|
14
15
|
this.engine = engine;
|
|
@@ -31,7 +32,6 @@ var FrameBoundTransaction = class {
|
|
|
31
32
|
this.active = false;
|
|
32
33
|
}
|
|
33
34
|
};
|
|
34
|
-
|
|
35
35
|
//#endregion
|
|
36
36
|
//#region src/transaction/internal/context/AsyncLocalTransactionEngine.ts
|
|
37
37
|
var AsyncLocalTransactionEngine = class {
|
|
@@ -42,12 +42,12 @@ var AsyncLocalTransactionEngine = class {
|
|
|
42
42
|
}
|
|
43
43
|
getActiveTransaction(runtime) {
|
|
44
44
|
const state = this.storage.getStore();
|
|
45
|
-
if (!state || state.runtime !== runtime) return
|
|
45
|
+
if (!state || state.runtime !== runtime) return;
|
|
46
46
|
return state.frames.at(-1)?.facade;
|
|
47
47
|
}
|
|
48
48
|
getActiveLease(runtime) {
|
|
49
49
|
const state = this.storage.getStore();
|
|
50
|
-
if (!state || state.runtime !== runtime) return
|
|
50
|
+
if (!state || state.runtime !== runtime) return;
|
|
51
51
|
return state.lease;
|
|
52
52
|
}
|
|
53
53
|
async atomic(runtime, work) {
|
|
@@ -121,8 +121,7 @@ var AsyncLocalTransactionEngine = class {
|
|
|
121
121
|
} catch (rollbackError) {
|
|
122
122
|
throw this.attachCause(rollbackError, error);
|
|
123
123
|
} finally {
|
|
124
|
-
|
|
125
|
-
discarded.facade.deactivate();
|
|
124
|
+
this.popFrame(state).facade.deactivate();
|
|
126
125
|
}
|
|
127
126
|
throw error;
|
|
128
127
|
}
|
|
@@ -147,10 +146,7 @@ var AsyncLocalTransactionEngine = class {
|
|
|
147
146
|
} catch (rollbackError) {
|
|
148
147
|
throw this.attachCause(rollbackError, error);
|
|
149
148
|
} finally {
|
|
150
|
-
while (state.frames.length > 0)
|
|
151
|
-
const frame = this.popFrame(state);
|
|
152
|
-
frame.facade.deactivate();
|
|
153
|
-
}
|
|
149
|
+
while (state.frames.length > 0) this.popFrame(state).facade.deactivate();
|
|
154
150
|
}
|
|
155
151
|
}
|
|
156
152
|
async runCommittedCallbacks(callbacks) {
|
|
@@ -168,7 +164,7 @@ var AsyncLocalTransactionEngine = class {
|
|
|
168
164
|
}
|
|
169
165
|
attachCause(error, cause) {
|
|
170
166
|
if (!this.isErrorValue(error)) return error;
|
|
171
|
-
if ("cause" in error && error.cause !==
|
|
167
|
+
if ("cause" in error && error.cause !== void 0) return error;
|
|
172
168
|
try {
|
|
173
169
|
return new Error(error.message, { cause });
|
|
174
170
|
} catch {
|
|
@@ -179,10 +175,13 @@ var AsyncLocalTransactionEngine = class {
|
|
|
179
175
|
return typeof value === "object" && value !== null && typeof value.message === "string" && typeof value.name === "string";
|
|
180
176
|
}
|
|
181
177
|
};
|
|
182
|
-
|
|
183
178
|
//#endregion
|
|
184
179
|
//#region src/transaction/internal/context/TransactionEngine.ts
|
|
180
|
+
/**
|
|
181
|
+
* Runtime-bound transaction facade used by internal ORM/runtime components.
|
|
182
|
+
*/
|
|
185
183
|
var TransactionEngine = class TransactionEngine {
|
|
184
|
+
runtime;
|
|
186
185
|
static engine = new AsyncLocalTransactionEngine();
|
|
187
186
|
constructor(runtime) {
|
|
188
187
|
this.runtime = runtime;
|
|
@@ -203,10 +202,14 @@ var TransactionEngine = class TransactionEngine {
|
|
|
203
202
|
return TransactionEngine.engine.atomic(this.runtime, work);
|
|
204
203
|
}
|
|
205
204
|
};
|
|
206
|
-
|
|
207
205
|
//#endregion
|
|
208
206
|
//#region src/manager/internal/RuntimeBoundClient.ts
|
|
207
|
+
/**
|
|
208
|
+
* DB client proxy that resolves either the active transaction lease or the
|
|
209
|
+
* runtime autocommit path lazily.
|
|
210
|
+
*/
|
|
209
211
|
var RuntimeBoundClient = class {
|
|
212
|
+
runtime;
|
|
210
213
|
constructor(runtime) {
|
|
211
214
|
this.runtime = runtime;
|
|
212
215
|
}
|
|
@@ -215,8 +218,7 @@ var RuntimeBoundClient = class {
|
|
|
215
218
|
if (lease) return lease.client.query(sql, params);
|
|
216
219
|
const runtimeWithQuery = this.runtime;
|
|
217
220
|
if (typeof runtimeWithQuery.query === "function") return runtimeWithQuery.query(sql, params);
|
|
218
|
-
|
|
219
|
-
return client.query(sql, params);
|
|
221
|
+
return (await this.runtime.getClient()).query(sql, params);
|
|
220
222
|
}
|
|
221
223
|
async begin() {
|
|
222
224
|
throw new Error("Runtime-bound clients do not support manual begin(). Use transaction.atomic(...) instead.");
|
|
@@ -240,7 +242,6 @@ var RuntimeBoundClient = class {
|
|
|
240
242
|
throw new Error("Runtime-bound clients do not support manual close(). Use TangoRuntime.reset() instead.");
|
|
241
243
|
}
|
|
242
244
|
};
|
|
243
|
-
|
|
244
245
|
//#endregion
|
|
245
246
|
//#region src/runtime/internal/PostgresDBClientProvider.ts
|
|
246
247
|
const { Pool } = pg;
|
|
@@ -259,8 +260,7 @@ var PostgresDBClientProvider = class {
|
|
|
259
260
|
});
|
|
260
261
|
}
|
|
261
262
|
async query(sql, params) {
|
|
262
|
-
|
|
263
|
-
return { rows: result.rows };
|
|
263
|
+
return { rows: (await this.pool.query(sql, params)).rows };
|
|
264
264
|
}
|
|
265
265
|
async leaseTransactionClient() {
|
|
266
266
|
const client = await this.pool.connect();
|
|
@@ -281,7 +281,6 @@ var PostgresDBClientProvider = class {
|
|
|
281
281
|
await this.pool.end();
|
|
282
282
|
}
|
|
283
283
|
};
|
|
284
|
-
|
|
285
284
|
//#endregion
|
|
286
285
|
//#region src/runtime/internal/SqliteDBClientProvider.ts
|
|
287
286
|
var SqliteDBClientProvider = class {
|
|
@@ -354,15 +353,13 @@ var SqliteDBClientProvider = class {
|
|
|
354
353
|
};
|
|
355
354
|
}
|
|
356
355
|
getDatabaseCtor() {
|
|
357
|
-
const
|
|
358
|
-
const moduleValue = require("better-sqlite3");
|
|
356
|
+
const moduleValue = createRequire(import.meta.url)("better-sqlite3");
|
|
359
357
|
if (typeof moduleValue === "function") return moduleValue;
|
|
360
358
|
const defaultExport = moduleValue.default;
|
|
361
359
|
if (typeof defaultExport === "function") return defaultExport;
|
|
362
360
|
throw new TypeError("Failed to load better-sqlite3 constructor.");
|
|
363
361
|
}
|
|
364
362
|
};
|
|
365
|
-
|
|
366
363
|
//#endregion
|
|
367
364
|
//#region src/runtime/internal/createDBClientProvider.ts
|
|
368
365
|
function createDBClientProvider(config) {
|
|
@@ -372,9 +369,12 @@ function createDBClientProvider(config) {
|
|
|
372
369
|
default: throw new Error(`Unsupported adapter for Tango runtime provider: ${config.adapter}`);
|
|
373
370
|
}
|
|
374
371
|
}
|
|
375
|
-
|
|
376
372
|
//#endregion
|
|
377
373
|
//#region src/runtime/TangoRuntime.ts
|
|
374
|
+
/**
|
|
375
|
+
* Framework-owned database runtime that resolves Tango config and lazily
|
|
376
|
+
* creates the shared connection provider used by manager-backed models.
|
|
377
|
+
*/
|
|
378
378
|
var TangoRuntime = class TangoRuntime {
|
|
379
379
|
static BRAND = "tango.orm.runtime";
|
|
380
380
|
__tangoBrand = TangoRuntime.BRAND;
|
|
@@ -423,15 +423,13 @@ var TangoRuntime = class TangoRuntime {
|
|
|
423
423
|
* Execute SQL through the autocommit path owned by this runtime.
|
|
424
424
|
*/
|
|
425
425
|
async query(sql, params) {
|
|
426
|
-
|
|
427
|
-
return provider.query(sql, params);
|
|
426
|
+
return (await this.getProvider()).query(sql, params);
|
|
428
427
|
}
|
|
429
428
|
/**
|
|
430
429
|
* Lease a transaction-scoped client for `transaction.atomic(...)`.
|
|
431
430
|
*/
|
|
432
431
|
async leaseTransactionClient() {
|
|
433
|
-
|
|
434
|
-
return provider.leaseTransactionClient();
|
|
432
|
+
return (await this.getProvider()).leaseTransactionClient();
|
|
435
433
|
}
|
|
436
434
|
/**
|
|
437
435
|
* Close and clear the cached runtime resources so tests can start fresh.
|
|
@@ -470,25 +468,33 @@ var TangoRuntime = class TangoRuntime {
|
|
|
470
468
|
return this.providerPromise;
|
|
471
469
|
}
|
|
472
470
|
};
|
|
473
|
-
|
|
474
471
|
//#endregion
|
|
475
472
|
//#region src/runtime/defaultRuntime.ts
|
|
476
473
|
let defaultRuntime = null;
|
|
474
|
+
/**
|
|
475
|
+
* Initialize the process-default Tango runtime from a Tango config loader.
|
|
476
|
+
*/
|
|
477
477
|
function initializeTangoRuntime(fromFile) {
|
|
478
478
|
defaultRuntime = new TangoRuntime(() => loadConfig(fromFile));
|
|
479
479
|
return defaultRuntime;
|
|
480
480
|
}
|
|
481
|
+
/**
|
|
482
|
+
* Return the process-default Tango runtime, lazily loading Tango config on first access.
|
|
483
|
+
*/
|
|
481
484
|
function getTangoRuntime() {
|
|
482
485
|
if (!defaultRuntime) defaultRuntime = new TangoRuntime(() => loadConfigFromProjectRoot());
|
|
483
486
|
return defaultRuntime;
|
|
484
487
|
}
|
|
488
|
+
/**
|
|
489
|
+
* Reset the process-default Tango runtime and release any cached client.
|
|
490
|
+
*/
|
|
485
491
|
async function resetTangoRuntime() {
|
|
486
492
|
if (!defaultRuntime) return;
|
|
487
493
|
const runtime = defaultRuntime;
|
|
488
494
|
defaultRuntime = null;
|
|
489
495
|
await runtime.reset();
|
|
490
496
|
}
|
|
491
|
-
|
|
492
497
|
//#endregion
|
|
493
|
-
export { RuntimeBoundClient, TangoRuntime
|
|
494
|
-
|
|
498
|
+
export { RuntimeBoundClient as a, TangoRuntime as i, initializeTangoRuntime as n, TransactionEngine as o, resetTangoRuntime as r, getTangoRuntime as t };
|
|
499
|
+
|
|
500
|
+
//# sourceMappingURL=defaultRuntime-CdTX8cXm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultRuntime-CdTX8cXm.js","names":[],"sources":["../src/transaction/internal/context/FrameBoundTransaction.ts","../src/transaction/internal/context/AsyncLocalTransactionEngine.ts","../src/transaction/internal/context/TransactionEngine.ts","../src/manager/internal/RuntimeBoundClient.ts","../src/runtime/internal/PostgresDBClientProvider.ts","../src/runtime/internal/SqliteDBClientProvider.ts","../src/runtime/internal/createDBClientProvider.ts","../src/runtime/TangoRuntime.ts","../src/runtime/defaultRuntime.ts"],"sourcesContent":["import type { AtomicTransaction, OnCommitOptions, SavepointOptions, SavepointResult } from '../../AtomicTransaction';\nimport type { AsyncLocalTransactionEngine } from './AsyncLocalTransactionEngine';\nimport type { TransactionFrame } from './TransactionFrame';\nimport type { TransactionState } from './TransactionState';\n\nexport class FrameBoundTransaction implements AtomicTransaction {\n private active = true;\n\n constructor(\n private readonly engine: AsyncLocalTransactionEngine,\n private readonly state: TransactionState,\n private readonly frame: TransactionFrame\n ) {}\n\n onCommit(callback: () => void, options: OnCommitOptions = {}): void {\n if (!this.active) {\n throw new Error('Cannot register an on-commit callback on an inactive transaction frame.');\n }\n\n this.frame.callbacks.push({\n order: this.state.nextCallbackOrder++,\n callback,\n robust: options.robust ?? false,\n });\n }\n\n savepoint<T>(work: (tx: AtomicTransaction) => Promise<T> | T): Promise<SavepointResult<T>>;\n savepoint<T>(\n work: (tx: AtomicTransaction) => Promise<T> | T,\n options: { throwOnError: false }\n ): Promise<SavepointResult<T>>;\n savepoint<T>(work: (tx: AtomicTransaction) => Promise<T> | T, options: { throwOnError: true }): Promise<T>;\n async savepoint<T>(\n work: (tx: AtomicTransaction) => Promise<T> | T,\n options: SavepointOptions = {}\n ): Promise<T | SavepointResult<T>> {\n if (!this.active) {\n throw new Error('Cannot open a savepoint from an inactive transaction frame.');\n }\n\n return this.engine.runSavepoint(this.state, work, options);\n }\n\n deactivate(): void {\n this.active = false;\n }\n}\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { getLogger } from '@danceroutine/tango-core';\nimport type { TangoRuntime } from '../../../runtime/TangoRuntime';\nimport type { TransactionClientLease } from '../../../runtime/internal/DBClientProvider';\nimport type { AtomicTransaction, SavepointOptions, SavepointResult } from '../../AtomicTransaction';\nimport type { CallbackRecord } from './CallbackRecord';\nimport { FrameBoundTransaction } from './FrameBoundTransaction';\nimport type { TransactionFrame } from './TransactionFrame';\nimport type { TransactionState } from './TransactionState';\n\nexport class AsyncLocalTransactionEngine {\n private readonly logger = getLogger('tango.orm.transaction');\n private readonly storage = new AsyncLocalStorage<TransactionState>();\n\n assertNoActiveAtomicTransaction(): void {\n if (this.storage.getStore()) {\n throw new Error('UnitOfWork is unsupported inside transaction.atomic(...).');\n }\n }\n\n getActiveTransaction(runtime: TangoRuntime): AtomicTransaction | undefined {\n const state = this.storage.getStore();\n if (!state || state.runtime !== runtime) {\n return undefined;\n }\n\n return state.frames.at(-1)?.facade;\n }\n\n getActiveLease(runtime: TangoRuntime): TransactionClientLease | undefined {\n const state = this.storage.getStore();\n if (!state || state.runtime !== runtime) {\n return undefined;\n }\n\n return state.lease;\n }\n\n async atomic<T>(runtime: TangoRuntime, work: (tx: AtomicTransaction) => Promise<T> | T): Promise<T> {\n const existing = this.storage.getStore();\n if (existing) {\n if (existing.runtime !== runtime) {\n throw new Error(\n 'Cannot open a transaction for one Tango runtime while another runtime transaction is active.'\n );\n }\n\n return this.runNested(existing, work);\n }\n\n const lease = await runtime.leaseTransactionClient();\n const state: TransactionState = {\n runtime,\n lease,\n frames: [],\n nextCallbackOrder: 0,\n nextSavepointId: 0,\n };\n\n try {\n return await this.storage.run(state, async () => {\n await lease.client.begin();\n const frame = this.pushFrame(state);\n\n try {\n const result = await work(frame.facade);\n await lease.client.commit();\n const root = this.popFrame(state);\n root.facade.deactivate();\n await this.runCommittedCallbacks(root.callbacks);\n return result;\n } catch (error) {\n await this.rollbackOuter(state, error);\n throw error;\n }\n });\n } finally {\n this.deactivateAllFrames(state);\n await lease.release();\n }\n }\n\n async runSavepoint<T>(\n state: TransactionState,\n work: (tx: AtomicTransaction) => Promise<T> | T,\n options: SavepointOptions\n ): Promise<T | SavepointResult<T>> {\n try {\n const value = await this.runNested(state, work);\n if (options.throwOnError) {\n return value;\n }\n\n return {\n ok: true,\n value,\n };\n } catch (error) {\n if (options.throwOnError) {\n throw error;\n }\n\n return {\n ok: false,\n error,\n };\n }\n }\n\n private async runNested<T>(state: TransactionState, work: (tx: AtomicTransaction) => Promise<T> | T): Promise<T> {\n const savepointName = `tango_sp_${state.nextSavepointId++}`;\n await state.lease.client.createSavepoint(savepointName);\n const frame = this.pushFrame(state, savepointName);\n\n try {\n const result = await work(frame.facade);\n await state.lease.client.releaseSavepoint(savepointName);\n const completed = this.popFrame(state);\n completed.facade.deactivate();\n const parent = state.frames.at(-1);\n if (!parent) {\n throw new Error('Nested transaction frame completed without a parent frame.');\n }\n\n parent.callbacks.push(...completed.callbacks);\n parent.callbacks.sort((left, right) => left.order - right.order);\n return result;\n } catch (error) {\n try {\n await state.lease.client.rollbackToSavepoint(savepointName);\n } catch (rollbackError) {\n throw this.attachCause(rollbackError, error);\n } finally {\n const discarded = this.popFrame(state);\n discarded.facade.deactivate();\n }\n\n throw error;\n }\n }\n\n private pushFrame(state: TransactionState, savepointName?: string): TransactionFrame {\n const frame = {} as TransactionFrame;\n const facade = new FrameBoundTransaction(this, state, frame);\n frame.callbacks = [];\n frame.facade = facade;\n frame.savepointName = savepointName;\n state.frames.push(frame);\n return frame;\n }\n\n private popFrame(state: TransactionState): TransactionFrame {\n const frame = state.frames.pop();\n if (!frame) {\n throw new Error('Transaction frame stack underflow.');\n }\n\n return frame;\n }\n\n private async rollbackOuter(state: TransactionState, error: unknown): Promise<void> {\n try {\n await state.lease.client.rollback();\n } catch (rollbackError) {\n throw this.attachCause(rollbackError, error);\n } finally {\n while (state.frames.length > 0) {\n const frame = this.popFrame(state);\n frame.facade.deactivate();\n }\n }\n }\n\n private async runCommittedCallbacks(callbacks: readonly CallbackRecord[]): Promise<void> {\n for (const record of callbacks) {\n try {\n await record.callback();\n } catch (error) {\n if (!record.robust) {\n throw error;\n }\n\n try {\n this.logger.error('Post-commit callback failed.', error);\n } catch {\n // A logging backend failure cannot change the already-committed outcome.\n }\n }\n }\n }\n\n private deactivateAllFrames(state: TransactionState): void {\n state.frames.length = 0;\n }\n\n private attachCause(error: unknown, cause: unknown): unknown {\n if (!this.isErrorValue(error)) {\n return error;\n }\n\n if ('cause' in error && error.cause !== undefined) {\n return error;\n }\n\n try {\n return new Error(error.message, { cause });\n } catch {\n return error;\n }\n }\n\n private isErrorValue(value: unknown): value is Error {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof (value as { message?: unknown }).message === 'string' &&\n typeof (value as { name?: unknown }).name === 'string'\n );\n }\n}\n","import type { TangoRuntime } from '../../../runtime/TangoRuntime';\nimport type { TransactionClientLease } from '../../../runtime/internal/DBClientProvider';\nimport type { AtomicTransaction } from '../../AtomicTransaction';\nimport { AsyncLocalTransactionEngine } from './AsyncLocalTransactionEngine';\n\n/**\n * Runtime-bound transaction facade used by internal ORM/runtime components.\n */\nexport class TransactionEngine {\n private static readonly engine = new AsyncLocalTransactionEngine();\n\n private constructor(private readonly runtime: TangoRuntime) {}\n\n static forRuntime(runtime: TangoRuntime): TransactionEngine {\n return new TransactionEngine(runtime);\n }\n\n static assertNoActiveAtomicTransaction(): void {\n this.engine.assertNoActiveAtomicTransaction();\n }\n\n getActiveTransaction(): AtomicTransaction | undefined {\n return TransactionEngine.engine.getActiveTransaction(this.runtime);\n }\n\n getActiveLease(): TransactionClientLease | undefined {\n return TransactionEngine.engine.getActiveLease(this.runtime);\n }\n\n async atomic<T>(work: (tx: AtomicTransaction) => Promise<T> | T): Promise<T> {\n return TransactionEngine.engine.atomic(this.runtime, work);\n }\n}\n","import type { DBClient } from '../../connection/index';\nimport type { TangoRuntime } from '../../runtime/index';\nimport { TransactionEngine } from '../../transaction/internal/context';\n\n/**\n * DB client proxy that resolves either the active transaction lease or the\n * runtime autocommit path lazily.\n */\nexport class RuntimeBoundClient implements DBClient {\n constructor(private readonly runtime: TangoRuntime) {}\n\n async query<T = unknown>(sql: string, params?: readonly unknown[]): Promise<{ rows: T[] }> {\n const lease = TransactionEngine.forRuntime(this.runtime).getActiveLease();\n if (lease) {\n return lease.client.query<T>(sql, params);\n }\n\n const runtimeWithQuery = this.runtime as TangoRuntime & {\n query?: <TResult = unknown>(sql: string, params?: readonly unknown[]) => Promise<{ rows: TResult[] }>;\n };\n if (typeof runtimeWithQuery.query === 'function') {\n return runtimeWithQuery.query<T>(sql, params);\n }\n\n const client = await this.runtime.getClient();\n return client.query<T>(sql, params);\n }\n\n async begin(): Promise<void> {\n throw new Error('Runtime-bound clients do not support manual begin(). Use transaction.atomic(...) instead.');\n }\n\n async commit(): Promise<void> {\n throw new Error('Runtime-bound clients do not support manual commit(). Use transaction.atomic(...) instead.');\n }\n\n async rollback(): Promise<void> {\n throw new Error('Runtime-bound clients do not support manual rollback(). Use transaction.atomic(...) instead.');\n }\n\n async createSavepoint(_name: string): Promise<void> {\n throw new Error(\n 'Runtime-bound clients do not support manual savepoints. Use transaction.atomic(...) or tx.savepoint(...) instead.'\n );\n }\n\n async releaseSavepoint(_name: string): Promise<void> {\n throw new Error(\n 'Runtime-bound clients do not support manual savepoint release. Use transaction.atomic(...) or tx.savepoint(...) instead.'\n );\n }\n\n async rollbackToSavepoint(_name: string): Promise<void> {\n throw new Error(\n 'Runtime-bound clients do not support manual savepoint rollback. Use transaction.atomic(...) or tx.savepoint(...) instead.'\n );\n }\n\n async close(): Promise<void> {\n throw new Error('Runtime-bound clients do not support manual close(). Use TangoRuntime.reset() instead.');\n }\n}\n","import pg from 'pg';\nimport type { AdapterConfig } from '../../connection/adapters/Adapter';\nimport { PostgresClient } from '../../connection/clients/dialects/PostgresClient';\nimport type { DBClientProvider, TransactionClientLease } from './DBClientProvider';\n\nconst { Pool } = pg;\n\nexport class PostgresDBClientProvider implements DBClientProvider {\n private readonly pool: pg.Pool;\n private activeLeaseCount = 0;\n\n constructor(config: AdapterConfig) {\n this.pool = new Pool({\n connectionString: config.url,\n host: config.host,\n port: config.port,\n database: config.database,\n user: config.user,\n password: config.password,\n max: config.maxConnections || 10,\n });\n }\n\n async query<T = unknown>(sql: string, params?: readonly unknown[]): Promise<{ rows: T[] }> {\n const result = await this.pool.query(sql, params as unknown[]);\n return { rows: result.rows as T[] };\n }\n\n async leaseTransactionClient(): Promise<TransactionClientLease> {\n const client = await this.pool.connect();\n this.activeLeaseCount += 1;\n let released = false;\n\n return {\n client: new PostgresClient(client),\n release: async () => {\n if (released) {\n return;\n }\n\n released = true;\n this.activeLeaseCount -= 1;\n client.release();\n },\n };\n }\n\n async reset(): Promise<void> {\n if (this.activeLeaseCount > 0) {\n throw new Error('Cannot reset Tango runtime while transaction leases are still active.');\n }\n\n await this.pool.end();\n }\n}\n","import { createRequire } from 'node:module';\nimport type { Database as BetterSqliteDatabase } from 'better-sqlite3';\nimport type { AdapterConfig } from '../../connection/adapters/Adapter';\nimport { SqliteClient } from '../../connection/clients/dialects/SqliteClient';\nimport type { DBClientProvider, TransactionClientLease } from './DBClientProvider';\n\ntype BetterSqliteCtor = new (filename: string, options?: unknown) => BetterSqliteDatabase;\n\nexport class SqliteDBClientProvider implements DBClientProvider {\n private readonly filename: string;\n private readonly Database: BetterSqliteCtor;\n private readonly autocommitClient: SqliteClient;\n private activeLeaseCount = 0;\n private exclusiveTail: Promise<void> = Promise.resolve();\n\n constructor(config: AdapterConfig = {}) {\n this.Database = this.getDatabaseCtor();\n this.filename =\n typeof config.filename === 'string' && config.filename.length > 0 ? config.filename : ':memory:';\n this.autocommitClient = this.openClient(this.filename);\n }\n\n async query<T = unknown>(sql: string, params?: readonly unknown[]): Promise<{ rows: T[] }> {\n return this.runExclusive(() => this.autocommitClient.query<T>(sql, params));\n }\n\n async leaseTransactionClient(): Promise<TransactionClientLease> {\n if (this.filename === ':memory:') {\n throw new Error('transaction.atomic(...) requires a file-backed SQLite database. :memory: is unsupported.');\n }\n\n const releaseExclusive = await this.acquireExclusive();\n try {\n const client = this.openClient(this.filename);\n this.activeLeaseCount += 1;\n let released = false;\n\n return {\n client,\n release: async () => {\n if (released) {\n return;\n }\n\n released = true;\n this.activeLeaseCount -= 1;\n try {\n await client.close();\n } finally {\n releaseExclusive();\n }\n },\n };\n } catch (error) {\n releaseExclusive();\n throw error;\n }\n }\n\n async reset(): Promise<void> {\n if (this.activeLeaseCount > 0) {\n throw new Error('Cannot reset Tango runtime while transaction leases are still active.');\n }\n\n await this.autocommitClient.close();\n }\n\n private openClient(filename: string): SqliteClient {\n const db = new this.Database(filename);\n db.pragma('journal_mode = WAL');\n db.pragma('foreign_keys = ON');\n db.pragma('busy_timeout = 5000');\n return new SqliteClient(db);\n }\n\n private async runExclusive<T>(work: () => Promise<T>): Promise<T> {\n const release = await this.acquireExclusive();\n try {\n return await work();\n } finally {\n release();\n }\n }\n\n private async acquireExclusive(): Promise<() => void> {\n const previous = this.exclusiveTail;\n let release: (() => void) | null = null;\n this.exclusiveTail = new Promise<void>((resolve) => {\n release = resolve;\n });\n await previous;\n return () => {\n release?.();\n };\n }\n\n private getDatabaseCtor(): BetterSqliteCtor {\n const require = createRequire(import.meta.url);\n const moduleValue = require('better-sqlite3') as unknown;\n if (typeof moduleValue === 'function') {\n return moduleValue as BetterSqliteCtor;\n }\n\n const defaultExport = (moduleValue as { default?: unknown }).default;\n if (typeof defaultExport === 'function') {\n return defaultExport as BetterSqliteCtor;\n }\n\n throw new TypeError('Failed to load better-sqlite3 constructor.');\n }\n}\n","import type { AdapterConfig } from '../../connection/adapters/Adapter';\nimport type { DBClientProvider } from './DBClientProvider';\nimport { PostgresDBClientProvider } from './PostgresDBClientProvider';\nimport { SqliteDBClientProvider } from './SqliteDBClientProvider';\n\nexport function createDBClientProvider(config: AdapterConfig & { adapter: string }): DBClientProvider {\n switch (config.adapter) {\n case 'postgres':\n return new PostgresDBClientProvider(config);\n case 'sqlite':\n return new SqliteDBClientProvider(config);\n default:\n throw new Error(`Unsupported adapter for Tango runtime provider: ${config.adapter}`);\n }\n}\n","import type { LoadedConfig } from '@danceroutine/tango-config';\nimport type { DBClient } from '../connection/index';\nimport type { Adapter } from '../connection/adapters/Adapter';\nimport { PostgresAdapter } from '../connection/adapters/dialects/PostgresAdapter';\nimport { SqliteAdapter } from '../connection/adapters/dialects/SqliteAdapter';\nimport type { Dialect } from '../query/domain/index';\nimport { InternalDialect } from '../query/domain/internal/InternalDialect';\nimport { RuntimeBoundClient } from '../manager/internal/RuntimeBoundClient';\nimport type { DBClientProvider, TransactionClientLease } from './internal/DBClientProvider';\nimport { createDBClientProvider } from './internal/createDBClientProvider';\n\n/**\n * Framework-owned database runtime that resolves Tango config and lazily\n * creates the shared connection provider used by manager-backed models.\n */\nexport class TangoRuntime {\n static readonly BRAND = 'tango.orm.runtime' as const;\n readonly __tangoBrand: typeof TangoRuntime.BRAND = TangoRuntime.BRAND;\n private readonly loadedConfig: LoadedConfig;\n private providerPromise: Promise<DBClientProvider> | null = null;\n private runtimeClientPromise: Promise<DBClient> | null = null;\n private cachedAdapter: Adapter | null = null;\n\n constructor(loadLoadedConfig: () => LoadedConfig) {\n this.loadedConfig = loadLoadedConfig();\n }\n\n /**\n * Narrow an unknown value to `TangoRuntime`.\n */\n static isTangoRuntime(value: unknown): value is TangoRuntime {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { __tangoBrand?: unknown }).__tangoBrand === TangoRuntime.BRAND\n );\n }\n\n /**\n * Return the loaded Tango config snapshot for the active environment.\n */\n getConfig(): LoadedConfig {\n return this.loadedConfig;\n }\n\n /**\n * Return the configured SQL dialect for the current runtime.\n */\n getDialect(): Dialect {\n return this.loadedConfig.current.db.adapter;\n }\n\n /**\n * Return the adapter backing the configured dialect. Manager-side\n * compilers use this to obtain placeholder formatters and dialect\n * capabilities without branching on the raw dialect string.\n */\n getAdapter(): Adapter {\n if (!this.cachedAdapter) {\n this.cachedAdapter = this.buildAdapterForDialect(this.getDialect());\n }\n return this.cachedAdapter;\n }\n\n /**\n * Return the runtime-bound DB client facade used by manager-backed code.\n */\n async getClient(): Promise<DBClient> {\n if (!this.runtimeClientPromise) {\n this.runtimeClientPromise = Promise.resolve(new RuntimeBoundClient(this));\n }\n\n return this.runtimeClientPromise;\n }\n\n /**\n * Execute SQL through the autocommit path owned by this runtime.\n */\n async query<T = unknown>(sql: string, params?: readonly unknown[]): Promise<{ rows: T[] }> {\n const provider = await this.getProvider();\n return provider.query<T>(sql, params);\n }\n\n /**\n * Lease a transaction-scoped client for `transaction.atomic(...)`.\n */\n async leaseTransactionClient(): Promise<TransactionClientLease> {\n const provider = await this.getProvider();\n return provider.leaseTransactionClient();\n }\n\n /**\n * Close and clear the cached runtime resources so tests can start fresh.\n */\n async reset(): Promise<void> {\n if (!this.providerPromise) {\n this.runtimeClientPromise = null;\n return;\n }\n\n const provider = await this.providerPromise;\n this.providerPromise = null;\n this.runtimeClientPromise = null;\n await provider.reset();\n }\n\n private buildAdapterForDialect(dialect: Dialect): Adapter {\n switch (dialect) {\n case InternalDialect.POSTGRES:\n return new PostgresAdapter();\n case InternalDialect.SQLITE:\n return new SqliteAdapter();\n }\n }\n\n private async getProvider(): Promise<DBClientProvider> {\n if (!this.providerPromise) {\n const db = this.loadedConfig.current.db;\n this.providerPromise = Promise.resolve(\n createDBClientProvider({\n adapter: db.adapter,\n url: db.url,\n host: db.host,\n port: db.port,\n database: db.database,\n user: db.user,\n password: db.password,\n filename: db.filename,\n maxConnections: db.maxConnections,\n })\n );\n }\n\n return this.providerPromise;\n }\n}\n","import { loadConfig, loadConfigFromProjectRoot } from '@danceroutine/tango-config';\nimport { TangoRuntime } from './TangoRuntime';\n\nlet defaultRuntime: TangoRuntime | null = null;\n\n/**\n * Initialize the process-default Tango runtime from a Tango config loader.\n */\nexport function initializeTangoRuntime(fromFile: () => unknown): TangoRuntime {\n defaultRuntime = new TangoRuntime(() => loadConfig(fromFile));\n return defaultRuntime;\n}\n\n/**\n * Return the process-default Tango runtime, lazily loading Tango config on first access.\n */\nexport function getTangoRuntime(): TangoRuntime {\n if (!defaultRuntime) {\n defaultRuntime = new TangoRuntime(() => loadConfigFromProjectRoot());\n }\n\n return defaultRuntime;\n}\n\n/**\n * Reset the process-default Tango runtime and release any cached client.\n */\nexport async function resetTangoRuntime(): Promise<void> {\n if (!defaultRuntime) {\n return;\n }\n\n const runtime = defaultRuntime;\n defaultRuntime = null;\n await runtime.reset();\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { t as DBClient } from "./DBClient-DuYcXolQ.js";
|
|
2
|
+
import { n as AdapterConfig, r as SqlPlaceholders, t as Adapter } from "./Adapter-DKxAaL4l.js";
|
|
3
|
+
import Database from "better-sqlite3";
|
|
4
|
+
|
|
5
|
+
//#region src/connection/adapters/dialects/PostgresAdapter.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Postgres adapter that turns adapter config into a transactional `DBClient`.
|
|
8
|
+
*/
|
|
9
|
+
declare class PostgresAdapter implements Adapter {
|
|
10
|
+
static readonly BRAND: "tango.orm.postgres_adapter";
|
|
11
|
+
readonly __tangoBrand: typeof PostgresAdapter.BRAND;
|
|
12
|
+
readonly name = "postgres";
|
|
13
|
+
readonly dialect: Adapter['dialect'];
|
|
14
|
+
/**
|
|
15
|
+
* Declares capabilities of this database adapter.
|
|
16
|
+
* Used by the migration runner and query compiler to determine which
|
|
17
|
+
* SQL features can be safely used:
|
|
18
|
+
* - transactionalDDL: Postgres supports DDL inside transactions (safe rollback of schema changes)
|
|
19
|
+
* - concurrentIndex: Supports CREATE INDEX CONCURRENTLY (non-blocking index builds)
|
|
20
|
+
* - validateForeignKeys: Supports deferred FK validation via NOT VALID + VALIDATE CONSTRAINT
|
|
21
|
+
* - ignoreDuplicateInsert: Supports duplicate-safe insert semantics for manager-owned link writes
|
|
22
|
+
*/
|
|
23
|
+
readonly features: Adapter['features'];
|
|
24
|
+
readonly placeholders: SqlPlaceholders;
|
|
25
|
+
/**
|
|
26
|
+
* Narrow an unknown value to `PostgresAdapter`.
|
|
27
|
+
*/
|
|
28
|
+
static isPostgresAdapter(value: unknown): value is PostgresAdapter;
|
|
29
|
+
/**
|
|
30
|
+
* Open a Postgres connection pool and return a client-backed DB abstraction.
|
|
31
|
+
*/
|
|
32
|
+
connect(config: AdapterConfig): Promise<DBClient>;
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
//#region src/connection/adapters/dialects/SqliteAdapter.d.ts
|
|
36
|
+
/**
|
|
37
|
+
* SQLite adapter that creates a `better-sqlite3` backed `DBClient`.
|
|
38
|
+
*/
|
|
39
|
+
declare class SqliteAdapter implements Adapter {
|
|
40
|
+
static readonly BRAND: "tango.orm.sqlite_adapter";
|
|
41
|
+
readonly __tangoBrand: typeof SqliteAdapter.BRAND;
|
|
42
|
+
readonly name = "sqlite";
|
|
43
|
+
readonly dialect: Adapter['dialect'];
|
|
44
|
+
readonly features: Adapter['features'];
|
|
45
|
+
readonly placeholders: SqlPlaceholders;
|
|
46
|
+
/**
|
|
47
|
+
* Narrow an unknown value to `SqliteAdapter`.
|
|
48
|
+
*/
|
|
49
|
+
static isSqliteAdapter(value: unknown): value is SqliteAdapter;
|
|
50
|
+
/**
|
|
51
|
+
* Open a SQLite database and apply baseline pragmas for durability/safety.
|
|
52
|
+
*/
|
|
53
|
+
connect(config?: AdapterConfig): Promise<DBClient>;
|
|
54
|
+
private getDatabaseCtor;
|
|
55
|
+
}
|
|
56
|
+
declare namespace index_d_exports$4 {
|
|
57
|
+
export { PostgresAdapter, SqliteAdapter };
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
//#region src/connection/adapters/AdapterRegistry.d.ts
|
|
61
|
+
/**
|
|
62
|
+
* Runtime registry for database adapters.
|
|
63
|
+
*
|
|
64
|
+
* Use a custom instance when tests or applications need explicit control
|
|
65
|
+
* over supported adapters; use `getDefaultRegistry()` for the built-in set.
|
|
66
|
+
*/
|
|
67
|
+
declare class AdapterRegistry {
|
|
68
|
+
static readonly BRAND: "tango.orm.adapter_registry";
|
|
69
|
+
private static defaultRegistryInstance;
|
|
70
|
+
readonly __tangoBrand: typeof AdapterRegistry.BRAND;
|
|
71
|
+
private adapters;
|
|
72
|
+
/**
|
|
73
|
+
* Narrow an unknown value to `AdapterRegistry`.
|
|
74
|
+
*/
|
|
75
|
+
static isAdapterRegistry(value: unknown): value is AdapterRegistry;
|
|
76
|
+
/**
|
|
77
|
+
* Return a lazily-initialized registry preloaded with built-in adapters.
|
|
78
|
+
*/
|
|
79
|
+
static getDefaultRegistry(): Promise<AdapterRegistry>;
|
|
80
|
+
/**
|
|
81
|
+
* Register an adapter under its declared `name`.
|
|
82
|
+
*/
|
|
83
|
+
register(adapter: Adapter): this;
|
|
84
|
+
/**
|
|
85
|
+
* Resolve an adapter by name, or throw a descriptive error.
|
|
86
|
+
*/
|
|
87
|
+
get(name: string): Adapter;
|
|
88
|
+
/**
|
|
89
|
+
* Check whether an adapter has been registered.
|
|
90
|
+
*/
|
|
91
|
+
has(name: string): boolean;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Connect to a database by adapter name using the provided (or default) registry.
|
|
95
|
+
*/
|
|
96
|
+
declare function connectDB(config: AdapterConfig & {
|
|
97
|
+
adapter: string;
|
|
98
|
+
}, registry?: AdapterRegistry): Promise<DBClient>;
|
|
99
|
+
/**
|
|
100
|
+
* Convenience helper that exposes the singleton default adapter registry.
|
|
101
|
+
*/
|
|
102
|
+
declare function getDefaultAdapterRegistry(): Promise<AdapterRegistry>;
|
|
103
|
+
declare namespace index_d_exports$3 {
|
|
104
|
+
export { Adapter, AdapterConfig, AdapterRegistry, PostgresAdapter, SqlPlaceholders, SqliteAdapter, connectDB, index_d_exports$4 as dialects, getDefaultAdapterRegistry };
|
|
105
|
+
}
|
|
106
|
+
//#endregion
|
|
107
|
+
//#region src/connection/clients/dialects/PostgresClient.d.ts
|
|
108
|
+
interface PostgresPoolClientLike {
|
|
109
|
+
query(sql: string, params?: readonly unknown[]): Promise<{
|
|
110
|
+
rows: unknown[];
|
|
111
|
+
}>;
|
|
112
|
+
release(): void;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Transaction-capable client backed by a PostgreSQL pool client.
|
|
116
|
+
*/
|
|
117
|
+
declare class PostgresClient implements DBClient {
|
|
118
|
+
private client;
|
|
119
|
+
static readonly BRAND: "tango.orm.postgres_client";
|
|
120
|
+
readonly __tangoBrand: typeof PostgresClient.BRAND;
|
|
121
|
+
constructor(client: PostgresPoolClientLike);
|
|
122
|
+
/**
|
|
123
|
+
* Narrow an unknown value to `PostgresClient`.
|
|
124
|
+
*/
|
|
125
|
+
static isPostgresClient(value: unknown): value is PostgresClient;
|
|
126
|
+
/**
|
|
127
|
+
* Execute a SQL statement with optional bound parameters.
|
|
128
|
+
*/
|
|
129
|
+
query<T = unknown>(sql: string, params?: readonly unknown[]): Promise<{
|
|
130
|
+
rows: T[];
|
|
131
|
+
}>;
|
|
132
|
+
/**
|
|
133
|
+
* Begin a database transaction.
|
|
134
|
+
*/
|
|
135
|
+
begin(): Promise<void>;
|
|
136
|
+
/**
|
|
137
|
+
* Commit the active transaction.
|
|
138
|
+
*/
|
|
139
|
+
commit(): Promise<void>;
|
|
140
|
+
/**
|
|
141
|
+
* Roll back the active transaction.
|
|
142
|
+
*/
|
|
143
|
+
rollback(): Promise<void>;
|
|
144
|
+
/**
|
|
145
|
+
* Create a savepoint inside the active transaction.
|
|
146
|
+
*/
|
|
147
|
+
createSavepoint(name: string): Promise<void>;
|
|
148
|
+
/**
|
|
149
|
+
* Release a previously-created savepoint.
|
|
150
|
+
*/
|
|
151
|
+
releaseSavepoint(name: string): Promise<void>;
|
|
152
|
+
/**
|
|
153
|
+
* Roll back the active transaction to a savepoint.
|
|
154
|
+
*/
|
|
155
|
+
rollbackToSavepoint(name: string): Promise<void>;
|
|
156
|
+
/**
|
|
157
|
+
* Release the leased PostgreSQL client back to its owning pool.
|
|
158
|
+
*/
|
|
159
|
+
close(): Promise<void>;
|
|
160
|
+
}
|
|
161
|
+
//#endregion
|
|
162
|
+
//#region src/connection/clients/dialects/SqliteClient.d.ts
|
|
163
|
+
/**
|
|
164
|
+
* Transaction-capable client backed by a synchronous `better-sqlite3` handle.
|
|
165
|
+
*/
|
|
166
|
+
declare class SqliteClient implements DBClient {
|
|
167
|
+
private db;
|
|
168
|
+
static readonly BRAND: "tango.orm.sqlite_client";
|
|
169
|
+
readonly __tangoBrand: typeof SqliteClient.BRAND;
|
|
170
|
+
private inTransaction;
|
|
171
|
+
constructor(db: Database.Database);
|
|
172
|
+
/**
|
|
173
|
+
* Narrow an unknown value to `SqliteClient`.
|
|
174
|
+
*/
|
|
175
|
+
static isSqliteClient(value: unknown): value is SqliteClient;
|
|
176
|
+
/**
|
|
177
|
+
* Execute a SQL statement with optional parameters.
|
|
178
|
+
*
|
|
179
|
+
* `SELECT`/`PRAGMA` statements return row data; write statements return
|
|
180
|
+
* an empty row list.
|
|
181
|
+
*/
|
|
182
|
+
query<T = unknown>(sql: string, params?: readonly unknown[]): Promise<{
|
|
183
|
+
rows: T[];
|
|
184
|
+
}>;
|
|
185
|
+
/**
|
|
186
|
+
* Begin a transaction if one is not already active.
|
|
187
|
+
*/
|
|
188
|
+
begin(): Promise<void>;
|
|
189
|
+
/**
|
|
190
|
+
* Commit the active transaction.
|
|
191
|
+
*/
|
|
192
|
+
commit(): Promise<void>;
|
|
193
|
+
/**
|
|
194
|
+
* Roll back the active transaction.
|
|
195
|
+
*/
|
|
196
|
+
rollback(): Promise<void>;
|
|
197
|
+
/**
|
|
198
|
+
* Create a savepoint inside the active transaction.
|
|
199
|
+
*/
|
|
200
|
+
createSavepoint(name: string): Promise<void>;
|
|
201
|
+
/**
|
|
202
|
+
* Release a previously-created savepoint.
|
|
203
|
+
*/
|
|
204
|
+
releaseSavepoint(name: string): Promise<void>;
|
|
205
|
+
/**
|
|
206
|
+
* Roll back the active transaction to a savepoint.
|
|
207
|
+
*/
|
|
208
|
+
rollbackToSavepoint(name: string): Promise<void>;
|
|
209
|
+
/**
|
|
210
|
+
* Close the underlying SQLite handle.
|
|
211
|
+
*/
|
|
212
|
+
close(): Promise<void>;
|
|
213
|
+
private normalizeParam;
|
|
214
|
+
}
|
|
215
|
+
declare namespace index_d_exports$2 {
|
|
216
|
+
export { PostgresClient, SqliteClient };
|
|
217
|
+
}
|
|
218
|
+
declare namespace index_d_exports$1 {
|
|
219
|
+
export { DBClient, PostgresClient, SqliteClient, index_d_exports$2 as dialects };
|
|
220
|
+
}
|
|
221
|
+
declare namespace index_d_exports {
|
|
222
|
+
export { Adapter, AdapterConfig, AdapterRegistry, DBClient, PostgresAdapter, PostgresClient, SqlPlaceholders, SqliteAdapter, SqliteClient, index_d_exports$3 as adapters, index_d_exports$1 as clients, connectDB, getDefaultAdapterRegistry };
|
|
223
|
+
}
|
|
224
|
+
//#endregion
|
|
225
|
+
export { index_d_exports$3 as a, getDefaultAdapterRegistry as c, PostgresClient as i, SqliteAdapter as l, index_d_exports$1 as n, AdapterRegistry as o, SqliteClient as r, connectDB as s, index_d_exports as t, PostgresAdapter as u };
|
|
226
|
+
//# sourceMappingURL=index-B-aibguC.d.ts.map
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { D as ManyToManyRelatedManagerCreateInputs, E as ManyToManyRelatedManager, M as QueryExecutor, N as QuerySet, O as ManyToManyTargetRef, U as QueryResult, t as QuerySetState } from "./QuerySetState-CjyvAUBs.js";
|
|
2
|
+
import { a as MaterializedModelRecord, i as ManagerLike, n as ModelManager, t as registerModelObjects } from "./registerModelObjects-C-MliIiM.js";
|
|
3
|
+
|
|
4
|
+
//#region src/manager/relations/ManyToManyRelatedQuerySet.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Hooks supplied by {@link ManyToManyRelatedManager} so the queryset returned
|
|
7
|
+
* from `all()` can short-circuit to the prefetch cache, scope the SQL query
|
|
8
|
+
* to the owner via the join table, and filter targets by the resolved primary
|
|
9
|
+
* keys.
|
|
10
|
+
*
|
|
11
|
+
* Application code does not construct this bridge directly; it is wired by
|
|
12
|
+
* the related manager when `all()` is called.
|
|
13
|
+
*/
|
|
14
|
+
interface ManyToManyRelatedQuerySetBridge<TTarget extends Record<string, unknown>> {
|
|
15
|
+
getCache(): readonly TTarget[] | null;
|
|
16
|
+
fetchTargetIds(): Promise<readonly (string | number)[]>;
|
|
17
|
+
targetPrimaryKeyField: string;
|
|
18
|
+
}
|
|
19
|
+
type ShapeFunction<TInput, Out> = (row: TInput) => Out;
|
|
20
|
+
type ShapeParser<TInput, Out> = {
|
|
21
|
+
parse: (row: TInput) => Out;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* {@link QuerySet} returned by `post.tags.all()` on a many-to-many related
|
|
25
|
+
* manager.
|
|
26
|
+
*
|
|
27
|
+
* Behaves like a normal `QuerySet` over the target model from an application
|
|
28
|
+
* developer's perspective: you can chain `filter`, `exclude`, `orderBy`,
|
|
29
|
+
* `limit`, `offset`, and terminate with `fetch`, `fetchOne`, or `count`.
|
|
30
|
+
* Each chainable call returns another `ManyToManyRelatedQuerySet` so the
|
|
31
|
+
* chain keeps the membership scoping of the owning record.
|
|
32
|
+
*
|
|
33
|
+
* Two behaviors differ from a plain `QuerySet` and matter to application
|
|
34
|
+
* developers:
|
|
35
|
+
*
|
|
36
|
+
* - When the relation was loaded by `prefetchRelated(...)` and no chainable
|
|
37
|
+
* state has been added (no `filter`, `orderBy`, etc.), `fetch()` and
|
|
38
|
+
* `count()` resolve from the prefetch cache without issuing SQL.
|
|
39
|
+
* - Mutating the membership via `post.tags.add(tag)` or
|
|
40
|
+
* `post.tags.remove(tag)` invalidates that cache so follow-up reads go
|
|
41
|
+
* back to the database.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* const post = await PostModel.objects.getOrThrow(postId);
|
|
46
|
+
* await post.tags.add(tag);
|
|
47
|
+
* const tags = await post.tags.all().filter({ color: 'red' }).orderBy('name').fetch();
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* @template TTarget - The persisted target record shape (e.g. `Tag`).
|
|
51
|
+
*/
|
|
52
|
+
declare class ManyToManyRelatedQuerySet<TTarget extends Record<string, unknown>> extends QuerySet<TTarget> {
|
|
53
|
+
private readonly bridge;
|
|
54
|
+
constructor(executor: QueryExecutor<TTarget>, bridge: ManyToManyRelatedQuerySetBridge<TTarget>, state?: QuerySetState<TTarget>);
|
|
55
|
+
fetch<Out>(shape?: ShapeFunction<TTarget, Out> | ShapeParser<TTarget, Out>): Promise<QueryResult<TTarget | Out>>;
|
|
56
|
+
fetchOne<Out>(shape?: ShapeFunction<TTarget, Out> | ShapeParser<TTarget, Out>): Promise<TTarget | Out | null>;
|
|
57
|
+
count(): Promise<number>;
|
|
58
|
+
protected spawn<TNextBaseResult extends Record<string, unknown>, TNextHydrated extends Record<string, unknown>>(state: QuerySetState<TTarget>): QuerySet<TTarget, TNextBaseResult, unknown, TNextHydrated>;
|
|
59
|
+
private isStateTrivial;
|
|
60
|
+
private scopedState;
|
|
61
|
+
}
|
|
62
|
+
declare namespace index_d_exports$1 {
|
|
63
|
+
export { ManyToManyRelatedManager, ManyToManyRelatedManagerCreateInputs, ManyToManyRelatedQuerySet, ManyToManyRelatedQuerySetBridge, ManyToManyTargetRef, MaterializedModelRecord };
|
|
64
|
+
}
|
|
65
|
+
declare namespace index_d_exports {
|
|
66
|
+
export { ManagerLike, ManyToManyRelatedManager, ManyToManyRelatedManagerCreateInputs, ManyToManyRelatedQuerySet, ManyToManyRelatedQuerySetBridge, ManyToManyTargetRef, MaterializedModelRecord, ModelManager, registerModelObjects, index_d_exports$1 as relations };
|
|
67
|
+
}
|
|
68
|
+
//#endregion
|
|
69
|
+
export { ManyToManyRelatedQuerySetBridge as i, index_d_exports$1 as n, ManyToManyRelatedQuerySet as r, index_d_exports as t };
|
|
70
|
+
//# sourceMappingURL=index-D9B6gKez.d.ts.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { a as MaterializedModelRecord, n as ModelManager, r as TangoRuntime, t as registerModelObjects } from "./registerModelObjects-C-MliIiM.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { Model } from "@danceroutine/tango-schema/domain";
|
|
4
|
+
|
|
5
|
+
//#region src/runtime/defaultRuntime.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Initialize the process-default Tango runtime from a Tango config loader.
|
|
8
|
+
*/
|
|
9
|
+
declare function initializeTangoRuntime(fromFile: () => unknown): TangoRuntime;
|
|
10
|
+
/**
|
|
11
|
+
* Return the process-default Tango runtime, lazily loading Tango config on first access.
|
|
12
|
+
*/
|
|
13
|
+
declare function getTangoRuntime(): TangoRuntime;
|
|
14
|
+
/**
|
|
15
|
+
* Reset the process-default Tango runtime and release any cached client.
|
|
16
|
+
*/
|
|
17
|
+
declare function resetTangoRuntime(): Promise<void>;
|
|
18
|
+
declare namespace index_d_exports {
|
|
19
|
+
export { TangoRuntime, getTangoRuntime, initializeTangoRuntime, registerModelObjects, resetTangoRuntime };
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Domain boundary barrel: centralizes Tango runtime ownership APIs.
|
|
23
|
+
*/
|
|
24
|
+
declare global {
|
|
25
|
+
interface TangoSchemaModelAugmentations<TSchema extends z.ZodObject<z.ZodRawShape> = z.ZodObject<z.ZodRawShape>, TKey extends string = string> {
|
|
26
|
+
readonly objects: ModelManager<MaterializedModelRecord<TSchema>, Model<TSchema, TKey>>;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
export { resetTangoRuntime as i, getTangoRuntime as n, initializeTangoRuntime as r, index_d_exports as t };
|
|
31
|
+
//# sourceMappingURL=index-rjKca3U_.d.ts.map
|