@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 +55 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -3
- package/dist/index.d.ts +10 -3
- package/dist/index.js +58 -2
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
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(
|
|
321
|
+
return getDelegate(schema).transaction(
|
|
322
|
+
schema,
|
|
323
|
+
async (txDriver) => run(wrapDelegate(txDriver))
|
|
324
|
+
);
|
|
271
325
|
}
|
|
272
326
|
};
|
|
273
327
|
}
|
package/dist/index.cjs.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/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
|
-
|
|
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
|
-
|
|
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 {
|
|
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(
|
|
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.
|
|
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.
|
|
23
|
-
"@farming-labs/orm-mongoose": "0.0.
|
|
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",
|