@prisma-next/mongo-orm 0.5.0-dev.9 → 0.5.0

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.d.mts CHANGED
@@ -2,7 +2,7 @@ import { AsyncIterableResult } from "@prisma-next/framework-components/runtime";
2
2
  import { MongoFilterExpr, MongoQueryPlan, MongoQueryPlan as MongoQueryPlan$1 } from "@prisma-next/mongo-query-ast/execution";
3
3
  import { Document, MongoValue } from "@prisma-next/mongo-value";
4
4
  import { SimplifyDeep } from "@prisma-next/utils/simplify-deep";
5
- import { ExtractMongoCodecTypes, ExtractMongoFieldInputTypes, ExtractMongoFieldOutputTypes, InferModelRow, MongoContract, MongoContractWithTypeMaps, MongoTypeMaps } from "@prisma-next/mongo-contract";
5
+ import { ExtractMongoCodecTypes, ExtractMongoFieldInputTypes, ExtractMongoFieldOutputTypes, InferModelRow, MongoContract, MongoContractWithTypeMaps, MongoModelDefinition, MongoTypeMaps } from "@prisma-next/mongo-contract";
6
6
  import { ContractField, ContractReferenceRelation, ContractValueObject } from "@prisma-next/contract/types";
7
7
 
8
8
  //#region src/executor.d.ts
@@ -29,7 +29,7 @@ type ValueObjectFieldKeys<TContract extends MongoContract, ModelName extends str
29
29
  };
30
30
  } ? K : never }[keyof TContract['models'][ModelName]['fields'] & string];
31
31
  type ResolvedModelRow<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>, ModelName extends string & keyof TContract['models']> = string extends keyof ExtractMongoFieldOutputTypes<TContract> ? InferModelRow<TContract, ModelName> : ModelName extends keyof ExtractMongoFieldOutputTypes<TContract> ? { -readonly [K in keyof ExtractMongoFieldOutputTypes<TContract>[ModelName]]: ExtractMongoFieldOutputTypes<TContract>[ModelName][K] } : InferModelRow<TContract, ModelName>;
32
- type ResolveFieldType<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>, ModelName extends string & keyof TContract['models'], K$1 extends keyof TContract['models'][ModelName]['fields'] & string> = K$1 extends keyof ResolvedModelRow<TContract, ModelName> ? ResolvedModelRow<TContract, ModelName>[K$1] : unknown;
32
+ type ResolveFieldType<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>, ModelName extends string & keyof TContract['models'], K extends keyof TContract['models'][ModelName]['fields'] & string> = K extends keyof ResolvedModelRow<TContract, ModelName> ? ResolvedModelRow<TContract, ModelName>[K] : unknown;
33
33
  type NumericOps = {
34
34
  inc(value: number): FieldOperation;
35
35
  mul(value: number): FieldOperation;
@@ -157,7 +157,7 @@ type ResolvedCreateInput<TContract extends MongoContractWithTypeMaps<MongoContra
157
157
  type ModelFieldKeys<TContract extends MongoContract, ModelName extends string & keyof TContract['models']> = keyof TContract['models'][ModelName]['fields'] & string;
158
158
  interface MongoCollection<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>, ModelName extends string & keyof TContract['models'], TIncludes extends MongoIncludeSpec<TContract, ModelName> = NoIncludes, TVariant extends string = never> {
159
159
  /** Narrows to a specific variant, injecting a discriminator filter. */
160
- variant<V$1 extends VariantNames<TContract, ModelName>>(variantName: V$1): MongoCollection<TContract, ModelName, TIncludes, V$1>;
160
+ variant<V extends VariantNames<TContract, ModelName>>(variantName: V): MongoCollection<TContract, ModelName, TIncludes, V>;
161
161
  /** Appends equality filters from a plain object. Values are encoded through codecs. */
162
162
  where(filter: MongoWhereFilter<TContract, ModelName>): MongoCollection<TContract, ModelName, TIncludes, TVariant>;
163
163
  /** Appends a filter condition from a raw filter expression. */
@@ -165,7 +165,7 @@ interface MongoCollection<TContract extends MongoContractWithTypeMaps<MongoContr
165
165
  /** Restricts returned fields to the given subset. Returns a new immutable collection. */
166
166
  select(...fields: ModelFieldKeys<TContract, ModelName>[]): MongoCollection<TContract, ModelName, TIncludes, TVariant>;
167
167
  /** Adds a `$lookup` for a reference relation. Returns a new immutable collection. */
168
- include<K$1 extends ReferenceRelationKeys<TContract, ModelName> & string>(relationName: K$1): MongoCollection<TContract, ModelName, TIncludes & Record<K$1, true>, TVariant>;
168
+ include<K extends ReferenceRelationKeys<TContract, ModelName> & string>(relationName: K): MongoCollection<TContract, ModelName, TIncludes & Record<K, true>, TVariant>;
169
169
  /** Sets sort order. Returns a new immutable collection. */
170
170
  orderBy(spec: Partial<Record<ModelFieldKeys<TContract, ModelName>, 1 | -1>>): MongoCollection<TContract, ModelName, TIncludes, TVariant>;
171
171
  /** Limits the number of results. Returns a new immutable collection. */
@@ -235,7 +235,7 @@ interface MongoCollectionState {
235
235
  }
236
236
  //#endregion
237
237
  //#region src/compile.d.ts
238
- declare function compileMongoQuery<Row = unknown>(collection: string, state: MongoCollectionState, storageHash: string): MongoQueryPlan$1<Row>;
238
+ declare function compileMongoQuery<Row = unknown>(collection: string, state: MongoCollectionState, storageHash: string, model: MongoModelDefinition): MongoQueryPlan$1<Row>;
239
239
  //#endregion
240
240
  //#region src/mongo-orm.d.ts
241
241
  interface MongoOrmOptions<TContract extends MongoContract> {
@@ -265,7 +265,7 @@ interface RawMongoCollection {
265
265
  //#endregion
266
266
  //#region src/mongo-raw.d.ts
267
267
  interface MongoRawClient<TContract extends MongoContract> {
268
- collection<K$1 extends keyof TContract['roots'] & string>(rootName: K$1): RawMongoCollection;
268
+ collection<K extends keyof TContract['roots'] & string>(rootName: K): RawMongoCollection;
269
269
  }
270
270
  declare function mongoRaw<TContract extends MongoContract>(options: {
271
271
  contract: TContract;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/executor.ts","../src/field-accessor.ts","../src/types.ts","../src/collection.ts","../src/collection-state.ts","../src/compile.ts","../src/mongo-orm.ts","../src/raw-collection.ts","../src/mongo-raw.ts"],"sourcesContent":[],"mappings":"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zB,SF1CyB,EE0Cd,SF1Cc,CAAA,GE2CvC,SF3CuC,SAAA,ME2Cf,4BF3Ce,CE2Cc,SF3Cd,CAAA,GAAA,kBAAmB,ME6ChC,4BF7CgC,CE6CH,SF7CG,CAAA,CE6CQ,SF7CR,CAAA,GE6CqB,4BF7CrB,CE6CkD,SF7ClD,CAAA,CE6C6D,SF7C7D,CAAA,CE6CwE,CF7CxE,CAAA,KE+CxD,cAAc,WAAW;KAE1B,mCACe,0BAA0B,eAAe,iDAC1B,4CACV,4BAA4B,aACjD,cAAc,WAAW,aACzB,wBAAwB,4BAA4B,qCAE1B,4BAA4B,WAAW,aAAa,4BAA4B,WAAW,WAAW,ID9CpI,GCgDM,aDhDM,CCgDQ,SDhDM,ECgDK,SDhDL,CAAA;AAU1B,KCwCK,oBDxC0B,CAAA,kBCyCX,yBDtCQ,CCsCkB,aDtClB,ECsCiC,aDtCjC,CAAA,EAAA,kBAAA,MAAA,GAAA,MCuCO,SDvCP,CAAA,QAAA,CAAA,EAAA,eAAA,MCwCL,cDxCK,CCwCU,SDxCV,ECwCqB,SDxCrB,CAAA,CAAA,GCyCxB,cDzCwB,CCyCT,SDzCS,ECyCE,SDzCF,CAAA,CCyCa,MDzCb,CAAA,SAAA;EAKvB,SAAA,EAAA,EAAA,KAAe,YAAA,MAAA,GAAA,MCqC2B,SDrC3B,CAAA,QAAA,CAAA;EACA,SAAA,WAAA,EAAA,KAAA,EAAA;CACe,GCsC/B,cDtC+B,CCsChB,SDtCgB,ECsCL,SDtCK,CAAA,CCsCM,MDtCN,CAAA,SCsCsB,yBDtCtB,GAAA,KAAA,GAAA,CAAA,SAAA,KAAA,GCyC3B,iBDzC2B,CCyCT,SDzCS,ECyCE,EDzCF,CAAA,EAAA,GC0C3B,iBD1C2B,CC0CT,SD1CS,EC0CE,ED1CF,CAAA,GAAA,KAAA;AAErB,KC2CF,YD3CE,CAAA,kBC4CM,yBD5CN,CC4CgC,aD5ChC,EC4C+C,aD5C/C,CAAA,EAAA,kBAAA,MAAA,GAAA,MC6CqB,SD7CrB,CAAA,QAAA,CAAA,CAAA,GC8CV,iBD9CU,CC8CQ,SD9CR,EC8CmB,SD9CnB,CAAA,SAAA,KAAA,GC+CV,iBD/CU,CC+CQ,SD/CR,EC+CmB,SD/CnB,CAAA,GCgDV,iBDhDU,CCgDQ,SDhDR,ECgDmB,SDhDnB,CAAA,GAAA,kBCiDQ,iBDjDY,CCiDM,SDjDN,ECiDiB,SDjDjB,CAAA,GAAA,MCkDpB,cDlDoB,CCkDL,SDlDK,ECkDM,SDlDN,CAAA,GCkDmB,oBDlDnB,CCkDwC,SDlDxC,ECkDmD,SDlDnD,ECkD8D,CDlD9D,CAAA,EACrB;KCoDR,UDpD4B,CAAA,kBCqDb,yBDrDa,CCqDa,aDrDb,ECqD4B,aDrD5B,CAAA,EAAA,kBAAA,MAAA,GAAA,MCsDE,SDtDF,CAAA,QAAA,CAAA,CAAA,GCuD7B,SDvD6B,CAAA,QAAA,CAAA,CCuDT,SDvDS,CAAA,SAAA;EAAqB,SAAA,aAAA,EAAA;IAGhD,SAAA,KAAA,EAAA,KAAA,mBAAA,MAAA;EAEE,CAAA;EAAoB,SAAA,QAAA,EAAA,KAAA,EAAA;CAAS,GAAA,CAAA,SCsDvB,MDtDuB,CAAA,MAAA,EAAA;EAEhC,SAAA,KAAA,EAAA,MAAA;CACe,CAAA,GAAA,SACe,MCoDd,CDpDc,GCoDV,EDpDU,SAAA,MAAA,GAAA,MCoDgB,SDpDhB,CAAA,QAAA,CAAA,GCqDvB,QDrDuB,CCsDrB,IDtDqB,CCsDhB,YDtDgB,CCsDH,SDtDG,ECsDQ,SDtDR,CAAA,ECsDoB,SDtDpB,CAAA,GCuDnB,YDvDmB,CCuDN,SDvDM,ECuDK,EDvDL,CAAA,GCwDnB,MDxDmB,CCwDZ,SDxDY,ECwDD,CDxDC,CCwDC,EDxDD,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,GAAA,KAAA,EAErB,CAAA,MCyDA,CDzDA,CAAA,GC0DR,YD1DQ,CC0DK,SD1DL,EC0DgB,SD1DhB,CAAA,GC2DV,YD3DU,CC2DG,SD3DH,EC2Dc,SD3Dd,CAAA;AAAoB,KC6DtB,YD7DsB,CAAA,kBC8Dd,yBD9Dc,CC8DY,aD9DZ,EC8D2B,aD9D3B,CAAA,EAAA,kBAAA,MAAA,GAAA,MC+DC,SD/DD,CAAA,QAAA,CAAA,CAAA,GCgE9B,UDhE8B,CCgEnB,SDhEmB,ECgER,SDhEQ,CAAA;AACrB,KCiED,YDjEC,CAAA,kBCkEO,aDlEP,EAAA,kBAAA,MAAA,GAAA,MCmEsB,SDnEtB,CAAA,QAAA,CAAA,C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;EAAwC,CAAA;AAAW,CAAA,GCqHhI,WDrHgI,CCqHpH,GDrHoH,CAAA,CAAA,QAAA,CAAA,GAAA,OAAA,EAElH;AAAW,KCuHnB,gBDvHmB,CAAA,kBCwHX,aDxHW,EAAA,kBAAA,MAAA,GAAA,MCyHI,SDzHJ,CAAA,QAAA,CAAA,CAAA,GAAA,iBC2Hd,qBD3HX,CC2HiC,SD3HjC,EC2H4C,SD3H5C,CAAA,IAAA,IAAA,EAAa;AAEd,KC4HO,UAAA,GAAa,ID5HJ,CC4HS,MD5HT,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,KAAA,CAAA;AACyB,KC6HlC,WD7HkC,CAAA,kBC8H1B,yBD9H0B,CC8HA,aD9HA,EC8He,aD9Hf,CAAA,EAAA,kBAAA,MAAA,GAAA,MC+HX,SD/HW,CAAA,QAAA,CAAA,EAAA,kBCgI1B,gBDhI0B,CCgIT,SDhIS,ECgIE,SDhIF,CAAA,GCgIe,UDhIf,CAAA,GCiI1C,YDjI0C,CCiI7B,SDjI6B,ECiIlB,SDjIkB,CAAA,GCiIL,mBDjIK,CCiIe,SDjIf,ECiI0B,SDjI1B,ECiIqC,SDjIrC,CAAA;AAAe,KCmIjD,eDnIiD,CAAA,kBCoIzC,yBDpIyC,CCoIf,aDpIe,ECoIA,aDpIA,CAAA,EAAA,kBAAA,MAAA,GAAA,MCqI1B,SDrI0B,CAAA,QAAA,CAAA,CAAA,GCsIzD,iBDtIyD,CCsIvC,SDtIuC,ECsI5B,SDtI4B,CAAA;AAAzC,KCwIR,WDxIQ,CAAA,kBCyIA,yBDzIA,CCyI0B,aDzI1B,ECyIyC,aDzIzC,CAAA,EAAA,kBAAA,MAAA,GAAA,MC0Ie,SD1If,CAAA,QAAA,CAAA,CAAA,GC2IhB,ID3IgB,CC2IX,gBD3IW,CC2IM,SD3IN,EC2IiB,SD3IjB,CAAA,EAAA,KAAA,CAAA,GC4IlB,OD5IkB,CC6IhB,ID7IgB,CC8Id,gBD9Ic,CC8IG,SD9IH,EC8Ic,SD9Id,CAAA,EAAA,KAAA,GAAA,MC+IA,gBD/IA,CC+IiB,SD/IjB,EC+I4B,SD/I5B,CAAA,CAAA,CAAA;KCmJf,kBDlJ8B,CAAA,kBCmJf,aDnJe,EAAA,kBAAA,MAAA,GAAA,MCoJA,SDpJA,CAAA,QAAA,CAAA,CAAA,GCqJ/B,SDrJ+B,CAAA,QAAA,CAAA,CCqJX,SDrJW,CAAA,SAAA;EACjB,SAAA,aAAA,EAAA;IAAoB,SAAA,KAAA,EAAA,KAAA,WAAA,MAAA;EAClC,CAAA;CAAiC,GAAA,CAAA,GAAA,KAAA;AAAW,KC6JpC,kBD7JoC,CAAA,kBC8J5B,yBD9J4B,CC8JF,aD9JE,EC8Ja,aD9Jb,CAAA,EAAA,kBAAA,MAAA,GAAA,MC+Jb,SD/Ja,CAAA,QAAA,CAAA,EAAA,oBAAA,MAAA,CAAA,GCiK5C,IDjK4C,CCkK9C,eDlK8C,CCkK9B,SDlK8B,ECkKnB,SDlKmB,ECkKR,WDlKQ,CAAA,EAAA,KAAA,GCmKtC,kBDnKsC,CCmKnB,SDnKmB,ECmKR,SDnKQ,CAAA,CAAA,GCqK9C,ODrK8C,CCsK5C,IDtK4C,CCuK1C,gBDvK0C,CCuKzB,SDvKyB,ECuKd,SDvKc,CAAA,EAAA,KAAA,GAAA,MCwK5B,gBDxK4B,CCwKX,SDxKW,ECwKA,SDxKA,CAAA,CAAA,CAAA;AAA5B,KC4KR,mBD5KQ,CAAA,kBC6KA,yBD7KA,CC6K0B,aD7K1B,EC6KyC,aD7KzC,CAAA,EAAA,kBAAA,MAAA,GAAA,MC8Ke,SD9Kf,CAAA,QAAA,CAAA,EAAA,iBAAA,MAAA,CAAA,GAAA,CCgLf,QDhLe,CAAA,SAAA,CAAA,KAAA,CAAA,GCiLhB,WDjLgB,CCiLJ,SDjLI,ECiLO,SDjLP,CAAA,GCkLhB,kBDlLgB,CCkLG,SDlLH,ECkLc,SDlLd,ECkLyB,QDlLzB,CAAA;;;KEnBf,iCACe,gDACe,6BACzB,oBAAoB;UAEb,kCACG,0BAA0B,eAAe,iDAC1B,uCACf,iBAAiB,WAAW,aAAa;EHzD5C;EACmB,OAAA,CAAA,YG4DhB,YH5DgB,CG4DH,SH5DG,EG4DQ,SH5DR,CAAA,CAAA,CAAA,WAAA,EG6DnB,GH7DmB,CAAA,EG8D/B,eH9D+B,CG8Df,SH9De,EG8DJ,SH9DI,EG8DO,SH9DP,EG8DkB,GH9DlB,CAAA;EAAf;EAA0C,KAAA,CAAA,MAAA,EGiEnD,gBHjEmD,CGiElC,SHjEkC,EGiEvB,SHjEuB,CAAA,CAAA,EGkE1D,eHlE0D,CGkE1C,SHlE0C,EGkE/B,SHlE+B,EGkEpB,SHlEoB,EGkET,QHlES,CAAA;EAApB;EAAmB,KAAA,CAAA,MAAA,EGoE9C,eHpE8C,CAAA,EGoE5B,eHpE4B,CGoEZ,SHpEY,EGoED,SHpEC,EGoEU,SHpEV,EGoEqB,QHpErB,CAAA;;oBGuE/C,eAAe,WAAW,eACpC,gBAAgB,WAAW,WAAW,WAAW;;EF9D1C,OAAA,CAAA,YEgEQ,qBFhEM,CEgEgB,SFhEhB,EEgE2B,SFhE3B,CAAA,GAAA,MAAA,CAAA,CAAA,YAAA,EEiER,GFjEQ,CAAA,EEkErB,eFlEqB,CEkEL,SFlEK,EEkEM,SFlEN,EEkEiB,SFlEjB,GEkE6B,MFlE7B,CEkEoC,GFlEpC,EAAA,IAAA,CAAA,EEkE8C,QFlE9C,CAAA;EAUT;EAQZ,OAAA,CAAA,IAAA,EEmDK,OFnDU,CEmDF,MFnDE,CEmDK,cFnDL,CEmDoB,SFnDpB,EEmD+B,SFnD/B,CAAA,EAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EEoDf,eFpDe,CEoDC,SFpDD,EEoDY,SFpDZ,EEoDuB,SFpDvB,EEoDkC,QFpDlC,CAAA;EACA;EACe,IAAA,CAAA,CAAA,EAAA,MAAA,CAAA,EEoDhB,eFpDgB,CEoDA,SFpDA,EEoDW,SFpDX,EEoDsB,SFpDtB,EEoDiC,QFpDjC,CAAA;EAErB;EAAoB,IAAA,CAAA,CAAA,EAAA,MAAA,CAAA,EEoDf,eFpDe,CEoDC,SFpDD,EEoDY,SFpDZ,EEoDuB,SFpDvB,EEoDkC,QFpDlC,CAAA;EACrB;EAAoB,GAAA,EAAA,EEqDxB,mBFrDwB,CEqDJ,WFrDI,CEqDQ,SFrDR,EEqDmB,SFrDnB,EEqD8B,SFrD9B,CAAA,CAAA;EAAqB;EAGhD,KAAA,EAAA,EEoDK,OFpDL,CEoDa,WFpDb,CEoDyB,SFpDzB,EEoDoC,SFpDpC,EEoD+C,SFpD/C,CAAA,GAAA,IAAA,CAAA;EAEE;EAAoB,MAAA,CAAA,IAAA,EEqDlB,mBFrDkB,CEqDE,SFrDF,EEqDa,SFrDb,EEqDwB,QFrDxB,CAAA,CAAA,EEsDvB,OFtDuB,CEsDf,WFtDe,CEsDH,SFtDG,EEsDQ,SFtDR,EEsDmB,SFtDnB,CAAA,CAAA;EAAS;EAEhC,SAAA,CAAA,IAAA,EEuDK,aFvDe,CEuDD,mBFvDC,CEuDmB,SFvDnB,EEuD8B,SFvD9B,EEuDyC,QFvDzC,CAAA,CAAA,CAAA,EEwDpB,mBFxDoB,CEwDA,WFxDA,CEwDY,SFxDZ,EEwDuB,SFxDvB,EEwDkC,SFxDlC,CAAA,CAAA;EACL;EACe,WAAA,CAAA,IAAA,EEyDzB,aFzDyB,CEyDX,mBFzDW,CEyDS,SFzDT,EEyDoB,SFzDpB,EEyD+B,QFzD/B,CAAA,CAAA,CAAA,EE0D9B,OF1D8B,CAAA,MAAA,CAAA;EAErB;EAAoB,MAAA,CAAA,IAAA,EE2DxB,OF3DwB,CE2DhB,eF3DgB,CE2DA,SF3DA,EE2DW,SF3DX,CAAA,CAAA,CAAA,EE4D7B,OF5D6B,CE4DrB,WF5DqB,CE4DT,SF5DS,EE4DE,SF5DF,EE4Da,SF5Db,CAAA,GAAA,IAAA,CAAA;EACrB;EAAoB,MAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EE8Df,aF9De,CE8DD,SF9DC,EE8DU,SF9DV,CAAA,EAAA,GE8DyB,cF9DzB,EAAA,CAAA,EE+D5B,OF/D4B,CE+DpB,WF/DoB,CE+DR,SF/DQ,EE+DG,SF/DH,EE+Dc,SF/Dd,CAAA,GAAA,IAAA,CAAA;EAAqB;EAGhD,SAAA,CAAA,IAAA,EE+DI,OF/DJ,CE+DY,eF/DZ,CE+D4B,SF/D5B,EE+DuC,SF/DvC,CAAA,CAAA,CAAA,EEgED,mBFhEC,CEgEmB,WFhEnB,CEgE+B,SFhE/B,EEgE0C,SFhE1C,EEgEqD,SFhErD,CAAA,CAAA;EAEE;EAAoB,SAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EEiEV,aFjEU,CEiEI,SFjEJ,EEiEe,SFjEf,CAAA,EAAA,GEiE8B,cFjE9B,EAAA,CAAA,EEkEvB,mBFlEuB,CEkEH,WFlEG,CEkES,SFlET,EEkEoB,SFlEpB,EEkE+B,SFlE/B,CAAA,CAAA;EAAS;EAEhC,WAAA,CAAA,IAAA,EEkEe,OFlEC,CEkEO,eFlEP,CEkEuB,SFlEvB,EEkEkC,SFlElC,CAAA,CAAA,CAAA,EEkEgD,OFlEhD,CAAA,MAAA,CAAA;EACyB;EAAe,WAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EEoE3C,aFpE2C,CEoE7B,SFpE6B,EEoElB,SFpEkB,CAAA,EAAA,GEoEH,cFpEG,EAAA,CAAA,EEqExD,OFrEwD,CAAA,MAAA,CAAA;EAAzC;EACe,MAAA,EAAA,EEsEvB,OFtEuB,CEsEf,WFtEe,CEsEH,SFtEG,EEsEQ,SFtER,EEsEmB,SFtEnB,CAAA,GAAA,IAAA,CAAA;EACmB;EAA7B,SAAA,EAAA,EEuEV,mBFvEU,CEuEU,WFvEV,CEuEsB,SFvEtB,EEuEiC,SFvEjC,EEuE4C,SFvE5C,CAAA,CAAA;EACP;EAAW,WAAA,EAAA,EEwEZ,OFxEY,CAAA,MAAA,CAAA;EAAzB;;;;;EAG0B,MAAA,CAAA,KAAA,EAAA;IAAwC,MAAA,EE4E1D,mBF5E0D,CE4EtC,SF5EsC,EE4E3B,SF5E2B,EE4EhB,QF5EgB,CAAA;IAA0C,MAAA,EE6EpG,OF7EoG,CE6E5F,eF7E4F,CE6E5E,SF7E4E,EE6EjE,SF7EiE,CAAA,CAAA;EAA7B,CAAA,CAAA,EE8E7E,OF9E6E,CE8ErE,WF9EqE,CE8EzD,SF9EyD,EE8E9C,SF9E8C,EE8EnC,SF9EmC,CAAA,CAAA;EAAwC;EAAW,MAAA,CAAA,KAAA,EAAA;IAElH,MAAA,EE+ER,mBF/EQ,CE+EY,SF/EZ,EE+EuB,SF/EvB,EE+EkC,QF/ElC,CAAA;IAAW,MAAA,EAAA,CAAA,CAAA,EEgFf,aFhFe,CEgFD,SFhFC,EEgFU,SFhFV,CAAA,EAAA,GEgFyB,cFhFzB,EAAA;EAAzB,CAAA,CAAA,EEiFA,OFjFA,CEiFQ,WFjFR,CEiFoB,SFjFpB,EEiF+B,SFjF/B,EEiF0C,SFjF1C,CAAA,CAAA;;AAED,iBEwuBW,qBFxuBK,CAAA,kBEyuBD,yBFzuBC,CEyuByB,aFzuBzB,EEyuBwC,aFzuBxC,CAAA,EAAA,kBAAA,MAAA,GAAA,ME0uBc,SF1uBd,CAAA,QAAA,CAAA,CAAA,CAAA,QAAA,EE4uBT,SF5uBS,EAAA,SAAA,EE6uBR,SF7uBQ,EAAA,QAAA,EE8uBT,kBF9uBS,CAAA,EE+uBlB,eF/uBkB,CE+uBF,SF/uBE,EE+uBS,SF/uBT,CAAA;;;UGjEJ,gBAAA;;;;;;;AJCA,UIOA,oBAAA,CJPkB;EACC,SAAA,OAAA,EAAA,SIOP,eJPO,EAAA;EAAf,SAAA,QAAA,EAAA,SIQS,gBJRT,EAAA;EAA0C,SAAA,OAAA,EIS3C,QJT2C,CISlC,MJTkC,CAAA,MAAA,EAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,SAAA;EAApB,SAAA,cAAA,EAAA,SAAA,MAAA,EAAA,GAAA,SAAA;EAAmB,SAAA,KAAA,EAAA,MAAA,GAAA,SAAA;;;;;iBKgC9C,4DAEP,4CAEN,iBAAe;;;UC/BD,kCAAkC;qBAC9B;qBACA;;KAGT,iCACQ,0BAA0B,eAAe,mCNZ5C,MMcM,SNdY,CAAA,OAAA,CAAA,GMcS,SNdT,CAAA,OAAA,CAAA,CMc4B,CNd5B,CAAA,SAAA,MAAA,GAAA,MMezB,SNfyB,CAAA,QAAA,CAAA,GMgB7B,eNhB6B,CMgBb,SNhBa,EMgBF,SNhBE,CAAA,OAAA,CAAA,CMgBiB,CNhBjB,CAAA,CAAA,GAAA,KAAA,EACC;AAAf,iBMmBL,QNnBK,CAAA,kBMmBsB,yBNnBtB,CMmBgD,aNnBhD,EMmB+D,aNnB/D,CAAA,CAAA,CAAA,OAAA,EMoBV,eNpBU,CMoBM,SNpBN,CAAA,CAAA,EMqBlB,cNrBkB,CMqBH,SNrBG,CAAA;;;UOWX;WACC,iBAAe;;UAGT,kBAAA;kBACC,mCAAmC,cAAc,YAAY,UAAU;EPjBxE,SAAA,CAAA,QAAA,EOmBK,QPnBa,CAAA,EOmBF,SPnBE;EACC,UAAA,CAAA,SAAA,EOmBZ,aPnBY,COmBE,QPnBF,CAAA,CAAA,EOmBc,SPnBd;EAAf,SAAA,CAAA,MAAA,EOqBD,QPrBC,EAAA,MAAA,EOqBiB,QPrBjB,GOqB4B,aPrB5B,COqB0C,QPrB1C,CAAA,CAAA,EOqBsD,SPrBtD;EAA0C,UAAA,CAAA,MAAA,EOuB1C,QPvB0C,EAAA,MAAA,EOuBxB,QPvBwB,GOuBb,aPvBa,COuBC,QPvBD,CAAA,CAAA,EOuBa,SPvBb;EAApB,SAAA,CAAA,MAAA,EOyBvB,QPzBuB,CAAA,EOyBZ,SPzBY;EAAmB,UAAA,CAAA,MAAA,EO0BzC,QP1ByC,CAAA,EO0B9B,SP1B8B;2BO6BlD,kBACA,WAAW,cAAc;;MAEhC;ENtBO,gBAAA,CAAc,MAAA,EMwBC,QNxBD,CAAA,EMwBY,SNxBZ;AAU1B;;;UOpBiB,iCAAiC;+BACrB,uCAAuC,MAAI;;iBAGxD,2BAA2B;YAC/B;IACR,eAAe"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/executor.ts","../src/field-accessor.ts","../src/types.ts","../src/collection.ts","../src/collection-state.ts","../src/compile.ts","../src/mongo-orm.ts","../src/raw-collection.ts","../src/mongo-raw.ts"],"mappings":";;;;;;;;UAGiB,kBAAA;EACf,OAAA,MAAa,IAAA,EAAM,gBAAA,CAAe,GAAA,IAAO,mBAAA,CAAoB,GAAA;AAAA;;;KCUnD,cAAA;AAAA,UAUK,cAAA;EAAA,SACN,QAAA,EAAU,cAAA;EAAA,SACV,KAAA;EAAA,SACA,KAAA,EAAO,UAAA;AAAA;AAAA,KAKb,eAAA,mBACe,aAAA,mCACe,SAAA,4BAErB,SAAA,WAAoB,SAAA,uBACrB,SAAA,WAAoB,SAAA,YAAqB,CAAA;EAAA,SACzC,IAAA;IAAA,SAAiB,IAAA;EAAA;AAAA,IAExB,CAAA,iBAEE,SAAA,WAAoB,SAAA;AAAA,KAEvB,oBAAA,mBACe,aAAA,mCACe,SAAA,4BAErB,SAAA,WAAoB,SAAA,uBACrB,SAAA,WAAoB,SAAA,YAAqB,CAAA;EAAA,SACzC,IAAA;IAAA,SAAiB,IAAA;IAAA,SAA8B,IAAA;EAAA;AAAA,IAEtD,CAAA,iBAEE,SAAA,WAAoB,SAAA;AAAA,KAEvB,gBAAA,mBACe,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,mCACV,4BAAA,CAA6B,SAAA,IAClD,aAAA,CAAc,SAAA,EAAW,SAAA,IACzB,SAAA,eAAwB,4BAAA,CAA6B,SAAA,4BAE3B,4BAAA,CAA6B,SAAA,EAAW,SAAA,IAAa,4BAAA,CAA6B,SAAA,EAAW,SAAA,EAAW,CAAA,MAEhI,aAAA,CAAc,SAAA,EAAW,SAAA;AAAA,KAE1B,gBAAA,mBACe,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,4BACjB,SAAA,WAAoB,SAAA,wBAClC,CAAA,eAAgB,gBAAA,CAAiB,SAAA,EAAW,SAAA,IAC5C,gBAAA,CAAiB,SAAA,EAAW,SAAA,EAAW,CAAA;AAAA,KAGtC,UAAA;EACH,GAAA,CAAI,KAAA,WAAgB,cAAA;EACpB,GAAA,CAAI,KAAA,WAAgB,cAAA;AAAA;AAAA,KAGV,eAAA;EACV,GAAA,CAAI,KAAA,EAAO,CAAA,GAAI,cAAA;EACf,KAAA,IAAS,cAAA;EACT,IAAA,CAAK,KAAA,EAAO,CAAA,gCAAiC,CAAA,aAAc,cAAA;EAC3D,IAAA,CAAK,KAAA,EAAO,CAAA,gCAAiC,CAAA,GAAI,OAAA,CAAQ,CAAA,cAAe,cAAA;EACxE,QAAA,CAAS,KAAA,EAAO,CAAA,gCAAiC,CAAA,aAAc,cAAA;EAC/D,GAAA,CAAI,GAAA,WAAc,cAAA;AAAA,KACf,CAAA,kBAAmB,UAAA;AAAA,KAEnB,eAAA;EAAA,SAA6B,YAAA,GAAe,MAAA,SAAe,mBAAA;AAAA;AAAA,KAE3D,QAAA,mBAA2B,eAAA,2BAA0C,SAAA;EAAA,SAC/D,YAAA,oBAAgC,MAAA,SAAe,mBAAA;AAAA,IAEtD,MAAA,eAAqB,GAAA,GACnB,GAAA,CAAI,MAAA;AAAA,KAIL,iBAAA,gBAAiC,MAAA,SAAe,aAAA,mBACvC,MAAA,YAAkB,MAAA,CAAO,CAAA;EAAA,SAAsB,IAAA;IAAA,SAAiB,IAAA;EAAA;AAAA,IACxE,CAAA,iBAEE,MAAA;AAAA,KAEH,sBAAA,gBAAsC,MAAA,SAAe,aAAA,mBAC5C,MAAA,YAAkB,MAAA,CAAO,CAAA;EAAA,SAC1B,IAAA;IAAA,SAAiB,IAAA;IAAA,SAA8B,IAAA;EAAA;AAAA,IAEtD,CAAA,iBAEE,MAAA;AAAA,KAEH,UAAA,mBACe,eAAA,iBACH,MAAA,SAAe,aAAA,oCAGpB,iBAAA,CAAkB,MAAA,OAAa,MAAA,GAAS,CAAA,KAAM,iBAAA,CAAkB,MAAA,aAEhE,sBAAA,CAAuB,MAAA,IAAU,MAAA,CAAO,CAAA;EAAA,SACnC,IAAA;IAAA,SAAiB,IAAA;IAAA,SAA8B,IAAA;EAAA;AAAA,IAEtD,UAAA,CAAW,SAAA,EAAW,QAAA,CAAS,SAAA,EAAW,CAAA,MAAO,MAAA,GAAS,CAAA,eAE9D,sBAAA,CAAuB,MAAA;AAAA,KAEjB,OAAA,mBACQ,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,sBAE3B,oBAAA,CACJ,SAAA,EACA,SAAA,IACE,SAAA,WAAoB,SAAA,YAAqB,CAAA;EAAA,SAClC,IAAA;IAAA,SAAiB,IAAA;IAAA,SAA8B,IAAA;EAAA;AAAA,IAEtD,UAAA,CAAW,SAAA,EAAW,QAAA,CAAS,SAAA,EAAW,CAAA,MAAO,CAAA,eAErD,oBAAA,CAAqB,SAAA,EAAW,SAAA;AAAA,KAE7B,sBAAA,mBACe,eAAA,iBACH,MAAA,SAAe,aAAA,4CAEV,MAAA;EAAiB,MAAA;AAAA,MACnC,IAAA,yCACA,IAAA,eAAmB,MAAA,YACjB,MAAA,CAAO,IAAA;EAAA,SACI,IAAA;IAAA,SAAiB,IAAA;IAAA,SAA8B,IAAA;EAAA;AAAA,IAExD,sBAAA,CAAuB,SAAA,EAAW,QAAA,CAAS,SAAA,EAAW,CAAA,GAAI,IAAA,EAAM,WAAA,oBAGpE,IAAA,eAAmB,MAAA,YACjB,MAAA,CAAO,IAAA;EAAA,SACI,IAAA;IAAA,SACE,IAAA;IAAA,SACA,OAAA,mCAA0C,WAAA;EAAA;AAAA,IAGrD,WAAA,CAAY,GAAA;AAAA,KAIR,kBAAA,mBACQ,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,qDAEb,MAAA;EAAiB,MAAA;AAAA,KAAqB,sBAAA,CAAuB,SAAA,KAC/E,IAAA,yCACA,IAAA,eAAmB,SAAA,WAAoB,SAAA,uBACrC,SAAA,WAAoB,SAAA,YAAqB,IAAA;EAAA,SAC9B,IAAA;IAAA,SAAiB,IAAA;IAAA,SAA8B,IAAA;EAAA;AAAA,IAExD,sBAAA,CAAuB,SAAA,EAAW,QAAA,CAAS,SAAA,EAAW,CAAA,GAAI,IAAA,EAAM,WAAA;AAAA,KAK5D,aAAA,mBACQ,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,+BAElB,eAAA,CAAgB,SAAA,EAAW,SAAA,IAAa,eAAA,CACrD,gBAAA,CAAiB,SAAA,EAAW,SAAA,EAAW,CAAA,wBAG1B,oBAAA,CAAqB,SAAA,EAAW,SAAA,IAAa,eAAA,CAC1D,gBAAA,CAAiB,SAAA,EAAW,SAAA,EAAW,CAAA,mBAE3B,OAAA,CAAQ,SAAA,EAAW,SAAA,GAC/B,IAAA,EAAM,CAAA,KACH,eAAA,CAAgB,kBAAA,CAAmB,SAAA,EAAW,SAAA,EAAW,CAAA;AAAA,iBA2ChD,mBAAA,mBACI,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,WAAA,CAAA,GAC9B,aAAA,CAAc,SAAA,EAAW,SAAA;;;KCpOzB,QAAA,MAAc,CAAA,iCAAkC,CAAA,GAAI,CAAA,CAAE,CAAA;AAAA,KAEtD,cAAA,mBACe,aAAA,mCACe,SAAA,cAC/B,WAAA,CAAY,SAAA,WAAoB,SAAA;AAAA,KAExB,qBAAA,mBACQ,aAAA,mCACe,SAAA,4BAErB,cAAA,CAAe,SAAA,EAAW,SAAA,IAAa,cAAA,CACjD,SAAA,EACA,SAAA,EACA,CAAA,UAAW,yBAAA,GACT,CAAA,iBAEE,cAAA,CAAe,SAAA,EAAW,SAAA;AAAA,KAEtB,iBAAA,mBACQ,aAAA,mCACe,SAAA,4BAErB,cAAA,CAAe,SAAA,EAAW,SAAA,IAAa,cAAA,CACjD,SAAA,EACA,SAAA,EACA,CAAA,UAAW,yBAAA,WAET,CAAA,SACE,cAAA,CAAe,SAAA,EAAW,SAAA;AAAA,KAE7B,iBAAA,mBACe,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,mCACV,4BAAA,CAA6B,SAAA,IAClD,aAAA,CAAc,SAAA,EAAW,SAAA,IACzB,SAAA,eAAwB,4BAAA,CAA6B,SAAA,4BAE3B,4BAAA,CAA6B,SAAA,EAAW,SAAA,IAAa,4BAAA,CAA6B,SAAA,EAAW,SAAA,EAAW,CAAA,MAEhI,aAAA,CAAc,SAAA,EAAW,SAAA;AAAA,KAE1B,gBAAA,mBACe,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,mCACV,2BAAA,CAA4B,SAAA,IACjD,aAAA,CAAc,SAAA,EAAW,SAAA,IACzB,SAAA,eAAwB,2BAAA,CAA4B,SAAA,4BAE1B,2BAAA,CAA4B,SAAA,EAAW,SAAA,IAAa,2BAAA,CAA4B,SAAA,EAAW,SAAA,EAAW,CAAA,MAE9H,aAAA,CAAc,SAAA,EAAW,SAAA;AAAA,KAE1B,oBAAA,mBACe,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,iCACZ,cAAA,CAAe,SAAA,EAAW,SAAA,KAC7C,cAAA,CAAe,SAAA,EAAW,SAAA,EAAW,MAAA;EAAA,SAC9B,EAAA,kCAAoC,SAAA;EAAA,SACpC,WAAA;AAAA,IAEP,cAAA,CAAe,SAAA,EAAW,SAAA,EAAW,MAAA,UAAgB,yBAAA,WAEnD,CAAA,iBACE,iBAAA,CAAkB,SAAA,EAAW,EAAA,MAC7B,iBAAA,CAAkB,SAAA,EAAW,EAAA;AAAA,KAGzB,YAAA,mBACQ,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,cAC/B,iBAAA,CAAkB,SAAA,EAAW,SAAA,kBAC7B,iBAAA,CAAkB,SAAA,EAAW,SAAA,IAC7B,iBAAA,CAAkB,SAAA,EAAW,SAAA,sBACX,iBAAA,CAAkB,SAAA,EAAW,SAAA,UACrC,cAAA,CAAe,SAAA,EAAW,SAAA,IAAa,oBAAA,CAAqB,SAAA,EAAW,SAAA,EAAW,CAAA;AAAA,KAG3F,UAAA,mBACe,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,cAC/B,SAAA,WAAoB,SAAA;EAAA,SACb,aAAA;IAAA,SAA0B,KAAA;EAAA;EAAA,SAC1B,QAAA;AAAA,IAEP,CAAA,SAAU,MAAA;EAAA,SAA0B,KAAA;AAAA,oBAEnB,CAAA,GAAI,EAAA,wBAA0B,SAAA,aACvC,QAAA,CACE,IAAA,CAAK,YAAA,CAAa,SAAA,EAAW,SAAA,GAAY,SAAA,IACvC,YAAA,CAAa,SAAA,EAAW,EAAA,IACxB,MAAA,CAAO,SAAA,EAAW,CAAA,CAAE,EAAA,6BAGtB,CAAA,IACR,YAAA,CAAa,SAAA,EAAW,SAAA,IAC1B,YAAA,CAAa,SAAA,EAAW,SAAA;AAAA,KAEhB,YAAA,mBACQ,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,cAC/B,UAAA,CAAW,SAAA,EAAW,SAAA;AAAA,KAEd,YAAA,mBACQ,aAAA,mCACe,SAAA,cAC/B,SAAA,WAAoB,SAAA;EAAA,SACb,QAAA,kBAA0B,MAAA;AAAA,UAE3B,CAAA;AAAA,KAGE,eAAA,mBACQ,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,0CAE/B,SAAA,WAAoB,SAAA;EAAA,SACb,aAAA;IAAA,SAA0B,KAAA;EAAA;EAAA,SAC1B,QAAA;AAAA,IAEP,CAAA,SAAU,MAAA;EAAA,SAA0B,KAAA;AAAA,KAClC,WAAA,eAA0B,CAAA,kBAAmB,SAAA,aAC3C,QAAA,CACE,IAAA,CAAK,YAAA,CAAa,SAAA,EAAW,SAAA,GAAY,SAAA,IACvC,YAAA,CAAa,SAAA,EAAW,WAAA,IACxB,MAAA,CAAO,SAAA,EAAW,CAAA,CAAE,WAAA,eAExB,YAAA,CAAa,SAAA,EAAW,SAAA,IAC1B,YAAA,CAAa,SAAA,EAAW,SAAA,IAC1B,YAAA,CAAa,SAAA,EAAW,SAAA;AAAA,KAEvB,sBAAA,mBACe,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,iCACZ,cAAA,CAAe,SAAA,EAAW,SAAA,KAC7C,cAAA,CAAe,SAAA,EAAW,SAAA,EAAW,MAAA,UAAgB,yBAAA,GACrD,cAAA,CAAe,SAAA,EAAW,SAAA,EAAW,MAAA;EAAA,SAC1B,EAAA,kCAAoC,SAAA;EAAA,SACpC,WAAA;AAAA,IAET,CAAA,yBACE,YAAA,CAAa,SAAA,EAAW,EAAA,WACxB,YAAA,CAAa,SAAA,EAAW,EAAA;AAAA,KAIpB,mBAAA,mBACQ,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,6BAChB,gBAAA,CAAiB,SAAA,EAAW,SAAA,6BAEvB,QAAA,aAAqB,QAAA,CAAS,CAAA,iBAChD,CAAA,WACQ,CAAA,eAAgB,cAAA,CAAe,SAAA,EAAW,SAAA,IAClD,sBAAA,CAAuB,SAAA,EAAW,SAAA,EAAW,CAAA;AAAA,KAIvC,gBAAA,mBACQ,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,gCACb,MAAA;EAAiB,MAAA;AAAA,KAAqB,sBAAA,CAAuB,SAAA,4BAE5D,SAAA,WAAoB,SAAA,eAAwB,SAAA,WAAoB,SAAA,YAAqB,CAAA;EAAA,SAC/F,IAAA;IAAA,SACE,IAAA;IAAA,SACA,OAAA,mCAA0C,WAAA;EAAA;AAAA,IAGnD,WAAA,CAAY,GAAA;AAAA,KAIN,gBAAA,mBACQ,aAAA,mCACe,SAAA,+BAElB,qBAAA,CAAsB,SAAA,EAAW,SAAA;AAAA,KAGtC,UAAA,GAAa,IAAA,CAAK,MAAA;AAAA,KAElB,WAAA,mBACQ,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,8BACf,gBAAA,CAAiB,SAAA,EAAW,SAAA,IAAa,UAAA,IACzD,YAAA,CAAa,SAAA,EAAW,SAAA,IAAa,mBAAA,CAAoB,SAAA,EAAW,SAAA,EAAW,SAAA;AAAA,KAEvE,eAAA,mBACQ,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,cAC/B,iBAAA,CAAkB,SAAA,EAAW,SAAA;AAAA,KAErB,WAAA,mBACQ,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,cAC/B,IAAA,CAAK,gBAAA,CAAiB,SAAA,EAAW,SAAA,YACnC,OAAA,CACE,IAAA,CACE,gBAAA,CAAiB,SAAA,EAAW,SAAA,iBACd,gBAAA,CAAiB,SAAA,EAAW,SAAA;AAAA,KAI3C,kBAAA,mBACe,aAAA,mCACe,SAAA,cAC/B,SAAA,WAAoB,SAAA;EAAA,SACb,aAAA;IAAA,SAA0B,KAAA;EAAA;AAAA,IAEjC,CAAA;AAAA,KAOQ,kBAAA,mBACQ,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,0CAE/B,IAAA,CACF,eAAA,CAAgB,SAAA,EAAW,SAAA,EAAW,WAAA,WAC9B,kBAAA,CAAmB,SAAA,EAAW,SAAA,KAEtC,OAAA,CACE,IAAA,CACE,gBAAA,CAAiB,SAAA,EAAW,SAAA,iBACd,gBAAA,CAAiB,SAAA,EAAW,SAAA;AAAA,KAIpC,mBAAA,mBACQ,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,wCAE9B,QAAA,oBACD,WAAA,CAAY,SAAA,EAAW,SAAA,IACvB,kBAAA,CAAmB,SAAA,EAAW,SAAA,EAAW,QAAA;;;KCrMxC,cAAA,mBACe,aAAA,mCACe,SAAA,oBACzB,SAAA,WAAoB,SAAA;AAAA,UAEb,eAAA,mBACG,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,8BACf,gBAAA,CAAiB,SAAA,EAAW,SAAA,IAAa,UAAA;EHzD5C;EG6Df,OAAA,WAAkB,YAAA,CAAa,SAAA,EAAW,SAAA,GACxC,WAAA,EAAa,CAAA,GACZ,eAAA,CAAgB,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,CAAA;EH/DnB;EGiEjC,KAAA,CACE,MAAA,EAAQ,gBAAA,CAAiB,SAAA,EAAW,SAAA,IACnC,eAAA,CAAgB,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,QAAA;EHlEjC;EGoEnB,KAAA,CAAM,MAAA,EAAQ,eAAA,GAAkB,eAAA,CAAgB,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,QAAA;EHpExC;EGsEzC,MAAA,IACK,MAAA,EAAQ,cAAA,CAAe,SAAA,EAAW,SAAA,MACpC,eAAA,CAAgB,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,QAAA;EHxEQ;EG0E5D,OAAA,WAAkB,qBAAA,CAAsB,SAAA,EAAW,SAAA,YACjD,YAAA,EAAc,CAAA,GACb,eAAA,CAAgB,SAAA,EAAW,SAAA,EAAW,SAAA,GAAY,MAAA,CAAO,CAAA,SAAU,QAAA;EH5E9D;EG8ER,OAAA,CACE,IAAA,EAAM,OAAA,CAAQ,MAAA,CAAO,cAAA,CAAe,SAAA,EAAW,SAAA,cAC9C,eAAA,CAAgB,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,QAAA;EHhFlB;EGkFlC,IAAA,CAAK,CAAA,WAAY,eAAA,CAAgB,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,QAAA;EHlFzB;EGoFzC,IAAA,CAAK,CAAA,WAAY,eAAA,CAAgB,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,QAAA;EHpFF;EGsFhE,GAAA,IAAO,mBAAA,CAAoB,WAAA,CAAY,SAAA,EAAW,SAAA,EAAW,SAAA;;EAE7D,KAAA,IAAS,OAAA,CAAQ,WAAA,CAAY,SAAA,EAAW,SAAA,EAAW,SAAA;;EAEnD,MAAA,CACE,IAAA,EAAM,mBAAA,CAAoB,SAAA,EAAW,SAAA,EAAW,QAAA,IAC/C,OAAA,CAAQ,WAAA,CAAY,SAAA,EAAW,SAAA,EAAW,SAAA;EFlFrB;EEoFxB,SAAA,CACE,IAAA,EAAM,aAAA,CAAc,mBAAA,CAAoB,SAAA,EAAW,SAAA,EAAW,QAAA,KAC7D,mBAAA,CAAoB,WAAA,CAAY,SAAA,EAAW,SAAA,EAAW,SAAA;EFtFjC;EEwFxB,WAAA,CACE,IAAA,EAAM,aAAA,CAAc,mBAAA,CAAoB,SAAA,EAAW,SAAA,EAAW,QAAA,KAC7D,OAAA;EFhFY;EEkFf,MAAA,CACE,IAAA,EAAM,OAAA,CAAQ,eAAA,CAAgB,SAAA,EAAW,SAAA,KACxC,OAAA,CAAQ,WAAA,CAAY,SAAA,EAAW,SAAA,EAAW,SAAA;;EAE7C,MAAA,CACE,QAAA,GAAW,CAAA,EAAG,aAAA,CAAc,SAAA,EAAW,SAAA,MAAe,cAAA,KACrD,OAAA,CAAQ,WAAA,CAAY,SAAA,EAAW,SAAA,EAAW,SAAA;EFvFpC;EEyFT,SAAA,CACE,IAAA,EAAM,OAAA,CAAQ,eAAA,CAAgB,SAAA,EAAW,SAAA,KACxC,mBAAA,CAAoB,WAAA,CAAY,SAAA,EAAW,SAAA,EAAW,SAAA;EF1FhD;EE4FT,SAAA,CACE,QAAA,GAAW,CAAA,EAAG,aAAA,CAAc,SAAA,EAAW,SAAA,MAAe,cAAA,KACrD,mBAAA,CAAoB,WAAA,CAAY,SAAA,EAAW,SAAA,EAAW,SAAA;EF7FzC;EE+FhB,WAAA,CAAY,IAAA,EAAM,OAAA,CAAQ,eAAA,CAAgB,SAAA,EAAW,SAAA,KAAc,OAAA;EF/FzC;EEiG1B,WAAA,CACE,QAAA,GAAW,CAAA,EAAG,aAAA,CAAc,SAAA,EAAW,SAAA,MAAe,cAAA,KACrD,OAAA;EF9Fe;EEgGlB,MAAA,IAAU,OAAA,CAAQ,WAAA,CAAY,SAAA,EAAW,SAAA,EAAW,SAAA;EF/FlC;EEiGlB,SAAA,IAAa,mBAAA,CAAoB,WAAA,CAAY,SAAA,EAAW,SAAA,EAAW,SAAA;EF9FvD;EEgGZ,WAAA,IAAe,OAAA;EF/FJ;;;;;EEqGX,MAAA,CAAO,KAAA;IACL,MAAA,EAAQ,mBAAA,CAAoB,SAAA,EAAW,SAAA,EAAW,QAAA;IAClD,MAAA,EAAQ,OAAA,CAAQ,eAAA,CAAgB,SAAA,EAAW,SAAA;EAAA,IACzC,OAAA,CAAQ,WAAA,CAAY,SAAA,EAAW,SAAA,EAAW,SAAA;EF5G5B;EE8GlB,MAAA,CAAO,KAAA;IACL,MAAA,EAAQ,mBAAA,CAAoB,SAAA,EAAW,SAAA,EAAW,QAAA;IAClD,MAAA,GAAS,CAAA,EAAG,aAAA,CAAc,SAAA,EAAW,SAAA,MAAe,cAAA;EAAA,IAClD,OAAA,CAAQ,WAAA,CAAY,SAAA,EAAW,SAAA,EAAW,SAAA;AAAA;AAAA,iBAoqBhC,qBAAA,mBACI,yBAAA,CAA0B,aAAA,EAAe,aAAA,oCAC1B,SAAA,WAAA,CAEjC,QAAA,EAAU,SAAA,EACV,SAAA,EAAW,SAAA,EACX,QAAA,EAAU,kBAAA,GACT,eAAA,CAAgB,SAAA,EAAW,SAAA;;;UC3zBb,gBAAA;EAAA,SACN,YAAA;EAAA,SACA,IAAA;EAAA,SACA,UAAA;EAAA,SACA,YAAA;EAAA,SACA,WAAA;AAAA;AAAA,UAGM,oBAAA;EAAA,SACN,OAAA,WAAkB,eAAA;EAAA,SAClB,QAAA,WAAmB,gBAAA;EAAA,SACnB,OAAA,EAAS,QAAA,CAAS,MAAA;EAAA,SAClB,cAAA;EAAA,SACA,KAAA;EAAA,SACA,MAAA;AAAA;;;iBCuBK,iBAAA,eAAA,CACd,UAAA,UACA,KAAA,EAAO,oBAAA,EACP,WAAA,UACA,KAAA,EAAO,oBAAA,GACN,gBAAA,CAAe,GAAA;;;UCnCD,eAAA,mBAAkC,aAAA;EAAA,SACxC,QAAA,EAAU,SAAA;EAAA,SACV,QAAA,EAAU,kBAAA;AAAA;AAAA,KAGT,cAAA,mBACQ,yBAAA,CAA0B,aAAA,EAAe,aAAA,4BAEtC,SAAA,YAAqB,SAAA,UAAmB,CAAA,yBACrD,SAAA,aACJ,eAAA,CAAgB,SAAA,EAAW,SAAA,UAAmB,CAAA;AAAA,iBAIpC,QAAA,mBAA2B,yBAAA,CAA0B,aAAA,EAAe,aAAA,EAAA,CAClF,OAAA,EAAS,eAAA,CAAgB,SAAA,IACxB,cAAA,CAAe,SAAA;;;UCVR,SAAA;EACR,KAAA,IAAS,gBAAA,CAAe,GAAA;AAAA;AAAA,UAGT,kBAAA;EACf,SAAA,OAAgB,MAAA,mBAAyB,QAAA,EAAU,aAAA,CAAc,QAAA,IAAY,SAAA,CAAU,GAAA;EAEvF,SAAA,CAAU,QAAA,EAAU,QAAA,GAAW,SAAA;EAC/B,UAAA,CAAW,SAAA,EAAW,aAAA,CAAc,QAAA,IAAY,SAAA;EAEhD,SAAA,CAAU,MAAA,EAAQ,QAAA,EAAU,MAAA,EAAQ,QAAA,GAAW,aAAA,CAAc,QAAA,IAAY,SAAA;EAEzE,UAAA,CAAW,MAAA,EAAQ,QAAA,EAAU,MAAA,EAAQ,QAAA,GAAW,aAAA,CAAc,QAAA,IAAY,SAAA;EAE1E,SAAA,CAAU,MAAA,EAAQ,QAAA,GAAW,SAAA;EAC7B,UAAA,CAAW,MAAA,EAAQ,QAAA,GAAW,SAAA;EAE9B,gBAAA,CACE,MAAA,EAAQ,QAAA,EACR,MAAA,EAAQ,QAAA,GAAW,aAAA,CAAc,QAAA,GACjC,OAAA;IAAY,MAAA;EAAA,IACX,SAAA;EAEH,gBAAA,CAAiB,MAAA,EAAQ,QAAA,GAAW,SAAA;AAAA;;;UClCrB,cAAA,mBAAiC,aAAA;EAChD,UAAA,iBAA2B,SAAA,oBAA6B,QAAA,EAAU,CAAA,GAAI,kBAAA;AAAA;AAAA,iBAGxD,QAAA,mBAA2B,aAAA,CAAA,CAAe,OAAA;EACxD,QAAA,EAAU,SAAA;AAAA,IACR,cAAA,CAAe,SAAA"}
package/dist/index.mjs CHANGED
@@ -1,7 +1,8 @@
1
1
  import { AsyncIterableResult } from "@prisma-next/framework-components/runtime";
2
2
  import { AggregateCommand, DeleteManyCommand, FindOneAndDeleteCommand, FindOneAndUpdateCommand, InsertManyCommand, InsertOneCommand, MongoAndExpr, MongoFieldFilter, MongoLimitStage, MongoLookupStage, MongoMatchStage, MongoProjectStage, MongoSkipStage, MongoSortStage, MongoUnwindStage, RawAggregateCommand, RawDeleteManyCommand, RawDeleteOneCommand, RawFindOneAndDeleteCommand, RawFindOneAndUpdateCommand, RawInsertManyCommand, RawInsertOneCommand, RawUpdateManyCommand, RawUpdateOneCommand, UpdateManyCommand, isMongoFilterExpr } from "@prisma-next/mongo-query-ast/execution";
3
3
  import { MongoParamRef } from "@prisma-next/mongo-value";
4
-
4
+ import { contractModelToMongoResultShape } from "@prisma-next/mongo-query-builder";
5
+ import { ifDefined } from "@prisma-next/utils/defined";
5
6
  //#region src/collection-state.ts
6
7
  function emptyCollectionState() {
7
8
  return {
@@ -13,7 +14,6 @@ function emptyCollectionState() {
13
14
  offset: void 0
14
15
  };
15
16
  }
16
-
17
17
  //#endregion
18
18
  //#region src/compile.ts
19
19
  function compileIncludes(includes) {
@@ -29,7 +29,7 @@ function compileIncludes(includes) {
29
29
  }
30
30
  return stages;
31
31
  }
32
- function compileMongoQuery(collection, state, storageHash) {
32
+ function compileMongoQuery(collection, state, storageHash, model) {
33
33
  const stages = [];
34
34
  const singleFilter = state.filters.length === 1 ? state.filters[0] : void 0;
35
35
  if (singleFilter) stages.push(new MongoMatchStage(singleFilter));
@@ -47,16 +47,21 @@ function compileMongoQuery(collection, state, storageHash) {
47
47
  const meta = {
48
48
  target: "mongo",
49
49
  storageHash,
50
- lane: "mongo-orm",
51
- paramDescriptors: []
50
+ lane: "mongo-orm"
52
51
  };
52
+ const command = new AggregateCommand(collection, stages);
53
+ const selection = state.selectedFields !== void 0 && state.selectedFields.length > 0 ? state.selectedFields : void 0;
54
+ const includeRelationNames = state.includes.length > 0 ? state.includes.map((inc) => inc.relationName) : void 0;
53
55
  return {
54
56
  collection,
55
- command: new AggregateCommand(collection, stages),
56
- meta
57
+ command,
58
+ meta,
59
+ resultShape: contractModelToMongoResultShape(model, {
60
+ ...ifDefined("selection", selection),
61
+ ...ifDefined("includeRelationNames", includeRelationNames)
62
+ })
57
63
  };
58
64
  }
59
-
60
65
  //#endregion
61
66
  //#region src/field-accessor.ts
62
67
  function createFieldExpression(fieldPath) {
@@ -141,7 +146,6 @@ function compileFieldOperations(ops, wrapValue) {
141
146
  }
142
147
  return grouped;
143
148
  }
144
-
145
149
  //#endregion
146
150
  //#region src/collection.ts
147
151
  function resolveCollectionName(model, modelName) {
@@ -349,7 +353,8 @@ var MongoCollectionImpl = class MongoCollectionImpl {
349
353
  offset: void 0
350
354
  });
351
355
  const ids = [];
352
- for await (const row of idQuery.#execute()) ids.push(row["_id"]);
356
+ const { resultShape: _rs, ...planWithoutShape } = idQuery.#compile();
357
+ for await (const row of this.#executor.execute(planWithoutShape)) ids.push(row["_id"]);
353
358
  return ids;
354
359
  }
355
360
  #execute() {
@@ -357,7 +362,9 @@ var MongoCollectionImpl = class MongoCollectionImpl {
357
362
  return this.#executor.execute(plan);
358
363
  }
359
364
  #compile() {
360
- return compileMongoQuery(this.#collectionName, this.#state, this.#contract.storage.storageHash);
365
+ const model = this.#contract.models[this.#modelName];
366
+ if (!model) throw new Error(`Unknown model: "${this.#modelName}".`);
367
+ return compileMongoQuery(this.#collectionName, this.#state, this.#contract.storage.storageHash, model);
361
368
  }
362
369
  #wrapCommand(command) {
363
370
  return {
@@ -497,8 +504,7 @@ var MongoCollectionImpl = class MongoCollectionImpl {
497
504
  return {
498
505
  target: "mongo",
499
506
  storageHash: this.#contract.storage.storageHash,
500
- lane: "mongo-orm",
501
- paramDescriptors: []
507
+ lane: "mongo-orm"
502
508
  };
503
509
  }
504
510
  #injectDiscriminator(data) {
@@ -536,7 +542,6 @@ var MongoCollectionImpl = class MongoCollectionImpl {
536
542
  function createMongoCollection(contract, modelName, executor) {
537
543
  return new MongoCollectionImpl(contract, modelName, executor);
538
544
  }
539
-
540
545
  //#endregion
541
546
  //#region src/mongo-orm.ts
542
547
  function mongoOrm(options) {
@@ -545,7 +550,6 @@ function mongoOrm(options) {
545
550
  for (const [rootName, modelName] of Object.entries(contract.roots)) client[rootName] = createMongoCollection(contract, modelName, executor);
546
551
  return client;
547
552
  }
548
-
549
553
  //#endregion
550
554
  //#region src/raw-collection.ts
551
555
  function createRawMongoCollection(collectionName, meta) {
@@ -586,7 +590,6 @@ function createRawMongoCollection(collectionName, meta) {
586
590
  }
587
591
  };
588
592
  }
589
-
590
593
  //#endregion
591
594
  //#region src/mongo-raw.ts
592
595
  function mongoRaw(options) {
@@ -597,12 +600,11 @@ function mongoRaw(options) {
597
600
  return createRawMongoCollection(contract.models[modelName].storage.collection ?? modelName, {
598
601
  target: "mongo",
599
602
  storageHash: contract.storage.storageHash,
600
- lane: "mongo-raw",
601
- paramDescriptors: []
603
+ lane: "mongo-raw"
602
604
  });
603
605
  } };
604
606
  }
605
-
606
607
  //#endregion
607
608
  export { compileMongoQuery, createFieldAccessor, createMongoCollection, mongoOrm, mongoRaw };
609
+
608
610
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["stages: MongoPipelineStage[]","projection: Record<string, 0 | 1>","meta: PlanMeta","grouped: Record<string, Record<string, MongoValue>>","#contract","#modelName","#executor","#collectionName","#state","#cloneWithVariant","#clone","#compileWhereObject","includeExpr: MongoIncludeExpr","#execute","#rejectIncludes","#injectDiscriminator","#stripUndefined","#toDocument","#drainPlan","#requireFilters","#rejectWindowing","#mergeFilters","#resolveUpdateDoc","#readMatchingIds","docs: IncludedRow<TContract, ModelName, TIncludes>[]","updateDoc: Record<string, Record<string, MongoValue>>","#wrapFieldOpValue","#toSetFields","insertOnlyFields: Record<string, MongoValue>","ids: unknown[]","#compile","#planMeta","#wrapCommand","rows: unknown[]","#modelFields","filters: MongoFilterExpr[]","#wrapFieldValue","#wrapValueObject","doc: Record<string, MongoValue>","result: Record<string, MongoValue>","result: Record<string, unknown>","#toUpdateDocument","#wrapDotPathValue","currentField: ContractField | undefined","#variantName","client: Record<string, unknown>"],"sources":["../src/collection-state.ts","../src/compile.ts","../src/field-accessor.ts","../src/collection.ts","../src/mongo-orm.ts","../src/raw-collection.ts","../src/mongo-raw.ts"],"sourcesContent":["import type { MongoFilterExpr } from '@prisma-next/mongo-query-ast/execution';\n\nexport interface MongoIncludeExpr {\n readonly relationName: string;\n readonly from: string;\n readonly localField: string;\n readonly foreignField: string;\n readonly cardinality: '1:1' | 'N:1' | '1:N' | 'M:N';\n}\n\nexport interface MongoCollectionState {\n readonly filters: readonly MongoFilterExpr[];\n readonly includes: readonly MongoIncludeExpr[];\n readonly orderBy: Readonly<Record<string, 1 | -1>> | undefined;\n readonly selectedFields: readonly string[] | undefined;\n readonly limit: number | undefined;\n readonly offset: number | undefined;\n}\n\nexport function emptyCollectionState(): MongoCollectionState {\n return {\n filters: [],\n includes: [],\n orderBy: undefined,\n selectedFields: undefined,\n limit: undefined,\n offset: undefined,\n };\n}\n","import type { PlanMeta } from '@prisma-next/contract/types';\nimport type { MongoPipelineStage, MongoQueryPlan } from '@prisma-next/mongo-query-ast/execution';\nimport {\n AggregateCommand,\n MongoAndExpr,\n MongoLimitStage,\n MongoLookupStage,\n MongoMatchStage,\n MongoProjectStage,\n MongoSkipStage,\n MongoSortStage,\n MongoUnwindStage,\n} from '@prisma-next/mongo-query-ast/execution';\nimport type { MongoCollectionState, MongoIncludeExpr } from './collection-state';\n\nfunction compileIncludes(includes: readonly MongoIncludeExpr[]): MongoPipelineStage[] {\n const stages: MongoPipelineStage[] = [];\n\n for (const inc of includes) {\n stages.push(\n new MongoLookupStage({\n from: inc.from,\n localField: inc.localField,\n foreignField: inc.foreignField,\n as: inc.relationName,\n }),\n );\n\n if (inc.cardinality === 'N:1' || inc.cardinality === '1:1') {\n stages.push(new MongoUnwindStage(`$${inc.relationName}`, true));\n }\n }\n\n return stages;\n}\n\nexport function compileMongoQuery<Row = unknown>(\n collection: string,\n state: MongoCollectionState,\n storageHash: string,\n): MongoQueryPlan<Row> {\n const stages: MongoPipelineStage[] = [];\n\n const singleFilter = state.filters.length === 1 ? state.filters[0] : undefined;\n if (singleFilter) {\n stages.push(new MongoMatchStage(singleFilter));\n } else if (state.filters.length > 1) {\n stages.push(new MongoMatchStage(MongoAndExpr.of([...state.filters])));\n }\n\n if (state.includes.length > 0) {\n stages.push(...compileIncludes(state.includes));\n }\n\n if (state.orderBy) {\n stages.push(new MongoSortStage(state.orderBy));\n }\n\n if (state.offset !== undefined) {\n stages.push(new MongoSkipStage(state.offset));\n }\n\n if (state.limit !== undefined) {\n stages.push(new MongoLimitStage(state.limit));\n }\n\n if (state.selectedFields && state.selectedFields.length > 0) {\n const projection: Record<string, 0 | 1> = {};\n for (const field of state.selectedFields) {\n projection[field] = 1;\n }\n if (!Object.hasOwn(projection, '_id')) {\n projection['_id'] = 0;\n }\n stages.push(new MongoProjectStage(projection));\n }\n\n const meta: PlanMeta = {\n target: 'mongo',\n storageHash,\n lane: 'mongo-orm',\n paramDescriptors: [],\n };\n const command = new AggregateCommand(collection, stages);\n return { collection, command, meta };\n}\n","import type { ContractField, ContractValueObject } from '@prisma-next/contract/types';\nimport type {\n ExtractMongoCodecTypes,\n ExtractMongoFieldOutputTypes,\n InferModelRow,\n MongoContract,\n MongoContractWithTypeMaps,\n MongoTypeMaps,\n} from '@prisma-next/mongo-contract';\nimport type { MongoValue } from '@prisma-next/mongo-value';\nimport { MongoParamRef } from '@prisma-next/mongo-value';\n\n// ── Runtime types ────────────────────────────────────────────────────────────\n\nexport type UpdateOperator =\n | '$set'\n | '$unset'\n | '$inc'\n | '$mul'\n | '$push'\n | '$pull'\n | '$addToSet'\n | '$pop';\n\nexport interface FieldOperation {\n readonly operator: UpdateOperator;\n readonly field: string;\n readonly value: MongoValue;\n}\n\n// ── Compile-time types ───────────────────────────────────────────────────────\n\ntype ScalarFieldKeys<\n TContract extends MongoContract,\n ModelName extends string & keyof TContract['models'],\n> = {\n [K in keyof TContract['models'][ModelName]['fields'] &\n string]: TContract['models'][ModelName]['fields'][K] extends {\n readonly type: { readonly kind: 'scalar' };\n }\n ? K\n : never;\n}[keyof TContract['models'][ModelName]['fields'] & string];\n\ntype ValueObjectFieldKeys<\n TContract extends MongoContract,\n ModelName extends string & keyof TContract['models'],\n> = {\n [K in keyof TContract['models'][ModelName]['fields'] &\n string]: TContract['models'][ModelName]['fields'][K] extends {\n readonly type: { readonly kind: 'valueObject'; readonly name: string };\n }\n ? K\n : never;\n}[keyof TContract['models'][ModelName]['fields'] & string];\n\ntype ResolvedModelRow<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n> = string extends keyof ExtractMongoFieldOutputTypes<TContract>\n ? InferModelRow<TContract, ModelName>\n : ModelName extends keyof ExtractMongoFieldOutputTypes<TContract>\n ? {\n -readonly [K in keyof ExtractMongoFieldOutputTypes<TContract>[ModelName]]: ExtractMongoFieldOutputTypes<TContract>[ModelName][K];\n }\n : InferModelRow<TContract, ModelName>;\n\ntype ResolveFieldType<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n K extends keyof TContract['models'][ModelName]['fields'] & string,\n> = K extends keyof ResolvedModelRow<TContract, ModelName>\n ? ResolvedModelRow<TContract, ModelName>[K]\n : unknown;\n\ntype NumericOps = {\n inc(value: number): FieldOperation;\n mul(value: number): FieldOperation;\n};\n\nexport type FieldExpression<T = unknown> = {\n set(value: T): FieldOperation;\n unset(): FieldOperation;\n push(value: T extends readonly (infer E)[] ? E : unknown): FieldOperation;\n pull(match: T extends readonly (infer E)[] ? E | Partial<E> : unknown): FieldOperation;\n addToSet(value: T extends readonly (infer E)[] ? E : unknown): FieldOperation;\n pop(end: 1 | -1): FieldOperation;\n} & (T extends number ? NumericOps : unknown);\n\ntype HasValueObjects = { readonly valueObjects?: Record<string, ContractValueObject> };\n\ntype VOFields<TContract extends HasValueObjects, VOName extends string> = TContract extends {\n readonly valueObjects: infer VOs extends Record<string, ContractValueObject>;\n}\n ? VOName extends keyof VOs\n ? VOs[VOName]['fields']\n : never\n : never;\n\ntype VOScalarFieldKeys<Fields extends Record<string, ContractField>> = {\n [K in keyof Fields & string]: Fields[K] extends { readonly type: { readonly kind: 'scalar' } }\n ? K\n : never;\n}[keyof Fields & string];\n\ntype VOValueObjectFieldKeys<Fields extends Record<string, ContractField>> = {\n [K in keyof Fields & string]: Fields[K] extends {\n readonly type: { readonly kind: 'valueObject'; readonly name: string };\n }\n ? K\n : never;\n}[keyof Fields & string];\n\ntype VODotPaths<\n TContract extends HasValueObjects,\n Fields extends Record<string, ContractField>,\n Prefix extends string,\n> =\n | { [K in VOScalarFieldKeys<Fields>]: `${Prefix}${K}` }[VOScalarFieldKeys<Fields>]\n | {\n [K in VOValueObjectFieldKeys<Fields>]: Fields[K] extends {\n readonly type: { readonly kind: 'valueObject'; readonly name: infer N extends string };\n }\n ? VODotPaths<TContract, VOFields<TContract, N>, `${Prefix}${K}.`>\n : never;\n }[VOValueObjectFieldKeys<Fields>];\n\nexport type DotPath<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n> = {\n [K in ValueObjectFieldKeys<\n TContract,\n ModelName\n >]: TContract['models'][ModelName]['fields'][K] extends {\n readonly type: { readonly kind: 'valueObject'; readonly name: infer N extends string };\n }\n ? VODotPaths<TContract, VOFields<TContract, N>, `${K}.`>\n : never;\n}[ValueObjectFieldKeys<TContract, ModelName>];\n\ntype ResolveDotPathInFields<\n TContract extends HasValueObjects,\n Fields extends Record<string, ContractField>,\n Path extends string,\n TCodecTypes extends Record<string, { output: unknown }>,\n> = Path extends `${infer Head}.${infer Rest}`\n ? Head extends keyof Fields & string\n ? Fields[Head] extends {\n readonly type: { readonly kind: 'valueObject'; readonly name: infer N extends string };\n }\n ? ResolveDotPathInFields<TContract, VOFields<TContract, N>, Rest, TCodecTypes>\n : never\n : never\n : Path extends keyof Fields & string\n ? Fields[Path] extends {\n readonly type: {\n readonly kind: 'scalar';\n readonly codecId: infer CId extends string & keyof TCodecTypes;\n };\n }\n ? TCodecTypes[CId]['output']\n : unknown\n : never;\n\nexport type ResolveDotPathType<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n Path extends string,\n TCodecTypes extends Record<string, { output: unknown }> = ExtractMongoCodecTypes<TContract>,\n> = Path extends `${infer Head}.${infer Rest}`\n ? Head extends keyof TContract['models'][ModelName]['fields'] & string\n ? TContract['models'][ModelName]['fields'][Head] extends {\n readonly type: { readonly kind: 'valueObject'; readonly name: infer N extends string };\n }\n ? ResolveDotPathInFields<TContract, VOFields<TContract, N>, Rest, TCodecTypes>\n : never\n : never\n : never;\n\nexport type FieldAccessor<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n> = {\n readonly [K in ScalarFieldKeys<TContract, ModelName>]: FieldExpression<\n ResolveFieldType<TContract, ModelName, K>\n >;\n} & {\n readonly [K in ValueObjectFieldKeys<TContract, ModelName>]: FieldExpression<\n ResolveFieldType<TContract, ModelName, K>\n >;\n} & (<P extends DotPath<TContract, ModelName>>(\n path: P,\n ) => FieldExpression<ResolveDotPathType<TContract, ModelName, P>>);\n\n// ── Runtime implementation ───────────────────────────────────────────────────\n\n// Runtime expression has all methods; type-level gating happens via FieldExpression<T>\ninterface RuntimeFieldExpression extends NumericOps {\n set(value: unknown): FieldOperation;\n unset(): FieldOperation;\n push(value: unknown): FieldOperation;\n pull(match: unknown): FieldOperation;\n addToSet(value: unknown): FieldOperation;\n pop(end: 1 | -1): FieldOperation;\n}\n\nfunction createFieldExpression(fieldPath: string): RuntimeFieldExpression {\n return {\n set(value: unknown): FieldOperation {\n return { operator: '$set', field: fieldPath, value: new MongoParamRef(value) };\n },\n unset(): FieldOperation {\n return { operator: '$unset', field: fieldPath, value: new MongoParamRef('') };\n },\n inc(value: number): FieldOperation {\n return { operator: '$inc', field: fieldPath, value: new MongoParamRef(value) };\n },\n mul(value: number): FieldOperation {\n return { operator: '$mul', field: fieldPath, value: new MongoParamRef(value) };\n },\n push(value: unknown): FieldOperation {\n return { operator: '$push', field: fieldPath, value: new MongoParamRef(value) };\n },\n pull(match: unknown): FieldOperation {\n return { operator: '$pull', field: fieldPath, value: new MongoParamRef(match) };\n },\n addToSet(value: unknown): FieldOperation {\n return { operator: '$addToSet', field: fieldPath, value: new MongoParamRef(value) };\n },\n pop(end: 1 | -1): FieldOperation {\n return { operator: '$pop', field: fieldPath, value: new MongoParamRef(end) };\n },\n };\n}\n\nexport function createFieldAccessor<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n>(): FieldAccessor<TContract, ModelName> {\n return new Proxy((() => {}) as unknown as FieldAccessor<TContract, ModelName>, {\n get(_target, prop: string): RuntimeFieldExpression {\n return createFieldExpression(prop);\n },\n apply(_target, _thisArg, args: [string]): RuntimeFieldExpression {\n return createFieldExpression(args[0]);\n },\n });\n}\n\nexport function compileFieldOperations(\n ops: readonly FieldOperation[],\n wrapValue: (field: string, value: MongoValue, operator: UpdateOperator) => MongoValue,\n): Record<string, Record<string, MongoValue>> {\n const grouped: Record<string, Record<string, MongoValue>> = {};\n for (const op of ops) {\n let group = grouped[op.operator];\n if (!group) {\n group = {};\n grouped[op.operator] = group;\n }\n group[op.field] = wrapValue(op.field, op.value, op.operator);\n }\n return grouped;\n}\n","import type {\n ContractField,\n ContractReferenceRelation,\n ContractValueObject,\n PlanMeta,\n} from '@prisma-next/contract/types';\nimport { AsyncIterableResult } from '@prisma-next/framework-components/runtime';\nimport type {\n MongoContract,\n MongoContractWithTypeMaps,\n MongoModelDefinition,\n MongoTypeMaps,\n} from '@prisma-next/mongo-contract';\nimport type {\n AnyMongoCommand,\n MongoFilterExpr,\n MongoQueryPlan,\n} from '@prisma-next/mongo-query-ast/execution';\nimport {\n DeleteManyCommand,\n FindOneAndDeleteCommand,\n FindOneAndUpdateCommand,\n InsertManyCommand,\n InsertOneCommand,\n isMongoFilterExpr,\n MongoAndExpr,\n MongoFieldFilter,\n UpdateManyCommand,\n} from '@prisma-next/mongo-query-ast/execution';\nimport type { MongoValue } from '@prisma-next/mongo-value';\nimport { MongoParamRef } from '@prisma-next/mongo-value';\nimport type { MongoIncludeExpr } from './collection-state';\nimport { emptyCollectionState, type MongoCollectionState } from './collection-state';\nimport { compileMongoQuery } from './compile';\nimport type { MongoQueryExecutor } from './executor';\nimport {\n compileFieldOperations,\n createFieldAccessor,\n type FieldAccessor,\n type FieldOperation,\n} from './field-accessor';\nimport type {\n DefaultModelRow,\n IncludedRow,\n MongoIncludeSpec,\n MongoWhereFilter,\n NoIncludes,\n ReferenceRelationKeys,\n ResolvedCreateInput,\n VariantNames,\n} from './types';\n\ntype ModelFieldKeys<\n TContract extends MongoContract,\n ModelName extends string & keyof TContract['models'],\n> = keyof TContract['models'][ModelName]['fields'] & string;\n\nexport interface MongoCollection<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n TIncludes extends MongoIncludeSpec<TContract, ModelName> = NoIncludes,\n TVariant extends string = never,\n> {\n /** Narrows to a specific variant, injecting a discriminator filter. */\n variant<V extends VariantNames<TContract, ModelName>>(\n variantName: V,\n ): MongoCollection<TContract, ModelName, TIncludes, V>;\n /** Appends equality filters from a plain object. Values are encoded through codecs. */\n where(\n filter: MongoWhereFilter<TContract, ModelName>,\n ): MongoCollection<TContract, ModelName, TIncludes, TVariant>;\n /** Appends a filter condition from a raw filter expression. */\n where(filter: MongoFilterExpr): MongoCollection<TContract, ModelName, TIncludes, TVariant>;\n /** Restricts returned fields to the given subset. Returns a new immutable collection. */\n select(\n ...fields: ModelFieldKeys<TContract, ModelName>[]\n ): MongoCollection<TContract, ModelName, TIncludes, TVariant>;\n /** Adds a `$lookup` for a reference relation. Returns a new immutable collection. */\n include<K extends ReferenceRelationKeys<TContract, ModelName> & string>(\n relationName: K,\n ): MongoCollection<TContract, ModelName, TIncludes & Record<K, true>, TVariant>;\n /** Sets sort order. Returns a new immutable collection. */\n orderBy(\n spec: Partial<Record<ModelFieldKeys<TContract, ModelName>, 1 | -1>>,\n ): MongoCollection<TContract, ModelName, TIncludes, TVariant>;\n /** Limits the number of results. Returns a new immutable collection. */\n take(n: number): MongoCollection<TContract, ModelName, TIncludes, TVariant>;\n /** Skips the first `n` results. Returns a new immutable collection. */\n skip(n: number): MongoCollection<TContract, ModelName, TIncludes, TVariant>;\n /** Executes the query and returns all matching rows as an async iterable. */\n all(): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>>;\n /** Executes the query with limit 1. Returns the first matching row or `null`. */\n first(): Promise<IncludedRow<TContract, ModelName, TIncludes> | null>;\n /** Returns the input data with the server-assigned `_id`. Does not re-read the stored document. */\n create(\n data: ResolvedCreateInput<TContract, ModelName, TVariant>,\n ): Promise<IncludedRow<TContract, ModelName, TIncludes>>;\n /** Returns input rows with server-assigned `_id`s. Does not re-read stored documents. */\n createAll(\n data: ReadonlyArray<ResolvedCreateInput<TContract, ModelName, TVariant>>,\n ): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>>;\n /** Inserts multiple documents and returns the number inserted. */\n createCount(\n data: ReadonlyArray<ResolvedCreateInput<TContract, ModelName, TVariant>>,\n ): Promise<number>;\n /** Updates one matching document via `findOneAndUpdate`. Returns the updated document or `null`. Requires `.where()`. */\n update(\n data: Partial<DefaultModelRow<TContract, ModelName>>,\n ): Promise<IncludedRow<TContract, ModelName, TIncludes> | null>;\n /** Updates one matching document using field operations from a callback. Requires `.where()`. */\n update(\n callback: (u: FieldAccessor<TContract, ModelName>) => FieldOperation[],\n ): Promise<IncludedRow<TContract, ModelName, TIncludes> | null>;\n /** Non-atomic: captures matching `_id`s, updates, then re-reads by `_id`. Requires `.where()`. */\n updateAll(\n data: Partial<DefaultModelRow<TContract, ModelName>>,\n ): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>>;\n /** Updates all matching documents using field operations from a callback. Requires `.where()`. */\n updateAll(\n callback: (u: FieldAccessor<TContract, ModelName>) => FieldOperation[],\n ): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>>;\n /** Updates all matching documents and returns the number modified. Requires `.where()`. */\n updateCount(data: Partial<DefaultModelRow<TContract, ModelName>>): Promise<number>;\n /** Updates all matching documents using field operations and returns the number modified. Requires `.where()`. */\n updateCount(\n callback: (u: FieldAccessor<TContract, ModelName>) => FieldOperation[],\n ): Promise<number>;\n /** Deletes one matching document via `findOneAndDelete`. Returns the deleted document or `null`. Requires `.where()`. */\n delete(): Promise<IncludedRow<TContract, ModelName, TIncludes> | null>;\n /** Non-atomic: reads matching docs then deletes them. Concurrent writes may cause stale results. Requires `.where()`. */\n deleteAll(): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>>;\n /** Deletes all matching documents and returns the number deleted. Requires `.where()`. */\n deleteCount(): Promise<number>;\n /**\n * On insert: `update` fields are applied via `$set`, remaining `create` fields via `$setOnInsert`.\n * This means `update` values take precedence over `create` for overlapping fields on insert.\n * Requires `.where()`.\n */\n upsert(input: {\n create: ResolvedCreateInput<TContract, ModelName, TVariant>;\n update: Partial<DefaultModelRow<TContract, ModelName>>;\n }): Promise<IncludedRow<TContract, ModelName, TIncludes>>;\n /** Upsert using field operations callback for the update part. Requires `.where()`. */\n upsert(input: {\n create: ResolvedCreateInput<TContract, ModelName, TVariant>;\n update: (u: FieldAccessor<TContract, ModelName>) => FieldOperation[];\n }): Promise<IncludedRow<TContract, ModelName, TIncludes>>;\n}\n\nfunction resolveCollectionName(model: MongoModelDefinition, modelName: string): string {\n return model.storage.collection ?? modelName;\n}\n\nclass MongoCollectionImpl<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n TIncludes extends MongoIncludeSpec<TContract, ModelName> = NoIncludes,\n TVariant extends string = never,\n> implements MongoCollection<TContract, ModelName, TIncludes, TVariant>\n{\n readonly #contract: TContract;\n readonly #modelName: ModelName;\n readonly #executor: MongoQueryExecutor;\n #collectionName: string;\n #state: MongoCollectionState;\n #variantName: string | undefined;\n\n constructor(contract: TContract, modelName: ModelName, executor: MongoQueryExecutor) {\n this.#contract = contract;\n this.#modelName = modelName;\n this.#executor = executor;\n const model = contract.models[modelName] as MongoModelDefinition;\n this.#collectionName = resolveCollectionName(model, modelName);\n this.#state = emptyCollectionState();\n }\n\n variant<V extends VariantNames<TContract, ModelName>>(\n variantName: V,\n ): MongoCollection<TContract, ModelName, TIncludes, V> {\n const model = this.#contract.models[this.#modelName] as MongoModelDefinition | undefined;\n if (!model?.discriminator || !model.variants) {\n // No polymorphism metadata on this model — return unchanged. Cast required\n // because TS cannot verify TVariant (the current variant) is assignable to V.\n return this as unknown as MongoCollection<TContract, ModelName, TIncludes, V>;\n }\n\n const variantEntry = model.variants[variantName as string];\n if (!variantEntry) {\n // Unknown variant name at runtime — return unchanged. Same cast rationale.\n return this as unknown as MongoCollection<TContract, ModelName, TIncludes, V>;\n }\n\n const filter = MongoFieldFilter.eq(\n model.discriminator.field,\n new MongoParamRef(variantEntry.value),\n );\n return this.#cloneWithVariant<V>(\n { filters: [...this.#state.filters, filter] },\n variantName as string,\n );\n }\n\n where(\n filter: MongoWhereFilter<TContract, ModelName> | MongoFilterExpr,\n ): MongoCollection<TContract, ModelName, TIncludes, TVariant> {\n if (isMongoFilterExpr(filter)) {\n return this.#clone({ filters: [...this.#state.filters, filter] });\n }\n const compiled = this.#compileWhereObject(filter as Record<string, unknown>);\n return this.#clone({ filters: [...this.#state.filters, ...compiled] });\n }\n\n select(\n ...fields: ModelFieldKeys<TContract, ModelName>[]\n ): MongoCollection<TContract, ModelName, TIncludes, TVariant> {\n return this.#clone({ selectedFields: [...(this.#state.selectedFields ?? []), ...fields] });\n }\n\n include<K extends ReferenceRelationKeys<TContract, ModelName> & string>(\n relationName: K,\n ): MongoCollection<TContract, ModelName, TIncludes & Record<K, true>, TVariant> {\n const model = this.#contract.models[this.#modelName] as MongoModelDefinition;\n const relation = model.relations?.[relationName];\n if (!relation) {\n throw new Error(`Unknown relation \"${relationName}\" on model \"${this.#modelName as string}\"`);\n }\n\n if (!('on' in relation)) {\n throw new Error(\n `Relation \"${relationName}\" is an embed relation — only reference relations can be included`,\n );\n }\n\n const ref = relation as ContractReferenceRelation;\n const localField = ref.on.localFields[0];\n const foreignField = ref.on.targetFields[0];\n if (\n !localField ||\n !foreignField ||\n ref.on.localFields.length !== 1 ||\n ref.on.targetFields.length !== 1\n ) {\n throw new Error(`Compound references are not yet supported: relation \"${relationName}\"`);\n }\n\n const targetModel = this.#contract.models[ref.to] as MongoModelDefinition | undefined;\n if (!targetModel) {\n throw new Error(`Target model \"${ref.to}\" not found for relation \"${relationName}\"`);\n }\n\n const includeExpr: MongoIncludeExpr = {\n relationName,\n from: resolveCollectionName(targetModel, ref.to),\n localField,\n foreignField,\n cardinality: ref.cardinality,\n };\n\n return this.#clone({\n includes: [...this.#state.includes, includeExpr],\n }) as unknown as MongoCollectionImpl<\n TContract,\n ModelName,\n TIncludes & Record<K, true>,\n TVariant\n >;\n }\n\n orderBy(\n spec: Partial<Record<ModelFieldKeys<TContract, ModelName>, 1 | -1>>,\n ): MongoCollection<TContract, ModelName, TIncludes, TVariant> {\n const merged = { ...this.#state.orderBy, ...(spec as Readonly<Record<string, 1 | -1>>) };\n return this.#clone({ orderBy: merged });\n }\n\n take(n: number): MongoCollection<TContract, ModelName, TIncludes, TVariant> {\n return this.#clone({ limit: n });\n }\n\n skip(n: number): MongoCollection<TContract, ModelName, TIncludes, TVariant> {\n return this.#clone({ offset: n });\n }\n\n all(): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>> {\n return this.#execute();\n }\n\n async first(): Promise<IncludedRow<TContract, ModelName, TIncludes> | null> {\n const limited = this.#clone({ limit: 1 });\n const result = limited.#execute();\n for await (const row of result) {\n return row;\n }\n return null;\n }\n\n async create(\n data: ResolvedCreateInput<TContract, ModelName, TVariant>,\n ): Promise<IncludedRow<TContract, ModelName, TIncludes>> {\n this.#rejectIncludes('create');\n const normalized = this.#injectDiscriminator(\n this.#stripUndefined(data as Record<string, unknown>),\n );\n const document = this.#toDocument(normalized);\n const command = new InsertOneCommand(this.#collectionName, document);\n const results = await this.#drainPlan(command);\n const insertedId = (results[0] as { insertedId: unknown }).insertedId;\n return { _id: insertedId, ...normalized } as unknown as IncludedRow<\n TContract,\n ModelName,\n TIncludes\n >;\n }\n\n createAll(\n data: ReadonlyArray<ResolvedCreateInput<TContract, ModelName, TVariant>>,\n ): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>> {\n this.#rejectIncludes('createAll');\n const self = this;\n async function* gen(): AsyncGenerator<IncludedRow<TContract, ModelName, TIncludes>> {\n const normalizedRows = data.map((d) =>\n self.#injectDiscriminator(self.#stripUndefined(d as Record<string, unknown>)),\n );\n const documents = normalizedRows.map((d) => self.#toDocument(d));\n const command = new InsertManyCommand(self.#collectionName, documents);\n const results = await self.#drainPlan(command);\n const insertedIds = (results[0] as { insertedIds: readonly unknown[] }).insertedIds;\n for (let i = 0; i < normalizedRows.length; i++) {\n yield { _id: insertedIds[i], ...normalizedRows[i] } as unknown as IncludedRow<\n TContract,\n ModelName,\n TIncludes\n >;\n }\n }\n return new AsyncIterableResult(gen());\n }\n\n async createCount(\n data: ReadonlyArray<ResolvedCreateInput<TContract, ModelName, TVariant>>,\n ): Promise<number> {\n this.#rejectIncludes('createCount');\n const documents = data.map((d) =>\n this.#toDocument(this.#injectDiscriminator(d as Record<string, unknown>)),\n );\n const command = new InsertManyCommand(this.#collectionName, documents);\n const results = await this.#drainPlan(command);\n return (results[0] as { insertedCount: number }).insertedCount;\n }\n\n async update(\n dataOrCallback:\n | Partial<DefaultModelRow<TContract, ModelName>>\n | ((u: FieldAccessor<TContract, ModelName>) => FieldOperation[]),\n ): Promise<IncludedRow<TContract, ModelName, TIncludes> | null> {\n this.#requireFilters('update');\n this.#rejectWindowing('update');\n this.#rejectIncludes('update');\n const filter = this.#mergeFilters();\n const updateDoc = this.#resolveUpdateDoc(dataOrCallback);\n const command = new FindOneAndUpdateCommand(this.#collectionName, filter, updateDoc, false);\n const results = await this.#drainPlan(command);\n return (results[0] as IncludedRow<TContract, ModelName, TIncludes>) ?? null;\n }\n\n updateAll(\n dataOrCallback:\n | Partial<DefaultModelRow<TContract, ModelName>>\n | ((u: FieldAccessor<TContract, ModelName>) => FieldOperation[]),\n ): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>> {\n this.#requireFilters('updateAll');\n this.#rejectWindowing('updateAll');\n const self = this;\n async function* gen(): AsyncGenerator<IncludedRow<TContract, ModelName, TIncludes>> {\n const ids = await self.#readMatchingIds();\n if (ids.length === 0) return;\n\n const filter = self.#mergeFilters();\n const updateDoc = self.#resolveUpdateDoc(dataOrCallback);\n const command = new UpdateManyCommand(self.#collectionName, filter, updateDoc);\n await self.#drainPlan(command);\n\n const idFilter = MongoFieldFilter.in(\n '_id',\n ids.map((id) => new MongoParamRef(id)),\n );\n yield* self.#clone({ filters: [idFilter] }).#execute();\n }\n return new AsyncIterableResult(gen());\n }\n\n async updateCount(\n dataOrCallback:\n | Partial<DefaultModelRow<TContract, ModelName>>\n | ((u: FieldAccessor<TContract, ModelName>) => FieldOperation[]),\n ): Promise<number> {\n this.#requireFilters('updateCount');\n this.#rejectWindowing('updateCount');\n this.#rejectIncludes('updateCount');\n const filter = this.#mergeFilters();\n const updateDoc = this.#resolveUpdateDoc(dataOrCallback);\n const command = new UpdateManyCommand(this.#collectionName, filter, updateDoc);\n const results = await this.#drainPlan(command);\n return (results[0] as { modifiedCount: number }).modifiedCount;\n }\n\n async delete(): Promise<IncludedRow<TContract, ModelName, TIncludes> | null> {\n this.#requireFilters('delete');\n this.#rejectWindowing('delete');\n this.#rejectIncludes('delete');\n const filter = this.#mergeFilters();\n const command = new FindOneAndDeleteCommand(this.#collectionName, filter);\n const results = await this.#drainPlan(command);\n return (results[0] as IncludedRow<TContract, ModelName, TIncludes>) ?? null;\n }\n\n deleteAll(): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>> {\n this.#requireFilters('deleteAll');\n this.#rejectWindowing('deleteAll');\n const self = this;\n async function* gen(): AsyncGenerator<IncludedRow<TContract, ModelName, TIncludes>> {\n const docs: IncludedRow<TContract, ModelName, TIncludes>[] = [];\n for await (const row of self.#execute()) {\n docs.push(row);\n }\n const filter = self.#mergeFilters();\n const command = new DeleteManyCommand(self.#collectionName, filter);\n await self.#drainPlan(command);\n yield* docs;\n }\n return new AsyncIterableResult(gen());\n }\n\n async deleteCount(): Promise<number> {\n this.#requireFilters('deleteCount');\n this.#rejectWindowing('deleteCount');\n this.#rejectIncludes('deleteCount');\n const filter = this.#mergeFilters();\n const command = new DeleteManyCommand(this.#collectionName, filter);\n const results = await this.#drainPlan(command);\n return (results[0] as { deletedCount: number }).deletedCount;\n }\n\n async upsert(input: {\n create: ResolvedCreateInput<TContract, ModelName, TVariant>;\n update:\n | Partial<DefaultModelRow<TContract, ModelName>>\n | ((u: FieldAccessor<TContract, ModelName>) => FieldOperation[]);\n }): Promise<IncludedRow<TContract, ModelName, TIncludes>> {\n this.#requireFilters('upsert');\n this.#rejectWindowing('upsert');\n this.#rejectIncludes('upsert');\n const filter = this.#mergeFilters();\n\n const allCreateFields = this.#toDocument(\n this.#injectDiscriminator(input.create as Record<string, unknown>),\n );\n\n let updateDoc: Record<string, Record<string, MongoValue>>;\n if (typeof input.update === 'function') {\n const accessor = createFieldAccessor<TContract, ModelName>();\n const ops = input.update(accessor);\n const idOp = ops.find((op) => op.field === '_id');\n if (idOp) {\n throw new Error('Mutation payloads cannot modify `_id`');\n }\n const dotPathOp = ops.find((op) => op.field.includes('.'));\n if (dotPathOp) {\n throw new Error(\n `upsert() does not support dot-path field operations (found \"${dotPathOp.field}\"). ` +\n 'Dot-path updates conflict with $setOnInsert on the insert path, producing incomplete documents. ' +\n 'Use top-level field operations instead.',\n );\n }\n updateDoc = compileFieldOperations(ops, (field, value, operator) =>\n this.#wrapFieldOpValue(field, value, operator),\n );\n } else {\n const setFields = this.#toSetFields(input.update as Record<string, unknown>);\n updateDoc = {};\n if (Object.keys(setFields).length > 0) {\n updateDoc['$set'] = setFields;\n }\n }\n\n const updatedFields = new Set<string>();\n for (const operatorGroup of Object.values(updateDoc)) {\n for (const fieldPath of Object.keys(operatorGroup)) {\n updatedFields.add(fieldPath.split('.')[0] ?? fieldPath);\n }\n }\n const insertOnlyFields: Record<string, MongoValue> = {};\n for (const [key, value] of Object.entries(allCreateFields)) {\n if (!updatedFields.has(key)) {\n insertOnlyFields[key] = value;\n }\n }\n if (Object.keys(insertOnlyFields).length > 0) {\n updateDoc['$setOnInsert'] = insertOnlyFields;\n }\n\n const command = new FindOneAndUpdateCommand(this.#collectionName, filter, updateDoc, true);\n const results = await this.#drainPlan(command);\n return results[0] as IncludedRow<TContract, ModelName, TIncludes>;\n }\n\n async #readMatchingIds(): Promise<unknown[]> {\n const idQuery = this.#clone({\n includes: [],\n selectedFields: ['_id'],\n orderBy: undefined,\n limit: undefined,\n offset: undefined,\n });\n const ids: unknown[] = [];\n for await (const row of idQuery.#execute()) {\n ids.push((row as Record<string, unknown>)['_id']);\n }\n return ids;\n }\n\n #execute(): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>> {\n const plan = this.#compile();\n return this.#executor.execute(plan);\n }\n\n #compile(): MongoQueryPlan<IncludedRow<TContract, ModelName, TIncludes>> {\n return compileMongoQuery<IncludedRow<TContract, ModelName, TIncludes>>(\n this.#collectionName,\n this.#state,\n this.#contract.storage.storageHash,\n );\n }\n\n #wrapCommand(command: AnyMongoCommand): MongoQueryPlan {\n return { collection: this.#collectionName, command, meta: this.#planMeta() };\n }\n\n async #drainPlan(command: AnyMongoCommand): Promise<unknown[]> {\n const plan = this.#wrapCommand(command);\n const result = this.#executor.execute(plan);\n const rows: unknown[] = [];\n for await (const row of result) {\n rows.push(row);\n }\n return rows;\n }\n\n #modelFields(): Record<string, ContractField> {\n const model = this.#contract.models[this.#modelName] as MongoModelDefinition | undefined;\n return model?.fields ?? {};\n }\n\n #compileWhereObject(data: Record<string, unknown>): MongoFilterExpr[] {\n const fields = this.#modelFields();\n const filters: MongoFilterExpr[] = [];\n for (const [key, value] of Object.entries(data)) {\n if (value === undefined) continue;\n const wrapped = this.#wrapFieldValue(value, fields[key]);\n filters.push(MongoFieldFilter.eq(key, wrapped));\n }\n return filters;\n }\n\n #wrapFieldValue(value: unknown, field: ContractField | undefined): MongoValue {\n if (field === undefined) return new MongoParamRef(value);\n\n if (field.type.kind === 'scalar') {\n return new MongoParamRef(value, { codecId: field.type.codecId });\n }\n\n if (field.type.kind === 'valueObject') {\n const voName = field.type.name;\n const voDef = (this.#contract as { valueObjects?: Record<string, ContractValueObject> })\n .valueObjects?.[voName];\n if (!voDef || value === null) return new MongoParamRef(value);\n\n if (field.many && Array.isArray(value)) {\n return value.map((item) =>\n this.#wrapValueObject(item as Record<string, unknown>, voDef),\n ) as unknown as MongoValue;\n }\n return this.#wrapValueObject(value as Record<string, unknown>, voDef);\n }\n\n return new MongoParamRef(value);\n }\n\n #wrapValueObject(\n data: Record<string, unknown>,\n voDef: ContractValueObject,\n ): Record<string, MongoValue> {\n const doc: Record<string, MongoValue> = {};\n for (const [key, value] of Object.entries(data)) {\n if (value === undefined) continue;\n const fieldDef = voDef.fields[key];\n doc[key] = this.#wrapFieldValue(value, fieldDef);\n }\n return doc;\n }\n\n #toDocument(data: Record<string, unknown>): Record<string, MongoValue> {\n const fields = this.#modelFields();\n const doc: Record<string, MongoValue> = {};\n for (const [key, value] of Object.entries(data)) {\n if (value !== undefined) {\n doc[key] = this.#wrapFieldValue(value, fields[key]);\n }\n }\n return doc;\n }\n\n #toSetFields(data: Record<string, unknown>): Record<string, MongoValue> {\n const fields = this.#modelFields();\n const result: Record<string, MongoValue> = {};\n for (const [key, value] of Object.entries(data)) {\n if (key === '_id' && value !== undefined) {\n throw new Error('Mutation payloads cannot modify `_id`');\n }\n if (value !== undefined) {\n result[key] = this.#wrapFieldValue(value, fields[key]);\n }\n }\n return result;\n }\n\n #stripUndefined(data: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n if (value !== undefined) {\n result[key] = value;\n }\n }\n return result;\n }\n\n #toUpdateDocument(data: Record<string, unknown>): Record<string, Record<string, MongoValue>> {\n return { $set: this.#toSetFields(data) };\n }\n\n #resolveUpdateDoc(\n dataOrCallback:\n | Partial<DefaultModelRow<TContract, ModelName>>\n | ((u: FieldAccessor<TContract, ModelName>) => FieldOperation[]),\n ): Record<string, Record<string, MongoValue>> {\n if (typeof dataOrCallback === 'function') {\n const accessor = createFieldAccessor<TContract, ModelName>();\n const ops = dataOrCallback(accessor);\n const idOp = ops.find((op) => op.field === '_id');\n if (idOp) {\n throw new Error('Mutation payloads cannot modify `_id`');\n }\n if (ops.length === 0) {\n return { $set: {} };\n }\n return compileFieldOperations(ops, (field, value, operator) =>\n this.#wrapFieldOpValue(field, value, operator),\n );\n }\n return this.#toUpdateDocument(dataOrCallback as Record<string, unknown>);\n }\n\n #wrapFieldOpValue(field: string, value: MongoValue, operator?: string): MongoValue {\n if (operator === '$unset') return value;\n\n const topLevelField = field.split('.')[0] ?? field;\n const fields = this.#modelFields();\n const contractField = fields[topLevelField];\n if (!contractField) return value;\n\n if (field.includes('.')) {\n return this.#wrapDotPathValue(field, value);\n }\n\n if (value instanceof MongoParamRef && contractField.type.kind === 'scalar') {\n return new MongoParamRef(value.value, { codecId: contractField.type.codecId });\n }\n\n if (contractField.type.kind === 'valueObject' && value instanceof MongoParamRef) {\n const raw = value.value;\n if (typeof raw === 'object' && raw !== null && !Array.isArray(raw)) {\n const voName = contractField.type.name;\n const voDef = (this.#contract as { valueObjects?: Record<string, ContractValueObject> })\n .valueObjects?.[voName];\n if (voDef) {\n return this.#wrapValueObject(raw as Record<string, unknown>, voDef);\n }\n }\n }\n\n return value;\n }\n\n #wrapDotPathValue(dotPath: string, value: MongoValue): MongoValue {\n const parts = dotPath.split('.');\n const fields = this.#modelFields();\n let currentField: ContractField | undefined = parts[0] ? fields[parts[0]] : undefined;\n\n for (let i = 1; i < parts.length; i++) {\n if (!currentField || currentField.type.kind !== 'valueObject') return value;\n const voName = currentField.type.name;\n const voDef = (this.#contract as { valueObjects?: Record<string, ContractValueObject> })\n .valueObjects?.[voName];\n if (!voDef) return value;\n const partKey = parts[i];\n currentField = partKey ? voDef.fields[partKey] : undefined;\n }\n\n if (currentField?.type.kind === 'scalar' && value instanceof MongoParamRef) {\n return new MongoParamRef(value.value, { codecId: currentField.type.codecId });\n }\n\n if (currentField?.type.kind === 'valueObject' && value instanceof MongoParamRef) {\n const raw = value.value;\n if (typeof raw === 'object' && raw !== null && !Array.isArray(raw)) {\n const voName = currentField.type.name;\n const voDef = (this.#contract as { valueObjects?: Record<string, ContractValueObject> })\n .valueObjects?.[voName];\n if (voDef) {\n return this.#wrapValueObject(raw as Record<string, unknown>, voDef);\n }\n }\n }\n\n return value;\n }\n\n #mergeFilters(): MongoFilterExpr {\n const [single] = this.#state.filters;\n if (this.#state.filters.length === 1 && single) {\n return single;\n }\n return MongoAndExpr.of([...this.#state.filters]);\n }\n\n #requireFilters(methodName: string): void {\n if (this.#state.filters.length === 0) {\n throw new Error(\n `${methodName}() requires a .where() filter. Call .where() before .${methodName}()`,\n );\n }\n }\n\n #rejectWindowing(methodName: string): void {\n if (\n this.#state.orderBy !== undefined ||\n this.#state.limit !== undefined ||\n this.#state.offset !== undefined\n ) {\n throw new Error(\n `${methodName}() does not support orderBy/skip/take. Remove windowing before calling .${methodName}()`,\n );\n }\n }\n\n #rejectIncludes(methodName: string): void {\n if (this.#state.includes.length > 0) {\n throw new Error(\n `${methodName}() does not support .include(). Remove includes before calling .${methodName}()`,\n );\n }\n }\n\n #planMeta(): PlanMeta {\n return {\n target: 'mongo',\n storageHash: this.#contract.storage.storageHash,\n lane: 'mongo-orm',\n paramDescriptors: [],\n };\n }\n\n #injectDiscriminator(data: Record<string, unknown>): Record<string, unknown> {\n if (!this.#variantName) return data;\n const model = this.#contract.models[this.#modelName] as MongoModelDefinition | undefined;\n if (!model?.discriminator || !model.variants) return data;\n const variantEntry = model.variants[this.#variantName];\n if (!variantEntry) return data;\n return { ...data, [model.discriminator.field]: variantEntry.value };\n }\n\n #clone(\n overrides: Partial<MongoCollectionState>,\n ): MongoCollectionImpl<TContract, ModelName, TIncludes, TVariant> {\n const instance = new MongoCollectionImpl<TContract, ModelName, TIncludes, TVariant>(\n this.#contract,\n this.#modelName,\n this.#executor,\n );\n instance.#state = { ...this.#state, ...overrides };\n instance.#collectionName = this.#collectionName;\n instance.#variantName = this.#variantName;\n return instance;\n }\n\n #cloneWithVariant<VNew extends string>(\n overrides: Partial<MongoCollectionState>,\n variantName: string,\n ): MongoCollectionImpl<TContract, ModelName, TIncludes, VNew> {\n const instance = new MongoCollectionImpl<TContract, ModelName, TIncludes, VNew>(\n this.#contract,\n this.#modelName,\n this.#executor,\n );\n instance.#state = { ...this.#state, ...overrides };\n instance.#collectionName = this.#collectionName;\n instance.#variantName = variantName;\n return instance;\n }\n}\n\nexport function createMongoCollection<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n>(\n contract: TContract,\n modelName: ModelName,\n executor: MongoQueryExecutor,\n): MongoCollection<TContract, ModelName> {\n return new MongoCollectionImpl(contract, modelName, executor);\n}\n","import type {\n MongoContract,\n MongoContractWithTypeMaps,\n MongoTypeMaps,\n} from '@prisma-next/mongo-contract';\nimport type { MongoCollection } from './collection';\nimport { createMongoCollection } from './collection';\nimport type { MongoQueryExecutor } from './executor';\n\nexport interface MongoOrmOptions<TContract extends MongoContract> {\n readonly contract: TContract;\n readonly executor: MongoQueryExecutor;\n}\n\nexport type MongoOrmClient<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n> = {\n readonly [K in keyof TContract['roots']]: TContract['roots'][K] extends string &\n keyof TContract['models']\n ? MongoCollection<TContract, TContract['roots'][K]>\n : never;\n};\n\nexport function mongoOrm<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>>(\n options: MongoOrmOptions<TContract>,\n): MongoOrmClient<TContract> {\n const { contract, executor } = options;\n const client: Record<string, unknown> = {};\n\n for (const [rootName, modelName] of Object.entries(contract.roots)) {\n client[rootName] = createMongoCollection(\n contract,\n modelName as string & keyof TContract['models'],\n executor,\n );\n }\n\n return client as MongoOrmClient<TContract>;\n}\n","import type { PlanMeta } from '@prisma-next/contract/types';\nimport type { MongoQueryPlan } from '@prisma-next/mongo-query-ast/execution';\nimport {\n RawAggregateCommand,\n RawDeleteManyCommand,\n RawDeleteOneCommand,\n RawFindOneAndDeleteCommand,\n RawFindOneAndUpdateCommand,\n RawInsertManyCommand,\n RawInsertOneCommand,\n RawUpdateManyCommand,\n RawUpdateOneCommand,\n} from '@prisma-next/mongo-query-ast/execution';\nimport type { Document } from '@prisma-next/mongo-value';\n\ninterface Buildable<Row = unknown> {\n build(): MongoQueryPlan<Row>;\n}\n\nexport interface RawMongoCollection {\n aggregate<Row = Record<string, unknown>>(pipeline: ReadonlyArray<Document>): Buildable<Row>;\n\n insertOne(document: Document): Buildable;\n insertMany(documents: ReadonlyArray<Document>): Buildable;\n\n updateOne(filter: Document, update: Document | ReadonlyArray<Document>): Buildable;\n\n updateMany(filter: Document, update: Document | ReadonlyArray<Document>): Buildable;\n\n deleteOne(filter: Document): Buildable;\n deleteMany(filter: Document): Buildable;\n\n findOneAndUpdate(\n filter: Document,\n update: Document | ReadonlyArray<Document>,\n options?: { upsert?: boolean },\n ): Buildable;\n\n findOneAndDelete(filter: Document): Buildable;\n}\n\nexport function createRawMongoCollection(\n collectionName: string,\n meta: PlanMeta,\n): RawMongoCollection {\n function buildable<Row>(command: MongoQueryPlan['command']): Buildable<Row> {\n return {\n build: () => ({ collection: collectionName, command, meta }),\n };\n }\n\n return {\n aggregate<Row = Record<string, unknown>>(pipeline: ReadonlyArray<Document>) {\n return buildable<Row>(new RawAggregateCommand(collectionName, pipeline));\n },\n\n insertOne(document: Document) {\n return buildable(new RawInsertOneCommand(collectionName, document));\n },\n\n insertMany(documents: ReadonlyArray<Document>) {\n return buildable(new RawInsertManyCommand(collectionName, documents));\n },\n\n updateOne(filter: Document, update: Document | ReadonlyArray<Document>) {\n return buildable(new RawUpdateOneCommand(collectionName, filter, update));\n },\n\n updateMany(filter: Document, update: Document | ReadonlyArray<Document>) {\n return buildable(new RawUpdateManyCommand(collectionName, filter, update));\n },\n\n deleteOne(filter: Document) {\n return buildable(new RawDeleteOneCommand(collectionName, filter));\n },\n\n deleteMany(filter: Document) {\n return buildable(new RawDeleteManyCommand(collectionName, filter));\n },\n\n findOneAndUpdate(\n filter: Document,\n update: Document | ReadonlyArray<Document>,\n options?: { upsert?: boolean },\n ) {\n return buildable(\n new RawFindOneAndUpdateCommand(collectionName, filter, update, options?.upsert ?? false),\n );\n },\n\n findOneAndDelete(filter: Document) {\n return buildable(new RawFindOneAndDeleteCommand(collectionName, filter));\n },\n };\n}\n","import type { PlanMeta } from '@prisma-next/contract/types';\nimport type { MongoContract, MongoModelDefinition } from '@prisma-next/mongo-contract';\nimport { createRawMongoCollection, type RawMongoCollection } from './raw-collection';\n\nexport interface MongoRawClient<TContract extends MongoContract> {\n collection<K extends keyof TContract['roots'] & string>(rootName: K): RawMongoCollection;\n}\n\nexport function mongoRaw<TContract extends MongoContract>(options: {\n contract: TContract;\n}): MongoRawClient<TContract> {\n const { contract } = options;\n\n return {\n collection<K extends keyof TContract['roots'] & string>(rootName: K): RawMongoCollection {\n const modelName = contract.roots[rootName] as string;\n if (!Object.hasOwn(contract.models, modelName)) {\n throw new Error(`Unknown model \"${modelName}\" for root \"${rootName}\"`);\n }\n const model = contract.models[modelName] as MongoModelDefinition;\n const collectionName = model.storage.collection ?? modelName;\n\n const meta: PlanMeta = {\n target: 'mongo',\n storageHash: contract.storage.storageHash,\n lane: 'mongo-raw',\n paramDescriptors: [],\n };\n\n return createRawMongoCollection(collectionName, meta);\n },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["#contract","#modelName","#executor","#collectionName","#state","#cloneWithVariant","#clone","#compileWhereObject","#execute","#rejectIncludes","#injectDiscriminator","#stripUndefined","#toDocument","#drainPlan","#requireFilters","#rejectWindowing","#mergeFilters","#resolveUpdateDoc","#readMatchingIds","#wrapFieldOpValue","#toSetFields","#compile","#planMeta","#wrapCommand","#modelFields","#wrapFieldValue","#wrapValueObject","#toUpdateDocument","#wrapDotPathValue","#variantName"],"sources":["../src/collection-state.ts","../src/compile.ts","../src/field-accessor.ts","../src/collection.ts","../src/mongo-orm.ts","../src/raw-collection.ts","../src/mongo-raw.ts"],"sourcesContent":["import type { MongoFilterExpr } from '@prisma-next/mongo-query-ast/execution';\n\nexport interface MongoIncludeExpr {\n readonly relationName: string;\n readonly from: string;\n readonly localField: string;\n readonly foreignField: string;\n readonly cardinality: '1:1' | 'N:1' | '1:N' | 'M:N';\n}\n\nexport interface MongoCollectionState {\n readonly filters: readonly MongoFilterExpr[];\n readonly includes: readonly MongoIncludeExpr[];\n readonly orderBy: Readonly<Record<string, 1 | -1>> | undefined;\n readonly selectedFields: readonly string[] | undefined;\n readonly limit: number | undefined;\n readonly offset: number | undefined;\n}\n\nexport function emptyCollectionState(): MongoCollectionState {\n return {\n filters: [],\n includes: [],\n orderBy: undefined,\n selectedFields: undefined,\n limit: undefined,\n offset: undefined,\n };\n}\n","import type { PlanMeta } from '@prisma-next/contract/types';\nimport type { MongoModelDefinition } from '@prisma-next/mongo-contract';\nimport type { MongoPipelineStage, MongoQueryPlan } from '@prisma-next/mongo-query-ast/execution';\nimport {\n AggregateCommand,\n MongoAndExpr,\n MongoLimitStage,\n MongoLookupStage,\n MongoMatchStage,\n MongoProjectStage,\n MongoSkipStage,\n MongoSortStage,\n MongoUnwindStage,\n} from '@prisma-next/mongo-query-ast/execution';\nimport { contractModelToMongoResultShape } from '@prisma-next/mongo-query-builder';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport type { MongoCollectionState, MongoIncludeExpr } from './collection-state';\n\nfunction compileIncludes(includes: readonly MongoIncludeExpr[]): MongoPipelineStage[] {\n const stages: MongoPipelineStage[] = [];\n\n for (const inc of includes) {\n stages.push(\n new MongoLookupStage({\n from: inc.from,\n localField: inc.localField,\n foreignField: inc.foreignField,\n as: inc.relationName,\n }),\n );\n\n if (inc.cardinality === 'N:1' || inc.cardinality === '1:1') {\n stages.push(new MongoUnwindStage(`$${inc.relationName}`, true));\n }\n }\n\n return stages;\n}\n\nexport function compileMongoQuery<Row = unknown>(\n collection: string,\n state: MongoCollectionState,\n storageHash: string,\n model: MongoModelDefinition,\n): MongoQueryPlan<Row> {\n const stages: MongoPipelineStage[] = [];\n\n const singleFilter = state.filters.length === 1 ? state.filters[0] : undefined;\n if (singleFilter) {\n stages.push(new MongoMatchStage(singleFilter));\n } else if (state.filters.length > 1) {\n stages.push(new MongoMatchStage(MongoAndExpr.of([...state.filters])));\n }\n\n if (state.includes.length > 0) {\n stages.push(...compileIncludes(state.includes));\n }\n\n if (state.orderBy) {\n stages.push(new MongoSortStage(state.orderBy));\n }\n\n if (state.offset !== undefined) {\n stages.push(new MongoSkipStage(state.offset));\n }\n\n if (state.limit !== undefined) {\n stages.push(new MongoLimitStage(state.limit));\n }\n\n if (state.selectedFields && state.selectedFields.length > 0) {\n const projection: Record<string, 0 | 1> = {};\n for (const field of state.selectedFields) {\n projection[field] = 1;\n }\n if (!Object.hasOwn(projection, '_id')) {\n projection['_id'] = 0;\n }\n stages.push(new MongoProjectStage(projection));\n }\n\n const meta: PlanMeta = {\n target: 'mongo',\n storageHash,\n lane: 'mongo-orm',\n };\n const command = new AggregateCommand(collection, stages);\n\n const selection =\n state.selectedFields !== undefined && state.selectedFields.length > 0\n ? state.selectedFields\n : undefined;\n const includeRelationNames =\n state.includes.length > 0 ? state.includes.map((inc) => inc.relationName) : undefined;\n const resultShape = contractModelToMongoResultShape(model, {\n ...ifDefined('selection', selection),\n ...ifDefined('includeRelationNames', includeRelationNames),\n });\n\n return { collection, command, meta, resultShape };\n}\n","import type { ContractField, ContractValueObject } from '@prisma-next/contract/types';\nimport type {\n ExtractMongoCodecTypes,\n ExtractMongoFieldOutputTypes,\n InferModelRow,\n MongoContract,\n MongoContractWithTypeMaps,\n MongoTypeMaps,\n} from '@prisma-next/mongo-contract';\nimport type { MongoValue } from '@prisma-next/mongo-value';\nimport { MongoParamRef } from '@prisma-next/mongo-value';\n\n// ── Runtime types ────────────────────────────────────────────────────────────\n\nexport type UpdateOperator =\n | '$set'\n | '$unset'\n | '$inc'\n | '$mul'\n | '$push'\n | '$pull'\n | '$addToSet'\n | '$pop';\n\nexport interface FieldOperation {\n readonly operator: UpdateOperator;\n readonly field: string;\n readonly value: MongoValue;\n}\n\n// ── Compile-time types ───────────────────────────────────────────────────────\n\ntype ScalarFieldKeys<\n TContract extends MongoContract,\n ModelName extends string & keyof TContract['models'],\n> = {\n [K in keyof TContract['models'][ModelName]['fields'] &\n string]: TContract['models'][ModelName]['fields'][K] extends {\n readonly type: { readonly kind: 'scalar' };\n }\n ? K\n : never;\n}[keyof TContract['models'][ModelName]['fields'] & string];\n\ntype ValueObjectFieldKeys<\n TContract extends MongoContract,\n ModelName extends string & keyof TContract['models'],\n> = {\n [K in keyof TContract['models'][ModelName]['fields'] &\n string]: TContract['models'][ModelName]['fields'][K] extends {\n readonly type: { readonly kind: 'valueObject'; readonly name: string };\n }\n ? K\n : never;\n}[keyof TContract['models'][ModelName]['fields'] & string];\n\ntype ResolvedModelRow<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n> = string extends keyof ExtractMongoFieldOutputTypes<TContract>\n ? InferModelRow<TContract, ModelName>\n : ModelName extends keyof ExtractMongoFieldOutputTypes<TContract>\n ? {\n -readonly [K in keyof ExtractMongoFieldOutputTypes<TContract>[ModelName]]: ExtractMongoFieldOutputTypes<TContract>[ModelName][K];\n }\n : InferModelRow<TContract, ModelName>;\n\ntype ResolveFieldType<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n K extends keyof TContract['models'][ModelName]['fields'] & string,\n> = K extends keyof ResolvedModelRow<TContract, ModelName>\n ? ResolvedModelRow<TContract, ModelName>[K]\n : unknown;\n\ntype NumericOps = {\n inc(value: number): FieldOperation;\n mul(value: number): FieldOperation;\n};\n\nexport type FieldExpression<T = unknown> = {\n set(value: T): FieldOperation;\n unset(): FieldOperation;\n push(value: T extends readonly (infer E)[] ? E : unknown): FieldOperation;\n pull(match: T extends readonly (infer E)[] ? E | Partial<E> : unknown): FieldOperation;\n addToSet(value: T extends readonly (infer E)[] ? E : unknown): FieldOperation;\n pop(end: 1 | -1): FieldOperation;\n} & (T extends number ? NumericOps : unknown);\n\ntype HasValueObjects = { readonly valueObjects?: Record<string, ContractValueObject> };\n\ntype VOFields<TContract extends HasValueObjects, VOName extends string> = TContract extends {\n readonly valueObjects: infer VOs extends Record<string, ContractValueObject>;\n}\n ? VOName extends keyof VOs\n ? VOs[VOName]['fields']\n : never\n : never;\n\ntype VOScalarFieldKeys<Fields extends Record<string, ContractField>> = {\n [K in keyof Fields & string]: Fields[K] extends { readonly type: { readonly kind: 'scalar' } }\n ? K\n : never;\n}[keyof Fields & string];\n\ntype VOValueObjectFieldKeys<Fields extends Record<string, ContractField>> = {\n [K in keyof Fields & string]: Fields[K] extends {\n readonly type: { readonly kind: 'valueObject'; readonly name: string };\n }\n ? K\n : never;\n}[keyof Fields & string];\n\ntype VODotPaths<\n TContract extends HasValueObjects,\n Fields extends Record<string, ContractField>,\n Prefix extends string,\n> =\n | { [K in VOScalarFieldKeys<Fields>]: `${Prefix}${K}` }[VOScalarFieldKeys<Fields>]\n | {\n [K in VOValueObjectFieldKeys<Fields>]: Fields[K] extends {\n readonly type: { readonly kind: 'valueObject'; readonly name: infer N extends string };\n }\n ? VODotPaths<TContract, VOFields<TContract, N>, `${Prefix}${K}.`>\n : never;\n }[VOValueObjectFieldKeys<Fields>];\n\nexport type DotPath<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n> = {\n [K in ValueObjectFieldKeys<\n TContract,\n ModelName\n >]: TContract['models'][ModelName]['fields'][K] extends {\n readonly type: { readonly kind: 'valueObject'; readonly name: infer N extends string };\n }\n ? VODotPaths<TContract, VOFields<TContract, N>, `${K}.`>\n : never;\n}[ValueObjectFieldKeys<TContract, ModelName>];\n\ntype ResolveDotPathInFields<\n TContract extends HasValueObjects,\n Fields extends Record<string, ContractField>,\n Path extends string,\n TCodecTypes extends Record<string, { output: unknown }>,\n> = Path extends `${infer Head}.${infer Rest}`\n ? Head extends keyof Fields & string\n ? Fields[Head] extends {\n readonly type: { readonly kind: 'valueObject'; readonly name: infer N extends string };\n }\n ? ResolveDotPathInFields<TContract, VOFields<TContract, N>, Rest, TCodecTypes>\n : never\n : never\n : Path extends keyof Fields & string\n ? Fields[Path] extends {\n readonly type: {\n readonly kind: 'scalar';\n readonly codecId: infer CId extends string & keyof TCodecTypes;\n };\n }\n ? TCodecTypes[CId]['output']\n : unknown\n : never;\n\nexport type ResolveDotPathType<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n Path extends string,\n TCodecTypes extends Record<string, { output: unknown }> = ExtractMongoCodecTypes<TContract>,\n> = Path extends `${infer Head}.${infer Rest}`\n ? Head extends keyof TContract['models'][ModelName]['fields'] & string\n ? TContract['models'][ModelName]['fields'][Head] extends {\n readonly type: { readonly kind: 'valueObject'; readonly name: infer N extends string };\n }\n ? ResolveDotPathInFields<TContract, VOFields<TContract, N>, Rest, TCodecTypes>\n : never\n : never\n : never;\n\nexport type FieldAccessor<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n> = {\n readonly [K in ScalarFieldKeys<TContract, ModelName>]: FieldExpression<\n ResolveFieldType<TContract, ModelName, K>\n >;\n} & {\n readonly [K in ValueObjectFieldKeys<TContract, ModelName>]: FieldExpression<\n ResolveFieldType<TContract, ModelName, K>\n >;\n} & (<P extends DotPath<TContract, ModelName>>(\n path: P,\n ) => FieldExpression<ResolveDotPathType<TContract, ModelName, P>>);\n\n// ── Runtime implementation ───────────────────────────────────────────────────\n\n// Runtime expression has all methods; type-level gating happens via FieldExpression<T>\ninterface RuntimeFieldExpression extends NumericOps {\n set(value: unknown): FieldOperation;\n unset(): FieldOperation;\n push(value: unknown): FieldOperation;\n pull(match: unknown): FieldOperation;\n addToSet(value: unknown): FieldOperation;\n pop(end: 1 | -1): FieldOperation;\n}\n\nfunction createFieldExpression(fieldPath: string): RuntimeFieldExpression {\n return {\n set(value: unknown): FieldOperation {\n return { operator: '$set', field: fieldPath, value: new MongoParamRef(value) };\n },\n unset(): FieldOperation {\n return { operator: '$unset', field: fieldPath, value: new MongoParamRef('') };\n },\n inc(value: number): FieldOperation {\n return { operator: '$inc', field: fieldPath, value: new MongoParamRef(value) };\n },\n mul(value: number): FieldOperation {\n return { operator: '$mul', field: fieldPath, value: new MongoParamRef(value) };\n },\n push(value: unknown): FieldOperation {\n return { operator: '$push', field: fieldPath, value: new MongoParamRef(value) };\n },\n pull(match: unknown): FieldOperation {\n return { operator: '$pull', field: fieldPath, value: new MongoParamRef(match) };\n },\n addToSet(value: unknown): FieldOperation {\n return { operator: '$addToSet', field: fieldPath, value: new MongoParamRef(value) };\n },\n pop(end: 1 | -1): FieldOperation {\n return { operator: '$pop', field: fieldPath, value: new MongoParamRef(end) };\n },\n };\n}\n\nexport function createFieldAccessor<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n>(): FieldAccessor<TContract, ModelName> {\n return new Proxy((() => {}) as unknown as FieldAccessor<TContract, ModelName>, {\n get(_target, prop: string): RuntimeFieldExpression {\n return createFieldExpression(prop);\n },\n apply(_target, _thisArg, args: [string]): RuntimeFieldExpression {\n return createFieldExpression(args[0]);\n },\n });\n}\n\nexport function compileFieldOperations(\n ops: readonly FieldOperation[],\n wrapValue: (field: string, value: MongoValue, operator: UpdateOperator) => MongoValue,\n): Record<string, Record<string, MongoValue>> {\n const grouped: Record<string, Record<string, MongoValue>> = {};\n for (const op of ops) {\n let group = grouped[op.operator];\n if (!group) {\n group = {};\n grouped[op.operator] = group;\n }\n group[op.field] = wrapValue(op.field, op.value, op.operator);\n }\n return grouped;\n}\n","import type {\n ContractField,\n ContractReferenceRelation,\n ContractValueObject,\n PlanMeta,\n} from '@prisma-next/contract/types';\nimport { AsyncIterableResult } from '@prisma-next/framework-components/runtime';\nimport type {\n MongoContract,\n MongoContractWithTypeMaps,\n MongoModelDefinition,\n MongoTypeMaps,\n} from '@prisma-next/mongo-contract';\nimport type {\n AnyMongoCommand,\n MongoFilterExpr,\n MongoQueryPlan,\n} from '@prisma-next/mongo-query-ast/execution';\nimport {\n DeleteManyCommand,\n FindOneAndDeleteCommand,\n FindOneAndUpdateCommand,\n InsertManyCommand,\n InsertOneCommand,\n isMongoFilterExpr,\n MongoAndExpr,\n MongoFieldFilter,\n UpdateManyCommand,\n} from '@prisma-next/mongo-query-ast/execution';\nimport type { MongoValue } from '@prisma-next/mongo-value';\nimport { MongoParamRef } from '@prisma-next/mongo-value';\nimport type { MongoIncludeExpr } from './collection-state';\nimport { emptyCollectionState, type MongoCollectionState } from './collection-state';\nimport { compileMongoQuery } from './compile';\nimport type { MongoQueryExecutor } from './executor';\nimport {\n compileFieldOperations,\n createFieldAccessor,\n type FieldAccessor,\n type FieldOperation,\n} from './field-accessor';\nimport type {\n DefaultModelRow,\n IncludedRow,\n MongoIncludeSpec,\n MongoWhereFilter,\n NoIncludes,\n ReferenceRelationKeys,\n ResolvedCreateInput,\n VariantNames,\n} from './types';\n\ntype ModelFieldKeys<\n TContract extends MongoContract,\n ModelName extends string & keyof TContract['models'],\n> = keyof TContract['models'][ModelName]['fields'] & string;\n\nexport interface MongoCollection<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n TIncludes extends MongoIncludeSpec<TContract, ModelName> = NoIncludes,\n TVariant extends string = never,\n> {\n /** Narrows to a specific variant, injecting a discriminator filter. */\n variant<V extends VariantNames<TContract, ModelName>>(\n variantName: V,\n ): MongoCollection<TContract, ModelName, TIncludes, V>;\n /** Appends equality filters from a plain object. Values are encoded through codecs. */\n where(\n filter: MongoWhereFilter<TContract, ModelName>,\n ): MongoCollection<TContract, ModelName, TIncludes, TVariant>;\n /** Appends a filter condition from a raw filter expression. */\n where(filter: MongoFilterExpr): MongoCollection<TContract, ModelName, TIncludes, TVariant>;\n /** Restricts returned fields to the given subset. Returns a new immutable collection. */\n select(\n ...fields: ModelFieldKeys<TContract, ModelName>[]\n ): MongoCollection<TContract, ModelName, TIncludes, TVariant>;\n /** Adds a `$lookup` for a reference relation. Returns a new immutable collection. */\n include<K extends ReferenceRelationKeys<TContract, ModelName> & string>(\n relationName: K,\n ): MongoCollection<TContract, ModelName, TIncludes & Record<K, true>, TVariant>;\n /** Sets sort order. Returns a new immutable collection. */\n orderBy(\n spec: Partial<Record<ModelFieldKeys<TContract, ModelName>, 1 | -1>>,\n ): MongoCollection<TContract, ModelName, TIncludes, TVariant>;\n /** Limits the number of results. Returns a new immutable collection. */\n take(n: number): MongoCollection<TContract, ModelName, TIncludes, TVariant>;\n /** Skips the first `n` results. Returns a new immutable collection. */\n skip(n: number): MongoCollection<TContract, ModelName, TIncludes, TVariant>;\n /** Executes the query and returns all matching rows as an async iterable. */\n all(): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>>;\n /** Executes the query with limit 1. Returns the first matching row or `null`. */\n first(): Promise<IncludedRow<TContract, ModelName, TIncludes> | null>;\n /** Returns the input data with the server-assigned `_id`. Does not re-read the stored document. */\n create(\n data: ResolvedCreateInput<TContract, ModelName, TVariant>,\n ): Promise<IncludedRow<TContract, ModelName, TIncludes>>;\n /** Returns input rows with server-assigned `_id`s. Does not re-read stored documents. */\n createAll(\n data: ReadonlyArray<ResolvedCreateInput<TContract, ModelName, TVariant>>,\n ): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>>;\n /** Inserts multiple documents and returns the number inserted. */\n createCount(\n data: ReadonlyArray<ResolvedCreateInput<TContract, ModelName, TVariant>>,\n ): Promise<number>;\n /** Updates one matching document via `findOneAndUpdate`. Returns the updated document or `null`. Requires `.where()`. */\n update(\n data: Partial<DefaultModelRow<TContract, ModelName>>,\n ): Promise<IncludedRow<TContract, ModelName, TIncludes> | null>;\n /** Updates one matching document using field operations from a callback. Requires `.where()`. */\n update(\n callback: (u: FieldAccessor<TContract, ModelName>) => FieldOperation[],\n ): Promise<IncludedRow<TContract, ModelName, TIncludes> | null>;\n /** Non-atomic: captures matching `_id`s, updates, then re-reads by `_id`. Requires `.where()`. */\n updateAll(\n data: Partial<DefaultModelRow<TContract, ModelName>>,\n ): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>>;\n /** Updates all matching documents using field operations from a callback. Requires `.where()`. */\n updateAll(\n callback: (u: FieldAccessor<TContract, ModelName>) => FieldOperation[],\n ): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>>;\n /** Updates all matching documents and returns the number modified. Requires `.where()`. */\n updateCount(data: Partial<DefaultModelRow<TContract, ModelName>>): Promise<number>;\n /** Updates all matching documents using field operations and returns the number modified. Requires `.where()`. */\n updateCount(\n callback: (u: FieldAccessor<TContract, ModelName>) => FieldOperation[],\n ): Promise<number>;\n /** Deletes one matching document via `findOneAndDelete`. Returns the deleted document or `null`. Requires `.where()`. */\n delete(): Promise<IncludedRow<TContract, ModelName, TIncludes> | null>;\n /** Non-atomic: reads matching docs then deletes them. Concurrent writes may cause stale results. Requires `.where()`. */\n deleteAll(): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>>;\n /** Deletes all matching documents and returns the number deleted. Requires `.where()`. */\n deleteCount(): Promise<number>;\n /**\n * On insert: `update` fields are applied via `$set`, remaining `create` fields via `$setOnInsert`.\n * This means `update` values take precedence over `create` for overlapping fields on insert.\n * Requires `.where()`.\n */\n upsert(input: {\n create: ResolvedCreateInput<TContract, ModelName, TVariant>;\n update: Partial<DefaultModelRow<TContract, ModelName>>;\n }): Promise<IncludedRow<TContract, ModelName, TIncludes>>;\n /** Upsert using field operations callback for the update part. Requires `.where()`. */\n upsert(input: {\n create: ResolvedCreateInput<TContract, ModelName, TVariant>;\n update: (u: FieldAccessor<TContract, ModelName>) => FieldOperation[];\n }): Promise<IncludedRow<TContract, ModelName, TIncludes>>;\n}\n\nfunction resolveCollectionName(model: MongoModelDefinition, modelName: string): string {\n return model.storage.collection ?? modelName;\n}\n\nclass MongoCollectionImpl<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n TIncludes extends MongoIncludeSpec<TContract, ModelName> = NoIncludes,\n TVariant extends string = never,\n> implements MongoCollection<TContract, ModelName, TIncludes, TVariant>\n{\n readonly #contract: TContract;\n readonly #modelName: ModelName;\n readonly #executor: MongoQueryExecutor;\n #collectionName: string;\n #state: MongoCollectionState;\n #variantName: string | undefined;\n\n constructor(contract: TContract, modelName: ModelName, executor: MongoQueryExecutor) {\n this.#contract = contract;\n this.#modelName = modelName;\n this.#executor = executor;\n const model = contract.models[modelName] as MongoModelDefinition;\n this.#collectionName = resolveCollectionName(model, modelName);\n this.#state = emptyCollectionState();\n }\n\n variant<V extends VariantNames<TContract, ModelName>>(\n variantName: V,\n ): MongoCollection<TContract, ModelName, TIncludes, V> {\n const model = this.#contract.models[this.#modelName] as MongoModelDefinition | undefined;\n if (!model?.discriminator || !model.variants) {\n // No polymorphism metadata on this model — return unchanged. Cast required\n // because TS cannot verify TVariant (the current variant) is assignable to V.\n return this as unknown as MongoCollection<TContract, ModelName, TIncludes, V>;\n }\n\n const variantEntry = model.variants[variantName as string];\n if (!variantEntry) {\n // Unknown variant name at runtime — return unchanged. Same cast rationale.\n return this as unknown as MongoCollection<TContract, ModelName, TIncludes, V>;\n }\n\n const filter = MongoFieldFilter.eq(\n model.discriminator.field,\n new MongoParamRef(variantEntry.value),\n );\n return this.#cloneWithVariant<V>(\n { filters: [...this.#state.filters, filter] },\n variantName as string,\n );\n }\n\n where(\n filter: MongoWhereFilter<TContract, ModelName> | MongoFilterExpr,\n ): MongoCollection<TContract, ModelName, TIncludes, TVariant> {\n if (isMongoFilterExpr(filter)) {\n return this.#clone({ filters: [...this.#state.filters, filter] });\n }\n const compiled = this.#compileWhereObject(filter as Record<string, unknown>);\n return this.#clone({ filters: [...this.#state.filters, ...compiled] });\n }\n\n select(\n ...fields: ModelFieldKeys<TContract, ModelName>[]\n ): MongoCollection<TContract, ModelName, TIncludes, TVariant> {\n return this.#clone({ selectedFields: [...(this.#state.selectedFields ?? []), ...fields] });\n }\n\n include<K extends ReferenceRelationKeys<TContract, ModelName> & string>(\n relationName: K,\n ): MongoCollection<TContract, ModelName, TIncludes & Record<K, true>, TVariant> {\n const model = this.#contract.models[this.#modelName] as MongoModelDefinition;\n const relation = model.relations?.[relationName];\n if (!relation) {\n throw new Error(`Unknown relation \"${relationName}\" on model \"${this.#modelName as string}\"`);\n }\n\n if (!('on' in relation)) {\n throw new Error(\n `Relation \"${relationName}\" is an embed relation — only reference relations can be included`,\n );\n }\n\n const ref = relation as ContractReferenceRelation;\n const localField = ref.on.localFields[0];\n const foreignField = ref.on.targetFields[0];\n if (\n !localField ||\n !foreignField ||\n ref.on.localFields.length !== 1 ||\n ref.on.targetFields.length !== 1\n ) {\n throw new Error(`Compound references are not yet supported: relation \"${relationName}\"`);\n }\n\n const targetModel = this.#contract.models[ref.to] as MongoModelDefinition | undefined;\n if (!targetModel) {\n throw new Error(`Target model \"${ref.to}\" not found for relation \"${relationName}\"`);\n }\n\n const includeExpr: MongoIncludeExpr = {\n relationName,\n from: resolveCollectionName(targetModel, ref.to),\n localField,\n foreignField,\n cardinality: ref.cardinality,\n };\n\n return this.#clone({\n includes: [...this.#state.includes, includeExpr],\n }) as unknown as MongoCollectionImpl<\n TContract,\n ModelName,\n TIncludes & Record<K, true>,\n TVariant\n >;\n }\n\n orderBy(\n spec: Partial<Record<ModelFieldKeys<TContract, ModelName>, 1 | -1>>,\n ): MongoCollection<TContract, ModelName, TIncludes, TVariant> {\n const merged = { ...this.#state.orderBy, ...(spec as Readonly<Record<string, 1 | -1>>) };\n return this.#clone({ orderBy: merged });\n }\n\n take(n: number): MongoCollection<TContract, ModelName, TIncludes, TVariant> {\n return this.#clone({ limit: n });\n }\n\n skip(n: number): MongoCollection<TContract, ModelName, TIncludes, TVariant> {\n return this.#clone({ offset: n });\n }\n\n all(): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>> {\n return this.#execute();\n }\n\n async first(): Promise<IncludedRow<TContract, ModelName, TIncludes> | null> {\n const limited = this.#clone({ limit: 1 });\n const result = limited.#execute();\n for await (const row of result) {\n return row;\n }\n return null;\n }\n\n async create(\n data: ResolvedCreateInput<TContract, ModelName, TVariant>,\n ): Promise<IncludedRow<TContract, ModelName, TIncludes>> {\n this.#rejectIncludes('create');\n const normalized = this.#injectDiscriminator(\n this.#stripUndefined(data as Record<string, unknown>),\n );\n const document = this.#toDocument(normalized);\n const command = new InsertOneCommand(this.#collectionName, document);\n const results = await this.#drainPlan(command);\n const insertedId = (results[0] as { insertedId: unknown }).insertedId;\n return { _id: insertedId, ...normalized } as unknown as IncludedRow<\n TContract,\n ModelName,\n TIncludes\n >;\n }\n\n createAll(\n data: ReadonlyArray<ResolvedCreateInput<TContract, ModelName, TVariant>>,\n ): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>> {\n this.#rejectIncludes('createAll');\n const self = this;\n async function* gen(): AsyncGenerator<IncludedRow<TContract, ModelName, TIncludes>> {\n const normalizedRows = data.map((d) =>\n self.#injectDiscriminator(self.#stripUndefined(d as Record<string, unknown>)),\n );\n const documents = normalizedRows.map((d) => self.#toDocument(d));\n const command = new InsertManyCommand(self.#collectionName, documents);\n const results = await self.#drainPlan(command);\n const insertedIds = (results[0] as { insertedIds: readonly unknown[] }).insertedIds;\n for (let i = 0; i < normalizedRows.length; i++) {\n yield { _id: insertedIds[i], ...normalizedRows[i] } as unknown as IncludedRow<\n TContract,\n ModelName,\n TIncludes\n >;\n }\n }\n return new AsyncIterableResult(gen());\n }\n\n async createCount(\n data: ReadonlyArray<ResolvedCreateInput<TContract, ModelName, TVariant>>,\n ): Promise<number> {\n this.#rejectIncludes('createCount');\n const documents = data.map((d) =>\n this.#toDocument(this.#injectDiscriminator(d as Record<string, unknown>)),\n );\n const command = new InsertManyCommand(this.#collectionName, documents);\n const results = await this.#drainPlan(command);\n return (results[0] as { insertedCount: number }).insertedCount;\n }\n\n async update(\n dataOrCallback:\n | Partial<DefaultModelRow<TContract, ModelName>>\n | ((u: FieldAccessor<TContract, ModelName>) => FieldOperation[]),\n ): Promise<IncludedRow<TContract, ModelName, TIncludes> | null> {\n this.#requireFilters('update');\n this.#rejectWindowing('update');\n this.#rejectIncludes('update');\n const filter = this.#mergeFilters();\n const updateDoc = this.#resolveUpdateDoc(dataOrCallback);\n const command = new FindOneAndUpdateCommand(this.#collectionName, filter, updateDoc, false);\n const results = await this.#drainPlan(command);\n return (results[0] as IncludedRow<TContract, ModelName, TIncludes>) ?? null;\n }\n\n updateAll(\n dataOrCallback:\n | Partial<DefaultModelRow<TContract, ModelName>>\n | ((u: FieldAccessor<TContract, ModelName>) => FieldOperation[]),\n ): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>> {\n this.#requireFilters('updateAll');\n this.#rejectWindowing('updateAll');\n const self = this;\n async function* gen(): AsyncGenerator<IncludedRow<TContract, ModelName, TIncludes>> {\n const ids = await self.#readMatchingIds();\n if (ids.length === 0) return;\n\n const filter = self.#mergeFilters();\n const updateDoc = self.#resolveUpdateDoc(dataOrCallback);\n const command = new UpdateManyCommand(self.#collectionName, filter, updateDoc);\n await self.#drainPlan(command);\n\n const idFilter = MongoFieldFilter.in(\n '_id',\n ids.map((id) => new MongoParamRef(id)),\n );\n yield* self.#clone({ filters: [idFilter] }).#execute();\n }\n return new AsyncIterableResult(gen());\n }\n\n async updateCount(\n dataOrCallback:\n | Partial<DefaultModelRow<TContract, ModelName>>\n | ((u: FieldAccessor<TContract, ModelName>) => FieldOperation[]),\n ): Promise<number> {\n this.#requireFilters('updateCount');\n this.#rejectWindowing('updateCount');\n this.#rejectIncludes('updateCount');\n const filter = this.#mergeFilters();\n const updateDoc = this.#resolveUpdateDoc(dataOrCallback);\n const command = new UpdateManyCommand(this.#collectionName, filter, updateDoc);\n const results = await this.#drainPlan(command);\n return (results[0] as { modifiedCount: number }).modifiedCount;\n }\n\n async delete(): Promise<IncludedRow<TContract, ModelName, TIncludes> | null> {\n this.#requireFilters('delete');\n this.#rejectWindowing('delete');\n this.#rejectIncludes('delete');\n const filter = this.#mergeFilters();\n const command = new FindOneAndDeleteCommand(this.#collectionName, filter);\n const results = await this.#drainPlan(command);\n return (results[0] as IncludedRow<TContract, ModelName, TIncludes>) ?? null;\n }\n\n deleteAll(): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>> {\n this.#requireFilters('deleteAll');\n this.#rejectWindowing('deleteAll');\n const self = this;\n async function* gen(): AsyncGenerator<IncludedRow<TContract, ModelName, TIncludes>> {\n const docs: IncludedRow<TContract, ModelName, TIncludes>[] = [];\n for await (const row of self.#execute()) {\n docs.push(row);\n }\n const filter = self.#mergeFilters();\n const command = new DeleteManyCommand(self.#collectionName, filter);\n await self.#drainPlan(command);\n yield* docs;\n }\n return new AsyncIterableResult(gen());\n }\n\n async deleteCount(): Promise<number> {\n this.#requireFilters('deleteCount');\n this.#rejectWindowing('deleteCount');\n this.#rejectIncludes('deleteCount');\n const filter = this.#mergeFilters();\n const command = new DeleteManyCommand(this.#collectionName, filter);\n const results = await this.#drainPlan(command);\n return (results[0] as { deletedCount: number }).deletedCount;\n }\n\n async upsert(input: {\n create: ResolvedCreateInput<TContract, ModelName, TVariant>;\n update:\n | Partial<DefaultModelRow<TContract, ModelName>>\n | ((u: FieldAccessor<TContract, ModelName>) => FieldOperation[]);\n }): Promise<IncludedRow<TContract, ModelName, TIncludes>> {\n this.#requireFilters('upsert');\n this.#rejectWindowing('upsert');\n this.#rejectIncludes('upsert');\n const filter = this.#mergeFilters();\n\n const allCreateFields = this.#toDocument(\n this.#injectDiscriminator(input.create as Record<string, unknown>),\n );\n\n let updateDoc: Record<string, Record<string, MongoValue>>;\n if (typeof input.update === 'function') {\n const accessor = createFieldAccessor<TContract, ModelName>();\n const ops = input.update(accessor);\n const idOp = ops.find((op) => op.field === '_id');\n if (idOp) {\n throw new Error('Mutation payloads cannot modify `_id`');\n }\n const dotPathOp = ops.find((op) => op.field.includes('.'));\n if (dotPathOp) {\n throw new Error(\n `upsert() does not support dot-path field operations (found \"${dotPathOp.field}\"). ` +\n 'Dot-path updates conflict with $setOnInsert on the insert path, producing incomplete documents. ' +\n 'Use top-level field operations instead.',\n );\n }\n updateDoc = compileFieldOperations(ops, (field, value, operator) =>\n this.#wrapFieldOpValue(field, value, operator),\n );\n } else {\n const setFields = this.#toSetFields(input.update as Record<string, unknown>);\n updateDoc = {};\n if (Object.keys(setFields).length > 0) {\n updateDoc['$set'] = setFields;\n }\n }\n\n const updatedFields = new Set<string>();\n for (const operatorGroup of Object.values(updateDoc)) {\n for (const fieldPath of Object.keys(operatorGroup)) {\n updatedFields.add(fieldPath.split('.')[0] ?? fieldPath);\n }\n }\n const insertOnlyFields: Record<string, MongoValue> = {};\n for (const [key, value] of Object.entries(allCreateFields)) {\n if (!updatedFields.has(key)) {\n insertOnlyFields[key] = value;\n }\n }\n if (Object.keys(insertOnlyFields).length > 0) {\n updateDoc['$setOnInsert'] = insertOnlyFields;\n }\n\n const command = new FindOneAndUpdateCommand(this.#collectionName, filter, updateDoc, true);\n const results = await this.#drainPlan(command);\n return results[0] as IncludedRow<TContract, ModelName, TIncludes>;\n }\n\n async #readMatchingIds(): Promise<unknown[]> {\n const idQuery = this.#clone({\n includes: [],\n selectedFields: ['_id'],\n orderBy: undefined,\n limit: undefined,\n offset: undefined,\n });\n const ids: unknown[] = [];\n // Strip resultShape so the runtime yields wire-level _id values (e.g. ObjectId)\n // rather than decoded hex strings. The follow-up $in filter in updateAll wraps\n // these in bare MongoParamRefs with no codecId; round-tripping a decoded string\n // back through the adapter would require attaching the field's codecId, which\n // we don't do here. Do not \"tidy\" the destructure away — the prefetch+modify+\n // re-read flow depends on it.\n const { resultShape: _rs, ...planWithoutShape } = idQuery.#compile();\n for await (const row of this.#executor.execute(planWithoutShape)) {\n ids.push((row as Record<string, unknown>)['_id']);\n }\n return ids;\n }\n\n #execute(): AsyncIterableResult<IncludedRow<TContract, ModelName, TIncludes>> {\n const plan = this.#compile();\n return this.#executor.execute(plan);\n }\n\n #compile(): MongoQueryPlan<IncludedRow<TContract, ModelName, TIncludes>> {\n const model = this.#contract.models[this.#modelName] as MongoModelDefinition | undefined;\n if (!model) {\n throw new Error(`Unknown model: \"${this.#modelName}\".`);\n }\n return compileMongoQuery<IncludedRow<TContract, ModelName, TIncludes>>(\n this.#collectionName,\n this.#state,\n this.#contract.storage.storageHash,\n model,\n );\n }\n\n #wrapCommand(command: AnyMongoCommand): MongoQueryPlan {\n return { collection: this.#collectionName, command, meta: this.#planMeta() };\n }\n\n async #drainPlan(command: AnyMongoCommand): Promise<unknown[]> {\n const plan = this.#wrapCommand(command);\n const result = this.#executor.execute(plan);\n const rows: unknown[] = [];\n for await (const row of result) {\n rows.push(row);\n }\n return rows;\n }\n\n #modelFields(): Record<string, ContractField> {\n const model = this.#contract.models[this.#modelName] as MongoModelDefinition | undefined;\n return model?.fields ?? {};\n }\n\n #compileWhereObject(data: Record<string, unknown>): MongoFilterExpr[] {\n const fields = this.#modelFields();\n const filters: MongoFilterExpr[] = [];\n for (const [key, value] of Object.entries(data)) {\n if (value === undefined) continue;\n const wrapped = this.#wrapFieldValue(value, fields[key]);\n filters.push(MongoFieldFilter.eq(key, wrapped));\n }\n return filters;\n }\n\n #wrapFieldValue(value: unknown, field: ContractField | undefined): MongoValue {\n if (field === undefined) return new MongoParamRef(value);\n\n if (field.type.kind === 'scalar') {\n return new MongoParamRef(value, { codecId: field.type.codecId });\n }\n\n if (field.type.kind === 'valueObject') {\n const voName = field.type.name;\n const voDef = (this.#contract as { valueObjects?: Record<string, ContractValueObject> })\n .valueObjects?.[voName];\n if (!voDef || value === null) return new MongoParamRef(value);\n\n if (field.many && Array.isArray(value)) {\n return value.map((item) =>\n this.#wrapValueObject(item as Record<string, unknown>, voDef),\n ) as unknown as MongoValue;\n }\n return this.#wrapValueObject(value as Record<string, unknown>, voDef);\n }\n\n return new MongoParamRef(value);\n }\n\n #wrapValueObject(\n data: Record<string, unknown>,\n voDef: ContractValueObject,\n ): Record<string, MongoValue> {\n const doc: Record<string, MongoValue> = {};\n for (const [key, value] of Object.entries(data)) {\n if (value === undefined) continue;\n const fieldDef = voDef.fields[key];\n doc[key] = this.#wrapFieldValue(value, fieldDef);\n }\n return doc;\n }\n\n #toDocument(data: Record<string, unknown>): Record<string, MongoValue> {\n const fields = this.#modelFields();\n const doc: Record<string, MongoValue> = {};\n for (const [key, value] of Object.entries(data)) {\n if (value !== undefined) {\n doc[key] = this.#wrapFieldValue(value, fields[key]);\n }\n }\n return doc;\n }\n\n #toSetFields(data: Record<string, unknown>): Record<string, MongoValue> {\n const fields = this.#modelFields();\n const result: Record<string, MongoValue> = {};\n for (const [key, value] of Object.entries(data)) {\n if (key === '_id' && value !== undefined) {\n throw new Error('Mutation payloads cannot modify `_id`');\n }\n if (value !== undefined) {\n result[key] = this.#wrapFieldValue(value, fields[key]);\n }\n }\n return result;\n }\n\n #stripUndefined(data: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n if (value !== undefined) {\n result[key] = value;\n }\n }\n return result;\n }\n\n #toUpdateDocument(data: Record<string, unknown>): Record<string, Record<string, MongoValue>> {\n return { $set: this.#toSetFields(data) };\n }\n\n #resolveUpdateDoc(\n dataOrCallback:\n | Partial<DefaultModelRow<TContract, ModelName>>\n | ((u: FieldAccessor<TContract, ModelName>) => FieldOperation[]),\n ): Record<string, Record<string, MongoValue>> {\n if (typeof dataOrCallback === 'function') {\n const accessor = createFieldAccessor<TContract, ModelName>();\n const ops = dataOrCallback(accessor);\n const idOp = ops.find((op) => op.field === '_id');\n if (idOp) {\n throw new Error('Mutation payloads cannot modify `_id`');\n }\n if (ops.length === 0) {\n return { $set: {} };\n }\n return compileFieldOperations(ops, (field, value, operator) =>\n this.#wrapFieldOpValue(field, value, operator),\n );\n }\n return this.#toUpdateDocument(dataOrCallback as Record<string, unknown>);\n }\n\n #wrapFieldOpValue(field: string, value: MongoValue, operator?: string): MongoValue {\n if (operator === '$unset') return value;\n\n const topLevelField = field.split('.')[0] ?? field;\n const fields = this.#modelFields();\n const contractField = fields[topLevelField];\n if (!contractField) return value;\n\n if (field.includes('.')) {\n return this.#wrapDotPathValue(field, value);\n }\n\n if (value instanceof MongoParamRef && contractField.type.kind === 'scalar') {\n return new MongoParamRef(value.value, { codecId: contractField.type.codecId });\n }\n\n if (contractField.type.kind === 'valueObject' && value instanceof MongoParamRef) {\n const raw = value.value;\n if (typeof raw === 'object' && raw !== null && !Array.isArray(raw)) {\n const voName = contractField.type.name;\n const voDef = (this.#contract as { valueObjects?: Record<string, ContractValueObject> })\n .valueObjects?.[voName];\n if (voDef) {\n return this.#wrapValueObject(raw as Record<string, unknown>, voDef);\n }\n }\n }\n\n return value;\n }\n\n #wrapDotPathValue(dotPath: string, value: MongoValue): MongoValue {\n const parts = dotPath.split('.');\n const fields = this.#modelFields();\n let currentField: ContractField | undefined = parts[0] ? fields[parts[0]] : undefined;\n\n for (let i = 1; i < parts.length; i++) {\n if (!currentField || currentField.type.kind !== 'valueObject') return value;\n const voName = currentField.type.name;\n const voDef = (this.#contract as { valueObjects?: Record<string, ContractValueObject> })\n .valueObjects?.[voName];\n if (!voDef) return value;\n const partKey = parts[i];\n currentField = partKey ? voDef.fields[partKey] : undefined;\n }\n\n if (currentField?.type.kind === 'scalar' && value instanceof MongoParamRef) {\n return new MongoParamRef(value.value, { codecId: currentField.type.codecId });\n }\n\n if (currentField?.type.kind === 'valueObject' && value instanceof MongoParamRef) {\n const raw = value.value;\n if (typeof raw === 'object' && raw !== null && !Array.isArray(raw)) {\n const voName = currentField.type.name;\n const voDef = (this.#contract as { valueObjects?: Record<string, ContractValueObject> })\n .valueObjects?.[voName];\n if (voDef) {\n return this.#wrapValueObject(raw as Record<string, unknown>, voDef);\n }\n }\n }\n\n return value;\n }\n\n #mergeFilters(): MongoFilterExpr {\n const [single] = this.#state.filters;\n if (this.#state.filters.length === 1 && single) {\n return single;\n }\n return MongoAndExpr.of([...this.#state.filters]);\n }\n\n #requireFilters(methodName: string): void {\n if (this.#state.filters.length === 0) {\n throw new Error(\n `${methodName}() requires a .where() filter. Call .where() before .${methodName}()`,\n );\n }\n }\n\n #rejectWindowing(methodName: string): void {\n if (\n this.#state.orderBy !== undefined ||\n this.#state.limit !== undefined ||\n this.#state.offset !== undefined\n ) {\n throw new Error(\n `${methodName}() does not support orderBy/skip/take. Remove windowing before calling .${methodName}()`,\n );\n }\n }\n\n #rejectIncludes(methodName: string): void {\n if (this.#state.includes.length > 0) {\n throw new Error(\n `${methodName}() does not support .include(). Remove includes before calling .${methodName}()`,\n );\n }\n }\n\n #planMeta(): PlanMeta {\n return {\n target: 'mongo',\n storageHash: this.#contract.storage.storageHash,\n lane: 'mongo-orm',\n };\n }\n\n #injectDiscriminator(data: Record<string, unknown>): Record<string, unknown> {\n if (!this.#variantName) return data;\n const model = this.#contract.models[this.#modelName] as MongoModelDefinition | undefined;\n if (!model?.discriminator || !model.variants) return data;\n const variantEntry = model.variants[this.#variantName];\n if (!variantEntry) return data;\n return { ...data, [model.discriminator.field]: variantEntry.value };\n }\n\n #clone(\n overrides: Partial<MongoCollectionState>,\n ): MongoCollectionImpl<TContract, ModelName, TIncludes, TVariant> {\n const instance = new MongoCollectionImpl<TContract, ModelName, TIncludes, TVariant>(\n this.#contract,\n this.#modelName,\n this.#executor,\n );\n instance.#state = { ...this.#state, ...overrides };\n instance.#collectionName = this.#collectionName;\n instance.#variantName = this.#variantName;\n return instance;\n }\n\n #cloneWithVariant<VNew extends string>(\n overrides: Partial<MongoCollectionState>,\n variantName: string,\n ): MongoCollectionImpl<TContract, ModelName, TIncludes, VNew> {\n const instance = new MongoCollectionImpl<TContract, ModelName, TIncludes, VNew>(\n this.#contract,\n this.#modelName,\n this.#executor,\n );\n instance.#state = { ...this.#state, ...overrides };\n instance.#collectionName = this.#collectionName;\n instance.#variantName = variantName;\n return instance;\n }\n}\n\nexport function createMongoCollection<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n>(\n contract: TContract,\n modelName: ModelName,\n executor: MongoQueryExecutor,\n): MongoCollection<TContract, ModelName> {\n return new MongoCollectionImpl(contract, modelName, executor);\n}\n","import type {\n MongoContract,\n MongoContractWithTypeMaps,\n MongoTypeMaps,\n} from '@prisma-next/mongo-contract';\nimport type { MongoCollection } from './collection';\nimport { createMongoCollection } from './collection';\nimport type { MongoQueryExecutor } from './executor';\n\nexport interface MongoOrmOptions<TContract extends MongoContract> {\n readonly contract: TContract;\n readonly executor: MongoQueryExecutor;\n}\n\nexport type MongoOrmClient<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n> = {\n readonly [K in keyof TContract['roots']]: TContract['roots'][K] extends string &\n keyof TContract['models']\n ? MongoCollection<TContract, TContract['roots'][K]>\n : never;\n};\n\nexport function mongoOrm<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>>(\n options: MongoOrmOptions<TContract>,\n): MongoOrmClient<TContract> {\n const { contract, executor } = options;\n const client: Record<string, unknown> = {};\n\n for (const [rootName, modelName] of Object.entries(contract.roots)) {\n client[rootName] = createMongoCollection(\n contract,\n modelName as string & keyof TContract['models'],\n executor,\n );\n }\n\n return client as MongoOrmClient<TContract>;\n}\n","import type { PlanMeta } from '@prisma-next/contract/types';\nimport type { MongoQueryPlan } from '@prisma-next/mongo-query-ast/execution';\nimport {\n RawAggregateCommand,\n RawDeleteManyCommand,\n RawDeleteOneCommand,\n RawFindOneAndDeleteCommand,\n RawFindOneAndUpdateCommand,\n RawInsertManyCommand,\n RawInsertOneCommand,\n RawUpdateManyCommand,\n RawUpdateOneCommand,\n} from '@prisma-next/mongo-query-ast/execution';\nimport type { Document } from '@prisma-next/mongo-value';\n\ninterface Buildable<Row = unknown> {\n build(): MongoQueryPlan<Row>;\n}\n\nexport interface RawMongoCollection {\n aggregate<Row = Record<string, unknown>>(pipeline: ReadonlyArray<Document>): Buildable<Row>;\n\n insertOne(document: Document): Buildable;\n insertMany(documents: ReadonlyArray<Document>): Buildable;\n\n updateOne(filter: Document, update: Document | ReadonlyArray<Document>): Buildable;\n\n updateMany(filter: Document, update: Document | ReadonlyArray<Document>): Buildable;\n\n deleteOne(filter: Document): Buildable;\n deleteMany(filter: Document): Buildable;\n\n findOneAndUpdate(\n filter: Document,\n update: Document | ReadonlyArray<Document>,\n options?: { upsert?: boolean },\n ): Buildable;\n\n findOneAndDelete(filter: Document): Buildable;\n}\n\nexport function createRawMongoCollection(\n collectionName: string,\n meta: PlanMeta,\n): RawMongoCollection {\n function buildable<Row>(command: MongoQueryPlan['command']): Buildable<Row> {\n return {\n build: () => ({ collection: collectionName, command, meta }),\n };\n }\n\n return {\n aggregate<Row = Record<string, unknown>>(pipeline: ReadonlyArray<Document>) {\n return buildable<Row>(new RawAggregateCommand(collectionName, pipeline));\n },\n\n insertOne(document: Document) {\n return buildable(new RawInsertOneCommand(collectionName, document));\n },\n\n insertMany(documents: ReadonlyArray<Document>) {\n return buildable(new RawInsertManyCommand(collectionName, documents));\n },\n\n updateOne(filter: Document, update: Document | ReadonlyArray<Document>) {\n return buildable(new RawUpdateOneCommand(collectionName, filter, update));\n },\n\n updateMany(filter: Document, update: Document | ReadonlyArray<Document>) {\n return buildable(new RawUpdateManyCommand(collectionName, filter, update));\n },\n\n deleteOne(filter: Document) {\n return buildable(new RawDeleteOneCommand(collectionName, filter));\n },\n\n deleteMany(filter: Document) {\n return buildable(new RawDeleteManyCommand(collectionName, filter));\n },\n\n findOneAndUpdate(\n filter: Document,\n update: Document | ReadonlyArray<Document>,\n options?: { upsert?: boolean },\n ) {\n return buildable(\n new RawFindOneAndUpdateCommand(collectionName, filter, update, options?.upsert ?? false),\n );\n },\n\n findOneAndDelete(filter: Document) {\n return buildable(new RawFindOneAndDeleteCommand(collectionName, filter));\n },\n };\n}\n","import type { PlanMeta } from '@prisma-next/contract/types';\nimport type { MongoContract, MongoModelDefinition } from '@prisma-next/mongo-contract';\nimport { createRawMongoCollection, type RawMongoCollection } from './raw-collection';\n\nexport interface MongoRawClient<TContract extends MongoContract> {\n collection<K extends keyof TContract['roots'] & string>(rootName: K): RawMongoCollection;\n}\n\nexport function mongoRaw<TContract extends MongoContract>(options: {\n contract: TContract;\n}): MongoRawClient<TContract> {\n const { contract } = options;\n\n return {\n collection<K extends keyof TContract['roots'] & string>(rootName: K): RawMongoCollection {\n const modelName = contract.roots[rootName] as string;\n if (!Object.hasOwn(contract.models, modelName)) {\n throw new Error(`Unknown model \"${modelName}\" for root \"${rootName}\"`);\n }\n const model = contract.models[modelName] as MongoModelDefinition;\n const collectionName = model.storage.collection ?? modelName;\n\n const meta: PlanMeta = {\n target: 'mongo',\n storageHash: contract.storage.storageHash,\n lane: 'mongo-raw',\n };\n\n return createRawMongoCollection(collectionName, meta);\n },\n };\n}\n"],"mappings":";;;;;;AAmBA,SAAgB,uBAA6C;CAC3D,OAAO;EACL,SAAS,EAAE;EACX,UAAU,EAAE;EACZ,SAAS,KAAA;EACT,gBAAgB,KAAA;EAChB,OAAO,KAAA;EACP,QAAQ,KAAA;EACT;;;;ACTH,SAAS,gBAAgB,UAA6D;CACpF,MAAM,SAA+B,EAAE;CAEvC,KAAK,MAAM,OAAO,UAAU;EAC1B,OAAO,KACL,IAAI,iBAAiB;GACnB,MAAM,IAAI;GACV,YAAY,IAAI;GAChB,cAAc,IAAI;GAClB,IAAI,IAAI;GACT,CAAC,CACH;EAED,IAAI,IAAI,gBAAgB,SAAS,IAAI,gBAAgB,OACnD,OAAO,KAAK,IAAI,iBAAiB,IAAI,IAAI,gBAAgB,KAAK,CAAC;;CAInE,OAAO;;AAGT,SAAgB,kBACd,YACA,OACA,aACA,OACqB;CACrB,MAAM,SAA+B,EAAE;CAEvC,MAAM,eAAe,MAAM,QAAQ,WAAW,IAAI,MAAM,QAAQ,KAAK,KAAA;CACrE,IAAI,cACF,OAAO,KAAK,IAAI,gBAAgB,aAAa,CAAC;MACzC,IAAI,MAAM,QAAQ,SAAS,GAChC,OAAO,KAAK,IAAI,gBAAgB,aAAa,GAAG,CAAC,GAAG,MAAM,QAAQ,CAAC,CAAC,CAAC;CAGvE,IAAI,MAAM,SAAS,SAAS,GAC1B,OAAO,KAAK,GAAG,gBAAgB,MAAM,SAAS,CAAC;CAGjD,IAAI,MAAM,SACR,OAAO,KAAK,IAAI,eAAe,MAAM,QAAQ,CAAC;CAGhD,IAAI,MAAM,WAAW,KAAA,GACnB,OAAO,KAAK,IAAI,eAAe,MAAM,OAAO,CAAC;CAG/C,IAAI,MAAM,UAAU,KAAA,GAClB,OAAO,KAAK,IAAI,gBAAgB,MAAM,MAAM,CAAC;CAG/C,IAAI,MAAM,kBAAkB,MAAM,eAAe,SAAS,GAAG;EAC3D,MAAM,aAAoC,EAAE;EAC5C,KAAK,MAAM,SAAS,MAAM,gBACxB,WAAW,SAAS;EAEtB,IAAI,CAAC,OAAO,OAAO,YAAY,MAAM,EACnC,WAAW,SAAS;EAEtB,OAAO,KAAK,IAAI,kBAAkB,WAAW,CAAC;;CAGhD,MAAM,OAAiB;EACrB,QAAQ;EACR;EACA,MAAM;EACP;CACD,MAAM,UAAU,IAAI,iBAAiB,YAAY,OAAO;CAExD,MAAM,YACJ,MAAM,mBAAmB,KAAA,KAAa,MAAM,eAAe,SAAS,IAChE,MAAM,iBACN,KAAA;CACN,MAAM,uBACJ,MAAM,SAAS,SAAS,IAAI,MAAM,SAAS,KAAK,QAAQ,IAAI,aAAa,GAAG,KAAA;CAM9E,OAAO;EAAE;EAAY;EAAS;EAAM,aALhB,gCAAgC,OAAO;GACzD,GAAG,UAAU,aAAa,UAAU;GACpC,GAAG,UAAU,wBAAwB,qBAAqB;GAC3D,CAE8C;EAAE;;;;AC4GnD,SAAS,sBAAsB,WAA2C;CACxE,OAAO;EACL,IAAI,OAAgC;GAClC,OAAO;IAAE,UAAU;IAAQ,OAAO;IAAW,OAAO,IAAI,cAAc,MAAM;IAAE;;EAEhF,QAAwB;GACtB,OAAO;IAAE,UAAU;IAAU,OAAO;IAAW,OAAO,IAAI,cAAc,GAAG;IAAE;;EAE/E,IAAI,OAA+B;GACjC,OAAO;IAAE,UAAU;IAAQ,OAAO;IAAW,OAAO,IAAI,cAAc,MAAM;IAAE;;EAEhF,IAAI,OAA+B;GACjC,OAAO;IAAE,UAAU;IAAQ,OAAO;IAAW,OAAO,IAAI,cAAc,MAAM;IAAE;;EAEhF,KAAK,OAAgC;GACnC,OAAO;IAAE,UAAU;IAAS,OAAO;IAAW,OAAO,IAAI,cAAc,MAAM;IAAE;;EAEjF,KAAK,OAAgC;GACnC,OAAO;IAAE,UAAU;IAAS,OAAO;IAAW,OAAO,IAAI,cAAc,MAAM;IAAE;;EAEjF,SAAS,OAAgC;GACvC,OAAO;IAAE,UAAU;IAAa,OAAO;IAAW,OAAO,IAAI,cAAc,MAAM;IAAE;;EAErF,IAAI,KAA6B;GAC/B,OAAO;IAAE,UAAU;IAAQ,OAAO;IAAW,OAAO,IAAI,cAAc,IAAI;IAAE;;EAE/E;;AAGH,SAAgB,sBAGyB;CACvC,OAAO,IAAI,aAAa,KAAuD;EAC7E,IAAI,SAAS,MAAsC;GACjD,OAAO,sBAAsB,KAAK;;EAEpC,MAAM,SAAS,UAAU,MAAwC;GAC/D,OAAO,sBAAsB,KAAK,GAAG;;EAExC,CAAC;;AAGJ,SAAgB,uBACd,KACA,WAC4C;CAC5C,MAAM,UAAsD,EAAE;CAC9D,KAAK,MAAM,MAAM,KAAK;EACpB,IAAI,QAAQ,QAAQ,GAAG;EACvB,IAAI,CAAC,OAAO;GACV,QAAQ,EAAE;GACV,QAAQ,GAAG,YAAY;;EAEzB,MAAM,GAAG,SAAS,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS;;CAE9D,OAAO;;;;AClHT,SAAS,sBAAsB,OAA6B,WAA2B;CACrF,OAAO,MAAM,QAAQ,cAAc;;AAGrC,IAAM,sBAAN,MAAM,oBAMN;CACE;CACA;CACA;CACA;CACA;CACA;CAEA,YAAY,UAAqB,WAAsB,UAA8B;EACnF,KAAKA,YAAY;EACjB,KAAKC,aAAa;EAClB,KAAKC,YAAY;EACjB,MAAM,QAAQ,SAAS,OAAO;EAC9B,KAAKC,kBAAkB,sBAAsB,OAAO,UAAU;EAC9D,KAAKC,SAAS,sBAAsB;;CAGtC,QACE,aACqD;EACrD,MAAM,QAAQ,KAAKJ,UAAU,OAAO,KAAKC;EACzC,IAAI,CAAC,OAAO,iBAAiB,CAAC,MAAM,UAGlC,OAAO;EAGT,MAAM,eAAe,MAAM,SAAS;EACpC,IAAI,CAAC,cAEH,OAAO;EAGT,MAAM,SAAS,iBAAiB,GAC9B,MAAM,cAAc,OACpB,IAAI,cAAc,aAAa,MAAM,CACtC;EACD,OAAO,KAAKI,kBACV,EAAE,SAAS,CAAC,GAAG,KAAKD,OAAO,SAAS,OAAO,EAAE,EAC7C,YACD;;CAGH,MACE,QAC4D;EAC5D,IAAI,kBAAkB,OAAO,EAC3B,OAAO,KAAKE,OAAO,EAAE,SAAS,CAAC,GAAG,KAAKF,OAAO,SAAS,OAAO,EAAE,CAAC;EAEnE,MAAM,WAAW,KAAKG,oBAAoB,OAAkC;EAC5E,OAAO,KAAKD,OAAO,EAAE,SAAS,CAAC,GAAG,KAAKF,OAAO,SAAS,GAAG,SAAS,EAAE,CAAC;;CAGxE,OACE,GAAG,QACyD;EAC5D,OAAO,KAAKE,OAAO,EAAE,gBAAgB,CAAC,GAAI,KAAKF,OAAO,kBAAkB,EAAE,EAAG,GAAG,OAAO,EAAE,CAAC;;CAG5F,QACE,cAC8E;EAE9E,MAAM,WADQ,KAAKJ,UAAU,OAAO,KAAKC,YAClB,YAAY;EACnC,IAAI,CAAC,UACH,MAAM,IAAI,MAAM,qBAAqB,aAAa,cAAc,KAAKA,WAAqB,GAAG;EAG/F,IAAI,EAAE,QAAQ,WACZ,MAAM,IAAI,MACR,aAAa,aAAa,mEAC3B;EAGH,MAAM,MAAM;EACZ,MAAM,aAAa,IAAI,GAAG,YAAY;EACtC,MAAM,eAAe,IAAI,GAAG,aAAa;EACzC,IACE,CAAC,cACD,CAAC,gBACD,IAAI,GAAG,YAAY,WAAW,KAC9B,IAAI,GAAG,aAAa,WAAW,GAE/B,MAAM,IAAI,MAAM,wDAAwD,aAAa,GAAG;EAG1F,MAAM,cAAc,KAAKD,UAAU,OAAO,IAAI;EAC9C,IAAI,CAAC,aACH,MAAM,IAAI,MAAM,iBAAiB,IAAI,GAAG,4BAA4B,aAAa,GAAG;EAGtF,MAAM,cAAgC;GACpC;GACA,MAAM,sBAAsB,aAAa,IAAI,GAAG;GAChD;GACA;GACA,aAAa,IAAI;GAClB;EAED,OAAO,KAAKM,OAAO,EACjB,UAAU,CAAC,GAAG,KAAKF,OAAO,UAAU,YAAY,EACjD,CAAC;;CAQJ,QACE,MAC4D;EAC5D,MAAM,SAAS;GAAE,GAAG,KAAKA,OAAO;GAAS,GAAI;GAA2C;EACxF,OAAO,KAAKE,OAAO,EAAE,SAAS,QAAQ,CAAC;;CAGzC,KAAK,GAAuE;EAC1E,OAAO,KAAKA,OAAO,EAAE,OAAO,GAAG,CAAC;;CAGlC,KAAK,GAAuE;EAC1E,OAAO,KAAKA,OAAO,EAAE,QAAQ,GAAG,CAAC;;CAGnC,MAAyE;EACvE,OAAO,KAAKE,UAAU;;CAGxB,MAAM,QAAsE;EAE1E,MAAM,SADU,KAAKF,OAAO,EAAE,OAAO,GAAG,CAClB,CAACE,UAAU;EACjC,WAAW,MAAM,OAAO,QACtB,OAAO;EAET,OAAO;;CAGT,MAAM,OACJ,MACuD;EACvD,KAAKC,gBAAgB,SAAS;EAC9B,MAAM,aAAa,KAAKC,qBACtB,KAAKC,gBAAgB,KAAgC,CACtD;EACD,MAAM,WAAW,KAAKC,YAAY,WAAW;EAC7C,MAAM,UAAU,IAAI,iBAAiB,KAAKT,iBAAiB,SAAS;EAGpE,OAAO;GAAE,MADW,MADE,KAAKU,WAAW,QAAQ,EAClB,GAA+B;GACjC,GAAG;GAAY;;CAO3C,UACE,MACmE;EACnE,KAAKJ,gBAAgB,YAAY;EACjC,MAAM,OAAO;EACb,gBAAgB,MAAoE;GAClF,MAAM,iBAAiB,KAAK,KAAK,MAC/B,KAAKC,qBAAqB,KAAKC,gBAAgB,EAA6B,CAAC,CAC9E;GACD,MAAM,YAAY,eAAe,KAAK,MAAM,KAAKC,YAAY,EAAE,CAAC;GAChE,MAAM,UAAU,IAAI,kBAAkB,KAAKT,iBAAiB,UAAU;GAEtE,MAAM,eAAe,MADC,KAAKU,WAAW,QAAQ,EACjB,GAA2C;GACxE,KAAK,IAAI,IAAI,GAAG,IAAI,eAAe,QAAQ,KACzC,MAAM;IAAE,KAAK,YAAY;IAAI,GAAG,eAAe;IAAI;;EAOvD,OAAO,IAAI,oBAAoB,KAAK,CAAC;;CAGvC,MAAM,YACJ,MACiB;EACjB,KAAKJ,gBAAgB,cAAc;EACnC,MAAM,YAAY,KAAK,KAAK,MAC1B,KAAKG,YAAY,KAAKF,qBAAqB,EAA6B,CAAC,CAC1E;EACD,MAAM,UAAU,IAAI,kBAAkB,KAAKP,iBAAiB,UAAU;EAEtE,QAAQ,MADc,KAAKU,WAAW,QAAQ,EAC9B,GAAiC;;CAGnD,MAAM,OACJ,gBAG8D;EAC9D,KAAKC,gBAAgB,SAAS;EAC9B,KAAKC,iBAAiB,SAAS;EAC/B,KAAKN,gBAAgB,SAAS;EAC9B,MAAM,SAAS,KAAKO,eAAe;EACnC,MAAM,YAAY,KAAKC,kBAAkB,eAAe;EACxD,MAAM,UAAU,IAAI,wBAAwB,KAAKd,iBAAiB,QAAQ,WAAW,MAAM;EAE3F,QAAQ,MADc,KAAKU,WAAW,QAAQ,EAC9B,MAAuD;;CAGzE,UACE,gBAGmE;EACnE,KAAKC,gBAAgB,YAAY;EACjC,KAAKC,iBAAiB,YAAY;EAClC,MAAM,OAAO;EACb,gBAAgB,MAAoE;GAClF,MAAM,MAAM,MAAM,KAAKG,kBAAkB;GACzC,IAAI,IAAI,WAAW,GAAG;GAEtB,MAAM,SAAS,KAAKF,eAAe;GACnC,MAAM,YAAY,KAAKC,kBAAkB,eAAe;GACxD,MAAM,UAAU,IAAI,kBAAkB,KAAKd,iBAAiB,QAAQ,UAAU;GAC9E,MAAM,KAAKU,WAAW,QAAQ;GAE9B,MAAM,WAAW,iBAAiB,GAChC,OACA,IAAI,KAAK,OAAO,IAAI,cAAc,GAAG,CAAC,CACvC;GACD,OAAO,KAAKP,OAAO,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAACE,UAAU;;EAExD,OAAO,IAAI,oBAAoB,KAAK,CAAC;;CAGvC,MAAM,YACJ,gBAGiB;EACjB,KAAKM,gBAAgB,cAAc;EACnC,KAAKC,iBAAiB,cAAc;EACpC,KAAKN,gBAAgB,cAAc;EACnC,MAAM,SAAS,KAAKO,eAAe;EACnC,MAAM,YAAY,KAAKC,kBAAkB,eAAe;EACxD,MAAM,UAAU,IAAI,kBAAkB,KAAKd,iBAAiB,QAAQ,UAAU;EAE9E,QAAQ,MADc,KAAKU,WAAW,QAAQ,EAC9B,GAAiC;;CAGnD,MAAM,SAAuE;EAC3E,KAAKC,gBAAgB,SAAS;EAC9B,KAAKC,iBAAiB,SAAS;EAC/B,KAAKN,gBAAgB,SAAS;EAC9B,MAAM,SAAS,KAAKO,eAAe;EACnC,MAAM,UAAU,IAAI,wBAAwB,KAAKb,iBAAiB,OAAO;EAEzE,QAAQ,MADc,KAAKU,WAAW,QAAQ,EAC9B,MAAuD;;CAGzE,YAA+E;EAC7E,KAAKC,gBAAgB,YAAY;EACjC,KAAKC,iBAAiB,YAAY;EAClC,MAAM,OAAO;EACb,gBAAgB,MAAoE;GAClF,MAAM,OAAuD,EAAE;GAC/D,WAAW,MAAM,OAAO,KAAKP,UAAU,EACrC,KAAK,KAAK,IAAI;GAEhB,MAAM,SAAS,KAAKQ,eAAe;GACnC,MAAM,UAAU,IAAI,kBAAkB,KAAKb,iBAAiB,OAAO;GACnE,MAAM,KAAKU,WAAW,QAAQ;GAC9B,OAAO;;EAET,OAAO,IAAI,oBAAoB,KAAK,CAAC;;CAGvC,MAAM,cAA+B;EACnC,KAAKC,gBAAgB,cAAc;EACnC,KAAKC,iBAAiB,cAAc;EACpC,KAAKN,gBAAgB,cAAc;EACnC,MAAM,SAAS,KAAKO,eAAe;EACnC,MAAM,UAAU,IAAI,kBAAkB,KAAKb,iBAAiB,OAAO;EAEnE,QAAQ,MADc,KAAKU,WAAW,QAAQ,EAC9B,GAAgC;;CAGlD,MAAM,OAAO,OAK6C;EACxD,KAAKC,gBAAgB,SAAS;EAC9B,KAAKC,iBAAiB,SAAS;EAC/B,KAAKN,gBAAgB,SAAS;EAC9B,MAAM,SAAS,KAAKO,eAAe;EAEnC,MAAM,kBAAkB,KAAKJ,YAC3B,KAAKF,qBAAqB,MAAM,OAAkC,CACnE;EAED,IAAI;EACJ,IAAI,OAAO,MAAM,WAAW,YAAY;GACtC,MAAM,WAAW,qBAA2C;GAC5D,MAAM,MAAM,MAAM,OAAO,SAAS;GAElC,IADa,IAAI,MAAM,OAAO,GAAG,UAAU,MACnC,EACN,MAAM,IAAI,MAAM,wCAAwC;GAE1D,MAAM,YAAY,IAAI,MAAM,OAAO,GAAG,MAAM,SAAS,IAAI,CAAC;GAC1D,IAAI,WACF,MAAM,IAAI,MACR,+DAA+D,UAAU,MAAM,8IAGhF;GAEH,YAAY,uBAAuB,MAAM,OAAO,OAAO,aACrD,KAAKS,kBAAkB,OAAO,OAAO,SAAS,CAC/C;SACI;GACL,MAAM,YAAY,KAAKC,aAAa,MAAM,OAAkC;GAC5E,YAAY,EAAE;GACd,IAAI,OAAO,KAAK,UAAU,CAAC,SAAS,GAClC,UAAU,UAAU;;EAIxB,MAAM,gCAAgB,IAAI,KAAa;EACvC,KAAK,MAAM,iBAAiB,OAAO,OAAO,UAAU,EAClD,KAAK,MAAM,aAAa,OAAO,KAAK,cAAc,EAChD,cAAc,IAAI,UAAU,MAAM,IAAI,CAAC,MAAM,UAAU;EAG3D,MAAM,mBAA+C,EAAE;EACvD,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,gBAAgB,EACxD,IAAI,CAAC,cAAc,IAAI,IAAI,EACzB,iBAAiB,OAAO;EAG5B,IAAI,OAAO,KAAK,iBAAiB,CAAC,SAAS,GACzC,UAAU,kBAAkB;EAG9B,MAAM,UAAU,IAAI,wBAAwB,KAAKjB,iBAAiB,QAAQ,WAAW,KAAK;EAE1F,QAAO,MADe,KAAKU,WAAW,QAAQ,EAC/B;;CAGjB,MAAMK,mBAAuC;EAC3C,MAAM,UAAU,KAAKZ,OAAO;GAC1B,UAAU,EAAE;GACZ,gBAAgB,CAAC,MAAM;GACvB,SAAS,KAAA;GACT,OAAO,KAAA;GACP,QAAQ,KAAA;GACT,CAAC;EACF,MAAM,MAAiB,EAAE;EAOzB,MAAM,EAAE,aAAa,KAAK,GAAG,qBAAqB,QAAQe,UAAU;EACpE,WAAW,MAAM,OAAO,KAAKnB,UAAU,QAAQ,iBAAiB,EAC9D,IAAI,KAAM,IAAgC,OAAO;EAEnD,OAAO;;CAGT,WAA8E;EAC5E,MAAM,OAAO,KAAKmB,UAAU;EAC5B,OAAO,KAAKnB,UAAU,QAAQ,KAAK;;CAGrC,WAAyE;EACvE,MAAM,QAAQ,KAAKF,UAAU,OAAO,KAAKC;EACzC,IAAI,CAAC,OACH,MAAM,IAAI,MAAM,mBAAmB,KAAKA,WAAW,IAAI;EAEzD,OAAO,kBACL,KAAKE,iBACL,KAAKC,QACL,KAAKJ,UAAU,QAAQ,aACvB,MACD;;CAGH,aAAa,SAA0C;EACrD,OAAO;GAAE,YAAY,KAAKG;GAAiB;GAAS,MAAM,KAAKmB,WAAW;GAAE;;CAG9E,MAAMT,WAAW,SAA8C;EAC7D,MAAM,OAAO,KAAKU,aAAa,QAAQ;EACvC,MAAM,SAAS,KAAKrB,UAAU,QAAQ,KAAK;EAC3C,MAAM,OAAkB,EAAE;EAC1B,WAAW,MAAM,OAAO,QACtB,KAAK,KAAK,IAAI;EAEhB,OAAO;;CAGT,eAA8C;EAE5C,OADc,KAAKF,UAAU,OAAO,KAAKC,aAC3B,UAAU,EAAE;;CAG5B,oBAAoB,MAAkD;EACpE,MAAM,SAAS,KAAKuB,cAAc;EAClC,MAAM,UAA6B,EAAE;EACrC,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,KAAK,EAAE;GAC/C,IAAI,UAAU,KAAA,GAAW;GACzB,MAAM,UAAU,KAAKC,gBAAgB,OAAO,OAAO,KAAK;GACxD,QAAQ,KAAK,iBAAiB,GAAG,KAAK,QAAQ,CAAC;;EAEjD,OAAO;;CAGT,gBAAgB,OAAgB,OAA8C;EAC5E,IAAI,UAAU,KAAA,GAAW,OAAO,IAAI,cAAc,MAAM;EAExD,IAAI,MAAM,KAAK,SAAS,UACtB,OAAO,IAAI,cAAc,OAAO,EAAE,SAAS,MAAM,KAAK,SAAS,CAAC;EAGlE,IAAI,MAAM,KAAK,SAAS,eAAe;GACrC,MAAM,SAAS,MAAM,KAAK;GAC1B,MAAM,QAAS,KAAKzB,UACjB,eAAe;GAClB,IAAI,CAAC,SAAS,UAAU,MAAM,OAAO,IAAI,cAAc,MAAM;GAE7D,IAAI,MAAM,QAAQ,MAAM,QAAQ,MAAM,EACpC,OAAO,MAAM,KAAK,SAChB,KAAK0B,iBAAiB,MAAiC,MAAM,CAC9D;GAEH,OAAO,KAAKA,iBAAiB,OAAkC,MAAM;;EAGvE,OAAO,IAAI,cAAc,MAAM;;CAGjC,iBACE,MACA,OAC4B;EAC5B,MAAM,MAAkC,EAAE;EAC1C,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,KAAK,EAAE;GAC/C,IAAI,UAAU,KAAA,GAAW;GACzB,MAAM,WAAW,MAAM,OAAO;GAC9B,IAAI,OAAO,KAAKD,gBAAgB,OAAO,SAAS;;EAElD,OAAO;;CAGT,YAAY,MAA2D;EACrE,MAAM,SAAS,KAAKD,cAAc;EAClC,MAAM,MAAkC,EAAE;EAC1C,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,KAAK,EAC7C,IAAI,UAAU,KAAA,GACZ,IAAI,OAAO,KAAKC,gBAAgB,OAAO,OAAO,KAAK;EAGvD,OAAO;;CAGT,aAAa,MAA2D;EACtE,MAAM,SAAS,KAAKD,cAAc;EAClC,MAAM,SAAqC,EAAE;EAC7C,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,KAAK,EAAE;GAC/C,IAAI,QAAQ,SAAS,UAAU,KAAA,GAC7B,MAAM,IAAI,MAAM,wCAAwC;GAE1D,IAAI,UAAU,KAAA,GACZ,OAAO,OAAO,KAAKC,gBAAgB,OAAO,OAAO,KAAK;;EAG1D,OAAO;;CAGT,gBAAgB,MAAwD;EACtE,MAAM,SAAkC,EAAE;EAC1C,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,KAAK,EAC7C,IAAI,UAAU,KAAA,GACZ,OAAO,OAAO;EAGlB,OAAO;;CAGT,kBAAkB,MAA2E;EAC3F,OAAO,EAAE,MAAM,KAAKL,aAAa,KAAK,EAAE;;CAG1C,kBACE,gBAG4C;EAC5C,IAAI,OAAO,mBAAmB,YAAY;GAExC,MAAM,MAAM,eADK,qBACkB,CAAC;GAEpC,IADa,IAAI,MAAM,OAAO,GAAG,UAAU,MACnC,EACN,MAAM,IAAI,MAAM,wCAAwC;GAE1D,IAAI,IAAI,WAAW,GACjB,OAAO,EAAE,MAAM,EAAE,EAAE;GAErB,OAAO,uBAAuB,MAAM,OAAO,OAAO,aAChD,KAAKD,kBAAkB,OAAO,OAAO,SAAS,CAC/C;;EAEH,OAAO,KAAKQ,kBAAkB,eAA0C;;CAG1E,kBAAkB,OAAe,OAAmB,UAA+B;EACjF,IAAI,aAAa,UAAU,OAAO;EAElC,MAAM,gBAAgB,MAAM,MAAM,IAAI,CAAC,MAAM;EAE7C,MAAM,gBADS,KAAKH,cACQ,CAAC;EAC7B,IAAI,CAAC,eAAe,OAAO;EAE3B,IAAI,MAAM,SAAS,IAAI,EACrB,OAAO,KAAKI,kBAAkB,OAAO,MAAM;EAG7C,IAAI,iBAAiB,iBAAiB,cAAc,KAAK,SAAS,UAChE,OAAO,IAAI,cAAc,MAAM,OAAO,EAAE,SAAS,cAAc,KAAK,SAAS,CAAC;EAGhF,IAAI,cAAc,KAAK,SAAS,iBAAiB,iBAAiB,eAAe;GAC/E,MAAM,MAAM,MAAM;GAClB,IAAI,OAAO,QAAQ,YAAY,QAAQ,QAAQ,CAAC,MAAM,QAAQ,IAAI,EAAE;IAClE,MAAM,SAAS,cAAc,KAAK;IAClC,MAAM,QAAS,KAAK5B,UACjB,eAAe;IAClB,IAAI,OACF,OAAO,KAAK0B,iBAAiB,KAAgC,MAAM;;;EAKzE,OAAO;;CAGT,kBAAkB,SAAiB,OAA+B;EAChE,MAAM,QAAQ,QAAQ,MAAM,IAAI;EAChC,MAAM,SAAS,KAAKF,cAAc;EAClC,IAAI,eAA0C,MAAM,KAAK,OAAO,MAAM,MAAM,KAAA;EAE5E,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GACrC,IAAI,CAAC,gBAAgB,aAAa,KAAK,SAAS,eAAe,OAAO;GACtE,MAAM,SAAS,aAAa,KAAK;GACjC,MAAM,QAAS,KAAKxB,UACjB,eAAe;GAClB,IAAI,CAAC,OAAO,OAAO;GACnB,MAAM,UAAU,MAAM;GACtB,eAAe,UAAU,MAAM,OAAO,WAAW,KAAA;;EAGnD,IAAI,cAAc,KAAK,SAAS,YAAY,iBAAiB,eAC3D,OAAO,IAAI,cAAc,MAAM,OAAO,EAAE,SAAS,aAAa,KAAK,SAAS,CAAC;EAG/E,IAAI,cAAc,KAAK,SAAS,iBAAiB,iBAAiB,eAAe;GAC/E,MAAM,MAAM,MAAM;GAClB,IAAI,OAAO,QAAQ,YAAY,QAAQ,QAAQ,CAAC,MAAM,QAAQ,IAAI,EAAE;IAClE,MAAM,SAAS,aAAa,KAAK;IACjC,MAAM,QAAS,KAAKA,UACjB,eAAe;IAClB,IAAI,OACF,OAAO,KAAK0B,iBAAiB,KAAgC,MAAM;;;EAKzE,OAAO;;CAGT,gBAAiC;EAC/B,MAAM,CAAC,UAAU,KAAKtB,OAAO;EAC7B,IAAI,KAAKA,OAAO,QAAQ,WAAW,KAAK,QACtC,OAAO;EAET,OAAO,aAAa,GAAG,CAAC,GAAG,KAAKA,OAAO,QAAQ,CAAC;;CAGlD,gBAAgB,YAA0B;EACxC,IAAI,KAAKA,OAAO,QAAQ,WAAW,GACjC,MAAM,IAAI,MACR,GAAG,WAAW,uDAAuD,WAAW,IACjF;;CAIL,iBAAiB,YAA0B;EACzC,IACE,KAAKA,OAAO,YAAY,KAAA,KACxB,KAAKA,OAAO,UAAU,KAAA,KACtB,KAAKA,OAAO,WAAW,KAAA,GAEvB,MAAM,IAAI,MACR,GAAG,WAAW,0EAA0E,WAAW,IACpG;;CAIL,gBAAgB,YAA0B;EACxC,IAAI,KAAKA,OAAO,SAAS,SAAS,GAChC,MAAM,IAAI,MACR,GAAG,WAAW,kEAAkE,WAAW,IAC5F;;CAIL,YAAsB;EACpB,OAAO;GACL,QAAQ;GACR,aAAa,KAAKJ,UAAU,QAAQ;GACpC,MAAM;GACP;;CAGH,qBAAqB,MAAwD;EAC3E,IAAI,CAAC,KAAK6B,cAAc,OAAO;EAC/B,MAAM,QAAQ,KAAK7B,UAAU,OAAO,KAAKC;EACzC,IAAI,CAAC,OAAO,iBAAiB,CAAC,MAAM,UAAU,OAAO;EACrD,MAAM,eAAe,MAAM,SAAS,KAAK4B;EACzC,IAAI,CAAC,cAAc,OAAO;EAC1B,OAAO;GAAE,GAAG;IAAO,MAAM,cAAc,QAAQ,aAAa;GAAO;;CAGrE,OACE,WACgE;EAChE,MAAM,WAAW,IAAI,oBACnB,KAAK7B,WACL,KAAKC,YACL,KAAKC,UACN;EACD,SAASE,SAAS;GAAE,GAAG,KAAKA;GAAQ,GAAG;GAAW;EAClD,SAASD,kBAAkB,KAAKA;EAChC,SAAS0B,eAAe,KAAKA;EAC7B,OAAO;;CAGT,kBACE,WACA,aAC4D;EAC5D,MAAM,WAAW,IAAI,oBACnB,KAAK7B,WACL,KAAKC,YACL,KAAKC,UACN;EACD,SAASE,SAAS;GAAE,GAAG,KAAKA;GAAQ,GAAG;GAAW;EAClD,SAASD,kBAAkB,KAAKA;EAChC,SAAS0B,eAAe;EACxB,OAAO;;;AAIX,SAAgB,sBAId,UACA,WACA,UACuC;CACvC,OAAO,IAAI,oBAAoB,UAAU,WAAW,SAAS;;;;ACvyB/D,SAAgB,SACd,SAC2B;CAC3B,MAAM,EAAE,UAAU,aAAa;CAC/B,MAAM,SAAkC,EAAE;CAE1C,KAAK,MAAM,CAAC,UAAU,cAAc,OAAO,QAAQ,SAAS,MAAM,EAChE,OAAO,YAAY,sBACjB,UACA,WACA,SACD;CAGH,OAAO;;;;ACIT,SAAgB,yBACd,gBACA,MACoB;CACpB,SAAS,UAAe,SAAoD;EAC1E,OAAO,EACL,cAAc;GAAE,YAAY;GAAgB;GAAS;GAAM,GAC5D;;CAGH,OAAO;EACL,UAAyC,UAAmC;GAC1E,OAAO,UAAe,IAAI,oBAAoB,gBAAgB,SAAS,CAAC;;EAG1E,UAAU,UAAoB;GAC5B,OAAO,UAAU,IAAI,oBAAoB,gBAAgB,SAAS,CAAC;;EAGrE,WAAW,WAAoC;GAC7C,OAAO,UAAU,IAAI,qBAAqB,gBAAgB,UAAU,CAAC;;EAGvE,UAAU,QAAkB,QAA4C;GACtE,OAAO,UAAU,IAAI,oBAAoB,gBAAgB,QAAQ,OAAO,CAAC;;EAG3E,WAAW,QAAkB,QAA4C;GACvE,OAAO,UAAU,IAAI,qBAAqB,gBAAgB,QAAQ,OAAO,CAAC;;EAG5E,UAAU,QAAkB;GAC1B,OAAO,UAAU,IAAI,oBAAoB,gBAAgB,OAAO,CAAC;;EAGnE,WAAW,QAAkB;GAC3B,OAAO,UAAU,IAAI,qBAAqB,gBAAgB,OAAO,CAAC;;EAGpE,iBACE,QACA,QACA,SACA;GACA,OAAO,UACL,IAAI,2BAA2B,gBAAgB,QAAQ,QAAQ,SAAS,UAAU,MAAM,CACzF;;EAGH,iBAAiB,QAAkB;GACjC,OAAO,UAAU,IAAI,2BAA2B,gBAAgB,OAAO,CAAC;;EAE3E;;;;ACrFH,SAAgB,SAA0C,SAE5B;CAC5B,MAAM,EAAE,aAAa;CAErB,OAAO,EACL,WAAwD,UAAiC;EACvF,MAAM,YAAY,SAAS,MAAM;EACjC,IAAI,CAAC,OAAO,OAAO,SAAS,QAAQ,UAAU,EAC5C,MAAM,IAAI,MAAM,kBAAkB,UAAU,cAAc,SAAS,GAAG;EAWxE,OAAO,yBATO,SAAS,OAAO,WACD,QAAQ,cAAc,WAQH;GAL9C,QAAQ;GACR,aAAa,SAAS,QAAQ;GAC9B,MAAM;GAG4C,CAAC;IAExD"}
package/package.json CHANGED
@@ -1,29 +1,32 @@
1
1
  {
2
2
  "name": "@prisma-next/mongo-orm",
3
- "version": "0.5.0-dev.9",
3
+ "version": "0.5.0",
4
+ "license": "Apache-2.0",
4
5
  "type": "module",
5
6
  "sideEffects": false,
6
7
  "description": "MongoDB ORM client for Prisma Next",
7
8
  "dependencies": {
8
- "@prisma-next/contract": "0.5.0-dev.9",
9
- "@prisma-next/framework-components": "0.5.0-dev.9",
10
- "@prisma-next/mongo-contract": "0.5.0-dev.9",
11
- "@prisma-next/mongo-query-ast": "0.5.0-dev.9",
12
- "@prisma-next/utils": "0.5.0-dev.9",
13
- "@prisma-next/mongo-value": "0.5.0-dev.9"
9
+ "@prisma-next/mongo-contract": "0.5.0",
10
+ "@prisma-next/contract": "0.5.0",
11
+ "@prisma-next/framework-components": "0.5.0",
12
+ "@prisma-next/mongo-value": "0.5.0",
13
+ "@prisma-next/mongo-query-ast": "0.5.0",
14
+ "@prisma-next/utils": "0.5.0",
15
+ "@prisma-next/mongo-query-builder": "0.5.0"
14
16
  },
15
17
  "devDependencies": {
16
18
  "mongodb": "^6.16.0",
17
- "mongodb-memory-server": "10.4.3",
18
- "tsdown": "0.18.4",
19
+ "mongodb-memory-server": "11.0.1",
20
+ "tsdown": "0.22.0",
19
21
  "typescript": "5.9.3",
20
- "vitest": "4.0.17",
21
- "@prisma-next/adapter-mongo": "0.5.0-dev.9",
22
- "@prisma-next/driver-mongo": "0.5.0-dev.9",
23
- "@prisma-next/mongo-runtime": "0.5.0-dev.9",
22
+ "vitest": "4.1.5",
23
+ "@prisma-next/adapter-mongo": "0.5.0",
24
+ "@prisma-next/driver-mongo": "0.5.0",
25
+ "@prisma-next/mongo-runtime": "0.5.0",
26
+ "@prisma-next/target-mongo": "0.5.0",
27
+ "@prisma-next/test-utils": "0.0.1",
24
28
  "@prisma-next/tsconfig": "0.0.0",
25
- "@prisma-next/tsdown": "0.0.0",
26
- "@prisma-next/test-utils": "0.0.1"
29
+ "@prisma-next/tsdown": "0.0.0"
27
30
  },
28
31
  "files": [
29
32
  "dist",
package/src/collection.ts CHANGED
@@ -513,7 +513,14 @@ class MongoCollectionImpl<
513
513
  offset: undefined,
514
514
  });
515
515
  const ids: unknown[] = [];
516
- for await (const row of idQuery.#execute()) {
516
+ // Strip resultShape so the runtime yields wire-level _id values (e.g. ObjectId)
517
+ // rather than decoded hex strings. The follow-up $in filter in updateAll wraps
518
+ // these in bare MongoParamRefs with no codecId; round-tripping a decoded string
519
+ // back through the adapter would require attaching the field's codecId, which
520
+ // we don't do here. Do not "tidy" the destructure away — the prefetch+modify+
521
+ // re-read flow depends on it.
522
+ const { resultShape: _rs, ...planWithoutShape } = idQuery.#compile();
523
+ for await (const row of this.#executor.execute(planWithoutShape)) {
517
524
  ids.push((row as Record<string, unknown>)['_id']);
518
525
  }
519
526
  return ids;
@@ -525,10 +532,15 @@ class MongoCollectionImpl<
525
532
  }
526
533
 
527
534
  #compile(): MongoQueryPlan<IncludedRow<TContract, ModelName, TIncludes>> {
535
+ const model = this.#contract.models[this.#modelName] as MongoModelDefinition | undefined;
536
+ if (!model) {
537
+ throw new Error(`Unknown model: "${this.#modelName}".`);
538
+ }
528
539
  return compileMongoQuery<IncludedRow<TContract, ModelName, TIncludes>>(
529
540
  this.#collectionName,
530
541
  this.#state,
531
542
  this.#contract.storage.storageHash,
543
+ model,
532
544
  );
533
545
  }
534
546
 
@@ -766,7 +778,6 @@ class MongoCollectionImpl<
766
778
  target: 'mongo',
767
779
  storageHash: this.#contract.storage.storageHash,
768
780
  lane: 'mongo-orm',
769
- paramDescriptors: [],
770
781
  };
771
782
  }
772
783
 
package/src/compile.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { PlanMeta } from '@prisma-next/contract/types';
2
+ import type { MongoModelDefinition } from '@prisma-next/mongo-contract';
2
3
  import type { MongoPipelineStage, MongoQueryPlan } from '@prisma-next/mongo-query-ast/execution';
3
4
  import {
4
5
  AggregateCommand,
@@ -11,6 +12,8 @@ import {
11
12
  MongoSortStage,
12
13
  MongoUnwindStage,
13
14
  } from '@prisma-next/mongo-query-ast/execution';
15
+ import { contractModelToMongoResultShape } from '@prisma-next/mongo-query-builder';
16
+ import { ifDefined } from '@prisma-next/utils/defined';
14
17
  import type { MongoCollectionState, MongoIncludeExpr } from './collection-state';
15
18
 
16
19
  function compileIncludes(includes: readonly MongoIncludeExpr[]): MongoPipelineStage[] {
@@ -38,6 +41,7 @@ export function compileMongoQuery<Row = unknown>(
38
41
  collection: string,
39
42
  state: MongoCollectionState,
40
43
  storageHash: string,
44
+ model: MongoModelDefinition,
41
45
  ): MongoQueryPlan<Row> {
42
46
  const stages: MongoPipelineStage[] = [];
43
47
 
@@ -79,8 +83,19 @@ export function compileMongoQuery<Row = unknown>(
79
83
  target: 'mongo',
80
84
  storageHash,
81
85
  lane: 'mongo-orm',
82
- paramDescriptors: [],
83
86
  };
84
87
  const command = new AggregateCommand(collection, stages);
85
- return { collection, command, meta };
88
+
89
+ const selection =
90
+ state.selectedFields !== undefined && state.selectedFields.length > 0
91
+ ? state.selectedFields
92
+ : undefined;
93
+ const includeRelationNames =
94
+ state.includes.length > 0 ? state.includes.map((inc) => inc.relationName) : undefined;
95
+ const resultShape = contractModelToMongoResultShape(model, {
96
+ ...ifDefined('selection', selection),
97
+ ...ifDefined('includeRelationNames', includeRelationNames),
98
+ });
99
+
100
+ return { collection, command, meta, resultShape };
86
101
  }
package/src/mongo-raw.ts CHANGED
@@ -24,7 +24,6 @@ export function mongoRaw<TContract extends MongoContract>(options: {
24
24
  target: 'mongo',
25
25
  storageHash: contract.storage.storageHash,
26
26
  lane: 'mongo-raw',
27
- paramDescriptors: [],
28
27
  };
29
28
 
30
29
  return createRawMongoCollection(collectionName, meta);