solid-objects 0.12.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 (187) hide show
  1. package/CHANGELOG.md +110 -0
  2. package/MIT-LICENSE +19 -0
  3. package/README.md +958 -0
  4. package/dist/actor.d.ts +81 -0
  5. package/dist/actor.d.ts.map +1 -0
  6. package/dist/actor.js +141 -0
  7. package/dist/actor.js.map +1 -0
  8. package/dist/application-database.d.ts +3 -0
  9. package/dist/application-database.d.ts.map +1 -0
  10. package/dist/application-database.js +59 -0
  11. package/dist/application-database.js.map +1 -0
  12. package/dist/broadcast-worker.d.ts +18 -0
  13. package/dist/broadcast-worker.d.ts.map +1 -0
  14. package/dist/broadcast-worker.js +74 -0
  15. package/dist/broadcast-worker.js.map +1 -0
  16. package/dist/browser/components.d.ts +64 -0
  17. package/dist/browser/components.d.ts.map +1 -0
  18. package/dist/browser/components.js +294 -0
  19. package/dist/browser/components.js.map +1 -0
  20. package/dist/browser/index.d.ts +46 -0
  21. package/dist/browser/index.d.ts.map +1 -0
  22. package/dist/browser/index.js +207 -0
  23. package/dist/browser/index.js.map +1 -0
  24. package/dist/cli.d.ts +9 -0
  25. package/dist/cli.d.ts.map +1 -0
  26. package/dist/cli.js +216 -0
  27. package/dist/cli.js.map +1 -0
  28. package/dist/configuration.d.ts +96 -0
  29. package/dist/configuration.d.ts.map +1 -0
  30. package/dist/configuration.js +169 -0
  31. package/dist/configuration.js.map +1 -0
  32. package/dist/context.d.ts +20 -0
  33. package/dist/context.d.ts.map +1 -0
  34. package/dist/context.js +24 -0
  35. package/dist/context.js.map +1 -0
  36. package/dist/database/deadline.d.ts +9 -0
  37. package/dist/database/deadline.d.ts.map +1 -0
  38. package/dist/database/deadline.js +49 -0
  39. package/dist/database/deadline.js.map +1 -0
  40. package/dist/database/mysql.d.ts +21 -0
  41. package/dist/database/mysql.d.ts.map +1 -0
  42. package/dist/database/mysql.js +192 -0
  43. package/dist/database/mysql.js.map +1 -0
  44. package/dist/database/postgresql-sql.d.ts +2 -0
  45. package/dist/database/postgresql-sql.d.ts.map +1 -0
  46. package/dist/database/postgresql-sql.js +102 -0
  47. package/dist/database/postgresql-sql.js.map +1 -0
  48. package/dist/database/postgresql.d.ts +31 -0
  49. package/dist/database/postgresql.d.ts.map +1 -0
  50. package/dist/database/postgresql.js +172 -0
  51. package/dist/database/postgresql.js.map +1 -0
  52. package/dist/database/sqlite.d.ts +27 -0
  53. package/dist/database/sqlite.d.ts.map +1 -0
  54. package/dist/database/sqlite.js +190 -0
  55. package/dist/database/sqlite.js.map +1 -0
  56. package/dist/database/transaction-context.d.ts +3 -0
  57. package/dist/database/transaction-context.d.ts.map +1 -0
  58. package/dist/database/transaction-context.js +19 -0
  59. package/dist/database/transaction-context.js.map +1 -0
  60. package/dist/database/types.d.ts +20 -0
  61. package/dist/database/types.d.ts.map +1 -0
  62. package/dist/database/types.js +2 -0
  63. package/dist/database/types.js.map +1 -0
  64. package/dist/dead-letters.d.ts +23 -0
  65. package/dist/dead-letters.d.ts.map +1 -0
  66. package/dist/dead-letters.js +13 -0
  67. package/dist/dead-letters.js.map +1 -0
  68. package/dist/default-runtime.d.ts +5 -0
  69. package/dist/default-runtime.d.ts.map +1 -0
  70. package/dist/default-runtime.js +14 -0
  71. package/dist/default-runtime.js.map +1 -0
  72. package/dist/definition.d.ts +32 -0
  73. package/dist/definition.d.ts.map +1 -0
  74. package/dist/definition.js +173 -0
  75. package/dist/definition.js.map +1 -0
  76. package/dist/doctor.d.ts +32 -0
  77. package/dist/doctor.d.ts.map +1 -0
  78. package/dist/doctor.js +500 -0
  79. package/dist/doctor.js.map +1 -0
  80. package/dist/effect-worker.d.ts +18 -0
  81. package/dist/effect-worker.d.ts.map +1 -0
  82. package/dist/effect-worker.js +74 -0
  83. package/dist/effect-worker.js.map +1 -0
  84. package/dist/errors.d.ts +145 -0
  85. package/dist/errors.d.ts.map +1 -0
  86. package/dist/errors.js +120 -0
  87. package/dist/errors.js.map +1 -0
  88. package/dist/executable.d.ts +3 -0
  89. package/dist/executable.d.ts.map +1 -0
  90. package/dist/executable.js +12 -0
  91. package/dist/executable.js.map +1 -0
  92. package/dist/index.d.ts +24 -0
  93. package/dist/index.d.ts.map +1 -0
  94. package/dist/index.js +21 -0
  95. package/dist/index.js.map +1 -0
  96. package/dist/maintenance-scheduler.d.ts +17 -0
  97. package/dist/maintenance-scheduler.d.ts.map +1 -0
  98. package/dist/maintenance-scheduler.js +41 -0
  99. package/dist/maintenance-scheduler.js.map +1 -0
  100. package/dist/process-administration.d.ts +30 -0
  101. package/dist/process-administration.d.ts.map +1 -0
  102. package/dist/process-administration.js +13 -0
  103. package/dist/process-administration.js.map +1 -0
  104. package/dist/realtime.d.ts +33 -0
  105. package/dist/realtime.d.ts.map +1 -0
  106. package/dist/realtime.js +238 -0
  107. package/dist/realtime.js.map +1 -0
  108. package/dist/reconciliation.d.ts +41 -0
  109. package/dist/reconciliation.d.ts.map +1 -0
  110. package/dist/reconciliation.js +19 -0
  111. package/dist/reconciliation.js.map +1 -0
  112. package/dist/records.d.ts +137 -0
  113. package/dist/records.d.ts.map +1 -0
  114. package/dist/records.js +2 -0
  115. package/dist/records.js.map +1 -0
  116. package/dist/reference.d.ts +97 -0
  117. package/dist/reference.d.ts.map +1 -0
  118. package/dist/reference.js +157 -0
  119. package/dist/reference.js.map +1 -0
  120. package/dist/reminder-administration.d.ts +35 -0
  121. package/dist/reminder-administration.d.ts.map +1 -0
  122. package/dist/reminder-administration.js +13 -0
  123. package/dist/reminder-administration.js.map +1 -0
  124. package/dist/reminder-scheduler.d.ts +18 -0
  125. package/dist/reminder-scheduler.d.ts.map +1 -0
  126. package/dist/reminder-scheduler.js +88 -0
  127. package/dist/reminder-scheduler.js.map +1 -0
  128. package/dist/repository.d.ts +142 -0
  129. package/dist/repository.d.ts.map +1 -0
  130. package/dist/repository.js +1237 -0
  131. package/dist/repository.js.map +1 -0
  132. package/dist/retention.d.ts +17 -0
  133. package/dist/retention.d.ts.map +1 -0
  134. package/dist/retention.js +13 -0
  135. package/dist/retention.js.map +1 -0
  136. package/dist/runtime.d.ts +140 -0
  137. package/dist/runtime.d.ts.map +1 -0
  138. package/dist/runtime.js +1737 -0
  139. package/dist/runtime.js.map +1 -0
  140. package/dist/schema.d.ts +8 -0
  141. package/dist/schema.d.ts.map +1 -0
  142. package/dist/schema.js +260 -0
  143. package/dist/schema.js.map +1 -0
  144. package/dist/serialization.d.ts +11 -0
  145. package/dist/serialization.d.ts.map +1 -0
  146. package/dist/serialization.js +82 -0
  147. package/dist/serialization.js.map +1 -0
  148. package/dist/test-helper.d.ts +15 -0
  149. package/dist/test-helper.d.ts.map +1 -0
  150. package/dist/test-helper.js +69 -0
  151. package/dist/test-helper.js.map +1 -0
  152. package/dist/types.d.ts +71 -0
  153. package/dist/types.d.ts.map +1 -0
  154. package/dist/types.js +2 -0
  155. package/dist/types.js.map +1 -0
  156. package/dist/version.d.ts +2 -0
  157. package/dist/version.d.ts.map +1 -0
  158. package/dist/version.js +2 -0
  159. package/dist/version.js.map +1 -0
  160. package/dist/wake-up/postgresql.d.ts +42 -0
  161. package/dist/wake-up/postgresql.d.ts.map +1 -0
  162. package/dist/wake-up/postgresql.js +234 -0
  163. package/dist/wake-up/postgresql.js.map +1 -0
  164. package/dist/wake-up/redis.d.ts +35 -0
  165. package/dist/wake-up/redis.d.ts.map +1 -0
  166. package/dist/wake-up/redis.js +151 -0
  167. package/dist/wake-up/redis.js.map +1 -0
  168. package/dist/wake-up.d.ts +24 -0
  169. package/dist/wake-up.d.ts.map +1 -0
  170. package/dist/wake-up.js +66 -0
  171. package/dist/wake-up.js.map +1 -0
  172. package/dist/worker.d.ts +36 -0
  173. package/dist/worker.d.ts.map +1 -0
  174. package/dist/worker.js +281 -0
  175. package/dist/worker.js.map +1 -0
  176. package/docs/api.md +197 -0
  177. package/docs/architecture.md +113 -0
  178. package/docs/authorization.md +31 -0
  179. package/docs/browser-protocol.md +93 -0
  180. package/docs/configuration.md +168 -0
  181. package/docs/correctness.md +53 -0
  182. package/docs/errors-and-recovery.md +89 -0
  183. package/docs/operations.md +170 -0
  184. package/docs/parity.md +94 -0
  185. package/docs/releasing.md +45 -0
  186. package/docs/state-and-lifecycle.md +162 -0
  187. package/package.json +100 -0
@@ -0,0 +1,21 @@
1
+ import type { Database, DatabaseConnection } from "./types.js";
2
+ export interface MySQLDatabaseOptions {
3
+ connectionString: string;
4
+ maximumConnections?: number;
5
+ idleTimeoutMilliseconds?: number;
6
+ queueLimit?: number;
7
+ }
8
+ export declare class MySQLDatabase implements Database {
9
+ readonly family: "mysql";
10
+ readonly schemaIdentity = "solid-objects-node-v1";
11
+ private readonly pool;
12
+ private closed;
13
+ constructor(options: MySQLDatabaseOptions);
14
+ connection<Result>(callback: (connection: DatabaseConnection) => Promise<Result>): Promise<Result>;
15
+ transaction<Result>(callback: (connection: DatabaseConnection) => Promise<Result>): Promise<Result>;
16
+ transactionActive(): boolean;
17
+ close(): Promise<void>;
18
+ }
19
+ export declare function mysql(options: MySQLDatabaseOptions): MySQLDatabase;
20
+ export declare function mysqlSql(sql: string): string;
21
+ //# sourceMappingURL=mysql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../src/database/mysql.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAa,MAAM,YAAY,CAAA;AAUzE,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,MAAM,CAAA;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAqED,qBAAa,aAAc,YAAW,QAAQ;IAC5C,QAAQ,CAAC,MAAM,EAAG,OAAO,CAAS;IAClC,QAAQ,CAAC,cAAc,2BAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAM;IAC3B,OAAO,CAAC,MAAM,CAAQ;gBAEV,OAAO,EAAE,oBAAoB;IA6BnC,UAAU,CAAC,MAAM,EACrB,QAAQ,EAAE,CAAC,UAAU,EAAE,kBAAkB,KAAK,OAAO,CAAC,MAAM,CAAC,GAC5D,OAAO,CAAC,MAAM,CAAC;IAuBZ,WAAW,CAAC,MAAM,EACtB,QAAQ,EAAE,CAAC,UAAU,EAAE,kBAAkB,KAAK,OAAO,CAAC,MAAM,CAAC,GAC5D,OAAO,CAAC,MAAM,CAAC;IAyClB,iBAAiB,IAAI,OAAO;IAItB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK7B;AAgBD,wBAAgB,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAElE;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO5C"}
@@ -0,0 +1,192 @@
1
+ import mysqlDriver, {} from "mysql2/promise";
2
+ import { acquireBeforeDatabaseDeadline, databaseDeadlineRemainingMilliseconds, databaseDeadlineError, requireDatabaseDeadlineRemaining, } from "./deadline.js";
3
+ import { DatabaseDeadlineExceeded } from "../errors.js";
4
+ import { databaseTransactionActive, withDatabaseTransaction } from "./transaction-context.js";
5
+ class MySQLConnection {
6
+ connection;
7
+ constructor(connection) {
8
+ this.connection = connection;
9
+ }
10
+ async run(sql, parameters = []) {
11
+ const remaining = requireDatabaseDeadlineRemaining();
12
+ const query = mysqlSql(sql);
13
+ const values = mysqlParameters(parameters);
14
+ const [result] = remaining === undefined
15
+ ? await this.connection.query(query, values)
16
+ : await this.connection.query({ sql: query, timeout: Math.max(remaining, 1) }, values);
17
+ return {
18
+ changes: result.affectedRows,
19
+ ...(result.insertId === 0 ? {} : { lastInsertId: String(result.insertId) }),
20
+ };
21
+ }
22
+ async get(sql, parameters = []) {
23
+ const remaining = requireDatabaseDeadlineRemaining();
24
+ const query = mysqlSql(sql);
25
+ const values = mysqlParameters(parameters);
26
+ const [rows] = remaining === undefined
27
+ ? await this.connection.query(query, values)
28
+ : await this.connection.query({ sql: query, timeout: Math.max(remaining, 1) }, values);
29
+ return rows[0];
30
+ }
31
+ async all(sql, parameters = []) {
32
+ const remaining = requireDatabaseDeadlineRemaining();
33
+ const query = mysqlSql(sql);
34
+ const values = mysqlParameters(parameters);
35
+ const [rows] = remaining === undefined
36
+ ? await this.connection.query(query, values)
37
+ : await this.connection.query({ sql: query, timeout: Math.max(remaining, 1) }, values);
38
+ return rows;
39
+ }
40
+ async nowMilliseconds() {
41
+ const remaining = requireDatabaseDeadlineRemaining();
42
+ const query = "SELECT FLOOR(UNIX_TIMESTAMP(CURRENT_TIMESTAMP(3)) * 1000) AS now_ms";
43
+ const [rows] = remaining === undefined
44
+ ? await this.connection.query(query)
45
+ : await this.connection.query({
46
+ sql: query,
47
+ timeout: Math.max(remaining, 1),
48
+ });
49
+ const row = rows[0];
50
+ if (row?.now_ms === undefined)
51
+ throw new Error("MySQL did not return database time");
52
+ return Number(row.now_ms);
53
+ }
54
+ }
55
+ export class MySQLDatabase {
56
+ family = "mysql";
57
+ schemaIdentity = "solid-objects-node-v1";
58
+ pool;
59
+ closed = false;
60
+ constructor(options) {
61
+ if (options.connectionString.length === 0) {
62
+ throw new TypeError("MySQL connectionString must not be empty");
63
+ }
64
+ if (options.maximumConnections !== undefined &&
65
+ (!Number.isSafeInteger(options.maximumConnections) || options.maximumConnections < 1)) {
66
+ throw new TypeError("MySQL maximumConnections must be a positive safe integer");
67
+ }
68
+ for (const [name, value] of [
69
+ ["idleTimeoutMilliseconds", options.idleTimeoutMilliseconds],
70
+ ["queueLimit", options.queueLimit],
71
+ ]) {
72
+ if (value !== undefined && (!Number.isSafeInteger(value) || value < 0)) {
73
+ throw new TypeError(`MySQL ${name} must be a non-negative safe integer`);
74
+ }
75
+ }
76
+ this.pool = mysqlDriver.createPool({
77
+ uri: options.connectionString,
78
+ connectionLimit: options.maximumConnections ?? 10,
79
+ idleTimeout: options.idleTimeoutMilliseconds ?? 60_000,
80
+ queueLimit: options.queueLimit ?? 0,
81
+ supportBigNumbers: true,
82
+ bigNumberStrings: true,
83
+ charset: "utf8mb4",
84
+ });
85
+ }
86
+ async connection(callback) {
87
+ const deadlineActive = databaseDeadlineRemainingMilliseconds() !== undefined;
88
+ const connection = await acquireBeforeDatabaseDeadline(() => this.pool.getConnection(), (lateConnection) => lateConnection.release());
89
+ let discardConnection = false;
90
+ try {
91
+ const result = await callback(new MySQLConnection(connection));
92
+ requireDatabaseDeadlineRemaining();
93
+ return result;
94
+ }
95
+ catch (error) {
96
+ if (deadlineActive && mysqlDeadlineError(error)) {
97
+ discardConnection = true;
98
+ throw databaseDeadlineError(error);
99
+ }
100
+ throw error;
101
+ }
102
+ finally {
103
+ if (discardConnection)
104
+ connection.destroy();
105
+ else
106
+ connection.release();
107
+ }
108
+ }
109
+ async transaction(callback) {
110
+ return withDatabaseTransaction(this, async () => {
111
+ const deadlineActive = databaseDeadlineRemainingMilliseconds() !== undefined;
112
+ const connection = await acquireBeforeDatabaseDeadline(() => this.pool.getConnection(), (lateConnection) => lateConnection.release());
113
+ try {
114
+ await connection.beginTransaction();
115
+ const remaining = requireDatabaseDeadlineRemaining();
116
+ if (remaining !== undefined) {
117
+ await connection.query("SET SESSION innodb_lock_wait_timeout = ?", [
118
+ Math.max(Math.ceil(remaining / 1_000), 1),
119
+ ]);
120
+ await connection.query("SET SESSION max_execution_time = ?", [Math.max(remaining, 1)]);
121
+ }
122
+ const result = await callback(new MySQLConnection(connection));
123
+ requireDatabaseDeadlineRemaining();
124
+ await connection.commit();
125
+ return result;
126
+ }
127
+ catch (error) {
128
+ await connection.rollback().catch(() => undefined);
129
+ if (error instanceof DatabaseDeadlineExceeded ||
130
+ (deadlineActive && mysqlDeadlineError(error))) {
131
+ throw databaseDeadlineError(error);
132
+ }
133
+ throw error;
134
+ }
135
+ finally {
136
+ if (deadlineActive) {
137
+ await connection
138
+ .query("SET SESSION innodb_lock_wait_timeout = DEFAULT")
139
+ .catch(() => undefined);
140
+ await connection.query("SET SESSION max_execution_time = DEFAULT").catch(() => undefined);
141
+ }
142
+ connection.release();
143
+ }
144
+ });
145
+ }
146
+ transactionActive() {
147
+ return databaseTransactionActive(this);
148
+ }
149
+ async close() {
150
+ if (this.closed)
151
+ return;
152
+ this.closed = true;
153
+ await this.pool.end();
154
+ }
155
+ }
156
+ function mysqlDeadlineError(error) {
157
+ return (typeof error === "object" &&
158
+ error !== null &&
159
+ (("code" in error &&
160
+ (error.code === "PROTOCOL_SEQUENCE_TIMEOUT" ||
161
+ error.code === "ER_LOCK_WAIT_TIMEOUT" ||
162
+ error.code === "ER_QUERY_TIMEOUT")) ||
163
+ ("message" in error &&
164
+ typeof error.message === "string" &&
165
+ error.message.includes("operation timeout"))));
166
+ }
167
+ export function mysql(options) {
168
+ return new MySQLDatabase(options);
169
+ }
170
+ export function mysqlSql(sql) {
171
+ const conflict = /\s+ON CONFLICT\s*\([^)]+\)\s+DO NOTHING\s*$/i;
172
+ if (conflict.test(sql))
173
+ return sql.replace(/^\s*INSERT\s+INTO/i, "INSERT IGNORE INTO").replace(conflict, "");
174
+ return sql
175
+ .replace(/\s+ON CONFLICT\s*\([^)]+\)\s+DO UPDATE SET\s+/i, " ON DUPLICATE KEY UPDATE ")
176
+ .replace(/\bexcluded\.([A-Za-z_][A-Za-z0-9_]*)\b/gi, "VALUES($1)");
177
+ }
178
+ function mysqlParameters(parameters) {
179
+ return parameters.map((value) => {
180
+ if (value === null ||
181
+ typeof value === "string" ||
182
+ typeof value === "number" ||
183
+ typeof value === "bigint" ||
184
+ typeof value === "boolean" ||
185
+ value instanceof Date ||
186
+ value instanceof Uint8Array) {
187
+ return value;
188
+ }
189
+ throw new TypeError("MySQL parameters must be scalar database values");
190
+ });
191
+ }
192
+ //# sourceMappingURL=mysql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../src/database/mysql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function postgresqlSql(sql: string): string;
2
+ //# sourceMappingURL=postgresql-sql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgresql-sql.d.ts","sourceRoot":"","sources":["../../src/database/postgresql-sql.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgGjD"}
@@ -0,0 +1,102 @@
1
+ export function postgresqlSql(sql) {
2
+ let parameter = 0;
3
+ let output = "";
4
+ let mode;
5
+ let dollarQuote;
6
+ for (let index = 0; index < sql.length; index += 1) {
7
+ const character = sql[index];
8
+ const next = sql[index + 1];
9
+ if (dollarQuote) {
10
+ if (sql.startsWith(dollarQuote, index)) {
11
+ output += dollarQuote;
12
+ index += dollarQuote.length - 1;
13
+ dollarQuote = undefined;
14
+ }
15
+ else {
16
+ output += character;
17
+ }
18
+ continue;
19
+ }
20
+ if (mode === "lineComment") {
21
+ output += character;
22
+ if (character === "\n")
23
+ mode = undefined;
24
+ continue;
25
+ }
26
+ if (mode === "blockComment") {
27
+ output += character;
28
+ if (character === "*" && next === "/") {
29
+ output += next;
30
+ index += 1;
31
+ mode = undefined;
32
+ }
33
+ continue;
34
+ }
35
+ if (mode === "single") {
36
+ output += character;
37
+ if (character === "'" && next === "'") {
38
+ output += next;
39
+ index += 1;
40
+ }
41
+ else if (character === "'") {
42
+ mode = undefined;
43
+ }
44
+ continue;
45
+ }
46
+ if (mode === "double") {
47
+ output += character;
48
+ if (character === '"' && next === '"') {
49
+ output += next;
50
+ index += 1;
51
+ }
52
+ else if (character === '"') {
53
+ mode = undefined;
54
+ }
55
+ continue;
56
+ }
57
+ if (character === "-" && next === "-") {
58
+ mode = "lineComment";
59
+ output += character + next;
60
+ index += 1;
61
+ continue;
62
+ }
63
+ if (character === "/" && next === "*") {
64
+ mode = "blockComment";
65
+ output += character + next;
66
+ index += 1;
67
+ continue;
68
+ }
69
+ if (character === "$") {
70
+ const match = /^\$(?:[A-Za-z_][A-Za-z0-9_]*)?\$/.exec(sql.slice(index));
71
+ if (match) {
72
+ dollarQuote = match[0];
73
+ output += dollarQuote;
74
+ index += dollarQuote.length - 1;
75
+ continue;
76
+ }
77
+ }
78
+ if (character === "'") {
79
+ mode = "single";
80
+ output += character;
81
+ continue;
82
+ }
83
+ if (character === '"') {
84
+ mode = "double";
85
+ output += character;
86
+ continue;
87
+ }
88
+ if (character === "?") {
89
+ if (next === "?") {
90
+ output += "?";
91
+ index += 1;
92
+ continue;
93
+ }
94
+ parameter += 1;
95
+ output += `$${parameter}`;
96
+ continue;
97
+ }
98
+ output += character;
99
+ }
100
+ return output;
101
+ }
102
+ //# sourceMappingURL=postgresql-sql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgresql-sql.js","sourceRoot":"","sources":["../../src/database/postgresql-sql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { Database, DatabaseConnection } from "./types.js";
2
+ import { PostgreSQLWakeUpAdapter, type PostgreSQLWakeUpFailure } from "../wake-up/postgresql.js";
3
+ export { PostgreSQLWakeUpAdapter, postgresqlWakeUp, type PostgreSQLWakeUpFailure, type PostgreSQLWakeUpOptions, } from "../wake-up/postgresql.js";
4
+ export interface PostgreSQLDatabaseOptions {
5
+ connectionString: string;
6
+ maximumConnections?: number;
7
+ idleTimeoutMilliseconds?: number;
8
+ connectionTimeoutMilliseconds?: number;
9
+ applicationName?: string;
10
+ onPoolError?: (error: Error) => void;
11
+ }
12
+ export interface PostgreSQLDatabaseWakeUpOptions {
13
+ channelPrefix?: string;
14
+ applicationName?: string;
15
+ onListenerError?: (failure: PostgreSQLWakeUpFailure) => void;
16
+ }
17
+ export declare class PostgreSQLDatabase implements Database {
18
+ readonly family: "postgresql";
19
+ readonly schemaIdentity = "solid-objects-node-v1";
20
+ private readonly pool;
21
+ private readonly connectionString;
22
+ private closed;
23
+ constructor(options: PostgreSQLDatabaseOptions);
24
+ connection<Result>(callback: (connection: DatabaseConnection) => Promise<Result>): Promise<Result>;
25
+ transaction<Result>(callback: (connection: DatabaseConnection) => Promise<Result>): Promise<Result>;
26
+ transactionActive(): boolean;
27
+ close(): Promise<void>;
28
+ wakeUp(options?: PostgreSQLDatabaseWakeUpOptions): PostgreSQLWakeUpAdapter;
29
+ }
30
+ export declare function postgresql(options: PostgreSQLDatabaseOptions): PostgreSQLDatabase;
31
+ //# sourceMappingURL=postgresql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgresql.d.ts","sourceRoot":"","sources":["../../src/database/postgresql.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAa,MAAM,YAAY,CAAA;AACzE,OAAO,EAAE,uBAAuB,EAAE,KAAK,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAUhG,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,GAC7B,MAAM,0BAA0B,CAAA;AAEjC,MAAM,WAAW,yBAAyB;IACxC,gBAAgB,EAAE,MAAM,CAAA;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,6BAA6B,CAAC,EAAE,MAAM,CAAA;IACtC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CACrC;AAED,MAAM,WAAW,+BAA+B;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAA;CAC7D;AAqCD,qBAAa,kBAAmB,YAAW,QAAQ;IACjD,QAAQ,CAAC,MAAM,EAAG,YAAY,CAAS;IACvC,QAAQ,CAAC,cAAc,2BAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAM;IAC3B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,MAAM,CAAQ;gBAEV,OAAO,EAAE,yBAAyB;IA6CxC,UAAU,CAAC,MAAM,EACrB,QAAQ,EAAE,CAAC,UAAU,EAAE,kBAAkB,KAAK,OAAO,CAAC,MAAM,CAAC,GAC5D,OAAO,CAAC,MAAM,CAAC;IA6BZ,WAAW,CAAC,MAAM,EACtB,QAAQ,EAAE,CAAC,UAAU,EAAE,kBAAkB,KAAK,OAAO,CAAC,MAAM,CAAC,GAC5D,OAAO,CAAC,MAAM,CAAC;IAgClB,iBAAiB,IAAI,OAAO;IAItB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,MAAM,CAAC,OAAO,GAAE,+BAAoC,GAAG,uBAAuB;CAM/E;AA4BD,wBAAgB,UAAU,CAAC,OAAO,EAAE,yBAAyB,GAAG,kBAAkB,CAEjF"}
@@ -0,0 +1,172 @@
1
+ import { Pool, TypeOverrides, types } from "pg";
2
+ import { postgresqlSql } from "./postgresql-sql.js";
3
+ import { PostgreSQLWakeUpAdapter } from "../wake-up/postgresql.js";
4
+ import { acquireBeforeDatabaseDeadline, databaseDeadlineRemainingMilliseconds, databaseDeadlineError, requireDatabaseDeadlineRemaining, } from "./deadline.js";
5
+ import { DatabaseDeadlineExceeded } from "../errors.js";
6
+ import { databaseTransactionActive, withDatabaseTransaction } from "./transaction-context.js";
7
+ export { PostgreSQLWakeUpAdapter, postgresqlWakeUp, } from "../wake-up/postgresql.js";
8
+ class PostgreSQLConnection {
9
+ client;
10
+ constructor(client) {
11
+ this.client = client;
12
+ }
13
+ async run(sql, parameters = []) {
14
+ requireDatabaseDeadlineRemaining();
15
+ const result = await this.client.query(postgresqlSql(sql), [...parameters]);
16
+ return { changes: result.rowCount ?? 0 };
17
+ }
18
+ async get(sql, parameters = []) {
19
+ requireDatabaseDeadlineRemaining();
20
+ const result = await this.client.query(postgresqlSql(sql), [...parameters]);
21
+ return result.rows[0];
22
+ }
23
+ async all(sql, parameters = []) {
24
+ requireDatabaseDeadlineRemaining();
25
+ const result = await this.client.query(postgresqlSql(sql), [...parameters]);
26
+ return result.rows;
27
+ }
28
+ async nowMilliseconds() {
29
+ requireDatabaseDeadlineRemaining();
30
+ const result = await this.client.query("SELECT FLOOR(EXTRACT(EPOCH FROM clock_timestamp()) * 1000)::bigint::text AS now_ms");
31
+ const row = result.rows[0];
32
+ if (!row)
33
+ throw new Error("PostgreSQL did not return database time");
34
+ return Number(row.now_ms);
35
+ }
36
+ }
37
+ export class PostgreSQLDatabase {
38
+ family = "postgresql";
39
+ schemaIdentity = "solid-objects-node-v1";
40
+ pool;
41
+ connectionString;
42
+ closed = false;
43
+ constructor(options) {
44
+ if (options.connectionString.length === 0) {
45
+ throw new TypeError("PostgreSQL connectionString must not be empty");
46
+ }
47
+ this.connectionString = options.connectionString;
48
+ if (options.maximumConnections !== undefined &&
49
+ (!Number.isSafeInteger(options.maximumConnections) || options.maximumConnections < 1)) {
50
+ throw new TypeError("PostgreSQL maximumConnections must be a positive safe integer");
51
+ }
52
+ for (const [name, value] of [
53
+ ["idleTimeoutMilliseconds", options.idleTimeoutMilliseconds],
54
+ ["connectionTimeoutMilliseconds", options.connectionTimeoutMilliseconds],
55
+ ]) {
56
+ if (value !== undefined && (!Number.isFinite(value) || value < 0)) {
57
+ throw new TypeError(`PostgreSQL ${name} must be a non-negative number`);
58
+ }
59
+ }
60
+ const configuration = {
61
+ connectionString: options.connectionString,
62
+ types: postgresqlTypes(),
63
+ ...(options.maximumConnections === undefined ? {} : { max: options.maximumConnections }),
64
+ ...(options.idleTimeoutMilliseconds === undefined
65
+ ? {}
66
+ : { idleTimeoutMillis: options.idleTimeoutMilliseconds }),
67
+ ...(options.connectionTimeoutMilliseconds === undefined
68
+ ? {}
69
+ : { connectionTimeoutMillis: options.connectionTimeoutMilliseconds }),
70
+ ...(options.applicationName === undefined
71
+ ? { application_name: "solid-objects" }
72
+ : { application_name: options.applicationName }),
73
+ };
74
+ this.pool = new Pool(configuration);
75
+ this.pool.on("error", options.onPoolError ??
76
+ ((error) => console.error({
77
+ event: "solid_objects.postgresql.pool_error",
78
+ errorName: error.name,
79
+ })));
80
+ }
81
+ async connection(callback) {
82
+ const deadlineActive = databaseDeadlineRemainingMilliseconds() !== undefined;
83
+ const client = await acquireBeforeDatabaseDeadline(() => this.pool.connect(), (lateClient) => lateClient.release());
84
+ let discardConnection = false;
85
+ try {
86
+ const remaining = requireDatabaseDeadlineRemaining();
87
+ if (remaining !== undefined) {
88
+ await applyPostgreSQLDeadline({ client, milliseconds: remaining });
89
+ }
90
+ const result = await callback(new PostgreSQLConnection(client));
91
+ requireDatabaseDeadlineRemaining();
92
+ return result;
93
+ }
94
+ catch (error) {
95
+ if (deadlineActive && postgresqlDeadlineError(error)) {
96
+ discardConnection = true;
97
+ throw databaseDeadlineError(error);
98
+ }
99
+ throw error;
100
+ }
101
+ finally {
102
+ if (deadlineActive && !discardConnection) {
103
+ await client.query("RESET statement_timeout; RESET lock_timeout").catch(() => undefined);
104
+ }
105
+ client.release(discardConnection);
106
+ }
107
+ }
108
+ async transaction(callback) {
109
+ return withDatabaseTransaction(this, async () => {
110
+ const deadlineActive = databaseDeadlineRemainingMilliseconds() !== undefined;
111
+ const client = await acquireBeforeDatabaseDeadline(() => this.pool.connect(), (lateClient) => lateClient.release());
112
+ try {
113
+ await client.query("BEGIN");
114
+ const remaining = requireDatabaseDeadlineRemaining();
115
+ if (remaining !== undefined) {
116
+ await applyPostgreSQLDeadline({ client, milliseconds: remaining, scope: "transaction" });
117
+ }
118
+ const result = await callback(new PostgreSQLConnection(client));
119
+ requireDatabaseDeadlineRemaining();
120
+ await client.query("COMMIT");
121
+ return result;
122
+ }
123
+ catch (error) {
124
+ await client.query("ROLLBACK").catch(() => undefined);
125
+ if (error instanceof DatabaseDeadlineExceeded ||
126
+ (deadlineActive && postgresqlDeadlineError(error))) {
127
+ throw databaseDeadlineError(error);
128
+ }
129
+ throw error;
130
+ }
131
+ finally {
132
+ client.release();
133
+ }
134
+ });
135
+ }
136
+ transactionActive() {
137
+ return databaseTransactionActive(this);
138
+ }
139
+ async close() {
140
+ if (this.closed)
141
+ return;
142
+ this.closed = true;
143
+ await this.pool.end();
144
+ }
145
+ wakeUp(options = {}) {
146
+ return new PostgreSQLWakeUpAdapter({
147
+ connectionString: this.connectionString,
148
+ ...options,
149
+ });
150
+ }
151
+ }
152
+ async function applyPostgreSQLDeadline(options) {
153
+ const scope = options.scope === "transaction" ? "LOCAL " : "";
154
+ const timeout = Math.max(options.milliseconds, 1);
155
+ await options.client.query(`SET ${scope}statement_timeout = ${timeout}`);
156
+ await options.client.query(`SET ${scope}lock_timeout = ${timeout}`);
157
+ }
158
+ function postgresqlDeadlineError(error) {
159
+ return (typeof error === "object" &&
160
+ error !== null &&
161
+ "code" in error &&
162
+ (error.code === "57014" || error.code === "55P03"));
163
+ }
164
+ function postgresqlTypes() {
165
+ const overrides = new TypeOverrides();
166
+ overrides.setTypeParser(types.builtins.INT8, (value) => BigInt(value));
167
+ return overrides;
168
+ }
169
+ export function postgresql(options) {
170
+ return new PostgreSQLDatabase(options);
171
+ }
172
+ //# sourceMappingURL=postgresql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgresql.js","sourceRoot":"","sources":["../../src/database/postgresql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { Database, DatabaseConnection } from "./types.js";
2
+ export interface SQLiteDatabaseOptions {
3
+ path: string;
4
+ timeoutMilliseconds?: number;
5
+ lockRetryAttempts?: number;
6
+ }
7
+ export declare class SQLiteDatabase implements Database {
8
+ readonly family: "sqlite";
9
+ readonly schemaIdentity = "solid-objects-node-v1";
10
+ private readonly database;
11
+ private readonly databaseConnection;
12
+ private accessTail;
13
+ private closed;
14
+ private readonly timeoutMilliseconds;
15
+ private readonly lockRetryAttempts;
16
+ constructor(options: SQLiteDatabaseOptions);
17
+ connection<Result>(callback: (connection: DatabaseConnection) => Promise<Result>): Promise<Result>;
18
+ transaction<Result>(callback: (connection: DatabaseConnection) => Promise<Result>): Promise<Result>;
19
+ transactionActive(): boolean;
20
+ close(): Promise<void>;
21
+ private withAccess;
22
+ private withBusyTimeout;
23
+ private runTransaction;
24
+ private beginTransactionWithRetry;
25
+ }
26
+ export declare function sqlite(options: SQLiteDatabaseOptions): SQLiteDatabase;
27
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/database/sqlite.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAa,MAAM,YAAY,CAAA;AASzE,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAmCD,qBAAa,cAAe,YAAW,QAAQ;IAC7C,QAAQ,CAAC,MAAM,EAAG,QAAQ,CAAS;IACnC,QAAQ,CAAC,cAAc,2BAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAkB;IACrD,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAQ;IAC5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAQ;gBAE9B,OAAO,EAAE,qBAAqB;IAcpC,UAAU,CAAC,MAAM,EACrB,QAAQ,EAAE,CAAC,UAAU,EAAE,kBAAkB,KAAK,OAAO,CAAC,MAAM,CAAC,GAC5D,OAAO,CAAC,MAAM,CAAC;IAIZ,WAAW,CAAC,MAAM,EACtB,QAAQ,EAAE,CAAC,UAAU,EAAE,kBAAkB,KAAK,OAAO,CAAC,MAAM,CAAC,GAC5D,OAAO,CAAC,MAAM,CAAC;IAIlB,iBAAiB,IAAI,OAAO;IAItB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAQd,UAAU;YAyBV,eAAe;YAcf,cAAc;YAcd,yBAAyB;CAcxC;AA0BD,wBAAgB,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAErE"}