@prisma-next/adapter-mongo 0.5.0-dev.14 → 0.5.0-dev.16

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/control.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { a as mongoInt32Codec, c as mongoVectorCodec, i as mongoDoubleCodec, n as mongoBooleanCodec, o as mongoObjectIdCodec, r as mongoDateCodec, s as mongoStringCodec, t as createMongoAdapter } from "./mongo-adapter-B3Mh3rXi.mjs";
1
+ import { a as mongoInt32Codec, c as mongoVectorCodec, i as mongoDoubleCodec, n as mongoBooleanCodec, o as mongoObjectIdCodec, r as mongoDateCodec, s as mongoStringCodec, t as createMongoAdapter } from "./mongo-adapter-DVK2I5Hs.mjs";
2
2
  import { MongoServerError } from "mongodb";
3
3
  import { keysToKeySpec } from "@prisma-next/mongo-query-ast/control";
4
4
  import { MongoSchemaCollection, MongoSchemaCollectionOptions, MongoSchemaIR, MongoSchemaIndex, MongoSchemaValidator } from "@prisma-next/mongo-schema-ir";
package/dist/index.d.mts CHANGED
@@ -7,14 +7,10 @@ import { OperationDescriptor } from "@prisma-next/operations";
7
7
  //#region src/core/operations.d.ts
8
8
  declare const mongoVectorNearOperation: Readonly<{
9
9
  method: "near";
10
- args: {
10
+ self: {
11
11
  codecId: "mongo/vector@1";
12
- nullable: boolean;
13
- }[];
14
- returns: {
15
- codecId: "mongo/int32@1";
16
- nullable: boolean;
17
12
  };
13
+ impl: () => never;
18
14
  }>;
19
15
  declare const mongoVectorOperationDescriptors: readonly OperationDescriptor[];
20
16
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/core/operations.ts","../src/lowering.ts","../src/mongo-adapter.ts"],"sourcesContent":[],"mappings":";;;;;;;cAGa,0BAAwB;;;;;;EAAxB,OAAA,EAAA;IAMA,OAAA,EAAA,eAAA;;;;AC8HG,cD9HH,+BC8HkC,EAAA,SD9HQ,mBC8HR,EAAA;;;iBAA/B,YAAA,OAAmB;iBAIb,WAAA,SACZ,0BACC,qBACR,QAAQ;iBA8DW,UAAA,QACb,6BACE,qBACR,QAAQ;iBA+MW,aAAA,SACZ,cAAc,8BACb,qBACR,QAAQ,MAAM;;;iBC/OD,kBAAA,UAA4B,qBAAqB"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/core/operations.ts","../src/lowering.ts","../src/mongo-adapter.ts"],"sourcesContent":[],"mappings":";;;;;;;cAGa,0BAAwB;;;;;;AAArC,CAAA,CAAA;AAMa,cAAA,+BAA0C,EAAA,SAAA,mBAAmB,EAAA;;;iBC8H1D,YAAA,OAAmB;iBAIb,WAAA,SACZ,0BACC,qBACR,QAAQ;iBA8DW,UAAA,QACb,6BACE,qBACR,QAAQ;iBA+MW,aAAA,SACZ,cAAc,8BACb,qBACR,QAAQ,MAAM;;;iBC/OD,kBAAA,UAA4B,qBAAqB"}
package/dist/index.mjs CHANGED
@@ -1,16 +1,10 @@
1
- import { d as lowerPipeline, f as lowerStage, l as lowerAggExpr, m as MONGO_VECTOR_CODEC_ID, p as MONGO_INT32_CODEC_ID, t as createMongoAdapter, u as lowerFilter } from "./mongo-adapter-B3Mh3rXi.mjs";
1
+ import { d as lowerPipeline, f as lowerStage, l as lowerAggExpr, p as MONGO_VECTOR_CODEC_ID, t as createMongoAdapter, u as lowerFilter } from "./mongo-adapter-DVK2I5Hs.mjs";
2
2
 
3
3
  //#region src/core/operations.ts
4
4
  const mongoVectorNearOperation = Object.freeze({
5
5
  method: "near",
6
- args: [{
7
- codecId: MONGO_VECTOR_CODEC_ID,
8
- nullable: false
9
- }],
10
- returns: {
11
- codecId: MONGO_INT32_CODEC_ID,
12
- nullable: false
13
- }
6
+ self: { codecId: MONGO_VECTOR_CODEC_ID },
7
+ impl: () => void 0
14
8
  });
15
9
  const mongoVectorOperationDescriptors = [mongoVectorNearOperation];
16
10
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["mongoVectorOperationDescriptors: readonly OperationDescriptor[]"],"sources":["../src/core/operations.ts"],"sourcesContent":["import type { OperationDescriptor } from '@prisma-next/operations';\nimport { MONGO_INT32_CODEC_ID, MONGO_VECTOR_CODEC_ID } from './codec-ids';\n\nexport const mongoVectorNearOperation = Object.freeze({\n method: 'near',\n args: [{ codecId: MONGO_VECTOR_CODEC_ID, nullable: false }],\n returns: { codecId: MONGO_INT32_CODEC_ID, nullable: false },\n}) satisfies OperationDescriptor;\n\nexport const mongoVectorOperationDescriptors: readonly OperationDescriptor[] = [\n mongoVectorNearOperation,\n];\n"],"mappings":";;;AAGA,MAAa,2BAA2B,OAAO,OAAO;CACpD,QAAQ;CACR,MAAM,CAAC;EAAE,SAAS;EAAuB,UAAU;EAAO,CAAC;CAC3D,SAAS;EAAE,SAAS;EAAsB,UAAU;EAAO;CAC5D,CAAC;AAEF,MAAaA,kCAAkE,CAC7E,yBACD"}
1
+ {"version":3,"file":"index.mjs","names":["mongoVectorOperationDescriptors: readonly OperationDescriptor[]"],"sources":["../src/core/operations.ts"],"sourcesContent":["import type { OperationDescriptor } from '@prisma-next/operations';\nimport { MONGO_VECTOR_CODEC_ID } from './codec-ids';\n\nexport const mongoVectorNearOperation = Object.freeze({\n method: 'near',\n self: { codecId: MONGO_VECTOR_CODEC_ID },\n impl: () => undefined as never,\n}) satisfies OperationDescriptor;\n\nexport const mongoVectorOperationDescriptors: readonly OperationDescriptor[] = [\n mongoVectorNearOperation,\n];\n"],"mappings":";;;AAGA,MAAa,2BAA2B,OAAO,OAAO;CACpD,QAAQ;CACR,MAAM,EAAE,SAAS,uBAAuB;CACxC,YAAY;CACb,CAAC;AAEF,MAAaA,kCAAkE,CAC7E,yBACD"}
@@ -518,5 +518,5 @@ function createMongoAdapter(codecs) {
518
518
  }
519
519
 
520
520
  //#endregion
521
- export { mongoInt32Codec as a, mongoVectorCodec as c, lowerPipeline as d, lowerStage as f, mongoDoubleCodec as i, lowerAggExpr as l, MONGO_VECTOR_CODEC_ID as m, mongoBooleanCodec as n, mongoObjectIdCodec as o, MONGO_INT32_CODEC_ID as p, mongoDateCodec as r, mongoStringCodec as s, createMongoAdapter as t, lowerFilter as u };
522
- //# sourceMappingURL=mongo-adapter-B3Mh3rXi.mjs.map
521
+ export { mongoInt32Codec as a, mongoVectorCodec as c, lowerPipeline as d, lowerStage as f, mongoDoubleCodec as i, lowerAggExpr as l, mongoBooleanCodec as n, mongoObjectIdCodec as o, MONGO_VECTOR_CODEC_ID as p, mongoDateCodec as r, mongoStringCodec as s, createMongoAdapter as t, lowerFilter as u };
522
+ //# sourceMappingURL=mongo-adapter-DVK2I5Hs.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"mongo-adapter-B3Mh3rXi.mjs","names":["result: Record<string, unknown>","entries: Array<[string, unknown]>","aggExprLoweringVisitor: MongoAggExprVisitor<unknown>","loweredArgs: unknown","vars: Record<string, unknown>","_exhaustive: never","result: Record<string, unknown>","projection: Record<string, unknown>","lookup: Record<string, unknown>","unwind: Record<string, unknown>","group: Record<string, unknown>","unionWith: Record<string, unknown>","bucket: Record<string, unknown>","bucketAuto: Record<string, unknown>","geoNear: Record<string, unknown>","facet: Record<string, unknown>","graphLookup: Record<string, unknown>","merge: Record<string, unknown>","swf: Record<string, unknown>","output: Record<string, unknown>","densify: Record<string, unknown>","fill: Record<string, unknown>","entry: Record<string, unknown>","search: Record<string, unknown>","searchMeta: Record<string, unknown>","vs: Record<string, unknown>","#codecs","#resolveDocument","result: Record<string, unknown>","#lowerUpdate","_exhaustive: never"],"sources":["../src/core/codec-ids.ts","../src/resolve-value.ts","../src/lowering.ts","../src/core/codecs.ts","../src/mongo-adapter.ts"],"sourcesContent":["export const MONGO_OBJECTID_CODEC_ID = 'mongo/objectId@1' as const;\nexport const MONGO_STRING_CODEC_ID = 'mongo/string@1' as const;\nexport const MONGO_DOUBLE_CODEC_ID = 'mongo/double@1' as const;\nexport const MONGO_INT32_CODEC_ID = 'mongo/int32@1' as const;\nexport const MONGO_BOOLEAN_CODEC_ID = 'mongo/bool@1' as const;\nexport const MONGO_DATE_CODEC_ID = 'mongo/date@1' as const;\nexport const MONGO_VECTOR_CODEC_ID = 'mongo/vector@1' as const;\n","import { runtimeError } from '@prisma-next/framework-components/runtime';\nimport type { MongoCodecRegistry } from '@prisma-next/mongo-codec';\nimport type { MongoValue } from '@prisma-next/mongo-value';\nimport { MongoParamRef } from '@prisma-next/mongo-value';\n\n/**\n * Resolves a `MongoValue` (which may contain `MongoParamRef` leaves) into the\n * driver-ready wire shape. When a leaf has a `codecId` and the registry has a\n * codec for it, the codec's async `encode` is awaited so codecs may perform\n * asynchronous work (e.g. lookups, key derivations).\n *\n * Object/array nodes dispatch their child resolutions concurrently via\n * `Promise.all` so independent leaves encode in parallel.\n *\n * Codec encode failures are wrapped in a `RUNTIME.ENCODE_FAILED` envelope\n * (mirroring SQL's `wrapEncodeFailure` shape) with `{ label, codec }` details\n * and the original error attached on `cause`. An already-wrapped envelope is\n * re-thrown verbatim so nested resolvers don't double-wrap.\n */\nexport async function resolveValue(\n value: MongoValue,\n codecs?: MongoCodecRegistry,\n): Promise<unknown> {\n if (value instanceof MongoParamRef) {\n if (value.codecId && codecs) {\n const codec = codecs.get(value.codecId);\n if (codec?.encode) {\n try {\n return await codec.encode(value.value);\n } catch (error) {\n wrapEncodeFailure(error, value, codec.id);\n }\n }\n }\n return value.value;\n }\n if (value === null || typeof value !== 'object') {\n return value;\n }\n if (value instanceof Date) {\n return value;\n }\n if (Array.isArray(value)) {\n return Promise.all(value.map((v) => resolveValue(v, codecs)));\n }\n const entries = Object.entries(value);\n const resolved = await Promise.all(entries.map(([, val]) => resolveValue(val, codecs)));\n const result: Record<string, unknown> = {};\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n if (entry) {\n result[entry[0]] = resolved[i];\n }\n }\n return result;\n}\n\nfunction paramRefLabel(ref: MongoParamRef, codecId: string): string {\n return ref.name ?? codecId;\n}\n\nfunction isAlreadyEncodeFailure(error: unknown): boolean {\n return (\n error instanceof Error &&\n 'code' in error &&\n (error as Error & { code?: unknown }).code === 'RUNTIME.ENCODE_FAILED'\n );\n}\n\nfunction wrapEncodeFailure(error: unknown, ref: MongoParamRef, codecId: string): never {\n if (isAlreadyEncodeFailure(error)) {\n throw error;\n }\n const label = paramRefLabel(ref, codecId);\n const message = error instanceof Error ? error.message : String(error);\n const wrapped = runtimeError(\n 'RUNTIME.ENCODE_FAILED',\n `Failed to encode parameter ${label} with codec '${codecId}': ${message}`,\n { label, codec: codecId },\n );\n wrapped.cause = error;\n throw wrapped;\n}\n","import type { MongoCodecRegistry } from '@prisma-next/mongo-codec';\nimport type {\n MongoAggExpr,\n MongoAggExprVisitor,\n MongoFilterExpr,\n MongoGroupId,\n MongoPipelineStage,\n MongoProjectionValue,\n MongoWindowField,\n} from '@prisma-next/mongo-query-ast/execution';\nimport { isExprArray, isRecordArgs } from '@prisma-next/mongo-query-ast/execution';\nimport type { Document } from '@prisma-next/mongo-value';\nimport { resolveValue } from './resolve-value';\n\n// Biome flags `{ then: ... }` as a thenable object (noThenProperty). Build via Object.fromEntries to avoid.\nconst THEN_KEY = 'then';\n\nfunction condBranch(\n caseOrIf: MongoAggExpr,\n thenExpr: MongoAggExpr,\n elseExpr?: MongoAggExpr,\n): Record<string, unknown> {\n const entries: Array<[string, unknown]> = [\n [elseExpr ? 'if' : 'case', lowerAggExpr(caseOrIf)],\n [THEN_KEY, lowerAggExpr(thenExpr)],\n ];\n if (elseExpr) {\n entries.push(['else', lowerAggExpr(elseExpr)]);\n }\n return Object.fromEntries(entries);\n}\n\nconst aggExprLoweringVisitor: MongoAggExprVisitor<unknown> = {\n fieldRef(expr) {\n return `$${expr.path}`;\n },\n\n literal(expr) {\n return needsLiteralWrap(expr.value) ? { $literal: expr.value } : expr.value;\n },\n\n operator(expr) {\n const { args } = expr;\n let loweredArgs: unknown;\n if (isExprArray(args)) {\n loweredArgs = args.map((a) => lowerAggExpr(a));\n } else if (isRecordArgs(args)) {\n loweredArgs = lowerExprRecord(args);\n } else {\n loweredArgs = lowerAggExpr(args);\n }\n return { [expr.op]: loweredArgs };\n },\n\n accumulator(expr) {\n if (expr.arg === null) {\n return { [expr.op]: {} };\n }\n if (isRecordArgs(expr.arg)) {\n return { [expr.op]: lowerExprRecord(expr.arg) };\n }\n return { [expr.op]: lowerAggExpr(expr.arg) };\n },\n\n cond(expr) {\n return { $cond: condBranch(expr.condition, expr.then_, expr.else_) };\n },\n\n switch_(expr) {\n return {\n $switch: {\n branches: expr.branches.map((b) => condBranch(b.case_, b.then_)),\n default: lowerAggExpr(expr.default_),\n },\n };\n },\n\n filter(expr) {\n return {\n $filter: {\n input: lowerAggExpr(expr.input),\n cond: lowerAggExpr(expr.cond),\n as: expr.as,\n },\n };\n },\n\n map(expr) {\n return {\n $map: {\n input: lowerAggExpr(expr.input),\n in: lowerAggExpr(expr.in_),\n as: expr.as,\n },\n };\n },\n\n reduce(expr) {\n return {\n $reduce: {\n input: lowerAggExpr(expr.input),\n initialValue: lowerAggExpr(expr.initialValue),\n in: lowerAggExpr(expr.in_),\n },\n };\n },\n\n let_(expr) {\n const vars: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(expr.vars)) {\n vars[key] = lowerAggExpr(val);\n }\n return { $let: { vars, in: lowerAggExpr(expr.in_) } };\n },\n\n mergeObjects(expr) {\n return { $mergeObjects: expr.exprs.map((e) => lowerAggExpr(e)) };\n },\n};\n\nfunction needsLiteralWrap(value: unknown): boolean {\n if (typeof value === 'string' && value.startsWith('$')) {\n return true;\n }\n if (Array.isArray(value)) {\n return value.some((v) => needsLiteralWrap(v));\n }\n if (value !== null && typeof value === 'object') {\n return Object.entries(value as Record<string, unknown>).some(\n ([k, v]) => k.startsWith('$') || needsLiteralWrap(v),\n );\n }\n return false;\n}\n\nexport function lowerAggExpr(expr: MongoAggExpr): unknown {\n return expr.accept(aggExprLoweringVisitor);\n}\n\nexport async function lowerFilter(\n filter: MongoFilterExpr,\n codecs?: MongoCodecRegistry,\n): Promise<Document> {\n switch (filter.kind) {\n case 'field':\n return { [filter.field]: { [filter.op]: await resolveValue(filter.value, codecs) } };\n case 'and':\n return { $and: await Promise.all(filter.exprs.map((e) => lowerFilter(e, codecs))) };\n case 'or':\n return { $or: await Promise.all(filter.exprs.map((e) => lowerFilter(e, codecs))) };\n case 'not':\n return { $nor: [await lowerFilter(filter.expr, codecs)] };\n case 'exists':\n return { [filter.field]: { $exists: filter.exists } };\n case 'expr':\n return { $expr: lowerAggExpr(filter.aggExpr) };\n default: {\n const _exhaustive: never = filter;\n throw new Error(`Unhandled filter kind: ${(_exhaustive as MongoFilterExpr).kind}`);\n }\n }\n}\n\nfunction isAggExprNode(value: object): value is MongoAggExpr {\n return 'accept' in value && typeof value.accept === 'function';\n}\n\nfunction lowerGroupId(groupId: MongoGroupId): unknown {\n if (groupId === null) return null;\n if (isAggExprNode(groupId)) return lowerAggExpr(groupId);\n return lowerExprRecord(groupId);\n}\n\nfunction lowerExprRecord(\n fields: Readonly<Record<string, MongoAggExpr | ReadonlyArray<MongoAggExpr>>>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(fields)) {\n if (Array.isArray(val)) {\n result[key] = val.map((v: MongoAggExpr) => lowerAggExpr(v));\n } else {\n result[key] = lowerAggExpr(val as MongoAggExpr);\n }\n }\n return result;\n}\n\nfunction lowerProjectionValue(value: MongoProjectionValue): unknown {\n if (typeof value === 'number') return value;\n return lowerAggExpr(value);\n}\n\nfunction lowerWindowField(wf: MongoWindowField): Record<string, unknown> {\n const lowered = lowerAggExpr(wf.operator);\n if (typeof lowered !== 'object' || lowered === null) {\n throw new Error('Window field operator must lower to an object');\n }\n const result: Record<string, unknown> = { ...lowered };\n if (wf.window) {\n result['window'] = { ...wf.window };\n }\n return result;\n}\n\nexport async function lowerStage(\n stage: MongoPipelineStage,\n codecs?: MongoCodecRegistry,\n): Promise<Record<string, unknown>> {\n switch (stage.kind) {\n case 'match':\n return { $match: await lowerFilter(stage.filter, codecs) };\n case 'project': {\n const projection: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(stage.projection)) {\n projection[key] = lowerProjectionValue(val);\n }\n return { $project: projection };\n }\n case 'sort':\n return { $sort: { ...stage.sort } };\n case 'limit':\n return { $limit: stage.limit };\n case 'skip':\n return { $skip: stage.skip };\n case 'lookup': {\n const lookup: Record<string, unknown> = {\n from: stage.from,\n as: stage.as,\n };\n if (stage.localField !== undefined) lookup['localField'] = stage.localField;\n if (stage.foreignField !== undefined) lookup['foreignField'] = stage.foreignField;\n if (stage.pipeline) {\n lookup['pipeline'] = await Promise.all(stage.pipeline.map((s) => lowerStage(s, codecs)));\n }\n if (stage.let_) {\n lookup['let'] = lowerExprRecord(stage.let_);\n }\n return { $lookup: lookup };\n }\n case 'unwind': {\n const unwind: Record<string, unknown> = {\n path: stage.path,\n preserveNullAndEmptyArrays: stage.preserveNullAndEmptyArrays,\n };\n if (stage.includeArrayIndex !== undefined) {\n unwind['includeArrayIndex'] = stage.includeArrayIndex;\n }\n return { $unwind: unwind };\n }\n case 'group': {\n const group: Record<string, unknown> = { _id: lowerGroupId(stage.groupId) };\n for (const [key, acc] of Object.entries(stage.accumulators)) {\n group[key] = lowerAggExpr(acc);\n }\n return { $group: group };\n }\n case 'addFields':\n return { $addFields: lowerExprRecord(stage.fields) };\n case 'replaceRoot':\n return { $replaceRoot: { newRoot: lowerAggExpr(stage.newRoot) } };\n case 'count':\n return { $count: stage.field };\n case 'sortByCount':\n return { $sortByCount: lowerAggExpr(stage.expr) };\n case 'sample':\n return { $sample: { size: stage.size } };\n case 'redact':\n return { $redact: lowerAggExpr(stage.expr) };\n case 'out':\n return { $out: stage.db ? { db: stage.db, coll: stage.collection } : stage.collection };\n case 'unionWith': {\n const unionWith: Record<string, unknown> = { coll: stage.collection };\n if (stage.pipeline) {\n unionWith['pipeline'] = await Promise.all(stage.pipeline.map((s) => lowerStage(s, codecs)));\n }\n return { $unionWith: unionWith };\n }\n case 'bucket': {\n const bucket: Record<string, unknown> = {\n groupBy: lowerAggExpr(stage.groupBy),\n boundaries: [...stage.boundaries],\n };\n if (stage.default_ !== undefined) bucket['default'] = stage.default_;\n if (stage.output) bucket['output'] = lowerExprRecord(stage.output);\n return { $bucket: bucket };\n }\n case 'bucketAuto': {\n const bucketAuto: Record<string, unknown> = {\n groupBy: lowerAggExpr(stage.groupBy),\n buckets: stage.buckets,\n };\n if (stage.output) bucketAuto['output'] = lowerExprRecord(stage.output);\n if (stage.granularity !== undefined) bucketAuto['granularity'] = stage.granularity;\n return { $bucketAuto: bucketAuto };\n }\n case 'geoNear': {\n const geoNear: Record<string, unknown> = {\n near: stage.near,\n distanceField: stage.distanceField,\n };\n if (stage.spherical !== undefined) geoNear['spherical'] = stage.spherical;\n if (stage.maxDistance !== undefined) geoNear['maxDistance'] = stage.maxDistance;\n if (stage.minDistance !== undefined) geoNear['minDistance'] = stage.minDistance;\n if (stage.query) geoNear['query'] = await lowerFilter(stage.query, codecs);\n if (stage.key !== undefined) geoNear['key'] = stage.key;\n if (stage.distanceMultiplier !== undefined)\n geoNear['distanceMultiplier'] = stage.distanceMultiplier;\n if (stage.includeLocs !== undefined) geoNear['includeLocs'] = stage.includeLocs;\n return { $geoNear: geoNear };\n }\n case 'facet': {\n const facetEntries = Object.entries(stage.facets);\n const facetPipelines = await Promise.all(\n facetEntries.map(([, pipeline]) => Promise.all(pipeline.map((s) => lowerStage(s, codecs)))),\n );\n const facet: Record<string, unknown> = {};\n for (let i = 0; i < facetEntries.length; i++) {\n const entry = facetEntries[i];\n if (entry) {\n facet[entry[0]] = facetPipelines[i];\n }\n }\n return { $facet: facet };\n }\n case 'graphLookup': {\n const graphLookup: Record<string, unknown> = {\n from: stage.from,\n startWith: lowerAggExpr(stage.startWith),\n connectFromField: stage.connectFromField,\n connectToField: stage.connectToField,\n as: stage.as,\n };\n if (stage.maxDepth !== undefined) graphLookup['maxDepth'] = stage.maxDepth;\n if (stage.depthField !== undefined) graphLookup['depthField'] = stage.depthField;\n if (stage.restrictSearchWithMatch)\n graphLookup['restrictSearchWithMatch'] = await lowerFilter(\n stage.restrictSearchWithMatch,\n codecs,\n );\n return { $graphLookup: graphLookup };\n }\n case 'merge': {\n const merge: Record<string, unknown> = { into: stage.into };\n if (stage.on !== undefined) merge['on'] = stage.on;\n if (stage.whenMatched !== undefined) {\n merge['whenMatched'] = Array.isArray(stage.whenMatched)\n ? await Promise.all(stage.whenMatched.map((s) => lowerStage(s, codecs)))\n : stage.whenMatched;\n }\n if (stage.whenNotMatched !== undefined) merge['whenNotMatched'] = stage.whenNotMatched;\n return { $merge: merge };\n }\n case 'setWindowFields': {\n const swf: Record<string, unknown> = {};\n if (stage.partitionBy) swf['partitionBy'] = lowerAggExpr(stage.partitionBy);\n if (stage.sortBy) swf['sortBy'] = { ...stage.sortBy };\n const output: Record<string, unknown> = {};\n for (const [key, wf] of Object.entries(stage.output)) {\n output[key] = lowerWindowField(wf);\n }\n swf['output'] = output;\n return { $setWindowFields: swf };\n }\n case 'densify': {\n const densify: Record<string, unknown> = {\n field: stage.field,\n range: { ...stage.range },\n };\n if (stage.partitionByFields) densify['partitionByFields'] = [...stage.partitionByFields];\n return { $densify: densify };\n }\n case 'fill': {\n const fill: Record<string, unknown> = {};\n if (stage.partitionBy) fill['partitionBy'] = lowerAggExpr(stage.partitionBy);\n if (stage.partitionByFields) fill['partitionByFields'] = [...stage.partitionByFields];\n if (stage.sortBy) fill['sortBy'] = { ...stage.sortBy };\n const output: Record<string, unknown> = {};\n for (const [key, fo] of Object.entries(stage.output)) {\n const entry: Record<string, unknown> = {};\n if (fo.method !== undefined) entry['method'] = fo.method;\n if (fo.value !== undefined) entry['value'] = lowerAggExpr(fo.value);\n output[key] = entry;\n }\n fill['output'] = output;\n return { $fill: fill };\n }\n case 'search': {\n const search: Record<string, unknown> = { ...stage.config };\n if (stage.index !== undefined) search['index'] = stage.index;\n return { $search: search };\n }\n case 'searchMeta': {\n const searchMeta: Record<string, unknown> = { ...stage.config };\n if (stage.index !== undefined) searchMeta['index'] = stage.index;\n return { $searchMeta: searchMeta };\n }\n case 'vectorSearch': {\n const vs: Record<string, unknown> = {\n index: stage.index,\n path: stage.path,\n queryVector: [...stage.queryVector],\n numCandidates: stage.numCandidates,\n limit: stage.limit,\n };\n if (stage.filter) vs['filter'] = { ...stage.filter };\n return { $vectorSearch: vs };\n }\n default: {\n const _exhaustive: never = stage;\n throw new Error(`Unhandled stage kind: ${(_exhaustive as MongoPipelineStage).kind}`);\n }\n }\n}\n\nexport async function lowerPipeline(\n stages: ReadonlyArray<MongoPipelineStage>,\n codecs?: MongoCodecRegistry,\n): Promise<Array<Record<string, unknown>>> {\n return Promise.all(stages.map((s) => lowerStage(s, codecs)));\n}\n","import { mongoCodec } from '@prisma-next/mongo-codec';\nimport { ObjectId } from 'mongodb';\nimport {\n MONGO_BOOLEAN_CODEC_ID,\n MONGO_DATE_CODEC_ID,\n MONGO_DOUBLE_CODEC_ID,\n MONGO_INT32_CODEC_ID,\n MONGO_OBJECTID_CODEC_ID,\n MONGO_STRING_CODEC_ID,\n MONGO_VECTOR_CODEC_ID,\n} from './codec-ids';\n\nexport const mongoObjectIdCodec = mongoCodec({\n typeId: MONGO_OBJECTID_CODEC_ID,\n targetTypes: ['objectId'],\n traits: ['equality'],\n decode: (wire: ObjectId) => wire.toHexString(),\n encode: (value: string) => new ObjectId(value),\n});\n\nexport const mongoStringCodec = mongoCodec({\n typeId: MONGO_STRING_CODEC_ID,\n targetTypes: ['string'],\n traits: ['equality', 'order', 'textual'],\n decode: (wire: string) => wire,\n encode: (value: string) => value,\n});\n\nexport const mongoDoubleCodec = mongoCodec({\n typeId: MONGO_DOUBLE_CODEC_ID,\n targetTypes: ['double'],\n traits: ['equality', 'order', 'numeric'],\n decode: (wire: number) => wire,\n encode: (value: number) => value,\n});\n\nexport const mongoInt32Codec = mongoCodec({\n typeId: MONGO_INT32_CODEC_ID,\n targetTypes: ['int'],\n traits: ['equality', 'order', 'numeric'],\n decode: (wire: number) => wire,\n encode: (value: number) => value,\n});\n\nexport const mongoBooleanCodec = mongoCodec({\n typeId: MONGO_BOOLEAN_CODEC_ID,\n targetTypes: ['bool'],\n traits: ['equality', 'boolean'],\n decode: (wire: boolean) => wire,\n encode: (value: boolean) => value,\n});\n\nexport const mongoDateCodec = mongoCodec({\n typeId: MONGO_DATE_CODEC_ID,\n targetTypes: ['date'],\n traits: ['equality', 'order'],\n decode: (wire: Date) => wire,\n encode: (value: Date) => value,\n encodeJson: (value: Date) => value.toISOString(),\n decodeJson: (json) => {\n if (typeof json !== 'string') throw new Error('expected ISO date string');\n return new Date(json);\n },\n});\n\nexport const mongoVectorCodec = mongoCodec({\n typeId: MONGO_VECTOR_CODEC_ID,\n targetTypes: ['vector'],\n traits: ['equality'],\n decode: (wire: readonly number[]) => wire,\n encode: (value: readonly number[]) => value,\n renderOutputType: (typeParams) => {\n const length = typeParams['length'];\n if (length === undefined) return undefined;\n if (typeof length !== 'number' || !Number.isFinite(length) || !Number.isInteger(length)) {\n throw new Error('renderOutputType: expected positive integer \"length\" for Vector');\n }\n return `Vector<${length}>`;\n },\n});\n","import { createMongoCodecRegistry, type MongoCodecRegistry } from '@prisma-next/mongo-codec';\nimport type { MongoAdapter } from '@prisma-next/mongo-lowering';\nimport type {\n MongoQueryPlan,\n MongoUpdatePipelineStage,\n MongoUpdateSpec,\n} from '@prisma-next/mongo-query-ast/execution';\nimport type { Document, MongoExpr } from '@prisma-next/mongo-value';\nimport type { AnyMongoWireCommand } from '@prisma-next/mongo-wire';\nimport {\n AggregateWireCommand,\n DeleteManyWireCommand,\n DeleteOneWireCommand,\n FindOneAndDeleteWireCommand,\n FindOneAndUpdateWireCommand,\n InsertManyWireCommand,\n InsertOneWireCommand,\n UpdateManyWireCommand,\n UpdateOneWireCommand,\n} from '@prisma-next/mongo-wire';\nimport { lowerFilter, lowerPipeline, lowerStage } from './lowering';\nimport { resolveValue } from './resolve-value';\n\nfunction isUpdatePipeline(\n update: MongoUpdateSpec,\n): update is ReadonlyArray<MongoUpdatePipelineStage> {\n return Array.isArray(update);\n}\n\nclass MongoAdapterImpl implements MongoAdapter {\n readonly #codecs: MongoCodecRegistry | undefined;\n\n constructor(codecs?: MongoCodecRegistry) {\n this.#codecs = codecs;\n }\n\n async #resolveDocument(expr: MongoExpr): Promise<Document> {\n const entries = Object.entries(expr);\n const resolved = await Promise.all(entries.map(([, val]) => resolveValue(val, this.#codecs)));\n const result: Record<string, unknown> = {};\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n if (entry) {\n result[entry[0]] = resolved[i];\n }\n }\n return result;\n }\n\n async #lowerUpdate(update: MongoUpdateSpec): Promise<Document | ReadonlyArray<Document>> {\n if (isUpdatePipeline(update)) {\n return Promise.all(update.map((stage) => lowerStage(stage, this.#codecs)));\n }\n return this.#resolveDocument(update);\n }\n\n async lower(plan: MongoQueryPlan): Promise<AnyMongoWireCommand> {\n const { command } = plan;\n switch (command.kind) {\n case 'insertOne':\n return new InsertOneWireCommand(\n command.collection,\n await this.#resolveDocument(command.document),\n );\n case 'updateOne': {\n const [filter, update] = await Promise.all([\n lowerFilter(command.filter, this.#codecs),\n this.#lowerUpdate(command.update),\n ]);\n return new UpdateOneWireCommand(command.collection, filter, update, command.upsert);\n }\n case 'insertMany':\n return new InsertManyWireCommand(\n command.collection,\n await Promise.all(command.documents.map((doc) => this.#resolveDocument(doc))),\n );\n case 'updateMany': {\n const [filter, update] = await Promise.all([\n lowerFilter(command.filter, this.#codecs),\n this.#lowerUpdate(command.update),\n ]);\n return new UpdateManyWireCommand(command.collection, filter, update, command.upsert);\n }\n case 'deleteOne':\n return new DeleteOneWireCommand(\n command.collection,\n await lowerFilter(command.filter, this.#codecs),\n );\n case 'deleteMany':\n return new DeleteManyWireCommand(\n command.collection,\n await lowerFilter(command.filter, this.#codecs),\n );\n case 'findOneAndUpdate': {\n const [filter, update] = await Promise.all([\n lowerFilter(command.filter, this.#codecs),\n this.#lowerUpdate(command.update),\n ]);\n return new FindOneAndUpdateWireCommand(\n command.collection,\n filter,\n update,\n command.upsert,\n command.sort,\n command.returnDocument,\n );\n }\n case 'findOneAndDelete':\n return new FindOneAndDeleteWireCommand(\n command.collection,\n await lowerFilter(command.filter, this.#codecs),\n command.sort,\n );\n case 'aggregate':\n return new AggregateWireCommand(\n command.collection,\n await lowerPipeline(command.pipeline, this.#codecs),\n );\n case 'rawAggregate':\n return new AggregateWireCommand(command.collection, command.pipeline);\n case 'rawInsertOne':\n return new InsertOneWireCommand(command.collection, command.document);\n case 'rawInsertMany':\n return new InsertManyWireCommand(command.collection, command.documents);\n case 'rawUpdateOne':\n return new UpdateOneWireCommand(command.collection, command.filter, command.update);\n case 'rawUpdateMany':\n return new UpdateManyWireCommand(command.collection, command.filter, command.update);\n case 'rawDeleteOne':\n return new DeleteOneWireCommand(command.collection, command.filter);\n case 'rawDeleteMany':\n return new DeleteManyWireCommand(command.collection, command.filter);\n case 'rawFindOneAndUpdate':\n return new FindOneAndUpdateWireCommand(\n command.collection,\n command.filter,\n command.update,\n command.upsert,\n command.sort,\n command.returnDocument,\n );\n case 'rawFindOneAndDelete':\n return new FindOneAndDeleteWireCommand(command.collection, command.filter, command.sort);\n // v8 ignore next 4\n default: {\n const _exhaustive: never = command;\n throw new Error(`Unknown command kind: ${(_exhaustive as { kind: string }).kind}`);\n }\n }\n }\n}\n\nimport {\n mongoBooleanCodec,\n mongoDateCodec,\n mongoDoubleCodec,\n mongoInt32Codec,\n mongoObjectIdCodec,\n mongoStringCodec,\n mongoVectorCodec,\n} from './core/codecs';\n\nfunction defaultCodecRegistry(): MongoCodecRegistry {\n const registry = createMongoCodecRegistry();\n for (const codec of [\n mongoObjectIdCodec,\n mongoStringCodec,\n mongoDoubleCodec,\n mongoInt32Codec,\n mongoBooleanCodec,\n mongoDateCodec,\n mongoVectorCodec,\n ]) {\n registry.register(codec);\n }\n return registry;\n}\n\nexport function createMongoAdapter(codecs?: MongoCodecRegistry): MongoAdapter {\n return new MongoAdapterImpl(codecs ?? defaultCodecRegistry());\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"mongo-adapter-DVK2I5Hs.mjs","names":["result: Record<string, unknown>","entries: Array<[string, unknown]>","aggExprLoweringVisitor: MongoAggExprVisitor<unknown>","loweredArgs: unknown","vars: Record<string, unknown>","_exhaustive: never","result: Record<string, unknown>","projection: Record<string, unknown>","lookup: Record<string, unknown>","unwind: Record<string, unknown>","group: Record<string, unknown>","unionWith: Record<string, unknown>","bucket: Record<string, unknown>","bucketAuto: Record<string, unknown>","geoNear: Record<string, unknown>","facet: Record<string, unknown>","graphLookup: Record<string, unknown>","merge: Record<string, unknown>","swf: Record<string, unknown>","output: Record<string, unknown>","densify: Record<string, unknown>","fill: Record<string, unknown>","entry: Record<string, unknown>","search: Record<string, unknown>","searchMeta: Record<string, unknown>","vs: Record<string, unknown>","#codecs","#resolveDocument","result: Record<string, unknown>","#lowerUpdate","_exhaustive: never"],"sources":["../src/core/codec-ids.ts","../src/resolve-value.ts","../src/lowering.ts","../src/core/codecs.ts","../src/mongo-adapter.ts"],"sourcesContent":["export const MONGO_OBJECTID_CODEC_ID = 'mongo/objectId@1' as const;\nexport const MONGO_STRING_CODEC_ID = 'mongo/string@1' as const;\nexport const MONGO_DOUBLE_CODEC_ID = 'mongo/double@1' as const;\nexport const MONGO_INT32_CODEC_ID = 'mongo/int32@1' as const;\nexport const MONGO_BOOLEAN_CODEC_ID = 'mongo/bool@1' as const;\nexport const MONGO_DATE_CODEC_ID = 'mongo/date@1' as const;\nexport const MONGO_VECTOR_CODEC_ID = 'mongo/vector@1' as const;\n","import { runtimeError } from '@prisma-next/framework-components/runtime';\nimport type { MongoCodecRegistry } from '@prisma-next/mongo-codec';\nimport type { MongoValue } from '@prisma-next/mongo-value';\nimport { MongoParamRef } from '@prisma-next/mongo-value';\n\n/**\n * Resolves a `MongoValue` (which may contain `MongoParamRef` leaves) into the\n * driver-ready wire shape. When a leaf has a `codecId` and the registry has a\n * codec for it, the codec's async `encode` is awaited so codecs may perform\n * asynchronous work (e.g. lookups, key derivations).\n *\n * Object/array nodes dispatch their child resolutions concurrently via\n * `Promise.all` so independent leaves encode in parallel.\n *\n * Codec encode failures are wrapped in a `RUNTIME.ENCODE_FAILED` envelope\n * (mirroring SQL's `wrapEncodeFailure` shape) with `{ label, codec }` details\n * and the original error attached on `cause`. An already-wrapped envelope is\n * re-thrown verbatim so nested resolvers don't double-wrap.\n */\nexport async function resolveValue(\n value: MongoValue,\n codecs?: MongoCodecRegistry,\n): Promise<unknown> {\n if (value instanceof MongoParamRef) {\n if (value.codecId && codecs) {\n const codec = codecs.get(value.codecId);\n if (codec?.encode) {\n try {\n return await codec.encode(value.value);\n } catch (error) {\n wrapEncodeFailure(error, value, codec.id);\n }\n }\n }\n return value.value;\n }\n if (value === null || typeof value !== 'object') {\n return value;\n }\n if (value instanceof Date) {\n return value;\n }\n if (Array.isArray(value)) {\n return Promise.all(value.map((v) => resolveValue(v, codecs)));\n }\n const entries = Object.entries(value);\n const resolved = await Promise.all(entries.map(([, val]) => resolveValue(val, codecs)));\n const result: Record<string, unknown> = {};\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n if (entry) {\n result[entry[0]] = resolved[i];\n }\n }\n return result;\n}\n\nfunction paramRefLabel(ref: MongoParamRef, codecId: string): string {\n return ref.name ?? codecId;\n}\n\nfunction isAlreadyEncodeFailure(error: unknown): boolean {\n return (\n error instanceof Error &&\n 'code' in error &&\n (error as Error & { code?: unknown }).code === 'RUNTIME.ENCODE_FAILED'\n );\n}\n\nfunction wrapEncodeFailure(error: unknown, ref: MongoParamRef, codecId: string): never {\n if (isAlreadyEncodeFailure(error)) {\n throw error;\n }\n const label = paramRefLabel(ref, codecId);\n const message = error instanceof Error ? error.message : String(error);\n const wrapped = runtimeError(\n 'RUNTIME.ENCODE_FAILED',\n `Failed to encode parameter ${label} with codec '${codecId}': ${message}`,\n { label, codec: codecId },\n );\n wrapped.cause = error;\n throw wrapped;\n}\n","import type { MongoCodecRegistry } from '@prisma-next/mongo-codec';\nimport type {\n MongoAggExpr,\n MongoAggExprVisitor,\n MongoFilterExpr,\n MongoGroupId,\n MongoPipelineStage,\n MongoProjectionValue,\n MongoWindowField,\n} from '@prisma-next/mongo-query-ast/execution';\nimport { isExprArray, isRecordArgs } from '@prisma-next/mongo-query-ast/execution';\nimport type { Document } from '@prisma-next/mongo-value';\nimport { resolveValue } from './resolve-value';\n\n// Biome flags `{ then: ... }` as a thenable object (noThenProperty). Build via Object.fromEntries to avoid.\nconst THEN_KEY = 'then';\n\nfunction condBranch(\n caseOrIf: MongoAggExpr,\n thenExpr: MongoAggExpr,\n elseExpr?: MongoAggExpr,\n): Record<string, unknown> {\n const entries: Array<[string, unknown]> = [\n [elseExpr ? 'if' : 'case', lowerAggExpr(caseOrIf)],\n [THEN_KEY, lowerAggExpr(thenExpr)],\n ];\n if (elseExpr) {\n entries.push(['else', lowerAggExpr(elseExpr)]);\n }\n return Object.fromEntries(entries);\n}\n\nconst aggExprLoweringVisitor: MongoAggExprVisitor<unknown> = {\n fieldRef(expr) {\n return `$${expr.path}`;\n },\n\n literal(expr) {\n return needsLiteralWrap(expr.value) ? { $literal: expr.value } : expr.value;\n },\n\n operator(expr) {\n const { args } = expr;\n let loweredArgs: unknown;\n if (isExprArray(args)) {\n loweredArgs = args.map((a) => lowerAggExpr(a));\n } else if (isRecordArgs(args)) {\n loweredArgs = lowerExprRecord(args);\n } else {\n loweredArgs = lowerAggExpr(args);\n }\n return { [expr.op]: loweredArgs };\n },\n\n accumulator(expr) {\n if (expr.arg === null) {\n return { [expr.op]: {} };\n }\n if (isRecordArgs(expr.arg)) {\n return { [expr.op]: lowerExprRecord(expr.arg) };\n }\n return { [expr.op]: lowerAggExpr(expr.arg) };\n },\n\n cond(expr) {\n return { $cond: condBranch(expr.condition, expr.then_, expr.else_) };\n },\n\n switch_(expr) {\n return {\n $switch: {\n branches: expr.branches.map((b) => condBranch(b.case_, b.then_)),\n default: lowerAggExpr(expr.default_),\n },\n };\n },\n\n filter(expr) {\n return {\n $filter: {\n input: lowerAggExpr(expr.input),\n cond: lowerAggExpr(expr.cond),\n as: expr.as,\n },\n };\n },\n\n map(expr) {\n return {\n $map: {\n input: lowerAggExpr(expr.input),\n in: lowerAggExpr(expr.in_),\n as: expr.as,\n },\n };\n },\n\n reduce(expr) {\n return {\n $reduce: {\n input: lowerAggExpr(expr.input),\n initialValue: lowerAggExpr(expr.initialValue),\n in: lowerAggExpr(expr.in_),\n },\n };\n },\n\n let_(expr) {\n const vars: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(expr.vars)) {\n vars[key] = lowerAggExpr(val);\n }\n return { $let: { vars, in: lowerAggExpr(expr.in_) } };\n },\n\n mergeObjects(expr) {\n return { $mergeObjects: expr.exprs.map((e) => lowerAggExpr(e)) };\n },\n};\n\nfunction needsLiteralWrap(value: unknown): boolean {\n if (typeof value === 'string' && value.startsWith('$')) {\n return true;\n }\n if (Array.isArray(value)) {\n return value.some((v) => needsLiteralWrap(v));\n }\n if (value !== null && typeof value === 'object') {\n return Object.entries(value as Record<string, unknown>).some(\n ([k, v]) => k.startsWith('$') || needsLiteralWrap(v),\n );\n }\n return false;\n}\n\nexport function lowerAggExpr(expr: MongoAggExpr): unknown {\n return expr.accept(aggExprLoweringVisitor);\n}\n\nexport async function lowerFilter(\n filter: MongoFilterExpr,\n codecs?: MongoCodecRegistry,\n): Promise<Document> {\n switch (filter.kind) {\n case 'field':\n return { [filter.field]: { [filter.op]: await resolveValue(filter.value, codecs) } };\n case 'and':\n return { $and: await Promise.all(filter.exprs.map((e) => lowerFilter(e, codecs))) };\n case 'or':\n return { $or: await Promise.all(filter.exprs.map((e) => lowerFilter(e, codecs))) };\n case 'not':\n return { $nor: [await lowerFilter(filter.expr, codecs)] };\n case 'exists':\n return { [filter.field]: { $exists: filter.exists } };\n case 'expr':\n return { $expr: lowerAggExpr(filter.aggExpr) };\n default: {\n const _exhaustive: never = filter;\n throw new Error(`Unhandled filter kind: ${(_exhaustive as MongoFilterExpr).kind}`);\n }\n }\n}\n\nfunction isAggExprNode(value: object): value is MongoAggExpr {\n return 'accept' in value && typeof value.accept === 'function';\n}\n\nfunction lowerGroupId(groupId: MongoGroupId): unknown {\n if (groupId === null) return null;\n if (isAggExprNode(groupId)) return lowerAggExpr(groupId);\n return lowerExprRecord(groupId);\n}\n\nfunction lowerExprRecord(\n fields: Readonly<Record<string, MongoAggExpr | ReadonlyArray<MongoAggExpr>>>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(fields)) {\n if (Array.isArray(val)) {\n result[key] = val.map((v: MongoAggExpr) => lowerAggExpr(v));\n } else {\n result[key] = lowerAggExpr(val as MongoAggExpr);\n }\n }\n return result;\n}\n\nfunction lowerProjectionValue(value: MongoProjectionValue): unknown {\n if (typeof value === 'number') return value;\n return lowerAggExpr(value);\n}\n\nfunction lowerWindowField(wf: MongoWindowField): Record<string, unknown> {\n const lowered = lowerAggExpr(wf.operator);\n if (typeof lowered !== 'object' || lowered === null) {\n throw new Error('Window field operator must lower to an object');\n }\n const result: Record<string, unknown> = { ...lowered };\n if (wf.window) {\n result['window'] = { ...wf.window };\n }\n return result;\n}\n\nexport async function lowerStage(\n stage: MongoPipelineStage,\n codecs?: MongoCodecRegistry,\n): Promise<Record<string, unknown>> {\n switch (stage.kind) {\n case 'match':\n return { $match: await lowerFilter(stage.filter, codecs) };\n case 'project': {\n const projection: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(stage.projection)) {\n projection[key] = lowerProjectionValue(val);\n }\n return { $project: projection };\n }\n case 'sort':\n return { $sort: { ...stage.sort } };\n case 'limit':\n return { $limit: stage.limit };\n case 'skip':\n return { $skip: stage.skip };\n case 'lookup': {\n const lookup: Record<string, unknown> = {\n from: stage.from,\n as: stage.as,\n };\n if (stage.localField !== undefined) lookup['localField'] = stage.localField;\n if (stage.foreignField !== undefined) lookup['foreignField'] = stage.foreignField;\n if (stage.pipeline) {\n lookup['pipeline'] = await Promise.all(stage.pipeline.map((s) => lowerStage(s, codecs)));\n }\n if (stage.let_) {\n lookup['let'] = lowerExprRecord(stage.let_);\n }\n return { $lookup: lookup };\n }\n case 'unwind': {\n const unwind: Record<string, unknown> = {\n path: stage.path,\n preserveNullAndEmptyArrays: stage.preserveNullAndEmptyArrays,\n };\n if (stage.includeArrayIndex !== undefined) {\n unwind['includeArrayIndex'] = stage.includeArrayIndex;\n }\n return { $unwind: unwind };\n }\n case 'group': {\n const group: Record<string, unknown> = { _id: lowerGroupId(stage.groupId) };\n for (const [key, acc] of Object.entries(stage.accumulators)) {\n group[key] = lowerAggExpr(acc);\n }\n return { $group: group };\n }\n case 'addFields':\n return { $addFields: lowerExprRecord(stage.fields) };\n case 'replaceRoot':\n return { $replaceRoot: { newRoot: lowerAggExpr(stage.newRoot) } };\n case 'count':\n return { $count: stage.field };\n case 'sortByCount':\n return { $sortByCount: lowerAggExpr(stage.expr) };\n case 'sample':\n return { $sample: { size: stage.size } };\n case 'redact':\n return { $redact: lowerAggExpr(stage.expr) };\n case 'out':\n return { $out: stage.db ? { db: stage.db, coll: stage.collection } : stage.collection };\n case 'unionWith': {\n const unionWith: Record<string, unknown> = { coll: stage.collection };\n if (stage.pipeline) {\n unionWith['pipeline'] = await Promise.all(stage.pipeline.map((s) => lowerStage(s, codecs)));\n }\n return { $unionWith: unionWith };\n }\n case 'bucket': {\n const bucket: Record<string, unknown> = {\n groupBy: lowerAggExpr(stage.groupBy),\n boundaries: [...stage.boundaries],\n };\n if (stage.default_ !== undefined) bucket['default'] = stage.default_;\n if (stage.output) bucket['output'] = lowerExprRecord(stage.output);\n return { $bucket: bucket };\n }\n case 'bucketAuto': {\n const bucketAuto: Record<string, unknown> = {\n groupBy: lowerAggExpr(stage.groupBy),\n buckets: stage.buckets,\n };\n if (stage.output) bucketAuto['output'] = lowerExprRecord(stage.output);\n if (stage.granularity !== undefined) bucketAuto['granularity'] = stage.granularity;\n return { $bucketAuto: bucketAuto };\n }\n case 'geoNear': {\n const geoNear: Record<string, unknown> = {\n near: stage.near,\n distanceField: stage.distanceField,\n };\n if (stage.spherical !== undefined) geoNear['spherical'] = stage.spherical;\n if (stage.maxDistance !== undefined) geoNear['maxDistance'] = stage.maxDistance;\n if (stage.minDistance !== undefined) geoNear['minDistance'] = stage.minDistance;\n if (stage.query) geoNear['query'] = await lowerFilter(stage.query, codecs);\n if (stage.key !== undefined) geoNear['key'] = stage.key;\n if (stage.distanceMultiplier !== undefined)\n geoNear['distanceMultiplier'] = stage.distanceMultiplier;\n if (stage.includeLocs !== undefined) geoNear['includeLocs'] = stage.includeLocs;\n return { $geoNear: geoNear };\n }\n case 'facet': {\n const facetEntries = Object.entries(stage.facets);\n const facetPipelines = await Promise.all(\n facetEntries.map(([, pipeline]) => Promise.all(pipeline.map((s) => lowerStage(s, codecs)))),\n );\n const facet: Record<string, unknown> = {};\n for (let i = 0; i < facetEntries.length; i++) {\n const entry = facetEntries[i];\n if (entry) {\n facet[entry[0]] = facetPipelines[i];\n }\n }\n return { $facet: facet };\n }\n case 'graphLookup': {\n const graphLookup: Record<string, unknown> = {\n from: stage.from,\n startWith: lowerAggExpr(stage.startWith),\n connectFromField: stage.connectFromField,\n connectToField: stage.connectToField,\n as: stage.as,\n };\n if (stage.maxDepth !== undefined) graphLookup['maxDepth'] = stage.maxDepth;\n if (stage.depthField !== undefined) graphLookup['depthField'] = stage.depthField;\n if (stage.restrictSearchWithMatch)\n graphLookup['restrictSearchWithMatch'] = await lowerFilter(\n stage.restrictSearchWithMatch,\n codecs,\n );\n return { $graphLookup: graphLookup };\n }\n case 'merge': {\n const merge: Record<string, unknown> = { into: stage.into };\n if (stage.on !== undefined) merge['on'] = stage.on;\n if (stage.whenMatched !== undefined) {\n merge['whenMatched'] = Array.isArray(stage.whenMatched)\n ? await Promise.all(stage.whenMatched.map((s) => lowerStage(s, codecs)))\n : stage.whenMatched;\n }\n if (stage.whenNotMatched !== undefined) merge['whenNotMatched'] = stage.whenNotMatched;\n return { $merge: merge };\n }\n case 'setWindowFields': {\n const swf: Record<string, unknown> = {};\n if (stage.partitionBy) swf['partitionBy'] = lowerAggExpr(stage.partitionBy);\n if (stage.sortBy) swf['sortBy'] = { ...stage.sortBy };\n const output: Record<string, unknown> = {};\n for (const [key, wf] of Object.entries(stage.output)) {\n output[key] = lowerWindowField(wf);\n }\n swf['output'] = output;\n return { $setWindowFields: swf };\n }\n case 'densify': {\n const densify: Record<string, unknown> = {\n field: stage.field,\n range: { ...stage.range },\n };\n if (stage.partitionByFields) densify['partitionByFields'] = [...stage.partitionByFields];\n return { $densify: densify };\n }\n case 'fill': {\n const fill: Record<string, unknown> = {};\n if (stage.partitionBy) fill['partitionBy'] = lowerAggExpr(stage.partitionBy);\n if (stage.partitionByFields) fill['partitionByFields'] = [...stage.partitionByFields];\n if (stage.sortBy) fill['sortBy'] = { ...stage.sortBy };\n const output: Record<string, unknown> = {};\n for (const [key, fo] of Object.entries(stage.output)) {\n const entry: Record<string, unknown> = {};\n if (fo.method !== undefined) entry['method'] = fo.method;\n if (fo.value !== undefined) entry['value'] = lowerAggExpr(fo.value);\n output[key] = entry;\n }\n fill['output'] = output;\n return { $fill: fill };\n }\n case 'search': {\n const search: Record<string, unknown> = { ...stage.config };\n if (stage.index !== undefined) search['index'] = stage.index;\n return { $search: search };\n }\n case 'searchMeta': {\n const searchMeta: Record<string, unknown> = { ...stage.config };\n if (stage.index !== undefined) searchMeta['index'] = stage.index;\n return { $searchMeta: searchMeta };\n }\n case 'vectorSearch': {\n const vs: Record<string, unknown> = {\n index: stage.index,\n path: stage.path,\n queryVector: [...stage.queryVector],\n numCandidates: stage.numCandidates,\n limit: stage.limit,\n };\n if (stage.filter) vs['filter'] = { ...stage.filter };\n return { $vectorSearch: vs };\n }\n default: {\n const _exhaustive: never = stage;\n throw new Error(`Unhandled stage kind: ${(_exhaustive as MongoPipelineStage).kind}`);\n }\n }\n}\n\nexport async function lowerPipeline(\n stages: ReadonlyArray<MongoPipelineStage>,\n codecs?: MongoCodecRegistry,\n): Promise<Array<Record<string, unknown>>> {\n return Promise.all(stages.map((s) => lowerStage(s, codecs)));\n}\n","import { mongoCodec } from '@prisma-next/mongo-codec';\nimport { ObjectId } from 'mongodb';\nimport {\n MONGO_BOOLEAN_CODEC_ID,\n MONGO_DATE_CODEC_ID,\n MONGO_DOUBLE_CODEC_ID,\n MONGO_INT32_CODEC_ID,\n MONGO_OBJECTID_CODEC_ID,\n MONGO_STRING_CODEC_ID,\n MONGO_VECTOR_CODEC_ID,\n} from './codec-ids';\n\nexport const mongoObjectIdCodec = mongoCodec({\n typeId: MONGO_OBJECTID_CODEC_ID,\n targetTypes: ['objectId'],\n traits: ['equality'],\n decode: (wire: ObjectId) => wire.toHexString(),\n encode: (value: string) => new ObjectId(value),\n});\n\nexport const mongoStringCodec = mongoCodec({\n typeId: MONGO_STRING_CODEC_ID,\n targetTypes: ['string'],\n traits: ['equality', 'order', 'textual'],\n decode: (wire: string) => wire,\n encode: (value: string) => value,\n});\n\nexport const mongoDoubleCodec = mongoCodec({\n typeId: MONGO_DOUBLE_CODEC_ID,\n targetTypes: ['double'],\n traits: ['equality', 'order', 'numeric'],\n decode: (wire: number) => wire,\n encode: (value: number) => value,\n});\n\nexport const mongoInt32Codec = mongoCodec({\n typeId: MONGO_INT32_CODEC_ID,\n targetTypes: ['int'],\n traits: ['equality', 'order', 'numeric'],\n decode: (wire: number) => wire,\n encode: (value: number) => value,\n});\n\nexport const mongoBooleanCodec = mongoCodec({\n typeId: MONGO_BOOLEAN_CODEC_ID,\n targetTypes: ['bool'],\n traits: ['equality', 'boolean'],\n decode: (wire: boolean) => wire,\n encode: (value: boolean) => value,\n});\n\nexport const mongoDateCodec = mongoCodec({\n typeId: MONGO_DATE_CODEC_ID,\n targetTypes: ['date'],\n traits: ['equality', 'order'],\n decode: (wire: Date) => wire,\n encode: (value: Date) => value,\n encodeJson: (value: Date) => value.toISOString(),\n decodeJson: (json) => {\n if (typeof json !== 'string') throw new Error('expected ISO date string');\n return new Date(json);\n },\n});\n\nexport const mongoVectorCodec = mongoCodec({\n typeId: MONGO_VECTOR_CODEC_ID,\n targetTypes: ['vector'],\n traits: ['equality'],\n decode: (wire: readonly number[]) => wire,\n encode: (value: readonly number[]) => value,\n renderOutputType: (typeParams) => {\n const length = typeParams['length'];\n if (length === undefined) return undefined;\n if (typeof length !== 'number' || !Number.isFinite(length) || !Number.isInteger(length)) {\n throw new Error('renderOutputType: expected positive integer \"length\" for Vector');\n }\n return `Vector<${length}>`;\n },\n});\n","import { createMongoCodecRegistry, type MongoCodecRegistry } from '@prisma-next/mongo-codec';\nimport type { MongoAdapter } from '@prisma-next/mongo-lowering';\nimport type {\n MongoQueryPlan,\n MongoUpdatePipelineStage,\n MongoUpdateSpec,\n} from '@prisma-next/mongo-query-ast/execution';\nimport type { Document, MongoExpr } from '@prisma-next/mongo-value';\nimport type { AnyMongoWireCommand } from '@prisma-next/mongo-wire';\nimport {\n AggregateWireCommand,\n DeleteManyWireCommand,\n DeleteOneWireCommand,\n FindOneAndDeleteWireCommand,\n FindOneAndUpdateWireCommand,\n InsertManyWireCommand,\n InsertOneWireCommand,\n UpdateManyWireCommand,\n UpdateOneWireCommand,\n} from '@prisma-next/mongo-wire';\nimport { lowerFilter, lowerPipeline, lowerStage } from './lowering';\nimport { resolveValue } from './resolve-value';\n\nfunction isUpdatePipeline(\n update: MongoUpdateSpec,\n): update is ReadonlyArray<MongoUpdatePipelineStage> {\n return Array.isArray(update);\n}\n\nclass MongoAdapterImpl implements MongoAdapter {\n readonly #codecs: MongoCodecRegistry | undefined;\n\n constructor(codecs?: MongoCodecRegistry) {\n this.#codecs = codecs;\n }\n\n async #resolveDocument(expr: MongoExpr): Promise<Document> {\n const entries = Object.entries(expr);\n const resolved = await Promise.all(entries.map(([, val]) => resolveValue(val, this.#codecs)));\n const result: Record<string, unknown> = {};\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n if (entry) {\n result[entry[0]] = resolved[i];\n }\n }\n return result;\n }\n\n async #lowerUpdate(update: MongoUpdateSpec): Promise<Document | ReadonlyArray<Document>> {\n if (isUpdatePipeline(update)) {\n return Promise.all(update.map((stage) => lowerStage(stage, this.#codecs)));\n }\n return this.#resolveDocument(update);\n }\n\n async lower(plan: MongoQueryPlan): Promise<AnyMongoWireCommand> {\n const { command } = plan;\n switch (command.kind) {\n case 'insertOne':\n return new InsertOneWireCommand(\n command.collection,\n await this.#resolveDocument(command.document),\n );\n case 'updateOne': {\n const [filter, update] = await Promise.all([\n lowerFilter(command.filter, this.#codecs),\n this.#lowerUpdate(command.update),\n ]);\n return new UpdateOneWireCommand(command.collection, filter, update, command.upsert);\n }\n case 'insertMany':\n return new InsertManyWireCommand(\n command.collection,\n await Promise.all(command.documents.map((doc) => this.#resolveDocument(doc))),\n );\n case 'updateMany': {\n const [filter, update] = await Promise.all([\n lowerFilter(command.filter, this.#codecs),\n this.#lowerUpdate(command.update),\n ]);\n return new UpdateManyWireCommand(command.collection, filter, update, command.upsert);\n }\n case 'deleteOne':\n return new DeleteOneWireCommand(\n command.collection,\n await lowerFilter(command.filter, this.#codecs),\n );\n case 'deleteMany':\n return new DeleteManyWireCommand(\n command.collection,\n await lowerFilter(command.filter, this.#codecs),\n );\n case 'findOneAndUpdate': {\n const [filter, update] = await Promise.all([\n lowerFilter(command.filter, this.#codecs),\n this.#lowerUpdate(command.update),\n ]);\n return new FindOneAndUpdateWireCommand(\n command.collection,\n filter,\n update,\n command.upsert,\n command.sort,\n command.returnDocument,\n );\n }\n case 'findOneAndDelete':\n return new FindOneAndDeleteWireCommand(\n command.collection,\n await lowerFilter(command.filter, this.#codecs),\n command.sort,\n );\n case 'aggregate':\n return new AggregateWireCommand(\n command.collection,\n await lowerPipeline(command.pipeline, this.#codecs),\n );\n case 'rawAggregate':\n return new AggregateWireCommand(command.collection, command.pipeline);\n case 'rawInsertOne':\n return new InsertOneWireCommand(command.collection, command.document);\n case 'rawInsertMany':\n return new InsertManyWireCommand(command.collection, command.documents);\n case 'rawUpdateOne':\n return new UpdateOneWireCommand(command.collection, command.filter, command.update);\n case 'rawUpdateMany':\n return new UpdateManyWireCommand(command.collection, command.filter, command.update);\n case 'rawDeleteOne':\n return new DeleteOneWireCommand(command.collection, command.filter);\n case 'rawDeleteMany':\n return new DeleteManyWireCommand(command.collection, command.filter);\n case 'rawFindOneAndUpdate':\n return new FindOneAndUpdateWireCommand(\n command.collection,\n command.filter,\n command.update,\n command.upsert,\n command.sort,\n command.returnDocument,\n );\n case 'rawFindOneAndDelete':\n return new FindOneAndDeleteWireCommand(command.collection, command.filter, command.sort);\n // v8 ignore next 4\n default: {\n const _exhaustive: never = command;\n throw new Error(`Unknown command kind: ${(_exhaustive as { kind: string }).kind}`);\n }\n }\n }\n}\n\nimport {\n mongoBooleanCodec,\n mongoDateCodec,\n mongoDoubleCodec,\n mongoInt32Codec,\n mongoObjectIdCodec,\n mongoStringCodec,\n mongoVectorCodec,\n} from './core/codecs';\n\nfunction defaultCodecRegistry(): MongoCodecRegistry {\n const registry = createMongoCodecRegistry();\n for (const codec of [\n mongoObjectIdCodec,\n mongoStringCodec,\n mongoDoubleCodec,\n mongoInt32Codec,\n mongoBooleanCodec,\n mongoDateCodec,\n mongoVectorCodec,\n ]) {\n registry.register(codec);\n }\n return registry;\n}\n\nexport function createMongoAdapter(codecs?: MongoCodecRegistry): MongoAdapter {\n return new MongoAdapterImpl(codecs ?? defaultCodecRegistry());\n}\n"],"mappings":";;;;;;;;AAAA,MAAa,0BAA0B;AACvC,MAAa,wBAAwB;AACrC,MAAa,wBAAwB;AACrC,MAAa,uBAAuB;AACpC,MAAa,yBAAyB;AACtC,MAAa,sBAAsB;AACnC,MAAa,wBAAwB;;;;;;;;;;;;;;;;;;ACarC,eAAsB,aACpB,OACA,QACkB;AAClB,KAAI,iBAAiB,eAAe;AAClC,MAAI,MAAM,WAAW,QAAQ;GAC3B,MAAM,QAAQ,OAAO,IAAI,MAAM,QAAQ;AACvC,OAAI,OAAO,OACT,KAAI;AACF,WAAO,MAAM,MAAM,OAAO,MAAM,MAAM;YAC/B,OAAO;AACd,sBAAkB,OAAO,OAAO,MAAM,GAAG;;;AAI/C,SAAO,MAAM;;AAEf,KAAI,UAAU,QAAQ,OAAO,UAAU,SACrC,QAAO;AAET,KAAI,iBAAiB,KACnB,QAAO;AAET,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,QAAQ,IAAI,MAAM,KAAK,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC;CAE/D,MAAM,UAAU,OAAO,QAAQ,MAAM;CACrC,MAAM,WAAW,MAAM,QAAQ,IAAI,QAAQ,KAAK,GAAG,SAAS,aAAa,KAAK,OAAO,CAAC,CAAC;CACvF,MAAMA,SAAkC,EAAE;AAC1C,MAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;EACvC,MAAM,QAAQ,QAAQ;AACtB,MAAI,MACF,QAAO,MAAM,MAAM,SAAS;;AAGhC,QAAO;;AAGT,SAAS,cAAc,KAAoB,SAAyB;AAClE,QAAO,IAAI,QAAQ;;AAGrB,SAAS,uBAAuB,OAAyB;AACvD,QACE,iBAAiB,SACjB,UAAU,SACT,MAAqC,SAAS;;AAInD,SAAS,kBAAkB,OAAgB,KAAoB,SAAwB;AACrF,KAAI,uBAAuB,MAAM,CAC/B,OAAM;CAER,MAAM,QAAQ,cAAc,KAAK,QAAQ;CAEzC,MAAM,UAAU,aACd,yBACA,8BAA8B,MAAM,eAAe,QAAQ,KAH7C,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,IAIpE;EAAE;EAAO,OAAO;EAAS,CAC1B;AACD,SAAQ,QAAQ;AAChB,OAAM;;;;;AClER,MAAM,WAAW;AAEjB,SAAS,WACP,UACA,UACA,UACyB;CACzB,MAAMC,UAAoC,CACxC,CAAC,WAAW,OAAO,QAAQ,aAAa,SAAS,CAAC,EAClD,CAAC,UAAU,aAAa,SAAS,CAAC,CACnC;AACD,KAAI,SACF,SAAQ,KAAK,CAAC,QAAQ,aAAa,SAAS,CAAC,CAAC;AAEhD,QAAO,OAAO,YAAY,QAAQ;;AAGpC,MAAMC,yBAAuD;CAC3D,SAAS,MAAM;AACb,SAAO,IAAI,KAAK;;CAGlB,QAAQ,MAAM;AACZ,SAAO,iBAAiB,KAAK,MAAM,GAAG,EAAE,UAAU,KAAK,OAAO,GAAG,KAAK;;CAGxE,SAAS,MAAM;EACb,MAAM,EAAE,SAAS;EACjB,IAAIC;AACJ,MAAI,YAAY,KAAK,CACnB,eAAc,KAAK,KAAK,MAAM,aAAa,EAAE,CAAC;WACrC,aAAa,KAAK,CAC3B,eAAc,gBAAgB,KAAK;MAEnC,eAAc,aAAa,KAAK;AAElC,SAAO,GAAG,KAAK,KAAK,aAAa;;CAGnC,YAAY,MAAM;AAChB,MAAI,KAAK,QAAQ,KACf,QAAO,GAAG,KAAK,KAAK,EAAE,EAAE;AAE1B,MAAI,aAAa,KAAK,IAAI,CACxB,QAAO,GAAG,KAAK,KAAK,gBAAgB,KAAK,IAAI,EAAE;AAEjD,SAAO,GAAG,KAAK,KAAK,aAAa,KAAK,IAAI,EAAE;;CAG9C,KAAK,MAAM;AACT,SAAO,EAAE,OAAO,WAAW,KAAK,WAAW,KAAK,OAAO,KAAK,MAAM,EAAE;;CAGtE,QAAQ,MAAM;AACZ,SAAO,EACL,SAAS;GACP,UAAU,KAAK,SAAS,KAAK,MAAM,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC;GAChE,SAAS,aAAa,KAAK,SAAS;GACrC,EACF;;CAGH,OAAO,MAAM;AACX,SAAO,EACL,SAAS;GACP,OAAO,aAAa,KAAK,MAAM;GAC/B,MAAM,aAAa,KAAK,KAAK;GAC7B,IAAI,KAAK;GACV,EACF;;CAGH,IAAI,MAAM;AACR,SAAO,EACL,MAAM;GACJ,OAAO,aAAa,KAAK,MAAM;GAC/B,IAAI,aAAa,KAAK,IAAI;GAC1B,IAAI,KAAK;GACV,EACF;;CAGH,OAAO,MAAM;AACX,SAAO,EACL,SAAS;GACP,OAAO,aAAa,KAAK,MAAM;GAC/B,cAAc,aAAa,KAAK,aAAa;GAC7C,IAAI,aAAa,KAAK,IAAI;GAC3B,EACF;;CAGH,KAAK,MAAM;EACT,MAAMC,OAAgC,EAAE;AACxC,OAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,KAAK,KAAK,CAChD,MAAK,OAAO,aAAa,IAAI;AAE/B,SAAO,EAAE,MAAM;GAAE;GAAM,IAAI,aAAa,KAAK,IAAI;GAAE,EAAE;;CAGvD,aAAa,MAAM;AACjB,SAAO,EAAE,eAAe,KAAK,MAAM,KAAK,MAAM,aAAa,EAAE,CAAC,EAAE;;CAEnE;AAED,SAAS,iBAAiB,OAAyB;AACjD,KAAI,OAAO,UAAU,YAAY,MAAM,WAAW,IAAI,CACpD,QAAO;AAET,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,MAAM,MAAM,iBAAiB,EAAE,CAAC;AAE/C,KAAI,UAAU,QAAQ,OAAO,UAAU,SACrC,QAAO,OAAO,QAAQ,MAAiC,CAAC,MACrD,CAAC,GAAG,OAAO,EAAE,WAAW,IAAI,IAAI,iBAAiB,EAAE,CACrD;AAEH,QAAO;;AAGT,SAAgB,aAAa,MAA6B;AACxD,QAAO,KAAK,OAAO,uBAAuB;;AAG5C,eAAsB,YACpB,QACA,QACmB;AACnB,SAAQ,OAAO,MAAf;EACE,KAAK,QACH,QAAO,GAAG,OAAO,QAAQ,GAAG,OAAO,KAAK,MAAM,aAAa,OAAO,OAAO,OAAO,EAAE,EAAE;EACtF,KAAK,MACH,QAAO,EAAE,MAAM,MAAM,QAAQ,IAAI,OAAO,MAAM,KAAK,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,EAAE;EACrF,KAAK,KACH,QAAO,EAAE,KAAK,MAAM,QAAQ,IAAI,OAAO,MAAM,KAAK,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,EAAE;EACpF,KAAK,MACH,QAAO,EAAE,MAAM,CAAC,MAAM,YAAY,OAAO,MAAM,OAAO,CAAC,EAAE;EAC3D,KAAK,SACH,QAAO,GAAG,OAAO,QAAQ,EAAE,SAAS,OAAO,QAAQ,EAAE;EACvD,KAAK,OACH,QAAO,EAAE,OAAO,aAAa,OAAO,QAAQ,EAAE;EAChD,SAAS;GACP,MAAMC,cAAqB;AAC3B,SAAM,IAAI,MAAM,0BAA2B,YAAgC,OAAO;;;;AAKxF,SAAS,cAAc,OAAsC;AAC3D,QAAO,YAAY,SAAS,OAAO,MAAM,WAAW;;AAGtD,SAAS,aAAa,SAAgC;AACpD,KAAI,YAAY,KAAM,QAAO;AAC7B,KAAI,cAAc,QAAQ,CAAE,QAAO,aAAa,QAAQ;AACxD,QAAO,gBAAgB,QAAQ;;AAGjC,SAAS,gBACP,QACyB;CACzB,MAAMC,SAAkC,EAAE;AAC1C,MAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,OAAO,CAC7C,KAAI,MAAM,QAAQ,IAAI,CACpB,QAAO,OAAO,IAAI,KAAK,MAAoB,aAAa,EAAE,CAAC;KAE3D,QAAO,OAAO,aAAa,IAAoB;AAGnD,QAAO;;AAGT,SAAS,qBAAqB,OAAsC;AAClE,KAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAO,aAAa,MAAM;;AAG5B,SAAS,iBAAiB,IAA+C;CACvE,MAAM,UAAU,aAAa,GAAG,SAAS;AACzC,KAAI,OAAO,YAAY,YAAY,YAAY,KAC7C,OAAM,IAAI,MAAM,gDAAgD;CAElE,MAAMA,SAAkC,EAAE,GAAG,SAAS;AACtD,KAAI,GAAG,OACL,QAAO,YAAY,EAAE,GAAG,GAAG,QAAQ;AAErC,QAAO;;AAGT,eAAsB,WACpB,OACA,QACkC;AAClC,SAAQ,MAAM,MAAd;EACE,KAAK,QACH,QAAO,EAAE,QAAQ,MAAM,YAAY,MAAM,QAAQ,OAAO,EAAE;EAC5D,KAAK,WAAW;GACd,MAAMC,aAAsC,EAAE;AAC9C,QAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,MAAM,WAAW,CACvD,YAAW,OAAO,qBAAqB,IAAI;AAE7C,UAAO,EAAE,UAAU,YAAY;;EAEjC,KAAK,OACH,QAAO,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,EAAE;EACrC,KAAK,QACH,QAAO,EAAE,QAAQ,MAAM,OAAO;EAChC,KAAK,OACH,QAAO,EAAE,OAAO,MAAM,MAAM;EAC9B,KAAK,UAAU;GACb,MAAMC,SAAkC;IACtC,MAAM,MAAM;IACZ,IAAI,MAAM;IACX;AACD,OAAI,MAAM,eAAe,OAAW,QAAO,gBAAgB,MAAM;AACjE,OAAI,MAAM,iBAAiB,OAAW,QAAO,kBAAkB,MAAM;AACrE,OAAI,MAAM,SACR,QAAO,cAAc,MAAM,QAAQ,IAAI,MAAM,SAAS,KAAK,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC;AAE1F,OAAI,MAAM,KACR,QAAO,SAAS,gBAAgB,MAAM,KAAK;AAE7C,UAAO,EAAE,SAAS,QAAQ;;EAE5B,KAAK,UAAU;GACb,MAAMC,SAAkC;IACtC,MAAM,MAAM;IACZ,4BAA4B,MAAM;IACnC;AACD,OAAI,MAAM,sBAAsB,OAC9B,QAAO,uBAAuB,MAAM;AAEtC,UAAO,EAAE,SAAS,QAAQ;;EAE5B,KAAK,SAAS;GACZ,MAAMC,QAAiC,EAAE,KAAK,aAAa,MAAM,QAAQ,EAAE;AAC3E,QAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,MAAM,aAAa,CACzD,OAAM,OAAO,aAAa,IAAI;AAEhC,UAAO,EAAE,QAAQ,OAAO;;EAE1B,KAAK,YACH,QAAO,EAAE,YAAY,gBAAgB,MAAM,OAAO,EAAE;EACtD,KAAK,cACH,QAAO,EAAE,cAAc,EAAE,SAAS,aAAa,MAAM,QAAQ,EAAE,EAAE;EACnE,KAAK,QACH,QAAO,EAAE,QAAQ,MAAM,OAAO;EAChC,KAAK,cACH,QAAO,EAAE,cAAc,aAAa,MAAM,KAAK,EAAE;EACnD,KAAK,SACH,QAAO,EAAE,SAAS,EAAE,MAAM,MAAM,MAAM,EAAE;EAC1C,KAAK,SACH,QAAO,EAAE,SAAS,aAAa,MAAM,KAAK,EAAE;EAC9C,KAAK,MACH,QAAO,EAAE,MAAM,MAAM,KAAK;GAAE,IAAI,MAAM;GAAI,MAAM,MAAM;GAAY,GAAG,MAAM,YAAY;EACzF,KAAK,aAAa;GAChB,MAAMC,YAAqC,EAAE,MAAM,MAAM,YAAY;AACrE,OAAI,MAAM,SACR,WAAU,cAAc,MAAM,QAAQ,IAAI,MAAM,SAAS,KAAK,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC;AAE7F,UAAO,EAAE,YAAY,WAAW;;EAElC,KAAK,UAAU;GACb,MAAMC,SAAkC;IACtC,SAAS,aAAa,MAAM,QAAQ;IACpC,YAAY,CAAC,GAAG,MAAM,WAAW;IAClC;AACD,OAAI,MAAM,aAAa,OAAW,QAAO,aAAa,MAAM;AAC5D,OAAI,MAAM,OAAQ,QAAO,YAAY,gBAAgB,MAAM,OAAO;AAClE,UAAO,EAAE,SAAS,QAAQ;;EAE5B,KAAK,cAAc;GACjB,MAAMC,aAAsC;IAC1C,SAAS,aAAa,MAAM,QAAQ;IACpC,SAAS,MAAM;IAChB;AACD,OAAI,MAAM,OAAQ,YAAW,YAAY,gBAAgB,MAAM,OAAO;AACtE,OAAI,MAAM,gBAAgB,OAAW,YAAW,iBAAiB,MAAM;AACvE,UAAO,EAAE,aAAa,YAAY;;EAEpC,KAAK,WAAW;GACd,MAAMC,UAAmC;IACvC,MAAM,MAAM;IACZ,eAAe,MAAM;IACtB;AACD,OAAI,MAAM,cAAc,OAAW,SAAQ,eAAe,MAAM;AAChE,OAAI,MAAM,gBAAgB,OAAW,SAAQ,iBAAiB,MAAM;AACpE,OAAI,MAAM,gBAAgB,OAAW,SAAQ,iBAAiB,MAAM;AACpE,OAAI,MAAM,MAAO,SAAQ,WAAW,MAAM,YAAY,MAAM,OAAO,OAAO;AAC1E,OAAI,MAAM,QAAQ,OAAW,SAAQ,SAAS,MAAM;AACpD,OAAI,MAAM,uBAAuB,OAC/B,SAAQ,wBAAwB,MAAM;AACxC,OAAI,MAAM,gBAAgB,OAAW,SAAQ,iBAAiB,MAAM;AACpE,UAAO,EAAE,UAAU,SAAS;;EAE9B,KAAK,SAAS;GACZ,MAAM,eAAe,OAAO,QAAQ,MAAM,OAAO;GACjD,MAAM,iBAAiB,MAAM,QAAQ,IACnC,aAAa,KAAK,GAAG,cAAc,QAAQ,IAAI,SAAS,KAAK,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAC5F;GACD,MAAMC,QAAiC,EAAE;AACzC,QAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;IAC5C,MAAM,QAAQ,aAAa;AAC3B,QAAI,MACF,OAAM,MAAM,MAAM,eAAe;;AAGrC,UAAO,EAAE,QAAQ,OAAO;;EAE1B,KAAK,eAAe;GAClB,MAAMC,cAAuC;IAC3C,MAAM,MAAM;IACZ,WAAW,aAAa,MAAM,UAAU;IACxC,kBAAkB,MAAM;IACxB,gBAAgB,MAAM;IACtB,IAAI,MAAM;IACX;AACD,OAAI,MAAM,aAAa,OAAW,aAAY,cAAc,MAAM;AAClE,OAAI,MAAM,eAAe,OAAW,aAAY,gBAAgB,MAAM;AACtE,OAAI,MAAM,wBACR,aAAY,6BAA6B,MAAM,YAC7C,MAAM,yBACN,OACD;AACH,UAAO,EAAE,cAAc,aAAa;;EAEtC,KAAK,SAAS;GACZ,MAAMC,QAAiC,EAAE,MAAM,MAAM,MAAM;AAC3D,OAAI,MAAM,OAAO,OAAW,OAAM,QAAQ,MAAM;AAChD,OAAI,MAAM,gBAAgB,OACxB,OAAM,iBAAiB,MAAM,QAAQ,MAAM,YAAY,GACnD,MAAM,QAAQ,IAAI,MAAM,YAAY,KAAK,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,GACtE,MAAM;AAEZ,OAAI,MAAM,mBAAmB,OAAW,OAAM,oBAAoB,MAAM;AACxE,UAAO,EAAE,QAAQ,OAAO;;EAE1B,KAAK,mBAAmB;GACtB,MAAMC,MAA+B,EAAE;AACvC,OAAI,MAAM,YAAa,KAAI,iBAAiB,aAAa,MAAM,YAAY;AAC3E,OAAI,MAAM,OAAQ,KAAI,YAAY,EAAE,GAAG,MAAM,QAAQ;GACrD,MAAMC,SAAkC,EAAE;AAC1C,QAAK,MAAM,CAAC,KAAK,OAAO,OAAO,QAAQ,MAAM,OAAO,CAClD,QAAO,OAAO,iBAAiB,GAAG;AAEpC,OAAI,YAAY;AAChB,UAAO,EAAE,kBAAkB,KAAK;;EAElC,KAAK,WAAW;GACd,MAAMC,UAAmC;IACvC,OAAO,MAAM;IACb,OAAO,EAAE,GAAG,MAAM,OAAO;IAC1B;AACD,OAAI,MAAM,kBAAmB,SAAQ,uBAAuB,CAAC,GAAG,MAAM,kBAAkB;AACxF,UAAO,EAAE,UAAU,SAAS;;EAE9B,KAAK,QAAQ;GACX,MAAMC,OAAgC,EAAE;AACxC,OAAI,MAAM,YAAa,MAAK,iBAAiB,aAAa,MAAM,YAAY;AAC5E,OAAI,MAAM,kBAAmB,MAAK,uBAAuB,CAAC,GAAG,MAAM,kBAAkB;AACrF,OAAI,MAAM,OAAQ,MAAK,YAAY,EAAE,GAAG,MAAM,QAAQ;GACtD,MAAMF,SAAkC,EAAE;AAC1C,QAAK,MAAM,CAAC,KAAK,OAAO,OAAO,QAAQ,MAAM,OAAO,EAAE;IACpD,MAAMG,QAAiC,EAAE;AACzC,QAAI,GAAG,WAAW,OAAW,OAAM,YAAY,GAAG;AAClD,QAAI,GAAG,UAAU,OAAW,OAAM,WAAW,aAAa,GAAG,MAAM;AACnE,WAAO,OAAO;;AAEhB,QAAK,YAAY;AACjB,UAAO,EAAE,OAAO,MAAM;;EAExB,KAAK,UAAU;GACb,MAAMC,SAAkC,EAAE,GAAG,MAAM,QAAQ;AAC3D,OAAI,MAAM,UAAU,OAAW,QAAO,WAAW,MAAM;AACvD,UAAO,EAAE,SAAS,QAAQ;;EAE5B,KAAK,cAAc;GACjB,MAAMC,aAAsC,EAAE,GAAG,MAAM,QAAQ;AAC/D,OAAI,MAAM,UAAU,OAAW,YAAW,WAAW,MAAM;AAC3D,UAAO,EAAE,aAAa,YAAY;;EAEpC,KAAK,gBAAgB;GACnB,MAAMC,KAA8B;IAClC,OAAO,MAAM;IACb,MAAM,MAAM;IACZ,aAAa,CAAC,GAAG,MAAM,YAAY;IACnC,eAAe,MAAM;IACrB,OAAO,MAAM;IACd;AACD,OAAI,MAAM,OAAQ,IAAG,YAAY,EAAE,GAAG,MAAM,QAAQ;AACpD,UAAO,EAAE,eAAe,IAAI;;EAE9B,SAAS;GACP,MAAMpB,cAAqB;AAC3B,SAAM,IAAI,MAAM,yBAA0B,YAAmC,OAAO;;;;AAK1F,eAAsB,cACpB,QACA,QACyC;AACzC,QAAO,QAAQ,IAAI,OAAO,KAAK,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC;;;;;ACtZ9D,MAAa,qBAAqB,WAAW;CAC3C,QAAQ;CACR,aAAa,CAAC,WAAW;CACzB,QAAQ,CAAC,WAAW;CACpB,SAAS,SAAmB,KAAK,aAAa;CAC9C,SAAS,UAAkB,IAAI,SAAS,MAAM;CAC/C,CAAC;AAEF,MAAa,mBAAmB,WAAW;CACzC,QAAQ;CACR,aAAa,CAAC,SAAS;CACvB,QAAQ;EAAC;EAAY;EAAS;EAAU;CACxC,SAAS,SAAiB;CAC1B,SAAS,UAAkB;CAC5B,CAAC;AAEF,MAAa,mBAAmB,WAAW;CACzC,QAAQ;CACR,aAAa,CAAC,SAAS;CACvB,QAAQ;EAAC;EAAY;EAAS;EAAU;CACxC,SAAS,SAAiB;CAC1B,SAAS,UAAkB;CAC5B,CAAC;AAEF,MAAa,kBAAkB,WAAW;CACxC,QAAQ;CACR,aAAa,CAAC,MAAM;CACpB,QAAQ;EAAC;EAAY;EAAS;EAAU;CACxC,SAAS,SAAiB;CAC1B,SAAS,UAAkB;CAC5B,CAAC;AAEF,MAAa,oBAAoB,WAAW;CAC1C,QAAQ;CACR,aAAa,CAAC,OAAO;CACrB,QAAQ,CAAC,YAAY,UAAU;CAC/B,SAAS,SAAkB;CAC3B,SAAS,UAAmB;CAC7B,CAAC;AAEF,MAAa,iBAAiB,WAAW;CACvC,QAAQ;CACR,aAAa,CAAC,OAAO;CACrB,QAAQ,CAAC,YAAY,QAAQ;CAC7B,SAAS,SAAe;CACxB,SAAS,UAAgB;CACzB,aAAa,UAAgB,MAAM,aAAa;CAChD,aAAa,SAAS;AACpB,MAAI,OAAO,SAAS,SAAU,OAAM,IAAI,MAAM,2BAA2B;AACzE,SAAO,IAAI,KAAK,KAAK;;CAExB,CAAC;AAEF,MAAa,mBAAmB,WAAW;CACzC,QAAQ;CACR,aAAa,CAAC,SAAS;CACvB,QAAQ,CAAC,WAAW;CACpB,SAAS,SAA4B;CACrC,SAAS,UAA6B;CACtC,mBAAmB,eAAe;EAChC,MAAM,SAAS,WAAW;AAC1B,MAAI,WAAW,OAAW,QAAO;AACjC,MAAI,OAAO,WAAW,YAAY,CAAC,OAAO,SAAS,OAAO,IAAI,CAAC,OAAO,UAAU,OAAO,CACrF,OAAM,IAAI,MAAM,oEAAkE;AAEpF,SAAO,UAAU,OAAO;;CAE3B,CAAC;;;;ACxDF,SAAS,iBACP,QACmD;AACnD,QAAO,MAAM,QAAQ,OAAO;;AAG9B,IAAM,mBAAN,MAA+C;CAC7C,CAASqB;CAET,YAAY,QAA6B;AACvC,QAAKA,SAAU;;CAGjB,OAAMC,gBAAiB,MAAoC;EACzD,MAAM,UAAU,OAAO,QAAQ,KAAK;EACpC,MAAM,WAAW,MAAM,QAAQ,IAAI,QAAQ,KAAK,GAAG,SAAS,aAAa,KAAK,MAAKD,OAAQ,CAAC,CAAC;EAC7F,MAAME,SAAkC,EAAE;AAC1C,OAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;GACvC,MAAM,QAAQ,QAAQ;AACtB,OAAI,MACF,QAAO,MAAM,MAAM,SAAS;;AAGhC,SAAO;;CAGT,OAAMC,YAAa,QAAsE;AACvF,MAAI,iBAAiB,OAAO,CAC1B,QAAO,QAAQ,IAAI,OAAO,KAAK,UAAU,WAAW,OAAO,MAAKH,OAAQ,CAAC,CAAC;AAE5E,SAAO,MAAKC,gBAAiB,OAAO;;CAGtC,MAAM,MAAM,MAAoD;EAC9D,MAAM,EAAE,YAAY;AACpB,UAAQ,QAAQ,MAAhB;GACE,KAAK,YACH,QAAO,IAAI,qBACT,QAAQ,YACR,MAAM,MAAKA,gBAAiB,QAAQ,SAAS,CAC9C;GACH,KAAK,aAAa;IAChB,MAAM,CAAC,QAAQ,UAAU,MAAM,QAAQ,IAAI,CACzC,YAAY,QAAQ,QAAQ,MAAKD,OAAQ,EACzC,MAAKG,YAAa,QAAQ,OAAO,CAClC,CAAC;AACF,WAAO,IAAI,qBAAqB,QAAQ,YAAY,QAAQ,QAAQ,QAAQ,OAAO;;GAErF,KAAK,aACH,QAAO,IAAI,sBACT,QAAQ,YACR,MAAM,QAAQ,IAAI,QAAQ,UAAU,KAAK,QAAQ,MAAKF,gBAAiB,IAAI,CAAC,CAAC,CAC9E;GACH,KAAK,cAAc;IACjB,MAAM,CAAC,QAAQ,UAAU,MAAM,QAAQ,IAAI,CACzC,YAAY,QAAQ,QAAQ,MAAKD,OAAQ,EACzC,MAAKG,YAAa,QAAQ,OAAO,CAClC,CAAC;AACF,WAAO,IAAI,sBAAsB,QAAQ,YAAY,QAAQ,QAAQ,QAAQ,OAAO;;GAEtF,KAAK,YACH,QAAO,IAAI,qBACT,QAAQ,YACR,MAAM,YAAY,QAAQ,QAAQ,MAAKH,OAAQ,CAChD;GACH,KAAK,aACH,QAAO,IAAI,sBACT,QAAQ,YACR,MAAM,YAAY,QAAQ,QAAQ,MAAKA,OAAQ,CAChD;GACH,KAAK,oBAAoB;IACvB,MAAM,CAAC,QAAQ,UAAU,MAAM,QAAQ,IAAI,CACzC,YAAY,QAAQ,QAAQ,MAAKA,OAAQ,EACzC,MAAKG,YAAa,QAAQ,OAAO,CAClC,CAAC;AACF,WAAO,IAAI,4BACT,QAAQ,YACR,QACA,QACA,QAAQ,QACR,QAAQ,MACR,QAAQ,eACT;;GAEH,KAAK,mBACH,QAAO,IAAI,4BACT,QAAQ,YACR,MAAM,YAAY,QAAQ,QAAQ,MAAKH,OAAQ,EAC/C,QAAQ,KACT;GACH,KAAK,YACH,QAAO,IAAI,qBACT,QAAQ,YACR,MAAM,cAAc,QAAQ,UAAU,MAAKA,OAAQ,CACpD;GACH,KAAK,eACH,QAAO,IAAI,qBAAqB,QAAQ,YAAY,QAAQ,SAAS;GACvE,KAAK,eACH,QAAO,IAAI,qBAAqB,QAAQ,YAAY,QAAQ,SAAS;GACvE,KAAK,gBACH,QAAO,IAAI,sBAAsB,QAAQ,YAAY,QAAQ,UAAU;GACzE,KAAK,eACH,QAAO,IAAI,qBAAqB,QAAQ,YAAY,QAAQ,QAAQ,QAAQ,OAAO;GACrF,KAAK,gBACH,QAAO,IAAI,sBAAsB,QAAQ,YAAY,QAAQ,QAAQ,QAAQ,OAAO;GACtF,KAAK,eACH,QAAO,IAAI,qBAAqB,QAAQ,YAAY,QAAQ,OAAO;GACrE,KAAK,gBACH,QAAO,IAAI,sBAAsB,QAAQ,YAAY,QAAQ,OAAO;GACtE,KAAK,sBACH,QAAO,IAAI,4BACT,QAAQ,YACR,QAAQ,QACR,QAAQ,QACR,QAAQ,QACR,QAAQ,MACR,QAAQ,eACT;GACH,KAAK,sBACH,QAAO,IAAI,4BAA4B,QAAQ,YAAY,QAAQ,QAAQ,QAAQ,KAAK;GAE1F,SAAS;IACP,MAAMI,cAAqB;AAC3B,UAAM,IAAI,MAAM,yBAA0B,YAAiC,OAAO;;;;;AAgB1F,SAAS,uBAA2C;CAClD,MAAM,WAAW,0BAA0B;AAC3C,MAAK,MAAM,SAAS;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACC,UAAS,SAAS,MAAM;AAE1B,QAAO;;AAGT,SAAgB,mBAAmB,QAA2C;AAC5E,QAAO,IAAI,iBAAiB,UAAU,sBAAsB,CAAC"}
package/package.json CHANGED
@@ -1,35 +1,35 @@
1
1
  {
2
2
  "name": "@prisma-next/adapter-mongo",
3
- "version": "0.5.0-dev.14",
3
+ "version": "0.5.0-dev.16",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "description": "MongoDB adapter for Prisma Next (lowers commands to wire format)",
7
7
  "dependencies": {
8
8
  "arktype": "^2.1.29",
9
9
  "mongodb": "^6.16.0",
10
- "@prisma-next/target-mongo": "0.5.0-dev.14",
11
- "@prisma-next/contract": "0.5.0-dev.14",
12
- "@prisma-next/mongo-codec": "0.5.0-dev.14",
13
- "@prisma-next/config": "0.5.0-dev.14",
14
- "@prisma-next/mongo-contract": "0.5.0-dev.14",
15
- "@prisma-next/mongo-lowering": "0.5.0-dev.14",
16
- "@prisma-next/framework-components": "0.5.0-dev.14",
17
- "@prisma-next/mongo-query-ast": "0.5.0-dev.14",
18
- "@prisma-next/mongo-value": "0.5.0-dev.14",
19
- "@prisma-next/mongo-wire": "0.5.0-dev.14",
20
- "@prisma-next/operations": "0.5.0-dev.14",
21
- "@prisma-next/utils": "0.5.0-dev.14",
22
- "@prisma-next/mongo-schema-ir": "0.5.0-dev.14"
10
+ "@prisma-next/config": "0.5.0-dev.16",
11
+ "@prisma-next/target-mongo": "0.5.0-dev.16",
12
+ "@prisma-next/framework-components": "0.5.0-dev.16",
13
+ "@prisma-next/contract": "0.5.0-dev.16",
14
+ "@prisma-next/mongo-codec": "0.5.0-dev.16",
15
+ "@prisma-next/mongo-contract": "0.5.0-dev.16",
16
+ "@prisma-next/mongo-lowering": "0.5.0-dev.16",
17
+ "@prisma-next/mongo-query-ast": "0.5.0-dev.16",
18
+ "@prisma-next/mongo-value": "0.5.0-dev.16",
19
+ "@prisma-next/mongo-schema-ir": "0.5.0-dev.16",
20
+ "@prisma-next/operations": "0.5.0-dev.16",
21
+ "@prisma-next/utils": "0.5.0-dev.16",
22
+ "@prisma-next/mongo-wire": "0.5.0-dev.16"
23
23
  },
24
24
  "devDependencies": {
25
25
  "mongodb-memory-server": "10.4.3",
26
26
  "tsdown": "0.18.4",
27
27
  "typescript": "5.9.3",
28
28
  "vitest": "4.0.17",
29
- "@prisma-next/driver-mongo": "0.5.0-dev.14",
29
+ "@prisma-next/driver-mongo": "0.5.0-dev.16",
30
+ "@prisma-next/tsconfig": "0.0.0",
30
31
  "@prisma-next/test-utils": "0.0.1",
31
- "@prisma-next/tsdown": "0.0.0",
32
- "@prisma-next/tsconfig": "0.0.0"
32
+ "@prisma-next/tsdown": "0.0.0"
33
33
  },
34
34
  "files": [
35
35
  "dist",
@@ -1,10 +1,10 @@
1
1
  import type { OperationDescriptor } from '@prisma-next/operations';
2
- import { MONGO_INT32_CODEC_ID, MONGO_VECTOR_CODEC_ID } from './codec-ids';
2
+ import { MONGO_VECTOR_CODEC_ID } from './codec-ids';
3
3
 
4
4
  export const mongoVectorNearOperation = Object.freeze({
5
5
  method: 'near',
6
- args: [{ codecId: MONGO_VECTOR_CODEC_ID, nullable: false }],
7
- returns: { codecId: MONGO_INT32_CODEC_ID, nullable: false },
6
+ self: { codecId: MONGO_VECTOR_CODEC_ID },
7
+ impl: () => undefined as never,
8
8
  }) satisfies OperationDescriptor;
9
9
 
10
10
  export const mongoVectorOperationDescriptors: readonly OperationDescriptor[] = [