@event-driven-io/pongo 0.17.0-beta.2 → 0.17.0-beta.21

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 (68) hide show
  1. package/dist/{chunk-ECQ2CKZE.cjs → chunk-A4DCNQJR.cjs} +45 -43
  2. package/dist/chunk-A4DCNQJR.cjs.map +1 -0
  3. package/dist/{chunk-4BL6YWLW.cjs → chunk-BZRKCNRY.cjs} +105 -72
  4. package/dist/chunk-BZRKCNRY.cjs.map +1 -0
  5. package/dist/{chunk-NCNRRYVE.js → chunk-H637RRXS.js} +85 -52
  6. package/dist/chunk-H637RRXS.js.map +1 -0
  7. package/dist/{chunk-Y7LRKJLJ.js → chunk-TTZGGAZV.js} +40 -38
  8. package/dist/chunk-TTZGGAZV.js.map +1 -0
  9. package/dist/cli.cjs +43 -37
  10. package/dist/cli.cjs.map +1 -1
  11. package/dist/cli.js +34 -28
  12. package/dist/cli.js.map +1 -1
  13. package/dist/cloudflare.cjs +53 -0
  14. package/dist/cloudflare.cjs.map +1 -0
  15. package/dist/cloudflare.d.cts +11 -0
  16. package/dist/cloudflare.d.ts +11 -0
  17. package/dist/{d1.js → cloudflare.js} +19 -20
  18. package/dist/cloudflare.js.map +1 -0
  19. package/dist/{index-BJopB-em.d.cts → index-BAiq0hu3.d.cts} +3 -2
  20. package/dist/{index-G5DECNb_.d.ts → index-DF5J9nRH.d.ts} +3 -2
  21. package/dist/index.cjs +27 -3
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.cts +17 -9
  24. package/dist/index.d.ts +17 -9
  25. package/dist/index.js +30 -6
  26. package/dist/index.js.map +1 -1
  27. package/dist/pg.cjs +344 -4
  28. package/dist/pg.cjs.map +1 -1
  29. package/dist/pg.d.cts +10 -9
  30. package/dist/pg.d.ts +10 -9
  31. package/dist/pg.js +350 -10
  32. package/dist/pg.js.map +1 -1
  33. package/dist/{pongoCollectionSchemaComponent-t_e9n2Wc.d.ts → pongoCollectionSchemaComponent-BhsINgDe.d.cts} +44 -34
  34. package/dist/{pongoCollectionSchemaComponent-t_e9n2Wc.d.cts → pongoCollectionSchemaComponent-BhsINgDe.d.ts} +44 -34
  35. package/dist/shim.cjs +12 -14
  36. package/dist/shim.cjs.map +1 -1
  37. package/dist/shim.d.cts +4 -4
  38. package/dist/shim.d.ts +4 -4
  39. package/dist/shim.js +7 -9
  40. package/dist/shim.js.map +1 -1
  41. package/dist/sqlite3.cjs +21 -26
  42. package/dist/sqlite3.cjs.map +1 -1
  43. package/dist/sqlite3.d.cts +6 -6
  44. package/dist/sqlite3.d.ts +6 -6
  45. package/dist/sqlite3.js +20 -25
  46. package/dist/sqlite3.js.map +1 -1
  47. package/package.json +50 -36
  48. package/dist/chunk-4BL6YWLW.cjs.map +0 -1
  49. package/dist/chunk-ECQ2CKZE.cjs.map +0 -1
  50. package/dist/chunk-EYQDS752.js +0 -364
  51. package/dist/chunk-EYQDS752.js.map +0 -1
  52. package/dist/chunk-NCNRRYVE.js.map +0 -1
  53. package/dist/chunk-WH26IXHN.js +0 -10
  54. package/dist/chunk-WH26IXHN.js.map +0 -1
  55. package/dist/chunk-WKW4LGF6.cjs +0 -10
  56. package/dist/chunk-WKW4LGF6.cjs.map +0 -1
  57. package/dist/chunk-Y7LRKJLJ.js.map +0 -1
  58. package/dist/chunk-ZPWKWNK2.cjs +0 -364
  59. package/dist/chunk-ZPWKWNK2.cjs.map +0 -1
  60. package/dist/d1.cjs +0 -54
  61. package/dist/d1.cjs.map +0 -1
  62. package/dist/d1.d.cts +0 -11
  63. package/dist/d1.d.ts +0 -11
  64. package/dist/d1.js.map +0 -1
  65. package/dist/pg-73DOKU64.js +0 -11
  66. package/dist/pg-73DOKU64.js.map +0 -1
  67. package/dist/pg-I267A7IL.cjs +0 -11
  68. package/dist/pg-I267A7IL.cjs.map +0 -1
package/dist/pg.js CHANGED
@@ -1,16 +1,356 @@
1
- import "./chunk-WH26IXHN.js";
2
1
  import {
3
- pgDatabaseDriver,
4
- pongoCollectionPostgreSQLMigrations,
5
- postgresSQLBuilder,
6
- usePgDatabaseDriver
7
- } from "./chunk-EYQDS752.js";
8
- import "./chunk-NCNRRYVE.js";
2
+ OperatorMap,
3
+ PongoCollectionSchemaComponent,
4
+ PongoDatabase,
5
+ PongoDatabaseSchemaComponent,
6
+ QueryOperators,
7
+ expectedVersionValue,
8
+ hasOperators,
9
+ objectEntries,
10
+ pongoDriverRegistry,
11
+ pongoSchema
12
+ } from "./chunk-H637RRXS.js";
13
+
14
+ // src/storage/postgresql/core/sqlBuilder/index.ts
15
+ import { isSQL, SQL as SQL4, sqlMigration } from "@event-driven-io/dumbo";
16
+
17
+ // src/storage/postgresql/core/sqlBuilder/filter/index.ts
18
+ import { SQL as SQL2 } from "@event-driven-io/dumbo";
19
+
20
+ // src/storage/postgresql/core/sqlBuilder/filter/queryOperators.ts
21
+ import { SQL } from "@event-driven-io/dumbo";
22
+ var handleOperator = (path, operator, value, serializer) => {
23
+ if (path === "_id" || path === "_version") {
24
+ return handleMetadataOperator(path, operator, value);
25
+ }
26
+ switch (operator) {
27
+ case "$eq": {
28
+ const nestedPath = serializer.serialize(buildNestedObject(path, value));
29
+ const serializedValue = serializer.serialize(value);
30
+ return SQL`(data @> ${nestedPath}::jsonb OR jsonb_path_exists(data, '$.${SQL.plain(path)}[*] ? (@ == ${SQL.plain(serializedValue)})'))`;
31
+ }
32
+ case "$gt":
33
+ case "$gte":
34
+ case "$lt":
35
+ case "$lte":
36
+ case "$ne": {
37
+ const jsonPath = SQL.plain(path.split(".").join(","));
38
+ return SQL`data ->> '${jsonPath}' ${SQL.plain(OperatorMap[operator])} ${value}`;
39
+ }
40
+ case "$in": {
41
+ const jsonPath = `{${path.split(".").join(",")}}`;
42
+ return SQL`data #>> ${jsonPath} = ANY (${value})`;
43
+ }
44
+ case "$nin": {
45
+ const jsonPath = `{${path.split(".").join(",")}}`;
46
+ return SQL`data #>> ${jsonPath} != ALL (${value})`;
47
+ }
48
+ case "$elemMatch": {
49
+ const subQuery = objectEntries(value).map(
50
+ ([subKey, subValue]) => `@."${subKey}" == ${serializer.serialize(subValue)}`
51
+ ).join(" && ");
52
+ return SQL`jsonb_path_exists(data, '$.${SQL.plain(path)}[*] ? (${SQL.plain(subQuery)})')`;
53
+ }
54
+ case "$all": {
55
+ const nestedPath = serializer.serialize(buildNestedObject(path, value));
56
+ return SQL`data @> ${nestedPath}::jsonb`;
57
+ }
58
+ case "$size": {
59
+ const jsonPath = `{${path.split(".").join(",")}}`;
60
+ return SQL`jsonb_array_length(data #> ${jsonPath}) = ${value}`;
61
+ }
62
+ default:
63
+ throw new Error(`Unsupported operator: ${operator}`);
64
+ }
65
+ };
66
+ var handleMetadataOperator = (fieldName, operator, value) => {
67
+ switch (operator) {
68
+ case "$eq":
69
+ return SQL`${SQL.plain(fieldName)} = ${value}`;
70
+ case "$gt":
71
+ case "$gte":
72
+ case "$lt":
73
+ case "$lte":
74
+ case "$ne":
75
+ return SQL`${SQL.plain(fieldName)} ${SQL.plain(OperatorMap[operator])} ${value}`;
76
+ case "$in":
77
+ return SQL`${SQL.plain(fieldName)} = ANY (${value})`;
78
+ case "$nin":
79
+ return SQL`${SQL.plain(fieldName)} != ALL (${value})`;
80
+ default:
81
+ throw new Error(`Unsupported operator: ${operator}`);
82
+ }
83
+ };
84
+ var buildNestedObject = (path, value) => path.split(".").reverse().reduce((acc, key) => ({ [key]: acc }), value);
85
+
86
+ // src/storage/postgresql/core/sqlBuilder/filter/index.ts
87
+ var AND = "AND";
88
+ var constructFilterQuery = (filter, serializer) => SQL2.merge(
89
+ Object.entries(filter).map(
90
+ ([key, value]) => isRecord(value) ? constructComplexFilterQuery(key, value, serializer) : handleOperator(key, "$eq", value, serializer)
91
+ ),
92
+ ` ${AND} `
93
+ );
94
+ var constructComplexFilterQuery = (key, value, serializer) => {
95
+ const isEquality = !hasOperators(value);
96
+ return SQL2.merge(
97
+ objectEntries(value).map(
98
+ ([nestedKey, val]) => isEquality ? handleOperator(
99
+ `${key}.${nestedKey}`,
100
+ QueryOperators.$eq,
101
+ val,
102
+ serializer
103
+ ) : handleOperator(key, nestedKey, val, serializer)
104
+ ),
105
+ ` ${AND} `
106
+ );
107
+ };
108
+ var isRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
109
+
110
+ // src/storage/postgresql/core/sqlBuilder/update/index.ts
111
+ import { SQL as SQL3 } from "@event-driven-io/dumbo";
112
+ var buildUpdateQuery = (update, serializer) => objectEntries(update).reduce(
113
+ (currentUpdateQuery, [op, value]) => {
114
+ switch (op) {
115
+ case "$set":
116
+ return buildSetQuery(value, currentUpdateQuery, serializer);
117
+ case "$unset":
118
+ return buildUnsetQuery(value, currentUpdateQuery);
119
+ case "$inc":
120
+ return buildIncQuery(value, currentUpdateQuery);
121
+ case "$push":
122
+ return buildPushQuery(value, currentUpdateQuery, serializer);
123
+ default:
124
+ return currentUpdateQuery;
125
+ }
126
+ },
127
+ SQL3`data`
128
+ );
129
+ var buildSetQuery = (set, currentUpdateQuery, serializer) => SQL3`${currentUpdateQuery} || ${serializer.serialize(set)}::jsonb`;
130
+ var buildUnsetQuery = (unset, currentUpdateQuery) => SQL3`${currentUpdateQuery} - ${Object.keys(unset).map((k) => `{${k}}`).join(", ")}`;
131
+ var buildIncQuery = (inc, currentUpdateQuery) => {
132
+ for (const [key, value] of Object.entries(inc)) {
133
+ currentUpdateQuery = typeof value === "bigint" ? SQL3`jsonb_set(${currentUpdateQuery}, '{${SQL3.plain(key)}}', to_jsonb((COALESCE((data->>'${SQL3.plain(key)}')::BIGINT, 0) + ${value})::TEXT), true)` : SQL3`jsonb_set(${currentUpdateQuery}, '{${SQL3.plain(key)}}', to_jsonb(COALESCE((data->>'${SQL3.plain(key)}')::NUMERIC, 0) + ${value}), true)`;
134
+ }
135
+ return currentUpdateQuery;
136
+ };
137
+ var buildPushQuery = (push, currentUpdateQuery, serializer) => {
138
+ for (const [key, value] of Object.entries(push)) {
139
+ const serializedValue = serializer.serialize([value]);
140
+ currentUpdateQuery = SQL3`jsonb_set(${currentUpdateQuery}, '{${SQL3.plain(key)}}', (coalesce(data->'${SQL3.plain(key)}', '[]'::jsonb) || ${serializedValue}::jsonb), true)`;
141
+ }
142
+ return currentUpdateQuery;
143
+ };
144
+
145
+ // src/storage/postgresql/core/sqlBuilder/index.ts
146
+ var createCollection = (collectionName) => SQL4`
147
+ CREATE TABLE IF NOT EXISTS ${SQL4.identifier(collectionName)} (
148
+ _id TEXT PRIMARY KEY,
149
+ data JSONB NOT NULL,
150
+ metadata JSONB NOT NULL DEFAULT '{}',
151
+ _version BIGINT NOT NULL DEFAULT 1,
152
+ _partition TEXT NOT NULL DEFAULT 'png_global',
153
+ _archived BOOLEAN NOT NULL DEFAULT FALSE,
154
+ _created TIMESTAMPTZ NOT NULL DEFAULT now(),
155
+ _updated TIMESTAMPTZ NOT NULL DEFAULT now()
156
+ )`;
157
+ var pongoCollectionPostgreSQLMigrations = (collectionName) => [
158
+ sqlMigration(`pongoCollection:${collectionName}:001:createtable`, [
159
+ createCollection(collectionName)
160
+ ])
161
+ ];
162
+ var postgresSQLBuilder = (collectionName, serializer) => ({
163
+ createCollection: () => createCollection(collectionName),
164
+ insertOne: (document) => {
165
+ const serialized = serializer.serialize(document);
166
+ const id = document._id;
167
+ const version = document._version ?? 1n;
168
+ return SQL4`
169
+ INSERT INTO ${SQL4.identifier(collectionName)} (_id, data, _version)
170
+ VALUES (${id}, ${serialized}, ${version}) ON CONFLICT(_id) DO NOTHING;`;
171
+ },
172
+ insertMany: (documents) => {
173
+ const values = SQL4.merge(
174
+ documents.map(
175
+ (doc) => SQL4`(${doc._id}, ${serializer.serialize(doc)}, ${doc._version ?? 1n})`
176
+ ),
177
+ ","
178
+ );
179
+ return SQL4`
180
+ INSERT INTO ${SQL4.identifier(collectionName)} (_id, data, _version) VALUES ${values}
181
+ ON CONFLICT(_id) DO NOTHING
182
+ RETURNING _id;`;
183
+ },
184
+ updateOne: (filter, update, options) => {
185
+ const expectedVersion = expectedVersionValue(options?.expectedVersion);
186
+ const expectedVersionUpdate = expectedVersion != null ? SQL4`AND ${SQL4.identifier(collectionName)}._version = ${expectedVersion}` : SQL4``;
187
+ const filterQuery = isSQL(filter) ? filter : constructFilterQuery(filter, serializer);
188
+ const updateQuery = isSQL(update) ? update : buildUpdateQuery(update, serializer);
189
+ return SQL4`
190
+ WITH existing AS (
191
+ SELECT _id, _version as current_version
192
+ FROM ${SQL4.identifier(collectionName)} ${where(filterQuery)}
193
+ LIMIT 1
194
+ ),
195
+ updated AS (
196
+ UPDATE ${SQL4.identifier(collectionName)}
197
+ SET
198
+ data = ${updateQuery} || jsonb_build_object('_id', ${SQL4.identifier(collectionName)}._id) || jsonb_build_object('_version', (_version + 1)::text),
199
+ _version = _version + 1
200
+ FROM existing
201
+ WHERE ${SQL4.identifier(collectionName)}._id = existing._id ${expectedVersionUpdate}
202
+ RETURNING ${SQL4.identifier(collectionName)}._id, ${SQL4.identifier(collectionName)}._version
203
+ )
204
+ SELECT
205
+ existing._id,
206
+ COALESCE(updated._version, existing.current_version) AS version,
207
+ COUNT(existing._id) over() AS matched,
208
+ COUNT(updated._id) over() AS modified
209
+ FROM existing
210
+ LEFT JOIN updated
211
+ ON existing._id = updated._id;`;
212
+ },
213
+ replaceOne: (filter, document, options) => {
214
+ const expectedVersion = expectedVersionValue(options?.expectedVersion);
215
+ const expectedVersionUpdate = expectedVersion != null ? SQL4`AND ${SQL4.identifier(collectionName)}._version = ${expectedVersion}` : SQL4``;
216
+ const filterQuery = isSQL(filter) ? filter : constructFilterQuery(filter, serializer);
217
+ return SQL4`
218
+ WITH existing AS (
219
+ SELECT _id, _version as current_version
220
+ FROM ${SQL4.identifier(collectionName)} ${where(filterQuery)}
221
+ LIMIT 1
222
+ ),
223
+ updated AS (
224
+ UPDATE ${SQL4.identifier(collectionName)}
225
+ SET
226
+ data = ${serializer.serialize(document)} || jsonb_build_object('_id', ${SQL4.identifier(collectionName)}._id) || jsonb_build_object('_version', (_version + 1)::text),
227
+ _version = _version + 1
228
+ FROM existing
229
+ WHERE ${SQL4.identifier(collectionName)}._id = existing._id ${expectedVersionUpdate}
230
+ RETURNING ${SQL4.identifier(collectionName)}._id, ${SQL4.identifier(collectionName)}._version
231
+ )
232
+ SELECT
233
+ existing._id,
234
+ COALESCE(updated._version, existing.current_version) AS version,
235
+ COUNT(existing._id) over() AS matched,
236
+ COUNT(updated._id) over() AS modified
237
+ FROM existing
238
+ LEFT JOIN updated
239
+ ON existing._id = updated._id;`;
240
+ },
241
+ updateMany: (filter, update) => {
242
+ const filterQuery = isSQL(filter) ? filter : constructFilterQuery(filter, serializer);
243
+ const updateQuery = isSQL(update) ? update : buildUpdateQuery(update, serializer);
244
+ return SQL4`
245
+ UPDATE ${SQL4.identifier(collectionName)}
246
+ SET
247
+ data = ${updateQuery} || jsonb_build_object('_version', (_version + 1)::text),
248
+ _version = _version + 1
249
+ ${where(filterQuery)};`;
250
+ },
251
+ deleteOne: (filter, options) => {
252
+ const expectedVersion = expectedVersionValue(options?.expectedVersion);
253
+ const expectedVersionUpdate = expectedVersion != null ? SQL4`AND ${SQL4.identifier(collectionName)}._version = ${expectedVersion}` : SQL4``;
254
+ const filterQuery = isSQL(filter) ? filter : constructFilterQuery(filter, serializer);
255
+ return SQL4`
256
+ WITH existing AS (
257
+ SELECT _id
258
+ FROM ${SQL4.identifier(collectionName)} ${where(filterQuery)}
259
+ LIMIT 1
260
+ ),
261
+ deleted AS (
262
+ DELETE FROM ${SQL4.identifier(collectionName)}
263
+ USING existing
264
+ WHERE ${SQL4.identifier(collectionName)}._id = existing._id ${expectedVersionUpdate}
265
+ RETURNING ${SQL4.identifier(collectionName)}._id
266
+ )
267
+ SELECT
268
+ existing._id,
269
+ COUNT(existing._id) over() AS matched,
270
+ COUNT(deleted._id) over() AS deleted
271
+ FROM existing
272
+ LEFT JOIN deleted
273
+ ON existing._id = deleted._id;`;
274
+ },
275
+ deleteMany: (filter) => {
276
+ const filterQuery = isSQL(filter) ? filter : constructFilterQuery(filter, serializer);
277
+ return SQL4`DELETE FROM ${SQL4.identifier(collectionName)} ${where(filterQuery)}`;
278
+ },
279
+ findOne: (filter) => {
280
+ const filterQuery = isSQL(filter) ? filter : constructFilterQuery(filter, serializer);
281
+ return SQL4`SELECT data, _version FROM ${SQL4.identifier(collectionName)} ${where(filterQuery)} LIMIT 1;`;
282
+ },
283
+ find: (filter, options) => {
284
+ const filterQuery = isSQL(filter) ? filter : constructFilterQuery(filter, serializer);
285
+ const query = [];
286
+ query.push(
287
+ SQL4`SELECT data, _version FROM ${SQL4.identifier(collectionName)}`
288
+ );
289
+ query.push(where(filterQuery));
290
+ if (options?.limit) {
291
+ query.push(SQL4`LIMIT ${options.limit}`);
292
+ }
293
+ if (options?.skip) {
294
+ query.push(SQL4`OFFSET ${options.skip}`);
295
+ }
296
+ return SQL4.merge([...query, SQL4`;`]);
297
+ },
298
+ countDocuments: (filter) => {
299
+ const filterQuery = SQL4.check.isSQL(filter) ? filter : constructFilterQuery(filter, serializer);
300
+ return SQL4`SELECT COUNT(1) as count FROM ${SQL4.identifier(collectionName)} ${where(filterQuery)};`;
301
+ },
302
+ rename: (newName) => SQL4`ALTER TABLE ${SQL4.identifier(collectionName)} RENAME TO ${SQL4.identifier(newName)};`,
303
+ drop: (targetName = collectionName) => SQL4`DROP TABLE IF EXISTS ${SQL4.identifier(targetName)}`
304
+ });
305
+ var where = (filterQuery) => SQL4.check.isEmpty(filterQuery) ? SQL4.EMPTY : SQL4.merge([SQL4`WHERE `, filterQuery]);
306
+
307
+ // src/storage/postgresql/pg/index.ts
308
+ import { dumbo, JSONSerializer } from "@event-driven-io/dumbo";
309
+ import {
310
+ pgDumboDriver as dumboDriver,
311
+ PgDriverType,
312
+ postgreSQLMetadata
313
+ } from "@event-driven-io/dumbo/pg";
314
+ var pgPongoDriver = {
315
+ driverType: PgDriverType,
316
+ databaseFactory: (options) => {
317
+ const databaseName = options.databaseName ?? postgreSQLMetadata.parseDatabaseName(options.connectionString) ?? postgreSQLMetadata.defaultDatabaseName;
318
+ return PongoDatabase({
319
+ ...options,
320
+ pool: dumbo({
321
+ connectionString: options.connectionString,
322
+ driver: dumboDriver,
323
+ ...options.connectionOptions,
324
+ serialization: { serializer: options.serializer }
325
+ }),
326
+ schemaComponent: PongoDatabaseSchemaComponent({
327
+ driverType: PgDriverType,
328
+ collectionFactory: (schema) => PongoCollectionSchemaComponent({
329
+ driverType: PgDriverType,
330
+ definition: schema,
331
+ migrationsOrSchemaComponents: {
332
+ migrations: pongoCollectionPostgreSQLMigrations(schema.name)
333
+ },
334
+ sqlBuilder: postgresSQLBuilder(
335
+ schema.name,
336
+ options.serialization?.serializer ?? JSONSerializer
337
+ )
338
+ }),
339
+ definition: options.schema?.definition ?? pongoSchema.db(databaseName, {})
340
+ }),
341
+ databaseName
342
+ });
343
+ }
344
+ };
345
+ var usePgPongoDriver = () => {
346
+ pongoDriverRegistry.register(PgDriverType, pgPongoDriver);
347
+ };
348
+ usePgPongoDriver();
9
349
  export {
10
- pgDatabaseDriver as databaseDriver,
11
- pgDatabaseDriver as pgDriver,
350
+ pgPongoDriver as pgDriver,
12
351
  pongoCollectionPostgreSQLMigrations,
352
+ pgPongoDriver as pongoDriver,
13
353
  postgresSQLBuilder,
14
- usePgDatabaseDriver
354
+ usePgPongoDriver
15
355
  };
16
356
  //# sourceMappingURL=pg.js.map
package/dist/pg.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"sources":["../src/storage/postgresql/core/sqlBuilder/index.ts","../src/storage/postgresql/core/sqlBuilder/filter/index.ts","../src/storage/postgresql/core/sqlBuilder/filter/queryOperators.ts","../src/storage/postgresql/core/sqlBuilder/update/index.ts","../src/storage/postgresql/pg/index.ts"],"sourcesContent":["import type { JSONSerializer } from '@event-driven-io/dumbo';\nimport { isSQL, SQL, sqlMigration } from '@event-driven-io/dumbo';\nimport {\n expectedVersionValue,\n type DeleteOneOptions,\n type FindOptions,\n type OptionalUnlessRequiredIdAndVersion,\n type PongoCollectionSQLBuilder,\n type PongoFilter,\n type PongoUpdate,\n type ReplaceOneOptions,\n type UpdateOneOptions,\n type WithoutId,\n} from '../../../../core';\nimport { constructFilterQuery } from './filter';\nimport { buildUpdateQuery } from './update';\n\nconst createCollection = (collectionName: string): SQL =>\n SQL`\n CREATE TABLE IF NOT EXISTS ${SQL.identifier(collectionName)} (\n _id TEXT PRIMARY KEY, \n data JSONB NOT NULL, \n metadata JSONB NOT NULL DEFAULT '{}',\n _version BIGINT NOT NULL DEFAULT 1,\n _partition TEXT NOT NULL DEFAULT 'png_global',\n _archived BOOLEAN NOT NULL DEFAULT FALSE,\n _created TIMESTAMPTZ NOT NULL DEFAULT now(),\n _updated TIMESTAMPTZ NOT NULL DEFAULT now()\n )`;\n\nexport const pongoCollectionPostgreSQLMigrations = (collectionName: string) => [\n sqlMigration(`pongoCollection:${collectionName}:001:createtable`, [\n createCollection(collectionName),\n ]),\n];\n\nexport const postgresSQLBuilder = (\n collectionName: string,\n serializer: JSONSerializer,\n): PongoCollectionSQLBuilder => ({\n createCollection: (): SQL => createCollection(collectionName),\n insertOne: <T>(document: OptionalUnlessRequiredIdAndVersion<T>): SQL => {\n const serialized = serializer.serialize(document);\n const id = document._id;\n const version = document._version ?? 1n;\n\n return SQL`\n INSERT INTO ${SQL.identifier(collectionName)} (_id, data, _version) \n VALUES (${id}, ${serialized}, ${version}) ON CONFLICT(_id) DO NOTHING;`;\n },\n insertMany: <T>(documents: OptionalUnlessRequiredIdAndVersion<T>[]): SQL => {\n const values = SQL.merge(\n documents.map(\n (doc) =>\n SQL`(${doc._id}, ${serializer.serialize(doc)}, ${doc._version ?? 1n})`,\n ),\n ',',\n );\n\n return SQL`\n INSERT INTO ${SQL.identifier(collectionName)} (_id, data, _version) VALUES ${values}\n ON CONFLICT(_id) DO NOTHING\n RETURNING _id;`;\n },\n updateOne: <T>(\n filter: PongoFilter<T> | SQL,\n update: PongoUpdate<T> | SQL,\n options?: UpdateOneOptions,\n ): SQL => {\n const expectedVersion = expectedVersionValue(options?.expectedVersion);\n const expectedVersionUpdate =\n expectedVersion != null\n ? SQL`AND ${SQL.identifier(collectionName)}._version = ${expectedVersion}`\n : SQL``;\n\n const filterQuery = isSQL(filter)\n ? filter\n : constructFilterQuery(filter, serializer);\n const updateQuery = isSQL(update)\n ? update\n : buildUpdateQuery(update, serializer);\n\n return SQL`\n WITH existing AS (\n SELECT _id, _version as current_version\n FROM ${SQL.identifier(collectionName)} ${where(filterQuery)}\n LIMIT 1\n ),\n updated AS (\n UPDATE ${SQL.identifier(collectionName)} \n SET \n data = ${updateQuery} || jsonb_build_object('_id', ${SQL.identifier(collectionName)}._id) || jsonb_build_object('_version', (_version + 1)::text),\n _version = _version + 1\n FROM existing \n WHERE ${SQL.identifier(collectionName)}._id = existing._id ${expectedVersionUpdate}\n RETURNING ${SQL.identifier(collectionName)}._id, ${SQL.identifier(collectionName)}._version\n )\n SELECT \n existing._id,\n COALESCE(updated._version, existing.current_version) AS version,\n COUNT(existing._id) over() AS matched,\n COUNT(updated._id) over() AS modified\n FROM existing\n LEFT JOIN updated \n ON existing._id = updated._id;`;\n },\n replaceOne: <T>(\n filter: PongoFilter<T> | SQL,\n document: WithoutId<T>,\n options?: ReplaceOneOptions,\n ): SQL => {\n const expectedVersion = expectedVersionValue(options?.expectedVersion);\n const expectedVersionUpdate =\n expectedVersion != null\n ? SQL`AND ${SQL.identifier(collectionName)}._version = ${expectedVersion}`\n : SQL``;\n\n const filterQuery = isSQL(filter)\n ? filter\n : constructFilterQuery(filter, serializer);\n\n return SQL`\n WITH existing AS (\n SELECT _id, _version as current_version\n FROM ${SQL.identifier(collectionName)} ${where(filterQuery)}\n LIMIT 1\n ),\n updated AS (\n UPDATE ${SQL.identifier(collectionName)} \n SET \n data = ${serializer.serialize(document)} || jsonb_build_object('_id', ${SQL.identifier(collectionName)}._id) || jsonb_build_object('_version', (_version + 1)::text),\n _version = _version + 1\n FROM existing \n WHERE ${SQL.identifier(collectionName)}._id = existing._id ${expectedVersionUpdate}\n RETURNING ${SQL.identifier(collectionName)}._id, ${SQL.identifier(collectionName)}._version\n )\n SELECT \n existing._id,\n COALESCE(updated._version, existing.current_version) AS version,\n COUNT(existing._id) over() AS matched,\n COUNT(updated._id) over() AS modified\n FROM existing\n LEFT JOIN updated \n ON existing._id = updated._id;`;\n },\n updateMany: <T>(\n filter: PongoFilter<T> | SQL,\n update: PongoUpdate<T> | SQL,\n ): SQL => {\n const filterQuery = isSQL(filter)\n ? filter\n : constructFilterQuery(filter, serializer);\n const updateQuery = isSQL(update)\n ? update\n : buildUpdateQuery(update, serializer);\n\n return SQL`\n UPDATE ${SQL.identifier(collectionName)} \n SET \n data = ${updateQuery} || jsonb_build_object('_version', (_version + 1)::text),\n _version = _version + 1\n ${where(filterQuery)};`;\n },\n deleteOne: <T>(\n filter: PongoFilter<T> | SQL,\n options?: DeleteOneOptions,\n ): SQL => {\n const expectedVersion = expectedVersionValue(options?.expectedVersion);\n const expectedVersionUpdate =\n expectedVersion != null\n ? SQL`AND ${SQL.identifier(collectionName)}._version = ${expectedVersion}`\n : SQL``;\n\n const filterQuery = isSQL(filter)\n ? filter\n : constructFilterQuery(filter, serializer);\n\n return SQL`\n WITH existing AS (\n SELECT _id\n FROM ${SQL.identifier(collectionName)} ${where(filterQuery)}\n LIMIT 1\n ),\n deleted AS (\n DELETE FROM ${SQL.identifier(collectionName)}\n USING existing\n WHERE ${SQL.identifier(collectionName)}._id = existing._id ${expectedVersionUpdate}\n RETURNING ${SQL.identifier(collectionName)}._id\n )\n SELECT \n existing._id,\n COUNT(existing._id) over() AS matched,\n COUNT(deleted._id) over() AS deleted\n FROM existing\n LEFT JOIN deleted \n ON existing._id = deleted._id;`;\n },\n deleteMany: <T>(filter: PongoFilter<T> | SQL): SQL => {\n const filterQuery = isSQL(filter)\n ? filter\n : constructFilterQuery(filter, serializer);\n\n return SQL`DELETE FROM ${SQL.identifier(collectionName)} ${where(filterQuery)}`;\n },\n findOne: <T>(filter: PongoFilter<T> | SQL): SQL => {\n const filterQuery = isSQL(filter)\n ? filter\n : constructFilterQuery(filter, serializer);\n\n return SQL`SELECT data, _version FROM ${SQL.identifier(collectionName)} ${where(filterQuery)} LIMIT 1;`;\n },\n find: <T>(filter: PongoFilter<T> | SQL, options?: FindOptions): SQL => {\n const filterQuery = isSQL(filter)\n ? filter\n : constructFilterQuery(filter, serializer);\n const query: SQL[] = [];\n\n query.push(\n SQL`SELECT data, _version FROM ${SQL.identifier(collectionName)}`,\n );\n\n query.push(where(filterQuery));\n\n if (options?.limit) {\n query.push(SQL`LIMIT ${options.limit}`);\n }\n\n if (options?.skip) {\n query.push(SQL`OFFSET ${options.skip}`);\n }\n\n return SQL.merge([...query, SQL`;`]);\n },\n countDocuments: <T>(filter: PongoFilter<T> | SQL): SQL => {\n const filterQuery = SQL.check.isSQL(filter)\n ? filter\n : constructFilterQuery(filter, serializer);\n return SQL`SELECT COUNT(1) as count FROM ${SQL.identifier(collectionName)} ${where(filterQuery)};`;\n },\n rename: (newName: string): SQL =>\n SQL`ALTER TABLE ${SQL.identifier(collectionName)} RENAME TO ${SQL.identifier(newName)};`,\n drop: (targetName: string = collectionName): SQL =>\n SQL`DROP TABLE IF EXISTS ${SQL.identifier(targetName)}`,\n});\n\nconst where = (filterQuery: SQL): SQL =>\n SQL.check.isEmpty(filterQuery)\n ? SQL.EMPTY\n : SQL.merge([SQL`WHERE `, filterQuery]);\n","import type { JSONSerializer } from '@event-driven-io/dumbo';\nimport { SQL } from '@event-driven-io/dumbo';\nimport {\n hasOperators,\n objectEntries,\n QueryOperators,\n type PongoFilter,\n} from '../../../../../core';\nimport { handleOperator } from './queryOperators';\n\nexport * from './queryOperators';\n\nconst AND = 'AND';\n\nexport const constructFilterQuery = <T>(\n filter: PongoFilter<T>,\n serializer: JSONSerializer,\n): SQL =>\n SQL.merge(\n Object.entries(filter).map(([key, value]) =>\n isRecord(value)\n ? constructComplexFilterQuery(key, value, serializer)\n : handleOperator(key, '$eq', value, serializer),\n ),\n ` ${AND} `,\n );\n\nconst constructComplexFilterQuery = (\n key: string,\n value: Record<string, unknown>,\n serializer: JSONSerializer,\n): SQL => {\n const isEquality = !hasOperators(value);\n\n return SQL.merge(\n objectEntries(value).map(([nestedKey, val]) =>\n isEquality\n ? handleOperator(\n `${key}.${nestedKey}`,\n QueryOperators.$eq,\n val,\n serializer,\n )\n : handleOperator(key, nestedKey, val, serializer),\n ),\n ` ${AND} `,\n );\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === 'object' && !Array.isArray(value);\n","import type { JSONSerializer } from '@event-driven-io/dumbo';\nimport { SQL } from '@event-driven-io/dumbo';\nimport { objectEntries, OperatorMap } from '../../../../../core';\n\nexport const handleOperator = (\n path: string,\n operator: string,\n value: unknown,\n serializer: JSONSerializer,\n): SQL => {\n if (path === '_id' || path === '_version') {\n return handleMetadataOperator(path, operator, value);\n }\n\n switch (operator) {\n case '$eq': {\n const nestedPath = serializer.serialize(buildNestedObject(path, value));\n const serializedValue = serializer.serialize(value);\n\n return SQL`(data @> ${nestedPath}::jsonb OR jsonb_path_exists(data, '$.${SQL.plain(path)}[*] ? (@ == ${SQL.plain(serializedValue)})'))`;\n }\n case '$gt':\n case '$gte':\n case '$lt':\n case '$lte':\n case '$ne': {\n const jsonPath = SQL.plain(path.split('.').join(','));\n\n return SQL`data ->> '${jsonPath}' ${SQL.plain(OperatorMap[operator])} ${value}`;\n }\n case '$in': {\n const jsonPath = `{${path.split('.').join(',')}}`;\n\n return SQL`data #>> ${jsonPath} = ANY (${value as unknown[]})`;\n }\n case '$nin': {\n const jsonPath = `{${path.split('.').join(',')}}`;\n\n return SQL`data #>> ${jsonPath} != ALL (${value as unknown[]})`;\n }\n case '$elemMatch': {\n const subQuery = objectEntries(value as Record<string, unknown>)\n .map(\n ([subKey, subValue]) =>\n `@.\"${subKey}\" == ${serializer.serialize(subValue)}`,\n )\n .join(' && ');\n return SQL`jsonb_path_exists(data, '$.${SQL.plain(path)}[*] ? (${SQL.plain(subQuery)})')`;\n }\n case '$all': {\n const nestedPath = serializer.serialize(buildNestedObject(path, value));\n return SQL`data @> ${nestedPath}::jsonb`;\n }\n case '$size': {\n const jsonPath = `{${path.split('.').join(',')}}`;\n\n return SQL`jsonb_array_length(data #> ${jsonPath}) = ${value}`;\n }\n default:\n throw new Error(`Unsupported operator: ${operator}`);\n }\n};\n\nconst handleMetadataOperator = (\n fieldName: string,\n operator: string,\n value: unknown,\n): SQL => {\n switch (operator) {\n case '$eq':\n return SQL`${SQL.plain(fieldName)} = ${value}`;\n case '$gt':\n case '$gte':\n case '$lt':\n case '$lte':\n case '$ne':\n return SQL`${SQL.plain(fieldName)} ${SQL.plain(OperatorMap[operator])} ${value}`;\n case '$in':\n return SQL`${SQL.plain(fieldName)} = ANY (${value as unknown[]})`;\n case '$nin':\n return SQL`${SQL.plain(fieldName)} != ALL (${value as unknown[]})`;\n default:\n throw new Error(`Unsupported operator: ${operator}`);\n }\n};\n\nconst buildNestedObject = (\n path: string,\n value: unknown,\n): Record<string, unknown> =>\n path\n .split('.')\n .reverse()\n .reduce((acc, key) => ({ [key]: acc }), value as Record<string, unknown>);\n","import type { JSONSerializer } from '@event-driven-io/dumbo';\nimport { SQL } from '@event-driven-io/dumbo';\nimport {\n objectEntries,\n type $inc,\n type $push,\n type $set,\n type $unset,\n type PongoUpdate,\n} from '../../../../../core';\n\nexport const buildUpdateQuery = <T>(\n update: PongoUpdate<T>,\n serializer: JSONSerializer,\n): SQL =>\n objectEntries(update).reduce(\n (currentUpdateQuery, [op, value]) => {\n switch (op) {\n case '$set':\n return buildSetQuery(value, currentUpdateQuery, serializer);\n case '$unset':\n return buildUnsetQuery(value, currentUpdateQuery);\n case '$inc':\n return buildIncQuery(value, currentUpdateQuery);\n case '$push':\n return buildPushQuery(value, currentUpdateQuery, serializer);\n default:\n return currentUpdateQuery;\n }\n },\n SQL`data`,\n );\n\nexport const buildSetQuery = <T>(\n set: $set<T>,\n currentUpdateQuery: SQL,\n serializer: JSONSerializer,\n): SQL => SQL`${currentUpdateQuery} || ${serializer.serialize(set)}::jsonb`;\n\nexport const buildUnsetQuery = <T>(\n unset: $unset<T>,\n currentUpdateQuery: SQL,\n): SQL =>\n SQL`${currentUpdateQuery} - ${Object.keys(unset)\n .map((k) => `{${k}}`)\n .join(', ')}`;\n\nexport const buildIncQuery = <T>(\n inc: $inc<T>,\n currentUpdateQuery: SQL,\n): SQL => {\n for (const [key, value] of Object.entries(inc)) {\n currentUpdateQuery =\n typeof value === 'bigint'\n ? SQL`jsonb_set(${currentUpdateQuery}, '{${SQL.plain(key)}}', to_jsonb((COALESCE((data->>'${SQL.plain(key)}')::BIGINT, 0) + ${value})::TEXT), true)`\n : SQL`jsonb_set(${currentUpdateQuery}, '{${SQL.plain(key)}}', to_jsonb(COALESCE((data->>'${SQL.plain(key)}')::NUMERIC, 0) + ${value}), true)`;\n }\n return currentUpdateQuery;\n};\n\nexport const buildPushQuery = <T>(\n push: $push<T>,\n currentUpdateQuery: SQL,\n serializer: JSONSerializer,\n): SQL => {\n for (const [key, value] of Object.entries(push)) {\n const serializedValue = serializer.serialize([value]);\n currentUpdateQuery = SQL`jsonb_set(${currentUpdateQuery}, '{${SQL.plain(key)}}', (coalesce(data->'${SQL.plain(key)}', '[]'::jsonb) || ${serializedValue}::jsonb), true)`;\n }\n return currentUpdateQuery;\n};\n","import { dumbo, JSONSerializer } from '@event-driven-io/dumbo';\nimport {\n pgDumboDriver as dumboDriver,\n PgDriverType,\n postgreSQLMetadata,\n type PgConnection,\n} from '@event-driven-io/dumbo/pg';\nimport type pg from 'pg';\nimport {\n PongoCollectionSchemaComponent,\n PongoDatabase,\n PongoDatabaseSchemaComponent,\n pongoDriverRegistry,\n pongoSchema,\n type PongoDb,\n type PongoDriver,\n type PongoDriverOptions,\n} from '../../../core';\nimport {\n pongoCollectionPostgreSQLMigrations,\n postgresSQLBuilder,\n} from '../core';\n\nexport type PgPongoClientOptions =\n | PooledPongoClientOptions\n | NotPooledPongoOptions;\n\nexport type PooledPongoClientOptions =\n | {\n pool: pg.Pool;\n }\n | {\n pooled: true;\n }\n | {\n pool: pg.Pool;\n pooled: true;\n }\n | object;\n\nexport type NotPooledPongoOptions =\n | {\n client: pg.Client;\n }\n | {\n pooled: false;\n }\n | {\n client: pg.Client;\n pooled: false;\n }\n | {\n connection: PgConnection;\n pooled?: false;\n };\n\ntype PgDatabaseDriverOptions = PongoDriverOptions<PgPongoClientOptions> & {\n databaseName?: string | undefined;\n connectionString: string;\n};\n\nconst pgPongoDriver: PongoDriver<\n PongoDb<PgDriverType>,\n PgDatabaseDriverOptions\n> = {\n driverType: PgDriverType,\n databaseFactory: (options) => {\n const databaseName =\n options.databaseName ??\n postgreSQLMetadata.parseDatabaseName(options.connectionString) ??\n postgreSQLMetadata.defaultDatabaseName;\n\n return PongoDatabase({\n ...options,\n pool: dumbo({\n connectionString: options.connectionString,\n driver: dumboDriver,\n ...options.connectionOptions,\n serialization: { serializer: options.serializer },\n }),\n schemaComponent: PongoDatabaseSchemaComponent({\n driverType: PgDriverType,\n collectionFactory: (schema) =>\n PongoCollectionSchemaComponent({\n driverType: PgDriverType,\n definition: schema,\n migrationsOrSchemaComponents: {\n migrations: pongoCollectionPostgreSQLMigrations(schema.name),\n },\n sqlBuilder: postgresSQLBuilder(\n schema.name,\n options.serialization?.serializer ?? JSONSerializer,\n ),\n }),\n definition:\n options.schema?.definition ?? pongoSchema.db(databaseName, {}),\n }),\n databaseName,\n });\n },\n};\n\nexport const usePgPongoDriver = () => {\n pongoDriverRegistry.register(PgDriverType, pgPongoDriver);\n};\n\nusePgPongoDriver();\n\nexport { pgPongoDriver as pgDriver, pgPongoDriver as pongoDriver };\n"],"mappings":"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","names":["SQL","SQL","SQL","SQL","SQL","SQL"]}
@@ -1,4 +1,4 @@
1
- import { DatabaseDriverType, SchemaComponent, MigrationStyle, WithDatabaseTransactionFactory, AnyConnection, DatabaseTransaction, SQLExecutor, SQL, QueryResultRow, QueryResult, SchemaComponentOptions } from '@event-driven-io/dumbo';
1
+ import { DatabaseDriverType, SchemaComponent, JSONSerializationOptions, MigrationStyle, JSONSerializer, WithDatabaseTransactionFactory, AnyConnection, DatabaseTransaction, SQLExecutor, SQL, RunSQLMigrationsResult, QueryResultRow, QueryResult, SQLQueryOptions, SQLCommandOptions, SchemaComponentOptions } from '@event-driven-io/dumbo';
2
2
 
3
3
  interface PongoCollectionSchema<T extends PongoDocument = PongoDocument> {
4
4
  name: string;
@@ -68,49 +68,42 @@ type PongoDatabaseSQLBuilder<DriverType extends DatabaseDriverType = DatabaseDri
68
68
  collection: PongoCollectionSQLBuilder;
69
69
  };
70
70
 
71
- interface PongoDatabaseDriverOptions<ConnectionOptions = unknown> {
71
+ type PongoDriverOptions<ConnectionOptions = unknown> = {
72
72
  connectionOptions?: ConnectionOptions | undefined;
73
- }
74
- type AnyPongoDatabaseDriverOptions = PongoDatabaseDriverOptions<any>;
75
- type PongoDatabaseFactoryOptions<CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<string, PongoCollectionSchema>, DriverOptions extends AnyPongoDatabaseDriverOptions = AnyPongoDatabaseDriverOptions> = {
73
+ } & JSONSerializationOptions;
74
+ type AnyPongoDriverOptions = PongoDriverOptions<any>;
75
+ type PongoDatabaseFactoryOptions<CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<string, PongoCollectionSchema>, DriverOptions extends AnyPongoDriverOptions = AnyPongoDriverOptions> = {
76
76
  databaseName?: string | undefined;
77
77
  schema?: {
78
78
  autoMigration?: MigrationStyle;
79
79
  definition?: PongoDbSchema<CollectionsSchema>;
80
80
  } | undefined;
81
+ serializer: JSONSerializer;
81
82
  errors?: {
82
83
  throwOnOperationFailures?: boolean;
83
84
  } | undefined;
84
85
  } & DriverOptions;
85
- type DatabaseDriverOptionsWithDatabaseName = {
86
- databaseName?: string | undefined;
87
- };
88
- type DatabaseDriverOptionsWithConnectionString = {
89
- connectionString?: string | undefined;
90
- };
91
- interface PongoDatabaseDriver<Database extends AnyPongoDb = AnyPongoDb, DriverOptions extends AnyPongoDatabaseDriverOptions = AnyPongoDatabaseDriverOptions> {
86
+ interface PongoDriver<Database extends AnyPongoDb = AnyPongoDb, DriverOptions extends AnyPongoDriverOptions = AnyPongoDriverOptions> {
92
87
  driverType: Database['driverType'];
93
88
  databaseFactory<CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<string, PongoCollectionSchema>>(options: PongoDatabaseFactoryOptions<CollectionsSchema, DriverOptions>): Database & PongoDb<Database['driverType']>;
94
- getDatabaseNameOrDefault?<CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<string, PongoCollectionSchema>>(options: PongoDatabaseFactoryOptions<CollectionsSchema, DriverOptions>): string;
95
- defaultConnectionString: string;
96
89
  }
97
- type AnyPongoDatabaseDriver = PongoDatabaseDriver<AnyPongoDb, AnyPongoDatabaseDriverOptions>;
98
- type ExtractPongoDatabaseDriverOptions<DatabaseDriver> = DatabaseDriver extends PongoDatabaseDriver<any, infer O> ? O : never;
99
- type ExtractPongoDatabaseTypeFromDriver<DatabaseDriver> = DatabaseDriver extends PongoDatabaseDriver<infer D, any> ? D : never;
100
- declare const PongoDatabaseDriverRegistry: () => {
101
- register: <Database extends AnyPongoDb = AnyPongoDb>(driverType: Database["driverType"], driver: PongoDatabaseDriver<Database> | (() => Promise<PongoDatabaseDriver<Database>>)) => void;
102
- tryResolve: <Driver extends AnyPongoDatabaseDriver = AnyPongoDatabaseDriver>(driverType: Driver["driverType"]) => Promise<Driver | null>;
103
- tryGet: <Driver extends AnyPongoDatabaseDriver = AnyPongoDatabaseDriver>(driverType: Driver["driverType"]) => Driver | null;
90
+ type AnyPongoDriver = PongoDriver<AnyPongoDb, AnyPongoDriverOptions>;
91
+ type ExtractPongoDriverOptions<DatabaseDriver> = DatabaseDriver extends PongoDriver<any, infer O> ? O : never;
92
+ type ExtractPongoDatabaseTypeFromDriver<DatabaseDriver> = DatabaseDriver extends PongoDriver<infer D, any> ? D : never;
93
+ declare const PongoDriverRegistry: () => {
94
+ register: <Database extends AnyPongoDb = AnyPongoDb>(driverType: Database["driverType"], driver: PongoDriver<Database> | (() => Promise<PongoDriver<Database>>)) => void;
95
+ tryResolve: <Driver extends AnyPongoDriver = AnyPongoDriver>(driverType: Driver["driverType"]) => Promise<Driver | null>;
96
+ tryGet: <Driver extends AnyPongoDriver = AnyPongoDriver>(driverType: Driver["driverType"]) => Driver | null;
104
97
  has: (driverType: DatabaseDriverType) => boolean;
105
98
  readonly databaseDriverTypes: DatabaseDriverType[];
106
99
  };
107
100
  declare global {
108
- var pongoDatabaseDriverRegistry: ReturnType<typeof PongoDatabaseDriverRegistry>;
101
+ var pongoDriverRegistry: ReturnType<typeof PongoDriverRegistry>;
109
102
  }
110
- declare const pongoDatabaseDriverRegistry: {
111
- register: <Database extends AnyPongoDb = AnyPongoDb>(driverType: Database["driverType"], driver: PongoDatabaseDriver<Database> | (() => Promise<PongoDatabaseDriver<Database>>)) => void;
112
- tryResolve: <Driver extends AnyPongoDatabaseDriver = AnyPongoDatabaseDriver>(driverType: Driver["driverType"]) => Promise<Driver | null>;
113
- tryGet: <Driver extends AnyPongoDatabaseDriver = AnyPongoDatabaseDriver>(driverType: Driver["driverType"]) => Driver | null;
103
+ declare const pongoDriverRegistry: {
104
+ register: <Database extends AnyPongoDb = AnyPongoDb>(driverType: Database["driverType"], driver: PongoDriver<Database> | (() => Promise<PongoDriver<Database>>)) => void;
105
+ tryResolve: <Driver extends AnyPongoDriver = AnyPongoDriver>(driverType: Driver["driverType"]) => Promise<Driver | null>;
106
+ tryGet: <Driver extends AnyPongoDriver = AnyPongoDriver>(driverType: Driver["driverType"]) => Driver | null;
114
107
  has: (driverType: DatabaseDriverType) => boolean;
115
108
  readonly databaseDriverTypes: DatabaseDriverType[];
116
109
  };
@@ -123,7 +116,7 @@ interface PongoClient<DriverType extends DatabaseDriverType = DatabaseDriverType
123
116
  startSession(): PongoSession<DriverType>;
124
117
  withSession<T = unknown>(callback: (session: PongoSession<DriverType>) => Promise<T>): Promise<T>;
125
118
  }
126
- type PongoClientOptions<DatabaseDriver extends AnyPongoDatabaseDriver = AnyPongoDatabaseDriver, TypedClientSchema extends PongoClientSchema = PongoClientSchema> = ExtractPongoDatabaseDriverOptions<DatabaseDriver> extends infer Options ? Options extends unknown ? {
119
+ type PongoClientOptions<DatabaseDriver extends AnyPongoDriver = AnyPongoDriver, TypedClientSchema extends PongoClientSchema = PongoClientSchema> = ExtractPongoDriverOptions<DatabaseDriver> extends infer Options ? Options extends unknown ? {
127
120
  driver: DatabaseDriver;
128
121
  schema?: {
129
122
  autoMigration?: MigrationStyle;
@@ -132,7 +125,7 @@ type PongoClientOptions<DatabaseDriver extends AnyPongoDatabaseDriver = AnyPongo
132
125
  errors?: {
133
126
  throwOnOperationFailures?: boolean;
134
127
  } | undefined;
135
- } & Omit<Options, 'driver'> : never : never;
128
+ } & JSONSerializationOptions & Omit<Options, 'driver'> : never : never;
136
129
  declare interface PongoTransactionOptions {
137
130
  get snapshotEnabled(): boolean;
138
131
  maxCommitTimeMS?: number;
@@ -162,23 +155,39 @@ interface PongoSession<DriverType extends DatabaseDriverType = DatabaseDriverTyp
162
155
  abortTransaction(): Promise<void>;
163
156
  withTransaction<T = unknown>(fn: (session: PongoSession<DriverType>) => Promise<T>, options?: PongoTransactionOptions): Promise<T>;
164
157
  }
158
+ type PongoDBCollectionOptions<T extends PongoDocument, Payload extends PongoDocument = T> = {
159
+ schema?: {
160
+ versioning?: {
161
+ upcast?: (document: Payload) => T;
162
+ downcast?: (document: T) => Payload;
163
+ };
164
+ };
165
+ errors?: {
166
+ throwOnOperationFailures?: boolean;
167
+ };
168
+ };
165
169
  interface PongoDb<DriverType extends DatabaseDriverType = DatabaseDriverType> extends WithDatabaseTransactionFactory<AnyConnection> {
166
170
  driverType: DriverType;
167
171
  databaseName: string;
168
172
  connect(): Promise<void>;
169
173
  close(): Promise<void>;
170
- collection<T extends PongoDocument>(name: string): PongoCollection<T>;
174
+ collection<T extends PongoDocument, Payload extends PongoDocument = T>(name: string, options?: PongoDBCollectionOptions<T, Payload>): PongoCollection<T>;
171
175
  collections(): ReadonlyArray<PongoCollection<PongoDocument>>;
172
176
  readonly schema: Readonly<{
173
177
  component: PongoDatabaseSchemaComponent<DriverType>;
174
- migrate(): Promise<void>;
178
+ migrate(options?: PongoMigrationOptions): Promise<RunSQLMigrationsResult>;
175
179
  }>;
176
180
  sql: {
177
- query<Result extends QueryResultRow = QueryResultRow>(sql: SQL, options?: CollectionOperationOptions): Promise<Result[]>;
178
- command<Result extends QueryResultRow = QueryResultRow>(sql: SQL, options?: CollectionOperationOptions): Promise<QueryResult<Result>>;
181
+ query<Result extends QueryResultRow = QueryResultRow>(sql: SQL, options?: CollectionOperationOptions & SQLQueryOptions): Promise<Result[]>;
182
+ command<Result extends QueryResultRow = QueryResultRow>(sql: SQL, options?: CollectionOperationOptions & SQLCommandOptions): Promise<QueryResult<Result>>;
179
183
  };
180
184
  }
181
185
  type AnyPongoDb = PongoDb<DatabaseDriverType>;
186
+ type PongoMigrationOptions = {
187
+ dryRun?: boolean | undefined;
188
+ ignoreMigrationHashMismatch?: boolean | undefined;
189
+ migrationTimeoutMs?: number | undefined;
190
+ };
182
191
  type CollectionOperationOptions = {
183
192
  session?: PongoSession;
184
193
  };
@@ -232,7 +241,7 @@ interface PongoCollection<T extends PongoDocument> {
232
241
  handle(id: string, handle: DocumentHandler<T>, options?: HandleOptions): Promise<PongoHandleResult<T>>;
233
242
  readonly schema: Readonly<{
234
243
  component: PongoCollectionSchemaComponent;
235
- migrate(): Promise<void>;
244
+ migrate(options?: PongoMigrationOptions): Promise<RunSQLMigrationsResult>;
236
245
  }>;
237
246
  sql: {
238
247
  query<Result extends QueryResultRow = QueryResultRow>(sql: SQL, options?: CollectionOperationOptions): Promise<Result[]>;
@@ -352,6 +361,7 @@ type OperationResult = {
352
361
  declare const operationResult: <T extends OperationResult>(result: Omit<T, "assertSuccess" | "acknowledged" | "assertSuccessful">, options: {
353
362
  operationName: string;
354
363
  collectionName: string;
364
+ serializer: JSONSerializer;
355
365
  errors?: {
356
366
  throwOnOperationFailures?: boolean;
357
367
  } | undefined;
@@ -423,4 +433,4 @@ type PongoCollectionSchemaComponent = SchemaComponent<PongoCollectionURN> & {
423
433
  };
424
434
  declare const PongoCollectionSchemaComponent: <DriverType extends DatabaseDriverType = DatabaseDriverType>({ definition, migrationsOrSchemaComponents, sqlBuilder, }: PongoCollectionSchemaComponentOptions<DriverType>) => PongoCollectionSchemaComponent;
425
435
 
426
- export { type DeleteOneOptions as $, type AnyPongoDb as A, type DatabaseDriverOptionsWithConnectionString as B, type CollectionOperationOptions as C, type DatabaseDriverOptionsWithDatabaseName as D, type ExtractPongoDatabaseTypeFromDriver as E, type ExtractPongoDatabaseDriverOptions as F, PongoDatabaseDriverRegistry as G, pongoDatabaseDriverRegistry as H, type CollectionsMap as I, type PongoDbWithSchema as J, type DBsMap as K, pongoSchema as L, proxyPongoDbWithSchema as M, proxyClientWithSchema as N, type PongoCollectionSchemaMetadata as O, type PongoDatabaseDriver as P, type PongoDbSchemaMetadata as Q, type PongoClientSchemaMetadata as R, toDbSchemaMetadata as S, toClientSchemaMetadata as T, type PongoSchemaConfig as U, type InsertOneOptions as V, type InsertManyOptions as W, type UpdateOneOptions as X, type UpdateManyOptions as Y, type HandleOptions as Z, type ReplaceOneOptions as _, type PongoDb as a, type DeleteManyOptions as a0, type FindOptions as a1, ObjectId as a2, type HasId as a3, type InferIdType as a4, type EnhancedOmit as a5, type OptionalUnlessRequiredId as a6, type OptionalUnlessRequiredVersion as a7, type OptionalUnlessRequiredIdAndVersion as a8, type WithId as a9, isGeneralExpectedDocumentVersion as aA, expectedVersionValue as aB, expectedVersion as aC, type PongoUpdate as aD, type OperationResult as aE, operationResult as aF, type PongoInsertOneResult as aG, type PongoInsertManyResult as aH, type PongoUpdateResult as aI, type PongoUpdateManyResult as aJ, type PongoDeleteResult as aK, type PongoDeleteManyResult as aL, type PongoHandleResult as aM, type DocumentHandler as aN, type WithoutId as aa, type WithVersion as ab, type WithoutVersion as ac, type WithIdAndVersion as ad, type WithoutIdAndVersion as ae, type RegExpOrString as af, type Document as ag, type OptionalId as ah, type OptionalVersion as ai, type ObjectIdLike as aj, type NonObjectIdLikeDocument as ak, type AlternativeType as al, type Condition as am, type PongoFilter as an, type RootFilterOperators as ao, type PongoFilterOperator as ap, type $set as aq, type $unset as ar, type $inc as as, type $push as at, type ExpectedDocumentVersionGeneral as au, type ExpectedDocumentVersionValue as av, type ExpectedDocumentVersion as aw, DOCUMENT_EXISTS as ax, DOCUMENT_DOES_NOT_EXIST as ay, NO_CONCURRENCY_CHECK as az, type PongoDatabaseDriverOptions as b, PongoCollectionSchemaComponent as c, type PongoDocument as d, type PongoCollection as e, type PongoClientSchema as f, type PongoCollectionSchema as g, type PongoDatabaseFactoryOptions as h, PongoDatabaseSchemaComponent as i, type PongoDbSchema as j, type AnyPongoDatabaseDriver as k, type PongoClientOptions as l, type PongoClient as m, type PongoClientWithSchema as n, type PongoTransactionOptions as o, type PongoSession as p, type PongoDbTransaction as q, type PongoCollectionSQLBuilder as r, type PongoCollectionURNType as s, type PongoCollectionURN as t, type PongoCollectionSchemaComponentOptions as u, type PongoDatabaseURNType as v, type PongoDatabaseURN as w, type PongoDatabaseSchemaComponentOptions as x, type PongoDatabaseSQLBuilder as y, type AnyPongoDatabaseDriverOptions as z };
436
+ export { type DeleteOneOptions as $, type AnyPongoDb as A, type ExtractPongoDriverOptions as B, type CollectionOperationOptions as C, PongoDriverRegistry as D, type ExtractPongoDatabaseTypeFromDriver as E, pongoDriverRegistry as F, type CollectionsMap as G, type PongoDbWithSchema as H, type DBsMap as I, pongoSchema as J, proxyPongoDbWithSchema as K, proxyClientWithSchema as L, type PongoCollectionSchemaMetadata as M, type PongoDbSchemaMetadata as N, type PongoClientSchemaMetadata as O, type PongoDriver as P, toDbSchemaMetadata as Q, toClientSchemaMetadata as R, type PongoSchemaConfig as S, type PongoDBCollectionOptions as T, type PongoMigrationOptions as U, type InsertOneOptions as V, type InsertManyOptions as W, type UpdateOneOptions as X, type UpdateManyOptions as Y, type HandleOptions as Z, type ReplaceOneOptions as _, type PongoDb as a, type DeleteManyOptions as a0, type FindOptions as a1, ObjectId as a2, type HasId as a3, type InferIdType as a4, type EnhancedOmit as a5, type OptionalUnlessRequiredId as a6, type OptionalUnlessRequiredVersion as a7, type OptionalUnlessRequiredIdAndVersion as a8, type WithId as a9, isGeneralExpectedDocumentVersion as aA, expectedVersionValue as aB, expectedVersion as aC, type PongoUpdate as aD, type OperationResult as aE, operationResult as aF, type PongoInsertOneResult as aG, type PongoInsertManyResult as aH, type PongoUpdateResult as aI, type PongoUpdateManyResult as aJ, type PongoDeleteResult as aK, type PongoDeleteManyResult as aL, type PongoHandleResult as aM, type DocumentHandler as aN, type WithoutId as aa, type WithVersion as ab, type WithoutVersion as ac, type WithIdAndVersion as ad, type WithoutIdAndVersion as ae, type RegExpOrString as af, type Document as ag, type OptionalId as ah, type OptionalVersion as ai, type ObjectIdLike as aj, type NonObjectIdLikeDocument as ak, type AlternativeType as al, type Condition as am, type PongoFilter as an, type RootFilterOperators as ao, type PongoFilterOperator as ap, type $set as aq, type $unset as ar, type $inc as as, type $push as at, type ExpectedDocumentVersionGeneral as au, type ExpectedDocumentVersionValue as av, type ExpectedDocumentVersion as aw, DOCUMENT_EXISTS as ax, DOCUMENT_DOES_NOT_EXIST as ay, NO_CONCURRENCY_CHECK as az, type PongoDriverOptions as b, type PongoDocument as c, PongoCollectionSchemaComponent as d, type PongoCollection as e, type PongoClientSchema as f, type PongoCollectionSchema as g, type PongoDatabaseFactoryOptions as h, PongoDatabaseSchemaComponent as i, type PongoDbSchema as j, type AnyPongoDriver as k, type PongoClientOptions as l, type PongoClient as m, type PongoClientWithSchema as n, type PongoTransactionOptions as o, type PongoSession as p, type PongoDbTransaction as q, type PongoCollectionSQLBuilder as r, type PongoCollectionURNType as s, type PongoCollectionURN as t, type PongoCollectionSchemaComponentOptions as u, type PongoDatabaseURNType as v, type PongoDatabaseURN as w, type PongoDatabaseSchemaComponentOptions as x, type PongoDatabaseSQLBuilder as y, type AnyPongoDriverOptions as z };