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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/{chunk-ECQ2CKZE.cjs → chunk-A4DCNQJR.cjs} +45 -43
  2. package/dist/chunk-A4DCNQJR.cjs.map +1 -0
  3. package/dist/{chunk-4BL6YWLW.cjs → chunk-BZRKCNRY.cjs} +105 -72
  4. package/dist/chunk-BZRKCNRY.cjs.map +1 -0
  5. package/dist/{chunk-NCNRRYVE.js → chunk-H637RRXS.js} +85 -52
  6. package/dist/chunk-H637RRXS.js.map +1 -0
  7. package/dist/{chunk-Y7LRKJLJ.js → chunk-TTZGGAZV.js} +40 -38
  8. package/dist/chunk-TTZGGAZV.js.map +1 -0
  9. package/dist/cli.cjs +43 -37
  10. package/dist/cli.cjs.map +1 -1
  11. package/dist/cli.js +34 -28
  12. package/dist/cli.js.map +1 -1
  13. package/dist/cloudflare.cjs +53 -0
  14. package/dist/cloudflare.cjs.map +1 -0
  15. package/dist/cloudflare.d.cts +11 -0
  16. package/dist/cloudflare.d.ts +11 -0
  17. package/dist/{d1.js → cloudflare.js} +19 -20
  18. package/dist/cloudflare.js.map +1 -0
  19. package/dist/{index-BJopB-em.d.cts → index-BAiq0hu3.d.cts} +3 -2
  20. package/dist/{index-G5DECNb_.d.ts → index-DF5J9nRH.d.ts} +3 -2
  21. package/dist/index.cjs +27 -3
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.cts +17 -9
  24. package/dist/index.d.ts +17 -9
  25. package/dist/index.js +30 -6
  26. package/dist/index.js.map +1 -1
  27. package/dist/pg.cjs +344 -4
  28. package/dist/pg.cjs.map +1 -1
  29. package/dist/pg.d.cts +10 -9
  30. package/dist/pg.d.ts +10 -9
  31. package/dist/pg.js +350 -10
  32. package/dist/pg.js.map +1 -1
  33. package/dist/{pongoCollectionSchemaComponent-t_e9n2Wc.d.ts → pongoCollectionSchemaComponent-BhsINgDe.d.cts} +44 -34
  34. package/dist/{pongoCollectionSchemaComponent-t_e9n2Wc.d.cts → pongoCollectionSchemaComponent-BhsINgDe.d.ts} +44 -34
  35. package/dist/shim.cjs +12 -14
  36. package/dist/shim.cjs.map +1 -1
  37. package/dist/shim.d.cts +4 -4
  38. package/dist/shim.d.ts +4 -4
  39. package/dist/shim.js +7 -9
  40. package/dist/shim.js.map +1 -1
  41. package/dist/sqlite3.cjs +21 -26
  42. package/dist/sqlite3.cjs.map +1 -1
  43. package/dist/sqlite3.d.cts +6 -6
  44. package/dist/sqlite3.d.ts +6 -6
  45. package/dist/sqlite3.js +20 -25
  46. package/dist/sqlite3.js.map +1 -1
  47. package/package.json +50 -36
  48. package/dist/chunk-4BL6YWLW.cjs.map +0 -1
  49. package/dist/chunk-ECQ2CKZE.cjs.map +0 -1
  50. package/dist/chunk-EYQDS752.js +0 -364
  51. package/dist/chunk-EYQDS752.js.map +0 -1
  52. package/dist/chunk-NCNRRYVE.js.map +0 -1
  53. package/dist/chunk-WH26IXHN.js +0 -10
  54. package/dist/chunk-WH26IXHN.js.map +0 -1
  55. package/dist/chunk-WKW4LGF6.cjs +0 -10
  56. package/dist/chunk-WKW4LGF6.cjs.map +0 -1
  57. package/dist/chunk-Y7LRKJLJ.js.map +0 -1
  58. package/dist/chunk-ZPWKWNK2.cjs +0 -364
  59. package/dist/chunk-ZPWKWNK2.cjs.map +0 -1
  60. package/dist/d1.cjs +0 -54
  61. package/dist/d1.cjs.map +0 -1
  62. package/dist/d1.d.cts +0 -11
  63. package/dist/d1.d.ts +0 -11
  64. package/dist/d1.js.map +0 -1
  65. package/dist/pg-73DOKU64.js +0 -11
  66. package/dist/pg-73DOKU64.js.map +0 -1
  67. package/dist/pg-I267A7IL.cjs +0 -11
  68. package/dist/pg-I267A7IL.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/Pongo/Pongo/src/packages/pongo/dist/chunk-BZRKCNRY.cjs","../src/core/collection/pongoCollection.ts","../src/core/collection/pongoCollectionSchemaComponent.ts","../src/core/collection/query.ts","../src/core/database/pongoDatabaseCache.ts","../src/core/database/pongoDatabaseSchemaComponent.ts","../src/core/typing/entries.ts","../src/core/typing/operations.ts","../src/core/errors/index.ts","../src/core/schema/index.ts","../src/core/database/pongoDb.ts","../src/core/drivers/databaseDriver.ts","../src/core/pongoClient.ts","../src/core/pongoTransaction.ts","../src/core/pongoSession.ts","../src/core/utils/deepEquals.ts"],"names":["schemaComponent","operationResult","options","pongoClient","expectedVersion","runSQLMigrations"],"mappings":"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","file":"/home/runner/work/Pongo/Pongo/src/packages/pongo/dist/chunk-BZRKCNRY.cjs","sourcesContent":[null,"import type { JSONSerializer, SQL } from '@event-driven-io/dumbo';\nimport {\n mapColumnToBigint,\n mapColumnToJSON,\n runSQLMigrations,\n single,\n type DatabaseDriverType,\n type DatabaseTransaction,\n type Dumbo,\n type MigrationStyle,\n type QueryResult,\n type QueryResultRow,\n type SQLExecutor,\n type SQLQueryResultColumnMapping,\n} from '@event-driven-io/dumbo';\nimport { v7 as uuid } from 'uuid';\nimport type { PongoCollectionSchemaComponent } from '..';\nimport {\n deepEquals,\n expectedVersionValue,\n operationResult,\n type CollectionOperationOptions,\n type DeleteManyOptions,\n type DeleteOneOptions,\n type DocumentHandler,\n type FindOptions,\n type HandleOptions,\n type InsertManyOptions,\n type InsertOneOptions,\n type OptionalUnlessRequiredIdAndVersion,\n type PongoCollection,\n type PongoDb,\n type PongoDeleteResult,\n type PongoDocument,\n type PongoFilter,\n type PongoHandleResult,\n type PongoInsertManyResult,\n type PongoInsertOneResult,\n type PongoMigrationOptions,\n type PongoUpdate,\n type PongoUpdateManyResult,\n type PongoUpdateResult,\n type ReplaceOneOptions,\n type UpdateManyOptions,\n type UpdateOneOptions,\n type WithIdAndVersion,\n type WithoutId,\n type WithVersion,\n} from '..';\n\nexport type PongoCollectionOptions<\n T extends PongoDocument = PongoDocument,\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n Payload extends PongoDocument = T,\n> = {\n db: PongoDb<DriverType>;\n collectionName: string;\n pool: Dumbo<DatabaseDriverType>;\n schemaComponent: PongoCollectionSchemaComponent;\n schema?: {\n autoMigration?: MigrationStyle;\n versioning?: {\n upcast?: (doc: Payload) => T;\n downcast?: (doc: T) => Payload;\n };\n };\n errors?: { throwOnOperationFailures?: boolean };\n serializer: JSONSerializer;\n};\n\nconst enlistIntoTransactionIfActive = async <\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n>(\n db: PongoDb<DriverType>,\n options: CollectionOperationOptions | undefined,\n): Promise<DatabaseTransaction | null> => {\n const transaction = options?.session?.transaction;\n\n if (!transaction || !transaction.isActive) return null;\n\n return await transaction.enlistDatabase(db);\n};\n\nexport const transactionExecutorOrDefault = async <\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n>(\n db: PongoDb<DriverType>,\n options: CollectionOperationOptions | undefined,\n defaultSqlExecutor: SQLExecutor,\n): Promise<SQLExecutor> => {\n const existingTransaction = await enlistIntoTransactionIfActive(db, options);\n return existingTransaction?.execute ?? defaultSqlExecutor;\n};\n\nexport const pongoCollection = <\n T extends PongoDocument,\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n Payload extends PongoDocument = T,\n>({\n db,\n collectionName,\n pool,\n schemaComponent,\n schema,\n errors,\n serializer,\n}: PongoCollectionOptions<T, DriverType, Payload>): PongoCollection<T> => {\n const SqlFor = schemaComponent.sqlBuilder;\n const sqlExecutor = pool.execute;\n\n const columnMapping = {\n mapping: {\n ...mapColumnToJSON('data', serializer),\n //...mapColumnToJSON('metadata'),\n ...mapColumnToBigint('_version'),\n } satisfies SQLQueryResultColumnMapping,\n };\n\n const command = async <Result extends QueryResultRow = QueryResultRow>(\n sql: SQL,\n options?: CollectionOperationOptions,\n ) =>\n (\n await transactionExecutorOrDefault(db, options, sqlExecutor)\n ).command<Result>(sql, columnMapping);\n\n const query = async <T extends QueryResultRow>(\n sql: SQL,\n options?: CollectionOperationOptions,\n ) =>\n (await transactionExecutorOrDefault(db, options, sqlExecutor)).query<T>(\n sql,\n columnMapping,\n );\n\n let shouldMigrate = schema?.autoMigration !== 'None';\n\n const createCollection = (options?: CollectionOperationOptions) => {\n shouldMigrate = false;\n\n if (options?.session) return command(SqlFor.createCollection(), options);\n else return command(SqlFor.createCollection());\n };\n\n const ensureCollectionCreated = (options?: CollectionOperationOptions) => {\n if (!shouldMigrate) {\n return Promise.resolve();\n }\n\n return createCollection(options);\n };\n\n const upcast =\n schema?.versioning?.upcast ?? ((doc: Payload) => doc as unknown as T);\n\n const downcast =\n schema?.versioning?.downcast ?? ((doc: T) => doc as unknown as Payload);\n\n const collection = {\n dbName: db.databaseName,\n collectionName,\n createCollection: async (options?: CollectionOperationOptions) => {\n await createCollection(options);\n },\n insertOne: async (\n document: OptionalUnlessRequiredIdAndVersion<T>,\n options?: InsertOneOptions,\n ): Promise<PongoInsertOneResult> => {\n await ensureCollectionCreated(options);\n\n const _id = (document._id as string | undefined | null) ?? uuid();\n const _version = document._version ?? 1n;\n const downcasted = downcast(document as T);\n\n const result = await command(\n SqlFor.insertOne({\n ...downcasted,\n _id,\n _version,\n } as unknown as OptionalUnlessRequiredIdAndVersion<Payload>),\n options,\n );\n\n const successful = (result.rowCount ?? 0) > 0;\n\n return operationResult<PongoInsertOneResult>(\n {\n successful,\n insertedId: successful ? _id : null,\n nextExpectedVersion: _version,\n },\n { operationName: 'insertOne', collectionName, serializer, errors },\n );\n },\n insertMany: async (\n documents: OptionalUnlessRequiredIdAndVersion<T>[],\n options?: InsertManyOptions,\n ): Promise<PongoInsertManyResult> => {\n await ensureCollectionCreated(options);\n\n const rows = documents.map((doc) => {\n const downcasted = downcast(doc as T);\n return {\n ...downcasted,\n _id: (doc._id as string | undefined | null) ?? uuid(),\n _version: doc._version ?? 1n,\n };\n });\n\n const result = await command(\n SqlFor.insertMany(\n rows as unknown as OptionalUnlessRequiredIdAndVersion<Payload>[],\n ),\n options,\n );\n\n return operationResult<PongoInsertManyResult>(\n {\n successful: result.rowCount === rows.length,\n insertedCount: result.rowCount ?? 0,\n insertedIds: result.rows.map((d) => d._id as string),\n },\n { operationName: 'insertMany', collectionName, serializer, errors },\n );\n },\n updateOne: async (\n filter: PongoFilter<T>,\n update: PongoUpdate<T>,\n options?: UpdateOneOptions,\n ): Promise<PongoUpdateResult> => {\n await ensureCollectionCreated(options);\n\n const result = await command<UpdateSqlResult>(\n SqlFor.updateOne(filter, update, options),\n options,\n );\n\n return operationResult<PongoUpdateResult>(\n {\n successful:\n result.rows.length > 0 &&\n result.rows[0]!.modified === result.rows[0]!.matched,\n modifiedCount: Number(result.rows[0]?.modified ?? 0),\n matchedCount: Number(result.rows[0]?.matched ?? 0),\n nextExpectedVersion: BigInt(result.rows[0]?.version ?? 0n),\n },\n { operationName: 'updateOne', collectionName, serializer, errors },\n );\n },\n replaceOne: async (\n filter: PongoFilter<T>,\n document: WithoutId<T>,\n options?: ReplaceOneOptions,\n ): Promise<PongoUpdateResult> => {\n await ensureCollectionCreated(options);\n\n const downcasted = downcast(document as T) as unknown as WithoutId<T>;\n\n const result = await command<UpdateSqlResult>(\n SqlFor.replaceOne(filter, downcasted, options),\n options,\n );\n return operationResult<PongoUpdateResult>(\n {\n successful: result.rows.length > 0 && result.rows[0]!.modified > 0,\n modifiedCount: Number(result.rows[0]?.modified ?? 0),\n matchedCount: Number(result.rows[0]?.matched ?? 0),\n nextExpectedVersion: BigInt(result.rows[0]?.version ?? 0n),\n },\n { operationName: 'replaceOne', collectionName, serializer, errors },\n );\n },\n updateMany: async (\n filter: PongoFilter<T>,\n update: PongoUpdate<T>,\n options?: UpdateManyOptions,\n ): Promise<PongoUpdateManyResult> => {\n await ensureCollectionCreated(options);\n\n const result = await command(SqlFor.updateMany(filter, update), options);\n\n return operationResult<PongoUpdateManyResult>(\n {\n successful: true,\n modifiedCount: result.rowCount ?? 0,\n matchedCount: result.rowCount ?? 0,\n },\n { operationName: 'updateMany', collectionName, serializer, errors },\n );\n },\n deleteOne: async (\n filter?: PongoFilter<T>,\n options?: DeleteOneOptions,\n ): Promise<PongoDeleteResult> => {\n await ensureCollectionCreated(options);\n\n const result = await command<DeleteSqlResult>(\n SqlFor.deleteOne(filter ?? {}, options),\n options,\n );\n return operationResult<PongoDeleteResult>(\n {\n successful: result.rows.length > 0 && result.rows[0]!.deleted! > 0,\n deletedCount: Number(result.rows[0]?.deleted ?? 0),\n matchedCount: Number(result.rows[0]?.matched ?? 0),\n },\n { operationName: 'deleteOne', collectionName, serializer, errors },\n );\n },\n deleteMany: async (\n filter?: PongoFilter<T>,\n options?: DeleteManyOptions,\n ): Promise<PongoDeleteResult> => {\n await ensureCollectionCreated(options);\n\n const result = await command(SqlFor.deleteMany(filter ?? {}), options);\n\n return operationResult<PongoDeleteResult>(\n {\n successful: (result.rowCount ?? 0) > 0,\n deletedCount: result.rowCount ?? 0,\n matchedCount: result.rowCount ?? 0,\n },\n { operationName: 'deleteMany', collectionName, serializer, errors },\n );\n },\n findOne: async (\n filter?: PongoFilter<T>,\n options?: CollectionOperationOptions,\n ): Promise<WithIdAndVersion<T> | null> => {\n await ensureCollectionCreated(options);\n\n const result = await query<{ data: T; _version: bigint }>(\n SqlFor.findOne(filter ?? {}),\n options,\n );\n\n const row = result.rows[0];\n if (row === undefined || row === null) return null;\n\n return upcast({\n ...row.data,\n _version: row._version,\n } as unknown as Payload) as WithIdAndVersion<T>;\n },\n findOneAndDelete: async (\n filter: PongoFilter<T>,\n options?: DeleteOneOptions,\n ): Promise<WithIdAndVersion<T> | null> => {\n await ensureCollectionCreated(options);\n\n const existingDoc = await collection.findOne(filter, options);\n\n if (existingDoc === null) return null;\n\n await collection.deleteOne(filter, options);\n return existingDoc;\n },\n findOneAndReplace: async (\n filter: PongoFilter<T>,\n replacement: WithoutId<T>,\n options?: ReplaceOneOptions,\n ): Promise<WithIdAndVersion<T> | null> => {\n await ensureCollectionCreated(options);\n\n const existingDoc = await collection.findOne(filter, options);\n\n if (existingDoc === null) return null;\n\n await collection.replaceOne(filter, replacement, options);\n\n return existingDoc;\n },\n findOneAndUpdate: async (\n filter: PongoFilter<T>,\n update: PongoUpdate<T>,\n options?: UpdateOneOptions,\n ): Promise<WithIdAndVersion<T> | null> => {\n await ensureCollectionCreated(options);\n\n const existingDoc = await collection.findOne(filter, options);\n\n if (existingDoc === null) return null;\n\n await collection.updateOne(filter, update, options);\n\n return existingDoc;\n },\n handle: async (\n id: string,\n handle: DocumentHandler<T>,\n options?: HandleOptions,\n ): Promise<PongoHandleResult<T>> => {\n const { expectedVersion: version, ...operationOptions } = options ?? {};\n await ensureCollectionCreated(options);\n\n const byId: PongoFilter<T> = { _id: id };\n\n const existing = (await collection.findOne(\n byId,\n options,\n )) as WithVersion<T> | null;\n\n const expectedVersion = expectedVersionValue(version);\n\n if (\n (existing == null && version === 'DOCUMENT_EXISTS') ||\n (existing == null && expectedVersion != null) ||\n (existing != null && version === 'DOCUMENT_DOES_NOT_EXIST') ||\n (existing != null &&\n expectedVersion !== null &&\n existing._version !== expectedVersion)\n ) {\n return operationResult<PongoHandleResult<T>>(\n {\n successful: false,\n document: existing as T,\n },\n { operationName: 'handle', collectionName, serializer, errors },\n );\n }\n\n const result = await handle(\n existing !== null ? ({ ...existing } as T) : null,\n );\n\n if (deepEquals(existing as T | null, result))\n return operationResult<PongoHandleResult<T>>(\n {\n successful: true,\n document: existing as T | null,\n },\n { operationName: 'handle', collectionName, serializer, errors },\n );\n\n if (!existing && result) {\n const newDoc = { ...result, _id: id };\n const insertResult = await collection.insertOne(\n { ...newDoc, _id: id } as OptionalUnlessRequiredIdAndVersion<T>,\n {\n ...operationOptions,\n expectedVersion: 'DOCUMENT_DOES_NOT_EXIST',\n },\n );\n return {\n ...insertResult,\n document: {\n ...newDoc,\n _version: insertResult.nextExpectedVersion,\n } as T,\n };\n }\n\n if (existing && !result) {\n const deleteResult = await collection.deleteOne(byId, {\n ...operationOptions,\n expectedVersion: expectedVersion ?? 'DOCUMENT_EXISTS',\n });\n return { ...deleteResult, document: null };\n }\n\n if (existing && result) {\n const replaceResult = await collection.replaceOne(byId, result, {\n ...operationOptions,\n expectedVersion: expectedVersion ?? 'DOCUMENT_EXISTS',\n });\n return {\n ...replaceResult,\n document: {\n ...result,\n _version: replaceResult.nextExpectedVersion,\n } as T,\n };\n }\n\n return operationResult<PongoHandleResult<T>>(\n {\n successful: true,\n document: existing as T,\n },\n { operationName: 'handle', collectionName, serializer, errors },\n );\n },\n find: async (\n filter?: PongoFilter<T>,\n options?: FindOptions,\n ): Promise<WithIdAndVersion<T>[]> => {\n await ensureCollectionCreated(options);\n\n const result = await query<{ data: T; _version: bigint }>(\n SqlFor.find(filter ?? {}, options),\n );\n return result.rows.map(\n (row) =>\n upcast({\n ...row.data,\n _version: row._version,\n } as unknown as Payload) as WithIdAndVersion<T>,\n );\n },\n countDocuments: async (\n filter?: PongoFilter<T>,\n options?: CollectionOperationOptions,\n ): Promise<number> => {\n await ensureCollectionCreated(options);\n\n const { count } = await single(\n query<{ count: number }>(SqlFor.countDocuments(filter ?? {})),\n );\n return count;\n },\n drop: async (options?: CollectionOperationOptions): Promise<boolean> => {\n await ensureCollectionCreated(options);\n const result = await command(SqlFor.drop());\n return (result?.rowCount ?? 0) > 0;\n },\n rename: async (\n newName: string,\n options?: CollectionOperationOptions,\n ): Promise<PongoCollection<T>> => {\n await ensureCollectionCreated(options);\n await command(SqlFor.rename(newName));\n collectionName = newName;\n return collection;\n },\n\n sql: {\n async query<Result extends QueryResultRow = QueryResultRow>(\n sql: SQL,\n options?: CollectionOperationOptions,\n ): Promise<Result[]> {\n await ensureCollectionCreated(options);\n\n const result = await query<Result>(sql, options);\n return result.rows;\n },\n async command<Result extends QueryResultRow = QueryResultRow>(\n sql: SQL,\n options?: CollectionOperationOptions,\n ): Promise<QueryResult<Result>> {\n await ensureCollectionCreated(options);\n\n return command(sql, options);\n },\n },\n schema: {\n component: schemaComponent,\n migrate: (options?: PongoMigrationOptions) =>\n runSQLMigrations(pool, schemaComponent.migrations, options),\n },\n };\n\n return collection;\n};\n\ntype UpdateSqlResult = {\n matched: bigint;\n modified: bigint;\n version: bigint;\n};\n\ntype DeleteSqlResult = {\n matched: bigint | null;\n deleted: bigint | null;\n};\n","import {\n schemaComponent,\n type DatabaseDriverType,\n type SchemaComponent,\n type SchemaComponentOptions,\n} from '@event-driven-io/dumbo';\nimport type { PongoCollectionSchema, PongoCollectionSQLBuilder } from '..';\n\nexport type PongoCollectionURNType = 'sc:pongo:collection';\nexport type PongoCollectionURN = `${PongoCollectionURNType}:${string}`;\n\nexport type PongoCollectionSchemaComponent =\n SchemaComponent<PongoCollectionURN> & {\n collectionName: string;\n definition: PongoCollectionSchema;\n sqlBuilder: PongoCollectionSQLBuilder;\n };\n\nexport type PongoCollectionSchemaComponentOptions<\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n> = Readonly<{\n driverType: DriverType;\n definition: PongoCollectionSchema;\n migrationsOrSchemaComponents: SchemaComponentOptions;\n sqlBuilder: PongoCollectionSQLBuilder;\n}>;\n\nexport const PongoCollectionSchemaComponent = <\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n>({\n definition,\n migrationsOrSchemaComponents,\n sqlBuilder,\n}: PongoCollectionSchemaComponentOptions<DriverType>): PongoCollectionSchemaComponent =>\n ({\n ...schemaComponent(\n `sc:pongo:collection:${definition.name}`,\n migrationsOrSchemaComponents,\n ),\n sqlBuilder,\n definition,\n collectionName: definition.name,\n }) as PongoCollectionSchemaComponent;\n","export const QueryOperators = {\n $eq: '$eq',\n $gt: '$gt',\n $gte: '$gte',\n $lt: '$lt',\n $lte: '$lte',\n $ne: '$ne',\n $in: '$in',\n $nin: '$nin',\n $elemMatch: '$elemMatch',\n $all: '$all',\n $size: '$size',\n};\n\nexport const OperatorMap = {\n $gt: '>',\n $gte: '>=',\n $lt: '<',\n $lte: '<=',\n $ne: '!=',\n};\n\nexport const isOperator = (key: string) => key.startsWith('$');\n\nexport const hasOperators = (value: Record<string, unknown>) =>\n Object.keys(value).some(isOperator);\n","import {\n getDatabaseMetadata,\n type DatabaseDriverType,\n type JSONSerializationOptions,\n type MigrationStyle,\n} from '@event-driven-io/dumbo';\nimport type { PongoDatabaseFactoryOptions, PongoDriver } from '../drivers';\nimport type { PongoClientSchema, PongoCollectionSchema } from '../schema';\nimport type { PongoDb } from '../typing';\n\nexport const PongoDatabaseCache = <\n Database extends PongoDb<DatabaseDriverType> = PongoDb<DatabaseDriverType>,\n TypedClientSchema extends PongoClientSchema = PongoClientSchema,\n>({\n driver,\n typedSchema,\n}: {\n driver: PongoDriver<Database>;\n typedSchema?: TypedClientSchema | undefined;\n}) => {\n const dbClients = new Map<string, PongoDb>();\n\n const getDatabaseDefinition = (dbName: string | undefined) =>\n Object.values(typedSchema?.dbs ?? {}).find((d) => d.name === dbName);\n\n return {\n getOrCreate: <\n CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<\n string,\n PongoCollectionSchema\n >,\n >(\n createOptions: Omit<\n PongoDatabaseFactoryOptions<CollectionsSchema>,\n 'schema'\n > &\n JSONSerializationOptions & {\n schema?: {\n autoMigration?: MigrationStyle;\n };\n },\n ): Database => {\n const metadata = getDatabaseMetadata(driver.driverType);\n const dbName =\n createOptions.databaseName ??\n metadata?.parseDatabaseName?.(\n 'connectionString' in createOptions\n ? (createOptions.connectionString as string)\n : undefined,\n ) ??\n 'db:default';\n\n const existing = dbClients.get(dbName);\n if (existing) return existing as Database;\n\n const definition = getDatabaseDefinition(createOptions.databaseName);\n\n const newDb: Database = driver.databaseFactory({\n ...createOptions,\n databaseName: dbName,\n schema: {\n ...createOptions.schema,\n ...(definition ? { definition } : {}),\n },\n });\n dbClients.set(dbName, newDb);\n return newDb as unknown as Database;\n },\n\n all: (): Database[] => Array.from(dbClients.values()) as Database[],\n\n forAll: (func: (db: Database) => Promise<void>): Promise<void[]> => {\n return Promise.all(\n Array.from(dbClients.values())\n .map((v) => v as Database)\n .map(func),\n );\n },\n };\n};\n","import {\n schemaComponent,\n type DatabaseDriverType,\n type SchemaComponent,\n} from '@event-driven-io/dumbo';\nimport type { PongoCollectionSchemaComponent } from '../collection';\nimport type { PongoCollectionSQLBuilder } from '../collection';\nimport {\n pongoSchema,\n type PongoCollectionSchema,\n type PongoDbSchema,\n} from '../schema';\nimport type { PongoDocument } from '../typing';\n\nexport type PongoDatabaseURNType = 'sc:dumbo:database';\nexport type PongoDatabaseURN = `${PongoDatabaseURNType}:${string}`;\n\nexport type PongoDatabaseSchemaComponent<\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n T extends Record<string, PongoCollectionSchema> = Record<\n string,\n PongoCollectionSchema\n >,\n> = SchemaComponent<PongoDatabaseURN> & {\n definition: PongoDbSchema<T>;\n collections: ReadonlyArray<PongoCollectionSchemaComponent>;\n\n collection: <T extends PongoDocument = PongoDocument>(\n schema: PongoCollectionSchema<T>,\n ) => PongoCollectionSchemaComponent;\n};\n\nexport type PongoDatabaseSchemaComponentOptions<\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n T extends Record<string, PongoCollectionSchema> = Record<\n string,\n PongoCollectionSchema\n >,\n> = Readonly<{\n driverType: DriverType;\n definition: PongoDbSchema<T>;\n collectionFactory: <T extends PongoDocument = PongoDocument>(\n schema: PongoCollectionSchema<T>,\n ) => PongoCollectionSchemaComponent;\n}>;\n\nexport const PongoDatabaseSchemaComponent = <\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n>({\n definition,\n collectionFactory,\n}: PongoDatabaseSchemaComponentOptions<DriverType>): PongoDatabaseSchemaComponent => {\n const collections: PongoCollectionSchemaComponent[] =\n Object.values(definition.collections).map(collectionFactory) ?? [];\n\n return {\n ...schemaComponent(`sc:dumbo:database:${definition.name}`, {\n components: collections,\n }),\n definition,\n collections,\n\n collection: <T extends PongoDocument = PongoDocument>(\n schema: PongoCollectionSchema<T>,\n ) => {\n const existing = collections.find(\n (c) => c.collectionName === schema.name,\n );\n\n if (existing) return existing;\n\n const newCollection = collectionFactory(\n pongoSchema.collection(schema.name),\n );\n collections.push(newCollection);\n definition.collections[schema.name] = schema;\n return newCollection;\n },\n };\n};\n\nexport type PongoDatabaseSQLBuilder<\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n> = {\n driverType: DriverType;\n collection: PongoCollectionSQLBuilder;\n};\n","type Entry<T> = {\n [K in keyof Required<T>]: [K, Required<T>[K]];\n}[keyof Required<T>];\n\ntype IterableEntry<T> = Entry<T> & {\n [Symbol.iterator](): Iterator<Entry<T>>;\n};\n\nexport const objectEntries = <T extends object>(obj: T): IterableEntry<T>[] =>\n Object.entries(obj).map(([key, value]) => [key as keyof T, value]);\n\nexport type NonPartial<T> = { [K in keyof Required<T>]: T[K] };\n","import type {\n AnyConnection,\n DatabaseDriverType,\n DatabaseTransaction,\n JSONSerializationOptions,\n JSONSerializer,\n MigrationStyle,\n QueryResult,\n QueryResultRow,\n RunSQLMigrationsResult,\n SQL,\n SQLCommandOptions,\n SQLExecutor,\n SQLQueryOptions,\n WithDatabaseTransactionFactory,\n} from '@event-driven-io/dumbo';\nimport { v7 as uuid } from 'uuid';\nimport type { PongoCollectionSchemaComponent } from '../collection';\nimport type { PongoDatabaseSchemaComponent } from '../database/pongoDatabaseSchemaComponent';\nimport type { AnyPongoDriver, ExtractPongoDriverOptions } from '../drivers';\nimport { ConcurrencyError } from '../errors';\nimport type { PongoClientSchema } from '../schema';\n\nexport interface PongoClient<\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n Database extends PongoDb<DriverType> = PongoDb<DriverType>,\n> {\n driverType: DriverType;\n\n connect(): Promise<this>;\n\n close(): Promise<void>;\n\n db(dbName?: string): Database;\n\n startSession(): PongoSession<DriverType>;\n\n withSession<T = unknown>(\n callback: (session: PongoSession<DriverType>) => Promise<T>,\n ): Promise<T>;\n}\n\nexport type PongoClientOptions<\n DatabaseDriver extends AnyPongoDriver = AnyPongoDriver,\n TypedClientSchema extends PongoClientSchema = PongoClientSchema,\n> =\n ExtractPongoDriverOptions<DatabaseDriver> extends infer Options\n ? Options extends unknown\n ? {\n driver: DatabaseDriver;\n schema?:\n | { autoMigration?: MigrationStyle; definition?: TypedClientSchema }\n | undefined;\n errors?: { throwOnOperationFailures?: boolean } | undefined;\n } & JSONSerializationOptions &\n Omit<Options, 'driver'>\n : never\n : never;\n\nexport declare interface PongoTransactionOptions {\n get snapshotEnabled(): boolean;\n maxCommitTimeMS?: number;\n}\n\nexport interface PongoDbTransaction<\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n Database extends PongoDb<DriverType> = PongoDb<DriverType>,\n> {\n get databaseName(): string | null;\n options: PongoTransactionOptions;\n enlistDatabase: (\n database: Database,\n ) => Promise<DatabaseTransaction<AnyConnection>>;\n commit: () => Promise<void>;\n rollback: (error?: unknown) => Promise<void>;\n get sqlExecutor(): SQLExecutor;\n get isStarting(): boolean;\n get isActive(): boolean;\n get isCommitted(): boolean;\n}\n\nexport interface PongoSession<\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n> {\n hasEnded: boolean;\n explicit: boolean;\n defaultTransactionOptions: PongoTransactionOptions;\n transaction: PongoDbTransaction<DriverType> | null;\n get snapshotEnabled(): boolean;\n\n endSession(): Promise<void>;\n incrementTransactionNumber(): void;\n inTransaction(): boolean;\n startTransaction(options?: PongoTransactionOptions): void;\n commitTransaction(): Promise<void>;\n abortTransaction(): Promise<void>;\n withTransaction<T = unknown>(\n fn: (session: PongoSession<DriverType>) => Promise<T>,\n options?: PongoTransactionOptions,\n ): Promise<T>;\n}\n\nexport type PongoDBCollectionOptions<\n T extends PongoDocument,\n Payload extends PongoDocument = T,\n> = {\n schema?: {\n versioning?: {\n upcast?: (document: Payload) => T;\n downcast?: (document: T) => Payload;\n };\n };\n errors?: { throwOnOperationFailures?: boolean };\n};\n\nexport interface PongoDb<\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n> extends WithDatabaseTransactionFactory<AnyConnection> {\n driverType: DriverType;\n databaseName: string;\n connect(): Promise<void>;\n close(): Promise<void>;\n collection<T extends PongoDocument, Payload extends PongoDocument = T>(\n name: string,\n options?: PongoDBCollectionOptions<T, Payload>,\n ): PongoCollection<T>;\n collections(): ReadonlyArray<PongoCollection<PongoDocument>>;\n readonly schema: Readonly<{\n component: PongoDatabaseSchemaComponent<DriverType>;\n migrate(options?: PongoMigrationOptions): Promise<RunSQLMigrationsResult>;\n }>;\n sql: {\n query<Result extends QueryResultRow = QueryResultRow>(\n sql: SQL,\n options?: CollectionOperationOptions & SQLQueryOptions,\n ): Promise<Result[]>;\n command<Result extends QueryResultRow = QueryResultRow>(\n sql: SQL,\n options?: CollectionOperationOptions & SQLCommandOptions,\n ): Promise<QueryResult<Result>>;\n };\n}\n\nexport type AnyPongoDb = PongoDb<DatabaseDriverType>;\n\nexport type PongoMigrationOptions = {\n dryRun?: boolean | undefined;\n ignoreMigrationHashMismatch?: boolean | undefined;\n migrationTimeoutMs?: number | undefined;\n};\n\nexport type CollectionOperationOptions = {\n session?: PongoSession;\n};\n\nexport type InsertOneOptions = {\n expectedVersion?: Extract<\n ExpectedDocumentVersion,\n 'DOCUMENT_DOES_NOT_EXIST' | 'NO_CONCURRENCY_CHECK'\n >;\n} & CollectionOperationOptions;\n\nexport type InsertManyOptions = {\n expectedVersion?: Extract<\n ExpectedDocumentVersion,\n 'DOCUMENT_DOES_NOT_EXIST' | 'NO_CONCURRENCY_CHECK'\n >;\n} & CollectionOperationOptions;\n\nexport type UpdateOneOptions = {\n expectedVersion?: Exclude<ExpectedDocumentVersion, 'DOCUMENT_DOES_NOT_EXIST'>;\n} & CollectionOperationOptions;\n\nexport type UpdateManyOptions = {\n expectedVersion?: Extract<\n ExpectedDocumentVersion,\n 'DOCUMENT_EXISTS' | 'NO_CONCURRENCY_CHECK'\n >;\n} & CollectionOperationOptions;\n\nexport type HandleOptions = {\n expectedVersion?: ExpectedDocumentVersion;\n} & CollectionOperationOptions;\n\nexport type ReplaceOneOptions = {\n expectedVersion?: Exclude<ExpectedDocumentVersion, 'DOCUMENT_DOES_NOT_EXIST'>;\n} & CollectionOperationOptions;\n\nexport type DeleteOneOptions = {\n expectedVersion?: Exclude<ExpectedDocumentVersion, 'DOCUMENT_DOES_NOT_EXIST'>;\n} & CollectionOperationOptions;\n\nexport type DeleteManyOptions = {\n expectedVersion?: Extract<\n ExpectedDocumentVersion,\n 'DOCUMENT_EXISTS' | 'NO_CONCURRENCY_CHECK'\n >;\n} & CollectionOperationOptions;\n\nexport type FindOptions = {\n limit?: number;\n skip?: number;\n} & CollectionOperationOptions;\n\nexport interface PongoCollection<T extends PongoDocument> {\n readonly dbName: string;\n readonly collectionName: string;\n createCollection(options?: CollectionOperationOptions): Promise<void>;\n insertOne(\n document: OptionalUnlessRequiredId<T>,\n options?: InsertOneOptions,\n ): Promise<PongoInsertOneResult>;\n insertMany(\n documents: OptionalUnlessRequiredId<T>[],\n options?: CollectionOperationOptions,\n ): Promise<PongoInsertManyResult>;\n updateOne(\n filter: PongoFilter<T> | SQL,\n update: PongoUpdate<T> | SQL,\n options?: UpdateOneOptions,\n ): Promise<PongoUpdateResult>;\n replaceOne(\n filter: PongoFilter<T> | SQL,\n document: WithoutId<T>,\n options?: ReplaceOneOptions,\n ): Promise<PongoUpdateResult>;\n updateMany(\n filter: PongoFilter<T> | SQL,\n update: PongoUpdate<T> | SQL,\n options?: UpdateManyOptions,\n ): Promise<PongoUpdateManyResult>;\n deleteOne(\n filter?: PongoFilter<T> | SQL,\n options?: DeleteOneOptions,\n ): Promise<PongoDeleteResult>;\n deleteMany(\n filter?: PongoFilter<T> | SQL,\n options?: DeleteManyOptions,\n ): Promise<PongoDeleteResult>;\n findOne(\n filter?: PongoFilter<T> | SQL,\n options?: CollectionOperationOptions,\n ): Promise<WithIdAndVersion<T> | null>;\n find(\n filter?: PongoFilter<T> | SQL,\n options?: FindOptions,\n ): Promise<WithIdAndVersion<T>[]>;\n findOneAndDelete(\n filter: PongoFilter<T> | SQL,\n options?: DeleteOneOptions,\n ): Promise<WithIdAndVersion<T> | null>;\n findOneAndReplace(\n filter: PongoFilter<T> | SQL,\n replacement: WithoutId<T>,\n options?: ReplaceOneOptions,\n ): Promise<WithIdAndVersion<T> | null>;\n findOneAndUpdate(\n filter: PongoFilter<T> | SQL,\n update: PongoUpdate<T> | SQL,\n options?: UpdateOneOptions,\n ): Promise<WithIdAndVersion<T> | null>;\n countDocuments(\n filter?: PongoFilter<T> | SQL,\n options?: CollectionOperationOptions,\n ): Promise<number>;\n drop(options?: CollectionOperationOptions): Promise<boolean>;\n rename(\n newName: string,\n options?: CollectionOperationOptions,\n ): Promise<PongoCollection<T>>;\n handle(\n id: string,\n handle: DocumentHandler<T>,\n options?: HandleOptions,\n ): Promise<PongoHandleResult<T>>;\n readonly schema: Readonly<{\n component: PongoCollectionSchemaComponent;\n migrate(options?: PongoMigrationOptions): Promise<RunSQLMigrationsResult>;\n }>;\n sql: {\n query<Result extends QueryResultRow = QueryResultRow>(\n sql: SQL,\n options?: CollectionOperationOptions,\n ): Promise<Result[]>;\n command<Result extends QueryResultRow = QueryResultRow>(\n sql: SQL,\n options?: CollectionOperationOptions,\n ): Promise<QueryResult<Result>>;\n };\n}\n\nexport type ObjectId = string & { __brandId: 'ObjectId' };\nexport const ObjectId = (value?: string) => value ?? uuid();\n\nexport type HasId = { _id: string };\n\nexport declare type InferIdType<TSchema> = TSchema extends {\n _id: infer IdType;\n}\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Record<any, never> extends IdType\n ? never\n : IdType\n : TSchema extends {\n _id?: infer IdType;\n }\n ? unknown extends IdType\n ? ObjectId\n : IdType\n : ObjectId;\n\n/** TypeScript Omit (Exclude to be specific) does not work for objects with an \"any\" indexed type, and breaks discriminated unions @public */\nexport declare type EnhancedOmit<TRecordOrUnion, KeyUnion> =\n string extends keyof TRecordOrUnion\n ? TRecordOrUnion\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TRecordOrUnion extends any\n ? Pick<TRecordOrUnion, Exclude<keyof TRecordOrUnion, KeyUnion>>\n : never;\n\nexport declare type OptionalUnlessRequiredId<TSchema> = TSchema extends {\n _id: string | ObjectId;\n}\n ? TSchema\n : OptionalId<TSchema>;\n\nexport declare type OptionalUnlessRequiredVersion<TSchema> = TSchema extends {\n _version: bigint;\n}\n ? TSchema\n : OptionalVersion<TSchema>;\n\nexport declare type OptionalUnlessRequiredIdAndVersion<TSchema> =\n OptionalUnlessRequiredId<TSchema> & OptionalUnlessRequiredVersion<TSchema>;\n\nexport declare type WithId<TSchema> = EnhancedOmit<TSchema, '_id'> & {\n _id: string | ObjectId;\n};\nexport type WithoutId<T> = Omit<T, '_id'>;\n\nexport declare type WithVersion<TSchema> = EnhancedOmit<TSchema, '_version'> & {\n _version: bigint;\n};\nexport type WithoutVersion<T> = Omit<T, '_version'>;\n\nexport type WithIdAndVersion<T> = WithId<WithVersion<T>>;\nexport type WithoutIdAndVersion<T> = WithoutId<WithoutVersion<T>>;\n\n/** @public */\nexport declare type RegExpOrString<T> = T extends string ? RegExp | T : T;\n\nexport declare interface Document {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport declare type OptionalId<TSchema> = EnhancedOmit<TSchema, '_id'> & {\n _id?: string | ObjectId;\n};\nexport declare type OptionalVersion<TSchema> = EnhancedOmit<\n TSchema,\n '_version'\n> & {\n _version?: bigint;\n};\n\nexport declare interface ObjectIdLike {\n __id?: string | ObjectId;\n}\n\nexport declare type NonObjectIdLikeDocument = {\n [key in keyof ObjectIdLike]?: never;\n} & Document;\n\nexport declare type AlternativeType<T> =\n T extends ReadonlyArray<infer U> ? T | RegExpOrString<U> : RegExpOrString<T>;\n\nexport declare type Condition<T> =\n | AlternativeType<T>\n | PongoFilterOperator<AlternativeType<T>>;\n\nexport declare type PongoFilter<TSchema> =\n | {\n [P in keyof WithId<TSchema>]?: Condition<WithId<TSchema>[P]>;\n }\n | HasId; // TODO: & RootFilterOperators<WithId<TSchema>>;\n\nexport declare interface RootFilterOperators<TSchema> extends Document {\n $and?: PongoFilter<TSchema>[];\n $nor?: PongoFilter<TSchema>[];\n $or?: PongoFilter<TSchema>[];\n $text?: {\n $search: string;\n $language?: string;\n $caseSensitive?: boolean;\n $diacriticSensitive?: boolean;\n };\n $where?: string | ((this: TSchema) => boolean);\n $comment?: string | Document;\n}\n\nexport declare interface PongoFilterOperator<\n TValue,\n> extends NonObjectIdLikeDocument {\n $eq?: TValue;\n $gt?: TValue;\n $gte?: TValue;\n $lt?: TValue;\n $lte?: TValue;\n $ne?: TValue;\n $in?: TValue[];\n $nin?: TValue[];\n // $eq?: TValue;\n // $gt?: TValue;\n // $gte?: TValue;\n // $in?: ReadonlyArray<TValue>;\n // $lt?: TValue;\n // $lte?: TValue;\n // $ne?: TValue;\n // $nin?: ReadonlyArray<TValue>;\n // $not?: TValue extends string ? FilterOperators<TValue> | RegExp : FilterOperators<TValue>;\n // /**\n // * When `true`, `$exists` matches the documents that contain the field,\n // * including documents where the field value is null.\n // */\n // $exists?: boolean;\n // $type?: BSONType | BSONTypeAlias;\n // $expr?: Record<string, any>;\n // $jsonSchema?: Record<string, any>;\n // $mod?: TValue extends number ? [number, number] : never;\n // $regex?: TValue extends string ? RegExp | BSONRegExp | string : never;\n // $options?: TValue extends string ? string : never;\n // $geoIntersects?: {\n // $geometry: Document;\n // };\n // $geoWithin?: Document;\n // $near?: Document;\n // $nearSphere?: Document;\n // $maxDistance?: number;\n // $all?: ReadonlyArray<any>;\n // $elemMatch?: Document;\n // $size?: TValue extends ReadonlyArray<any> ? number : never;\n // $bitsAllClear?: BitwiseFilter;\n // $bitsAllSet?: BitwiseFilter;\n // $bitsAnyClear?: BitwiseFilter;\n // $bitsAnySet?: BitwiseFilter;\n // $rand?: Record<string, never>;\n}\n\nexport type $set<T> = Partial<T>;\nexport type $unset<T> = { [P in keyof T]?: '' };\nexport type $inc<T> = { [P in keyof T]?: number | bigint };\nexport type $push<T> = { [P in keyof T]?: T[P] };\n\nexport type ExpectedDocumentVersionGeneral =\n | 'DOCUMENT_EXISTS'\n | 'DOCUMENT_DOES_NOT_EXIST'\n | 'NO_CONCURRENCY_CHECK';\n\nexport type ExpectedDocumentVersionValue = bigint & { __brand: 'sql' };\n\nexport type ExpectedDocumentVersion =\n | (bigint & { __brand: 'sql' })\n | bigint\n | ExpectedDocumentVersionGeneral;\n\nexport const DOCUMENT_EXISTS =\n 'DOCUMENT_EXISTS' as ExpectedDocumentVersionGeneral;\nexport const DOCUMENT_DOES_NOT_EXIST =\n 'DOCUMENT_DOES_NOT_EXIST' as ExpectedDocumentVersionGeneral;\nexport const NO_CONCURRENCY_CHECK =\n 'NO_CONCURRENCY_CHECK' as ExpectedDocumentVersionGeneral;\n\nexport const isGeneralExpectedDocumentVersion = (\n version: ExpectedDocumentVersion,\n): version is ExpectedDocumentVersionGeneral =>\n version === 'DOCUMENT_DOES_NOT_EXIST' ||\n version === 'DOCUMENT_EXISTS' ||\n version === 'NO_CONCURRENCY_CHECK';\n\nexport const expectedVersionValue = (\n version: ExpectedDocumentVersion | undefined,\n): ExpectedDocumentVersionValue | null =>\n version === undefined || isGeneralExpectedDocumentVersion(version)\n ? null\n : (version as ExpectedDocumentVersionValue);\n\nexport const expectedVersion = (\n version: number | bigint | string | undefined | null,\n): ExpectedDocumentVersion => {\n return version\n ? (BigInt(version) as ExpectedDocumentVersion)\n : NO_CONCURRENCY_CHECK;\n};\n\nexport type PongoUpdate<T> = {\n $set?: Partial<T>;\n $unset?: $unset<T>;\n $inc?: $inc<T>;\n $push?: $push<T>;\n};\n\nexport type OperationResult = {\n acknowledged: boolean;\n successful: boolean;\n\n assertSuccessful: (errorMessage?: string) => void;\n};\n\nexport const operationResult = <T extends OperationResult>(\n result: Omit<T, 'assertSuccess' | 'acknowledged' | 'assertSuccessful'>,\n options: {\n operationName: string;\n collectionName: string;\n serializer: JSONSerializer;\n errors?: { throwOnOperationFailures?: boolean } | undefined;\n },\n): T => {\n const operationResult: T = {\n ...result,\n acknowledged: true,\n successful: result.successful,\n assertSuccessful: (errorMessage?: string) => {\n const { successful } = result;\n const { operationName, collectionName } = options;\n\n if (!successful)\n throw new ConcurrencyError(\n errorMessage ??\n `${operationName} on ${collectionName} failed. Expected document state does not match current one! Result: ${options.serializer.serialize(result)}!`,\n );\n },\n } as T;\n\n if (options.errors?.throwOnOperationFailures)\n operationResult.assertSuccessful();\n\n return operationResult;\n};\n\nexport interface PongoInsertOneResult extends OperationResult {\n insertedId: string | null;\n nextExpectedVersion: bigint;\n}\n\nexport interface PongoInsertManyResult extends OperationResult {\n insertedIds: string[];\n insertedCount: number;\n}\n\nexport interface PongoUpdateResult extends OperationResult {\n matchedCount: number;\n modifiedCount: number;\n nextExpectedVersion: bigint;\n}\n\nexport interface PongoUpdateManyResult extends OperationResult {\n matchedCount: number;\n modifiedCount: number;\n}\n\nexport interface PongoDeleteResult extends OperationResult {\n matchedCount: number;\n deletedCount: number;\n}\n\nexport interface PongoDeleteManyResult extends OperationResult {\n deletedCount: number;\n}\n\nexport type PongoHandleResult<T> =\n | (PongoInsertOneResult & { document: T })\n | (PongoUpdateResult & { document: T })\n | (PongoDeleteResult & { document: null })\n | (OperationResult & { document: null });\n\nexport type PongoDocument = Record<string, unknown>;\n\nexport type DocumentHandler<T extends PongoDocument> =\n | ((document: T | null) => T | null)\n | ((document: T | null) => Promise<T | null>);\n","export const isNumber = (val: unknown): val is number =>\n typeof val === 'number' && val === val;\n\nexport const isString = (val: unknown): val is string =>\n typeof val === 'string';\n\nexport class PongoError extends Error {\n public errorCode: number;\n\n constructor(\n options?: { errorCode: number; message?: string } | string | number,\n ) {\n const errorCode =\n options && typeof options === 'object' && 'errorCode' in options\n ? options.errorCode\n : isNumber(options)\n ? options\n : 500;\n const message =\n options && typeof options === 'object' && 'message' in options\n ? options.message\n : isString(options)\n ? options\n : `Error with status code '${errorCode}' ocurred during Pongo processing`;\n\n super(message);\n this.errorCode = errorCode;\n\n // 👇️ because we are extending a built-in class\n Object.setPrototypeOf(this, PongoError.prototype);\n }\n}\n\nexport class ConcurrencyError extends PongoError {\n constructor(message?: string) {\n super({\n errorCode: 412,\n message: message ?? `Expected document state does not match current one!`,\n });\n\n // 👇️ because we are extending a built-in class\n Object.setPrototypeOf(this, ConcurrencyError.prototype);\n }\n}\n","import type { DatabaseDriverType } from '@event-driven-io/dumbo';\nimport {\n type Document,\n type PongoClient,\n type PongoCollection,\n type PongoDb,\n type PongoDocument,\n objectEntries,\n} from '../typing';\n\nexport interface PongoCollectionSchema<\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n T extends PongoDocument = PongoDocument,\n> {\n name: string;\n}\n\n// Database schema interface\nexport interface PongoDbSchema<\n T extends Record<string, PongoCollectionSchema> = Record<\n string,\n PongoCollectionSchema\n >,\n> {\n name?: string;\n collections: T;\n}\n\nexport interface PongoClientSchema<\n T extends Record<string, PongoDbSchema> = Record<string, PongoDbSchema>,\n> {\n dbs: T;\n}\n\nexport type CollectionsMap<T extends Record<string, PongoCollectionSchema>> = {\n [K in keyof T]: PongoCollection<\n T[K] extends PongoCollectionSchema<infer U> ? U : PongoDocument\n >;\n};\n\nexport type PongoDbWithSchema<\n T extends Record<string, PongoCollectionSchema>,\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n> = CollectionsMap<T> & PongoDb<DriverType>;\n\nexport type DBsMap<\n T extends Record<string, PongoDbSchema>,\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n Database extends PongoDb<DriverType> = PongoDb<DriverType>,\n> = {\n [K in keyof T]: CollectionsMap<T[K]['collections']> & Database;\n};\n\nexport type PongoClientWithSchema<\n T extends PongoClientSchema,\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n Database extends PongoDb<DriverType> = PongoDb<DriverType>,\n> = DBsMap<T['dbs'], DriverType, Database> & PongoClient<DriverType, Database>;\n\nconst pongoCollectionSchema = <T extends PongoDocument>(\n name: string,\n): PongoCollectionSchema<T> => ({\n name,\n});\n\npongoCollectionSchema.from = (\n collectionNames: string[],\n): Record<string, PongoCollectionSchema> =>\n collectionNames.reduce(\n (acc, collectionName) => (\n (acc[collectionName] = pongoSchema.collection(collectionName)),\n acc\n ),\n {} as Record<string, PongoCollectionSchema>,\n );\n\nfunction pongoDbSchema<T extends Record<string, PongoCollectionSchema>>(\n collections: T,\n): PongoDbSchema<T>;\nfunction pongoDbSchema<T extends Record<string, PongoCollectionSchema>>(\n name: string,\n collections: T,\n): PongoDbSchema<T>;\nfunction pongoDbSchema<T extends Record<string, PongoCollectionSchema>>(\n nameOrCollections: string | T,\n collections?: T,\n): PongoDbSchema<T> {\n if (collections === undefined) {\n if (typeof nameOrCollections === 'string') {\n throw new Error('You need to provide colleciton definition');\n }\n return {\n collections: nameOrCollections,\n };\n }\n\n return nameOrCollections && typeof nameOrCollections === 'string'\n ? {\n name: nameOrCollections,\n collections,\n }\n : { collections: collections };\n}\n\npongoDbSchema.from = (\n databaseName: string | undefined,\n collectionNames: string[],\n): PongoDbSchema =>\n databaseName\n ? pongoDbSchema(databaseName, pongoCollectionSchema.from(collectionNames))\n : pongoDbSchema(pongoCollectionSchema.from(collectionNames));\n\nconst pongoClientSchema = <T extends Record<string, PongoDbSchema>>(\n dbs: T,\n): PongoClientSchema<T> => ({\n dbs,\n});\n\nexport const pongoSchema = {\n client: pongoClientSchema,\n db: pongoDbSchema,\n collection: pongoCollectionSchema,\n};\n\n// Factory function to create DB instances\nexport const proxyPongoDbWithSchema = <\n Collections extends Record<string, PongoCollectionSchema>,\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n Database extends PongoDb<DriverType> = PongoDb<DriverType>,\n>(\n pongoDb: Database,\n dbSchema: PongoDbSchema<Collections>,\n collections: Map<string, PongoCollection<Document>>,\n): PongoDbWithSchema<Collections, DriverType> & Database => {\n const collectionNames = Object.keys(dbSchema.collections);\n\n for (const collectionName of collectionNames) {\n collections.set(collectionName, pongoDb.collection(collectionName));\n }\n\n return new Proxy(\n pongoDb as Database & {\n [key: string]: unknown;\n },\n {\n get(target, prop: string) {\n return collections.get(prop) ?? target[prop];\n },\n },\n ) as PongoDbWithSchema<Collections, DriverType> & Database;\n};\n\nexport const proxyClientWithSchema = <\n TypedClientSchema extends PongoClientSchema,\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n Database extends PongoDb<DriverType> = PongoDb<DriverType>,\n>(\n client: PongoClient<DriverType, Database>,\n schema: TypedClientSchema | undefined,\n): PongoClientWithSchema<TypedClientSchema, DriverType, Database> => {\n if (!schema)\n return client as PongoClientWithSchema<\n TypedClientSchema,\n DriverType,\n Database\n >;\n\n const dbNames = Object.keys(schema.dbs);\n\n return new Proxy(\n client as PongoClient<DriverType, Database> & {\n [key: string]: unknown;\n },\n {\n get(target, prop: string) {\n if (dbNames.includes(prop)) return client.db(schema.dbs[prop]?.name);\n\n return target[prop];\n },\n },\n ) as PongoClientWithSchema<TypedClientSchema, DriverType, Database>;\n};\n\nexport type PongoCollectionSchemaMetadata = {\n name: string;\n};\n\nexport type PongoDbSchemaMetadata = {\n name?: string | undefined;\n collections: PongoCollectionSchemaMetadata[];\n};\n\nexport type PongoClientSchemaMetadata = {\n databases: PongoDbSchemaMetadata[];\n database: (name?: string) => PongoDbSchemaMetadata | undefined;\n};\n\nexport const toDbSchemaMetadata = <TypedDbSchema extends PongoDbSchema>(\n schema: TypedDbSchema,\n): PongoDbSchemaMetadata => ({\n name: schema.name,\n collections: objectEntries(schema.collections).map((c) => ({\n name: c[1].name,\n })),\n});\n\nexport const toClientSchemaMetadata = <\n TypedClientSchema extends PongoClientSchema,\n>(\n schema: TypedClientSchema,\n): PongoClientSchemaMetadata => {\n const databases = objectEntries(schema.dbs).map((e) =>\n toDbSchemaMetadata(e[1]),\n );\n\n return {\n databases,\n database: (name) => databases.find((db) => db.name === name),\n };\n};\n\nexport interface PongoSchemaConfig<\n TypedClientSchema extends PongoClientSchema = PongoClientSchema,\n> {\n schema: TypedClientSchema;\n}\n","import type { JSONSerializer, SQL } from '@event-driven-io/dumbo';\nimport {\n runSQLMigrations,\n type DatabaseDriverType,\n type Dumbo,\n type MigrationStyle,\n type QueryResult,\n type QueryResultRow,\n type SQLCommandOptions,\n type SQLQueryOptions,\n} from '@event-driven-io/dumbo';\nimport { pongoCollection, transactionExecutorOrDefault } from '../collection';\nimport {\n pongoSchema,\n proxyPongoDbWithSchema,\n type PongoCollectionSchema,\n type PongoDbSchema,\n} from '../schema';\nimport type {\n AnyPongoDb,\n CollectionOperationOptions,\n Document,\n PongoCollection,\n PongoDb,\n PongoDBCollectionOptions,\n PongoMigrationOptions,\n} from '../typing';\nimport type { PongoDatabaseSchemaComponent } from './pongoDatabaseSchemaComponent';\n\nexport type PongoDatabaseOptions<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n DumboType extends Dumbo<DatabaseDriverType, any> = Dumbo<\n DatabaseDriverType,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any\n >,\n CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<\n string,\n PongoCollectionSchema\n >,\n> = {\n databaseName: string;\n pool: DumboType;\n serializer: JSONSerializer;\n schemaComponent: PongoDatabaseSchemaComponent<DumboType['driverType']>;\n schema?:\n | {\n autoMigration?: MigrationStyle;\n definition?: PongoDbSchema<CollectionsSchema>;\n }\n | undefined;\n errors?: { throwOnOperationFailures?: boolean } | undefined;\n};\n\nexport const PongoDatabase = <\n Database extends AnyPongoDb = AnyPongoDb,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n DumboType extends Dumbo<Database['driverType'], any> = Dumbo<\n Database['driverType'],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any\n >,\n>(\n options: PongoDatabaseOptions<DumboType>,\n): Database => {\n const { databaseName, schemaComponent, pool, serializer } = options;\n\n const collections = new Map<string, PongoCollection<Document>>();\n\n const command = async <Result extends QueryResultRow = QueryResultRow>(\n sql: SQL,\n options?: CollectionOperationOptions & SQLCommandOptions,\n ) =>\n (\n await transactionExecutorOrDefault(db, options, pool.execute)\n ).command<Result>(sql, options);\n\n const query = async <T extends QueryResultRow>(\n sql: SQL,\n options?: CollectionOperationOptions & SQLQueryOptions,\n ) =>\n (await transactionExecutorOrDefault(db, options, pool.execute)).query<T>(\n sql,\n options,\n );\n\n const driverType = pool.driverType as Database['driverType'];\n\n const db = {\n driverType,\n databaseName,\n connect: () => Promise.resolve(),\n close: () => pool.close(),\n\n collections: () => [...collections.values()],\n collection: <T extends Document, Payload extends Document = T>(\n collectionName: string,\n collectionOptions?: PongoDBCollectionOptions<T, Payload>,\n ) =>\n (collections.get(collectionName) as PongoCollection<T> | undefined) ??\n pongoCollection({\n collectionName,\n db,\n pool,\n schemaComponent: schemaComponent.collection(\n pongoSchema.collection<T>(collectionName),\n ),\n schema: { ...options.schema, ...collectionOptions?.schema },\n serializer,\n errors: { ...options.errors, ...collectionOptions?.errors },\n }),\n transaction: () => pool.transaction(),\n withTransaction: (handle) => pool.withTransaction(handle),\n\n schema: {\n component: schemaComponent,\n migrate: (options?: PongoMigrationOptions) =>\n runSQLMigrations(pool, schemaComponent.migrations, options),\n },\n\n sql: {\n async query<Result extends QueryResultRow = QueryResultRow>(\n sql: SQL,\n options?: CollectionOperationOptions & SQLQueryOptions,\n ): Promise<Result[]> {\n const result = await query<Result>(sql, options);\n return result.rows;\n },\n async command<Result extends QueryResultRow = QueryResultRow>(\n sql: SQL,\n options?: CollectionOperationOptions & SQLCommandOptions,\n ): Promise<QueryResult<Result>> {\n return command(sql, options);\n },\n },\n } satisfies PongoDb<Database['driverType']> as unknown as Database;\n\n const dbSchema = options?.schema?.definition;\n\n if (dbSchema) {\n return proxyPongoDbWithSchema(db, dbSchema, collections);\n }\n\n return db;\n};\n","import type {\n DatabaseDriverType,\n JSONSerializationOptions,\n JSONSerializer,\n MigrationStyle,\n} from '@event-driven-io/dumbo';\nimport type { PongoCollectionSchema, PongoDbSchema } from '../schema';\nimport type { AnyPongoDb, PongoDb } from '../typing';\n\nexport type PongoDriverOptions<ConnectionOptions = unknown> = {\n connectionOptions?: ConnectionOptions | undefined;\n} & JSONSerializationOptions;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyPongoDriverOptions = PongoDriverOptions<any>;\n\nexport type PongoDatabaseFactoryOptions<\n CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<\n string,\n PongoCollectionSchema\n >,\n DriverOptions extends AnyPongoDriverOptions = AnyPongoDriverOptions,\n> = {\n databaseName?: string | undefined;\n schema?:\n | {\n autoMigration?: MigrationStyle;\n definition?: PongoDbSchema<CollectionsSchema>;\n }\n | undefined;\n serializer: JSONSerializer;\n errors?: { throwOnOperationFailures?: boolean } | undefined;\n} & DriverOptions;\n\nexport interface PongoDriver<\n Database extends AnyPongoDb = AnyPongoDb,\n DriverOptions extends AnyPongoDriverOptions = AnyPongoDriverOptions,\n> {\n driverType: Database['driverType'];\n databaseFactory<\n CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<\n string,\n PongoCollectionSchema\n >,\n >(\n options: PongoDatabaseFactoryOptions<CollectionsSchema, DriverOptions>,\n ): Database & PongoDb<Database['driverType']>;\n}\n\nexport type AnyPongoDriver = PongoDriver<AnyPongoDb, AnyPongoDriverOptions>;\n\nexport type ExtractPongoDriverOptions<DatabaseDriver> =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n DatabaseDriver extends PongoDriver<any, infer O> ? O : never;\n\nexport type ExtractPongoDatabaseTypeFromDriver<DatabaseDriver> =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n DatabaseDriver extends PongoDriver<infer D, any> ? D : never;\n\nexport const PongoDriverRegistry = () => {\n const drivers = new Map<\n DatabaseDriverType,\n PongoDriver | (() => Promise<PongoDriver>)\n >();\n\n const register = <Database extends AnyPongoDb = AnyPongoDb>(\n driverType: Database['driverType'],\n driver: PongoDriver<Database> | (() => Promise<PongoDriver<Database>>),\n ): void => {\n const entry = drivers.get(driverType);\n if (\n entry &&\n (typeof entry !== 'function' || typeof driver === 'function')\n ) {\n return;\n }\n drivers.set(driverType, driver);\n };\n\n const tryResolve = async <Driver extends AnyPongoDriver = AnyPongoDriver>(\n driverType: Driver['driverType'],\n ): Promise<Driver | null> => {\n const entry = drivers.get(driverType);\n\n if (!entry) return null;\n\n if (typeof entry !== 'function') return entry as Driver;\n\n const driver = await entry();\n\n register(driverType, driver);\n return driver as Driver;\n };\n\n const tryGet = <Driver extends AnyPongoDriver = AnyPongoDriver>(\n driverType: Driver['driverType'],\n ): Driver | null => {\n const entry = drivers.get(driverType);\n return entry && typeof entry !== 'function' ? (entry as Driver) : null;\n };\n\n const has = (driverType: DatabaseDriverType): boolean =>\n drivers.has(driverType);\n\n return {\n register,\n tryResolve,\n tryGet,\n has,\n get databaseDriverTypes(): DatabaseDriverType[] {\n return Array.from(drivers.keys());\n },\n };\n};\n\ndeclare global {\n var pongoDriverRegistry: ReturnType<typeof PongoDriverRegistry>;\n}\n\nexport const pongoDriverRegistry = (globalThis.pongoDriverRegistry =\n globalThis.pongoDriverRegistry ?? PongoDriverRegistry());\n","import { JSONSerializer } from '@event-driven-io/dumbo';\nimport { PongoDatabaseCache } from './database';\nimport type {\n AnyPongoDriver,\n ExtractPongoDatabaseTypeFromDriver,\n} from './drivers';\nimport { pongoSession } from './pongoSession';\nimport {\n proxyClientWithSchema,\n type PongoClientSchema,\n type PongoClientWithSchema,\n} from './schema';\nimport type {\n PongoClient,\n PongoClientOptions,\n PongoDb,\n PongoSession,\n} from './typing';\n\nexport const pongoClient = <\n DatabaseDriver extends AnyPongoDriver,\n TypedClientSchema extends PongoClientSchema = PongoClientSchema,\n>(\n options: PongoClientOptions<DatabaseDriver, TypedClientSchema>,\n): PongoClient<\n DatabaseDriver['driverType'],\n ExtractPongoDatabaseTypeFromDriver<DatabaseDriver>\n> &\n PongoClientWithSchema<TypedClientSchema> => {\n const { driver, schema, errors, ...connectionOptions } = options;\n\n const dbClients = PongoDatabaseCache<PongoDb, TypedClientSchema>({\n driver,\n typedSchema: schema?.definition,\n });\n\n const serializer = JSONSerializer.from(options);\n\n const pongoClient: PongoClient<\n DatabaseDriver['driverType'],\n ExtractPongoDatabaseTypeFromDriver<DatabaseDriver>\n > = {\n driverType: driver.driverType,\n connect: async () => {\n await dbClients.forAll((db) => db.connect());\n return pongoClient;\n },\n close: async () => {\n await dbClients.forAll((db) => db.close());\n },\n db: (\n dbName?: string,\n ): ExtractPongoDatabaseTypeFromDriver<DatabaseDriver> => {\n const db = dbClients.getOrCreate({\n ...connectionOptions,\n databaseName: dbName,\n serializer,\n errors,\n });\n\n return db as ExtractPongoDatabaseTypeFromDriver<DatabaseDriver>;\n },\n startSession: pongoSession,\n withSession: async <T>(\n callback: (session: PongoSession) => Promise<T>,\n ): Promise<T> => {\n const session = pongoSession();\n\n try {\n return await callback(session);\n } finally {\n await session.endSession();\n }\n },\n };\n\n return proxyClientWithSchema(pongoClient, schema?.definition);\n};\n","import type { DatabaseTransaction } from '@event-driven-io/dumbo';\nimport type {\n PongoDb,\n PongoDbTransaction,\n PongoTransactionOptions,\n} from './typing';\n\nexport const pongoTransaction = (\n options: PongoTransactionOptions,\n): PongoDbTransaction => {\n let isCommitted = false;\n let isRolledBack = false;\n let databaseName: string | null = null;\n let transaction: DatabaseTransaction | null = null;\n\n return {\n enlistDatabase: async (db: PongoDb): Promise<DatabaseTransaction> => {\n if (transaction && databaseName !== db.databaseName)\n throw new Error(\n \"There's already other database assigned to transaction\",\n );\n\n if (transaction && databaseName === db.databaseName) return transaction;\n\n databaseName = db.databaseName;\n transaction = db.transaction();\n await transaction.begin();\n\n return transaction;\n },\n commit: async () => {\n if (!transaction) throw new Error('No database transaction started!');\n if (isCommitted) return;\n if (isRolledBack) throw new Error('Transaction is not active!');\n\n isCommitted = true;\n\n await transaction.commit();\n\n transaction = null;\n },\n rollback: async (error?: unknown) => {\n if (!transaction) throw new Error('No database transaction started!');\n if (isCommitted) throw new Error('Cannot rollback commited transaction!');\n if (isRolledBack) return;\n\n isRolledBack = true;\n\n await transaction.rollback(error);\n\n transaction = null;\n },\n databaseName,\n isStarting: false,\n isCommitted,\n get isActive() {\n return !isCommitted && !isRolledBack;\n },\n get sqlExecutor() {\n if (transaction === null)\n throw new Error('No database transaction was started');\n\n return transaction.execute;\n },\n options,\n };\n};\n","import { pongoTransaction } from './pongoTransaction';\nimport type {\n PongoDbTransaction,\n PongoSession,\n PongoTransactionOptions,\n} from './typing';\n\nexport type PongoSessionOptions = {\n explicit?: boolean;\n defaultTransactionOptions: PongoTransactionOptions;\n};\n\nconst isActive = (\n transaction: PongoDbTransaction | null,\n): transaction is PongoDbTransaction => transaction?.isActive === true;\n\nfunction assertInActiveTransaction(\n transaction: PongoDbTransaction | null,\n): asserts transaction is PongoDbTransaction {\n if (!isActive(transaction)) throw new Error('No active transaction exists!');\n}\n\nfunction assertNotInActiveTransaction(\n transaction: PongoDbTransaction | null,\n): asserts transaction is null {\n if (isActive(transaction))\n throw new Error('Active transaction already exists!');\n}\n\nexport const pongoSession = (options?: PongoSessionOptions): PongoSession => {\n const explicit = options?.explicit === true;\n const defaultTransactionOptions: PongoTransactionOptions =\n options?.defaultTransactionOptions ?? {\n get snapshotEnabled() {\n return false;\n },\n };\n\n let transaction: PongoDbTransaction | null = null;\n let hasEnded = false;\n\n const startTransaction = (options?: PongoTransactionOptions) => {\n assertNotInActiveTransaction(transaction);\n\n transaction = pongoTransaction(options ?? defaultTransactionOptions);\n };\n const commitTransaction = async () => {\n assertInActiveTransaction(transaction);\n\n await transaction.commit();\n };\n const abortTransaction = async () => {\n assertInActiveTransaction(transaction);\n\n await transaction.rollback();\n };\n\n const endSession = async (): Promise<void> => {\n if (hasEnded) return;\n hasEnded = true;\n\n if (isActive(transaction)) await transaction.rollback();\n };\n\n const session = {\n get hasEnded() {\n return hasEnded;\n },\n explicit,\n defaultTransactionOptions: defaultTransactionOptions ?? {\n get snapshotEnabled() {\n return false;\n },\n },\n get transaction() {\n return transaction;\n },\n get snapshotEnabled() {\n return defaultTransactionOptions.snapshotEnabled;\n },\n endSession,\n incrementTransactionNumber: () => {},\n inTransaction: () => isActive(transaction),\n startTransaction,\n commitTransaction,\n abortTransaction,\n withTransaction: async <T = unknown>(\n fn: (session: PongoSession) => Promise<T>,\n options?: PongoTransactionOptions,\n ): Promise<T> => {\n startTransaction(options);\n\n try {\n const result = await fn(session);\n await commitTransaction();\n return result;\n } catch (error) {\n await abortTransaction();\n throw error;\n }\n },\n };\n\n return session;\n};\n","export const deepEquals = <T>(left: T, right: T): boolean => {\n if (isEquatable(left)) {\n return left.equals(right);\n }\n\n if (Array.isArray(left)) {\n return (\n Array.isArray(right) &&\n left.length === right.length &&\n left.every((val, index) => deepEquals(val, right[index]))\n );\n }\n\n if (\n typeof left !== 'object' ||\n typeof right !== 'object' ||\n left === null ||\n right === null\n ) {\n return left === right;\n }\n\n if (Array.isArray(right)) return false;\n\n const keys1 = Object.keys(left);\n const keys2 = Object.keys(right);\n\n if (\n keys1.length !== keys2.length ||\n !keys1.every((key) => keys2.includes(key))\n )\n return false;\n\n for (const key in left) {\n if (left[key] instanceof Function && right[key] instanceof Function)\n continue;\n\n const isEqual = deepEquals(left[key], right[key]);\n if (!isEqual) {\n return false;\n }\n }\n\n return true;\n};\n\nexport type Equatable<T> = { equals: (right: T) => boolean } & T;\n\nexport const isEquatable = <T>(left: T): left is Equatable<T> => {\n return (\n left &&\n typeof left === 'object' &&\n 'equals' in left &&\n typeof left['equals'] === 'function'\n );\n};\n"]}
@@ -1,14 +1,12 @@
1
1
  // src/core/collection/pongoCollection.ts
2
2
  import {
3
+ mapColumnToBigint,
3
4
  mapColumnToJSON,
4
5
  runSQLMigrations as runSQLMigrations2,
5
6
  single
6
7
  } from "@event-driven-io/dumbo";
7
8
  import { v7 as uuid2 } from "uuid";
8
9
 
9
- // src/core/collection/pongoCollectionSchema.ts
10
- import "@event-driven-io/dumbo";
11
-
12
10
  // src/core/collection/pongoCollectionSchemaComponent.ts
13
11
  import {
14
12
  schemaComponent
@@ -52,6 +50,9 @@ var isOperator = (key) => key.startsWith("$");
52
50
  var hasOperators = (value) => Object.keys(value).some(isOperator);
53
51
 
54
52
  // src/core/database/pongoDatabaseCache.ts
53
+ import {
54
+ getDatabaseMetadata
55
+ } from "@event-driven-io/dumbo";
55
56
  var PongoDatabaseCache = ({
56
57
  driver,
57
58
  typedSchema
@@ -60,7 +61,10 @@ var PongoDatabaseCache = ({
60
61
  const getDatabaseDefinition = (dbName) => Object.values(typedSchema?.dbs ?? {}).find((d) => d.name === dbName);
61
62
  return {
62
63
  getOrCreate: (createOptions) => {
63
- const dbName = createOptions.databaseName ?? (driver.getDatabaseNameOrDefault ? driver.getDatabaseNameOrDefault(createOptions) : "db:default");
64
+ const metadata = getDatabaseMetadata(driver.driverType);
65
+ const dbName = createOptions.databaseName ?? metadata?.parseDatabaseName?.(
66
+ "connectionString" in createOptions ? createOptions.connectionString : void 0
67
+ ) ?? "db:default";
64
68
  const existing = dbClients.get(dbName);
65
69
  if (existing) return existing;
66
70
  const definition = getDatabaseDefinition(createOptions.databaseName);
@@ -93,9 +97,6 @@ import {
93
97
  var objectEntries = (obj) => Object.entries(obj).map(([key, value]) => [key, value]);
94
98
 
95
99
  // src/core/typing/operations.ts
96
- import {
97
- JSONSerializer
98
- } from "@event-driven-io/dumbo";
99
100
  import { v7 as uuid } from "uuid";
100
101
 
101
102
  // src/core/errors/index.ts
@@ -141,7 +142,7 @@ var operationResult = (result, options) => {
141
142
  const { operationName, collectionName } = options;
142
143
  if (!successful)
143
144
  throw new ConcurrencyError(
144
- errorMessage ?? `${operationName} on ${collectionName} failed. Expected document state does not match current one! Result: ${JSONSerializer.serialize(result)}!`
145
+ errorMessage ?? `${operationName} on ${collectionName} failed. Expected document state does not match current one! Result: ${options.serializer.serialize(result)}!`
145
146
  );
146
147
  }
147
148
  };
@@ -257,11 +258,12 @@ import {
257
258
  runSQLMigrations
258
259
  } from "@event-driven-io/dumbo";
259
260
  var PongoDatabase = (options) => {
260
- const { databaseName, schemaComponent: schemaComponent3, pool } = options;
261
+ const { databaseName, schemaComponent: schemaComponent3, pool, serializer } = options;
261
262
  const collections = /* @__PURE__ */ new Map();
262
- const command = async (sql, options2) => (await transactionExecutorOrDefault(db, options2, pool.execute)).command(sql);
263
+ const command = async (sql, options2) => (await transactionExecutorOrDefault(db, options2, pool.execute)).command(sql, options2);
263
264
  const query = async (sql, options2) => (await transactionExecutorOrDefault(db, options2, pool.execute)).query(
264
- sql
265
+ sql,
266
+ options2
265
267
  );
266
268
  const driverType = pool.driverType;
267
269
  const db = {
@@ -270,21 +272,22 @@ var PongoDatabase = (options) => {
270
272
  connect: () => Promise.resolve(),
271
273
  close: () => pool.close(),
272
274
  collections: () => [...collections.values()],
273
- collection: (collectionName) => collections.get(collectionName) ?? pongoCollection({
275
+ collection: (collectionName, collectionOptions) => collections.get(collectionName) ?? pongoCollection({
274
276
  collectionName,
275
277
  db,
276
278
  pool,
277
279
  schemaComponent: schemaComponent3.collection(
278
280
  pongoSchema.collection(collectionName)
279
281
  ),
280
- schema: options.schema ? options.schema : {},
281
- errors: options.errors ? options.errors : {}
282
+ schema: { ...options.schema, ...collectionOptions?.schema },
283
+ serializer,
284
+ errors: { ...options.errors, ...collectionOptions?.errors }
282
285
  }),
283
286
  transaction: () => pool.transaction(),
284
287
  withTransaction: (handle) => pool.withTransaction(handle),
285
288
  schema: {
286
289
  component: schemaComponent3,
287
- migrate: () => runSQLMigrations(pool, schemaComponent3.migrations)
290
+ migrate: (options2) => runSQLMigrations(pool, schemaComponent3.migrations, options2)
288
291
  },
289
292
  sql: {
290
293
  async query(sql, options2) {
@@ -304,7 +307,7 @@ var PongoDatabase = (options) => {
304
307
  };
305
308
 
306
309
  // src/core/drivers/databaseDriver.ts
307
- var PongoDatabaseDriverRegistry = () => {
310
+ var PongoDriverRegistry = () => {
308
311
  const drivers = /* @__PURE__ */ new Map();
309
312
  const register = (driverType, driver) => {
310
313
  const entry = drivers.get(driverType);
@@ -336,7 +339,10 @@ var PongoDatabaseDriverRegistry = () => {
336
339
  }
337
340
  };
338
341
  };
339
- var pongoDatabaseDriverRegistry = globalThis.pongoDatabaseDriverRegistry = globalThis.pongoDatabaseDriverRegistry ?? PongoDatabaseDriverRegistry();
342
+ var pongoDriverRegistry = globalThis.pongoDriverRegistry = globalThis.pongoDriverRegistry ?? PongoDriverRegistry();
343
+
344
+ // src/core/pongoClient.ts
345
+ import { JSONSerializer } from "@event-driven-io/dumbo";
340
346
 
341
347
  // src/core/pongoTransaction.ts
342
348
  var pongoTransaction = (options) => {
@@ -467,6 +473,7 @@ var pongoClient = (options) => {
467
473
  driver,
468
474
  typedSchema: schema?.definition
469
475
  });
476
+ const serializer = JSONSerializer.from(options);
470
477
  const pongoClient2 = {
471
478
  driverType: driver.driverType,
472
479
  connect: async () => {
@@ -480,6 +487,7 @@ var pongoClient = (options) => {
480
487
  const db = dbClients.getOrCreate({
481
488
  ...connectionOptions,
482
489
  databaseName: dbName,
490
+ serializer,
483
491
  errors
484
492
  });
485
493
  return db;
@@ -537,24 +545,25 @@ var transactionExecutorOrDefault = async (db, options, defaultSqlExecutor) => {
537
545
  const existingTransaction = await enlistIntoTransactionIfActive(db, options);
538
546
  return existingTransaction?.execute ?? defaultSqlExecutor;
539
547
  };
540
- var columnMapping = {
541
- mapping: {
542
- ...mapColumnToJSON("data")
543
- //...mapColumnToJSON('metadata'),
544
- //...mapColumnToBigint('_version'),
545
- }
546
- };
547
548
  var pongoCollection = ({
548
549
  db,
549
550
  collectionName,
550
551
  pool,
551
552
  schemaComponent: schemaComponent3,
552
553
  schema,
553
- errors
554
+ errors,
555
+ serializer
554
556
  }) => {
555
557
  const SqlFor = schemaComponent3.sqlBuilder;
556
558
  const sqlExecutor = pool.execute;
557
- const command = async (sql, options) => (await transactionExecutorOrDefault(db, options, sqlExecutor)).command(sql);
559
+ const columnMapping = {
560
+ mapping: {
561
+ ...mapColumnToJSON("data", serializer),
562
+ //...mapColumnToJSON('metadata'),
563
+ ...mapColumnToBigint("_version")
564
+ }
565
+ };
566
+ const command = async (sql, options) => (await transactionExecutorOrDefault(db, options, sqlExecutor)).command(sql, columnMapping);
558
567
  const query = async (sql, options) => (await transactionExecutorOrDefault(db, options, sqlExecutor)).query(
559
568
  sql,
560
569
  columnMapping
@@ -571,6 +580,8 @@ var pongoCollection = ({
571
580
  }
572
581
  return createCollection(options);
573
582
  };
583
+ const upcast = schema?.versioning?.upcast ?? ((doc) => doc);
584
+ const downcast = schema?.versioning?.downcast ?? ((doc) => doc);
574
585
  const collection = {
575
586
  dbName: db.databaseName,
576
587
  collectionName,
@@ -581,9 +592,10 @@ var pongoCollection = ({
581
592
  await ensureCollectionCreated(options);
582
593
  const _id = document._id ?? uuid2();
583
594
  const _version = document._version ?? 1n;
595
+ const downcasted = downcast(document);
584
596
  const result = await command(
585
597
  SqlFor.insertOne({
586
- ...document,
598
+ ...downcasted,
587
599
  _id,
588
600
  _version
589
601
  }),
@@ -596,18 +608,23 @@ var pongoCollection = ({
596
608
  insertedId: successful ? _id : null,
597
609
  nextExpectedVersion: _version
598
610
  },
599
- { operationName: "insertOne", collectionName, errors }
611
+ { operationName: "insertOne", collectionName, serializer, errors }
600
612
  );
601
613
  },
602
614
  insertMany: async (documents, options) => {
603
615
  await ensureCollectionCreated(options);
604
- const rows = documents.map((doc) => ({
605
- ...doc,
606
- _id: doc._id ?? uuid2(),
607
- _version: doc._version ?? 1n
608
- }));
616
+ const rows = documents.map((doc) => {
617
+ const downcasted = downcast(doc);
618
+ return {
619
+ ...downcasted,
620
+ _id: doc._id ?? uuid2(),
621
+ _version: doc._version ?? 1n
622
+ };
623
+ });
609
624
  const result = await command(
610
- SqlFor.insertMany(rows),
625
+ SqlFor.insertMany(
626
+ rows
627
+ ),
611
628
  options
612
629
  );
613
630
  return operationResult(
@@ -616,7 +633,7 @@ var pongoCollection = ({
616
633
  insertedCount: result.rowCount ?? 0,
617
634
  insertedIds: result.rows.map((d) => d._id)
618
635
  },
619
- { operationName: "insertMany", collectionName, errors }
636
+ { operationName: "insertMany", collectionName, serializer, errors }
620
637
  );
621
638
  },
622
639
  updateOne: async (filter, update, options) => {
@@ -632,13 +649,14 @@ var pongoCollection = ({
632
649
  matchedCount: Number(result.rows[0]?.matched ?? 0),
633
650
  nextExpectedVersion: BigInt(result.rows[0]?.version ?? 0n)
634
651
  },
635
- { operationName: "updateOne", collectionName, errors }
652
+ { operationName: "updateOne", collectionName, serializer, errors }
636
653
  );
637
654
  },
638
655
  replaceOne: async (filter, document, options) => {
639
656
  await ensureCollectionCreated(options);
657
+ const downcasted = downcast(document);
640
658
  const result = await command(
641
- SqlFor.replaceOne(filter, document, options),
659
+ SqlFor.replaceOne(filter, downcasted, options),
642
660
  options
643
661
  );
644
662
  return operationResult(
@@ -648,7 +666,7 @@ var pongoCollection = ({
648
666
  matchedCount: Number(result.rows[0]?.matched ?? 0),
649
667
  nextExpectedVersion: BigInt(result.rows[0]?.version ?? 0n)
650
668
  },
651
- { operationName: "replaceOne", collectionName, errors }
669
+ { operationName: "replaceOne", collectionName, serializer, errors }
652
670
  );
653
671
  },
654
672
  updateMany: async (filter, update, options) => {
@@ -660,7 +678,7 @@ var pongoCollection = ({
660
678
  modifiedCount: result.rowCount ?? 0,
661
679
  matchedCount: result.rowCount ?? 0
662
680
  },
663
- { operationName: "updateMany", collectionName, errors }
681
+ { operationName: "updateMany", collectionName, serializer, errors }
664
682
  );
665
683
  },
666
684
  deleteOne: async (filter, options) => {
@@ -675,7 +693,7 @@ var pongoCollection = ({
675
693
  deletedCount: Number(result.rows[0]?.deleted ?? 0),
676
694
  matchedCount: Number(result.rows[0]?.matched ?? 0)
677
695
  },
678
- { operationName: "deleteOne", collectionName, errors }
696
+ { operationName: "deleteOne", collectionName, serializer, errors }
679
697
  );
680
698
  },
681
699
  deleteMany: async (filter, options) => {
@@ -687,13 +705,21 @@ var pongoCollection = ({
687
705
  deletedCount: result.rowCount ?? 0,
688
706
  matchedCount: result.rowCount ?? 0
689
707
  },
690
- { operationName: "deleteMany", collectionName, errors }
708
+ { operationName: "deleteMany", collectionName, serializer, errors }
691
709
  );
692
710
  },
693
711
  findOne: async (filter, options) => {
694
712
  await ensureCollectionCreated(options);
695
- const result = await query(SqlFor.findOne(filter ?? {}), options);
696
- return result.rows[0]?.data ?? null;
713
+ const result = await query(
714
+ SqlFor.findOne(filter ?? {}),
715
+ options
716
+ );
717
+ const row = result.rows[0];
718
+ if (row === void 0 || row === null) return null;
719
+ return upcast({
720
+ ...row.data,
721
+ _version: row._version
722
+ });
697
723
  },
698
724
  findOneAndDelete: async (filter, options) => {
699
725
  await ensureCollectionCreated(options);
@@ -731,7 +757,7 @@ var pongoCollection = ({
731
757
  successful: false,
732
758
  document: existing
733
759
  },
734
- { operationName: "handle", collectionName, errors }
760
+ { operationName: "handle", collectionName, serializer, errors }
735
761
  );
736
762
  }
737
763
  const result = await handle(
@@ -743,7 +769,7 @@ var pongoCollection = ({
743
769
  successful: true,
744
770
  document: existing
745
771
  },
746
- { operationName: "handle", collectionName, errors }
772
+ { operationName: "handle", collectionName, serializer, errors }
747
773
  );
748
774
  if (!existing && result) {
749
775
  const newDoc = { ...result, _id: id };
@@ -787,13 +813,20 @@ var pongoCollection = ({
787
813
  successful: true,
788
814
  document: existing
789
815
  },
790
- { operationName: "handle", collectionName, errors }
816
+ { operationName: "handle", collectionName, serializer, errors }
791
817
  );
792
818
  },
793
819
  find: async (filter, options) => {
794
820
  await ensureCollectionCreated(options);
795
- const result = await query(SqlFor.find(filter ?? {}, options));
796
- return result.rows.map((row) => row.data);
821
+ const result = await query(
822
+ SqlFor.find(filter ?? {}, options)
823
+ );
824
+ return result.rows.map(
825
+ (row) => upcast({
826
+ ...row.data,
827
+ _version: row._version
828
+ })
829
+ );
797
830
  },
798
831
  countDocuments: async (filter, options) => {
799
832
  await ensureCollectionCreated(options);
@@ -826,7 +859,7 @@ var pongoCollection = ({
826
859
  },
827
860
  schema: {
828
861
  component: schemaComponent3,
829
- migrate: () => runSQLMigrations2(pool, schemaComponent3.migrations)
862
+ migrate: (options) => runSQLMigrations2(pool, schemaComponent3.migrations, options)
830
863
  }
831
864
  };
832
865
  return collection;
@@ -861,12 +894,12 @@ export {
861
894
  toClientSchemaMetadata,
862
895
  PongoDatabaseSchemaComponent,
863
896
  PongoDatabase,
864
- PongoDatabaseDriverRegistry,
865
- pongoDatabaseDriverRegistry,
897
+ PongoDriverRegistry,
898
+ pongoDriverRegistry,
866
899
  pongoTransaction,
867
900
  pongoSession,
868
901
  pongoClient,
869
902
  deepEquals,
870
903
  isEquatable
871
904
  };
872
- //# sourceMappingURL=chunk-NCNRRYVE.js.map
905
+ //# sourceMappingURL=chunk-H637RRXS.js.map