@prisma-next/mongo-contract-ts 0.11.0-dev.32 → 0.11.0-dev.34

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.
@@ -1,5 +1,5 @@
1
- import { ContractConfig, ContractConfig as ContractConfig$1 } from "@prisma-next/config/config-types";
2
1
  import { Contract } from "@prisma-next/contract/types";
2
+ import { ContractConfig, ContractConfig as ContractConfig$1 } from "@prisma-next/config/config-types";
3
3
 
4
4
  //#region src/config-types.d.ts
5
5
  declare function typescriptContract(contract: Contract, output?: string): ContractConfig$1;
@@ -1,6 +1,6 @@
1
+ import { ContractFieldType, CrossReference, ProfileHashBase, StorageHashBase } from "@prisma-next/contract/types";
1
2
  import { EntityHelpersFromNamespace, ExtractAuthoringNamespaceFromPack, MergeExtensionAuthoringNamespaces } from "@prisma-next/contract-authoring";
2
3
  import { MongoCollection, MongoCollectionOptionsAuthoringInput, MongoContractWithTypeMaps, MongoIndexAuthoringInput, MongoIndexFields, MongoIndexOptionsInput, MongoStorageShape, MongoTypeMaps } from "@prisma-next/mongo-contract";
3
- import { ContractFieldType, ProfileHashBase, StorageHashBase } from "@prisma-next/contract/types";
4
4
  import { ExtensionPackRef, FamilyPackRef, TargetPackRef } from "@prisma-next/framework-components/components";
5
5
 
6
6
  //#region src/contract-builder.d.ts
@@ -149,11 +149,11 @@ type ContractValueObjectFromBuilder<TBuilder> = TBuilder extends ValueObjectBuil
149
149
  }> : never;
150
150
  type ContractValueObjectsFromRecord<ValueObjects extends Record<string, AnyValueObjectBuilder>> = Simplify<{ readonly [K in keyof ValueObjects as ExtractValueObjectName<ValueObjects[K]>]: ContractValueObjectFromBuilder<ValueObjects[K]> }>;
151
151
  type ContractRelationFromBuilder<TBuilder> = TBuilder extends RelationBuilder<infer To extends string, infer Cardinality extends '1:1' | '1:N' | 'N:1', infer On extends RelationOn | undefined> ? On extends RelationOn ? {
152
- readonly to: To;
152
+ readonly to: CrossRefFor<To>;
153
153
  readonly cardinality: Cardinality;
154
154
  readonly on: On;
155
155
  } : {
156
- readonly to: To;
156
+ readonly to: CrossRefFor<To>;
157
157
  readonly cardinality: Cardinality;
158
158
  } : never;
159
159
  type ContractRelationsFromRecord<Relations extends Record<string, AnyRelationBuilder>> = keyof Relations extends never ? Record<string, never> : Simplify<{ readonly [K in keyof Relations]: ContractRelationFromBuilder<Relations[K]> }>;
@@ -162,7 +162,7 @@ type MaybeOwner<Owner> = [Owner] extends [undefined] ? EmptyObject : {
162
162
  readonly owner: Owner & string;
163
163
  };
164
164
  type MaybeBase<Base> = [Base] extends [undefined] ? EmptyObject : {
165
- readonly base: Base & string;
165
+ readonly base: CrossRefFor<Base & string>;
166
166
  };
167
167
  type MaybeDiscriminator<Discriminator> = [Discriminator] extends [undefined] ? EmptyObject : {
168
168
  readonly discriminator: Discriminator & {
@@ -178,9 +178,12 @@ type ContractModelFromBuilder<TBuilder> = TBuilder extends NamedModelBuilder<str
178
178
  readonly storage: ContractModelStorageFromBuilder<TBuilder>;
179
179
  } & MaybeOwner<Owner> & MaybeBase<Base> & MaybeDiscriminator<Discriminator> & MaybeVariants<Variants>> : never;
180
180
  type ContractModelsFromRecord<Models extends Record<string, AnyModelBuilder>> = Simplify<{ readonly [K in keyof Models as ExtractModelName<Models[K]>]: ContractModelFromBuilder<Models[K]> }>;
181
- type DerivedRootModels<Models extends Record<string, AnyModelBuilder>> = Simplify<{ readonly [K in keyof Models as RootModelCollection<Models[K]>]: RootModelName<Models[K]> }>;
181
+ type CrossRefFor<M extends string> = CrossReference & {
182
+ readonly model: M;
183
+ };
184
+ type DerivedRootModels<Models extends Record<string, AnyModelBuilder>> = Simplify<{ readonly [K in keyof Models as RootModelCollection<Models[K]>]: CrossRefFor<RootModelName<Models[K]>> }>;
182
185
  type StorageCollectionsFromModels<Models extends Record<string, AnyModelBuilder>> = Simplify<{ readonly [K in keyof Models as CollectionName<Models[K]>]: MongoCollection }>;
183
- type NormalizeRoots<Roots extends Record<string, ModelNameInput>> = Simplify<{ readonly [K in keyof Roots]: NormalizeModelName<Roots[K]> }>;
186
+ type NormalizeRoots<Roots extends Record<string, ModelNameInput>> = Simplify<{ readonly [K in keyof Roots]: CrossRefFor<NormalizeModelName<Roots[K]>> }>;
184
187
  type DefinitionModels<Definition> = Definition extends {
185
188
  readonly models?: infer Models extends Record<string, AnyModelBuilder>;
186
189
  } ? Models : Record<never, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"contract-builder.d.mts","names":[],"sources":["../src/contract-builder.ts"],"mappings":"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"}
1
+ {"version":3,"file":"contract-builder.d.mts","names":[],"sources":["../src/contract-builder.ts"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { computeProfileHash, computeStorageHash } from "@prisma-next/contract/hashing";
2
+ import { crossRef } from "@prisma-next/contract/types";
2
3
  import { createEntityHelpersFromNamespace } from "@prisma-next/contract-authoring";
3
4
  import { assertNoCrossRegistryCollisions, isAuthoringEntityTypeDescriptor, mergeAuthoringNamespaces } from "@prisma-next/framework-components/authoring";
4
5
  import { UNBOUND_NAMESPACE_ID } from "@prisma-next/framework-components/ir";
@@ -245,12 +246,13 @@ function buildFields(fields) {
245
246
  return builtFields;
246
247
  }
247
248
  function buildRelation(relationBuilder) {
249
+ const to = crossRef(relationBuilder.__to, UNBOUND_NAMESPACE_ID);
248
250
  return relationBuilder.__on ? {
249
- to: relationBuilder.__to,
251
+ to,
250
252
  cardinality: relationBuilder.__cardinality,
251
253
  on: relationBuilder.__on
252
254
  } : {
253
- to: relationBuilder.__to,
255
+ to,
254
256
  cardinality: relationBuilder.__cardinality
255
257
  };
256
258
  }
@@ -280,7 +282,7 @@ function buildModels(models) {
280
282
  relations: buildRelations(modelBuilder.__relations),
281
283
  storage,
282
284
  ...modelBuilder.__owner ? { owner: modelBuilder.__owner } : {},
283
- ...modelBuilder.__base ? { base: modelBuilder.__base } : {},
285
+ ...modelBuilder.__base ? { base: crossRef(modelBuilder.__base, UNBOUND_NAMESPACE_ID) } : {},
284
286
  ...modelBuilder.__discriminator ? { discriminator: modelBuilder.__discriminator } : {},
285
287
  ...modelBuilder.__variants ? { variants: modelBuilder.__variants } : {}
286
288
  };
@@ -291,13 +293,13 @@ function deriveRoots(models) {
291
293
  const roots = {};
292
294
  for (const modelBuilder of Object.values(models ?? {})) {
293
295
  if (!modelBuilder.__collection || modelBuilder.__owner || modelBuilder.__base) continue;
294
- roots[modelBuilder.__collection] = modelBuilder.__name;
296
+ roots[modelBuilder.__collection] = crossRef(modelBuilder.__name, UNBOUND_NAMESPACE_ID);
295
297
  }
296
298
  return roots;
297
299
  }
298
300
  function normalizeRoots(roots) {
299
301
  const normalizedRoots = {};
300
- for (const [rootName, rootValue] of Object.entries(roots ?? {})) normalizedRoots[rootName] = resolveModelName(rootValue);
302
+ for (const [rootName, rootValue] of Object.entries(roots ?? {})) normalizedRoots[rootName] = crossRef(resolveModelName(rootValue), UNBOUND_NAMESPACE_ID);
301
303
  return normalizedRoots;
302
304
  }
303
305
  function toStorageIndex(index) {
@@ -1 +1 @@
1
- {"version":3,"file":"contract-builder.mjs","names":[],"sources":["../src/contract-builder.ts"],"sourcesContent":["import { computeProfileHash, computeStorageHash } from '@prisma-next/contract/hashing';\nimport type {\n ContractEmbedRelation,\n ContractField,\n ContractFieldType,\n ContractReferenceRelation,\n ContractValueObject,\n ProfileHashBase,\n StorageHashBase,\n} from '@prisma-next/contract/types';\nimport {\n createEntityHelpersFromNamespace,\n type EntityHelpersFromNamespace,\n type ExtractAuthoringNamespaceFromPack,\n type MergeExtensionAuthoringNamespaces,\n} from '@prisma-next/contract-authoring';\nimport type { AuthoringEntityTypeNamespace } from '@prisma-next/framework-components/authoring';\nimport {\n assertNoCrossRegistryCollisions,\n isAuthoringEntityTypeDescriptor,\n mergeAuthoringNamespaces,\n} from '@prisma-next/framework-components/authoring';\nimport type {\n ExtensionPackRef,\n FamilyPackRef,\n TargetPackRef,\n} from '@prisma-next/framework-components/components';\nimport { UNBOUND_NAMESPACE_ID } from '@prisma-next/framework-components/ir';\nimport {\n applyPolymorphicScopeToMongoIndex,\n MongoCollection,\n type MongoCollectionInput,\n MongoCollectionOptions,\n type MongoCollectionOptionsAuthoringInput,\n type MongoCollectionOptionsInput,\n type MongoContract,\n type MongoContractWithTypeMaps,\n MongoIndex,\n type MongoIndexAuthoringInput,\n type MongoIndexFields,\n type MongoIndexInput,\n type MongoIndexOptionsInput,\n MongoStorage,\n type MongoStorageShape,\n type MongoTypeMaps,\n} from '@prisma-next/mongo-contract';\nimport { canonicalStringify } from '@prisma-next/utils/canonical-stringify';\n\n// `canonicalStringify` rejects non-plain objects so a `Map` or class\n// instance cannot silently collapse to `{}`. The storage-shape values\n// produced by `toStorageIndex` post-M2-R2 are `MongoIndex` class\n// instances (see ADR for the storage-map class flip / FR18), which\n// trips that guard. This local helper produces the same key-sorted,\n// JSON-like representation `canonicalStringify` produces for plain\n// objects, but accepts class instances by reading their enumerable\n// properties via `Object.entries`. The output is only used as an\n// in-memory dedup signature for collection indexes; it never leaves\n// the builder.\nfunction stableStringify(value: unknown): string {\n if (Array.isArray(value)) {\n return `[${value.map(stableStringify).join(',')}]`;\n }\n\n if (value && typeof value === 'object') {\n return `{${Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => `${JSON.stringify(key)}:${stableStringify(entry)}`)\n .join(',')}}`;\n }\n\n return JSON.stringify(value);\n}\n\ntype VariantSpec = {\n readonly value: string;\n};\n\ntype StorageRelationSpec = {\n readonly field: string;\n};\n\ntype StringListInput = string | readonly string[];\ntype Present<T> = Exclude<T, undefined>;\ntype EmptyObject = Record<never, never>;\ntype Simplify<T> = { [K in keyof T]: T[K] } & EmptyObject;\ntype StrictShape<Actual, Shape> = Actual &\n Shape &\n Record<Exclude<keyof Actual, keyof Shape>, never>;\n\ntype UnionToIntersection<Union> = (Union extends unknown ? (value: Union) => void : never) extends (\n value: infer Intersection,\n) => void\n ? Intersection\n : never;\n\nexport type ExtractCodecTypesFromPack<P> = P extends { __codecTypes?: infer CodecTypes }\n ? CodecTypes extends Record<string, { output: unknown }>\n ? CodecTypes\n : Record<string, never>\n : Record<string, never>;\n\n// This mirrors @prisma-next/target-mongo/codec-types because authoring must stay decoupled from\n// the target layer while still exposing the built-in Mongo codec registry to type inference.\ntype MongoCodecTypes = {\n readonly 'mongo/objectId@1': { readonly input: string; readonly output: string };\n readonly 'mongo/string@1': { readonly input: string; readonly output: string };\n readonly 'mongo/double@1': { readonly input: number; readonly output: number };\n readonly 'mongo/int32@1': { readonly input: number; readonly output: number };\n readonly 'mongo/bool@1': { readonly input: boolean; readonly output: boolean };\n readonly 'mongo/date@1': { readonly input: Date; readonly output: Date };\n readonly 'mongo/vector@1': {\n readonly input: readonly number[];\n readonly output: readonly number[];\n };\n};\n\ntype MergeExtensionCodecTypes<Packs extends Record<string, unknown>> = UnionToIntersection<\n {\n [K in keyof Packs]: ExtractCodecTypesFromPack<Packs[K]>;\n }[keyof Packs]\n>;\n\ntype MergeExtensionCodecTypesSafe<Packs> =\n Packs extends Record<string, unknown>\n ? keyof Packs extends never\n ? Record<string, never>\n : MergeExtensionCodecTypes<Packs>\n : Record<string, never>;\n\nexport interface FieldBuilder<\n Type extends ContractFieldType = ContractFieldType,\n Nullable extends boolean = boolean,\n Many extends boolean = boolean,\n> {\n readonly __kind: 'field';\n readonly __type: Type;\n readonly __nullable: Nullable;\n readonly __many: Many;\n optional(): FieldBuilder<Type, true, Many>;\n many(): FieldBuilder<Type, Nullable, true>;\n}\n\nexport interface ValueObjectBuilder<\n Name extends string = string,\n Fields extends Record<string, FieldBuilder> = Record<string, FieldBuilder>,\n> {\n readonly __kind: 'valueObject';\n readonly __name: Name;\n readonly __fields: Fields;\n}\n\nexport interface FieldReference<\n ModelName extends string = string,\n FieldName extends string = string,\n> {\n readonly __kind: 'fieldRef';\n readonly modelName: ModelName;\n readonly fieldName: FieldName;\n}\n\nexport interface RelationOn<\n LocalFields extends readonly string[] = readonly string[],\n TargetFields extends readonly string[] = readonly string[],\n> {\n readonly localFields: LocalFields;\n readonly targetFields: TargetFields;\n}\n\nexport interface RelationBuilder<\n To extends string = string,\n Cardinality extends '1:1' | '1:N' | 'N:1' = '1:1' | '1:N' | 'N:1',\n On extends RelationOn | undefined = RelationOn | undefined,\n> {\n readonly __kind: 'relation';\n readonly __to: To;\n readonly __cardinality: Cardinality;\n readonly __on: On;\n}\n\nexport interface ModelBuilder<\n Name extends string = string,\n Fields extends Record<string, FieldBuilder> = Record<string, FieldBuilder>,\n Relations extends Record<string, RelationBuilder> = Record<string, RelationBuilder>,\n Collection extends string | undefined = string | undefined,\n Owner extends string | undefined = string | undefined,\n Base extends string | undefined = string | undefined,\n StorageRelations extends Record<string, StorageRelationSpec> | undefined =\n | Record<string, StorageRelationSpec>\n | undefined,\n Discriminator extends { readonly field: string } | undefined =\n | { readonly field: string }\n | undefined,\n Variants extends Record<string, VariantSpec> | undefined =\n | Record<string, VariantSpec>\n | undefined,\n> {\n readonly __kind: 'model';\n readonly __name: Name;\n readonly __fields: Fields;\n readonly __relations: Relations;\n readonly __indexes: readonly MongoIndexAuthoringInput[] | undefined;\n readonly __collectionOptions: MongoCollectionOptionsAuthoringInput | undefined;\n readonly __collection: Collection;\n readonly __owner: Owner;\n readonly __base: Base;\n readonly __storageRelations: StorageRelations;\n readonly __discriminator: Discriminator;\n readonly __variants: Variants;\n ref<const FieldName extends keyof Fields & string>(\n fieldName: FieldName,\n ): FieldReference<Name, FieldName>;\n}\n\ntype AnyFieldBuilder = FieldBuilder<ContractFieldType, boolean, boolean>;\ntype AnyReferenceRelationBuilder = RelationBuilder<string, '1:1' | '1:N' | 'N:1', RelationOn>;\ntype AnyEmbedRelationBuilder = RelationBuilder<string, '1:1' | '1:N', undefined>;\ntype AnyRelationBuilder = AnyReferenceRelationBuilder | AnyEmbedRelationBuilder;\ntype AnyFieldReference = FieldReference<string, string>;\ntype NamedValueObjectBuilder<\n Name extends string = string,\n Fields extends Record<string, AnyFieldBuilder> = Record<string, AnyFieldBuilder>,\n> = ValueObjectBuilder<Name, Fields>;\ntype AnyValueObjectBuilder = NamedValueObjectBuilder;\ntype NamedModelBuilder<\n Name extends string = string,\n Fields extends Record<string, AnyFieldBuilder> = Record<string, AnyFieldBuilder>,\n Relations extends Record<string, AnyRelationBuilder> = Record<string, AnyRelationBuilder>,\n Collection extends string | undefined = string | undefined,\n Owner extends string | undefined = string | undefined,\n Base extends string | undefined = string | undefined,\n StorageRelations extends Record<string, StorageRelationSpec> | undefined =\n | Record<string, StorageRelationSpec>\n | undefined,\n Discriminator extends { readonly field: string } | undefined =\n | { readonly field: string }\n | undefined,\n Variants extends Record<string, VariantSpec> | undefined =\n | Record<string, VariantSpec>\n | undefined,\n> = ModelBuilder<\n Name,\n Fields,\n Relations,\n Collection,\n Owner,\n Base,\n StorageRelations,\n Discriminator,\n Variants\n>;\ntype AnyModelBuilder = NamedModelBuilder;\n\ntype ExtractFieldReferenceName<T> =\n T extends FieldReference<string, infer FieldName extends string> ? FieldName : never;\ntype ExtractModelName<T> = T extends NamedModelBuilder<infer Name> ? Name : never;\ntype ExtractValueObjectName<T> = T extends NamedValueObjectBuilder<infer Name> ? Name : never;\ntype ExtractModelCollection<T> =\n T extends NamedModelBuilder<\n string,\n Record<string, AnyFieldBuilder>,\n Record<string, AnyRelationBuilder>,\n infer Collection\n >\n ? Collection\n : never;\ntype ExtractModelOwner<T> =\n T extends NamedModelBuilder<\n string,\n Record<string, AnyFieldBuilder>,\n Record<string, AnyRelationBuilder>,\n string | undefined,\n infer Owner\n >\n ? Owner\n : never;\ntype ExtractModelBase<T> =\n T extends NamedModelBuilder<\n string,\n Record<string, AnyFieldBuilder>,\n Record<string, AnyRelationBuilder>,\n string | undefined,\n string | undefined,\n infer Base\n >\n ? Base\n : never;\ntype ExtractModelStorageRelations<T> =\n T extends NamedModelBuilder<\n string,\n Record<string, AnyFieldBuilder>,\n Record<string, AnyRelationBuilder>,\n string | undefined,\n string | undefined,\n string | undefined,\n infer StorageRelations\n >\n ? StorageRelations\n : never;\n\ntype ModelStorageSection<T> =\n ExtractModelCollection<T> extends string\n ? { readonly collection: ExtractModelCollection<T> }\n : EmptyObject;\ntype ModelStorageRelationsSection<T> =\n ExtractModelStorageRelations<T> extends Record<string, StorageRelationSpec>\n ? keyof ExtractModelStorageRelations<T> extends never\n ? EmptyObject\n : { readonly relations: ExtractModelStorageRelations<T> }\n : EmptyObject;\ntype RootModelCollection<T> =\n ExtractModelCollection<T> extends string\n ? ExtractModelOwner<T> extends undefined\n ? ExtractModelBase<T> extends undefined\n ? ExtractModelCollection<T>\n : never\n : never\n : never;\ntype RootModelName<T> = RootModelCollection<T> extends never ? never : ExtractModelName<T>;\ntype CollectionName<T> =\n ExtractModelCollection<T> extends string ? ExtractModelCollection<T> : never;\n\ntype ModelNameInput = string | AnyModelBuilder;\ntype ValueObjectNameInput = string | AnyValueObjectBuilder;\ntype RelationTargetFieldsInput<TargetName extends string> =\n | StringListInput\n | FieldReference<TargetName, string>\n | readonly FieldReference<TargetName, string>[];\n\ntype NormalizeModelName<T> = T extends string ? T : ExtractModelName<T>;\n\ntype NormalizeModelNameOrUndefined<T> = [T] extends [undefined]\n ? undefined\n : NormalizeModelName<Present<T>>;\n\ntype NormalizeValueObjectName<T> = T extends string ? T : ExtractValueObjectName<T>;\n\ntype NormalizeStringList<T> = T extends readonly string[]\n ? T\n : T extends string\n ? readonly [T]\n : readonly string[];\n\ntype NormalizeTargetFieldList<T> = T extends readonly AnyFieldReference[]\n ? {\n readonly [K in keyof T]: ExtractFieldReferenceName<T[K]>;\n }\n : T extends AnyFieldReference\n ? readonly [ExtractFieldReferenceName<T>]\n : NormalizeStringList<T>;\n\ntype ContractFieldFromBuilder<TBuilder> =\n TBuilder extends FieldBuilder<\n infer Type extends ContractFieldType,\n infer Nullable extends boolean,\n infer Many extends boolean\n >\n ? Simplify<\n {\n readonly type: Type;\n readonly nullable: Nullable;\n } & (Many extends true ? { readonly many: true } : EmptyObject)\n >\n : never;\n\ntype ContractFieldsFromRecord<Fields extends Record<string, AnyFieldBuilder>> = Simplify<{\n readonly [K in keyof Fields]: ContractFieldFromBuilder<Fields[K]>;\n}>;\n\ntype ContractValueObjectFromBuilder<TBuilder> =\n TBuilder extends ValueObjectBuilder<string, infer Fields extends Record<string, AnyFieldBuilder>>\n ? Simplify<{\n readonly fields: ContractFieldsFromRecord<Fields>;\n }>\n : never;\n\ntype ContractValueObjectsFromRecord<ValueObjects extends Record<string, AnyValueObjectBuilder>> =\n Simplify<{\n readonly [K in keyof ValueObjects as ExtractValueObjectName<\n ValueObjects[K]\n >]: ContractValueObjectFromBuilder<ValueObjects[K]>;\n }>;\n\ntype ContractRelationFromBuilder<TBuilder> =\n TBuilder extends RelationBuilder<\n infer To extends string,\n infer Cardinality extends '1:1' | '1:N' | 'N:1',\n infer On extends RelationOn | undefined\n >\n ? On extends RelationOn\n ? {\n readonly to: To;\n readonly cardinality: Cardinality;\n readonly on: On;\n }\n : {\n readonly to: To;\n readonly cardinality: Cardinality;\n }\n : never;\n\ntype ContractRelationsFromRecord<Relations extends Record<string, AnyRelationBuilder>> =\n keyof Relations extends never\n ? Record<string, never>\n : Simplify<{\n readonly [K in keyof Relations]: ContractRelationFromBuilder<Relations[K]>;\n }>;\n\ntype ContractModelStorageFromBuilder<TBuilder> = ModelStorageSection<TBuilder> &\n ModelStorageRelationsSection<TBuilder>;\n\ntype MaybeOwner<Owner> = [Owner] extends [undefined]\n ? EmptyObject\n : { readonly owner: Owner & string };\ntype MaybeBase<Base> = [Base] extends [undefined] ? EmptyObject : { readonly base: Base & string };\ntype MaybeDiscriminator<Discriminator> = [Discriminator] extends [undefined]\n ? EmptyObject\n : { readonly discriminator: Discriminator & { readonly field: string } };\ntype MaybeVariants<Variants> = [Variants] extends [undefined]\n ? EmptyObject\n : { readonly variants: Variants };\n\ntype ContractModelFromBuilder<TBuilder> =\n TBuilder extends NamedModelBuilder<\n string,\n infer Fields extends Record<string, AnyFieldBuilder>,\n infer Relations extends Record<string, AnyRelationBuilder>,\n string | undefined,\n infer Owner,\n infer Base,\n Record<string, StorageRelationSpec> | undefined,\n infer Discriminator,\n infer Variants\n >\n ? Simplify<\n {\n readonly fields: ContractFieldsFromRecord<Fields>;\n readonly relations: ContractRelationsFromRecord<Relations>;\n readonly storage: ContractModelStorageFromBuilder<TBuilder>;\n } & MaybeOwner<Owner> &\n MaybeBase<Base> &\n MaybeDiscriminator<Discriminator> &\n MaybeVariants<Variants>\n >\n : never;\n\ntype ContractModelsFromRecord<Models extends Record<string, AnyModelBuilder>> = Simplify<{\n readonly [K in keyof Models as ExtractModelName<Models[K]>]: ContractModelFromBuilder<Models[K]>;\n}>;\n\ntype DerivedRootModels<Models extends Record<string, AnyModelBuilder>> = Simplify<{\n readonly [K in keyof Models as RootModelCollection<Models[K]>]: RootModelName<Models[K]>;\n}>;\n\ntype StorageCollectionsFromModels<Models extends Record<string, AnyModelBuilder>> = Simplify<{\n readonly [K in keyof Models as CollectionName<Models[K]>]: MongoCollection;\n}>;\n\ntype NormalizeRoots<Roots extends Record<string, ModelNameInput>> = Simplify<{\n readonly [K in keyof Roots]: NormalizeModelName<Roots[K]>;\n}>;\n\ntype DefinitionModels<Definition> = Definition extends {\n readonly models?: infer Models extends Record<string, AnyModelBuilder>;\n}\n ? Models\n : Record<never, never>;\n\ntype DefinitionValueObjects<Definition> = Definition extends {\n readonly valueObjects?: infer ValueObjects extends Record<string, AnyValueObjectBuilder>;\n}\n ? ValueObjects\n : Record<never, never>;\n\ntype DefinitionRoots<Definition> = Definition extends {\n readonly roots?: infer Roots extends Record<string, ModelNameInput>;\n}\n ? NormalizeRoots<Roots>\n : DerivedRootModels<DefinitionModels<Definition>>;\n\ntype DefinitionExtensionPacks<Definition> = Definition extends {\n readonly extensionPacks?: infer ExtensionPacks extends Record<\n string,\n ExtensionPackRef<string, string>\n >;\n}\n ? ExtensionPacks\n : Record<never, never>;\n\ntype DefinitionFamilyId<Definition> = Definition extends {\n readonly family: FamilyPackRef<infer FamilyId>;\n}\n ? FamilyId\n : string;\n\ntype DefinitionTargetId<Definition> = Definition extends {\n readonly target: TargetPackRef<string, infer TargetId>;\n}\n ? TargetId\n : string;\n\ntype DefinitionStorage<Definition> = Simplify<\n MongoStorageShape & {\n readonly collections: StorageCollectionsFromModels<DefinitionModels<Definition>>;\n readonly storageHash: StorageHashBase<string>;\n }\n>;\n\ntype MaybeValueObjectsSection<ValueObjects extends Record<string, AnyValueObjectBuilder>> =\n keyof ValueObjects extends never\n ? EmptyObject\n : {\n readonly valueObjects: ContractValueObjectsFromRecord<ValueObjects>;\n };\n\ntype MongoContractBaseFromDefinition<Definition> = Simplify<\n {\n readonly target: DefinitionTargetId<Definition>;\n readonly targetFamily: DefinitionFamilyId<Definition>;\n readonly roots: DefinitionRoots<Definition>;\n readonly models: ContractModelsFromRecord<DefinitionModels<Definition>>;\n readonly storage: DefinitionStorage<Definition>;\n readonly capabilities: Record<string, never>;\n readonly extensionPacks: DefinitionExtensionPacks<Definition>;\n readonly profileHash: ProfileHashBase<string>;\n readonly meta: Record<string, never>;\n } & MaybeValueObjectsSection<DefinitionValueObjects<Definition>>\n>;\n\ntype CodecTypesFromDefinition<Definition> = MongoCodecTypes &\n MergeExtensionCodecTypesSafe<DefinitionExtensionPacks<Definition>>;\n\nexport type MongoContractResult<Definition> = MongoContractWithTypeMaps<\n MongoContractBaseFromDefinition<Definition>,\n MongoTypeMaps<CodecTypesFromDefinition<Definition>>\n>;\n\ntype ExtractEntitiesNamespaceFromPack<Pack> = ExtractAuthoringNamespaceFromPack<\n Pack,\n 'entityTypes',\n Record<never, never>\n>;\n\ntype MergeExtensionEntityNamespaces<ExtensionPacks> = MergeExtensionAuthoringNamespaces<\n ExtensionPacks,\n 'entityTypes'\n>;\n\nexport type ContractAuthoringHelpers<\n Family extends FamilyPackRef<string> = FamilyPackRef<string>,\n Target extends TargetPackRef<string, string> = TargetPackRef<string, string>,\n ExtensionPacks extends Record<string, ExtensionPackRef<string, string>> | undefined = undefined,\n> = EntityHelpersFromNamespace<\n ExtractEntitiesNamespaceFromPack<Family> &\n ExtractEntitiesNamespaceFromPack<Target> &\n MergeExtensionEntityNamespaces<ExtensionPacks>\n> & {\n readonly field: typeof field;\n readonly index: typeof index;\n readonly model: typeof model;\n readonly rel: typeof rel;\n readonly valueObject: typeof valueObject;\n};\n\ntype AuthoringComponent = {\n readonly authoring?: { readonly entityTypes?: unknown };\n};\n\nfunction extractEntitiesNamespace(component: AuthoringComponent): AuthoringEntityTypeNamespace {\n return (component.authoring?.entityTypes ?? {}) as AuthoringEntityTypeNamespace;\n}\n\nconst MONGO_RESERVED_HELPER_KEYS: readonly string[] = [\n 'field',\n 'index',\n 'model',\n 'rel',\n 'valueObject',\n];\n\nfunction composeMongoEntityHelpers(\n family: FamilyPackRef<string>,\n target: TargetPackRef<string, string>,\n extensionPacks: Record<string, ExtensionPackRef<string, string>> | undefined,\n): Record<string, unknown> {\n const components: readonly AuthoringComponent[] = [\n family,\n target,\n ...Object.values(extensionPacks ?? {}),\n ];\n const merged: Record<string, unknown> = {};\n for (const component of components) {\n const ns = extractEntitiesNamespace(component);\n if (Object.keys(ns).length > 0) {\n mergeAuthoringNamespaces(merged, ns, [], isAuthoringEntityTypeDescriptor, 'entity');\n }\n }\n // Mongo authoring does not yet ship contributed field / type namespaces in\n // the TS DSL surface, but the cross-registry guard mirrors SQL's call so\n // any future field / type contributions surface a structurally identical\n // collision error.\n assertNoCrossRegistryCollisions({}, {}, merged as AuthoringEntityTypeNamespace);\n // Pack-contributed entity types flatten onto the same top-level shape\n // as the built-in helpers (`model`, `rel`, `field`, `index`,\n // `valueObject`). Detect collisions explicitly so a contributed name\n // can't silently overwrite a built-in at runtime.\n const collisions = Object.keys(merged).filter((name) =>\n MONGO_RESERVED_HELPER_KEYS.includes(name),\n );\n if (collisions.length > 0) {\n throw new Error(\n `Pack-contributed entity type(s) ${collisions.map((c) => `\"${c}\"`).join(', ')} collide with the reserved built-in helper key(s) on the Mongo composed helpers surface. Reserved keys: ${MONGO_RESERVED_HELPER_KEYS.map((k) => `\"${k}\"`).join(', ')}.`,\n );\n }\n return createEntityHelpersFromNamespace(merged as AuthoringEntityTypeNamespace, {\n ctx: { family: family.familyId, target: target.targetId },\n });\n}\n\nexport type ContractScaffold<\n Family extends FamilyPackRef<string>,\n Target extends TargetPackRef<string, string>,\n ExtensionPacks extends Record<string, ExtensionPackRef<string, string>> | undefined = undefined,\n Roots extends Record<string, ModelNameInput> | undefined = undefined,\n> = {\n readonly family: Family;\n readonly target: Target;\n readonly extensionPacks?: ExtensionPacks;\n readonly roots?: Roots;\n};\n\nexport type ContractDefinition<\n Family extends FamilyPackRef<string>,\n Target extends TargetPackRef<string, string>,\n Models extends Record<string, AnyModelBuilder> = Record<never, never>,\n ValueObjects extends Record<string, AnyValueObjectBuilder> = Record<never, never>,\n ExtensionPacks extends Record<string, ExtensionPackRef<string, string>> | undefined = undefined,\n Roots extends Record<string, ModelNameInput> | undefined = undefined,\n> = ContractScaffold<Family, Target, ExtensionPacks, Roots> & {\n readonly models?: Models;\n readonly valueObjects?: ValueObjects;\n};\n\nexport type ContractFactory<\n Models extends Record<string, AnyModelBuilder> = Record<never, never>,\n ValueObjects extends Record<string, AnyValueObjectBuilder> = Record<never, never>,\n Roots extends Record<string, ModelNameInput> | undefined = undefined,\n Family extends FamilyPackRef<string> = FamilyPackRef<string>,\n Target extends TargetPackRef<string, string> = TargetPackRef<string, string>,\n ExtensionPacks extends Record<string, ExtensionPackRef<string, string>> | undefined = undefined,\n> = (helpers: ContractAuthoringHelpers<Family, Target, ExtensionPacks>) => {\n readonly models?: Models;\n readonly valueObjects?: ValueObjects;\n readonly roots?: Roots;\n};\n\ntype FieldBuilderSpec<\n Type extends ContractFieldType,\n Nullable extends boolean,\n Many extends boolean,\n> = {\n readonly type: Type;\n readonly nullable: Nullable;\n readonly many: Many;\n};\n\nfunction createFieldBuilder<\n Type extends ContractFieldType,\n Nullable extends boolean,\n Many extends boolean,\n>(spec: FieldBuilderSpec<Type, Nullable, Many>): FieldBuilder<Type, Nullable, Many> {\n return {\n __kind: 'field',\n __type: spec.type,\n __nullable: spec.nullable,\n __many: spec.many,\n optional() {\n return createFieldBuilder<Type, true, Many>({\n type: spec.type,\n nullable: true,\n many: spec.many,\n });\n },\n many() {\n return createFieldBuilder<Type, Nullable, true>({\n type: spec.type,\n nullable: spec.nullable,\n many: true,\n });\n },\n };\n}\n\nfunction normalizeOptionalTypeParams(\n typeParams: Record<string, unknown> | undefined,\n): { readonly typeParams: Record<string, unknown> } | Record<never, never> {\n if (!typeParams) {\n return {};\n }\n\n return { typeParams };\n}\n\nfunction createScalarFieldBuilder<\n CodecId extends string,\n TypeParams extends Record<string, unknown> | undefined = undefined,\n>(\n codecId: CodecId,\n options?: { readonly typeParams?: TypeParams },\n): FieldBuilder<\n {\n readonly kind: 'scalar';\n readonly codecId: CodecId;\n } & ([TypeParams] extends [undefined] ? EmptyObject : { readonly typeParams: TypeParams }),\n false,\n false\n> {\n return createFieldBuilder({\n type: {\n kind: 'scalar',\n codecId,\n ...normalizeOptionalTypeParams(options?.typeParams),\n } as {\n readonly kind: 'scalar';\n readonly codecId: CodecId;\n } & ([TypeParams] extends [undefined] ? EmptyObject : { readonly typeParams: TypeParams }),\n nullable: false,\n many: false,\n });\n}\n\nexport const field = {\n scalar: createScalarFieldBuilder,\n objectId() {\n return createScalarFieldBuilder('mongo/objectId@1');\n },\n string() {\n return createScalarFieldBuilder('mongo/string@1');\n },\n double() {\n return createScalarFieldBuilder('mongo/double@1');\n },\n int32() {\n return createScalarFieldBuilder('mongo/int32@1');\n },\n bool() {\n return createScalarFieldBuilder('mongo/bool@1');\n },\n date() {\n return createScalarFieldBuilder('mongo/date@1');\n },\n vector<const TypeParams extends Record<string, unknown> | undefined = undefined>(options?: {\n readonly typeParams?: TypeParams;\n }) {\n return createScalarFieldBuilder('mongo/vector@1', options);\n },\n valueObject<const ValueObject extends ValueObjectNameInput>(valueObjectName: ValueObject) {\n return createFieldBuilder({\n type: {\n kind: 'valueObject',\n name: resolveValueObjectName(valueObjectName),\n } as {\n readonly kind: 'valueObject';\n readonly name: NormalizeValueObjectName<ValueObject>;\n },\n nullable: false,\n many: false,\n });\n },\n} as const;\n\nexport function index<const Fields extends MongoIndexFields>(\n fields: Fields,\n): {\n readonly fields: Fields;\n};\nexport function index<const Fields extends MongoIndexFields, const Options>(\n fields: Fields,\n options: StrictShape<Options, MongoIndexOptionsInput>,\n): {\n readonly fields: Fields;\n readonly options: Options & MongoIndexOptionsInput;\n};\nexport function index(\n fields: MongoIndexFields,\n options?: MongoIndexOptionsInput,\n): {\n readonly fields: MongoIndexFields;\n readonly options?: MongoIndexOptionsInput;\n} {\n return {\n fields,\n ...(options ? { options } : {}),\n };\n}\n\nfunction createFieldReference<const ModelName extends string, const FieldName extends string>(\n modelName: ModelName,\n fieldName: FieldName,\n): FieldReference<ModelName, FieldName> {\n return {\n __kind: 'fieldRef',\n modelName,\n fieldName,\n };\n}\n\nfunction isFieldReference(value: unknown): value is FieldReference<string, string> {\n return (\n typeof value === 'object' && value !== null && '__kind' in value && value.__kind === 'fieldRef'\n );\n}\n\nfunction resolveModelName(value: ModelNameInput): string {\n return typeof value === 'string' ? value : value.__name;\n}\n\nfunction resolveValueObjectName(value: ValueObjectNameInput): string {\n return typeof value === 'string' ? value : value.__name;\n}\n\nfunction normalizeStringList(value: StringListInput): readonly string[] {\n return typeof value === 'string' ? [value] : [...value];\n}\n\nfunction normalizeTargetField(\n targetModelName: string,\n value: string | FieldReference<string, string>,\n): string {\n if (!isFieldReference(value)) {\n return value;\n }\n\n if (value.modelName !== targetModelName) {\n throw new Error(\n `Relation target \"${targetModelName}\" cannot reference field \"${value.modelName}.${value.fieldName}\".`,\n );\n }\n\n return value.fieldName;\n}\n\nfunction normalizeTargetFields(\n targetModelName: string,\n value: RelationTargetFieldsInput<string>,\n): readonly string[] {\n if (typeof value === 'string') {\n return [value];\n }\n\n if (isFieldReference(value)) {\n return [normalizeTargetField(targetModelName, value)];\n }\n\n return value.map((entry) => normalizeTargetField(targetModelName, entry));\n}\n\ntype ReferenceOptions<\n Target extends ModelNameInput,\n From extends StringListInput,\n To extends RelationTargetFieldsInput<NormalizeModelName<Target>>,\n> = {\n readonly from: From;\n readonly to: To;\n};\n\ntype RelationOnFromOptions<\n From extends StringListInput,\n To extends RelationTargetFieldsInput<string>,\n> = {\n readonly localFields: NormalizeStringList<From>;\n readonly targetFields: NormalizeTargetFieldList<To>;\n};\n\nfunction createRelationBuilder<\n To extends string,\n Cardinality extends '1:1' | '1:N' | 'N:1',\n On extends RelationOn | undefined,\n>(spec: {\n readonly to: To;\n readonly cardinality: Cardinality;\n readonly on: On;\n}): RelationBuilder<To, Cardinality, On> {\n return {\n __kind: 'relation',\n __to: spec.to,\n __cardinality: spec.cardinality,\n __on: spec.on,\n };\n}\n\nfunction createReferenceRelationBuilder<\n Target extends ModelNameInput,\n Cardinality extends '1:1' | '1:N' | 'N:1',\n From extends StringListInput,\n To extends RelationTargetFieldsInput<NormalizeModelName<Target>>,\n>(\n target: Target,\n cardinality: Cardinality,\n options: ReferenceOptions<Target, From, To>,\n): RelationBuilder<NormalizeModelName<Target>, Cardinality, RelationOnFromOptions<From, To>> {\n const targetModelName = resolveModelName(target);\n\n return createRelationBuilder({\n to: targetModelName as NormalizeModelName<Target>,\n cardinality,\n on: {\n localFields: normalizeStringList(options.from) as NormalizeStringList<From>,\n targetFields: normalizeTargetFields(\n targetModelName,\n options.to,\n ) as NormalizeTargetFieldList<To>,\n },\n });\n}\n\nfunction createEmbedRelationBuilder<\n Target extends ModelNameInput,\n Cardinality extends '1:1' | '1:N',\n>(\n target: Target,\n cardinality: Cardinality,\n): RelationBuilder<NormalizeModelName<Target>, Cardinality, undefined> {\n return createRelationBuilder({\n to: resolveModelName(target) as NormalizeModelName<Target>,\n cardinality,\n on: undefined,\n });\n}\n\nfunction hasOne<const Target extends ModelNameInput>(\n target: Target,\n): RelationBuilder<NormalizeModelName<Target>, '1:1', undefined>;\nfunction hasOne<\n const Target extends ModelNameInput,\n const From extends StringListInput,\n const To extends RelationTargetFieldsInput<NormalizeModelName<Target>>,\n>(\n target: Target,\n options: ReferenceOptions<Target, From, To>,\n): RelationBuilder<NormalizeModelName<Target>, '1:1', RelationOnFromOptions<From, To>>;\nfunction hasOne(\n target: ModelNameInput,\n options?: ReferenceOptions<ModelNameInput, StringListInput, RelationTargetFieldsInput<string>>,\n) {\n if (!options) {\n return createEmbedRelationBuilder(target, '1:1');\n }\n\n return createReferenceRelationBuilder(target, '1:1', options);\n}\n\nfunction hasMany<const Target extends ModelNameInput>(\n target: Target,\n): RelationBuilder<NormalizeModelName<Target>, '1:N', undefined>;\nfunction hasMany<\n const Target extends ModelNameInput,\n const From extends StringListInput,\n const To extends RelationTargetFieldsInput<NormalizeModelName<Target>>,\n>(\n target: Target,\n options: ReferenceOptions<Target, From, To>,\n): RelationBuilder<NormalizeModelName<Target>, '1:N', RelationOnFromOptions<From, To>>;\nfunction hasMany(\n target: ModelNameInput,\n options?: ReferenceOptions<ModelNameInput, StringListInput, RelationTargetFieldsInput<string>>,\n) {\n if (!options) {\n return createEmbedRelationBuilder(target, '1:N');\n }\n\n return createReferenceRelationBuilder(target, '1:N', options);\n}\n\nfunction belongsTo<\n const Target extends ModelNameInput,\n const From extends StringListInput,\n const To extends RelationTargetFieldsInput<NormalizeModelName<Target>>,\n>(\n target: Target,\n options: ReferenceOptions<Target, From, To>,\n): RelationBuilder<NormalizeModelName<Target>, 'N:1', RelationOnFromOptions<From, To>> {\n return createReferenceRelationBuilder(target, 'N:1', options);\n}\n\nexport const rel = {\n belongsTo,\n hasMany,\n hasOne,\n} as const;\n\ntype ValueObjectInput<Fields extends Record<string, AnyFieldBuilder>> = {\n readonly fields: Fields;\n};\n\nexport function valueObject<\n const Name extends string,\n const Fields extends Record<string, AnyFieldBuilder>,\n>(name: Name, input: ValueObjectInput<Fields>): ValueObjectBuilder<Name, Fields> {\n return {\n __kind: 'valueObject',\n __name: name,\n __fields: input.fields,\n };\n}\n\ntype ModelDiscriminatorInput<Variants extends Record<string, VariantSpec>> = {\n readonly field: string;\n readonly variants: Variants;\n};\n\ntype ModelInput<\n Fields extends Record<string, AnyFieldBuilder>,\n Relations extends Record<string, AnyRelationBuilder> | undefined,\n Collection extends string | undefined,\n Indexes extends readonly MongoIndexAuthoringInput[] | undefined,\n CollectionOptions,\n Owner extends ModelNameInput | undefined,\n Base extends ModelNameInput | undefined,\n StorageRelations extends Record<string, StorageRelationSpec> | undefined,\n Discriminator extends ModelDiscriminatorInput<Record<string, VariantSpec>> | undefined,\n> = {\n readonly collection?: Collection;\n readonly indexes?: Indexes;\n readonly collectionOptions?: StrictShape<CollectionOptions, MongoCollectionOptionsAuthoringInput>;\n readonly storageRelations?: StorageRelations;\n readonly fields: Fields;\n readonly relations?: Relations;\n readonly owner?: Owner;\n readonly base?: Base;\n readonly discriminator?: Discriminator;\n};\n\nexport function model<\n const Name extends string,\n const Fields extends Record<string, AnyFieldBuilder>,\n const Relations extends Record<string, AnyRelationBuilder> | undefined = undefined,\n const Collection extends string | undefined = undefined,\n const Indexes extends readonly MongoIndexAuthoringInput[] | undefined = undefined,\n const CollectionOptions = undefined,\n const Owner extends ModelNameInput | undefined = undefined,\n const Base extends ModelNameInput | undefined = undefined,\n const StorageRelations extends Record<string, StorageRelationSpec> | undefined = undefined,\n const Discriminator extends\n | ModelDiscriminatorInput<Record<string, VariantSpec>>\n | undefined = undefined,\n>(\n name: Name,\n input: ModelInput<\n Fields,\n Relations,\n Collection,\n Indexes,\n CollectionOptions,\n Owner,\n Base,\n StorageRelations,\n Discriminator\n >,\n): ModelBuilder<\n Name,\n Fields,\n Relations extends Record<string, AnyRelationBuilder> ? Relations : Record<never, never>,\n Collection,\n NormalizeModelNameOrUndefined<Owner>,\n NormalizeModelNameOrUndefined<Base>,\n StorageRelations,\n Discriminator extends { readonly field: infer Field extends string }\n ? { readonly field: Field }\n : undefined,\n Discriminator extends { readonly variants: infer Variants extends Record<string, VariantSpec> }\n ? Variants\n : undefined\n> {\n return {\n __kind: 'model',\n __name: name,\n __fields: input.fields,\n __relations: (input.relations ?? {}) as Relations extends Record<string, AnyRelationBuilder>\n ? Relations\n : Record<never, never>,\n __indexes: input.indexes,\n __collectionOptions: input.collectionOptions,\n __collection: input.collection as Collection,\n __owner: (input.owner\n ? resolveModelName(input.owner)\n : undefined) as NormalizeModelNameOrUndefined<Owner>,\n __base: (input.base\n ? resolveModelName(input.base)\n : undefined) as NormalizeModelNameOrUndefined<Base>,\n __storageRelations: input.storageRelations as StorageRelations,\n __discriminator: (input.discriminator\n ? { field: input.discriminator.field }\n : undefined) as Discriminator extends { readonly field: infer Field extends string }\n ? { readonly field: Field }\n : undefined,\n __variants: input.discriminator?.variants as Discriminator extends {\n readonly variants: infer Variants extends Record<string, VariantSpec>;\n }\n ? Variants\n : undefined,\n ref(fieldName) {\n return createFieldReference(name, fieldName);\n },\n };\n}\n\nfunction validateTargetPackRef(\n family: FamilyPackRef<string>,\n target: TargetPackRef<string, string>,\n): void {\n if (family.familyId !== 'mongo') {\n throw new Error(\n `defineContract only accepts Mongo family packs. Received family \"${family.familyId}\".`,\n );\n }\n\n if (target.familyId !== family.familyId) {\n throw new Error(\n `target pack \"${target.id}\" targets family \"${target.familyId}\" but contract family is \"${family.familyId}\".`,\n );\n }\n}\n\nfunction validateExtensionPackRefs(\n target: TargetPackRef<string, string>,\n extensionPacks?: Record<string, ExtensionPackRef<string, string>>,\n): void {\n if (!extensionPacks) {\n return;\n }\n\n for (const packRef of Object.values(extensionPacks)) {\n if (packRef.kind !== 'extension') {\n throw new Error(\n `defineContract only accepts extension pack refs in extensionPacks. Received kind \"${packRef.kind}\".`,\n );\n }\n\n if (packRef.familyId !== target.familyId) {\n throw new Error(\n `extension pack \"${packRef.id}\" targets family \"${packRef.familyId}\" but contract target family is \"${target.familyId}\".`,\n );\n }\n\n if (packRef.targetId && packRef.targetId !== target.targetId) {\n throw new Error(\n `extension pack \"${packRef.id}\" targets \"${packRef.targetId}\" but contract target is \"${target.targetId}\".`,\n );\n }\n }\n}\n\nfunction isContractScaffold(\n value: unknown,\n): value is ContractScaffold<\n FamilyPackRef<string>,\n TargetPackRef<string, string>,\n Record<string, ExtensionPackRef<string, string>> | undefined,\n Record<string, ModelNameInput> | undefined\n> {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n return 'family' in value && 'target' in value;\n}\n\nfunction buildContractField(builder: AnyFieldBuilder): ContractField {\n return builder.__many\n ? {\n type: builder.__type,\n nullable: builder.__nullable,\n many: true,\n }\n : {\n type: builder.__type,\n nullable: builder.__nullable,\n };\n}\n\nfunction buildFields(fields: Record<string, AnyFieldBuilder>): Record<string, ContractField> {\n const builtFields: Record<string, ContractField> = {};\n\n for (const [fieldName, fieldBuilder] of Object.entries(fields)) {\n builtFields[fieldName] = buildContractField(fieldBuilder);\n }\n\n return builtFields;\n}\n\nfunction buildRelation(\n relationBuilder: AnyRelationBuilder,\n): ContractEmbedRelation | ContractReferenceRelation {\n return relationBuilder.__on\n ? {\n to: relationBuilder.__to,\n cardinality: relationBuilder.__cardinality,\n on: relationBuilder.__on,\n }\n : {\n to: relationBuilder.__to,\n cardinality: relationBuilder.__cardinality,\n };\n}\n\nfunction buildRelations(\n relations: Record<string, AnyRelationBuilder>,\n): Record<string, ContractEmbedRelation | ContractReferenceRelation> {\n const builtRelations: Record<string, ContractEmbedRelation | ContractReferenceRelation> = {};\n\n for (const [relationName, relationBuilder] of Object.entries(relations)) {\n builtRelations[relationName] = buildRelation(relationBuilder);\n }\n\n return builtRelations;\n}\n\nfunction buildValueObjects(\n valueObjects: Record<string, AnyValueObjectBuilder> | undefined,\n): Record<string, ContractValueObject> {\n const builtValueObjects: Record<string, ContractValueObject> = {};\n\n for (const valueObjectBuilder of Object.values(valueObjects ?? {})) {\n if (valueObjectBuilder.__name in builtValueObjects) {\n throw new Error(\n `Duplicate value object name \"${valueObjectBuilder.__name}\" in defineContract().`,\n );\n }\n\n builtValueObjects[valueObjectBuilder.__name] = {\n fields: buildFields(valueObjectBuilder.__fields),\n };\n }\n\n return builtValueObjects;\n}\n\nfunction buildModels(\n models: Record<string, AnyModelBuilder> | undefined,\n): Record<string, MongoContract['models'][string]> {\n const builtModels: Record<string, MongoContract['models'][string]> = {};\n\n for (const modelBuilder of Object.values(models ?? {})) {\n if (modelBuilder.__name in builtModels) {\n throw new Error(`Duplicate model name \"${modelBuilder.__name}\" in defineContract().`);\n }\n\n const storage = {\n ...(modelBuilder.__collection ? { collection: modelBuilder.__collection } : {}),\n ...(modelBuilder.__storageRelations ? { relations: modelBuilder.__storageRelations } : {}),\n };\n\n builtModels[modelBuilder.__name] = {\n fields: buildFields(modelBuilder.__fields),\n relations: buildRelations(modelBuilder.__relations),\n storage,\n ...(modelBuilder.__owner ? { owner: modelBuilder.__owner } : {}),\n ...(modelBuilder.__base ? { base: modelBuilder.__base } : {}),\n ...(modelBuilder.__discriminator ? { discriminator: modelBuilder.__discriminator } : {}),\n ...(modelBuilder.__variants ? { variants: modelBuilder.__variants } : {}),\n };\n }\n\n return builtModels;\n}\n\nfunction deriveRoots(models: Record<string, AnyModelBuilder> | undefined): Record<string, string> {\n const roots: Record<string, string> = {};\n\n for (const modelBuilder of Object.values(models ?? {})) {\n if (!modelBuilder.__collection || modelBuilder.__owner || modelBuilder.__base) {\n continue;\n }\n\n roots[modelBuilder.__collection] = modelBuilder.__name;\n }\n\n return roots;\n}\n\nfunction normalizeRoots(roots: Record<string, ModelNameInput> | undefined): Record<string, string> {\n const normalizedRoots: Record<string, string> = {};\n\n for (const [rootName, rootValue] of Object.entries(roots ?? {})) {\n normalizedRoots[rootName] = resolveModelName(rootValue);\n }\n\n return normalizedRoots;\n}\n\nfunction toStorageIndex(index: MongoIndexAuthoringInput): MongoIndex {\n const keys = Object.entries(index.fields).map(([field, direction]) => ({\n field,\n direction,\n }));\n const input: Record<string, unknown> = { keys };\n if (index.options) {\n for (const [key, value] of Object.entries(index.options)) {\n if (value !== undefined) {\n input[key] = value;\n }\n }\n }\n return new MongoIndex(input as unknown as MongoIndexInput);\n}\n\nfunction toStorageCollectionOptions(\n opts: MongoCollectionOptionsAuthoringInput,\n): MongoCollectionOptions {\n const input: MongoCollectionOptionsInput = {\n ...(opts.capped\n ? { capped: { size: opts.size ?? 0, ...(opts.max != null && { max: opts.max }) } }\n : {}),\n ...(opts.storageEngine !== undefined && { storageEngine: opts.storageEngine }),\n ...(opts.indexOptionDefaults !== undefined && {\n indexOptionDefaults: opts.indexOptionDefaults,\n }),\n ...(opts.collation !== undefined && { collation: opts.collation }),\n ...(opts.timeseries !== undefined && { timeseries: opts.timeseries }),\n ...(opts.clusteredIndex !== undefined && {\n clusteredIndex:\n opts.clusteredIndex.name !== undefined ? { name: opts.clusteredIndex.name } : {},\n }),\n ...(opts.expireAfterSeconds !== undefined && { expireAfterSeconds: opts.expireAfterSeconds }),\n ...(opts.changeStreamPreAndPostImages !== undefined && {\n changeStreamPreAndPostImages: opts.changeStreamPreAndPostImages,\n }),\n };\n return new MongoCollectionOptions(input);\n}\n\nfunction findMissingIndexField(\n index: MongoIndexAuthoringInput,\n modelFields: Record<string, unknown>,\n): string | undefined {\n for (const fieldName of Object.keys(index.fields)) {\n const wildcardMatch = fieldName.match(/^(.+)\\.\\$\\*\\*$/);\n const lookupName = wildcardMatch ? wildcardMatch[1] : fieldName;\n if (lookupName === undefined || lookupName.length === 0) continue;\n if (lookupName === '$**') continue;\n if (!Object.hasOwn(modelFields, lookupName)) {\n return lookupName;\n }\n }\n return undefined;\n}\n\nfunction resolveVariantScope(\n modelBuilder: AnyModelBuilder,\n modelsByName: Record<string, AnyModelBuilder>,\n): { discriminatorField: string; discriminatorValue: string } | undefined {\n if (!modelBuilder.__base) return undefined;\n const baseBuilder = modelsByName[modelBuilder.__base];\n if (!baseBuilder) return undefined;\n const discriminatorField = baseBuilder.__discriminator?.field;\n const variantValue = baseBuilder.__variants?.[modelBuilder.__name]?.value;\n if (!discriminatorField || variantValue === undefined) return undefined;\n return { discriminatorField, discriminatorValue: variantValue };\n}\n\nfunction scopeVariantIndex(\n storageIndex: MongoIndex,\n scope: { discriminatorField: string; discriminatorValue: string },\n variantName: string,\n authoredIndex: MongoIndexAuthoringInput | undefined,\n): MongoIndex {\n const result = applyPolymorphicScopeToMongoIndex(storageIndex, scope);\n if (result.kind === 'conflict') {\n const indexLabel = authoredIndex ? canonicalStringify(authoredIndex) : '<unknown>';\n throw new Error(\n `Variant model \"${variantName}\" index ${indexLabel} conflicts with discriminator scope: ${result.reason}`,\n );\n }\n return result.index;\n}\n\nfunction buildCollections(\n models: Record<string, AnyModelBuilder> | undefined,\n): Record<string, MongoCollection> {\n const intermediate: Record<string, MongoCollectionInput> = {};\n const declaredIndexOwners = new Map<string, string>();\n const modelMap = models ?? {};\n const modelsByName: Record<string, AnyModelBuilder> = {};\n for (const builder of Object.values(modelMap)) {\n modelsByName[builder.__name] = builder;\n }\n\n for (const modelBuilder of Object.values(modelMap)) {\n if (!modelBuilder.__collection) {\n if (modelBuilder.__indexes && modelBuilder.__indexes.length > 0) {\n throw new Error(\n `Model \"${modelBuilder.__name}\" defines indexes but has no collection to attach them to.`,\n );\n }\n\n if (modelBuilder.__collectionOptions) {\n throw new Error(\n `Model \"${modelBuilder.__name}\" defines collectionOptions but has no collection to attach them to.`,\n );\n }\n\n continue;\n }\n\n const existingCollection: MongoCollectionInput = intermediate[modelBuilder.__collection] ?? {};\n const existingIndexes = existingCollection.indexes ?? [];\n\n if (existingCollection.options && modelBuilder.__collectionOptions) {\n throw new Error(\n `Collection \"${modelBuilder.__collection}\" has collectionOptions declared by multiple models. Author collectionOptions on a single model per collection.`,\n );\n }\n\n for (const collectionIndex of modelBuilder.__indexes ?? []) {\n const missingField = findMissingIndexField(collectionIndex, modelBuilder.__fields);\n if (missingField !== undefined) {\n const indexSignature = canonicalStringify(collectionIndex);\n throw new Error(\n `Model \"${modelBuilder.__name}\" index ${indexSignature} references unknown field \"${missingField}\".`,\n );\n }\n }\n\n const polymorphicScope = resolveVariantScope(modelBuilder, modelsByName);\n const rawStorageIndexes = (modelBuilder.__indexes ?? []).map(toStorageIndex);\n const storageIndexes = polymorphicScope\n ? rawStorageIndexes.map((idx, i) =>\n scopeVariantIndex(\n idx,\n polymorphicScope,\n modelBuilder.__name,\n modelBuilder.__indexes?.[i],\n ),\n )\n : rawStorageIndexes;\n\n // Dedup after scoping so sibling variants that authentically declare\n // identical raw indexes (e.g. Bug and Feature both index severity) do\n // not collide — their post-scoping storage indexes differ by\n // partialFilterExpression and are correctly distinct on MongoDB.\n for (let i = 0; i < storageIndexes.length; i++) {\n const storageIndex = storageIndexes[i];\n if (storageIndex === undefined) continue;\n const indexSignature = stableStringify(storageIndex);\n const collectionIndexKey = `${modelBuilder.__collection}:${indexSignature}`;\n const firstOwner = declaredIndexOwners.get(collectionIndexKey);\n if (firstOwner) {\n const authoredIndex = modelBuilder.__indexes?.[i];\n const reportedSignature = authoredIndex\n ? canonicalStringify(authoredIndex)\n : indexSignature;\n throw new Error(\n `Collection \"${modelBuilder.__collection}\" defines duplicate index ${reportedSignature}. First declared on model \"${firstOwner}\" and duplicated on model \"${modelBuilder.__name}\".`,\n );\n }\n declaredIndexOwners.set(collectionIndexKey, modelBuilder.__name);\n }\n const storageOptions = modelBuilder.__collectionOptions\n ? toStorageCollectionOptions(modelBuilder.__collectionOptions)\n : undefined;\n\n intermediate[modelBuilder.__collection] =\n storageIndexes.length > 0\n ? {\n ...existingCollection,\n indexes: [...existingIndexes, ...storageIndexes],\n ...(storageOptions ? { options: storageOptions } : {}),\n }\n : storageOptions\n ? {\n ...existingCollection,\n options: storageOptions,\n }\n : existingCollection;\n }\n\n const collections: Record<string, MongoCollection> = {};\n for (const [name, data] of Object.entries(intermediate)) {\n collections[name] = new MongoCollection(data);\n }\n return collections;\n}\n\nfunction buildContractFromDefinition<\n const Definition extends ContractDefinition<\n FamilyPackRef<string>,\n TargetPackRef<string, string>,\n Record<string, AnyModelBuilder>,\n Record<string, AnyValueObjectBuilder>,\n Record<string, ExtensionPackRef<string, string>> | undefined,\n Record<string, ModelNameInput> | undefined\n >,\n>(definition: Definition): MongoContractResult<Definition> {\n validateTargetPackRef(definition.family, definition.target);\n validateExtensionPackRefs(definition.target, definition.extensionPacks);\n\n const builtModels = buildModels(definition.models);\n const builtValueObjects = buildValueObjects(definition.valueObjects);\n const roots = definition.roots\n ? normalizeRoots(definition.roots)\n : deriveRoots(definition.models);\n // The Mongo `defineContract` input no longer accepts a `capabilities`\n // block. The build-time matrix is empty here; CLI-time `enrichContract`\n // layers in adapter / driver / extension caps. `profileHash` continues\n // to fingerprint this (now-always-empty) author subset, so it stabilises\n // at `hash({})`.\n const capabilities: Record<string, Record<string, boolean>> = {};\n const collections = buildCollections(definition.models);\n const storageBody = {\n namespaces: {\n [UNBOUND_NAMESPACE_ID]: {\n id: UNBOUND_NAMESPACE_ID,\n collections,\n },\n },\n };\n\n const storageHash = computeStorageHash({\n target: definition.target.targetId,\n targetFamily: definition.family.familyId,\n storage: storageBody,\n });\n\n const storage = new MongoStorage({\n storageHash,\n ...storageBody,\n }) as unknown as MongoStorageShape<string>;\n\n const builtContract = {\n target: definition.target.targetId,\n targetFamily: definition.family.familyId,\n roots,\n models: builtModels,\n ...(Object.keys(builtValueObjects).length > 0 ? { valueObjects: builtValueObjects } : {}),\n storage,\n capabilities,\n extensionPacks: definition.extensionPacks ?? {},\n profileHash: computeProfileHash({\n target: definition.target.targetId,\n targetFamily: definition.family.familyId,\n capabilities,\n }),\n meta: {},\n } satisfies MongoContract;\n\n return builtContract as MongoContractResult<Definition>;\n}\n\nexport function defineContract<\n const Definition extends ContractDefinition<\n FamilyPackRef<string>,\n TargetPackRef<string, string>,\n Record<string, AnyModelBuilder>,\n Record<string, AnyValueObjectBuilder>,\n Record<string, ExtensionPackRef<string, string>> | undefined,\n Record<string, ModelNameInput> | undefined\n >,\n>(definition: Definition): MongoContractResult<Definition>;\nexport function defineContract<\n const Definition extends ContractScaffold<\n Family,\n Target,\n ExtensionPacks,\n Record<string, ModelNameInput> | undefined\n >,\n const Built extends {\n readonly models?: Record<string, AnyModelBuilder>;\n readonly valueObjects?: Record<string, AnyValueObjectBuilder>;\n readonly roots?: Record<string, ModelNameInput>;\n },\n const Family extends FamilyPackRef<string> = FamilyPackRef<string>,\n const Target extends TargetPackRef<string, string> = TargetPackRef<string, string>,\n const ExtensionPacks extends\n | Record<string, ExtensionPackRef<string, string>>\n | undefined = undefined,\n>(\n definition: Definition,\n factory: (helpers: ContractAuthoringHelpers<Family, Target, ExtensionPacks>) => Built,\n): MongoContractResult<Definition & Built>;\nexport function defineContract(\n definition: ContractScaffold<\n FamilyPackRef<string>,\n TargetPackRef<string, string>,\n Record<string, ExtensionPackRef<string, string>> | undefined,\n Record<string, ModelNameInput> | undefined\n >,\n factory?: ContractFactory<\n Record<string, AnyModelBuilder>,\n Record<string, AnyValueObjectBuilder>,\n Record<string, ModelNameInput> | undefined\n >,\n) {\n if (!isContractScaffold(definition)) {\n throw new TypeError(\n 'defineContract expects a contract definition object. Define your contract with defineContract({ family, target, models, ... }).',\n );\n }\n\n if (!factory) {\n return buildContractFromDefinition(definition);\n }\n\n const entities = composeMongoEntityHelpers(\n definition.family,\n definition.target,\n definition.extensionPacks,\n );\n const helpers = {\n ...entities,\n field,\n index,\n model,\n rel,\n valueObject,\n } as unknown as ContractAuthoringHelpers;\n\n return buildContractFromDefinition({\n ...definition,\n ...factory(helpers),\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"contract-builder.mjs","names":[],"sources":["../src/contract-builder.ts"],"sourcesContent":["import { computeProfileHash, computeStorageHash } from '@prisma-next/contract/hashing';\nimport type {\n ContractEmbedRelation,\n ContractField,\n ContractFieldType,\n ContractReferenceRelation,\n ContractValueObject,\n CrossReference,\n ProfileHashBase,\n StorageHashBase,\n} from '@prisma-next/contract/types';\nimport { crossRef } from '@prisma-next/contract/types';\nimport {\n createEntityHelpersFromNamespace,\n type EntityHelpersFromNamespace,\n type ExtractAuthoringNamespaceFromPack,\n type MergeExtensionAuthoringNamespaces,\n} from '@prisma-next/contract-authoring';\nimport type { AuthoringEntityTypeNamespace } from '@prisma-next/framework-components/authoring';\nimport {\n assertNoCrossRegistryCollisions,\n isAuthoringEntityTypeDescriptor,\n mergeAuthoringNamespaces,\n} from '@prisma-next/framework-components/authoring';\nimport type {\n ExtensionPackRef,\n FamilyPackRef,\n TargetPackRef,\n} from '@prisma-next/framework-components/components';\nimport { UNBOUND_NAMESPACE_ID } from '@prisma-next/framework-components/ir';\nimport {\n applyPolymorphicScopeToMongoIndex,\n MongoCollection,\n type MongoCollectionInput,\n MongoCollectionOptions,\n type MongoCollectionOptionsAuthoringInput,\n type MongoCollectionOptionsInput,\n type MongoContract,\n type MongoContractWithTypeMaps,\n MongoIndex,\n type MongoIndexAuthoringInput,\n type MongoIndexFields,\n type MongoIndexInput,\n type MongoIndexOptionsInput,\n MongoStorage,\n type MongoStorageShape,\n type MongoTypeMaps,\n} from '@prisma-next/mongo-contract';\nimport { canonicalStringify } from '@prisma-next/utils/canonical-stringify';\n\n// `canonicalStringify` rejects non-plain objects so a `Map` or class\n// instance cannot silently collapse to `{}`. The storage-shape values\n// produced by `toStorageIndex` post-M2-R2 are `MongoIndex` class\n// instances (see ADR for the storage-map class flip / FR18), which\n// trips that guard. This local helper produces the same key-sorted,\n// JSON-like representation `canonicalStringify` produces for plain\n// objects, but accepts class instances by reading their enumerable\n// properties via `Object.entries`. The output is only used as an\n// in-memory dedup signature for collection indexes; it never leaves\n// the builder.\nfunction stableStringify(value: unknown): string {\n if (Array.isArray(value)) {\n return `[${value.map(stableStringify).join(',')}]`;\n }\n\n if (value && typeof value === 'object') {\n return `{${Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => `${JSON.stringify(key)}:${stableStringify(entry)}`)\n .join(',')}}`;\n }\n\n return JSON.stringify(value);\n}\n\ntype VariantSpec = {\n readonly value: string;\n};\n\ntype StorageRelationSpec = {\n readonly field: string;\n};\n\ntype StringListInput = string | readonly string[];\ntype Present<T> = Exclude<T, undefined>;\ntype EmptyObject = Record<never, never>;\ntype Simplify<T> = { [K in keyof T]: T[K] } & EmptyObject;\ntype StrictShape<Actual, Shape> = Actual &\n Shape &\n Record<Exclude<keyof Actual, keyof Shape>, never>;\n\ntype UnionToIntersection<Union> = (Union extends unknown ? (value: Union) => void : never) extends (\n value: infer Intersection,\n) => void\n ? Intersection\n : never;\n\nexport type ExtractCodecTypesFromPack<P> = P extends { __codecTypes?: infer CodecTypes }\n ? CodecTypes extends Record<string, { output: unknown }>\n ? CodecTypes\n : Record<string, never>\n : Record<string, never>;\n\n// This mirrors @prisma-next/target-mongo/codec-types because authoring must stay decoupled from\n// the target layer while still exposing the built-in Mongo codec registry to type inference.\ntype MongoCodecTypes = {\n readonly 'mongo/objectId@1': { readonly input: string; readonly output: string };\n readonly 'mongo/string@1': { readonly input: string; readonly output: string };\n readonly 'mongo/double@1': { readonly input: number; readonly output: number };\n readonly 'mongo/int32@1': { readonly input: number; readonly output: number };\n readonly 'mongo/bool@1': { readonly input: boolean; readonly output: boolean };\n readonly 'mongo/date@1': { readonly input: Date; readonly output: Date };\n readonly 'mongo/vector@1': {\n readonly input: readonly number[];\n readonly output: readonly number[];\n };\n};\n\ntype MergeExtensionCodecTypes<Packs extends Record<string, unknown>> = UnionToIntersection<\n {\n [K in keyof Packs]: ExtractCodecTypesFromPack<Packs[K]>;\n }[keyof Packs]\n>;\n\ntype MergeExtensionCodecTypesSafe<Packs> =\n Packs extends Record<string, unknown>\n ? keyof Packs extends never\n ? Record<string, never>\n : MergeExtensionCodecTypes<Packs>\n : Record<string, never>;\n\nexport interface FieldBuilder<\n Type extends ContractFieldType = ContractFieldType,\n Nullable extends boolean = boolean,\n Many extends boolean = boolean,\n> {\n readonly __kind: 'field';\n readonly __type: Type;\n readonly __nullable: Nullable;\n readonly __many: Many;\n optional(): FieldBuilder<Type, true, Many>;\n many(): FieldBuilder<Type, Nullable, true>;\n}\n\nexport interface ValueObjectBuilder<\n Name extends string = string,\n Fields extends Record<string, FieldBuilder> = Record<string, FieldBuilder>,\n> {\n readonly __kind: 'valueObject';\n readonly __name: Name;\n readonly __fields: Fields;\n}\n\nexport interface FieldReference<\n ModelName extends string = string,\n FieldName extends string = string,\n> {\n readonly __kind: 'fieldRef';\n readonly modelName: ModelName;\n readonly fieldName: FieldName;\n}\n\nexport interface RelationOn<\n LocalFields extends readonly string[] = readonly string[],\n TargetFields extends readonly string[] = readonly string[],\n> {\n readonly localFields: LocalFields;\n readonly targetFields: TargetFields;\n}\n\nexport interface RelationBuilder<\n To extends string = string,\n Cardinality extends '1:1' | '1:N' | 'N:1' = '1:1' | '1:N' | 'N:1',\n On extends RelationOn | undefined = RelationOn | undefined,\n> {\n readonly __kind: 'relation';\n readonly __to: To;\n readonly __cardinality: Cardinality;\n readonly __on: On;\n}\n\nexport interface ModelBuilder<\n Name extends string = string,\n Fields extends Record<string, FieldBuilder> = Record<string, FieldBuilder>,\n Relations extends Record<string, RelationBuilder> = Record<string, RelationBuilder>,\n Collection extends string | undefined = string | undefined,\n Owner extends string | undefined = string | undefined,\n Base extends string | undefined = string | undefined,\n StorageRelations extends Record<string, StorageRelationSpec> | undefined =\n | Record<string, StorageRelationSpec>\n | undefined,\n Discriminator extends { readonly field: string } | undefined =\n | { readonly field: string }\n | undefined,\n Variants extends Record<string, VariantSpec> | undefined =\n | Record<string, VariantSpec>\n | undefined,\n> {\n readonly __kind: 'model';\n readonly __name: Name;\n readonly __fields: Fields;\n readonly __relations: Relations;\n readonly __indexes: readonly MongoIndexAuthoringInput[] | undefined;\n readonly __collectionOptions: MongoCollectionOptionsAuthoringInput | undefined;\n readonly __collection: Collection;\n readonly __owner: Owner;\n readonly __base: Base;\n readonly __storageRelations: StorageRelations;\n readonly __discriminator: Discriminator;\n readonly __variants: Variants;\n ref<const FieldName extends keyof Fields & string>(\n fieldName: FieldName,\n ): FieldReference<Name, FieldName>;\n}\n\ntype AnyFieldBuilder = FieldBuilder<ContractFieldType, boolean, boolean>;\ntype AnyReferenceRelationBuilder = RelationBuilder<string, '1:1' | '1:N' | 'N:1', RelationOn>;\ntype AnyEmbedRelationBuilder = RelationBuilder<string, '1:1' | '1:N', undefined>;\ntype AnyRelationBuilder = AnyReferenceRelationBuilder | AnyEmbedRelationBuilder;\ntype AnyFieldReference = FieldReference<string, string>;\ntype NamedValueObjectBuilder<\n Name extends string = string,\n Fields extends Record<string, AnyFieldBuilder> = Record<string, AnyFieldBuilder>,\n> = ValueObjectBuilder<Name, Fields>;\ntype AnyValueObjectBuilder = NamedValueObjectBuilder;\ntype NamedModelBuilder<\n Name extends string = string,\n Fields extends Record<string, AnyFieldBuilder> = Record<string, AnyFieldBuilder>,\n Relations extends Record<string, AnyRelationBuilder> = Record<string, AnyRelationBuilder>,\n Collection extends string | undefined = string | undefined,\n Owner extends string | undefined = string | undefined,\n Base extends string | undefined = string | undefined,\n StorageRelations extends Record<string, StorageRelationSpec> | undefined =\n | Record<string, StorageRelationSpec>\n | undefined,\n Discriminator extends { readonly field: string } | undefined =\n | { readonly field: string }\n | undefined,\n Variants extends Record<string, VariantSpec> | undefined =\n | Record<string, VariantSpec>\n | undefined,\n> = ModelBuilder<\n Name,\n Fields,\n Relations,\n Collection,\n Owner,\n Base,\n StorageRelations,\n Discriminator,\n Variants\n>;\ntype AnyModelBuilder = NamedModelBuilder;\n\ntype ExtractFieldReferenceName<T> =\n T extends FieldReference<string, infer FieldName extends string> ? FieldName : never;\ntype ExtractModelName<T> = T extends NamedModelBuilder<infer Name> ? Name : never;\ntype ExtractValueObjectName<T> = T extends NamedValueObjectBuilder<infer Name> ? Name : never;\ntype ExtractModelCollection<T> =\n T extends NamedModelBuilder<\n string,\n Record<string, AnyFieldBuilder>,\n Record<string, AnyRelationBuilder>,\n infer Collection\n >\n ? Collection\n : never;\ntype ExtractModelOwner<T> =\n T extends NamedModelBuilder<\n string,\n Record<string, AnyFieldBuilder>,\n Record<string, AnyRelationBuilder>,\n string | undefined,\n infer Owner\n >\n ? Owner\n : never;\ntype ExtractModelBase<T> =\n T extends NamedModelBuilder<\n string,\n Record<string, AnyFieldBuilder>,\n Record<string, AnyRelationBuilder>,\n string | undefined,\n string | undefined,\n infer Base\n >\n ? Base\n : never;\ntype ExtractModelStorageRelations<T> =\n T extends NamedModelBuilder<\n string,\n Record<string, AnyFieldBuilder>,\n Record<string, AnyRelationBuilder>,\n string | undefined,\n string | undefined,\n string | undefined,\n infer StorageRelations\n >\n ? StorageRelations\n : never;\n\ntype ModelStorageSection<T> =\n ExtractModelCollection<T> extends string\n ? { readonly collection: ExtractModelCollection<T> }\n : EmptyObject;\ntype ModelStorageRelationsSection<T> =\n ExtractModelStorageRelations<T> extends Record<string, StorageRelationSpec>\n ? keyof ExtractModelStorageRelations<T> extends never\n ? EmptyObject\n : { readonly relations: ExtractModelStorageRelations<T> }\n : EmptyObject;\ntype RootModelCollection<T> =\n ExtractModelCollection<T> extends string\n ? ExtractModelOwner<T> extends undefined\n ? ExtractModelBase<T> extends undefined\n ? ExtractModelCollection<T>\n : never\n : never\n : never;\ntype RootModelName<T> = RootModelCollection<T> extends never ? never : ExtractModelName<T>;\ntype CollectionName<T> =\n ExtractModelCollection<T> extends string ? ExtractModelCollection<T> : never;\n\ntype ModelNameInput = string | AnyModelBuilder;\ntype ValueObjectNameInput = string | AnyValueObjectBuilder;\ntype RelationTargetFieldsInput<TargetName extends string> =\n | StringListInput\n | FieldReference<TargetName, string>\n | readonly FieldReference<TargetName, string>[];\n\ntype NormalizeModelName<T> = T extends string ? T : ExtractModelName<T>;\n\ntype NormalizeModelNameOrUndefined<T> = [T] extends [undefined]\n ? undefined\n : NormalizeModelName<Present<T>>;\n\ntype NormalizeValueObjectName<T> = T extends string ? T : ExtractValueObjectName<T>;\n\ntype NormalizeStringList<T> = T extends readonly string[]\n ? T\n : T extends string\n ? readonly [T]\n : readonly string[];\n\ntype NormalizeTargetFieldList<T> = T extends readonly AnyFieldReference[]\n ? {\n readonly [K in keyof T]: ExtractFieldReferenceName<T[K]>;\n }\n : T extends AnyFieldReference\n ? readonly [ExtractFieldReferenceName<T>]\n : NormalizeStringList<T>;\n\ntype ContractFieldFromBuilder<TBuilder> =\n TBuilder extends FieldBuilder<\n infer Type extends ContractFieldType,\n infer Nullable extends boolean,\n infer Many extends boolean\n >\n ? Simplify<\n {\n readonly type: Type;\n readonly nullable: Nullable;\n } & (Many extends true ? { readonly many: true } : EmptyObject)\n >\n : never;\n\ntype ContractFieldsFromRecord<Fields extends Record<string, AnyFieldBuilder>> = Simplify<{\n readonly [K in keyof Fields]: ContractFieldFromBuilder<Fields[K]>;\n}>;\n\ntype ContractValueObjectFromBuilder<TBuilder> =\n TBuilder extends ValueObjectBuilder<string, infer Fields extends Record<string, AnyFieldBuilder>>\n ? Simplify<{\n readonly fields: ContractFieldsFromRecord<Fields>;\n }>\n : never;\n\ntype ContractValueObjectsFromRecord<ValueObjects extends Record<string, AnyValueObjectBuilder>> =\n Simplify<{\n readonly [K in keyof ValueObjects as ExtractValueObjectName<\n ValueObjects[K]\n >]: ContractValueObjectFromBuilder<ValueObjects[K]>;\n }>;\n\ntype ContractRelationFromBuilder<TBuilder> =\n TBuilder extends RelationBuilder<\n infer To extends string,\n infer Cardinality extends '1:1' | '1:N' | 'N:1',\n infer On extends RelationOn | undefined\n >\n ? On extends RelationOn\n ? {\n readonly to: CrossRefFor<To>;\n readonly cardinality: Cardinality;\n readonly on: On;\n }\n : {\n readonly to: CrossRefFor<To>;\n readonly cardinality: Cardinality;\n }\n : never;\n\ntype ContractRelationsFromRecord<Relations extends Record<string, AnyRelationBuilder>> =\n keyof Relations extends never\n ? Record<string, never>\n : Simplify<{\n readonly [K in keyof Relations]: ContractRelationFromBuilder<Relations[K]>;\n }>;\n\ntype ContractModelStorageFromBuilder<TBuilder> = ModelStorageSection<TBuilder> &\n ModelStorageRelationsSection<TBuilder>;\n\ntype MaybeOwner<Owner> = [Owner] extends [undefined]\n ? EmptyObject\n : { readonly owner: Owner & string };\ntype MaybeBase<Base> = [Base] extends [undefined]\n ? EmptyObject\n : { readonly base: CrossRefFor<Base & string> };\ntype MaybeDiscriminator<Discriminator> = [Discriminator] extends [undefined]\n ? EmptyObject\n : { readonly discriminator: Discriminator & { readonly field: string } };\ntype MaybeVariants<Variants> = [Variants] extends [undefined]\n ? EmptyObject\n : { readonly variants: Variants };\n\ntype ContractModelFromBuilder<TBuilder> =\n TBuilder extends NamedModelBuilder<\n string,\n infer Fields extends Record<string, AnyFieldBuilder>,\n infer Relations extends Record<string, AnyRelationBuilder>,\n string | undefined,\n infer Owner,\n infer Base,\n Record<string, StorageRelationSpec> | undefined,\n infer Discriminator,\n infer Variants\n >\n ? Simplify<\n {\n readonly fields: ContractFieldsFromRecord<Fields>;\n readonly relations: ContractRelationsFromRecord<Relations>;\n readonly storage: ContractModelStorageFromBuilder<TBuilder>;\n } & MaybeOwner<Owner> &\n MaybeBase<Base> &\n MaybeDiscriminator<Discriminator> &\n MaybeVariants<Variants>\n >\n : never;\n\ntype ContractModelsFromRecord<Models extends Record<string, AnyModelBuilder>> = Simplify<{\n readonly [K in keyof Models as ExtractModelName<Models[K]>]: ContractModelFromBuilder<Models[K]>;\n}>;\n\ntype CrossRefFor<M extends string> = CrossReference & { readonly model: M };\n\ntype DerivedRootModels<Models extends Record<string, AnyModelBuilder>> = Simplify<{\n readonly [K in keyof Models as RootModelCollection<Models[K]>]: CrossRefFor<\n RootModelName<Models[K]>\n >;\n}>;\n\ntype StorageCollectionsFromModels<Models extends Record<string, AnyModelBuilder>> = Simplify<{\n readonly [K in keyof Models as CollectionName<Models[K]>]: MongoCollection;\n}>;\n\ntype NormalizeRoots<Roots extends Record<string, ModelNameInput>> = Simplify<{\n readonly [K in keyof Roots]: CrossRefFor<NormalizeModelName<Roots[K]>>;\n}>;\n\ntype DefinitionModels<Definition> = Definition extends {\n readonly models?: infer Models extends Record<string, AnyModelBuilder>;\n}\n ? Models\n : Record<never, never>;\n\ntype DefinitionValueObjects<Definition> = Definition extends {\n readonly valueObjects?: infer ValueObjects extends Record<string, AnyValueObjectBuilder>;\n}\n ? ValueObjects\n : Record<never, never>;\n\ntype DefinitionRoots<Definition> = Definition extends {\n readonly roots?: infer Roots extends Record<string, ModelNameInput>;\n}\n ? NormalizeRoots<Roots>\n : DerivedRootModels<DefinitionModels<Definition>>;\n\ntype DefinitionExtensionPacks<Definition> = Definition extends {\n readonly extensionPacks?: infer ExtensionPacks extends Record<\n string,\n ExtensionPackRef<string, string>\n >;\n}\n ? ExtensionPacks\n : Record<never, never>;\n\ntype DefinitionFamilyId<Definition> = Definition extends {\n readonly family: FamilyPackRef<infer FamilyId>;\n}\n ? FamilyId\n : string;\n\ntype DefinitionTargetId<Definition> = Definition extends {\n readonly target: TargetPackRef<string, infer TargetId>;\n}\n ? TargetId\n : string;\n\ntype DefinitionStorage<Definition> = Simplify<\n MongoStorageShape & {\n readonly collections: StorageCollectionsFromModels<DefinitionModels<Definition>>;\n readonly storageHash: StorageHashBase<string>;\n }\n>;\n\ntype MaybeValueObjectsSection<ValueObjects extends Record<string, AnyValueObjectBuilder>> =\n keyof ValueObjects extends never\n ? EmptyObject\n : {\n readonly valueObjects: ContractValueObjectsFromRecord<ValueObjects>;\n };\n\ntype MongoContractBaseFromDefinition<Definition> = Simplify<\n {\n readonly target: DefinitionTargetId<Definition>;\n readonly targetFamily: DefinitionFamilyId<Definition>;\n readonly roots: DefinitionRoots<Definition>;\n readonly models: ContractModelsFromRecord<DefinitionModels<Definition>>;\n readonly storage: DefinitionStorage<Definition>;\n readonly capabilities: Record<string, never>;\n readonly extensionPacks: DefinitionExtensionPacks<Definition>;\n readonly profileHash: ProfileHashBase<string>;\n readonly meta: Record<string, never>;\n } & MaybeValueObjectsSection<DefinitionValueObjects<Definition>>\n>;\n\ntype CodecTypesFromDefinition<Definition> = MongoCodecTypes &\n MergeExtensionCodecTypesSafe<DefinitionExtensionPacks<Definition>>;\n\nexport type MongoContractResult<Definition> = MongoContractWithTypeMaps<\n MongoContractBaseFromDefinition<Definition>,\n MongoTypeMaps<CodecTypesFromDefinition<Definition>>\n>;\n\ntype ExtractEntitiesNamespaceFromPack<Pack> = ExtractAuthoringNamespaceFromPack<\n Pack,\n 'entityTypes',\n Record<never, never>\n>;\n\ntype MergeExtensionEntityNamespaces<ExtensionPacks> = MergeExtensionAuthoringNamespaces<\n ExtensionPacks,\n 'entityTypes'\n>;\n\nexport type ContractAuthoringHelpers<\n Family extends FamilyPackRef<string> = FamilyPackRef<string>,\n Target extends TargetPackRef<string, string> = TargetPackRef<string, string>,\n ExtensionPacks extends Record<string, ExtensionPackRef<string, string>> | undefined = undefined,\n> = EntityHelpersFromNamespace<\n ExtractEntitiesNamespaceFromPack<Family> &\n ExtractEntitiesNamespaceFromPack<Target> &\n MergeExtensionEntityNamespaces<ExtensionPacks>\n> & {\n readonly field: typeof field;\n readonly index: typeof index;\n readonly model: typeof model;\n readonly rel: typeof rel;\n readonly valueObject: typeof valueObject;\n};\n\ntype AuthoringComponent = {\n readonly authoring?: { readonly entityTypes?: unknown };\n};\n\nfunction extractEntitiesNamespace(component: AuthoringComponent): AuthoringEntityTypeNamespace {\n return (component.authoring?.entityTypes ?? {}) as AuthoringEntityTypeNamespace;\n}\n\nconst MONGO_RESERVED_HELPER_KEYS: readonly string[] = [\n 'field',\n 'index',\n 'model',\n 'rel',\n 'valueObject',\n];\n\nfunction composeMongoEntityHelpers(\n family: FamilyPackRef<string>,\n target: TargetPackRef<string, string>,\n extensionPacks: Record<string, ExtensionPackRef<string, string>> | undefined,\n): Record<string, unknown> {\n const components: readonly AuthoringComponent[] = [\n family,\n target,\n ...Object.values(extensionPacks ?? {}),\n ];\n const merged: Record<string, unknown> = {};\n for (const component of components) {\n const ns = extractEntitiesNamespace(component);\n if (Object.keys(ns).length > 0) {\n mergeAuthoringNamespaces(merged, ns, [], isAuthoringEntityTypeDescriptor, 'entity');\n }\n }\n // Mongo authoring does not yet ship contributed field / type namespaces in\n // the TS DSL surface, but the cross-registry guard mirrors SQL's call so\n // any future field / type contributions surface a structurally identical\n // collision error.\n assertNoCrossRegistryCollisions({}, {}, merged as AuthoringEntityTypeNamespace);\n // Pack-contributed entity types flatten onto the same top-level shape\n // as the built-in helpers (`model`, `rel`, `field`, `index`,\n // `valueObject`). Detect collisions explicitly so a contributed name\n // can't silently overwrite a built-in at runtime.\n const collisions = Object.keys(merged).filter((name) =>\n MONGO_RESERVED_HELPER_KEYS.includes(name),\n );\n if (collisions.length > 0) {\n throw new Error(\n `Pack-contributed entity type(s) ${collisions.map((c) => `\"${c}\"`).join(', ')} collide with the reserved built-in helper key(s) on the Mongo composed helpers surface. Reserved keys: ${MONGO_RESERVED_HELPER_KEYS.map((k) => `\"${k}\"`).join(', ')}.`,\n );\n }\n return createEntityHelpersFromNamespace(merged as AuthoringEntityTypeNamespace, {\n ctx: { family: family.familyId, target: target.targetId },\n });\n}\n\nexport type ContractScaffold<\n Family extends FamilyPackRef<string>,\n Target extends TargetPackRef<string, string>,\n ExtensionPacks extends Record<string, ExtensionPackRef<string, string>> | undefined = undefined,\n Roots extends Record<string, ModelNameInput> | undefined = undefined,\n> = {\n readonly family: Family;\n readonly target: Target;\n readonly extensionPacks?: ExtensionPacks;\n readonly roots?: Roots;\n};\n\nexport type ContractDefinition<\n Family extends FamilyPackRef<string>,\n Target extends TargetPackRef<string, string>,\n Models extends Record<string, AnyModelBuilder> = Record<never, never>,\n ValueObjects extends Record<string, AnyValueObjectBuilder> = Record<never, never>,\n ExtensionPacks extends Record<string, ExtensionPackRef<string, string>> | undefined = undefined,\n Roots extends Record<string, ModelNameInput> | undefined = undefined,\n> = ContractScaffold<Family, Target, ExtensionPacks, Roots> & {\n readonly models?: Models;\n readonly valueObjects?: ValueObjects;\n};\n\nexport type ContractFactory<\n Models extends Record<string, AnyModelBuilder> = Record<never, never>,\n ValueObjects extends Record<string, AnyValueObjectBuilder> = Record<never, never>,\n Roots extends Record<string, ModelNameInput> | undefined = undefined,\n Family extends FamilyPackRef<string> = FamilyPackRef<string>,\n Target extends TargetPackRef<string, string> = TargetPackRef<string, string>,\n ExtensionPacks extends Record<string, ExtensionPackRef<string, string>> | undefined = undefined,\n> = (helpers: ContractAuthoringHelpers<Family, Target, ExtensionPacks>) => {\n readonly models?: Models;\n readonly valueObjects?: ValueObjects;\n readonly roots?: Roots;\n};\n\ntype FieldBuilderSpec<\n Type extends ContractFieldType,\n Nullable extends boolean,\n Many extends boolean,\n> = {\n readonly type: Type;\n readonly nullable: Nullable;\n readonly many: Many;\n};\n\nfunction createFieldBuilder<\n Type extends ContractFieldType,\n Nullable extends boolean,\n Many extends boolean,\n>(spec: FieldBuilderSpec<Type, Nullable, Many>): FieldBuilder<Type, Nullable, Many> {\n return {\n __kind: 'field',\n __type: spec.type,\n __nullable: spec.nullable,\n __many: spec.many,\n optional() {\n return createFieldBuilder<Type, true, Many>({\n type: spec.type,\n nullable: true,\n many: spec.many,\n });\n },\n many() {\n return createFieldBuilder<Type, Nullable, true>({\n type: spec.type,\n nullable: spec.nullable,\n many: true,\n });\n },\n };\n}\n\nfunction normalizeOptionalTypeParams(\n typeParams: Record<string, unknown> | undefined,\n): { readonly typeParams: Record<string, unknown> } | Record<never, never> {\n if (!typeParams) {\n return {};\n }\n\n return { typeParams };\n}\n\nfunction createScalarFieldBuilder<\n CodecId extends string,\n TypeParams extends Record<string, unknown> | undefined = undefined,\n>(\n codecId: CodecId,\n options?: { readonly typeParams?: TypeParams },\n): FieldBuilder<\n {\n readonly kind: 'scalar';\n readonly codecId: CodecId;\n } & ([TypeParams] extends [undefined] ? EmptyObject : { readonly typeParams: TypeParams }),\n false,\n false\n> {\n return createFieldBuilder({\n type: {\n kind: 'scalar',\n codecId,\n ...normalizeOptionalTypeParams(options?.typeParams),\n } as {\n readonly kind: 'scalar';\n readonly codecId: CodecId;\n } & ([TypeParams] extends [undefined] ? EmptyObject : { readonly typeParams: TypeParams }),\n nullable: false,\n many: false,\n });\n}\n\nexport const field = {\n scalar: createScalarFieldBuilder,\n objectId() {\n return createScalarFieldBuilder('mongo/objectId@1');\n },\n string() {\n return createScalarFieldBuilder('mongo/string@1');\n },\n double() {\n return createScalarFieldBuilder('mongo/double@1');\n },\n int32() {\n return createScalarFieldBuilder('mongo/int32@1');\n },\n bool() {\n return createScalarFieldBuilder('mongo/bool@1');\n },\n date() {\n return createScalarFieldBuilder('mongo/date@1');\n },\n vector<const TypeParams extends Record<string, unknown> | undefined = undefined>(options?: {\n readonly typeParams?: TypeParams;\n }) {\n return createScalarFieldBuilder('mongo/vector@1', options);\n },\n valueObject<const ValueObject extends ValueObjectNameInput>(valueObjectName: ValueObject) {\n return createFieldBuilder({\n type: {\n kind: 'valueObject',\n name: resolveValueObjectName(valueObjectName),\n } as {\n readonly kind: 'valueObject';\n readonly name: NormalizeValueObjectName<ValueObject>;\n },\n nullable: false,\n many: false,\n });\n },\n} as const;\n\nexport function index<const Fields extends MongoIndexFields>(\n fields: Fields,\n): {\n readonly fields: Fields;\n};\nexport function index<const Fields extends MongoIndexFields, const Options>(\n fields: Fields,\n options: StrictShape<Options, MongoIndexOptionsInput>,\n): {\n readonly fields: Fields;\n readonly options: Options & MongoIndexOptionsInput;\n};\nexport function index(\n fields: MongoIndexFields,\n options?: MongoIndexOptionsInput,\n): {\n readonly fields: MongoIndexFields;\n readonly options?: MongoIndexOptionsInput;\n} {\n return {\n fields,\n ...(options ? { options } : {}),\n };\n}\n\nfunction createFieldReference<const ModelName extends string, const FieldName extends string>(\n modelName: ModelName,\n fieldName: FieldName,\n): FieldReference<ModelName, FieldName> {\n return {\n __kind: 'fieldRef',\n modelName,\n fieldName,\n };\n}\n\nfunction isFieldReference(value: unknown): value is FieldReference<string, string> {\n return (\n typeof value === 'object' && value !== null && '__kind' in value && value.__kind === 'fieldRef'\n );\n}\n\nfunction resolveModelName(value: ModelNameInput): string {\n return typeof value === 'string' ? value : value.__name;\n}\n\nfunction resolveValueObjectName(value: ValueObjectNameInput): string {\n return typeof value === 'string' ? value : value.__name;\n}\n\nfunction normalizeStringList(value: StringListInput): readonly string[] {\n return typeof value === 'string' ? [value] : [...value];\n}\n\nfunction normalizeTargetField(\n targetModelName: string,\n value: string | FieldReference<string, string>,\n): string {\n if (!isFieldReference(value)) {\n return value;\n }\n\n if (value.modelName !== targetModelName) {\n throw new Error(\n `Relation target \"${targetModelName}\" cannot reference field \"${value.modelName}.${value.fieldName}\".`,\n );\n }\n\n return value.fieldName;\n}\n\nfunction normalizeTargetFields(\n targetModelName: string,\n value: RelationTargetFieldsInput<string>,\n): readonly string[] {\n if (typeof value === 'string') {\n return [value];\n }\n\n if (isFieldReference(value)) {\n return [normalizeTargetField(targetModelName, value)];\n }\n\n return value.map((entry) => normalizeTargetField(targetModelName, entry));\n}\n\ntype ReferenceOptions<\n Target extends ModelNameInput,\n From extends StringListInput,\n To extends RelationTargetFieldsInput<NormalizeModelName<Target>>,\n> = {\n readonly from: From;\n readonly to: To;\n};\n\ntype RelationOnFromOptions<\n From extends StringListInput,\n To extends RelationTargetFieldsInput<string>,\n> = {\n readonly localFields: NormalizeStringList<From>;\n readonly targetFields: NormalizeTargetFieldList<To>;\n};\n\nfunction createRelationBuilder<\n To extends string,\n Cardinality extends '1:1' | '1:N' | 'N:1',\n On extends RelationOn | undefined,\n>(spec: {\n readonly to: To;\n readonly cardinality: Cardinality;\n readonly on: On;\n}): RelationBuilder<To, Cardinality, On> {\n return {\n __kind: 'relation',\n __to: spec.to,\n __cardinality: spec.cardinality,\n __on: spec.on,\n };\n}\n\nfunction createReferenceRelationBuilder<\n Target extends ModelNameInput,\n Cardinality extends '1:1' | '1:N' | 'N:1',\n From extends StringListInput,\n To extends RelationTargetFieldsInput<NormalizeModelName<Target>>,\n>(\n target: Target,\n cardinality: Cardinality,\n options: ReferenceOptions<Target, From, To>,\n): RelationBuilder<NormalizeModelName<Target>, Cardinality, RelationOnFromOptions<From, To>> {\n const targetModelName = resolveModelName(target);\n\n return createRelationBuilder({\n to: targetModelName as NormalizeModelName<Target>,\n cardinality,\n on: {\n localFields: normalizeStringList(options.from) as NormalizeStringList<From>,\n targetFields: normalizeTargetFields(\n targetModelName,\n options.to,\n ) as NormalizeTargetFieldList<To>,\n },\n });\n}\n\nfunction createEmbedRelationBuilder<\n Target extends ModelNameInput,\n Cardinality extends '1:1' | '1:N',\n>(\n target: Target,\n cardinality: Cardinality,\n): RelationBuilder<NormalizeModelName<Target>, Cardinality, undefined> {\n return createRelationBuilder({\n to: resolveModelName(target) as NormalizeModelName<Target>,\n cardinality,\n on: undefined,\n });\n}\n\nfunction hasOne<const Target extends ModelNameInput>(\n target: Target,\n): RelationBuilder<NormalizeModelName<Target>, '1:1', undefined>;\nfunction hasOne<\n const Target extends ModelNameInput,\n const From extends StringListInput,\n const To extends RelationTargetFieldsInput<NormalizeModelName<Target>>,\n>(\n target: Target,\n options: ReferenceOptions<Target, From, To>,\n): RelationBuilder<NormalizeModelName<Target>, '1:1', RelationOnFromOptions<From, To>>;\nfunction hasOne(\n target: ModelNameInput,\n options?: ReferenceOptions<ModelNameInput, StringListInput, RelationTargetFieldsInput<string>>,\n) {\n if (!options) {\n return createEmbedRelationBuilder(target, '1:1');\n }\n\n return createReferenceRelationBuilder(target, '1:1', options);\n}\n\nfunction hasMany<const Target extends ModelNameInput>(\n target: Target,\n): RelationBuilder<NormalizeModelName<Target>, '1:N', undefined>;\nfunction hasMany<\n const Target extends ModelNameInput,\n const From extends StringListInput,\n const To extends RelationTargetFieldsInput<NormalizeModelName<Target>>,\n>(\n target: Target,\n options: ReferenceOptions<Target, From, To>,\n): RelationBuilder<NormalizeModelName<Target>, '1:N', RelationOnFromOptions<From, To>>;\nfunction hasMany(\n target: ModelNameInput,\n options?: ReferenceOptions<ModelNameInput, StringListInput, RelationTargetFieldsInput<string>>,\n) {\n if (!options) {\n return createEmbedRelationBuilder(target, '1:N');\n }\n\n return createReferenceRelationBuilder(target, '1:N', options);\n}\n\nfunction belongsTo<\n const Target extends ModelNameInput,\n const From extends StringListInput,\n const To extends RelationTargetFieldsInput<NormalizeModelName<Target>>,\n>(\n target: Target,\n options: ReferenceOptions<Target, From, To>,\n): RelationBuilder<NormalizeModelName<Target>, 'N:1', RelationOnFromOptions<From, To>> {\n return createReferenceRelationBuilder(target, 'N:1', options);\n}\n\nexport const rel = {\n belongsTo,\n hasMany,\n hasOne,\n} as const;\n\ntype ValueObjectInput<Fields extends Record<string, AnyFieldBuilder>> = {\n readonly fields: Fields;\n};\n\nexport function valueObject<\n const Name extends string,\n const Fields extends Record<string, AnyFieldBuilder>,\n>(name: Name, input: ValueObjectInput<Fields>): ValueObjectBuilder<Name, Fields> {\n return {\n __kind: 'valueObject',\n __name: name,\n __fields: input.fields,\n };\n}\n\ntype ModelDiscriminatorInput<Variants extends Record<string, VariantSpec>> = {\n readonly field: string;\n readonly variants: Variants;\n};\n\ntype ModelInput<\n Fields extends Record<string, AnyFieldBuilder>,\n Relations extends Record<string, AnyRelationBuilder> | undefined,\n Collection extends string | undefined,\n Indexes extends readonly MongoIndexAuthoringInput[] | undefined,\n CollectionOptions,\n Owner extends ModelNameInput | undefined,\n Base extends ModelNameInput | undefined,\n StorageRelations extends Record<string, StorageRelationSpec> | undefined,\n Discriminator extends ModelDiscriminatorInput<Record<string, VariantSpec>> | undefined,\n> = {\n readonly collection?: Collection;\n readonly indexes?: Indexes;\n readonly collectionOptions?: StrictShape<CollectionOptions, MongoCollectionOptionsAuthoringInput>;\n readonly storageRelations?: StorageRelations;\n readonly fields: Fields;\n readonly relations?: Relations;\n readonly owner?: Owner;\n readonly base?: Base;\n readonly discriminator?: Discriminator;\n};\n\nexport function model<\n const Name extends string,\n const Fields extends Record<string, AnyFieldBuilder>,\n const Relations extends Record<string, AnyRelationBuilder> | undefined = undefined,\n const Collection extends string | undefined = undefined,\n const Indexes extends readonly MongoIndexAuthoringInput[] | undefined = undefined,\n const CollectionOptions = undefined,\n const Owner extends ModelNameInput | undefined = undefined,\n const Base extends ModelNameInput | undefined = undefined,\n const StorageRelations extends Record<string, StorageRelationSpec> | undefined = undefined,\n const Discriminator extends\n | ModelDiscriminatorInput<Record<string, VariantSpec>>\n | undefined = undefined,\n>(\n name: Name,\n input: ModelInput<\n Fields,\n Relations,\n Collection,\n Indexes,\n CollectionOptions,\n Owner,\n Base,\n StorageRelations,\n Discriminator\n >,\n): ModelBuilder<\n Name,\n Fields,\n Relations extends Record<string, AnyRelationBuilder> ? Relations : Record<never, never>,\n Collection,\n NormalizeModelNameOrUndefined<Owner>,\n NormalizeModelNameOrUndefined<Base>,\n StorageRelations,\n Discriminator extends { readonly field: infer Field extends string }\n ? { readonly field: Field }\n : undefined,\n Discriminator extends { readonly variants: infer Variants extends Record<string, VariantSpec> }\n ? Variants\n : undefined\n> {\n return {\n __kind: 'model',\n __name: name,\n __fields: input.fields,\n __relations: (input.relations ?? {}) as Relations extends Record<string, AnyRelationBuilder>\n ? Relations\n : Record<never, never>,\n __indexes: input.indexes,\n __collectionOptions: input.collectionOptions,\n __collection: input.collection as Collection,\n __owner: (input.owner\n ? resolveModelName(input.owner)\n : undefined) as NormalizeModelNameOrUndefined<Owner>,\n __base: (input.base\n ? resolveModelName(input.base)\n : undefined) as NormalizeModelNameOrUndefined<Base>,\n __storageRelations: input.storageRelations as StorageRelations,\n __discriminator: (input.discriminator\n ? { field: input.discriminator.field }\n : undefined) as Discriminator extends { readonly field: infer Field extends string }\n ? { readonly field: Field }\n : undefined,\n __variants: input.discriminator?.variants as Discriminator extends {\n readonly variants: infer Variants extends Record<string, VariantSpec>;\n }\n ? Variants\n : undefined,\n ref(fieldName) {\n return createFieldReference(name, fieldName);\n },\n };\n}\n\nfunction validateTargetPackRef(\n family: FamilyPackRef<string>,\n target: TargetPackRef<string, string>,\n): void {\n if (family.familyId !== 'mongo') {\n throw new Error(\n `defineContract only accepts Mongo family packs. Received family \"${family.familyId}\".`,\n );\n }\n\n if (target.familyId !== family.familyId) {\n throw new Error(\n `target pack \"${target.id}\" targets family \"${target.familyId}\" but contract family is \"${family.familyId}\".`,\n );\n }\n}\n\nfunction validateExtensionPackRefs(\n target: TargetPackRef<string, string>,\n extensionPacks?: Record<string, ExtensionPackRef<string, string>>,\n): void {\n if (!extensionPacks) {\n return;\n }\n\n for (const packRef of Object.values(extensionPacks)) {\n if (packRef.kind !== 'extension') {\n throw new Error(\n `defineContract only accepts extension pack refs in extensionPacks. Received kind \"${packRef.kind}\".`,\n );\n }\n\n if (packRef.familyId !== target.familyId) {\n throw new Error(\n `extension pack \"${packRef.id}\" targets family \"${packRef.familyId}\" but contract target family is \"${target.familyId}\".`,\n );\n }\n\n if (packRef.targetId && packRef.targetId !== target.targetId) {\n throw new Error(\n `extension pack \"${packRef.id}\" targets \"${packRef.targetId}\" but contract target is \"${target.targetId}\".`,\n );\n }\n }\n}\n\nfunction isContractScaffold(\n value: unknown,\n): value is ContractScaffold<\n FamilyPackRef<string>,\n TargetPackRef<string, string>,\n Record<string, ExtensionPackRef<string, string>> | undefined,\n Record<string, ModelNameInput> | undefined\n> {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n return 'family' in value && 'target' in value;\n}\n\nfunction buildContractField(builder: AnyFieldBuilder): ContractField {\n return builder.__many\n ? {\n type: builder.__type,\n nullable: builder.__nullable,\n many: true,\n }\n : {\n type: builder.__type,\n nullable: builder.__nullable,\n };\n}\n\nfunction buildFields(fields: Record<string, AnyFieldBuilder>): Record<string, ContractField> {\n const builtFields: Record<string, ContractField> = {};\n\n for (const [fieldName, fieldBuilder] of Object.entries(fields)) {\n builtFields[fieldName] = buildContractField(fieldBuilder);\n }\n\n return builtFields;\n}\n\nfunction buildRelation(\n relationBuilder: AnyRelationBuilder,\n): ContractEmbedRelation | ContractReferenceRelation {\n const to = crossRef(relationBuilder.__to, UNBOUND_NAMESPACE_ID);\n return relationBuilder.__on\n ? {\n to,\n cardinality: relationBuilder.__cardinality,\n on: relationBuilder.__on,\n }\n : {\n to,\n cardinality: relationBuilder.__cardinality,\n };\n}\n\nfunction buildRelations(\n relations: Record<string, AnyRelationBuilder>,\n): Record<string, ContractEmbedRelation | ContractReferenceRelation> {\n const builtRelations: Record<string, ContractEmbedRelation | ContractReferenceRelation> = {};\n\n for (const [relationName, relationBuilder] of Object.entries(relations)) {\n builtRelations[relationName] = buildRelation(relationBuilder);\n }\n\n return builtRelations;\n}\n\nfunction buildValueObjects(\n valueObjects: Record<string, AnyValueObjectBuilder> | undefined,\n): Record<string, ContractValueObject> {\n const builtValueObjects: Record<string, ContractValueObject> = {};\n\n for (const valueObjectBuilder of Object.values(valueObjects ?? {})) {\n if (valueObjectBuilder.__name in builtValueObjects) {\n throw new Error(\n `Duplicate value object name \"${valueObjectBuilder.__name}\" in defineContract().`,\n );\n }\n\n builtValueObjects[valueObjectBuilder.__name] = {\n fields: buildFields(valueObjectBuilder.__fields),\n };\n }\n\n return builtValueObjects;\n}\n\nfunction buildModels(\n models: Record<string, AnyModelBuilder> | undefined,\n): Record<string, MongoContract['models'][string]> {\n const builtModels: Record<string, MongoContract['models'][string]> = {};\n\n for (const modelBuilder of Object.values(models ?? {})) {\n if (modelBuilder.__name in builtModels) {\n throw new Error(`Duplicate model name \"${modelBuilder.__name}\" in defineContract().`);\n }\n\n const storage = {\n ...(modelBuilder.__collection ? { collection: modelBuilder.__collection } : {}),\n ...(modelBuilder.__storageRelations ? { relations: modelBuilder.__storageRelations } : {}),\n };\n\n builtModels[modelBuilder.__name] = {\n fields: buildFields(modelBuilder.__fields),\n relations: buildRelations(modelBuilder.__relations),\n storage,\n ...(modelBuilder.__owner ? { owner: modelBuilder.__owner } : {}),\n ...(modelBuilder.__base ? { base: crossRef(modelBuilder.__base, UNBOUND_NAMESPACE_ID) } : {}),\n ...(modelBuilder.__discriminator ? { discriminator: modelBuilder.__discriminator } : {}),\n ...(modelBuilder.__variants ? { variants: modelBuilder.__variants } : {}),\n };\n }\n\n return builtModels;\n}\n\nfunction deriveRoots(\n models: Record<string, AnyModelBuilder> | undefined,\n): Record<string, CrossReference> {\n const roots: Record<string, CrossReference> = {};\n\n for (const modelBuilder of Object.values(models ?? {})) {\n if (!modelBuilder.__collection || modelBuilder.__owner || modelBuilder.__base) {\n continue;\n }\n\n roots[modelBuilder.__collection] = crossRef(modelBuilder.__name, UNBOUND_NAMESPACE_ID);\n }\n\n return roots;\n}\n\nfunction normalizeRoots(\n roots: Record<string, ModelNameInput> | undefined,\n): Record<string, CrossReference> {\n const normalizedRoots: Record<string, CrossReference> = {};\n\n for (const [rootName, rootValue] of Object.entries(roots ?? {})) {\n normalizedRoots[rootName] = crossRef(resolveModelName(rootValue), UNBOUND_NAMESPACE_ID);\n }\n\n return normalizedRoots;\n}\n\nfunction toStorageIndex(index: MongoIndexAuthoringInput): MongoIndex {\n const keys = Object.entries(index.fields).map(([field, direction]) => ({\n field,\n direction,\n }));\n const input: Record<string, unknown> = { keys };\n if (index.options) {\n for (const [key, value] of Object.entries(index.options)) {\n if (value !== undefined) {\n input[key] = value;\n }\n }\n }\n return new MongoIndex(input as unknown as MongoIndexInput);\n}\n\nfunction toStorageCollectionOptions(\n opts: MongoCollectionOptionsAuthoringInput,\n): MongoCollectionOptions {\n const input: MongoCollectionOptionsInput = {\n ...(opts.capped\n ? { capped: { size: opts.size ?? 0, ...(opts.max != null && { max: opts.max }) } }\n : {}),\n ...(opts.storageEngine !== undefined && { storageEngine: opts.storageEngine }),\n ...(opts.indexOptionDefaults !== undefined && {\n indexOptionDefaults: opts.indexOptionDefaults,\n }),\n ...(opts.collation !== undefined && { collation: opts.collation }),\n ...(opts.timeseries !== undefined && { timeseries: opts.timeseries }),\n ...(opts.clusteredIndex !== undefined && {\n clusteredIndex:\n opts.clusteredIndex.name !== undefined ? { name: opts.clusteredIndex.name } : {},\n }),\n ...(opts.expireAfterSeconds !== undefined && { expireAfterSeconds: opts.expireAfterSeconds }),\n ...(opts.changeStreamPreAndPostImages !== undefined && {\n changeStreamPreAndPostImages: opts.changeStreamPreAndPostImages,\n }),\n };\n return new MongoCollectionOptions(input);\n}\n\nfunction findMissingIndexField(\n index: MongoIndexAuthoringInput,\n modelFields: Record<string, unknown>,\n): string | undefined {\n for (const fieldName of Object.keys(index.fields)) {\n const wildcardMatch = fieldName.match(/^(.+)\\.\\$\\*\\*$/);\n const lookupName = wildcardMatch ? wildcardMatch[1] : fieldName;\n if (lookupName === undefined || lookupName.length === 0) continue;\n if (lookupName === '$**') continue;\n if (!Object.hasOwn(modelFields, lookupName)) {\n return lookupName;\n }\n }\n return undefined;\n}\n\nfunction resolveVariantScope(\n modelBuilder: AnyModelBuilder,\n modelsByName: Record<string, AnyModelBuilder>,\n): { discriminatorField: string; discriminatorValue: string } | undefined {\n if (!modelBuilder.__base) return undefined;\n const baseBuilder = modelsByName[modelBuilder.__base];\n if (!baseBuilder) return undefined;\n const discriminatorField = baseBuilder.__discriminator?.field;\n const variantValue = baseBuilder.__variants?.[modelBuilder.__name]?.value;\n if (!discriminatorField || variantValue === undefined) return undefined;\n return { discriminatorField, discriminatorValue: variantValue };\n}\n\nfunction scopeVariantIndex(\n storageIndex: MongoIndex,\n scope: { discriminatorField: string; discriminatorValue: string },\n variantName: string,\n authoredIndex: MongoIndexAuthoringInput | undefined,\n): MongoIndex {\n const result = applyPolymorphicScopeToMongoIndex(storageIndex, scope);\n if (result.kind === 'conflict') {\n const indexLabel = authoredIndex ? canonicalStringify(authoredIndex) : '<unknown>';\n throw new Error(\n `Variant model \"${variantName}\" index ${indexLabel} conflicts with discriminator scope: ${result.reason}`,\n );\n }\n return result.index;\n}\n\nfunction buildCollections(\n models: Record<string, AnyModelBuilder> | undefined,\n): Record<string, MongoCollection> {\n const intermediate: Record<string, MongoCollectionInput> = {};\n const declaredIndexOwners = new Map<string, string>();\n const modelMap = models ?? {};\n const modelsByName: Record<string, AnyModelBuilder> = {};\n for (const builder of Object.values(modelMap)) {\n modelsByName[builder.__name] = builder;\n }\n\n for (const modelBuilder of Object.values(modelMap)) {\n if (!modelBuilder.__collection) {\n if (modelBuilder.__indexes && modelBuilder.__indexes.length > 0) {\n throw new Error(\n `Model \"${modelBuilder.__name}\" defines indexes but has no collection to attach them to.`,\n );\n }\n\n if (modelBuilder.__collectionOptions) {\n throw new Error(\n `Model \"${modelBuilder.__name}\" defines collectionOptions but has no collection to attach them to.`,\n );\n }\n\n continue;\n }\n\n const existingCollection: MongoCollectionInput = intermediate[modelBuilder.__collection] ?? {};\n const existingIndexes = existingCollection.indexes ?? [];\n\n if (existingCollection.options && modelBuilder.__collectionOptions) {\n throw new Error(\n `Collection \"${modelBuilder.__collection}\" has collectionOptions declared by multiple models. Author collectionOptions on a single model per collection.`,\n );\n }\n\n for (const collectionIndex of modelBuilder.__indexes ?? []) {\n const missingField = findMissingIndexField(collectionIndex, modelBuilder.__fields);\n if (missingField !== undefined) {\n const indexSignature = canonicalStringify(collectionIndex);\n throw new Error(\n `Model \"${modelBuilder.__name}\" index ${indexSignature} references unknown field \"${missingField}\".`,\n );\n }\n }\n\n const polymorphicScope = resolveVariantScope(modelBuilder, modelsByName);\n const rawStorageIndexes = (modelBuilder.__indexes ?? []).map(toStorageIndex);\n const storageIndexes = polymorphicScope\n ? rawStorageIndexes.map((idx, i) =>\n scopeVariantIndex(\n idx,\n polymorphicScope,\n modelBuilder.__name,\n modelBuilder.__indexes?.[i],\n ),\n )\n : rawStorageIndexes;\n\n // Dedup after scoping so sibling variants that authentically declare\n // identical raw indexes (e.g. Bug and Feature both index severity) do\n // not collide — their post-scoping storage indexes differ by\n // partialFilterExpression and are correctly distinct on MongoDB.\n for (let i = 0; i < storageIndexes.length; i++) {\n const storageIndex = storageIndexes[i];\n if (storageIndex === undefined) continue;\n const indexSignature = stableStringify(storageIndex);\n const collectionIndexKey = `${modelBuilder.__collection}:${indexSignature}`;\n const firstOwner = declaredIndexOwners.get(collectionIndexKey);\n if (firstOwner) {\n const authoredIndex = modelBuilder.__indexes?.[i];\n const reportedSignature = authoredIndex\n ? canonicalStringify(authoredIndex)\n : indexSignature;\n throw new Error(\n `Collection \"${modelBuilder.__collection}\" defines duplicate index ${reportedSignature}. First declared on model \"${firstOwner}\" and duplicated on model \"${modelBuilder.__name}\".`,\n );\n }\n declaredIndexOwners.set(collectionIndexKey, modelBuilder.__name);\n }\n const storageOptions = modelBuilder.__collectionOptions\n ? toStorageCollectionOptions(modelBuilder.__collectionOptions)\n : undefined;\n\n intermediate[modelBuilder.__collection] =\n storageIndexes.length > 0\n ? {\n ...existingCollection,\n indexes: [...existingIndexes, ...storageIndexes],\n ...(storageOptions ? { options: storageOptions } : {}),\n }\n : storageOptions\n ? {\n ...existingCollection,\n options: storageOptions,\n }\n : existingCollection;\n }\n\n const collections: Record<string, MongoCollection> = {};\n for (const [name, data] of Object.entries(intermediate)) {\n collections[name] = new MongoCollection(data);\n }\n return collections;\n}\n\nfunction buildContractFromDefinition<\n const Definition extends ContractDefinition<\n FamilyPackRef<string>,\n TargetPackRef<string, string>,\n Record<string, AnyModelBuilder>,\n Record<string, AnyValueObjectBuilder>,\n Record<string, ExtensionPackRef<string, string>> | undefined,\n Record<string, ModelNameInput> | undefined\n >,\n>(definition: Definition): MongoContractResult<Definition> {\n validateTargetPackRef(definition.family, definition.target);\n validateExtensionPackRefs(definition.target, definition.extensionPacks);\n\n const builtModels = buildModels(definition.models);\n const builtValueObjects = buildValueObjects(definition.valueObjects);\n const roots = definition.roots\n ? normalizeRoots(definition.roots)\n : deriveRoots(definition.models);\n // The Mongo `defineContract` input no longer accepts a `capabilities`\n // block. The build-time matrix is empty here; CLI-time `enrichContract`\n // layers in adapter / driver / extension caps. `profileHash` continues\n // to fingerprint this (now-always-empty) author subset, so it stabilises\n // at `hash({})`.\n const capabilities: Record<string, Record<string, boolean>> = {};\n const collections = buildCollections(definition.models);\n const storageBody = {\n namespaces: {\n [UNBOUND_NAMESPACE_ID]: {\n id: UNBOUND_NAMESPACE_ID,\n collections,\n },\n },\n };\n\n const storageHash = computeStorageHash({\n target: definition.target.targetId,\n targetFamily: definition.family.familyId,\n storage: storageBody,\n });\n\n const storage = new MongoStorage({\n storageHash,\n ...storageBody,\n }) as unknown as MongoStorageShape<string>;\n\n const builtContract = {\n target: definition.target.targetId,\n targetFamily: definition.family.familyId,\n roots,\n models: builtModels,\n ...(Object.keys(builtValueObjects).length > 0 ? { valueObjects: builtValueObjects } : {}),\n storage,\n capabilities,\n extensionPacks: definition.extensionPacks ?? {},\n profileHash: computeProfileHash({\n target: definition.target.targetId,\n targetFamily: definition.family.familyId,\n capabilities,\n }),\n meta: {},\n } satisfies MongoContract;\n\n return builtContract as MongoContractResult<Definition>;\n}\n\nexport function defineContract<\n const Definition extends ContractDefinition<\n FamilyPackRef<string>,\n TargetPackRef<string, string>,\n Record<string, AnyModelBuilder>,\n Record<string, AnyValueObjectBuilder>,\n Record<string, ExtensionPackRef<string, string>> | undefined,\n Record<string, ModelNameInput> | undefined\n >,\n>(definition: Definition): MongoContractResult<Definition>;\nexport function defineContract<\n const Definition extends ContractScaffold<\n Family,\n Target,\n ExtensionPacks,\n Record<string, ModelNameInput> | undefined\n >,\n const Built extends {\n readonly models?: Record<string, AnyModelBuilder>;\n readonly valueObjects?: Record<string, AnyValueObjectBuilder>;\n readonly roots?: Record<string, ModelNameInput>;\n },\n const Family extends FamilyPackRef<string> = FamilyPackRef<string>,\n const Target extends TargetPackRef<string, string> = TargetPackRef<string, string>,\n const ExtensionPacks extends\n | Record<string, ExtensionPackRef<string, string>>\n | undefined = undefined,\n>(\n definition: Definition,\n factory: (helpers: ContractAuthoringHelpers<Family, Target, ExtensionPacks>) => Built,\n): MongoContractResult<Definition & Built>;\nexport function defineContract(\n definition: ContractScaffold<\n FamilyPackRef<string>,\n TargetPackRef<string, string>,\n Record<string, ExtensionPackRef<string, string>> | undefined,\n Record<string, ModelNameInput> | undefined\n >,\n factory?: ContractFactory<\n Record<string, AnyModelBuilder>,\n Record<string, AnyValueObjectBuilder>,\n Record<string, ModelNameInput> | undefined\n >,\n) {\n if (!isContractScaffold(definition)) {\n throw new TypeError(\n 'defineContract expects a contract definition object. Define your contract with defineContract({ family, target, models, ... }).',\n );\n }\n\n if (!factory) {\n return buildContractFromDefinition(definition);\n }\n\n const entities = composeMongoEntityHelpers(\n definition.family,\n definition.target,\n definition.extensionPacks,\n );\n const helpers = {\n ...entities,\n field,\n index,\n model,\n rel,\n valueObject,\n } as unknown as ContractAuthoringHelpers;\n\n return buildContractFromDefinition({\n ...definition,\n ...factory(helpers),\n });\n}\n"],"mappings":";;;;;;;;AA4DA,SAAS,gBAAgB,OAAwB;CAC/C,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,IAAI,MAAM,IAAI,eAAe,EAAE,KAAK,GAAG,EAAE;CAGlD,IAAI,SAAS,OAAO,UAAU,UAC5B,OAAO,IAAI,OAAO,QAAQ,KAAgC,EACvD,MAAM,CAAC,OAAO,CAAC,WAAW,KAAK,cAAc,KAAK,CAAC,EACnD,KAAK,CAAC,KAAK,WAAW,GAAG,KAAK,UAAU,GAAG,EAAE,GAAG,gBAAgB,KAAK,GAAG,EACxE,KAAK,GAAG,EAAE;CAGf,OAAO,KAAK,UAAU,KAAK;AAC7B;AAsfA,SAAS,yBAAyB,WAA6D;CAC7F,OAAQ,UAAU,WAAW,eAAe,CAAC;AAC/C;AAEA,MAAM,6BAAgD;CACpD;CACA;CACA;CACA;CACA;AACF;AAEA,SAAS,0BACP,QACA,QACA,gBACyB;CACzB,MAAM,aAA4C;EAChD;EACA;EACA,GAAG,OAAO,OAAO,kBAAkB,CAAC,CAAC;CACvC;CACA,MAAM,SAAkC,CAAC;CACzC,KAAK,MAAM,aAAa,YAAY;EAClC,MAAM,KAAK,yBAAyB,SAAS;EAC7C,IAAI,OAAO,KAAK,EAAE,EAAE,SAAS,GAC3B,yBAAyB,QAAQ,IAAI,CAAC,GAAG,iCAAiC,QAAQ;CAEtF;CAKA,gCAAgC,CAAC,GAAG,CAAC,GAAG,MAAsC;CAK9E,MAAM,aAAa,OAAO,KAAK,MAAM,EAAE,QAAQ,SAC7C,2BAA2B,SAAS,IAAI,CAC1C;CACA,IAAI,WAAW,SAAS,GACtB,MAAM,IAAI,MACR,mCAAmC,WAAW,KAAK,MAAM,IAAI,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE,0GAA0G,2BAA2B,KAAK,MAAM,IAAI,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE,EACrP;CAEF,OAAO,iCAAiC,QAAwC,EAC9E,KAAK;EAAE,QAAQ,OAAO;EAAU,QAAQ,OAAO;CAAS,EAC1D,CAAC;AACH;AAiDA,SAAS,mBAIP,MAAkF;CAClF,OAAO;EACL,QAAQ;EACR,QAAQ,KAAK;EACb,YAAY,KAAK;EACjB,QAAQ,KAAK;EACb,WAAW;GACT,OAAO,mBAAqC;IAC1C,MAAM,KAAK;IACX,UAAU;IACV,MAAM,KAAK;GACb,CAAC;EACH;EACA,OAAO;GACL,OAAO,mBAAyC;IAC9C,MAAM,KAAK;IACX,UAAU,KAAK;IACf,MAAM;GACR,CAAC;EACH;CACF;AACF;AAEA,SAAS,4BACP,YACyE;CACzE,IAAI,CAAC,YACH,OAAO,CAAC;CAGV,OAAO,EAAE,WAAW;AACtB;AAEA,SAAS,yBAIP,SACA,SAQA;CACA,OAAO,mBAAmB;EACxB,MAAM;GACJ,MAAM;GACN;GACA,GAAG,4BAA4B,SAAS,UAAU;EACpD;EAIA,UAAU;EACV,MAAM;CACR,CAAC;AACH;AAEA,MAAa,QAAQ;CACnB,QAAQ;CACR,WAAW;EACT,OAAO,yBAAyB,kBAAkB;CACpD;CACA,SAAS;EACP,OAAO,yBAAyB,gBAAgB;CAClD;CACA,SAAS;EACP,OAAO,yBAAyB,gBAAgB;CAClD;CACA,QAAQ;EACN,OAAO,yBAAyB,eAAe;CACjD;CACA,OAAO;EACL,OAAO,yBAAyB,cAAc;CAChD;CACA,OAAO;EACL,OAAO,yBAAyB,cAAc;CAChD;CACA,OAAiF,SAE9E;EACD,OAAO,yBAAyB,kBAAkB,OAAO;CAC3D;CACA,YAA4D,iBAA8B;EACxF,OAAO,mBAAmB;GACxB,MAAM;IACJ,MAAM;IACN,MAAM,uBAAuB,eAAe;GAC9C;GAIA,UAAU;GACV,MAAM;EACR,CAAC;CACH;AACF;AAcA,SAAgB,MACd,QACA,SAIA;CACA,OAAO;EACL;EACA,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;CAC/B;AACF;AAEA,SAAS,qBACP,WACA,WACsC;CACtC,OAAO;EACL,QAAQ;EACR;EACA;CACF;AACF;AAEA,SAAS,iBAAiB,OAAyD;CACjF,OACE,OAAO,UAAU,YAAY,UAAU,QAAQ,YAAY,SAAS,MAAM,WAAW;AAEzF;AAEA,SAAS,iBAAiB,OAA+B;CACvD,OAAO,OAAO,UAAU,WAAW,QAAQ,MAAM;AACnD;AAEA,SAAS,uBAAuB,OAAqC;CACnE,OAAO,OAAO,UAAU,WAAW,QAAQ,MAAM;AACnD;AAEA,SAAS,oBAAoB,OAA2C;CACtE,OAAO,OAAO,UAAU,WAAW,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK;AACxD;AAEA,SAAS,qBACP,iBACA,OACQ;CACR,IAAI,CAAC,iBAAiB,KAAK,GACzB,OAAO;CAGT,IAAI,MAAM,cAAc,iBACtB,MAAM,IAAI,MACR,oBAAoB,gBAAgB,4BAA4B,MAAM,UAAU,GAAG,MAAM,UAAU,GACrG;CAGF,OAAO,MAAM;AACf;AAEA,SAAS,sBACP,iBACA,OACmB;CACnB,IAAI,OAAO,UAAU,UACnB,OAAO,CAAC,KAAK;CAGf,IAAI,iBAAiB,KAAK,GACxB,OAAO,CAAC,qBAAqB,iBAAiB,KAAK,CAAC;CAGtD,OAAO,MAAM,KAAK,UAAU,qBAAqB,iBAAiB,KAAK,CAAC;AAC1E;AAmBA,SAAS,sBAIP,MAIuC;CACvC,OAAO;EACL,QAAQ;EACR,MAAM,KAAK;EACX,eAAe,KAAK;EACpB,MAAM,KAAK;CACb;AACF;AAEA,SAAS,+BAMP,QACA,aACA,SAC2F;CAC3F,MAAM,kBAAkB,iBAAiB,MAAM;CAE/C,OAAO,sBAAsB;EAC3B,IAAI;EACJ;EACA,IAAI;GACF,aAAa,oBAAoB,QAAQ,IAAI;GAC7C,cAAc,sBACZ,iBACA,QAAQ,EACV;EACF;CACF,CAAC;AACH;AAEA,SAAS,2BAIP,QACA,aACqE;CACrE,OAAO,sBAAsB;EAC3B,IAAI,iBAAiB,MAAM;EAC3B;EACA,IAAI,KAAA;CACN,CAAC;AACH;AAaA,SAAS,OACP,QACA,SACA;CACA,IAAI,CAAC,SACH,OAAO,2BAA2B,QAAQ,KAAK;CAGjD,OAAO,+BAA+B,QAAQ,OAAO,OAAO;AAC9D;AAaA,SAAS,QACP,QACA,SACA;CACA,IAAI,CAAC,SACH,OAAO,2BAA2B,QAAQ,KAAK;CAGjD,OAAO,+BAA+B,QAAQ,OAAO,OAAO;AAC9D;AAEA,SAAS,UAKP,QACA,SACqF;CACrF,OAAO,+BAA+B,QAAQ,OAAO,OAAO;AAC9D;AAEA,MAAa,MAAM;CACjB;CACA;CACA;AACF;AAMA,SAAgB,YAGd,MAAY,OAAmE;CAC/E,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,UAAU,MAAM;CAClB;AACF;AA6BA,SAAgB,MAcd,MACA,OAyBA;CACA,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,UAAU,MAAM;EAChB,aAAc,MAAM,aAAa,CAAC;EAGlC,WAAW,MAAM;EACjB,qBAAqB,MAAM;EAC3B,cAAc,MAAM;EACpB,SAAU,MAAM,QACZ,iBAAiB,MAAM,KAAK,IAC5B,KAAA;EACJ,QAAS,MAAM,OACX,iBAAiB,MAAM,IAAI,IAC3B,KAAA;EACJ,oBAAoB,MAAM;EAC1B,iBAAkB,MAAM,gBACpB,EAAE,OAAO,MAAM,cAAc,MAAM,IACnC,KAAA;EAGJ,YAAY,MAAM,eAAe;EAKjC,IAAI,WAAW;GACb,OAAO,qBAAqB,MAAM,SAAS;EAC7C;CACF;AACF;AAEA,SAAS,sBACP,QACA,QACM;CACN,IAAI,OAAO,aAAa,SACtB,MAAM,IAAI,MACR,oEAAoE,OAAO,SAAS,GACtF;CAGF,IAAI,OAAO,aAAa,OAAO,UAC7B,MAAM,IAAI,MACR,gBAAgB,OAAO,GAAG,oBAAoB,OAAO,SAAS,4BAA4B,OAAO,SAAS,GAC5G;AAEJ;AAEA,SAAS,0BACP,QACA,gBACM;CACN,IAAI,CAAC,gBACH;CAGF,KAAK,MAAM,WAAW,OAAO,OAAO,cAAc,GAAG;EACnD,IAAI,QAAQ,SAAS,aACnB,MAAM,IAAI,MACR,qFAAqF,QAAQ,KAAK,GACpG;EAGF,IAAI,QAAQ,aAAa,OAAO,UAC9B,MAAM,IAAI,MACR,mBAAmB,QAAQ,GAAG,oBAAoB,QAAQ,SAAS,mCAAmC,OAAO,SAAS,GACxH;EAGF,IAAI,QAAQ,YAAY,QAAQ,aAAa,OAAO,UAClD,MAAM,IAAI,MACR,mBAAmB,QAAQ,GAAG,aAAa,QAAQ,SAAS,4BAA4B,OAAO,SAAS,GAC1G;CAEJ;AACF;AAEA,SAAS,mBACP,OAMA;CACA,IAAI,OAAO,UAAU,YAAY,UAAU,MACzC,OAAO;CAGT,OAAO,YAAY,SAAS,YAAY;AAC1C;AAEA,SAAS,mBAAmB,SAAyC;CACnE,OAAO,QAAQ,SACX;EACE,MAAM,QAAQ;EACd,UAAU,QAAQ;EAClB,MAAM;CACR,IACA;EACE,MAAM,QAAQ;EACd,UAAU,QAAQ;CACpB;AACN;AAEA,SAAS,YAAY,QAAwE;CAC3F,MAAM,cAA6C,CAAC;CAEpD,KAAK,MAAM,CAAC,WAAW,iBAAiB,OAAO,QAAQ,MAAM,GAC3D,YAAY,aAAa,mBAAmB,YAAY;CAG1D,OAAO;AACT;AAEA,SAAS,cACP,iBACmD;CACnD,MAAM,KAAK,SAAS,gBAAgB,MAAM,oBAAoB;CAC9D,OAAO,gBAAgB,OACnB;EACE;EACA,aAAa,gBAAgB;EAC7B,IAAI,gBAAgB;CACtB,IACA;EACE;EACA,aAAa,gBAAgB;CAC/B;AACN;AAEA,SAAS,eACP,WACmE;CACnE,MAAM,iBAAoF,CAAC;CAE3F,KAAK,MAAM,CAAC,cAAc,oBAAoB,OAAO,QAAQ,SAAS,GACpE,eAAe,gBAAgB,cAAc,eAAe;CAG9D,OAAO;AACT;AAEA,SAAS,kBACP,cACqC;CACrC,MAAM,oBAAyD,CAAC;CAEhE,KAAK,MAAM,sBAAsB,OAAO,OAAO,gBAAgB,CAAC,CAAC,GAAG;EAClE,IAAI,mBAAmB,UAAU,mBAC/B,MAAM,IAAI,MACR,gCAAgC,mBAAmB,OAAO,uBAC5D;EAGF,kBAAkB,mBAAmB,UAAU,EAC7C,QAAQ,YAAY,mBAAmB,QAAQ,EACjD;CACF;CAEA,OAAO;AACT;AAEA,SAAS,YACP,QACiD;CACjD,MAAM,cAA+D,CAAC;CAEtE,KAAK,MAAM,gBAAgB,OAAO,OAAO,UAAU,CAAC,CAAC,GAAG;EACtD,IAAI,aAAa,UAAU,aACzB,MAAM,IAAI,MAAM,yBAAyB,aAAa,OAAO,uBAAuB;EAGtF,MAAM,UAAU;GACd,GAAI,aAAa,eAAe,EAAE,YAAY,aAAa,aAAa,IAAI,CAAC;GAC7E,GAAI,aAAa,qBAAqB,EAAE,WAAW,aAAa,mBAAmB,IAAI,CAAC;EAC1F;EAEA,YAAY,aAAa,UAAU;GACjC,QAAQ,YAAY,aAAa,QAAQ;GACzC,WAAW,eAAe,aAAa,WAAW;GAClD;GACA,GAAI,aAAa,UAAU,EAAE,OAAO,aAAa,QAAQ,IAAI,CAAC;GAC9D,GAAI,aAAa,SAAS,EAAE,MAAM,SAAS,aAAa,QAAQ,oBAAoB,EAAE,IAAI,CAAC;GAC3F,GAAI,aAAa,kBAAkB,EAAE,eAAe,aAAa,gBAAgB,IAAI,CAAC;GACtF,GAAI,aAAa,aAAa,EAAE,UAAU,aAAa,WAAW,IAAI,CAAC;EACzE;CACF;CAEA,OAAO;AACT;AAEA,SAAS,YACP,QACgC;CAChC,MAAM,QAAwC,CAAC;CAE/C,KAAK,MAAM,gBAAgB,OAAO,OAAO,UAAU,CAAC,CAAC,GAAG;EACtD,IAAI,CAAC,aAAa,gBAAgB,aAAa,WAAW,aAAa,QACrE;EAGF,MAAM,aAAa,gBAAgB,SAAS,aAAa,QAAQ,oBAAoB;CACvF;CAEA,OAAO;AACT;AAEA,SAAS,eACP,OACgC;CAChC,MAAM,kBAAkD,CAAC;CAEzD,KAAK,MAAM,CAAC,UAAU,cAAc,OAAO,QAAQ,SAAS,CAAC,CAAC,GAC5D,gBAAgB,YAAY,SAAS,iBAAiB,SAAS,GAAG,oBAAoB;CAGxF,OAAO;AACT;AAEA,SAAS,eAAe,OAA6C;CAKnE,MAAM,QAAiC,EAAE,MAJ5B,OAAO,QAAQ,MAAM,MAAM,EAAE,KAAK,CAAC,OAAO,gBAAgB;EACrE;EACA;CACF,EAC4C,EAAE;CAC9C,IAAI,MAAM;OACH,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,OAAO,GACrD,IAAI,UAAU,KAAA,GACZ,MAAM,OAAO;CAAA;CAInB,OAAO,IAAI,WAAW,KAAmC;AAC3D;AAEA,SAAS,2BACP,MACwB;CAoBxB,OAAO,IAAI,uBAAuB;EAlBhC,GAAI,KAAK,SACL,EAAE,QAAQ;GAAE,MAAM,KAAK,QAAQ;GAAG,GAAI,KAAK,OAAO,QAAQ,EAAE,KAAK,KAAK,IAAI;EAAG,EAAE,IAC/E,CAAC;EACL,GAAI,KAAK,kBAAkB,KAAA,KAAa,EAAE,eAAe,KAAK,cAAc;EAC5E,GAAI,KAAK,wBAAwB,KAAA,KAAa,EAC5C,qBAAqB,KAAK,oBAC5B;EACA,GAAI,KAAK,cAAc,KAAA,KAAa,EAAE,WAAW,KAAK,UAAU;EAChE,GAAI,KAAK,eAAe,KAAA,KAAa,EAAE,YAAY,KAAK,WAAW;EACnE,GAAI,KAAK,mBAAmB,KAAA,KAAa,EACvC,gBACE,KAAK,eAAe,SAAS,KAAA,IAAY,EAAE,MAAM,KAAK,eAAe,KAAK,IAAI,CAAC,EACnF;EACA,GAAI,KAAK,uBAAuB,KAAA,KAAa,EAAE,oBAAoB,KAAK,mBAAmB;EAC3F,GAAI,KAAK,iCAAiC,KAAA,KAAa,EACrD,8BAA8B,KAAK,6BACrC;CAEoC,CAAC;AACzC;AAEA,SAAS,sBACP,OACA,aACoB;CACpB,KAAK,MAAM,aAAa,OAAO,KAAK,MAAM,MAAM,GAAG;EACjD,MAAM,gBAAgB,UAAU,MAAM,gBAAgB;EACtD,MAAM,aAAa,gBAAgB,cAAc,KAAK;EACtD,IAAI,eAAe,KAAA,KAAa,WAAW,WAAW,GAAG;EACzD,IAAI,eAAe,OAAO;EAC1B,IAAI,CAAC,OAAO,OAAO,aAAa,UAAU,GACxC,OAAO;CAEX;AAEF;AAEA,SAAS,oBACP,cACA,cACwE;CACxE,IAAI,CAAC,aAAa,QAAQ,OAAO,KAAA;CACjC,MAAM,cAAc,aAAa,aAAa;CAC9C,IAAI,CAAC,aAAa,OAAO,KAAA;CACzB,MAAM,qBAAqB,YAAY,iBAAiB;CACxD,MAAM,eAAe,YAAY,aAAa,aAAa,SAAS;CACpE,IAAI,CAAC,sBAAsB,iBAAiB,KAAA,GAAW,OAAO,KAAA;CAC9D,OAAO;EAAE;EAAoB,oBAAoB;CAAa;AAChE;AAEA,SAAS,kBACP,cACA,OACA,aACA,eACY;CACZ,MAAM,SAAS,kCAAkC,cAAc,KAAK;CACpE,IAAI,OAAO,SAAS,YAAY;EAC9B,MAAM,aAAa,gBAAgB,mBAAmB,aAAa,IAAI;EACvE,MAAM,IAAI,MACR,kBAAkB,YAAY,UAAU,WAAW,uCAAuC,OAAO,QACnG;CACF;CACA,OAAO,OAAO;AAChB;AAEA,SAAS,iBACP,QACiC;CACjC,MAAM,eAAqD,CAAC;CAC5D,MAAM,sCAAsB,IAAI,IAAoB;CACpD,MAAM,WAAW,UAAU,CAAC;CAC5B,MAAM,eAAgD,CAAC;CACvD,KAAK,MAAM,WAAW,OAAO,OAAO,QAAQ,GAC1C,aAAa,QAAQ,UAAU;CAGjC,KAAK,MAAM,gBAAgB,OAAO,OAAO,QAAQ,GAAG;EAClD,IAAI,CAAC,aAAa,cAAc;GAC9B,IAAI,aAAa,aAAa,aAAa,UAAU,SAAS,GAC5D,MAAM,IAAI,MACR,UAAU,aAAa,OAAO,2DAChC;GAGF,IAAI,aAAa,qBACf,MAAM,IAAI,MACR,UAAU,aAAa,OAAO,qEAChC;GAGF;EACF;EAEA,MAAM,qBAA2C,aAAa,aAAa,iBAAiB,CAAC;EAC7F,MAAM,kBAAkB,mBAAmB,WAAW,CAAC;EAEvD,IAAI,mBAAmB,WAAW,aAAa,qBAC7C,MAAM,IAAI,MACR,eAAe,aAAa,aAAa,gHAC3C;EAGF,KAAK,MAAM,mBAAmB,aAAa,aAAa,CAAC,GAAG;GAC1D,MAAM,eAAe,sBAAsB,iBAAiB,aAAa,QAAQ;GACjF,IAAI,iBAAiB,KAAA,GAAW;IAC9B,MAAM,iBAAiB,mBAAmB,eAAe;IACzD,MAAM,IAAI,MACR,UAAU,aAAa,OAAO,UAAU,eAAe,6BAA6B,aAAa,GACnG;GACF;EACF;EAEA,MAAM,mBAAmB,oBAAoB,cAAc,YAAY;EACvE,MAAM,qBAAqB,aAAa,aAAa,CAAC,GAAG,IAAI,cAAc;EAC3E,MAAM,iBAAiB,mBACnB,kBAAkB,KAAK,KAAK,MAC1B,kBACE,KACA,kBACA,aAAa,QACb,aAAa,YAAY,EAC3B,CACF,IACA;EAMJ,KAAK,IAAI,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;GAC9C,MAAM,eAAe,eAAe;GACpC,IAAI,iBAAiB,KAAA,GAAW;GAChC,MAAM,iBAAiB,gBAAgB,YAAY;GACnD,MAAM,qBAAqB,GAAG,aAAa,aAAa,GAAG;GAC3D,MAAM,aAAa,oBAAoB,IAAI,kBAAkB;GAC7D,IAAI,YAAY;IACd,MAAM,gBAAgB,aAAa,YAAY;IAC/C,MAAM,oBAAoB,gBACtB,mBAAmB,aAAa,IAChC;IACJ,MAAM,IAAI,MACR,eAAe,aAAa,aAAa,4BAA4B,kBAAkB,6BAA6B,WAAW,6BAA6B,aAAa,OAAO,GAClL;GACF;GACA,oBAAoB,IAAI,oBAAoB,aAAa,MAAM;EACjE;EACA,MAAM,iBAAiB,aAAa,sBAChC,2BAA2B,aAAa,mBAAmB,IAC3D,KAAA;EAEJ,aAAa,aAAa,gBACxB,eAAe,SAAS,IACpB;GACE,GAAG;GACH,SAAS,CAAC,GAAG,iBAAiB,GAAG,cAAc;GAC/C,GAAI,iBAAiB,EAAE,SAAS,eAAe,IAAI,CAAC;EACtD,IACA,iBACE;GACE,GAAG;GACH,SAAS;EACX,IACA;CACV;CAEA,MAAM,cAA+C,CAAC;CACtD,KAAK,MAAM,CAAC,MAAM,SAAS,OAAO,QAAQ,YAAY,GACpD,YAAY,QAAQ,IAAI,gBAAgB,IAAI;CAE9C,OAAO;AACT;AAEA,SAAS,4BASP,YAAyD;CACzD,sBAAsB,WAAW,QAAQ,WAAW,MAAM;CAC1D,0BAA0B,WAAW,QAAQ,WAAW,cAAc;CAEtE,MAAM,cAAc,YAAY,WAAW,MAAM;CACjD,MAAM,oBAAoB,kBAAkB,WAAW,YAAY;CACnE,MAAM,QAAQ,WAAW,QACrB,eAAe,WAAW,KAAK,IAC/B,YAAY,WAAW,MAAM;CAMjC,MAAM,eAAwD,CAAC;CAC/D,MAAM,cAAc,iBAAiB,WAAW,MAAM;CACtD,MAAM,cAAc,EAClB,YAAY,GACT,uBAAuB;EACtB,IAAI;EACJ;CACF,EACF,EACF;CAQA,MAAM,UAAU,IAAI,aAAa;EAC/B,aAPkB,mBAAmB;GACrC,QAAQ,WAAW,OAAO;GAC1B,cAAc,WAAW,OAAO;GAChC,SAAS;EACX,CAGY;EACV,GAAG;CACL,CAAC;CAmBD,OAAO;EAhBL,QAAQ,WAAW,OAAO;EAC1B,cAAc,WAAW,OAAO;EAChC;EACA,QAAQ;EACR,GAAI,OAAO,KAAK,iBAAiB,EAAE,SAAS,IAAI,EAAE,cAAc,kBAAkB,IAAI,CAAC;EACvF;EACA;EACA,gBAAgB,WAAW,kBAAkB,CAAC;EAC9C,aAAa,mBAAmB;GAC9B,QAAQ,WAAW,OAAO;GAC1B,cAAc,WAAW,OAAO;GAChC;EACF,CAAC;EACD,MAAM,CAAC;CAGU;AACrB;AAiCA,SAAgB,eACd,YAMA,SAKA;CACA,IAAI,CAAC,mBAAmB,UAAU,GAChC,MAAM,IAAI,UACR,iIACF;CAGF,IAAI,CAAC,SACH,OAAO,4BAA4B,UAAU;CAQ/C,MAAM,UAAU;EACd,GANe,0BACf,WAAW,QACX,WAAW,QACX,WAAW,cAGD;EACV;EACA;EACA;EACA;EACA;CACF;CAEA,OAAO,4BAA4B;EACjC,GAAG;EACH,GAAG,QAAQ,OAAO;CACpB,CAAC;AACH"}
package/package.json CHANGED
@@ -1,23 +1,23 @@
1
1
  {
2
2
  "name": "@prisma-next/mongo-contract-ts",
3
- "version": "0.11.0-dev.32",
3
+ "version": "0.11.0-dev.34",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
7
  "description": "Mongo-specific TypeScript contract authoring surface for Prisma Next",
8
8
  "dependencies": {
9
- "@prisma-next/config": "0.11.0-dev.32",
10
- "@prisma-next/contract": "0.11.0-dev.32",
11
- "@prisma-next/contract-authoring": "0.11.0-dev.32",
12
- "@prisma-next/framework-components": "0.11.0-dev.32",
13
- "@prisma-next/mongo-contract": "0.11.0-dev.32",
14
- "@prisma-next/utils": "0.11.0-dev.32",
9
+ "@prisma-next/config": "0.11.0-dev.34",
10
+ "@prisma-next/contract": "0.11.0-dev.34",
11
+ "@prisma-next/contract-authoring": "0.11.0-dev.34",
12
+ "@prisma-next/framework-components": "0.11.0-dev.34",
13
+ "@prisma-next/mongo-contract": "0.11.0-dev.34",
14
+ "@prisma-next/utils": "0.11.0-dev.34",
15
15
  "pathe": "^2.0.3"
16
16
  },
17
17
  "devDependencies": {
18
- "@prisma-next/test-utils": "0.11.0-dev.32",
19
- "@prisma-next/tsconfig": "0.11.0-dev.32",
20
- "@prisma-next/tsdown": "0.11.0-dev.32",
18
+ "@prisma-next/test-utils": "0.11.0-dev.34",
19
+ "@prisma-next/tsconfig": "0.11.0-dev.34",
20
+ "@prisma-next/tsdown": "0.11.0-dev.34",
21
21
  "tsdown": "0.22.0",
22
22
  "typescript": "5.9.3",
23
23
  "vitest": "4.1.6"
@@ -5,9 +5,11 @@ import type {
5
5
  ContractFieldType,
6
6
  ContractReferenceRelation,
7
7
  ContractValueObject,
8
+ CrossReference,
8
9
  ProfileHashBase,
9
10
  StorageHashBase,
10
11
  } from '@prisma-next/contract/types';
12
+ import { crossRef } from '@prisma-next/contract/types';
11
13
  import {
12
14
  createEntityHelpersFromNamespace,
13
15
  type EntityHelpersFromNamespace,
@@ -388,12 +390,12 @@ type ContractRelationFromBuilder<TBuilder> =
388
390
  >
389
391
  ? On extends RelationOn
390
392
  ? {
391
- readonly to: To;
393
+ readonly to: CrossRefFor<To>;
392
394
  readonly cardinality: Cardinality;
393
395
  readonly on: On;
394
396
  }
395
397
  : {
396
- readonly to: To;
398
+ readonly to: CrossRefFor<To>;
397
399
  readonly cardinality: Cardinality;
398
400
  }
399
401
  : never;
@@ -411,7 +413,9 @@ type ContractModelStorageFromBuilder<TBuilder> = ModelStorageSection<TBuilder> &
411
413
  type MaybeOwner<Owner> = [Owner] extends [undefined]
412
414
  ? EmptyObject
413
415
  : { readonly owner: Owner & string };
414
- type MaybeBase<Base> = [Base] extends [undefined] ? EmptyObject : { readonly base: Base & string };
416
+ type MaybeBase<Base> = [Base] extends [undefined]
417
+ ? EmptyObject
418
+ : { readonly base: CrossRefFor<Base & string> };
415
419
  type MaybeDiscriminator<Discriminator> = [Discriminator] extends [undefined]
416
420
  ? EmptyObject
417
421
  : { readonly discriminator: Discriminator & { readonly field: string } };
@@ -447,8 +451,12 @@ type ContractModelsFromRecord<Models extends Record<string, AnyModelBuilder>> =
447
451
  readonly [K in keyof Models as ExtractModelName<Models[K]>]: ContractModelFromBuilder<Models[K]>;
448
452
  }>;
449
453
 
454
+ type CrossRefFor<M extends string> = CrossReference & { readonly model: M };
455
+
450
456
  type DerivedRootModels<Models extends Record<string, AnyModelBuilder>> = Simplify<{
451
- readonly [K in keyof Models as RootModelCollection<Models[K]>]: RootModelName<Models[K]>;
457
+ readonly [K in keyof Models as RootModelCollection<Models[K]>]: CrossRefFor<
458
+ RootModelName<Models[K]>
459
+ >;
452
460
  }>;
453
461
 
454
462
  type StorageCollectionsFromModels<Models extends Record<string, AnyModelBuilder>> = Simplify<{
@@ -456,7 +464,7 @@ type StorageCollectionsFromModels<Models extends Record<string, AnyModelBuilder>
456
464
  }>;
457
465
 
458
466
  type NormalizeRoots<Roots extends Record<string, ModelNameInput>> = Simplify<{
459
- readonly [K in keyof Roots]: NormalizeModelName<Roots[K]>;
467
+ readonly [K in keyof Roots]: CrossRefFor<NormalizeModelName<Roots[K]>>;
460
468
  }>;
461
469
 
462
470
  type DefinitionModels<Definition> = Definition extends {
@@ -1191,14 +1199,15 @@ function buildFields(fields: Record<string, AnyFieldBuilder>): Record<string, Co
1191
1199
  function buildRelation(
1192
1200
  relationBuilder: AnyRelationBuilder,
1193
1201
  ): ContractEmbedRelation | ContractReferenceRelation {
1202
+ const to = crossRef(relationBuilder.__to, UNBOUND_NAMESPACE_ID);
1194
1203
  return relationBuilder.__on
1195
1204
  ? {
1196
- to: relationBuilder.__to,
1205
+ to,
1197
1206
  cardinality: relationBuilder.__cardinality,
1198
1207
  on: relationBuilder.__on,
1199
1208
  }
1200
1209
  : {
1201
- to: relationBuilder.__to,
1210
+ to,
1202
1211
  cardinality: relationBuilder.__cardinality,
1203
1212
  };
1204
1213
  }
@@ -1255,7 +1264,7 @@ function buildModels(
1255
1264
  relations: buildRelations(modelBuilder.__relations),
1256
1265
  storage,
1257
1266
  ...(modelBuilder.__owner ? { owner: modelBuilder.__owner } : {}),
1258
- ...(modelBuilder.__base ? { base: modelBuilder.__base } : {}),
1267
+ ...(modelBuilder.__base ? { base: crossRef(modelBuilder.__base, UNBOUND_NAMESPACE_ID) } : {}),
1259
1268
  ...(modelBuilder.__discriminator ? { discriminator: modelBuilder.__discriminator } : {}),
1260
1269
  ...(modelBuilder.__variants ? { variants: modelBuilder.__variants } : {}),
1261
1270
  };
@@ -1264,25 +1273,29 @@ function buildModels(
1264
1273
  return builtModels;
1265
1274
  }
1266
1275
 
1267
- function deriveRoots(models: Record<string, AnyModelBuilder> | undefined): Record<string, string> {
1268
- const roots: Record<string, string> = {};
1276
+ function deriveRoots(
1277
+ models: Record<string, AnyModelBuilder> | undefined,
1278
+ ): Record<string, CrossReference> {
1279
+ const roots: Record<string, CrossReference> = {};
1269
1280
 
1270
1281
  for (const modelBuilder of Object.values(models ?? {})) {
1271
1282
  if (!modelBuilder.__collection || modelBuilder.__owner || modelBuilder.__base) {
1272
1283
  continue;
1273
1284
  }
1274
1285
 
1275
- roots[modelBuilder.__collection] = modelBuilder.__name;
1286
+ roots[modelBuilder.__collection] = crossRef(modelBuilder.__name, UNBOUND_NAMESPACE_ID);
1276
1287
  }
1277
1288
 
1278
1289
  return roots;
1279
1290
  }
1280
1291
 
1281
- function normalizeRoots(roots: Record<string, ModelNameInput> | undefined): Record<string, string> {
1282
- const normalizedRoots: Record<string, string> = {};
1292
+ function normalizeRoots(
1293
+ roots: Record<string, ModelNameInput> | undefined,
1294
+ ): Record<string, CrossReference> {
1295
+ const normalizedRoots: Record<string, CrossReference> = {};
1283
1296
 
1284
1297
  for (const [rootName, rootValue] of Object.entries(roots ?? {})) {
1285
- normalizedRoots[rootName] = resolveModelName(rootValue);
1298
+ normalizedRoots[rootName] = crossRef(resolveModelName(rootValue), UNBOUND_NAMESPACE_ID);
1286
1299
  }
1287
1300
 
1288
1301
  return normalizedRoots;