@event-driven-io/pongo 0.17.0-beta.45 → 0.17.0-beta.46
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/cli.cjs +2 -1
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +1 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/shim.cjs +1 -0
- package/dist/shim.cjs.map +1 -1
- package/dist/shim.js +1 -0
- package/dist/shim.js.map +1 -1
- package/package.json +2 -2
package/dist/shim.cjs
CHANGED
package/dist/shim.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shim.cjs","names":["LRUCache","pongoDriverRegistry","JSONSerializer"],"sources":["../src/mongo/findCursor.ts","../src/core/cache/pongoCacheWrapper.ts","../src/core/cache/providers/identityMapCache.ts","../src/core/cache/providers/lruCache.ts","../src/core/cache/providers/noopCache.ts","../src/core/cache/pongoCache.ts","../src/core/cache/transactions/pongoTransactionCache.ts","../src/core/database/pongoDatabaseCache.ts","../src/core/schema/index.ts","../src/core/drivers/databaseDriver.ts","../src/core/pongoTransaction.ts","../src/core/pongoSession.ts","../src/core/pongoClient.ts","../src/mongo/mongoCollection.ts","../src/mongo/mongoDb.ts","../src/mongo/mongoClient.ts"],"sourcesContent":["export class FindCursor<T> {\n private findDocumentsPromise: Promise<T[]>;\n private documents: T[] | null = null;\n private index: number = 0;\n\n constructor(documents: Promise<T[]>) {\n this.findDocumentsPromise = documents;\n }\n\n async toArray(): Promise<T[]> {\n return this.findDocuments();\n }\n\n async forEach(callback: (doc: T) => void): Promise<void> {\n const docs = await this.findDocuments();\n\n for (const doc of docs) {\n callback(doc);\n }\n return Promise.resolve();\n }\n\n hasNext(): boolean {\n if (this.documents === null) throw Error('Error while fetching documents');\n return this.index < this.documents.length;\n }\n\n async next(): Promise<T | null> {\n const docs = await this.findDocuments();\n return this.hasNext() ? (docs[this.index++] ?? null) : null;\n }\n\n private async findDocuments(): Promise<T[]> {\n this.documents = await this.findDocumentsPromise;\n return this.documents;\n }\n}\n","import type { PongoDocument } from '../typing';\nimport type {\n CacheHooks,\n PongoCache,\n PongoDocumentCacheKey,\n} from './pongoCache';\n\nexport const pongoCacheWrapper = (options: {\n provider: PongoCache;\n hooks?: CacheHooks;\n}): PongoCache => {\n const { provider, hooks } = options;\n\n const onError = (error: unknown, operation: string) => {\n hooks?.onError?.(error, operation);\n };\n let isClosed = false;\n\n return {\n cacheType: provider.cacheType,\n async get<Doc extends PongoDocument = PongoDocument>(\n key: PongoDocumentCacheKey,\n ): Promise<Doc | null | undefined> {\n try {\n const result = await provider.get<Doc>(key);\n if (result !== undefined) {\n hooks?.onHit?.(key);\n } else {\n hooks?.onMiss?.(key);\n }\n return result;\n } catch (error) {\n onError(error, 'get');\n hooks?.onMiss?.(key);\n return undefined;\n }\n },\n\n async getMany(keys) {\n try {\n return await provider.getMany(keys);\n } catch (error) {\n onError(error, 'getMany');\n return [];\n }\n },\n\n async set(key, value) {\n try {\n await provider.set(key, value);\n } catch (error) {\n onError(error, 'set');\n }\n },\n\n async setMany(entries) {\n try {\n await provider.setMany(entries);\n } catch (error) {\n onError(error, 'setMany');\n }\n },\n\n async update(key, updater) {\n try {\n await provider.update(key, updater);\n } catch (error) {\n onError(error, 'update');\n }\n },\n\n async updateMany(keys, updater) {\n try {\n await provider.updateMany(keys, updater);\n } catch (error) {\n onError(error, 'updateMany');\n }\n },\n\n async delete(key) {\n try {\n await provider.delete(key);\n hooks?.onEvict?.(key);\n } catch (error) {\n onError(error, 'delete');\n }\n },\n\n async deleteMany(keys) {\n try {\n await provider.deleteMany(keys);\n for (const key of keys) hooks?.onEvict?.(key);\n } catch (error) {\n onError(error, 'deleteMany');\n }\n },\n\n clear() {\n return provider.clear();\n },\n\n close() {\n if (isClosed) return;\n\n isClosed = true;\n return provider.close();\n },\n };\n};\n","import type { PongoDocument } from '../../typing';\nimport type { PongoCache, PongoDocumentCacheKey } from '../pongoCache';\n\nexport const identityMapCache = (): PongoCache => {\n const store = new Map<string, PongoDocument | null>();\n\n return {\n cacheType: 'pongo:cache:identity-map',\n get: <Doc extends PongoDocument = PongoDocument>(\n key: PongoDocumentCacheKey,\n ): Promise<Doc | null | undefined> =>\n Promise.resolve(\n store.has(key) ? (store.get(key) as Doc | null) : undefined,\n ),\n getMany: <Doc extends PongoDocument = PongoDocument>(\n keys: PongoDocumentCacheKey[],\n ): (Doc | null | undefined)[] =>\n keys.map((k) =>\n store.has(k) ? (store.get(k) as Doc | null) : undefined,\n ),\n set: (key, value) => {\n store.set(key, value);\n },\n setMany: (entries) => {\n for (const { key, value } of entries) store.set(key, value);\n },\n update: (key, _updater) => {\n // TODO: Implement proper update logic instead of just setting the updater as value\n store.delete(key);\n // const existing = store.get(key);\n // if (!existing) return;\n // const updated = typeof updater === 'function' ? updater(existing) : updater;\n // store.set(key, updated);\n },\n updateMany: (keys, _updater) => {\n // TODO: Implement proper update logic instead of just setting the updater as value\n for (const key of keys) store.delete(key);\n // for (const key of keys) {\n // const existing = store.get(key);\n // if (!existing) continue;\n // const updated = typeof updater === 'function' ? updater(existing) : updater;\n // store.set(key, updated);\n // }\n },\n delete: (key) => {\n store.delete(key);\n },\n deleteMany: (keys) => {\n for (const key of keys) store.delete(key);\n },\n clear: () => {\n store.clear();\n },\n close: () => {\n store.clear();\n },\n };\n};\n","import { LRUCache } from 'lru-cache';\nimport type { MaybePromise, PongoDocument } from '../../typing';\nimport type { PongoCache, PongoDocumentCacheKey } from '../pongoCache';\n\nexport type LRUCacheOptions = Omit<\n LRUCache.Options<string, { doc: PongoDocument | null }, unknown>,\n 'max'\n> & { max?: number };\n\nconst defaultLRUCacheOptions: LRUCache.Options<\n string,\n { doc: PongoDocument | null },\n unknown\n> = {\n max: 1000,\n};\n\nexport const lruCache = (options?: LRUCacheOptions): PongoCache => {\n const cache = new LRUCache<string, { doc: PongoDocument | null }>({\n ...defaultLRUCacheOptions,\n ...options,\n });\n\n return {\n cacheType: 'pongo:cache:lru',\n get: <Doc extends PongoDocument = PongoDocument>(\n key: PongoDocumentCacheKey,\n ): MaybePromise<Doc | null | undefined> => {\n const entry = cache.get(key);\n if (entry === undefined) return undefined;\n return entry.doc as Doc | null;\n },\n getMany: <Doc extends PongoDocument = PongoDocument>(\n keys: PongoDocumentCacheKey[],\n ): (Doc | null | undefined)[] =>\n keys.map((k) => {\n const entry = cache.get(k);\n if (entry === undefined) return undefined;\n return entry.doc as Doc | null;\n }),\n set: (key, value) => {\n cache.set(key, { doc: value });\n },\n setMany: (entries) => {\n for (const { key, value } of entries) {\n cache.set(key, { doc: value });\n }\n },\n update: (key, _updater) => {\n cache.delete(key);\n // TODO: Add updater using mingo\n // const existing = cache.get(key);\n // if (existing) {\n // const updated = updater(existing);\n // cache.set(key, updated, opts?.ttl !== undefined ? { ttl: opts.ttl } : undefined);\n // }\n },\n updateMany(keys, _updater) {\n for (const key of keys) {\n cache.delete(key);\n // TODO: Add updater using mingo\n // const existing = cache.get(key);\n // if (existing) {\n // const updated = updater(existing);\n // cache.set(key, updated);\n // }\n }\n },\n delete: (key) => {\n cache.delete(key);\n },\n deleteMany: (keys) => {\n for (const key of keys) cache.delete(key);\n },\n clear: () => {\n cache.clear();\n },\n close: () => {\n cache.clear();\n },\n };\n};\n","import type { PongoCache } from '../pongoCache';\n\nexport const noopCacheProvider: PongoCache = {\n cacheType: 'pongo:cache:no-op',\n get: () => undefined,\n set: () => {},\n update: () => {},\n delete: () => {},\n getMany: (keys) => keys.map(() => undefined),\n setMany: () => {},\n updateMany: () => {},\n deleteMany: () => {},\n clear: () => {},\n close: () => {},\n};\n","import type { MaybePromise, PongoDocument, PongoUpdate } from '../typing';\nimport { pongoCacheWrapper } from './pongoCacheWrapper';\nimport type { LRUCacheOptions } from './providers';\nimport { identityMapCache, lruCache, noopCacheProvider } from './providers';\n\nexport type PongoDocumentCacheKey = `${string}:${string}:${string}`;\n\nexport type PongoCacheSetEntry<Doc extends PongoDocument = PongoDocument> = {\n key: PongoDocumentCacheKey;\n value: Doc | null;\n};\n\nexport type PongoCacheType<T extends string = string> = `pongo:cache:${T}`;\n\nexport interface PongoCache<T extends string = string> {\n cacheType: PongoCacheType<T>;\n get<Doc extends PongoDocument = PongoDocument>(\n key: PongoDocumentCacheKey,\n ): MaybePromise<Doc | null | undefined>;\n getMany<Doc extends PongoDocument = PongoDocument>(\n keys: PongoDocumentCacheKey[],\n ): MaybePromise<(Doc | null | undefined)[]>;\n set<Doc extends PongoDocument = PongoDocument>(\n key: PongoDocumentCacheKey,\n value: Doc | null,\n ): MaybePromise<void>;\n setMany(entries: PongoCacheSetEntry[]): MaybePromise<void>;\n update<Doc extends PongoDocument = PongoDocument>(\n key: PongoDocumentCacheKey,\n updater: PongoUpdate<Doc>,\n ): MaybePromise<void>;\n updateMany<Doc extends PongoDocument = PongoDocument>(\n keys: PongoDocumentCacheKey[],\n updater: PongoUpdate<Doc>,\n ): MaybePromise<void>;\n delete(key: PongoDocumentCacheKey): MaybePromise<void>;\n deleteMany(keys: PongoDocumentCacheKey[]): MaybePromise<void>;\n clear(): MaybePromise<void>;\n close(): MaybePromise<void>;\n}\n\nexport type CacheHooks = {\n onHit?(key: PongoDocumentCacheKey): void;\n onMiss?(key: PongoDocumentCacheKey): void;\n onEvict?(key: PongoDocumentCacheKey): void;\n onError?(error: unknown, operation: string): void;\n};\n\nexport type CacheType = 'in-memory' | 'identity-map';\n\nexport type CacheSettings =\n | ({\n type: 'in-memory';\n } & LRUCacheOptions)\n | {\n type: 'identity-map';\n };\n\nexport type CacheConfig = CacheSettings | 'disabled';\n\nexport type CacheOptions = {\n skipCache?: boolean;\n};\n\nconst DEFAULT_CONFIG: CacheSettings = { type: 'in-memory' };\n\nexport const pongoCache = (\n options?: CacheConfig | 'disabled' | PongoCache | undefined,\n): PongoCache => {\n if (options === undefined || options === 'disabled') return noopCacheProvider;\n\n if ('cacheType' in options) return options as PongoCache;\n\n const config = options ?? DEFAULT_CONFIG;\n\n if (config.type === 'identity-map') return identityMapCache();\n\n const raw = lruCache(config);\n\n return pongoCacheWrapper({ provider: raw });\n};\n","import type { MaybePromise, PongoUpdate } from '../../typing';\nimport type { PongoDocument } from '../../typing/operations';\nimport type {\n PongoCache,\n PongoCacheSetEntry,\n PongoCacheType,\n PongoDocumentCacheKey,\n} from '../pongoCache';\nimport { identityMapCache } from '../providers';\n\nexport type PongoTransactionCacheOperationOptions = {\n mainCache: PongoCache;\n};\n\ntype CacheOperation =\n | {\n type: 'set';\n key: PongoDocumentCacheKey;\n value: PongoDocument | null;\n mainCache: PongoCache;\n }\n | { type: 'setMany'; entries: PongoCacheSetEntry[]; mainCache: PongoCache }\n | {\n type: 'replaceMany';\n entries: PongoCacheSetEntry[];\n mainCache: PongoCache;\n }\n | {\n type: 'update';\n key: PongoDocumentCacheKey;\n updater: PongoUpdate<PongoDocument>;\n mainCache: PongoCache;\n }\n | {\n type: 'updateMany';\n keys: PongoDocumentCacheKey[];\n updater: PongoUpdate<PongoDocument>;\n mainCache: PongoCache;\n }\n | { type: 'delete'; key: PongoDocumentCacheKey; mainCache: PongoCache }\n | {\n type: 'deleteMany';\n keys: PongoDocumentCacheKey[];\n mainCache: PongoCache;\n };\n\nexport interface PongoTransactionCache<T extends string = string> {\n type: PongoCacheType<T>;\n get<Doc extends PongoDocument = PongoDocument>(\n key: PongoDocumentCacheKey,\n ): MaybePromise<Doc | null | undefined>;\n set(\n key: PongoDocumentCacheKey,\n value: PongoDocument | null,\n options: PongoTransactionCacheOperationOptions,\n ): MaybePromise<void>;\n update<Doc extends PongoDocument = PongoDocument>(\n key: PongoDocumentCacheKey,\n updater: PongoUpdate<Doc>,\n options: PongoTransactionCacheOperationOptions,\n ): MaybePromise<void>;\n delete(\n key: PongoDocumentCacheKey,\n options: PongoTransactionCacheOperationOptions,\n ): MaybePromise<void>;\n getMany<Doc extends PongoDocument = PongoDocument>(\n keys: PongoDocumentCacheKey[],\n ): MaybePromise<(Doc | null | undefined)[]>;\n setMany(\n entries: PongoCacheSetEntry[],\n options: PongoTransactionCacheOperationOptions,\n ): MaybePromise<void>;\n updateMany<Doc extends PongoDocument = PongoDocument>(\n keys: PongoDocumentCacheKey[],\n updater: PongoUpdate<Doc>,\n options: PongoTransactionCacheOperationOptions,\n ): MaybePromise<void>;\n deleteMany(\n keys: PongoDocumentCacheKey[],\n options: PongoTransactionCacheOperationOptions,\n ): MaybePromise<void>;\n clear(): MaybePromise<void>;\n commit(): Promise<void>;\n}\n\nexport const pongoTransactionCache = (options?: {\n cache?: PongoCache;\n}): PongoTransactionCache => {\n const innerCache = options?.cache ?? identityMapCache();\n const operations: CacheOperation[] = [];\n\n const cache: PongoTransactionCache = {\n type: 'pongo:cache:transaction-buffer',\n\n get(key: PongoDocumentCacheKey) {\n return innerCache.get(key);\n },\n\n set(\n key: PongoDocumentCacheKey,\n value: PongoDocument,\n options: PongoTransactionCacheOperationOptions,\n ) {\n const { mainCache } = options;\n innerCache.set(key, value);\n operations.push({\n type: 'set',\n key,\n value,\n mainCache,\n });\n },\n\n update<Doc extends PongoDocument = PongoDocument>(\n key: PongoDocumentCacheKey,\n updater: PongoUpdate<Doc>,\n options: PongoTransactionCacheOperationOptions,\n ) {\n const { mainCache } = options;\n innerCache.update(key, updater);\n operations.push({\n type: 'update',\n key,\n updater,\n mainCache,\n });\n },\n\n delete(\n key: PongoDocumentCacheKey,\n options: PongoTransactionCacheOperationOptions,\n ) {\n innerCache.delete(key);\n operations.push({ type: 'delete', key, mainCache: options.mainCache });\n },\n\n getMany(keys: PongoDocumentCacheKey[]) {\n return innerCache.getMany(keys);\n },\n\n setMany(\n entries: PongoCacheSetEntry[],\n options: PongoTransactionCacheOperationOptions,\n ) {\n innerCache.setMany(entries);\n operations.push({\n type: 'setMany',\n entries,\n mainCache: options.mainCache,\n });\n },\n\n updateMany<Doc extends PongoDocument = PongoDocument>(\n keys: PongoDocumentCacheKey[],\n updater: PongoUpdate<Doc>,\n options: PongoTransactionCacheOperationOptions,\n ) {\n const { mainCache } = options;\n innerCache.updateMany(keys, updater);\n operations.push({\n type: 'updateMany',\n keys,\n updater,\n mainCache,\n });\n },\n\n deleteMany(\n keys: PongoDocumentCacheKey[],\n options: PongoTransactionCacheOperationOptions,\n ) {\n innerCache.deleteMany(keys);\n operations.push({\n type: 'deleteMany',\n keys,\n mainCache: options.mainCache,\n });\n },\n\n clear() {\n innerCache.clear();\n operations.length = 0;\n },\n\n async commit() {\n for (const op of operations) {\n switch (op.type) {\n case 'set':\n await op.mainCache.set(op.key, op.value);\n break;\n case 'setMany':\n await op.mainCache.setMany(op.entries);\n break;\n case 'update':\n await op.mainCache.update(\n op.key,\n op.updater as unknown as PongoUpdate<PongoDocument>,\n );\n break;\n case 'updateMany':\n await op.mainCache.updateMany(\n op.keys,\n op.updater as unknown as PongoUpdate<PongoDocument>,\n );\n break;\n case 'delete':\n await op.mainCache.delete(op.key);\n break;\n case 'deleteMany':\n await op.mainCache.deleteMany(op.keys);\n break;\n }\n }\n innerCache.clear();\n operations.length = 0;\n },\n };\n\n return cache;\n};\n","import {\n getDatabaseMetadata,\n type DatabaseDriverType,\n type JSONSerializationOptions,\n type MigrationStyle,\n} from '@event-driven-io/dumbo';\nimport type { PongoDatabaseFactoryOptions, PongoDriver } from '../drivers';\nimport type { PongoClientSchema, PongoCollectionSchema } from '../schema';\nimport type { PongoDb } from '../typing';\n\nexport const PongoDatabaseCache = <\n Database extends PongoDb<DatabaseDriverType> = PongoDb<DatabaseDriverType>,\n TypedClientSchema extends PongoClientSchema = PongoClientSchema,\n>({\n driver,\n typedSchema,\n}: {\n driver: PongoDriver<Database>;\n typedSchema?: TypedClientSchema | undefined;\n}) => {\n const dbClients = new Map<string, PongoDb>();\n\n const getDatabaseDefinition = (dbName: string | undefined) =>\n Object.values(typedSchema?.dbs ?? {}).find((d) => d.name === dbName);\n\n return {\n getOrCreate: <\n CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<\n string,\n PongoCollectionSchema\n >,\n >(\n createOptions: Omit<\n PongoDatabaseFactoryOptions<CollectionsSchema>,\n 'schema'\n > &\n JSONSerializationOptions & {\n schema?: {\n autoMigration?: MigrationStyle;\n };\n },\n ): Database => {\n const metadata = getDatabaseMetadata(driver.driverType);\n const dbName =\n createOptions.databaseName ??\n metadata?.parseDatabaseName?.(\n 'connectionString' in createOptions\n ? (createOptions.connectionString as string)\n : undefined,\n ) ??\n 'db:default';\n\n const existing = dbClients.get(dbName);\n if (existing) return existing as Database;\n\n const definition = getDatabaseDefinition(createOptions.databaseName);\n\n const newDb: Database = driver.databaseFactory({\n ...createOptions,\n databaseName: dbName,\n schema: {\n ...createOptions.schema,\n ...(definition ? { definition } : {}),\n },\n });\n dbClients.set(dbName, newDb);\n return newDb;\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 type { DatabaseDriverType } from '@event-driven-io/dumbo';\nimport {\n type Document,\n type PongoClient,\n type PongoCollection,\n type PongoDb,\n type PongoDocument,\n objectEntries,\n} from '../typing';\n\nexport interface PongoCollectionSchema<\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n T extends PongoDocument = PongoDocument,\n> {\n name: string;\n}\n\n// Database schema interface\nexport interface PongoDbSchema<\n T extends Record<string, PongoCollectionSchema> = Record<\n string,\n PongoCollectionSchema\n >,\n> {\n name?: string;\n collections: T;\n}\n\nexport interface PongoClientSchema<\n T extends Record<string, PongoDbSchema> = Record<string, PongoDbSchema>,\n> {\n dbs: T;\n}\n\nexport type CollectionsMap<T extends Record<string, PongoCollectionSchema>> = {\n [K in keyof T]: PongoCollection<\n T[K] extends PongoCollectionSchema<infer U> ? U : PongoDocument\n >;\n};\n\nexport type PongoDbWithSchema<\n T extends Record<string, PongoCollectionSchema>,\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n> = CollectionsMap<T> & PongoDb<DriverType>;\n\nexport type DBsMap<\n T extends Record<string, PongoDbSchema>,\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n Database extends PongoDb<DriverType> = PongoDb<DriverType>,\n> = {\n [K in keyof T]: CollectionsMap<T[K]['collections']> & Database;\n};\n\nexport type PongoClientWithSchema<\n T extends PongoClientSchema,\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n Database extends PongoDb<DriverType> = PongoDb<DriverType>,\n> = DBsMap<T['dbs'], DriverType, Database> & PongoClient<DriverType, Database>;\n\nconst pongoCollectionSchema = <T extends PongoDocument>(\n name: string,\n): PongoCollectionSchema<T> => ({\n name,\n});\n\npongoCollectionSchema.from = (\n collectionNames: string[],\n): Record<string, PongoCollectionSchema> =>\n collectionNames.reduce(\n (acc, collectionName) => (\n (acc[collectionName] = pongoSchema.collection(collectionName)),\n acc\n ),\n {} as Record<string, PongoCollectionSchema>,\n );\n\nfunction pongoDbSchema<T extends Record<string, PongoCollectionSchema>>(\n collections: T,\n): PongoDbSchema<T>;\nfunction pongoDbSchema<T extends Record<string, PongoCollectionSchema>>(\n name: string,\n collections: T,\n): PongoDbSchema<T>;\nfunction pongoDbSchema<T extends Record<string, PongoCollectionSchema>>(\n nameOrCollections: string | T,\n collections?: T,\n): PongoDbSchema<T> {\n if (collections === undefined) {\n if (typeof nameOrCollections === 'string') {\n throw new Error('You need to provide colleciton definition');\n }\n return {\n collections: nameOrCollections,\n };\n }\n\n return nameOrCollections && typeof nameOrCollections === 'string'\n ? {\n name: nameOrCollections,\n collections,\n }\n : { collections: collections };\n}\n\npongoDbSchema.from = (\n databaseName: string | undefined,\n collectionNames: string[],\n): PongoDbSchema =>\n databaseName\n ? pongoDbSchema(databaseName, pongoCollectionSchema.from(collectionNames))\n : pongoDbSchema(pongoCollectionSchema.from(collectionNames));\n\nconst pongoClientSchema = <T extends Record<string, PongoDbSchema>>(\n dbs: T,\n): PongoClientSchema<T> => ({\n dbs,\n});\n\nexport const pongoSchema = {\n client: pongoClientSchema,\n db: pongoDbSchema,\n collection: pongoCollectionSchema,\n};\n\n// Factory function to create DB instances\nexport const proxyPongoDbWithSchema = <\n Collections extends Record<string, PongoCollectionSchema>,\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n Database extends PongoDb<DriverType> = PongoDb<DriverType>,\n>(\n pongoDb: Database,\n dbSchema: PongoDbSchema<Collections>,\n collections: Map<string, PongoCollection<Document>>,\n): PongoDbWithSchema<Collections, DriverType> & Database => {\n const collectionNames = Object.keys(dbSchema.collections);\n\n for (const collectionName of collectionNames) {\n collections.set(collectionName, pongoDb.collection(collectionName));\n }\n\n return new Proxy(\n pongoDb as Database & {\n [key: string]: unknown;\n },\n {\n get(target, prop: string) {\n return collections.get(prop) ?? target[prop];\n },\n },\n ) as PongoDbWithSchema<Collections, DriverType> & Database;\n};\n\nexport const proxyClientWithSchema = <\n TypedClientSchema extends PongoClientSchema,\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n Database extends PongoDb<DriverType> = PongoDb<DriverType>,\n>(\n client: PongoClient<DriverType, Database>,\n schema: TypedClientSchema | undefined,\n): PongoClientWithSchema<TypedClientSchema, DriverType, Database> => {\n if (!schema)\n return client as PongoClientWithSchema<\n TypedClientSchema,\n DriverType,\n Database\n >;\n\n const dbNames = Object.keys(schema.dbs);\n\n return new Proxy(\n client as PongoClient<DriverType, Database> & {\n [key: string]: unknown;\n },\n {\n get(target, prop: string) {\n if (dbNames.includes(prop)) return client.db(schema.dbs[prop]?.name);\n\n return target[prop];\n },\n },\n ) as PongoClientWithSchema<TypedClientSchema, DriverType, Database>;\n};\n\nexport type PongoCollectionSchemaMetadata = {\n name: string;\n};\n\nexport type PongoDbSchemaMetadata = {\n name?: string | undefined;\n collections: PongoCollectionSchemaMetadata[];\n};\n\nexport type PongoClientSchemaMetadata = {\n databases: PongoDbSchemaMetadata[];\n database: (name?: string) => PongoDbSchemaMetadata | undefined;\n};\n\nexport const toDbSchemaMetadata = <TypedDbSchema extends PongoDbSchema>(\n schema: TypedDbSchema,\n): PongoDbSchemaMetadata => ({\n name: schema.name,\n collections: objectEntries(schema.collections).map((c) => ({\n name: c[1].name,\n })),\n});\n\nexport const toClientSchemaMetadata = <\n TypedClientSchema extends PongoClientSchema,\n>(\n schema: TypedClientSchema,\n): PongoClientSchemaMetadata => {\n const databases = objectEntries(schema.dbs).map((e) =>\n toDbSchemaMetadata(e[1]),\n );\n\n return {\n databases,\n database: (name) => databases.find((db) => db.name === name),\n };\n};\n\nexport interface PongoSchemaConfig<\n TypedClientSchema extends PongoClientSchema = PongoClientSchema,\n> {\n schema: TypedClientSchema;\n}\n","import type {\n DatabaseDriverType,\n JSONSerializationOptions,\n JSONSerializer,\n MigrationStyle,\n} from '@event-driven-io/dumbo';\nimport type { CacheConfig, PongoCache } from '../cache';\nimport type { PongoCollectionSchema, PongoDbSchema } from '../schema';\nimport type { AnyPongoDb, PongoDb } from '../typing';\n\nexport type PongoDriverOptions<ConnectionOptions = unknown> = {\n connectionOptions?: ConnectionOptions | undefined;\n} & JSONSerializationOptions;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyPongoDriverOptions = PongoDriverOptions<any>;\n\nexport type PongoDatabaseFactoryOptions<\n CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<\n string,\n PongoCollectionSchema\n >,\n DriverOptions extends AnyPongoDriverOptions = AnyPongoDriverOptions,\n> = {\n databaseName?: string | undefined;\n schema?:\n | {\n autoMigration?: MigrationStyle;\n definition?: PongoDbSchema<CollectionsSchema>;\n }\n | undefined;\n serializer: JSONSerializer;\n errors?: { throwOnOperationFailures?: boolean } | undefined;\n cache?: CacheConfig | 'disabled' | PongoCache | undefined;\n} & DriverOptions;\n\nexport interface PongoDriver<\n Database extends AnyPongoDb = AnyPongoDb,\n DriverOptions extends AnyPongoDriverOptions = AnyPongoDriverOptions,\n> {\n driverType: Database['driverType'];\n databaseFactory<\n CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<\n string,\n PongoCollectionSchema\n >,\n >(\n options: PongoDatabaseFactoryOptions<CollectionsSchema, DriverOptions>,\n ): Database & PongoDb<Database['driverType']>;\n}\n\nexport type AnyPongoDriver = PongoDriver<AnyPongoDb, AnyPongoDriverOptions>;\n\nexport type ExtractPongoDriverOptions<DatabaseDriver> =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n DatabaseDriver extends PongoDriver<any, infer O> ? O : never;\n\nexport type ExtractPongoDatabaseTypeFromDriver<DatabaseDriver> =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n DatabaseDriver extends PongoDriver<infer D, any> ? D : never;\n\nexport const PongoDriverRegistry = () => {\n const drivers = new Map<\n DatabaseDriverType,\n PongoDriver | (() => Promise<PongoDriver>)\n >();\n\n const register = <Database extends AnyPongoDb = AnyPongoDb>(\n driverType: Database['driverType'],\n driver: PongoDriver<Database> | (() => Promise<PongoDriver<Database>>),\n ): void => {\n const entry = drivers.get(driverType);\n if (\n entry &&\n (typeof entry !== 'function' || typeof driver === 'function')\n ) {\n return;\n }\n drivers.set(driverType, driver);\n };\n\n const tryResolve = async <Driver extends AnyPongoDriver = AnyPongoDriver>(\n driverType: Driver['driverType'],\n ): Promise<Driver | null> => {\n const entry = drivers.get(driverType);\n\n if (!entry) return null;\n\n if (typeof entry !== 'function') return entry as Driver;\n\n const driver = await entry();\n\n register(driverType, driver);\n return driver as Driver;\n };\n\n const tryGet = <Driver extends AnyPongoDriver = AnyPongoDriver>(\n driverType: Driver['driverType'],\n ): Driver | null => {\n const entry = drivers.get(driverType);\n return entry && typeof entry !== 'function' ? (entry as Driver) : null;\n };\n\n const has = (driverType: DatabaseDriverType): boolean =>\n drivers.has(driverType);\n\n return {\n register,\n tryResolve,\n tryGet,\n has,\n get databaseDriverTypes(): DatabaseDriverType[] {\n return Array.from(drivers.keys());\n },\n };\n};\n\ndeclare global {\n var pongoDriverRegistry: ReturnType<typeof PongoDriverRegistry>;\n}\n\nexport const pongoDriverRegistry = (globalThis.pongoDriverRegistry =\n globalThis.pongoDriverRegistry ?? PongoDriverRegistry());\n","import type { DatabaseTransaction } from '@event-driven-io/dumbo';\nimport { pongoTransactionCache } from './cache';\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 const cache = pongoTransactionCache();\n\n return {\n cache,\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 (isCommitted) return;\n if (isRolledBack) throw new Error('Transaction is not active!');\n\n isCommitted = true;\n\n if (transaction) {\n await transaction.commit();\n transaction = null;\n }\n await cache.commit();\n },\n rollback: async (error?: unknown) => {\n if (isCommitted) throw new Error('Cannot rollback commited transaction!');\n if (isRolledBack) return;\n\n isRolledBack = true;\n\n if (transaction) {\n await transaction.rollback(error);\n transaction = null;\n }\n cache.clear();\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 type { CacheConfig, PongoCache } from './cache';\nimport { 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 cache?: CacheConfig | 'disabled' | PongoCache;\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 { JSONSerializer } from '@event-driven-io/dumbo';\nimport { pongoCache } from './cache';\nimport { PongoDatabaseCache } from './database';\nimport type {\n AnyPongoDriver,\n ExtractPongoDatabaseTypeFromDriver,\n} from './drivers';\nimport { pongoSession } from './pongoSession';\nimport {\n proxyClientWithSchema,\n type PongoClientSchema,\n type PongoClientWithSchema,\n} from './schema';\nimport type {\n PongoClient,\n PongoClientOptions,\n PongoDb,\n PongoDbOptions,\n PongoSession,\n} from './typing';\n\nexport const pongoClient = <\n DatabaseDriver extends AnyPongoDriver,\n TypedClientSchema extends PongoClientSchema = PongoClientSchema,\n>(\n options: PongoClientOptions<DatabaseDriver, TypedClientSchema>,\n): PongoClient<\n DatabaseDriver['driverType'],\n ExtractPongoDatabaseTypeFromDriver<DatabaseDriver>\n> &\n PongoClientWithSchema<TypedClientSchema> => {\n const {\n driver,\n schema,\n errors,\n cache: cacheOptions,\n serialization,\n ...connectionOptions\n } = options;\n\n const dbClients = PongoDatabaseCache<PongoDb, TypedClientSchema>({\n driver,\n typedSchema: schema?.definition,\n });\n\n const serializer = JSONSerializer.from(options);\n\n const cache =\n cacheOptions === 'disabled' || cacheOptions === undefined\n ? 'disabled'\n : pongoCache(cacheOptions);\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 options?: PongoDbOptions,\n ): ExtractPongoDatabaseTypeFromDriver<DatabaseDriver> => {\n const db = dbClients.getOrCreate({\n ...connectionOptions,\n databaseName: dbName,\n serializer,\n errors,\n cache: options?.cache ?? cache,\n serialization,\n });\n\n return db as ExtractPongoDatabaseTypeFromDriver<DatabaseDriver>;\n },\n startSession: pongoSession,\n withSession: async <T>(\n callback: (session: PongoSession) => Promise<T>,\n ): Promise<T> => {\n const session = pongoSession();\n\n try {\n return await callback(session);\n } finally {\n await session.endSession();\n }\n },\n };\n\n return proxyClientWithSchema(pongoClient, schema?.definition);\n};\n","import type {\n AbstractCursorOptions,\n AggregateOptions,\n AggregationCursor,\n AnyBulkWriteOperation,\n BSONSerializeOptions,\n BulkWriteOptions,\n BulkWriteResult,\n ChangeStream,\n ChangeStreamDocument,\n ChangeStreamOptions,\n CommandOperationOptions,\n CountDocumentsOptions,\n CountOptions,\n CreateIndexesOptions,\n Db,\n DeleteOptions,\n DeleteResult,\n Document,\n DropCollectionOptions,\n EnhancedOmit,\n EstimatedDocumentCountOptions,\n Filter,\n FindOneAndDeleteOptions,\n FindOneAndReplaceOptions,\n FindOneAndUpdateOptions,\n FindOptions,\n Flatten,\n Hint,\n IndexDescription,\n IndexDescriptionCompact,\n IndexDescriptionInfo,\n IndexInformationOptions,\n IndexSpecification,\n InferIdType,\n InsertManyResult,\n InsertOneOptions,\n InsertOneResult,\n ListIndexesCursor,\n ListSearchIndexesCursor,\n ListSearchIndexesOptions,\n ModifyResult,\n Collection as MongoCollection,\n FindCursor as MongoFindCursor,\n ObjectId,\n OperationOptions,\n OptionalUnlessRequiredId,\n OrderedBulkOperation,\n ReadConcern,\n ReadPreference,\n RenameOptions,\n ReplaceOptions,\n SearchIndexDescription,\n UnorderedBulkOperation,\n UpdateFilter,\n UpdateOptions,\n UpdateResult,\n WithId,\n WithoutId,\n WriteConcern,\n} from 'mongodb';\nimport type { Key } from 'readline';\nimport type {\n CollectionOperationOptions,\n DocumentHandler,\n HandleOptions,\n PongoCollection,\n PongoFilter,\n FindOptions as PongoFindOptions,\n PongoHandleResult,\n OptionalUnlessRequiredId as PongoOptionalUnlessRequiredId,\n PongoSession,\n PongoUpdate,\n} from '../core';\nimport type { Db as ShimDb } from '../shim';\nimport { FindCursor } from './findCursor';\n\nconst toCollectionOperationOptions = (\n options: OperationOptions | undefined,\n): CollectionOperationOptions | undefined =>\n options?.session\n ? { session: options.session as unknown as PongoSession }\n : undefined;\n\nconst toFindOptions = (\n options: FindOptions | undefined,\n): PongoFindOptions | undefined => {\n if (\n !options?.session &&\n !options?.limit &&\n !options?.skip &&\n !options?.sort\n ) {\n return undefined;\n }\n\n const pongoFindOptions: PongoFindOptions = {};\n\n if (options?.session) {\n pongoFindOptions.session = options.session as unknown as PongoSession;\n }\n if (options?.limit !== undefined) {\n pongoFindOptions.limit = options.limit;\n }\n if (options?.skip !== undefined) {\n pongoFindOptions.skip = options.skip;\n }\n if (options?.sort !== undefined) {\n pongoFindOptions.sort = options.sort as { [field: string]: 1 | -1 };\n }\n\n return pongoFindOptions;\n};\n\nexport class Collection<T extends Document> implements MongoCollection<T> {\n private collection: PongoCollection<T>;\n private database: ShimDb;\n\n constructor(database: ShimDb, collection: PongoCollection<T>) {\n this.collection = collection;\n this.database = database;\n }\n get db(): Db {\n return this.database as unknown as Db;\n }\n get dbName(): string {\n return this.collection.dbName;\n }\n get collectionName(): string {\n return this.collection.collectionName;\n }\n get namespace(): string {\n return `${this.dbName}.${this.collectionName}`;\n }\n get readConcern(): ReadConcern | undefined {\n return undefined;\n }\n get readPreference(): ReadPreference | undefined {\n return undefined;\n }\n get bsonOptions(): BSONSerializeOptions {\n return {};\n }\n get writeConcern(): WriteConcern | undefined {\n return undefined;\n }\n get hint(): Hint | undefined {\n return undefined;\n }\n get timeoutMS(): number | undefined {\n return undefined;\n }\n set hint(v: Hint | undefined) {\n throw new Error('Method not implemented.');\n }\n async insertOne(\n doc: OptionalUnlessRequiredId<T>,\n options?: InsertOneOptions,\n ): Promise<InsertOneResult<T>> {\n const result = await this.collection.insertOne(\n doc as unknown as PongoOptionalUnlessRequiredId<T>,\n toCollectionOperationOptions(options),\n );\n return {\n acknowledged: result.acknowledged,\n insertedId: result.insertedId as unknown as InferIdType<T>,\n };\n }\n async insertMany(\n docs: OptionalUnlessRequiredId<T>[],\n options?: BulkWriteOptions,\n ): Promise<InsertManyResult<T>> {\n const result = await this.collection.insertMany(\n docs as unknown as PongoOptionalUnlessRequiredId<T>[],\n toCollectionOperationOptions(options),\n );\n return {\n acknowledged: result.acknowledged,\n insertedIds: result.insertedIds as unknown as InferIdType<T>[],\n insertedCount: result.insertedCount,\n };\n }\n bulkWrite(\n _operations: AnyBulkWriteOperation<T>[],\n _options?: BulkWriteOptions,\n ): Promise<BulkWriteResult> {\n throw new Error('Method not implemented.');\n }\n async updateOne(\n filter: Filter<T>,\n update: Document[] | UpdateFilter<T>,\n options?: UpdateOptions,\n ): Promise<UpdateResult<T>> {\n const result = await this.collection.updateOne(\n filter as unknown as PongoFilter<T>,\n update as unknown as PongoUpdate<T>,\n toCollectionOperationOptions(options),\n );\n\n return {\n acknowledged: result.acknowledged,\n matchedCount: result.matchedCount,\n modifiedCount: result.modifiedCount,\n upsertedCount: result.upsertedCount,\n upsertedId: result.upsertedId as unknown as InferIdType<T>,\n };\n }\n async replaceOne(\n filter: Filter<T>,\n document: WithoutId<T>,\n options?: ReplaceOptions,\n ): Promise<UpdateResult<T>> {\n const result = await this.collection.replaceOne(\n filter as unknown as PongoFilter<T>,\n document,\n {\n ...toCollectionOperationOptions(options),\n upsert: options?.upsert ?? false,\n },\n );\n\n return {\n acknowledged: result.acknowledged,\n matchedCount: result.matchedCount,\n modifiedCount: result.modifiedCount,\n upsertedCount: result.upsertedCount,\n upsertedId: result.upsertedId as unknown as InferIdType<T>,\n };\n }\n async updateMany(\n filter: Filter<T>,\n update: Document[] | UpdateFilter<T>,\n options?: UpdateOptions,\n ): Promise<UpdateResult<T>> {\n const result = await this.collection.updateMany(\n filter as unknown as PongoFilter<T>,\n update as unknown as PongoUpdate<T>,\n toCollectionOperationOptions(options),\n );\n\n return {\n acknowledged: result.acknowledged,\n matchedCount: result.matchedCount,\n modifiedCount: result.modifiedCount,\n upsertedCount: 0,\n upsertedId: null,\n };\n }\n async deleteOne(\n filter?: Filter<T>,\n options?: DeleteOptions,\n ): Promise<DeleteResult> {\n const result = await this.collection.deleteOne(\n filter as PongoFilter<T>,\n toCollectionOperationOptions(options),\n );\n\n return {\n acknowledged: result.acknowledged,\n deletedCount: result.deletedCount,\n };\n }\n async deleteMany(\n filter?: Filter<T>,\n options?: DeleteOptions,\n ): Promise<DeleteResult> {\n const result = await this.collection.deleteMany(\n filter as PongoFilter<T>,\n toCollectionOperationOptions(options),\n );\n\n return {\n acknowledged: result.acknowledged,\n deletedCount: result.deletedCount,\n };\n }\n async rename(\n newName: string,\n options?: RenameOptions,\n ): Promise<Collection<Document>> {\n await this.collection.rename(\n newName,\n toCollectionOperationOptions(options),\n );\n\n return this as unknown as Collection<Document>;\n }\n drop(options?: DropCollectionOptions): Promise<boolean> {\n return this.collection.drop(toCollectionOperationOptions(options));\n }\n findOne(): Promise<WithId<T> | null>;\n findOne(filter: Filter<T>): Promise<WithId<T> | null>;\n findOne(filter: Filter<T>, options: FindOptions): Promise<WithId<T> | null>;\n findOne<TS = T>(): Promise<TS | null>;\n findOne<TS = T>(filter: Filter<TS>): Promise<TS | null>;\n findOne<TS = T>(\n filter: Filter<TS>,\n options?: FindOptions,\n ): Promise<TS | null>;\n async findOne(\n filter?: unknown,\n options?: FindOptions,\n ): Promise<WithId<T> | T | null> {\n return await this.collection.findOne(\n filter as PongoFilter<T>,\n toCollectionOperationOptions(options),\n );\n }\n find(): MongoFindCursor<WithId<T>>;\n find(filter: Filter<T>, options?: FindOptions): MongoFindCursor<WithId<T>>;\n find<T extends Document>(\n filter: Filter<T>,\n options?: FindOptions,\n ): MongoFindCursor<T>;\n find(\n filter?: unknown,\n options?: FindOptions,\n ): MongoFindCursor<WithId<T>> | MongoFindCursor<T> {\n return new FindCursor(\n this.collection.find(filter as PongoFilter<T>, toFindOptions(options)),\n ) as unknown as MongoFindCursor<T>;\n }\n options(_options?: OperationOptions): Promise<Document> {\n throw new Error('Method not implemented.');\n }\n isCapped(_options?: OperationOptions): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n createIndex(\n _indexSpec: IndexSpecification,\n _options?: CreateIndexesOptions,\n ): Promise<string> {\n throw new Error('Method not implemented.');\n }\n createIndexes(\n _indexSpecs: IndexDescription[],\n _options?: CreateIndexesOptions,\n ): Promise<string[]> {\n throw new Error('Method not implemented.');\n }\n dropIndex(\n _indexName: string,\n _options?: CommandOperationOptions,\n ): Promise<Document> {\n throw new Error('Method not implemented.');\n }\n dropIndexes(_options?: CommandOperationOptions): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n listIndexes(_options?: AbstractCursorOptions): ListIndexesCursor {\n throw new Error('Method not implemented.');\n }\n indexExists(\n _indexes: string | string[],\n _options?: AbstractCursorOptions,\n ): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n indexInformation(\n options: IndexInformationOptions & { full: true },\n ): Promise<IndexDescriptionInfo[]>;\n indexInformation(\n options: IndexInformationOptions & { full?: false | undefined },\n ): Promise<IndexDescriptionCompact>;\n indexInformation(\n options: IndexInformationOptions,\n ): Promise<IndexDescriptionCompact | IndexDescriptionInfo[]>;\n indexInformation(): Promise<IndexDescriptionCompact>;\n indexInformation(\n _options?: unknown,\n ):\n | Promise<IndexDescriptionInfo[]>\n | Promise<IndexDescriptionCompact>\n | Promise<IndexDescriptionCompact | IndexDescriptionInfo[]> {\n throw new Error('Method not implemented.');\n }\n estimatedDocumentCount(\n options?: EstimatedDocumentCountOptions,\n ): Promise<number> {\n return this.collection.countDocuments(\n {},\n toCollectionOperationOptions(options),\n );\n }\n countDocuments(\n filter?: Filter<T>,\n options?: CountDocumentsOptions,\n ): Promise<number> {\n return this.collection.countDocuments(\n filter as PongoFilter<T>,\n toCollectionOperationOptions(options),\n );\n }\n distinct<Key extends '_id' | keyof EnhancedOmit<T, '_id'>>(\n key: Key,\n ): Promise<Flatten<WithId<T>[Key]>[]>;\n distinct<Key extends '_id' | keyof EnhancedOmit<T, '_id'>>(\n key: Key,\n filter: Filter<T>,\n ): Promise<Flatten<WithId<T>[Key]>[]>;\n distinct<Key extends '_id' | keyof EnhancedOmit<T, '_id'>>(\n key: Key,\n filter: Filter<T>,\n options: CommandOperationOptions,\n ): Promise<Flatten<WithId<T>[Key]>[]>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n distinct(key: string): Promise<any[]>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n distinct(key: string, filter: Filter<T>): Promise<any[]>;\n distinct(\n key: string,\n filter: Filter<T>,\n options: CommandOperationOptions, // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<any[]>;\n distinct(\n _key: unknown,\n _filter?: unknown,\n _options?: unknown,\n ):\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/consistent-type-imports\n Promise<any[]> | Promise<import('mongodb').Flatten<WithId<T>[Key]>[]> {\n throw new Error('Method not implemented.');\n }\n indexes(\n options: IndexInformationOptions & { full?: true | undefined },\n ): Promise<IndexDescriptionInfo[]>;\n indexes(\n options: IndexInformationOptions & { full: false },\n ): Promise<IndexDescriptionCompact>;\n indexes(\n options: IndexInformationOptions,\n ): Promise<IndexDescriptionCompact | IndexDescriptionInfo[]>;\n indexes(options?: AbstractCursorOptions): Promise<IndexDescriptionInfo[]>;\n indexes(\n _options?: unknown,\n ):\n | Promise<IndexDescriptionInfo[]>\n | Promise<IndexDescriptionCompact>\n | Promise<IndexDescriptionCompact | IndexDescriptionInfo[]> {\n throw new Error('Method not implemented.');\n }\n findOneAndDelete(\n filter: Filter<T>,\n options: FindOneAndDeleteOptions & { includeResultMetadata: true },\n ): Promise<ModifyResult<T>>;\n findOneAndDelete(\n filter: Filter<T>,\n options: FindOneAndDeleteOptions & { includeResultMetadata: false },\n ): Promise<WithId<T> | null>;\n findOneAndDelete(\n filter: Filter<T>,\n options: FindOneAndDeleteOptions,\n ): Promise<WithId<T> | null>;\n findOneAndDelete(filter: Filter<T>): Promise<WithId<T> | null>;\n findOneAndDelete(\n filter: unknown,\n options?: FindOneAndDeleteOptions,\n ): Promise<WithId<T> | null | ModifyResult<T>> {\n return this.collection.findOneAndDelete(\n filter as PongoFilter<T>,\n toCollectionOperationOptions(options),\n ) as Promise<WithId<T> | null>;\n }\n findOneAndReplace(\n filter: Filter<T>,\n replacement: WithoutId<T>,\n options: FindOneAndReplaceOptions & { includeResultMetadata: true },\n ): Promise<ModifyResult<T>>;\n findOneAndReplace(\n filter: Filter<T>,\n replacement: WithoutId<T>,\n options: FindOneAndReplaceOptions & { includeResultMetadata: false },\n ): Promise<WithId<T> | null>;\n findOneAndReplace(\n filter: Filter<T>,\n replacement: WithoutId<T>,\n options: FindOneAndReplaceOptions,\n ): Promise<WithId<T> | null>;\n findOneAndReplace(\n filter: Filter<T>,\n replacement: WithoutId<T>,\n ): Promise<WithId<T> | null>;\n findOneAndReplace(\n filter: unknown,\n replacement: unknown,\n options?: FindOneAndReplaceOptions,\n ): Promise<WithId<T> | null | ModifyResult<T>> {\n return this.collection.findOneAndReplace(\n filter as PongoFilter<T>,\n replacement as WithoutId<T>,\n toCollectionOperationOptions(options),\n ) as Promise<WithId<T> | null>;\n }\n findOneAndUpdate(\n filter: Filter<T>,\n update: UpdateFilter<T>,\n options: FindOneAndUpdateOptions & { includeResultMetadata: true },\n ): Promise<ModifyResult<T>>;\n findOneAndUpdate(\n filter: Filter<T>,\n update: UpdateFilter<T>,\n options: FindOneAndUpdateOptions & { includeResultMetadata: false },\n ): Promise<WithId<T> | null>;\n findOneAndUpdate(\n filter: Filter<T>,\n update: UpdateFilter<T>,\n options: FindOneAndUpdateOptions,\n ): Promise<WithId<T> | null>;\n findOneAndUpdate(\n filter: Filter<T>,\n update: UpdateFilter<T>,\n ): Promise<WithId<T> | null>;\n findOneAndUpdate(\n filter: unknown,\n update: unknown,\n options?: FindOneAndUpdateOptions,\n ): Promise<WithId<T> | null | ModifyResult<T>> {\n return this.collection.findOneAndUpdate(\n filter as PongoFilter<T>,\n update as PongoUpdate<T>,\n toCollectionOperationOptions(options),\n ) as Promise<WithId<T> | null>;\n }\n aggregate<T extends Document = Document>(\n _pipeline?: Document[],\n _options?: AggregateOptions,\n ): AggregationCursor<T> {\n throw new Error('Method not implemented.');\n }\n watch<\n TLocal extends Document = T,\n TChange extends Document = ChangeStreamDocument<TLocal>,\n >(\n _pipeline?: Document[],\n _options?: ChangeStreamOptions,\n ): ChangeStream<TLocal, TChange> {\n throw new Error('Method not implemented.');\n }\n initializeUnorderedBulkOp(\n _options?: BulkWriteOptions,\n ): UnorderedBulkOperation {\n throw new Error('Method not implemented.');\n }\n initializeOrderedBulkOp(_options?: BulkWriteOptions): OrderedBulkOperation {\n throw new Error('Method not implemented.');\n }\n count(filter?: Filter<T>, options?: CountOptions): Promise<number> {\n return this.collection.countDocuments(\n (filter as PongoFilter<T>) ?? {},\n toCollectionOperationOptions(options),\n );\n }\n listSearchIndexes(\n options?: ListSearchIndexesOptions,\n ): ListSearchIndexesCursor;\n listSearchIndexes(\n name: string,\n options?: ListSearchIndexesOptions,\n ): ListSearchIndexesCursor;\n listSearchIndexes(\n _name?: unknown,\n _options?: unknown,\n ): ListSearchIndexesCursor {\n throw new Error('Method not implemented.');\n }\n createSearchIndex(_description: SearchIndexDescription): Promise<string> {\n throw new Error('Method not implemented.');\n }\n createSearchIndexes(\n _descriptions: SearchIndexDescription[],\n ): Promise<string[]> {\n throw new Error('Method not implemented.');\n }\n dropSearchIndex(_name: string): Promise<void> {\n throw new Error('Method not implemented.');\n }\n updateSearchIndex(_name: string, _definition: Document): Promise<void> {\n throw new Error('Method not implemented.');\n }\n\n async createCollection(): Promise<void> {\n await this.collection.createCollection();\n }\n async handle(\n id: ObjectId,\n handle: DocumentHandler<T>,\n options?: HandleOptions,\n ): Promise<PongoHandleResult<T>> {\n return this.collection.handle(id.toString(), handle, options);\n }\n}\n","import type { Collection as MongoCollection, ObjectId } from 'mongodb';\nimport type { Document } from 'mongodb';\nimport type {\n DocumentHandler,\n HandleOptions,\n PongoDb,\n PongoDBCollectionOptions,\n PongoHandleResult,\n} from '../core';\nimport { Collection } from './mongoCollection';\n\nexport class Db {\n private pongoDb: PongoDb;\n constructor(pongoDb: PongoDb) {\n this.pongoDb = pongoDb;\n }\n\n get databaseName(): string {\n return this.pongoDb.databaseName;\n }\n\n collection<T extends Document>(\n collectionName: string,\n options?: PongoDBCollectionOptions<T>,\n ): MongoCollection<T> & {\n handle(\n id: ObjectId,\n handle: DocumentHandler<T>,\n options?: HandleOptions,\n ): Promise<PongoHandleResult<T>>;\n } {\n return new Collection<T>(\n this,\n this.pongoDb.collection<T>(collectionName, options),\n );\n }\n}\n","import {\n parseConnectionString,\n toDatabaseDriverType,\n} from '@event-driven-io/dumbo';\nimport type { ClientSessionOptions } from 'http2';\nimport type { ClientSession, WithSessionCallback } from 'mongodb';\nimport {\n pongoClient,\n pongoSession,\n type AnyPongoDriver,\n type PongoClient,\n type PongoClientOptions,\n type PongoClientSchema,\n} from '../core';\nimport { Db } from './mongoDb';\n\nexport class MongoClient<\n DatabaseDriverType extends AnyPongoDriver = AnyPongoDriver,\n TypedClientSchema extends PongoClientSchema = PongoClientSchema,\n> {\n private pongoClient: PongoClient;\n\n constructor(\n options: PongoClientOptions<DatabaseDriverType, TypedClientSchema>,\n );\n constructor(\n connectionString: string,\n options?: Omit<\n PongoClientOptions<DatabaseDriverType, TypedClientSchema>,\n 'connectionString'\n > & {\n driver?: AnyPongoDriver;\n },\n );\n constructor(\n connectionStringOrOptions:\n string | PongoClientOptions<DatabaseDriverType, TypedClientSchema>,\n options?: Omit<\n PongoClientOptions<DatabaseDriverType, TypedClientSchema>,\n 'connectionString'\n > & {\n driver?: AnyPongoDriver;\n },\n ) {\n if (typeof connectionStringOrOptions !== 'string') {\n this.pongoClient = pongoClient(connectionStringOrOptions);\n return;\n }\n\n const { databaseType, driverName } = parseConnectionString(\n connectionStringOrOptions,\n );\n\n const driver =\n options?.driver ??\n pongoDriverRegistry.tryGet(\n toDatabaseDriverType(databaseType, driverName),\n );\n\n if (driver === null) {\n throw new Error(\n `No database driver registered for ${databaseType} with name ${driverName}`,\n );\n }\n\n this.pongoClient = pongoClient({\n ...(options ?? {}),\n ...{ connectionString: connectionStringOrOptions },\n driver,\n } as unknown as PongoClientOptions<\n PongoClientOptions<DatabaseDriverType, TypedClientSchema>['driver'] &\n AnyPongoDriver,\n TypedClientSchema\n >);\n }\n\n async connect() {\n await this.pongoClient.connect();\n return this;\n }\n\n async close() {\n await this.pongoClient.close();\n }\n\n db(dbName?: string): Db {\n return new Db(this.pongoClient.db(dbName));\n }\n startSession(_options?: ClientSessionOptions): ClientSession {\n return pongoSession() as unknown as ClientSession;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n withSession<T = any>(_executor: WithSessionCallback<T>): Promise<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n withSession<T = any>(\n _options: ClientSessionOptions,\n _executor: WithSessionCallback<T>,\n ): Promise<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async withSession<T = any>(\n optionsOrExecutor: ClientSessionOptions | WithSessionCallback<T>,\n executor?: WithSessionCallback<T>,\n ): Promise<T> {\n const callback =\n typeof optionsOrExecutor === 'function' ? optionsOrExecutor : executor!;\n\n const session = pongoSession() as unknown as ClientSession;\n\n try {\n return await callback(session);\n } finally {\n await session.endSession();\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAa,aAAb,MAA2B;CACzB,AAAQ;CACR,AAAQ,YAAwB;CAChC,AAAQ,QAAgB;CAExB,YAAY,WAAyB;AACnC,OAAK,uBAAuB;;CAG9B,MAAM,UAAwB;AAC5B,SAAO,KAAK,eAAe;;CAG7B,MAAM,QAAQ,UAA2C;EACvD,MAAM,OAAO,MAAM,KAAK,eAAe;AAEvC,OAAK,MAAM,OAAO,KAChB,UAAS,IAAI;AAEf,SAAO,QAAQ,SAAS;;CAG1B,UAAmB;AACjB,MAAI,KAAK,cAAc,KAAM,OAAM,MAAM,iCAAiC;AAC1E,SAAO,KAAK,QAAQ,KAAK,UAAU;;CAGrC,MAAM,OAA0B;EAC9B,MAAM,OAAO,MAAM,KAAK,eAAe;AACvC,SAAO,KAAK,SAAS,GAAI,KAAK,KAAK,YAAY,OAAQ;;CAGzD,MAAc,gBAA8B;AAC1C,OAAK,YAAY,MAAM,KAAK;AAC5B,SAAO,KAAK;;;;;;AC3BhB,MAAa,qBAAqB,YAGhB;CAChB,MAAM,EAAE,UAAU,UAAU;CAE5B,MAAM,WAAW,OAAgB,cAAsB;AACrD,SAAO,UAAU,OAAO,UAAU;;CAEpC,IAAI,WAAW;AAEf,QAAO;EACL,WAAW,SAAS;EACpB,MAAM,IACJ,KACiC;AACjC,OAAI;IACF,MAAM,SAAS,MAAM,SAAS,IAAS,IAAI;AAC3C,QAAI,WAAW,OACb,QAAO,QAAQ,IAAI;QAEnB,QAAO,SAAS,IAAI;AAEtB,WAAO;YACA,OAAO;AACd,YAAQ,OAAO,MAAM;AACrB,WAAO,SAAS,IAAI;AACpB;;;EAIJ,MAAM,QAAQ,MAAM;AAClB,OAAI;AACF,WAAO,MAAM,SAAS,QAAQ,KAAK;YAC5B,OAAO;AACd,YAAQ,OAAO,UAAU;AACzB,WAAO,EAAE;;;EAIb,MAAM,IAAI,KAAK,OAAO;AACpB,OAAI;AACF,UAAM,SAAS,IAAI,KAAK,MAAM;YACvB,OAAO;AACd,YAAQ,OAAO,MAAM;;;EAIzB,MAAM,QAAQ,SAAS;AACrB,OAAI;AACF,UAAM,SAAS,QAAQ,QAAQ;YACxB,OAAO;AACd,YAAQ,OAAO,UAAU;;;EAI7B,MAAM,OAAO,KAAK,SAAS;AACzB,OAAI;AACF,UAAM,SAAS,OAAO,KAAK,QAAQ;YAC5B,OAAO;AACd,YAAQ,OAAO,SAAS;;;EAI5B,MAAM,WAAW,MAAM,SAAS;AAC9B,OAAI;AACF,UAAM,SAAS,WAAW,MAAM,QAAQ;YACjC,OAAO;AACd,YAAQ,OAAO,aAAa;;;EAIhC,MAAM,OAAO,KAAK;AAChB,OAAI;AACF,UAAM,SAAS,OAAO,IAAI;AAC1B,WAAO,UAAU,IAAI;YACd,OAAO;AACd,YAAQ,OAAO,SAAS;;;EAI5B,MAAM,WAAW,MAAM;AACrB,OAAI;AACF,UAAM,SAAS,WAAW,KAAK;AAC/B,SAAK,MAAM,OAAO,KAAM,QAAO,UAAU,IAAI;YACtC,OAAO;AACd,YAAQ,OAAO,aAAa;;;EAIhC,QAAQ;AACN,UAAO,SAAS,OAAO;;EAGzB,QAAQ;AACN,OAAI,SAAU;AAEd,cAAW;AACX,UAAO,SAAS,OAAO;;EAE1B;;;;;ACxGH,MAAa,yBAAqC;CAChD,MAAM,wBAAQ,IAAI,KAAmC;AAErD,QAAO;EACL,WAAW;EACX,MACE,QAEA,QAAQ,QACN,MAAM,IAAI,IAAI,GAAI,MAAM,IAAI,IAAI,GAAkB,OACnD;EACH,UACE,SAEA,KAAK,KAAK,MACR,MAAM,IAAI,EAAE,GAAI,MAAM,IAAI,EAAE,GAAkB,OAC/C;EACH,MAAM,KAAK,UAAU;AACnB,SAAM,IAAI,KAAK,MAAM;;EAEvB,UAAU,YAAY;AACpB,QAAK,MAAM,EAAE,KAAK,WAAW,QAAS,OAAM,IAAI,KAAK,MAAM;;EAE7D,SAAS,KAAK,aAAa;AAEzB,SAAM,OAAO,IAAI;;EAMnB,aAAa,MAAM,aAAa;AAE9B,QAAK,MAAM,OAAO,KAAM,OAAM,OAAO,IAAI;;EAQ3C,SAAS,QAAQ;AACf,SAAM,OAAO,IAAI;;EAEnB,aAAa,SAAS;AACpB,QAAK,MAAM,OAAO,KAAM,OAAM,OAAO,IAAI;;EAE3C,aAAa;AACX,SAAM,OAAO;;EAEf,aAAa;AACX,SAAM,OAAO;;EAEhB;;;;;AC/CH,MAAM,yBAIF,EACF,KAAK,KACN;AAED,MAAa,YAAY,YAA0C;CACjE,MAAM,QAAQ,IAAIA,mBAAgD;EAChE,GAAG;EACH,GAAG;EACJ,CAAC;AAEF,QAAO;EACL,WAAW;EACX,MACE,QACyC;GACzC,MAAM,QAAQ,MAAM,IAAI,IAAI;AAC5B,OAAI,UAAU,OAAW,QAAO;AAChC,UAAO,MAAM;;EAEf,UACE,SAEA,KAAK,KAAK,MAAM;GACd,MAAM,QAAQ,MAAM,IAAI,EAAE;AAC1B,OAAI,UAAU,OAAW,QAAO;AAChC,UAAO,MAAM;IACb;EACJ,MAAM,KAAK,UAAU;AACnB,SAAM,IAAI,KAAK,EAAE,KAAK,OAAO,CAAC;;EAEhC,UAAU,YAAY;AACpB,QAAK,MAAM,EAAE,KAAK,WAAW,QAC3B,OAAM,IAAI,KAAK,EAAE,KAAK,OAAO,CAAC;;EAGlC,SAAS,KAAK,aAAa;AACzB,SAAM,OAAO,IAAI;;EAQnB,WAAW,MAAM,UAAU;AACzB,QAAK,MAAM,OAAO,KAChB,OAAM,OAAO,IAAI;;EASrB,SAAS,QAAQ;AACf,SAAM,OAAO,IAAI;;EAEnB,aAAa,SAAS;AACpB,QAAK,MAAM,OAAO,KAAM,OAAM,OAAO,IAAI;;EAE3C,aAAa;AACX,SAAM,OAAO;;EAEf,aAAa;AACX,SAAM,OAAO;;EAEhB;;;;;AC9EH,MAAa,oBAAgC;CAC3C,WAAW;CACX,WAAW;CACX,WAAW;CACX,cAAc;CACd,cAAc;CACd,UAAU,SAAS,KAAK,UAAU,OAAU;CAC5C,eAAe;CACf,kBAAkB;CAClB,kBAAkB;CAClB,aAAa;CACb,aAAa;CACd;;;;ACkDD,MAAM,iBAAgC,EAAE,MAAM,aAAa;AAE3D,MAAa,cACX,YACe;AACf,KAAI,YAAY,UAAa,YAAY,WAAY,QAAO;AAE5D,KAAI,eAAe,QAAS,QAAO;CAEnC,MAAM,SAAS,WAAW;AAE1B,KAAI,OAAO,SAAS,eAAgB,QAAO,kBAAkB;AAI7D,QAAO,kBAAkB,EAAE,UAFf,SAAS,OAEmB,EAAE,CAAC;;;;;ACM7C,MAAa,yBAAyB,YAET;CAC3B,MAAM,aAAa,SAAS,SAAS,kBAAkB;CACvD,MAAM,aAA+B,EAAE;AAiIvC,QAAO;EA9HL,MAAM;EAEN,IAAI,KAA4B;AAC9B,UAAO,WAAW,IAAI,IAAI;;EAG5B,IACE,KACA,OACA,SACA;GACA,MAAM,EAAE,cAAc;AACtB,cAAW,IAAI,KAAK,MAAM;AAC1B,cAAW,KAAK;IACd,MAAM;IACN;IACA;IACA;IACD,CAAC;;EAGJ,OACE,KACA,SACA,SACA;GACA,MAAM,EAAE,cAAc;AACtB,cAAW,OAAO,KAAK,QAAQ;AAC/B,cAAW,KAAK;IACd,MAAM;IACN;IACA;IACA;IACD,CAAC;;EAGJ,OACE,KACA,SACA;AACA,cAAW,OAAO,IAAI;AACtB,cAAW,KAAK;IAAE,MAAM;IAAU;IAAK,WAAW,QAAQ;IAAW,CAAC;;EAGxE,QAAQ,MAA+B;AACrC,UAAO,WAAW,QAAQ,KAAK;;EAGjC,QACE,SACA,SACA;AACA,cAAW,QAAQ,QAAQ;AAC3B,cAAW,KAAK;IACd,MAAM;IACN;IACA,WAAW,QAAQ;IACpB,CAAC;;EAGJ,WACE,MACA,SACA,SACA;GACA,MAAM,EAAE,cAAc;AACtB,cAAW,WAAW,MAAM,QAAQ;AACpC,cAAW,KAAK;IACd,MAAM;IACN;IACA;IACA;IACD,CAAC;;EAGJ,WACE,MACA,SACA;AACA,cAAW,WAAW,KAAK;AAC3B,cAAW,KAAK;IACd,MAAM;IACN;IACA,WAAW,QAAQ;IACpB,CAAC;;EAGJ,QAAQ;AACN,cAAW,OAAO;AAClB,cAAW,SAAS;;EAGtB,MAAM,SAAS;AACb,QAAK,MAAM,MAAM,WACf,SAAQ,GAAG,MAAX;IACE,KAAK;AACH,WAAM,GAAG,UAAU,IAAI,GAAG,KAAK,GAAG,MAAM;AACxC;IACF,KAAK;AACH,WAAM,GAAG,UAAU,QAAQ,GAAG,QAAQ;AACtC;IACF,KAAK;AACH,WAAM,GAAG,UAAU,OACjB,GAAG,KACH,GAAG,QACJ;AACD;IACF,KAAK;AACH,WAAM,GAAG,UAAU,WACjB,GAAG,MACH,GAAG,QACJ;AACD;IACF,KAAK;AACH,WAAM,GAAG,UAAU,OAAO,GAAG,IAAI;AACjC;IACF,KAAK;AACH,WAAM,GAAG,UAAU,WAAW,GAAG,KAAK;AACtC;;AAGN,cAAW,OAAO;AAClB,cAAW,SAAS;;EAIZ;;;;;AChNd,MAAa,sBAGX,EACA,QACA,kBAII;CACJ,MAAM,4BAAY,IAAI,KAAsB;CAE5C,MAAM,yBAAyB,WAC7B,OAAO,OAAO,aAAa,OAAO,EAAE,CAAC,CAAC,MAAM,MAAM,EAAE,SAAS,OAAO;AAEtE,QAAO;EACL,cAME,kBASa;GACb,MAAM,2DAA+B,OAAO,WAAW;GACvD,MAAM,SACJ,cAAc,gBACd,UAAU,oBACR,sBAAsB,gBACjB,cAAc,mBACf,OACL,IACD;GAEF,MAAM,WAAW,UAAU,IAAI,OAAO;AACtC,OAAI,SAAU,QAAO;GAErB,MAAM,aAAa,sBAAsB,cAAc,aAAa;GAEpE,MAAM,QAAkB,OAAO,gBAAgB;IAC7C,GAAG;IACH,cAAc;IACd,QAAQ;KACN,GAAG,cAAc;KACjB,GAAI,aAAa,EAAE,YAAY,GAAG,EAAE;KACrC;IACF,CAAC;AACF,aAAU,IAAI,QAAQ,MAAM;AAC5B,UAAO;;EAGT,WAAuB,MAAM,KAAK,UAAU,QAAQ,CAAC;EAErD,SAAS,SAA2D;AAClE,UAAO,QAAQ,IACb,MAAM,KAAK,UAAU,QAAQ,CAAC,CAC3B,KAAK,MAAM,EAAc,CACzB,IAAI,KAAK,CACb;;EAEJ;;;;;ACnBH,MAAM,yBACJ,UAC8B,EAC9B,MACD;AAED,sBAAsB,QACpB,oBAEA,gBAAgB,QACb,KAAK,oBACH,IAAI,kBAAkB,YAAY,WAAW,eAAe,EAC7D,MAEF,EAAE,CACH;AASH,SAAS,cACP,mBACA,aACkB;AAClB,KAAI,gBAAgB,QAAW;AAC7B,MAAI,OAAO,sBAAsB,SAC/B,OAAM,IAAI,MAAM,4CAA4C;AAE9D,SAAO,EACL,aAAa,mBACd;;AAGH,QAAO,qBAAqB,OAAO,sBAAsB,WACrD;EACE,MAAM;EACN;EACD,GACD,EAAe,aAAa;;AAGlC,cAAc,QACZ,cACA,oBAEA,eACI,cAAc,cAAc,sBAAsB,KAAK,gBAAgB,CAAC,GACxE,cAAc,sBAAsB,KAAK,gBAAgB,CAAC;AAEhE,MAAM,qBACJ,SAC0B,EAC1B,KACD;AAED,MAAa,cAAc;CACzB,QAAQ;CACR,IAAI;CACJ,YAAY;CACb;AA8BD,MAAa,yBAKX,QACA,WACmE;AACnE,KAAI,CAAC,OACH,QAAO;CAMT,MAAM,UAAU,OAAO,KAAK,OAAO,IAAI;AAEvC,QAAO,IAAI,MACT,QAGA,EACE,IAAI,QAAQ,MAAc;AACxB,MAAI,QAAQ,SAAS,KAAK,CAAE,QAAO,OAAO,GAAG,OAAO,IAAI,OAAO,KAAK;AAEpE,SAAO,OAAO;IAEjB,CACF;;;;;ACvHH,MAAa,4BAA4B;CACvC,MAAM,0BAAU,IAAI,KAGjB;CAEH,MAAM,YACJ,YACA,WACS;EACT,MAAM,QAAQ,QAAQ,IAAI,WAAW;AACrC,MACE,UACC,OAAO,UAAU,cAAc,OAAO,WAAW,YAElD;AAEF,UAAQ,IAAI,YAAY,OAAO;;CAGjC,MAAM,aAAa,OACjB,eAC2B;EAC3B,MAAM,QAAQ,QAAQ,IAAI,WAAW;AAErC,MAAI,CAAC,MAAO,QAAO;AAEnB,MAAI,OAAO,UAAU,WAAY,QAAO;EAExC,MAAM,SAAS,MAAM,OAAO;AAE5B,WAAS,YAAY,OAAO;AAC5B,SAAO;;CAGT,MAAM,UACJ,eACkB;EAClB,MAAM,QAAQ,QAAQ,IAAI,WAAW;AACrC,SAAO,SAAS,OAAO,UAAU,aAAc,QAAmB;;CAGpE,MAAM,OAAO,eACX,QAAQ,IAAI,WAAW;AAEzB,QAAO;EACL;EACA;EACA;EACA;EACA,IAAI,sBAA4C;AAC9C,UAAO,MAAM,KAAK,QAAQ,MAAM,CAAC;;EAEpC;;AAOH,MAAaC,wBAAuB,WAAW,sBAC7C,WAAW,uBAAuB,qBAAqB;;;;AClHzD,MAAa,oBACX,YACuB;CACvB,IAAI,cAAc;CAClB,IAAI,eAAe;CACnB,IAAI,eAA8B;CAClC,IAAI,cAA0C;CAC9C,MAAM,QAAQ,uBAAuB;AAErC,QAAO;EACL;EACA,gBAAgB,OAAO,OAA8C;AACnE,OAAI,eAAe,iBAAiB,GAAG,aACrC,OAAM,IAAI,MACR,yDACD;AAEH,OAAI,eAAe,iBAAiB,GAAG,aAAc,QAAO;AAE5D,kBAAe,GAAG;AAClB,iBAAc,GAAG,aAAa;AAC9B,SAAM,YAAY,OAAO;AAEzB,UAAO;;EAET,QAAQ,YAAY;AAClB,OAAI,YAAa;AACjB,OAAI,aAAc,OAAM,IAAI,MAAM,6BAA6B;AAE/D,iBAAc;AAEd,OAAI,aAAa;AACf,UAAM,YAAY,QAAQ;AAC1B,kBAAc;;AAEhB,SAAM,MAAM,QAAQ;;EAEtB,UAAU,OAAO,UAAoB;AACnC,OAAI,YAAa,OAAM,IAAI,MAAM,wCAAwC;AACzE,OAAI,aAAc;AAElB,kBAAe;AAEf,OAAI,aAAa;AACf,UAAM,YAAY,SAAS,MAAM;AACjC,kBAAc;;AAEhB,SAAM,OAAO;;EAEf;EACA,YAAY;EACZ;EACA,IAAI,WAAW;AACb,UAAO,CAAC,eAAe,CAAC;;EAE1B,IAAI,cAAc;AAChB,OAAI,gBAAgB,KAClB,OAAM,IAAI,MAAM,sCAAsC;AAExD,UAAO,YAAY;;EAErB;EACD;;;;;ACxDH,MAAM,YACJ,gBACsC,aAAa,aAAa;AAElE,SAAS,0BACP,aAC2C;AAC3C,KAAI,CAAC,SAAS,YAAY,CAAE,OAAM,IAAI,MAAM,gCAAgC;;AAG9E,SAAS,6BACP,aAC6B;AAC7B,KAAI,SAAS,YAAY,CACvB,OAAM,IAAI,MAAM,qCAAqC;;AAGzD,MAAa,gBAAgB,YAAgD;CAC3E,MAAM,WAAW,SAAS,aAAa;CACvC,MAAM,4BACJ,SAAS,6BAA6B,EACpC,IAAI,kBAAkB;AACpB,SAAO;IAEV;CAEH,IAAI,cAAyC;CAC7C,IAAI,WAAW;CAEf,MAAM,oBAAoB,YAAsC;AAC9D,+BAA6B,YAAY;AAEzC,gBAAc,iBAAiB,WAAW,0BAA0B;;CAEtE,MAAM,oBAAoB,YAAY;AACpC,4BAA0B,YAAY;AAEtC,QAAM,YAAY,QAAQ;;CAE5B,MAAM,mBAAmB,YAAY;AACnC,4BAA0B,YAAY;AAEtC,QAAM,YAAY,UAAU;;CAG9B,MAAM,aAAa,YAA2B;AAC5C,MAAI,SAAU;AACd,aAAW;AAEX,MAAI,SAAS,YAAY,CAAE,OAAM,YAAY,UAAU;;CAGzD,MAAM,UAAU;EACd,IAAI,WAAW;AACb,UAAO;;EAET;EACA,2BAA2B,6BAA6B,EACtD,IAAI,kBAAkB;AACpB,UAAO;KAEV;EACD,IAAI,cAAc;AAChB,UAAO;;EAET,IAAI,kBAAkB;AACpB,UAAO,0BAA0B;;EAEnC;EACA,kCAAkC;EAClC,qBAAqB,SAAS,YAAY;EAC1C;EACA;EACA;EACA,iBAAiB,OACf,IACA,YACe;AACf,oBAAiB,QAAQ;AAEzB,OAAI;IACF,MAAM,SAAS,MAAM,GAAG,QAAQ;AAChC,UAAM,mBAAmB;AACzB,WAAO;YACA,OAAO;AACd,UAAM,kBAAkB;AACxB,UAAM;;;EAGX;AAED,QAAO;;;;;ACpFT,MAAa,eAIX,YAK4C;CAC5C,MAAM,EACJ,QACA,QACA,QACA,OAAO,cACP,eACA,GAAG,sBACD;CAEJ,MAAM,YAAY,mBAA+C;EAC/D;EACA,aAAa,QAAQ;EACtB,CAAC;CAEF,MAAM,aAAaC,sCAAe,KAAK,QAAQ;CAE/C,MAAM,QACJ,iBAAiB,cAAc,iBAAiB,SAC5C,aACA,WAAW,aAAa;CAE9B,MAAM,cAGF;EACF,YAAY,OAAO;EACnB,SAAS,YAAY;AACnB,SAAM,UAAU,QAAQ,OAAO,GAAG,SAAS,CAAC;AAC5C,UAAO;;EAET,OAAO,YAAY;AACjB,SAAM,UAAU,QAAQ,OAAO,GAAG,OAAO,CAAC;;EAE5C,KACE,QACA,YACuD;AAUvD,UATW,UAAU,YAAY;IAC/B,GAAG;IACH,cAAc;IACd;IACA;IACA,OAAO,SAAS,SAAS;IACzB;IACD,CAEQ;;EAEX,cAAc;EACd,aAAa,OACX,aACe;GACf,MAAM,UAAU,cAAc;AAE9B,OAAI;AACF,WAAO,MAAM,SAAS,QAAQ;aACtB;AACR,UAAM,QAAQ,YAAY;;;EAG/B;AAED,QAAO,sBAAsB,aAAa,QAAQ,WAAW;;;;;AChB/D,MAAM,gCACJ,YAEA,SAAS,UACL,EAAE,SAAS,QAAQ,SAAoC,GACvD;AAEN,MAAM,iBACJ,YACiC;AACjC,KACE,CAAC,SAAS,WACV,CAAC,SAAS,SACV,CAAC,SAAS,QACV,CAAC,SAAS,KAEV;CAGF,MAAM,mBAAqC,EAAE;AAE7C,KAAI,SAAS,QACX,kBAAiB,UAAU,QAAQ;AAErC,KAAI,SAAS,UAAU,OACrB,kBAAiB,QAAQ,QAAQ;AAEnC,KAAI,SAAS,SAAS,OACpB,kBAAiB,OAAO,QAAQ;AAElC,KAAI,SAAS,SAAS,OACpB,kBAAiB,OAAO,QAAQ;AAGlC,QAAO;;AAGT,IAAa,aAAb,MAA0E;CACxE,AAAQ;CACR,AAAQ;CAER,YAAY,UAAkB,YAAgC;AAC5D,OAAK,aAAa;AAClB,OAAK,WAAW;;CAElB,IAAI,KAAS;AACX,SAAO,KAAK;;CAEd,IAAI,SAAiB;AACnB,SAAO,KAAK,WAAW;;CAEzB,IAAI,iBAAyB;AAC3B,SAAO,KAAK,WAAW;;CAEzB,IAAI,YAAoB;AACtB,SAAO,GAAG,KAAK,OAAO,GAAG,KAAK;;CAEhC,IAAI,cAAuC;CAG3C,IAAI,iBAA6C;CAGjD,IAAI,cAAoC;AACtC,SAAO,EAAE;;CAEX,IAAI,eAAyC;CAG7C,IAAI,OAAyB;CAG7B,IAAI,YAAgC;CAGpC,IAAI,KAAK,GAAqB;AAC5B,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,MAAM,UACJ,KACA,SAC6B;EAC7B,MAAM,SAAS,MAAM,KAAK,WAAW,UACnC,KACA,6BAA6B,QAAQ,CACtC;AACD,SAAO;GACL,cAAc,OAAO;GACrB,YAAY,OAAO;GACpB;;CAEH,MAAM,WACJ,MACA,SAC8B;EAC9B,MAAM,SAAS,MAAM,KAAK,WAAW,WACnC,MACA,6BAA6B,QAAQ,CACtC;AACD,SAAO;GACL,cAAc,OAAO;GACrB,aAAa,OAAO;GACpB,eAAe,OAAO;GACvB;;CAEH,UACE,aACA,UAC0B;AAC1B,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,MAAM,UACJ,QACA,QACA,SAC0B;EAC1B,MAAM,SAAS,MAAM,KAAK,WAAW,UACnC,QACA,QACA,6BAA6B,QAAQ,CACtC;AAED,SAAO;GACL,cAAc,OAAO;GACrB,cAAc,OAAO;GACrB,eAAe,OAAO;GACtB,eAAe,OAAO;GACtB,YAAY,OAAO;GACpB;;CAEH,MAAM,WACJ,QACA,UACA,SAC0B;EAC1B,MAAM,SAAS,MAAM,KAAK,WAAW,WACnC,QACA,UACA;GACE,GAAG,6BAA6B,QAAQ;GACxC,QAAQ,SAAS,UAAU;GAC5B,CACF;AAED,SAAO;GACL,cAAc,OAAO;GACrB,cAAc,OAAO;GACrB,eAAe,OAAO;GACtB,eAAe,OAAO;GACtB,YAAY,OAAO;GACpB;;CAEH,MAAM,WACJ,QACA,QACA,SAC0B;EAC1B,MAAM,SAAS,MAAM,KAAK,WAAW,WACnC,QACA,QACA,6BAA6B,QAAQ,CACtC;AAED,SAAO;GACL,cAAc,OAAO;GACrB,cAAc,OAAO;GACrB,eAAe,OAAO;GACtB,eAAe;GACf,YAAY;GACb;;CAEH,MAAM,UACJ,QACA,SACuB;EACvB,MAAM,SAAS,MAAM,KAAK,WAAW,UACnC,QACA,6BAA6B,QAAQ,CACtC;AAED,SAAO;GACL,cAAc,OAAO;GACrB,cAAc,OAAO;GACtB;;CAEH,MAAM,WACJ,QACA,SACuB;EACvB,MAAM,SAAS,MAAM,KAAK,WAAW,WACnC,QACA,6BAA6B,QAAQ,CACtC;AAED,SAAO;GACL,cAAc,OAAO;GACrB,cAAc,OAAO;GACtB;;CAEH,MAAM,OACJ,SACA,SAC+B;AAC/B,QAAM,KAAK,WAAW,OACpB,SACA,6BAA6B,QAAQ,CACtC;AAED,SAAO;;CAET,KAAK,SAAmD;AACtD,SAAO,KAAK,WAAW,KAAK,6BAA6B,QAAQ,CAAC;;CAWpE,MAAM,QACJ,QACA,SAC+B;AAC/B,SAAO,MAAM,KAAK,WAAW,QAC3B,QACA,6BAA6B,QAAQ,CACtC;;CAQH,KACE,QACA,SACiD;AACjD,SAAO,IAAI,WACT,KAAK,WAAW,KAAK,QAA0B,cAAc,QAAQ,CAAC,CACvE;;CAEH,QAAQ,UAAgD;AACtD,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,SAAS,UAA+C;AACtD,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,YACE,YACA,UACiB;AACjB,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,cACE,aACA,UACmB;AACnB,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,UACE,YACA,UACmB;AACnB,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,YAAY,UAAsD;AAChE,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,YAAY,UAAqD;AAC/D,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,YACE,UACA,UACkB;AAClB,QAAM,IAAI,MAAM,0BAA0B;;CAY5C,iBACE,UAI4D;AAC5D,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,uBACE,SACiB;AACjB,SAAO,KAAK,WAAW,eACrB,EAAE,EACF,6BAA6B,QAAQ,CACtC;;CAEH,eACE,QACA,SACiB;AACjB,SAAO,KAAK,WAAW,eACrB,QACA,6BAA6B,QAAQ,CACtC;;CAuBH,SACE,MACA,SACA,UAGsE;AACtE,QAAM,IAAI,MAAM,0BAA0B;;CAY5C,QACE,UAI4D;AAC5D,QAAM,IAAI,MAAM,0BAA0B;;CAe5C,iBACE,QACA,SAC6C;AAC7C,SAAO,KAAK,WAAW,iBACrB,QACA,6BAA6B,QAAQ,CACtC;;CAqBH,kBACE,QACA,aACA,SAC6C;AAC7C,SAAO,KAAK,WAAW,kBACrB,QACA,aACA,6BAA6B,QAAQ,CACtC;;CAqBH,iBACE,QACA,QACA,SAC6C;AAC7C,SAAO,KAAK,WAAW,iBACrB,QACA,QACA,6BAA6B,QAAQ,CACtC;;CAEH,UACE,WACA,UACsB;AACtB,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,MAIE,WACA,UAC+B;AAC/B,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,0BACE,UACwB;AACxB,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,wBAAwB,UAAmD;AACzE,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,MAAM,QAAoB,SAAyC;AACjE,SAAO,KAAK,WAAW,eACpB,UAA6B,EAAE,EAChC,6BAA6B,QAAQ,CACtC;;CASH,kBACE,OACA,UACyB;AACzB,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,kBAAkB,cAAuD;AACvE,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,oBACE,eACmB;AACnB,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,gBAAgB,OAA8B;AAC5C,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,kBAAkB,OAAe,aAAsC;AACrE,QAAM,IAAI,MAAM,0BAA0B;;CAG5C,MAAM,mBAAkC;AACtC,QAAM,KAAK,WAAW,kBAAkB;;CAE1C,MAAM,OACJ,IACA,QACA,SAC+B;AAC/B,SAAO,KAAK,WAAW,OAAO,GAAG,UAAU,EAAE,QAAQ,QAAQ;;;;;;ACjkBjE,IAAa,KAAb,MAAgB;CACd,AAAQ;CACR,YAAY,SAAkB;AAC5B,OAAK,UAAU;;CAGjB,IAAI,eAAuB;AACzB,SAAO,KAAK,QAAQ;;CAGtB,WACE,gBACA,SAOA;AACA,SAAO,IAAI,WACT,MACA,KAAK,QAAQ,WAAc,gBAAgB,QAAQ,CACpD;;;;;;AClBL,IAAa,cAAb,MAGE;CACA,AAAQ;CAcR,YACE,2BAEA,SAMA;AACA,MAAI,OAAO,8BAA8B,UAAU;AACjD,QAAK,cAAc,YAAY,0BAA0B;AACzD;;EAGF,MAAM,EAAE,cAAc,iEACpB,0BACD;EAED,MAAM,SACJ,SAAS,UACT,oBAAoB,wDACG,cAAc,WAAW,CAC/C;AAEH,MAAI,WAAW,KACb,OAAM,IAAI,MACR,qCAAqC,aAAa,aAAa,aAChE;AAGH,OAAK,cAAc,YAAY;GAC7B,GAAI,WAAW,EAAE;GACZ,kBAAkB;GACvB;GACD,CAIC;;CAGJ,MAAM,UAAU;AACd,QAAM,KAAK,YAAY,SAAS;AAChC,SAAO;;CAGT,MAAM,QAAQ;AACZ,QAAM,KAAK,YAAY,OAAO;;CAGhC,GAAG,QAAqB;AACtB,SAAO,IAAI,GAAG,KAAK,YAAY,GAAG,OAAO,CAAC;;CAE5C,aAAa,UAAgD;AAC3D,SAAO,cAAc;;CAUvB,MAAM,YACJ,mBACA,UACY;EACZ,MAAM,WACJ,OAAO,sBAAsB,aAAa,oBAAoB;EAEhE,MAAM,UAAU,cAAc;AAE9B,MAAI;AACF,UAAO,MAAM,SAAS,QAAQ;YACtB;AACR,SAAM,QAAQ,YAAY"}
|
|
1
|
+
{"version":3,"file":"shim.cjs","names":["LRUCache","pongoDriverRegistry","JSONSerializer"],"sources":["../src/mongo/findCursor.ts","../src/core/cache/pongoCacheWrapper.ts","../src/core/cache/providers/identityMapCache.ts","../src/core/cache/providers/lruCache.ts","../src/core/cache/providers/noopCache.ts","../src/core/cache/pongoCache.ts","../src/core/cache/transactions/pongoTransactionCache.ts","../src/core/database/pongoDatabaseCache.ts","../src/core/schema/index.ts","../src/core/drivers/databaseDriver.ts","../src/core/pongoTransaction.ts","../src/core/pongoSession.ts","../src/core/pongoClient.ts","../src/mongo/mongoCollection.ts","../src/mongo/mongoDb.ts","../src/mongo/mongoClient.ts"],"sourcesContent":["export class FindCursor<T> {\n private findDocumentsPromise: Promise<T[]>;\n private documents: T[] | null = null;\n private index: number = 0;\n\n constructor(documents: Promise<T[]>) {\n this.findDocumentsPromise = documents;\n }\n\n async toArray(): Promise<T[]> {\n return this.findDocuments();\n }\n\n async forEach(callback: (doc: T) => void): Promise<void> {\n const docs = await this.findDocuments();\n\n for (const doc of docs) {\n callback(doc);\n }\n return Promise.resolve();\n }\n\n hasNext(): boolean {\n if (this.documents === null) throw Error('Error while fetching documents');\n return this.index < this.documents.length;\n }\n\n async next(): Promise<T | null> {\n const docs = await this.findDocuments();\n return this.hasNext() ? (docs[this.index++] ?? null) : null;\n }\n\n private async findDocuments(): Promise<T[]> {\n this.documents = await this.findDocumentsPromise;\n return this.documents;\n }\n}\n","import type { PongoDocument } from '../typing';\nimport type {\n CacheHooks,\n PongoCache,\n PongoDocumentCacheKey,\n} from './pongoCache';\n\nexport const pongoCacheWrapper = (options: {\n provider: PongoCache;\n hooks?: CacheHooks;\n}): PongoCache => {\n const { provider, hooks } = options;\n\n const onError = (error: unknown, operation: string) => {\n hooks?.onError?.(error, operation);\n };\n let isClosed = false;\n\n return {\n cacheType: provider.cacheType,\n async get<Doc extends PongoDocument = PongoDocument>(\n key: PongoDocumentCacheKey,\n ): Promise<Doc | null | undefined> {\n try {\n const result = await provider.get<Doc>(key);\n if (result !== undefined) {\n hooks?.onHit?.(key);\n } else {\n hooks?.onMiss?.(key);\n }\n return result;\n } catch (error) {\n onError(error, 'get');\n hooks?.onMiss?.(key);\n return undefined;\n }\n },\n\n async getMany(keys) {\n try {\n return await provider.getMany(keys);\n } catch (error) {\n onError(error, 'getMany');\n return [];\n }\n },\n\n async set(key, value) {\n try {\n await provider.set(key, value);\n } catch (error) {\n onError(error, 'set');\n }\n },\n\n async setMany(entries) {\n try {\n await provider.setMany(entries);\n } catch (error) {\n onError(error, 'setMany');\n }\n },\n\n async update(key, updater) {\n try {\n await provider.update(key, updater);\n } catch (error) {\n onError(error, 'update');\n }\n },\n\n async updateMany(keys, updater) {\n try {\n await provider.updateMany(keys, updater);\n } catch (error) {\n onError(error, 'updateMany');\n }\n },\n\n async delete(key) {\n try {\n await provider.delete(key);\n hooks?.onEvict?.(key);\n } catch (error) {\n onError(error, 'delete');\n }\n },\n\n async deleteMany(keys) {\n try {\n await provider.deleteMany(keys);\n for (const key of keys) hooks?.onEvict?.(key);\n } catch (error) {\n onError(error, 'deleteMany');\n }\n },\n\n clear() {\n return provider.clear();\n },\n\n close() {\n if (isClosed) return;\n\n isClosed = true;\n return provider.close();\n },\n };\n};\n","import type { PongoDocument } from '../../typing';\nimport type { PongoCache, PongoDocumentCacheKey } from '../pongoCache';\n\nexport const identityMapCache = (): PongoCache => {\n const store = new Map<string, PongoDocument | null>();\n\n return {\n cacheType: 'pongo:cache:identity-map',\n get: <Doc extends PongoDocument = PongoDocument>(\n key: PongoDocumentCacheKey,\n ): Promise<Doc | null | undefined> =>\n Promise.resolve(\n store.has(key) ? (store.get(key) as Doc | null) : undefined,\n ),\n getMany: <Doc extends PongoDocument = PongoDocument>(\n keys: PongoDocumentCacheKey[],\n ): (Doc | null | undefined)[] =>\n keys.map((k) =>\n store.has(k) ? (store.get(k) as Doc | null) : undefined,\n ),\n set: (key, value) => {\n store.set(key, value);\n },\n setMany: (entries) => {\n for (const { key, value } of entries) store.set(key, value);\n },\n update: (key, _updater) => {\n // TODO: Implement proper update logic instead of just setting the updater as value\n store.delete(key);\n // const existing = store.get(key);\n // if (!existing) return;\n // const updated = typeof updater === 'function' ? updater(existing) : updater;\n // store.set(key, updated);\n },\n updateMany: (keys, _updater) => {\n // TODO: Implement proper update logic instead of just setting the updater as value\n for (const key of keys) store.delete(key);\n // for (const key of keys) {\n // const existing = store.get(key);\n // if (!existing) continue;\n // const updated = typeof updater === 'function' ? updater(existing) : updater;\n // store.set(key, updated);\n // }\n },\n delete: (key) => {\n store.delete(key);\n },\n deleteMany: (keys) => {\n for (const key of keys) store.delete(key);\n },\n clear: () => {\n store.clear();\n },\n close: () => {\n store.clear();\n },\n };\n};\n","import { LRUCache } from 'lru-cache';\nimport type { MaybePromise, PongoDocument } from '../../typing';\nimport type { PongoCache, PongoDocumentCacheKey } from '../pongoCache';\n\nexport type LRUCacheOptions = Omit<\n LRUCache.Options<string, { doc: PongoDocument | null }, unknown>,\n 'max'\n> & { max?: number };\n\nconst defaultLRUCacheOptions: LRUCache.Options<\n string,\n { doc: PongoDocument | null },\n unknown\n> = {\n max: 1000,\n};\n\nexport const lruCache = (options?: LRUCacheOptions): PongoCache => {\n const cache = new LRUCache<string, { doc: PongoDocument | null }>({\n ...defaultLRUCacheOptions,\n ...options,\n });\n\n return {\n cacheType: 'pongo:cache:lru',\n get: <Doc extends PongoDocument = PongoDocument>(\n key: PongoDocumentCacheKey,\n ): MaybePromise<Doc | null | undefined> => {\n const entry = cache.get(key);\n if (entry === undefined) return undefined;\n return entry.doc as Doc | null;\n },\n getMany: <Doc extends PongoDocument = PongoDocument>(\n keys: PongoDocumentCacheKey[],\n ): (Doc | null | undefined)[] =>\n keys.map((k) => {\n const entry = cache.get(k);\n if (entry === undefined) return undefined;\n return entry.doc as Doc | null;\n }),\n set: (key, value) => {\n cache.set(key, { doc: value });\n },\n setMany: (entries) => {\n for (const { key, value } of entries) {\n cache.set(key, { doc: value });\n }\n },\n update: (key, _updater) => {\n cache.delete(key);\n // TODO: Add updater using mingo\n // const existing = cache.get(key);\n // if (existing) {\n // const updated = updater(existing);\n // cache.set(key, updated, opts?.ttl !== undefined ? { ttl: opts.ttl } : undefined);\n // }\n },\n updateMany(keys, _updater) {\n for (const key of keys) {\n cache.delete(key);\n // TODO: Add updater using mingo\n // const existing = cache.get(key);\n // if (existing) {\n // const updated = updater(existing);\n // cache.set(key, updated);\n // }\n }\n },\n delete: (key) => {\n cache.delete(key);\n },\n deleteMany: (keys) => {\n for (const key of keys) cache.delete(key);\n },\n clear: () => {\n cache.clear();\n },\n close: () => {\n cache.clear();\n },\n };\n};\n","import type { PongoCache } from '../pongoCache';\n\nexport const noopCacheProvider: PongoCache = {\n cacheType: 'pongo:cache:no-op',\n get: () => undefined,\n set: () => {},\n update: () => {},\n delete: () => {},\n getMany: (keys) => keys.map(() => undefined),\n setMany: () => {},\n updateMany: () => {},\n deleteMany: () => {},\n clear: () => {},\n close: () => {},\n};\n","import type { MaybePromise, PongoDocument, PongoUpdate } from '../typing';\nimport { pongoCacheWrapper } from './pongoCacheWrapper';\nimport type { LRUCacheOptions } from './providers';\nimport { identityMapCache, lruCache, noopCacheProvider } from './providers';\n\nexport type PongoDocumentCacheKey = `${string}:${string}:${string}`;\n\nexport type PongoCacheSetEntry<Doc extends PongoDocument = PongoDocument> = {\n key: PongoDocumentCacheKey;\n value: Doc | null;\n};\n\nexport type PongoCacheType<T extends string = string> = `pongo:cache:${T}`;\n\nexport interface PongoCache<T extends string = string> {\n cacheType: PongoCacheType<T>;\n get<Doc extends PongoDocument = PongoDocument>(\n key: PongoDocumentCacheKey,\n ): MaybePromise<Doc | null | undefined>;\n getMany<Doc extends PongoDocument = PongoDocument>(\n keys: PongoDocumentCacheKey[],\n ): MaybePromise<(Doc | null | undefined)[]>;\n set<Doc extends PongoDocument = PongoDocument>(\n key: PongoDocumentCacheKey,\n value: Doc | null,\n ): MaybePromise<void>;\n setMany(entries: PongoCacheSetEntry[]): MaybePromise<void>;\n update<Doc extends PongoDocument = PongoDocument>(\n key: PongoDocumentCacheKey,\n updater: PongoUpdate<Doc>,\n ): MaybePromise<void>;\n updateMany<Doc extends PongoDocument = PongoDocument>(\n keys: PongoDocumentCacheKey[],\n updater: PongoUpdate<Doc>,\n ): MaybePromise<void>;\n delete(key: PongoDocumentCacheKey): MaybePromise<void>;\n deleteMany(keys: PongoDocumentCacheKey[]): MaybePromise<void>;\n clear(): MaybePromise<void>;\n close(): MaybePromise<void>;\n}\n\nexport type CacheHooks = {\n onHit?(key: PongoDocumentCacheKey): void;\n onMiss?(key: PongoDocumentCacheKey): void;\n onEvict?(key: PongoDocumentCacheKey): void;\n onError?(error: unknown, operation: string): void;\n};\n\nexport type CacheType = 'in-memory' | 'identity-map';\n\nexport type CacheSettings =\n | ({\n type: 'in-memory';\n } & LRUCacheOptions)\n | {\n type: 'identity-map';\n };\n\nexport type CacheConfig = CacheSettings | 'disabled';\n\nexport type CacheOptions = {\n skipCache?: boolean;\n};\n\nconst DEFAULT_CONFIG: CacheSettings = { type: 'in-memory' };\n\nexport const pongoCache = (\n options?: CacheConfig | 'disabled' | PongoCache | undefined,\n): PongoCache => {\n if (options === undefined || options === 'disabled') return noopCacheProvider;\n\n if ('cacheType' in options) return options as PongoCache;\n\n const config = options ?? DEFAULT_CONFIG;\n\n if (config.type === 'identity-map') return identityMapCache();\n\n const raw = lruCache(config);\n\n return pongoCacheWrapper({ provider: raw });\n};\n","import type { MaybePromise, PongoUpdate } from '../../typing';\nimport type { PongoDocument } from '../../typing/operations';\nimport type {\n PongoCache,\n PongoCacheSetEntry,\n PongoCacheType,\n PongoDocumentCacheKey,\n} from '../pongoCache';\nimport { identityMapCache } from '../providers';\n\nexport type PongoTransactionCacheOperationOptions = {\n mainCache: PongoCache;\n};\n\ntype CacheOperation =\n | {\n type: 'set';\n key: PongoDocumentCacheKey;\n value: PongoDocument | null;\n mainCache: PongoCache;\n }\n | { type: 'setMany'; entries: PongoCacheSetEntry[]; mainCache: PongoCache }\n | {\n type: 'replaceMany';\n entries: PongoCacheSetEntry[];\n mainCache: PongoCache;\n }\n | {\n type: 'update';\n key: PongoDocumentCacheKey;\n updater: PongoUpdate<PongoDocument>;\n mainCache: PongoCache;\n }\n | {\n type: 'updateMany';\n keys: PongoDocumentCacheKey[];\n updater: PongoUpdate<PongoDocument>;\n mainCache: PongoCache;\n }\n | { type: 'delete'; key: PongoDocumentCacheKey; mainCache: PongoCache }\n | {\n type: 'deleteMany';\n keys: PongoDocumentCacheKey[];\n mainCache: PongoCache;\n };\n\nexport interface PongoTransactionCache<T extends string = string> {\n type: PongoCacheType<T>;\n get<Doc extends PongoDocument = PongoDocument>(\n key: PongoDocumentCacheKey,\n ): MaybePromise<Doc | null | undefined>;\n set(\n key: PongoDocumentCacheKey,\n value: PongoDocument | null,\n options: PongoTransactionCacheOperationOptions,\n ): MaybePromise<void>;\n update<Doc extends PongoDocument = PongoDocument>(\n key: PongoDocumentCacheKey,\n updater: PongoUpdate<Doc>,\n options: PongoTransactionCacheOperationOptions,\n ): MaybePromise<void>;\n delete(\n key: PongoDocumentCacheKey,\n options: PongoTransactionCacheOperationOptions,\n ): MaybePromise<void>;\n getMany<Doc extends PongoDocument = PongoDocument>(\n keys: PongoDocumentCacheKey[],\n ): MaybePromise<(Doc | null | undefined)[]>;\n setMany(\n entries: PongoCacheSetEntry[],\n options: PongoTransactionCacheOperationOptions,\n ): MaybePromise<void>;\n updateMany<Doc extends PongoDocument = PongoDocument>(\n keys: PongoDocumentCacheKey[],\n updater: PongoUpdate<Doc>,\n options: PongoTransactionCacheOperationOptions,\n ): MaybePromise<void>;\n deleteMany(\n keys: PongoDocumentCacheKey[],\n options: PongoTransactionCacheOperationOptions,\n ): MaybePromise<void>;\n clear(): MaybePromise<void>;\n commit(): Promise<void>;\n}\n\nexport const pongoTransactionCache = (options?: {\n cache?: PongoCache;\n}): PongoTransactionCache => {\n const innerCache = options?.cache ?? identityMapCache();\n const operations: CacheOperation[] = [];\n\n const cache: PongoTransactionCache = {\n type: 'pongo:cache:transaction-buffer',\n\n get(key: PongoDocumentCacheKey) {\n return innerCache.get(key);\n },\n\n set(\n key: PongoDocumentCacheKey,\n value: PongoDocument,\n options: PongoTransactionCacheOperationOptions,\n ) {\n const { mainCache } = options;\n innerCache.set(key, value);\n operations.push({\n type: 'set',\n key,\n value,\n mainCache,\n });\n },\n\n update<Doc extends PongoDocument = PongoDocument>(\n key: PongoDocumentCacheKey,\n updater: PongoUpdate<Doc>,\n options: PongoTransactionCacheOperationOptions,\n ) {\n const { mainCache } = options;\n innerCache.update(key, updater);\n operations.push({\n type: 'update',\n key,\n updater,\n mainCache,\n });\n },\n\n delete(\n key: PongoDocumentCacheKey,\n options: PongoTransactionCacheOperationOptions,\n ) {\n innerCache.delete(key);\n operations.push({ type: 'delete', key, mainCache: options.mainCache });\n },\n\n getMany(keys: PongoDocumentCacheKey[]) {\n return innerCache.getMany(keys);\n },\n\n setMany(\n entries: PongoCacheSetEntry[],\n options: PongoTransactionCacheOperationOptions,\n ) {\n innerCache.setMany(entries);\n operations.push({\n type: 'setMany',\n entries,\n mainCache: options.mainCache,\n });\n },\n\n updateMany<Doc extends PongoDocument = PongoDocument>(\n keys: PongoDocumentCacheKey[],\n updater: PongoUpdate<Doc>,\n options: PongoTransactionCacheOperationOptions,\n ) {\n const { mainCache } = options;\n innerCache.updateMany(keys, updater);\n operations.push({\n type: 'updateMany',\n keys,\n updater,\n mainCache,\n });\n },\n\n deleteMany(\n keys: PongoDocumentCacheKey[],\n options: PongoTransactionCacheOperationOptions,\n ) {\n innerCache.deleteMany(keys);\n operations.push({\n type: 'deleteMany',\n keys,\n mainCache: options.mainCache,\n });\n },\n\n clear() {\n innerCache.clear();\n operations.length = 0;\n },\n\n async commit() {\n for (const op of operations) {\n switch (op.type) {\n case 'set':\n await op.mainCache.set(op.key, op.value);\n break;\n case 'setMany':\n await op.mainCache.setMany(op.entries);\n break;\n case 'update':\n await op.mainCache.update(\n op.key,\n op.updater as unknown as PongoUpdate<PongoDocument>,\n );\n break;\n case 'updateMany':\n await op.mainCache.updateMany(\n op.keys,\n op.updater as unknown as PongoUpdate<PongoDocument>,\n );\n break;\n case 'delete':\n await op.mainCache.delete(op.key);\n break;\n case 'deleteMany':\n await op.mainCache.deleteMany(op.keys);\n break;\n }\n }\n innerCache.clear();\n operations.length = 0;\n },\n };\n\n return cache;\n};\n","import {\n getDatabaseMetadata,\n type DatabaseDriverType,\n type JSONSerializationOptions,\n type MigrationStyle,\n} from '@event-driven-io/dumbo';\nimport type { PongoDatabaseFactoryOptions, PongoDriver } from '../drivers';\nimport type { PongoClientSchema, PongoCollectionSchema } from '../schema';\nimport type { PongoDb } from '../typing';\n\nexport const PongoDatabaseCache = <\n Database extends PongoDb<DatabaseDriverType> = PongoDb<DatabaseDriverType>,\n TypedClientSchema extends PongoClientSchema = PongoClientSchema,\n>({\n driver,\n typedSchema,\n}: {\n driver: PongoDriver<Database>;\n typedSchema?: TypedClientSchema | undefined;\n}) => {\n const dbClients = new Map<string, PongoDb>();\n\n const getDatabaseDefinition = (dbName: string | undefined) =>\n Object.values(typedSchema?.dbs ?? {}).find((d) => d.name === dbName);\n\n return {\n getOrCreate: <\n CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<\n string,\n PongoCollectionSchema\n >,\n >(\n createOptions: Omit<\n PongoDatabaseFactoryOptions<CollectionsSchema>,\n 'schema'\n > &\n JSONSerializationOptions & {\n schema?: {\n autoMigration?: MigrationStyle;\n };\n },\n ): Database => {\n const metadata = getDatabaseMetadata(driver.driverType);\n const dbName =\n createOptions.databaseName ??\n metadata?.parseDatabaseName?.(\n 'connectionString' in createOptions\n ? (createOptions.connectionString as string)\n : undefined,\n ) ??\n 'db:default';\n\n const existing = dbClients.get(dbName);\n if (existing) return existing as Database;\n\n const definition = getDatabaseDefinition(createOptions.databaseName);\n\n const newDb: Database = driver.databaseFactory({\n ...createOptions,\n databaseName: dbName,\n schema: {\n ...createOptions.schema,\n ...(definition ? { definition } : {}),\n },\n });\n dbClients.set(dbName, newDb);\n return newDb;\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 type { DatabaseDriverType } from '@event-driven-io/dumbo';\nimport {\n type Document,\n type PongoClient,\n type PongoCollection,\n type PongoDb,\n type PongoDocument,\n objectEntries,\n} from '../typing';\n\nexport interface PongoCollectionSchema<\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n T extends PongoDocument = PongoDocument,\n> {\n name: string;\n}\n\n// Database schema interface\nexport interface PongoDbSchema<\n T extends Record<string, PongoCollectionSchema> = Record<\n string,\n PongoCollectionSchema\n >,\n> {\n name?: string;\n collections: T;\n}\n\nexport interface PongoClientSchema<\n T extends Record<string, PongoDbSchema> = Record<string, PongoDbSchema>,\n> {\n dbs: T;\n}\n\nexport type CollectionsMap<T extends Record<string, PongoCollectionSchema>> = {\n [K in keyof T]: PongoCollection<\n T[K] extends PongoCollectionSchema<infer U> ? U : PongoDocument\n >;\n};\n\nexport type PongoDbWithSchema<\n T extends Record<string, PongoCollectionSchema>,\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n> = CollectionsMap<T> & PongoDb<DriverType>;\n\nexport type DBsMap<\n T extends Record<string, PongoDbSchema>,\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n Database extends PongoDb<DriverType> = PongoDb<DriverType>,\n> = {\n [K in keyof T]: CollectionsMap<T[K]['collections']> & Database;\n};\n\nexport type PongoClientWithSchema<\n T extends PongoClientSchema,\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n Database extends PongoDb<DriverType> = PongoDb<DriverType>,\n> = DBsMap<T['dbs'], DriverType, Database> & PongoClient<DriverType, Database>;\n\nconst pongoCollectionSchema = <T extends PongoDocument>(\n name: string,\n): PongoCollectionSchema<T> => ({\n name,\n});\n\npongoCollectionSchema.from = (\n collectionNames: string[],\n): Record<string, PongoCollectionSchema> =>\n collectionNames.reduce(\n (acc, collectionName) => (\n (acc[collectionName] = pongoSchema.collection(collectionName)),\n acc\n ),\n {} as Record<string, PongoCollectionSchema>,\n );\n\nfunction pongoDbSchema<T extends Record<string, PongoCollectionSchema>>(\n collections: T,\n): PongoDbSchema<T>;\nfunction pongoDbSchema<T extends Record<string, PongoCollectionSchema>>(\n name: string,\n collections: T,\n): PongoDbSchema<T>;\nfunction pongoDbSchema<T extends Record<string, PongoCollectionSchema>>(\n nameOrCollections: string | T,\n collections?: T,\n): PongoDbSchema<T> {\n if (collections === undefined) {\n if (typeof nameOrCollections === 'string') {\n throw new Error('You need to provide colleciton definition');\n }\n return {\n collections: nameOrCollections,\n };\n }\n\n return nameOrCollections && typeof nameOrCollections === 'string'\n ? {\n name: nameOrCollections,\n collections,\n }\n : { collections: collections };\n}\n\npongoDbSchema.from = (\n databaseName: string | undefined,\n collectionNames: string[],\n): PongoDbSchema =>\n databaseName\n ? pongoDbSchema(databaseName, pongoCollectionSchema.from(collectionNames))\n : pongoDbSchema(pongoCollectionSchema.from(collectionNames));\n\nconst pongoClientSchema = <T extends Record<string, PongoDbSchema>>(\n dbs: T,\n): PongoClientSchema<T> => ({\n dbs,\n});\n\nexport const pongoSchema = {\n client: pongoClientSchema,\n db: pongoDbSchema,\n collection: pongoCollectionSchema,\n};\n\n// Factory function to create DB instances\nexport const proxyPongoDbWithSchema = <\n Collections extends Record<string, PongoCollectionSchema>,\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n Database extends PongoDb<DriverType> = PongoDb<DriverType>,\n>(\n pongoDb: Database,\n dbSchema: PongoDbSchema<Collections>,\n collections: Map<string, PongoCollection<Document>>,\n): PongoDbWithSchema<Collections, DriverType> & Database => {\n const collectionNames = Object.keys(dbSchema.collections);\n\n for (const collectionName of collectionNames) {\n collections.set(collectionName, pongoDb.collection(collectionName));\n }\n\n return new Proxy(\n pongoDb as Database & {\n [key: string]: unknown;\n },\n {\n get(target, prop: string) {\n return collections.get(prop) ?? target[prop];\n },\n },\n ) as PongoDbWithSchema<Collections, DriverType> & Database;\n};\n\nexport const proxyClientWithSchema = <\n TypedClientSchema extends PongoClientSchema,\n DriverType extends DatabaseDriverType = DatabaseDriverType,\n Database extends PongoDb<DriverType> = PongoDb<DriverType>,\n>(\n client: PongoClient<DriverType, Database>,\n schema: TypedClientSchema | undefined,\n): PongoClientWithSchema<TypedClientSchema, DriverType, Database> => {\n if (!schema)\n return client as PongoClientWithSchema<\n TypedClientSchema,\n DriverType,\n Database\n >;\n\n const dbNames = Object.keys(schema.dbs);\n\n return new Proxy(\n client as PongoClient<DriverType, Database> & {\n [key: string]: unknown;\n },\n {\n get(target, prop: string) {\n if (dbNames.includes(prop)) return client.db(schema.dbs[prop]?.name);\n\n return target[prop];\n },\n },\n ) as PongoClientWithSchema<TypedClientSchema, DriverType, Database>;\n};\n\nexport type PongoCollectionSchemaMetadata = {\n name: string;\n};\n\nexport type PongoDbSchemaMetadata = {\n name?: string | undefined;\n collections: PongoCollectionSchemaMetadata[];\n};\n\nexport type PongoClientSchemaMetadata = {\n databases: PongoDbSchemaMetadata[];\n database: (name?: string) => PongoDbSchemaMetadata | undefined;\n};\n\nexport const toDbSchemaMetadata = <TypedDbSchema extends PongoDbSchema>(\n schema: TypedDbSchema,\n): PongoDbSchemaMetadata => ({\n name: schema.name,\n collections: objectEntries(schema.collections).map((c) => ({\n name: c[1].name,\n })),\n});\n\nexport const toClientSchemaMetadata = <\n TypedClientSchema extends PongoClientSchema,\n>(\n schema: TypedClientSchema,\n): PongoClientSchemaMetadata => {\n const databases = objectEntries(schema.dbs).map((e) =>\n toDbSchemaMetadata(e[1]),\n );\n\n return {\n databases,\n database: (name) => databases.find((db) => db.name === name),\n };\n};\n\nexport interface PongoSchemaConfig<\n TypedClientSchema extends PongoClientSchema = PongoClientSchema,\n> {\n schema: TypedClientSchema;\n}\n","import type {\n DatabaseDriverType,\n JSONSerializationOptions,\n JSONSerializer,\n MigrationStyle,\n} from '@event-driven-io/dumbo';\nimport type { CacheConfig, PongoCache } from '../cache';\nimport type { PongoCollectionSchema, PongoDbSchema } from '../schema';\nimport type { AnyPongoDb, PongoDb } from '../typing';\n\nexport type PongoDriverOptions<ConnectionOptions = unknown> = {\n connectionOptions?: ConnectionOptions | undefined;\n} & JSONSerializationOptions;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyPongoDriverOptions = PongoDriverOptions<any>;\n\nexport type PongoDatabaseFactoryOptions<\n CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<\n string,\n PongoCollectionSchema\n >,\n DriverOptions extends AnyPongoDriverOptions = AnyPongoDriverOptions,\n> = {\n databaseName?: string | undefined;\n schema?:\n | {\n autoMigration?: MigrationStyle;\n definition?: PongoDbSchema<CollectionsSchema>;\n }\n | undefined;\n serializer: JSONSerializer;\n errors?: { throwOnOperationFailures?: boolean } | undefined;\n cache?: CacheConfig | 'disabled' | PongoCache | undefined;\n} & DriverOptions;\n\nexport interface PongoDriver<\n Database extends AnyPongoDb = AnyPongoDb,\n DriverOptions extends AnyPongoDriverOptions = AnyPongoDriverOptions,\n> {\n driverType: Database['driverType'];\n databaseFactory<\n CollectionsSchema extends Record<string, PongoCollectionSchema> = Record<\n string,\n PongoCollectionSchema\n >,\n >(\n options: PongoDatabaseFactoryOptions<CollectionsSchema, DriverOptions>,\n ): Database & PongoDb<Database['driverType']>;\n}\n\nexport type AnyPongoDriver = PongoDriver<AnyPongoDb, AnyPongoDriverOptions>;\n\nexport type ExtractPongoDriverOptions<DatabaseDriver> =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n DatabaseDriver extends PongoDriver<any, infer O> ? O : never;\n\nexport type ExtractPongoDatabaseTypeFromDriver<DatabaseDriver> =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n DatabaseDriver extends PongoDriver<infer D, any> ? D : never;\n\nexport const PongoDriverRegistry = () => {\n const drivers = new Map<\n DatabaseDriverType,\n PongoDriver | (() => Promise<PongoDriver>)\n >();\n\n const register = <Database extends AnyPongoDb = AnyPongoDb>(\n driverType: Database['driverType'],\n driver: PongoDriver<Database> | (() => Promise<PongoDriver<Database>>),\n ): void => {\n const entry = drivers.get(driverType);\n if (\n entry &&\n (typeof entry !== 'function' || typeof driver === 'function')\n ) {\n return;\n }\n drivers.set(driverType, driver);\n };\n\n const tryResolve = async <Driver extends AnyPongoDriver = AnyPongoDriver>(\n driverType: Driver['driverType'],\n ): Promise<Driver | null> => {\n const entry = drivers.get(driverType);\n\n if (!entry) return null;\n\n if (typeof entry !== 'function') return entry as Driver;\n\n const driver = await entry();\n\n register(driverType, driver);\n return driver as Driver;\n };\n\n const tryGet = <Driver extends AnyPongoDriver = AnyPongoDriver>(\n driverType: Driver['driverType'],\n ): Driver | null => {\n const entry = drivers.get(driverType);\n return entry && typeof entry !== 'function' ? (entry as Driver) : null;\n };\n\n const has = (driverType: DatabaseDriverType): boolean =>\n drivers.has(driverType);\n\n return {\n register,\n tryResolve,\n tryGet,\n has,\n get databaseDriverTypes(): DatabaseDriverType[] {\n return Array.from(drivers.keys());\n },\n };\n};\n\ndeclare global {\n var pongoDriverRegistry: ReturnType<typeof PongoDriverRegistry>;\n}\n\nexport const pongoDriverRegistry = (globalThis.pongoDriverRegistry =\n globalThis.pongoDriverRegistry ?? PongoDriverRegistry());\n","import type { DatabaseTransaction } from '@event-driven-io/dumbo';\nimport { pongoTransactionCache } from './cache';\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 const cache = pongoTransactionCache();\n\n return {\n cache,\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 (isCommitted) return;\n if (isRolledBack) throw new Error('Transaction is not active!');\n\n isCommitted = true;\n\n if (transaction) {\n await transaction.commit();\n transaction = null;\n }\n await cache.commit();\n },\n rollback: async (error?: unknown) => {\n if (isCommitted) throw new Error('Cannot rollback commited transaction!');\n if (isRolledBack) return;\n\n isRolledBack = true;\n\n if (transaction) {\n await transaction.rollback(error);\n transaction = null;\n }\n cache.clear();\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 type { CacheConfig, PongoCache } from './cache';\nimport { 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 cache?: CacheConfig | 'disabled' | PongoCache;\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 { JSONSerializer } from '@event-driven-io/dumbo';\nimport { pongoCache } from './cache';\nimport { PongoDatabaseCache } from './database';\nimport type {\n AnyPongoDriver,\n ExtractPongoDatabaseTypeFromDriver,\n} from './drivers';\nimport { pongoSession } from './pongoSession';\nimport {\n proxyClientWithSchema,\n type PongoClientSchema,\n type PongoClientWithSchema,\n} from './schema';\nimport type {\n PongoClient,\n PongoClientOptions,\n PongoDb,\n PongoDbOptions,\n PongoSession,\n} from './typing';\n\nexport const pongoClient = <\n DatabaseDriver extends AnyPongoDriver,\n TypedClientSchema extends PongoClientSchema = PongoClientSchema,\n>(\n options: PongoClientOptions<DatabaseDriver, TypedClientSchema>,\n): PongoClient<\n DatabaseDriver['driverType'],\n ExtractPongoDatabaseTypeFromDriver<DatabaseDriver>\n> &\n PongoClientWithSchema<TypedClientSchema> => {\n const {\n driver,\n schema,\n errors,\n cache: cacheOptions,\n serialization,\n ...connectionOptions\n } = options;\n\n const dbClients = PongoDatabaseCache<PongoDb, TypedClientSchema>({\n driver,\n typedSchema: schema?.definition,\n });\n\n const serializer = JSONSerializer.from(options);\n\n const cache =\n cacheOptions === 'disabled' || cacheOptions === undefined\n ? 'disabled'\n : pongoCache(cacheOptions);\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 options?: PongoDbOptions,\n ): ExtractPongoDatabaseTypeFromDriver<DatabaseDriver> => {\n const db = dbClients.getOrCreate({\n ...connectionOptions,\n databaseName: dbName,\n serializer,\n errors,\n ...(schema?.autoMigration\n ? { schema: { autoMigration: schema.autoMigration } }\n : {}),\n cache: options?.cache ?? cache,\n serialization,\n });\n\n return db as ExtractPongoDatabaseTypeFromDriver<DatabaseDriver>;\n },\n startSession: pongoSession,\n withSession: async <T>(\n callback: (session: PongoSession) => Promise<T>,\n ): Promise<T> => {\n const session = pongoSession();\n\n try {\n return await callback(session);\n } finally {\n await session.endSession();\n }\n },\n };\n\n return proxyClientWithSchema(pongoClient, schema?.definition);\n};\n","import type {\n AbstractCursorOptions,\n AggregateOptions,\n AggregationCursor,\n AnyBulkWriteOperation,\n BSONSerializeOptions,\n BulkWriteOptions,\n BulkWriteResult,\n ChangeStream,\n ChangeStreamDocument,\n ChangeStreamOptions,\n CommandOperationOptions,\n CountDocumentsOptions,\n CountOptions,\n CreateIndexesOptions,\n Db,\n DeleteOptions,\n DeleteResult,\n Document,\n DropCollectionOptions,\n EnhancedOmit,\n EstimatedDocumentCountOptions,\n Filter,\n FindOneAndDeleteOptions,\n FindOneAndReplaceOptions,\n FindOneAndUpdateOptions,\n FindOptions,\n Flatten,\n Hint,\n IndexDescription,\n IndexDescriptionCompact,\n IndexDescriptionInfo,\n IndexInformationOptions,\n IndexSpecification,\n InferIdType,\n InsertManyResult,\n InsertOneOptions,\n InsertOneResult,\n ListIndexesCursor,\n ListSearchIndexesCursor,\n ListSearchIndexesOptions,\n ModifyResult,\n Collection as MongoCollection,\n FindCursor as MongoFindCursor,\n ObjectId,\n OperationOptions,\n OptionalUnlessRequiredId,\n OrderedBulkOperation,\n ReadConcern,\n ReadPreference,\n RenameOptions,\n ReplaceOptions,\n SearchIndexDescription,\n UnorderedBulkOperation,\n UpdateFilter,\n UpdateOptions,\n UpdateResult,\n WithId,\n WithoutId,\n WriteConcern,\n} from 'mongodb';\nimport type { Key } from 'readline';\nimport type {\n CollectionOperationOptions,\n DocumentHandler,\n HandleOptions,\n PongoCollection,\n PongoFilter,\n FindOptions as PongoFindOptions,\n PongoHandleResult,\n OptionalUnlessRequiredId as PongoOptionalUnlessRequiredId,\n PongoSession,\n PongoUpdate,\n} from '../core';\nimport type { Db as ShimDb } from '../shim';\nimport { FindCursor } from './findCursor';\n\nconst toCollectionOperationOptions = (\n options: OperationOptions | undefined,\n): CollectionOperationOptions | undefined =>\n options?.session\n ? { session: options.session as unknown as PongoSession }\n : undefined;\n\nconst toFindOptions = (\n options: FindOptions | undefined,\n): PongoFindOptions | undefined => {\n if (\n !options?.session &&\n !options?.limit &&\n !options?.skip &&\n !options?.sort\n ) {\n return undefined;\n }\n\n const pongoFindOptions: PongoFindOptions = {};\n\n if (options?.session) {\n pongoFindOptions.session = options.session as unknown as PongoSession;\n }\n if (options?.limit !== undefined) {\n pongoFindOptions.limit = options.limit;\n }\n if (options?.skip !== undefined) {\n pongoFindOptions.skip = options.skip;\n }\n if (options?.sort !== undefined) {\n pongoFindOptions.sort = options.sort as { [field: string]: 1 | -1 };\n }\n\n return pongoFindOptions;\n};\n\nexport class Collection<T extends Document> implements MongoCollection<T> {\n private collection: PongoCollection<T>;\n private database: ShimDb;\n\n constructor(database: ShimDb, collection: PongoCollection<T>) {\n this.collection = collection;\n this.database = database;\n }\n get db(): Db {\n return this.database as unknown as Db;\n }\n get dbName(): string {\n return this.collection.dbName;\n }\n get collectionName(): string {\n return this.collection.collectionName;\n }\n get namespace(): string {\n return `${this.dbName}.${this.collectionName}`;\n }\n get readConcern(): ReadConcern | undefined {\n return undefined;\n }\n get readPreference(): ReadPreference | undefined {\n return undefined;\n }\n get bsonOptions(): BSONSerializeOptions {\n return {};\n }\n get writeConcern(): WriteConcern | undefined {\n return undefined;\n }\n get hint(): Hint | undefined {\n return undefined;\n }\n get timeoutMS(): number | undefined {\n return undefined;\n }\n set hint(v: Hint | undefined) {\n throw new Error('Method not implemented.');\n }\n async insertOne(\n doc: OptionalUnlessRequiredId<T>,\n options?: InsertOneOptions,\n ): Promise<InsertOneResult<T>> {\n const result = await this.collection.insertOne(\n doc as unknown as PongoOptionalUnlessRequiredId<T>,\n toCollectionOperationOptions(options),\n );\n return {\n acknowledged: result.acknowledged,\n insertedId: result.insertedId as unknown as InferIdType<T>,\n };\n }\n async insertMany(\n docs: OptionalUnlessRequiredId<T>[],\n options?: BulkWriteOptions,\n ): Promise<InsertManyResult<T>> {\n const result = await this.collection.insertMany(\n docs as unknown as PongoOptionalUnlessRequiredId<T>[],\n toCollectionOperationOptions(options),\n );\n return {\n acknowledged: result.acknowledged,\n insertedIds: result.insertedIds as unknown as InferIdType<T>[],\n insertedCount: result.insertedCount,\n };\n }\n bulkWrite(\n _operations: AnyBulkWriteOperation<T>[],\n _options?: BulkWriteOptions,\n ): Promise<BulkWriteResult> {\n throw new Error('Method not implemented.');\n }\n async updateOne(\n filter: Filter<T>,\n update: Document[] | UpdateFilter<T>,\n options?: UpdateOptions,\n ): Promise<UpdateResult<T>> {\n const result = await this.collection.updateOne(\n filter as unknown as PongoFilter<T>,\n update as unknown as PongoUpdate<T>,\n toCollectionOperationOptions(options),\n );\n\n return {\n acknowledged: result.acknowledged,\n matchedCount: result.matchedCount,\n modifiedCount: result.modifiedCount,\n upsertedCount: result.upsertedCount,\n upsertedId: result.upsertedId as unknown as InferIdType<T>,\n };\n }\n async replaceOne(\n filter: Filter<T>,\n document: WithoutId<T>,\n options?: ReplaceOptions,\n ): Promise<UpdateResult<T>> {\n const result = await this.collection.replaceOne(\n filter as unknown as PongoFilter<T>,\n document,\n {\n ...toCollectionOperationOptions(options),\n upsert: options?.upsert ?? false,\n },\n );\n\n return {\n acknowledged: result.acknowledged,\n matchedCount: result.matchedCount,\n modifiedCount: result.modifiedCount,\n upsertedCount: result.upsertedCount,\n upsertedId: result.upsertedId as unknown as InferIdType<T>,\n };\n }\n async updateMany(\n filter: Filter<T>,\n update: Document[] | UpdateFilter<T>,\n options?: UpdateOptions,\n ): Promise<UpdateResult<T>> {\n const result = await this.collection.updateMany(\n filter as unknown as PongoFilter<T>,\n update as unknown as PongoUpdate<T>,\n toCollectionOperationOptions(options),\n );\n\n return {\n acknowledged: result.acknowledged,\n matchedCount: result.matchedCount,\n modifiedCount: result.modifiedCount,\n upsertedCount: 0,\n upsertedId: null,\n };\n }\n async deleteOne(\n filter?: Filter<T>,\n options?: DeleteOptions,\n ): Promise<DeleteResult> {\n const result = await this.collection.deleteOne(\n filter as PongoFilter<T>,\n toCollectionOperationOptions(options),\n );\n\n return {\n acknowledged: result.acknowledged,\n deletedCount: result.deletedCount,\n };\n }\n async deleteMany(\n filter?: Filter<T>,\n options?: DeleteOptions,\n ): Promise<DeleteResult> {\n const result = await this.collection.deleteMany(\n filter as PongoFilter<T>,\n toCollectionOperationOptions(options),\n );\n\n return {\n acknowledged: result.acknowledged,\n deletedCount: result.deletedCount,\n };\n }\n async rename(\n newName: string,\n options?: RenameOptions,\n ): Promise<Collection<Document>> {\n await this.collection.rename(\n newName,\n toCollectionOperationOptions(options),\n );\n\n return this as unknown as Collection<Document>;\n }\n drop(options?: DropCollectionOptions): Promise<boolean> {\n return this.collection.drop(toCollectionOperationOptions(options));\n }\n findOne(): Promise<WithId<T> | null>;\n findOne(filter: Filter<T>): Promise<WithId<T> | null>;\n findOne(filter: Filter<T>, options: FindOptions): Promise<WithId<T> | null>;\n findOne<TS = T>(): Promise<TS | null>;\n findOne<TS = T>(filter: Filter<TS>): Promise<TS | null>;\n findOne<TS = T>(\n filter: Filter<TS>,\n options?: FindOptions,\n ): Promise<TS | null>;\n async findOne(\n filter?: unknown,\n options?: FindOptions,\n ): Promise<WithId<T> | T | null> {\n return await this.collection.findOne(\n filter as PongoFilter<T>,\n toCollectionOperationOptions(options),\n );\n }\n find(): MongoFindCursor<WithId<T>>;\n find(filter: Filter<T>, options?: FindOptions): MongoFindCursor<WithId<T>>;\n find<T extends Document>(\n filter: Filter<T>,\n options?: FindOptions,\n ): MongoFindCursor<T>;\n find(\n filter?: unknown,\n options?: FindOptions,\n ): MongoFindCursor<WithId<T>> | MongoFindCursor<T> {\n return new FindCursor(\n this.collection.find(filter as PongoFilter<T>, toFindOptions(options)),\n ) as unknown as MongoFindCursor<T>;\n }\n options(_options?: OperationOptions): Promise<Document> {\n throw new Error('Method not implemented.');\n }\n isCapped(_options?: OperationOptions): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n createIndex(\n _indexSpec: IndexSpecification,\n _options?: CreateIndexesOptions,\n ): Promise<string> {\n throw new Error('Method not implemented.');\n }\n createIndexes(\n _indexSpecs: IndexDescription[],\n _options?: CreateIndexesOptions,\n ): Promise<string[]> {\n throw new Error('Method not implemented.');\n }\n dropIndex(\n _indexName: string,\n _options?: CommandOperationOptions,\n ): Promise<Document> {\n throw new Error('Method not implemented.');\n }\n dropIndexes(_options?: CommandOperationOptions): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n listIndexes(_options?: AbstractCursorOptions): ListIndexesCursor {\n throw new Error('Method not implemented.');\n }\n indexExists(\n _indexes: string | string[],\n _options?: AbstractCursorOptions,\n ): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n indexInformation(\n options: IndexInformationOptions & { full: true },\n ): Promise<IndexDescriptionInfo[]>;\n indexInformation(\n options: IndexInformationOptions & { full?: false | undefined },\n ): Promise<IndexDescriptionCompact>;\n indexInformation(\n options: IndexInformationOptions,\n ): Promise<IndexDescriptionCompact | IndexDescriptionInfo[]>;\n indexInformation(): Promise<IndexDescriptionCompact>;\n indexInformation(\n _options?: unknown,\n ):\n | Promise<IndexDescriptionInfo[]>\n | Promise<IndexDescriptionCompact>\n | Promise<IndexDescriptionCompact | IndexDescriptionInfo[]> {\n throw new Error('Method not implemented.');\n }\n estimatedDocumentCount(\n options?: EstimatedDocumentCountOptions,\n ): Promise<number> {\n return this.collection.countDocuments(\n {},\n toCollectionOperationOptions(options),\n );\n }\n countDocuments(\n filter?: Filter<T>,\n options?: CountDocumentsOptions,\n ): Promise<number> {\n return this.collection.countDocuments(\n filter as PongoFilter<T>,\n toCollectionOperationOptions(options),\n );\n }\n distinct<Key extends '_id' | keyof EnhancedOmit<T, '_id'>>(\n key: Key,\n ): Promise<Flatten<WithId<T>[Key]>[]>;\n distinct<Key extends '_id' | keyof EnhancedOmit<T, '_id'>>(\n key: Key,\n filter: Filter<T>,\n ): Promise<Flatten<WithId<T>[Key]>[]>;\n distinct<Key extends '_id' | keyof EnhancedOmit<T, '_id'>>(\n key: Key,\n filter: Filter<T>,\n options: CommandOperationOptions,\n ): Promise<Flatten<WithId<T>[Key]>[]>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n distinct(key: string): Promise<any[]>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n distinct(key: string, filter: Filter<T>): Promise<any[]>;\n distinct(\n key: string,\n filter: Filter<T>,\n options: CommandOperationOptions, // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<any[]>;\n distinct(\n _key: unknown,\n _filter?: unknown,\n _options?: unknown,\n ):\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/consistent-type-imports\n Promise<any[]> | Promise<import('mongodb').Flatten<WithId<T>[Key]>[]> {\n throw new Error('Method not implemented.');\n }\n indexes(\n options: IndexInformationOptions & { full?: true | undefined },\n ): Promise<IndexDescriptionInfo[]>;\n indexes(\n options: IndexInformationOptions & { full: false },\n ): Promise<IndexDescriptionCompact>;\n indexes(\n options: IndexInformationOptions,\n ): Promise<IndexDescriptionCompact | IndexDescriptionInfo[]>;\n indexes(options?: AbstractCursorOptions): Promise<IndexDescriptionInfo[]>;\n indexes(\n _options?: unknown,\n ):\n | Promise<IndexDescriptionInfo[]>\n | Promise<IndexDescriptionCompact>\n | Promise<IndexDescriptionCompact | IndexDescriptionInfo[]> {\n throw new Error('Method not implemented.');\n }\n findOneAndDelete(\n filter: Filter<T>,\n options: FindOneAndDeleteOptions & { includeResultMetadata: true },\n ): Promise<ModifyResult<T>>;\n findOneAndDelete(\n filter: Filter<T>,\n options: FindOneAndDeleteOptions & { includeResultMetadata: false },\n ): Promise<WithId<T> | null>;\n findOneAndDelete(\n filter: Filter<T>,\n options: FindOneAndDeleteOptions,\n ): Promise<WithId<T> | null>;\n findOneAndDelete(filter: Filter<T>): Promise<WithId<T> | null>;\n findOneAndDelete(\n filter: unknown,\n options?: FindOneAndDeleteOptions,\n ): Promise<WithId<T> | null | ModifyResult<T>> {\n return this.collection.findOneAndDelete(\n filter as PongoFilter<T>,\n toCollectionOperationOptions(options),\n ) as Promise<WithId<T> | null>;\n }\n findOneAndReplace(\n filter: Filter<T>,\n replacement: WithoutId<T>,\n options: FindOneAndReplaceOptions & { includeResultMetadata: true },\n ): Promise<ModifyResult<T>>;\n findOneAndReplace(\n filter: Filter<T>,\n replacement: WithoutId<T>,\n options: FindOneAndReplaceOptions & { includeResultMetadata: false },\n ): Promise<WithId<T> | null>;\n findOneAndReplace(\n filter: Filter<T>,\n replacement: WithoutId<T>,\n options: FindOneAndReplaceOptions,\n ): Promise<WithId<T> | null>;\n findOneAndReplace(\n filter: Filter<T>,\n replacement: WithoutId<T>,\n ): Promise<WithId<T> | null>;\n findOneAndReplace(\n filter: unknown,\n replacement: unknown,\n options?: FindOneAndReplaceOptions,\n ): Promise<WithId<T> | null | ModifyResult<T>> {\n return this.collection.findOneAndReplace(\n filter as PongoFilter<T>,\n replacement as WithoutId<T>,\n toCollectionOperationOptions(options),\n ) as Promise<WithId<T> | null>;\n }\n findOneAndUpdate(\n filter: Filter<T>,\n update: UpdateFilter<T>,\n options: FindOneAndUpdateOptions & { includeResultMetadata: true },\n ): Promise<ModifyResult<T>>;\n findOneAndUpdate(\n filter: Filter<T>,\n update: UpdateFilter<T>,\n options: FindOneAndUpdateOptions & { includeResultMetadata: false },\n ): Promise<WithId<T> | null>;\n findOneAndUpdate(\n filter: Filter<T>,\n update: UpdateFilter<T>,\n options: FindOneAndUpdateOptions,\n ): Promise<WithId<T> | null>;\n findOneAndUpdate(\n filter: Filter<T>,\n update: UpdateFilter<T>,\n ): Promise<WithId<T> | null>;\n findOneAndUpdate(\n filter: unknown,\n update: unknown,\n options?: FindOneAndUpdateOptions,\n ): Promise<WithId<T> | null | ModifyResult<T>> {\n return this.collection.findOneAndUpdate(\n filter as PongoFilter<T>,\n update as PongoUpdate<T>,\n toCollectionOperationOptions(options),\n ) as Promise<WithId<T> | null>;\n }\n aggregate<T extends Document = Document>(\n _pipeline?: Document[],\n _options?: AggregateOptions,\n ): AggregationCursor<T> {\n throw new Error('Method not implemented.');\n }\n watch<\n TLocal extends Document = T,\n TChange extends Document = ChangeStreamDocument<TLocal>,\n >(\n _pipeline?: Document[],\n _options?: ChangeStreamOptions,\n ): ChangeStream<TLocal, TChange> {\n throw new Error('Method not implemented.');\n }\n initializeUnorderedBulkOp(\n _options?: BulkWriteOptions,\n ): UnorderedBulkOperation {\n throw new Error('Method not implemented.');\n }\n initializeOrderedBulkOp(_options?: BulkWriteOptions): OrderedBulkOperation {\n throw new Error('Method not implemented.');\n }\n count(filter?: Filter<T>, options?: CountOptions): Promise<number> {\n return this.collection.countDocuments(\n (filter as PongoFilter<T>) ?? {},\n toCollectionOperationOptions(options),\n );\n }\n listSearchIndexes(\n options?: ListSearchIndexesOptions,\n ): ListSearchIndexesCursor;\n listSearchIndexes(\n name: string,\n options?: ListSearchIndexesOptions,\n ): ListSearchIndexesCursor;\n listSearchIndexes(\n _name?: unknown,\n _options?: unknown,\n ): ListSearchIndexesCursor {\n throw new Error('Method not implemented.');\n }\n createSearchIndex(_description: SearchIndexDescription): Promise<string> {\n throw new Error('Method not implemented.');\n }\n createSearchIndexes(\n _descriptions: SearchIndexDescription[],\n ): Promise<string[]> {\n throw new Error('Method not implemented.');\n }\n dropSearchIndex(_name: string): Promise<void> {\n throw new Error('Method not implemented.');\n }\n updateSearchIndex(_name: string, _definition: Document): Promise<void> {\n throw new Error('Method not implemented.');\n }\n\n async createCollection(): Promise<void> {\n await this.collection.createCollection();\n }\n async handle(\n id: ObjectId,\n handle: DocumentHandler<T>,\n options?: HandleOptions,\n ): Promise<PongoHandleResult<T>> {\n return this.collection.handle(id.toString(), handle, options);\n }\n}\n","import type { Collection as MongoCollection, ObjectId } from 'mongodb';\nimport type { Document } from 'mongodb';\nimport type {\n DocumentHandler,\n HandleOptions,\n PongoDb,\n PongoDBCollectionOptions,\n PongoHandleResult,\n} from '../core';\nimport { Collection } from './mongoCollection';\n\nexport class Db {\n private pongoDb: PongoDb;\n constructor(pongoDb: PongoDb) {\n this.pongoDb = pongoDb;\n }\n\n get databaseName(): string {\n return this.pongoDb.databaseName;\n }\n\n collection<T extends Document>(\n collectionName: string,\n options?: PongoDBCollectionOptions<T>,\n ): MongoCollection<T> & {\n handle(\n id: ObjectId,\n handle: DocumentHandler<T>,\n options?: HandleOptions,\n ): Promise<PongoHandleResult<T>>;\n } {\n return new Collection<T>(\n this,\n this.pongoDb.collection<T>(collectionName, options),\n );\n }\n}\n","import {\n parseConnectionString,\n toDatabaseDriverType,\n} from '@event-driven-io/dumbo';\nimport type { ClientSessionOptions } from 'http2';\nimport type { ClientSession, WithSessionCallback } from 'mongodb';\nimport {\n pongoClient,\n pongoSession,\n type AnyPongoDriver,\n type PongoClient,\n type PongoClientOptions,\n type PongoClientSchema,\n} from '../core';\nimport { Db } from './mongoDb';\n\nexport class MongoClient<\n DatabaseDriverType extends AnyPongoDriver = AnyPongoDriver,\n TypedClientSchema extends PongoClientSchema = PongoClientSchema,\n> {\n private pongoClient: PongoClient;\n\n constructor(\n options: PongoClientOptions<DatabaseDriverType, TypedClientSchema>,\n );\n constructor(\n connectionString: string,\n options?: Omit<\n PongoClientOptions<DatabaseDriverType, TypedClientSchema>,\n 'connectionString'\n > & {\n driver?: AnyPongoDriver;\n },\n );\n constructor(\n connectionStringOrOptions:\n string | PongoClientOptions<DatabaseDriverType, TypedClientSchema>,\n options?: Omit<\n PongoClientOptions<DatabaseDriverType, TypedClientSchema>,\n 'connectionString'\n > & {\n driver?: AnyPongoDriver;\n },\n ) {\n if (typeof connectionStringOrOptions !== 'string') {\n this.pongoClient = pongoClient(connectionStringOrOptions);\n return;\n }\n\n const { databaseType, driverName } = parseConnectionString(\n connectionStringOrOptions,\n );\n\n const driver =\n options?.driver ??\n pongoDriverRegistry.tryGet(\n toDatabaseDriverType(databaseType, driverName),\n );\n\n if (driver === null) {\n throw new Error(\n `No database driver registered for ${databaseType} with name ${driverName}`,\n );\n }\n\n this.pongoClient = pongoClient({\n ...(options ?? {}),\n ...{ connectionString: connectionStringOrOptions },\n driver,\n } as unknown as PongoClientOptions<\n PongoClientOptions<DatabaseDriverType, TypedClientSchema>['driver'] &\n AnyPongoDriver,\n TypedClientSchema\n >);\n }\n\n async connect() {\n await this.pongoClient.connect();\n return this;\n }\n\n async close() {\n await this.pongoClient.close();\n }\n\n db(dbName?: string): Db {\n return new Db(this.pongoClient.db(dbName));\n }\n startSession(_options?: ClientSessionOptions): ClientSession {\n return pongoSession() as unknown as ClientSession;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n withSession<T = any>(_executor: WithSessionCallback<T>): Promise<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n withSession<T = any>(\n _options: ClientSessionOptions,\n _executor: WithSessionCallback<T>,\n ): Promise<T>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async withSession<T = any>(\n optionsOrExecutor: ClientSessionOptions | WithSessionCallback<T>,\n executor?: WithSessionCallback<T>,\n ): Promise<T> {\n const callback =\n typeof optionsOrExecutor === 'function' ? optionsOrExecutor : executor!;\n\n const session = pongoSession() as unknown as ClientSession;\n\n try {\n return await callback(session);\n } finally {\n await session.endSession();\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAa,aAAb,MAA2B;CACzB,AAAQ;CACR,AAAQ,YAAwB;CAChC,AAAQ,QAAgB;CAExB,YAAY,WAAyB;AACnC,OAAK,uBAAuB;;CAG9B,MAAM,UAAwB;AAC5B,SAAO,KAAK,eAAe;;CAG7B,MAAM,QAAQ,UAA2C;EACvD,MAAM,OAAO,MAAM,KAAK,eAAe;AAEvC,OAAK,MAAM,OAAO,KAChB,UAAS,IAAI;AAEf,SAAO,QAAQ,SAAS;;CAG1B,UAAmB;AACjB,MAAI,KAAK,cAAc,KAAM,OAAM,MAAM,iCAAiC;AAC1E,SAAO,KAAK,QAAQ,KAAK,UAAU;;CAGrC,MAAM,OAA0B;EAC9B,MAAM,OAAO,MAAM,KAAK,eAAe;AACvC,SAAO,KAAK,SAAS,GAAI,KAAK,KAAK,YAAY,OAAQ;;CAGzD,MAAc,gBAA8B;AAC1C,OAAK,YAAY,MAAM,KAAK;AAC5B,SAAO,KAAK;;;;;;AC3BhB,MAAa,qBAAqB,YAGhB;CAChB,MAAM,EAAE,UAAU,UAAU;CAE5B,MAAM,WAAW,OAAgB,cAAsB;AACrD,SAAO,UAAU,OAAO,UAAU;;CAEpC,IAAI,WAAW;AAEf,QAAO;EACL,WAAW,SAAS;EACpB,MAAM,IACJ,KACiC;AACjC,OAAI;IACF,MAAM,SAAS,MAAM,SAAS,IAAS,IAAI;AAC3C,QAAI,WAAW,OACb,QAAO,QAAQ,IAAI;QAEnB,QAAO,SAAS,IAAI;AAEtB,WAAO;YACA,OAAO;AACd,YAAQ,OAAO,MAAM;AACrB,WAAO,SAAS,IAAI;AACpB;;;EAIJ,MAAM,QAAQ,MAAM;AAClB,OAAI;AACF,WAAO,MAAM,SAAS,QAAQ,KAAK;YAC5B,OAAO;AACd,YAAQ,OAAO,UAAU;AACzB,WAAO,EAAE;;;EAIb,MAAM,IAAI,KAAK,OAAO;AACpB,OAAI;AACF,UAAM,SAAS,IAAI,KAAK,MAAM;YACvB,OAAO;AACd,YAAQ,OAAO,MAAM;;;EAIzB,MAAM,QAAQ,SAAS;AACrB,OAAI;AACF,UAAM,SAAS,QAAQ,QAAQ;YACxB,OAAO;AACd,YAAQ,OAAO,UAAU;;;EAI7B,MAAM,OAAO,KAAK,SAAS;AACzB,OAAI;AACF,UAAM,SAAS,OAAO,KAAK,QAAQ;YAC5B,OAAO;AACd,YAAQ,OAAO,SAAS;;;EAI5B,MAAM,WAAW,MAAM,SAAS;AAC9B,OAAI;AACF,UAAM,SAAS,WAAW,MAAM,QAAQ;YACjC,OAAO;AACd,YAAQ,OAAO,aAAa;;;EAIhC,MAAM,OAAO,KAAK;AAChB,OAAI;AACF,UAAM,SAAS,OAAO,IAAI;AAC1B,WAAO,UAAU,IAAI;YACd,OAAO;AACd,YAAQ,OAAO,SAAS;;;EAI5B,MAAM,WAAW,MAAM;AACrB,OAAI;AACF,UAAM,SAAS,WAAW,KAAK;AAC/B,SAAK,MAAM,OAAO,KAAM,QAAO,UAAU,IAAI;YACtC,OAAO;AACd,YAAQ,OAAO,aAAa;;;EAIhC,QAAQ;AACN,UAAO,SAAS,OAAO;;EAGzB,QAAQ;AACN,OAAI,SAAU;AAEd,cAAW;AACX,UAAO,SAAS,OAAO;;EAE1B;;;;;ACxGH,MAAa,yBAAqC;CAChD,MAAM,wBAAQ,IAAI,KAAmC;AAErD,QAAO;EACL,WAAW;EACX,MACE,QAEA,QAAQ,QACN,MAAM,IAAI,IAAI,GAAI,MAAM,IAAI,IAAI,GAAkB,OACnD;EACH,UACE,SAEA,KAAK,KAAK,MACR,MAAM,IAAI,EAAE,GAAI,MAAM,IAAI,EAAE,GAAkB,OAC/C;EACH,MAAM,KAAK,UAAU;AACnB,SAAM,IAAI,KAAK,MAAM;;EAEvB,UAAU,YAAY;AACpB,QAAK,MAAM,EAAE,KAAK,WAAW,QAAS,OAAM,IAAI,KAAK,MAAM;;EAE7D,SAAS,KAAK,aAAa;AAEzB,SAAM,OAAO,IAAI;;EAMnB,aAAa,MAAM,aAAa;AAE9B,QAAK,MAAM,OAAO,KAAM,OAAM,OAAO,IAAI;;EAQ3C,SAAS,QAAQ;AACf,SAAM,OAAO,IAAI;;EAEnB,aAAa,SAAS;AACpB,QAAK,MAAM,OAAO,KAAM,OAAM,OAAO,IAAI;;EAE3C,aAAa;AACX,SAAM,OAAO;;EAEf,aAAa;AACX,SAAM,OAAO;;EAEhB;;;;;AC/CH,MAAM,yBAIF,EACF,KAAK,KACN;AAED,MAAa,YAAY,YAA0C;CACjE,MAAM,QAAQ,IAAIA,mBAAgD;EAChE,GAAG;EACH,GAAG;EACJ,CAAC;AAEF,QAAO;EACL,WAAW;EACX,MACE,QACyC;GACzC,MAAM,QAAQ,MAAM,IAAI,IAAI;AAC5B,OAAI,UAAU,OAAW,QAAO;AAChC,UAAO,MAAM;;EAEf,UACE,SAEA,KAAK,KAAK,MAAM;GACd,MAAM,QAAQ,MAAM,IAAI,EAAE;AAC1B,OAAI,UAAU,OAAW,QAAO;AAChC,UAAO,MAAM;IACb;EACJ,MAAM,KAAK,UAAU;AACnB,SAAM,IAAI,KAAK,EAAE,KAAK,OAAO,CAAC;;EAEhC,UAAU,YAAY;AACpB,QAAK,MAAM,EAAE,KAAK,WAAW,QAC3B,OAAM,IAAI,KAAK,EAAE,KAAK,OAAO,CAAC;;EAGlC,SAAS,KAAK,aAAa;AACzB,SAAM,OAAO,IAAI;;EAQnB,WAAW,MAAM,UAAU;AACzB,QAAK,MAAM,OAAO,KAChB,OAAM,OAAO,IAAI;;EASrB,SAAS,QAAQ;AACf,SAAM,OAAO,IAAI;;EAEnB,aAAa,SAAS;AACpB,QAAK,MAAM,OAAO,KAAM,OAAM,OAAO,IAAI;;EAE3C,aAAa;AACX,SAAM,OAAO;;EAEf,aAAa;AACX,SAAM,OAAO;;EAEhB;;;;;AC9EH,MAAa,oBAAgC;CAC3C,WAAW;CACX,WAAW;CACX,WAAW;CACX,cAAc;CACd,cAAc;CACd,UAAU,SAAS,KAAK,UAAU,OAAU;CAC5C,eAAe;CACf,kBAAkB;CAClB,kBAAkB;CAClB,aAAa;CACb,aAAa;CACd;;;;ACkDD,MAAM,iBAAgC,EAAE,MAAM,aAAa;AAE3D,MAAa,cACX,YACe;AACf,KAAI,YAAY,UAAa,YAAY,WAAY,QAAO;AAE5D,KAAI,eAAe,QAAS,QAAO;CAEnC,MAAM,SAAS,WAAW;AAE1B,KAAI,OAAO,SAAS,eAAgB,QAAO,kBAAkB;AAI7D,QAAO,kBAAkB,EAAE,UAFf,SAAS,OAEmB,EAAE,CAAC;;;;;ACM7C,MAAa,yBAAyB,YAET;CAC3B,MAAM,aAAa,SAAS,SAAS,kBAAkB;CACvD,MAAM,aAA+B,EAAE;AAiIvC,QAAO;EA9HL,MAAM;EAEN,IAAI,KAA4B;AAC9B,UAAO,WAAW,IAAI,IAAI;;EAG5B,IACE,KACA,OACA,SACA;GACA,MAAM,EAAE,cAAc;AACtB,cAAW,IAAI,KAAK,MAAM;AAC1B,cAAW,KAAK;IACd,MAAM;IACN;IACA;IACA;IACD,CAAC;;EAGJ,OACE,KACA,SACA,SACA;GACA,MAAM,EAAE,cAAc;AACtB,cAAW,OAAO,KAAK,QAAQ;AAC/B,cAAW,KAAK;IACd,MAAM;IACN;IACA;IACA;IACD,CAAC;;EAGJ,OACE,KACA,SACA;AACA,cAAW,OAAO,IAAI;AACtB,cAAW,KAAK;IAAE,MAAM;IAAU;IAAK,WAAW,QAAQ;IAAW,CAAC;;EAGxE,QAAQ,MAA+B;AACrC,UAAO,WAAW,QAAQ,KAAK;;EAGjC,QACE,SACA,SACA;AACA,cAAW,QAAQ,QAAQ;AAC3B,cAAW,KAAK;IACd,MAAM;IACN;IACA,WAAW,QAAQ;IACpB,CAAC;;EAGJ,WACE,MACA,SACA,SACA;GACA,MAAM,EAAE,cAAc;AACtB,cAAW,WAAW,MAAM,QAAQ;AACpC,cAAW,KAAK;IACd,MAAM;IACN;IACA;IACA;IACD,CAAC;;EAGJ,WACE,MACA,SACA;AACA,cAAW,WAAW,KAAK;AAC3B,cAAW,KAAK;IACd,MAAM;IACN;IACA,WAAW,QAAQ;IACpB,CAAC;;EAGJ,QAAQ;AACN,cAAW,OAAO;AAClB,cAAW,SAAS;;EAGtB,MAAM,SAAS;AACb,QAAK,MAAM,MAAM,WACf,SAAQ,GAAG,MAAX;IACE,KAAK;AACH,WAAM,GAAG,UAAU,IAAI,GAAG,KAAK,GAAG,MAAM;AACxC;IACF,KAAK;AACH,WAAM,GAAG,UAAU,QAAQ,GAAG,QAAQ;AACtC;IACF,KAAK;AACH,WAAM,GAAG,UAAU,OACjB,GAAG,KACH,GAAG,QACJ;AACD;IACF,KAAK;AACH,WAAM,GAAG,UAAU,WACjB,GAAG,MACH,GAAG,QACJ;AACD;IACF,KAAK;AACH,WAAM,GAAG,UAAU,OAAO,GAAG,IAAI;AACjC;IACF,KAAK;AACH,WAAM,GAAG,UAAU,WAAW,GAAG,KAAK;AACtC;;AAGN,cAAW,OAAO;AAClB,cAAW,SAAS;;EAIZ;;;;;AChNd,MAAa,sBAGX,EACA,QACA,kBAII;CACJ,MAAM,4BAAY,IAAI,KAAsB;CAE5C,MAAM,yBAAyB,WAC7B,OAAO,OAAO,aAAa,OAAO,EAAE,CAAC,CAAC,MAAM,MAAM,EAAE,SAAS,OAAO;AAEtE,QAAO;EACL,cAME,kBASa;GACb,MAAM,2DAA+B,OAAO,WAAW;GACvD,MAAM,SACJ,cAAc,gBACd,UAAU,oBACR,sBAAsB,gBACjB,cAAc,mBACf,OACL,IACD;GAEF,MAAM,WAAW,UAAU,IAAI,OAAO;AACtC,OAAI,SAAU,QAAO;GAErB,MAAM,aAAa,sBAAsB,cAAc,aAAa;GAEpE,MAAM,QAAkB,OAAO,gBAAgB;IAC7C,GAAG;IACH,cAAc;IACd,QAAQ;KACN,GAAG,cAAc;KACjB,GAAI,aAAa,EAAE,YAAY,GAAG,EAAE;KACrC;IACF,CAAC;AACF,aAAU,IAAI,QAAQ,MAAM;AAC5B,UAAO;;EAGT,WAAuB,MAAM,KAAK,UAAU,QAAQ,CAAC;EAErD,SAAS,SAA2D;AAClE,UAAO,QAAQ,IACb,MAAM,KAAK,UAAU,QAAQ,CAAC,CAC3B,KAAK,MAAM,EAAc,CACzB,IAAI,KAAK,CACb;;EAEJ;;;;;ACnBH,MAAM,yBACJ,UAC8B,EAC9B,MACD;AAED,sBAAsB,QACpB,oBAEA,gBAAgB,QACb,KAAK,oBACH,IAAI,kBAAkB,YAAY,WAAW,eAAe,EAC7D,MAEF,EAAE,CACH;AASH,SAAS,cACP,mBACA,aACkB;AAClB,KAAI,gBAAgB,QAAW;AAC7B,MAAI,OAAO,sBAAsB,SAC/B,OAAM,IAAI,MAAM,4CAA4C;AAE9D,SAAO,EACL,aAAa,mBACd;;AAGH,QAAO,qBAAqB,OAAO,sBAAsB,WACrD;EACE,MAAM;EACN;EACD,GACD,EAAe,aAAa;;AAGlC,cAAc,QACZ,cACA,oBAEA,eACI,cAAc,cAAc,sBAAsB,KAAK,gBAAgB,CAAC,GACxE,cAAc,sBAAsB,KAAK,gBAAgB,CAAC;AAEhE,MAAM,qBACJ,SAC0B,EAC1B,KACD;AAED,MAAa,cAAc;CACzB,QAAQ;CACR,IAAI;CACJ,YAAY;CACb;AA8BD,MAAa,yBAKX,QACA,WACmE;AACnE,KAAI,CAAC,OACH,QAAO;CAMT,MAAM,UAAU,OAAO,KAAK,OAAO,IAAI;AAEvC,QAAO,IAAI,MACT,QAGA,EACE,IAAI,QAAQ,MAAc;AACxB,MAAI,QAAQ,SAAS,KAAK,CAAE,QAAO,OAAO,GAAG,OAAO,IAAI,OAAO,KAAK;AAEpE,SAAO,OAAO;IAEjB,CACF;;;;;ACvHH,MAAa,4BAA4B;CACvC,MAAM,0BAAU,IAAI,KAGjB;CAEH,MAAM,YACJ,YACA,WACS;EACT,MAAM,QAAQ,QAAQ,IAAI,WAAW;AACrC,MACE,UACC,OAAO,UAAU,cAAc,OAAO,WAAW,YAElD;AAEF,UAAQ,IAAI,YAAY,OAAO;;CAGjC,MAAM,aAAa,OACjB,eAC2B;EAC3B,MAAM,QAAQ,QAAQ,IAAI,WAAW;AAErC,MAAI,CAAC,MAAO,QAAO;AAEnB,MAAI,OAAO,UAAU,WAAY,QAAO;EAExC,MAAM,SAAS,MAAM,OAAO;AAE5B,WAAS,YAAY,OAAO;AAC5B,SAAO;;CAGT,MAAM,UACJ,eACkB;EAClB,MAAM,QAAQ,QAAQ,IAAI,WAAW;AACrC,SAAO,SAAS,OAAO,UAAU,aAAc,QAAmB;;CAGpE,MAAM,OAAO,eACX,QAAQ,IAAI,WAAW;AAEzB,QAAO;EACL;EACA;EACA;EACA;EACA,IAAI,sBAA4C;AAC9C,UAAO,MAAM,KAAK,QAAQ,MAAM,CAAC;;EAEpC;;AAOH,MAAaC,wBAAuB,WAAW,sBAC7C,WAAW,uBAAuB,qBAAqB;;;;AClHzD,MAAa,oBACX,YACuB;CACvB,IAAI,cAAc;CAClB,IAAI,eAAe;CACnB,IAAI,eAA8B;CAClC,IAAI,cAA0C;CAC9C,MAAM,QAAQ,uBAAuB;AAErC,QAAO;EACL;EACA,gBAAgB,OAAO,OAA8C;AACnE,OAAI,eAAe,iBAAiB,GAAG,aACrC,OAAM,IAAI,MACR,yDACD;AAEH,OAAI,eAAe,iBAAiB,GAAG,aAAc,QAAO;AAE5D,kBAAe,GAAG;AAClB,iBAAc,GAAG,aAAa;AAC9B,SAAM,YAAY,OAAO;AAEzB,UAAO;;EAET,QAAQ,YAAY;AAClB,OAAI,YAAa;AACjB,OAAI,aAAc,OAAM,IAAI,MAAM,6BAA6B;AAE/D,iBAAc;AAEd,OAAI,aAAa;AACf,UAAM,YAAY,QAAQ;AAC1B,kBAAc;;AAEhB,SAAM,MAAM,QAAQ;;EAEtB,UAAU,OAAO,UAAoB;AACnC,OAAI,YAAa,OAAM,IAAI,MAAM,wCAAwC;AACzE,OAAI,aAAc;AAElB,kBAAe;AAEf,OAAI,aAAa;AACf,UAAM,YAAY,SAAS,MAAM;AACjC,kBAAc;;AAEhB,SAAM,OAAO;;EAEf;EACA,YAAY;EACZ;EACA,IAAI,WAAW;AACb,UAAO,CAAC,eAAe,CAAC;;EAE1B,IAAI,cAAc;AAChB,OAAI,gBAAgB,KAClB,OAAM,IAAI,MAAM,sCAAsC;AAExD,UAAO,YAAY;;EAErB;EACD;;;;;ACxDH,MAAM,YACJ,gBACsC,aAAa,aAAa;AAElE,SAAS,0BACP,aAC2C;AAC3C,KAAI,CAAC,SAAS,YAAY,CAAE,OAAM,IAAI,MAAM,gCAAgC;;AAG9E,SAAS,6BACP,aAC6B;AAC7B,KAAI,SAAS,YAAY,CACvB,OAAM,IAAI,MAAM,qCAAqC;;AAGzD,MAAa,gBAAgB,YAAgD;CAC3E,MAAM,WAAW,SAAS,aAAa;CACvC,MAAM,4BACJ,SAAS,6BAA6B,EACpC,IAAI,kBAAkB;AACpB,SAAO;IAEV;CAEH,IAAI,cAAyC;CAC7C,IAAI,WAAW;CAEf,MAAM,oBAAoB,YAAsC;AAC9D,+BAA6B,YAAY;AAEzC,gBAAc,iBAAiB,WAAW,0BAA0B;;CAEtE,MAAM,oBAAoB,YAAY;AACpC,4BAA0B,YAAY;AAEtC,QAAM,YAAY,QAAQ;;CAE5B,MAAM,mBAAmB,YAAY;AACnC,4BAA0B,YAAY;AAEtC,QAAM,YAAY,UAAU;;CAG9B,MAAM,aAAa,YAA2B;AAC5C,MAAI,SAAU;AACd,aAAW;AAEX,MAAI,SAAS,YAAY,CAAE,OAAM,YAAY,UAAU;;CAGzD,MAAM,UAAU;EACd,IAAI,WAAW;AACb,UAAO;;EAET;EACA,2BAA2B,6BAA6B,EACtD,IAAI,kBAAkB;AACpB,UAAO;KAEV;EACD,IAAI,cAAc;AAChB,UAAO;;EAET,IAAI,kBAAkB;AACpB,UAAO,0BAA0B;;EAEnC;EACA,kCAAkC;EAClC,qBAAqB,SAAS,YAAY;EAC1C;EACA;EACA;EACA,iBAAiB,OACf,IACA,YACe;AACf,oBAAiB,QAAQ;AAEzB,OAAI;IACF,MAAM,SAAS,MAAM,GAAG,QAAQ;AAChC,UAAM,mBAAmB;AACzB,WAAO;YACA,OAAO;AACd,UAAM,kBAAkB;AACxB,UAAM;;;EAGX;AAED,QAAO;;;;;ACpFT,MAAa,eAIX,YAK4C;CAC5C,MAAM,EACJ,QACA,QACA,QACA,OAAO,cACP,eACA,GAAG,sBACD;CAEJ,MAAM,YAAY,mBAA+C;EAC/D;EACA,aAAa,QAAQ;EACtB,CAAC;CAEF,MAAM,aAAaC,sCAAe,KAAK,QAAQ;CAE/C,MAAM,QACJ,iBAAiB,cAAc,iBAAiB,SAC5C,aACA,WAAW,aAAa;CAE9B,MAAM,cAGF;EACF,YAAY,OAAO;EACnB,SAAS,YAAY;AACnB,SAAM,UAAU,QAAQ,OAAO,GAAG,SAAS,CAAC;AAC5C,UAAO;;EAET,OAAO,YAAY;AACjB,SAAM,UAAU,QAAQ,OAAO,GAAG,OAAO,CAAC;;EAE5C,KACE,QACA,YACuD;AAavD,UAZW,UAAU,YAAY;IAC/B,GAAG;IACH,cAAc;IACd;IACA;IACA,GAAI,QAAQ,gBACR,EAAE,QAAQ,EAAE,eAAe,OAAO,eAAe,EAAE,GACnD,EAAE;IACN,OAAO,SAAS,SAAS;IACzB;IACD,CAEQ;;EAEX,cAAc;EACd,aAAa,OACX,aACe;GACf,MAAM,UAAU,cAAc;AAE9B,OAAI;AACF,WAAO,MAAM,SAAS,QAAQ;aACtB;AACR,UAAM,QAAQ,YAAY;;;EAG/B;AAED,QAAO,sBAAsB,aAAa,QAAQ,WAAW;;;;;ACnB/D,MAAM,gCACJ,YAEA,SAAS,UACL,EAAE,SAAS,QAAQ,SAAoC,GACvD;AAEN,MAAM,iBACJ,YACiC;AACjC,KACE,CAAC,SAAS,WACV,CAAC,SAAS,SACV,CAAC,SAAS,QACV,CAAC,SAAS,KAEV;CAGF,MAAM,mBAAqC,EAAE;AAE7C,KAAI,SAAS,QACX,kBAAiB,UAAU,QAAQ;AAErC,KAAI,SAAS,UAAU,OACrB,kBAAiB,QAAQ,QAAQ;AAEnC,KAAI,SAAS,SAAS,OACpB,kBAAiB,OAAO,QAAQ;AAElC,KAAI,SAAS,SAAS,OACpB,kBAAiB,OAAO,QAAQ;AAGlC,QAAO;;AAGT,IAAa,aAAb,MAA0E;CACxE,AAAQ;CACR,AAAQ;CAER,YAAY,UAAkB,YAAgC;AAC5D,OAAK,aAAa;AAClB,OAAK,WAAW;;CAElB,IAAI,KAAS;AACX,SAAO,KAAK;;CAEd,IAAI,SAAiB;AACnB,SAAO,KAAK,WAAW;;CAEzB,IAAI,iBAAyB;AAC3B,SAAO,KAAK,WAAW;;CAEzB,IAAI,YAAoB;AACtB,SAAO,GAAG,KAAK,OAAO,GAAG,KAAK;;CAEhC,IAAI,cAAuC;CAG3C,IAAI,iBAA6C;CAGjD,IAAI,cAAoC;AACtC,SAAO,EAAE;;CAEX,IAAI,eAAyC;CAG7C,IAAI,OAAyB;CAG7B,IAAI,YAAgC;CAGpC,IAAI,KAAK,GAAqB;AAC5B,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,MAAM,UACJ,KACA,SAC6B;EAC7B,MAAM,SAAS,MAAM,KAAK,WAAW,UACnC,KACA,6BAA6B,QAAQ,CACtC;AACD,SAAO;GACL,cAAc,OAAO;GACrB,YAAY,OAAO;GACpB;;CAEH,MAAM,WACJ,MACA,SAC8B;EAC9B,MAAM,SAAS,MAAM,KAAK,WAAW,WACnC,MACA,6BAA6B,QAAQ,CACtC;AACD,SAAO;GACL,cAAc,OAAO;GACrB,aAAa,OAAO;GACpB,eAAe,OAAO;GACvB;;CAEH,UACE,aACA,UAC0B;AAC1B,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,MAAM,UACJ,QACA,QACA,SAC0B;EAC1B,MAAM,SAAS,MAAM,KAAK,WAAW,UACnC,QACA,QACA,6BAA6B,QAAQ,CACtC;AAED,SAAO;GACL,cAAc,OAAO;GACrB,cAAc,OAAO;GACrB,eAAe,OAAO;GACtB,eAAe,OAAO;GACtB,YAAY,OAAO;GACpB;;CAEH,MAAM,WACJ,QACA,UACA,SAC0B;EAC1B,MAAM,SAAS,MAAM,KAAK,WAAW,WACnC,QACA,UACA;GACE,GAAG,6BAA6B,QAAQ;GACxC,QAAQ,SAAS,UAAU;GAC5B,CACF;AAED,SAAO;GACL,cAAc,OAAO;GACrB,cAAc,OAAO;GACrB,eAAe,OAAO;GACtB,eAAe,OAAO;GACtB,YAAY,OAAO;GACpB;;CAEH,MAAM,WACJ,QACA,QACA,SAC0B;EAC1B,MAAM,SAAS,MAAM,KAAK,WAAW,WACnC,QACA,QACA,6BAA6B,QAAQ,CACtC;AAED,SAAO;GACL,cAAc,OAAO;GACrB,cAAc,OAAO;GACrB,eAAe,OAAO;GACtB,eAAe;GACf,YAAY;GACb;;CAEH,MAAM,UACJ,QACA,SACuB;EACvB,MAAM,SAAS,MAAM,KAAK,WAAW,UACnC,QACA,6BAA6B,QAAQ,CACtC;AAED,SAAO;GACL,cAAc,OAAO;GACrB,cAAc,OAAO;GACtB;;CAEH,MAAM,WACJ,QACA,SACuB;EACvB,MAAM,SAAS,MAAM,KAAK,WAAW,WACnC,QACA,6BAA6B,QAAQ,CACtC;AAED,SAAO;GACL,cAAc,OAAO;GACrB,cAAc,OAAO;GACtB;;CAEH,MAAM,OACJ,SACA,SAC+B;AAC/B,QAAM,KAAK,WAAW,OACpB,SACA,6BAA6B,QAAQ,CACtC;AAED,SAAO;;CAET,KAAK,SAAmD;AACtD,SAAO,KAAK,WAAW,KAAK,6BAA6B,QAAQ,CAAC;;CAWpE,MAAM,QACJ,QACA,SAC+B;AAC/B,SAAO,MAAM,KAAK,WAAW,QAC3B,QACA,6BAA6B,QAAQ,CACtC;;CAQH,KACE,QACA,SACiD;AACjD,SAAO,IAAI,WACT,KAAK,WAAW,KAAK,QAA0B,cAAc,QAAQ,CAAC,CACvE;;CAEH,QAAQ,UAAgD;AACtD,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,SAAS,UAA+C;AACtD,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,YACE,YACA,UACiB;AACjB,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,cACE,aACA,UACmB;AACnB,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,UACE,YACA,UACmB;AACnB,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,YAAY,UAAsD;AAChE,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,YAAY,UAAqD;AAC/D,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,YACE,UACA,UACkB;AAClB,QAAM,IAAI,MAAM,0BAA0B;;CAY5C,iBACE,UAI4D;AAC5D,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,uBACE,SACiB;AACjB,SAAO,KAAK,WAAW,eACrB,EAAE,EACF,6BAA6B,QAAQ,CACtC;;CAEH,eACE,QACA,SACiB;AACjB,SAAO,KAAK,WAAW,eACrB,QACA,6BAA6B,QAAQ,CACtC;;CAuBH,SACE,MACA,SACA,UAGsE;AACtE,QAAM,IAAI,MAAM,0BAA0B;;CAY5C,QACE,UAI4D;AAC5D,QAAM,IAAI,MAAM,0BAA0B;;CAe5C,iBACE,QACA,SAC6C;AAC7C,SAAO,KAAK,WAAW,iBACrB,QACA,6BAA6B,QAAQ,CACtC;;CAqBH,kBACE,QACA,aACA,SAC6C;AAC7C,SAAO,KAAK,WAAW,kBACrB,QACA,aACA,6BAA6B,QAAQ,CACtC;;CAqBH,iBACE,QACA,QACA,SAC6C;AAC7C,SAAO,KAAK,WAAW,iBACrB,QACA,QACA,6BAA6B,QAAQ,CACtC;;CAEH,UACE,WACA,UACsB;AACtB,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,MAIE,WACA,UAC+B;AAC/B,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,0BACE,UACwB;AACxB,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,wBAAwB,UAAmD;AACzE,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,MAAM,QAAoB,SAAyC;AACjE,SAAO,KAAK,WAAW,eACpB,UAA6B,EAAE,EAChC,6BAA6B,QAAQ,CACtC;;CASH,kBACE,OACA,UACyB;AACzB,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,kBAAkB,cAAuD;AACvE,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,oBACE,eACmB;AACnB,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,gBAAgB,OAA8B;AAC5C,QAAM,IAAI,MAAM,0BAA0B;;CAE5C,kBAAkB,OAAe,aAAsC;AACrE,QAAM,IAAI,MAAM,0BAA0B;;CAG5C,MAAM,mBAAkC;AACtC,QAAM,KAAK,WAAW,kBAAkB;;CAE1C,MAAM,OACJ,IACA,QACA,SAC+B;AAC/B,SAAO,KAAK,WAAW,OAAO,GAAG,UAAU,EAAE,QAAQ,QAAQ;;;;;;ACjkBjE,IAAa,KAAb,MAAgB;CACd,AAAQ;CACR,YAAY,SAAkB;AAC5B,OAAK,UAAU;;CAGjB,IAAI,eAAuB;AACzB,SAAO,KAAK,QAAQ;;CAGtB,WACE,gBACA,SAOA;AACA,SAAO,IAAI,WACT,MACA,KAAK,QAAQ,WAAc,gBAAgB,QAAQ,CACpD;;;;;;AClBL,IAAa,cAAb,MAGE;CACA,AAAQ;CAcR,YACE,2BAEA,SAMA;AACA,MAAI,OAAO,8BAA8B,UAAU;AACjD,QAAK,cAAc,YAAY,0BAA0B;AACzD;;EAGF,MAAM,EAAE,cAAc,iEACpB,0BACD;EAED,MAAM,SACJ,SAAS,UACT,oBAAoB,wDACG,cAAc,WAAW,CAC/C;AAEH,MAAI,WAAW,KACb,OAAM,IAAI,MACR,qCAAqC,aAAa,aAAa,aAChE;AAGH,OAAK,cAAc,YAAY;GAC7B,GAAI,WAAW,EAAE;GACZ,kBAAkB;GACvB;GACD,CAIC;;CAGJ,MAAM,UAAU;AACd,QAAM,KAAK,YAAY,SAAS;AAChC,SAAO;;CAGT,MAAM,QAAQ;AACZ,QAAM,KAAK,YAAY,OAAO;;CAGhC,GAAG,QAAqB;AACtB,SAAO,IAAI,GAAG,KAAK,YAAY,GAAG,OAAO,CAAC;;CAE5C,aAAa,UAAgD;AAC3D,SAAO,cAAc;;CAUvB,MAAM,YACJ,mBACA,UACY;EACZ,MAAM,WACJ,OAAO,sBAAsB,aAAa,oBAAoB;EAEhE,MAAM,UAAU,cAAc;AAE9B,MAAI;AACF,UAAO,MAAM,SAAS,QAAQ;YACtB;AACR,SAAM,QAAQ,YAAY"}
|
package/dist/shim.js
CHANGED