@farming-labs/orm-mongoose 0.0.10 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -50,9 +50,6 @@ function applyDefault(value, field) {
50
50
  }
51
51
  return field.defaultValue;
52
52
  }
53
- function isFilterObject(value) {
54
- return !!value && typeof value === "object" && !(value instanceof Date) && !Array.isArray(value);
55
- }
56
53
  function escapeRegex(value) {
57
54
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
58
55
  }
@@ -109,6 +106,8 @@ function createMongooseDriverInternal(config, state = {}) {
109
106
  let next = value;
110
107
  if (field.kind === "boolean") {
111
108
  next = Boolean(next);
109
+ } else if (field.kind === "integer") {
110
+ next = Number(next);
112
111
  } else if (field.kind === "datetime") {
113
112
  next = next instanceof Date ? next : new Date(String(next));
114
113
  }
@@ -123,6 +122,9 @@ function createMongooseDriverInternal(config, state = {}) {
123
122
  if (field.kind === "boolean") {
124
123
  return Boolean(next);
125
124
  }
125
+ if (field.kind === "integer") {
126
+ return typeof next === "number" ? next : Number(next);
127
+ }
126
128
  if (field.kind === "datetime") {
127
129
  return next instanceof Date ? next : new Date(String(next));
128
130
  }
@@ -165,7 +167,7 @@ function createMongooseDriverInternal(config, state = {}) {
165
167
  if (!field) {
166
168
  throw new Error(`Unknown field "${fieldName}" on model "${model.name}".`);
167
169
  }
168
- if (!isFilterObject(filter)) {
170
+ if (!(0, import_orm.isOperatorFilterObject)(filter)) {
169
171
  return {
170
172
  [field.column]: encodeValue(model.name, field, filter)
171
173
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n createManifest,\n type CountArgs,\n type CreateArgs,\n type CreateManyArgs,\n type DeleteArgs,\n type DeleteManyArgs,\n type FindManyArgs,\n type ManifestField,\n type ManifestModel,\n mergeUniqueLookupCreateData,\n type OrmDriver,\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 MongoFilterRecord = Record<string, string | number | boolean | Date | null>;\ntype MongoWhere = Where<MongoFilterRecord>;\n\ntype MongooseWriteResult = {\n modifiedCount?: number;\n matchedCount?: number;\n deletedCount?: number;\n};\n\nexport type MongooseSessionLike = {\n withTransaction?<TResult>(run: () => Promise<TResult>): Promise<TResult>;\n startTransaction?(): void;\n commitTransaction?(): Promise<void>;\n abortTransaction?(): Promise<void>;\n endSession?(): Promise<void> | void;\n};\n\nexport type MongooseSessionSourceLike = {\n startSession(): Promise<MongooseSessionLike>;\n};\n\nexport type MongooseQueryLike<TResult> = {\n sort(sort: Record<string, 1 | -1>): MongooseQueryLike<TResult>;\n skip(value: number): MongooseQueryLike<TResult>;\n limit(value: number): MongooseQueryLike<TResult>;\n session(session: MongooseSessionLike): MongooseQueryLike<TResult>;\n lean(): MongooseQueryLike<TResult>;\n exec(): Promise<TResult>;\n};\n\nexport type MongooseExecLike<TResult> = {\n session?(session: MongooseSessionLike): MongooseExecLike<TResult>;\n exec(): Promise<TResult>;\n};\n\nexport type MongooseModelLike = {\n find(filter: Record<string, unknown>): MongooseQueryLike<MongoRow[]>;\n findOne(filter: Record<string, unknown>): MongooseQueryLike<MongoRow | null>;\n countDocuments(filter: Record<string, unknown>): Promise<number> | MongooseExecLike<number>;\n create(\n doc: MongoRow | MongoRow[],\n options?: { session?: MongooseSessionLike },\n ): Promise<MongoRow | MongoRow[]>;\n insertMany?(docs: MongoRow[], options?: { session?: MongooseSessionLike }): Promise<MongoRow[]>;\n updateMany(\n filter: Record<string, unknown>,\n update: { $set: MongoRow },\n options?: { session?: MongooseSessionLike },\n ): Promise<MongooseWriteResult> | MongooseExecLike<MongooseWriteResult>;\n findOneAndUpdate(\n filter: Record<string, unknown>,\n update: { $set?: MongoRow; $setOnInsert?: MongoRow },\n options?: {\n upsert?: boolean;\n new?: boolean;\n returnDocument?: \"after\" | \"before\";\n session?: MongooseSessionLike;\n },\n ): MongooseQueryLike<MongoRow | null>;\n findOneAndDelete(\n filter: Record<string, unknown>,\n options?: { session?: MongooseSessionLike },\n ): MongooseQueryLike<MongoRow | null>;\n deleteMany(\n filter: Record<string, unknown>,\n options?: { session?: MongooseSessionLike },\n ): Promise<MongooseWriteResult> | MongooseExecLike<MongooseWriteResult>;\n};\n\nexport type MongooseFieldTransform = {\n encode?: (value: unknown) => unknown;\n decode?: (value: unknown) => unknown;\n};\n\nexport type MongooseDriverConfig<TSchema extends SchemaDefinition<any>> = {\n models: Record<ModelName<TSchema>, MongooseModelLike>;\n connection?: MongooseSessionSourceLike;\n startSession?: () => Promise<MongooseSessionLike>;\n transforms?: Partial<Record<string, Partial<Record<string, MongooseFieldTransform>>>>;\n};\n\nconst manifestCache = new WeakMap<object, SchemaManifest>();\n\nfunction getManifest(schema: SchemaDefinition<any>) {\n const cached = manifestCache.get(schema);\n if (cached) return cached;\n const next = createManifest(schema);\n manifestCache.set(schema, next);\n return next;\n}\n\nfunction identityField(model: ManifestModel) {\n if (model.fields.id) return model.fields.id;\n const uniqueField = Object.values(model.fields).find((field) => field.unique);\n if (uniqueField) return uniqueField;\n throw new Error(\n `Model \"${model.name}\" requires an \"id\" field or a unique field for the Mongoose runtime.`,\n );\n}\n\nfunction applyDefault(value: unknown, field: ManifestField) {\n if (value !== undefined) return value;\n if (field.generated === \"id\") return randomUUID();\n if (field.generated === \"now\") return new Date();\n if (typeof field.defaultValue === \"function\") {\n return (field.defaultValue as () => unknown)();\n }\n return field.defaultValue;\n}\n\nfunction isFilterObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !(value instanceof Date) && !Array.isArray(value);\n}\n\nfunction escapeRegex(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction mergeWhere(...clauses: Array<MongoWhere | undefined>) {\n const defined = clauses.filter(Boolean) as MongoWhere[];\n if (!defined.length) return undefined;\n if (defined.length === 1) return defined[0];\n return {\n AND: defined,\n } as MongoWhere;\n}\n\nfunction parseReference(reference?: string) {\n if (!reference) return null;\n const [model, field] = reference.split(\".\");\n if (!model || !field) return null;\n return { model, field };\n}\n\nfunction removeOverlappingInsertFields(insertData: MongoRow, updateData: MongoRow) {\n const output: MongoRow = {};\n\n for (const [key, value] of Object.entries(insertData)) {\n if (Object.prototype.hasOwnProperty.call(updateData, key)) continue;\n output[key] = value;\n }\n\n return output;\n}\n\nfunction isExecLike<TResult>(value: unknown): value is MongooseExecLike<TResult> {\n return !!value && typeof value === \"object\" && \"exec\" in value;\n}\n\nasync function execute<TResult>(\n operation: Promise<TResult> | MongooseExecLike<TResult>,\n session?: MongooseSessionLike,\n) {\n if (isExecLike<TResult>(operation)) {\n const query =\n session && typeof operation.session === \"function\" ? operation.session(session) : operation;\n return query.exec();\n }\n return operation;\n}\n\nasync function normalizeCreated(doc: Promise<MongoRow | MongoRow[]>) {\n const result = await doc;\n return Array.isArray(result) ? (result[0] ?? null) : result;\n}\n\nfunction createMongooseDriverInternal<TSchema extends SchemaDefinition<any>>(\n config: MongooseDriverConfig<TSchema>,\n state: {\n session?: MongooseSessionLike;\n } = {},\n): OrmDriver<TSchema> {\n function getModel(modelName: ModelName<TSchema>) {\n const model = config.models[modelName];\n if (!model) {\n throw new Error(`No Mongoose model was provided for schema model \"${modelName}\".`);\n }\n return model;\n }\n\n function fieldTransform(modelName: string, fieldName: string) {\n return config.transforms?.[modelName]?.[fieldName];\n }\n\n function encodeValue(modelName: string, field: ManifestField, value: unknown) {\n if (value === undefined) return value;\n if (value === null) return null;\n\n let next = value;\n if (field.kind === \"boolean\") {\n next = Boolean(next);\n } else if (field.kind === \"datetime\") {\n next = next instanceof Date ? next : new Date(String(next));\n }\n\n const transform = fieldTransform(modelName, field.name);\n return transform?.encode ? transform.encode(next) : next;\n }\n\n function decodeValue(modelName: string, field: ManifestField, value: unknown) {\n if (value === undefined) return value;\n if (value === null) return null;\n\n const transform = fieldTransform(modelName, field.name);\n let next = transform?.decode ? transform.decode(value) : value;\n\n if (field.kind === \"boolean\") {\n return Boolean(next);\n }\n if (field.kind === \"datetime\") {\n return next instanceof Date ? next : new Date(String(next));\n }\n if (field.kind === \"id\") {\n return typeof next === \"string\" ? next : String(next);\n }\n return next;\n }\n\n function buildDocument(model: ManifestModel, data: Partial<Record<string, unknown>>) {\n const doc: MongoRow = {};\n\n for (const field of Object.values(model.fields)) {\n const value = applyDefault(data[field.name], field);\n if (value !== undefined) {\n doc[field.column] = encodeValue(model.name, field, value);\n }\n }\n\n return doc;\n }\n\n function buildUpdate(model: ManifestModel, data: Partial<Record<string, unknown>>) {\n const update: MongoRow = {};\n\n for (const [fieldName, value] of Object.entries(data)) {\n if (value === undefined) continue;\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n update[field.column] = encodeValue(model.name, field, value);\n }\n\n return update;\n }\n\n function decodeRow(model: ManifestModel, doc: MongoRow) {\n const output: MongoRow = {};\n\n for (const field of Object.values(model.fields)) {\n output[field.name] = decodeValue(model.name, field, doc[field.column]);\n }\n\n return output;\n }\n\n function compileFieldFilter(\n model: ManifestModel,\n fieldName: string,\n filter: unknown,\n ): Record<string, unknown> {\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n\n if (!isFilterObject(filter)) {\n return {\n [field.column]: encodeValue(model.name, field, filter),\n };\n }\n\n const operations: Record<string, unknown> = {};\n\n if (\"eq\" in filter) {\n operations.$eq = encodeValue(model.name, field, filter.eq);\n }\n if (\"not\" in filter) {\n operations.$ne = encodeValue(model.name, field, filter.not);\n }\n if (\"in\" in filter) {\n const values = Array.isArray(filter.in) ? filter.in : [];\n operations.$in = values.map((value) => encodeValue(model.name, field, value));\n }\n if (\"contains\" in filter) {\n operations.$regex = new RegExp(escapeRegex(String(filter.contains ?? \"\")));\n }\n if (\"gt\" in filter) {\n operations.$gt = encodeValue(model.name, field, filter.gt);\n }\n if (\"gte\" in filter) {\n operations.$gte = encodeValue(model.name, field, filter.gte);\n }\n if (\"lt\" in filter) {\n operations.$lt = encodeValue(model.name, field, filter.lt);\n }\n if (\"lte\" in filter) {\n operations.$lte = encodeValue(model.name, field, filter.lte);\n }\n\n return {\n [field.column]: operations,\n };\n }\n\n function compileWhere(\n model: ManifestModel,\n where: MongoWhere | undefined,\n ): Record<string, unknown> {\n if (!where) return {};\n\n const clauses: Record<string, unknown>[] = [];\n\n for (const [key, value] of Object.entries(where)) {\n if (key === \"AND\") {\n const nested = (Array.isArray(value) ? value : [])\n .map((item) => compileWhere(model, item as MongoWhere))\n .filter((item) => Object.keys(item).length > 0);\n if (nested.length) clauses.push({ $and: nested });\n continue;\n }\n\n if (key === \"OR\") {\n const nested = (Array.isArray(value) ? value : [])\n .map((item) => compileWhere(model, item as MongoWhere))\n .filter((item) => Object.keys(item).length > 0);\n if (nested.length) clauses.push({ $or: nested });\n continue;\n }\n\n if (key === \"NOT\") {\n const nested = compileWhere(model, value as MongoWhere);\n if (Object.keys(nested).length) clauses.push({ $nor: [nested] });\n continue;\n }\n\n clauses.push(compileFieldFilter(model, key, value));\n }\n\n if (!clauses.length) return {};\n if (clauses.length === 1) return clauses[0]!;\n return {\n $and: clauses,\n };\n }\n\n function compileOrderBy(\n model: ManifestModel,\n orderBy: Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n ) {\n if (!orderBy) return undefined;\n\n const output: Record<string, 1 | -1> = {};\n for (const [fieldName, direction] of Object.entries(orderBy)) {\n const field = model.fields[fieldName];\n if (!field) continue;\n output[field.column] = direction === \"desc\" ? -1 : 1;\n }\n\n return Object.keys(output).length ? output : undefined;\n }\n\n async function runFindMany(\n model: ManifestModel,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n take?: number;\n skip?: number;\n },\n ) {\n const query = getModel(model.name as ModelName<TSchema>).find(compileWhere(model, args.where));\n const orderBy = compileOrderBy(model, args.orderBy);\n if (orderBy) query.sort(orderBy);\n if (args.skip !== undefined) query.skip(args.skip);\n if (args.take !== undefined) query.limit(args.take);\n if (state.session) query.session(state.session);\n query.lean();\n return query.exec();\n }\n\n async function runFindOne(\n model: ManifestModel,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n },\n ) {\n const orderBy = compileOrderBy(model, args.orderBy);\n if (orderBy) {\n const rows = await runFindMany(model, {\n ...args,\n take: 1,\n });\n return rows[0] ?? null;\n }\n\n const query = getModel(model.name as ModelName<TSchema>).findOne(\n compileWhere(model, args.where),\n );\n if (state.session) query.session(state.session);\n query.lean();\n return query.exec();\n }\n\n async function loadRows<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n take?: number;\n skip?: number;\n select?: TSelect;\n },\n ): Promise<Array<SelectedRecord<TSchema, TModelName, TSelect>>> {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const docs = await runFindMany(model, args);\n const rows = docs.map((doc) => decodeRow(model, doc));\n return Promise.all(rows.map((row) => projectRow(schema, modelName, row, args.select)));\n }\n\n async function loadOneRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n select?: TSelect;\n },\n ) {\n const rows = await loadRows(schema, modelName, {\n ...args,\n take: 1,\n });\n return rows[0] ?? null;\n }\n\n async function loadRawOneRow<TModelName extends ModelName<TSchema>>(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n },\n ) {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const doc = await runFindOne(model, args);\n return doc ? decodeRow(model, doc) : null;\n }\n\n async function projectRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n row: MongoRow,\n select?: TSelect,\n ): Promise<SelectedRecord<TSchema, TModelName, TSelect>> {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const output: MongoRow = {};\n\n if (!select) {\n for (const fieldName of Object.keys(model.fields)) {\n output[fieldName] = row[fieldName];\n }\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n for (const [key, value] of Object.entries(select)) {\n if (value === undefined) continue;\n\n if (key in model.fields && value === true) {\n output[key] = row[key];\n continue;\n }\n\n if (key in schema.models[modelName].relations) {\n output[key] = await resolveRelation(\n schema,\n modelName,\n key as RelationName<TSchema, TModelName>,\n row,\n value as true | FindManyArgs<TSchema, any, any>,\n );\n }\n }\n\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n async function resolveRelation<\n TModelName extends ModelName<TSchema>,\n TRelationName extends RelationName<TSchema, TModelName>,\n >(\n schema: TSchema,\n modelName: TModelName,\n relationName: TRelationName,\n row: MongoRow,\n value: true | FindManyArgs<TSchema, any, any>,\n ) {\n const manifest = getManifest(schema);\n const relation = schema.models[modelName].relations[relationName];\n const relationArgs = value === true ? {} : value;\n\n if (relation.kind === \"belongsTo\") {\n const foreignField = manifest.models[modelName].fields[relation.foreignKey];\n const targetReference = parseReference(foreignField?.references);\n const targetField =\n targetReference?.field ?? identityField(manifest.models[relation.target]).name;\n const foreignValue = row[relation.foreignKey];\n\n if (foreignValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [targetField]: foreignValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasOne\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasMany\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n const throughModel = manifest.models[relation.through];\n const throughFromReference = parseReference(throughModel.fields[relation.from]?.references);\n const throughToReference = parseReference(throughModel.fields[relation.to]?.references);\n const sourceField =\n throughFromReference?.field ?? identityField(manifest.models[modelName]).name;\n const targetField =\n throughToReference?.field ?? identityField(manifest.models[relation.target]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n const throughRows = await loadRows(schema, relation.through as ModelName<TSchema>, {\n where: {\n [relation.from]: sourceValue,\n } as MongoWhere,\n });\n\n const targetIds = throughRows\n .map((item: MongoRow) => item[relation.to])\n .filter((item) => item != null);\n if (!targetIds.length) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [targetField]: {\n in: targetIds,\n },\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n async function runTransaction<TResult>(run: (driver: OrmDriver<TSchema>) => Promise<TResult>) {\n if (state.session) {\n return run(createMongooseDriverInternal(config, state));\n }\n\n const startSession =\n config.startSession ?? config.connection?.startSession.bind(config.connection);\n if (!startSession) {\n return run(createMongooseDriverInternal(config, state));\n }\n\n const session = await startSession();\n try {\n if (session.withTransaction) {\n return await session.withTransaction(() =>\n run(\n createMongooseDriverInternal(config, {\n session,\n }),\n ),\n );\n }\n\n if (session.startTransaction && session.commitTransaction && session.abortTransaction) {\n session.startTransaction();\n try {\n const result = await run(\n createMongooseDriverInternal(config, {\n session,\n }),\n );\n await session.commitTransaction();\n return result;\n } catch (error) {\n await session.abortTransaction();\n throw error;\n }\n }\n\n return run(\n createMongooseDriverInternal(config, {\n session,\n }),\n );\n } finally {\n await session.endSession?.();\n }\n }\n\n const driver: OrmDriver<TSchema> = {\n async findMany(schema, model, args) {\n return loadRows(schema, model, args);\n },\n async findFirst(schema, model, args) {\n return loadOneRow(schema, model, args);\n },\n async findUnique(schema, model, args) {\n 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 createManifest,\n type CountArgs,\n type CreateArgs,\n type CreateManyArgs,\n type DeleteArgs,\n type DeleteManyArgs,\n type FindManyArgs,\n type ManifestField,\n type ManifestModel,\n mergeUniqueLookupCreateData,\n type OrmDriver,\n isOperatorFilterObject,\n requireUniqueLookup,\n type SchemaManifest,\n type SchemaDefinition,\n type SelectShape,\n type SelectedRecord,\n type UpdateArgs,\n type UpdateManyArgs,\n type UpsertArgs,\n validateUniqueLookupUpdateData,\n type Where,\n} from \"@farming-labs/orm\";\nimport type { ModelName, RelationName } from \"@farming-labs/orm\";\n\ntype MongoRow = Record<string, unknown>;\ntype MongoWhere = Where<Record<string, unknown>>;\n\ntype MongooseWriteResult = {\n modifiedCount?: number;\n matchedCount?: number;\n deletedCount?: number;\n};\n\nexport type MongooseSessionLike = {\n withTransaction?<TResult>(run: () => Promise<TResult>): Promise<TResult>;\n startTransaction?(): void;\n commitTransaction?(): Promise<void>;\n abortTransaction?(): Promise<void>;\n endSession?(): Promise<void> | void;\n};\n\nexport type MongooseSessionSourceLike = {\n startSession(): Promise<MongooseSessionLike>;\n};\n\nexport type MongooseQueryLike<TResult> = {\n sort(sort: Record<string, 1 | -1>): MongooseQueryLike<TResult>;\n skip(value: number): MongooseQueryLike<TResult>;\n limit(value: number): MongooseQueryLike<TResult>;\n session(session: MongooseSessionLike): MongooseQueryLike<TResult>;\n lean(): MongooseQueryLike<TResult>;\n exec(): Promise<TResult>;\n};\n\nexport type MongooseExecLike<TResult> = {\n session?(session: MongooseSessionLike): MongooseExecLike<TResult>;\n exec(): Promise<TResult>;\n};\n\nexport type MongooseModelLike = {\n find(filter: Record<string, unknown>): MongooseQueryLike<MongoRow[]>;\n findOne(filter: Record<string, unknown>): MongooseQueryLike<MongoRow | null>;\n countDocuments(filter: Record<string, unknown>): Promise<number> | MongooseExecLike<number>;\n create(\n doc: MongoRow | MongoRow[],\n options?: { session?: MongooseSessionLike },\n ): Promise<MongoRow | MongoRow[]>;\n insertMany?(docs: MongoRow[], options?: { session?: MongooseSessionLike }): Promise<MongoRow[]>;\n updateMany(\n filter: Record<string, unknown>,\n update: { $set: MongoRow },\n options?: { session?: MongooseSessionLike },\n ): Promise<MongooseWriteResult> | MongooseExecLike<MongooseWriteResult>;\n findOneAndUpdate(\n filter: Record<string, unknown>,\n update: { $set?: MongoRow; $setOnInsert?: MongoRow },\n options?: {\n upsert?: boolean;\n new?: boolean;\n returnDocument?: \"after\" | \"before\";\n session?: MongooseSessionLike;\n },\n ): MongooseQueryLike<MongoRow | null>;\n findOneAndDelete(\n filter: Record<string, unknown>,\n options?: { session?: MongooseSessionLike },\n ): MongooseQueryLike<MongoRow | null>;\n deleteMany(\n filter: Record<string, unknown>,\n options?: { session?: MongooseSessionLike },\n ): Promise<MongooseWriteResult> | MongooseExecLike<MongooseWriteResult>;\n};\n\nexport type MongooseFieldTransform = {\n encode?: (value: unknown) => unknown;\n decode?: (value: unknown) => unknown;\n};\n\nexport type MongooseDriverConfig<TSchema extends SchemaDefinition<any>> = {\n models: Record<ModelName<TSchema>, MongooseModelLike>;\n connection?: MongooseSessionSourceLike;\n startSession?: () => Promise<MongooseSessionLike>;\n transforms?: Partial<Record<string, Partial<Record<string, MongooseFieldTransform>>>>;\n};\n\nconst manifestCache = new WeakMap<object, SchemaManifest>();\n\nfunction getManifest(schema: SchemaDefinition<any>) {\n const cached = manifestCache.get(schema);\n if (cached) return cached;\n const next = createManifest(schema);\n manifestCache.set(schema, next);\n return next;\n}\n\nfunction identityField(model: ManifestModel) {\n if (model.fields.id) return model.fields.id;\n const uniqueField = Object.values(model.fields).find((field) => field.unique);\n if (uniqueField) return uniqueField;\n throw new Error(\n `Model \"${model.name}\" requires an \"id\" field or a unique field for the Mongoose runtime.`,\n );\n}\n\nfunction applyDefault(value: unknown, field: ManifestField) {\n if (value !== undefined) return value;\n if (field.generated === \"id\") return randomUUID();\n if (field.generated === \"now\") return new Date();\n if (typeof field.defaultValue === \"function\") {\n return (field.defaultValue as () => unknown)();\n }\n return field.defaultValue;\n}\n\nfunction escapeRegex(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction mergeWhere(...clauses: Array<MongoWhere | undefined>) {\n const defined = clauses.filter(Boolean) as MongoWhere[];\n if (!defined.length) return undefined;\n if (defined.length === 1) return defined[0];\n return {\n AND: defined,\n } as MongoWhere;\n}\n\nfunction parseReference(reference?: string) {\n if (!reference) return null;\n const [model, field] = reference.split(\".\");\n if (!model || !field) return null;\n return { model, field };\n}\n\nfunction removeOverlappingInsertFields(insertData: MongoRow, updateData: MongoRow) {\n const output: MongoRow = {};\n\n for (const [key, value] of Object.entries(insertData)) {\n if (Object.prototype.hasOwnProperty.call(updateData, key)) continue;\n output[key] = value;\n }\n\n return output;\n}\n\nfunction isExecLike<TResult>(value: unknown): value is MongooseExecLike<TResult> {\n return !!value && typeof value === \"object\" && \"exec\" in value;\n}\n\nasync function execute<TResult>(\n operation: Promise<TResult> | MongooseExecLike<TResult>,\n session?: MongooseSessionLike,\n) {\n if (isExecLike<TResult>(operation)) {\n const query =\n session && typeof operation.session === \"function\" ? operation.session(session) : operation;\n return query.exec();\n }\n return operation;\n}\n\nasync function normalizeCreated(doc: Promise<MongoRow | MongoRow[]>) {\n const result = await doc;\n return Array.isArray(result) ? (result[0] ?? null) : result;\n}\n\nfunction createMongooseDriverInternal<TSchema extends SchemaDefinition<any>>(\n config: MongooseDriverConfig<TSchema>,\n state: {\n session?: MongooseSessionLike;\n } = {},\n): OrmDriver<TSchema> {\n function getModel(modelName: ModelName<TSchema>) {\n const model = config.models[modelName];\n if (!model) {\n throw new Error(`No Mongoose model was provided for schema model \"${modelName}\".`);\n }\n return model;\n }\n\n function fieldTransform(modelName: string, fieldName: string) {\n return config.transforms?.[modelName]?.[fieldName];\n }\n\n function encodeValue(modelName: string, field: ManifestField, value: unknown) {\n if (value === undefined) return value;\n if (value === null) return null;\n\n let next = value;\n if (field.kind === \"boolean\") {\n next = Boolean(next);\n } else if (field.kind === \"integer\") {\n next = Number(next);\n } else if (field.kind === \"datetime\") {\n next = next instanceof Date ? next : new Date(String(next));\n }\n\n const transform = fieldTransform(modelName, field.name);\n return transform?.encode ? transform.encode(next) : next;\n }\n\n function decodeValue(modelName: string, field: ManifestField, value: unknown) {\n if (value === undefined) return value;\n if (value === null) return null;\n\n const transform = fieldTransform(modelName, field.name);\n let next = transform?.decode ? transform.decode(value) : value;\n\n if (field.kind === \"boolean\") {\n return Boolean(next);\n }\n if (field.kind === \"integer\") {\n return typeof next === \"number\" ? next : Number(next);\n }\n if (field.kind === \"datetime\") {\n return next instanceof Date ? next : new Date(String(next));\n }\n if (field.kind === \"id\") {\n return typeof next === \"string\" ? next : String(next);\n }\n return next;\n }\n\n function buildDocument(model: ManifestModel, data: Partial<Record<string, unknown>>) {\n const doc: MongoRow = {};\n\n for (const field of Object.values(model.fields)) {\n const value = applyDefault(data[field.name], field);\n if (value !== undefined) {\n doc[field.column] = encodeValue(model.name, field, value);\n }\n }\n\n return doc;\n }\n\n function buildUpdate(model: ManifestModel, data: Partial<Record<string, unknown>>) {\n const update: MongoRow = {};\n\n for (const [fieldName, value] of Object.entries(data)) {\n if (value === undefined) continue;\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n update[field.column] = encodeValue(model.name, field, value);\n }\n\n return update;\n }\n\n function decodeRow(model: ManifestModel, doc: MongoRow) {\n const output: MongoRow = {};\n\n for (const field of Object.values(model.fields)) {\n output[field.name] = decodeValue(model.name, field, doc[field.column]);\n }\n\n return output;\n }\n\n function compileFieldFilter(\n model: ManifestModel,\n fieldName: string,\n filter: unknown,\n ): Record<string, unknown> {\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n\n if (!isOperatorFilterObject(filter)) {\n return {\n [field.column]: encodeValue(model.name, field, filter),\n };\n }\n\n const operations: Record<string, unknown> = {};\n\n if (\"eq\" in filter) {\n operations.$eq = encodeValue(model.name, field, filter.eq);\n }\n if (\"not\" in filter) {\n operations.$ne = encodeValue(model.name, field, filter.not);\n }\n if (\"in\" in filter) {\n const values = Array.isArray(filter.in) ? filter.in : [];\n operations.$in = values.map((value) => encodeValue(model.name, field, value));\n }\n if (\"contains\" in filter) {\n operations.$regex = new RegExp(escapeRegex(String(filter.contains ?? \"\")));\n }\n if (\"gt\" in filter) {\n operations.$gt = encodeValue(model.name, field, filter.gt);\n }\n if (\"gte\" in filter) {\n operations.$gte = encodeValue(model.name, field, filter.gte);\n }\n if (\"lt\" in filter) {\n operations.$lt = encodeValue(model.name, field, filter.lt);\n }\n if (\"lte\" in filter) {\n operations.$lte = encodeValue(model.name, field, filter.lte);\n }\n\n return {\n [field.column]: operations,\n };\n }\n\n function compileWhere(\n model: ManifestModel,\n where: MongoWhere | undefined,\n ): Record<string, unknown> {\n if (!where) return {};\n\n const clauses: Record<string, unknown>[] = [];\n\n for (const [key, value] of Object.entries(where)) {\n if (key === \"AND\") {\n const nested = (Array.isArray(value) ? value : [])\n .map((item) => compileWhere(model, item as MongoWhere))\n .filter((item) => Object.keys(item).length > 0);\n if (nested.length) clauses.push({ $and: nested });\n continue;\n }\n\n if (key === \"OR\") {\n const nested = (Array.isArray(value) ? value : [])\n .map((item) => compileWhere(model, item as MongoWhere))\n .filter((item) => Object.keys(item).length > 0);\n if (nested.length) clauses.push({ $or: nested });\n continue;\n }\n\n if (key === \"NOT\") {\n const nested = compileWhere(model, value as MongoWhere);\n if (Object.keys(nested).length) clauses.push({ $nor: [nested] });\n continue;\n }\n\n clauses.push(compileFieldFilter(model, key, value));\n }\n\n if (!clauses.length) return {};\n if (clauses.length === 1) return clauses[0]!;\n return {\n $and: clauses,\n };\n }\n\n function compileOrderBy(\n model: ManifestModel,\n orderBy: Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n ) {\n if (!orderBy) return undefined;\n\n const output: Record<string, 1 | -1> = {};\n for (const [fieldName, direction] of Object.entries(orderBy)) {\n const field = model.fields[fieldName];\n if (!field) continue;\n output[field.column] = direction === \"desc\" ? -1 : 1;\n }\n\n return Object.keys(output).length ? output : undefined;\n }\n\n async function runFindMany(\n model: ManifestModel,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n take?: number;\n skip?: number;\n },\n ) {\n const query = getModel(model.name as ModelName<TSchema>).find(compileWhere(model, args.where));\n const orderBy = compileOrderBy(model, args.orderBy);\n if (orderBy) query.sort(orderBy);\n if (args.skip !== undefined) query.skip(args.skip);\n if (args.take !== undefined) query.limit(args.take);\n if (state.session) query.session(state.session);\n query.lean();\n return query.exec();\n }\n\n async function runFindOne(\n model: ManifestModel,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n },\n ) {\n const orderBy = compileOrderBy(model, args.orderBy);\n if (orderBy) {\n const rows = await runFindMany(model, {\n ...args,\n take: 1,\n });\n return rows[0] ?? null;\n }\n\n const query = getModel(model.name as ModelName<TSchema>).findOne(\n compileWhere(model, args.where),\n );\n if (state.session) query.session(state.session);\n query.lean();\n return query.exec();\n }\n\n async function loadRows<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n take?: number;\n skip?: number;\n select?: TSelect;\n },\n ): Promise<Array<SelectedRecord<TSchema, TModelName, TSelect>>> {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const docs = await runFindMany(model, args);\n const rows = docs.map((doc) => decodeRow(model, doc));\n return Promise.all(rows.map((row) => projectRow(schema, modelName, row, args.select)));\n }\n\n async function loadOneRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n select?: TSelect;\n },\n ) {\n const rows = await loadRows(schema, modelName, {\n ...args,\n take: 1,\n });\n return rows[0] ?? null;\n }\n\n async function loadRawOneRow<TModelName extends ModelName<TSchema>>(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n },\n ) {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const doc = await runFindOne(model, args);\n return doc ? decodeRow(model, doc) : null;\n }\n\n async function projectRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n row: MongoRow,\n select?: TSelect,\n ): Promise<SelectedRecord<TSchema, TModelName, TSelect>> {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const output: MongoRow = {};\n\n if (!select) {\n for (const fieldName of Object.keys(model.fields)) {\n output[fieldName] = row[fieldName];\n }\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n for (const [key, value] of Object.entries(select)) {\n if (value === undefined) continue;\n\n if (key in model.fields && value === true) {\n output[key] = row[key];\n continue;\n }\n\n if (key in schema.models[modelName].relations) {\n output[key] = await resolveRelation(\n schema,\n modelName,\n key as RelationName<TSchema, TModelName>,\n row,\n value as true | FindManyArgs<TSchema, any, any>,\n );\n }\n }\n\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n async function resolveRelation<\n TModelName extends ModelName<TSchema>,\n TRelationName extends RelationName<TSchema, TModelName>,\n >(\n schema: TSchema,\n modelName: TModelName,\n relationName: TRelationName,\n row: MongoRow,\n value: true | FindManyArgs<TSchema, any, any>,\n ) {\n const manifest = getManifest(schema);\n const relation = schema.models[modelName].relations[relationName];\n const relationArgs = value === true ? {} : value;\n\n if (relation.kind === \"belongsTo\") {\n const foreignField = manifest.models[modelName].fields[relation.foreignKey];\n const targetReference = parseReference(foreignField?.references);\n const targetField =\n targetReference?.field ?? identityField(manifest.models[relation.target]).name;\n const foreignValue = row[relation.foreignKey];\n\n if (foreignValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [targetField]: foreignValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasOne\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasMany\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n const throughModel = manifest.models[relation.through];\n const throughFromReference = parseReference(throughModel.fields[relation.from]?.references);\n const throughToReference = parseReference(throughModel.fields[relation.to]?.references);\n const sourceField =\n throughFromReference?.field ?? identityField(manifest.models[modelName]).name;\n const targetField =\n throughToReference?.field ?? identityField(manifest.models[relation.target]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n const throughRows = await loadRows(schema, relation.through as ModelName<TSchema>, {\n where: {\n [relation.from]: sourceValue,\n } as MongoWhere,\n });\n\n const targetIds = throughRows\n .map((item: MongoRow) => item[relation.to])\n .filter((item) => item != null);\n if (!targetIds.length) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [targetField]: {\n in: targetIds,\n },\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n async function runTransaction<TResult>(run: (driver: OrmDriver<TSchema>) => Promise<TResult>) {\n if (state.session) {\n return run(createMongooseDriverInternal(config, state));\n }\n\n const startSession =\n config.startSession ?? config.connection?.startSession.bind(config.connection);\n if (!startSession) {\n return run(createMongooseDriverInternal(config, state));\n }\n\n const session = await startSession();\n try {\n if (session.withTransaction) {\n return await session.withTransaction(() =>\n run(\n createMongooseDriverInternal(config, {\n session,\n }),\n ),\n );\n }\n\n if (session.startTransaction && session.commitTransaction && session.abortTransaction) {\n session.startTransaction();\n try {\n const result = await run(\n createMongooseDriverInternal(config, {\n session,\n }),\n );\n await session.commitTransaction();\n return result;\n } catch (error) {\n await session.abortTransaction();\n throw error;\n }\n }\n\n return run(\n createMongooseDriverInternal(config, {\n session,\n }),\n );\n } finally {\n await session.endSession?.();\n }\n }\n\n const driver: OrmDriver<TSchema> = {\n async findMany(schema, model, args) {\n return loadRows(schema, model, args);\n },\n async findFirst(schema, model, args) {\n return loadOneRow(schema, model, args);\n },\n async findUnique(schema, model, args) {\n const manifest = getManifest(schema);\n requireUniqueLookup(\n manifest.models[model],\n args.where as Record<string, unknown>,\n \"FindUnique\",\n );\n return loadOneRow(schema, model, args);\n },\n async count(schema, model, args?: CountArgs<TSchema, ModelName<TSchema>>) {\n const manifest = getManifest(schema);\n const result = await execute(\n getModel(model).countDocuments(\n compileWhere(manifest.models[model], args?.where as MongoWhere | undefined),\n ),\n state.session,\n );\n return Number(result);\n },\n async create(schema, model, args) {\n const manifest = getManifest(schema);\n const document = buildDocument(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n );\n const created = await normalizeCreated(\n state.session\n ? getModel(model).create([document], { session: state.session })\n : getModel(model).create(document),\n );\n if (!created) {\n throw new Error(`Create on model \"${String(model)}\" did not return a document.`);\n }\n const row = decodeRow(manifest.models[model], created);\n return projectRow(schema, model, row, args.select) as Promise<any>;\n },\n async createMany(schema, model, args) {\n const results: unknown[] = [];\n for (const entry of args.data) {\n results.push(\n await driver.create(schema, model, {\n data: entry,\n select: args.select,\n } as CreateArgs<TSchema, ModelName<TSchema>, any>),\n );\n }\n return results as any;\n },\n async update(schema, model, args) {\n const manifest = getManifest(schema);\n const updated = await getModel(model)\n .findOneAndUpdate(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n {\n $set: buildUpdate(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n ),\n },\n {\n new: true,\n returnDocument: \"after\",\n session: state.session,\n },\n )\n .lean()\n .exec();\n\n if (!updated) return null;\n\n return projectRow(\n schema,\n model,\n decodeRow(manifest.models[model], updated),\n args.select,\n ) as Promise<any>;\n },\n async updateMany(schema, model, args) {\n const manifest = getManifest(schema);\n const update = buildUpdate(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n );\n if (!Object.keys(update).length) return 0;\n const result = await execute(\n getModel(model).updateMany(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n {\n $set: update,\n },\n state.session ? { session: state.session } : undefined,\n ),\n state.session,\n );\n return Number(result.modifiedCount ?? result.matchedCount ?? 0);\n },\n async upsert(schema, model, args) {\n const manifest = getManifest(schema);\n const modelManifest = manifest.models[model];\n const lookup = requireUniqueLookup(\n modelManifest,\n args.where as Record<string, unknown>,\n \"Upsert\",\n );\n validateUniqueLookupUpdateData(\n modelManifest,\n args.update as Partial<Record<string, unknown>>,\n lookup,\n \"Upsert\",\n );\n const created = buildDocument(\n modelManifest,\n mergeUniqueLookupCreateData(\n modelManifest,\n args.create as Partial<Record<string, unknown>>,\n lookup,\n \"Upsert\",\n ),\n );\n const update = buildUpdate(modelManifest, args.update as Partial<Record<string, unknown>>);\n const updated = await getModel(model)\n .findOneAndUpdate(\n compileWhere(modelManifest, args.where as MongoWhere),\n {\n $set: update,\n $setOnInsert: removeOverlappingInsertFields(created, update),\n },\n {\n upsert: true,\n new: true,\n returnDocument: \"after\",\n session: state.session,\n },\n )\n .lean()\n .exec();\n\n if (!updated) {\n throw new Error(`Upsert on model \"${String(model)}\" did not return a document.`);\n }\n\n return projectRow(\n schema,\n model,\n decodeRow(modelManifest, updated),\n args.select,\n ) as Promise<any>;\n },\n async delete(schema, model, args) {\n const manifest = getManifest(schema);\n const deleted = await getModel(model)\n .findOneAndDelete(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n state.session ? { session: state.session } : undefined,\n )\n .lean()\n .exec();\n return deleted ? 1 : 0;\n },\n async deleteMany(schema, model, args) {\n const manifest = getManifest(schema);\n const result = await execute(\n getModel(model).deleteMany(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n state.session ? { session: state.session } : undefined,\n ),\n state.session,\n );\n return Number(result.deletedCount ?? 0);\n },\n async transaction(_schema, run) {\n return runTransaction(run);\n },\n };\n\n return driver;\n}\n\nexport function createMongooseDriver<TSchema extends SchemaDefinition<any>>(\n config: MongooseDriverConfig<TSchema>,\n) {\n return createMongooseDriverInternal(config);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAA2B;AAC3B,iBAuBO;AAoFP,IAAM,gBAAgB,oBAAI,QAAgC;AAE1D,SAAS,YAAY,QAA+B;AAClD,QAAM,SAAS,cAAc,IAAI,MAAM;AACvC,MAAI,OAAQ,QAAO;AACnB,QAAM,WAAO,2BAAe,MAAM;AAClC,gBAAc,IAAI,QAAQ,IAAI;AAC9B,SAAO;AACT;AAEA,SAAS,cAAc,OAAsB;AAC3C,MAAI,MAAM,OAAO,GAAI,QAAO,MAAM,OAAO;AACzC,QAAM,cAAc,OAAO,OAAO,MAAM,MAAM,EAAE,KAAK,CAAC,UAAU,MAAM,MAAM;AAC5E,MAAI,YAAa,QAAO;AACxB,QAAM,IAAI;AAAA,IACR,UAAU,MAAM,IAAI;AAAA,EACtB;AACF;AAEA,SAAS,aAAa,OAAgB,OAAsB;AAC1D,MAAI,UAAU,OAAW,QAAO;AAChC,MAAI,MAAM,cAAc,KAAM,YAAO,+BAAW;AAChD,MAAI,MAAM,cAAc,MAAO,QAAO,oBAAI,KAAK;AAC/C,MAAI,OAAO,MAAM,iBAAiB,YAAY;AAC5C,WAAQ,MAAM,aAA+B;AAAA,EAC/C;AACA,SAAO,MAAM;AACf;AAEA,SAAS,YAAY,OAAe;AAClC,SAAO,MAAM,QAAQ,uBAAuB,MAAM;AACpD;AAEA,SAAS,cAAc,SAAwC;AAC7D,QAAM,UAAU,QAAQ,OAAO,OAAO;AACtC,MAAI,CAAC,QAAQ,OAAQ,QAAO;AAC5B,MAAI,QAAQ,WAAW,EAAG,QAAO,QAAQ,CAAC;AAC1C,SAAO;AAAA,IACL,KAAK;AAAA,EACP;AACF;AAEA,SAAS,eAAe,WAAoB;AAC1C,MAAI,CAAC,UAAW,QAAO;AACvB,QAAM,CAAC,OAAO,KAAK,IAAI,UAAU,MAAM,GAAG;AAC1C,MAAI,CAAC,SAAS,CAAC,MAAO,QAAO;AAC7B,SAAO,EAAE,OAAO,MAAM;AACxB;AAEA,SAAS,8BAA8B,YAAsB,YAAsB;AACjF,QAAM,SAAmB,CAAC;AAE1B,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AACrD,QAAI,OAAO,UAAU,eAAe,KAAK,YAAY,GAAG,EAAG;AAC3D,WAAO,GAAG,IAAI;AAAA,EAChB;AAEA,SAAO;AACT;AAEA,SAAS,WAAoB,OAAoD;AAC/E,SAAO,CAAC,CAAC,SAAS,OAAO,UAAU,YAAY,UAAU;AAC3D;AAEA,eAAe,QACb,WACA,SACA;AACA,MAAI,WAAoB,SAAS,GAAG;AAClC,UAAM,QACJ,WAAW,OAAO,UAAU,YAAY,aAAa,UAAU,QAAQ,OAAO,IAAI;AACpF,WAAO,MAAM,KAAK;AAAA,EACpB;AACA,SAAO;AACT;AAEA,eAAe,iBAAiB,KAAqC;AACnE,QAAM,SAAS,MAAM;AACrB,SAAO,MAAM,QAAQ,MAAM,IAAK,OAAO,CAAC,KAAK,OAAQ;AACvD;AAEA,SAAS,6BACP,QACA,QAEI,CAAC,GACe;AACpB,WAAS,SAAS,WAA+B;AAC/C,UAAM,QAAQ,OAAO,OAAO,SAAS;AACrC,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,oDAAoD,SAAS,IAAI;AAAA,IACnF;AACA,WAAO;AAAA,EACT;AAEA,WAAS,eAAe,WAAmB,WAAmB;AAC5D,WAAO,OAAO,aAAa,SAAS,IAAI,SAAS;AAAA,EACnD;AAEA,WAAS,YAAY,WAAmB,OAAsB,OAAgB;AAC5E,QAAI,UAAU,OAAW,QAAO;AAChC,QAAI,UAAU,KAAM,QAAO;AAE3B,QAAI,OAAO;AACX,QAAI,MAAM,SAAS,WAAW;AAC5B,aAAO,QAAQ,IAAI;AAAA,IACrB,WAAW,MAAM,SAAS,WAAW;AACnC,aAAO,OAAO,IAAI;AAAA,IACpB,WAAW,MAAM,SAAS,YAAY;AACpC,aAAO,gBAAgB,OAAO,OAAO,IAAI,KAAK,OAAO,IAAI,CAAC;AAAA,IAC5D;AAEA,UAAM,YAAY,eAAe,WAAW,MAAM,IAAI;AACtD,WAAO,WAAW,SAAS,UAAU,OAAO,IAAI,IAAI;AAAA,EACtD;AAEA,WAAS,YAAY,WAAmB,OAAsB,OAAgB;AAC5E,QAAI,UAAU,OAAW,QAAO;AAChC,QAAI,UAAU,KAAM,QAAO;AAE3B,UAAM,YAAY,eAAe,WAAW,MAAM,IAAI;AACtD,QAAI,OAAO,WAAW,SAAS,UAAU,OAAO,KAAK,IAAI;AAEzD,QAAI,MAAM,SAAS,WAAW;AAC5B,aAAO,QAAQ,IAAI;AAAA,IACrB;AACA,QAAI,MAAM,SAAS,WAAW;AAC5B,aAAO,OAAO,SAAS,WAAW,OAAO,OAAO,IAAI;AAAA,IACtD;AACA,QAAI,MAAM,SAAS,YAAY;AAC7B,aAAO,gBAAgB,OAAO,OAAO,IAAI,KAAK,OAAO,IAAI,CAAC;AAAA,IAC5D;AACA,QAAI,MAAM,SAAS,MAAM;AACvB,aAAO,OAAO,SAAS,WAAW,OAAO,OAAO,IAAI;AAAA,IACtD;AACA,WAAO;AAAA,EACT;AAEA,WAAS,cAAc,OAAsB,MAAwC;AACnF,UAAM,MAAgB,CAAC;AAEvB,eAAW,SAAS,OAAO,OAAO,MAAM,MAAM,GAAG;AAC/C,YAAM,QAAQ,aAAa,KAAK,MAAM,IAAI,GAAG,KAAK;AAClD,UAAI,UAAU,QAAW;AACvB,YAAI,MAAM,MAAM,IAAI,YAAY,MAAM,MAAM,OAAO,KAAK;AAAA,MAC1D;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,WAAS,YAAY,OAAsB,MAAwC;AACjF,UAAM,SAAmB,CAAC;AAE1B,eAAW,CAAC,WAAW,KAAK,KAAK,OAAO,QAAQ,IAAI,GAAG;AACrD,UAAI,UAAU,OAAW;AACzB,YAAM,QAAQ,MAAM,OAAO,SAAS;AACpC,UAAI,CAAC,OAAO;AACV,cAAM,IAAI,MAAM,kBAAkB,SAAS,eAAe,MAAM,IAAI,IAAI;AAAA,MAC1E;AACA,aAAO,MAAM,MAAM,IAAI,YAAY,MAAM,MAAM,OAAO,KAAK;AAAA,IAC7D;AAEA,WAAO;AAAA,EACT;AAEA,WAAS,UAAU,OAAsB,KAAe;AACtD,UAAM,SAAmB,CAAC;AAE1B,eAAW,SAAS,OAAO,OAAO,MAAM,MAAM,GAAG;AAC/C,aAAO,MAAM,IAAI,IAAI,YAAY,MAAM,MAAM,OAAO,IAAI,MAAM,MAAM,CAAC;AAAA,IACvE;AAEA,WAAO;AAAA,EACT;AAEA,WAAS,mBACP,OACA,WACA,QACyB;AACzB,UAAM,QAAQ,MAAM,OAAO,SAAS;AACpC,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,kBAAkB,SAAS,eAAe,MAAM,IAAI,IAAI;AAAA,IAC1E;AAEA,QAAI,KAAC,mCAAuB,MAAM,GAAG;AACnC,aAAO;AAAA,QACL,CAAC,MAAM,MAAM,GAAG,YAAY,MAAM,MAAM,OAAO,MAAM;AAAA,MACvD;AAAA,IACF;AAEA,UAAM,aAAsC,CAAC;AAE7C,QAAI,QAAQ,QAAQ;AAClB,iBAAW,MAAM,YAAY,MAAM,MAAM,OAAO,OAAO,EAAE;AAAA,IAC3D;AACA,QAAI,SAAS,QAAQ;AACnB,iBAAW,MAAM,YAAY,MAAM,MAAM,OAAO,OAAO,GAAG;AAAA,IAC5D;AACA,QAAI,QAAQ,QAAQ;AAClB,YAAM,SAAS,MAAM,QAAQ,OAAO,EAAE,IAAI,OAAO,KAAK,CAAC;AACvD,iBAAW,MAAM,OAAO,IAAI,CAAC,UAAU,YAAY,MAAM,MAAM,OAAO,KAAK,CAAC;AAAA,IAC9E;AACA,QAAI,cAAc,QAAQ;AACxB,iBAAW,SAAS,IAAI,OAAO,YAAY,OAAO,OAAO,YAAY,EAAE,CAAC,CAAC;AAAA,IAC3E;AACA,QAAI,QAAQ,QAAQ;AAClB,iBAAW,MAAM,YAAY,MAAM,MAAM,OAAO,OAAO,EAAE;AAAA,IAC3D;AACA,QAAI,SAAS,QAAQ;AACnB,iBAAW,OAAO,YAAY,MAAM,MAAM,OAAO,OAAO,GAAG;AAAA,IAC7D;AACA,QAAI,QAAQ,QAAQ;AAClB,iBAAW,MAAM,YAAY,MAAM,MAAM,OAAO,OAAO,EAAE;AAAA,IAC3D;AACA,QAAI,SAAS,QAAQ;AACnB,iBAAW,OAAO,YAAY,MAAM,MAAM,OAAO,OAAO,GAAG;AAAA,IAC7D;AAEA,WAAO;AAAA,MACL,CAAC,MAAM,MAAM,GAAG;AAAA,IAClB;AAAA,EACF;AAEA,WAAS,aACP,OACA,OACyB;AACzB,QAAI,CAAC,MAAO,QAAO,CAAC;AAEpB,UAAM,UAAqC,CAAC;AAE5C,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,UAAI,QAAQ,OAAO;AACjB,cAAM,UAAU,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,GAC7C,IAAI,CAAC,SAAS,aAAa,OAAO,IAAkB,CAAC,EACrD,OAAO,CAAC,SAAS,OAAO,KAAK,IAAI,EAAE,SAAS,CAAC;AAChD,YAAI,OAAO,OAAQ,SAAQ,KAAK,EAAE,MAAM,OAAO,CAAC;AAChD;AAAA,MACF;AAEA,UAAI,QAAQ,MAAM;AAChB,cAAM,UAAU,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,GAC7C,IAAI,CAAC,SAAS,aAAa,OAAO,IAAkB,CAAC,EACrD,OAAO,CAAC,SAAS,OAAO,KAAK,IAAI,EAAE,SAAS,CAAC;AAChD,YAAI,OAAO,OAAQ,SAAQ,KAAK,EAAE,KAAK,OAAO,CAAC;AAC/C;AAAA,MACF;AAEA,UAAI,QAAQ,OAAO;AACjB,cAAM,SAAS,aAAa,OAAO,KAAmB;AACtD,YAAI,OAAO,KAAK,MAAM,EAAE,OAAQ,SAAQ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AAC/D;AAAA,MACF;AAEA,cAAQ,KAAK,mBAAmB,OAAO,KAAK,KAAK,CAAC;AAAA,IACpD;AAEA,QAAI,CAAC,QAAQ,OAAQ,QAAO,CAAC;AAC7B,QAAI,QAAQ,WAAW,EAAG,QAAO,QAAQ,CAAC;AAC1C,WAAO;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EACF;AAEA,WAAS,eACP,OACA,SACA;AACA,QAAI,CAAC,QAAS,QAAO;AAErB,UAAM,SAAiC,CAAC;AACxC,eAAW,CAAC,WAAW,SAAS,KAAK,OAAO,QAAQ,OAAO,GAAG;AAC5D,YAAM,QAAQ,MAAM,OAAO,SAAS;AACpC,UAAI,CAAC,MAAO;AACZ,aAAO,MAAM,MAAM,IAAI,cAAc,SAAS,KAAK;AAAA,IACrD;AAEA,WAAO,OAAO,KAAK,MAAM,EAAE,SAAS,SAAS;AAAA,EAC/C;AAEA,iBAAe,YACb,OACA,MAMA;AACA,UAAM,QAAQ,SAAS,MAAM,IAA0B,EAAE,KAAK,aAAa,OAAO,KAAK,KAAK,CAAC;AAC7F,UAAM,UAAU,eAAe,OAAO,KAAK,OAAO;AAClD,QAAI,QAAS,OAAM,KAAK,OAAO;AAC/B,QAAI,KAAK,SAAS,OAAW,OAAM,KAAK,KAAK,IAAI;AACjD,QAAI,KAAK,SAAS,OAAW,OAAM,MAAM,KAAK,IAAI;AAClD,QAAI,MAAM,QAAS,OAAM,QAAQ,MAAM,OAAO;AAC9C,UAAM,KAAK;AACX,WAAO,MAAM,KAAK;AAAA,EACpB;AAEA,iBAAe,WACb,OACA,MAIA;AACA,UAAM,UAAU,eAAe,OAAO,KAAK,OAAO;AAClD,QAAI,SAAS;AACX,YAAM,OAAO,MAAM,YAAY,OAAO;AAAA,QACpC,GAAG;AAAA,QACH,MAAM;AAAA,MACR,CAAC;AACD,aAAO,KAAK,CAAC,KAAK;AAAA,IACpB;AAEA,UAAM,QAAQ,SAAS,MAAM,IAA0B,EAAE;AAAA,MACvD,aAAa,OAAO,KAAK,KAAK;AAAA,IAChC;AACA,QAAI,MAAM,QAAS,OAAM,QAAQ,MAAM,OAAO;AAC9C,UAAM,KAAK;AACX,WAAO,MAAM,KAAK;AAAA,EACpB;AAEA,iBAAe,SAIb,QACA,WACA,MAO8D;AAC9D,UAAM,WAAW,YAAY,MAAM;AACnC,UAAM,QAAQ,SAAS,OAAO,SAAS;AACvC,UAAM,OAAO,MAAM,YAAY,OAAO,IAAI;AAC1C,UAAM,OAAO,KAAK,IAAI,CAAC,QAAQ,UAAU,OAAO,GAAG,CAAC;AACpD,WAAO,QAAQ,IAAI,KAAK,IAAI,CAAC,QAAQ,WAAW,QAAQ,WAAW,KAAK,KAAK,MAAM,CAAC,CAAC;AAAA,EACvF;AAEA,iBAAe,WAIb,QACA,WACA,MAKA;AACA,UAAM,OAAO,MAAM,SAAS,QAAQ,WAAW;AAAA,MAC7C,GAAG;AAAA,MACH,MAAM;AAAA,IACR,CAAC;AACD,WAAO,KAAK,CAAC,KAAK;AAAA,EACpB;AAEA,iBAAe,cACb,QACA,WACA,MAIA;AACA,UAAM,WAAW,YAAY,MAAM;AACnC,UAAM,QAAQ,SAAS,OAAO,SAAS;AACvC,UAAM,MAAM,MAAM,WAAW,OAAO,IAAI;AACxC,WAAO,MAAM,UAAU,OAAO,GAAG,IAAI;AAAA,EACvC;AAEA,iBAAe,WAIb,QACA,WACA,KACA,QACuD;AACvD,UAAM,WAAW,YAAY,MAAM;AACnC,UAAM,QAAQ,SAAS,OAAO,SAAS;AACvC,UAAM,SAAmB,CAAC;AAE1B,QAAI,CAAC,QAAQ;AACX,iBAAW,aAAa,OAAO,KAAK,MAAM,MAAM,GAAG;AACjD,eAAO,SAAS,IAAI,IAAI,SAAS;AAAA,MACnC;AACA,aAAO;AAAA,IACT;AAEA,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,UAAI,UAAU,OAAW;AAEzB,UAAI,OAAO,MAAM,UAAU,UAAU,MAAM;AACzC,eAAO,GAAG,IAAI,IAAI,GAAG;AACrB;AAAA,MACF;AAEA,UAAI,OAAO,OAAO,OAAO,SAAS,EAAE,WAAW;AAC7C,eAAO,GAAG,IAAI,MAAM;AAAA,UAClB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,iBAAe,gBAIb,QACA,WACA,cACA,KACA,OACA;AACA,UAAM,WAAW,YAAY,MAAM;AACnC,UAAM,WAAW,OAAO,OAAO,SAAS,EAAE,UAAU,YAAY;AAChE,UAAM,eAAe,UAAU,OAAO,CAAC,IAAI;AAE3C,QAAI,SAAS,SAAS,aAAa;AACjC,YAAM,eAAe,SAAS,OAAO,SAAS,EAAE,OAAO,SAAS,UAAU;AAC1E,YAAM,kBAAkB,eAAe,cAAc,UAAU;AAC/D,YAAMA,eACJ,iBAAiB,SAAS,cAAc,SAAS,OAAO,SAAS,MAAM,CAAC,EAAE;AAC5E,YAAM,eAAe,IAAI,SAAS,UAAU;AAE5C,UAAI,gBAAgB,KAAM,QAAO;AAEjC,aAAO,WAAW,QAAQ,SAAS,QAA8B;AAAA,QAC/D,OAAO;AAAA,UACL,aAAa;AAAA,UACb;AAAA,YACE,CAACA,YAAW,GAAG;AAAA,UACjB;AAAA,QACF;AAAA,QACA,SAAS,aAAa;AAAA,QACtB,QAAQ,aAAa;AAAA,MACvB,CAAC;AAAA,IACH;AAEA,QAAI,SAAS,SAAS,UAAU;AAC9B,YAAM,cAAc,SAAS,OAAO,SAAS,MAAM;AACnD,YAAM,eAAe,YAAY,OAAO,SAAS,UAAU;AAC3D,YAAM,kBAAkB,eAAe,cAAc,UAAU;AAC/D,YAAMC,eAAc,iBAAiB,SAAS,cAAc,SAAS,OAAO,SAAS,CAAC,EAAE;AACxF,YAAMC,eAAc,IAAID,YAAW;AAEnC,UAAIC,gBAAe,KAAM,QAAO;AAEhC,aAAO,WAAW,QAAQ,SAAS,QAA8B;AAAA,QAC/D,OAAO;AAAA,UACL,aAAa;AAAA,UACb;AAAA,YACE,CAAC,SAAS,UAAU,GAAGA;AAAA,UACzB;AAAA,QACF;AAAA,QACA,SAAS,aAAa;AAAA,QACtB,QAAQ,aAAa;AAAA,MACvB,CAAC;AAAA,IACH;AAEA,QAAI,SAAS,SAAS,WAAW;AAC/B,YAAM,cAAc,SAAS,OAAO,SAAS,MAAM;AACnD,YAAM,eAAe,YAAY,OAAO,SAAS,UAAU;AAC3D,YAAM,kBAAkB,eAAe,cAAc,UAAU;AAC/D,YAAMD,eAAc,iBAAiB,SAAS,cAAc,SAAS,OAAO,SAAS,CAAC,EAAE;AACxF,YAAMC,eAAc,IAAID,YAAW;AAEnC,UAAIC,gBAAe,KAAM,QAAO,CAAC;AAEjC,aAAO,SAAS,QAAQ,SAAS,QAA8B;AAAA,QAC7D,OAAO;AAAA,UACL,aAAa;AAAA,UACb;AAAA,YACE,CAAC,SAAS,UAAU,GAAGA;AAAA,UACzB;AAAA,QACF;AAAA,QACA,SAAS,aAAa;AAAA,QACtB,MAAM,aAAa;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,QAAQ,aAAa;AAAA,MACvB,CAAC;AAAA,IACH;AAEA,UAAM,eAAe,SAAS,OAAO,SAAS,OAAO;AACrD,UAAM,uBAAuB,eAAe,aAAa,OAAO,SAAS,IAAI,GAAG,UAAU;AAC1F,UAAM,qBAAqB,eAAe,aAAa,OAAO,SAAS,EAAE,GAAG,UAAU;AACtF,UAAM,cACJ,sBAAsB,SAAS,cAAc,SAAS,OAAO,SAAS,CAAC,EAAE;AAC3E,UAAM,cACJ,oBAAoB,SAAS,cAAc,SAAS,OAAO,SAAS,MAAM,CAAC,EAAE;AAC/E,UAAM,cAAc,IAAI,WAAW;AAEnC,QAAI,eAAe,KAAM,QAAO,CAAC;AAEjC,UAAM,cAAc,MAAM,SAAS,QAAQ,SAAS,SAA+B;AAAA,MACjF,OAAO;AAAA,QACL,CAAC,SAAS,IAAI,GAAG;AAAA,MACnB;AAAA,IACF,CAAC;AAED,UAAM,YAAY,YACf,IAAI,CAAC,SAAmB,KAAK,SAAS,EAAE,CAAC,EACzC,OAAO,CAAC,SAAS,QAAQ,IAAI;AAChC,QAAI,CAAC,UAAU,OAAQ,QAAO,CAAC;AAE/B,WAAO,SAAS,QAAQ,SAAS,QAA8B;AAAA,MAC7D,OAAO;AAAA,QACL,aAAa;AAAA,QACb;AAAA,UACE,CAAC,WAAW,GAAG;AAAA,YACb,IAAI;AAAA,UACN;AAAA,QACF;AAAA,MACF;AAAA,MACA,SAAS,aAAa;AAAA,MACtB,MAAM,aAAa;AAAA,MACnB,MAAM,aAAa;AAAA,MACnB,QAAQ,aAAa;AAAA,IACvB,CAAC;AAAA,EACH;AAEA,iBAAe,eAAwB,KAAuD;AAC5F,QAAI,MAAM,SAAS;AACjB,aAAO,IAAI,6BAA6B,QAAQ,KAAK,CAAC;AAAA,IACxD;AAEA,UAAM,eACJ,OAAO,gBAAgB,OAAO,YAAY,aAAa,KAAK,OAAO,UAAU;AAC/E,QAAI,CAAC,cAAc;AACjB,aAAO,IAAI,6BAA6B,QAAQ,KAAK,CAAC;AAAA,IACxD;AAEA,UAAM,UAAU,MAAM,aAAa;AACnC,QAAI;AACF,UAAI,QAAQ,iBAAiB;AAC3B,eAAO,MAAM,QAAQ;AAAA,UAAgB,MACnC;AAAA,YACE,6BAA6B,QAAQ;AAAA,cACnC;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAEA,UAAI,QAAQ,oBAAoB,QAAQ,qBAAqB,QAAQ,kBAAkB;AACrF,gBAAQ,iBAAiB;AACzB,YAAI;AACF,gBAAM,SAAS,MAAM;AAAA,YACnB,6BAA6B,QAAQ;AAAA,cACnC;AAAA,YACF,CAAC;AAAA,UACH;AACA,gBAAM,QAAQ,kBAAkB;AAChC,iBAAO;AAAA,QACT,SAAS,OAAO;AACd,gBAAM,QAAQ,iBAAiB;AAC/B,gBAAM;AAAA,QACR;AAAA,MACF;AAEA,aAAO;AAAA,QACL,6BAA6B,QAAQ;AAAA,UACnC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,UAAE;AACA,YAAM,QAAQ,aAAa;AAAA,IAC7B;AAAA,EACF;AAEA,QAAM,SAA6B;AAAA,IACjC,MAAM,SAAS,QAAQ,OAAO,MAAM;AAClC,aAAO,SAAS,QAAQ,OAAO,IAAI;AAAA,IACrC;AAAA,IACA,MAAM,UAAU,QAAQ,OAAO,MAAM;AACnC,aAAO,WAAW,QAAQ,OAAO,IAAI;AAAA,IACvC;AAAA,IACA,MAAM,WAAW,QAAQ,OAAO,MAAM;AACpC,YAAM,WAAW,YAAY,MAAM;AACnC;AAAA,QACE,SAAS,OAAO,KAAK;AAAA,QACrB,KAAK;AAAA,QACL;AAAA,MACF;AACA,aAAO,WAAW,QAAQ,OAAO,IAAI;AAAA,IACvC;AAAA,IACA,MAAM,MAAM,QAAQ,OAAO,MAA+C;AACxE,YAAM,WAAW,YAAY,MAAM;AACnC,YAAM,SAAS,MAAM;AAAA,QACnB,SAAS,KAAK,EAAE;AAAA,UACd,aAAa,SAAS,OAAO,KAAK,GAAG,MAAM,KAA+B;AAAA,QAC5E;AAAA,QACA,MAAM;AAAA,MACR;AACA,aAAO,OAAO,MAAM;AAAA,IACtB;AAAA,IACA,MAAM,OAAO,QAAQ,OAAO,MAAM;AAChC,YAAM,WAAW,YAAY,MAAM;AACnC,YAAM,WAAW;AAAA,QACf,SAAS,OAAO,KAAK;AAAA,QACrB,KAAK;AAAA,MACP;AACA,YAAM,UAAU,MAAM;AAAA,QACpB,MAAM,UACF,SAAS,KAAK,EAAE,OAAO,CAAC,QAAQ,GAAG,EAAE,SAAS,MAAM,QAAQ,CAAC,IAC7D,SAAS,KAAK,EAAE,OAAO,QAAQ;AAAA,MACrC;AACA,UAAI,CAAC,SAAS;AACZ,cAAM,IAAI,MAAM,oBAAoB,OAAO,KAAK,CAAC,8BAA8B;AAAA,MACjF;AACA,YAAM,MAAM,UAAU,SAAS,OAAO,KAAK,GAAG,OAAO;AACrD,aAAO,WAAW,QAAQ,OAAO,KAAK,KAAK,MAAM;AAAA,IACnD;AAAA,IACA,MAAM,WAAW,QAAQ,OAAO,MAAM;AACpC,YAAM,UAAqB,CAAC;AAC5B,iBAAW,SAAS,KAAK,MAAM;AAC7B,gBAAQ;AAAA,UACN,MAAM,OAAO,OAAO,QAAQ,OAAO;AAAA,YACjC,MAAM;AAAA,YACN,QAAQ,KAAK;AAAA,UACf,CAAiD;AAAA,QACnD;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IACA,MAAM,OAAO,QAAQ,OAAO,MAAM;AAChC,YAAM,WAAW,YAAY,MAAM;AACnC,YAAM,UAAU,MAAM,SAAS,KAAK,EACjC;AAAA,QACC,aAAa,SAAS,OAAO,KAAK,GAAG,KAAK,KAAmB;AAAA,QAC7D;AAAA,UACE,MAAM;AAAA,YACJ,SAAS,OAAO,KAAK;AAAA,YACrB,KAAK;AAAA,UACP;AAAA,QACF;AAAA,QACA;AAAA,UACE,KAAK;AAAA,UACL,gBAAgB;AAAA,UAChB,SAAS,MAAM;AAAA,QACjB;AAAA,MACF,EACC,KAAK,EACL,KAAK;AAER,UAAI,CAAC,QAAS,QAAO;AAErB,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,UAAU,SAAS,OAAO,KAAK,GAAG,OAAO;AAAA,QACzC,KAAK;AAAA,MACP;AAAA,IACF;AAAA,IACA,MAAM,WAAW,QAAQ,OAAO,MAAM;AACpC,YAAM,WAAW,YAAY,MAAM;AACnC,YAAM,SAAS;AAAA,QACb,SAAS,OAAO,KAAK;AAAA,QACrB,KAAK;AAAA,MACP;AACA,UAAI,CAAC,OAAO,KAAK,MAAM,EAAE,OAAQ,QAAO;AACxC,YAAM,SAAS,MAAM;AAAA,QACnB,SAAS,KAAK,EAAE;AAAA,UACd,aAAa,SAAS,OAAO,KAAK,GAAG,KAAK,KAAmB;AAAA,UAC7D;AAAA,YACE,MAAM;AAAA,UACR;AAAA,UACA,MAAM,UAAU,EAAE,SAAS,MAAM,QAAQ,IAAI;AAAA,QAC/C;AAAA,QACA,MAAM;AAAA,MACR;AACA,aAAO,OAAO,OAAO,iBAAiB,OAAO,gBAAgB,CAAC;AAAA,IAChE;AAAA,IACA,MAAM,OAAO,QAAQ,OAAO,MAAM;AAChC,YAAM,WAAW,YAAY,MAAM;AACnC,YAAM,gBAAgB,SAAS,OAAO,KAAK;AAC3C,YAAM,aAAS;AAAA,QACb;AAAA,QACA,KAAK;AAAA,QACL;AAAA,MACF;AACA;AAAA,QACE;AAAA,QACA,KAAK;AAAA,QACL;AAAA,QACA;AAAA,MACF;AACA,YAAM,UAAU;AAAA,QACd;AAAA,YACA;AAAA,UACE;AAAA,UACA,KAAK;AAAA,UACL;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,YAAM,SAAS,YAAY,eAAe,KAAK,MAA0C;AACzF,YAAM,UAAU,MAAM,SAAS,KAAK,EACjC;AAAA,QACC,aAAa,eAAe,KAAK,KAAmB;AAAA,QACpD;AAAA,UACE,MAAM;AAAA,UACN,cAAc,8BAA8B,SAAS,MAAM;AAAA,QAC7D;AAAA,QACA;AAAA,UACE,QAAQ;AAAA,UACR,KAAK;AAAA,UACL,gBAAgB;AAAA,UAChB,SAAS,MAAM;AAAA,QACjB;AAAA,MACF,EACC,KAAK,EACL,KAAK;AAER,UAAI,CAAC,SAAS;AACZ,cAAM,IAAI,MAAM,oBAAoB,OAAO,KAAK,CAAC,8BAA8B;AAAA,MACjF;AAEA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,UAAU,eAAe,OAAO;AAAA,QAChC,KAAK;AAAA,MACP;AAAA,IACF;AAAA,IACA,MAAM,OAAO,QAAQ,OAAO,MAAM;AAChC,YAAM,WAAW,YAAY,MAAM;AACnC,YAAM,UAAU,MAAM,SAAS,KAAK,EACjC;AAAA,QACC,aAAa,SAAS,OAAO,KAAK,GAAG,KAAK,KAAmB;AAAA,QAC7D,MAAM,UAAU,EAAE,SAAS,MAAM,QAAQ,IAAI;AAAA,MAC/C,EACC,KAAK,EACL,KAAK;AACR,aAAO,UAAU,IAAI;AAAA,IACvB;AAAA,IACA,MAAM,WAAW,QAAQ,OAAO,MAAM;AACpC,YAAM,WAAW,YAAY,MAAM;AACnC,YAAM,SAAS,MAAM;AAAA,QACnB,SAAS,KAAK,EAAE;AAAA,UACd,aAAa,SAAS,OAAO,KAAK,GAAG,KAAK,KAAmB;AAAA,UAC7D,MAAM,UAAU,EAAE,SAAS,MAAM,QAAQ,IAAI;AAAA,QAC/C;AAAA,QACA,MAAM;AAAA,MACR;AACA,aAAO,OAAO,OAAO,gBAAgB,CAAC;AAAA,IACxC;AAAA,IACA,MAAM,YAAY,SAAS,KAAK;AAC9B,aAAO,eAAe,GAAG;AAAA,IAC3B;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,qBACd,QACA;AACA,SAAO,6BAA6B,MAAM;AAC5C;","names":["targetField","sourceField","sourceValue"]}
package/dist/index.js CHANGED
@@ -3,6 +3,7 @@ import { randomUUID } from "crypto";
3
3
  import {
4
4
  createManifest,
5
5
  mergeUniqueLookupCreateData,
6
+ isOperatorFilterObject,
6
7
  requireUniqueLookup,
7
8
  validateUniqueLookupUpdateData
8
9
  } from "@farming-labs/orm";
@@ -31,9 +32,6 @@ function applyDefault(value, field) {
31
32
  }
32
33
  return field.defaultValue;
33
34
  }
34
- function isFilterObject(value) {
35
- return !!value && typeof value === "object" && !(value instanceof Date) && !Array.isArray(value);
36
- }
37
35
  function escapeRegex(value) {
38
36
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
39
37
  }
@@ -90,6 +88,8 @@ function createMongooseDriverInternal(config, state = {}) {
90
88
  let next = value;
91
89
  if (field.kind === "boolean") {
92
90
  next = Boolean(next);
91
+ } else if (field.kind === "integer") {
92
+ next = Number(next);
93
93
  } else if (field.kind === "datetime") {
94
94
  next = next instanceof Date ? next : new Date(String(next));
95
95
  }
@@ -104,6 +104,9 @@ function createMongooseDriverInternal(config, state = {}) {
104
104
  if (field.kind === "boolean") {
105
105
  return Boolean(next);
106
106
  }
107
+ if (field.kind === "integer") {
108
+ return typeof next === "number" ? next : Number(next);
109
+ }
107
110
  if (field.kind === "datetime") {
108
111
  return next instanceof Date ? next : new Date(String(next));
109
112
  }
@@ -146,7 +149,7 @@ function createMongooseDriverInternal(config, state = {}) {
146
149
  if (!field) {
147
150
  throw new Error(`Unknown field "${fieldName}" on model "${model.name}".`);
148
151
  }
149
- if (!isFilterObject(filter)) {
152
+ if (!isOperatorFilterObject(filter)) {
150
153
  return {
151
154
  [field.column]: encodeValue(model.name, field, filter)
152
155
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n createManifest,\n type CountArgs,\n type CreateArgs,\n type CreateManyArgs,\n type DeleteArgs,\n type DeleteManyArgs,\n type FindManyArgs,\n type ManifestField,\n type ManifestModel,\n mergeUniqueLookupCreateData,\n type OrmDriver,\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 MongoFilterRecord = Record<string, string | number | boolean | Date | null>;\ntype MongoWhere = Where<MongoFilterRecord>;\n\ntype MongooseWriteResult = {\n modifiedCount?: number;\n matchedCount?: number;\n deletedCount?: number;\n};\n\nexport type MongooseSessionLike = {\n withTransaction?<TResult>(run: () => Promise<TResult>): Promise<TResult>;\n startTransaction?(): void;\n commitTransaction?(): Promise<void>;\n abortTransaction?(): Promise<void>;\n endSession?(): Promise<void> | void;\n};\n\nexport type MongooseSessionSourceLike = {\n startSession(): Promise<MongooseSessionLike>;\n};\n\nexport type MongooseQueryLike<TResult> = {\n sort(sort: Record<string, 1 | -1>): MongooseQueryLike<TResult>;\n skip(value: number): MongooseQueryLike<TResult>;\n limit(value: number): MongooseQueryLike<TResult>;\n session(session: MongooseSessionLike): MongooseQueryLike<TResult>;\n lean(): MongooseQueryLike<TResult>;\n exec(): Promise<TResult>;\n};\n\nexport type MongooseExecLike<TResult> = {\n session?(session: MongooseSessionLike): MongooseExecLike<TResult>;\n exec(): Promise<TResult>;\n};\n\nexport type MongooseModelLike = {\n find(filter: Record<string, unknown>): MongooseQueryLike<MongoRow[]>;\n findOne(filter: Record<string, unknown>): MongooseQueryLike<MongoRow | null>;\n countDocuments(filter: Record<string, unknown>): Promise<number> | MongooseExecLike<number>;\n create(\n doc: MongoRow | MongoRow[],\n options?: { session?: MongooseSessionLike },\n ): Promise<MongoRow | MongoRow[]>;\n insertMany?(docs: MongoRow[], options?: { session?: MongooseSessionLike }): Promise<MongoRow[]>;\n updateMany(\n filter: Record<string, unknown>,\n update: { $set: MongoRow },\n options?: { session?: MongooseSessionLike },\n ): Promise<MongooseWriteResult> | MongooseExecLike<MongooseWriteResult>;\n findOneAndUpdate(\n filter: Record<string, unknown>,\n update: { $set?: MongoRow; $setOnInsert?: MongoRow },\n options?: {\n upsert?: boolean;\n new?: boolean;\n returnDocument?: \"after\" | \"before\";\n session?: MongooseSessionLike;\n },\n ): MongooseQueryLike<MongoRow | null>;\n findOneAndDelete(\n filter: Record<string, unknown>,\n options?: { session?: MongooseSessionLike },\n ): MongooseQueryLike<MongoRow | null>;\n deleteMany(\n filter: Record<string, unknown>,\n options?: { session?: MongooseSessionLike },\n ): Promise<MongooseWriteResult> | MongooseExecLike<MongooseWriteResult>;\n};\n\nexport type MongooseFieldTransform = {\n encode?: (value: unknown) => unknown;\n decode?: (value: unknown) => unknown;\n};\n\nexport type MongooseDriverConfig<TSchema extends SchemaDefinition<any>> = {\n models: Record<ModelName<TSchema>, MongooseModelLike>;\n connection?: MongooseSessionSourceLike;\n startSession?: () => Promise<MongooseSessionLike>;\n transforms?: Partial<Record<string, Partial<Record<string, MongooseFieldTransform>>>>;\n};\n\nconst manifestCache = new WeakMap<object, SchemaManifest>();\n\nfunction getManifest(schema: SchemaDefinition<any>) {\n const cached = manifestCache.get(schema);\n if (cached) return cached;\n const next = createManifest(schema);\n manifestCache.set(schema, next);\n return next;\n}\n\nfunction identityField(model: ManifestModel) {\n if (model.fields.id) return model.fields.id;\n const uniqueField = Object.values(model.fields).find((field) => field.unique);\n if (uniqueField) return uniqueField;\n throw new Error(\n `Model \"${model.name}\" requires an \"id\" field or a unique field for the Mongoose runtime.`,\n );\n}\n\nfunction applyDefault(value: unknown, field: ManifestField) {\n if (value !== undefined) return value;\n if (field.generated === \"id\") return randomUUID();\n if (field.generated === \"now\") return new Date();\n if (typeof field.defaultValue === \"function\") {\n return (field.defaultValue as () => unknown)();\n }\n return field.defaultValue;\n}\n\nfunction isFilterObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !(value instanceof Date) && !Array.isArray(value);\n}\n\nfunction escapeRegex(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction mergeWhere(...clauses: Array<MongoWhere | undefined>) {\n const defined = clauses.filter(Boolean) as MongoWhere[];\n if (!defined.length) return undefined;\n if (defined.length === 1) return defined[0];\n return {\n AND: defined,\n } as MongoWhere;\n}\n\nfunction parseReference(reference?: string) {\n if (!reference) return null;\n const [model, field] = reference.split(\".\");\n if (!model || !field) return null;\n return { model, field };\n}\n\nfunction removeOverlappingInsertFields(insertData: MongoRow, updateData: MongoRow) {\n const output: MongoRow = {};\n\n for (const [key, value] of Object.entries(insertData)) {\n if (Object.prototype.hasOwnProperty.call(updateData, key)) continue;\n output[key] = value;\n }\n\n return output;\n}\n\nfunction isExecLike<TResult>(value: unknown): value is MongooseExecLike<TResult> {\n return !!value && typeof value === \"object\" && \"exec\" in value;\n}\n\nasync function execute<TResult>(\n operation: Promise<TResult> | MongooseExecLike<TResult>,\n session?: MongooseSessionLike,\n) {\n if (isExecLike<TResult>(operation)) {\n const query =\n session && typeof operation.session === \"function\" ? operation.session(session) : operation;\n return query.exec();\n }\n return operation;\n}\n\nasync function normalizeCreated(doc: Promise<MongoRow | MongoRow[]>) {\n const result = await doc;\n return Array.isArray(result) ? (result[0] ?? null) : result;\n}\n\nfunction createMongooseDriverInternal<TSchema extends SchemaDefinition<any>>(\n config: MongooseDriverConfig<TSchema>,\n state: {\n session?: MongooseSessionLike;\n } = {},\n): OrmDriver<TSchema> {\n function getModel(modelName: ModelName<TSchema>) {\n const model = config.models[modelName];\n if (!model) {\n throw new Error(`No Mongoose model was provided for schema model \"${modelName}\".`);\n }\n return model;\n }\n\n function fieldTransform(modelName: string, fieldName: string) {\n return config.transforms?.[modelName]?.[fieldName];\n }\n\n function encodeValue(modelName: string, field: ManifestField, value: unknown) {\n if (value === undefined) return value;\n if (value === null) return null;\n\n let next = value;\n if (field.kind === \"boolean\") {\n next = Boolean(next);\n } else if (field.kind === \"datetime\") {\n next = next instanceof Date ? next : new Date(String(next));\n }\n\n const transform = fieldTransform(modelName, field.name);\n return transform?.encode ? transform.encode(next) : next;\n }\n\n function decodeValue(modelName: string, field: ManifestField, value: unknown) {\n if (value === undefined) return value;\n if (value === null) return null;\n\n const transform = fieldTransform(modelName, field.name);\n let next = transform?.decode ? transform.decode(value) : value;\n\n if (field.kind === \"boolean\") {\n return Boolean(next);\n }\n if (field.kind === \"datetime\") {\n return next instanceof Date ? next : new Date(String(next));\n }\n if (field.kind === \"id\") {\n return typeof next === \"string\" ? next : String(next);\n }\n return next;\n }\n\n function buildDocument(model: ManifestModel, data: Partial<Record<string, unknown>>) {\n const doc: MongoRow = {};\n\n for (const field of Object.values(model.fields)) {\n const value = applyDefault(data[field.name], field);\n if (value !== undefined) {\n doc[field.column] = encodeValue(model.name, field, value);\n }\n }\n\n return doc;\n }\n\n function buildUpdate(model: ManifestModel, data: Partial<Record<string, unknown>>) {\n const update: MongoRow = {};\n\n for (const [fieldName, value] of Object.entries(data)) {\n if (value === undefined) continue;\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n update[field.column] = encodeValue(model.name, field, value);\n }\n\n return update;\n }\n\n function decodeRow(model: ManifestModel, doc: MongoRow) {\n const output: MongoRow = {};\n\n for (const field of Object.values(model.fields)) {\n output[field.name] = decodeValue(model.name, field, doc[field.column]);\n }\n\n return output;\n }\n\n function compileFieldFilter(\n model: ManifestModel,\n fieldName: string,\n filter: unknown,\n ): Record<string, unknown> {\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n\n if (!isFilterObject(filter)) {\n return {\n [field.column]: encodeValue(model.name, field, filter),\n };\n }\n\n const operations: Record<string, unknown> = {};\n\n if (\"eq\" in filter) {\n operations.$eq = encodeValue(model.name, field, filter.eq);\n }\n if (\"not\" in filter) {\n operations.$ne = encodeValue(model.name, field, filter.not);\n }\n if (\"in\" in filter) {\n const values = Array.isArray(filter.in) ? filter.in : [];\n operations.$in = values.map((value) => encodeValue(model.name, field, value));\n }\n if (\"contains\" in filter) {\n operations.$regex = new RegExp(escapeRegex(String(filter.contains ?? \"\")));\n }\n if (\"gt\" in filter) {\n operations.$gt = encodeValue(model.name, field, filter.gt);\n }\n if (\"gte\" in filter) {\n operations.$gte = encodeValue(model.name, field, filter.gte);\n }\n if (\"lt\" in filter) {\n operations.$lt = encodeValue(model.name, field, filter.lt);\n }\n if (\"lte\" in filter) {\n operations.$lte = encodeValue(model.name, field, filter.lte);\n }\n\n return {\n [field.column]: operations,\n };\n }\n\n function compileWhere(\n model: ManifestModel,\n where: MongoWhere | undefined,\n ): Record<string, unknown> {\n if (!where) return {};\n\n const clauses: Record<string, unknown>[] = [];\n\n for (const [key, value] of Object.entries(where)) {\n if (key === \"AND\") {\n const nested = (Array.isArray(value) ? value : [])\n .map((item) => compileWhere(model, item as MongoWhere))\n .filter((item) => Object.keys(item).length > 0);\n if (nested.length) clauses.push({ $and: nested });\n continue;\n }\n\n if (key === \"OR\") {\n const nested = (Array.isArray(value) ? value : [])\n .map((item) => compileWhere(model, item as MongoWhere))\n .filter((item) => Object.keys(item).length > 0);\n if (nested.length) clauses.push({ $or: nested });\n continue;\n }\n\n if (key === \"NOT\") {\n const nested = compileWhere(model, value as MongoWhere);\n if (Object.keys(nested).length) clauses.push({ $nor: [nested] });\n continue;\n }\n\n clauses.push(compileFieldFilter(model, key, value));\n }\n\n if (!clauses.length) return {};\n if (clauses.length === 1) return clauses[0]!;\n return {\n $and: clauses,\n };\n }\n\n function compileOrderBy(\n model: ManifestModel,\n orderBy: Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n ) {\n if (!orderBy) return undefined;\n\n const output: Record<string, 1 | -1> = {};\n for (const [fieldName, direction] of Object.entries(orderBy)) {\n const field = model.fields[fieldName];\n if (!field) continue;\n output[field.column] = direction === \"desc\" ? -1 : 1;\n }\n\n return Object.keys(output).length ? output : undefined;\n }\n\n async function runFindMany(\n model: ManifestModel,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n take?: number;\n skip?: number;\n },\n ) {\n const query = getModel(model.name as ModelName<TSchema>).find(compileWhere(model, args.where));\n const orderBy = compileOrderBy(model, args.orderBy);\n if (orderBy) query.sort(orderBy);\n if (args.skip !== undefined) query.skip(args.skip);\n if (args.take !== undefined) query.limit(args.take);\n if (state.session) query.session(state.session);\n query.lean();\n return query.exec();\n }\n\n async function runFindOne(\n model: ManifestModel,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n },\n ) {\n const orderBy = compileOrderBy(model, args.orderBy);\n if (orderBy) {\n const rows = await runFindMany(model, {\n ...args,\n take: 1,\n });\n return rows[0] ?? null;\n }\n\n const query = getModel(model.name as ModelName<TSchema>).findOne(\n compileWhere(model, args.where),\n );\n if (state.session) query.session(state.session);\n query.lean();\n return query.exec();\n }\n\n async function loadRows<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n take?: number;\n skip?: number;\n select?: TSelect;\n },\n ): Promise<Array<SelectedRecord<TSchema, TModelName, TSelect>>> {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const docs = await runFindMany(model, args);\n const rows = docs.map((doc) => decodeRow(model, doc));\n return Promise.all(rows.map((row) => projectRow(schema, modelName, row, args.select)));\n }\n\n async function loadOneRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n select?: TSelect;\n },\n ) {\n const rows = await loadRows(schema, modelName, {\n ...args,\n take: 1,\n });\n return rows[0] ?? null;\n }\n\n async function loadRawOneRow<TModelName extends ModelName<TSchema>>(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n },\n ) {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const doc = await runFindOne(model, args);\n return doc ? decodeRow(model, doc) : null;\n }\n\n async function projectRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n row: MongoRow,\n select?: TSelect,\n ): Promise<SelectedRecord<TSchema, TModelName, TSelect>> {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const output: MongoRow = {};\n\n if (!select) {\n for (const fieldName of Object.keys(model.fields)) {\n output[fieldName] = row[fieldName];\n }\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n for (const [key, value] of Object.entries(select)) {\n if (value === undefined) continue;\n\n if (key in model.fields && value === true) {\n output[key] = row[key];\n continue;\n }\n\n if (key in schema.models[modelName].relations) {\n output[key] = await resolveRelation(\n schema,\n modelName,\n key as RelationName<TSchema, TModelName>,\n row,\n value as true | FindManyArgs<TSchema, any, any>,\n );\n }\n }\n\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n async function resolveRelation<\n TModelName extends ModelName<TSchema>,\n TRelationName extends RelationName<TSchema, TModelName>,\n >(\n schema: TSchema,\n modelName: TModelName,\n relationName: TRelationName,\n row: MongoRow,\n value: true | FindManyArgs<TSchema, any, any>,\n ) {\n const manifest = getManifest(schema);\n const relation = schema.models[modelName].relations[relationName];\n const relationArgs = value === true ? {} : value;\n\n if (relation.kind === \"belongsTo\") {\n const foreignField = manifest.models[modelName].fields[relation.foreignKey];\n const targetReference = parseReference(foreignField?.references);\n const targetField =\n targetReference?.field ?? identityField(manifest.models[relation.target]).name;\n const foreignValue = row[relation.foreignKey];\n\n if (foreignValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [targetField]: foreignValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasOne\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasMany\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n const throughModel = manifest.models[relation.through];\n const throughFromReference = parseReference(throughModel.fields[relation.from]?.references);\n const throughToReference = parseReference(throughModel.fields[relation.to]?.references);\n const sourceField =\n throughFromReference?.field ?? identityField(manifest.models[modelName]).name;\n const targetField =\n throughToReference?.field ?? identityField(manifest.models[relation.target]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n const throughRows = await loadRows(schema, relation.through as ModelName<TSchema>, {\n where: {\n [relation.from]: sourceValue,\n } as MongoWhere,\n });\n\n const targetIds = throughRows\n .map((item: MongoRow) => item[relation.to])\n .filter((item) => item != null);\n if (!targetIds.length) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [targetField]: {\n in: targetIds,\n },\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n async function runTransaction<TResult>(run: (driver: OrmDriver<TSchema>) => Promise<TResult>) {\n if (state.session) {\n return run(createMongooseDriverInternal(config, state));\n }\n\n const startSession =\n config.startSession ?? config.connection?.startSession.bind(config.connection);\n if (!startSession) {\n return run(createMongooseDriverInternal(config, state));\n }\n\n const session = await startSession();\n try {\n if (session.withTransaction) {\n return await session.withTransaction(() =>\n run(\n createMongooseDriverInternal(config, {\n session,\n }),\n ),\n );\n }\n\n if (session.startTransaction && session.commitTransaction && session.abortTransaction) {\n session.startTransaction();\n try {\n const result = await run(\n createMongooseDriverInternal(config, {\n session,\n }),\n );\n await session.commitTransaction();\n return result;\n } catch (error) {\n await session.abortTransaction();\n throw error;\n }\n }\n\n return run(\n createMongooseDriverInternal(config, {\n session,\n }),\n );\n } finally {\n await session.endSession?.();\n }\n }\n\n const driver: OrmDriver<TSchema> = {\n async findMany(schema, model, args) {\n return loadRows(schema, model, args);\n },\n async findFirst(schema, model, args) {\n return loadOneRow(schema, model, args);\n },\n async findUnique(schema, model, args) {\n 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 createManifest,\n type CountArgs,\n type CreateArgs,\n type CreateManyArgs,\n type DeleteArgs,\n type DeleteManyArgs,\n type FindManyArgs,\n type ManifestField,\n type ManifestModel,\n mergeUniqueLookupCreateData,\n type OrmDriver,\n isOperatorFilterObject,\n requireUniqueLookup,\n type SchemaManifest,\n type SchemaDefinition,\n type SelectShape,\n type SelectedRecord,\n type UpdateArgs,\n type UpdateManyArgs,\n type UpsertArgs,\n validateUniqueLookupUpdateData,\n type Where,\n} from \"@farming-labs/orm\";\nimport type { ModelName, RelationName } from \"@farming-labs/orm\";\n\ntype MongoRow = Record<string, unknown>;\ntype MongoWhere = Where<Record<string, unknown>>;\n\ntype MongooseWriteResult = {\n modifiedCount?: number;\n matchedCount?: number;\n deletedCount?: number;\n};\n\nexport type MongooseSessionLike = {\n withTransaction?<TResult>(run: () => Promise<TResult>): Promise<TResult>;\n startTransaction?(): void;\n commitTransaction?(): Promise<void>;\n abortTransaction?(): Promise<void>;\n endSession?(): Promise<void> | void;\n};\n\nexport type MongooseSessionSourceLike = {\n startSession(): Promise<MongooseSessionLike>;\n};\n\nexport type MongooseQueryLike<TResult> = {\n sort(sort: Record<string, 1 | -1>): MongooseQueryLike<TResult>;\n skip(value: number): MongooseQueryLike<TResult>;\n limit(value: number): MongooseQueryLike<TResult>;\n session(session: MongooseSessionLike): MongooseQueryLike<TResult>;\n lean(): MongooseQueryLike<TResult>;\n exec(): Promise<TResult>;\n};\n\nexport type MongooseExecLike<TResult> = {\n session?(session: MongooseSessionLike): MongooseExecLike<TResult>;\n exec(): Promise<TResult>;\n};\n\nexport type MongooseModelLike = {\n find(filter: Record<string, unknown>): MongooseQueryLike<MongoRow[]>;\n findOne(filter: Record<string, unknown>): MongooseQueryLike<MongoRow | null>;\n countDocuments(filter: Record<string, unknown>): Promise<number> | MongooseExecLike<number>;\n create(\n doc: MongoRow | MongoRow[],\n options?: { session?: MongooseSessionLike },\n ): Promise<MongoRow | MongoRow[]>;\n insertMany?(docs: MongoRow[], options?: { session?: MongooseSessionLike }): Promise<MongoRow[]>;\n updateMany(\n filter: Record<string, unknown>,\n update: { $set: MongoRow },\n options?: { session?: MongooseSessionLike },\n ): Promise<MongooseWriteResult> | MongooseExecLike<MongooseWriteResult>;\n findOneAndUpdate(\n filter: Record<string, unknown>,\n update: { $set?: MongoRow; $setOnInsert?: MongoRow },\n options?: {\n upsert?: boolean;\n new?: boolean;\n returnDocument?: \"after\" | \"before\";\n session?: MongooseSessionLike;\n },\n ): MongooseQueryLike<MongoRow | null>;\n findOneAndDelete(\n filter: Record<string, unknown>,\n options?: { session?: MongooseSessionLike },\n ): MongooseQueryLike<MongoRow | null>;\n deleteMany(\n filter: Record<string, unknown>,\n options?: { session?: MongooseSessionLike },\n ): Promise<MongooseWriteResult> | MongooseExecLike<MongooseWriteResult>;\n};\n\nexport type MongooseFieldTransform = {\n encode?: (value: unknown) => unknown;\n decode?: (value: unknown) => unknown;\n};\n\nexport type MongooseDriverConfig<TSchema extends SchemaDefinition<any>> = {\n models: Record<ModelName<TSchema>, MongooseModelLike>;\n connection?: MongooseSessionSourceLike;\n startSession?: () => Promise<MongooseSessionLike>;\n transforms?: Partial<Record<string, Partial<Record<string, MongooseFieldTransform>>>>;\n};\n\nconst manifestCache = new WeakMap<object, SchemaManifest>();\n\nfunction getManifest(schema: SchemaDefinition<any>) {\n const cached = manifestCache.get(schema);\n if (cached) return cached;\n const next = createManifest(schema);\n manifestCache.set(schema, next);\n return next;\n}\n\nfunction identityField(model: ManifestModel) {\n if (model.fields.id) return model.fields.id;\n const uniqueField = Object.values(model.fields).find((field) => field.unique);\n if (uniqueField) return uniqueField;\n throw new Error(\n `Model \"${model.name}\" requires an \"id\" field or a unique field for the Mongoose runtime.`,\n );\n}\n\nfunction applyDefault(value: unknown, field: ManifestField) {\n if (value !== undefined) return value;\n if (field.generated === \"id\") return randomUUID();\n if (field.generated === \"now\") return new Date();\n if (typeof field.defaultValue === \"function\") {\n return (field.defaultValue as () => unknown)();\n }\n return field.defaultValue;\n}\n\nfunction escapeRegex(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction mergeWhere(...clauses: Array<MongoWhere | undefined>) {\n const defined = clauses.filter(Boolean) as MongoWhere[];\n if (!defined.length) return undefined;\n if (defined.length === 1) return defined[0];\n return {\n AND: defined,\n } as MongoWhere;\n}\n\nfunction parseReference(reference?: string) {\n if (!reference) return null;\n const [model, field] = reference.split(\".\");\n if (!model || !field) return null;\n return { model, field };\n}\n\nfunction removeOverlappingInsertFields(insertData: MongoRow, updateData: MongoRow) {\n const output: MongoRow = {};\n\n for (const [key, value] of Object.entries(insertData)) {\n if (Object.prototype.hasOwnProperty.call(updateData, key)) continue;\n output[key] = value;\n }\n\n return output;\n}\n\nfunction isExecLike<TResult>(value: unknown): value is MongooseExecLike<TResult> {\n return !!value && typeof value === \"object\" && \"exec\" in value;\n}\n\nasync function execute<TResult>(\n operation: Promise<TResult> | MongooseExecLike<TResult>,\n session?: MongooseSessionLike,\n) {\n if (isExecLike<TResult>(operation)) {\n const query =\n session && typeof operation.session === \"function\" ? operation.session(session) : operation;\n return query.exec();\n }\n return operation;\n}\n\nasync function normalizeCreated(doc: Promise<MongoRow | MongoRow[]>) {\n const result = await doc;\n return Array.isArray(result) ? (result[0] ?? null) : result;\n}\n\nfunction createMongooseDriverInternal<TSchema extends SchemaDefinition<any>>(\n config: MongooseDriverConfig<TSchema>,\n state: {\n session?: MongooseSessionLike;\n } = {},\n): OrmDriver<TSchema> {\n function getModel(modelName: ModelName<TSchema>) {\n const model = config.models[modelName];\n if (!model) {\n throw new Error(`No Mongoose model was provided for schema model \"${modelName}\".`);\n }\n return model;\n }\n\n function fieldTransform(modelName: string, fieldName: string) {\n return config.transforms?.[modelName]?.[fieldName];\n }\n\n function encodeValue(modelName: string, field: ManifestField, value: unknown) {\n if (value === undefined) return value;\n if (value === null) return null;\n\n let next = value;\n if (field.kind === \"boolean\") {\n next = Boolean(next);\n } else if (field.kind === \"integer\") {\n next = Number(next);\n } else if (field.kind === \"datetime\") {\n next = next instanceof Date ? next : new Date(String(next));\n }\n\n const transform = fieldTransform(modelName, field.name);\n return transform?.encode ? transform.encode(next) : next;\n }\n\n function decodeValue(modelName: string, field: ManifestField, value: unknown) {\n if (value === undefined) return value;\n if (value === null) return null;\n\n const transform = fieldTransform(modelName, field.name);\n let next = transform?.decode ? transform.decode(value) : value;\n\n if (field.kind === \"boolean\") {\n return Boolean(next);\n }\n if (field.kind === \"integer\") {\n return typeof next === \"number\" ? next : Number(next);\n }\n if (field.kind === \"datetime\") {\n return next instanceof Date ? next : new Date(String(next));\n }\n if (field.kind === \"id\") {\n return typeof next === \"string\" ? next : String(next);\n }\n return next;\n }\n\n function buildDocument(model: ManifestModel, data: Partial<Record<string, unknown>>) {\n const doc: MongoRow = {};\n\n for (const field of Object.values(model.fields)) {\n const value = applyDefault(data[field.name], field);\n if (value !== undefined) {\n doc[field.column] = encodeValue(model.name, field, value);\n }\n }\n\n return doc;\n }\n\n function buildUpdate(model: ManifestModel, data: Partial<Record<string, unknown>>) {\n const update: MongoRow = {};\n\n for (const [fieldName, value] of Object.entries(data)) {\n if (value === undefined) continue;\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n update[field.column] = encodeValue(model.name, field, value);\n }\n\n return update;\n }\n\n function decodeRow(model: ManifestModel, doc: MongoRow) {\n const output: MongoRow = {};\n\n for (const field of Object.values(model.fields)) {\n output[field.name] = decodeValue(model.name, field, doc[field.column]);\n }\n\n return output;\n }\n\n function compileFieldFilter(\n model: ManifestModel,\n fieldName: string,\n filter: unknown,\n ): Record<string, unknown> {\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n\n if (!isOperatorFilterObject(filter)) {\n return {\n [field.column]: encodeValue(model.name, field, filter),\n };\n }\n\n const operations: Record<string, unknown> = {};\n\n if (\"eq\" in filter) {\n operations.$eq = encodeValue(model.name, field, filter.eq);\n }\n if (\"not\" in filter) {\n operations.$ne = encodeValue(model.name, field, filter.not);\n }\n if (\"in\" in filter) {\n const values = Array.isArray(filter.in) ? filter.in : [];\n operations.$in = values.map((value) => encodeValue(model.name, field, value));\n }\n if (\"contains\" in filter) {\n operations.$regex = new RegExp(escapeRegex(String(filter.contains ?? \"\")));\n }\n if (\"gt\" in filter) {\n operations.$gt = encodeValue(model.name, field, filter.gt);\n }\n if (\"gte\" in filter) {\n operations.$gte = encodeValue(model.name, field, filter.gte);\n }\n if (\"lt\" in filter) {\n operations.$lt = encodeValue(model.name, field, filter.lt);\n }\n if (\"lte\" in filter) {\n operations.$lte = encodeValue(model.name, field, filter.lte);\n }\n\n return {\n [field.column]: operations,\n };\n }\n\n function compileWhere(\n model: ManifestModel,\n where: MongoWhere | undefined,\n ): Record<string, unknown> {\n if (!where) return {};\n\n const clauses: Record<string, unknown>[] = [];\n\n for (const [key, value] of Object.entries(where)) {\n if (key === \"AND\") {\n const nested = (Array.isArray(value) ? value : [])\n .map((item) => compileWhere(model, item as MongoWhere))\n .filter((item) => Object.keys(item).length > 0);\n if (nested.length) clauses.push({ $and: nested });\n continue;\n }\n\n if (key === \"OR\") {\n const nested = (Array.isArray(value) ? value : [])\n .map((item) => compileWhere(model, item as MongoWhere))\n .filter((item) => Object.keys(item).length > 0);\n if (nested.length) clauses.push({ $or: nested });\n continue;\n }\n\n if (key === \"NOT\") {\n const nested = compileWhere(model, value as MongoWhere);\n if (Object.keys(nested).length) clauses.push({ $nor: [nested] });\n continue;\n }\n\n clauses.push(compileFieldFilter(model, key, value));\n }\n\n if (!clauses.length) return {};\n if (clauses.length === 1) return clauses[0]!;\n return {\n $and: clauses,\n };\n }\n\n function compileOrderBy(\n model: ManifestModel,\n orderBy: Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n ) {\n if (!orderBy) return undefined;\n\n const output: Record<string, 1 | -1> = {};\n for (const [fieldName, direction] of Object.entries(orderBy)) {\n const field = model.fields[fieldName];\n if (!field) continue;\n output[field.column] = direction === \"desc\" ? -1 : 1;\n }\n\n return Object.keys(output).length ? output : undefined;\n }\n\n async function runFindMany(\n model: ManifestModel,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n take?: number;\n skip?: number;\n },\n ) {\n const query = getModel(model.name as ModelName<TSchema>).find(compileWhere(model, args.where));\n const orderBy = compileOrderBy(model, args.orderBy);\n if (orderBy) query.sort(orderBy);\n if (args.skip !== undefined) query.skip(args.skip);\n if (args.take !== undefined) query.limit(args.take);\n if (state.session) query.session(state.session);\n query.lean();\n return query.exec();\n }\n\n async function runFindOne(\n model: ManifestModel,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n },\n ) {\n const orderBy = compileOrderBy(model, args.orderBy);\n if (orderBy) {\n const rows = await runFindMany(model, {\n ...args,\n take: 1,\n });\n return rows[0] ?? null;\n }\n\n const query = getModel(model.name as ModelName<TSchema>).findOne(\n compileWhere(model, args.where),\n );\n if (state.session) query.session(state.session);\n query.lean();\n return query.exec();\n }\n\n async function loadRows<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n take?: number;\n skip?: number;\n select?: TSelect;\n },\n ): Promise<Array<SelectedRecord<TSchema, TModelName, TSelect>>> {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const docs = await runFindMany(model, args);\n const rows = docs.map((doc) => decodeRow(model, doc));\n return Promise.all(rows.map((row) => projectRow(schema, modelName, row, args.select)));\n }\n\n async function loadOneRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n select?: TSelect;\n },\n ) {\n const rows = await loadRows(schema, modelName, {\n ...args,\n take: 1,\n });\n return rows[0] ?? null;\n }\n\n async function loadRawOneRow<TModelName extends ModelName<TSchema>>(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: MongoWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n },\n ) {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const doc = await runFindOne(model, args);\n return doc ? decodeRow(model, doc) : null;\n }\n\n async function projectRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n row: MongoRow,\n select?: TSelect,\n ): Promise<SelectedRecord<TSchema, TModelName, TSelect>> {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const output: MongoRow = {};\n\n if (!select) {\n for (const fieldName of Object.keys(model.fields)) {\n output[fieldName] = row[fieldName];\n }\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n for (const [key, value] of Object.entries(select)) {\n if (value === undefined) continue;\n\n if (key in model.fields && value === true) {\n output[key] = row[key];\n continue;\n }\n\n if (key in schema.models[modelName].relations) {\n output[key] = await resolveRelation(\n schema,\n modelName,\n key as RelationName<TSchema, TModelName>,\n row,\n value as true | FindManyArgs<TSchema, any, any>,\n );\n }\n }\n\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n async function resolveRelation<\n TModelName extends ModelName<TSchema>,\n TRelationName extends RelationName<TSchema, TModelName>,\n >(\n schema: TSchema,\n modelName: TModelName,\n relationName: TRelationName,\n row: MongoRow,\n value: true | FindManyArgs<TSchema, any, any>,\n ) {\n const manifest = getManifest(schema);\n const relation = schema.models[modelName].relations[relationName];\n const relationArgs = value === true ? {} : value;\n\n if (relation.kind === \"belongsTo\") {\n const foreignField = manifest.models[modelName].fields[relation.foreignKey];\n const targetReference = parseReference(foreignField?.references);\n const targetField =\n targetReference?.field ?? identityField(manifest.models[relation.target]).name;\n const foreignValue = row[relation.foreignKey];\n\n if (foreignValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [targetField]: foreignValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasOne\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasMany\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n const throughModel = manifest.models[relation.through];\n const throughFromReference = parseReference(throughModel.fields[relation.from]?.references);\n const throughToReference = parseReference(throughModel.fields[relation.to]?.references);\n const sourceField =\n throughFromReference?.field ?? identityField(manifest.models[modelName]).name;\n const targetField =\n throughToReference?.field ?? identityField(manifest.models[relation.target]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n const throughRows = await loadRows(schema, relation.through as ModelName<TSchema>, {\n where: {\n [relation.from]: sourceValue,\n } as MongoWhere,\n });\n\n const targetIds = throughRows\n .map((item: MongoRow) => item[relation.to])\n .filter((item) => item != null);\n if (!targetIds.length) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as MongoWhere | undefined,\n {\n [targetField]: {\n in: targetIds,\n },\n } as MongoWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n async function runTransaction<TResult>(run: (driver: OrmDriver<TSchema>) => Promise<TResult>) {\n if (state.session) {\n return run(createMongooseDriverInternal(config, state));\n }\n\n const startSession =\n config.startSession ?? config.connection?.startSession.bind(config.connection);\n if (!startSession) {\n return run(createMongooseDriverInternal(config, state));\n }\n\n const session = await startSession();\n try {\n if (session.withTransaction) {\n return await session.withTransaction(() =>\n run(\n createMongooseDriverInternal(config, {\n session,\n }),\n ),\n );\n }\n\n if (session.startTransaction && session.commitTransaction && session.abortTransaction) {\n session.startTransaction();\n try {\n const result = await run(\n createMongooseDriverInternal(config, {\n session,\n }),\n );\n await session.commitTransaction();\n return result;\n } catch (error) {\n await session.abortTransaction();\n throw error;\n }\n }\n\n return run(\n createMongooseDriverInternal(config, {\n session,\n }),\n );\n } finally {\n await session.endSession?.();\n }\n }\n\n const driver: OrmDriver<TSchema> = {\n async findMany(schema, model, args) {\n return loadRows(schema, model, args);\n },\n async findFirst(schema, model, args) {\n return loadOneRow(schema, model, args);\n },\n async findUnique(schema, model, args) {\n const manifest = getManifest(schema);\n requireUniqueLookup(\n manifest.models[model],\n args.where as Record<string, unknown>,\n \"FindUnique\",\n );\n return loadOneRow(schema, model, args);\n },\n async count(schema, model, args?: CountArgs<TSchema, ModelName<TSchema>>) {\n const manifest = getManifest(schema);\n const result = await execute(\n getModel(model).countDocuments(\n compileWhere(manifest.models[model], args?.where as MongoWhere | undefined),\n ),\n state.session,\n );\n return Number(result);\n },\n async create(schema, model, args) {\n const manifest = getManifest(schema);\n const document = buildDocument(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n );\n const created = await normalizeCreated(\n state.session\n ? getModel(model).create([document], { session: state.session })\n : getModel(model).create(document),\n );\n if (!created) {\n throw new Error(`Create on model \"${String(model)}\" did not return a document.`);\n }\n const row = decodeRow(manifest.models[model], created);\n return projectRow(schema, model, row, args.select) as Promise<any>;\n },\n async createMany(schema, model, args) {\n const results: unknown[] = [];\n for (const entry of args.data) {\n results.push(\n await driver.create(schema, model, {\n data: entry,\n select: args.select,\n } as CreateArgs<TSchema, ModelName<TSchema>, any>),\n );\n }\n return results as any;\n },\n async update(schema, model, args) {\n const manifest = getManifest(schema);\n const updated = await getModel(model)\n .findOneAndUpdate(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n {\n $set: buildUpdate(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n ),\n },\n {\n new: true,\n returnDocument: \"after\",\n session: state.session,\n },\n )\n .lean()\n .exec();\n\n if (!updated) return null;\n\n return projectRow(\n schema,\n model,\n decodeRow(manifest.models[model], updated),\n args.select,\n ) as Promise<any>;\n },\n async updateMany(schema, model, args) {\n const manifest = getManifest(schema);\n const update = buildUpdate(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n );\n if (!Object.keys(update).length) return 0;\n const result = await execute(\n getModel(model).updateMany(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n {\n $set: update,\n },\n state.session ? { session: state.session } : undefined,\n ),\n state.session,\n );\n return Number(result.modifiedCount ?? result.matchedCount ?? 0);\n },\n async upsert(schema, model, args) {\n const manifest = getManifest(schema);\n const modelManifest = manifest.models[model];\n const lookup = requireUniqueLookup(\n modelManifest,\n args.where as Record<string, unknown>,\n \"Upsert\",\n );\n validateUniqueLookupUpdateData(\n modelManifest,\n args.update as Partial<Record<string, unknown>>,\n lookup,\n \"Upsert\",\n );\n const created = buildDocument(\n modelManifest,\n mergeUniqueLookupCreateData(\n modelManifest,\n args.create as Partial<Record<string, unknown>>,\n lookup,\n \"Upsert\",\n ),\n );\n const update = buildUpdate(modelManifest, args.update as Partial<Record<string, unknown>>);\n const updated = await getModel(model)\n .findOneAndUpdate(\n compileWhere(modelManifest, args.where as MongoWhere),\n {\n $set: update,\n $setOnInsert: removeOverlappingInsertFields(created, update),\n },\n {\n upsert: true,\n new: true,\n returnDocument: \"after\",\n session: state.session,\n },\n )\n .lean()\n .exec();\n\n if (!updated) {\n throw new Error(`Upsert on model \"${String(model)}\" did not return a document.`);\n }\n\n return projectRow(\n schema,\n model,\n decodeRow(modelManifest, updated),\n args.select,\n ) as Promise<any>;\n },\n async delete(schema, model, args) {\n const manifest = getManifest(schema);\n const deleted = await getModel(model)\n .findOneAndDelete(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n state.session ? { session: state.session } : undefined,\n )\n .lean()\n .exec();\n return deleted ? 1 : 0;\n },\n async deleteMany(schema, model, args) {\n const manifest = getManifest(schema);\n const result = await execute(\n getModel(model).deleteMany(\n compileWhere(manifest.models[model], args.where as MongoWhere),\n state.session ? { session: state.session } : undefined,\n ),\n state.session,\n );\n return Number(result.deletedCount ?? 0);\n },\n async transaction(_schema, run) {\n return runTransaction(run);\n },\n };\n\n return driver;\n}\n\nexport function createMongooseDriver<TSchema extends SchemaDefinition<any>>(\n config: MongooseDriverConfig<TSchema>,\n) {\n return createMongooseDriverInternal(config);\n}\n"],"mappings":"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","names":["targetField","sourceField","sourceValue"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farming-labs/orm-mongoose",
3
- "version": "0.0.10",
3
+ "version": "0.0.12",
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.10"
22
+ "@farming-labs/orm": "0.0.12"
23
23
  },
24
24
  "devDependencies": {
25
25
  "mongoose": "^8.19.2",