@farming-labs/orm-mongo 0.0.11 → 0.0.13

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/index.cjs CHANGED
@@ -212,7 +212,57 @@ function adaptCollection(collection) {
212
212
  };
213
213
  }
214
214
  function createMongoDriver(config) {
215
+ const handle = {
216
+ kind: "mongo",
217
+ client: {
218
+ collections: config.collections,
219
+ db: config.db,
220
+ client: config.client,
221
+ startSession: config.startSession
222
+ }
223
+ };
215
224
  const delegateCache = /* @__PURE__ */ new WeakMap();
225
+ function wrapDelegate(delegate) {
226
+ return {
227
+ handle,
228
+ findMany(schema, model, args) {
229
+ return delegate.findMany(schema, model, args);
230
+ },
231
+ findFirst(schema, model, args) {
232
+ return delegate.findFirst(schema, model, args);
233
+ },
234
+ findUnique(schema, model, args) {
235
+ return delegate.findUnique(schema, model, args);
236
+ },
237
+ count(schema, model, args) {
238
+ return delegate.count(schema, model, args);
239
+ },
240
+ create(schema, model, args) {
241
+ return delegate.create(schema, model, args);
242
+ },
243
+ createMany(schema, model, args) {
244
+ return delegate.createMany(schema, model, args);
245
+ },
246
+ update(schema, model, args) {
247
+ return delegate.update(schema, model, args);
248
+ },
249
+ updateMany(schema, model, args) {
250
+ return delegate.updateMany(schema, model, args);
251
+ },
252
+ upsert(schema, model, args) {
253
+ return delegate.upsert(schema, model, args);
254
+ },
255
+ delete(schema, model, args) {
256
+ return delegate.delete(schema, model, args);
257
+ },
258
+ deleteMany(schema, model, args) {
259
+ return delegate.deleteMany(schema, model, args);
260
+ },
261
+ transaction(schema, run) {
262
+ return delegate.transaction(schema, async (txDriver) => run(wrapDelegate(txDriver)));
263
+ }
264
+ };
265
+ }
216
266
  function getDelegate(schema) {
217
267
  const cached = delegateCache.get(schema);
218
268
  if (cached) return cached;
@@ -233,6 +283,7 @@ function createMongoDriver(config) {
233
283
  return driver;
234
284
  }
235
285
  return {
286
+ handle,
236
287
  findMany(schema, model, args) {
237
288
  return getDelegate(schema).findMany(schema, model, args);
238
289
  },
@@ -267,7 +318,10 @@ function createMongoDriver(config) {
267
318
  return getDelegate(schema).deleteMany(schema, model, args);
268
319
  },
269
320
  transaction(schema, run) {
270
- return getDelegate(schema).transaction(schema, run);
321
+ return getDelegate(schema).transaction(
322
+ schema,
323
+ async (txDriver) => run(wrapDelegate(txDriver))
324
+ );
271
325
  }
272
326
  };
273
327
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { createManifest, type OrmDriver, type SchemaDefinition } from \"@farming-labs/orm\";\nimport type { ModelName } from \"@farming-labs/orm\";\nimport {\n createMongooseDriver,\n type MongooseDriverConfig,\n type MongooseExecLike,\n type MongooseModelLike,\n type MongooseQueryLike,\n type MongooseSessionLike,\n type MongooseSessionSourceLike,\n} from \"@farming-labs/orm-mongoose\";\n\ntype MongoRow = Record<string, unknown>;\ntype MongoSort = Record<string, 1 | -1>;\n\nexport type MongoSessionLike = MongooseSessionLike;\nexport type MongoSessionSourceLike = MongooseSessionSourceLike;\n\nexport type MongoCursorLike<TResult = MongoRow> = {\n sort(sort: MongoSort): MongoCursorLike<TResult>;\n skip(value: number): MongoCursorLike<TResult>;\n limit(value: number): MongoCursorLike<TResult>;\n toArray(): Promise<TResult[]>;\n};\n\nexport type MongoCollectionLike = {\n collectionName?: string;\n find(filter: Record<string, unknown>, options?: { session?: MongoSessionLike }): MongoCursorLike;\n findOne(\n filter: Record<string, unknown>,\n options?: { session?: MongoSessionLike },\n ): Promise<MongoRow | null>;\n countDocuments(\n filter: Record<string, unknown>,\n options?: { session?: MongoSessionLike },\n ): Promise<number>;\n insertOne(\n doc: MongoRow,\n options?: { session?: MongoSessionLike },\n ): Promise<{ insertedId?: unknown }>;\n insertMany?(\n docs: MongoRow[],\n options?: { session?: MongoSessionLike },\n ): Promise<{ insertedIds?: Record<number, unknown> } | unknown>;\n updateMany(\n filter: Record<string, unknown>,\n update: { $set: MongoRow },\n options?: { session?: MongoSessionLike },\n ): Promise<{ modifiedCount?: number; matchedCount?: number }>;\n findOneAndUpdate(\n filter: Record<string, unknown>,\n update: { $set?: MongoRow; $setOnInsert?: MongoRow },\n options?: {\n upsert?: boolean;\n returnDocument?: \"after\" | \"before\";\n session?: MongoSessionLike;\n },\n ): Promise<MongoRow | null | { value: MongoRow | null }>;\n findOneAndDelete(\n filter: Record<string, unknown>,\n options?: { session?: MongoSessionLike },\n ): Promise<MongoRow | null | { value: MongoRow | null }>;\n deleteMany(\n filter: Record<string, unknown>,\n options?: { session?: MongoSessionLike },\n ): Promise<{ deletedCount?: number }>;\n};\n\nexport type MongoDbLike = {\n collection(name: string): MongoCollectionLike;\n};\n\nexport type MongoCollectionMap<TSchema extends SchemaDefinition<any>> = Partial<\n Record<ModelName<TSchema>, MongoCollectionLike>\n>;\n\nexport type MongoDriverConfig<TSchema extends SchemaDefinition<any>> = {\n collections?: MongoCollectionMap<TSchema>;\n db?: MongoDbLike;\n client?: MongoSessionSourceLike;\n startSession?: () => Promise<MongoSessionLike>;\n transforms?: MongooseDriverConfig<TSchema>[\"transforms\"];\n};\n\nclass MongoExec<TResult> implements MongooseExecLike<TResult> {\n private currentSession?: MongoSessionLike;\n\n constructor(private readonly run: (session?: MongoSessionLike) => Promise<TResult>) {}\n\n session(session: MongoSessionLike) {\n this.currentSession = session;\n return this;\n }\n\n exec() {\n return this.run(this.currentSession);\n }\n}\n\nclass MongoQuery<TResult> implements MongooseQueryLike<TResult> {\n private currentSession?: MongoSessionLike;\n private sortOrder?: MongoSort;\n private skipValue?: number;\n private limitValue?: number;\n\n constructor(\n private readonly run: (input: {\n session?: MongoSessionLike;\n sort?: MongoSort;\n skip?: number;\n limit?: number;\n }) => Promise<TResult>,\n ) {}\n\n sort(sort: MongoSort) {\n this.sortOrder = sort;\n return this;\n }\n\n skip(value: number) {\n this.skipValue = value;\n return this;\n }\n\n limit(value: number) {\n this.limitValue = value;\n return this;\n }\n\n session(session: MongoSessionLike) {\n this.currentSession = session;\n return this;\n }\n\n lean() {\n return this;\n }\n\n exec() {\n return this.run({\n session: this.currentSession,\n sort: this.sortOrder,\n skip: this.skipValue,\n limit: this.limitValue,\n });\n }\n}\n\nfunction normalizeFindOneResult(result: MongoRow | null | { value: MongoRow | null }) {\n if (result && typeof result === \"object\" && \"value\" in result) {\n return result.value ?? null;\n }\n return result ?? null;\n}\n\nfunction resolveCollections<TSchema extends SchemaDefinition<any>>(\n schema: TSchema,\n config: MongoDriverConfig<TSchema>,\n) {\n const manifest = createManifest(schema);\n const collections = {} as Record<ModelName<TSchema>, MongoCollectionLike>;\n\n for (const modelName of Object.keys(schema.models) as Array<ModelName<TSchema>>) {\n const collection =\n config.collections?.[modelName] ?? config.db?.collection(manifest.models[modelName].table);\n\n if (!collection) {\n throw new Error(\n `No MongoDB collection was provided for schema model \"${String(modelName)}\". Pass \"collections\" or \"db\".`,\n );\n }\n\n collections[modelName] = collection;\n }\n\n return collections;\n}\n\nfunction adaptCollection(collection: MongoCollectionLike): MongooseModelLike {\n return {\n find(filter) {\n return new MongoQuery(async ({ session, sort, skip, limit }) => {\n let cursor = collection.find(filter, session ? { session } : undefined);\n if (sort) cursor = cursor.sort(sort);\n if (skip !== undefined) cursor = cursor.skip(skip);\n if (limit !== undefined) cursor = cursor.limit(limit);\n return cursor.toArray();\n });\n },\n findOne(filter) {\n return new MongoQuery(async ({ session, sort, skip, limit }) => {\n if (!sort && skip === undefined && limit === undefined) {\n return collection.findOne(filter, session ? { session } : undefined);\n }\n\n let cursor = collection.find(filter, session ? { session } : undefined);\n if (sort) cursor = cursor.sort(sort);\n if (skip !== undefined) cursor = cursor.skip(skip);\n cursor = cursor.limit(limit ?? 1);\n const rows = await cursor.toArray();\n return rows[0] ?? null;\n });\n },\n countDocuments(filter) {\n return new MongoExec((session) =>\n collection.countDocuments(filter, session ? { session } : undefined),\n );\n },\n async create(doc, options) {\n if (Array.isArray(doc)) {\n if (doc.length === 0) return [];\n\n if (collection.insertMany) {\n const result = await collection.insertMany(\n doc,\n options?.session ? { session: options.session } : undefined,\n );\n const insertedIds =\n result &&\n typeof result === \"object\" &&\n \"insertedIds\" in result &&\n result.insertedIds &&\n typeof result.insertedIds === \"object\"\n ? (result.insertedIds as Record<number, unknown>)\n : undefined;\n\n return doc.map((entry, index) => {\n const insertedId = insertedIds?.[index];\n\n if (entry._id === undefined && insertedId !== undefined) {\n return {\n ...entry,\n _id: insertedId,\n };\n }\n\n return entry;\n });\n }\n\n const created: MongoRow[] = [];\n for (const entry of doc) {\n created.push((await this.create(entry, options)) as MongoRow);\n }\n return created;\n }\n\n const result = await collection.insertOne(\n doc,\n options?.session ? { session: options.session } : undefined,\n );\n if (doc._id === undefined && result?.insertedId !== undefined) {\n return {\n ...doc,\n _id: result.insertedId,\n };\n }\n return doc;\n },\n async insertMany(docs, options) {\n if (collection.insertMany) {\n await collection.insertMany(\n docs,\n options?.session ? { session: options.session } : undefined,\n );\n return docs;\n }\n\n for (const doc of docs) {\n await collection.insertOne(\n doc,\n options?.session ? { session: options.session } : undefined,\n );\n }\n\n return docs;\n },\n updateMany(filter, update, options) {\n return new MongoExec((session) =>\n collection.updateMany(filter, update, {\n session: options?.session ?? session,\n }),\n );\n },\n findOneAndUpdate(filter, update, options) {\n return new MongoQuery<MongoRow | null>(async ({ session }) => {\n const result = await collection.findOneAndUpdate(filter, update, {\n upsert: options?.upsert,\n returnDocument: options?.returnDocument ?? (options?.new ? \"after\" : \"before\"),\n session: options?.session ?? session,\n });\n return normalizeFindOneResult(result) as MongoRow | null;\n });\n },\n findOneAndDelete(filter, options) {\n return new MongoQuery<MongoRow | null>(async ({ session }) => {\n const result = await collection.findOneAndDelete(filter, {\n session: options?.session ?? session,\n });\n return normalizeFindOneResult(result) as MongoRow | null;\n });\n },\n deleteMany(filter, options) {\n return new MongoExec((session) =>\n collection.deleteMany(filter, {\n session: options?.session ?? session,\n }),\n );\n },\n };\n}\n\nexport function createMongoDriver<TSchema extends SchemaDefinition<any>>(\n config: MongoDriverConfig<TSchema>,\n): OrmDriver<TSchema> {\n const delegateCache = new WeakMap<object, OrmDriver<TSchema>>();\n\n function getDelegate(schema: TSchema) {\n const cached = delegateCache.get(schema);\n if (cached) return cached;\n\n const collections = resolveCollections(schema, config);\n const models = Object.fromEntries(\n Object.entries(collections).map(([modelName, collection]) => [\n modelName,\n adaptCollection(collection),\n ]),\n ) as Record<ModelName<TSchema>, MongooseModelLike>;\n\n const driver = createMongooseDriver<TSchema>({\n models,\n connection: config.client,\n startSession: config.startSession,\n transforms: config.transforms,\n });\n delegateCache.set(schema, driver);\n return driver;\n }\n\n return {\n findMany(schema, model, args) {\n return getDelegate(schema).findMany(schema, model, args);\n },\n findFirst(schema, model, args) {\n return getDelegate(schema).findFirst(schema, model, args);\n },\n findUnique(schema, model, args) {\n return getDelegate(schema).findUnique(schema, model, args);\n },\n count(schema, model, args) {\n return getDelegate(schema).count(schema, model, args);\n },\n create(schema, model, args) {\n return getDelegate(schema).create(schema, model, args);\n },\n createMany(schema, model, args) {\n return getDelegate(schema).createMany(schema, model, args);\n },\n update(schema, model, args) {\n return getDelegate(schema).update(schema, model, args);\n },\n updateMany(schema, model, args) {\n return getDelegate(schema).updateMany(schema, model, args);\n },\n upsert(schema, model, args) {\n return getDelegate(schema).upsert(schema, model, args);\n },\n delete(schema, model, args) {\n return getDelegate(schema).delete(schema, model, args);\n },\n deleteMany(schema, model, args) {\n return getDelegate(schema).deleteMany(schema, model, args);\n },\n transaction(schema, run) {\n return getDelegate(schema).transaction(schema, run);\n },\n };\n}\n"],"mappings":"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","names":["result"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n createManifest,\n type OrmDriver,\n type OrmDriverHandle,\n type SchemaDefinition,\n} from \"@farming-labs/orm\";\nimport type { ModelName } from \"@farming-labs/orm\";\nimport {\n createMongooseDriver,\n type MongooseDriverConfig,\n type MongooseExecLike,\n type MongooseModelLike,\n type MongooseQueryLike,\n type MongooseSessionLike,\n type MongooseSessionSourceLike,\n} from \"@farming-labs/orm-mongoose\";\n\ntype MongoRow = Record<string, unknown>;\ntype MongoSort = Record<string, 1 | -1>;\n\nexport type MongoSessionLike = MongooseSessionLike;\nexport type MongoSessionSourceLike = MongooseSessionSourceLike;\n\nexport type MongoCursorLike<TResult = MongoRow> = {\n sort(sort: MongoSort): MongoCursorLike<TResult>;\n skip(value: number): MongoCursorLike<TResult>;\n limit(value: number): MongoCursorLike<TResult>;\n toArray(): Promise<TResult[]>;\n};\n\nexport type MongoCollectionLike = {\n collectionName?: string;\n find(filter: Record<string, unknown>, options?: { session?: MongoSessionLike }): MongoCursorLike;\n findOne(\n filter: Record<string, unknown>,\n options?: { session?: MongoSessionLike },\n ): Promise<MongoRow | null>;\n countDocuments(\n filter: Record<string, unknown>,\n options?: { session?: MongoSessionLike },\n ): Promise<number>;\n insertOne(\n doc: MongoRow,\n options?: { session?: MongoSessionLike },\n ): Promise<{ insertedId?: unknown }>;\n insertMany?(\n docs: MongoRow[],\n options?: { session?: MongoSessionLike },\n ): Promise<{ insertedIds?: Record<number, unknown> } | unknown>;\n updateMany(\n filter: Record<string, unknown>,\n update: { $set: MongoRow },\n options?: { session?: MongoSessionLike },\n ): Promise<{ modifiedCount?: number; matchedCount?: number }>;\n findOneAndUpdate(\n filter: Record<string, unknown>,\n update: { $set?: MongoRow; $setOnInsert?: MongoRow },\n options?: {\n upsert?: boolean;\n returnDocument?: \"after\" | \"before\";\n session?: MongoSessionLike;\n },\n ): Promise<MongoRow | null | { value: MongoRow | null }>;\n findOneAndDelete(\n filter: Record<string, unknown>,\n options?: { session?: MongoSessionLike },\n ): Promise<MongoRow | null | { value: MongoRow | null }>;\n deleteMany(\n filter: Record<string, unknown>,\n options?: { session?: MongoSessionLike },\n ): Promise<{ deletedCount?: number }>;\n};\n\nexport type MongoDbLike = {\n collection(name: string): MongoCollectionLike;\n};\n\nexport type MongoCollectionMap<TSchema extends SchemaDefinition<any>> = Partial<\n Record<ModelName<TSchema>, MongoCollectionLike>\n>;\n\nexport type MongoDriverConfig<TSchema extends SchemaDefinition<any>> = {\n collections?: MongoCollectionMap<TSchema>;\n db?: MongoDbLike;\n client?: MongoSessionSourceLike;\n startSession?: () => Promise<MongoSessionLike>;\n transforms?: MongooseDriverConfig<TSchema>[\"transforms\"];\n};\n\nexport type MongoDriverClient<TSchema extends SchemaDefinition<any>> = {\n collections?: MongoCollectionMap<TSchema>;\n db?: MongoDbLike;\n client?: MongoSessionSourceLike;\n startSession?: () => Promise<MongoSessionLike>;\n};\n\nexport type MongoDriverHandle<TSchema extends SchemaDefinition<any>> = OrmDriverHandle<\n \"mongo\",\n MongoDriverClient<TSchema>\n>;\n\nclass MongoExec<TResult> implements MongooseExecLike<TResult> {\n private currentSession?: MongoSessionLike;\n\n constructor(private readonly run: (session?: MongoSessionLike) => Promise<TResult>) {}\n\n session(session: MongoSessionLike) {\n this.currentSession = session;\n return this;\n }\n\n exec() {\n return this.run(this.currentSession);\n }\n}\n\nclass MongoQuery<TResult> implements MongooseQueryLike<TResult> {\n private currentSession?: MongoSessionLike;\n private sortOrder?: MongoSort;\n private skipValue?: number;\n private limitValue?: number;\n\n constructor(\n private readonly run: (input: {\n session?: MongoSessionLike;\n sort?: MongoSort;\n skip?: number;\n limit?: number;\n }) => Promise<TResult>,\n ) {}\n\n sort(sort: MongoSort) {\n this.sortOrder = sort;\n return this;\n }\n\n skip(value: number) {\n this.skipValue = value;\n return this;\n }\n\n limit(value: number) {\n this.limitValue = value;\n return this;\n }\n\n session(session: MongoSessionLike) {\n this.currentSession = session;\n return this;\n }\n\n lean() {\n return this;\n }\n\n exec() {\n return this.run({\n session: this.currentSession,\n sort: this.sortOrder,\n skip: this.skipValue,\n limit: this.limitValue,\n });\n }\n}\n\nfunction normalizeFindOneResult(result: MongoRow | null | { value: MongoRow | null }) {\n if (result && typeof result === \"object\" && \"value\" in result) {\n return result.value ?? null;\n }\n return result ?? null;\n}\n\nfunction resolveCollections<TSchema extends SchemaDefinition<any>>(\n schema: TSchema,\n config: MongoDriverConfig<TSchema>,\n) {\n const manifest = createManifest(schema);\n const collections = {} as Record<ModelName<TSchema>, MongoCollectionLike>;\n\n for (const modelName of Object.keys(schema.models) as Array<ModelName<TSchema>>) {\n const collection =\n config.collections?.[modelName] ?? config.db?.collection(manifest.models[modelName].table);\n\n if (!collection) {\n throw new Error(\n `No MongoDB collection was provided for schema model \"${String(modelName)}\". Pass \"collections\" or \"db\".`,\n );\n }\n\n collections[modelName] = collection;\n }\n\n return collections;\n}\n\nfunction adaptCollection(collection: MongoCollectionLike): MongooseModelLike {\n return {\n find(filter) {\n return new MongoQuery(async ({ session, sort, skip, limit }) => {\n let cursor = collection.find(filter, session ? { session } : undefined);\n if (sort) cursor = cursor.sort(sort);\n if (skip !== undefined) cursor = cursor.skip(skip);\n if (limit !== undefined) cursor = cursor.limit(limit);\n return cursor.toArray();\n });\n },\n findOne(filter) {\n return new MongoQuery(async ({ session, sort, skip, limit }) => {\n if (!sort && skip === undefined && limit === undefined) {\n return collection.findOne(filter, session ? { session } : undefined);\n }\n\n let cursor = collection.find(filter, session ? { session } : undefined);\n if (sort) cursor = cursor.sort(sort);\n if (skip !== undefined) cursor = cursor.skip(skip);\n cursor = cursor.limit(limit ?? 1);\n const rows = await cursor.toArray();\n return rows[0] ?? null;\n });\n },\n countDocuments(filter) {\n return new MongoExec((session) =>\n collection.countDocuments(filter, session ? { session } : undefined),\n );\n },\n async create(doc, options) {\n if (Array.isArray(doc)) {\n if (doc.length === 0) return [];\n\n if (collection.insertMany) {\n const result = await collection.insertMany(\n doc,\n options?.session ? { session: options.session } : undefined,\n );\n const insertedIds =\n result &&\n typeof result === \"object\" &&\n \"insertedIds\" in result &&\n result.insertedIds &&\n typeof result.insertedIds === \"object\"\n ? (result.insertedIds as Record<number, unknown>)\n : undefined;\n\n return doc.map((entry, index) => {\n const insertedId = insertedIds?.[index];\n\n if (entry._id === undefined && insertedId !== undefined) {\n return {\n ...entry,\n _id: insertedId,\n };\n }\n\n return entry;\n });\n }\n\n const created: MongoRow[] = [];\n for (const entry of doc) {\n created.push((await this.create(entry, options)) as MongoRow);\n }\n return created;\n }\n\n const result = await collection.insertOne(\n doc,\n options?.session ? { session: options.session } : undefined,\n );\n if (doc._id === undefined && result?.insertedId !== undefined) {\n return {\n ...doc,\n _id: result.insertedId,\n };\n }\n return doc;\n },\n async insertMany(docs, options) {\n if (collection.insertMany) {\n await collection.insertMany(\n docs,\n options?.session ? { session: options.session } : undefined,\n );\n return docs;\n }\n\n for (const doc of docs) {\n await collection.insertOne(\n doc,\n options?.session ? { session: options.session } : undefined,\n );\n }\n\n return docs;\n },\n updateMany(filter, update, options) {\n return new MongoExec((session) =>\n collection.updateMany(filter, update, {\n session: options?.session ?? session,\n }),\n );\n },\n findOneAndUpdate(filter, update, options) {\n return new MongoQuery<MongoRow | null>(async ({ session }) => {\n const result = await collection.findOneAndUpdate(filter, update, {\n upsert: options?.upsert,\n returnDocument: options?.returnDocument ?? (options?.new ? \"after\" : \"before\"),\n session: options?.session ?? session,\n });\n return normalizeFindOneResult(result) as MongoRow | null;\n });\n },\n findOneAndDelete(filter, options) {\n return new MongoQuery<MongoRow | null>(async ({ session }) => {\n const result = await collection.findOneAndDelete(filter, {\n session: options?.session ?? session,\n });\n return normalizeFindOneResult(result) as MongoRow | null;\n });\n },\n deleteMany(filter, options) {\n return new MongoExec((session) =>\n collection.deleteMany(filter, {\n session: options?.session ?? session,\n }),\n );\n },\n };\n}\n\nexport function createMongoDriver<TSchema extends SchemaDefinition<any>>(\n config: MongoDriverConfig<TSchema>,\n): OrmDriver<TSchema, MongoDriverHandle<TSchema>> {\n const handle: MongoDriverHandle<TSchema> = {\n kind: \"mongo\",\n client: {\n collections: config.collections,\n db: config.db,\n client: config.client,\n startSession: config.startSession,\n },\n };\n const delegateCache = new WeakMap<object, OrmDriver<TSchema, any>>();\n\n function wrapDelegate(\n delegate: OrmDriver<TSchema, any>,\n ): OrmDriver<TSchema, MongoDriverHandle<TSchema>> {\n return {\n handle,\n findMany(schema, model, args) {\n return delegate.findMany(schema, model, args);\n },\n findFirst(schema, model, args) {\n return delegate.findFirst(schema, model, args);\n },\n findUnique(schema, model, args) {\n return delegate.findUnique(schema, model, args);\n },\n count(schema, model, args) {\n return delegate.count(schema, model, args);\n },\n create(schema, model, args) {\n return delegate.create(schema, model, args);\n },\n createMany(schema, model, args) {\n return delegate.createMany(schema, model, args);\n },\n update(schema, model, args) {\n return delegate.update(schema, model, args);\n },\n updateMany(schema, model, args) {\n return delegate.updateMany(schema, model, args);\n },\n upsert(schema, model, args) {\n return delegate.upsert(schema, model, args);\n },\n delete(schema, model, args) {\n return delegate.delete(schema, model, args);\n },\n deleteMany(schema, model, args) {\n return delegate.deleteMany(schema, model, args);\n },\n transaction(schema, run) {\n return delegate.transaction(schema, async (txDriver) => run(wrapDelegate(txDriver)));\n },\n };\n }\n\n function getDelegate(schema: TSchema) {\n const cached = delegateCache.get(schema);\n if (cached) return cached;\n\n const collections = resolveCollections(schema, config);\n const models = Object.fromEntries(\n Object.entries(collections).map(([modelName, collection]) => [\n modelName,\n adaptCollection(collection),\n ]),\n ) as Record<ModelName<TSchema>, MongooseModelLike>;\n\n const driver = createMongooseDriver<TSchema>({\n models,\n connection: config.client,\n startSession: config.startSession,\n transforms: config.transforms,\n });\n delegateCache.set(schema, driver);\n return driver;\n }\n\n return {\n handle,\n findMany(schema, model, args) {\n return getDelegate(schema).findMany(schema, model, args);\n },\n findFirst(schema, model, args) {\n return getDelegate(schema).findFirst(schema, model, args);\n },\n findUnique(schema, model, args) {\n return getDelegate(schema).findUnique(schema, model, args);\n },\n count(schema, model, args) {\n return getDelegate(schema).count(schema, model, args);\n },\n create(schema, model, args) {\n return getDelegate(schema).create(schema, model, args);\n },\n createMany(schema, model, args) {\n return getDelegate(schema).createMany(schema, model, args);\n },\n update(schema, model, args) {\n return getDelegate(schema).update(schema, model, args);\n },\n updateMany(schema, model, args) {\n return getDelegate(schema).updateMany(schema, model, args);\n },\n upsert(schema, model, args) {\n return getDelegate(schema).upsert(schema, model, args);\n },\n delete(schema, model, args) {\n return getDelegate(schema).delete(schema, model, args);\n },\n deleteMany(schema, model, args) {\n return getDelegate(schema).deleteMany(schema, model, args);\n },\n transaction(schema, run) {\n return getDelegate(schema).transaction(schema, async (txDriver) =>\n run(wrapDelegate(txDriver)),\n );\n },\n };\n}\n"],"mappings":"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","names":["result"]}
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { SchemaDefinition, ModelName, OrmDriver } from '@farming-labs/orm';
1
+ import { SchemaDefinition, ModelName, OrmDriverHandle, OrmDriver } from '@farming-labs/orm';
2
2
  import { MongooseSessionLike, MongooseSessionSourceLike, MongooseDriverConfig } from '@farming-labs/orm-mongoose';
3
3
 
4
4
  type MongoRow = Record<string, unknown>;
@@ -72,6 +72,13 @@ type MongoDriverConfig<TSchema extends SchemaDefinition<any>> = {
72
72
  startSession?: () => Promise<MongoSessionLike>;
73
73
  transforms?: MongooseDriverConfig<TSchema>["transforms"];
74
74
  };
75
- declare function createMongoDriver<TSchema extends SchemaDefinition<any>>(config: MongoDriverConfig<TSchema>): OrmDriver<TSchema>;
75
+ type MongoDriverClient<TSchema extends SchemaDefinition<any>> = {
76
+ collections?: MongoCollectionMap<TSchema>;
77
+ db?: MongoDbLike;
78
+ client?: MongoSessionSourceLike;
79
+ startSession?: () => Promise<MongoSessionLike>;
80
+ };
81
+ type MongoDriverHandle<TSchema extends SchemaDefinition<any>> = OrmDriverHandle<"mongo", MongoDriverClient<TSchema>>;
82
+ declare function createMongoDriver<TSchema extends SchemaDefinition<any>>(config: MongoDriverConfig<TSchema>): OrmDriver<TSchema, MongoDriverHandle<TSchema>>;
76
83
 
77
- export { type MongoCollectionLike, type MongoCollectionMap, type MongoCursorLike, type MongoDbLike, type MongoDriverConfig, type MongoSessionLike, type MongoSessionSourceLike, createMongoDriver };
84
+ export { type MongoCollectionLike, type MongoCollectionMap, type MongoCursorLike, type MongoDbLike, type MongoDriverClient, type MongoDriverConfig, type MongoDriverHandle, type MongoSessionLike, type MongoSessionSourceLike, createMongoDriver };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { SchemaDefinition, ModelName, OrmDriver } from '@farming-labs/orm';
1
+ import { SchemaDefinition, ModelName, OrmDriverHandle, OrmDriver } from '@farming-labs/orm';
2
2
  import { MongooseSessionLike, MongooseSessionSourceLike, MongooseDriverConfig } from '@farming-labs/orm-mongoose';
3
3
 
4
4
  type MongoRow = Record<string, unknown>;
@@ -72,6 +72,13 @@ type MongoDriverConfig<TSchema extends SchemaDefinition<any>> = {
72
72
  startSession?: () => Promise<MongoSessionLike>;
73
73
  transforms?: MongooseDriverConfig<TSchema>["transforms"];
74
74
  };
75
- declare function createMongoDriver<TSchema extends SchemaDefinition<any>>(config: MongoDriverConfig<TSchema>): OrmDriver<TSchema>;
75
+ type MongoDriverClient<TSchema extends SchemaDefinition<any>> = {
76
+ collections?: MongoCollectionMap<TSchema>;
77
+ db?: MongoDbLike;
78
+ client?: MongoSessionSourceLike;
79
+ startSession?: () => Promise<MongoSessionLike>;
80
+ };
81
+ type MongoDriverHandle<TSchema extends SchemaDefinition<any>> = OrmDriverHandle<"mongo", MongoDriverClient<TSchema>>;
82
+ declare function createMongoDriver<TSchema extends SchemaDefinition<any>>(config: MongoDriverConfig<TSchema>): OrmDriver<TSchema, MongoDriverHandle<TSchema>>;
76
83
 
77
- export { type MongoCollectionLike, type MongoCollectionMap, type MongoCursorLike, type MongoDbLike, type MongoDriverConfig, type MongoSessionLike, type MongoSessionSourceLike, createMongoDriver };
84
+ export { type MongoCollectionLike, type MongoCollectionMap, type MongoCursorLike, type MongoDbLike, type MongoDriverClient, type MongoDriverConfig, type MongoDriverHandle, type MongoSessionLike, type MongoSessionSourceLike, createMongoDriver };
package/dist/index.js CHANGED
@@ -1,5 +1,7 @@
1
1
  // src/index.ts
2
- import { createManifest } from "@farming-labs/orm";
2
+ import {
3
+ createManifest
4
+ } from "@farming-labs/orm";
3
5
  import {
4
6
  createMongooseDriver
5
7
  } from "@farming-labs/orm-mongoose";
@@ -190,7 +192,57 @@ function adaptCollection(collection) {
190
192
  };
191
193
  }
192
194
  function createMongoDriver(config) {
195
+ const handle = {
196
+ kind: "mongo",
197
+ client: {
198
+ collections: config.collections,
199
+ db: config.db,
200
+ client: config.client,
201
+ startSession: config.startSession
202
+ }
203
+ };
193
204
  const delegateCache = /* @__PURE__ */ new WeakMap();
205
+ function wrapDelegate(delegate) {
206
+ return {
207
+ handle,
208
+ findMany(schema, model, args) {
209
+ return delegate.findMany(schema, model, args);
210
+ },
211
+ findFirst(schema, model, args) {
212
+ return delegate.findFirst(schema, model, args);
213
+ },
214
+ findUnique(schema, model, args) {
215
+ return delegate.findUnique(schema, model, args);
216
+ },
217
+ count(schema, model, args) {
218
+ return delegate.count(schema, model, args);
219
+ },
220
+ create(schema, model, args) {
221
+ return delegate.create(schema, model, args);
222
+ },
223
+ createMany(schema, model, args) {
224
+ return delegate.createMany(schema, model, args);
225
+ },
226
+ update(schema, model, args) {
227
+ return delegate.update(schema, model, args);
228
+ },
229
+ updateMany(schema, model, args) {
230
+ return delegate.updateMany(schema, model, args);
231
+ },
232
+ upsert(schema, model, args) {
233
+ return delegate.upsert(schema, model, args);
234
+ },
235
+ delete(schema, model, args) {
236
+ return delegate.delete(schema, model, args);
237
+ },
238
+ deleteMany(schema, model, args) {
239
+ return delegate.deleteMany(schema, model, args);
240
+ },
241
+ transaction(schema, run) {
242
+ return delegate.transaction(schema, async (txDriver) => run(wrapDelegate(txDriver)));
243
+ }
244
+ };
245
+ }
194
246
  function getDelegate(schema) {
195
247
  const cached = delegateCache.get(schema);
196
248
  if (cached) return cached;
@@ -211,6 +263,7 @@ function createMongoDriver(config) {
211
263
  return driver;
212
264
  }
213
265
  return {
266
+ handle,
214
267
  findMany(schema, model, args) {
215
268
  return getDelegate(schema).findMany(schema, model, args);
216
269
  },
@@ -245,7 +298,10 @@ function createMongoDriver(config) {
245
298
  return getDelegate(schema).deleteMany(schema, model, args);
246
299
  },
247
300
  transaction(schema, run) {
248
- return getDelegate(schema).transaction(schema, run);
301
+ return getDelegate(schema).transaction(
302
+ schema,
303
+ async (txDriver) => run(wrapDelegate(txDriver))
304
+ );
249
305
  }
250
306
  };
251
307
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { createManifest, type OrmDriver, type SchemaDefinition } from \"@farming-labs/orm\";\nimport type { ModelName } from \"@farming-labs/orm\";\nimport {\n createMongooseDriver,\n type MongooseDriverConfig,\n type MongooseExecLike,\n type MongooseModelLike,\n type MongooseQueryLike,\n type MongooseSessionLike,\n type MongooseSessionSourceLike,\n} from \"@farming-labs/orm-mongoose\";\n\ntype MongoRow = Record<string, unknown>;\ntype MongoSort = Record<string, 1 | -1>;\n\nexport type MongoSessionLike = MongooseSessionLike;\nexport type MongoSessionSourceLike = MongooseSessionSourceLike;\n\nexport type MongoCursorLike<TResult = MongoRow> = {\n sort(sort: MongoSort): MongoCursorLike<TResult>;\n skip(value: number): MongoCursorLike<TResult>;\n limit(value: number): MongoCursorLike<TResult>;\n toArray(): Promise<TResult[]>;\n};\n\nexport type MongoCollectionLike = {\n collectionName?: string;\n find(filter: Record<string, unknown>, options?: { session?: MongoSessionLike }): MongoCursorLike;\n findOne(\n filter: Record<string, unknown>,\n options?: { session?: MongoSessionLike },\n ): Promise<MongoRow | null>;\n countDocuments(\n filter: Record<string, unknown>,\n options?: { session?: MongoSessionLike },\n ): Promise<number>;\n insertOne(\n doc: MongoRow,\n options?: { session?: MongoSessionLike },\n ): Promise<{ insertedId?: unknown }>;\n insertMany?(\n docs: MongoRow[],\n options?: { session?: MongoSessionLike },\n ): Promise<{ insertedIds?: Record<number, unknown> } | unknown>;\n updateMany(\n filter: Record<string, unknown>,\n update: { $set: MongoRow },\n options?: { session?: MongoSessionLike },\n ): Promise<{ modifiedCount?: number; matchedCount?: number }>;\n findOneAndUpdate(\n filter: Record<string, unknown>,\n update: { $set?: MongoRow; $setOnInsert?: MongoRow },\n options?: {\n upsert?: boolean;\n returnDocument?: \"after\" | \"before\";\n session?: MongoSessionLike;\n },\n ): Promise<MongoRow | null | { value: MongoRow | null }>;\n findOneAndDelete(\n filter: Record<string, unknown>,\n options?: { session?: MongoSessionLike },\n ): Promise<MongoRow | null | { value: MongoRow | null }>;\n deleteMany(\n filter: Record<string, unknown>,\n options?: { session?: MongoSessionLike },\n ): Promise<{ deletedCount?: number }>;\n};\n\nexport type MongoDbLike = {\n collection(name: string): MongoCollectionLike;\n};\n\nexport type MongoCollectionMap<TSchema extends SchemaDefinition<any>> = Partial<\n Record<ModelName<TSchema>, MongoCollectionLike>\n>;\n\nexport type MongoDriverConfig<TSchema extends SchemaDefinition<any>> = {\n collections?: MongoCollectionMap<TSchema>;\n db?: MongoDbLike;\n client?: MongoSessionSourceLike;\n startSession?: () => Promise<MongoSessionLike>;\n transforms?: MongooseDriverConfig<TSchema>[\"transforms\"];\n};\n\nclass MongoExec<TResult> implements MongooseExecLike<TResult> {\n private currentSession?: MongoSessionLike;\n\n constructor(private readonly run: (session?: MongoSessionLike) => Promise<TResult>) {}\n\n session(session: MongoSessionLike) {\n this.currentSession = session;\n return this;\n }\n\n exec() {\n return this.run(this.currentSession);\n }\n}\n\nclass MongoQuery<TResult> implements MongooseQueryLike<TResult> {\n private currentSession?: MongoSessionLike;\n private sortOrder?: MongoSort;\n private skipValue?: number;\n private limitValue?: number;\n\n constructor(\n private readonly run: (input: {\n session?: MongoSessionLike;\n sort?: MongoSort;\n skip?: number;\n limit?: number;\n }) => Promise<TResult>,\n ) {}\n\n sort(sort: MongoSort) {\n this.sortOrder = sort;\n return this;\n }\n\n skip(value: number) {\n this.skipValue = value;\n return this;\n }\n\n limit(value: number) {\n this.limitValue = value;\n return this;\n }\n\n session(session: MongoSessionLike) {\n this.currentSession = session;\n return this;\n }\n\n lean() {\n return this;\n }\n\n exec() {\n return this.run({\n session: this.currentSession,\n sort: this.sortOrder,\n skip: this.skipValue,\n limit: this.limitValue,\n });\n }\n}\n\nfunction normalizeFindOneResult(result: MongoRow | null | { value: MongoRow | null }) {\n if (result && typeof result === \"object\" && \"value\" in result) {\n return result.value ?? null;\n }\n return result ?? null;\n}\n\nfunction resolveCollections<TSchema extends SchemaDefinition<any>>(\n schema: TSchema,\n config: MongoDriverConfig<TSchema>,\n) {\n const manifest = createManifest(schema);\n const collections = {} as Record<ModelName<TSchema>, MongoCollectionLike>;\n\n for (const modelName of Object.keys(schema.models) as Array<ModelName<TSchema>>) {\n const collection =\n config.collections?.[modelName] ?? config.db?.collection(manifest.models[modelName].table);\n\n if (!collection) {\n throw new Error(\n `No MongoDB collection was provided for schema model \"${String(modelName)}\". Pass \"collections\" or \"db\".`,\n );\n }\n\n collections[modelName] = collection;\n }\n\n return collections;\n}\n\nfunction adaptCollection(collection: MongoCollectionLike): MongooseModelLike {\n return {\n find(filter) {\n return new MongoQuery(async ({ session, sort, skip, limit }) => {\n let cursor = collection.find(filter, session ? { session } : undefined);\n if (sort) cursor = cursor.sort(sort);\n if (skip !== undefined) cursor = cursor.skip(skip);\n if (limit !== undefined) cursor = cursor.limit(limit);\n return cursor.toArray();\n });\n },\n findOne(filter) {\n return new MongoQuery(async ({ session, sort, skip, limit }) => {\n if (!sort && skip === undefined && limit === undefined) {\n return collection.findOne(filter, session ? { session } : undefined);\n }\n\n let cursor = collection.find(filter, session ? { session } : undefined);\n if (sort) cursor = cursor.sort(sort);\n if (skip !== undefined) cursor = cursor.skip(skip);\n cursor = cursor.limit(limit ?? 1);\n const rows = await cursor.toArray();\n return rows[0] ?? null;\n });\n },\n countDocuments(filter) {\n return new MongoExec((session) =>\n collection.countDocuments(filter, session ? { session } : undefined),\n );\n },\n async create(doc, options) {\n if (Array.isArray(doc)) {\n if (doc.length === 0) return [];\n\n if (collection.insertMany) {\n const result = await collection.insertMany(\n doc,\n options?.session ? { session: options.session } : undefined,\n );\n const insertedIds =\n result &&\n typeof result === \"object\" &&\n \"insertedIds\" in result &&\n result.insertedIds &&\n typeof result.insertedIds === \"object\"\n ? (result.insertedIds as Record<number, unknown>)\n : undefined;\n\n return doc.map((entry, index) => {\n const insertedId = insertedIds?.[index];\n\n if (entry._id === undefined && insertedId !== undefined) {\n return {\n ...entry,\n _id: insertedId,\n };\n }\n\n return entry;\n });\n }\n\n const created: MongoRow[] = [];\n for (const entry of doc) {\n created.push((await this.create(entry, options)) as MongoRow);\n }\n return created;\n }\n\n const result = await collection.insertOne(\n doc,\n options?.session ? { session: options.session } : undefined,\n );\n if (doc._id === undefined && result?.insertedId !== undefined) {\n return {\n ...doc,\n _id: result.insertedId,\n };\n }\n return doc;\n },\n async insertMany(docs, options) {\n if (collection.insertMany) {\n await collection.insertMany(\n docs,\n options?.session ? { session: options.session } : undefined,\n );\n return docs;\n }\n\n for (const doc of docs) {\n await collection.insertOne(\n doc,\n options?.session ? { session: options.session } : undefined,\n );\n }\n\n return docs;\n },\n updateMany(filter, update, options) {\n return new MongoExec((session) =>\n collection.updateMany(filter, update, {\n session: options?.session ?? session,\n }),\n );\n },\n findOneAndUpdate(filter, update, options) {\n return new MongoQuery<MongoRow | null>(async ({ session }) => {\n const result = await collection.findOneAndUpdate(filter, update, {\n upsert: options?.upsert,\n returnDocument: options?.returnDocument ?? (options?.new ? \"after\" : \"before\"),\n session: options?.session ?? session,\n });\n return normalizeFindOneResult(result) as MongoRow | null;\n });\n },\n findOneAndDelete(filter, options) {\n return new MongoQuery<MongoRow | null>(async ({ session }) => {\n const result = await collection.findOneAndDelete(filter, {\n session: options?.session ?? session,\n });\n return normalizeFindOneResult(result) as MongoRow | null;\n });\n },\n deleteMany(filter, options) {\n return new MongoExec((session) =>\n collection.deleteMany(filter, {\n session: options?.session ?? session,\n }),\n );\n },\n };\n}\n\nexport function createMongoDriver<TSchema extends SchemaDefinition<any>>(\n config: MongoDriverConfig<TSchema>,\n): OrmDriver<TSchema> {\n const delegateCache = new WeakMap<object, OrmDriver<TSchema>>();\n\n function getDelegate(schema: TSchema) {\n const cached = delegateCache.get(schema);\n if (cached) return cached;\n\n const collections = resolveCollections(schema, config);\n const models = Object.fromEntries(\n Object.entries(collections).map(([modelName, collection]) => [\n modelName,\n adaptCollection(collection),\n ]),\n ) as Record<ModelName<TSchema>, MongooseModelLike>;\n\n const driver = createMongooseDriver<TSchema>({\n models,\n connection: config.client,\n startSession: config.startSession,\n transforms: config.transforms,\n });\n delegateCache.set(schema, driver);\n return driver;\n }\n\n return {\n findMany(schema, model, args) {\n return getDelegate(schema).findMany(schema, model, args);\n },\n findFirst(schema, model, args) {\n return getDelegate(schema).findFirst(schema, model, args);\n },\n findUnique(schema, model, args) {\n return getDelegate(schema).findUnique(schema, model, args);\n },\n count(schema, model, args) {\n return getDelegate(schema).count(schema, model, args);\n },\n create(schema, model, args) {\n return getDelegate(schema).create(schema, model, args);\n },\n createMany(schema, model, args) {\n return getDelegate(schema).createMany(schema, model, args);\n },\n update(schema, model, args) {\n return getDelegate(schema).update(schema, model, args);\n },\n updateMany(schema, model, args) {\n return getDelegate(schema).updateMany(schema, model, args);\n },\n upsert(schema, model, args) {\n return getDelegate(schema).upsert(schema, model, args);\n },\n delete(schema, model, args) {\n return getDelegate(schema).delete(schema, model, args);\n },\n deleteMany(schema, model, args) {\n return getDelegate(schema).deleteMany(schema, model, args);\n },\n transaction(schema, run) {\n return getDelegate(schema).transaction(schema, run);\n },\n };\n}\n"],"mappings":"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","names":["result"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n createManifest,\n type OrmDriver,\n type OrmDriverHandle,\n type SchemaDefinition,\n} from \"@farming-labs/orm\";\nimport type { ModelName } from \"@farming-labs/orm\";\nimport {\n createMongooseDriver,\n type MongooseDriverConfig,\n type MongooseExecLike,\n type MongooseModelLike,\n type MongooseQueryLike,\n type MongooseSessionLike,\n type MongooseSessionSourceLike,\n} from \"@farming-labs/orm-mongoose\";\n\ntype MongoRow = Record<string, unknown>;\ntype MongoSort = Record<string, 1 | -1>;\n\nexport type MongoSessionLike = MongooseSessionLike;\nexport type MongoSessionSourceLike = MongooseSessionSourceLike;\n\nexport type MongoCursorLike<TResult = MongoRow> = {\n sort(sort: MongoSort): MongoCursorLike<TResult>;\n skip(value: number): MongoCursorLike<TResult>;\n limit(value: number): MongoCursorLike<TResult>;\n toArray(): Promise<TResult[]>;\n};\n\nexport type MongoCollectionLike = {\n collectionName?: string;\n find(filter: Record<string, unknown>, options?: { session?: MongoSessionLike }): MongoCursorLike;\n findOne(\n filter: Record<string, unknown>,\n options?: { session?: MongoSessionLike },\n ): Promise<MongoRow | null>;\n countDocuments(\n filter: Record<string, unknown>,\n options?: { session?: MongoSessionLike },\n ): Promise<number>;\n insertOne(\n doc: MongoRow,\n options?: { session?: MongoSessionLike },\n ): Promise<{ insertedId?: unknown }>;\n insertMany?(\n docs: MongoRow[],\n options?: { session?: MongoSessionLike },\n ): Promise<{ insertedIds?: Record<number, unknown> } | unknown>;\n updateMany(\n filter: Record<string, unknown>,\n update: { $set: MongoRow },\n options?: { session?: MongoSessionLike },\n ): Promise<{ modifiedCount?: number; matchedCount?: number }>;\n findOneAndUpdate(\n filter: Record<string, unknown>,\n update: { $set?: MongoRow; $setOnInsert?: MongoRow },\n options?: {\n upsert?: boolean;\n returnDocument?: \"after\" | \"before\";\n session?: MongoSessionLike;\n },\n ): Promise<MongoRow | null | { value: MongoRow | null }>;\n findOneAndDelete(\n filter: Record<string, unknown>,\n options?: { session?: MongoSessionLike },\n ): Promise<MongoRow | null | { value: MongoRow | null }>;\n deleteMany(\n filter: Record<string, unknown>,\n options?: { session?: MongoSessionLike },\n ): Promise<{ deletedCount?: number }>;\n};\n\nexport type MongoDbLike = {\n collection(name: string): MongoCollectionLike;\n};\n\nexport type MongoCollectionMap<TSchema extends SchemaDefinition<any>> = Partial<\n Record<ModelName<TSchema>, MongoCollectionLike>\n>;\n\nexport type MongoDriverConfig<TSchema extends SchemaDefinition<any>> = {\n collections?: MongoCollectionMap<TSchema>;\n db?: MongoDbLike;\n client?: MongoSessionSourceLike;\n startSession?: () => Promise<MongoSessionLike>;\n transforms?: MongooseDriverConfig<TSchema>[\"transforms\"];\n};\n\nexport type MongoDriverClient<TSchema extends SchemaDefinition<any>> = {\n collections?: MongoCollectionMap<TSchema>;\n db?: MongoDbLike;\n client?: MongoSessionSourceLike;\n startSession?: () => Promise<MongoSessionLike>;\n};\n\nexport type MongoDriverHandle<TSchema extends SchemaDefinition<any>> = OrmDriverHandle<\n \"mongo\",\n MongoDriverClient<TSchema>\n>;\n\nclass MongoExec<TResult> implements MongooseExecLike<TResult> {\n private currentSession?: MongoSessionLike;\n\n constructor(private readonly run: (session?: MongoSessionLike) => Promise<TResult>) {}\n\n session(session: MongoSessionLike) {\n this.currentSession = session;\n return this;\n }\n\n exec() {\n return this.run(this.currentSession);\n }\n}\n\nclass MongoQuery<TResult> implements MongooseQueryLike<TResult> {\n private currentSession?: MongoSessionLike;\n private sortOrder?: MongoSort;\n private skipValue?: number;\n private limitValue?: number;\n\n constructor(\n private readonly run: (input: {\n session?: MongoSessionLike;\n sort?: MongoSort;\n skip?: number;\n limit?: number;\n }) => Promise<TResult>,\n ) {}\n\n sort(sort: MongoSort) {\n this.sortOrder = sort;\n return this;\n }\n\n skip(value: number) {\n this.skipValue = value;\n return this;\n }\n\n limit(value: number) {\n this.limitValue = value;\n return this;\n }\n\n session(session: MongoSessionLike) {\n this.currentSession = session;\n return this;\n }\n\n lean() {\n return this;\n }\n\n exec() {\n return this.run({\n session: this.currentSession,\n sort: this.sortOrder,\n skip: this.skipValue,\n limit: this.limitValue,\n });\n }\n}\n\nfunction normalizeFindOneResult(result: MongoRow | null | { value: MongoRow | null }) {\n if (result && typeof result === \"object\" && \"value\" in result) {\n return result.value ?? null;\n }\n return result ?? null;\n}\n\nfunction resolveCollections<TSchema extends SchemaDefinition<any>>(\n schema: TSchema,\n config: MongoDriverConfig<TSchema>,\n) {\n const manifest = createManifest(schema);\n const collections = {} as Record<ModelName<TSchema>, MongoCollectionLike>;\n\n for (const modelName of Object.keys(schema.models) as Array<ModelName<TSchema>>) {\n const collection =\n config.collections?.[modelName] ?? config.db?.collection(manifest.models[modelName].table);\n\n if (!collection) {\n throw new Error(\n `No MongoDB collection was provided for schema model \"${String(modelName)}\". Pass \"collections\" or \"db\".`,\n );\n }\n\n collections[modelName] = collection;\n }\n\n return collections;\n}\n\nfunction adaptCollection(collection: MongoCollectionLike): MongooseModelLike {\n return {\n find(filter) {\n return new MongoQuery(async ({ session, sort, skip, limit }) => {\n let cursor = collection.find(filter, session ? { session } : undefined);\n if (sort) cursor = cursor.sort(sort);\n if (skip !== undefined) cursor = cursor.skip(skip);\n if (limit !== undefined) cursor = cursor.limit(limit);\n return cursor.toArray();\n });\n },\n findOne(filter) {\n return new MongoQuery(async ({ session, sort, skip, limit }) => {\n if (!sort && skip === undefined && limit === undefined) {\n return collection.findOne(filter, session ? { session } : undefined);\n }\n\n let cursor = collection.find(filter, session ? { session } : undefined);\n if (sort) cursor = cursor.sort(sort);\n if (skip !== undefined) cursor = cursor.skip(skip);\n cursor = cursor.limit(limit ?? 1);\n const rows = await cursor.toArray();\n return rows[0] ?? null;\n });\n },\n countDocuments(filter) {\n return new MongoExec((session) =>\n collection.countDocuments(filter, session ? { session } : undefined),\n );\n },\n async create(doc, options) {\n if (Array.isArray(doc)) {\n if (doc.length === 0) return [];\n\n if (collection.insertMany) {\n const result = await collection.insertMany(\n doc,\n options?.session ? { session: options.session } : undefined,\n );\n const insertedIds =\n result &&\n typeof result === \"object\" &&\n \"insertedIds\" in result &&\n result.insertedIds &&\n typeof result.insertedIds === \"object\"\n ? (result.insertedIds as Record<number, unknown>)\n : undefined;\n\n return doc.map((entry, index) => {\n const insertedId = insertedIds?.[index];\n\n if (entry._id === undefined && insertedId !== undefined) {\n return {\n ...entry,\n _id: insertedId,\n };\n }\n\n return entry;\n });\n }\n\n const created: MongoRow[] = [];\n for (const entry of doc) {\n created.push((await this.create(entry, options)) as MongoRow);\n }\n return created;\n }\n\n const result = await collection.insertOne(\n doc,\n options?.session ? { session: options.session } : undefined,\n );\n if (doc._id === undefined && result?.insertedId !== undefined) {\n return {\n ...doc,\n _id: result.insertedId,\n };\n }\n return doc;\n },\n async insertMany(docs, options) {\n if (collection.insertMany) {\n await collection.insertMany(\n docs,\n options?.session ? { session: options.session } : undefined,\n );\n return docs;\n }\n\n for (const doc of docs) {\n await collection.insertOne(\n doc,\n options?.session ? { session: options.session } : undefined,\n );\n }\n\n return docs;\n },\n updateMany(filter, update, options) {\n return new MongoExec((session) =>\n collection.updateMany(filter, update, {\n session: options?.session ?? session,\n }),\n );\n },\n findOneAndUpdate(filter, update, options) {\n return new MongoQuery<MongoRow | null>(async ({ session }) => {\n const result = await collection.findOneAndUpdate(filter, update, {\n upsert: options?.upsert,\n returnDocument: options?.returnDocument ?? (options?.new ? \"after\" : \"before\"),\n session: options?.session ?? session,\n });\n return normalizeFindOneResult(result) as MongoRow | null;\n });\n },\n findOneAndDelete(filter, options) {\n return new MongoQuery<MongoRow | null>(async ({ session }) => {\n const result = await collection.findOneAndDelete(filter, {\n session: options?.session ?? session,\n });\n return normalizeFindOneResult(result) as MongoRow | null;\n });\n },\n deleteMany(filter, options) {\n return new MongoExec((session) =>\n collection.deleteMany(filter, {\n session: options?.session ?? session,\n }),\n );\n },\n };\n}\n\nexport function createMongoDriver<TSchema extends SchemaDefinition<any>>(\n config: MongoDriverConfig<TSchema>,\n): OrmDriver<TSchema, MongoDriverHandle<TSchema>> {\n const handle: MongoDriverHandle<TSchema> = {\n kind: \"mongo\",\n client: {\n collections: config.collections,\n db: config.db,\n client: config.client,\n startSession: config.startSession,\n },\n };\n const delegateCache = new WeakMap<object, OrmDriver<TSchema, any>>();\n\n function wrapDelegate(\n delegate: OrmDriver<TSchema, any>,\n ): OrmDriver<TSchema, MongoDriverHandle<TSchema>> {\n return {\n handle,\n findMany(schema, model, args) {\n return delegate.findMany(schema, model, args);\n },\n findFirst(schema, model, args) {\n return delegate.findFirst(schema, model, args);\n },\n findUnique(schema, model, args) {\n return delegate.findUnique(schema, model, args);\n },\n count(schema, model, args) {\n return delegate.count(schema, model, args);\n },\n create(schema, model, args) {\n return delegate.create(schema, model, args);\n },\n createMany(schema, model, args) {\n return delegate.createMany(schema, model, args);\n },\n update(schema, model, args) {\n return delegate.update(schema, model, args);\n },\n updateMany(schema, model, args) {\n return delegate.updateMany(schema, model, args);\n },\n upsert(schema, model, args) {\n return delegate.upsert(schema, model, args);\n },\n delete(schema, model, args) {\n return delegate.delete(schema, model, args);\n },\n deleteMany(schema, model, args) {\n return delegate.deleteMany(schema, model, args);\n },\n transaction(schema, run) {\n return delegate.transaction(schema, async (txDriver) => run(wrapDelegate(txDriver)));\n },\n };\n }\n\n function getDelegate(schema: TSchema) {\n const cached = delegateCache.get(schema);\n if (cached) return cached;\n\n const collections = resolveCollections(schema, config);\n const models = Object.fromEntries(\n Object.entries(collections).map(([modelName, collection]) => [\n modelName,\n adaptCollection(collection),\n ]),\n ) as Record<ModelName<TSchema>, MongooseModelLike>;\n\n const driver = createMongooseDriver<TSchema>({\n models,\n connection: config.client,\n startSession: config.startSession,\n transforms: config.transforms,\n });\n delegateCache.set(schema, driver);\n return driver;\n }\n\n return {\n handle,\n findMany(schema, model, args) {\n return getDelegate(schema).findMany(schema, model, args);\n },\n findFirst(schema, model, args) {\n return getDelegate(schema).findFirst(schema, model, args);\n },\n findUnique(schema, model, args) {\n return getDelegate(schema).findUnique(schema, model, args);\n },\n count(schema, model, args) {\n return getDelegate(schema).count(schema, model, args);\n },\n create(schema, model, args) {\n return getDelegate(schema).create(schema, model, args);\n },\n createMany(schema, model, args) {\n return getDelegate(schema).createMany(schema, model, args);\n },\n update(schema, model, args) {\n return getDelegate(schema).update(schema, model, args);\n },\n updateMany(schema, model, args) {\n return getDelegate(schema).updateMany(schema, model, args);\n },\n upsert(schema, model, args) {\n return getDelegate(schema).upsert(schema, model, args);\n },\n delete(schema, model, args) {\n return getDelegate(schema).delete(schema, model, args);\n },\n deleteMany(schema, model, args) {\n return getDelegate(schema).deleteMany(schema, model, args);\n },\n transaction(schema, run) {\n return getDelegate(schema).transaction(schema, async (txDriver) =>\n run(wrapDelegate(txDriver)),\n );\n },\n };\n}\n"],"mappings":"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","names":["result"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farming-labs/orm-mongo",
3
- "version": "0.0.11",
3
+ "version": "0.0.13",
4
4
  "files": [
5
5
  "dist"
6
6
  ],
@@ -19,8 +19,8 @@
19
19
  "access": "public"
20
20
  },
21
21
  "dependencies": {
22
- "@farming-labs/orm": "0.0.11",
23
- "@farming-labs/orm-mongoose": "0.0.11"
22
+ "@farming-labs/orm": "0.0.13",
23
+ "@farming-labs/orm-mongoose": "0.0.13"
24
24
  },
25
25
  "devDependencies": {
26
26
  "mongodb": "^6.20.0",