@prisma-next/mongo-orm 0.3.0-dev.130 → 0.3.0-dev.132

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
@@ -1,5 +1,5 @@
1
1
  import { ExtractMongoCodecTypes, InferModelRow, MongoContract, MongoContractWithTypeMaps, MongoQueryPlan, MongoTypeMaps } from "@prisma-next/mongo-core";
2
- import { DomainReferenceRelation, EmbedRelationKeys, ReferenceRelationKeys } from "@prisma-next/contract/types";
2
+ import { DomainReferenceRelation } from "@prisma-next/contract/types";
3
3
  import { AsyncIterableResult } from "@prisma-next/runtime-executor";
4
4
 
5
5
  //#region src/types.d.ts
@@ -11,11 +11,14 @@ interface MongoOrmOptions<TContract extends MongoContract> {
11
11
  readonly executor: MongoQueryExecutor;
12
12
  }
13
13
  type Simplify<T> = T extends unknown ? { [K in keyof T]: T[K] } : never;
14
- type EmbedRelationRowType<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>, ModelName extends string & keyof TContract['models'], RelKey extends keyof TContract['models'][ModelName]['relations']> = TContract['models'][ModelName]['relations'][RelKey] extends {
14
+ type ModelRelations<TContract extends MongoContract, ModelName extends string & keyof TContract['models']> = NonNullable<TContract['models'][ModelName]['relations']>;
15
+ type ReferenceRelationKeys<TContract extends MongoContract, ModelName extends string & keyof TContract['models']> = { [K in keyof ModelRelations<TContract, ModelName>]: ModelRelations<TContract, ModelName>[K] extends DomainReferenceRelation ? K : never }[keyof ModelRelations<TContract, ModelName>];
16
+ type EmbedRelationKeys<TContract extends MongoContract, ModelName extends string & keyof TContract['models']> = { [K in keyof ModelRelations<TContract, ModelName>]: ModelRelations<TContract, ModelName>[K] extends DomainReferenceRelation ? never : K }[keyof ModelRelations<TContract, ModelName>];
17
+ type EmbedRelationRowType<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>, ModelName extends string & keyof TContract['models'], RelKey extends keyof ModelRelations<TContract, ModelName>> = ModelRelations<TContract, ModelName>[RelKey] extends {
15
18
  readonly to: infer To extends string & keyof TContract['models'];
16
19
  readonly cardinality: infer C;
17
- } ? TContract['models'][ModelName]['relations'][RelKey] extends DomainReferenceRelation ? never : C extends '1:N' ? InferModelRow<TContract, To>[] : InferModelRow<TContract, To> : never;
18
- type InferFullRow<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>, ModelName extends string & keyof TContract['models']> = EmbedRelationKeys<TContract, ModelName> extends never ? InferModelRow<TContract, ModelName> : InferModelRow<TContract, ModelName> & { -readonly [K in EmbedRelationKeys<TContract, ModelName> & keyof TContract['models'][ModelName]['relations']]: EmbedRelationRowType<TContract, ModelName, K> };
20
+ } ? ModelRelations<TContract, ModelName>[RelKey] extends DomainReferenceRelation ? never : C extends '1:N' ? InferModelRow<TContract, To>[] : InferModelRow<TContract, To> : never;
21
+ type InferFullRow<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>, ModelName extends string & keyof TContract['models']> = EmbedRelationKeys<TContract, ModelName> extends never ? InferModelRow<TContract, ModelName> : InferModelRow<TContract, ModelName> & { -readonly [K in EmbedRelationKeys<TContract, ModelName> & keyof ModelRelations<TContract, ModelName>]: EmbedRelationRowType<TContract, ModelName, K> };
19
22
  type VariantRow<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>, ModelName extends string & keyof TContract['models']> = TContract['models'][ModelName] extends {
20
23
  readonly discriminator: {
21
24
  readonly field: infer DiscField extends string;
@@ -25,11 +28,11 @@ type VariantRow<TContract extends MongoContractWithTypeMaps<MongoContract, Mongo
25
28
  readonly value: string;
26
29
  }> ? { [VK in keyof V]: VK extends string & keyof TContract['models'] ? Simplify<Omit<InferFullRow<TContract, ModelName>, DiscField> & InferFullRow<TContract, VK> & Record<DiscField, V[VK]['value']>> : never }[keyof V] : InferFullRow<TContract, ModelName> : InferFullRow<TContract, ModelName>;
27
30
  type InferRootRow<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>, ModelName extends string & keyof TContract['models']> = VariantRow<TContract, ModelName>;
28
- type IncludeRelationRowType<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>, ModelName extends string & keyof TContract['models'], RelKey extends keyof TContract['models'][ModelName]['relations']> = TContract['models'][ModelName]['relations'][RelKey] extends DomainReferenceRelation ? TContract['models'][ModelName]['relations'][RelKey] extends {
31
+ type IncludeRelationRowType<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>, ModelName extends string & keyof TContract['models'], RelKey extends keyof ModelRelations<TContract, ModelName>> = ModelRelations<TContract, ModelName>[RelKey] extends DomainReferenceRelation ? ModelRelations<TContract, ModelName>[RelKey] extends {
29
32
  readonly to: infer To extends string & keyof TContract['models'];
30
33
  readonly cardinality: infer C;
31
34
  } ? C extends 'N:1' | '1:1' ? InferFullRow<TContract, To> | null : InferFullRow<TContract, To>[] : never : never;
32
- type IncludeResultFields<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>, ModelName extends string & keyof TContract['models'], TInclude extends MongoIncludeSpec<TContract, ModelName>> = { -readonly [K in keyof TInclude & string as TInclude[K] extends true ? K : never]: K extends keyof TContract['models'][ModelName]['relations'] ? IncludeRelationRowType<TContract, ModelName, K> : never };
35
+ type IncludeResultFields<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>, ModelName extends string & keyof TContract['models'], TInclude extends MongoIncludeSpec<TContract, ModelName>> = { -readonly [K in keyof TInclude & string as TInclude[K] extends true ? K : never]: K extends keyof ModelRelations<TContract, ModelName> ? IncludeRelationRowType<TContract, ModelName, K> : never };
33
36
  type MongoWhereFilter<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>, ModelName extends string & keyof TContract['models'], TCodecTypes extends Record<string, {
34
37
  output: unknown;
35
38
  }> = ExtractMongoCodecTypes<TContract>> = { readonly [K in keyof TContract['models'][ModelName]['fields']]?: TContract['models'][ModelName]['fields'][K] extends {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/mongo-orm.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/mongo-orm.ts"],"sourcesContent":[],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -14,7 +14,7 @@ function buildLookupStages(contract, model, include) {
14
14
  const stages = [];
15
15
  for (const [relName, shouldInclude] of Object.entries(include)) {
16
16
  if (!shouldInclude) continue;
17
- const relation = model.relations[relName];
17
+ const relation = model.relations?.[relName];
18
18
  if (!relation) continue;
19
19
  const targetModel = contract.models[relation.to];
20
20
  if (!targetModel || targetModel.owner) continue;
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["stubMeta: PlanMeta","stages: Record<string, unknown>[]","#contract","#modelName","#executor","plan: MongoQueryPlan","pipeline: Record<string, unknown>[]","client: Record<string, unknown>"],"sources":["../src/mongo-orm.ts"],"sourcesContent":["import type { DomainReferenceRelation, PlanMeta } from '@prisma-next/contract/types';\nimport {\n AggregateCommand,\n FindCommand,\n type MongoContract,\n type MongoContractWithTypeMaps,\n type MongoExpr,\n type MongoModelDefinition,\n type MongoQueryPlan,\n type MongoTypeMaps,\n} from '@prisma-next/mongo-core';\nimport type { AsyncIterableResult } from '@prisma-next/runtime-executor';\nimport type {\n MongoFindManyOptions,\n MongoIncludeSpec,\n MongoOrmClient,\n MongoOrmOptions,\n MongoQueryExecutor,\n} from './types';\n\nconst stubMeta: PlanMeta = {\n target: 'mongo',\n storageHash: 'orm',\n lane: 'mongo-orm',\n paramDescriptors: [],\n};\n\nfunction resolveCollection(model: MongoModelDefinition, modelName: string): string {\n return model.storage.collection ?? modelName;\n}\n\nfunction buildLookupStages(\n contract: MongoContract,\n model: MongoModelDefinition,\n include: Record<string, true>,\n): Record<string, unknown>[] {\n const stages: Record<string, unknown>[] = [];\n\n for (const [relName, shouldInclude] of Object.entries(include)) {\n if (!shouldInclude) continue;\n\n const relation = model.relations[relName];\n if (!relation) continue;\n\n const targetModel = contract.models[relation.to];\n if (!targetModel || targetModel.owner) continue;\n\n const ref = relation as DomainReferenceRelation;\n\n if (ref.on.localFields.length !== 1 || ref.on.targetFields.length !== 1) {\n throw new Error(\n `Compound references are not yet supported: relation \"${relName}\" has ${ref.on.localFields.length} local field(s) and ${ref.on.targetFields.length} target field(s)`,\n );\n }\n\n const targetCollection = resolveCollection(targetModel, ref.to);\n\n stages.push({\n $lookup: {\n from: targetCollection,\n localField: ref.on.localFields[0],\n foreignField: ref.on.targetFields[0],\n as: relName,\n },\n });\n\n if (ref.cardinality === 'N:1' || ref.cardinality === '1:1') {\n stages.push({\n $unwind: {\n path: `$${relName}`,\n preserveNullAndEmptyArrays: true,\n },\n });\n }\n }\n\n return stages;\n}\n\nclass MongoCollectionImpl<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n> {\n readonly #contract: TContract;\n readonly #modelName: ModelName;\n readonly #executor: MongoQueryExecutor;\n\n constructor(contract: TContract, modelName: ModelName, executor: MongoQueryExecutor) {\n this.#contract = contract;\n this.#modelName = modelName;\n this.#executor = executor;\n }\n\n findMany<TInclude extends MongoIncludeSpec<TContract, ModelName> = Record<string, never>>(\n options?: MongoFindManyOptions<TContract, ModelName, TInclude>,\n ): AsyncIterableResult<unknown> {\n const model = this.#contract.models[this.#modelName] as MongoModelDefinition;\n const collection = resolveCollection(model, this.#modelName as string);\n const filter = options?.where ? (options.where as unknown as MongoExpr) : undefined;\n const include = options?.include as Record<string, true> | undefined;\n\n const hasIncludes = include && Object.keys(include).length > 0;\n\n let plan: MongoQueryPlan;\n if (hasIncludes) {\n const pipeline: Record<string, unknown>[] = [];\n\n if (filter && Object.keys(filter as Record<string, unknown>).length > 0) {\n pipeline.push({ $match: filter });\n }\n\n pipeline.push(...buildLookupStages(this.#contract, model, include));\n\n plan = {\n command: new AggregateCommand(collection, pipeline),\n meta: stubMeta,\n };\n } else {\n plan = {\n command: new FindCommand(collection, filter),\n meta: stubMeta,\n };\n }\n\n return this.#executor.execute(plan);\n }\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] = new MongoCollectionImpl(\n contract,\n modelName as string & keyof TContract['models'],\n executor,\n );\n }\n\n return client as MongoOrmClient<TContract>;\n}\n"],"mappings":";;;AAoBA,MAAMA,WAAqB;CACzB,QAAQ;CACR,aAAa;CACb,MAAM;CACN,kBAAkB,EAAE;CACrB;AAED,SAAS,kBAAkB,OAA6B,WAA2B;AACjF,QAAO,MAAM,QAAQ,cAAc;;AAGrC,SAAS,kBACP,UACA,OACA,SAC2B;CAC3B,MAAMC,SAAoC,EAAE;AAE5C,MAAK,MAAM,CAAC,SAAS,kBAAkB,OAAO,QAAQ,QAAQ,EAAE;AAC9D,MAAI,CAAC,cAAe;EAEpB,MAAM,WAAW,MAAM,UAAU;AACjC,MAAI,CAAC,SAAU;EAEf,MAAM,cAAc,SAAS,OAAO,SAAS;AAC7C,MAAI,CAAC,eAAe,YAAY,MAAO;EAEvC,MAAM,MAAM;AAEZ,MAAI,IAAI,GAAG,YAAY,WAAW,KAAK,IAAI,GAAG,aAAa,WAAW,EACpE,OAAM,IAAI,MACR,wDAAwD,QAAQ,QAAQ,IAAI,GAAG,YAAY,OAAO,sBAAsB,IAAI,GAAG,aAAa,OAAO,kBACpJ;EAGH,MAAM,mBAAmB,kBAAkB,aAAa,IAAI,GAAG;AAE/D,SAAO,KAAK,EACV,SAAS;GACP,MAAM;GACN,YAAY,IAAI,GAAG,YAAY;GAC/B,cAAc,IAAI,GAAG,aAAa;GAClC,IAAI;GACL,EACF,CAAC;AAEF,MAAI,IAAI,gBAAgB,SAAS,IAAI,gBAAgB,MACnD,QAAO,KAAK,EACV,SAAS;GACP,MAAM,IAAI;GACV,4BAA4B;GAC7B,EACF,CAAC;;AAIN,QAAO;;AAGT,IAAM,sBAAN,MAGE;CACA,CAASC;CACT,CAASC;CACT,CAASC;CAET,YAAY,UAAqB,WAAsB,UAA8B;AACnF,QAAKF,WAAY;AACjB,QAAKC,YAAa;AAClB,QAAKC,WAAY;;CAGnB,SACE,SAC8B;EAC9B,MAAM,QAAQ,MAAKF,SAAU,OAAO,MAAKC;EACzC,MAAM,aAAa,kBAAkB,OAAO,MAAKA,UAAqB;EACtE,MAAM,SAAS,SAAS,QAAS,QAAQ,QAAiC;EAC1E,MAAM,UAAU,SAAS;EAEzB,MAAM,cAAc,WAAW,OAAO,KAAK,QAAQ,CAAC,SAAS;EAE7D,IAAIE;AACJ,MAAI,aAAa;GACf,MAAMC,WAAsC,EAAE;AAE9C,OAAI,UAAU,OAAO,KAAK,OAAkC,CAAC,SAAS,EACpE,UAAS,KAAK,EAAE,QAAQ,QAAQ,CAAC;AAGnC,YAAS,KAAK,GAAG,kBAAkB,MAAKJ,UAAW,OAAO,QAAQ,CAAC;AAEnE,UAAO;IACL,SAAS,IAAI,iBAAiB,YAAY,SAAS;IACnD,MAAM;IACP;QAED,QAAO;GACL,SAAS,IAAI,YAAY,YAAY,OAAO;GAC5C,MAAM;GACP;AAGH,SAAO,MAAKE,SAAU,QAAQ,KAAK;;;AAIvC,SAAgB,SACd,SAC2B;CAC3B,MAAM,EAAE,UAAU,aAAa;CAC/B,MAAMG,SAAkC,EAAE;AAE1C,MAAK,MAAM,CAAC,UAAU,cAAc,OAAO,QAAQ,SAAS,MAAM,CAChE,QAAO,YAAY,IAAI,oBACrB,UACA,WACA,SACD;AAGH,QAAO"}
1
+ {"version":3,"file":"index.mjs","names":["stubMeta: PlanMeta","stages: Record<string, unknown>[]","#contract","#modelName","#executor","plan: MongoQueryPlan","pipeline: Record<string, unknown>[]","client: Record<string, unknown>"],"sources":["../src/mongo-orm.ts"],"sourcesContent":["import type { DomainReferenceRelation, PlanMeta } from '@prisma-next/contract/types';\nimport {\n AggregateCommand,\n FindCommand,\n type MongoContract,\n type MongoContractWithTypeMaps,\n type MongoExpr,\n type MongoModelDefinition,\n type MongoQueryPlan,\n type MongoTypeMaps,\n} from '@prisma-next/mongo-core';\nimport type { AsyncIterableResult } from '@prisma-next/runtime-executor';\nimport type {\n MongoFindManyOptions,\n MongoIncludeSpec,\n MongoOrmClient,\n MongoOrmOptions,\n MongoQueryExecutor,\n} from './types';\n\nconst stubMeta: PlanMeta = {\n target: 'mongo',\n storageHash: 'orm',\n lane: 'mongo-orm',\n paramDescriptors: [],\n};\n\nfunction resolveCollection(model: MongoModelDefinition, modelName: string): string {\n return model.storage.collection ?? modelName;\n}\n\nfunction buildLookupStages(\n contract: MongoContract,\n model: MongoModelDefinition,\n include: Record<string, true>,\n): Record<string, unknown>[] {\n const stages: Record<string, unknown>[] = [];\n\n for (const [relName, shouldInclude] of Object.entries(include)) {\n if (!shouldInclude) continue;\n\n const relation = model.relations?.[relName];\n if (!relation) continue;\n\n const targetModel = contract.models[relation.to];\n if (!targetModel || targetModel.owner) continue;\n\n const ref = relation as DomainReferenceRelation;\n\n if (ref.on.localFields.length !== 1 || ref.on.targetFields.length !== 1) {\n throw new Error(\n `Compound references are not yet supported: relation \"${relName}\" has ${ref.on.localFields.length} local field(s) and ${ref.on.targetFields.length} target field(s)`,\n );\n }\n\n const targetCollection = resolveCollection(targetModel, ref.to);\n\n stages.push({\n $lookup: {\n from: targetCollection,\n localField: ref.on.localFields[0],\n foreignField: ref.on.targetFields[0],\n as: relName,\n },\n });\n\n if (ref.cardinality === 'N:1' || ref.cardinality === '1:1') {\n stages.push({\n $unwind: {\n path: `$${relName}`,\n preserveNullAndEmptyArrays: true,\n },\n });\n }\n }\n\n return stages;\n}\n\nclass MongoCollectionImpl<\n TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,\n ModelName extends string & keyof TContract['models'],\n> {\n readonly #contract: TContract;\n readonly #modelName: ModelName;\n readonly #executor: MongoQueryExecutor;\n\n constructor(contract: TContract, modelName: ModelName, executor: MongoQueryExecutor) {\n this.#contract = contract;\n this.#modelName = modelName;\n this.#executor = executor;\n }\n\n findMany<TInclude extends MongoIncludeSpec<TContract, ModelName> = Record<string, never>>(\n options?: MongoFindManyOptions<TContract, ModelName, TInclude>,\n ): AsyncIterableResult<unknown> {\n const model = this.#contract.models[this.#modelName] as MongoModelDefinition;\n const collection = resolveCollection(model, this.#modelName as string);\n const filter = options?.where ? (options.where as unknown as MongoExpr) : undefined;\n const include = options?.include as Record<string, true> | undefined;\n\n const hasIncludes = include && Object.keys(include).length > 0;\n\n let plan: MongoQueryPlan;\n if (hasIncludes) {\n const pipeline: Record<string, unknown>[] = [];\n\n if (filter && Object.keys(filter as Record<string, unknown>).length > 0) {\n pipeline.push({ $match: filter });\n }\n\n pipeline.push(...buildLookupStages(this.#contract, model, include));\n\n plan = {\n command: new AggregateCommand(collection, pipeline),\n meta: stubMeta,\n };\n } else {\n plan = {\n command: new FindCommand(collection, filter),\n meta: stubMeta,\n };\n }\n\n return this.#executor.execute(plan);\n }\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] = new MongoCollectionImpl(\n contract,\n modelName as string & keyof TContract['models'],\n executor,\n );\n }\n\n return client as MongoOrmClient<TContract>;\n}\n"],"mappings":";;;AAoBA,MAAMA,WAAqB;CACzB,QAAQ;CACR,aAAa;CACb,MAAM;CACN,kBAAkB,EAAE;CACrB;AAED,SAAS,kBAAkB,OAA6B,WAA2B;AACjF,QAAO,MAAM,QAAQ,cAAc;;AAGrC,SAAS,kBACP,UACA,OACA,SAC2B;CAC3B,MAAMC,SAAoC,EAAE;AAE5C,MAAK,MAAM,CAAC,SAAS,kBAAkB,OAAO,QAAQ,QAAQ,EAAE;AAC9D,MAAI,CAAC,cAAe;EAEpB,MAAM,WAAW,MAAM,YAAY;AACnC,MAAI,CAAC,SAAU;EAEf,MAAM,cAAc,SAAS,OAAO,SAAS;AAC7C,MAAI,CAAC,eAAe,YAAY,MAAO;EAEvC,MAAM,MAAM;AAEZ,MAAI,IAAI,GAAG,YAAY,WAAW,KAAK,IAAI,GAAG,aAAa,WAAW,EACpE,OAAM,IAAI,MACR,wDAAwD,QAAQ,QAAQ,IAAI,GAAG,YAAY,OAAO,sBAAsB,IAAI,GAAG,aAAa,OAAO,kBACpJ;EAGH,MAAM,mBAAmB,kBAAkB,aAAa,IAAI,GAAG;AAE/D,SAAO,KAAK,EACV,SAAS;GACP,MAAM;GACN,YAAY,IAAI,GAAG,YAAY;GAC/B,cAAc,IAAI,GAAG,aAAa;GAClC,IAAI;GACL,EACF,CAAC;AAEF,MAAI,IAAI,gBAAgB,SAAS,IAAI,gBAAgB,MACnD,QAAO,KAAK,EACV,SAAS;GACP,MAAM,IAAI;GACV,4BAA4B;GAC7B,EACF,CAAC;;AAIN,QAAO;;AAGT,IAAM,sBAAN,MAGE;CACA,CAASC;CACT,CAASC;CACT,CAASC;CAET,YAAY,UAAqB,WAAsB,UAA8B;AACnF,QAAKF,WAAY;AACjB,QAAKC,YAAa;AAClB,QAAKC,WAAY;;CAGnB,SACE,SAC8B;EAC9B,MAAM,QAAQ,MAAKF,SAAU,OAAO,MAAKC;EACzC,MAAM,aAAa,kBAAkB,OAAO,MAAKA,UAAqB;EACtE,MAAM,SAAS,SAAS,QAAS,QAAQ,QAAiC;EAC1E,MAAM,UAAU,SAAS;EAEzB,MAAM,cAAc,WAAW,OAAO,KAAK,QAAQ,CAAC,SAAS;EAE7D,IAAIE;AACJ,MAAI,aAAa;GACf,MAAMC,WAAsC,EAAE;AAE9C,OAAI,UAAU,OAAO,KAAK,OAAkC,CAAC,SAAS,EACpE,UAAS,KAAK,EAAE,QAAQ,QAAQ,CAAC;AAGnC,YAAS,KAAK,GAAG,kBAAkB,MAAKJ,UAAW,OAAO,QAAQ,CAAC;AAEnE,UAAO;IACL,SAAS,IAAI,iBAAiB,YAAY,SAAS;IACnD,MAAM;IACP;QAED,QAAO;GACL,SAAS,IAAI,YAAY,YAAY,OAAO;GAC5C,MAAM;GACP;AAGH,SAAO,MAAKE,SAAU,QAAQ,KAAK;;;AAIvC,SAAgB,SACd,SAC2B;CAC3B,MAAM,EAAE,UAAU,aAAa;CAC/B,MAAMG,SAAkC,EAAE;AAE1C,MAAK,MAAM,CAAC,UAAU,cAAc,OAAO,QAAQ,SAAS,MAAM,CAChE,QAAO,YAAY,IAAI,oBACrB,UACA,WACA,SACD;AAGH,QAAO"}
package/package.json CHANGED
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "name": "@prisma-next/mongo-orm",
3
- "version": "0.3.0-dev.130",
3
+ "version": "0.3.0-dev.132",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "description": "MongoDB ORM client for Prisma Next",
7
7
  "dependencies": {
8
- "@prisma-next/contract": "0.3.0-dev.130",
9
- "@prisma-next/mongo-core": "0.3.0-dev.130",
10
- "@prisma-next/runtime-executor": "0.3.0-dev.130"
8
+ "@prisma-next/contract": "0.3.0-dev.132",
9
+ "@prisma-next/mongo-core": "0.3.0-dev.132",
10
+ "@prisma-next/runtime-executor": "0.3.0-dev.132"
11
11
  },
12
12
  "devDependencies": {
13
13
  "tsdown": "0.18.4",
14
14
  "typescript": "5.9.3",
15
15
  "vitest": "4.0.17",
16
- "@prisma-next/tsconfig": "0.0.0",
17
16
  "@prisma-next/test-utils": "0.0.1",
18
- "@prisma-next/tsdown": "0.0.0"
17
+ "@prisma-next/tsdown": "0.0.0",
18
+ "@prisma-next/tsconfig": "0.0.0"
19
19
  },
20
20
  "files": [
21
21
  "dist",
package/src/mongo-orm.ts CHANGED
@@ -39,7 +39,7 @@ function buildLookupStages(
39
39
  for (const [relName, shouldInclude] of Object.entries(include)) {
40
40
  if (!shouldInclude) continue;
41
41
 
42
- const relation = model.relations[relName];
42
+ const relation = model.relations?.[relName];
43
43
  if (!relation) continue;
44
44
 
45
45
  const targetModel = contract.models[relation.to];
package/src/types.ts CHANGED
@@ -1,8 +1,4 @@
1
- import type {
2
- DomainReferenceRelation,
3
- EmbedRelationKeys,
4
- ReferenceRelationKeys,
5
- } from '@prisma-next/contract/types';
1
+ import type { DomainReferenceRelation } from '@prisma-next/contract/types';
6
2
  import type {
7
3
  ExtractMongoCodecTypes,
8
4
  InferModelRow,
@@ -24,15 +20,44 @@ export interface MongoOrmOptions<TContract extends MongoContract> {
24
20
 
25
21
  type Simplify<T> = T extends unknown ? { [K in keyof T]: T[K] } : never;
26
22
 
23
+ type ModelRelations<
24
+ TContract extends MongoContract,
25
+ ModelName extends string & keyof TContract['models'],
26
+ > = NonNullable<TContract['models'][ModelName]['relations']>;
27
+
28
+ export type ReferenceRelationKeys<
29
+ TContract extends MongoContract,
30
+ ModelName extends string & keyof TContract['models'],
31
+ > = {
32
+ [K in keyof ModelRelations<TContract, ModelName>]: ModelRelations<
33
+ TContract,
34
+ ModelName
35
+ >[K] extends DomainReferenceRelation
36
+ ? K
37
+ : never;
38
+ }[keyof ModelRelations<TContract, ModelName>];
39
+
40
+ export type EmbedRelationKeys<
41
+ TContract extends MongoContract,
42
+ ModelName extends string & keyof TContract['models'],
43
+ > = {
44
+ [K in keyof ModelRelations<TContract, ModelName>]: ModelRelations<
45
+ TContract,
46
+ ModelName
47
+ >[K] extends DomainReferenceRelation
48
+ ? never
49
+ : K;
50
+ }[keyof ModelRelations<TContract, ModelName>];
51
+
27
52
  type EmbedRelationRowType<
28
53
  TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,
29
54
  ModelName extends string & keyof TContract['models'],
30
- RelKey extends keyof TContract['models'][ModelName]['relations'],
31
- > = TContract['models'][ModelName]['relations'][RelKey] extends {
55
+ RelKey extends keyof ModelRelations<TContract, ModelName>,
56
+ > = ModelRelations<TContract, ModelName>[RelKey] extends {
32
57
  readonly to: infer To extends string & keyof TContract['models'];
33
58
  readonly cardinality: infer C;
34
59
  }
35
- ? TContract['models'][ModelName]['relations'][RelKey] extends DomainReferenceRelation
60
+ ? ModelRelations<TContract, ModelName>[RelKey] extends DomainReferenceRelation
36
61
  ? never
37
62
  : C extends '1:N'
38
63
  ? InferModelRow<TContract, To>[]
@@ -46,11 +71,7 @@ export type InferFullRow<
46
71
  ? InferModelRow<TContract, ModelName>
47
72
  : InferModelRow<TContract, ModelName> & {
48
73
  -readonly [K in EmbedRelationKeys<TContract, ModelName> &
49
- keyof TContract['models'][ModelName]['relations']]: EmbedRelationRowType<
50
- TContract,
51
- ModelName,
52
- K
53
- >;
74
+ keyof ModelRelations<TContract, ModelName>]: EmbedRelationRowType<TContract, ModelName, K>;
54
75
  };
55
76
 
56
77
  type VariantRow<
@@ -81,9 +102,9 @@ export type InferRootRow<
81
102
  type IncludeRelationRowType<
82
103
  TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,
83
104
  ModelName extends string & keyof TContract['models'],
84
- RelKey extends keyof TContract['models'][ModelName]['relations'],
85
- > = TContract['models'][ModelName]['relations'][RelKey] extends DomainReferenceRelation
86
- ? TContract['models'][ModelName]['relations'][RelKey] extends {
105
+ RelKey extends keyof ModelRelations<TContract, ModelName>,
106
+ > = ModelRelations<TContract, ModelName>[RelKey] extends DomainReferenceRelation
107
+ ? ModelRelations<TContract, ModelName>[RelKey] extends {
87
108
  readonly to: infer To extends string & keyof TContract['models'];
88
109
  readonly cardinality: infer C;
89
110
  }
@@ -100,7 +121,7 @@ export type IncludeResultFields<
100
121
  > = {
101
122
  -readonly [K in keyof TInclude & string as TInclude[K] extends true
102
123
  ? K
103
- : never]: K extends keyof TContract['models'][ModelName]['relations']
124
+ : never]: K extends keyof ModelRelations<TContract, ModelName>
104
125
  ? IncludeRelationRowType<TContract, ModelName, K>
105
126
  : never;
106
127
  };