@event-driven-io/pongo 0.17.0-beta.3 → 0.17.0-beta.30
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.
- package/dist/{chunk-ECQ2CKZE.cjs → chunk-A4DCNQJR.cjs} +45 -43
- package/dist/chunk-A4DCNQJR.cjs.map +1 -0
- package/dist/{chunk-4BL6YWLW.cjs → chunk-BZRKCNRY.cjs} +105 -72
- package/dist/chunk-BZRKCNRY.cjs.map +1 -0
- package/dist/{chunk-NCNRRYVE.js → chunk-H637RRXS.js} +85 -52
- package/dist/chunk-H637RRXS.js.map +1 -0
- package/dist/{chunk-Y7LRKJLJ.js → chunk-TTZGGAZV.js} +40 -38
- package/dist/chunk-TTZGGAZV.js.map +1 -0
- package/dist/cli.cjs +43 -37
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +34 -28
- package/dist/cli.js.map +1 -1
- package/dist/cloudflare.cjs +53 -0
- package/dist/cloudflare.cjs.map +1 -0
- package/dist/cloudflare.d.cts +11 -0
- package/dist/cloudflare.d.ts +11 -0
- package/dist/{d1.js → cloudflare.js} +19 -20
- package/dist/cloudflare.js.map +1 -0
- package/dist/index-DxHXL62G.d.cts +8 -0
- package/dist/index-gHRYr05w.d.ts +8 -0
- package/dist/index.cjs +27 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -9
- package/dist/index.d.ts +17 -9
- package/dist/index.js +30 -6
- package/dist/index.js.map +1 -1
- package/dist/pg.cjs +344 -4
- package/dist/pg.cjs.map +1 -1
- package/dist/pg.d.cts +10 -9
- package/dist/pg.d.ts +10 -9
- package/dist/pg.js +350 -10
- package/dist/pg.js.map +1 -1
- package/dist/{pongoCollectionSchemaComponent-t_e9n2Wc.d.cts → pongoCollectionSchemaComponent-B5Oatwu0.d.cts} +44 -34
- package/dist/{pongoCollectionSchemaComponent-t_e9n2Wc.d.ts → pongoCollectionSchemaComponent-B5Oatwu0.d.ts} +44 -34
- package/dist/shim.cjs +12 -14
- package/dist/shim.cjs.map +1 -1
- package/dist/shim.d.cts +4 -4
- package/dist/shim.d.ts +4 -4
- package/dist/shim.js +7 -9
- package/dist/shim.js.map +1 -1
- package/dist/sqlite3.cjs +21 -26
- package/dist/sqlite3.cjs.map +1 -1
- package/dist/sqlite3.d.cts +6 -6
- package/dist/sqlite3.d.ts +6 -6
- package/dist/sqlite3.js +20 -25
- package/dist/sqlite3.js.map +1 -1
- package/package.json +34 -38
- package/dist/chunk-4BL6YWLW.cjs.map +0 -1
- package/dist/chunk-ECQ2CKZE.cjs.map +0 -1
- package/dist/chunk-EYQDS752.js +0 -364
- package/dist/chunk-EYQDS752.js.map +0 -1
- package/dist/chunk-NCNRRYVE.js.map +0 -1
- package/dist/chunk-WH26IXHN.js +0 -10
- package/dist/chunk-WH26IXHN.js.map +0 -1
- package/dist/chunk-WKW4LGF6.cjs +0 -10
- package/dist/chunk-WKW4LGF6.cjs.map +0 -1
- package/dist/chunk-Y7LRKJLJ.js.map +0 -1
- package/dist/chunk-ZPWKWNK2.cjs +0 -364
- package/dist/chunk-ZPWKWNK2.cjs.map +0 -1
- package/dist/d1.cjs +0 -54
- package/dist/d1.cjs.map +0 -1
- package/dist/d1.d.cts +0 -11
- package/dist/d1.d.ts +0 -11
- package/dist/d1.js.map +0 -1
- package/dist/index-BJopB-em.d.cts +0 -7
- package/dist/index-G5DECNb_.d.ts +0 -7
- package/dist/pg-73DOKU64.js +0 -11
- package/dist/pg-73DOKU64.js.map +0 -1
- package/dist/pg-I267A7IL.cjs +0 -11
- 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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
11
|
-
pgDatabaseDriver as pgDriver,
|
|
350
|
+
pgPongoDriver as pgDriver,
|
|
12
351
|
pongoCollectionPostgreSQLMigrations,
|
|
352
|
+
pgPongoDriver as pongoDriver,
|
|
13
353
|
postgresSQLBuilder,
|
|
14
|
-
|
|
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
|
-
|
|
71
|
+
type PongoDriverOptions<ConnectionOptions = unknown> = {
|
|
72
72
|
connectionOptions?: ConnectionOptions | undefined;
|
|
73
|
-
}
|
|
74
|
-
type
|
|
75
|
-
type PongoDatabaseFactoryOptions<CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<string, PongoCollectionSchema>, DriverOptions extends
|
|
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
|
-
|
|
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
|
|
98
|
-
type
|
|
99
|
-
type ExtractPongoDatabaseTypeFromDriver<DatabaseDriver> = DatabaseDriver extends
|
|
100
|
-
declare const
|
|
101
|
-
register: <Database extends AnyPongoDb = AnyPongoDb>(driverType: Database["driverType"], driver:
|
|
102
|
-
tryResolve: <Driver extends
|
|
103
|
-
tryGet: <Driver extends
|
|
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
|
|
101
|
+
var pongoDriverRegistry: ReturnType<typeof PongoDriverRegistry>;
|
|
109
102
|
}
|
|
110
|
-
declare const
|
|
111
|
-
register: <Database extends AnyPongoDb = AnyPongoDb>(driverType: Database["driverType"], driver:
|
|
112
|
-
tryResolve: <Driver extends
|
|
113
|
-
tryGet: <Driver extends
|
|
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
|
|
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<
|
|
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<
|
|
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
|
|
436
|
+
export { type $inc as $, type AnyPongoDb as A, type DeleteManyOptions as B, type CollectionOperationOptions as C, type DBsMap as D, type ExtractPongoDatabaseTypeFromDriver as E, type DeleteOneOptions as F, type Document as G, type DocumentHandler as H, type EnhancedOmit as I, type ExpectedDocumentVersion as J, type ExpectedDocumentVersionGeneral as K, type ExpectedDocumentVersionValue as L, type ExtractPongoDriverOptions as M, type FindOptions as N, type HandleOptions as O, type PongoDriver as P, type HasId as Q, type InferIdType as R, type InsertManyOptions as S, type InsertOneOptions as T, NO_CONCURRENCY_CHECK as U, type NonObjectIdLikeDocument as V, ObjectId as W, type ObjectIdLike as X, type OperationResult as Y, type OptionalId as Z, type OptionalUnlessRequiredId as _, type PongoDb as a, type OptionalUnlessRequiredIdAndVersion as a0, type OptionalUnlessRequiredVersion as a1, type OptionalVersion as a2, type PongoClientSchemaMetadata as a3, type PongoCollectionSQLBuilder as a4, type PongoCollectionSchemaComponentOptions as a5, type PongoCollectionSchemaMetadata as a6, type PongoCollectionURN as a7, type PongoCollectionURNType as a8, type PongoDBCollectionOptions as a9, type WithVersion as aA, type WithoutId as aB, type WithoutIdAndVersion as aC, type WithoutVersion as aD, expectedVersion as aE, expectedVersionValue as aF, isGeneralExpectedDocumentVersion as aG, operationResult as aH, pongoDriverRegistry as aI, pongoSchema as aJ, proxyClientWithSchema as aK, proxyPongoDbWithSchema as aL, toClientSchemaMetadata as aM, toDbSchemaMetadata as aN, type PongoDatabaseSQLBuilder as aa, type PongoDatabaseSchemaComponentOptions as ab, type PongoDatabaseURN as ac, type PongoDatabaseURNType as ad, type PongoDbSchemaMetadata as ae, type PongoDbWithSchema as af, type PongoDeleteManyResult as ag, type PongoDeleteResult as ah, PongoDriverRegistry as ai, type PongoFilter as aj, type PongoFilterOperator as ak, type PongoHandleResult as al, type PongoInsertManyResult as am, type PongoInsertOneResult as an, type PongoMigrationOptions as ao, type PongoSchemaConfig as ap, type PongoUpdate as aq, type PongoUpdateManyResult as ar, type PongoUpdateResult as as, type RegExpOrString as at, type ReplaceOneOptions as au, type RootFilterOperators as av, type UpdateManyOptions as aw, type UpdateOneOptions as ax, type WithId as ay, type WithIdAndVersion 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 $push as r, type $set as s, type $unset as t, type AlternativeType as u, type AnyPongoDriverOptions as v, type CollectionsMap as w, type Condition as x, DOCUMENT_DOES_NOT_EXIST as y, DOCUMENT_EXISTS as z };
|