@event-driven-io/pongo 0.17.0-beta.1 → 0.17.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-YLV7YIPZ.cjs → chunk-4BL6YWLW.cjs} +3 -7
- package/dist/chunk-4BL6YWLW.cjs.map +1 -0
- package/dist/chunk-ECQ2CKZE.cjs +330 -0
- package/dist/chunk-ECQ2CKZE.cjs.map +1 -0
- package/dist/{chunk-5LN762VW.js → chunk-EYQDS752.js} +5 -3
- package/dist/chunk-EYQDS752.js.map +1 -0
- package/dist/{chunk-DL4E3N6J.js → chunk-NCNRRYVE.js} +3 -7
- package/dist/chunk-NCNRRYVE.js.map +1 -0
- package/dist/chunk-WH26IXHN.js +10 -0
- package/dist/{chunk-7W6X4QGY.cjs → chunk-WKW4LGF6.cjs} +4 -4
- package/dist/{chunk-7W6X4QGY.cjs.map → chunk-WKW4LGF6.cjs.map} +1 -1
- package/dist/chunk-Y7LRKJLJ.js +330 -0
- package/dist/chunk-Y7LRKJLJ.js.map +1 -0
- package/dist/{chunk-3KNMMQUV.cjs → chunk-ZPWKWNK2.cjs} +20 -18
- package/dist/chunk-ZPWKWNK2.cjs.map +1 -0
- package/dist/cli.cjs +38 -21
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +29 -12
- package/dist/cli.js.map +1 -1
- package/dist/d1.cjs +54 -0
- package/dist/d1.cjs.map +1 -0
- package/dist/d1.d.cts +11 -0
- package/dist/d1.d.ts +11 -0
- package/dist/d1.js +54 -0
- package/dist/d1.js.map +1 -0
- package/dist/index-BJopB-em.d.cts +7 -0
- package/dist/index-G5DECNb_.d.ts +7 -0
- package/dist/index.cjs +3 -3
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +2 -2
- package/dist/{pg-WUYRNGST.js → pg-73DOKU64.js} +3 -3
- package/dist/pg-I267A7IL.cjs +11 -0
- package/dist/{pg-XCWP4FAM.cjs.map → pg-I267A7IL.cjs.map} +1 -1
- package/dist/pg.cjs +4 -4
- package/dist/pg.d.cts +5 -2
- package/dist/pg.d.ts +5 -2
- package/dist/pg.js +3 -3
- package/dist/{pongoCollectionSchemaComponent-BsHlVyN-.d.cts → pongoCollectionSchemaComponent-t_e9n2Wc.d.cts} +12 -8
- package/dist/{pongoCollectionSchemaComponent-BsHlVyN-.d.ts → pongoCollectionSchemaComponent-t_e9n2Wc.d.ts} +12 -8
- package/dist/shim.cjs +16 -11
- package/dist/shim.cjs.map +1 -1
- package/dist/shim.d.cts +4 -3
- package/dist/shim.d.ts +4 -3
- package/dist/shim.js +12 -7
- package/dist/shim.js.map +1 -1
- package/dist/sqlite3.cjs +16 -332
- package/dist/sqlite3.cjs.map +1 -1
- package/dist/sqlite3.d.cts +8 -7
- package/dist/sqlite3.d.ts +8 -7
- package/dist/sqlite3.js +9 -325
- package/dist/sqlite3.js.map +1 -1
- package/package.json +16 -2
- package/dist/chunk-3KNMMQUV.cjs.map +0 -1
- package/dist/chunk-5LN762VW.js.map +0 -1
- package/dist/chunk-DL4E3N6J.js.map +0 -1
- package/dist/chunk-IBJKZ6TS.js +0 -10
- package/dist/chunk-YLV7YIPZ.cjs.map +0 -1
- package/dist/pg-XCWP4FAM.cjs +0 -11
- /package/dist/{chunk-IBJKZ6TS.js.map → chunk-WH26IXHN.js.map} +0 -0
- /package/dist/{pg-WUYRNGST.js.map → pg-73DOKU64.js.map} +0 -0
|
@@ -60,7 +60,7 @@ var PongoDatabaseCache = ({
|
|
|
60
60
|
const getDatabaseDefinition = (dbName) => Object.values(_nullishCoalesce(_optionalChain([typedSchema, 'optionalAccess', _ => _.dbs]), () => ( {}))).find((d) => d.name === dbName);
|
|
61
61
|
return {
|
|
62
62
|
getOrCreate: (createOptions) => {
|
|
63
|
-
const dbName = _nullishCoalesce(createOptions.databaseName, () => ( driver.getDatabaseNameOrDefault(createOptions
|
|
63
|
+
const dbName = _nullishCoalesce(createOptions.databaseName, () => ( (driver.getDatabaseNameOrDefault ? driver.getDatabaseNameOrDefault(createOptions) : "db:default")));
|
|
64
64
|
const existing = dbClients.get(dbName);
|
|
65
65
|
if (existing) return existing;
|
|
66
66
|
const definition = getDatabaseDefinition(createOptions.databaseName);
|
|
@@ -338,9 +338,6 @@ var PongoDatabaseDriverRegistry = () => {
|
|
|
338
338
|
};
|
|
339
339
|
var pongoDatabaseDriverRegistry = globalThis.pongoDatabaseDriverRegistry = _nullishCoalesce(globalThis.pongoDatabaseDriverRegistry, () => ( PongoDatabaseDriverRegistry()));
|
|
340
340
|
|
|
341
|
-
// src/core/pongoClient.ts
|
|
342
|
-
|
|
343
|
-
|
|
344
341
|
// src/core/pongoTransaction.ts
|
|
345
342
|
var pongoTransaction = (options) => {
|
|
346
343
|
let isCommitted = false;
|
|
@@ -465,7 +462,7 @@ var pongoSession = (options) => {
|
|
|
465
462
|
|
|
466
463
|
// src/core/pongoClient.ts
|
|
467
464
|
var pongoClient = (options) => {
|
|
468
|
-
const { driver,
|
|
465
|
+
const { driver, schema, errors, ...connectionOptions } = options;
|
|
469
466
|
const dbClients = PongoDatabaseCache({
|
|
470
467
|
driver,
|
|
471
468
|
typedSchema: _optionalChain([schema, 'optionalAccess', _12 => _12.definition])
|
|
@@ -482,7 +479,6 @@ var pongoClient = (options) => {
|
|
|
482
479
|
db: (dbName) => {
|
|
483
480
|
const db = dbClients.getOrCreate({
|
|
484
481
|
...connectionOptions,
|
|
485
|
-
connectionString,
|
|
486
482
|
databaseName: dbName,
|
|
487
483
|
errors
|
|
488
484
|
});
|
|
@@ -873,4 +869,4 @@ var pongoCollection = ({
|
|
|
873
869
|
|
|
874
870
|
|
|
875
871
|
exports.transactionExecutorOrDefault = transactionExecutorOrDefault; exports.pongoCollection = pongoCollection; exports.PongoCollectionSchemaComponent = PongoCollectionSchemaComponent; exports.QueryOperators = QueryOperators; exports.OperatorMap = OperatorMap; exports.isOperator = isOperator; exports.hasOperators = hasOperators; exports.PongoDatabaseCache = PongoDatabaseCache; exports.objectEntries = objectEntries; exports.isNumber = isNumber; exports.isString = isString; exports.PongoError = PongoError; exports.ConcurrencyError = ConcurrencyError; exports.ObjectId = ObjectId; exports.DOCUMENT_EXISTS = DOCUMENT_EXISTS; exports.DOCUMENT_DOES_NOT_EXIST = DOCUMENT_DOES_NOT_EXIST; exports.NO_CONCURRENCY_CHECK = NO_CONCURRENCY_CHECK; exports.isGeneralExpectedDocumentVersion = isGeneralExpectedDocumentVersion; exports.expectedVersionValue = expectedVersionValue; exports.expectedVersion = expectedVersion; exports.operationResult = operationResult; exports.pongoSchema = pongoSchema; exports.proxyPongoDbWithSchema = proxyPongoDbWithSchema; exports.proxyClientWithSchema = proxyClientWithSchema; exports.toDbSchemaMetadata = toDbSchemaMetadata; exports.toClientSchemaMetadata = toClientSchemaMetadata; exports.PongoDatabaseSchemaComponent = PongoDatabaseSchemaComponent; exports.PongoDatabase = PongoDatabase; exports.PongoDatabaseDriverRegistry = PongoDatabaseDriverRegistry; exports.pongoDatabaseDriverRegistry = pongoDatabaseDriverRegistry; exports.pongoTransaction = pongoTransaction; exports.pongoSession = pongoSession; exports.pongoClient = pongoClient; exports.deepEquals = deepEquals; exports.isEquatable = isEquatable;
|
|
876
|
-
//# sourceMappingURL=chunk-
|
|
872
|
+
//# sourceMappingURL=chunk-4BL6YWLW.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/Pongo/Pongo/src/packages/pongo/dist/chunk-4BL6YWLW.cjs","../src/core/collection/pongoCollection.ts","../src/core/collection/pongoCollectionSchema.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/pongoTransaction.ts","../src/core/pongoSession.ts","../src/core/pongoClient.ts","../src/core/utils/deepEquals.ts"],"names":["schemaComponent","operationResult","options","pongoClient","expectedVersion"],"mappings":"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","file":"/home/runner/work/Pongo/Pongo/src/packages/pongo/dist/chunk-4BL6YWLW.cjs","sourcesContent":[null,"import {\n mapColumnToJSON,\n runSQLMigrations,\n single,\n SQL,\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 {\n deepEquals,\n expectedVersionValue,\n operationResult,\n PongoCollectionSchemaComponent,\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 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 DriverType extends DatabaseDriverType = DatabaseDriverType,\n> = {\n db: PongoDb<DriverType>;\n collectionName: string;\n pool: Dumbo<DatabaseDriverType>;\n schemaComponent: PongoCollectionSchemaComponent;\n schema?: { autoMigration?: MigrationStyle };\n errors?: { throwOnOperationFailures?: boolean };\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\nconst columnMapping = {\n mapping: {\n ...mapColumnToJSON('data'),\n //...mapColumnToJSON('metadata'),\n //...mapColumnToBigint('_version'),\n } satisfies SQLQueryResultColumnMapping,\n};\n\nexport const pongoCollection = <\n T extends PongoDocument,\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n>({\n db,\n collectionName,\n pool,\n schemaComponent,\n schema,\n errors,\n}: PongoCollectionOptions<DriverType>): PongoCollection<T> => {\n const SqlFor = schemaComponent.sqlBuilder;\n const sqlExecutor = pool.execute;\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);\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 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\n const result = await command(\n SqlFor.insertOne({\n ...document,\n _id,\n _version,\n } as OptionalUnlessRequiredIdAndVersion<T>),\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, 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 ...doc,\n _id: (doc._id as string | undefined | null) ?? uuid(),\n _version: doc._version ?? 1n,\n }));\n\n const result = await command(\n SqlFor.insertMany(rows as OptionalUnlessRequiredIdAndVersion<T>[]),\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, 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, 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 result = await command<UpdateSqlResult>(\n SqlFor.replaceOne(filter, document, 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, 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, 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, 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, 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(SqlFor.findOne(filter ?? {}), options);\n return (result.rows[0]?.data ?? null) as WithIdAndVersion<T> | null;\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, 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, 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, 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(SqlFor.find(filter ?? {}, options));\n return result.rows.map((row) => row.data as WithIdAndVersion<T>);\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: () => runSQLMigrations(pool, schemaComponent.migrations),\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 { SQL } from '@event-driven-io/dumbo';\nimport type {\n DeleteOneOptions,\n FindOptions,\n OptionalUnlessRequiredIdAndVersion,\n PongoFilter,\n PongoUpdate,\n ReplaceOneOptions,\n UpdateOneOptions,\n WithoutId,\n} from '../typing';\n\nexport type PongoCollectionSQLBuilder = {\n createCollection: () => SQL;\n insertOne: <T>(document: OptionalUnlessRequiredIdAndVersion<T>) => SQL;\n insertMany: <T>(documents: OptionalUnlessRequiredIdAndVersion<T>[]) => SQL;\n updateOne: <T>(\n filter: PongoFilter<T> | SQL,\n update: PongoUpdate<T> | SQL,\n options?: UpdateOneOptions,\n ) => SQL;\n replaceOne: <T>(\n filter: PongoFilter<T> | SQL,\n document: WithoutId<T>,\n options?: ReplaceOneOptions,\n ) => SQL;\n updateMany: <T>(\n filter: PongoFilter<T> | SQL,\n update: PongoUpdate<T> | SQL,\n ) => SQL;\n deleteOne: <T>(\n filter: PongoFilter<T> | SQL,\n options?: DeleteOneOptions,\n ) => SQL;\n deleteMany: <T>(filter: PongoFilter<T> | SQL) => SQL;\n findOne: <T>(filter: PongoFilter<T> | SQL) => SQL;\n find: <T>(filter: PongoFilter<T> | SQL, options?: FindOptions) => SQL;\n countDocuments: <T>(filter: PongoFilter<T> | SQL) => SQL;\n rename: (newName: string) => SQL;\n drop: () => SQL;\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 type {\n DatabaseDriverType,\n MigrationStyle,\n} from '@event-driven-io/dumbo';\nimport type {\n PongoDatabaseDriver,\n PongoDatabaseFactoryOptions,\n} 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: PongoDatabaseDriver<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 schema?: {\n autoMigration?: MigrationStyle;\n };\n },\n ): Database => {\n const dbName =\n createOptions.databaseName ??\n (driver.getDatabaseNameOrDefault\n ? driver.getDatabaseNameOrDefault(createOptions)\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 {\n PongoCollectionSchemaComponent,\n type PongoCollectionSQLBuilder,\n} 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 {\n type AnyConnection,\n type DatabaseDriverType,\n type DatabaseTransaction,\n JSONSerializer,\n type MigrationStyle,\n type QueryResult,\n type QueryResultRow,\n type SQL,\n type SQLExecutor,\n type 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 {\n AnyPongoDatabaseDriver,\n ExtractPongoDatabaseDriverOptions,\n} 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 AnyPongoDatabaseDriver = AnyPongoDatabaseDriver,\n TypedClientSchema extends PongoClientSchema = PongoClientSchema,\n> =\n ExtractPongoDatabaseDriverOptions<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 } & 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 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>(name: string): PongoCollection<T>;\n collections(): ReadonlyArray<PongoCollection<PongoDocument>>;\n readonly schema: Readonly<{\n component: PongoDatabaseSchemaComponent<DriverType>;\n migrate(): Promise<void>;\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 AnyPongoDb = PongoDb<DatabaseDriverType>;\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(): Promise<void>;\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<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 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: ${JSONSerializer.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 {\n runSQLMigrations,\n SQL,\n type DatabaseDriverType,\n type Dumbo,\n type MigrationStyle,\n type QueryResult,\n type QueryResultRow,\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 {\n type AnyPongoDb,\n type CollectionOperationOptions,\n type Document,\n type PongoCollection,\n type PongoDb,\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 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 } = 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,\n ) =>\n (\n await transactionExecutorOrDefault(db, options, pool.execute)\n ).command<Result>(sql);\n\n const query = async <T extends QueryResultRow>(\n sql: SQL,\n options?: CollectionOperationOptions,\n ) =>\n (await transactionExecutorOrDefault(db, options, pool.execute)).query<T>(\n sql,\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>(collectionName: string) =>\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 ? options.schema : {},\n errors: options.errors ? options.errors : {},\n }),\n transaction: () => pool.transaction(),\n withTransaction: (handle) => pool.withTransaction(handle),\n\n schema: {\n component: schemaComponent,\n migrate: () => runSQLMigrations(pool, schemaComponent.migrations),\n },\n\n sql: {\n async query<Result extends QueryResultRow = QueryResultRow>(\n sql: SQL,\n options?: CollectionOperationOptions,\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,\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 MigrationStyle,\n} from '@event-driven-io/dumbo';\nimport type { PongoCollectionSchema, PongoDbSchema } from '../schema';\nimport type { AnyPongoDb, PongoDb } from '../typing';\n\nexport interface PongoDatabaseDriverOptions<ConnectionOptions = unknown> {\n connectionOptions?: ConnectionOptions | undefined;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyPongoDatabaseDriverOptions = PongoDatabaseDriverOptions<any>;\n\nexport type PongoDatabaseFactoryOptions<\n CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<\n string,\n PongoCollectionSchema\n >,\n DriverOptions extends\n AnyPongoDatabaseDriverOptions = AnyPongoDatabaseDriverOptions,\n> = {\n databaseName?: string | undefined;\n schema?:\n | {\n autoMigration?: MigrationStyle;\n definition?: PongoDbSchema<CollectionsSchema>;\n }\n | undefined;\n errors?: { throwOnOperationFailures?: boolean } | undefined;\n} & DriverOptions;\n\nexport type DatabaseDriverOptionsWithDatabaseName = {\n databaseName?: string | undefined;\n};\n\nexport type DatabaseDriverOptionsWithConnectionString = {\n connectionString?: string | undefined;\n};\n\nexport interface PongoDatabaseDriver<\n Database extends AnyPongoDb = AnyPongoDb,\n DriverOptions extends\n AnyPongoDatabaseDriverOptions = AnyPongoDatabaseDriverOptions,\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 getDatabaseNameOrDefault?<\n CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<\n string,\n PongoCollectionSchema\n >,\n >(\n options: PongoDatabaseFactoryOptions<CollectionsSchema, DriverOptions>,\n ): string;\n defaultConnectionString: string;\n}\n\nexport type AnyPongoDatabaseDriver = PongoDatabaseDriver<\n AnyPongoDb,\n AnyPongoDatabaseDriverOptions\n>;\n\nexport type ExtractPongoDatabaseDriverOptions<DatabaseDriver> =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n DatabaseDriver extends PongoDatabaseDriver<any, infer O> ? O : never;\n\nexport type ExtractPongoDatabaseTypeFromDriver<DatabaseDriver> =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n DatabaseDriver extends PongoDatabaseDriver<infer D, any> ? D : never;\n\nexport const PongoDatabaseDriverRegistry = () => {\n const drivers = new Map<\n DatabaseDriverType,\n PongoDatabaseDriver | (() => Promise<PongoDatabaseDriver>)\n >();\n\n const register = <Database extends AnyPongoDb = AnyPongoDb>(\n driverType: Database['driverType'],\n driver:\n | PongoDatabaseDriver<Database>\n | (() => Promise<PongoDatabaseDriver<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 <\n Driver extends AnyPongoDatabaseDriver = AnyPongoDatabaseDriver,\n >(\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 = <\n Driver extends AnyPongoDatabaseDriver = AnyPongoDatabaseDriver,\n >(\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 pongoDatabaseDriverRegistry: ReturnType<\n typeof PongoDatabaseDriverRegistry\n >;\n}\n\nexport const pongoDatabaseDriverRegistry =\n (globalThis.pongoDatabaseDriverRegistry =\n globalThis.pongoDatabaseDriverRegistry ?? PongoDatabaseDriverRegistry());\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","import { PongoDatabaseCache } from './database';\nimport type {\n AnyPongoDatabaseDriver,\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 AnyPongoDatabaseDriver,\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 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 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","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"]}
|
|
@@ -0,0 +1,330 @@
|
|
|
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
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunk4BL6YWLWcjs = require('./chunk-4BL6YWLW.cjs');
|
|
8
|
+
|
|
9
|
+
// src/storage/sqlite/core/sqlBuilder/index.ts
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
var _dumbo = require('@event-driven-io/dumbo');
|
|
16
|
+
|
|
17
|
+
// src/storage/sqlite/core/sqlBuilder/filter/index.ts
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
// src/storage/sqlite/core/sqlBuilder/filter/queryOperators.ts
|
|
21
|
+
|
|
22
|
+
var handleOperator = (path, operator, value) => {
|
|
23
|
+
if (path === "_id" || path === "_version") {
|
|
24
|
+
return handleMetadataOperator(path, operator, value);
|
|
25
|
+
}
|
|
26
|
+
switch (operator) {
|
|
27
|
+
case "$eq": {
|
|
28
|
+
const jsonPath = buildJsonPath(path);
|
|
29
|
+
return _dumbo.SQL`(
|
|
30
|
+
json_extract(data, '${_dumbo.SQL.plain(jsonPath)}') = ${value}
|
|
31
|
+
OR (
|
|
32
|
+
json_type(data, '${_dumbo.SQL.plain(jsonPath)}') = 'array'
|
|
33
|
+
AND EXISTS(
|
|
34
|
+
SELECT 1 FROM json_each(data, '${_dumbo.SQL.plain(jsonPath)}')
|
|
35
|
+
WHERE json_each.value = ${value}
|
|
36
|
+
)
|
|
37
|
+
)
|
|
38
|
+
)`;
|
|
39
|
+
}
|
|
40
|
+
case "$gt":
|
|
41
|
+
case "$gte":
|
|
42
|
+
case "$lt":
|
|
43
|
+
case "$lte":
|
|
44
|
+
case "$ne": {
|
|
45
|
+
const jsonPath = buildJsonPath(path);
|
|
46
|
+
return _dumbo.SQL`json_extract(data, '${_dumbo.SQL.plain(jsonPath)}') ${_dumbo.SQL.plain(_chunk4BL6YWLWcjs.OperatorMap[operator])} ${value}`;
|
|
47
|
+
}
|
|
48
|
+
case "$in": {
|
|
49
|
+
const jsonPath = buildJsonPath(path);
|
|
50
|
+
const values = value;
|
|
51
|
+
const inClause = _dumbo.SQL.merge(
|
|
52
|
+
values.map((v) => _dumbo.SQL`${v}`),
|
|
53
|
+
", "
|
|
54
|
+
);
|
|
55
|
+
return _dumbo.SQL`json_extract(data, '${_dumbo.SQL.plain(jsonPath)}') IN (${inClause})`;
|
|
56
|
+
}
|
|
57
|
+
case "$nin": {
|
|
58
|
+
const jsonPath = buildJsonPath(path);
|
|
59
|
+
const values = value;
|
|
60
|
+
const inClause = _dumbo.SQL.merge(
|
|
61
|
+
values.map((v) => _dumbo.SQL`${v}`),
|
|
62
|
+
", "
|
|
63
|
+
);
|
|
64
|
+
return _dumbo.SQL`json_extract(data, '${_dumbo.SQL.plain(jsonPath)}') NOT IN (${inClause})`;
|
|
65
|
+
}
|
|
66
|
+
case "$elemMatch": {
|
|
67
|
+
const subConditions = _chunk4BL6YWLWcjs.objectEntries.call(void 0, value).map(([subKey, subValue]) => {
|
|
68
|
+
const serializedValue = _dumbo.JSONSerializer.serialize(subValue);
|
|
69
|
+
return `json_extract(value, '$.${subKey}') = json('${serializedValue}')`;
|
|
70
|
+
}).join(" AND ");
|
|
71
|
+
const jsonPath = buildJsonPath(path);
|
|
72
|
+
return _dumbo.SQL`EXISTS(SELECT 1 FROM json_each(data, '${_dumbo.SQL.plain(jsonPath)}') WHERE ${_dumbo.SQL.plain(subConditions)})`;
|
|
73
|
+
}
|
|
74
|
+
case "$all": {
|
|
75
|
+
const jsonPath = buildJsonPath(path);
|
|
76
|
+
const serializedValue = _dumbo.JSONSerializer.serialize(value);
|
|
77
|
+
return _dumbo.SQL`(SELECT COUNT(*) FROM json_each(json(${serializedValue})) WHERE json_each.value NOT IN (SELECT value FROM json_each(data, '${_dumbo.SQL.plain(jsonPath)}'))) = 0`;
|
|
78
|
+
}
|
|
79
|
+
case "$size": {
|
|
80
|
+
const jsonPath = buildJsonPath(path);
|
|
81
|
+
return _dumbo.SQL`json_array_length(json_extract(data, '${_dumbo.SQL.plain(jsonPath)}')) = ${value}`;
|
|
82
|
+
}
|
|
83
|
+
default:
|
|
84
|
+
throw new Error(`Unsupported operator: ${operator}`);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
var handleMetadataOperator = (fieldName, operator, value) => {
|
|
88
|
+
switch (operator) {
|
|
89
|
+
case "$eq":
|
|
90
|
+
return _dumbo.SQL`${_dumbo.SQL.plain(fieldName)} = ${value}`;
|
|
91
|
+
case "$gt":
|
|
92
|
+
case "$gte":
|
|
93
|
+
case "$lt":
|
|
94
|
+
case "$lte":
|
|
95
|
+
case "$ne":
|
|
96
|
+
return _dumbo.SQL`${_dumbo.SQL.plain(fieldName)} ${_dumbo.SQL.plain(_chunk4BL6YWLWcjs.OperatorMap[operator])} ${value}`;
|
|
97
|
+
case "$in": {
|
|
98
|
+
const values = value;
|
|
99
|
+
const inClause = _dumbo.SQL.merge(
|
|
100
|
+
values.map((v) => _dumbo.SQL`${v}`),
|
|
101
|
+
", "
|
|
102
|
+
);
|
|
103
|
+
return _dumbo.SQL`${_dumbo.SQL.plain(fieldName)} IN (${inClause})`;
|
|
104
|
+
}
|
|
105
|
+
case "$nin": {
|
|
106
|
+
const values = value;
|
|
107
|
+
const inClause = _dumbo.SQL.merge(
|
|
108
|
+
values.map((v) => _dumbo.SQL`${v}`),
|
|
109
|
+
", "
|
|
110
|
+
);
|
|
111
|
+
return _dumbo.SQL`${_dumbo.SQL.plain(fieldName)} NOT IN (${inClause})`;
|
|
112
|
+
}
|
|
113
|
+
default:
|
|
114
|
+
throw new Error(`Unsupported operator: ${operator}`);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
var buildJsonPath = (path) => {
|
|
118
|
+
return `$.${path}`;
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
// src/storage/sqlite/core/sqlBuilder/filter/index.ts
|
|
122
|
+
var AND = "AND";
|
|
123
|
+
var constructFilterQuery = (filter) => _dumbo.SQL.merge(
|
|
124
|
+
Object.entries(filter).map(
|
|
125
|
+
([key, value]) => isRecord(value) ? constructComplexFilterQuery(key, value) : handleOperator(key, "$eq", value)
|
|
126
|
+
),
|
|
127
|
+
` ${AND} `
|
|
128
|
+
);
|
|
129
|
+
var constructComplexFilterQuery = (key, value) => {
|
|
130
|
+
const isEquality = !_chunk4BL6YWLWcjs.hasOperators.call(void 0, value);
|
|
131
|
+
return _dumbo.SQL.merge(
|
|
132
|
+
_chunk4BL6YWLWcjs.objectEntries.call(void 0, value).map(
|
|
133
|
+
([nestedKey, val]) => isEquality ? handleOperator(`${key}.${nestedKey}`, _chunk4BL6YWLWcjs.QueryOperators.$eq, val) : handleOperator(key, nestedKey, val)
|
|
134
|
+
),
|
|
135
|
+
` ${AND} `
|
|
136
|
+
);
|
|
137
|
+
};
|
|
138
|
+
var isRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
139
|
+
|
|
140
|
+
// src/storage/sqlite/core/sqlBuilder/update/index.ts
|
|
141
|
+
|
|
142
|
+
var buildUpdateQuery = (update) => _chunk4BL6YWLWcjs.objectEntries.call(void 0, update).reduce(
|
|
143
|
+
(currentUpdateQuery, [op, value]) => {
|
|
144
|
+
switch (op) {
|
|
145
|
+
case "$set":
|
|
146
|
+
return buildSetQuery(value, currentUpdateQuery);
|
|
147
|
+
case "$unset":
|
|
148
|
+
return buildUnsetQuery(value, currentUpdateQuery);
|
|
149
|
+
case "$inc":
|
|
150
|
+
return buildIncQuery(value, currentUpdateQuery);
|
|
151
|
+
case "$push":
|
|
152
|
+
return buildPushQuery(value, currentUpdateQuery);
|
|
153
|
+
default:
|
|
154
|
+
return currentUpdateQuery;
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
_dumbo.SQL`data`
|
|
158
|
+
);
|
|
159
|
+
var buildSetQuery = (set, currentUpdateQuery) => _dumbo.SQL`json_patch(${currentUpdateQuery}, ${_dumbo.JSONSerializer.serialize(set)})`;
|
|
160
|
+
var buildUnsetQuery = (unset, currentUpdateQuery) => {
|
|
161
|
+
const keys = Object.keys(unset);
|
|
162
|
+
let query = currentUpdateQuery;
|
|
163
|
+
for (const key of keys) {
|
|
164
|
+
query = _dumbo.SQL`json_remove(${query}, '$.${_dumbo.SQL.plain(key)}')`;
|
|
165
|
+
}
|
|
166
|
+
return query;
|
|
167
|
+
};
|
|
168
|
+
var buildIncQuery = (inc, currentUpdateQuery) => {
|
|
169
|
+
for (const [key, value] of Object.entries(inc)) {
|
|
170
|
+
currentUpdateQuery = typeof value === "bigint" ? _dumbo.SQL`json_set(${currentUpdateQuery}, '$.${_dumbo.SQL.plain(key)}', CAST((COALESCE(json_extract(${currentUpdateQuery}, '$.${_dumbo.SQL.plain(key)}'), 0) + ${value}) AS TEXT))` : _dumbo.SQL`json_set(${currentUpdateQuery}, '$.${_dumbo.SQL.plain(key)}', COALESCE(json_extract(${currentUpdateQuery}, '$.${_dumbo.SQL.plain(key)}'), 0) + ${value})`;
|
|
171
|
+
}
|
|
172
|
+
return currentUpdateQuery;
|
|
173
|
+
};
|
|
174
|
+
var buildPushQuery = (push, currentUpdateQuery) => {
|
|
175
|
+
for (const [key, value] of Object.entries(push)) {
|
|
176
|
+
const serializedValue = _dumbo.JSONSerializer.serialize(value);
|
|
177
|
+
currentUpdateQuery = _dumbo.SQL`json_set(${currentUpdateQuery}, '$.${_dumbo.SQL.plain(key)}', CASE
|
|
178
|
+
WHEN json_type(json_extract(${currentUpdateQuery}, '$.${_dumbo.SQL.plain(key)}')) = 'array'
|
|
179
|
+
THEN json_insert(json_extract(${currentUpdateQuery}, '$.${_dumbo.SQL.plain(key)}'), '$[#]', json(${serializedValue}))
|
|
180
|
+
ELSE json_array(json(${serializedValue}))
|
|
181
|
+
END)`;
|
|
182
|
+
}
|
|
183
|
+
return currentUpdateQuery;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
// src/storage/sqlite/core/sqlBuilder/index.ts
|
|
187
|
+
var createCollection = (collectionName) => _dumbo.SQL`
|
|
188
|
+
CREATE TABLE IF NOT EXISTS ${_dumbo.SQL.identifier(collectionName)} (
|
|
189
|
+
_id TEXT PRIMARY KEY,
|
|
190
|
+
data JSON NOT NULL,
|
|
191
|
+
metadata JSON NOT NULL DEFAULT '{}',
|
|
192
|
+
_version INTEGER NOT NULL DEFAULT 1,
|
|
193
|
+
_partition TEXT NOT NULL DEFAULT 'png_global',
|
|
194
|
+
_archived INTEGER NOT NULL DEFAULT 0,
|
|
195
|
+
_created TEXT NOT NULL DEFAULT (datetime('now')),
|
|
196
|
+
_updated TEXT NOT NULL DEFAULT (datetime('now'))
|
|
197
|
+
)`;
|
|
198
|
+
var pongoCollectionSQLiteMigrations = (collectionName) => [
|
|
199
|
+
_dumbo.sqlMigration.call(void 0, `pongoCollection:${collectionName}:001:createtable`, [
|
|
200
|
+
createCollection(collectionName)
|
|
201
|
+
])
|
|
202
|
+
];
|
|
203
|
+
var sqliteSQLBuilder = (collectionName) => ({
|
|
204
|
+
createCollection: () => createCollection(collectionName),
|
|
205
|
+
insertOne: (document) => {
|
|
206
|
+
const serialized = document;
|
|
207
|
+
const id = document._id;
|
|
208
|
+
const version = _nullishCoalesce(document._version, () => ( 1n));
|
|
209
|
+
return _dumbo.SQL`
|
|
210
|
+
INSERT OR IGNORE INTO ${_dumbo.SQL.identifier(collectionName)} (_id, data, _version)
|
|
211
|
+
VALUES (${id}, ${serialized}, ${version})
|
|
212
|
+
RETURNING _id;`;
|
|
213
|
+
},
|
|
214
|
+
insertMany: (documents) => {
|
|
215
|
+
const values = _dumbo.SQL.merge(
|
|
216
|
+
documents.map(
|
|
217
|
+
(doc) => _dumbo.SQL`(${doc._id}, ${_dumbo.JSONSerializer.serialize(doc)}, ${_nullishCoalesce(doc._version, () => ( 1n))})`
|
|
218
|
+
),
|
|
219
|
+
","
|
|
220
|
+
);
|
|
221
|
+
return _dumbo.SQL`
|
|
222
|
+
INSERT OR IGNORE INTO ${_dumbo.SQL.identifier(collectionName)} (_id, data, _version) VALUES ${values}
|
|
223
|
+
RETURNING _id;`;
|
|
224
|
+
},
|
|
225
|
+
updateOne: (filter, update, options) => {
|
|
226
|
+
const expectedVersion = _chunk4BL6YWLWcjs.expectedVersionValue.call(void 0, _optionalChain([options, 'optionalAccess', _ => _.expectedVersion]));
|
|
227
|
+
const expectedVersionCheck = expectedVersion != null ? _dumbo.SQL`AND _version = ${expectedVersion}` : _dumbo.SQL``;
|
|
228
|
+
const filterQuery = _dumbo.isSQL.call(void 0, filter) ? filter : constructFilterQuery(filter);
|
|
229
|
+
const updateQuery = _dumbo.isSQL.call(void 0, update) ? update : buildUpdateQuery(update);
|
|
230
|
+
return _dumbo.SQL`
|
|
231
|
+
UPDATE ${_dumbo.SQL.identifier(collectionName)}
|
|
232
|
+
SET
|
|
233
|
+
data = json_patch(${updateQuery}, json_object('_id', _id, '_version', cast(_version + 1 as TEXT))),
|
|
234
|
+
_version = _version + 1,
|
|
235
|
+
_updated = datetime('now')
|
|
236
|
+
WHERE _id = (
|
|
237
|
+
SELECT _id FROM ${_dumbo.SQL.identifier(collectionName)}
|
|
238
|
+
${where(filterQuery)}
|
|
239
|
+
LIMIT 1
|
|
240
|
+
) ${expectedVersionCheck}
|
|
241
|
+
RETURNING
|
|
242
|
+
_id,
|
|
243
|
+
cast(_version as TEXT) as version,
|
|
244
|
+
1 as matched,
|
|
245
|
+
1 as modified;`;
|
|
246
|
+
},
|
|
247
|
+
replaceOne: (filter, document, options) => {
|
|
248
|
+
const expectedVersion = _chunk4BL6YWLWcjs.expectedVersionValue.call(void 0, _optionalChain([options, 'optionalAccess', _2 => _2.expectedVersion]));
|
|
249
|
+
const expectedVersionCheck = expectedVersion != null ? _dumbo.SQL`AND _version = ${expectedVersion}` : _dumbo.SQL``;
|
|
250
|
+
const filterQuery = _dumbo.isSQL.call(void 0, filter) ? filter : constructFilterQuery(filter);
|
|
251
|
+
return _dumbo.SQL`
|
|
252
|
+
UPDATE ${_dumbo.SQL.identifier(collectionName)}
|
|
253
|
+
SET
|
|
254
|
+
data = json_patch(${_dumbo.JSONSerializer.serialize(document)}, json_object('_id', _id, '_version', cast(_version + 1 as TEXT))),
|
|
255
|
+
_version = _version + 1,
|
|
256
|
+
_updated = datetime('now')
|
|
257
|
+
WHERE _id = (
|
|
258
|
+
SELECT _id FROM ${_dumbo.SQL.identifier(collectionName)}
|
|
259
|
+
${where(filterQuery)}
|
|
260
|
+
LIMIT 1
|
|
261
|
+
) ${expectedVersionCheck}
|
|
262
|
+
RETURNING
|
|
263
|
+
_id,
|
|
264
|
+
cast(_version as TEXT) AS version,
|
|
265
|
+
1 AS matched,
|
|
266
|
+
1 AS modified;`;
|
|
267
|
+
},
|
|
268
|
+
updateMany: (filter, update) => {
|
|
269
|
+
const filterQuery = _dumbo.isSQL.call(void 0, filter) ? filter : constructFilterQuery(filter);
|
|
270
|
+
const updateQuery = _dumbo.isSQL.call(void 0, update) ? update : buildUpdateQuery(update);
|
|
271
|
+
return _dumbo.SQL`
|
|
272
|
+
UPDATE ${_dumbo.SQL.identifier(collectionName)}
|
|
273
|
+
SET
|
|
274
|
+
data = json_patch(${updateQuery}, json_object('_version', cast(_version + 1 as TEXT))),
|
|
275
|
+
_version = _version + 1,
|
|
276
|
+
_updated = datetime('now')
|
|
277
|
+
${where(filterQuery)}
|
|
278
|
+
RETURNING _id;`;
|
|
279
|
+
},
|
|
280
|
+
deleteOne: (filter, options) => {
|
|
281
|
+
const expectedVersion = _chunk4BL6YWLWcjs.expectedVersionValue.call(void 0, _optionalChain([options, 'optionalAccess', _3 => _3.expectedVersion]));
|
|
282
|
+
const expectedVersionCheck = expectedVersion != null ? _dumbo.SQL`AND _version = ${expectedVersion}` : _dumbo.SQL``;
|
|
283
|
+
const filterQuery = _dumbo.isSQL.call(void 0, filter) ? filter : constructFilterQuery(filter);
|
|
284
|
+
return _dumbo.SQL`
|
|
285
|
+
DELETE FROM ${_dumbo.SQL.identifier(collectionName)}
|
|
286
|
+
WHERE _id = (
|
|
287
|
+
SELECT _id FROM ${_dumbo.SQL.identifier(collectionName)}
|
|
288
|
+
${where(filterQuery)}
|
|
289
|
+
LIMIT 1
|
|
290
|
+
) ${expectedVersionCheck}
|
|
291
|
+
RETURNING
|
|
292
|
+
_id,
|
|
293
|
+
1 AS matched,
|
|
294
|
+
1 AS deleted;`;
|
|
295
|
+
},
|
|
296
|
+
deleteMany: (filter) => {
|
|
297
|
+
const filterQuery = _dumbo.isSQL.call(void 0, filter) ? filter : constructFilterQuery(filter);
|
|
298
|
+
return _dumbo.SQL`DELETE FROM ${_dumbo.SQL.identifier(collectionName)} ${where(filterQuery)} RETURNING _id`;
|
|
299
|
+
},
|
|
300
|
+
findOne: (filter) => {
|
|
301
|
+
const filterQuery = _dumbo.isSQL.call(void 0, filter) ? filter : constructFilterQuery(filter);
|
|
302
|
+
return _dumbo.SQL`SELECT data FROM ${_dumbo.SQL.identifier(collectionName)} ${where(filterQuery)} LIMIT 1;`;
|
|
303
|
+
},
|
|
304
|
+
find: (filter, options) => {
|
|
305
|
+
const filterQuery = _dumbo.isSQL.call(void 0, filter) ? filter : constructFilterQuery(filter);
|
|
306
|
+
const query = [];
|
|
307
|
+
query.push(_dumbo.SQL`SELECT data FROM ${_dumbo.SQL.identifier(collectionName)}`);
|
|
308
|
+
query.push(where(filterQuery));
|
|
309
|
+
if (_optionalChain([options, 'optionalAccess', _4 => _4.limit])) {
|
|
310
|
+
query.push(_dumbo.SQL`LIMIT ${options.limit}`);
|
|
311
|
+
}
|
|
312
|
+
if (_optionalChain([options, 'optionalAccess', _5 => _5.skip])) {
|
|
313
|
+
query.push(_dumbo.SQL`OFFSET ${options.skip}`);
|
|
314
|
+
}
|
|
315
|
+
return _dumbo.SQL.merge([...query, _dumbo.SQL`;`]);
|
|
316
|
+
},
|
|
317
|
+
countDocuments: (filter) => {
|
|
318
|
+
const filterQuery = _dumbo.SQL.check.isSQL(filter) ? filter : constructFilterQuery(filter);
|
|
319
|
+
return _dumbo.SQL`SELECT COUNT(1) as count FROM ${_dumbo.SQL.identifier(collectionName)} ${where(filterQuery)};`;
|
|
320
|
+
},
|
|
321
|
+
rename: (newName) => _dumbo.SQL`ALTER TABLE ${_dumbo.SQL.identifier(collectionName)} RENAME TO ${_dumbo.SQL.identifier(newName)};`,
|
|
322
|
+
drop: (targetName = collectionName) => _dumbo.SQL`DROP TABLE IF EXISTS ${_dumbo.SQL.identifier(targetName)}`
|
|
323
|
+
});
|
|
324
|
+
var where = (filterQuery) => _dumbo.SQL.check.isEmpty(filterQuery) ? _dumbo.SQL.EMPTY : _dumbo.SQL.merge([_dumbo.SQL`WHERE `, filterQuery]);
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
exports.pongoCollectionSQLiteMigrations = pongoCollectionSQLiteMigrations; exports.sqliteSQLBuilder = sqliteSQLBuilder;
|
|
330
|
+
//# sourceMappingURL=chunk-ECQ2CKZE.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/Pongo/Pongo/src/packages/pongo/dist/chunk-ECQ2CKZE.cjs","../src/storage/sqlite/core/sqlBuilder/index.ts","../src/storage/sqlite/core/sqlBuilder/filter/index.ts","../src/storage/sqlite/core/sqlBuilder/filter/queryOperators.ts","../src/storage/sqlite/core/sqlBuilder/update/index.ts"],"names":["SQL"],"mappings":"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","file":"/home/runner/work/Pongo/Pongo/src/packages/pongo/dist/chunk-ECQ2CKZE.cjs","sourcesContent":[null,"import {\n isSQL,\n JSONSerializer,\n SQL,\n sqlMigration,\n} 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 JSON NOT NULL,\n metadata JSON NOT NULL DEFAULT '{}',\n _version INTEGER NOT NULL DEFAULT 1,\n _partition TEXT NOT NULL DEFAULT 'png_global',\n _archived INTEGER NOT NULL DEFAULT 0,\n _created TEXT NOT NULL DEFAULT (datetime('now')),\n _updated TEXT NOT NULL DEFAULT (datetime('now'))\n )`;\n\nexport const pongoCollectionSQLiteMigrations = (collectionName: string) => [\n sqlMigration(`pongoCollection:${collectionName}:001:createtable`, [\n createCollection(collectionName),\n ]),\n];\n\nexport const sqliteSQLBuilder = (\n collectionName: string,\n): PongoCollectionSQLBuilder => ({\n createCollection: (): SQL => createCollection(collectionName),\n insertOne: <T>(document: OptionalUnlessRequiredIdAndVersion<T>): SQL => {\n const serialized = document;\n const id = document._id;\n const version = document._version ?? 1n;\n\n return SQL`\n INSERT OR IGNORE INTO ${SQL.identifier(collectionName)} (_id, data, _version)\n VALUES (${id}, ${serialized}, ${version})\n RETURNING _id;`;\n },\n insertMany: <T>(documents: OptionalUnlessRequiredIdAndVersion<T>[]): SQL => {\n const values = SQL.merge(\n documents.map(\n (doc) =>\n SQL`(${doc._id}, ${JSONSerializer.serialize(doc)}, ${doc._version ?? 1n})`,\n ),\n ',',\n );\n\n return SQL`\n INSERT OR IGNORE INTO ${SQL.identifier(collectionName)} (_id, data, _version) VALUES ${values}\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 expectedVersionCheck =\n expectedVersion != null ? SQL`AND _version = ${expectedVersion}` : SQL``;\n\n const filterQuery = isSQL(filter) ? filter : constructFilterQuery(filter);\n const updateQuery = isSQL(update) ? update : buildUpdateQuery(update);\n\n return SQL`\n UPDATE ${SQL.identifier(collectionName)}\n SET\n data = json_patch(${updateQuery}, json_object('_id', _id, '_version', cast(_version + 1 as TEXT))),\n _version = _version + 1,\n _updated = datetime('now')\n WHERE _id = (\n SELECT _id FROM ${SQL.identifier(collectionName)}\n ${where(filterQuery)}\n LIMIT 1\n ) ${expectedVersionCheck}\n RETURNING\n _id,\n cast(_version as TEXT) as version,\n 1 as matched,\n 1 as modified;`;\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 expectedVersionCheck =\n expectedVersion != null ? SQL`AND _version = ${expectedVersion}` : SQL``;\n\n const filterQuery = isSQL(filter) ? filter : constructFilterQuery(filter);\n\n return SQL`\n UPDATE ${SQL.identifier(collectionName)}\n SET\n data = json_patch(${JSONSerializer.serialize(document)}, json_object('_id', _id, '_version', cast(_version + 1 as TEXT))),\n _version = _version + 1,\n _updated = datetime('now')\n WHERE _id = (\n SELECT _id FROM ${SQL.identifier(collectionName)}\n ${where(filterQuery)}\n LIMIT 1\n ) ${expectedVersionCheck}\n RETURNING\n _id,\n cast(_version as TEXT) AS version,\n 1 AS matched,\n 1 AS modified;`;\n },\n updateMany: <T>(\n filter: PongoFilter<T> | SQL,\n update: PongoUpdate<T> | SQL,\n ): SQL => {\n const filterQuery = isSQL(filter) ? filter : constructFilterQuery(filter);\n const updateQuery = isSQL(update) ? update : buildUpdateQuery(update);\n\n return SQL`\n UPDATE ${SQL.identifier(collectionName)}\n SET\n data = json_patch(${updateQuery}, json_object('_version', cast(_version + 1 as TEXT))),\n _version = _version + 1,\n _updated = datetime('now')\n ${where(filterQuery)}\n RETURNING _id;`;\n },\n deleteOne: <T>(\n filter: PongoFilter<T> | SQL,\n options?: DeleteOneOptions,\n ): SQL => {\n const expectedVersion = expectedVersionValue(options?.expectedVersion);\n const expectedVersionCheck =\n expectedVersion != null ? SQL`AND _version = ${expectedVersion}` : SQL``;\n\n const filterQuery = isSQL(filter) ? filter : constructFilterQuery(filter);\n\n return SQL`\n DELETE FROM ${SQL.identifier(collectionName)}\n WHERE _id = (\n SELECT _id FROM ${SQL.identifier(collectionName)}\n ${where(filterQuery)}\n LIMIT 1\n ) ${expectedVersionCheck}\n RETURNING\n _id,\n 1 AS matched,\n 1 AS deleted;`;\n },\n deleteMany: <T>(filter: PongoFilter<T> | SQL): SQL => {\n const filterQuery = isSQL(filter) ? filter : constructFilterQuery(filter);\n\n return SQL`DELETE FROM ${SQL.identifier(collectionName)} ${where(filterQuery)} RETURNING _id`;\n },\n findOne: <T>(filter: PongoFilter<T> | SQL): SQL => {\n const filterQuery = isSQL(filter) ? filter : constructFilterQuery(filter);\n\n return SQL`SELECT data FROM ${SQL.identifier(collectionName)} ${where(filterQuery)} LIMIT 1;`;\n },\n find: <T>(filter: PongoFilter<T> | SQL, options?: FindOptions): SQL => {\n const filterQuery = isSQL(filter) ? filter : constructFilterQuery(filter);\n const query: SQL[] = [];\n\n query.push(SQL`SELECT data FROM ${SQL.identifier(collectionName)}`);\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);\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 { 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>(filter: PongoFilter<T>): SQL =>\n SQL.merge(\n Object.entries(filter).map(([key, value]) =>\n isRecord(value)\n ? constructComplexFilterQuery(key, value)\n : handleOperator(key, '$eq', value),\n ),\n ` ${AND} `,\n );\n\nconst constructComplexFilterQuery = (\n key: string,\n value: Record<string, unknown>,\n): SQL => {\n const isEquality = !hasOperators(value);\n\n return SQL.merge(\n objectEntries(value).map(([nestedKey, val]) =>\n isEquality\n ? handleOperator(`${key}.${nestedKey}`, QueryOperators.$eq, val)\n : handleOperator(key, nestedKey, val),\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 { JSONSerializer, 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): SQL => {\n if (path === '_id' || path === '_version') {\n return handleMetadataOperator(path, operator, value);\n }\n\n switch (operator) {\n case '$eq': {\n const jsonPath = buildJsonPath(path);\n\n return SQL`(\n json_extract(data, '${SQL.plain(jsonPath)}') = ${value}\n OR (\n json_type(data, '${SQL.plain(jsonPath)}') = 'array'\n AND EXISTS(\n SELECT 1 FROM json_each(data, '${SQL.plain(jsonPath)}')\n WHERE json_each.value = ${value}\n )\n )\n )`;\n }\n case '$gt':\n case '$gte':\n case '$lt':\n case '$lte':\n case '$ne': {\n const jsonPath = buildJsonPath(path);\n\n return SQL`json_extract(data, '${SQL.plain(jsonPath)}') ${SQL.plain(OperatorMap[operator])} ${value}`;\n }\n case '$in': {\n const jsonPath = buildJsonPath(path);\n const values = value as unknown[];\n const inClause = SQL.merge(\n values.map((v) => SQL`${v}`),\n ', ',\n );\n\n return SQL`json_extract(data, '${SQL.plain(jsonPath)}') IN (${inClause})`;\n }\n case '$nin': {\n const jsonPath = buildJsonPath(path);\n const values = value as unknown[];\n const inClause = SQL.merge(\n values.map((v) => SQL`${v}`),\n ', ',\n );\n\n return SQL`json_extract(data, '${SQL.plain(jsonPath)}') NOT IN (${inClause})`;\n }\n case '$elemMatch': {\n const subConditions = objectEntries(value as Record<string, unknown>)\n .map(([subKey, subValue]) => {\n const serializedValue = JSONSerializer.serialize(subValue);\n return `json_extract(value, '$.${subKey}') = json('${serializedValue}')`;\n })\n .join(' AND ');\n\n const jsonPath = buildJsonPath(path);\n return SQL`EXISTS(SELECT 1 FROM json_each(data, '${SQL.plain(jsonPath)}') WHERE ${SQL.plain(subConditions)})`;\n }\n case '$all': {\n const jsonPath = buildJsonPath(path);\n const serializedValue = JSONSerializer.serialize(value);\n\n return SQL`(SELECT COUNT(*) FROM json_each(json(${serializedValue})) WHERE json_each.value NOT IN (SELECT value FROM json_each(data, '${SQL.plain(jsonPath)}'))) = 0`;\n }\n case '$size': {\n const jsonPath = buildJsonPath(path);\n\n return SQL`json_array_length(json_extract(data, '${SQL.plain(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 const values = value as unknown[];\n const inClause = SQL.merge(\n values.map((v) => SQL`${v}`),\n ', ',\n );\n return SQL`${SQL.plain(fieldName)} IN (${inClause})`;\n }\n case '$nin': {\n const values = value as unknown[];\n const inClause = SQL.merge(\n values.map((v) => SQL`${v}`),\n ', ',\n );\n return SQL`${SQL.plain(fieldName)} NOT IN (${inClause})`;\n }\n default:\n throw new Error(`Unsupported operator: ${operator}`);\n }\n};\n\nconst buildJsonPath = (path: string): string => {\n return `$.${path}`;\n};\n","import { JSONSerializer, 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>(update: PongoUpdate<T>): SQL =>\n objectEntries(update).reduce(\n (currentUpdateQuery, [op, value]) => {\n switch (op) {\n case '$set':\n return buildSetQuery(value, currentUpdateQuery);\n case '$unset':\n return buildUnsetQuery(value, currentUpdateQuery);\n case '$inc':\n return buildIncQuery(value, currentUpdateQuery);\n case '$push':\n return buildPushQuery(value, currentUpdateQuery);\n default:\n return currentUpdateQuery;\n }\n },\n SQL`data`,\n );\n\nexport const buildSetQuery = <T>(set: $set<T>, currentUpdateQuery: SQL): SQL =>\n SQL`json_patch(${currentUpdateQuery}, ${JSONSerializer.serialize(set)})`;\n\nexport const buildUnsetQuery = <T>(\n unset: $unset<T>,\n currentUpdateQuery: SQL,\n): SQL => {\n const keys = Object.keys(unset);\n let query = currentUpdateQuery;\n for (const key of keys) {\n query = SQL`json_remove(${query}, '$.${SQL.plain(key)}')`;\n }\n return query;\n};\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`json_set(${currentUpdateQuery}, '$.${SQL.plain(key)}', CAST((COALESCE(json_extract(${currentUpdateQuery}, '$.${SQL.plain(key)}'), 0) + ${value}) AS TEXT))`\n : SQL`json_set(${currentUpdateQuery}, '$.${SQL.plain(key)}', COALESCE(json_extract(${currentUpdateQuery}, '$.${SQL.plain(key)}'), 0) + ${value})`;\n }\n return currentUpdateQuery;\n};\n\nexport const buildPushQuery = <T>(\n push: $push<T>,\n currentUpdateQuery: SQL,\n): SQL => {\n for (const [key, value] of Object.entries(push)) {\n const serializedValue = JSONSerializer.serialize(value);\n currentUpdateQuery = SQL`json_set(${currentUpdateQuery}, '$.${SQL.plain(key)}', CASE\n WHEN json_type(json_extract(${currentUpdateQuery}, '$.${SQL.plain(key)}')) = 'array'\n THEN json_insert(json_extract(${currentUpdateQuery}, '$.${SQL.plain(key)}'), '$[#]', json(${serializedValue}))\n ELSE json_array(json(${serializedValue}))\n END)`;\n }\n return currentUpdateQuery;\n};\n"]}
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
objectEntries,
|
|
10
10
|
pongoDatabaseDriverRegistry,
|
|
11
11
|
pongoSchema
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-NCNRRYVE.js";
|
|
13
13
|
|
|
14
14
|
// src/storage/postgresql/pg/index.ts
|
|
15
15
|
import { dumbo } from "@event-driven-io/dumbo";
|
|
@@ -342,7 +342,9 @@ var pgDatabaseDriver = {
|
|
|
342
342
|
databaseName
|
|
343
343
|
});
|
|
344
344
|
},
|
|
345
|
-
getDatabaseNameOrDefault
|
|
345
|
+
getDatabaseNameOrDefault: (options) => {
|
|
346
|
+
return options.databaseName ?? getDatabaseNameOrDefault(options.connectionString);
|
|
347
|
+
},
|
|
346
348
|
defaultConnectionString: "postgresql://localhost:5432/postgres"
|
|
347
349
|
};
|
|
348
350
|
var usePgDatabaseDriver = () => {
|
|
@@ -359,4 +361,4 @@ export {
|
|
|
359
361
|
pgDatabaseDriver,
|
|
360
362
|
usePgDatabaseDriver
|
|
361
363
|
};
|
|
362
|
-
//# sourceMappingURL=chunk-
|
|
364
|
+
//# sourceMappingURL=chunk-EYQDS752.js.map
|