@danceroutine/tango-orm 1.11.1 → 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.
Files changed (131) hide show
  1. package/dist/Adapter-DKxAaL4l.d.ts +73 -0
  2. package/dist/DBClient-DuYcXolQ.d.ts +27 -0
  3. package/dist/{InternalDialect-ClSaUNso.js → InternalDialect-U3mwJjKA.js} +3 -4
  4. package/dist/InternalDialect-U3mwJjKA.js.map +1 -0
  5. package/dist/QuerySetState-CjyvAUBs.d.ts +1310 -0
  6. package/dist/SqliteAdapter-6oyUmoJf.js +279 -0
  7. package/dist/SqliteAdapter-6oyUmoJf.js.map +1 -0
  8. package/dist/chunk-8H4AJuhK.js +14 -0
  9. package/dist/connection/index.d.ts +4 -11
  10. package/dist/connection/index.js +3 -6
  11. package/dist/{connection-Dmhgx31M.js → connection-D-E6_Yf1.js} +28 -30
  12. package/dist/connection-D-E6_Yf1.js.map +1 -0
  13. package/dist/{defaultRuntime-DzqBQ9Hb.js → defaultRuntime-CdTX8cXm.js} +41 -35
  14. package/dist/defaultRuntime-CdTX8cXm.js.map +1 -0
  15. package/dist/index-B-aibguC.d.ts +226 -0
  16. package/dist/index-D9B6gKez.d.ts +70 -0
  17. package/dist/index-rjKca3U_.d.ts +31 -0
  18. package/dist/index-uuG57Y7C.d.ts +97 -0
  19. package/dist/index.d.ts +9 -22
  20. package/dist/index.js +9 -12
  21. package/dist/manager/index.d.ts +4 -12
  22. package/dist/manager/index.js +3 -9
  23. package/dist/{manager-DrDTiCAz.js → manager-CiYqAYpn.js} +7 -11
  24. package/dist/{manager-DrDTiCAz.js.map → manager-CiYqAYpn.js.map} +1 -1
  25. package/dist/query/index.d.ts +3 -14
  26. package/dist/query/index.js +2 -4
  27. package/dist/{query-DUZnBFhf.js → query-CP1UMIX6.js} +163 -121
  28. package/dist/query-CP1UMIX6.js.map +1 -0
  29. package/dist/registerModelObjects-C-MliIiM.d.ts +229 -0
  30. package/dist/{registerModelObjects-22ZJKoit.js → registerModelObjects-DZfZ20fa.js} +119 -69
  31. package/dist/registerModelObjects-DZfZ20fa.js.map +1 -0
  32. package/dist/runtime/index.d.ts +3 -15
  33. package/dist/runtime/index.js +15 -8
  34. package/dist/runtime/index.js.map +1 -0
  35. package/dist/transaction/index.d.ts +2 -6
  36. package/dist/transaction/index.js +2 -7
  37. package/dist/{transaction-ZhfDf-f8.js → transaction-2_2m7VUo.js} +26 -10
  38. package/dist/transaction-2_2m7VUo.js.map +1 -0
  39. package/package.json +7 -7
  40. package/dist/InternalDialect-ClSaUNso.js.map +0 -1
  41. package/dist/PostgresAdapter-CXKdKBG-.js +0 -4
  42. package/dist/PostgresAdapter-DySFW6vy.js +0 -128
  43. package/dist/PostgresAdapter-DySFW6vy.js.map +0 -1
  44. package/dist/SqliteAdapter-CDdOjRmW.js +0 -151
  45. package/dist/SqliteAdapter-CDdOjRmW.js.map +0 -1
  46. package/dist/SqliteAdapter-mjtXuVTg.js +0 -4
  47. package/dist/chunk-DLY2FNSh.js +0 -12
  48. package/dist/connection/adapters/Adapter.d.ts +0 -60
  49. package/dist/connection/adapters/AdapterRegistry.d.ts +0 -44
  50. package/dist/connection/adapters/dialects/PostgresAdapter.d.ts +0 -30
  51. package/dist/connection/adapters/dialects/SqliteAdapter.d.ts +0 -22
  52. package/dist/connection/adapters/dialects/index.d.ts +0 -5
  53. package/dist/connection/adapters/index.d.ts +0 -8
  54. package/dist/connection/clients/DBClient.d.ts +0 -23
  55. package/dist/connection/clients/dialects/PostgresClient.d.ts +0 -54
  56. package/dist/connection/clients/dialects/SqliteClient.d.ts +0 -54
  57. package/dist/connection/clients/dialects/index.d.ts +0 -5
  58. package/dist/connection/clients/index.d.ts +0 -7
  59. package/dist/connection-Dmhgx31M.js.map +0 -1
  60. package/dist/defaultRuntime-DzqBQ9Hb.js.map +0 -1
  61. package/dist/manager/ManagerLike.d.ts +0 -34
  62. package/dist/manager/ModelManager.d.ts +0 -106
  63. package/dist/manager/internal/MutationCompiler.d.ts +0 -23
  64. package/dist/manager/internal/RuntimeBoundClient.d.ts +0 -20
  65. package/dist/manager/registerModelObjects.d.ts +0 -5
  66. package/dist/manager/relations/ManyToManyRelatedManager.d.ts +0 -181
  67. package/dist/manager/relations/ManyToManyRelatedQuerySet.d.ts +0 -62
  68. package/dist/manager/relations/MaterializedModelRecord.d.ts +0 -28
  69. package/dist/manager/relations/index.d.ts +0 -9
  70. package/dist/manager/relations/internal/ThroughTableManager.d.ts +0 -85
  71. package/dist/query/ModelQuerySet.d.ts +0 -20
  72. package/dist/query/QBuilder.d.ts +0 -29
  73. package/dist/query/QuerySet.d.ts +0 -215
  74. package/dist/query/compiler/QueryCompiler.d.ts +0 -49
  75. package/dist/query/compiler/index.d.ts +0 -4
  76. package/dist/query/domain/CompiledQuery.d.ts +0 -209
  77. package/dist/query/domain/Dialect.d.ts +0 -2
  78. package/dist/query/domain/Direction.d.ts +0 -2
  79. package/dist/query/domain/FilterInput.d.ts +0 -3
  80. package/dist/query/domain/FilterKey.d.ts +0 -4
  81. package/dist/query/domain/FilterValue.d.ts +0 -1
  82. package/dist/query/domain/LookupType.d.ts +0 -2
  83. package/dist/query/domain/OrderSpec.d.ts +0 -5
  84. package/dist/query/domain/OrderToken.d.ts +0 -1
  85. package/dist/query/domain/QNode.d.ts +0 -9
  86. package/dist/query/domain/QueryResult.d.ts +0 -35
  87. package/dist/query/domain/QuerySetState.d.ts +0 -13
  88. package/dist/query/domain/RelationMeta.d.ts +0 -56
  89. package/dist/query/domain/RelationTyping.d.ts +0 -163
  90. package/dist/query/domain/TableMeta.d.ts +0 -16
  91. package/dist/query/domain/TableMetaFactory.d.ts +0 -10
  92. package/dist/query/domain/WhereClause.d.ts +0 -4
  93. package/dist/query/domain/index.d.ts +0 -21
  94. package/dist/query/domain/internal/InternalDialect.d.ts +0 -4
  95. package/dist/query/domain/internal/InternalDirection.d.ts +0 -4
  96. package/dist/query/domain/internal/InternalLookupType.d.ts +0 -15
  97. package/dist/query/domain/internal/InternalPrefetchQueryKind.d.ts +0 -20
  98. package/dist/query/domain/internal/InternalQNodeType.d.ts +0 -6
  99. package/dist/query/domain/internal/InternalRelationKind.d.ts +0 -6
  100. package/dist/query/internal/isQNodeLike.d.ts +0 -3
  101. package/dist/query/planning/QueryPlanner.d.ts +0 -16
  102. package/dist/query/planning/domain/QueryHydrationPlan.d.ts +0 -20
  103. package/dist/query/planning/index.d.ts +0 -2
  104. package/dist/query-DUZnBFhf.js.map +0 -1
  105. package/dist/registerModelObjects-22ZJKoit.js.map +0 -1
  106. package/dist/runtime/TangoRuntime.d.ts +0 -56
  107. package/dist/runtime/defaultRuntime.d.ts +0 -13
  108. package/dist/runtime/internal/DBClientProvider.d.ts +0 -12
  109. package/dist/runtime/internal/PostgresDBClientProvider.d.ts +0 -12
  110. package/dist/runtime/internal/SqliteDBClientProvider.d.ts +0 -19
  111. package/dist/runtime/internal/createDBClientProvider.d.ts +0 -5
  112. package/dist/runtime-1H88J3nN.js +0 -18
  113. package/dist/runtime-1H88J3nN.js.map +0 -1
  114. package/dist/transaction/AtomicTransaction.d.ts +0 -32
  115. package/dist/transaction/UnitOfWork.d.ts +0 -52
  116. package/dist/transaction/atomic.d.ts +0 -2
  117. package/dist/transaction/internal/context/AsyncLocalTransactionEngine.d.ts +0 -21
  118. package/dist/transaction/internal/context/CallbackRecord.d.ts +0 -5
  119. package/dist/transaction/internal/context/FrameBoundTransaction.d.ts +0 -20
  120. package/dist/transaction/internal/context/FrameTransactionHandle.d.ts +0 -4
  121. package/dist/transaction/internal/context/TransactionEngine.d.ts +0 -16
  122. package/dist/transaction/internal/context/TransactionFrame.d.ts +0 -7
  123. package/dist/transaction/internal/context/TransactionState.d.ts +0 -10
  124. package/dist/transaction/internal/context/index.d.ts +0 -1
  125. package/dist/transaction-ZhfDf-f8.js.map +0 -1
  126. package/dist/validation/OrmSqlSafetyAdapter.d.ts +0 -22
  127. package/dist/validation/SQLValidationEngine.d.ts +0 -68
  128. package/dist/validation/SqlValidationPlan.d.ts +0 -43
  129. package/dist/validation/index.d.ts +0 -3
  130. package/dist/validation/internal/InternalSqlValidationPlanKind.d.ts +0 -25
  131. package/dist/validation/internal/InternalValidatedFilterDescriptorKind.d.ts +0 -4
@@ -1,151 +0,0 @@
1
- import { InternalDialect } from "./InternalDialect-ClSaUNso.js";
2
- import { createRequire } from "node:module";
3
-
4
- //#region src/connection/clients/dialects/SqliteClient.ts
5
- var SqliteClient = class SqliteClient {
6
- static BRAND = "tango.orm.sqlite_client";
7
- __tangoBrand = SqliteClient.BRAND;
8
- inTransaction = false;
9
- constructor(db) {
10
- this.db = db;
11
- }
12
- /**
13
- * Narrow an unknown value to `SqliteClient`.
14
- */
15
- static isSqliteClient(value) {
16
- return typeof value === "object" && value !== null && value.__tangoBrand === SqliteClient.BRAND;
17
- }
18
- /**
19
- * Execute a SQL statement with optional parameters.
20
- *
21
- * `SELECT`/`PRAGMA` statements return row data; write statements return
22
- * an empty row list.
23
- */
24
- async query(sql, params) {
25
- const stmt = this.db.prepare(sql);
26
- const isPragmaWrite = /^\s*PRAGMA\b/i.test(sql) && /=/.test(sql);
27
- const normalizedParams = params?.map((param) => this.normalizeParam(param));
28
- if (!isPragmaWrite && stmt.reader) {
29
- const rows = normalizedParams ? stmt.all(...normalizedParams) : stmt.all();
30
- return { rows };
31
- }
32
- if (normalizedParams) stmt.run(...normalizedParams);
33
- else stmt.run();
34
- return { rows: [] };
35
- }
36
- /**
37
- * Begin a transaction if one is not already active.
38
- */
39
- async begin() {
40
- if (!this.inTransaction) {
41
- this.db.prepare("BEGIN IMMEDIATE").run();
42
- this.inTransaction = true;
43
- }
44
- }
45
- /**
46
- * Commit the active transaction.
47
- */
48
- async commit() {
49
- if (this.inTransaction) {
50
- this.db.prepare("COMMIT").run();
51
- this.inTransaction = false;
52
- }
53
- }
54
- /**
55
- * Roll back the active transaction.
56
- */
57
- async rollback() {
58
- if (this.inTransaction) {
59
- this.db.prepare("ROLLBACK").run();
60
- this.inTransaction = false;
61
- }
62
- }
63
- /**
64
- * Create a savepoint inside the active transaction.
65
- */
66
- async createSavepoint(name) {
67
- this.db.prepare(`SAVEPOINT ${name}`).run();
68
- }
69
- /**
70
- * Release a previously-created savepoint.
71
- */
72
- async releaseSavepoint(name) {
73
- this.db.prepare(`RELEASE SAVEPOINT ${name}`).run();
74
- }
75
- /**
76
- * Roll back the active transaction to a savepoint.
77
- */
78
- async rollbackToSavepoint(name) {
79
- this.db.prepare(`ROLLBACK TO SAVEPOINT ${name}`).run();
80
- }
81
- /**
82
- * Close the underlying SQLite handle.
83
- */
84
- async close() {
85
- this.db.close();
86
- }
87
- normalizeParam(value) {
88
- if (isDateValue(value)) return value.toISOString();
89
- if (typeof value === "boolean") return value ? 1 : 0;
90
- return value;
91
- }
92
- };
93
- function isDateValue(value) {
94
- return typeof value === "object" && value !== null && typeof value.getTime === "function" && typeof value.toISOString === "function";
95
- }
96
-
97
- //#endregion
98
- //#region src/connection/adapters/dialects/SqliteAdapter.ts
99
- var SqliteAdapter = class SqliteAdapter {
100
- static BRAND = "tango.orm.sqlite_adapter";
101
- __tangoBrand = SqliteAdapter.BRAND;
102
- name = "sqlite";
103
- dialect = InternalDialect.SQLITE;
104
- features = {
105
- transactionalDDL: true,
106
- concurrentIndex: false,
107
- validateForeignKeys: false,
108
- ignoreDuplicateInsert: true
109
- };
110
- placeholders = {
111
- at() {
112
- return "?";
113
- },
114
- list(count) {
115
- return Array.from({ length: count }, () => "?").join(", ");
116
- },
117
- listFromOffset(count) {
118
- return this.list(count);
119
- }
120
- };
121
- /**
122
- * Narrow an unknown value to `SqliteAdapter`.
123
- */
124
- static isSqliteAdapter(value) {
125
- return typeof value === "object" && value !== null && value.__tangoBrand === SqliteAdapter.BRAND;
126
- }
127
- /**
128
- * Open a SQLite database and apply baseline pragmas for durability/safety.
129
- */
130
- async connect(config = {}) {
131
- const Database = this.getDatabaseCtor();
132
- const filename = typeof config.filename === "string" && config.filename.length > 0 ? config.filename : ":memory:";
133
- const db = new Database(filename);
134
- db.pragma("journal_mode = WAL");
135
- db.pragma("foreign_keys = ON");
136
- db.pragma("busy_timeout = 5000");
137
- return new SqliteClient(db);
138
- }
139
- getDatabaseCtor() {
140
- const require = createRequire(import.meta.url);
141
- const moduleValue = require("better-sqlite3");
142
- if (typeof moduleValue === "function") return moduleValue;
143
- const defaultExport = moduleValue.default;
144
- if (typeof defaultExport === "function") return defaultExport;
145
- throw new TypeError("Failed to load better-sqlite3 constructor.");
146
- }
147
- };
148
-
149
- //#endregion
150
- export { SqliteAdapter, SqliteClient };
151
- //# sourceMappingURL=SqliteAdapter-CDdOjRmW.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SqliteAdapter-CDdOjRmW.js","names":["db: Database.Database","value: unknown","sql: string","params?: readonly unknown[]","name: string","count: number","value: unknown","config: AdapterConfig"],"sources":["../src/connection/clients/dialects/SqliteClient.ts","../src/connection/adapters/dialects/SqliteAdapter.ts"],"sourcesContent":["import type Database from 'better-sqlite3';\nimport type { DBClient } from '../DBClient';\n\n/**\n * Transaction-capable client backed by a synchronous `better-sqlite3` handle.\n */\nexport class SqliteClient implements DBClient {\n static readonly BRAND = 'tango.orm.sqlite_client' as const;\n readonly __tangoBrand: typeof SqliteClient.BRAND = SqliteClient.BRAND;\n private inTransaction = false;\n\n constructor(private db: Database.Database) {}\n\n /**\n * Narrow an unknown value to `SqliteClient`.\n */\n static isSqliteClient(value: unknown): value is SqliteClient {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { __tangoBrand?: unknown }).__tangoBrand === SqliteClient.BRAND\n );\n }\n\n /**\n * Execute a SQL statement with optional parameters.\n *\n * `SELECT`/`PRAGMA` statements return row data; write statements return\n * an empty row list.\n */\n async query<T = unknown>(sql: string, params?: readonly unknown[]): Promise<{ rows: T[] }> {\n const stmt = this.db.prepare(sql);\n const isPragmaWrite = /^\\s*PRAGMA\\b/i.test(sql) && /=/.test(sql);\n\n const normalizedParams = params?.map((param) => this.normalizeParam(param));\n\n if (!isPragmaWrite && stmt.reader) {\n const rows = normalizedParams ? stmt.all(...(normalizedParams as unknown[])) : stmt.all();\n return { rows: rows as T[] };\n }\n\n if (normalizedParams) {\n stmt.run(...(normalizedParams as unknown[]));\n } else {\n stmt.run();\n }\n return { rows: [] };\n }\n\n /**\n * Begin a transaction if one is not already active.\n */\n async begin(): Promise<void> {\n if (!this.inTransaction) {\n this.db.prepare('BEGIN IMMEDIATE').run();\n this.inTransaction = true;\n }\n }\n\n /**\n * Commit the active transaction.\n */\n async commit(): Promise<void> {\n if (this.inTransaction) {\n this.db.prepare('COMMIT').run();\n this.inTransaction = false;\n }\n }\n\n /**\n * Roll back the active transaction.\n */\n async rollback(): Promise<void> {\n if (this.inTransaction) {\n this.db.prepare('ROLLBACK').run();\n this.inTransaction = false;\n }\n }\n\n /**\n * Create a savepoint inside the active transaction.\n */\n async createSavepoint(name: string): Promise<void> {\n this.db.prepare(`SAVEPOINT ${name}`).run();\n }\n\n /**\n * Release a previously-created savepoint.\n */\n async releaseSavepoint(name: string): Promise<void> {\n this.db.prepare(`RELEASE SAVEPOINT ${name}`).run();\n }\n\n /**\n * Roll back the active transaction to a savepoint.\n */\n async rollbackToSavepoint(name: string): Promise<void> {\n this.db.prepare(`ROLLBACK TO SAVEPOINT ${name}`).run();\n }\n\n /**\n * Close the underlying SQLite handle.\n */\n async close(): Promise<void> {\n this.db.close();\n }\n\n private normalizeParam(value: unknown): unknown {\n if (isDateValue(value)) {\n return value.toISOString();\n }\n if (typeof value === 'boolean') {\n return value ? 1 : 0;\n }\n return value;\n }\n}\n\nfunction isDateValue(value: unknown): value is Date {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof (value as { getTime?: unknown }).getTime === 'function' &&\n typeof (value as { toISOString?: unknown }).toISOString === 'function'\n );\n}\n","import { createRequire } from 'node:module';\nimport type { Database as BetterSqliteDatabase } from 'better-sqlite3';\nimport type { Adapter, AdapterConfig, SqlPlaceholders } from '../Adapter';\nimport type { DBClient } from '../../clients/DBClient';\nimport { SqliteClient } from '../../clients/dialects/SqliteClient';\nimport { InternalDialect } from '../../../query/domain/internal/InternalDialect';\n\ntype BetterSqliteCtor = new (filename: string, options?: unknown) => BetterSqliteDatabase;\n\n/**\n * SQLite adapter that creates a `better-sqlite3` backed `DBClient`.\n */\nexport class SqliteAdapter implements Adapter {\n static readonly BRAND = 'tango.orm.sqlite_adapter' as const;\n readonly __tangoBrand: typeof SqliteAdapter.BRAND = SqliteAdapter.BRAND;\n readonly name = 'sqlite';\n readonly dialect: Adapter['dialect'] = InternalDialect.SQLITE;\n readonly features: Adapter['features'] = {\n transactionalDDL: true,\n concurrentIndex: false,\n validateForeignKeys: false,\n ignoreDuplicateInsert: true,\n };\n readonly placeholders: SqlPlaceholders = {\n at(): string {\n return '?';\n },\n list(count: number): string {\n return Array.from({ length: count }, () => '?').join(', ');\n },\n listFromOffset(count: number): string {\n return this.list(count);\n },\n };\n\n /**\n * Narrow an unknown value to `SqliteAdapter`.\n */\n static isSqliteAdapter(value: unknown): value is SqliteAdapter {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { __tangoBrand?: unknown }).__tangoBrand === SqliteAdapter.BRAND\n );\n }\n\n /**\n * Open a SQLite database and apply baseline pragmas for durability/safety.\n */\n async connect(config: AdapterConfig = {}): Promise<DBClient> {\n const Database = this.getDatabaseCtor();\n const filename =\n typeof config.filename === 'string' && config.filename.length > 0 ? config.filename : ':memory:';\n const db = new Database(filename);\n db.pragma('journal_mode = WAL');\n db.pragma('foreign_keys = ON');\n db.pragma('busy_timeout = 5000');\n\n return new SqliteClient(db);\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"],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import "./InternalDialect-ClSaUNso.js";
2
- import { SqliteAdapter } from "./SqliteAdapter-CDdOjRmW.js";
3
-
4
- export { SqliteAdapter };
@@ -1,12 +0,0 @@
1
-
2
- //#region rolldown:runtime
3
- var __defProp = Object.defineProperty;
4
- var __export = (target, all) => {
5
- for (var name in all) __defProp(target, name, {
6
- get: all[name],
7
- enumerable: true
8
- });
9
- };
10
-
11
- //#endregion
12
- export { __export };
@@ -1,60 +0,0 @@
1
- import type { DBClient } from '../clients/DBClient';
2
- import type { Dialect } from '../../query/domain/Dialect';
3
- /**
4
- * Connection options shared by built-in DB adapters.
5
- */
6
- export interface AdapterConfig {
7
- url?: string;
8
- host?: string;
9
- port?: number;
10
- database?: string;
11
- user?: string;
12
- password?: string;
13
- filename?: string;
14
- maxConnections?: number;
15
- }
16
- /**
17
- * Dialect-aware SQL parameter placeholder generator supplied by an
18
- * {@link Adapter}. Consolidates the `$N` vs `?` decision on the adapter so
19
- * compilers and manager-side SQL builders do not branch on dialect to emit
20
- * parameter placeholders.
21
- */
22
- export interface SqlPlaceholders {
23
- /** Placeholder for a single parameter at the given 1-based index. */
24
- at(index: number): string;
25
- /** Comma-joined placeholder list for `count` parameters numbered starting at 1. */
26
- list(count: number): string;
27
- /**
28
- * Comma-joined placeholder list for `count` parameters, skipping the
29
- * first `startOffset` placeholder positions. Used when a statement
30
- * already bound some parameters before the list (for example, an
31
- * `UPDATE ... WHERE` clause).
32
- */
33
- listFromOffset(count: number, startOffset: number): string;
34
- }
35
- /**
36
- * Runtime adapter contract for establishing `DBClient` connections and
37
- * supplying dialect-specific SQL primitives (placeholders, feature flags)
38
- * to manager-side compilers.
39
- */
40
- export interface Adapter {
41
- /** Stable adapter name used in configuration and registry lookup. */
42
- name: string;
43
- /**
44
- * Declared SQL dialect this adapter targets. Consumers branch on the
45
- * adapter, not on a free-standing dialect string, so dialect-awareness
46
- * is funnelled through the adapter interface.
47
- */
48
- dialect: Dialect;
49
- /** Open a database connection and return a client abstraction. */
50
- connect(config: AdapterConfig): Promise<DBClient>;
51
- /** SQL capability flags used by migrations/query orchestration. */
52
- features: {
53
- transactionalDDL: boolean;
54
- concurrentIndex: boolean;
55
- validateForeignKeys: boolean;
56
- ignoreDuplicateInsert: boolean;
57
- };
58
- /** Dialect-aware SQL parameter placeholder generator. */
59
- placeholders: SqlPlaceholders;
60
- }
@@ -1,44 +0,0 @@
1
- import type { Adapter, AdapterConfig } from './Adapter';
2
- import type { DBClient } from '../clients/DBClient';
3
- /**
4
- * Runtime registry for database adapters.
5
- *
6
- * Use a custom instance when tests or applications need explicit control
7
- * over supported adapters; use `getDefaultRegistry()` for the built-in set.
8
- */
9
- export declare class AdapterRegistry {
10
- static readonly BRAND: "tango.orm.adapter_registry";
11
- private static defaultRegistryInstance;
12
- readonly __tangoBrand: typeof AdapterRegistry.BRAND;
13
- private adapters;
14
- /**
15
- * Narrow an unknown value to `AdapterRegistry`.
16
- */
17
- static isAdapterRegistry(value: unknown): value is AdapterRegistry;
18
- /**
19
- * Return a lazily-initialized registry preloaded with built-in adapters.
20
- */
21
- static getDefaultRegistry(): Promise<AdapterRegistry>;
22
- /**
23
- * Register an adapter under its declared `name`.
24
- */
25
- register(adapter: Adapter): this;
26
- /**
27
- * Resolve an adapter by name, or throw a descriptive error.
28
- */
29
- get(name: string): Adapter;
30
- /**
31
- * Check whether an adapter has been registered.
32
- */
33
- has(name: string): boolean;
34
- }
35
- /**
36
- * Connect to a database by adapter name using the provided (or default) registry.
37
- */
38
- export declare function connectDB(config: AdapterConfig & {
39
- adapter: string;
40
- }, registry?: AdapterRegistry): Promise<DBClient>;
41
- /**
42
- * Convenience helper that exposes the singleton default adapter registry.
43
- */
44
- export declare function getDefaultAdapterRegistry(): Promise<AdapterRegistry>;
@@ -1,30 +0,0 @@
1
- import type { Adapter, AdapterConfig, SqlPlaceholders } from '../Adapter';
2
- import type { DBClient } from '../../clients/DBClient';
3
- /**
4
- * Postgres adapter that turns adapter config into a transactional `DBClient`.
5
- */
6
- export declare class PostgresAdapter implements Adapter {
7
- static readonly BRAND: "tango.orm.postgres_adapter";
8
- readonly __tangoBrand: typeof PostgresAdapter.BRAND;
9
- readonly name = "postgres";
10
- readonly dialect: Adapter['dialect'];
11
- /**
12
- * Declares capabilities of this database adapter.
13
- * Used by the migration runner and query compiler to determine which
14
- * SQL features can be safely used:
15
- * - transactionalDDL: Postgres supports DDL inside transactions (safe rollback of schema changes)
16
- * - concurrentIndex: Supports CREATE INDEX CONCURRENTLY (non-blocking index builds)
17
- * - validateForeignKeys: Supports deferred FK validation via NOT VALID + VALIDATE CONSTRAINT
18
- * - ignoreDuplicateInsert: Supports duplicate-safe insert semantics for manager-owned link writes
19
- */
20
- readonly features: Adapter['features'];
21
- readonly placeholders: SqlPlaceholders;
22
- /**
23
- * Narrow an unknown value to `PostgresAdapter`.
24
- */
25
- static isPostgresAdapter(value: unknown): value is PostgresAdapter;
26
- /**
27
- * Open a Postgres connection pool and return a client-backed DB abstraction.
28
- */
29
- connect(config: AdapterConfig): Promise<DBClient>;
30
- }
@@ -1,22 +0,0 @@
1
- import type { Adapter, AdapterConfig, SqlPlaceholders } from '../Adapter';
2
- import type { DBClient } from '../../clients/DBClient';
3
- /**
4
- * SQLite adapter that creates a `better-sqlite3` backed `DBClient`.
5
- */
6
- export declare class SqliteAdapter implements Adapter {
7
- static readonly BRAND: "tango.orm.sqlite_adapter";
8
- readonly __tangoBrand: typeof SqliteAdapter.BRAND;
9
- readonly name = "sqlite";
10
- readonly dialect: Adapter['dialect'];
11
- readonly features: Adapter['features'];
12
- readonly placeholders: SqlPlaceholders;
13
- /**
14
- * Narrow an unknown value to `SqliteAdapter`.
15
- */
16
- static isSqliteAdapter(value: unknown): value is SqliteAdapter;
17
- /**
18
- * Open a SQLite database and apply baseline pragmas for durability/safety.
19
- */
20
- connect(config?: AdapterConfig): Promise<DBClient>;
21
- private getDatabaseCtor;
22
- }
@@ -1,5 +0,0 @@
1
- /**
2
- * Domain boundary barrel: centralizes this subdomain's public contract.
3
- */
4
- export { PostgresAdapter } from './PostgresAdapter';
5
- export { SqliteAdapter } from './SqliteAdapter';
@@ -1,8 +0,0 @@
1
- /**
2
- * Domain boundary barrel: exposes namespaced exports for Django-style drill-down
3
- * imports and curated flat exports for TS-native ergonomics.
4
- */
5
- export * as dialects from './dialects/index';
6
- export { AdapterRegistry, connectDB, getDefaultAdapterRegistry } from './AdapterRegistry';
7
- export type { Adapter, AdapterConfig, SqlPlaceholders } from './Adapter';
8
- export { PostgresAdapter, SqliteAdapter } from './dialects/index';
@@ -1,23 +0,0 @@
1
- /**
2
- * Database client abstraction used by ORM and migrations.
3
- */
4
- export interface DBClient {
5
- /** Execute SQL with optional positional parameters. */
6
- query<T = unknown>(sql: string, params?: readonly unknown[]): Promise<{
7
- rows: T[];
8
- }>;
9
- /** Begin a transaction. */
10
- begin(): Promise<void>;
11
- /** Commit current transaction. */
12
- commit(): Promise<void>;
13
- /** Roll back current transaction. */
14
- rollback(): Promise<void>;
15
- /** Create a savepoint inside the current transaction. */
16
- createSavepoint(name: string): Promise<void>;
17
- /** Release a previously-created savepoint. */
18
- releaseSavepoint(name: string): Promise<void>;
19
- /** Roll back current transaction state to a savepoint. */
20
- rollbackToSavepoint(name: string): Promise<void>;
21
- /** Close underlying connection resources. */
22
- close(): Promise<void>;
23
- }
@@ -1,54 +0,0 @@
1
- import type { DBClient } from '../DBClient';
2
- export interface PostgresPoolClientLike {
3
- query(sql: string, params?: readonly unknown[]): Promise<{
4
- rows: unknown[];
5
- }>;
6
- release(): void;
7
- }
8
- /**
9
- * Transaction-capable client backed by a PostgreSQL pool client.
10
- */
11
- export declare class PostgresClient implements DBClient {
12
- private client;
13
- static readonly BRAND: "tango.orm.postgres_client";
14
- readonly __tangoBrand: typeof PostgresClient.BRAND;
15
- constructor(client: PostgresPoolClientLike);
16
- /**
17
- * Narrow an unknown value to `PostgresClient`.
18
- */
19
- static isPostgresClient(value: unknown): value is PostgresClient;
20
- /**
21
- * Execute a SQL statement with optional bound parameters.
22
- */
23
- query<T = unknown>(sql: string, params?: readonly unknown[]): Promise<{
24
- rows: T[];
25
- }>;
26
- /**
27
- * Begin a database transaction.
28
- */
29
- begin(): Promise<void>;
30
- /**
31
- * Commit the active transaction.
32
- */
33
- commit(): Promise<void>;
34
- /**
35
- * Roll back the active transaction.
36
- */
37
- rollback(): Promise<void>;
38
- /**
39
- * Create a savepoint inside the active transaction.
40
- */
41
- createSavepoint(name: string): Promise<void>;
42
- /**
43
- * Release a previously-created savepoint.
44
- */
45
- releaseSavepoint(name: string): Promise<void>;
46
- /**
47
- * Roll back the active transaction to a savepoint.
48
- */
49
- rollbackToSavepoint(name: string): Promise<void>;
50
- /**
51
- * Release the leased PostgreSQL client back to its owning pool.
52
- */
53
- close(): Promise<void>;
54
- }
@@ -1,54 +0,0 @@
1
- import type Database from 'better-sqlite3';
2
- import type { DBClient } from '../DBClient';
3
- /**
4
- * Transaction-capable client backed by a synchronous `better-sqlite3` handle.
5
- */
6
- export declare class SqliteClient implements DBClient {
7
- private db;
8
- static readonly BRAND: "tango.orm.sqlite_client";
9
- readonly __tangoBrand: typeof SqliteClient.BRAND;
10
- private inTransaction;
11
- constructor(db: Database.Database);
12
- /**
13
- * Narrow an unknown value to `SqliteClient`.
14
- */
15
- static isSqliteClient(value: unknown): value is SqliteClient;
16
- /**
17
- * Execute a SQL statement with optional parameters.
18
- *
19
- * `SELECT`/`PRAGMA` statements return row data; write statements return
20
- * an empty row list.
21
- */
22
- query<T = unknown>(sql: string, params?: readonly unknown[]): Promise<{
23
- rows: T[];
24
- }>;
25
- /**
26
- * Begin a transaction if one is not already active.
27
- */
28
- begin(): Promise<void>;
29
- /**
30
- * Commit the active transaction.
31
- */
32
- commit(): Promise<void>;
33
- /**
34
- * Roll back the active transaction.
35
- */
36
- rollback(): Promise<void>;
37
- /**
38
- * Create a savepoint inside the active transaction.
39
- */
40
- createSavepoint(name: string): Promise<void>;
41
- /**
42
- * Release a previously-created savepoint.
43
- */
44
- releaseSavepoint(name: string): Promise<void>;
45
- /**
46
- * Roll back the active transaction to a savepoint.
47
- */
48
- rollbackToSavepoint(name: string): Promise<void>;
49
- /**
50
- * Close the underlying SQLite handle.
51
- */
52
- close(): Promise<void>;
53
- private normalizeParam;
54
- }
@@ -1,5 +0,0 @@
1
- /**
2
- * Domain boundary barrel: centralizes this subdomain's public contract.
3
- */
4
- export { PostgresClient } from './PostgresClient';
5
- export { SqliteClient } from './SqliteClient';
@@ -1,7 +0,0 @@
1
- /**
2
- * Domain boundary barrel: exposes namespaced exports for Django-style drill-down
3
- * imports and curated flat exports for TS-native ergonomics.
4
- */
5
- export * as dialects from './dialects/index';
6
- export type { DBClient } from './DBClient';
7
- export { PostgresClient, SqliteClient } from './dialects/index';
@@ -1 +0,0 @@
1
- {"version":3,"file":"connection-Dmhgx31M.js","names":["value: unknown","adapter: Adapter","name: string","config: AdapterConfig & { adapter: string }","registry?: AdapterRegistry"],"sources":["../src/connection/adapters/dialects/index.ts","../src/connection/adapters/AdapterRegistry.ts","../src/connection/adapters/index.ts","../src/connection/clients/dialects/index.ts","../src/connection/clients/index.ts","../src/connection/index.ts"],"sourcesContent":["/**\n * Domain boundary barrel: centralizes this subdomain's public contract.\n */\n\nexport { PostgresAdapter } from './PostgresAdapter';\nexport { SqliteAdapter } from './SqliteAdapter';\n","import type { Adapter, AdapterConfig } from './Adapter';\nimport type { DBClient } from '../clients/DBClient';\n\n/**\n * Runtime registry for database adapters.\n *\n * Use a custom instance when tests or applications need explicit control\n * over supported adapters; use `getDefaultRegistry()` for the built-in set.\n */\nexport class AdapterRegistry {\n static readonly BRAND = 'tango.orm.adapter_registry' as const;\n private static defaultRegistryInstance: AdapterRegistry | undefined;\n readonly __tangoBrand: typeof AdapterRegistry.BRAND = AdapterRegistry.BRAND;\n private adapters = new Map<string, Adapter>();\n\n /**\n * Narrow an unknown value to `AdapterRegistry`.\n */\n static isAdapterRegistry(value: unknown): value is AdapterRegistry {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { __tangoBrand?: unknown }).__tangoBrand === AdapterRegistry.BRAND\n );\n }\n\n /**\n * Return a lazily-initialized registry preloaded with built-in adapters.\n */\n static async getDefaultRegistry(): Promise<AdapterRegistry> {\n if (AdapterRegistry.defaultRegistryInstance) {\n return AdapterRegistry.defaultRegistryInstance;\n }\n\n AdapterRegistry.defaultRegistryInstance = new AdapterRegistry();\n\n const { PostgresAdapter } = await import('./dialects/PostgresAdapter');\n const { SqliteAdapter } = await import('./dialects/SqliteAdapter');\n\n AdapterRegistry.defaultRegistryInstance.register(new PostgresAdapter());\n AdapterRegistry.defaultRegistryInstance.register(new SqliteAdapter());\n\n return AdapterRegistry.defaultRegistryInstance;\n }\n\n /**\n * Register an adapter under its declared `name`.\n */\n register(adapter: Adapter): this {\n this.adapters.set(adapter.name, adapter);\n return this;\n }\n\n /**\n * Resolve an adapter by name, or throw a descriptive error.\n */\n get(name: string): Adapter {\n const adapter = this.adapters.get(name);\n if (!adapter) {\n const available = [...this.adapters.keys()].join(', ');\n throw new Error(`Unknown adapter: ${name}. Available adapters: ${available || 'none'}`);\n }\n return adapter;\n }\n\n /**\n * Check whether an adapter has been registered.\n */\n has(name: string): boolean {\n return this.adapters.has(name);\n }\n}\n\n/**\n * Connect to a database by adapter name using the provided (or default) registry.\n */\nexport async function connectDB(\n config: AdapterConfig & { adapter: string },\n registry?: AdapterRegistry\n): Promise<DBClient> {\n const effectiveRegistry = registry ?? (await AdapterRegistry.getDefaultRegistry());\n const adapter = effectiveRegistry.get(config.adapter);\n return adapter.connect(config);\n}\n\n/**\n * Convenience helper that exposes the singleton default adapter registry.\n */\nexport async function getDefaultAdapterRegistry(): Promise<AdapterRegistry> {\n return AdapterRegistry.getDefaultRegistry();\n}\n","/**\n * Domain boundary barrel: exposes namespaced exports for Django-style drill-down\n * imports and curated flat exports for TS-native ergonomics.\n */\n\nexport * as dialects from './dialects/index';\n\nexport { AdapterRegistry, connectDB, getDefaultAdapterRegistry } from './AdapterRegistry';\nexport type { Adapter, AdapterConfig, SqlPlaceholders } from './Adapter';\nexport { PostgresAdapter, SqliteAdapter } from './dialects/index';\n","/**\n * Domain boundary barrel: centralizes this subdomain's public contract.\n */\n\nexport { PostgresClient } from './PostgresClient';\nexport { SqliteClient } from './SqliteClient';\n","/**\n * Domain boundary barrel: exposes namespaced exports for Django-style drill-down\n * imports and curated flat exports for TS-native ergonomics.\n */\n\nexport * as dialects from './dialects/index';\n\nexport type { DBClient } from './DBClient';\nexport { PostgresClient, SqliteClient } from './dialects/index';\n","/**\n * Domain boundary barrel: exposes namespaced exports for Django-style drill-down\n * imports and curated flat exports for TS-native ergonomics.\n */\n\nexport * as adapters from './adapters/index';\nexport * as clients from './clients/index';\n\nexport { AdapterRegistry, connectDB, getDefaultAdapterRegistry } from './adapters/index';\nexport type { Adapter, AdapterConfig, SqlPlaceholders } from './adapters/index';\nexport type { DBClient } from './clients/DBClient';\nexport { PostgresAdapter, SqliteAdapter } from './adapters/index';\nexport { PostgresClient, SqliteClient } from './clients/index';\n"],"mappings":";;;;;;;;;;;;;ICSa,kBAAN,MAAM,gBAAgB;CACzB,OAAgB,QAAQ;CACxB,OAAe;CACf,eAAsD,gBAAgB;CACtE,WAAmB,IAAI;;;;CAKvB,OAAO,kBAAkBA,OAA0C;AAC/D,gBACW,UAAU,YACjB,UAAU,QACT,MAAqC,iBAAiB,gBAAgB;CAE9E;;;;CAKD,aAAa,qBAA+C;AACxD,MAAI,gBAAgB,wBAChB,QAAO,gBAAgB;AAG3B,kBAAgB,0BAA0B,IAAI;EAE9C,MAAM,EAAE,oCAAiB,GAAG,MAAM,OAAO;EACzC,MAAM,EAAE,gCAAe,GAAG,MAAM,OAAO;AAEvC,kBAAgB,wBAAwB,SAAS,IAAI,oBAAkB;AACvE,kBAAgB,wBAAwB,SAAS,IAAI,kBAAgB;AAErE,SAAO,gBAAgB;CAC1B;;;;CAKD,SAASC,SAAwB;AAC7B,OAAK,SAAS,IAAI,QAAQ,MAAM,QAAQ;AACxC,SAAO;CACV;;;;CAKD,IAAIC,MAAuB;EACvB,MAAM,UAAU,KAAK,SAAS,IAAI,KAAK;AACvC,OAAK,SAAS;GACV,MAAM,YAAY,CAAC,GAAG,KAAK,SAAS,MAAM,AAAC,EAAC,KAAK,KAAK;AACtD,SAAM,IAAI,OAAO,mBAAmB,KAAK,wBAAwB,aAAa,OAAO;EACxF;AACD,SAAO;CACV;;;;CAKD,IAAIA,MAAuB;AACvB,SAAO,KAAK,SAAS,IAAI,KAAK;CACjC;AACJ;AAKM,eAAe,UAClBC,QACAC,UACiB;CACjB,MAAM,oBAAoB,YAAa,MAAM,gBAAgB,oBAAoB;CACjF,MAAM,UAAU,kBAAkB,IAAI,OAAO,QAAQ;AACrD,QAAO,QAAQ,QAAQ,OAAO;AACjC;AAKM,eAAe,4BAAsD;AACxE,QAAO,gBAAgB,oBAAoB;AAC9C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"defaultRuntime-DzqBQ9Hb.js","names":["engine: AsyncLocalTransactionEngine","state: TransactionState","frame: TransactionFrame","callback: () => void","options: OnCommitOptions","work: (tx: AtomicTransaction) => Promise<T> | T","options: SavepointOptions","runtime: TangoRuntime","work: (tx: AtomicTransaction) => Promise<T> | T","state: TransactionState","options: SavepointOptions","savepointName?: string","error: unknown","callbacks: readonly CallbackRecord[]","cause: unknown","value: unknown","runtime: TangoRuntime","work: (tx: AtomicTransaction) => Promise<T> | T","runtime: TangoRuntime","sql: string","params?: readonly unknown[]","_name: string","config: AdapterConfig","sql: string","params?: readonly unknown[]","config: AdapterConfig","sql: string","params?: readonly unknown[]","filename: string","work: () => Promise<T>","release: (() => void) | null","config: AdapterConfig & { adapter: string }","loadLoadedConfig: () => LoadedConfig","value: unknown","sql: string","params?: readonly unknown[]","dialect: Dialect","defaultRuntime: TangoRuntime | null","fromFile: () => unknown"],"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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"}