@prisma-next/mongo-contract-ts 0.5.0-dev.8 → 0.5.0-dev.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config-types.d.mts.map +1 -1
- package/dist/config-types.mjs +1 -2
- package/dist/config-types.mjs.map +1 -1
- package/dist/contract-builder.d.mts +63 -63
- package/dist/contract-builder.d.mts.map +1 -1
- package/dist/contract-builder.mjs +58 -12
- package/dist/contract-builder.mjs.map +1 -1
- package/package.json +11 -10
- package/src/contract-builder.ts +85 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-types.d.mts","names":[],"sources":["../src/config-types.ts"],"
|
|
1
|
+
{"version":3,"file":"config-types.d.mts","names":[],"sources":["../src/config-types.ts"],"mappings":";;;;iBAQgB,kBAAA,CAAmB,QAAA,EAAU,QAAA,EAAU,MAAA,YAAkB,gBAAA;AAAA,iBASzD,0BAAA,CAA2B,YAAA,UAAsB,MAAA,YAAkB,gBAAA"}
|
package/dist/config-types.mjs
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { pathToFileURL } from "node:url";
|
|
2
2
|
import { ifDefined } from "@prisma-next/utils/defined";
|
|
3
3
|
import { ok } from "@prisma-next/utils/result";
|
|
4
|
-
|
|
5
4
|
//#region src/config-types.ts
|
|
6
5
|
function typescriptContract(contract, output) {
|
|
7
6
|
return {
|
|
@@ -25,7 +24,7 @@ function typescriptContractFromPath(contractPath, output) {
|
|
|
25
24
|
...ifDefined("output", output)
|
|
26
25
|
};
|
|
27
26
|
}
|
|
28
|
-
|
|
29
27
|
//#endregion
|
|
30
28
|
export { typescriptContract, typescriptContractFromPath };
|
|
29
|
+
|
|
31
30
|
//# sourceMappingURL=config-types.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-types.mjs","names":[
|
|
1
|
+
{"version":3,"file":"config-types.mjs","names":[],"sources":["../src/config-types.ts"],"sourcesContent":["import { pathToFileURL } from 'node:url';\nimport type { ContractConfig } from '@prisma-next/config/config-types';\nimport type { Contract } from '@prisma-next/contract/types';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { ok } from '@prisma-next/utils/result';\n\n// This helper stays family-agnostic and intentionally accepts the base Contract shape even when\n// re-exported from a Mongo-specific package.\nexport function typescriptContract(contract: Contract, output?: string): ContractConfig {\n return {\n source: {\n load: async () => ok(contract),\n },\n ...ifDefined('output', output),\n };\n}\n\nexport function typescriptContractFromPath(contractPath: string, output?: string): ContractConfig {\n return {\n source: {\n inputs: [contractPath],\n load: async (context) => {\n const [absolutePath] = context.resolvedInputs;\n if (absolutePath === undefined) {\n throw new Error(\n 'typescriptContractFromPath: context.resolvedInputs is empty. The CLI config loader should populate it positional-matched with source.inputs.',\n );\n }\n const mod = await import(pathToFileURL(absolutePath).href);\n const contract: Contract | undefined = mod.default ?? mod.contract;\n if (contract === undefined) {\n throw new Error(\n `typescriptContractFromPath: module at \"${absolutePath}\" has no \"default\" or \"contract\" export.`,\n );\n }\n return ok(contract);\n },\n },\n ...ifDefined('output', output),\n };\n}\n"],"mappings":";;;;AAQA,SAAgB,mBAAmB,UAAoB,QAAiC;CACtF,OAAO;EACL,QAAQ,EACN,MAAM,YAAY,GAAG,SAAS,EAC/B;EACD,GAAG,UAAU,UAAU,OAAO;EAC/B;;AAGH,SAAgB,2BAA2B,cAAsB,QAAiC;CAChG,OAAO;EACL,QAAQ;GACN,QAAQ,CAAC,aAAa;GACtB,MAAM,OAAO,YAAY;IACvB,MAAM,CAAC,gBAAgB,QAAQ;IAC/B,IAAI,iBAAiB,KAAA,GACnB,MAAM,IAAI,MACR,+IACD;IAEH,MAAM,MAAM,MAAM,OAAO,cAAc,aAAa,CAAC;IACrD,MAAM,WAAiC,IAAI,WAAW,IAAI;IAC1D,IAAI,aAAa,KAAA,GACf,MAAM,IAAI,MACR,0CAA0C,aAAa,0CACxD;IAEH,OAAO,GAAG,SAAS;;GAEtB;EACD,GAAG,UAAU,UAAU,OAAO;EAC/B"}
|
|
@@ -53,18 +53,18 @@ type MongoCodecTypes = {
|
|
|
53
53
|
};
|
|
54
54
|
type MergeExtensionCodecTypes<Packs extends Record<string, unknown>> = UnionToIntersection<{ [K in keyof Packs]: ExtractCodecTypesFromPack<Packs[K]> }[keyof Packs]>;
|
|
55
55
|
type MergeExtensionCodecTypesSafe<Packs> = Packs extends Record<string, unknown> ? keyof Packs extends never ? Record<string, never> : MergeExtensionCodecTypes<Packs> : Record<string, never>;
|
|
56
|
-
interface FieldBuilder<Type
|
|
56
|
+
interface FieldBuilder<Type extends ContractFieldType = ContractFieldType, Nullable extends boolean = boolean, Many extends boolean = boolean> {
|
|
57
57
|
readonly __kind: 'field';
|
|
58
|
-
readonly __type: Type
|
|
59
|
-
readonly __nullable: Nullable
|
|
58
|
+
readonly __type: Type;
|
|
59
|
+
readonly __nullable: Nullable;
|
|
60
60
|
readonly __many: Many;
|
|
61
|
-
optional(): FieldBuilder<Type
|
|
62
|
-
many(): FieldBuilder<Type
|
|
61
|
+
optional(): FieldBuilder<Type, true, Many>;
|
|
62
|
+
many(): FieldBuilder<Type, Nullable, true>;
|
|
63
63
|
}
|
|
64
|
-
interface ValueObjectBuilder<Name extends string = string, Fields
|
|
64
|
+
interface ValueObjectBuilder<Name extends string = string, Fields extends Record<string, FieldBuilder> = Record<string, FieldBuilder>> {
|
|
65
65
|
readonly __kind: 'valueObject';
|
|
66
66
|
readonly __name: Name;
|
|
67
|
-
readonly __fields: Fields
|
|
67
|
+
readonly __fields: Fields;
|
|
68
68
|
}
|
|
69
69
|
interface FieldReference<ModelName extends string = string, FieldName extends string = string> {
|
|
70
70
|
readonly __kind: 'fieldRef';
|
|
@@ -75,43 +75,43 @@ interface RelationOn<LocalFields extends readonly string[] = readonly string[],
|
|
|
75
75
|
readonly localFields: LocalFields;
|
|
76
76
|
readonly targetFields: TargetFields;
|
|
77
77
|
}
|
|
78
|
-
interface RelationBuilder<To
|
|
78
|
+
interface RelationBuilder<To extends string = string, Cardinality extends '1:1' | '1:N' | 'N:1' = '1:1' | '1:N' | 'N:1', On extends RelationOn | undefined = RelationOn | undefined> {
|
|
79
79
|
readonly __kind: 'relation';
|
|
80
|
-
readonly __to: To
|
|
81
|
-
readonly __cardinality: Cardinality
|
|
82
|
-
readonly __on: On
|
|
80
|
+
readonly __to: To;
|
|
81
|
+
readonly __cardinality: Cardinality;
|
|
82
|
+
readonly __on: On;
|
|
83
83
|
}
|
|
84
|
-
interface ModelBuilder<Name extends string = string, Fields
|
|
84
|
+
interface ModelBuilder<Name extends string = string, Fields extends Record<string, FieldBuilder> = Record<string, FieldBuilder>, Relations extends Record<string, RelationBuilder> = Record<string, RelationBuilder>, Collection extends string | undefined = string | undefined, Owner extends string | undefined = string | undefined, Base extends string | undefined = string | undefined, StorageRelations extends Record<string, StorageRelationSpec> | undefined = Record<string, StorageRelationSpec> | undefined, Discriminator extends {
|
|
85
85
|
readonly field: string;
|
|
86
86
|
} | undefined = {
|
|
87
87
|
readonly field: string;
|
|
88
|
-
} | undefined, Variants
|
|
88
|
+
} | undefined, Variants extends Record<string, VariantSpec> | undefined = Record<string, VariantSpec> | undefined> {
|
|
89
89
|
readonly __kind: 'model';
|
|
90
90
|
readonly __name: Name;
|
|
91
|
-
readonly __fields: Fields
|
|
92
|
-
readonly __relations: Relations
|
|
91
|
+
readonly __fields: Fields;
|
|
92
|
+
readonly __relations: Relations;
|
|
93
93
|
readonly __indexes: readonly MongoIndex[] | undefined;
|
|
94
94
|
readonly __collectionOptions: MongoCollectionOptions | undefined;
|
|
95
95
|
readonly __collection: Collection;
|
|
96
|
-
readonly __owner: Owner
|
|
97
|
-
readonly __base: Base
|
|
96
|
+
readonly __owner: Owner;
|
|
97
|
+
readonly __base: Base;
|
|
98
98
|
readonly __storageRelations: StorageRelations;
|
|
99
|
-
readonly __discriminator: Discriminator
|
|
100
|
-
readonly __variants: Variants
|
|
101
|
-
ref<const FieldName extends keyof Fields
|
|
99
|
+
readonly __discriminator: Discriminator;
|
|
100
|
+
readonly __variants: Variants;
|
|
101
|
+
ref<const FieldName extends keyof Fields & string>(fieldName: FieldName): FieldReference<Name, FieldName>;
|
|
102
102
|
}
|
|
103
103
|
type AnyFieldBuilder = FieldBuilder<ContractFieldType, boolean, boolean>;
|
|
104
104
|
type AnyReferenceRelationBuilder = RelationBuilder<string, '1:1' | '1:N' | 'N:1', RelationOn>;
|
|
105
105
|
type AnyEmbedRelationBuilder = RelationBuilder<string, '1:1' | '1:N', undefined>;
|
|
106
106
|
type AnyRelationBuilder = AnyReferenceRelationBuilder | AnyEmbedRelationBuilder;
|
|
107
107
|
type AnyFieldReference = FieldReference<string, string>;
|
|
108
|
-
type NamedValueObjectBuilder<Name extends string = string, Fields
|
|
108
|
+
type NamedValueObjectBuilder<Name extends string = string, Fields extends Record<string, AnyFieldBuilder> = Record<string, AnyFieldBuilder>> = ValueObjectBuilder<Name, Fields>;
|
|
109
109
|
type AnyValueObjectBuilder = NamedValueObjectBuilder;
|
|
110
|
-
type NamedModelBuilder<Name extends string = string, Fields
|
|
110
|
+
type NamedModelBuilder<Name extends string = string, Fields extends Record<string, AnyFieldBuilder> = Record<string, AnyFieldBuilder>, Relations extends Record<string, AnyRelationBuilder> = Record<string, AnyRelationBuilder>, Collection extends string | undefined = string | undefined, Owner extends string | undefined = string | undefined, Base extends string | undefined = string | undefined, StorageRelations extends Record<string, StorageRelationSpec> | undefined = Record<string, StorageRelationSpec> | undefined, Discriminator extends {
|
|
111
111
|
readonly field: string;
|
|
112
112
|
} | undefined = {
|
|
113
113
|
readonly field: string;
|
|
114
|
-
} | undefined, Variants
|
|
114
|
+
} | undefined, Variants extends Record<string, VariantSpec> | undefined = Record<string, VariantSpec> | undefined> = ModelBuilder<Name, Fields, Relations, Collection, Owner, Base, StorageRelations, Discriminator, Variants>;
|
|
115
115
|
type AnyModelBuilder = NamedModelBuilder;
|
|
116
116
|
type ExtractFieldReferenceName<T> = T extends FieldReference<string, infer FieldName extends string> ? FieldName : never;
|
|
117
117
|
type ExtractModelName<T> = T extends NamedModelBuilder<infer Name> ? Name : never;
|
|
@@ -143,7 +143,7 @@ type ContractFieldFromBuilder<TBuilder> = TBuilder extends FieldBuilder<infer Ty
|
|
|
143
143
|
} & (Many extends true ? {
|
|
144
144
|
readonly many: true;
|
|
145
145
|
} : EmptyObject)> : never;
|
|
146
|
-
type ContractFieldsFromRecord<Fields
|
|
146
|
+
type ContractFieldsFromRecord<Fields extends Record<string, AnyFieldBuilder>> = Simplify<{ readonly [K in keyof Fields]: ContractFieldFromBuilder<Fields[K]> }>;
|
|
147
147
|
type ContractValueObjectFromBuilder<TBuilder> = TBuilder extends ValueObjectBuilder<string, infer Fields extends Record<string, AnyFieldBuilder>> ? Simplify<{
|
|
148
148
|
readonly fields: ContractFieldsFromRecord<Fields>;
|
|
149
149
|
}> : never;
|
|
@@ -156,21 +156,21 @@ type ContractRelationFromBuilder<TBuilder> = TBuilder extends RelationBuilder<in
|
|
|
156
156
|
readonly to: To;
|
|
157
157
|
readonly cardinality: Cardinality;
|
|
158
158
|
} : never;
|
|
159
|
-
type ContractRelationsFromRecord<Relations
|
|
159
|
+
type ContractRelationsFromRecord<Relations extends Record<string, AnyRelationBuilder>> = keyof Relations extends never ? Record<string, never> : Simplify<{ readonly [K in keyof Relations]: ContractRelationFromBuilder<Relations[K]> }>;
|
|
160
160
|
type ContractModelStorageFromBuilder<TBuilder> = ModelStorageSection<TBuilder> & ModelStorageRelationsSection<TBuilder>;
|
|
161
|
-
type MaybeOwner<Owner
|
|
162
|
-
readonly owner: Owner
|
|
161
|
+
type MaybeOwner<Owner> = [Owner] extends [undefined] ? EmptyObject : {
|
|
162
|
+
readonly owner: Owner & string;
|
|
163
163
|
};
|
|
164
|
-
type MaybeBase<Base
|
|
165
|
-
readonly base: Base
|
|
164
|
+
type MaybeBase<Base> = [Base] extends [undefined] ? EmptyObject : {
|
|
165
|
+
readonly base: Base & string;
|
|
166
166
|
};
|
|
167
|
-
type MaybeDiscriminator<Discriminator
|
|
168
|
-
readonly discriminator: Discriminator
|
|
167
|
+
type MaybeDiscriminator<Discriminator> = [Discriminator] extends [undefined] ? EmptyObject : {
|
|
168
|
+
readonly discriminator: Discriminator & {
|
|
169
169
|
readonly field: string;
|
|
170
170
|
};
|
|
171
171
|
};
|
|
172
|
-
type MaybeVariants<Variants
|
|
173
|
-
readonly variants: Variants
|
|
172
|
+
type MaybeVariants<Variants> = [Variants] extends [undefined] ? EmptyObject : {
|
|
173
|
+
readonly variants: Variants;
|
|
174
174
|
};
|
|
175
175
|
type ContractModelFromBuilder<TBuilder> = TBuilder extends NamedModelBuilder<string, infer Fields extends Record<string, AnyFieldBuilder>, infer Relations extends Record<string, AnyRelationBuilder>, string | undefined, infer Owner, infer Base, Record<string, StorageRelationSpec> | undefined, infer Discriminator, infer Variants> ? Simplify<{
|
|
176
176
|
readonly fields: ContractFieldsFromRecord<Fields>;
|
|
@@ -180,7 +180,7 @@ type ContractModelFromBuilder<TBuilder> = TBuilder extends NamedModelBuilder<str
|
|
|
180
180
|
type ContractModelsFromRecord<Models extends Record<string, AnyModelBuilder>> = Simplify<{ readonly [K in keyof Models as ExtractModelName<Models[K]>]: ContractModelFromBuilder<Models[K]> }>;
|
|
181
181
|
type DerivedRootModels<Models extends Record<string, AnyModelBuilder>> = Simplify<{ readonly [K in keyof Models as RootModelCollection<Models[K]>]: RootModelName<Models[K]> }>;
|
|
182
182
|
type StorageCollectionsFromModels<Models extends Record<string, AnyModelBuilder>> = Simplify<{ readonly [K in keyof Models as CollectionName<Models[K]>]: MongoStorageCollection }>;
|
|
183
|
-
type NormalizeRoots<Roots
|
|
183
|
+
type NormalizeRoots<Roots extends Record<string, ModelNameInput>> = Simplify<{ readonly [K in keyof Roots]: NormalizeModelName<Roots[K]> }>;
|
|
184
184
|
type DefinitionModels<Definition> = Definition extends {
|
|
185
185
|
readonly models?: infer Models extends Record<string, AnyModelBuilder>;
|
|
186
186
|
} ? Models : Record<never, never>;
|
|
@@ -229,21 +229,21 @@ type ContractAuthoringHelpers = {
|
|
|
229
229
|
readonly rel: typeof rel;
|
|
230
230
|
readonly valueObject: typeof valueObject;
|
|
231
231
|
};
|
|
232
|
-
type ContractScaffold<Family extends FamilyPackRef<string>, Target extends TargetPackRef<string, string>, ExtensionPacks extends Record<string, ExtensionPackRef<string, string>> | undefined = undefined, Capabilities extends ContractCapabilities | undefined = undefined, Roots
|
|
232
|
+
type ContractScaffold<Family extends FamilyPackRef<string>, Target extends TargetPackRef<string, string>, ExtensionPacks extends Record<string, ExtensionPackRef<string, string>> | undefined = undefined, Capabilities extends ContractCapabilities | undefined = undefined, Roots extends Record<string, ModelNameInput> | undefined = undefined> = {
|
|
233
233
|
readonly family: Family;
|
|
234
234
|
readonly target: Target;
|
|
235
235
|
readonly extensionPacks?: ExtensionPacks;
|
|
236
236
|
readonly capabilities?: Capabilities;
|
|
237
|
-
readonly roots?: Roots
|
|
237
|
+
readonly roots?: Roots;
|
|
238
238
|
};
|
|
239
|
-
type ContractDefinition<Family extends FamilyPackRef<string>, Target extends TargetPackRef<string, string>, Models extends Record<string, AnyModelBuilder> = Record<never, never>, ValueObjects extends Record<string, AnyValueObjectBuilder> = Record<never, never>, ExtensionPacks extends Record<string, ExtensionPackRef<string, string>> | undefined = undefined, Capabilities extends ContractCapabilities | undefined = undefined, Roots
|
|
239
|
+
type ContractDefinition<Family extends FamilyPackRef<string>, Target extends TargetPackRef<string, string>, Models extends Record<string, AnyModelBuilder> = Record<never, never>, ValueObjects extends Record<string, AnyValueObjectBuilder> = Record<never, never>, ExtensionPacks extends Record<string, ExtensionPackRef<string, string>> | undefined = undefined, Capabilities extends ContractCapabilities | undefined = undefined, Roots extends Record<string, ModelNameInput> | undefined = undefined> = ContractScaffold<Family, Target, ExtensionPacks, Capabilities, Roots> & {
|
|
240
240
|
readonly models?: Models;
|
|
241
241
|
readonly valueObjects?: ValueObjects;
|
|
242
242
|
};
|
|
243
|
-
type ContractFactory<Models extends Record<string, AnyModelBuilder> = Record<never, never>, ValueObjects extends Record<string, AnyValueObjectBuilder> = Record<never, never>, Roots
|
|
243
|
+
type ContractFactory<Models extends Record<string, AnyModelBuilder> = Record<never, never>, ValueObjects extends Record<string, AnyValueObjectBuilder> = Record<never, never>, Roots extends Record<string, ModelNameInput> | undefined = undefined> = (helpers: ContractAuthoringHelpers) => {
|
|
244
244
|
readonly models?: Models;
|
|
245
245
|
readonly valueObjects?: ValueObjects;
|
|
246
|
-
readonly roots?: Roots
|
|
246
|
+
readonly roots?: Roots;
|
|
247
247
|
};
|
|
248
248
|
declare function createScalarFieldBuilder<CodecId extends string, TypeParams extends Record<string, unknown> | undefined = undefined>(codecId: CodecId, options?: {
|
|
249
249
|
readonly typeParams?: TypeParams;
|
|
@@ -292,55 +292,55 @@ declare const field: {
|
|
|
292
292
|
readonly name: NormalizeValueObjectName<ValueObject>;
|
|
293
293
|
}, false, false>;
|
|
294
294
|
};
|
|
295
|
-
declare function index<const Fields
|
|
296
|
-
readonly fields: Fields
|
|
295
|
+
declare function index<const Fields extends MongoIndexFields>(fields: Fields): {
|
|
296
|
+
readonly fields: Fields;
|
|
297
297
|
};
|
|
298
|
-
declare function index<const Fields
|
|
299
|
-
readonly fields: Fields
|
|
298
|
+
declare function index<const Fields extends MongoIndexFields, const Options>(fields: Fields, options: StrictShape<Options, MongoIndexOptions>): {
|
|
299
|
+
readonly fields: Fields;
|
|
300
300
|
readonly options: Options & MongoIndexOptions;
|
|
301
301
|
};
|
|
302
|
-
type ReferenceOptions<Target extends ModelNameInput, From extends StringListInput, To
|
|
302
|
+
type ReferenceOptions<Target extends ModelNameInput, From extends StringListInput, To extends RelationTargetFieldsInput<NormalizeModelName<Target>>> = {
|
|
303
303
|
readonly from: From;
|
|
304
|
-
readonly to: To
|
|
304
|
+
readonly to: To;
|
|
305
305
|
};
|
|
306
|
-
type RelationOnFromOptions<From extends StringListInput, To
|
|
306
|
+
type RelationOnFromOptions<From extends StringListInput, To extends RelationTargetFieldsInput<string>> = {
|
|
307
307
|
readonly localFields: NormalizeStringList<From>;
|
|
308
|
-
readonly targetFields: NormalizeTargetFieldList<To
|
|
308
|
+
readonly targetFields: NormalizeTargetFieldList<To>;
|
|
309
309
|
};
|
|
310
310
|
declare function hasOne<const Target extends ModelNameInput>(target: Target): RelationBuilder<NormalizeModelName<Target>, '1:1', undefined>;
|
|
311
|
-
declare function hasOne<const Target extends ModelNameInput, const From extends StringListInput, const To
|
|
311
|
+
declare function hasOne<const Target extends ModelNameInput, const From extends StringListInput, const To extends RelationTargetFieldsInput<NormalizeModelName<Target>>>(target: Target, options: ReferenceOptions<Target, From, To>): RelationBuilder<NormalizeModelName<Target>, '1:1', RelationOnFromOptions<From, To>>;
|
|
312
312
|
declare function hasMany<const Target extends ModelNameInput>(target: Target): RelationBuilder<NormalizeModelName<Target>, '1:N', undefined>;
|
|
313
|
-
declare function hasMany<const Target extends ModelNameInput, const From extends StringListInput, const To
|
|
314
|
-
declare function belongsTo<const Target extends ModelNameInput, const From extends StringListInput, const To
|
|
313
|
+
declare function hasMany<const Target extends ModelNameInput, const From extends StringListInput, const To extends RelationTargetFieldsInput<NormalizeModelName<Target>>>(target: Target, options: ReferenceOptions<Target, From, To>): RelationBuilder<NormalizeModelName<Target>, '1:N', RelationOnFromOptions<From, To>>;
|
|
314
|
+
declare function belongsTo<const Target extends ModelNameInput, const From extends StringListInput, const To extends RelationTargetFieldsInput<NormalizeModelName<Target>>>(target: Target, options: ReferenceOptions<Target, From, To>): RelationBuilder<NormalizeModelName<Target>, 'N:1', RelationOnFromOptions<From, To>>;
|
|
315
315
|
declare const rel: {
|
|
316
316
|
readonly belongsTo: typeof belongsTo;
|
|
317
317
|
readonly hasMany: typeof hasMany;
|
|
318
318
|
readonly hasOne: typeof hasOne;
|
|
319
319
|
};
|
|
320
|
-
type ValueObjectInput<Fields
|
|
321
|
-
readonly fields: Fields
|
|
320
|
+
type ValueObjectInput<Fields extends Record<string, AnyFieldBuilder>> = {
|
|
321
|
+
readonly fields: Fields;
|
|
322
322
|
};
|
|
323
|
-
declare function valueObject<const Name extends string, const Fields
|
|
324
|
-
type ModelDiscriminatorInput<Variants
|
|
323
|
+
declare function valueObject<const Name extends string, const Fields extends Record<string, AnyFieldBuilder>>(name: Name, input: ValueObjectInput<Fields>): ValueObjectBuilder<Name, Fields>;
|
|
324
|
+
type ModelDiscriminatorInput<Variants extends Record<string, VariantSpec>> = {
|
|
325
325
|
readonly field: string;
|
|
326
|
-
readonly variants: Variants
|
|
326
|
+
readonly variants: Variants;
|
|
327
327
|
};
|
|
328
|
-
type ModelInput<Fields
|
|
328
|
+
type ModelInput<Fields extends Record<string, AnyFieldBuilder>, Relations extends Record<string, AnyRelationBuilder> | undefined, Collection extends string | undefined, Indexes extends readonly MongoIndex[] | undefined, CollectionOptions, Owner extends ModelNameInput | undefined, Base extends ModelNameInput | undefined, StorageRelations extends Record<string, StorageRelationSpec> | undefined, Discriminator extends ModelDiscriminatorInput<Record<string, VariantSpec>> | undefined> = {
|
|
329
329
|
readonly collection?: Collection;
|
|
330
330
|
readonly indexes?: Indexes;
|
|
331
331
|
readonly collectionOptions?: StrictShape<CollectionOptions, MongoCollectionOptions>;
|
|
332
332
|
readonly storageRelations?: StorageRelations;
|
|
333
|
-
readonly fields: Fields
|
|
334
|
-
readonly relations?: Relations
|
|
335
|
-
readonly owner?: Owner
|
|
336
|
-
readonly base?: Base
|
|
337
|
-
readonly discriminator?: Discriminator
|
|
333
|
+
readonly fields: Fields;
|
|
334
|
+
readonly relations?: Relations;
|
|
335
|
+
readonly owner?: Owner;
|
|
336
|
+
readonly base?: Base;
|
|
337
|
+
readonly discriminator?: Discriminator;
|
|
338
338
|
};
|
|
339
|
-
declare function model<const Name extends string, const Fields
|
|
339
|
+
declare function model<const Name extends string, const Fields extends Record<string, AnyFieldBuilder>, const Relations extends Record<string, AnyRelationBuilder> | undefined = undefined, const Collection extends string | undefined = undefined, const Indexes extends readonly MongoIndex[] | undefined = undefined, const CollectionOptions = undefined, const Owner extends ModelNameInput | undefined = undefined, const Base extends ModelNameInput | undefined = undefined, const StorageRelations extends Record<string, StorageRelationSpec> | undefined = undefined, const Discriminator extends ModelDiscriminatorInput<Record<string, VariantSpec>> | undefined = undefined>(name: Name, input: ModelInput<Fields, Relations, Collection, Indexes, CollectionOptions, Owner, Base, StorageRelations, Discriminator>): ModelBuilder<Name, Fields, Relations extends Record<string, AnyRelationBuilder> ? Relations : Record<never, never>, Collection, NormalizeModelNameOrUndefined<Owner>, NormalizeModelNameOrUndefined<Base>, StorageRelations, Discriminator extends {
|
|
340
340
|
readonly field: infer Field extends string;
|
|
341
341
|
} ? {
|
|
342
342
|
readonly field: Field;
|
|
343
|
-
} : undefined, Discriminator
|
|
343
|
+
} : undefined, Discriminator extends {
|
|
344
344
|
readonly variants: infer Variants extends Record<string, VariantSpec>;
|
|
345
345
|
} ? Variants : undefined>;
|
|
346
346
|
declare function defineContract<const Definition extends ContractDefinition<FamilyPackRef<string>, TargetPackRef<string, string>, Record<string, AnyModelBuilder>, Record<string, AnyValueObjectBuilder>, Record<string, ExtensionPackRef<string, string>> | undefined, ContractCapabilities | undefined, Record<string, ModelNameInput> | undefined>>(definition: Definition): MongoContractResult<Definition>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-builder.d.mts","names":[],"sources":["../src/contract-builder.ts"],"sourcesContent":[],"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,6 +1,5 @@
|
|
|
1
1
|
import { computeProfileHash, computeStorageHash } from "@prisma-next/contract/hashing";
|
|
2
|
-
import { validateMongoContract } from "@prisma-next/mongo-contract";
|
|
3
|
-
|
|
2
|
+
import { applyPolymorphicScopeToMongoIndex, validateMongoContract } from "@prisma-next/mongo-contract";
|
|
4
3
|
//#region src/contract-builder.ts
|
|
5
4
|
function createFieldBuilder(spec) {
|
|
6
5
|
return {
|
|
@@ -268,13 +267,13 @@ function stableStringify(value) {
|
|
|
268
267
|
if (value && typeof value === "object") return `{${Object.entries(value).sort(([left], [right]) => left.localeCompare(right)).map(([key, entry]) => `${JSON.stringify(key)}:${stableStringify(entry)}`).join(",")}}`;
|
|
269
268
|
return JSON.stringify(value);
|
|
270
269
|
}
|
|
271
|
-
function toStorageIndex(index
|
|
272
|
-
const result = { keys: Object.entries(index
|
|
273
|
-
field
|
|
270
|
+
function toStorageIndex(index) {
|
|
271
|
+
const result = { keys: Object.entries(index.fields).map(([field, direction]) => ({
|
|
272
|
+
field,
|
|
274
273
|
direction
|
|
275
274
|
})) };
|
|
276
|
-
if (index
|
|
277
|
-
for (const [key, value] of Object.entries(index
|
|
275
|
+
if (index.options) {
|
|
276
|
+
for (const [key, value] of Object.entries(index.options)) if (value !== void 0) result[key] = value;
|
|
278
277
|
}
|
|
279
278
|
return result;
|
|
280
279
|
}
|
|
@@ -290,10 +289,42 @@ function toStorageCollectionOptions(opts) {
|
|
|
290
289
|
if (opts.clusteredIndex) result["clusteredIndex"] = { name: opts.clusteredIndex.name };
|
|
291
290
|
return result;
|
|
292
291
|
}
|
|
292
|
+
function findMissingIndexField(index, modelFields) {
|
|
293
|
+
for (const fieldName of Object.keys(index.fields)) {
|
|
294
|
+
const wildcardMatch = fieldName.match(/^(.+)\.\$\*\*$/);
|
|
295
|
+
const lookupName = wildcardMatch ? wildcardMatch[1] : fieldName;
|
|
296
|
+
if (lookupName === void 0 || lookupName.length === 0) continue;
|
|
297
|
+
if (lookupName === "$**") continue;
|
|
298
|
+
if (!Object.hasOwn(modelFields, lookupName)) return lookupName;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
function resolveVariantScope(modelBuilder, modelsByName) {
|
|
302
|
+
if (!modelBuilder.__base) return void 0;
|
|
303
|
+
const baseBuilder = modelsByName[modelBuilder.__base];
|
|
304
|
+
if (!baseBuilder) return void 0;
|
|
305
|
+
const discriminatorField = baseBuilder.__discriminator?.field;
|
|
306
|
+
const variantValue = baseBuilder.__variants?.[modelBuilder.__name]?.value;
|
|
307
|
+
if (!discriminatorField || variantValue === void 0) return void 0;
|
|
308
|
+
return {
|
|
309
|
+
discriminatorField,
|
|
310
|
+
discriminatorValue: variantValue
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
function scopeVariantIndex(storageIndex, scope, variantName, authoredIndex) {
|
|
314
|
+
const result = applyPolymorphicScopeToMongoIndex(storageIndex, scope);
|
|
315
|
+
if (result.kind === "conflict") {
|
|
316
|
+
const indexLabel = authoredIndex ? stableStringify(authoredIndex) : "<unknown>";
|
|
317
|
+
throw new Error(`Variant model "${variantName}" index ${indexLabel} conflicts with discriminator scope: ${result.reason}`);
|
|
318
|
+
}
|
|
319
|
+
return result.index;
|
|
320
|
+
}
|
|
293
321
|
function buildCollections(models) {
|
|
294
322
|
const collections = {};
|
|
295
323
|
const declaredIndexOwners = /* @__PURE__ */ new Map();
|
|
296
|
-
|
|
324
|
+
const modelMap = models ?? {};
|
|
325
|
+
const modelsByName = {};
|
|
326
|
+
for (const builder of Object.values(modelMap)) modelsByName[builder.__name] = builder;
|
|
327
|
+
for (const modelBuilder of Object.values(modelMap)) {
|
|
297
328
|
if (!modelBuilder.__collection) {
|
|
298
329
|
if (modelBuilder.__indexes && modelBuilder.__indexes.length > 0) throw new Error(`Model "${modelBuilder.__name}" defines indexes but has no collection to attach them to.`);
|
|
299
330
|
if (modelBuilder.__collectionOptions) throw new Error(`Model "${modelBuilder.__name}" defines collectionOptions but has no collection to attach them to.`);
|
|
@@ -303,13 +334,28 @@ function buildCollections(models) {
|
|
|
303
334
|
const existingIndexes = existingCollection.indexes ?? [];
|
|
304
335
|
if (existingCollection.options && modelBuilder.__collectionOptions) throw new Error(`Collection "${modelBuilder.__collection}" has collectionOptions declared by multiple models. Author collectionOptions on a single model per collection.`);
|
|
305
336
|
for (const collectionIndex of modelBuilder.__indexes ?? []) {
|
|
306
|
-
const
|
|
337
|
+
const missingField = findMissingIndexField(collectionIndex, modelBuilder.__fields);
|
|
338
|
+
if (missingField !== void 0) {
|
|
339
|
+
const indexSignature = stableStringify(collectionIndex);
|
|
340
|
+
throw new Error(`Model "${modelBuilder.__name}" index ${indexSignature} references unknown field "${missingField}".`);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
const polymorphicScope = resolveVariantScope(modelBuilder, modelsByName);
|
|
344
|
+
const rawStorageIndexes = (modelBuilder.__indexes ?? []).map(toStorageIndex);
|
|
345
|
+
const storageIndexes = polymorphicScope ? rawStorageIndexes.map((idx, i) => scopeVariantIndex(idx, polymorphicScope, modelBuilder.__name, modelBuilder.__indexes?.[i])) : rawStorageIndexes;
|
|
346
|
+
for (let i = 0; i < storageIndexes.length; i++) {
|
|
347
|
+
const storageIndex = storageIndexes[i];
|
|
348
|
+
if (storageIndex === void 0) continue;
|
|
349
|
+
const indexSignature = stableStringify(storageIndex);
|
|
307
350
|
const collectionIndexKey = `${modelBuilder.__collection}:${indexSignature}`;
|
|
308
351
|
const firstOwner = declaredIndexOwners.get(collectionIndexKey);
|
|
309
|
-
if (firstOwner)
|
|
352
|
+
if (firstOwner) {
|
|
353
|
+
const authoredIndex = modelBuilder.__indexes?.[i];
|
|
354
|
+
const reportedSignature = authoredIndex ? stableStringify(authoredIndex) : indexSignature;
|
|
355
|
+
throw new Error(`Collection "${modelBuilder.__collection}" defines duplicate index ${reportedSignature}. First declared on model "${firstOwner}" and duplicated on model "${modelBuilder.__name}".`);
|
|
356
|
+
}
|
|
310
357
|
declaredIndexOwners.set(collectionIndexKey, modelBuilder.__name);
|
|
311
358
|
}
|
|
312
|
-
const storageIndexes = (modelBuilder.__indexes ?? []).map(toStorageIndex);
|
|
313
359
|
const storageOptions = modelBuilder.__collectionOptions ? toStorageCollectionOptions(modelBuilder.__collectionOptions) : void 0;
|
|
314
360
|
collections[modelBuilder.__collection] = storageIndexes.length > 0 ? {
|
|
315
361
|
...existingCollection,
|
|
@@ -370,7 +416,7 @@ function defineContract(definition, factory) {
|
|
|
370
416
|
})
|
|
371
417
|
});
|
|
372
418
|
}
|
|
373
|
-
|
|
374
419
|
//#endregion
|
|
375
420
|
export { defineContract, field, index, model, rel, valueObject };
|
|
421
|
+
|
|
376
422
|
//# sourceMappingURL=contract-builder.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-builder.mjs","names":["builtFields: Record<string, ContractField>","builtRelations: Record<string, ContractEmbedRelation | ContractReferenceRelation>","builtValueObjects: Record<string, ContractValueObject>","builtModels: Record<string, MongoContract['models'][string]>","roots: Record<string, string>","normalizedRoots: Record<string, string>","result: Record<string, unknown>","index","field","collections: Record<string, MongoStorageCollection>"],"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 type {\n ExtensionPackRef,\n FamilyPackRef,\n TargetPackRef,\n} from '@prisma-next/framework-components/components';\nimport {\n type MongoCollectionOptions,\n type MongoContract,\n type MongoContractWithTypeMaps,\n type MongoIndex,\n type MongoIndexFields,\n type MongoIndexOptions,\n type MongoStorage,\n type MongoStorageCollection,\n type MongoStorageCollectionOptions,\n type MongoStorageIndex,\n type MongoTypeMaps,\n validateMongoContract,\n} from '@prisma-next/mongo-contract';\n\ntype VariantSpec = {\n readonly value: string;\n};\n\ntype StorageRelationSpec = {\n readonly field: string;\n};\n\ntype ContractCapabilities = Record<string, Record<string, boolean>>;\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 MongoIndex[] | undefined;\n readonly __collectionOptions: MongoCollectionOptions | 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]>]: MongoStorageCollection;\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 DefinitionCapabilities<Definition> = Definition extends {\n readonly capabilities?: infer Capabilities extends ContractCapabilities;\n}\n ? Capabilities\n : Record<never, never>;\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 MongoStorage & {\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: DefinitionCapabilities<Definition>;\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 ContractAuthoringHelpers = {\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\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 Capabilities extends ContractCapabilities | 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 capabilities?: Capabilities;\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 Capabilities extends ContractCapabilities | undefined = undefined,\n Roots extends Record<string, ModelNameInput> | undefined = undefined,\n> = ContractScaffold<Family, Target, ExtensionPacks, Capabilities, 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> = (helpers: ContractAuthoringHelpers) => {\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, MongoIndexOptions>,\n): {\n readonly fields: Fields;\n readonly options: Options & MongoIndexOptions;\n};\nexport function index(\n fields: MongoIndexFields,\n options?: MongoIndexOptions,\n): {\n readonly fields: MongoIndexFields;\n readonly options?: MongoIndexOptions;\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 MongoIndex[] | 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, MongoCollectionOptions>;\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 MongoIndex[] | 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 ContractCapabilities | 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 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\nfunction toStorageIndex(index: MongoIndex): MongoStorageIndex {\n const keys = Object.entries(index.fields).map(([field, direction]) => ({\n field,\n direction,\n }));\n const result: Record<string, unknown> = { keys };\n if (index.options) {\n for (const [key, value] of Object.entries(index.options)) {\n if (value !== undefined) {\n result[key] = value;\n }\n }\n }\n return result as unknown as MongoStorageIndex;\n}\n\nfunction toStorageCollectionOptions(opts: MongoCollectionOptions): MongoStorageCollectionOptions {\n const result: Record<string, unknown> = {};\n if (opts.capped) {\n result['capped'] = { size: opts.size ?? 0, ...(opts.max != null ? { max: opts.max } : {}) };\n }\n if (opts.timeseries) result['timeseries'] = opts.timeseries;\n if (opts.collation) result['collation'] = opts.collation;\n if (opts.changeStreamPreAndPostImages)\n result['changeStreamPreAndPostImages'] = opts.changeStreamPreAndPostImages;\n if (opts.clusteredIndex) result['clusteredIndex'] = { name: opts.clusteredIndex.name };\n return result as unknown as MongoStorageCollectionOptions;\n}\n\nfunction buildCollections(\n models: Record<string, AnyModelBuilder> | undefined,\n): Record<string, MongoStorageCollection> {\n const collections: Record<string, MongoStorageCollection> = {};\n const declaredIndexOwners = new Map<string, string>();\n\n for (const modelBuilder of Object.values(models ?? {})) {\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 = collections[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 indexSignature = stableStringify(collectionIndex);\n const collectionIndexKey = `${modelBuilder.__collection}:${indexSignature}`;\n const firstOwner = declaredIndexOwners.get(collectionIndexKey);\n if (firstOwner) {\n throw new Error(\n `Collection \"${modelBuilder.__collection}\" defines duplicate index ${indexSignature}. First declared on model \"${firstOwner}\" and duplicated on model \"${modelBuilder.__name}\".`,\n );\n }\n declaredIndexOwners.set(collectionIndexKey, modelBuilder.__name);\n }\n\n const storageIndexes = (modelBuilder.__indexes ?? []).map(toStorageIndex);\n const storageOptions = modelBuilder.__collectionOptions\n ? toStorageCollectionOptions(modelBuilder.__collectionOptions)\n : undefined;\n\n collections[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 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 ContractCapabilities | 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 const capabilities = definition.capabilities ?? {};\n const collections = buildCollections(definition.models);\n const storageBody = {\n collections,\n };\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 ...storageBody,\n storageHash: computeStorageHash({\n target: definition.target.targetId,\n targetFamily: definition.family.familyId,\n storage: storageBody,\n }),\n },\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 validateMongoContract(builtContract);\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 ContractCapabilities | undefined,\n Record<string, ModelNameInput> | undefined\n >,\n>(definition: Definition): MongoContractResult<Definition>;\nexport function defineContract<\n const Definition extends ContractScaffold<\n FamilyPackRef<string>,\n TargetPackRef<string, string>,\n Record<string, ExtensionPackRef<string, string>> | undefined,\n ContractCapabilities | undefined,\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>(\n definition: Definition,\n factory: (_helpers: ContractAuthoringHelpers) => 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 ContractCapabilities | 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 return buildContractFromDefinition({\n ...definition,\n ...factory({ field, index, model, rel, valueObject }),\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 ProfileHashBase,\n StorageHashBase,\n} from '@prisma-next/contract/types';\nimport type {\n ExtensionPackRef,\n FamilyPackRef,\n TargetPackRef,\n} from '@prisma-next/framework-components/components';\nimport {\n applyPolymorphicScopeToMongoIndex,\n type MongoCollectionOptions,\n type MongoContract,\n type MongoContractWithTypeMaps,\n type MongoIndex,\n type MongoIndexFields,\n type MongoIndexOptions,\n type MongoStorage,\n type MongoStorageCollection,\n type MongoStorageCollectionOptions,\n type MongoStorageIndex,\n type MongoTypeMaps,\n validateMongoContract,\n} from '@prisma-next/mongo-contract';\n\ntype VariantSpec = {\n readonly value: string;\n};\n\ntype StorageRelationSpec = {\n readonly field: string;\n};\n\ntype ContractCapabilities = Record<string, Record<string, boolean>>;\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 MongoIndex[] | undefined;\n readonly __collectionOptions: MongoCollectionOptions | 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]>]: MongoStorageCollection;\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 DefinitionCapabilities<Definition> = Definition extends {\n readonly capabilities?: infer Capabilities extends ContractCapabilities;\n}\n ? Capabilities\n : Record<never, never>;\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 MongoStorage & {\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: DefinitionCapabilities<Definition>;\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 ContractAuthoringHelpers = {\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\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 Capabilities extends ContractCapabilities | 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 capabilities?: Capabilities;\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 Capabilities extends ContractCapabilities | undefined = undefined,\n Roots extends Record<string, ModelNameInput> | undefined = undefined,\n> = ContractScaffold<Family, Target, ExtensionPacks, Capabilities, 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> = (helpers: ContractAuthoringHelpers) => {\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, MongoIndexOptions>,\n): {\n readonly fields: Fields;\n readonly options: Options & MongoIndexOptions;\n};\nexport function index(\n fields: MongoIndexFields,\n options?: MongoIndexOptions,\n): {\n readonly fields: MongoIndexFields;\n readonly options?: MongoIndexOptions;\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 MongoIndex[] | 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, MongoCollectionOptions>;\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 MongoIndex[] | 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 ContractCapabilities | 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 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\nfunction toStorageIndex(index: MongoIndex): MongoStorageIndex {\n const keys = Object.entries(index.fields).map(([field, direction]) => ({\n field,\n direction,\n }));\n const result: Record<string, unknown> = { keys };\n if (index.options) {\n for (const [key, value] of Object.entries(index.options)) {\n if (value !== undefined) {\n result[key] = value;\n }\n }\n }\n return result as unknown as MongoStorageIndex;\n}\n\nfunction toStorageCollectionOptions(opts: MongoCollectionOptions): MongoStorageCollectionOptions {\n const result: Record<string, unknown> = {};\n if (opts.capped) {\n result['capped'] = { size: opts.size ?? 0, ...(opts.max != null ? { max: opts.max } : {}) };\n }\n if (opts.timeseries) result['timeseries'] = opts.timeseries;\n if (opts.collation) result['collation'] = opts.collation;\n if (opts.changeStreamPreAndPostImages)\n result['changeStreamPreAndPostImages'] = opts.changeStreamPreAndPostImages;\n if (opts.clusteredIndex) result['clusteredIndex'] = { name: opts.clusteredIndex.name };\n return result as unknown as MongoStorageCollectionOptions;\n}\n\nfunction findMissingIndexField(\n index: MongoIndex,\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: MongoStorageIndex,\n scope: { discriminatorField: string; discriminatorValue: string },\n variantName: string,\n authoredIndex: MongoIndex | undefined,\n): MongoStorageIndex {\n const result = applyPolymorphicScopeToMongoIndex(storageIndex, scope);\n if (result.kind === 'conflict') {\n const indexLabel = authoredIndex ? stableStringify(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, MongoStorageCollection> {\n const collections: Record<string, MongoStorageCollection> = {};\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 = collections[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 = stableStringify(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 ? stableStringify(authoredIndex) : 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 collections[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 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 ContractCapabilities | 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 const capabilities = definition.capabilities ?? {};\n const collections = buildCollections(definition.models);\n const storageBody = {\n collections,\n };\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 ...storageBody,\n storageHash: computeStorageHash({\n target: definition.target.targetId,\n targetFamily: definition.family.familyId,\n storage: storageBody,\n }),\n },\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 validateMongoContract(builtContract);\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 ContractCapabilities | undefined,\n Record<string, ModelNameInput> | undefined\n >,\n>(definition: Definition): MongoContractResult<Definition>;\nexport function defineContract<\n const Definition extends ContractScaffold<\n FamilyPackRef<string>,\n TargetPackRef<string, string>,\n Record<string, ExtensionPackRef<string, string>> | undefined,\n ContractCapabilities | undefined,\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>(\n definition: Definition,\n factory: (_helpers: ContractAuthoringHelpers) => 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 ContractCapabilities | 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 return buildContractFromDefinition({\n ...definition,\n ...factory({ field, index, model, rel, valueObject }),\n });\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma-next/mongo-contract-ts",
|
|
3
|
-
"version": "0.5.0-dev.
|
|
3
|
+
"version": "0.5.0-dev.80",
|
|
4
|
+
"license": "Apache-2.0",
|
|
4
5
|
"type": "module",
|
|
5
6
|
"sideEffects": false,
|
|
6
7
|
"description": "Mongo-specific TypeScript contract authoring surface for Prisma Next",
|
|
7
8
|
"dependencies": {
|
|
8
9
|
"pathe": "^2.0.3",
|
|
9
|
-
"@prisma-next/
|
|
10
|
-
"@prisma-next/framework-components": "0.5.0-dev.
|
|
11
|
-
"@prisma-next/
|
|
12
|
-
"@prisma-next/
|
|
13
|
-
"@prisma-next/mongo-contract": "0.5.0-dev.
|
|
10
|
+
"@prisma-next/contract": "0.5.0-dev.80",
|
|
11
|
+
"@prisma-next/framework-components": "0.5.0-dev.80",
|
|
12
|
+
"@prisma-next/config": "0.5.0-dev.80",
|
|
13
|
+
"@prisma-next/utils": "0.5.0-dev.80",
|
|
14
|
+
"@prisma-next/mongo-contract": "0.5.0-dev.80"
|
|
14
15
|
},
|
|
15
16
|
"devDependencies": {
|
|
16
|
-
"tsdown": "0.
|
|
17
|
+
"tsdown": "0.22.0",
|
|
17
18
|
"typescript": "5.9.3",
|
|
18
|
-
"vitest": "4.
|
|
19
|
+
"vitest": "4.1.5",
|
|
19
20
|
"@prisma-next/test-utils": "0.0.1",
|
|
20
|
-
"@prisma-next/
|
|
21
|
-
"@prisma-next/
|
|
21
|
+
"@prisma-next/tsdown": "0.0.0",
|
|
22
|
+
"@prisma-next/tsconfig": "0.0.0"
|
|
22
23
|
},
|
|
23
24
|
"files": [
|
|
24
25
|
"dist",
|
package/src/contract-builder.ts
CHANGED
|
@@ -14,6 +14,7 @@ import type {
|
|
|
14
14
|
TargetPackRef,
|
|
15
15
|
} from '@prisma-next/framework-components/components';
|
|
16
16
|
import {
|
|
17
|
+
applyPolymorphicScopeToMongoIndex,
|
|
17
18
|
type MongoCollectionOptions,
|
|
18
19
|
type MongoContract,
|
|
19
20
|
type MongoContractWithTypeMaps,
|
|
@@ -1223,13 +1224,63 @@ function toStorageCollectionOptions(opts: MongoCollectionOptions): MongoStorageC
|
|
|
1223
1224
|
return result as unknown as MongoStorageCollectionOptions;
|
|
1224
1225
|
}
|
|
1225
1226
|
|
|
1227
|
+
function findMissingIndexField(
|
|
1228
|
+
index: MongoIndex,
|
|
1229
|
+
modelFields: Record<string, unknown>,
|
|
1230
|
+
): string | undefined {
|
|
1231
|
+
for (const fieldName of Object.keys(index.fields)) {
|
|
1232
|
+
const wildcardMatch = fieldName.match(/^(.+)\.\$\*\*$/);
|
|
1233
|
+
const lookupName = wildcardMatch ? wildcardMatch[1] : fieldName;
|
|
1234
|
+
if (lookupName === undefined || lookupName.length === 0) continue;
|
|
1235
|
+
if (lookupName === '$**') continue;
|
|
1236
|
+
if (!Object.hasOwn(modelFields, lookupName)) {
|
|
1237
|
+
return lookupName;
|
|
1238
|
+
}
|
|
1239
|
+
}
|
|
1240
|
+
return undefined;
|
|
1241
|
+
}
|
|
1242
|
+
|
|
1243
|
+
function resolveVariantScope(
|
|
1244
|
+
modelBuilder: AnyModelBuilder,
|
|
1245
|
+
modelsByName: Record<string, AnyModelBuilder>,
|
|
1246
|
+
): { discriminatorField: string; discriminatorValue: string } | undefined {
|
|
1247
|
+
if (!modelBuilder.__base) return undefined;
|
|
1248
|
+
const baseBuilder = modelsByName[modelBuilder.__base];
|
|
1249
|
+
if (!baseBuilder) return undefined;
|
|
1250
|
+
const discriminatorField = baseBuilder.__discriminator?.field;
|
|
1251
|
+
const variantValue = baseBuilder.__variants?.[modelBuilder.__name]?.value;
|
|
1252
|
+
if (!discriminatorField || variantValue === undefined) return undefined;
|
|
1253
|
+
return { discriminatorField, discriminatorValue: variantValue };
|
|
1254
|
+
}
|
|
1255
|
+
|
|
1256
|
+
function scopeVariantIndex(
|
|
1257
|
+
storageIndex: MongoStorageIndex,
|
|
1258
|
+
scope: { discriminatorField: string; discriminatorValue: string },
|
|
1259
|
+
variantName: string,
|
|
1260
|
+
authoredIndex: MongoIndex | undefined,
|
|
1261
|
+
): MongoStorageIndex {
|
|
1262
|
+
const result = applyPolymorphicScopeToMongoIndex(storageIndex, scope);
|
|
1263
|
+
if (result.kind === 'conflict') {
|
|
1264
|
+
const indexLabel = authoredIndex ? stableStringify(authoredIndex) : '<unknown>';
|
|
1265
|
+
throw new Error(
|
|
1266
|
+
`Variant model "${variantName}" index ${indexLabel} conflicts with discriminator scope: ${result.reason}`,
|
|
1267
|
+
);
|
|
1268
|
+
}
|
|
1269
|
+
return result.index;
|
|
1270
|
+
}
|
|
1271
|
+
|
|
1226
1272
|
function buildCollections(
|
|
1227
1273
|
models: Record<string, AnyModelBuilder> | undefined,
|
|
1228
1274
|
): Record<string, MongoStorageCollection> {
|
|
1229
1275
|
const collections: Record<string, MongoStorageCollection> = {};
|
|
1230
1276
|
const declaredIndexOwners = new Map<string, string>();
|
|
1277
|
+
const modelMap = models ?? {};
|
|
1278
|
+
const modelsByName: Record<string, AnyModelBuilder> = {};
|
|
1279
|
+
for (const builder of Object.values(modelMap)) {
|
|
1280
|
+
modelsByName[builder.__name] = builder;
|
|
1281
|
+
}
|
|
1231
1282
|
|
|
1232
|
-
for (const modelBuilder of Object.values(
|
|
1283
|
+
for (const modelBuilder of Object.values(modelMap)) {
|
|
1233
1284
|
if (!modelBuilder.__collection) {
|
|
1234
1285
|
if (modelBuilder.__indexes && modelBuilder.__indexes.length > 0) {
|
|
1235
1286
|
throw new Error(
|
|
@@ -1256,18 +1307,47 @@ function buildCollections(
|
|
|
1256
1307
|
}
|
|
1257
1308
|
|
|
1258
1309
|
for (const collectionIndex of modelBuilder.__indexes ?? []) {
|
|
1259
|
-
const
|
|
1310
|
+
const missingField = findMissingIndexField(collectionIndex, modelBuilder.__fields);
|
|
1311
|
+
if (missingField !== undefined) {
|
|
1312
|
+
const indexSignature = stableStringify(collectionIndex);
|
|
1313
|
+
throw new Error(
|
|
1314
|
+
`Model "${modelBuilder.__name}" index ${indexSignature} references unknown field "${missingField}".`,
|
|
1315
|
+
);
|
|
1316
|
+
}
|
|
1317
|
+
}
|
|
1318
|
+
|
|
1319
|
+
const polymorphicScope = resolveVariantScope(modelBuilder, modelsByName);
|
|
1320
|
+
const rawStorageIndexes = (modelBuilder.__indexes ?? []).map(toStorageIndex);
|
|
1321
|
+
const storageIndexes = polymorphicScope
|
|
1322
|
+
? rawStorageIndexes.map((idx, i) =>
|
|
1323
|
+
scopeVariantIndex(
|
|
1324
|
+
idx,
|
|
1325
|
+
polymorphicScope,
|
|
1326
|
+
modelBuilder.__name,
|
|
1327
|
+
modelBuilder.__indexes?.[i],
|
|
1328
|
+
),
|
|
1329
|
+
)
|
|
1330
|
+
: rawStorageIndexes;
|
|
1331
|
+
|
|
1332
|
+
// Dedup after scoping so sibling variants that authentically declare
|
|
1333
|
+
// identical raw indexes (e.g. Bug and Feature both index severity) do
|
|
1334
|
+
// not collide — their post-scoping storage indexes differ by
|
|
1335
|
+
// partialFilterExpression and are correctly distinct on MongoDB.
|
|
1336
|
+
for (let i = 0; i < storageIndexes.length; i++) {
|
|
1337
|
+
const storageIndex = storageIndexes[i];
|
|
1338
|
+
if (storageIndex === undefined) continue;
|
|
1339
|
+
const indexSignature = stableStringify(storageIndex);
|
|
1260
1340
|
const collectionIndexKey = `${modelBuilder.__collection}:${indexSignature}`;
|
|
1261
1341
|
const firstOwner = declaredIndexOwners.get(collectionIndexKey);
|
|
1262
1342
|
if (firstOwner) {
|
|
1343
|
+
const authoredIndex = modelBuilder.__indexes?.[i];
|
|
1344
|
+
const reportedSignature = authoredIndex ? stableStringify(authoredIndex) : indexSignature;
|
|
1263
1345
|
throw new Error(
|
|
1264
|
-
`Collection "${modelBuilder.__collection}" defines duplicate index ${
|
|
1346
|
+
`Collection "${modelBuilder.__collection}" defines duplicate index ${reportedSignature}. First declared on model "${firstOwner}" and duplicated on model "${modelBuilder.__name}".`,
|
|
1265
1347
|
);
|
|
1266
1348
|
}
|
|
1267
1349
|
declaredIndexOwners.set(collectionIndexKey, modelBuilder.__name);
|
|
1268
1350
|
}
|
|
1269
|
-
|
|
1270
|
-
const storageIndexes = (modelBuilder.__indexes ?? []).map(toStorageIndex);
|
|
1271
1351
|
const storageOptions = modelBuilder.__collectionOptions
|
|
1272
1352
|
? toStorageCollectionOptions(modelBuilder.__collectionOptions)
|
|
1273
1353
|
: undefined;
|