@farming-labs/orm-mongoose 0.0.9 → 0.0.11

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
@@ -50,9 +50,6 @@ function applyDefault(value, field) {
50
50
  }
51
51
  return field.defaultValue;
52
52
  }
53
- function isFilterObject(value) {
54
- return !!value && typeof value === "object" && !(value instanceof Date) && !Array.isArray(value);
55
- }
56
53
  function escapeRegex(value) {
57
54
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
58
55
  }
@@ -70,73 +67,6 @@ function parseReference(reference) {
70
67
  if (!model || !field) return null;
71
68
  return { model, field };
72
69
  }
73
- function extractEqualityValue(filter) {
74
- if (!isFilterObject(filter)) {
75
- return {
76
- supported: true,
77
- value: filter
78
- };
79
- }
80
- const keys = Object.keys(filter);
81
- if (keys.length === 1 && "eq" in filter) {
82
- return {
83
- supported: true,
84
- value: filter.eq
85
- };
86
- }
87
- return {
88
- supported: false,
89
- value: void 0
90
- };
91
- }
92
- function extractUpsertConflict(model, where) {
93
- const keys = Object.keys(where).filter((key) => key !== "AND" && key !== "OR" && key !== "NOT");
94
- if ("AND" in where || "OR" in where || "NOT" in where || keys.length !== 1) {
95
- throw new Error(
96
- `Upsert on model "${model.name}" requires a single unique equality filter in "where".`
97
- );
98
- }
99
- const fieldName = keys[0];
100
- const field = model.fields[fieldName];
101
- if (!field) {
102
- throw new Error(`Unknown field "${fieldName}" on model "${model.name}".`);
103
- }
104
- if (!(field.kind === "id" || field.unique)) {
105
- throw new Error(
106
- `Upsert on model "${model.name}" requires the "where" field "${fieldName}" to be unique or an id field.`
107
- );
108
- }
109
- const { supported, value } = extractEqualityValue(where[fieldName]);
110
- if (!supported || value === void 0 || value === null) {
111
- throw new Error(
112
- `Upsert on model "${model.name}" requires the "where" field "${fieldName}" to use a single non-null equality value.`
113
- );
114
- }
115
- return {
116
- field,
117
- value
118
- };
119
- }
120
- function mergeUpsertCreateData(model, createData, conflict) {
121
- const currentValue = createData[conflict.field.name];
122
- if (currentValue !== void 0 && currentValue !== conflict.value) {
123
- throw new Error(
124
- `Upsert on model "${model.name}" requires create.${conflict.field.name} to match where.${conflict.field.name}.`
125
- );
126
- }
127
- return {
128
- ...createData,
129
- [conflict.field.name]: currentValue ?? conflict.value
130
- };
131
- }
132
- function validateUpsertUpdateData(model, updateData, conflict) {
133
- const nextValue = updateData[conflict.field.name];
134
- if (nextValue !== void 0 && nextValue !== conflict.value) {
135
- throw new Error(
136
- `Upsert on model "${model.name}" cannot change the conflict field "${conflict.field.name}".`
137
- );
138
- }
139
- }
140
70
  function removeOverlappingInsertFields(insertData, updateData) {
141
71
  const output = {};
142
72
  for (const [key, value] of Object.entries(insertData)) {
@@ -176,6 +106,8 @@ function createMongooseDriverInternal(config, state = {}) {
176
106
  let next = value;
177
107
  if (field.kind === "boolean") {
178
108
  next = Boolean(next);
109
+ } else if (field.kind === "integer") {
110
+ next = Number(next);
179
111
  } else if (field.kind === "datetime") {
180
112
  next = next instanceof Date ? next : new Date(String(next));
181
113
  }
@@ -190,6 +122,9 @@ function createMongooseDriverInternal(config, state = {}) {
190
122
  if (field.kind === "boolean") {
191
123
  return Boolean(next);
192
124
  }
125
+ if (field.kind === "integer") {
126
+ return typeof next === "number" ? next : Number(next);
127
+ }
193
128
  if (field.kind === "datetime") {
194
129
  return next instanceof Date ? next : new Date(String(next));
195
130
  }
@@ -232,7 +167,7 @@ function createMongooseDriverInternal(config, state = {}) {
232
167
  if (!field) {
233
168
  throw new Error(`Unknown field "${fieldName}" on model "${model.name}".`);
234
169
  }
235
- if (!isFilterObject(filter)) {
170
+ if (!(0, import_orm.isOperatorFilterObject)(filter)) {
236
171
  return {
237
172
  [field.column]: encodeValue(model.name, field, filter)
238
173
  };
@@ -517,6 +452,12 @@ function createMongooseDriverInternal(config, state = {}) {
517
452
  return loadOneRow(schema, model, args);
518
453
  },
519
454
  async findUnique(schema, model, args) {
455
+ const manifest = getManifest(schema);
456
+ (0, import_orm.requireUniqueLookup)(
457
+ manifest.models[model],
458
+ args.where,
459
+ "FindUnique"
460
+ );
520
461
  return loadOneRow(schema, model, args);
521
462
  },
522
463
  async count(schema, model, args) {
@@ -602,18 +543,24 @@ function createMongooseDriverInternal(config, state = {}) {
602
543
  async upsert(schema, model, args) {
603
544
  const manifest = getManifest(schema);
604
545
  const modelManifest = manifest.models[model];
605
- const conflict = extractUpsertConflict(modelManifest, args.where);
606
- validateUpsertUpdateData(
546
+ const lookup = (0, import_orm.requireUniqueLookup)(
547
+ modelManifest,
548
+ args.where,
549
+ "Upsert"
550
+ );
551
+ (0, import_orm.validateUniqueLookupUpdateData)(
607
552
  modelManifest,
608
553
  args.update,
609
- conflict
554
+ lookup,
555
+ "Upsert"
610
556
  );
611
557
  const created = buildDocument(
612
558
  modelManifest,
613
- mergeUpsertCreateData(
559
+ (0, import_orm.mergeUniqueLookupCreateData)(
614
560
  modelManifest,
615
561
  args.create,
616
- conflict
562
+ lookup,
563
+ "Upsert"
617
564
  )
618
565
  );
619
566
  const update = buildUpdate(modelManifest, args.update);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n createManifest,\n type CountArgs,\n type CreateArgs,\n type CreateManyArgs,\n type DeleteArgs,\n type DeleteManyArgs,\n type FindManyArgs,\n type ManifestField,\n type ManifestModel,\n type OrmDriver,\n type SchemaManifest,\n type SchemaDefinition,\n type SelectShape,\n type SelectedRecord,\n type UpdateArgs,\n type UpdateManyArgs,\n type UpsertArgs,\n type Where,\n} from \"@farming-labs/orm\";\nimport type { ModelName, RelationName } from \"@farming-labs/orm\";\n\ntype MongoRow = Record<string, unknown>;\ntype MongoFilterRecord = Record<string, string | number | boolean | Date | null>;\ntype MongoWhere = Where<MongoFilterRecord>;\n\ntype MongooseWriteResult = {\n modifiedCount?: number;\n matchedCount?: number;\n deletedCount?: number;\n};\n\nexport type MongooseSessionLike = {\n withTransaction?<TResult>(run: () => Promise<TResult>): Promise<TResult>;\n startTransaction?(): void;\n commitTransaction?(): Promise<void>;\n abortTransaction?(): Promise<void>;\n endSession?(): Promise<void> | void;\n};\n\nexport type MongooseSessionSourceLike = {\n startSession(): Promise<MongooseSessionLike>;\n};\n\nexport type MongooseQueryLike<TResult> = {\n sort(sort: Record<string, 1 | -1>): MongooseQueryLike<TResult>;\n skip(value: number): MongooseQueryLike<TResult>;\n limit(value: number): MongooseQueryLike<TResult>;\n session(session: MongooseSessionLike): MongooseQueryLike<TResult>;\n lean(): MongooseQueryLike<TResult>;\n exec(): Promise<TResult>;\n};\n\nexport type MongooseExecLike<TResult> = {\n session?(session: MongooseSessionLike): MongooseExecLike<TResult>;\n exec(): Promise<TResult>;\n};\n\nexport type MongooseModelLike = {\n find(filter: Record<string, unknown>): MongooseQueryLike<MongoRow[]>;\n findOne(filter: Record<string, unknown>): MongooseQueryLike<MongoRow | null>;\n countDocuments(filter: Record<string, unknown>): Promise<number> | MongooseExecLike<number>;\n create(\n doc: MongoRow | MongoRow[],\n options?: { session?: MongooseSessionLike },\n ): Promise<MongoRow | MongoRow[]>;\n insertMany?(docs: MongoRow[], options?: { session?: MongooseSessionLike }): Promise<MongoRow[]>;\n updateMany(\n filter: Record<string, unknown>,\n update: { $set: MongoRow },\n options?: { session?: MongooseSessionLike },\n ): Promise<MongooseWriteResult> | MongooseExecLike<MongooseWriteResult>;\n findOneAndUpdate(\n filter: Record<string, unknown>,\n update: { $set?: MongoRow; $setOnInsert?: MongoRow },\n options?: {\n upsert?: boolean;\n new?: boolean;\n returnDocument?: \"after\" | \"before\";\n session?: MongooseSessionLike;\n },\n ): MongooseQueryLike<MongoRow | null>;\n findOneAndDelete(\n filter: Record<string, unknown>,\n options?: { session?: MongooseSessionLike },\n ): MongooseQueryLike<MongoRow | null>;\n deleteMany(\n filter: Record<string, unknown>,\n options?: { session?: MongooseSessionLike },\n ): Promise<MongooseWriteResult> | MongooseExecLike<MongooseWriteResult>;\n};\n\nexport type MongooseFieldTransform = {\n encode?: (value: unknown) => unknown;\n decode?: (value: unknown) => unknown;\n};\n\nexport type MongooseDriverConfig<TSchema extends SchemaDefinition<any>> = {\n models: Record<ModelName<TSchema>, MongooseModelLike>;\n connection?: MongooseSessionSourceLike;\n startSession?: () => Promise<MongooseSessionLike>;\n transforms?: Partial<Record<string, Partial<Record<string, MongooseFieldTransform>>>>;\n};\n\nconst manifestCache = new WeakMap<object, SchemaManifest>();\n\nfunction getManifest(schema: SchemaDefinition<any>) {\n const cached = manifestCache.get(schema);\n if (cached) return cached;\n const next = createManifest(schema);\n manifestCache.set(schema, next);\n return next;\n}\n\nfunction identityField(model: ManifestModel) {\n if (model.fields.id) return model.fields.id;\n const uniqueField = Object.values(model.fields).find((field) => field.unique);\n if (uniqueField) return uniqueField;\n throw new Error(\n `Model \"${model.name}\" requires an \"id\" field or a unique field for the Mongoose runtime.`,\n );\n}\n\nfunction applyDefault(value: unknown, field: ManifestField) {\n if (value !== undefined) return value;\n if (field.generated === \"id\") return randomUUID();\n if (field.generated === \"now\") return new Date();\n if (typeof field.defaultValue === \"function\") {\n return (field.defaultValue as () => unknown)();\n }\n return field.defaultValue;\n}\n\nfunction isFilterObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !(value instanceof Date) && !Array.isArray(value);\n}\n\nfunction escapeRegex(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction mergeWhere(...clauses: Array<MongoWhere | undefined>) {\n const defined = clauses.filter(Boolean) as MongoWhere[];\n if (!defined.length) return undefined;\n if (defined.length === 1) return defined[0];\n return {\n AND: defined,\n } as MongoWhere;\n}\n\nfunction parseReference(reference?: string) {\n if (!reference) return null;\n const [model, field] = reference.split(\".\");\n if (!model || !field) return null;\n return { model, field };\n}\n\nfunction extractEqualityValue(filter: unknown) {\n if (!isFilterObject(filter)) {\n return {\n supported: true,\n value: filter,\n };\n }\n\n const keys = Object.keys(filter);\n if (keys.length === 1 && \"eq\" in filter) {\n return {\n supported: true,\n value: filter.eq,\n };\n }\n\n return {\n supported: false,\n value: undefined,\n };\n}\n\nfunction extractUpsertConflict(model: ManifestModel, where: MongoWhere) {\n const keys = Object.keys(where).filter((key) => key !== \"AND\" && key !== \"OR\" && key !== \"NOT\");\n\n if (\"AND\" in where || \"OR\" in where || \"NOT\" in where || keys.length !== 1) {\n throw new Error(\n `Upsert on model \"${model.name}\" requires a single unique equality filter in \"where\".`,\n );\n }\n\n const fieldName = keys[0]!;\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n\n if (!(field.kind === \"id\" || field.unique)) {\n throw new Error(\n `Upsert on model \"${model.name}\" requires the \"where\" field \"${fieldName}\" to be unique or an id field.`,\n );\n }\n\n const { supported, value } = extractEqualityValue(where[fieldName]);\n if (!supported || value === undefined || value === null) {\n throw new Error(\n `Upsert on model \"${model.name}\" requires the \"where\" field \"${fieldName}\" to use a single non-null equality value.`,\n );\n }\n\n return {\n field,\n value,\n };\n}\n\nfunction mergeUpsertCreateData(\n model: ManifestModel,\n createData: Partial<Record<string, unknown>>,\n conflict: { field: ManifestField; value: unknown },\n) {\n const currentValue = createData[conflict.field.name];\n if (currentValue !== undefined && currentValue !== conflict.value) {\n throw new Error(\n `Upsert on model \"${model.name}\" requires create.${conflict.field.name} to match where.${conflict.field.name}.`,\n );\n }\n\n return {\n ...createData,\n [conflict.field.name]: currentValue ?? conflict.value,\n };\n}\n\nfunction validateUpsertUpdateData(\n model: ManifestModel,\n updateData: Partial<Record<string, unknown>>,\n conflict: { field: ManifestField; value: unknown },\n) {\n const nextValue = updateData[conflict.field.name];\n if (nextValue !== undefined && nextValue !== conflict.value) {\n throw new Error(\n `Upsert on model \"${model.name}\" cannot change the conflict field \"${conflict.field.name}\".`,\n );\n }\n}\n\nfunction removeOverlappingInsertFields(insertData: MongoRow, updateData: MongoRow) {\n const output: MongoRow = {};\n\n for (const [key, value] of Object.entries(insertData)) {\n if (Object.prototype.hasOwnProperty.call(updateData, key)) continue;\n output[key] = value;\n }\n\n return output;\n}\n\nfunction isExecLike<TResult>(value: unknown): value is MongooseExecLike<TResult> {\n return !!value && typeof value === \"object\" && \"exec\" in value;\n}\n\nasync function execute<TResult>(\n operation: Promise<TResult> | MongooseExecLike<TResult>,\n session?: MongooseSessionLike,\n) {\n if (isExecLike<TResult>(operation)) {\n const query =\n session && typeof operation.session === \"function\" ? operation.session(session) : operation;\n return query.exec();\n }\n return operation;\n}\n\nasync function normalizeCreated(doc: Promise<MongoRow | MongoRow[]>) {\n const result = await doc;\n return Array.isArray(result) ? (result[0] ?? null) : result;\n}\n\nfunction createMongooseDriverInternal<TSchema extends SchemaDefinition<any>>(\n config: MongooseDriverConfig<TSchema>,\n state: {\n session?: MongooseSessionLike;\n } = {},\n): OrmDriver<TSchema> {\n function getModel(modelName: ModelName<TSchema>) {\n const model = config.models[modelName];\n if (!model) {\n throw new Error(`No Mongoose model was provided for schema model \"${modelName}\".`);\n }\n return model;\n }\n\n function fieldTransform(modelName: string, fieldName: string) {\n return config.transforms?.[modelName]?.[fieldName];\n }\n\n function encodeValue(modelName: string, field: ManifestField, value: unknown) {\n if (value === undefined) return value;\n if (value === null) return null;\n\n let next = value;\n if (field.kind === \"boolean\") {\n next = Boolean(next);\n } else if (field.kind === \"datetime\") {\n next = next instanceof Date ? next : new Date(String(next));\n }\n\n const transform = fieldTransform(modelName, field.name);\n return transform?.encode ? transform.encode(next) : next;\n }\n\n function decodeValue(modelName: string, field: ManifestField, value: unknown) {\n if (value === undefined) return value;\n if (value === null) return null;\n\n const transform = fieldTransform(modelName, field.name);\n let next = transform?.decode ? transform.decode(value) : value;\n\n if (field.kind === \"boolean\") {\n return Boolean(next);\n }\n if (field.kind === \"datetime\") {\n return next instanceof Date ? next : new Date(String(next));\n }\n if (field.kind === \"id\") {\n return typeof next === \"string\" ? next : String(next);\n }\n return next;\n }\n\n function buildDocument(model: ManifestModel, data: Partial<Record<string, unknown>>) {\n const doc: MongoRow = {};\n\n for (const field of Object.values(model.fields)) {\n const value = applyDefault(data[field.name], field);\n if (value !== undefined) {\n doc[field.column] = encodeValue(model.name, field, value);\n }\n }\n\n return doc;\n }\n\n function buildUpdate(model: ManifestModel, data: Partial<Record<string, unknown>>) {\n const update: MongoRow = {};\n\n for (const [fieldName, value] of Object.entries(data)) {\n if (value === undefined) continue;\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n update[field.column] = encodeValue(model.name, field, value);\n }\n\n return update;\n }\n\n function decodeRow(model: ManifestModel, doc: MongoRow) {\n const output: MongoRow = {};\n\n for (const field of Object.values(model.fields)) {\n output[field.name] = decodeValue(model.name, field, doc[field.column]);\n }\n\n return output;\n }\n\n function compileFieldFilter(\n model: ManifestModel,\n fieldName: string,\n filter: unknown,\n ): Record<string, unknown> {\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n\n if (!isFilterObject(filter)) {\n return {\n [field.column]: encodeValue(model.name, field, filter),\n };\n }\n\n const operations: Record<string, unknown> = {};\n\n if (\"eq\" in filter) {\n operations.$eq = encodeValue(model.name, field, filter.eq);\n }\n if (\"not\" in filter) {\n operations.$ne = encodeValue(model.name, field, filter.not);\n }\n if (\"in\" in filter) {\n const values = Array.isArray(filter.in) ? filter.in : [];\n operations.$in = values.map((value) => encodeValue(model.name, field, value));\n }\n if (\"contains\" in filter) {\n operations.$regex = new RegExp(escapeRegex(String(filter.contains ?? \"\")));\n }\n if (\"gt\" in filter) {\n operations.$gt = encodeValue(model.name, field, filter.gt);\n }\n if (\"gte\" in filter) {\n operations.$gte = encodeValue(model.name, field, filter.gte);\n }\n if (\"lt\" in filter) {\n operations.$lt = encodeValue(model.name, field, filter.lt);\n }\n if (\"lte\" in filter) {\n operations.$lte = encodeValue(model.name, field, filter.lte);\n }\n\n return {\n [field.column]: operations,\n };\n }\n\n function compileWhere(\n model: ManifestModel,\n where: MongoWhere | undefined,\n ): Record<string, unknown> {\n if (!where) return {};\n\n const clauses: Record<string, unknown>[] = [];\n\n for (const [key, value] of Object.entries(where)) {\n if (key === \"AND\") {\n const nested = (Array.isArray(value) ? value : [])\n .map((item) => compileWhere(model, item as MongoWhere))\n .filter((item) => Object.keys(item).length > 0);\n if (nested.length) clauses.push({ $and: nested });\n continue;\n }\n\n if (key === \"OR\") {\n const nested = (Array.isArray(value) ? value : [])\n .map((item) => compileWhere(model, item as MongoWhere))\n .filter((item) => Object.keys(item).length > 0);\n if (nested.length) clauses.push({ $or: nested });\n continue;\n }\n\n if (key === \"NOT\") {\n const nested = compileWhere(model, value as MongoWhere);\n if (Object.keys(nested).length) clauses.push({ $nor: [nested] });\n continue;\n }\n\n clauses.push(compileFieldFilter(model, key, value));\n }\n\n if (!clauses.length) return {};\n if (clauses.length === 1) return clauses[0]!;\n return {\n $and: clauses,\n };\n }\n\n function compileOrderBy(\n model: ManifestModel,\n orderBy: Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n ) {\n if (!orderBy) return undefined;\n\n const output: Record<string, 1 | -1> = {};\n for (const [fieldName, direction] of Object.entries(orderBy)) {\n const field = model.fields[fieldName];\n if (!field) continue;\n output[field.column] = direction === \"desc\" ? -1 : 1;\n }\n\n return Object.keys(output).length ? output : undefined;\n }\n\n async function runFindMany(\n model: ManifestModel,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n take?: number;\n skip?: number;\n },\n ) {\n const query = getModel(model.name as ModelName<TSchema>).find(compileWhere(model, args.where));\n const orderBy = compileOrderBy(model, args.orderBy);\n if (orderBy) query.sort(orderBy);\n if (args.skip !== undefined) query.skip(args.skip);\n if (args.take !== undefined) query.limit(args.take);\n if (state.session) query.session(state.session);\n query.lean();\n return query.exec();\n }\n\n async function runFindOne(\n model: ManifestModel,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n },\n ) {\n const orderBy = compileOrderBy(model, args.orderBy);\n if (orderBy) {\n const rows = await runFindMany(model, {\n ...args,\n take: 1,\n });\n return rows[0] ?? null;\n }\n\n const query = getModel(model.name as ModelName<TSchema>).findOne(\n compileWhere(model, args.where),\n );\n if (state.session) query.session(state.session);\n query.lean();\n return query.exec();\n }\n\n async function loadRows<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n take?: number;\n skip?: number;\n select?: TSelect;\n },\n ): Promise<Array<SelectedRecord<TSchema, TModelName, TSelect>>> {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const docs = await runFindMany(model, args);\n const rows = docs.map((doc) => decodeRow(model, doc));\n return Promise.all(rows.map((row) => projectRow(schema, modelName, row, args.select)));\n }\n\n async function loadOneRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n select?: TSelect;\n },\n ) {\n const rows = await loadRows(schema, modelName, {\n ...args,\n take: 1,\n });\n return rows[0] ?? null;\n }\n\n async function loadRawOneRow<TModelName extends ModelName<TSchema>>(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n },\n ) {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const doc = await runFindOne(model, args);\n return doc ? decodeRow(model, doc) : null;\n }\n\n async function projectRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n row: MongoRow,\n select?: TSelect,\n ): Promise<SelectedRecord<TSchema, TModelName, TSelect>> {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const output: MongoRow = {};\n\n if (!select) {\n for (const fieldName of Object.keys(model.fields)) {\n output[fieldName] = row[fieldName];\n }\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n for (const [key, value] of Object.entries(select)) {\n if (value === undefined) continue;\n\n if (key in model.fields && value === true) {\n output[key] = row[key];\n continue;\n }\n\n if (key in schema.models[modelName].relations) {\n output[key] = await resolveRelation(\n schema,\n modelName,\n key as RelationName<TSchema, TModelName>,\n row,\n value as true | FindManyArgs<TSchema, any, any>,\n );\n }\n }\n\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n async function resolveRelation<\n TModelName extends ModelName<TSchema>,\n TRelationName extends RelationName<TSchema, TModelName>,\n >(\n schema: TSchema,\n modelName: TModelName,\n relationName: TRelationName,\n row: MongoRow,\n value: true | FindManyArgs<TSchema, any, any>,\n ) {\n const manifest = getManifest(schema);\n const relation = schema.models[modelName].relations[relationName];\n const relationArgs = value === true ? {} : value;\n\n if (relation.kind === \"belongsTo\") {\n const foreignField = manifest.models[modelName].fields[relation.foreignKey];\n const targetReference = parseReference(foreignField?.references);\n const targetField =\n targetReference?.field ?? identityField(manifest.models[relation.target]).name;\n const foreignValue = row[relation.foreignKey];\n\n if (foreignValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [targetField]: foreignValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasOne\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasMany\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n const throughModel = manifest.models[relation.through];\n const throughFromReference = parseReference(throughModel.fields[relation.from]?.references);\n const throughToReference = parseReference(throughModel.fields[relation.to]?.references);\n const sourceField =\n throughFromReference?.field ?? identityField(manifest.models[modelName]).name;\n const targetField =\n throughToReference?.field ?? identityField(manifest.models[relation.target]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n const throughRows = await loadRows(schema, relation.through as ModelName<TSchema>, {\n where: {\n [relation.from]: sourceValue,\n } as MongoWhere,\n });\n\n const targetIds = throughRows\n .map((item: MongoRow) => item[relation.to])\n .filter((item) => item != null);\n if (!targetIds.length) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [targetField]: {\n in: targetIds,\n },\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n async function runTransaction<TResult>(run: (driver: OrmDriver<TSchema>) => Promise<TResult>) {\n if (state.session) {\n return run(createMongooseDriverInternal(config, state));\n }\n\n const startSession =\n config.startSession ?? config.connection?.startSession.bind(config.connection);\n if (!startSession) {\n return run(createMongooseDriverInternal(config, state));\n }\n\n const session = await startSession();\n try {\n if (session.withTransaction) {\n return await session.withTransaction(() =>\n run(\n createMongooseDriverInternal(config, {\n session,\n }),\n ),\n );\n }\n\n if (session.startTransaction && session.commitTransaction && session.abortTransaction) {\n session.startTransaction();\n try {\n const result = await run(\n createMongooseDriverInternal(config, {\n session,\n }),\n );\n await session.commitTransaction();\n return result;\n } catch (error) {\n await session.abortTransaction();\n throw error;\n }\n }\n\n return run(\n createMongooseDriverInternal(config, {\n session,\n }),\n );\n } finally {\n await session.endSession?.();\n }\n }\n\n const driver: OrmDriver<TSchema> = {\n async findMany(schema, model, args) {\n return loadRows(schema, model, args);\n },\n async findFirst(schema, model, args) {\n return loadOneRow(schema, model, args);\n },\n async findUnique(schema, model, args) {\n return loadOneRow(schema, model, args);\n },\n async count(schema, model, args?: CountArgs<TSchema, ModelName<TSchema>>) {\n const manifest = getManifest(schema);\n const result = await execute(\n getModel(model).countDocuments(\n compileWhere(manifest.models[model], args?.where as MongoWhere | undefined),\n ),\n state.session,\n );\n return Number(result);\n },\n async create(schema, model, args) {\n const manifest = getManifest(schema);\n const document = buildDocument(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n );\n const created = await normalizeCreated(\n state.session\n ? getModel(model).create([document], { session: state.session })\n : getModel(model).create(document),\n );\n if (!created) {\n throw new Error(`Create on model \"${String(model)}\" did not return a document.`);\n }\n const row = decodeRow(manifest.models[model], created);\n return projectRow(schema, model, row, args.select) as Promise<any>;\n },\n async createMany(schema, model, args) {\n const results: unknown[] = [];\n for (const entry of args.data) {\n results.push(\n await driver.create(schema, model, {\n data: entry,\n select: args.select,\n } as CreateArgs<TSchema, ModelName<TSchema>, any>),\n );\n }\n return results as any;\n },\n async update(schema, model, args) {\n const manifest = getManifest(schema);\n const updated = await getModel(model)\n .findOneAndUpdate(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n {\n $set: buildUpdate(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n ),\n },\n {\n new: true,\n returnDocument: \"after\",\n session: state.session,\n },\n )\n .lean()\n .exec();\n\n if (!updated) return null;\n\n return projectRow(\n schema,\n model,\n decodeRow(manifest.models[model], updated),\n args.select,\n ) as Promise<any>;\n },\n async updateMany(schema, model, args) {\n const manifest = getManifest(schema);\n const update = buildUpdate(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n );\n if (!Object.keys(update).length) return 0;\n const result = await execute(\n getModel(model).updateMany(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n {\n $set: update,\n },\n state.session ? { session: state.session } : undefined,\n ),\n state.session,\n );\n return Number(result.modifiedCount ?? result.matchedCount ?? 0);\n },\n async upsert(schema, model, args) {\n const manifest = getManifest(schema);\n const modelManifest = manifest.models[model];\n const conflict = extractUpsertConflict(modelManifest, args.where as MongoWhere);\n validateUpsertUpdateData(\n modelManifest,\n args.update as Partial<Record<string, unknown>>,\n conflict,\n );\n const created = buildDocument(\n modelManifest,\n mergeUpsertCreateData(\n modelManifest,\n args.create as Partial<Record<string, unknown>>,\n conflict,\n ),\n );\n const update = buildUpdate(modelManifest, args.update as Partial<Record<string, unknown>>);\n const updated = await getModel(model)\n .findOneAndUpdate(\n compileWhere(modelManifest, args.where as MongoWhere),\n {\n $set: update,\n $setOnInsert: removeOverlappingInsertFields(created, update),\n },\n {\n upsert: true,\n new: true,\n returnDocument: \"after\",\n session: state.session,\n },\n )\n .lean()\n .exec();\n\n if (!updated) {\n throw new Error(`Upsert on model \"${String(model)}\" did not return a document.`);\n }\n\n return projectRow(\n schema,\n model,\n decodeRow(modelManifest, updated),\n args.select,\n ) as Promise<any>;\n },\n async delete(schema, model, args) {\n const manifest = getManifest(schema);\n const deleted = await getModel(model)\n .findOneAndDelete(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n state.session ? { session: state.session } : undefined,\n )\n .lean()\n .exec();\n return deleted ? 1 : 0;\n },\n async deleteMany(schema, model, args) {\n const manifest = getManifest(schema);\n const result = await execute(\n getModel(model).deleteMany(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n state.session ? { session: state.session } : undefined,\n ),\n state.session,\n );\n return Number(result.deletedCount ?? 0);\n },\n async transaction(_schema, run) {\n return runTransaction(run);\n },\n };\n\n return driver;\n}\n\nexport function createMongooseDriver<TSchema extends SchemaDefinition<any>>(\n config: MongooseDriverConfig<TSchema>,\n) {\n return createMongooseDriverInternal(config);\n}\n"],"mappings":"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","names":["targetField","sourceField","sourceValue"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n createManifest,\n type CountArgs,\n type CreateArgs,\n type CreateManyArgs,\n type DeleteArgs,\n type DeleteManyArgs,\n type FindManyArgs,\n type ManifestField,\n type ManifestModel,\n mergeUniqueLookupCreateData,\n type OrmDriver,\n isOperatorFilterObject,\n requireUniqueLookup,\n type SchemaManifest,\n type SchemaDefinition,\n type SelectShape,\n type SelectedRecord,\n type UpdateArgs,\n type UpdateManyArgs,\n type UpsertArgs,\n validateUniqueLookupUpdateData,\n type Where,\n} from \"@farming-labs/orm\";\nimport type { ModelName, RelationName } from \"@farming-labs/orm\";\n\ntype MongoRow = Record<string, unknown>;\ntype MongoWhere = Where<Record<string, unknown>>;\n\ntype MongooseWriteResult = {\n modifiedCount?: number;\n matchedCount?: number;\n deletedCount?: number;\n};\n\nexport type MongooseSessionLike = {\n withTransaction?<TResult>(run: () => Promise<TResult>): Promise<TResult>;\n startTransaction?(): void;\n commitTransaction?(): Promise<void>;\n abortTransaction?(): Promise<void>;\n endSession?(): Promise<void> | void;\n};\n\nexport type MongooseSessionSourceLike = {\n startSession(): Promise<MongooseSessionLike>;\n};\n\nexport type MongooseQueryLike<TResult> = {\n sort(sort: Record<string, 1 | -1>): MongooseQueryLike<TResult>;\n skip(value: number): MongooseQueryLike<TResult>;\n limit(value: number): MongooseQueryLike<TResult>;\n session(session: MongooseSessionLike): MongooseQueryLike<TResult>;\n lean(): MongooseQueryLike<TResult>;\n exec(): Promise<TResult>;\n};\n\nexport type MongooseExecLike<TResult> = {\n session?(session: MongooseSessionLike): MongooseExecLike<TResult>;\n exec(): Promise<TResult>;\n};\n\nexport type MongooseModelLike = {\n find(filter: Record<string, unknown>): MongooseQueryLike<MongoRow[]>;\n findOne(filter: Record<string, unknown>): MongooseQueryLike<MongoRow | null>;\n countDocuments(filter: Record<string, unknown>): Promise<number> | MongooseExecLike<number>;\n create(\n doc: MongoRow | MongoRow[],\n options?: { session?: MongooseSessionLike },\n ): Promise<MongoRow | MongoRow[]>;\n insertMany?(docs: MongoRow[], options?: { session?: MongooseSessionLike }): Promise<MongoRow[]>;\n updateMany(\n filter: Record<string, unknown>,\n update: { $set: MongoRow },\n options?: { session?: MongooseSessionLike },\n ): Promise<MongooseWriteResult> | MongooseExecLike<MongooseWriteResult>;\n findOneAndUpdate(\n filter: Record<string, unknown>,\n update: { $set?: MongoRow; $setOnInsert?: MongoRow },\n options?: {\n upsert?: boolean;\n new?: boolean;\n returnDocument?: \"after\" | \"before\";\n session?: MongooseSessionLike;\n },\n ): MongooseQueryLike<MongoRow | null>;\n findOneAndDelete(\n filter: Record<string, unknown>,\n options?: { session?: MongooseSessionLike },\n ): MongooseQueryLike<MongoRow | null>;\n deleteMany(\n filter: Record<string, unknown>,\n options?: { session?: MongooseSessionLike },\n ): Promise<MongooseWriteResult> | MongooseExecLike<MongooseWriteResult>;\n};\n\nexport type MongooseFieldTransform = {\n encode?: (value: unknown) => unknown;\n decode?: (value: unknown) => unknown;\n};\n\nexport type MongooseDriverConfig<TSchema extends SchemaDefinition<any>> = {\n models: Record<ModelName<TSchema>, MongooseModelLike>;\n connection?: MongooseSessionSourceLike;\n startSession?: () => Promise<MongooseSessionLike>;\n transforms?: Partial<Record<string, Partial<Record<string, MongooseFieldTransform>>>>;\n};\n\nconst manifestCache = new WeakMap<object, SchemaManifest>();\n\nfunction getManifest(schema: SchemaDefinition<any>) {\n const cached = manifestCache.get(schema);\n if (cached) return cached;\n const next = createManifest(schema);\n manifestCache.set(schema, next);\n return next;\n}\n\nfunction identityField(model: ManifestModel) {\n if (model.fields.id) return model.fields.id;\n const uniqueField = Object.values(model.fields).find((field) => field.unique);\n if (uniqueField) return uniqueField;\n throw new Error(\n `Model \"${model.name}\" requires an \"id\" field or a unique field for the Mongoose runtime.`,\n );\n}\n\nfunction applyDefault(value: unknown, field: ManifestField) {\n if (value !== undefined) return value;\n if (field.generated === \"id\") return randomUUID();\n if (field.generated === \"now\") return new Date();\n if (typeof field.defaultValue === \"function\") {\n return (field.defaultValue as () => unknown)();\n }\n return field.defaultValue;\n}\n\nfunction escapeRegex(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction mergeWhere(...clauses: Array<MongoWhere | undefined>) {\n const defined = clauses.filter(Boolean) as MongoWhere[];\n if (!defined.length) return undefined;\n if (defined.length === 1) return defined[0];\n return {\n AND: defined,\n } as MongoWhere;\n}\n\nfunction parseReference(reference?: string) {\n if (!reference) return null;\n const [model, field] = reference.split(\".\");\n if (!model || !field) return null;\n return { model, field };\n}\n\nfunction removeOverlappingInsertFields(insertData: MongoRow, updateData: MongoRow) {\n const output: MongoRow = {};\n\n for (const [key, value] of Object.entries(insertData)) {\n if (Object.prototype.hasOwnProperty.call(updateData, key)) continue;\n output[key] = value;\n }\n\n return output;\n}\n\nfunction isExecLike<TResult>(value: unknown): value is MongooseExecLike<TResult> {\n return !!value && typeof value === \"object\" && \"exec\" in value;\n}\n\nasync function execute<TResult>(\n operation: Promise<TResult> | MongooseExecLike<TResult>,\n session?: MongooseSessionLike,\n) {\n if (isExecLike<TResult>(operation)) {\n const query =\n session && typeof operation.session === \"function\" ? operation.session(session) : operation;\n return query.exec();\n }\n return operation;\n}\n\nasync function normalizeCreated(doc: Promise<MongoRow | MongoRow[]>) {\n const result = await doc;\n return Array.isArray(result) ? (result[0] ?? null) : result;\n}\n\nfunction createMongooseDriverInternal<TSchema extends SchemaDefinition<any>>(\n config: MongooseDriverConfig<TSchema>,\n state: {\n session?: MongooseSessionLike;\n } = {},\n): OrmDriver<TSchema> {\n function getModel(modelName: ModelName<TSchema>) {\n const model = config.models[modelName];\n if (!model) {\n throw new Error(`No Mongoose model was provided for schema model \"${modelName}\".`);\n }\n return model;\n }\n\n function fieldTransform(modelName: string, fieldName: string) {\n return config.transforms?.[modelName]?.[fieldName];\n }\n\n function encodeValue(modelName: string, field: ManifestField, value: unknown) {\n if (value === undefined) return value;\n if (value === null) return null;\n\n let next = value;\n if (field.kind === \"boolean\") {\n next = Boolean(next);\n } else if (field.kind === \"integer\") {\n next = Number(next);\n } else if (field.kind === \"datetime\") {\n next = next instanceof Date ? next : new Date(String(next));\n }\n\n const transform = fieldTransform(modelName, field.name);\n return transform?.encode ? transform.encode(next) : next;\n }\n\n function decodeValue(modelName: string, field: ManifestField, value: unknown) {\n if (value === undefined) return value;\n if (value === null) return null;\n\n const transform = fieldTransform(modelName, field.name);\n let next = transform?.decode ? transform.decode(value) : value;\n\n if (field.kind === \"boolean\") {\n return Boolean(next);\n }\n if (field.kind === \"integer\") {\n return typeof next === \"number\" ? next : Number(next);\n }\n if (field.kind === \"datetime\") {\n return next instanceof Date ? next : new Date(String(next));\n }\n if (field.kind === \"id\") {\n return typeof next === \"string\" ? next : String(next);\n }\n return next;\n }\n\n function buildDocument(model: ManifestModel, data: Partial<Record<string, unknown>>) {\n const doc: MongoRow = {};\n\n for (const field of Object.values(model.fields)) {\n const value = applyDefault(data[field.name], field);\n if (value !== undefined) {\n doc[field.column] = encodeValue(model.name, field, value);\n }\n }\n\n return doc;\n }\n\n function buildUpdate(model: ManifestModel, data: Partial<Record<string, unknown>>) {\n const update: MongoRow = {};\n\n for (const [fieldName, value] of Object.entries(data)) {\n if (value === undefined) continue;\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n update[field.column] = encodeValue(model.name, field, value);\n }\n\n return update;\n }\n\n function decodeRow(model: ManifestModel, doc: MongoRow) {\n const output: MongoRow = {};\n\n for (const field of Object.values(model.fields)) {\n output[field.name] = decodeValue(model.name, field, doc[field.column]);\n }\n\n return output;\n }\n\n function compileFieldFilter(\n model: ManifestModel,\n fieldName: string,\n filter: unknown,\n ): Record<string, unknown> {\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n\n if (!isOperatorFilterObject(filter)) {\n return {\n [field.column]: encodeValue(model.name, field, filter),\n };\n }\n\n const operations: Record<string, unknown> = {};\n\n if (\"eq\" in filter) {\n operations.$eq = encodeValue(model.name, field, filter.eq);\n }\n if (\"not\" in filter) {\n operations.$ne = encodeValue(model.name, field, filter.not);\n }\n if (\"in\" in filter) {\n const values = Array.isArray(filter.in) ? filter.in : [];\n operations.$in = values.map((value) => encodeValue(model.name, field, value));\n }\n if (\"contains\" in filter) {\n operations.$regex = new RegExp(escapeRegex(String(filter.contains ?? \"\")));\n }\n if (\"gt\" in filter) {\n operations.$gt = encodeValue(model.name, field, filter.gt);\n }\n if (\"gte\" in filter) {\n operations.$gte = encodeValue(model.name, field, filter.gte);\n }\n if (\"lt\" in filter) {\n operations.$lt = encodeValue(model.name, field, filter.lt);\n }\n if (\"lte\" in filter) {\n operations.$lte = encodeValue(model.name, field, filter.lte);\n }\n\n return {\n [field.column]: operations,\n };\n }\n\n function compileWhere(\n model: ManifestModel,\n where: MongoWhere | undefined,\n ): Record<string, unknown> {\n if (!where) return {};\n\n const clauses: Record<string, unknown>[] = [];\n\n for (const [key, value] of Object.entries(where)) {\n if (key === \"AND\") {\n const nested = (Array.isArray(value) ? value : [])\n .map((item) => compileWhere(model, item as MongoWhere))\n .filter((item) => Object.keys(item).length > 0);\n if (nested.length) clauses.push({ $and: nested });\n continue;\n }\n\n if (key === \"OR\") {\n const nested = (Array.isArray(value) ? value : [])\n .map((item) => compileWhere(model, item as MongoWhere))\n .filter((item) => Object.keys(item).length > 0);\n if (nested.length) clauses.push({ $or: nested });\n continue;\n }\n\n if (key === \"NOT\") {\n const nested = compileWhere(model, value as MongoWhere);\n if (Object.keys(nested).length) clauses.push({ $nor: [nested] });\n continue;\n }\n\n clauses.push(compileFieldFilter(model, key, value));\n }\n\n if (!clauses.length) return {};\n if (clauses.length === 1) return clauses[0]!;\n return {\n $and: clauses,\n };\n }\n\n function compileOrderBy(\n model: ManifestModel,\n orderBy: Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n ) {\n if (!orderBy) return undefined;\n\n const output: Record<string, 1 | -1> = {};\n for (const [fieldName, direction] of Object.entries(orderBy)) {\n const field = model.fields[fieldName];\n if (!field) continue;\n output[field.column] = direction === \"desc\" ? -1 : 1;\n }\n\n return Object.keys(output).length ? output : undefined;\n }\n\n async function runFindMany(\n model: ManifestModel,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n take?: number;\n skip?: number;\n },\n ) {\n const query = getModel(model.name as ModelName<TSchema>).find(compileWhere(model, args.where));\n const orderBy = compileOrderBy(model, args.orderBy);\n if (orderBy) query.sort(orderBy);\n if (args.skip !== undefined) query.skip(args.skip);\n if (args.take !== undefined) query.limit(args.take);\n if (state.session) query.session(state.session);\n query.lean();\n return query.exec();\n }\n\n async function runFindOne(\n model: ManifestModel,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n },\n ) {\n const orderBy = compileOrderBy(model, args.orderBy);\n if (orderBy) {\n const rows = await runFindMany(model, {\n ...args,\n take: 1,\n });\n return rows[0] ?? null;\n }\n\n const query = getModel(model.name as ModelName<TSchema>).findOne(\n compileWhere(model, args.where),\n );\n if (state.session) query.session(state.session);\n query.lean();\n return query.exec();\n }\n\n async function loadRows<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n take?: number;\n skip?: number;\n select?: TSelect;\n },\n ): Promise<Array<SelectedRecord<TSchema, TModelName, TSelect>>> {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const docs = await runFindMany(model, args);\n const rows = docs.map((doc) => decodeRow(model, doc));\n return Promise.all(rows.map((row) => projectRow(schema, modelName, row, args.select)));\n }\n\n async function loadOneRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n select?: TSelect;\n },\n ) {\n const rows = await loadRows(schema, modelName, {\n ...args,\n take: 1,\n });\n return rows[0] ?? null;\n }\n\n async function loadRawOneRow<TModelName extends ModelName<TSchema>>(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n },\n ) {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const doc = await runFindOne(model, args);\n return doc ? decodeRow(model, doc) : null;\n }\n\n async function projectRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n row: MongoRow,\n select?: TSelect,\n ): Promise<SelectedRecord<TSchema, TModelName, TSelect>> {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const output: MongoRow = {};\n\n if (!select) {\n for (const fieldName of Object.keys(model.fields)) {\n output[fieldName] = row[fieldName];\n }\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n for (const [key, value] of Object.entries(select)) {\n if (value === undefined) continue;\n\n if (key in model.fields && value === true) {\n output[key] = row[key];\n continue;\n }\n\n if (key in schema.models[modelName].relations) {\n output[key] = await resolveRelation(\n schema,\n modelName,\n key as RelationName<TSchema, TModelName>,\n row,\n value as true | FindManyArgs<TSchema, any, any>,\n );\n }\n }\n\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n async function resolveRelation<\n TModelName extends ModelName<TSchema>,\n TRelationName extends RelationName<TSchema, TModelName>,\n >(\n schema: TSchema,\n modelName: TModelName,\n relationName: TRelationName,\n row: MongoRow,\n value: true | FindManyArgs<TSchema, any, any>,\n ) {\n const manifest = getManifest(schema);\n const relation = schema.models[modelName].relations[relationName];\n const relationArgs = value === true ? {} : value;\n\n if (relation.kind === \"belongsTo\") {\n const foreignField = manifest.models[modelName].fields[relation.foreignKey];\n const targetReference = parseReference(foreignField?.references);\n const targetField =\n targetReference?.field ?? identityField(manifest.models[relation.target]).name;\n const foreignValue = row[relation.foreignKey];\n\n if (foreignValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [targetField]: foreignValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasOne\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasMany\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n const throughModel = manifest.models[relation.through];\n const throughFromReference = parseReference(throughModel.fields[relation.from]?.references);\n const throughToReference = parseReference(throughModel.fields[relation.to]?.references);\n const sourceField =\n throughFromReference?.field ?? identityField(manifest.models[modelName]).name;\n const targetField =\n throughToReference?.field ?? identityField(manifest.models[relation.target]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n const throughRows = await loadRows(schema, relation.through as ModelName<TSchema>, {\n where: {\n [relation.from]: sourceValue,\n } as MongoWhere,\n });\n\n const targetIds = throughRows\n .map((item: MongoRow) => item[relation.to])\n .filter((item) => item != null);\n if (!targetIds.length) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [targetField]: {\n in: targetIds,\n },\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n async function runTransaction<TResult>(run: (driver: OrmDriver<TSchema>) => Promise<TResult>) {\n if (state.session) {\n return run(createMongooseDriverInternal(config, state));\n }\n\n const startSession =\n config.startSession ?? config.connection?.startSession.bind(config.connection);\n if (!startSession) {\n return run(createMongooseDriverInternal(config, state));\n }\n\n const session = await startSession();\n try {\n if (session.withTransaction) {\n return await session.withTransaction(() =>\n run(\n createMongooseDriverInternal(config, {\n session,\n }),\n ),\n );\n }\n\n if (session.startTransaction && session.commitTransaction && session.abortTransaction) {\n session.startTransaction();\n try {\n const result = await run(\n createMongooseDriverInternal(config, {\n session,\n }),\n );\n await session.commitTransaction();\n return result;\n } catch (error) {\n await session.abortTransaction();\n throw error;\n }\n }\n\n return run(\n createMongooseDriverInternal(config, {\n session,\n }),\n );\n } finally {\n await session.endSession?.();\n }\n }\n\n const driver: OrmDriver<TSchema> = {\n async findMany(schema, model, args) {\n return loadRows(schema, model, args);\n },\n async findFirst(schema, model, args) {\n return loadOneRow(schema, model, args);\n },\n async findUnique(schema, model, args) {\n const manifest = getManifest(schema);\n requireUniqueLookup(\n manifest.models[model],\n args.where as Record<string, unknown>,\n \"FindUnique\",\n );\n return loadOneRow(schema, model, args);\n },\n async count(schema, model, args?: CountArgs<TSchema, ModelName<TSchema>>) {\n const manifest = getManifest(schema);\n const result = await execute(\n getModel(model).countDocuments(\n compileWhere(manifest.models[model], args?.where as MongoWhere | undefined),\n ),\n state.session,\n );\n return Number(result);\n },\n async create(schema, model, args) {\n const manifest = getManifest(schema);\n const document = buildDocument(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n );\n const created = await normalizeCreated(\n state.session\n ? getModel(model).create([document], { session: state.session })\n : getModel(model).create(document),\n );\n if (!created) {\n throw new Error(`Create on model \"${String(model)}\" did not return a document.`);\n }\n const row = decodeRow(manifest.models[model], created);\n return projectRow(schema, model, row, args.select) as Promise<any>;\n },\n async createMany(schema, model, args) {\n const results: unknown[] = [];\n for (const entry of args.data) {\n results.push(\n await driver.create(schema, model, {\n data: entry,\n select: args.select,\n } as CreateArgs<TSchema, ModelName<TSchema>, any>),\n );\n }\n return results as any;\n },\n async update(schema, model, args) {\n const manifest = getManifest(schema);\n const updated = await getModel(model)\n .findOneAndUpdate(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n {\n $set: buildUpdate(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n ),\n },\n {\n new: true,\n returnDocument: \"after\",\n session: state.session,\n },\n )\n .lean()\n .exec();\n\n if (!updated) return null;\n\n return projectRow(\n schema,\n model,\n decodeRow(manifest.models[model], updated),\n args.select,\n ) as Promise<any>;\n },\n async updateMany(schema, model, args) {\n const manifest = getManifest(schema);\n const update = buildUpdate(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n );\n if (!Object.keys(update).length) return 0;\n const result = await execute(\n getModel(model).updateMany(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n {\n $set: update,\n },\n state.session ? { session: state.session } : undefined,\n ),\n state.session,\n );\n return Number(result.modifiedCount ?? result.matchedCount ?? 0);\n },\n async upsert(schema, model, args) {\n const manifest = getManifest(schema);\n const modelManifest = manifest.models[model];\n const lookup = requireUniqueLookup(\n modelManifest,\n args.where as Record<string, unknown>,\n \"Upsert\",\n );\n validateUniqueLookupUpdateData(\n modelManifest,\n args.update as Partial<Record<string, unknown>>,\n lookup,\n \"Upsert\",\n );\n const created = buildDocument(\n modelManifest,\n mergeUniqueLookupCreateData(\n modelManifest,\n args.create as Partial<Record<string, unknown>>,\n lookup,\n \"Upsert\",\n ),\n );\n const update = buildUpdate(modelManifest, args.update as Partial<Record<string, unknown>>);\n const updated = await getModel(model)\n .findOneAndUpdate(\n compileWhere(modelManifest, args.where as MongoWhere),\n {\n $set: update,\n $setOnInsert: removeOverlappingInsertFields(created, update),\n },\n {\n upsert: true,\n new: true,\n returnDocument: \"after\",\n session: state.session,\n },\n )\n .lean()\n .exec();\n\n if (!updated) {\n throw new Error(`Upsert on model \"${String(model)}\" did not return a document.`);\n }\n\n return projectRow(\n schema,\n model,\n decodeRow(modelManifest, updated),\n args.select,\n ) as Promise<any>;\n },\n async delete(schema, model, args) {\n const manifest = getManifest(schema);\n const deleted = await getModel(model)\n .findOneAndDelete(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n state.session ? { session: state.session } : undefined,\n )\n .lean()\n .exec();\n return deleted ? 1 : 0;\n },\n async deleteMany(schema, model, args) {\n const manifest = getManifest(schema);\n const result = await execute(\n getModel(model).deleteMany(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n state.session ? { session: state.session } : undefined,\n ),\n state.session,\n );\n return Number(result.deletedCount ?? 0);\n },\n async transaction(_schema, run) {\n return runTransaction(run);\n },\n };\n\n return driver;\n}\n\nexport function createMongooseDriver<TSchema extends SchemaDefinition<any>>(\n config: MongooseDriverConfig<TSchema>,\n) {\n return createMongooseDriverInternal(config);\n}\n"],"mappings":"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","names":["targetField","sourceField","sourceValue"]}
package/dist/index.js CHANGED
@@ -1,7 +1,11 @@
1
1
  // src/index.ts
2
2
  import { randomUUID } from "crypto";
3
3
  import {
4
- createManifest
4
+ createManifest,
5
+ mergeUniqueLookupCreateData,
6
+ isOperatorFilterObject,
7
+ requireUniqueLookup,
8
+ validateUniqueLookupUpdateData
5
9
  } from "@farming-labs/orm";
6
10
  var manifestCache = /* @__PURE__ */ new WeakMap();
7
11
  function getManifest(schema) {
@@ -28,9 +32,6 @@ function applyDefault(value, field) {
28
32
  }
29
33
  return field.defaultValue;
30
34
  }
31
- function isFilterObject(value) {
32
- return !!value && typeof value === "object" && !(value instanceof Date) && !Array.isArray(value);
33
- }
34
35
  function escapeRegex(value) {
35
36
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
36
37
  }
@@ -48,73 +49,6 @@ function parseReference(reference) {
48
49
  if (!model || !field) return null;
49
50
  return { model, field };
50
51
  }
51
- function extractEqualityValue(filter) {
52
- if (!isFilterObject(filter)) {
53
- return {
54
- supported: true,
55
- value: filter
56
- };
57
- }
58
- const keys = Object.keys(filter);
59
- if (keys.length === 1 && "eq" in filter) {
60
- return {
61
- supported: true,
62
- value: filter.eq
63
- };
64
- }
65
- return {
66
- supported: false,
67
- value: void 0
68
- };
69
- }
70
- function extractUpsertConflict(model, where) {
71
- const keys = Object.keys(where).filter((key) => key !== "AND" && key !== "OR" && key !== "NOT");
72
- if ("AND" in where || "OR" in where || "NOT" in where || keys.length !== 1) {
73
- throw new Error(
74
- `Upsert on model "${model.name}" requires a single unique equality filter in "where".`
75
- );
76
- }
77
- const fieldName = keys[0];
78
- const field = model.fields[fieldName];
79
- if (!field) {
80
- throw new Error(`Unknown field "${fieldName}" on model "${model.name}".`);
81
- }
82
- if (!(field.kind === "id" || field.unique)) {
83
- throw new Error(
84
- `Upsert on model "${model.name}" requires the "where" field "${fieldName}" to be unique or an id field.`
85
- );
86
- }
87
- const { supported, value } = extractEqualityValue(where[fieldName]);
88
- if (!supported || value === void 0 || value === null) {
89
- throw new Error(
90
- `Upsert on model "${model.name}" requires the "where" field "${fieldName}" to use a single non-null equality value.`
91
- );
92
- }
93
- return {
94
- field,
95
- value
96
- };
97
- }
98
- function mergeUpsertCreateData(model, createData, conflict) {
99
- const currentValue = createData[conflict.field.name];
100
- if (currentValue !== void 0 && currentValue !== conflict.value) {
101
- throw new Error(
102
- `Upsert on model "${model.name}" requires create.${conflict.field.name} to match where.${conflict.field.name}.`
103
- );
104
- }
105
- return {
106
- ...createData,
107
- [conflict.field.name]: currentValue ?? conflict.value
108
- };
109
- }
110
- function validateUpsertUpdateData(model, updateData, conflict) {
111
- const nextValue = updateData[conflict.field.name];
112
- if (nextValue !== void 0 && nextValue !== conflict.value) {
113
- throw new Error(
114
- `Upsert on model "${model.name}" cannot change the conflict field "${conflict.field.name}".`
115
- );
116
- }
117
- }
118
52
  function removeOverlappingInsertFields(insertData, updateData) {
119
53
  const output = {};
120
54
  for (const [key, value] of Object.entries(insertData)) {
@@ -154,6 +88,8 @@ function createMongooseDriverInternal(config, state = {}) {
154
88
  let next = value;
155
89
  if (field.kind === "boolean") {
156
90
  next = Boolean(next);
91
+ } else if (field.kind === "integer") {
92
+ next = Number(next);
157
93
  } else if (field.kind === "datetime") {
158
94
  next = next instanceof Date ? next : new Date(String(next));
159
95
  }
@@ -168,6 +104,9 @@ function createMongooseDriverInternal(config, state = {}) {
168
104
  if (field.kind === "boolean") {
169
105
  return Boolean(next);
170
106
  }
107
+ if (field.kind === "integer") {
108
+ return typeof next === "number" ? next : Number(next);
109
+ }
171
110
  if (field.kind === "datetime") {
172
111
  return next instanceof Date ? next : new Date(String(next));
173
112
  }
@@ -210,7 +149,7 @@ function createMongooseDriverInternal(config, state = {}) {
210
149
  if (!field) {
211
150
  throw new Error(`Unknown field "${fieldName}" on model "${model.name}".`);
212
151
  }
213
- if (!isFilterObject(filter)) {
152
+ if (!isOperatorFilterObject(filter)) {
214
153
  return {
215
154
  [field.column]: encodeValue(model.name, field, filter)
216
155
  };
@@ -495,6 +434,12 @@ function createMongooseDriverInternal(config, state = {}) {
495
434
  return loadOneRow(schema, model, args);
496
435
  },
497
436
  async findUnique(schema, model, args) {
437
+ const manifest = getManifest(schema);
438
+ requireUniqueLookup(
439
+ manifest.models[model],
440
+ args.where,
441
+ "FindUnique"
442
+ );
498
443
  return loadOneRow(schema, model, args);
499
444
  },
500
445
  async count(schema, model, args) {
@@ -580,18 +525,24 @@ function createMongooseDriverInternal(config, state = {}) {
580
525
  async upsert(schema, model, args) {
581
526
  const manifest = getManifest(schema);
582
527
  const modelManifest = manifest.models[model];
583
- const conflict = extractUpsertConflict(modelManifest, args.where);
584
- validateUpsertUpdateData(
528
+ const lookup = requireUniqueLookup(
529
+ modelManifest,
530
+ args.where,
531
+ "Upsert"
532
+ );
533
+ validateUniqueLookupUpdateData(
585
534
  modelManifest,
586
535
  args.update,
587
- conflict
536
+ lookup,
537
+ "Upsert"
588
538
  );
589
539
  const created = buildDocument(
590
540
  modelManifest,
591
- mergeUpsertCreateData(
541
+ mergeUniqueLookupCreateData(
592
542
  modelManifest,
593
543
  args.create,
594
- conflict
544
+ lookup,
545
+ "Upsert"
595
546
  )
596
547
  );
597
548
  const update = buildUpdate(modelManifest, args.update);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n createManifest,\n type CountArgs,\n type CreateArgs,\n type CreateManyArgs,\n type DeleteArgs,\n type DeleteManyArgs,\n type FindManyArgs,\n type ManifestField,\n type ManifestModel,\n type OrmDriver,\n type SchemaManifest,\n type SchemaDefinition,\n type SelectShape,\n type SelectedRecord,\n type UpdateArgs,\n type UpdateManyArgs,\n type UpsertArgs,\n type Where,\n} from \"@farming-labs/orm\";\nimport type { ModelName, RelationName } from \"@farming-labs/orm\";\n\ntype MongoRow = Record<string, unknown>;\ntype MongoFilterRecord = Record<string, string | number | boolean | Date | null>;\ntype MongoWhere = Where<MongoFilterRecord>;\n\ntype MongooseWriteResult = {\n modifiedCount?: number;\n matchedCount?: number;\n deletedCount?: number;\n};\n\nexport type MongooseSessionLike = {\n withTransaction?<TResult>(run: () => Promise<TResult>): Promise<TResult>;\n startTransaction?(): void;\n commitTransaction?(): Promise<void>;\n abortTransaction?(): Promise<void>;\n endSession?(): Promise<void> | void;\n};\n\nexport type MongooseSessionSourceLike = {\n startSession(): Promise<MongooseSessionLike>;\n};\n\nexport type MongooseQueryLike<TResult> = {\n sort(sort: Record<string, 1 | -1>): MongooseQueryLike<TResult>;\n skip(value: number): MongooseQueryLike<TResult>;\n limit(value: number): MongooseQueryLike<TResult>;\n session(session: MongooseSessionLike): MongooseQueryLike<TResult>;\n lean(): MongooseQueryLike<TResult>;\n exec(): Promise<TResult>;\n};\n\nexport type MongooseExecLike<TResult> = {\n session?(session: MongooseSessionLike): MongooseExecLike<TResult>;\n exec(): Promise<TResult>;\n};\n\nexport type MongooseModelLike = {\n find(filter: Record<string, unknown>): MongooseQueryLike<MongoRow[]>;\n findOne(filter: Record<string, unknown>): MongooseQueryLike<MongoRow | null>;\n countDocuments(filter: Record<string, unknown>): Promise<number> | MongooseExecLike<number>;\n create(\n doc: MongoRow | MongoRow[],\n options?: { session?: MongooseSessionLike },\n ): Promise<MongoRow | MongoRow[]>;\n insertMany?(docs: MongoRow[], options?: { session?: MongooseSessionLike }): Promise<MongoRow[]>;\n updateMany(\n filter: Record<string, unknown>,\n update: { $set: MongoRow },\n options?: { session?: MongooseSessionLike },\n ): Promise<MongooseWriteResult> | MongooseExecLike<MongooseWriteResult>;\n findOneAndUpdate(\n filter: Record<string, unknown>,\n update: { $set?: MongoRow; $setOnInsert?: MongoRow },\n options?: {\n upsert?: boolean;\n new?: boolean;\n returnDocument?: \"after\" | \"before\";\n session?: MongooseSessionLike;\n },\n ): MongooseQueryLike<MongoRow | null>;\n findOneAndDelete(\n filter: Record<string, unknown>,\n options?: { session?: MongooseSessionLike },\n ): MongooseQueryLike<MongoRow | null>;\n deleteMany(\n filter: Record<string, unknown>,\n options?: { session?: MongooseSessionLike },\n ): Promise<MongooseWriteResult> | MongooseExecLike<MongooseWriteResult>;\n};\n\nexport type MongooseFieldTransform = {\n encode?: (value: unknown) => unknown;\n decode?: (value: unknown) => unknown;\n};\n\nexport type MongooseDriverConfig<TSchema extends SchemaDefinition<any>> = {\n models: Record<ModelName<TSchema>, MongooseModelLike>;\n connection?: MongooseSessionSourceLike;\n startSession?: () => Promise<MongooseSessionLike>;\n transforms?: Partial<Record<string, Partial<Record<string, MongooseFieldTransform>>>>;\n};\n\nconst manifestCache = new WeakMap<object, SchemaManifest>();\n\nfunction getManifest(schema: SchemaDefinition<any>) {\n const cached = manifestCache.get(schema);\n if (cached) return cached;\n const next = createManifest(schema);\n manifestCache.set(schema, next);\n return next;\n}\n\nfunction identityField(model: ManifestModel) {\n if (model.fields.id) return model.fields.id;\n const uniqueField = Object.values(model.fields).find((field) => field.unique);\n if (uniqueField) return uniqueField;\n throw new Error(\n `Model \"${model.name}\" requires an \"id\" field or a unique field for the Mongoose runtime.`,\n );\n}\n\nfunction applyDefault(value: unknown, field: ManifestField) {\n if (value !== undefined) return value;\n if (field.generated === \"id\") return randomUUID();\n if (field.generated === \"now\") return new Date();\n if (typeof field.defaultValue === \"function\") {\n return (field.defaultValue as () => unknown)();\n }\n return field.defaultValue;\n}\n\nfunction isFilterObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !(value instanceof Date) && !Array.isArray(value);\n}\n\nfunction escapeRegex(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction mergeWhere(...clauses: Array<MongoWhere | undefined>) {\n const defined = clauses.filter(Boolean) as MongoWhere[];\n if (!defined.length) return undefined;\n if (defined.length === 1) return defined[0];\n return {\n AND: defined,\n } as MongoWhere;\n}\n\nfunction parseReference(reference?: string) {\n if (!reference) return null;\n const [model, field] = reference.split(\".\");\n if (!model || !field) return null;\n return { model, field };\n}\n\nfunction extractEqualityValue(filter: unknown) {\n if (!isFilterObject(filter)) {\n return {\n supported: true,\n value: filter,\n };\n }\n\n const keys = Object.keys(filter);\n if (keys.length === 1 && \"eq\" in filter) {\n return {\n supported: true,\n value: filter.eq,\n };\n }\n\n return {\n supported: false,\n value: undefined,\n };\n}\n\nfunction extractUpsertConflict(model: ManifestModel, where: MongoWhere) {\n const keys = Object.keys(where).filter((key) => key !== \"AND\" && key !== \"OR\" && key !== \"NOT\");\n\n if (\"AND\" in where || \"OR\" in where || \"NOT\" in where || keys.length !== 1) {\n throw new Error(\n `Upsert on model \"${model.name}\" requires a single unique equality filter in \"where\".`,\n );\n }\n\n const fieldName = keys[0]!;\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n\n if (!(field.kind === \"id\" || field.unique)) {\n throw new Error(\n `Upsert on model \"${model.name}\" requires the \"where\" field \"${fieldName}\" to be unique or an id field.`,\n );\n }\n\n const { supported, value } = extractEqualityValue(where[fieldName]);\n if (!supported || value === undefined || value === null) {\n throw new Error(\n `Upsert on model \"${model.name}\" requires the \"where\" field \"${fieldName}\" to use a single non-null equality value.`,\n );\n }\n\n return {\n field,\n value,\n };\n}\n\nfunction mergeUpsertCreateData(\n model: ManifestModel,\n createData: Partial<Record<string, unknown>>,\n conflict: { field: ManifestField; value: unknown },\n) {\n const currentValue = createData[conflict.field.name];\n if (currentValue !== undefined && currentValue !== conflict.value) {\n throw new Error(\n `Upsert on model \"${model.name}\" requires create.${conflict.field.name} to match where.${conflict.field.name}.`,\n );\n }\n\n return {\n ...createData,\n [conflict.field.name]: currentValue ?? conflict.value,\n };\n}\n\nfunction validateUpsertUpdateData(\n model: ManifestModel,\n updateData: Partial<Record<string, unknown>>,\n conflict: { field: ManifestField; value: unknown },\n) {\n const nextValue = updateData[conflict.field.name];\n if (nextValue !== undefined && nextValue !== conflict.value) {\n throw new Error(\n `Upsert on model \"${model.name}\" cannot change the conflict field \"${conflict.field.name}\".`,\n );\n }\n}\n\nfunction removeOverlappingInsertFields(insertData: MongoRow, updateData: MongoRow) {\n const output: MongoRow = {};\n\n for (const [key, value] of Object.entries(insertData)) {\n if (Object.prototype.hasOwnProperty.call(updateData, key)) continue;\n output[key] = value;\n }\n\n return output;\n}\n\nfunction isExecLike<TResult>(value: unknown): value is MongooseExecLike<TResult> {\n return !!value && typeof value === \"object\" && \"exec\" in value;\n}\n\nasync function execute<TResult>(\n operation: Promise<TResult> | MongooseExecLike<TResult>,\n session?: MongooseSessionLike,\n) {\n if (isExecLike<TResult>(operation)) {\n const query =\n session && typeof operation.session === \"function\" ? operation.session(session) : operation;\n return query.exec();\n }\n return operation;\n}\n\nasync function normalizeCreated(doc: Promise<MongoRow | MongoRow[]>) {\n const result = await doc;\n return Array.isArray(result) ? (result[0] ?? null) : result;\n}\n\nfunction createMongooseDriverInternal<TSchema extends SchemaDefinition<any>>(\n config: MongooseDriverConfig<TSchema>,\n state: {\n session?: MongooseSessionLike;\n } = {},\n): OrmDriver<TSchema> {\n function getModel(modelName: ModelName<TSchema>) {\n const model = config.models[modelName];\n if (!model) {\n throw new Error(`No Mongoose model was provided for schema model \"${modelName}\".`);\n }\n return model;\n }\n\n function fieldTransform(modelName: string, fieldName: string) {\n return config.transforms?.[modelName]?.[fieldName];\n }\n\n function encodeValue(modelName: string, field: ManifestField, value: unknown) {\n if (value === undefined) return value;\n if (value === null) return null;\n\n let next = value;\n if (field.kind === \"boolean\") {\n next = Boolean(next);\n } else if (field.kind === \"datetime\") {\n next = next instanceof Date ? next : new Date(String(next));\n }\n\n const transform = fieldTransform(modelName, field.name);\n return transform?.encode ? transform.encode(next) : next;\n }\n\n function decodeValue(modelName: string, field: ManifestField, value: unknown) {\n if (value === undefined) return value;\n if (value === null) return null;\n\n const transform = fieldTransform(modelName, field.name);\n let next = transform?.decode ? transform.decode(value) : value;\n\n if (field.kind === \"boolean\") {\n return Boolean(next);\n }\n if (field.kind === \"datetime\") {\n return next instanceof Date ? next : new Date(String(next));\n }\n if (field.kind === \"id\") {\n return typeof next === \"string\" ? next : String(next);\n }\n return next;\n }\n\n function buildDocument(model: ManifestModel, data: Partial<Record<string, unknown>>) {\n const doc: MongoRow = {};\n\n for (const field of Object.values(model.fields)) {\n const value = applyDefault(data[field.name], field);\n if (value !== undefined) {\n doc[field.column] = encodeValue(model.name, field, value);\n }\n }\n\n return doc;\n }\n\n function buildUpdate(model: ManifestModel, data: Partial<Record<string, unknown>>) {\n const update: MongoRow = {};\n\n for (const [fieldName, value] of Object.entries(data)) {\n if (value === undefined) continue;\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n update[field.column] = encodeValue(model.name, field, value);\n }\n\n return update;\n }\n\n function decodeRow(model: ManifestModel, doc: MongoRow) {\n const output: MongoRow = {};\n\n for (const field of Object.values(model.fields)) {\n output[field.name] = decodeValue(model.name, field, doc[field.column]);\n }\n\n return output;\n }\n\n function compileFieldFilter(\n model: ManifestModel,\n fieldName: string,\n filter: unknown,\n ): Record<string, unknown> {\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n\n if (!isFilterObject(filter)) {\n return {\n [field.column]: encodeValue(model.name, field, filter),\n };\n }\n\n const operations: Record<string, unknown> = {};\n\n if (\"eq\" in filter) {\n operations.$eq = encodeValue(model.name, field, filter.eq);\n }\n if (\"not\" in filter) {\n operations.$ne = encodeValue(model.name, field, filter.not);\n }\n if (\"in\" in filter) {\n const values = Array.isArray(filter.in) ? filter.in : [];\n operations.$in = values.map((value) => encodeValue(model.name, field, value));\n }\n if (\"contains\" in filter) {\n operations.$regex = new RegExp(escapeRegex(String(filter.contains ?? \"\")));\n }\n if (\"gt\" in filter) {\n operations.$gt = encodeValue(model.name, field, filter.gt);\n }\n if (\"gte\" in filter) {\n operations.$gte = encodeValue(model.name, field, filter.gte);\n }\n if (\"lt\" in filter) {\n operations.$lt = encodeValue(model.name, field, filter.lt);\n }\n if (\"lte\" in filter) {\n operations.$lte = encodeValue(model.name, field, filter.lte);\n }\n\n return {\n [field.column]: operations,\n };\n }\n\n function compileWhere(\n model: ManifestModel,\n where: MongoWhere | undefined,\n ): Record<string, unknown> {\n if (!where) return {};\n\n const clauses: Record<string, unknown>[] = [];\n\n for (const [key, value] of Object.entries(where)) {\n if (key === \"AND\") {\n const nested = (Array.isArray(value) ? value : [])\n .map((item) => compileWhere(model, item as MongoWhere))\n .filter((item) => Object.keys(item).length > 0);\n if (nested.length) clauses.push({ $and: nested });\n continue;\n }\n\n if (key === \"OR\") {\n const nested = (Array.isArray(value) ? value : [])\n .map((item) => compileWhere(model, item as MongoWhere))\n .filter((item) => Object.keys(item).length > 0);\n if (nested.length) clauses.push({ $or: nested });\n continue;\n }\n\n if (key === \"NOT\") {\n const nested = compileWhere(model, value as MongoWhere);\n if (Object.keys(nested).length) clauses.push({ $nor: [nested] });\n continue;\n }\n\n clauses.push(compileFieldFilter(model, key, value));\n }\n\n if (!clauses.length) return {};\n if (clauses.length === 1) return clauses[0]!;\n return {\n $and: clauses,\n };\n }\n\n function compileOrderBy(\n model: ManifestModel,\n orderBy: Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n ) {\n if (!orderBy) return undefined;\n\n const output: Record<string, 1 | -1> = {};\n for (const [fieldName, direction] of Object.entries(orderBy)) {\n const field = model.fields[fieldName];\n if (!field) continue;\n output[field.column] = direction === \"desc\" ? -1 : 1;\n }\n\n return Object.keys(output).length ? output : undefined;\n }\n\n async function runFindMany(\n model: ManifestModel,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n take?: number;\n skip?: number;\n },\n ) {\n const query = getModel(model.name as ModelName<TSchema>).find(compileWhere(model, args.where));\n const orderBy = compileOrderBy(model, args.orderBy);\n if (orderBy) query.sort(orderBy);\n if (args.skip !== undefined) query.skip(args.skip);\n if (args.take !== undefined) query.limit(args.take);\n if (state.session) query.session(state.session);\n query.lean();\n return query.exec();\n }\n\n async function runFindOne(\n model: ManifestModel,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n },\n ) {\n const orderBy = compileOrderBy(model, args.orderBy);\n if (orderBy) {\n const rows = await runFindMany(model, {\n ...args,\n take: 1,\n });\n return rows[0] ?? null;\n }\n\n const query = getModel(model.name as ModelName<TSchema>).findOne(\n compileWhere(model, args.where),\n );\n if (state.session) query.session(state.session);\n query.lean();\n return query.exec();\n }\n\n async function loadRows<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n take?: number;\n skip?: number;\n select?: TSelect;\n },\n ): Promise<Array<SelectedRecord<TSchema, TModelName, TSelect>>> {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const docs = await runFindMany(model, args);\n const rows = docs.map((doc) => decodeRow(model, doc));\n return Promise.all(rows.map((row) => projectRow(schema, modelName, row, args.select)));\n }\n\n async function loadOneRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n select?: TSelect;\n },\n ) {\n const rows = await loadRows(schema, modelName, {\n ...args,\n take: 1,\n });\n return rows[0] ?? null;\n }\n\n async function loadRawOneRow<TModelName extends ModelName<TSchema>>(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n },\n ) {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const doc = await runFindOne(model, args);\n return doc ? decodeRow(model, doc) : null;\n }\n\n async function projectRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n row: MongoRow,\n select?: TSelect,\n ): Promise<SelectedRecord<TSchema, TModelName, TSelect>> {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const output: MongoRow = {};\n\n if (!select) {\n for (const fieldName of Object.keys(model.fields)) {\n output[fieldName] = row[fieldName];\n }\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n for (const [key, value] of Object.entries(select)) {\n if (value === undefined) continue;\n\n if (key in model.fields && value === true) {\n output[key] = row[key];\n continue;\n }\n\n if (key in schema.models[modelName].relations) {\n output[key] = await resolveRelation(\n schema,\n modelName,\n key as RelationName<TSchema, TModelName>,\n row,\n value as true | FindManyArgs<TSchema, any, any>,\n );\n }\n }\n\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n async function resolveRelation<\n TModelName extends ModelName<TSchema>,\n TRelationName extends RelationName<TSchema, TModelName>,\n >(\n schema: TSchema,\n modelName: TModelName,\n relationName: TRelationName,\n row: MongoRow,\n value: true | FindManyArgs<TSchema, any, any>,\n ) {\n const manifest = getManifest(schema);\n const relation = schema.models[modelName].relations[relationName];\n const relationArgs = value === true ? {} : value;\n\n if (relation.kind === \"belongsTo\") {\n const foreignField = manifest.models[modelName].fields[relation.foreignKey];\n const targetReference = parseReference(foreignField?.references);\n const targetField =\n targetReference?.field ?? identityField(manifest.models[relation.target]).name;\n const foreignValue = row[relation.foreignKey];\n\n if (foreignValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [targetField]: foreignValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasOne\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasMany\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n const throughModel = manifest.models[relation.through];\n const throughFromReference = parseReference(throughModel.fields[relation.from]?.references);\n const throughToReference = parseReference(throughModel.fields[relation.to]?.references);\n const sourceField =\n throughFromReference?.field ?? identityField(manifest.models[modelName]).name;\n const targetField =\n throughToReference?.field ?? identityField(manifest.models[relation.target]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n const throughRows = await loadRows(schema, relation.through as ModelName<TSchema>, {\n where: {\n [relation.from]: sourceValue,\n } as MongoWhere,\n });\n\n const targetIds = throughRows\n .map((item: MongoRow) => item[relation.to])\n .filter((item) => item != null);\n if (!targetIds.length) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [targetField]: {\n in: targetIds,\n },\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n async function runTransaction<TResult>(run: (driver: OrmDriver<TSchema>) => Promise<TResult>) {\n if (state.session) {\n return run(createMongooseDriverInternal(config, state));\n }\n\n const startSession =\n config.startSession ?? config.connection?.startSession.bind(config.connection);\n if (!startSession) {\n return run(createMongooseDriverInternal(config, state));\n }\n\n const session = await startSession();\n try {\n if (session.withTransaction) {\n return await session.withTransaction(() =>\n run(\n createMongooseDriverInternal(config, {\n session,\n }),\n ),\n );\n }\n\n if (session.startTransaction && session.commitTransaction && session.abortTransaction) {\n session.startTransaction();\n try {\n const result = await run(\n createMongooseDriverInternal(config, {\n session,\n }),\n );\n await session.commitTransaction();\n return result;\n } catch (error) {\n await session.abortTransaction();\n throw error;\n }\n }\n\n return run(\n createMongooseDriverInternal(config, {\n session,\n }),\n );\n } finally {\n await session.endSession?.();\n }\n }\n\n const driver: OrmDriver<TSchema> = {\n async findMany(schema, model, args) {\n return loadRows(schema, model, args);\n },\n async findFirst(schema, model, args) {\n return loadOneRow(schema, model, args);\n },\n async findUnique(schema, model, args) {\n return loadOneRow(schema, model, args);\n },\n async count(schema, model, args?: CountArgs<TSchema, ModelName<TSchema>>) {\n const manifest = getManifest(schema);\n const result = await execute(\n getModel(model).countDocuments(\n compileWhere(manifest.models[model], args?.where as MongoWhere | undefined),\n ),\n state.session,\n );\n return Number(result);\n },\n async create(schema, model, args) {\n const manifest = getManifest(schema);\n const document = buildDocument(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n );\n const created = await normalizeCreated(\n state.session\n ? getModel(model).create([document], { session: state.session })\n : getModel(model).create(document),\n );\n if (!created) {\n throw new Error(`Create on model \"${String(model)}\" did not return a document.`);\n }\n const row = decodeRow(manifest.models[model], created);\n return projectRow(schema, model, row, args.select) as Promise<any>;\n },\n async createMany(schema, model, args) {\n const results: unknown[] = [];\n for (const entry of args.data) {\n results.push(\n await driver.create(schema, model, {\n data: entry,\n select: args.select,\n } as CreateArgs<TSchema, ModelName<TSchema>, any>),\n );\n }\n return results as any;\n },\n async update(schema, model, args) {\n const manifest = getManifest(schema);\n const updated = await getModel(model)\n .findOneAndUpdate(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n {\n $set: buildUpdate(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n ),\n },\n {\n new: true,\n returnDocument: \"after\",\n session: state.session,\n },\n )\n .lean()\n .exec();\n\n if (!updated) return null;\n\n return projectRow(\n schema,\n model,\n decodeRow(manifest.models[model], updated),\n args.select,\n ) as Promise<any>;\n },\n async updateMany(schema, model, args) {\n const manifest = getManifest(schema);\n const update = buildUpdate(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n );\n if (!Object.keys(update).length) return 0;\n const result = await execute(\n getModel(model).updateMany(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n {\n $set: update,\n },\n state.session ? { session: state.session } : undefined,\n ),\n state.session,\n );\n return Number(result.modifiedCount ?? result.matchedCount ?? 0);\n },\n async upsert(schema, model, args) {\n const manifest = getManifest(schema);\n const modelManifest = manifest.models[model];\n const conflict = extractUpsertConflict(modelManifest, args.where as MongoWhere);\n validateUpsertUpdateData(\n modelManifest,\n args.update as Partial<Record<string, unknown>>,\n conflict,\n );\n const created = buildDocument(\n modelManifest,\n mergeUpsertCreateData(\n modelManifest,\n args.create as Partial<Record<string, unknown>>,\n conflict,\n ),\n );\n const update = buildUpdate(modelManifest, args.update as Partial<Record<string, unknown>>);\n const updated = await getModel(model)\n .findOneAndUpdate(\n compileWhere(modelManifest, args.where as MongoWhere),\n {\n $set: update,\n $setOnInsert: removeOverlappingInsertFields(created, update),\n },\n {\n upsert: true,\n new: true,\n returnDocument: \"after\",\n session: state.session,\n },\n )\n .lean()\n .exec();\n\n if (!updated) {\n throw new Error(`Upsert on model \"${String(model)}\" did not return a document.`);\n }\n\n return projectRow(\n schema,\n model,\n decodeRow(modelManifest, updated),\n args.select,\n ) as Promise<any>;\n },\n async delete(schema, model, args) {\n const manifest = getManifest(schema);\n const deleted = await getModel(model)\n .findOneAndDelete(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n state.session ? { session: state.session } : undefined,\n )\n .lean()\n .exec();\n return deleted ? 1 : 0;\n },\n async deleteMany(schema, model, args) {\n const manifest = getManifest(schema);\n const result = await execute(\n getModel(model).deleteMany(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n state.session ? { session: state.session } : undefined,\n ),\n state.session,\n );\n return Number(result.deletedCount ?? 0);\n },\n async transaction(_schema, run) {\n return runTransaction(run);\n },\n };\n\n return driver;\n}\n\nexport function createMongooseDriver<TSchema extends SchemaDefinition<any>>(\n config: MongooseDriverConfig<TSchema>,\n) {\n return createMongooseDriverInternal(config);\n}\n"],"mappings":"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","names":["targetField","sourceField","sourceValue"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n createManifest,\n type CountArgs,\n type CreateArgs,\n type CreateManyArgs,\n type DeleteArgs,\n type DeleteManyArgs,\n type FindManyArgs,\n type ManifestField,\n type ManifestModel,\n mergeUniqueLookupCreateData,\n type OrmDriver,\n isOperatorFilterObject,\n requireUniqueLookup,\n type SchemaManifest,\n type SchemaDefinition,\n type SelectShape,\n type SelectedRecord,\n type UpdateArgs,\n type UpdateManyArgs,\n type UpsertArgs,\n validateUniqueLookupUpdateData,\n type Where,\n} from \"@farming-labs/orm\";\nimport type { ModelName, RelationName } from \"@farming-labs/orm\";\n\ntype MongoRow = Record<string, unknown>;\ntype MongoWhere = Where<Record<string, unknown>>;\n\ntype MongooseWriteResult = {\n modifiedCount?: number;\n matchedCount?: number;\n deletedCount?: number;\n};\n\nexport type MongooseSessionLike = {\n withTransaction?<TResult>(run: () => Promise<TResult>): Promise<TResult>;\n startTransaction?(): void;\n commitTransaction?(): Promise<void>;\n abortTransaction?(): Promise<void>;\n endSession?(): Promise<void> | void;\n};\n\nexport type MongooseSessionSourceLike = {\n startSession(): Promise<MongooseSessionLike>;\n};\n\nexport type MongooseQueryLike<TResult> = {\n sort(sort: Record<string, 1 | -1>): MongooseQueryLike<TResult>;\n skip(value: number): MongooseQueryLike<TResult>;\n limit(value: number): MongooseQueryLike<TResult>;\n session(session: MongooseSessionLike): MongooseQueryLike<TResult>;\n lean(): MongooseQueryLike<TResult>;\n exec(): Promise<TResult>;\n};\n\nexport type MongooseExecLike<TResult> = {\n session?(session: MongooseSessionLike): MongooseExecLike<TResult>;\n exec(): Promise<TResult>;\n};\n\nexport type MongooseModelLike = {\n find(filter: Record<string, unknown>): MongooseQueryLike<MongoRow[]>;\n findOne(filter: Record<string, unknown>): MongooseQueryLike<MongoRow | null>;\n countDocuments(filter: Record<string, unknown>): Promise<number> | MongooseExecLike<number>;\n create(\n doc: MongoRow | MongoRow[],\n options?: { session?: MongooseSessionLike },\n ): Promise<MongoRow | MongoRow[]>;\n insertMany?(docs: MongoRow[], options?: { session?: MongooseSessionLike }): Promise<MongoRow[]>;\n updateMany(\n filter: Record<string, unknown>,\n update: { $set: MongoRow },\n options?: { session?: MongooseSessionLike },\n ): Promise<MongooseWriteResult> | MongooseExecLike<MongooseWriteResult>;\n findOneAndUpdate(\n filter: Record<string, unknown>,\n update: { $set?: MongoRow; $setOnInsert?: MongoRow },\n options?: {\n upsert?: boolean;\n new?: boolean;\n returnDocument?: \"after\" | \"before\";\n session?: MongooseSessionLike;\n },\n ): MongooseQueryLike<MongoRow | null>;\n findOneAndDelete(\n filter: Record<string, unknown>,\n options?: { session?: MongooseSessionLike },\n ): MongooseQueryLike<MongoRow | null>;\n deleteMany(\n filter: Record<string, unknown>,\n options?: { session?: MongooseSessionLike },\n ): Promise<MongooseWriteResult> | MongooseExecLike<MongooseWriteResult>;\n};\n\nexport type MongooseFieldTransform = {\n encode?: (value: unknown) => unknown;\n decode?: (value: unknown) => unknown;\n};\n\nexport type MongooseDriverConfig<TSchema extends SchemaDefinition<any>> = {\n models: Record<ModelName<TSchema>, MongooseModelLike>;\n connection?: MongooseSessionSourceLike;\n startSession?: () => Promise<MongooseSessionLike>;\n transforms?: Partial<Record<string, Partial<Record<string, MongooseFieldTransform>>>>;\n};\n\nconst manifestCache = new WeakMap<object, SchemaManifest>();\n\nfunction getManifest(schema: SchemaDefinition<any>) {\n const cached = manifestCache.get(schema);\n if (cached) return cached;\n const next = createManifest(schema);\n manifestCache.set(schema, next);\n return next;\n}\n\nfunction identityField(model: ManifestModel) {\n if (model.fields.id) return model.fields.id;\n const uniqueField = Object.values(model.fields).find((field) => field.unique);\n if (uniqueField) return uniqueField;\n throw new Error(\n `Model \"${model.name}\" requires an \"id\" field or a unique field for the Mongoose runtime.`,\n );\n}\n\nfunction applyDefault(value: unknown, field: ManifestField) {\n if (value !== undefined) return value;\n if (field.generated === \"id\") return randomUUID();\n if (field.generated === \"now\") return new Date();\n if (typeof field.defaultValue === \"function\") {\n return (field.defaultValue as () => unknown)();\n }\n return field.defaultValue;\n}\n\nfunction escapeRegex(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction mergeWhere(...clauses: Array<MongoWhere | undefined>) {\n const defined = clauses.filter(Boolean) as MongoWhere[];\n if (!defined.length) return undefined;\n if (defined.length === 1) return defined[0];\n return {\n AND: defined,\n } as MongoWhere;\n}\n\nfunction parseReference(reference?: string) {\n if (!reference) return null;\n const [model, field] = reference.split(\".\");\n if (!model || !field) return null;\n return { model, field };\n}\n\nfunction removeOverlappingInsertFields(insertData: MongoRow, updateData: MongoRow) {\n const output: MongoRow = {};\n\n for (const [key, value] of Object.entries(insertData)) {\n if (Object.prototype.hasOwnProperty.call(updateData, key)) continue;\n output[key] = value;\n }\n\n return output;\n}\n\nfunction isExecLike<TResult>(value: unknown): value is MongooseExecLike<TResult> {\n return !!value && typeof value === \"object\" && \"exec\" in value;\n}\n\nasync function execute<TResult>(\n operation: Promise<TResult> | MongooseExecLike<TResult>,\n session?: MongooseSessionLike,\n) {\n if (isExecLike<TResult>(operation)) {\n const query =\n session && typeof operation.session === \"function\" ? operation.session(session) : operation;\n return query.exec();\n }\n return operation;\n}\n\nasync function normalizeCreated(doc: Promise<MongoRow | MongoRow[]>) {\n const result = await doc;\n return Array.isArray(result) ? (result[0] ?? null) : result;\n}\n\nfunction createMongooseDriverInternal<TSchema extends SchemaDefinition<any>>(\n config: MongooseDriverConfig<TSchema>,\n state: {\n session?: MongooseSessionLike;\n } = {},\n): OrmDriver<TSchema> {\n function getModel(modelName: ModelName<TSchema>) {\n const model = config.models[modelName];\n if (!model) {\n throw new Error(`No Mongoose model was provided for schema model \"${modelName}\".`);\n }\n return model;\n }\n\n function fieldTransform(modelName: string, fieldName: string) {\n return config.transforms?.[modelName]?.[fieldName];\n }\n\n function encodeValue(modelName: string, field: ManifestField, value: unknown) {\n if (value === undefined) return value;\n if (value === null) return null;\n\n let next = value;\n if (field.kind === \"boolean\") {\n next = Boolean(next);\n } else if (field.kind === \"integer\") {\n next = Number(next);\n } else if (field.kind === \"datetime\") {\n next = next instanceof Date ? next : new Date(String(next));\n }\n\n const transform = fieldTransform(modelName, field.name);\n return transform?.encode ? transform.encode(next) : next;\n }\n\n function decodeValue(modelName: string, field: ManifestField, value: unknown) {\n if (value === undefined) return value;\n if (value === null) return null;\n\n const transform = fieldTransform(modelName, field.name);\n let next = transform?.decode ? transform.decode(value) : value;\n\n if (field.kind === \"boolean\") {\n return Boolean(next);\n }\n if (field.kind === \"integer\") {\n return typeof next === \"number\" ? next : Number(next);\n }\n if (field.kind === \"datetime\") {\n return next instanceof Date ? next : new Date(String(next));\n }\n if (field.kind === \"id\") {\n return typeof next === \"string\" ? next : String(next);\n }\n return next;\n }\n\n function buildDocument(model: ManifestModel, data: Partial<Record<string, unknown>>) {\n const doc: MongoRow = {};\n\n for (const field of Object.values(model.fields)) {\n const value = applyDefault(data[field.name], field);\n if (value !== undefined) {\n doc[field.column] = encodeValue(model.name, field, value);\n }\n }\n\n return doc;\n }\n\n function buildUpdate(model: ManifestModel, data: Partial<Record<string, unknown>>) {\n const update: MongoRow = {};\n\n for (const [fieldName, value] of Object.entries(data)) {\n if (value === undefined) continue;\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n update[field.column] = encodeValue(model.name, field, value);\n }\n\n return update;\n }\n\n function decodeRow(model: ManifestModel, doc: MongoRow) {\n const output: MongoRow = {};\n\n for (const field of Object.values(model.fields)) {\n output[field.name] = decodeValue(model.name, field, doc[field.column]);\n }\n\n return output;\n }\n\n function compileFieldFilter(\n model: ManifestModel,\n fieldName: string,\n filter: unknown,\n ): Record<string, unknown> {\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n\n if (!isOperatorFilterObject(filter)) {\n return {\n [field.column]: encodeValue(model.name, field, filter),\n };\n }\n\n const operations: Record<string, unknown> = {};\n\n if (\"eq\" in filter) {\n operations.$eq = encodeValue(model.name, field, filter.eq);\n }\n if (\"not\" in filter) {\n operations.$ne = encodeValue(model.name, field, filter.not);\n }\n if (\"in\" in filter) {\n const values = Array.isArray(filter.in) ? filter.in : [];\n operations.$in = values.map((value) => encodeValue(model.name, field, value));\n }\n if (\"contains\" in filter) {\n operations.$regex = new RegExp(escapeRegex(String(filter.contains ?? \"\")));\n }\n if (\"gt\" in filter) {\n operations.$gt = encodeValue(model.name, field, filter.gt);\n }\n if (\"gte\" in filter) {\n operations.$gte = encodeValue(model.name, field, filter.gte);\n }\n if (\"lt\" in filter) {\n operations.$lt = encodeValue(model.name, field, filter.lt);\n }\n if (\"lte\" in filter) {\n operations.$lte = encodeValue(model.name, field, filter.lte);\n }\n\n return {\n [field.column]: operations,\n };\n }\n\n function compileWhere(\n model: ManifestModel,\n where: MongoWhere | undefined,\n ): Record<string, unknown> {\n if (!where) return {};\n\n const clauses: Record<string, unknown>[] = [];\n\n for (const [key, value] of Object.entries(where)) {\n if (key === \"AND\") {\n const nested = (Array.isArray(value) ? value : [])\n .map((item) => compileWhere(model, item as MongoWhere))\n .filter((item) => Object.keys(item).length > 0);\n if (nested.length) clauses.push({ $and: nested });\n continue;\n }\n\n if (key === \"OR\") {\n const nested = (Array.isArray(value) ? value : [])\n .map((item) => compileWhere(model, item as MongoWhere))\n .filter((item) => Object.keys(item).length > 0);\n if (nested.length) clauses.push({ $or: nested });\n continue;\n }\n\n if (key === \"NOT\") {\n const nested = compileWhere(model, value as MongoWhere);\n if (Object.keys(nested).length) clauses.push({ $nor: [nested] });\n continue;\n }\n\n clauses.push(compileFieldFilter(model, key, value));\n }\n\n if (!clauses.length) return {};\n if (clauses.length === 1) return clauses[0]!;\n return {\n $and: clauses,\n };\n }\n\n function compileOrderBy(\n model: ManifestModel,\n orderBy: Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n ) {\n if (!orderBy) return undefined;\n\n const output: Record<string, 1 | -1> = {};\n for (const [fieldName, direction] of Object.entries(orderBy)) {\n const field = model.fields[fieldName];\n if (!field) continue;\n output[field.column] = direction === \"desc\" ? -1 : 1;\n }\n\n return Object.keys(output).length ? output : undefined;\n }\n\n async function runFindMany(\n model: ManifestModel,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n take?: number;\n skip?: number;\n },\n ) {\n const query = getModel(model.name as ModelName<TSchema>).find(compileWhere(model, args.where));\n const orderBy = compileOrderBy(model, args.orderBy);\n if (orderBy) query.sort(orderBy);\n if (args.skip !== undefined) query.skip(args.skip);\n if (args.take !== undefined) query.limit(args.take);\n if (state.session) query.session(state.session);\n query.lean();\n return query.exec();\n }\n\n async function runFindOne(\n model: ManifestModel,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n },\n ) {\n const orderBy = compileOrderBy(model, args.orderBy);\n if (orderBy) {\n const rows = await runFindMany(model, {\n ...args,\n take: 1,\n });\n return rows[0] ?? null;\n }\n\n const query = getModel(model.name as ModelName<TSchema>).findOne(\n compileWhere(model, args.where),\n );\n if (state.session) query.session(state.session);\n query.lean();\n return query.exec();\n }\n\n async function loadRows<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n take?: number;\n skip?: number;\n select?: TSelect;\n },\n ): Promise<Array<SelectedRecord<TSchema, TModelName, TSelect>>> {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const docs = await runFindMany(model, args);\n const rows = docs.map((doc) => decodeRow(model, doc));\n return Promise.all(rows.map((row) => projectRow(schema, modelName, row, args.select)));\n }\n\n async function loadOneRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n select?: TSelect;\n },\n ) {\n const rows = await loadRows(schema, modelName, {\n ...args,\n take: 1,\n });\n return rows[0] ?? null;\n }\n\n async function loadRawOneRow<TModelName extends ModelName<TSchema>>(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n },\n ) {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const doc = await runFindOne(model, args);\n return doc ? decodeRow(model, doc) : null;\n }\n\n async function projectRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n row: MongoRow,\n select?: TSelect,\n ): Promise<SelectedRecord<TSchema, TModelName, TSelect>> {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const output: MongoRow = {};\n\n if (!select) {\n for (const fieldName of Object.keys(model.fields)) {\n output[fieldName] = row[fieldName];\n }\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n for (const [key, value] of Object.entries(select)) {\n if (value === undefined) continue;\n\n if (key in model.fields && value === true) {\n output[key] = row[key];\n continue;\n }\n\n if (key in schema.models[modelName].relations) {\n output[key] = await resolveRelation(\n schema,\n modelName,\n key as RelationName<TSchema, TModelName>,\n row,\n value as true | FindManyArgs<TSchema, any, any>,\n );\n }\n }\n\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n async function resolveRelation<\n TModelName extends ModelName<TSchema>,\n TRelationName extends RelationName<TSchema, TModelName>,\n >(\n schema: TSchema,\n modelName: TModelName,\n relationName: TRelationName,\n row: MongoRow,\n value: true | FindManyArgs<TSchema, any, any>,\n ) {\n const manifest = getManifest(schema);\n const relation = schema.models[modelName].relations[relationName];\n const relationArgs = value === true ? {} : value;\n\n if (relation.kind === \"belongsTo\") {\n const foreignField = manifest.models[modelName].fields[relation.foreignKey];\n const targetReference = parseReference(foreignField?.references);\n const targetField =\n targetReference?.field ?? identityField(manifest.models[relation.target]).name;\n const foreignValue = row[relation.foreignKey];\n\n if (foreignValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [targetField]: foreignValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasOne\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasMany\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n const throughModel = manifest.models[relation.through];\n const throughFromReference = parseReference(throughModel.fields[relation.from]?.references);\n const throughToReference = parseReference(throughModel.fields[relation.to]?.references);\n const sourceField =\n throughFromReference?.field ?? identityField(manifest.models[modelName]).name;\n const targetField =\n throughToReference?.field ?? identityField(manifest.models[relation.target]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n const throughRows = await loadRows(schema, relation.through as ModelName<TSchema>, {\n where: {\n [relation.from]: sourceValue,\n } as MongoWhere,\n });\n\n const targetIds = throughRows\n .map((item: MongoRow) => item[relation.to])\n .filter((item) => item != null);\n if (!targetIds.length) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [targetField]: {\n in: targetIds,\n },\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n async function runTransaction<TResult>(run: (driver: OrmDriver<TSchema>) => Promise<TResult>) {\n if (state.session) {\n return run(createMongooseDriverInternal(config, state));\n }\n\n const startSession =\n config.startSession ?? config.connection?.startSession.bind(config.connection);\n if (!startSession) {\n return run(createMongooseDriverInternal(config, state));\n }\n\n const session = await startSession();\n try {\n if (session.withTransaction) {\n return await session.withTransaction(() =>\n run(\n createMongooseDriverInternal(config, {\n session,\n }),\n ),\n );\n }\n\n if (session.startTransaction && session.commitTransaction && session.abortTransaction) {\n session.startTransaction();\n try {\n const result = await run(\n createMongooseDriverInternal(config, {\n session,\n }),\n );\n await session.commitTransaction();\n return result;\n } catch (error) {\n await session.abortTransaction();\n throw error;\n }\n }\n\n return run(\n createMongooseDriverInternal(config, {\n session,\n }),\n );\n } finally {\n await session.endSession?.();\n }\n }\n\n const driver: OrmDriver<TSchema> = {\n async findMany(schema, model, args) {\n return loadRows(schema, model, args);\n },\n async findFirst(schema, model, args) {\n return loadOneRow(schema, model, args);\n },\n async findUnique(schema, model, args) {\n const manifest = getManifest(schema);\n requireUniqueLookup(\n manifest.models[model],\n args.where as Record<string, unknown>,\n \"FindUnique\",\n );\n return loadOneRow(schema, model, args);\n },\n async count(schema, model, args?: CountArgs<TSchema, ModelName<TSchema>>) {\n const manifest = getManifest(schema);\n const result = await execute(\n getModel(model).countDocuments(\n compileWhere(manifest.models[model], args?.where as MongoWhere | undefined),\n ),\n state.session,\n );\n return Number(result);\n },\n async create(schema, model, args) {\n const manifest = getManifest(schema);\n const document = buildDocument(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n );\n const created = await normalizeCreated(\n state.session\n ? getModel(model).create([document], { session: state.session })\n : getModel(model).create(document),\n );\n if (!created) {\n throw new Error(`Create on model \"${String(model)}\" did not return a document.`);\n }\n const row = decodeRow(manifest.models[model], created);\n return projectRow(schema, model, row, args.select) as Promise<any>;\n },\n async createMany(schema, model, args) {\n const results: unknown[] = [];\n for (const entry of args.data) {\n results.push(\n await driver.create(schema, model, {\n data: entry,\n select: args.select,\n } as CreateArgs<TSchema, ModelName<TSchema>, any>),\n );\n }\n return results as any;\n },\n async update(schema, model, args) {\n const manifest = getManifest(schema);\n const updated = await getModel(model)\n .findOneAndUpdate(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n {\n $set: buildUpdate(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n ),\n },\n {\n new: true,\n returnDocument: \"after\",\n session: state.session,\n },\n )\n .lean()\n .exec();\n\n if (!updated) return null;\n\n return projectRow(\n schema,\n model,\n decodeRow(manifest.models[model], updated),\n args.select,\n ) as Promise<any>;\n },\n async updateMany(schema, model, args) {\n const manifest = getManifest(schema);\n const update = buildUpdate(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n );\n if (!Object.keys(update).length) return 0;\n const result = await execute(\n getModel(model).updateMany(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n {\n $set: update,\n },\n state.session ? { session: state.session } : undefined,\n ),\n state.session,\n );\n return Number(result.modifiedCount ?? result.matchedCount ?? 0);\n },\n async upsert(schema, model, args) {\n const manifest = getManifest(schema);\n const modelManifest = manifest.models[model];\n const lookup = requireUniqueLookup(\n modelManifest,\n args.where as Record<string, unknown>,\n \"Upsert\",\n );\n validateUniqueLookupUpdateData(\n modelManifest,\n args.update as Partial<Record<string, unknown>>,\n lookup,\n \"Upsert\",\n );\n const created = buildDocument(\n modelManifest,\n mergeUniqueLookupCreateData(\n modelManifest,\n args.create as Partial<Record<string, unknown>>,\n lookup,\n \"Upsert\",\n ),\n );\n const update = buildUpdate(modelManifest, args.update as Partial<Record<string, unknown>>);\n const updated = await getModel(model)\n .findOneAndUpdate(\n compileWhere(modelManifest, args.where as MongoWhere),\n {\n $set: update,\n $setOnInsert: removeOverlappingInsertFields(created, update),\n },\n {\n upsert: true,\n new: true,\n returnDocument: \"after\",\n session: state.session,\n },\n )\n .lean()\n .exec();\n\n if (!updated) {\n throw new Error(`Upsert on model \"${String(model)}\" did not return a document.`);\n }\n\n return projectRow(\n schema,\n model,\n decodeRow(modelManifest, updated),\n args.select,\n ) as Promise<any>;\n },\n async delete(schema, model, args) {\n const manifest = getManifest(schema);\n const deleted = await getModel(model)\n .findOneAndDelete(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n state.session ? { session: state.session } : undefined,\n )\n .lean()\n .exec();\n return deleted ? 1 : 0;\n },\n async deleteMany(schema, model, args) {\n const manifest = getManifest(schema);\n const result = await execute(\n getModel(model).deleteMany(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n state.session ? { session: state.session } : undefined,\n ),\n state.session,\n );\n return Number(result.deletedCount ?? 0);\n },\n async transaction(_schema, run) {\n return runTransaction(run);\n },\n };\n\n return driver;\n}\n\nexport function createMongooseDriver<TSchema extends SchemaDefinition<any>>(\n config: MongooseDriverConfig<TSchema>,\n) {\n return createMongooseDriverInternal(config);\n}\n"],"mappings":"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","names":["targetField","sourceField","sourceValue"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farming-labs/orm-mongoose",
3
- "version": "0.0.9",
3
+ "version": "0.0.11",
4
4
  "files": [
5
5
  "dist"
6
6
  ],
@@ -19,7 +19,7 @@
19
19
  "access": "public"
20
20
  },
21
21
  "dependencies": {
22
- "@farming-labs/orm": "0.0.9"
22
+ "@farming-labs/orm": "0.0.11"
23
23
  },
24
24
  "devDependencies": {
25
25
  "mongoose": "^8.19.2",