@farming-labs/orm-mongoose 0.0.22 → 0.0.24

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
@@ -33,6 +33,17 @@ function getManifest(schema) {
33
33
  manifestCache.set(schema, next);
34
34
  return next;
35
35
  }
36
+ function assertSupportedNumericIdGeneration(schema) {
37
+ const manifest = getManifest(schema);
38
+ for (const model of Object.values(manifest.models)) {
39
+ const idField = model.fields.id;
40
+ if (idField?.kind === "id" && idField.idType === "integer" && idField.generated === "increment") {
41
+ throw new Error(
42
+ `The Mongoose runtime does not support generated integer ids for model "${model.name}". Use manual numeric ids or a string id instead.`
43
+ );
44
+ }
45
+ }
46
+ }
36
47
  function identityField(model) {
37
48
  if (model.fields.id) return model.fields.id;
38
49
  const uniqueField = Object.values(model.fields).find((field) => field.unique);
@@ -110,6 +121,10 @@ function createMongooseDriverInternal(config, state = {}) {
110
121
  }
111
122
  return model;
112
123
  }
124
+ function getSupportedManifest(schema) {
125
+ assertSupportedNumericIdGeneration(schema);
126
+ return getManifest(schema);
127
+ }
113
128
  function fieldTransform(modelName, fieldName) {
114
129
  return config.transforms?.[modelName]?.[fieldName];
115
130
  }
@@ -117,7 +132,9 @@ function createMongooseDriverInternal(config, state = {}) {
117
132
  if (value === void 0) return value;
118
133
  if (value === null) return null;
119
134
  let next = value;
120
- if (field.kind === "enum") {
135
+ if (field.kind === "id" && field.idType === "integer") {
136
+ next = Number(next);
137
+ } else if (field.kind === "enum") {
121
138
  next = String(next);
122
139
  } else if (field.kind === "boolean") {
123
140
  next = Boolean(next);
@@ -138,6 +155,9 @@ function createMongooseDriverInternal(config, state = {}) {
138
155
  if (value === null) return null;
139
156
  const transform = fieldTransform(modelName, field.name);
140
157
  let next = transform?.decode ? transform.decode(value) : value;
158
+ if (field.kind === "id" && field.idType === "integer") {
159
+ return typeof next === "number" ? next : Number(next);
160
+ }
141
161
  if (field.kind === "enum") {
142
162
  return typeof next === "string" ? next : String(next);
143
163
  }
@@ -300,7 +320,7 @@ function createMongooseDriverInternal(config, state = {}) {
300
320
  return query.exec();
301
321
  }
302
322
  async function loadRows(schema, modelName, args) {
303
- const manifest = getManifest(schema);
323
+ const manifest = getSupportedManifest(schema);
304
324
  const model = manifest.models[modelName];
305
325
  const docs = await runFindMany(model, args);
306
326
  const rows = docs.map((doc) => decodeRow(model, doc));
@@ -314,13 +334,13 @@ function createMongooseDriverInternal(config, state = {}) {
314
334
  return rows[0] ?? null;
315
335
  }
316
336
  async function loadRawOneRow(schema, modelName, args) {
317
- const manifest = getManifest(schema);
337
+ const manifest = getSupportedManifest(schema);
318
338
  const model = manifest.models[modelName];
319
339
  const doc = await runFindOne(model, args);
320
340
  return doc ? decodeRow(model, doc) : null;
321
341
  }
322
342
  async function projectRow(schema, modelName, row, select) {
323
- const manifest = getManifest(schema);
343
+ const manifest = getSupportedManifest(schema);
324
344
  const model = manifest.models[modelName];
325
345
  const output = {};
326
346
  if (!select) {
@@ -348,7 +368,7 @@ function createMongooseDriverInternal(config, state = {}) {
348
368
  return output;
349
369
  }
350
370
  async function resolveRelation(schema, modelName, relationName, row, value) {
351
- const manifest = getManifest(schema);
371
+ const manifest = getSupportedManifest(schema);
352
372
  const relation = schema.models[modelName].relations[relationName];
353
373
  const relationArgs = value === true ? {} : value;
354
374
  if (relation.kind === "belongsTo") {
@@ -487,16 +507,35 @@ function createMongooseDriverInternal(config, state = {}) {
487
507
  startSession: config.startSession
488
508
  },
489
509
  capabilities: {
510
+ numericIds: "manual",
490
511
  supportsJSON: true,
491
512
  supportsDates: true,
492
513
  supportsBooleans: true,
493
514
  supportsTransactions: Boolean(config.startSession ?? config.connection?.startSession),
494
515
  textComparison: "case-sensitive",
516
+ textMatching: {
517
+ equality: "case-sensitive",
518
+ contains: "case-sensitive",
519
+ ordering: "case-sensitive"
520
+ },
495
521
  upsert: "native",
496
522
  returning: {
497
523
  create: true,
498
524
  update: true,
499
525
  delete: false
526
+ },
527
+ returningMode: {
528
+ create: "record",
529
+ update: "record",
530
+ delete: "none"
531
+ },
532
+ nativeRelations: {
533
+ singularChains: false,
534
+ hasMany: false,
535
+ manyToMany: false,
536
+ filtered: false,
537
+ ordered: false,
538
+ paginated: false
500
539
  }
501
540
  }
502
541
  }),
@@ -507,7 +546,7 @@ function createMongooseDriverInternal(config, state = {}) {
507
546
  return loadOneRow(schema, model, args);
508
547
  },
509
548
  async findUnique(schema, model, args) {
510
- const manifest = getManifest(schema);
549
+ const manifest = getSupportedManifest(schema);
511
550
  (0, import_orm.requireUniqueLookup)(
512
551
  manifest.models[model],
513
552
  args.where,
@@ -516,7 +555,7 @@ function createMongooseDriverInternal(config, state = {}) {
516
555
  return loadOneRow(schema, model, args);
517
556
  },
518
557
  async count(schema, model, args) {
519
- const manifest = getManifest(schema);
558
+ const manifest = getSupportedManifest(schema);
520
559
  const result = await execute(
521
560
  getModel(model).countDocuments(
522
561
  compileWhere(manifest.models[model], args?.where)
@@ -526,7 +565,7 @@ function createMongooseDriverInternal(config, state = {}) {
526
565
  return Number(result);
527
566
  },
528
567
  async create(schema, model, args) {
529
- const manifest = getManifest(schema);
568
+ const manifest = getSupportedManifest(schema);
530
569
  const document = buildDocument(
531
570
  manifest.models[model],
532
571
  args.data
@@ -553,7 +592,7 @@ function createMongooseDriverInternal(config, state = {}) {
553
592
  return results;
554
593
  },
555
594
  async update(schema, model, args) {
556
- const manifest = getManifest(schema);
595
+ const manifest = getSupportedManifest(schema);
557
596
  const updated = await getModel(model).findOneAndUpdate(
558
597
  compileWhere(manifest.models[model], args.where),
559
598
  {
@@ -577,7 +616,7 @@ function createMongooseDriverInternal(config, state = {}) {
577
616
  );
578
617
  },
579
618
  async updateMany(schema, model, args) {
580
- const manifest = getManifest(schema);
619
+ const manifest = getSupportedManifest(schema);
581
620
  const update = buildUpdate(
582
621
  manifest.models[model],
583
622
  args.data
@@ -596,7 +635,7 @@ function createMongooseDriverInternal(config, state = {}) {
596
635
  return Number(result.modifiedCount ?? result.matchedCount ?? 0);
597
636
  },
598
637
  async upsert(schema, model, args) {
599
- const manifest = getManifest(schema);
638
+ const manifest = getSupportedManifest(schema);
600
639
  const modelManifest = manifest.models[model];
601
640
  const lookup = (0, import_orm.requireUniqueLookup)(
602
641
  modelManifest,
@@ -643,7 +682,7 @@ function createMongooseDriverInternal(config, state = {}) {
643
682
  );
644
683
  },
645
684
  async delete(schema, model, args) {
646
- const manifest = getManifest(schema);
685
+ const manifest = getSupportedManifest(schema);
647
686
  const deleted = await getModel(model).findOneAndDelete(
648
687
  compileWhere(manifest.models[model], args.where),
649
688
  state.session ? { session: state.session } : void 0
@@ -651,7 +690,7 @@ function createMongooseDriverInternal(config, state = {}) {
651
690
  return deleted ? 1 : 0;
652
691
  },
653
692
  async deleteMany(schema, model, args) {
654
- const manifest = getManifest(schema);
693
+ const manifest = getSupportedManifest(schema);
655
694
  const result = await execute(
656
695
  getModel(model).deleteMany(
657
696
  compileWhere(manifest.models[model], args.where),
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n createDriverHandle,\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 type OrmDriverHandle,\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\nexport type MongooseDriverClient<TSchema extends SchemaDefinition<any>> = {\n models: Record<ModelName<TSchema>, MongooseModelLike>;\n connection?: MongooseSessionSourceLike;\n startSession?: () => Promise<MongooseSessionLike>;\n};\n\nexport type MongooseDriverHandle<TSchema extends SchemaDefinition<any>> = OrmDriverHandle<\n \"mongoose\",\n MongooseDriverClient<TSchema>\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 normalizeDecimalString(value: string) {\n const trimmed = value.trim();\n const match = /^(-?\\d+)(?:\\.(\\d+))?$/.exec(trimmed);\n if (!match) {\n return trimmed;\n }\n\n const [, integerPart, fractionalPart] = match;\n if (!fractionalPart) {\n return integerPart;\n }\n\n const normalizedFraction = fractionalPart.replace(/0+$/g, \"\");\n return normalizedFraction.length ? `${integerPart}.${normalizedFraction}` : integerPart;\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, MongooseDriverHandle<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 === \"enum\") {\n next = String(next);\n } else if (field.kind === \"boolean\") {\n next = Boolean(next);\n } else if (field.kind === \"integer\") {\n next = Number(next);\n } else if (field.kind === \"bigint\") {\n next = typeof next === \"bigint\" ? next : BigInt(next as string | number);\n } else if (field.kind === \"decimal\") {\n next = typeof next === \"string\" ? next : String(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 === \"enum\") {\n return typeof next === \"string\" ? next : String(next);\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 === \"bigint\") {\n if (typeof next === \"bigint\") {\n return next;\n }\n if (typeof next === \"number\") {\n return BigInt(Math.trunc(next));\n }\n return BigInt(String(next));\n }\n if (field.kind === \"decimal\") {\n return normalizeDecimalString(typeof next === \"string\" ? next : String(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>(\n run: (driver: OrmDriver<TSchema, MongooseDriverHandle<TSchema>>) => Promise<TResult>,\n ) {\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, MongooseDriverHandle<TSchema>> = {\n handle: createDriverHandle({\n kind: \"mongoose\",\n client: {\n models: config.models,\n connection: config.connection,\n startSession: config.startSession,\n },\n capabilities: {\n supportsJSON: true,\n supportsDates: true,\n supportsBooleans: true,\n supportsTransactions: Boolean(config.startSession ?? config.connection?.startSession),\n textComparison: \"case-sensitive\",\n upsert: \"native\",\n returning: {\n create: true,\n update: true,\n delete: false,\n },\n },\n }),\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"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n createDriverHandle,\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 type OrmDriverHandle,\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\nexport type MongooseDriverClient<TSchema extends SchemaDefinition<any>> = {\n models: Record<ModelName<TSchema>, MongooseModelLike>;\n connection?: MongooseSessionSourceLike;\n startSession?: () => Promise<MongooseSessionLike>;\n};\n\nexport type MongooseDriverHandle<TSchema extends SchemaDefinition<any>> = OrmDriverHandle<\n \"mongoose\",\n MongooseDriverClient<TSchema>\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 assertSupportedNumericIdGeneration(schema: SchemaDefinition<any>) {\n const manifest = getManifest(schema);\n\n for (const model of Object.values(manifest.models)) {\n const idField = model.fields.id;\n if (\n idField?.kind === \"id\" &&\n idField.idType === \"integer\" &&\n idField.generated === \"increment\"\n ) {\n throw new Error(\n `The Mongoose runtime does not support generated integer ids for model \"${model.name}\". Use manual numeric ids or a string id instead.`,\n );\n }\n }\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 normalizeDecimalString(value: string) {\n const trimmed = value.trim();\n const match = /^(-?\\d+)(?:\\.(\\d+))?$/.exec(trimmed);\n if (!match) {\n return trimmed;\n }\n\n const [, integerPart, fractionalPart] = match;\n if (!fractionalPart) {\n return integerPart;\n }\n\n const normalizedFraction = fractionalPart.replace(/0+$/g, \"\");\n return normalizedFraction.length ? `${integerPart}.${normalizedFraction}` : integerPart;\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, MongooseDriverHandle<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 getSupportedManifest(schema: TSchema) {\n assertSupportedNumericIdGeneration(schema);\n return getManifest(schema);\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 === \"id\" && field.idType === \"integer\") {\n next = Number(next);\n } else if (field.kind === \"enum\") {\n next = String(next);\n } else if (field.kind === \"boolean\") {\n next = Boolean(next);\n } else if (field.kind === \"integer\") {\n next = Number(next);\n } else if (field.kind === \"bigint\") {\n next = typeof next === \"bigint\" ? next : BigInt(next as string | number);\n } else if (field.kind === \"decimal\") {\n next = typeof next === \"string\" ? next : String(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 === \"id\" && field.idType === \"integer\") {\n return typeof next === \"number\" ? next : Number(next);\n }\n if (field.kind === \"enum\") {\n return typeof next === \"string\" ? next : String(next);\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 === \"bigint\") {\n if (typeof next === \"bigint\") {\n return next;\n }\n if (typeof next === \"number\") {\n return BigInt(Math.trunc(next));\n }\n return BigInt(String(next));\n }\n if (field.kind === \"decimal\") {\n return normalizeDecimalString(typeof next === \"string\" ? next : String(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 = getSupportedManifest(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 = getSupportedManifest(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 = getSupportedManifest(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 = getSupportedManifest(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>(\n run: (driver: OrmDriver<TSchema, MongooseDriverHandle<TSchema>>) => Promise<TResult>,\n ) {\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, MongooseDriverHandle<TSchema>> = {\n handle: createDriverHandle({\n kind: \"mongoose\",\n client: {\n models: config.models,\n connection: config.connection,\n startSession: config.startSession,\n },\n capabilities: {\n numericIds: \"manual\",\n supportsJSON: true,\n supportsDates: true,\n supportsBooleans: true,\n supportsTransactions: Boolean(config.startSession ?? config.connection?.startSession),\n textComparison: \"case-sensitive\",\n textMatching: {\n equality: \"case-sensitive\",\n contains: \"case-sensitive\",\n ordering: \"case-sensitive\",\n },\n upsert: \"native\",\n returning: {\n create: true,\n update: true,\n delete: false,\n },\n returningMode: {\n create: \"record\",\n update: \"record\",\n delete: \"none\",\n },\n nativeRelations: {\n singularChains: false,\n hasMany: false,\n manyToMany: false,\n filtered: false,\n ordered: false,\n paginated: false,\n },\n },\n }),\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 = getSupportedManifest(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 = getSupportedManifest(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 = getSupportedManifest(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 = getSupportedManifest(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 = getSupportedManifest(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 = getSupportedManifest(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 = getSupportedManifest(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 = getSupportedManifest(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.d.cts CHANGED
@@ -82,6 +82,7 @@ declare function createMongooseDriver<TSchema extends SchemaDefinition<any>>(con
82
82
  dialect?: string | undefined;
83
83
  capabilities: Readonly<{
84
84
  supportsNumericIds: boolean;
85
+ numericIds: _farming_labs_orm.NumericIdCapability;
85
86
  supportsJSON: boolean;
86
87
  supportsDates: boolean;
87
88
  supportsBooleans: boolean;
@@ -91,8 +92,11 @@ declare function createMongooseDriver<TSchema extends SchemaDefinition<any>>(con
91
92
  supportsJoin: boolean;
92
93
  nativeRelationLoading: _farming_labs_orm.NativeRelationLoading;
93
94
  textComparison: _farming_labs_orm.TextComparisonBehavior;
95
+ textMatching: _farming_labs_orm.TextMatchingCapabilities;
94
96
  upsert: _farming_labs_orm.UpsertCapability;
95
97
  returning: _farming_labs_orm.MutationReturningCapabilities;
98
+ returningMode: _farming_labs_orm.MutationReturningModes;
99
+ nativeRelations: _farming_labs_orm.NativeRelationCapabilities;
96
100
  }>;
97
101
  }>>;
98
102
 
package/dist/index.d.ts CHANGED
@@ -82,6 +82,7 @@ declare function createMongooseDriver<TSchema extends SchemaDefinition<any>>(con
82
82
  dialect?: string | undefined;
83
83
  capabilities: Readonly<{
84
84
  supportsNumericIds: boolean;
85
+ numericIds: _farming_labs_orm.NumericIdCapability;
85
86
  supportsJSON: boolean;
86
87
  supportsDates: boolean;
87
88
  supportsBooleans: boolean;
@@ -91,8 +92,11 @@ declare function createMongooseDriver<TSchema extends SchemaDefinition<any>>(con
91
92
  supportsJoin: boolean;
92
93
  nativeRelationLoading: _farming_labs_orm.NativeRelationLoading;
93
94
  textComparison: _farming_labs_orm.TextComparisonBehavior;
95
+ textMatching: _farming_labs_orm.TextMatchingCapabilities;
94
96
  upsert: _farming_labs_orm.UpsertCapability;
95
97
  returning: _farming_labs_orm.MutationReturningCapabilities;
98
+ returningMode: _farming_labs_orm.MutationReturningModes;
99
+ nativeRelations: _farming_labs_orm.NativeRelationCapabilities;
96
100
  }>;
97
101
  }>>;
98
102
 
package/dist/index.js CHANGED
@@ -16,6 +16,17 @@ function getManifest(schema) {
16
16
  manifestCache.set(schema, next);
17
17
  return next;
18
18
  }
19
+ function assertSupportedNumericIdGeneration(schema) {
20
+ const manifest = getManifest(schema);
21
+ for (const model of Object.values(manifest.models)) {
22
+ const idField = model.fields.id;
23
+ if (idField?.kind === "id" && idField.idType === "integer" && idField.generated === "increment") {
24
+ throw new Error(
25
+ `The Mongoose runtime does not support generated integer ids for model "${model.name}". Use manual numeric ids or a string id instead.`
26
+ );
27
+ }
28
+ }
29
+ }
19
30
  function identityField(model) {
20
31
  if (model.fields.id) return model.fields.id;
21
32
  const uniqueField = Object.values(model.fields).find((field) => field.unique);
@@ -93,6 +104,10 @@ function createMongooseDriverInternal(config, state = {}) {
93
104
  }
94
105
  return model;
95
106
  }
107
+ function getSupportedManifest(schema) {
108
+ assertSupportedNumericIdGeneration(schema);
109
+ return getManifest(schema);
110
+ }
96
111
  function fieldTransform(modelName, fieldName) {
97
112
  return config.transforms?.[modelName]?.[fieldName];
98
113
  }
@@ -100,7 +115,9 @@ function createMongooseDriverInternal(config, state = {}) {
100
115
  if (value === void 0) return value;
101
116
  if (value === null) return null;
102
117
  let next = value;
103
- if (field.kind === "enum") {
118
+ if (field.kind === "id" && field.idType === "integer") {
119
+ next = Number(next);
120
+ } else if (field.kind === "enum") {
104
121
  next = String(next);
105
122
  } else if (field.kind === "boolean") {
106
123
  next = Boolean(next);
@@ -121,6 +138,9 @@ function createMongooseDriverInternal(config, state = {}) {
121
138
  if (value === null) return null;
122
139
  const transform = fieldTransform(modelName, field.name);
123
140
  let next = transform?.decode ? transform.decode(value) : value;
141
+ if (field.kind === "id" && field.idType === "integer") {
142
+ return typeof next === "number" ? next : Number(next);
143
+ }
124
144
  if (field.kind === "enum") {
125
145
  return typeof next === "string" ? next : String(next);
126
146
  }
@@ -283,7 +303,7 @@ function createMongooseDriverInternal(config, state = {}) {
283
303
  return query.exec();
284
304
  }
285
305
  async function loadRows(schema, modelName, args) {
286
- const manifest = getManifest(schema);
306
+ const manifest = getSupportedManifest(schema);
287
307
  const model = manifest.models[modelName];
288
308
  const docs = await runFindMany(model, args);
289
309
  const rows = docs.map((doc) => decodeRow(model, doc));
@@ -297,13 +317,13 @@ function createMongooseDriverInternal(config, state = {}) {
297
317
  return rows[0] ?? null;
298
318
  }
299
319
  async function loadRawOneRow(schema, modelName, args) {
300
- const manifest = getManifest(schema);
320
+ const manifest = getSupportedManifest(schema);
301
321
  const model = manifest.models[modelName];
302
322
  const doc = await runFindOne(model, args);
303
323
  return doc ? decodeRow(model, doc) : null;
304
324
  }
305
325
  async function projectRow(schema, modelName, row, select) {
306
- const manifest = getManifest(schema);
326
+ const manifest = getSupportedManifest(schema);
307
327
  const model = manifest.models[modelName];
308
328
  const output = {};
309
329
  if (!select) {
@@ -331,7 +351,7 @@ function createMongooseDriverInternal(config, state = {}) {
331
351
  return output;
332
352
  }
333
353
  async function resolveRelation(schema, modelName, relationName, row, value) {
334
- const manifest = getManifest(schema);
354
+ const manifest = getSupportedManifest(schema);
335
355
  const relation = schema.models[modelName].relations[relationName];
336
356
  const relationArgs = value === true ? {} : value;
337
357
  if (relation.kind === "belongsTo") {
@@ -470,16 +490,35 @@ function createMongooseDriverInternal(config, state = {}) {
470
490
  startSession: config.startSession
471
491
  },
472
492
  capabilities: {
493
+ numericIds: "manual",
473
494
  supportsJSON: true,
474
495
  supportsDates: true,
475
496
  supportsBooleans: true,
476
497
  supportsTransactions: Boolean(config.startSession ?? config.connection?.startSession),
477
498
  textComparison: "case-sensitive",
499
+ textMatching: {
500
+ equality: "case-sensitive",
501
+ contains: "case-sensitive",
502
+ ordering: "case-sensitive"
503
+ },
478
504
  upsert: "native",
479
505
  returning: {
480
506
  create: true,
481
507
  update: true,
482
508
  delete: false
509
+ },
510
+ returningMode: {
511
+ create: "record",
512
+ update: "record",
513
+ delete: "none"
514
+ },
515
+ nativeRelations: {
516
+ singularChains: false,
517
+ hasMany: false,
518
+ manyToMany: false,
519
+ filtered: false,
520
+ ordered: false,
521
+ paginated: false
483
522
  }
484
523
  }
485
524
  }),
@@ -490,7 +529,7 @@ function createMongooseDriverInternal(config, state = {}) {
490
529
  return loadOneRow(schema, model, args);
491
530
  },
492
531
  async findUnique(schema, model, args) {
493
- const manifest = getManifest(schema);
532
+ const manifest = getSupportedManifest(schema);
494
533
  requireUniqueLookup(
495
534
  manifest.models[model],
496
535
  args.where,
@@ -499,7 +538,7 @@ function createMongooseDriverInternal(config, state = {}) {
499
538
  return loadOneRow(schema, model, args);
500
539
  },
501
540
  async count(schema, model, args) {
502
- const manifest = getManifest(schema);
541
+ const manifest = getSupportedManifest(schema);
503
542
  const result = await execute(
504
543
  getModel(model).countDocuments(
505
544
  compileWhere(manifest.models[model], args?.where)
@@ -509,7 +548,7 @@ function createMongooseDriverInternal(config, state = {}) {
509
548
  return Number(result);
510
549
  },
511
550
  async create(schema, model, args) {
512
- const manifest = getManifest(schema);
551
+ const manifest = getSupportedManifest(schema);
513
552
  const document = buildDocument(
514
553
  manifest.models[model],
515
554
  args.data
@@ -536,7 +575,7 @@ function createMongooseDriverInternal(config, state = {}) {
536
575
  return results;
537
576
  },
538
577
  async update(schema, model, args) {
539
- const manifest = getManifest(schema);
578
+ const manifest = getSupportedManifest(schema);
540
579
  const updated = await getModel(model).findOneAndUpdate(
541
580
  compileWhere(manifest.models[model], args.where),
542
581
  {
@@ -560,7 +599,7 @@ function createMongooseDriverInternal(config, state = {}) {
560
599
  );
561
600
  },
562
601
  async updateMany(schema, model, args) {
563
- const manifest = getManifest(schema);
602
+ const manifest = getSupportedManifest(schema);
564
603
  const update = buildUpdate(
565
604
  manifest.models[model],
566
605
  args.data
@@ -579,7 +618,7 @@ function createMongooseDriverInternal(config, state = {}) {
579
618
  return Number(result.modifiedCount ?? result.matchedCount ?? 0);
580
619
  },
581
620
  async upsert(schema, model, args) {
582
- const manifest = getManifest(schema);
621
+ const manifest = getSupportedManifest(schema);
583
622
  const modelManifest = manifest.models[model];
584
623
  const lookup = requireUniqueLookup(
585
624
  modelManifest,
@@ -626,7 +665,7 @@ function createMongooseDriverInternal(config, state = {}) {
626
665
  );
627
666
  },
628
667
  async delete(schema, model, args) {
629
- const manifest = getManifest(schema);
668
+ const manifest = getSupportedManifest(schema);
630
669
  const deleted = await getModel(model).findOneAndDelete(
631
670
  compileWhere(manifest.models[model], args.where),
632
671
  state.session ? { session: state.session } : void 0
@@ -634,7 +673,7 @@ function createMongooseDriverInternal(config, state = {}) {
634
673
  return deleted ? 1 : 0;
635
674
  },
636
675
  async deleteMany(schema, model, args) {
637
- const manifest = getManifest(schema);
676
+ const manifest = getSupportedManifest(schema);
638
677
  const result = await execute(
639
678
  getModel(model).deleteMany(
640
679
  compileWhere(manifest.models[model], args.where),
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n createDriverHandle,\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 type OrmDriverHandle,\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\nexport type MongooseDriverClient<TSchema extends SchemaDefinition<any>> = {\n models: Record<ModelName<TSchema>, MongooseModelLike>;\n connection?: MongooseSessionSourceLike;\n startSession?: () => Promise<MongooseSessionLike>;\n};\n\nexport type MongooseDriverHandle<TSchema extends SchemaDefinition<any>> = OrmDriverHandle<\n \"mongoose\",\n MongooseDriverClient<TSchema>\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 normalizeDecimalString(value: string) {\n const trimmed = value.trim();\n const match = /^(-?\\d+)(?:\\.(\\d+))?$/.exec(trimmed);\n if (!match) {\n return trimmed;\n }\n\n const [, integerPart, fractionalPart] = match;\n if (!fractionalPart) {\n return integerPart;\n }\n\n const normalizedFraction = fractionalPart.replace(/0+$/g, \"\");\n return normalizedFraction.length ? `${integerPart}.${normalizedFraction}` : integerPart;\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, MongooseDriverHandle<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 === \"enum\") {\n next = String(next);\n } else if (field.kind === \"boolean\") {\n next = Boolean(next);\n } else if (field.kind === \"integer\") {\n next = Number(next);\n } else if (field.kind === \"bigint\") {\n next = typeof next === \"bigint\" ? next : BigInt(next as string | number);\n } else if (field.kind === \"decimal\") {\n next = typeof next === \"string\" ? next : String(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 === \"enum\") {\n return typeof next === \"string\" ? next : String(next);\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 === \"bigint\") {\n if (typeof next === \"bigint\") {\n return next;\n }\n if (typeof next === \"number\") {\n return BigInt(Math.trunc(next));\n }\n return BigInt(String(next));\n }\n if (field.kind === \"decimal\") {\n return normalizeDecimalString(typeof next === \"string\" ? next : String(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>(\n run: (driver: OrmDriver<TSchema, MongooseDriverHandle<TSchema>>) => Promise<TResult>,\n ) {\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, MongooseDriverHandle<TSchema>> = {\n handle: createDriverHandle({\n kind: \"mongoose\",\n client: {\n models: config.models,\n connection: config.connection,\n startSession: config.startSession,\n },\n capabilities: {\n supportsJSON: true,\n supportsDates: true,\n supportsBooleans: true,\n supportsTransactions: Boolean(config.startSession ?? config.connection?.startSession),\n textComparison: \"case-sensitive\",\n upsert: \"native\",\n returning: {\n create: true,\n update: true,\n delete: false,\n },\n },\n }),\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"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n createDriverHandle,\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 type OrmDriverHandle,\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\nexport type MongooseDriverClient<TSchema extends SchemaDefinition<any>> = {\n models: Record<ModelName<TSchema>, MongooseModelLike>;\n connection?: MongooseSessionSourceLike;\n startSession?: () => Promise<MongooseSessionLike>;\n};\n\nexport type MongooseDriverHandle<TSchema extends SchemaDefinition<any>> = OrmDriverHandle<\n \"mongoose\",\n MongooseDriverClient<TSchema>\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 assertSupportedNumericIdGeneration(schema: SchemaDefinition<any>) {\n const manifest = getManifest(schema);\n\n for (const model of Object.values(manifest.models)) {\n const idField = model.fields.id;\n if (\n idField?.kind === \"id\" &&\n idField.idType === \"integer\" &&\n idField.generated === \"increment\"\n ) {\n throw new Error(\n `The Mongoose runtime does not support generated integer ids for model \"${model.name}\". Use manual numeric ids or a string id instead.`,\n );\n }\n }\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 normalizeDecimalString(value: string) {\n const trimmed = value.trim();\n const match = /^(-?\\d+)(?:\\.(\\d+))?$/.exec(trimmed);\n if (!match) {\n return trimmed;\n }\n\n const [, integerPart, fractionalPart] = match;\n if (!fractionalPart) {\n return integerPart;\n }\n\n const normalizedFraction = fractionalPart.replace(/0+$/g, \"\");\n return normalizedFraction.length ? `${integerPart}.${normalizedFraction}` : integerPart;\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, MongooseDriverHandle<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 getSupportedManifest(schema: TSchema) {\n assertSupportedNumericIdGeneration(schema);\n return getManifest(schema);\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 === \"id\" && field.idType === \"integer\") {\n next = Number(next);\n } else if (field.kind === \"enum\") {\n next = String(next);\n } else if (field.kind === \"boolean\") {\n next = Boolean(next);\n } else if (field.kind === \"integer\") {\n next = Number(next);\n } else if (field.kind === \"bigint\") {\n next = typeof next === \"bigint\" ? next : BigInt(next as string | number);\n } else if (field.kind === \"decimal\") {\n next = typeof next === \"string\" ? next : String(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 === \"id\" && field.idType === \"integer\") {\n return typeof next === \"number\" ? next : Number(next);\n }\n if (field.kind === \"enum\") {\n return typeof next === \"string\" ? next : String(next);\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 === \"bigint\") {\n if (typeof next === \"bigint\") {\n return next;\n }\n if (typeof next === \"number\") {\n return BigInt(Math.trunc(next));\n }\n return BigInt(String(next));\n }\n if (field.kind === \"decimal\") {\n return normalizeDecimalString(typeof next === \"string\" ? next : String(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 = getSupportedManifest(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 = getSupportedManifest(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 = getSupportedManifest(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 = getSupportedManifest(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>(\n run: (driver: OrmDriver<TSchema, MongooseDriverHandle<TSchema>>) => Promise<TResult>,\n ) {\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, MongooseDriverHandle<TSchema>> = {\n handle: createDriverHandle({\n kind: \"mongoose\",\n client: {\n models: config.models,\n connection: config.connection,\n startSession: config.startSession,\n },\n capabilities: {\n numericIds: \"manual\",\n supportsJSON: true,\n supportsDates: true,\n supportsBooleans: true,\n supportsTransactions: Boolean(config.startSession ?? config.connection?.startSession),\n textComparison: \"case-sensitive\",\n textMatching: {\n equality: \"case-sensitive\",\n contains: \"case-sensitive\",\n ordering: \"case-sensitive\",\n },\n upsert: \"native\",\n returning: {\n create: true,\n update: true,\n delete: false,\n },\n returningMode: {\n create: \"record\",\n update: \"record\",\n delete: \"none\",\n },\n nativeRelations: {\n singularChains: false,\n hasMany: false,\n manyToMany: false,\n filtered: false,\n ordered: false,\n paginated: false,\n },\n },\n }),\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 = getSupportedManifest(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 = getSupportedManifest(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 = getSupportedManifest(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 = getSupportedManifest(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 = getSupportedManifest(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 = getSupportedManifest(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 = getSupportedManifest(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 = getSupportedManifest(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.22",
3
+ "version": "0.0.24",
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.22"
22
+ "@farming-labs/orm": "0.0.24"
23
23
  },
24
24
  "devDependencies": {
25
25
  "mongoose": "^8.19.2",