@supalive/core 0.1.3 → 0.1.5

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 (212) hide show
  1. package/README.md +308 -1
  2. package/dist/helper-CiacMqje.d.ts +14 -0
  3. package/dist/helper-CiacMqje.d.ts.map +1 -0
  4. package/dist/helper-zdJT5FUc.js +58 -0
  5. package/dist/helper-zdJT5FUc.js.map +1 -0
  6. package/dist/index-CTyXKcq_.d.ts +1736 -0
  7. package/dist/index-CTyXKcq_.d.ts.map +1 -0
  8. package/dist/mysql-C8SN443m.d.ts +104 -0
  9. package/dist/mysql-C8SN443m.d.ts.map +1 -0
  10. package/dist/mysql-DELSRrpY.js +569 -0
  11. package/dist/mysql-DELSRrpY.js.map +1 -0
  12. package/dist/overlap-checker-CVkbbuEQ.js +187 -0
  13. package/dist/overlap-checker-CVkbbuEQ.js.map +1 -0
  14. package/dist/postgres-DE-XyNAQ.js +823 -0
  15. package/dist/postgres-DE-XyNAQ.js.map +1 -0
  16. package/dist/postgres-D_gwCHx-.d.ts +108 -0
  17. package/dist/postgres-D_gwCHx-.d.ts.map +1 -0
  18. package/dist/query-CbQLjeME.js +713 -0
  19. package/dist/query-CbQLjeME.js.map +1 -0
  20. package/dist/realtime_db-D9p2X2PH.js +246 -0
  21. package/dist/realtime_db-D9p2X2PH.js.map +1 -0
  22. package/dist/router-DlTYWpop.js +81 -0
  23. package/dist/router-DlTYWpop.js.map +1 -0
  24. package/dist/schema-SKcIWHfo.js +167 -0
  25. package/dist/schema-SKcIWHfo.js.map +1 -0
  26. package/dist/src/client/index.d.ts +2 -17
  27. package/dist/src/client/index.js +1151 -18
  28. package/dist/src/client/index.js.map +1 -1
  29. package/dist/src/exports/mysql.d.ts +2 -2
  30. package/dist/src/exports/mysql.js +2 -2
  31. package/dist/src/exports/postgres.d.ts +2 -2
  32. package/dist/src/exports/postgres.js +2 -2
  33. package/dist/src/exports/procedure.d.ts +3 -5
  34. package/dist/src/exports/procedure.js +5 -5
  35. package/dist/src/exports/server.d.ts +368 -2
  36. package/dist/src/exports/server.d.ts.map +1 -1
  37. package/dist/src/exports/server.js +1346 -2
  38. package/dist/src/exports/server.js.map +1 -1
  39. package/dist/src/exports/subscription-manager-worker-entry.d.ts +1 -0
  40. package/dist/src/exports/subscription-manager-worker-entry.js +115 -0
  41. package/dist/src/exports/subscription-manager-worker-entry.js.map +1 -0
  42. package/dist/src/exports/types.d.ts +4 -6
  43. package/dist/src/exports/types.js +5 -6
  44. package/dist/subscription-worker-BurdPO8d.js +511 -0
  45. package/dist/subscription-worker-BurdPO8d.js.map +1 -0
  46. package/dist/types_client_rpc-CIsjQQGG.js +105 -0
  47. package/dist/types_client_rpc-CIsjQQGG.js.map +1 -0
  48. package/dist/types_db-Ctf-ksoy.js +168 -0
  49. package/dist/types_db-Ctf-ksoy.js.map +1 -0
  50. package/dist/types_server-Ch56y8L3.d.ts +216 -0
  51. package/dist/types_server-Ch56y8L3.d.ts.map +1 -0
  52. package/dist/types_server-Dk6o_B7N.js +24 -0
  53. package/dist/types_server-Dk6o_B7N.js.map +1 -0
  54. package/package.json +3 -3
  55. package/dist/src/client/caller_client.d.ts +0 -42
  56. package/dist/src/client/caller_client.d.ts.map +0 -1
  57. package/dist/src/client/caller_client.js +0 -77
  58. package/dist/src/client/caller_client.js.map +0 -1
  59. package/dist/src/client/client.d.ts +0 -149
  60. package/dist/src/client/client.d.ts.map +0 -1
  61. package/dist/src/client/client.js +0 -308
  62. package/dist/src/client/client.js.map +0 -1
  63. package/dist/src/client/index.d.ts.map +0 -1
  64. package/dist/src/client/sub_key.d.ts +0 -20
  65. package/dist/src/client/sub_key.d.ts.map +0 -1
  66. package/dist/src/client/sub_key.js +0 -37
  67. package/dist/src/client/sub_key.js.map +0 -1
  68. package/dist/src/client/ws_client_manager.d.ts +0 -268
  69. package/dist/src/client/ws_client_manager.d.ts.map +0 -1
  70. package/dist/src/client/ws_client_manager.js +0 -1013
  71. package/dist/src/client/ws_client_manager.js.map +0 -1
  72. package/dist/src/config.d.ts +0 -117
  73. package/dist/src/config.d.ts.map +0 -1
  74. package/dist/src/config.js +0 -2
  75. package/dist/src/config.js.map +0 -1
  76. package/dist/src/db/bytes.d.ts +0 -4
  77. package/dist/src/db/bytes.d.ts.map +0 -1
  78. package/dist/src/db/bytes.js +0 -24
  79. package/dist/src/db/bytes.js.map +0 -1
  80. package/dist/src/db/cache.d.ts +0 -30
  81. package/dist/src/db/cache.d.ts.map +0 -1
  82. package/dist/src/db/cache.js +0 -153
  83. package/dist/src/db/cache.js.map +0 -1
  84. package/dist/src/db/codec.d.ts +0 -10
  85. package/dist/src/db/codec.d.ts.map +0 -1
  86. package/dist/src/db/codec.js +0 -73
  87. package/dist/src/db/codec.js.map +0 -1
  88. package/dist/src/db/context.d.ts +0 -28
  89. package/dist/src/db/context.d.ts.map +0 -1
  90. package/dist/src/db/context.js +0 -147
  91. package/dist/src/db/context.js.map +0 -1
  92. package/dist/src/db/db.d.ts +0 -154
  93. package/dist/src/db/db.d.ts.map +0 -1
  94. package/dist/src/db/db.js +0 -23
  95. package/dist/src/db/db.js.map +0 -1
  96. package/dist/src/db/mysql.d.ts +0 -120
  97. package/dist/src/db/mysql.d.ts.map +0 -1
  98. package/dist/src/db/mysql.js +0 -708
  99. package/dist/src/db/mysql.js.map +0 -1
  100. package/dist/src/db/postgres.d.ts +0 -116
  101. package/dist/src/db/postgres.d.ts.map +0 -1
  102. package/dist/src/db/postgres.js +0 -998
  103. package/dist/src/db/postgres.js.map +0 -1
  104. package/dist/src/db/query.d.ts +0 -174
  105. package/dist/src/db/query.d.ts.map +0 -1
  106. package/dist/src/db/query.js +0 -790
  107. package/dist/src/db/query.js.map +0 -1
  108. package/dist/src/db/query_definition.d.ts +0 -54
  109. package/dist/src/db/query_definition.d.ts.map +0 -1
  110. package/dist/src/db/query_definition.js +0 -47
  111. package/dist/src/db/query_definition.js.map +0 -1
  112. package/dist/src/db/realtime_db.d.ts +0 -19
  113. package/dist/src/db/realtime_db.d.ts.map +0 -1
  114. package/dist/src/db/realtime_db.js +0 -98
  115. package/dist/src/db/realtime_db.js.map +0 -1
  116. package/dist/src/db/schema.d.ts +0 -110
  117. package/dist/src/db/schema.d.ts.map +0 -1
  118. package/dist/src/db/schema.js +0 -47
  119. package/dist/src/db/schema.js.map +0 -1
  120. package/dist/src/db/types_client_rpc.d.ts +0 -157
  121. package/dist/src/db/types_client_rpc.d.ts.map +0 -1
  122. package/dist/src/db/types_client_rpc.js +0 -106
  123. package/dist/src/db/types_client_rpc.js.map +0 -1
  124. package/dist/src/db/types_db.d.ts +0 -236
  125. package/dist/src/db/types_db.d.ts.map +0 -1
  126. package/dist/src/db/types_db.js +0 -188
  127. package/dist/src/db/types_db.js.map +0 -1
  128. package/dist/src/exports/mysql.d.ts.map +0 -1
  129. package/dist/src/exports/mysql.js.map +0 -1
  130. package/dist/src/exports/postgres.d.ts.map +0 -1
  131. package/dist/src/exports/postgres.js.map +0 -1
  132. package/dist/src/exports/procedure.d.ts.map +0 -1
  133. package/dist/src/exports/procedure.js.map +0 -1
  134. package/dist/src/exports/types.d.ts.map +0 -1
  135. package/dist/src/exports/types.js.map +0 -1
  136. package/dist/src/helper.d.ts +0 -11
  137. package/dist/src/helper.d.ts.map +0 -1
  138. package/dist/src/helper.js +0 -45
  139. package/dist/src/helper.js.map +0 -1
  140. package/dist/src/logger.d.ts +0 -7
  141. package/dist/src/logger.d.ts.map +0 -1
  142. package/dist/src/logger.js +0 -45
  143. package/dist/src/logger.js.map +0 -1
  144. package/dist/src/router/index.d.ts +0 -4
  145. package/dist/src/router/index.d.ts.map +0 -1
  146. package/dist/src/router/index.js +0 -4
  147. package/dist/src/router/index.js.map +0 -1
  148. package/dist/src/router/procedure.d.ts +0 -204
  149. package/dist/src/router/procedure.d.ts.map +0 -1
  150. package/dist/src/router/procedure.js +0 -122
  151. package/dist/src/router/procedure.js.map +0 -1
  152. package/dist/src/router/router.d.ts +0 -88
  153. package/dist/src/router/router.d.ts.map +0 -1
  154. package/dist/src/router/router.js +0 -88
  155. package/dist/src/router/router.js.map +0 -1
  156. package/dist/src/server/hash.d.ts +0 -12
  157. package/dist/src/server/hash.d.ts.map +0 -1
  158. package/dist/src/server/hash.js +0 -20
  159. package/dist/src/server/hash.js.map +0 -1
  160. package/dist/src/server/hash.test.d.ts +0 -2
  161. package/dist/src/server/hash.test.d.ts.map +0 -1
  162. package/dist/src/server/hash.test.js +0 -43
  163. package/dist/src/server/hash.test.js.map +0 -1
  164. package/dist/src/server/index.d.ts +0 -8
  165. package/dist/src/server/index.d.ts.map +0 -1
  166. package/dist/src/server/index.js +0 -7
  167. package/dist/src/server/index.js.map +0 -1
  168. package/dist/src/server/overlap-checker.d.ts +0 -18
  169. package/dist/src/server/overlap-checker.d.ts.map +0 -1
  170. package/dist/src/server/overlap-checker.js +0 -247
  171. package/dist/src/server/overlap-checker.js.map +0 -1
  172. package/dist/src/server/sub_hash.d.ts +0 -23
  173. package/dist/src/server/sub_hash.d.ts.map +0 -1
  174. package/dist/src/server/sub_hash.js +0 -38
  175. package/dist/src/server/sub_hash.js.map +0 -1
  176. package/dist/src/server/subscription-manager-client.d.ts +0 -120
  177. package/dist/src/server/subscription-manager-client.d.ts.map +0 -1
  178. package/dist/src/server/subscription-manager-client.js +0 -207
  179. package/dist/src/server/subscription-manager-client.js.map +0 -1
  180. package/dist/src/server/subscription-manager-types.d.ts +0 -168
  181. package/dist/src/server/subscription-manager-types.d.ts.map +0 -1
  182. package/dist/src/server/subscription-manager-types.js +0 -94
  183. package/dist/src/server/subscription-manager-types.js.map +0 -1
  184. package/dist/src/server/subscription-manager-worker-entry.d.ts +0 -2
  185. package/dist/src/server/subscription-manager-worker-entry.d.ts.map +0 -1
  186. package/dist/src/server/subscription-manager-worker-entry.js +0 -127
  187. package/dist/src/server/subscription-manager-worker-entry.js.map +0 -1
  188. package/dist/src/server/subscription-manager-worker-protocol.d.ts +0 -40
  189. package/dist/src/server/subscription-manager-worker-protocol.d.ts.map +0 -1
  190. package/dist/src/server/subscription-manager-worker-protocol.js +0 -20
  191. package/dist/src/server/subscription-manager-worker-protocol.js.map +0 -1
  192. package/dist/src/server/subscription-manager.d.ts +0 -32
  193. package/dist/src/server/subscription-manager.d.ts.map +0 -1
  194. package/dist/src/server/subscription-manager.js +0 -249
  195. package/dist/src/server/subscription-manager.js.map +0 -1
  196. package/dist/src/server/subscription-manager.test.d.ts +0 -2
  197. package/dist/src/server/subscription-manager.test.d.ts.map +0 -1
  198. package/dist/src/server/subscription-manager.test.js +0 -610
  199. package/dist/src/server/subscription-manager.test.js.map +0 -1
  200. package/dist/src/server/subscription-worker.d.ts +0 -32
  201. package/dist/src/server/subscription-worker.d.ts.map +0 -1
  202. package/dist/src/server/subscription-worker.js +0 -190
  203. package/dist/src/server/subscription-worker.js.map +0 -1
  204. package/dist/src/server/supalive-server.d.ts +0 -158
  205. package/dist/src/server/supalive-server.d.ts.map +0 -1
  206. package/dist/src/server/supalive-server.js +0 -1048
  207. package/dist/src/server/supalive-server.js.map +0 -1
  208. package/dist/src/server/types_server.d.ts +0 -96
  209. package/dist/src/server/types_server.d.ts.map +0 -1
  210. package/dist/src/server/types_server.js +0 -36
  211. package/dist/src/server/types_server.js.map +0 -1
  212. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,147 +0,0 @@
1
- import { z } from "zod";
2
- import { normalizeCodec, unwrapZodType } from "./codec";
3
- import { QueryBuilder } from "./query";
4
- export class TxContext {
5
- beginTs;
6
- db;
7
- readSet = [];
8
- writeSet = [];
9
- models = new Map();
10
- getOrCreateModel(schema) {
11
- const existing = this.models.get(schema.table);
12
- if (existing)
13
- return existing;
14
- const shape = schema.schema.shape;
15
- const customColumns = schema.columns;
16
- const columns = {};
17
- const types = {};
18
- const codecs = {};
19
- const schemaCodecs = schema.columnsOptions.codecs ?? {};
20
- for (const key of Object.keys(shape)) {
21
- columns[key] = customColumns?.[key] ?? key;
22
- const field = shape[key];
23
- const baseField = unwrapZodType(field);
24
- if (baseField instanceof z.ZodNumber) {
25
- types[key] = "integer";
26
- }
27
- else if (baseField instanceof z.ZodString) {
28
- types[key] = "string";
29
- }
30
- else if (baseField instanceof z.ZodBoolean) {
31
- types[key] = "boolean";
32
- }
33
- else if (baseField instanceof z.ZodArray) {
34
- types[key] = "array";
35
- }
36
- else {
37
- types[key] = "json";
38
- }
39
- codecs[key] = normalizeCodec(schemaCodecs[key], baseField);
40
- }
41
- const model = {
42
- table: schema.table,
43
- tableId: schema.tableId,
44
- columns,
45
- reverseColumns: Object.fromEntries(Object.entries(columns).map(([k, v]) => [v, k])),
46
- types,
47
- codecs,
48
- };
49
- this.models.set(schema.table, model);
50
- return model;
51
- }
52
- constructor(db, beginTs) {
53
- this.db = db;
54
- this.beginTs = beginTs;
55
- }
56
- internalGetReadSet() { return this.readSet; }
57
- internalGetWriteSet() { return this.writeSet; }
58
- findPendingWrite(table, id) {
59
- return this.writeSet.find(w => w.table === table && w.id === id);
60
- }
61
- findPendingInsert(table, id) {
62
- return this.writeSet.find(w => w.table === table && w.id === id && w.op === "insert");
63
- }
64
- encodeWithCodec(model, property, value) {
65
- const codec = model.codecs[property];
66
- if (!codec?.encode || value === undefined || value === null)
67
- return value;
68
- return codec.encode(value);
69
- }
70
- }
71
- export class DbReader extends TxContext {
72
- query(schema) {
73
- const model = this.getOrCreateModel(schema);
74
- return new QueryBuilder(this, model);
75
- }
76
- }
77
- export class DbWriter extends DbReader {
78
- async insert(schema, id, data) {
79
- const model = this.getOrCreateModel(schema);
80
- const mappedData = { id };
81
- const shape = schema.schema.shape;
82
- for (const key of Object.keys(shape)) {
83
- let value = data[key];
84
- if (value === undefined) {
85
- const field = shape[key];
86
- if (field instanceof z.ZodDefault) {
87
- const defaultVal = field.def.defaultValue;
88
- value = (typeof defaultVal === "function" ? defaultVal() : defaultVal);
89
- if (value !== undefined) {
90
- const columnName = model.columns[key] ?? key;
91
- mappedData[columnName] = this.encodeWithCodec(model, key, value);
92
- }
93
- }
94
- }
95
- else {
96
- const columnName = model.columns[key] ?? key;
97
- mappedData[columnName] = this.encodeWithCodec(model, key, value);
98
- }
99
- }
100
- // ensure id same
101
- mappedData["id"] = id;
102
- // Check for existing pending write for the same ID
103
- const existing = this.findPendingWrite(schema.table, id);
104
- if (existing) {
105
- if (existing.op === "delete") {
106
- // If there's a pending delete, change it to an update with the new data
107
- existing.op = "update";
108
- existing.data = mappedData;
109
- }
110
- else {
111
- // If there's a pending update or same insert with the same ID , merge the new data
112
- existing.data = { ...existing.data, ...mappedData };
113
- }
114
- }
115
- else {
116
- this.writeSet.push({ table: schema.table, tableId: schema.tableId, id: id, op: "insert", data: mappedData });
117
- }
118
- }
119
- async update(schema, id, data) {
120
- const model = this.getOrCreateModel(schema);
121
- const mappedData = {};
122
- for (const [key, value] of Object.entries(data)) {
123
- const columnName = model.columns[key] ?? key;
124
- mappedData[columnName] = this.encodeWithCodec(model, key, value);
125
- }
126
- const existing = this.findPendingWrite(schema.table, id);
127
- if (existing) {
128
- existing.op = existing.op === "insert" ? "insert" : "update";
129
- existing.data = { ...existing.data, ...mappedData };
130
- }
131
- else {
132
- // expectedTs will be filled by the committer via batch fetch if not known yet
133
- this.writeSet.push({ table: schema.table, tableId: schema.tableId, id, op: "update", data: mappedData });
134
- }
135
- }
136
- async delete(schema, id) {
137
- // If there's a pending insert for the same ID, remove it instead of adding a delete
138
- const existingInsert = this.findPendingInsert(schema.table, id);
139
- if (existingInsert) {
140
- this.writeSet = this.writeSet.filter(w => w !== existingInsert);
141
- return;
142
- }
143
- // expectedTs will be filled by the committer via batch fetch if not known yet
144
- this.writeSet.push({ table: schema.table, tableId: schema.tableId, id, op: "delete" });
145
- }
146
- }
147
- //# sourceMappingURL=context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/db/context.ts"],"names":[],"mappings":"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"}
@@ -1,154 +0,0 @@
1
- import { CacheLayer } from "../server";
2
- import type { CommitLogEntry, PointRead, RawReadEntry } from "./types_db";
3
- import { ReadEntry, WriteEntry } from "./types_db";
4
- export interface DbQueryResult<T = any> {
5
- rows: T[];
6
- rowCount?: number | null;
7
- }
8
- export interface RawClient {
9
- query<T = any>(sql: string, params?: unknown[]): Promise<DbQueryResult<T>>;
10
- }
11
- export interface PooledClient extends RawClient {
12
- release(): void;
13
- }
14
- export type DbType = "postgres" | "mysql";
15
- export interface PendingPointEntry {
16
- entry: PointRead;
17
- key: string;
18
- }
19
- export interface PreparedQuery {
20
- sql: string;
21
- params: unknown[] | unknown[][];
22
- operation: "insertSingle" | "insertBatch" | "updateSingle" | "updateBatch" | "deleteSingle" | "deleteBatch" | "pointReadValidation" | "commit_logs";
23
- table: string;
24
- entryId?: unknown;
25
- expectedTs?: bigint;
26
- entries?: WriteEntry[];
27
- pendingsEntry?: PendingPointEntry[];
28
- }
29
- export interface PreparedQueries {
30
- commits: PreparedQuery[];
31
- validateReadPoints?: PreparedQuery[];
32
- hasRangeRead: boolean;
33
- tableIds?: Uint8Array[];
34
- rawReadSet?: RawReadEntry[];
35
- }
36
- export interface Database {
37
- readonly dbType: DbType;
38
- readonly sqlBuilder: SqlBuilder;
39
- columnTypes: Map<string, Map<string, string>>;
40
- migrationSql: string[];
41
- bootstrapColumnTypes(opts: {
42
- redis?: CacheLayer;
43
- cacheKey: string;
44
- tables?: string[];
45
- }): Promise<void>;
46
- query<T = any>(sql: string, params?: unknown[]): Promise<DbQueryResult<T>>;
47
- getClient(): Promise<PooledClient>;
48
- getTransactionClient(): Promise<TxDatabase>;
49
- getLatestSnapshotTimestamp(): Promise<bigint>;
50
- updateLatestSnapshotTimestamp(commitTs: bigint): Promise<void>;
51
- getNextTimestamp(): Promise<bigint>;
52
- prepareCommitWrites(readSet: ReadEntry[], writeSet: WriteEntry[], commitTs: LazyCommitTsParam): Promise<PreparedQueries>;
53
- commitWrites(beginTs: bigint, queries: PreparedQueries, commitTs: bigint): Promise<{
54
- success: boolean;
55
- }>;
56
- close(): Promise<void>;
57
- /**
58
- * Delete commit_logs older than `ts` (exclusive). Used by the periodic
59
- * retention sweep in SubscriptionManager so the table doesn't grow
60
- * unbounded.
61
- */
62
- pruneCommitLogsBefore(ts: bigint): Promise<bigint>;
63
- /**
64
- * Half-open range scan: ts >= beginTs AND ts < endTs. Used by the
65
- * subscription-recovery path to replay logs in a specific time window.
66
- */
67
- getCommitLogsBetweenTs(beginTs: bigint, endTs: bigint, tableIds: Uint8Array[]): Promise<CommitLogEntry[]>;
68
- /**
69
- * Conflict-check scan for OCC: ts >= sinceTs AND ts <> excludeTs. The
70
- * exclude is our own commitTs so we don't conflict with ourselves; the
71
- * lack of an upper bound is intentional, so a concurrent peer that
72
- * happens to have a higher commitTs but committed before us is still
73
- * visible. (MVCC keeps in-flight peers invisible until they commit.)
74
- */
75
- getCommitLogsSinceTs(sinceTs: bigint, excludeTs: bigint, tableIds: Uint8Array[]): Promise<CommitLogEntry[]>;
76
- /**
77
- * For each `update`/`delete` entry, attach `prevData` (consumed by the
78
- * invalidator) and `expectedCommitTs` (the CAS fence).
79
- *
80
- * `expectedCommitTs` is preferentially copied from a prior point-read of
81
- * the same row in `readSet` — that's the value the handler's logic
82
- * actually depended on, so the CAS check enforces beginTs-level isolation
83
- * for read-then-update patterns. If no prior read exists ("blind"
84
- * write), we fall back to the value observed in this batch fetch (weak
85
- * OCC, sufficient for writes that don't depend on prior state).
86
- *
87
- * `prevData` always comes from this batch fetch (SELECT * per table) so
88
- * the invalidator has the full row regardless of which columns the
89
- * handler's read selected.
90
- *
91
- * If the target row no longer exists at fetch time, `expectedCommitTs`
92
- * is left undefined and the per-row CAS will match nothing — surfaced
93
- * as OccConflictError.
94
- */
95
- attachPrevDataToWriteSet(writeSet: WriteEntry[], readSet: ReadEntry[]): Promise<void>;
96
- }
97
- export interface TxDatabase extends Database {
98
- begin(): Promise<void>;
99
- commit(): Promise<void>;
100
- rollback(): Promise<void>;
101
- release(): void;
102
- }
103
- export interface JsonOpOptions {
104
- /**
105
- * When true, the bound `value` parameter is treated as already prepared
106
- * for the underlying SQL (e.g. a literal JSON path string for
107
- * jsonHasKey, a JSON-encoded literal for the contains family). When
108
- * false/omitted, the value was prepared client-side from a JS value.
109
- */
110
- raw?: boolean;
111
- /**
112
- * 1-based positional index of an extra bound parameter holding a
113
- * jsonpath that scopes the contains-family check to a sub-document of
114
- * the target column. When omitted, the check runs against the whole
115
- * column value.
116
- */
117
- pathIndex?: number;
118
- /**
119
- * jsonHasKey only: when set, multiple path parameters are bound starting
120
- * at `paramIndex`, and the predicate evaluates whether any (`one`) or
121
- * every (`all`) path exists in the column.
122
- */
123
- mode?: "one" | "all";
124
- /** Number of bound path parameters in multi-path mode. */
125
- pathCount?: number;
126
- }
127
- export interface SqlBuilder {
128
- placeholder(index: number): string;
129
- like(col: string, paramIndex: number): string;
130
- ilike(col: string, paramIndex: number): string;
131
- icontains(col: string, paramIndex: number): string;
132
- /** PG @> ; MySQL JSON_CONTAINS */
133
- jsonContains(col: string, paramIndex: number, opts?: JsonOpOptions): string;
134
- /** PG <@ ; MySQL JSON_CONTAINS(candidate, target) */
135
- jsonContainedBy(col: string, paramIndex: number, opts?: JsonOpOptions): string;
136
- /**
137
- * Key/path existence. With `opts.raw === true`, the bound param is a JSON
138
- * path expression (PG `jsonb_path_exists`, MySQL `JSON_CONTAINS_PATH`).
139
- * Otherwise the bound param is a literal top-level key (PG `?`, MySQL
140
- * `JSON_CONTAINS_PATH($."<key>")` with server-side quoting).
141
- * With `opts.pathCount` set, emits the multi-path form keyed by `mode`.
142
- */
143
- jsonHasKey(col: string, paramIndex: number, opts?: JsonOpOptions): string;
144
- /** Array membership: target array contains the given element. */
145
- jsonArrayContains(col: string, paramIndex: number, opts?: JsonOpOptions): string;
146
- }
147
- export declare class LazyCommitTsParam {
148
- value: unknown;
149
- constructor(value: unknown);
150
- toPostgres(prepareValue: (value: any) => any): any;
151
- toString(): any;
152
- validate(): void;
153
- }
154
- //# sourceMappingURL=db.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../src/db/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAgB,YAAY,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,GAAG;IACpC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC7C,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;AAE1C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,SAAS,CAAC;IAEjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC;IAChC,SAAS,EAAE,cAAc,GAAG,aAAa,GAAG,cAAc,GAAG,aAAa,GAAG,cAAc,GAAG,aAAa,GAAG,qBAAqB,GAAG,aAAa,CAAC;IACpJ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,kBAAkB,CAAC,EAAE,aAAa,EAAE,CAAC;IACrC,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oBAAoB,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxG,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IACnC,oBAAoB,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACzH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACzG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD;;;OAGG;IACH,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC1G;;;;;;OAMG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC5G;;;;;;;;;;;;;;;;;;OAkBG;IACH,wBAAwB,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvF;AAED,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACrB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9C,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IACnD,kCAAkC;IAClC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;IAC5E,qDAAqD;IACrD,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;IAC/E;;;;;;OAMG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;IAC1E,iEAAiE;IACjE,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;CAClF;AAED,qBAAa,iBAAiB;IACT,KAAK,EAAE,OAAO;gBAAd,KAAK,EAAE,OAAO;IAGjC,UAAU,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG;IAKlD,QAAQ;IAIR,QAAQ;CAOT"}
package/dist/src/db/db.js DELETED
@@ -1,23 +0,0 @@
1
- ;
2
- export class LazyCommitTsParam {
3
- value;
4
- constructor(value) {
5
- this.value = value;
6
- }
7
- // used by postgres
8
- toPostgres(prepareValue) {
9
- return prepareValue(this.value);
10
- }
11
- // used by mysql
12
- toString() {
13
- return this.value.toString();
14
- }
15
- validate() {
16
- const p = new LazyCommitTsParam(undefined);
17
- const hasNotObjConstructor = p.constructor !== Object;
18
- const hasNotToJSON = typeof p.toJSON !== 'function';
19
- console.log('constructor must not object', hasNotObjConstructor);
20
- console.log('should not have toJSON', hasNotToJSON);
21
- }
22
- }
23
- //# sourceMappingURL=db.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/db/db.ts"],"names":[],"mappings":"AAkCC,CAAC;AAuHF,MAAM,OAAO,iBAAiB;IACT;IAAnB,YAAmB,KAAc;QAAd,UAAK,GAAL,KAAK,CAAS;IAAI,CAAC;IAEtC,mBAAmB;IACnB,UAAU,CAAC,YAAiC;QAC1C,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,gBAAgB;IAChB,QAAQ;QACN,OAAQ,IAAI,CAAC,KAAa,CAAC,QAAQ,EAAE,CAAC;IACxC,CAAC;IAED,QAAQ;QACN,MAAM,CAAC,GAAG,IAAI,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC;QACtD,MAAM,YAAY,GAAG,OAAQ,CAAS,CAAC,MAAM,KAAK,UAAU,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,oBAAoB,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,YAAY,CAAC,CAAC;IACtD,CAAC;CACF"}
@@ -1,120 +0,0 @@
1
- import { Pool, PoolConnection, PoolOptions } from "mysql2/promise";
2
- import { Database, DbQueryResult, DbType, LazyCommitTsParam, PooledClient, PreparedQueries, SqlBuilder, TxDatabase } from "./db";
3
- import { CommitLogEntry, ReadEntry, WriteEntry } from "./types_db";
4
- import { CacheLayer } from "../server";
5
- import { Logger } from "pino";
6
- interface QueryConnection {
7
- query(opts: {
8
- sql: string;
9
- timeout?: number;
10
- values?: unknown[];
11
- }): Promise<[any[], unknown]>;
12
- query(sql: string, params?: unknown[]): Promise<[any[], unknown]>;
13
- }
14
- /**
15
- * mysql2's PoolOptions does not have a per-statement timeout field; we
16
- * carry our own. Set 0 to disable.
17
- */
18
- export type MySqlPoolOptions = PoolOptions & {
19
- queryTimeoutMs?: number;
20
- };
21
- export declare class MySqlDatabase implements Database {
22
- constructor(logger: Logger, config: MySqlPoolOptions, pool?: Pool | undefined);
23
- private logger;
24
- config: PoolOptions;
25
- protected queryTimeoutMs: number;
26
- private pool;
27
- readonly dbType: DbType;
28
- readonly sqlBuilder: SqlBuilder;
29
- columnTypes: Map<string, Map<string, string>>;
30
- protected sqlCache: Map<string, string>;
31
- /**
32
- * Fetches actual column types from MySQL for `table` and returns a
33
- * map of DB column name → MySQL type string (as produced by `COLUMN_TYPE`,
34
- * e.g. `bigint`, `integer`, `varchar(32)`, `text`, `json`).
35
- * No caching here — see {@link getColumnTypes} for the cached path.
36
- */
37
- loadColumnTypesFromMySql(table: string): Promise<Map<string, string>>;
38
- /**
39
- * Synchronous column-type lookup. The apply path calls this on every
40
- * batched write, so it can't await — populate the cache via
41
- * {@link bootstrapColumnTypes} at server start. Throws if `table` is
42
- * missing (programmer error / bootstrap skipped).
43
- */
44
- getColumnTypes(table: string): Map<string, string> | null;
45
- /**
46
- * Eagerly load column types into the in-memory cache. With a Redis
47
- * client supplied, attempts the cache key first and falls through to
48
- * MySQL on miss (writing the result back to Redis). This is the
49
- * "one server queries MySQL, the rest read from Redis" pattern for cold
50
- * starts in a multi-instance deploy. Without Redis, always queries MySQL.
51
- *
52
- * Pass `tables` to limit the load to a specific list; otherwise every
53
- * user table in the connected database is loaded.
54
- *
55
- * The Redis cache key should encode whatever invalidates types in your
56
- * environment (typically a schema version / deploy version). The
57
- * subscriber in supalive-server.ts is expected to publish a reload
58
- * signal after migrations and invoke {@link invalidateColumnTypes}.
59
- */
60
- bootstrapColumnTypes(opts: {
61
- redis?: CacheLayer;
62
- cacheKey: string;
63
- tables?: string[];
64
- }): Promise<void>;
65
- /**
66
- * Invalidate cached types (and dependent SQL) for `table`, or the entire
67
- * cache if `table` is omitted. The Redis-pubsub reload signal in
68
- * supalive-server.ts is expected to call this on schema changes.
69
- */
70
- invalidateColumnTypes(table?: string): void;
71
- /** Replace this instance's caches with shared references from a parent.
72
- * Used by getTransactionClient so types loaded once at startup are
73
- * visible inside transactions. */
74
- adoptCaches(columnTypes: Map<string, Map<string, string>>, sqlCache: Map<string, string>): void;
75
- /** Enumerate the user-defined tables in the connected database for mysql — used
76
- * by bootstrapColumnTypes() when no explicit list is provided. */
77
- private listUserTables;
78
- migrationSql: string[];
79
- query<T = any>(sql: string, params?: unknown[]): Promise<DbQueryResult<T>>;
80
- getClient(): Promise<PooledClient>;
81
- getTransactionClient(): Promise<TxDatabase>;
82
- getLatestSnapshotTimestamp(): Promise<bigint>;
83
- updateLatestSnapshotTimestamp(commitTs: bigint): Promise<void>;
84
- getNextTimestamp(): Promise<bigint>;
85
- attachPrevDataToWriteSet(writeSet: WriteEntry[], readSet: ReadEntry[]): Promise<void>;
86
- prepareCommitWrites(readSet: ReadEntry[], writeSet: WriteEntry[], commitTs: LazyCommitTsParam): Promise<PreparedQueries>;
87
- private mysqlPrepareBatchWrites;
88
- private mysqlPrepareInsertBatch;
89
- private mysqlPrepareUpdateSingle;
90
- private mysqlPrepareDeleteBatch;
91
- private mysqlPrepareCommitLogs;
92
- /**
93
- * Point-only OCC check. For each genuine point read, compare the row's
94
- * current commit_ts against the value captured at read time. A `null`
95
- * expectedCommitTs means "row didn't exist when we read"; any row found
96
- * now is a conflict. Reads whose row is being written in this same txn
97
- * are skipped — the CAS UPDATE/DELETE already validated those.
98
- */
99
- private mysqlPrepareValidatePointReadsByCommitTs;
100
- commitWrites(beginTs: bigint, queries: PreparedQueries, commitTs: bigint): Promise<{
101
- success: boolean;
102
- }>;
103
- private mysqlApplyWrites;
104
- private validatePointReadsByCommitTs;
105
- pruneCommitLogsBefore(ts: bigint): Promise<bigint>;
106
- getCommitLogsBetweenTs(beginTs: bigint, endTs: bigint, tableIds: Uint8Array[]): Promise<CommitLogEntry[]>;
107
- getCommitLogsSinceTs(sinceTs: bigint, excludeTs: bigint, tableIds: Uint8Array[]): Promise<CommitLogEntry[]>;
108
- close(): Promise<void>;
109
- }
110
- export declare class MySqlTxDatabase extends MySqlDatabase {
111
- constructor(logger: Logger, config: MySqlPoolOptions, pool: Pool, client: PoolConnection & QueryConnection);
112
- private client;
113
- query<T = any>(sql: string, params?: unknown[]): Promise<DbQueryResult<T>>;
114
- begin(): Promise<void>;
115
- commit(): Promise<void>;
116
- rollback(): Promise<void>;
117
- release(): void;
118
- }
119
- export {};
120
- //# sourceMappingURL=mysql.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../../src/db/mysql.ts"],"names":[],"mappings":"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"}