@event-driven-io/pongo 0.17.0-beta.17 → 0.17.0-beta.19

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 (45) hide show
  1. package/dist/{chunk-QJZKVZBU.cjs → chunk-56GGH7CW.cjs} +12 -12
  2. package/dist/{chunk-QJZKVZBU.cjs.map → chunk-56GGH7CW.cjs.map} +1 -1
  3. package/dist/{chunk-LHIYVLUA.cjs → chunk-HZZ76RUC.cjs} +33 -27
  4. package/dist/chunk-HZZ76RUC.cjs.map +1 -0
  5. package/dist/{chunk-BHL7DORE.js → chunk-IBYIIPWV.js} +8 -2
  6. package/dist/chunk-IBYIIPWV.js.map +1 -0
  7. package/dist/{chunk-E66GVGL3.js → chunk-T5YVXV53.js} +2 -2
  8. package/dist/cli.cjs +31 -31
  9. package/dist/cli.cjs.map +1 -1
  10. package/dist/cli.js +20 -20
  11. package/dist/cli.js.map +1 -1
  12. package/dist/cloudflare.cjs +11 -14
  13. package/dist/cloudflare.cjs.map +1 -1
  14. package/dist/cloudflare.d.cts +2 -2
  15. package/dist/cloudflare.d.ts +2 -2
  16. package/dist/cloudflare.js +3 -6
  17. package/dist/cloudflare.js.map +1 -1
  18. package/dist/{index-jnCVHtgU.d.cts → index-486WMLOn.d.cts} +1 -1
  19. package/dist/{index-BbSLAsTJ.d.ts → index-C2T_cRSs.d.ts} +1 -1
  20. package/dist/index.cjs +2 -2
  21. package/dist/index.d.cts +2 -2
  22. package/dist/index.d.ts +2 -2
  23. package/dist/index.js +1 -1
  24. package/dist/pg.cjs +18 -21
  25. package/dist/pg.cjs.map +1 -1
  26. package/dist/pg.d.cts +1 -1
  27. package/dist/pg.d.ts +1 -1
  28. package/dist/pg.js +5 -8
  29. package/dist/pg.js.map +1 -1
  30. package/dist/{pongoCollectionSchemaComponent-BApG9N1N.d.cts → pongoCollectionSchemaComponent-JWAbt4LN.d.cts} +0 -1
  31. package/dist/{pongoCollectionSchemaComponent-BApG9N1N.d.ts → pongoCollectionSchemaComponent-JWAbt4LN.d.ts} +0 -1
  32. package/dist/shim.cjs +5 -5
  33. package/dist/shim.d.cts +1 -1
  34. package/dist/shim.d.ts +1 -1
  35. package/dist/shim.js +1 -1
  36. package/dist/sqlite3.cjs +12 -16
  37. package/dist/sqlite3.cjs.map +1 -1
  38. package/dist/sqlite3.d.cts +2 -2
  39. package/dist/sqlite3.d.ts +2 -2
  40. package/dist/sqlite3.js +4 -8
  41. package/dist/sqlite3.js.map +1 -1
  42. package/package.json +2 -2
  43. package/dist/chunk-BHL7DORE.js.map +0 -1
  44. package/dist/chunk-LHIYVLUA.cjs.map +0 -1
  45. /package/dist/{chunk-E66GVGL3.js.map → chunk-T5YVXV53.js.map} +0 -0
package/dist/pg.cjs CHANGED
@@ -9,7 +9,7 @@
9
9
 
10
10
 
11
11
 
12
- var _chunkLHIYVLUAcjs = require('./chunk-LHIYVLUA.cjs');
12
+ var _chunkHZZ76RUCcjs = require('./chunk-HZZ76RUC.cjs');
13
13
 
14
14
  // src/storage/postgresql/core/sqlBuilder/index.ts
15
15
  var _dumbo = require('@event-driven-io/dumbo');
@@ -35,7 +35,7 @@ var handleOperator = (path, operator, value, serializer) => {
35
35
  case "$lte":
36
36
  case "$ne": {
37
37
  const jsonPath = _dumbo.SQL.plain(path.split(".").join(","));
38
- return _dumbo.SQL`data ->> '${jsonPath}' ${_dumbo.SQL.plain(_chunkLHIYVLUAcjs.OperatorMap[operator])} ${value}`;
38
+ return _dumbo.SQL`data ->> '${jsonPath}' ${_dumbo.SQL.plain(_chunkHZZ76RUCcjs.OperatorMap[operator])} ${value}`;
39
39
  }
40
40
  case "$in": {
41
41
  const jsonPath = `{${path.split(".").join(",")}}`;
@@ -46,7 +46,7 @@ var handleOperator = (path, operator, value, serializer) => {
46
46
  return _dumbo.SQL`data #>> ${jsonPath} != ALL (${value})`;
47
47
  }
48
48
  case "$elemMatch": {
49
- const subQuery = _chunkLHIYVLUAcjs.objectEntries.call(void 0, value).map(
49
+ const subQuery = _chunkHZZ76RUCcjs.objectEntries.call(void 0, value).map(
50
50
  ([subKey, subValue]) => `@."${subKey}" == ${serializer.serialize(subValue)}`
51
51
  ).join(" && ");
52
52
  return _dumbo.SQL`jsonb_path_exists(data, '$.${_dumbo.SQL.plain(path)}[*] ? (${_dumbo.SQL.plain(subQuery)})')`;
@@ -72,7 +72,7 @@ var handleMetadataOperator = (fieldName, operator, value) => {
72
72
  case "$lt":
73
73
  case "$lte":
74
74
  case "$ne":
75
- return _dumbo.SQL`${_dumbo.SQL.plain(fieldName)} ${_dumbo.SQL.plain(_chunkLHIYVLUAcjs.OperatorMap[operator])} ${value}`;
75
+ return _dumbo.SQL`${_dumbo.SQL.plain(fieldName)} ${_dumbo.SQL.plain(_chunkHZZ76RUCcjs.OperatorMap[operator])} ${value}`;
76
76
  case "$in":
77
77
  return _dumbo.SQL`${_dumbo.SQL.plain(fieldName)} = ANY (${value})`;
78
78
  case "$nin":
@@ -92,12 +92,12 @@ var constructFilterQuery = (filter, serializer) => _dumbo.SQL.merge(
92
92
  ` ${AND} `
93
93
  );
94
94
  var constructComplexFilterQuery = (key, value, serializer) => {
95
- const isEquality = !_chunkLHIYVLUAcjs.hasOperators.call(void 0, value);
95
+ const isEquality = !_chunkHZZ76RUCcjs.hasOperators.call(void 0, value);
96
96
  return _dumbo.SQL.merge(
97
- _chunkLHIYVLUAcjs.objectEntries.call(void 0, value).map(
97
+ _chunkHZZ76RUCcjs.objectEntries.call(void 0, value).map(
98
98
  ([nestedKey, val]) => isEquality ? handleOperator(
99
99
  `${key}.${nestedKey}`,
100
- _chunkLHIYVLUAcjs.QueryOperators.$eq,
100
+ _chunkHZZ76RUCcjs.QueryOperators.$eq,
101
101
  val,
102
102
  serializer
103
103
  ) : handleOperator(key, nestedKey, val, serializer)
@@ -109,7 +109,7 @@ var isRecord = (value) => value !== null && typeof value === "object" && !Array.
109
109
 
110
110
  // src/storage/postgresql/core/sqlBuilder/update/index.ts
111
111
 
112
- var buildUpdateQuery = (update, serializer) => _chunkLHIYVLUAcjs.objectEntries.call(void 0, update).reduce(
112
+ var buildUpdateQuery = (update, serializer) => _chunkHZZ76RUCcjs.objectEntries.call(void 0, update).reduce(
113
113
  (currentUpdateQuery, [op, value]) => {
114
114
  switch (op) {
115
115
  case "$set":
@@ -182,7 +182,7 @@ var postgresSQLBuilder = (collectionName, serializer) => ({
182
182
  RETURNING _id;`;
183
183
  },
184
184
  updateOne: (filter, update, options) => {
185
- const expectedVersion = _chunkLHIYVLUAcjs.expectedVersionValue.call(void 0, _optionalChain([options, 'optionalAccess', _ => _.expectedVersion]));
185
+ const expectedVersion = _chunkHZZ76RUCcjs.expectedVersionValue.call(void 0, _optionalChain([options, 'optionalAccess', _ => _.expectedVersion]));
186
186
  const expectedVersionUpdate = expectedVersion != null ? _dumbo.SQL`AND ${_dumbo.SQL.identifier(collectionName)}._version = ${expectedVersion}` : _dumbo.SQL``;
187
187
  const filterQuery = _dumbo.isSQL.call(void 0, filter) ? filter : constructFilterQuery(filter, serializer);
188
188
  const updateQuery = _dumbo.isSQL.call(void 0, update) ? update : buildUpdateQuery(update, serializer);
@@ -211,7 +211,7 @@ var postgresSQLBuilder = (collectionName, serializer) => ({
211
211
  ON existing._id = updated._id;`;
212
212
  },
213
213
  replaceOne: (filter, document, options) => {
214
- const expectedVersion = _chunkLHIYVLUAcjs.expectedVersionValue.call(void 0, _optionalChain([options, 'optionalAccess', _2 => _2.expectedVersion]));
214
+ const expectedVersion = _chunkHZZ76RUCcjs.expectedVersionValue.call(void 0, _optionalChain([options, 'optionalAccess', _2 => _2.expectedVersion]));
215
215
  const expectedVersionUpdate = expectedVersion != null ? _dumbo.SQL`AND ${_dumbo.SQL.identifier(collectionName)}._version = ${expectedVersion}` : _dumbo.SQL``;
216
216
  const filterQuery = _dumbo.isSQL.call(void 0, filter) ? filter : constructFilterQuery(filter, serializer);
217
217
  return _dumbo.SQL`
@@ -249,7 +249,7 @@ var postgresSQLBuilder = (collectionName, serializer) => ({
249
249
  ${where(filterQuery)};`;
250
250
  },
251
251
  deleteOne: (filter, options) => {
252
- const expectedVersion = _chunkLHIYVLUAcjs.expectedVersionValue.call(void 0, _optionalChain([options, 'optionalAccess', _3 => _3.expectedVersion]));
252
+ const expectedVersion = _chunkHZZ76RUCcjs.expectedVersionValue.call(void 0, _optionalChain([options, 'optionalAccess', _3 => _3.expectedVersion]));
253
253
  const expectedVersionUpdate = expectedVersion != null ? _dumbo.SQL`AND ${_dumbo.SQL.identifier(collectionName)}._version = ${expectedVersion}` : _dumbo.SQL``;
254
254
  const filterQuery = _dumbo.isSQL.call(void 0, filter) ? filter : constructFilterQuery(filter, serializer);
255
255
  return _dumbo.SQL`
@@ -314,18 +314,18 @@ var _pg = require('@event-driven-io/dumbo/pg');
314
314
  var pgDatabaseDriver = {
315
315
  driverType: _pg.PgDriverType,
316
316
  databaseFactory: (options) => {
317
- const databaseName = _nullishCoalesce(options.databaseName, () => ( _pg.getDatabaseNameOrDefault.call(void 0, options.connectionString)));
318
- return _chunkLHIYVLUAcjs.PongoDatabase.call(void 0, {
317
+ const databaseName = _nullishCoalesce(_nullishCoalesce(options.databaseName, () => ( _pg.postgreSQLMetadata.parseDatabaseName(options.connectionString))), () => ( _pg.postgreSQLMetadata.defaultDatabaseName));
318
+ return _chunkHZZ76RUCcjs.PongoDatabase.call(void 0, {
319
319
  ...options,
320
320
  pool: _dumbo.dumbo.call(void 0, {
321
321
  connectionString: options.connectionString,
322
- driver: _pg.pgDatabaseDriver,
322
+ driver: _pg.pgDumboDriver,
323
323
  ...options.connectionOptions,
324
324
  serialization: { serializer: options.serializer }
325
325
  }),
326
- schemaComponent: _chunkLHIYVLUAcjs.PongoDatabaseSchemaComponent.call(void 0, {
326
+ schemaComponent: _chunkHZZ76RUCcjs.PongoDatabaseSchemaComponent.call(void 0, {
327
327
  driverType: _pg.PgDriverType,
328
- collectionFactory: (schema) => _chunkLHIYVLUAcjs.PongoCollectionSchemaComponent.call(void 0, {
328
+ collectionFactory: (schema) => _chunkHZZ76RUCcjs.PongoCollectionSchemaComponent.call(void 0, {
329
329
  driverType: _pg.PgDriverType,
330
330
  definition: schema,
331
331
  migrationsOrSchemaComponents: {
@@ -336,17 +336,14 @@ var pgDatabaseDriver = {
336
336
  _nullishCoalesce(_optionalChain([options, 'access', _6 => _6.serialization, 'optionalAccess', _7 => _7.serializer]), () => ( _dumbo.JSONSerializer))
337
337
  )
338
338
  }),
339
- definition: _nullishCoalesce(_optionalChain([options, 'access', _8 => _8.schema, 'optionalAccess', _9 => _9.definition]), () => ( _chunkLHIYVLUAcjs.pongoSchema.db(databaseName, {})))
339
+ definition: _nullishCoalesce(_optionalChain([options, 'access', _8 => _8.schema, 'optionalAccess', _9 => _9.definition]), () => ( _chunkHZZ76RUCcjs.pongoSchema.db(databaseName, {})))
340
340
  }),
341
341
  databaseName
342
342
  });
343
- },
344
- getDatabaseNameOrDefault: (options) => {
345
- return _nullishCoalesce(options.databaseName, () => ( _pg.getDatabaseNameOrDefault.call(void 0, options.connectionString)));
346
343
  }
347
344
  };
348
345
  var usePgDatabaseDriver = () => {
349
- _chunkLHIYVLUAcjs.pongoDatabaseDriverRegistry.register(_pg.PgDriverType, pgDatabaseDriver);
346
+ _chunkHZZ76RUCcjs.pongoDatabaseDriverRegistry.register(_pg.PgDriverType, pgDatabaseDriver);
350
347
  };
351
348
  usePgDatabaseDriver();
352
349
 
package/dist/pg.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/Pongo/Pongo/src/packages/pongo/dist/pg.cjs","../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"],"names":["SQL"],"mappings":"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","file":"/home/runner/work/Pongo/Pongo/src/packages/pongo/dist/pg.cjs","sourcesContent":[null,"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 pgDatabaseDriver as dumboDriver,\n getDatabaseNameOrDefault,\n PgDriverType,\n type PgConnection,\n} from '@event-driven-io/dumbo/pg';\nimport type pg from 'pg';\nimport {\n PongoCollectionSchemaComponent,\n PongoDatabase,\n pongoDatabaseDriverRegistry,\n PongoDatabaseSchemaComponent,\n pongoSchema,\n type PongoDatabaseDriver,\n type PongoDatabaseDriverOptions,\n type PongoDb,\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 =\n PongoDatabaseDriverOptions<PgPongoClientOptions> & {\n databaseName?: string | undefined;\n connectionString: string;\n };\n\nconst pgDatabaseDriver: PongoDatabaseDriver<\n PongoDb<PgDriverType>,\n PgDatabaseDriverOptions\n> = {\n driverType: PgDriverType,\n databaseFactory: (options) => {\n const databaseName =\n options.databaseName ??\n getDatabaseNameOrDefault(options.connectionString);\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 getDatabaseNameOrDefault: (options) => {\n return (\n options.databaseName ?? getDatabaseNameOrDefault(options.connectionString)\n );\n },\n};\n\nexport const usePgDatabaseDriver = () => {\n pongoDatabaseDriverRegistry.register(PgDriverType, pgDatabaseDriver);\n};\n\nusePgDatabaseDriver();\n\nexport { pgDatabaseDriver as databaseDriver, pgDatabaseDriver as pgDriver };\n"]}
1
+ {"version":3,"sources":["/home/runner/work/Pongo/Pongo/src/packages/pongo/dist/pg.cjs","../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"],"names":["SQL"],"mappings":"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","file":"/home/runner/work/Pongo/Pongo/src/packages/pongo/dist/pg.cjs","sourcesContent":[null,"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 pongoDatabaseDriverRegistry,\n PongoDatabaseSchemaComponent,\n pongoSchema,\n type PongoDatabaseDriver,\n type PongoDatabaseDriverOptions,\n type PongoDb,\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 =\n PongoDatabaseDriverOptions<PgPongoClientOptions> & {\n databaseName?: string | undefined;\n connectionString: string;\n };\n\nconst pgDatabaseDriver: PongoDatabaseDriver<\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 usePgDatabaseDriver = () => {\n pongoDatabaseDriverRegistry.register(PgDriverType, pgDatabaseDriver);\n};\n\nusePgDatabaseDriver();\n\nexport { pgDatabaseDriver as databaseDriver, pgDatabaseDriver as pgDriver };\n"]}
package/dist/pg.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as _event_driven_io_dumbo from '@event-driven-io/dumbo';
2
2
  import { JSONSerializer } from '@event-driven-io/dumbo';
3
- import { r as PongoCollectionSQLBuilder, P as PongoDatabaseDriver, a as PongoDb, b as PongoDatabaseDriverOptions } from './pongoCollectionSchemaComponent-BApG9N1N.cjs';
3
+ import { r as PongoCollectionSQLBuilder, P as PongoDatabaseDriver, a as PongoDb, b as PongoDatabaseDriverOptions } from './pongoCollectionSchemaComponent-JWAbt4LN.cjs';
4
4
  import { PgDriverType, PgConnection } from '@event-driven-io/dumbo/pg';
5
5
  import pg from 'pg';
6
6
 
package/dist/pg.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as _event_driven_io_dumbo from '@event-driven-io/dumbo';
2
2
  import { JSONSerializer } from '@event-driven-io/dumbo';
3
- import { r as PongoCollectionSQLBuilder, P as PongoDatabaseDriver, a as PongoDb, b as PongoDatabaseDriverOptions } from './pongoCollectionSchemaComponent-BApG9N1N.js';
3
+ import { r as PongoCollectionSQLBuilder, P as PongoDatabaseDriver, a as PongoDb, b as PongoDatabaseDriverOptions } from './pongoCollectionSchemaComponent-JWAbt4LN.js';
4
4
  import { PgDriverType, PgConnection } from '@event-driven-io/dumbo/pg';
5
5
  import pg from 'pg';
6
6
 
package/dist/pg.js CHANGED
@@ -9,7 +9,7 @@ import {
9
9
  objectEntries,
10
10
  pongoDatabaseDriverRegistry,
11
11
  pongoSchema
12
- } from "./chunk-BHL7DORE.js";
12
+ } from "./chunk-IBYIIPWV.js";
13
13
 
14
14
  // src/storage/postgresql/core/sqlBuilder/index.ts
15
15
  import { isSQL, SQL as SQL4, sqlMigration } from "@event-driven-io/dumbo";
@@ -307,14 +307,14 @@ var where = (filterQuery) => SQL4.check.isEmpty(filterQuery) ? SQL4.EMPTY : SQL4
307
307
  // src/storage/postgresql/pg/index.ts
308
308
  import { dumbo, JSONSerializer } from "@event-driven-io/dumbo";
309
309
  import {
310
- pgDatabaseDriver as dumboDriver,
311
- getDatabaseNameOrDefault,
312
- PgDriverType
310
+ pgDumboDriver as dumboDriver,
311
+ PgDriverType,
312
+ postgreSQLMetadata
313
313
  } from "@event-driven-io/dumbo/pg";
314
314
  var pgDatabaseDriver = {
315
315
  driverType: PgDriverType,
316
316
  databaseFactory: (options) => {
317
- const databaseName = options.databaseName ?? getDatabaseNameOrDefault(options.connectionString);
317
+ const databaseName = options.databaseName ?? postgreSQLMetadata.parseDatabaseName(options.connectionString) ?? postgreSQLMetadata.defaultDatabaseName;
318
318
  return PongoDatabase({
319
319
  ...options,
320
320
  pool: dumbo({
@@ -340,9 +340,6 @@ var pgDatabaseDriver = {
340
340
  }),
341
341
  databaseName
342
342
  });
343
- },
344
- getDatabaseNameOrDefault: (options) => {
345
- return options.databaseName ?? getDatabaseNameOrDefault(options.connectionString);
346
343
  }
347
344
  };
348
345
  var usePgDatabaseDriver = () => {
package/dist/pg.js.map CHANGED
@@ -1 +1 @@
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 pgDatabaseDriver as dumboDriver,\n getDatabaseNameOrDefault,\n PgDriverType,\n type PgConnection,\n} from '@event-driven-io/dumbo/pg';\nimport type pg from 'pg';\nimport {\n PongoCollectionSchemaComponent,\n PongoDatabase,\n pongoDatabaseDriverRegistry,\n PongoDatabaseSchemaComponent,\n pongoSchema,\n type PongoDatabaseDriver,\n type PongoDatabaseDriverOptions,\n type PongoDb,\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 =\n PongoDatabaseDriverOptions<PgPongoClientOptions> & {\n databaseName?: string | undefined;\n connectionString: string;\n };\n\nconst pgDatabaseDriver: PongoDatabaseDriver<\n PongoDb<PgDriverType>,\n PgDatabaseDriverOptions\n> = {\n driverType: PgDriverType,\n databaseFactory: (options) => {\n const databaseName =\n options.databaseName ??\n getDatabaseNameOrDefault(options.connectionString);\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 getDatabaseNameOrDefault: (options) => {\n return (\n options.databaseName ?? getDatabaseNameOrDefault(options.connectionString)\n );\n },\n};\n\nexport const usePgDatabaseDriver = () => {\n pongoDatabaseDriverRegistry.register(PgDriverType, pgDatabaseDriver);\n};\n\nusePgDatabaseDriver();\n\nexport { pgDatabaseDriver as databaseDriver, pgDatabaseDriver as pgDriver };\n"],"mappings":"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","names":["SQL","SQL","SQL","SQL","SQL","SQL"]}
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 pongoDatabaseDriverRegistry,\n PongoDatabaseSchemaComponent,\n pongoSchema,\n type PongoDatabaseDriver,\n type PongoDatabaseDriverOptions,\n type PongoDb,\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 =\n PongoDatabaseDriverOptions<PgPongoClientOptions> & {\n databaseName?: string | undefined;\n connectionString: string;\n };\n\nconst pgDatabaseDriver: PongoDatabaseDriver<\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 usePgDatabaseDriver = () => {\n pongoDatabaseDriverRegistry.register(PgDriverType, pgDatabaseDriver);\n};\n\nusePgDatabaseDriver();\n\nexport { pgDatabaseDriver as databaseDriver, pgDatabaseDriver as pgDriver };\n"],"mappings":"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","names":["SQL","SQL","SQL","SQL","SQL","SQL"]}
@@ -92,7 +92,6 @@ type DatabaseDriverOptionsWithConnectionString = {
92
92
  interface PongoDatabaseDriver<Database extends AnyPongoDb = AnyPongoDb, DriverOptions extends AnyPongoDatabaseDriverOptions = AnyPongoDatabaseDriverOptions> {
93
93
  driverType: Database['driverType'];
94
94
  databaseFactory<CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<string, PongoCollectionSchema>>(options: PongoDatabaseFactoryOptions<CollectionsSchema, DriverOptions>): Database & PongoDb<Database['driverType']>;
95
- getDatabaseNameOrDefault?<CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<string, PongoCollectionSchema>>(options: PongoDatabaseFactoryOptions<CollectionsSchema, DriverOptions>): string;
96
95
  }
97
96
  type AnyPongoDatabaseDriver = PongoDatabaseDriver<AnyPongoDb, AnyPongoDatabaseDriverOptions>;
98
97
  type ExtractPongoDatabaseDriverOptions<DatabaseDriver> = DatabaseDriver extends PongoDatabaseDriver<any, infer O> ? O : never;
@@ -92,7 +92,6 @@ type DatabaseDriverOptionsWithConnectionString = {
92
92
  interface PongoDatabaseDriver<Database extends AnyPongoDb = AnyPongoDb, DriverOptions extends AnyPongoDatabaseDriverOptions = AnyPongoDatabaseDriverOptions> {
93
93
  driverType: Database['driverType'];
94
94
  databaseFactory<CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<string, PongoCollectionSchema>>(options: PongoDatabaseFactoryOptions<CollectionsSchema, DriverOptions>): Database & PongoDb<Database['driverType']>;
95
- getDatabaseNameOrDefault?<CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<string, PongoCollectionSchema>>(options: PongoDatabaseFactoryOptions<CollectionsSchema, DriverOptions>): string;
96
95
  }
97
96
  type AnyPongoDatabaseDriver = PongoDatabaseDriver<AnyPongoDb, AnyPongoDatabaseDriverOptions>;
98
97
  type ExtractPongoDatabaseDriverOptions<DatabaseDriver> = DatabaseDriver extends PongoDatabaseDriver<any, infer O> ? O : never;
package/dist/shim.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;
2
2
 
3
3
 
4
- var _chunkLHIYVLUAcjs = require('./chunk-LHIYVLUA.cjs');
4
+ var _chunkHZZ76RUCcjs = require('./chunk-HZZ76RUC.cjs');
5
5
 
6
6
  // src/mongo/findCursor.ts
7
7
  var FindCursor = (_class = class {
@@ -327,7 +327,7 @@ var MongoClient = class {
327
327
 
328
328
  constructor(connectionStringOrOptions, options) {
329
329
  if (typeof connectionStringOrOptions !== "string") {
330
- this.pongoClient = _chunkLHIYVLUAcjs.pongoClient.call(void 0, connectionStringOrOptions);
330
+ this.pongoClient = _chunkHZZ76RUCcjs.pongoClient.call(void 0, connectionStringOrOptions);
331
331
  return;
332
332
  }
333
333
  const { databaseType, driverName } = _dumbo.parseConnectionString.call(void 0,
@@ -341,7 +341,7 @@ var MongoClient = class {
341
341
  `No database driver registered for ${databaseType} with name ${driverName}`
342
342
  );
343
343
  }
344
- this.pongoClient = _chunkLHIYVLUAcjs.pongoClient.call(void 0, {
344
+ this.pongoClient = _chunkHZZ76RUCcjs.pongoClient.call(void 0, {
345
345
  ..._nullishCoalesce(options, () => ( {})),
346
346
  ...{ connectionString: connectionStringOrOptions },
347
347
  driver
@@ -358,12 +358,12 @@ var MongoClient = class {
358
358
  return new Db(this.pongoClient.db(dbName));
359
359
  }
360
360
  startSession(_options) {
361
- return _chunkLHIYVLUAcjs.pongoSession.call(void 0, );
361
+ return _chunkHZZ76RUCcjs.pongoSession.call(void 0, );
362
362
  }
363
363
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
364
364
  async withSession(optionsOrExecutor, executor) {
365
365
  const callback = typeof optionsOrExecutor === "function" ? optionsOrExecutor : executor;
366
- const session = _chunkLHIYVLUAcjs.pongoSession.call(void 0, );
366
+ const session = _chunkHZZ76RUCcjs.pongoSession.call(void 0, );
367
367
  try {
368
368
  return await callback(session);
369
369
  } finally {
package/dist/shim.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { ClientSessionOptions } from 'http2';
2
2
  import { Document, Collection as Collection$1, ObjectId, ClientSession, WithSessionCallback, Db as Db$1, ReadConcern, ReadPreference, BSONSerializeOptions, WriteConcern, Hint, OptionalUnlessRequiredId, InsertOneOptions, InsertOneResult, BulkWriteOptions, InsertManyResult, AnyBulkWriteOperation, BulkWriteResult, Filter, UpdateFilter, UpdateOptions, UpdateResult, WithoutId, ReplaceOptions, DeleteOptions, DeleteResult, RenameOptions, DropCollectionOptions, WithId, FindOptions, FindCursor as FindCursor$1, OperationOptions, IndexSpecification, CreateIndexesOptions, IndexDescription, CommandOperationOptions, AbstractCursorOptions, ListIndexesCursor, IndexInformationOptions, IndexDescriptionInfo, IndexDescriptionCompact, EstimatedDocumentCountOptions, CountDocumentsOptions, EnhancedOmit, Flatten, FindOneAndDeleteOptions, ModifyResult, FindOneAndReplaceOptions, FindOneAndUpdateOptions, AggregateOptions, AggregationCursor, ChangeStreamDocument, ChangeStreamOptions, ChangeStream, UnorderedBulkOperation, OrderedBulkOperation, CountOptions, ListSearchIndexesOptions, ListSearchIndexesCursor, SearchIndexDescription } from 'mongodb';
3
- import { a as PongoDb, V as PongoDBCollectionOptions, aP as DocumentHandler, $ as HandleOptions, aO as PongoHandleResult, k as AnyPongoDatabaseDriver, f as PongoClientSchema, l as PongoClientOptions, e as PongoCollection } from './pongoCollectionSchemaComponent-BApG9N1N.cjs';
3
+ import { a as PongoDb, V as PongoDBCollectionOptions, aP as DocumentHandler, $ as HandleOptions, aO as PongoHandleResult, k as AnyPongoDatabaseDriver, f as PongoClientSchema, l as PongoClientOptions, e as PongoCollection } from './pongoCollectionSchemaComponent-JWAbt4LN.cjs';
4
4
  import '@event-driven-io/dumbo';
5
5
 
6
6
  declare class FindCursor<T> {
package/dist/shim.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { ClientSessionOptions } from 'http2';
2
2
  import { Document, Collection as Collection$1, ObjectId, ClientSession, WithSessionCallback, Db as Db$1, ReadConcern, ReadPreference, BSONSerializeOptions, WriteConcern, Hint, OptionalUnlessRequiredId, InsertOneOptions, InsertOneResult, BulkWriteOptions, InsertManyResult, AnyBulkWriteOperation, BulkWriteResult, Filter, UpdateFilter, UpdateOptions, UpdateResult, WithoutId, ReplaceOptions, DeleteOptions, DeleteResult, RenameOptions, DropCollectionOptions, WithId, FindOptions, FindCursor as FindCursor$1, OperationOptions, IndexSpecification, CreateIndexesOptions, IndexDescription, CommandOperationOptions, AbstractCursorOptions, ListIndexesCursor, IndexInformationOptions, IndexDescriptionInfo, IndexDescriptionCompact, EstimatedDocumentCountOptions, CountDocumentsOptions, EnhancedOmit, Flatten, FindOneAndDeleteOptions, ModifyResult, FindOneAndReplaceOptions, FindOneAndUpdateOptions, AggregateOptions, AggregationCursor, ChangeStreamDocument, ChangeStreamOptions, ChangeStream, UnorderedBulkOperation, OrderedBulkOperation, CountOptions, ListSearchIndexesOptions, ListSearchIndexesCursor, SearchIndexDescription } from 'mongodb';
3
- import { a as PongoDb, V as PongoDBCollectionOptions, aP as DocumentHandler, $ as HandleOptions, aO as PongoHandleResult, k as AnyPongoDatabaseDriver, f as PongoClientSchema, l as PongoClientOptions, e as PongoCollection } from './pongoCollectionSchemaComponent-BApG9N1N.js';
3
+ import { a as PongoDb, V as PongoDBCollectionOptions, aP as DocumentHandler, $ as HandleOptions, aO as PongoHandleResult, k as AnyPongoDatabaseDriver, f as PongoClientSchema, l as PongoClientOptions, e as PongoCollection } from './pongoCollectionSchemaComponent-JWAbt4LN.js';
4
4
  import '@event-driven-io/dumbo';
5
5
 
6
6
  declare class FindCursor<T> {
package/dist/shim.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  pongoClient,
3
3
  pongoSession
4
- } from "./chunk-BHL7DORE.js";
4
+ } from "./chunk-IBYIIPWV.js";
5
5
 
6
6
  // src/mongo/findCursor.ts
7
7
  var FindCursor = class {
package/dist/sqlite3.cjs CHANGED
@@ -1,14 +1,14 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
3
 
4
- var _chunkQJZKVZBUcjs = require('./chunk-QJZKVZBU.cjs');
4
+ var _chunk56GGH7CWcjs = require('./chunk-56GGH7CW.cjs');
5
5
 
6
6
 
7
7
 
8
8
 
9
9
 
10
10
 
11
- var _chunkLHIYVLUAcjs = require('./chunk-LHIYVLUA.cjs');
11
+ var _chunkHZZ76RUCcjs = require('./chunk-HZZ76RUC.cjs');
12
12
 
13
13
  // src/storage/sqlite/sqlite3/index.ts
14
14
  var _dumbo = require('@event-driven-io/dumbo');
@@ -16,43 +16,39 @@ var _dumbo = require('@event-driven-io/dumbo');
16
16
 
17
17
 
18
18
  var _sqlite3 = require('@event-driven-io/dumbo/sqlite3');
19
- var getDatabaseNameOrDefault = (connectionString) => connectionString || ":memory:";
20
19
  var sqlite3DatabaseDriver = {
21
20
  driverType: _sqlite3.SQLite3DriverType,
22
21
  databaseFactory: (options) => {
23
- const databaseName = _nullishCoalesce(options.databaseName, () => ( getDatabaseNameOrDefault(options.connectionString)));
24
- return _chunkLHIYVLUAcjs.PongoDatabase.call(void 0, {
22
+ const databaseName = _nullishCoalesce(options.databaseName, () => ( "db:default"));
23
+ return _chunkHZZ76RUCcjs.PongoDatabase.call(void 0, {
25
24
  ...options,
26
25
  pool: _dumbo.dumbo.call(void 0, {
27
26
  connectionString: options.connectionString,
28
- driver: _sqlite3.sqlite3DatabaseDriver,
27
+ driver: _sqlite3.sqlite3DumboDriver,
29
28
  ...options.connectionOptions,
30
29
  serialization: { serializer: options.serializer }
31
30
  }),
32
- schemaComponent: _chunkLHIYVLUAcjs.PongoDatabaseSchemaComponent.call(void 0, {
31
+ schemaComponent: _chunkHZZ76RUCcjs.PongoDatabaseSchemaComponent.call(void 0, {
33
32
  driverType: _sqlite3.SQLite3DriverType,
34
- collectionFactory: (schema) => _chunkLHIYVLUAcjs.PongoCollectionSchemaComponent.call(void 0, {
33
+ collectionFactory: (schema) => _chunkHZZ76RUCcjs.PongoCollectionSchemaComponent.call(void 0, {
35
34
  driverType: _sqlite3.SQLite3DriverType,
36
35
  definition: schema,
37
36
  migrationsOrSchemaComponents: {
38
- migrations: _chunkQJZKVZBUcjs.pongoCollectionSQLiteMigrations.call(void 0, schema.name)
37
+ migrations: _chunk56GGH7CWcjs.pongoCollectionSQLiteMigrations.call(void 0, schema.name)
39
38
  },
40
- sqlBuilder: _chunkQJZKVZBUcjs.sqliteSQLBuilder.call(void 0,
39
+ sqlBuilder: _chunk56GGH7CWcjs.sqliteSQLBuilder.call(void 0,
41
40
  schema.name,
42
41
  _nullishCoalesce(_optionalChain([options, 'access', _ => _.serialization, 'optionalAccess', _2 => _2.serializer]), () => ( _dumbo.JSONSerializer))
43
42
  )
44
43
  }),
45
- definition: _nullishCoalesce(_optionalChain([options, 'access', _3 => _3.schema, 'optionalAccess', _4 => _4.definition]), () => ( _chunkLHIYVLUAcjs.pongoSchema.db(databaseName, {})))
44
+ definition: _nullishCoalesce(_optionalChain([options, 'access', _3 => _3.schema, 'optionalAccess', _4 => _4.definition]), () => ( _chunkHZZ76RUCcjs.pongoSchema.db(databaseName, {})))
46
45
  }),
47
46
  databaseName
48
47
  });
49
- },
50
- getDatabaseNameOrDefault: (options) => {
51
- return _nullishCoalesce(options.databaseName, () => ( getDatabaseNameOrDefault(options.connectionString)));
52
48
  }
53
49
  };
54
50
  var useSqlite3DatabaseDriver = () => {
55
- _chunkLHIYVLUAcjs.pongoDatabaseDriverRegistry.register(
51
+ _chunkHZZ76RUCcjs.pongoDatabaseDriverRegistry.register(
56
52
  _sqlite3.SQLite3DriverType,
57
53
  sqlite3DatabaseDriver
58
54
  );
@@ -64,5 +60,5 @@ useSqlite3DatabaseDriver();
64
60
 
65
61
 
66
62
 
67
- exports.databaseDriver = sqlite3DatabaseDriver; exports.pongoCollectionSQLiteMigrations = _chunkQJZKVZBUcjs.pongoCollectionSQLiteMigrations; exports.sqlite3Driver = sqlite3DatabaseDriver; exports.sqliteSQLBuilder = _chunkQJZKVZBUcjs.sqliteSQLBuilder; exports.useSqlite3DatabaseDriver = useSqlite3DatabaseDriver;
63
+ exports.databaseDriver = sqlite3DatabaseDriver; exports.pongoCollectionSQLiteMigrations = _chunk56GGH7CWcjs.pongoCollectionSQLiteMigrations; exports.sqlite3Driver = sqlite3DatabaseDriver; exports.sqliteSQLBuilder = _chunk56GGH7CWcjs.sqliteSQLBuilder; exports.useSqlite3DatabaseDriver = useSqlite3DatabaseDriver;
68
64
  //# sourceMappingURL=sqlite3.cjs.map