@prisma-next/mongo-orm 0.3.0-dev.128 → 0.3.0-dev.129

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,4 +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
3
  import { AsyncIterableResult } from "@prisma-next/runtime-executor";
3
4
 
4
5
  //#region src/types.d.ts
@@ -10,17 +11,10 @@ interface MongoOrmOptions<TContract extends MongoContract> {
10
11
  readonly executor: MongoQueryExecutor;
11
12
  }
12
13
  type Simplify<T> = T extends unknown ? { [K in keyof T]: T[K] } : never;
13
- type ReferenceRelationKeys<TContract extends MongoContract, ModelName extends string & keyof TContract['models']> = { [K in keyof TContract['models'][ModelName]['relations']]: TContract['models'][ModelName]['relations'][K] extends {
14
- readonly strategy: 'reference';
15
- } ? K : never }[keyof TContract['models'][ModelName]['relations']];
16
- type EmbedRelationKeys<TContract extends MongoContract, ModelName extends string & keyof TContract['models']> = { [K in keyof TContract['models'][ModelName]['relations']]: TContract['models'][ModelName]['relations'][K] extends {
17
- readonly strategy: 'embed';
18
- } ? K : never }[keyof TContract['models'][ModelName]['relations']];
19
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 {
20
15
  readonly to: infer To extends string & keyof TContract['models'];
21
16
  readonly cardinality: infer C;
22
- readonly strategy: 'embed';
23
- } ? C extends '1:N' ? InferModelRow<TContract, To>[] : InferModelRow<TContract, To> : never;
17
+ } ? TContract['models'][ModelName]['relations'][RelKey] extends DomainReferenceRelation ? never : C extends '1:N' ? InferModelRow<TContract, To>[] : InferModelRow<TContract, To> : never;
24
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> };
25
19
  type VariantRow<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>, ModelName extends string & keyof TContract['models']> = TContract['models'][ModelName] extends {
26
20
  readonly discriminator: {
@@ -31,11 +25,10 @@ type VariantRow<TContract extends MongoContractWithTypeMaps<MongoContract, Mongo
31
25
  readonly value: string;
32
26
  }> ? { [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>;
33
27
  type InferRootRow<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>, ModelName extends string & keyof TContract['models']> = VariantRow<TContract, ModelName>;
34
- 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 {
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 {
35
29
  readonly to: infer To extends string & keyof TContract['models'];
36
30
  readonly cardinality: infer C;
37
- readonly strategy: 'reference';
38
- } ? C extends 'N:1' | '1:1' ? InferFullRow<TContract, To> | null : InferFullRow<TContract, To>[] : never;
31
+ } ? C extends 'N:1' | '1:1' ? InferFullRow<TContract, To> | null : InferFullRow<TContract, To>[] : never : never;
39
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 };
40
33
  type MongoWhereFilter<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>, ModelName extends string & keyof TContract['models'], TCodecTypes extends Record<string, {
41
34
  output: unknown;
@@ -55,5 +48,5 @@ interface MongoCollection<TContract extends MongoContractWithTypeMaps<MongoContr
55
48
  //#region src/mongo-orm.d.ts
56
49
  declare function mongoOrm<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>>(options: MongoOrmOptions<TContract>): MongoOrmClient<TContract>;
57
50
  //#endregion
58
- export { type EmbedRelationKeys, type IncludeResultFields, type InferFullRow, type InferRootRow, type MongoCollection, type MongoFindManyOptions, type MongoIncludeSpec, type MongoOrmClient, type MongoOrmOptions, type MongoQueryExecutor, type MongoWhereFilter, type ReferenceRelationKeys, mongoOrm };
51
+ export { type IncludeResultFields, type InferFullRow, type InferRootRow, type MongoCollection, type MongoFindManyOptions, type MongoIncludeSpec, type MongoOrmClient, type MongoOrmOptions, type MongoQueryExecutor, type MongoWhereFilter, mongoOrm };
59
52
  //# sourceMappingURL=index.d.mts.map
@@ -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
@@ -15,19 +15,19 @@ function buildLookupStages(contract, model, include) {
15
15
  for (const [relName, shouldInclude] of Object.entries(include)) {
16
16
  if (!shouldInclude) continue;
17
17
  const relation = model.relations[relName];
18
- if (!relation || relation.strategy !== "reference") continue;
19
- const refRelation = relation;
20
- if (refRelation.on.localFields.length !== 1 || refRelation.on.targetFields.length !== 1) throw new Error(`Compound references are not yet supported: relation "${relName}" has ${refRelation.on.localFields.length} local field(s) and ${refRelation.on.targetFields.length} target field(s)`);
21
- const targetModel = contract.models[refRelation.to];
22
- if (!targetModel) continue;
23
- const targetCollection = resolveCollection(targetModel, refRelation.to);
18
+ if (!relation) continue;
19
+ const targetModel = contract.models[relation.to];
20
+ if (!targetModel || targetModel.owner) continue;
21
+ const ref = relation;
22
+ if (ref.on.localFields.length !== 1 || ref.on.targetFields.length !== 1) throw new Error(`Compound references are not yet supported: relation "${relName}" has ${ref.on.localFields.length} local field(s) and ${ref.on.targetFields.length} target field(s)`);
23
+ const targetCollection = resolveCollection(targetModel, ref.to);
24
24
  stages.push({ $lookup: {
25
25
  from: targetCollection,
26
- localField: refRelation.on.localFields[0],
27
- foreignField: refRelation.on.targetFields[0],
26
+ localField: ref.on.localFields[0],
27
+ foreignField: ref.on.targetFields[0],
28
28
  as: relName
29
29
  } });
30
- if (refRelation.cardinality === "N:1" || refRelation.cardinality === "1:1") stages.push({ $unwind: {
30
+ if (ref.cardinality === "N:1" || ref.cardinality === "1:1") stages.push({ $unwind: {
31
31
  path: `$${relName}`,
32
32
  preserveNullAndEmptyArrays: true
33
33
  } });
@@ -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 { 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 MongoReferenceRelation,\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 || relation.strategy !== 'reference') continue;\n\n const refRelation = relation as MongoReferenceRelation;\n\n if (refRelation.on.localFields.length !== 1 || refRelation.on.targetFields.length !== 1) {\n throw new Error(\n `Compound references are not yet supported: relation \"${relName}\" has ${refRelation.on.localFields.length} local field(s) and ${refRelation.on.targetFields.length} target field(s)`,\n );\n }\n\n const targetModel = contract.models[refRelation.to];\n if (!targetModel) continue;\n\n const targetCollection = resolveCollection(targetModel, refRelation.to);\n\n stages.push({\n $lookup: {\n from: targetCollection,\n localField: refRelation.on.localFields[0],\n foreignField: refRelation.on.targetFields[0],\n as: relName,\n },\n });\n\n if (refRelation.cardinality === 'N:1' || refRelation.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":";;;AAqBA,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,YAAY,SAAS,aAAa,YAAa;EAEpD,MAAM,cAAc;AAEpB,MAAI,YAAY,GAAG,YAAY,WAAW,KAAK,YAAY,GAAG,aAAa,WAAW,EACpF,OAAM,IAAI,MACR,wDAAwD,QAAQ,QAAQ,YAAY,GAAG,YAAY,OAAO,sBAAsB,YAAY,GAAG,aAAa,OAAO,kBACpK;EAGH,MAAM,cAAc,SAAS,OAAO,YAAY;AAChD,MAAI,CAAC,YAAa;EAElB,MAAM,mBAAmB,kBAAkB,aAAa,YAAY,GAAG;AAEvE,SAAO,KAAK,EACV,SAAS;GACP,MAAM;GACN,YAAY,YAAY,GAAG,YAAY;GACvC,cAAc,YAAY,GAAG,aAAa;GAC1C,IAAI;GACL,EACF,CAAC;AAEF,MAAI,YAAY,gBAAgB,SAAS,YAAY,gBAAgB,MACnE,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,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"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@prisma-next/mongo-orm",
3
- "version": "0.3.0-dev.128",
3
+ "version": "0.3.0-dev.129",
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.128",
9
- "@prisma-next/mongo-core": "0.3.0-dev.128",
10
- "@prisma-next/runtime-executor": "0.3.0-dev.128"
8
+ "@prisma-next/contract": "0.3.0-dev.129",
9
+ "@prisma-next/mongo-core": "0.3.0-dev.129",
10
+ "@prisma-next/runtime-executor": "0.3.0-dev.129"
11
11
  },
12
12
  "devDependencies": {
13
13
  "tsdown": "0.18.4",
@@ -1,6 +1,5 @@
1
1
  export { mongoOrm } from '../mongo-orm';
2
2
  export type {
3
- EmbedRelationKeys,
4
3
  IncludeResultFields,
5
4
  InferFullRow,
6
5
  InferRootRow,
@@ -11,5 +10,4 @@ export type {
11
10
  MongoOrmOptions,
12
11
  MongoQueryExecutor,
13
12
  MongoWhereFilter,
14
- ReferenceRelationKeys,
15
13
  } from '../types';
package/src/mongo-orm.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { PlanMeta } from '@prisma-next/contract/types';
1
+ import type { DomainReferenceRelation, PlanMeta } from '@prisma-next/contract/types';
2
2
  import {
3
3
  AggregateCommand,
4
4
  FindCommand,
@@ -7,7 +7,6 @@ import {
7
7
  type MongoExpr,
8
8
  type MongoModelDefinition,
9
9
  type MongoQueryPlan,
10
- type MongoReferenceRelation,
11
10
  type MongoTypeMaps,
12
11
  } from '@prisma-next/mongo-core';
13
12
  import type { AsyncIterableResult } from '@prisma-next/runtime-executor';
@@ -41,31 +40,31 @@ function buildLookupStages(
41
40
  if (!shouldInclude) continue;
42
41
 
43
42
  const relation = model.relations[relName];
44
- if (!relation || relation.strategy !== 'reference') continue;
43
+ if (!relation) continue;
45
44
 
46
- const refRelation = relation as MongoReferenceRelation;
45
+ const targetModel = contract.models[relation.to];
46
+ if (!targetModel || targetModel.owner) continue;
47
47
 
48
- if (refRelation.on.localFields.length !== 1 || refRelation.on.targetFields.length !== 1) {
48
+ const ref = relation as DomainReferenceRelation;
49
+
50
+ if (ref.on.localFields.length !== 1 || ref.on.targetFields.length !== 1) {
49
51
  throw new Error(
50
- `Compound references are not yet supported: relation "${relName}" has ${refRelation.on.localFields.length} local field(s) and ${refRelation.on.targetFields.length} target field(s)`,
52
+ `Compound references are not yet supported: relation "${relName}" has ${ref.on.localFields.length} local field(s) and ${ref.on.targetFields.length} target field(s)`,
51
53
  );
52
54
  }
53
55
 
54
- const targetModel = contract.models[refRelation.to];
55
- if (!targetModel) continue;
56
-
57
- const targetCollection = resolveCollection(targetModel, refRelation.to);
56
+ const targetCollection = resolveCollection(targetModel, ref.to);
58
57
 
59
58
  stages.push({
60
59
  $lookup: {
61
60
  from: targetCollection,
62
- localField: refRelation.on.localFields[0],
63
- foreignField: refRelation.on.targetFields[0],
61
+ localField: ref.on.localFields[0],
62
+ foreignField: ref.on.targetFields[0],
64
63
  as: relName,
65
64
  },
66
65
  });
67
66
 
68
- if (refRelation.cardinality === 'N:1' || refRelation.cardinality === '1:1') {
67
+ if (ref.cardinality === 'N:1' || ref.cardinality === '1:1') {
69
68
  stages.push({
70
69
  $unwind: {
71
70
  path: `$${relName}`,
package/src/types.ts CHANGED
@@ -1,3 +1,8 @@
1
+ import type {
2
+ DomainReferenceRelation,
3
+ EmbedRelationKeys,
4
+ ReferenceRelationKeys,
5
+ } from '@prisma-next/contract/types';
1
6
  import type {
2
7
  ExtractMongoCodecTypes,
3
8
  InferModelRow,
@@ -19,32 +24,6 @@ export interface MongoOrmOptions<TContract extends MongoContract> {
19
24
 
20
25
  type Simplify<T> = T extends unknown ? { [K in keyof T]: T[K] } : never;
21
26
 
22
- // --- Relation type helpers ---
23
-
24
- export type ReferenceRelationKeys<
25
- TContract extends MongoContract,
26
- ModelName extends string & keyof TContract['models'],
27
- > = {
28
- [K in keyof TContract['models'][ModelName]['relations']]: TContract['models'][ModelName]['relations'][K] extends {
29
- readonly strategy: 'reference';
30
- }
31
- ? K
32
- : never;
33
- }[keyof TContract['models'][ModelName]['relations']];
34
-
35
- export type EmbedRelationKeys<
36
- TContract extends MongoContract,
37
- ModelName extends string & keyof TContract['models'],
38
- > = {
39
- [K in keyof TContract['models'][ModelName]['relations']]: TContract['models'][ModelName]['relations'][K] extends {
40
- readonly strategy: 'embed';
41
- }
42
- ? K
43
- : never;
44
- }[keyof TContract['models'][ModelName]['relations']];
45
-
46
- // --- Embedded field types ---
47
-
48
27
  type EmbedRelationRowType<
49
28
  TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,
50
29
  ModelName extends string & keyof TContract['models'],
@@ -52,11 +31,12 @@ type EmbedRelationRowType<
52
31
  > = TContract['models'][ModelName]['relations'][RelKey] extends {
53
32
  readonly to: infer To extends string & keyof TContract['models'];
54
33
  readonly cardinality: infer C;
55
- readonly strategy: 'embed';
56
34
  }
57
- ? C extends '1:N'
58
- ? InferModelRow<TContract, To>[]
59
- : InferModelRow<TContract, To>
35
+ ? TContract['models'][ModelName]['relations'][RelKey] extends DomainReferenceRelation
36
+ ? never
37
+ : C extends '1:N'
38
+ ? InferModelRow<TContract, To>[]
39
+ : InferModelRow<TContract, To>
60
40
  : never;
61
41
 
62
42
  export type InferFullRow<
@@ -73,8 +53,6 @@ export type InferFullRow<
73
53
  >;
74
54
  };
75
55
 
76
- // --- Polymorphic row type ---
77
-
78
56
  type VariantRow<
79
57
  TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,
80
58
  ModelName extends string & keyof TContract['models'],
@@ -100,20 +78,19 @@ export type InferRootRow<
100
78
  ModelName extends string & keyof TContract['models'],
101
79
  > = VariantRow<TContract, ModelName>;
102
80
 
103
- // --- Include result type augmentation ---
104
-
105
81
  type IncludeRelationRowType<
106
82
  TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,
107
83
  ModelName extends string & keyof TContract['models'],
108
84
  RelKey extends keyof TContract['models'][ModelName]['relations'],
109
- > = TContract['models'][ModelName]['relations'][RelKey] extends {
110
- readonly to: infer To extends string & keyof TContract['models'];
111
- readonly cardinality: infer C;
112
- readonly strategy: 'reference';
113
- }
114
- ? C extends 'N:1' | '1:1'
115
- ? InferFullRow<TContract, To> | null
116
- : InferFullRow<TContract, To>[]
85
+ > = TContract['models'][ModelName]['relations'][RelKey] extends DomainReferenceRelation
86
+ ? TContract['models'][ModelName]['relations'][RelKey] extends {
87
+ readonly to: infer To extends string & keyof TContract['models'];
88
+ readonly cardinality: infer C;
89
+ }
90
+ ? C extends 'N:1' | '1:1'
91
+ ? InferFullRow<TContract, To> | null
92
+ : InferFullRow<TContract, To>[]
93
+ : never
117
94
  : never;
118
95
 
119
96
  export type IncludeResultFields<
@@ -128,8 +105,6 @@ export type IncludeResultFields<
128
105
  : never;
129
106
  };
130
107
 
131
- // --- Query options ---
132
-
133
108
  export type MongoWhereFilter<
134
109
  TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,
135
110
  ModelName extends string & keyof TContract['models'],
@@ -158,8 +133,6 @@ export interface MongoFindManyOptions<
158
133
  readonly include?: TInclude;
159
134
  }
160
135
 
161
- // --- Client types ---
162
-
163
136
  export type MongoOrmClient<
164
137
  TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,
165
138
  > = {