callman-core 1.43.0 → 1.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/dist/ai/prompts/diagram.d.ts.map +1 -1
  2. package/dist/ai/prompts/diagram.js +10 -5
  3. package/dist/ai/prompts/diagram.js.map +1 -1
  4. package/dist/ai/prompts/scenarioNodeReference.d.ts.map +1 -1
  5. package/dist/ai/prompts/scenarioNodeReference.js +17 -6
  6. package/dist/ai/prompts/scenarioNodeReference.js.map +1 -1
  7. package/dist/diagram/geometry.d.ts +1 -0
  8. package/dist/diagram/geometry.d.ts.map +1 -1
  9. package/dist/diagram/geometry.js +15 -0
  10. package/dist/diagram/geometry.js.map +1 -1
  11. package/dist/diagram/ops.d.ts.map +1 -1
  12. package/dist/diagram/ops.js +25 -12
  13. package/dist/diagram/ops.js.map +1 -1
  14. package/dist/diagram/routing/batch.d.ts +2 -0
  15. package/dist/diagram/routing/batch.d.ts.map +1 -1
  16. package/dist/diagram/routing/batch.js +4 -4
  17. package/dist/diagram/routing/batch.js.map +1 -1
  18. package/dist/diagram/routing/index.d.ts +1 -0
  19. package/dist/diagram/routing/index.d.ts.map +1 -1
  20. package/dist/diagram/routing/index.js +1 -0
  21. package/dist/diagram/routing/index.js.map +1 -1
  22. package/dist/diagram/routing/ports.d.ts +14 -0
  23. package/dist/diagram/routing/ports.d.ts.map +1 -0
  24. package/dist/diagram/routing/ports.js +130 -0
  25. package/dist/diagram/routing/ports.js.map +1 -0
  26. package/dist/diagram/routing/sides.d.ts.map +1 -1
  27. package/dist/diagram/routing/sides.js +4 -3
  28. package/dist/diagram/routing/sides.js.map +1 -1
  29. package/dist/diagram/routing/types.d.ts +1 -0
  30. package/dist/diagram/routing/types.d.ts.map +1 -1
  31. package/dist/diagram/routing/types.js.map +1 -1
  32. package/dist/host/connections.d.ts.map +1 -1
  33. package/dist/host/connections.js +7 -0
  34. package/dist/host/connections.js.map +1 -1
  35. package/dist/host/db/db-query-reference.d.ts.map +1 -1
  36. package/dist/host/db/db-query-reference.js +22 -5
  37. package/dist/host/db/db-query-reference.js.map +1 -1
  38. package/dist/host/db/dbBinds.d.ts +20 -0
  39. package/dist/host/db/dbBinds.d.ts.map +1 -0
  40. package/dist/host/db/dbBinds.js +61 -0
  41. package/dist/host/db/dbBinds.js.map +1 -0
  42. package/dist/host/db/dbSessionManager.d.ts +13 -0
  43. package/dist/host/db/dbSessionManager.d.ts.map +1 -0
  44. package/dist/host/db/dbSessionManager.js +165 -0
  45. package/dist/host/db/dbSessionManager.js.map +1 -0
  46. package/dist/host/db/introspection/index.d.ts +1 -0
  47. package/dist/host/db/introspection/index.d.ts.map +1 -1
  48. package/dist/host/db/introspection/index.js +1 -0
  49. package/dist/host/db/introspection/index.js.map +1 -1
  50. package/dist/host/db/introspection/routines.d.ts +38 -0
  51. package/dist/host/db/introspection/routines.d.ts.map +1 -0
  52. package/dist/host/db/introspection/routines.js +439 -0
  53. package/dist/host/db/introspection/routines.js.map +1 -0
  54. package/dist/host/db/mssqlAdapter.d.ts +10 -4
  55. package/dist/host/db/mssqlAdapter.d.ts.map +1 -1
  56. package/dist/host/db/mssqlAdapter.js +144 -34
  57. package/dist/host/db/mssqlAdapter.js.map +1 -1
  58. package/dist/host/db/mysqlAdapter.d.ts +10 -4
  59. package/dist/host/db/mysqlAdapter.d.ts.map +1 -1
  60. package/dist/host/db/mysqlAdapter.js +66 -16
  61. package/dist/host/db/mysqlAdapter.js.map +1 -1
  62. package/dist/host/db/oracleAdapter.d.ts +10 -4
  63. package/dist/host/db/oracleAdapter.d.ts.map +1 -1
  64. package/dist/host/db/oracleAdapter.js +301 -28
  65. package/dist/host/db/oracleAdapter.js.map +1 -1
  66. package/dist/host/db/pgClientConfig.d.ts +10 -1
  67. package/dist/host/db/pgClientConfig.d.ts.map +1 -1
  68. package/dist/host/db/pgClientConfig.js +59 -0
  69. package/dist/host/db/pgClientConfig.js.map +1 -1
  70. package/dist/host/db/pgSession.d.ts +11 -0
  71. package/dist/host/db/pgSession.d.ts.map +1 -0
  72. package/dist/host/db/pgSession.js +62 -0
  73. package/dist/host/db/pgSession.js.map +1 -0
  74. package/dist/host/db/pgSessionManager.d.ts +5 -14
  75. package/dist/host/db/pgSessionManager.d.ts.map +1 -1
  76. package/dist/host/db/pgSessionManager.js +9 -161
  77. package/dist/host/db/pgSessionManager.js.map +1 -1
  78. package/dist/host/db/postgresAdapter.d.ts +2 -4
  79. package/dist/host/db/postgresAdapter.d.ts.map +1 -1
  80. package/dist/host/db/postgresAdapter.js +26 -6
  81. package/dist/host/db/postgresAdapter.js.map +1 -1
  82. package/dist/host/db/queryExecutor.d.ts +2 -4
  83. package/dist/host/db/queryExecutor.d.ts.map +1 -1
  84. package/dist/host/db/queryExecutor.js +35 -23
  85. package/dist/host/db/queryExecutor.js.map +1 -1
  86. package/dist/host/db/sqlState.d.ts +1 -0
  87. package/dist/host/db/sqlState.d.ts.map +1 -1
  88. package/dist/host/db/sqlState.js +20 -0
  89. package/dist/host/db/sqlState.js.map +1 -1
  90. package/dist/host/db/types.d.ts +38 -0
  91. package/dist/host/db/types.d.ts.map +1 -1
  92. package/dist/host/index.d.ts +5 -3
  93. package/dist/host/index.d.ts.map +1 -1
  94. package/dist/host/index.js +8 -6
  95. package/dist/host/index.js.map +1 -1
  96. package/dist/scenario-runner/adapters/db-executor.d.ts +17 -3
  97. package/dist/scenario-runner/adapters/db-executor.d.ts.map +1 -1
  98. package/dist/scenario-runner/adapters/db-executor.js +57 -22
  99. package/dist/scenario-runner/adapters/db-executor.js.map +1 -1
  100. package/dist/scenario-runner/adapters/index.d.ts +1 -1
  101. package/dist/scenario-runner/adapters/index.d.ts.map +1 -1
  102. package/dist/scenario-runner/adapters/index.js +1 -1
  103. package/dist/scenario-runner/adapters/index.js.map +1 -1
  104. package/dist/scenario-runner/adapters/types.d.ts +7 -0
  105. package/dist/scenario-runner/adapters/types.d.ts.map +1 -1
  106. package/dist/scenario-runner/index.d.ts +1 -1
  107. package/dist/scenario-runner/index.d.ts.map +1 -1
  108. package/dist/scenario-runner/index.js +1 -1
  109. package/dist/scenario-runner/index.js.map +1 -1
  110. package/dist/scenario-runner/nodePolicy.d.ts.map +1 -1
  111. package/dist/scenario-runner/nodePolicy.js +3 -0
  112. package/dist/scenario-runner/nodePolicy.js.map +1 -1
  113. package/dist/scenario-runner/runScenario.d.ts +4 -2
  114. package/dist/scenario-runner/runScenario.d.ts.map +1 -1
  115. package/dist/scenario-runner/runScenario.js +47 -12
  116. package/dist/scenario-runner/runScenario.js.map +1 -1
  117. package/dist/scenario-runner/runScenarioWithDataset.d.ts.map +1 -1
  118. package/dist/scenario-runner/runScenarioWithDataset.js +65 -1
  119. package/dist/scenario-runner/runScenarioWithDataset.js.map +1 -1
  120. package/dist/scenario-runner/types.d.ts +21 -1
  121. package/dist/scenario-runner/types.d.ts.map +1 -1
  122. package/dist/script/features/db.d.ts +7 -0
  123. package/dist/script/features/db.d.ts.map +1 -1
  124. package/dist/script/features/db.js +8 -1
  125. package/dist/script/features/db.js.map +1 -1
  126. package/dist/script/pm-api-declarations.d.ts.map +1 -1
  127. package/dist/script/pm-api-declarations.js +24 -0
  128. package/dist/script/pm-api-declarations.js.map +1 -1
  129. package/dist/script/pm-api-metadata.js +1 -1
  130. package/dist/script/pm-api-metadata.js.map +1 -1
  131. package/dist/script/types.d.ts +7 -0
  132. package/dist/script/types.d.ts.map +1 -1
  133. package/dist-cjs/ai/prompts/diagram.js +10 -5
  134. package/dist-cjs/ai/prompts/diagram.js.map +1 -1
  135. package/dist-cjs/ai/prompts/scenarioNodeReference.js +17 -6
  136. package/dist-cjs/ai/prompts/scenarioNodeReference.js.map +1 -1
  137. package/dist-cjs/diagram/geometry.js +17 -1
  138. package/dist-cjs/diagram/geometry.js.map +1 -1
  139. package/dist-cjs/diagram/ops.js +25 -12
  140. package/dist-cjs/diagram/ops.js.map +1 -1
  141. package/dist-cjs/diagram/routing/batch.js +4 -4
  142. package/dist-cjs/diagram/routing/batch.js.map +1 -1
  143. package/dist-cjs/diagram/routing/index.js +1 -0
  144. package/dist-cjs/diagram/routing/index.js.map +1 -1
  145. package/dist-cjs/diagram/routing/ports.js +135 -0
  146. package/dist-cjs/diagram/routing/ports.js.map +1 -0
  147. package/dist-cjs/diagram/routing/sides.js +3 -2
  148. package/dist-cjs/diagram/routing/sides.js.map +1 -1
  149. package/dist-cjs/diagram/routing/types.js.map +1 -1
  150. package/dist-cjs/host/connections.js +7 -0
  151. package/dist-cjs/host/connections.js.map +1 -1
  152. package/dist-cjs/host/db/db-query-reference.js +22 -5
  153. package/dist-cjs/host/db/db-query-reference.js.map +1 -1
  154. package/dist-cjs/host/db/dbBinds.js +71 -0
  155. package/dist-cjs/host/db/dbBinds.js.map +1 -0
  156. package/dist-cjs/host/db/dbSessionManager.js +172 -0
  157. package/dist-cjs/host/db/dbSessionManager.js.map +1 -0
  158. package/dist-cjs/host/db/introspection/index.js +4 -1
  159. package/dist-cjs/host/db/introspection/index.js.map +1 -1
  160. package/dist-cjs/host/db/introspection/routines.js +444 -0
  161. package/dist-cjs/host/db/introspection/routines.js.map +1 -0
  162. package/dist-cjs/host/db/mssqlAdapter.js +146 -35
  163. package/dist-cjs/host/db/mssqlAdapter.js.map +1 -1
  164. package/dist-cjs/host/db/mysqlAdapter.js +68 -17
  165. package/dist-cjs/host/db/mysqlAdapter.js.map +1 -1
  166. package/dist-cjs/host/db/oracleAdapter.js +303 -29
  167. package/dist-cjs/host/db/oracleAdapter.js.map +1 -1
  168. package/dist-cjs/host/db/pgClientConfig.js +61 -1
  169. package/dist-cjs/host/db/pgClientConfig.js.map +1 -1
  170. package/dist-cjs/host/db/pgSession.js +67 -0
  171. package/dist-cjs/host/db/pgSession.js.map +1 -0
  172. package/dist-cjs/host/db/pgSessionManager.js +10 -166
  173. package/dist-cjs/host/db/pgSessionManager.js.map +1 -1
  174. package/dist-cjs/host/db/postgresAdapter.js +25 -5
  175. package/dist-cjs/host/db/postgresAdapter.js.map +1 -1
  176. package/dist-cjs/host/db/queryExecutor.js +34 -22
  177. package/dist-cjs/host/db/queryExecutor.js.map +1 -1
  178. package/dist-cjs/host/db/sqlState.js +22 -1
  179. package/dist-cjs/host/db/sqlState.js.map +1 -1
  180. package/dist-cjs/host/index.js +15 -6
  181. package/dist-cjs/host/index.js.map +1 -1
  182. package/dist-cjs/scenario-runner/adapters/db-executor.js +57 -21
  183. package/dist-cjs/scenario-runner/adapters/db-executor.js.map +1 -1
  184. package/dist-cjs/scenario-runner/adapters/index.js +3 -1
  185. package/dist-cjs/scenario-runner/adapters/index.js.map +1 -1
  186. package/dist-cjs/scenario-runner/index.js +2 -1
  187. package/dist-cjs/scenario-runner/index.js.map +1 -1
  188. package/dist-cjs/scenario-runner/nodePolicy.js +3 -0
  189. package/dist-cjs/scenario-runner/nodePolicy.js.map +1 -1
  190. package/dist-cjs/scenario-runner/runScenario.js +49 -13
  191. package/dist-cjs/scenario-runner/runScenario.js.map +1 -1
  192. package/dist-cjs/scenario-runner/runScenarioWithDataset.js +65 -1
  193. package/dist-cjs/scenario-runner/runScenarioWithDataset.js.map +1 -1
  194. package/dist-cjs/script/features/db.js +8 -1
  195. package/dist-cjs/script/features/db.js.map +1 -1
  196. package/dist-cjs/script/pm-api-declarations.js +24 -0
  197. package/dist-cjs/script/pm-api-declarations.js.map +1 -1
  198. package/dist-cjs/script/pm-api-metadata.js +1 -1
  199. package/dist-cjs/script/pm-api-metadata.js.map +1 -1
  200. package/package.json +1 -1
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ // Bind helpers shared by the SQL adapters. See DbBindParam for what a bind
3
+ // means on each engine.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.attachDbOutput = exports.onDbAbort = exports.DbStatementTimeoutError = exports.finishStatementResult = exports.positionalBindValues = exports.outBindName = exports.isOutBind = void 0;
6
+ const isOutBind = (bind) => bind.direction === "out" || bind.direction === "inout" || bind.type === "cursor";
7
+ exports.isOutBind = isOutBind;
8
+ const outBindName = (bind, index) => bind.name?.trim() || String(index + 1);
9
+ exports.outBindName = outBindName;
10
+ // The values a positional engine sends: `out` binds take no slot. Legacy
11
+ // `params` pass through untouched.
12
+ const positionalBindValues = (options) => options.binds
13
+ ? options.binds
14
+ .filter((bind) => bind.direction !== "out" && bind.type !== "cursor")
15
+ .map((bind) => bind.value ?? null)
16
+ : (options.params ?? []);
17
+ exports.positionalBindValues = positionalBindValues;
18
+ // Rows of the statement itself win; a procedure that hands its result back
19
+ // through one cursor or a result set reads as `rows` too, so the same
20
+ // assertions work whichever way the database returns the data.
21
+ const finishStatementResult = (result) => {
22
+ const { cursorRows, out, output, resultSets, ...base } = result;
23
+ let rows = base.rows;
24
+ let rowCount = base.rowCount;
25
+ if (rows.length === 0) {
26
+ const only = resultSets?.[0] ?? (cursorRows?.length === 1 ? cursorRows[0] : undefined);
27
+ if (only) {
28
+ rows = only;
29
+ rowCount = only.length;
30
+ }
31
+ }
32
+ return {
33
+ rows,
34
+ rowCount,
35
+ ...(out && Object.keys(out).length > 0 ? { out } : {}),
36
+ ...(output ? { output } : {}),
37
+ ...(resultSets && resultSets.length > 0 ? { resultSets } : {}),
38
+ };
39
+ };
40
+ exports.finishStatementResult = finishStatementResult;
41
+ // A statement stopped by its time limit. Sessions treat the connection as
42
+ // gone afterwards: its state is unknown.
43
+ class DbStatementTimeoutError extends Error {
44
+ dbTimeout = true;
45
+ dbErrorCode;
46
+ constructor(timeoutMs, cause, dbErrorCode) {
47
+ super(`The statement was cancelled after its ${timeoutMs} ms time limit.${cause ? ` (${cause})` : ""}`);
48
+ this.name = "DbStatementTimeoutError";
49
+ this.dbErrorCode = dbErrorCode;
50
+ }
51
+ }
52
+ exports.DbStatementTimeoutError = DbStatementTimeoutError;
53
+ // Calls `cancel` when the run is stopped; the returned function detaches.
54
+ const onDbAbort = (signal, cancel) => {
55
+ if (!signal?.addEventListener)
56
+ return () => undefined;
57
+ if (signal.aborted) {
58
+ cancel();
59
+ return () => undefined;
60
+ }
61
+ signal.addEventListener("abort", cancel, { once: true });
62
+ return () => signal.removeEventListener?.("abort", cancel);
63
+ };
64
+ exports.onDbAbort = onDbAbort;
65
+ const attachDbOutput = (error, output) => {
66
+ if (output && output.length > 0 && error && typeof error === "object") {
67
+ error.dbOutput = output;
68
+ }
69
+ };
70
+ exports.attachDbOutput = attachDbOutput;
71
+ //# sourceMappingURL=dbBinds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dbBinds.js","sourceRoot":"","sources":["../../../src/host/db/dbBinds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ // Run-scoped DB sessions for scenario db nodes (`useSession`), on every SQL
3
+ // engine.
4
+ //
5
+ // One live connection per (runId, connection identity). All session-joined
6
+ // nodes of a run share it, so transactions, temp tables, package state and
7
+ // session variables survive between nodes — the foundation of the
8
+ // seed → call procedure → assert → ROLLBACK testing pattern.
9
+ //
10
+ // Modeled on callman-backend's kafka-client-pool: lazy open, per-session
11
+ // serialization, idle sweeper, explicit shutdown hook.
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.__getDbSessionCountForTests = exports.closeAllDbSessions = exports.releaseDbSessionsForRun = exports.executeInDbSession = void 0;
14
+ const mssqlAdapter_js_1 = require("./mssqlAdapter.js");
15
+ const mysqlAdapter_js_1 = require("./mysqlAdapter.js");
16
+ const oracleAdapter_js_1 = require("./oracleAdapter.js");
17
+ const pgSession_js_1 = require("./pgSession.js");
18
+ const IDLE_SWEEP_INTERVAL_MS = 60_000;
19
+ const IDLE_SESSION_TTL_MS = 5 * 60_000;
20
+ const sessions = new Map();
21
+ let sweeper = null;
22
+ // Connection identity participates in the key so two different connections
23
+ // in one run never share a client, even if their `id`s degenerate to the
24
+ // same normalized placeholder.
25
+ const sessionKey = (runId, connection) => [
26
+ runId,
27
+ connection.type,
28
+ connection.id,
29
+ connection.connectionString ?? "",
30
+ connection.host,
31
+ String(connection.port),
32
+ connection.database ?? "",
33
+ connection.username,
34
+ ].join("::");
35
+ const ensureSweeper = () => {
36
+ if (sweeper)
37
+ return;
38
+ sweeper = setInterval(() => {
39
+ const now = Date.now();
40
+ for (const [key, entry] of sessions) {
41
+ if (now - entry.lastUsedAtMs > IDLE_SESSION_TTL_MS) {
42
+ sessions.delete(key);
43
+ void destroyEntry(entry, "rollback");
44
+ }
45
+ }
46
+ if (sessions.size === 0 && sweeper) {
47
+ clearInterval(sweeper);
48
+ sweeper = null;
49
+ }
50
+ }, IDLE_SWEEP_INTERVAL_MS);
51
+ // Never keep the host process alive just for the sweeper.
52
+ sweeper.unref?.();
53
+ };
54
+ const destroyEntry = async (entry, outcome) => {
55
+ try {
56
+ const client = await entry.clientPromise;
57
+ if (entry.transactionOpen && !entry.poisoned) {
58
+ try {
59
+ await (outcome === "commit" ? client.commit() : client.rollback());
60
+ }
61
+ catch {
62
+ // The transaction dies with the connection either way.
63
+ }
64
+ }
65
+ try {
66
+ await client.close();
67
+ }
68
+ catch {
69
+ // Best-effort teardown.
70
+ }
71
+ }
72
+ catch {
73
+ // Client never connected — nothing to tear down.
74
+ }
75
+ };
76
+ const openClient = (connection, entry) => {
77
+ switch (connection.type) {
78
+ case "postgres":
79
+ return (0, pgSession_js_1.openPgSession)(connection, (reason) => {
80
+ entry.poisoned = reason;
81
+ });
82
+ case "oracle":
83
+ return (0, oracleAdapter_js_1.openOracleSession)(connection);
84
+ case "mysql":
85
+ return (0, mysqlAdapter_js_1.openMysqlSession)(connection);
86
+ case "mssql":
87
+ return (0, mssqlAdapter_js_1.openMssqlSession)(connection);
88
+ default:
89
+ return Promise.reject(new Error(`Scenario DB sessions are only supported for SQL connections (got "${connection.type}"). Disable 'Run in scenario transaction' on this node.`));
90
+ }
91
+ };
92
+ const openEntry = (runId, connection) => {
93
+ const entry = {
94
+ chain: Promise.resolve(),
95
+ transactionOpen: false,
96
+ poisoned: null,
97
+ lastUsedAtMs: Date.now(),
98
+ runId,
99
+ };
100
+ entry.clientPromise = openClient(connection, entry);
101
+ // A failed connect reaches the caller through the chain below.
102
+ entry.clientPromise.catch(() => undefined);
103
+ return entry;
104
+ };
105
+ const executeInDbSession = async (input) => {
106
+ const key = sessionKey(input.runId, input.connection);
107
+ let entry = sessions.get(key);
108
+ if (!entry) {
109
+ entry = openEntry(input.runId, input.connection);
110
+ sessions.set(key, entry);
111
+ ensureSweeper();
112
+ }
113
+ const run = entry.chain.then(async () => {
114
+ const client = await entry.clientPromise;
115
+ if (entry.poisoned) {
116
+ throw new Error(`${client.label} session is unusable: ${entry.poisoned}`);
117
+ }
118
+ const inTransaction = input.transactionMode !== "none";
119
+ if (inTransaction && !entry.transactionOpen) {
120
+ await client.begin();
121
+ entry.transactionOpen = true;
122
+ }
123
+ const { connection: _connection, runId: _runId, transactionMode: _mode, query, ...options } = input;
124
+ try {
125
+ return await client.exec(query, options, inTransaction);
126
+ }
127
+ catch (error) {
128
+ if (error?.dbTimeout) {
129
+ entry.poisoned = error instanceof Error ? error.message : "statement cancelled";
130
+ }
131
+ throw error;
132
+ }
133
+ });
134
+ // The chain must survive a failed query (SQL errors are normal in
135
+ // expectError flows) — swallow for chaining purposes only.
136
+ entry.chain = run.then(() => undefined, () => undefined).then(() => {
137
+ entry.lastUsedAtMs = Date.now();
138
+ });
139
+ return run;
140
+ };
141
+ exports.executeInDbSession = executeInDbSession;
142
+ // Close every session belonging to `runId` — COMMIT/ROLLBACK per the run
143
+ // outcome, then close the connection. Queued statements finish (or fail) first
144
+ // thanks to the serialization chain.
145
+ const releaseDbSessionsForRun = async (runId, outcome) => {
146
+ const owned = [];
147
+ for (const [key, entry] of sessions) {
148
+ if (entry.runId === runId)
149
+ owned.push([key, entry]);
150
+ }
151
+ await Promise.all(owned.map(async ([key, entry]) => {
152
+ sessions.delete(key);
153
+ await entry.chain;
154
+ await destroyEntry(entry, outcome);
155
+ }));
156
+ };
157
+ exports.releaseDbSessionsForRun = releaseDbSessionsForRun;
158
+ // Shutdown hook for hosts (backend process exit, CLI end, electron quit).
159
+ const closeAllDbSessions = async () => {
160
+ const all = Array.from(sessions.values());
161
+ sessions.clear();
162
+ if (sweeper) {
163
+ clearInterval(sweeper);
164
+ sweeper = null;
165
+ }
166
+ await Promise.all(all.map((entry) => destroyEntry(entry, "rollback")));
167
+ };
168
+ exports.closeAllDbSessions = closeAllDbSessions;
169
+ // Introspection for tests.
170
+ const __getDbSessionCountForTests = () => sessions.size;
171
+ exports.__getDbSessionCountForTests = __getDbSessionCountForTests;
172
+ //# sourceMappingURL=dbSessionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dbSessionManager.js","sourceRoot":"","sources":["../../../src/host/db/dbSessionManager.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
18
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
19
  };
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.introspectSchema = exports.formatOracleType = exports.formatMssqlType = exports.bsonTypeOf = exports.fieldsFromSample = exports.tableKey = exports.tableMatchesFilter = void 0;
21
+ exports.introspectSchema = exports.formatOracleType = exports.formatMssqlType = exports.bsonTypeOf = exports.fieldsFromSample = exports.tableKey = exports.tableMatchesFilter = exports.introspectRoutines = exports.buildRoutineCall = void 0;
22
22
  const queryExecutor_js_1 = require("../queryExecutor.js");
23
23
  const mongo_js_1 = require("./mongo.js");
24
24
  const mssql_js_1 = require("./mssql.js");
@@ -27,6 +27,9 @@ const oracle_js_1 = require("./oracle.js");
27
27
  const postgres_js_1 = require("./postgres.js");
28
28
  const shared_js_1 = require("./shared.js");
29
29
  __exportStar(require("./types.js"), exports);
30
+ var routines_js_1 = require("./routines.js");
31
+ Object.defineProperty(exports, "buildRoutineCall", { enumerable: true, get: function () { return routines_js_1.buildRoutineCall; } });
32
+ Object.defineProperty(exports, "introspectRoutines", { enumerable: true, get: function () { return routines_js_1.introspectRoutines; } });
30
33
  var shared_js_2 = require("./shared.js");
31
34
  Object.defineProperty(exports, "tableMatchesFilter", { enumerable: true, get: function () { return shared_js_2.tableMatchesFilter; } });
32
35
  Object.defineProperty(exports, "tableKey", { enumerable: true, get: function () { return shared_js_2.tableKey; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/host/db/introspection/index.ts"],"names":[],"mappings":";AAAA,yEAAyE;AACzE,yEAAyE;AACzE,0EAA0E;AAC1E,uDAAuD;;;;;;;;;;;;;;;;;AAEvD,0DAA+D;AAE/D,yCAA6C;AAC7C,yCAA6C;AAC7C,yCAA6C;AAC7C,2CAA+C;AAC/C,+CAAmD;AACnD,2CAAuD;AAGvD,6CAA2B;AAC3B,yCAA2D;AAAlD,+GAAA,kBAAkB,OAAA;AAAE,qGAAA,QAAQ,OAAA;AACrC,uCAA0D;AAAjD,4GAAA,gBAAgB,OAAA;AAAE,sGAAA,UAAU,OAAA;AACrC,uCAA6C;AAApC,2GAAA,eAAe,OAAA;AACxB,yCAA+C;AAAtC,6GAAA,gBAAgB,OAAA;AAElB,MAAM,gBAAgB,GAAG,KAAK,EAAE,eAAkC,EAAE,UAA+B,EAAE,EAAqB,EAAE;IACjI,MAAM,UAAU,GAAG,IAAA,2CAAwB,EAAC,EAAE,GAAG,eAAe,EAAE,EAAE,EAAE,eAAe,CAAC,EAAE,IAAI,YAAY,EAAE,CAAC,CAAC;IAC5G,MAAM,QAAQ,GAAG,IAAA,oCAAwB,EAAC,OAAO,CAAC,CAAC;IACnD,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,UAAU;YACb,OAAO,IAAA,gCAAkB,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAClD,KAAK,OAAO;YACV,OAAO,IAAA,0BAAe,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC/C,KAAK,OAAO;YACV,OAAO,IAAA,0BAAe,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC/C,KAAK,OAAO;YACV,OAAO,IAAA,0BAAe,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC/C,KAAK,QAAQ;YACX,OAAO,IAAA,4BAAgB,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAChD;YACE,MAAM,IAAI,KAAK,CAAC,8CAA8C,MAAM,CAAE,UAA+B,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACjI,CAAC;AACH,CAAC,CAAC;AAjBW,QAAA,gBAAgB,oBAiB3B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/host/db/introspection/index.ts"],"names":[],"mappings":";AAAA,yEAAyE;AACzE,yEAAyE;AACzE,0EAA0E;AAC1E,uDAAuD;;;;;;;;;;;;;;;;;AAEvD,0DAA+D;AAE/D,yCAA6C;AAC7C,yCAA6C;AAC7C,yCAA6C;AAC7C,2CAA+C;AAC/C,+CAAmD;AACnD,2CAAuD;AAGvD,6CAA2B;AAC3B,6CAOuB;AANrB,+GAAA,gBAAgB,OAAA;AAChB,iHAAA,kBAAkB,OAAA;AAMpB,yCAA2D;AAAlD,+GAAA,kBAAkB,OAAA;AAAE,qGAAA,QAAQ,OAAA;AACrC,uCAA0D;AAAjD,4GAAA,gBAAgB,OAAA;AAAE,sGAAA,UAAU,OAAA;AACrC,uCAA6C;AAApC,2GAAA,eAAe,OAAA;AACxB,yCAA+C;AAAtC,6GAAA,gBAAgB,OAAA;AAElB,MAAM,gBAAgB,GAAG,KAAK,EAAE,eAAkC,EAAE,UAA+B,EAAE,EAAqB,EAAE;IACjI,MAAM,UAAU,GAAG,IAAA,2CAAwB,EAAC,EAAE,GAAG,eAAe,EAAE,EAAE,EAAE,eAAe,CAAC,EAAE,IAAI,YAAY,EAAE,CAAC,CAAC;IAC5G,MAAM,QAAQ,GAAG,IAAA,oCAAwB,EAAC,OAAO,CAAC,CAAC;IACnD,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,UAAU;YACb,OAAO,IAAA,gCAAkB,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAClD,KAAK,OAAO;YACV,OAAO,IAAA,0BAAe,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC/C,KAAK,OAAO;YACV,OAAO,IAAA,0BAAe,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC/C,KAAK,OAAO;YACV,OAAO,IAAA,0BAAe,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC/C,KAAK,QAAQ;YACX,OAAO,IAAA,4BAAgB,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAChD;YACE,MAAM,IAAI,KAAK,CAAC,8CAA8C,MAAM,CAAE,UAA+B,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACjI,CAAC;AACH,CAAC,CAAC;AAjBW,QAAA,gBAAgB,oBAiB3B"}