@prisma-next/mongo-core 0.3.0-dev.123 → 0.3.0-dev.125

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,3 +1,4 @@
1
+ import { DomainContractShape, DomainModelShape, DomainValidationResult, validateContractDomain } from "@prisma-next/contract/validate-domain";
1
2
  import { PlanMeta } from "@prisma-next/contract/types";
2
3
 
3
4
  //#region src/contract-types.d.ts
@@ -251,27 +252,6 @@ interface DeleteOneResult {
251
252
  readonly deletedCount: number;
252
253
  }
253
254
  //#endregion
254
- //#region src/validate-domain.d.ts
255
- interface DomainModelShape {
256
- readonly fields: Record<string, unknown>;
257
- readonly relations: Record<string, {
258
- readonly to: string;
259
- }>;
260
- readonly discriminator?: {
261
- readonly field: string;
262
- };
263
- readonly variants?: Record<string, unknown>;
264
- readonly base?: string;
265
- }
266
- interface DomainContractShape {
267
- readonly roots: Record<string, string>;
268
- readonly models: Record<string, DomainModelShape>;
269
- }
270
- interface DomainValidationResult {
271
- readonly warnings: string[];
272
- }
273
- declare function validateContractDomain(contract: DomainContractShape): DomainValidationResult;
274
- //#endregion
275
255
  //#region src/validate-mongo-contract.d.ts
276
256
  interface MongoContractIndices {
277
257
  readonly variantToBase: Record<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/contract-types.ts","../src/param-ref.ts","../src/values.ts","../src/commands.ts","../src/wire-commands.ts","../src/plan.ts","../src/adapter-types.ts","../src/codecs.ts","../src/codec-registry.ts","../src/driver-types.ts","../src/results.ts","../src/validate-domain.ts","../src/validate-mongo-contract.ts","../src/validate-storage.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/contract-types.ts","../src/param-ref.ts","../src/values.ts","../src/commands.ts","../src/wire-commands.ts","../src/plan.ts","../src/adapter-types.ts","../src/codecs.ts","../src/codec-registry.ts","../src/driver-types.ts","../src/results.ts","../src/validate-mongo-contract.ts","../src/validate-storage.ts"],"sourcesContent":[],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,3 +1,4 @@
1
+ import { validateContractDomain } from "@prisma-next/contract/validate-domain";
1
2
  import { type } from "arktype";
2
3
 
3
4
  //#region src/codec-registry.ts
@@ -119,77 +120,6 @@ var MongoParamRef = class MongoParamRef {
119
120
  }
120
121
  };
121
122
 
122
- //#endregion
123
- //#region src/validate-domain.ts
124
- function validateContractDomain(contract) {
125
- const errors = [];
126
- const warnings = [];
127
- const modelNames = new Set(Object.keys(contract.models));
128
- validateRoots(contract, modelNames, errors);
129
- validateVariantsAndBases(contract, modelNames, errors);
130
- validateRelationTargets(contract, modelNames, errors);
131
- validateDiscriminators(contract, errors);
132
- detectOrphanedModels(contract, modelNames, warnings);
133
- if (errors.length > 0) throw new Error(`Contract domain validation failed:\n- ${errors.join("\n- ")}`);
134
- return { warnings };
135
- }
136
- function validateRoots(contract, modelNames, errors) {
137
- const seenValues = /* @__PURE__ */ new Set();
138
- for (const [rootKey, modelName] of Object.entries(contract.roots)) {
139
- if (seenValues.has(modelName)) errors.push(`Duplicate root value: "${modelName}" is mapped by multiple root keys`);
140
- seenValues.add(modelName);
141
- if (!modelNames.has(modelName)) errors.push(`Root "${rootKey}" references model "${modelName}" which does not exist in models`);
142
- }
143
- }
144
- function validateVariantsAndBases(contract, modelNames, errors) {
145
- for (const [modelName, model] of Object.entries(contract.models)) {
146
- if (model.variants) for (const variantName of Object.keys(model.variants)) {
147
- if (!modelNames.has(variantName)) {
148
- errors.push(`Model "${modelName}" lists variant "${variantName}" which does not exist in models`);
149
- continue;
150
- }
151
- const variantModel = contract.models[variantName];
152
- if (!variantModel) continue;
153
- if (variantModel.base !== modelName) errors.push(`Variant "${variantName}" has base "${variantModel.base ?? "(none)"}" but expected "${modelName}"`);
154
- }
155
- if (model.base) {
156
- if (!modelNames.has(model.base)) {
157
- errors.push(`Model "${modelName}" has base "${model.base}" which does not exist in models`);
158
- continue;
159
- }
160
- const baseModel = contract.models[model.base];
161
- if (!baseModel) continue;
162
- if (!baseModel.variants || !(modelName in baseModel.variants)) errors.push(`Model "${modelName}" has base "${model.base}" which does not list it as a variant`);
163
- }
164
- }
165
- }
166
- function validateRelationTargets(contract, modelNames, errors) {
167
- for (const [modelName, model] of Object.entries(contract.models)) for (const [relName, relation] of Object.entries(model.relations)) if (!modelNames.has(relation.to)) errors.push(`Relation "${relName}" on model "${modelName}" targets "${relation.to}" which does not exist in models`);
168
- }
169
- function validateDiscriminators(contract, errors) {
170
- for (const [modelName, model] of Object.entries(contract.models)) {
171
- if (model.discriminator) {
172
- if (!model.variants || Object.keys(model.variants).length === 0) errors.push(`Model "${modelName}" has discriminator but no variants`);
173
- if (!(model.discriminator.field in model.fields)) errors.push(`Discriminator field "${model.discriminator.field}" is not a field on model "${modelName}"`);
174
- }
175
- if (model.variants && Object.keys(model.variants).length > 0 && !model.discriminator) errors.push(`Model "${modelName}" has variants but no discriminator`);
176
- if (model.base) {
177
- if (model.discriminator) errors.push(`Model "${modelName}" has base and must not have discriminator`);
178
- if (model.variants && Object.keys(model.variants).length > 0) errors.push(`Model "${modelName}" has base and must not have variants`);
179
- }
180
- }
181
- }
182
- function detectOrphanedModels(contract, modelNames, warnings) {
183
- const referenced = /* @__PURE__ */ new Set();
184
- for (const modelName of Object.values(contract.roots)) referenced.add(modelName);
185
- for (const model of Object.values(contract.models)) {
186
- for (const relation of Object.values(model.relations)) referenced.add(relation.to);
187
- if (model.variants) for (const variantName of Object.keys(model.variants)) referenced.add(variantName);
188
- if (model.base) referenced.add(model.base);
189
- }
190
- for (const modelName of modelNames) if (!referenced.has(modelName)) warnings.push(`Orphaned model: "${modelName}" is not referenced by any root, relation, or variant`);
191
- }
192
-
193
123
  //#endregion
194
124
  //#region src/contract-schema.ts
195
125
  const MongoModelFieldSchema = type({
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["#byId","errors: string[]","warnings: string[]","result: Record<string, unknown>","errors: string[]","arktypeType","variantToBase: Record<string, string>","modelToVariants: Record<string, string[]>"],"sources":["../src/codec-registry.ts","../src/codecs.ts","../src/commands.ts","../src/param-ref.ts","../src/validate-domain.ts","../src/contract-schema.ts","../src/validate-storage.ts","../src/validate-mongo-contract.ts","../src/wire-commands.ts"],"sourcesContent":["import type { MongoCodec } from './codecs';\n\nexport interface MongoCodecRegistry {\n get(id: string): MongoCodec<string> | undefined;\n has(id: string): boolean;\n register(codec: MongoCodec<string>): void;\n [Symbol.iterator](): Iterator<MongoCodec<string>>;\n values(): IterableIterator<MongoCodec<string>>;\n}\n\nclass MongoCodecRegistryImpl implements MongoCodecRegistry {\n readonly #byId = new Map<string, MongoCodec<string>>();\n\n get(id: string): MongoCodec<string> | undefined {\n return this.#byId.get(id);\n }\n\n has(id: string): boolean {\n return this.#byId.has(id);\n }\n\n register(codec: MongoCodec<string>): void {\n if (this.#byId.has(codec.id)) {\n throw new Error(`Codec with ID '${codec.id}' is already registered`);\n }\n this.#byId.set(codec.id, codec);\n }\n\n *[Symbol.iterator](): Iterator<MongoCodec<string>> {\n yield* this.#byId.values();\n }\n\n values(): IterableIterator<MongoCodec<string>> {\n return this.#byId.values();\n }\n}\n\nexport function createMongoCodecRegistry(): MongoCodecRegistry {\n return new MongoCodecRegistryImpl();\n}\n","export interface MongoCodec<Id extends string = string, TWire = unknown, TJs = unknown> {\n readonly id: Id;\n readonly targetTypes: readonly string[];\n decode(wire: TWire): TJs;\n encode?(value: TJs): TWire;\n}\n\nexport function mongoCodec<Id extends string, TWire, TJs>(config: {\n typeId: Id;\n targetTypes: readonly string[];\n encode: (value: TJs) => TWire;\n decode: (wire: TWire) => TJs;\n}): MongoCodec<Id, TWire, TJs> {\n return {\n id: config.typeId,\n targetTypes: config.targetTypes,\n decode: config.decode,\n encode: config.encode,\n };\n}\n\nexport type MongoCodecJsType<T> = T extends MongoCodec<string, unknown, infer TJs> ? TJs : never;\n","import type { MongoExpr, MongoUpdateDocument, MongoValue, RawPipeline } from './values';\n\nabstract class MongoCommand {\n abstract readonly kind: string;\n readonly collection: string;\n\n protected constructor(collection: string) {\n this.collection = collection;\n }\n\n protected freeze(): void {\n Object.freeze(this);\n }\n}\n\nexport interface FindOptions {\n readonly projection?: Record<string, 1 | 0>;\n readonly sort?: Record<string, 1 | -1>;\n readonly limit?: number;\n readonly skip?: number;\n}\n\nexport class FindCommand extends MongoCommand {\n readonly kind = 'find' as const;\n readonly filter: MongoExpr | undefined;\n readonly projection: Record<string, 1 | 0> | undefined;\n readonly sort: Record<string, 1 | -1> | undefined;\n readonly limit: number | undefined;\n readonly skip: number | undefined;\n\n constructor(collection: string, filter?: MongoExpr, options?: FindOptions) {\n super(collection);\n this.filter = filter;\n this.projection = options?.projection;\n this.sort = options?.sort;\n this.limit = options?.limit;\n this.skip = options?.skip;\n this.freeze();\n }\n}\n\nexport class InsertOneCommand extends MongoCommand {\n readonly kind = 'insertOne' as const;\n readonly document: Record<string, MongoValue>;\n\n constructor(collection: string, document: Record<string, MongoValue>) {\n super(collection);\n this.document = document;\n this.freeze();\n }\n}\n\nexport class UpdateOneCommand extends MongoCommand {\n readonly kind = 'updateOne' as const;\n readonly filter: MongoExpr;\n readonly update: MongoUpdateDocument;\n\n constructor(collection: string, filter: MongoExpr, update: MongoUpdateDocument) {\n super(collection);\n this.filter = filter;\n this.update = update;\n this.freeze();\n }\n}\n\nexport class DeleteOneCommand extends MongoCommand {\n readonly kind = 'deleteOne' as const;\n readonly filter: MongoExpr;\n\n constructor(collection: string, filter: MongoExpr) {\n super(collection);\n this.filter = filter;\n this.freeze();\n }\n}\n\nexport class AggregateCommand extends MongoCommand {\n readonly kind = 'aggregate' as const;\n readonly pipeline: RawPipeline;\n\n constructor(collection: string, pipeline: RawPipeline) {\n super(collection);\n this.pipeline = pipeline;\n this.freeze();\n }\n}\n\nexport type AnyMongoCommand =\n | FindCommand\n | InsertOneCommand\n | UpdateOneCommand\n | DeleteOneCommand\n | AggregateCommand;\n","export class MongoParamRef {\n readonly value: unknown;\n readonly name: string | undefined;\n readonly codecId: string | undefined;\n\n constructor(value: unknown, options?: { name?: string; codecId?: string }) {\n this.value = value;\n this.name = options?.name;\n this.codecId = options?.codecId;\n Object.freeze(this);\n }\n\n static of(value: unknown, options?: { name?: string; codecId?: string }): MongoParamRef {\n return new MongoParamRef(value, options);\n }\n}\n","export interface DomainModelShape {\n readonly fields: Record<string, unknown>;\n readonly relations: Record<string, { readonly to: string }>;\n readonly discriminator?: { readonly field: string };\n readonly variants?: Record<string, unknown>;\n readonly base?: string;\n}\n\nexport interface DomainContractShape {\n readonly roots: Record<string, string>;\n readonly models: Record<string, DomainModelShape>;\n}\n\nexport interface DomainValidationResult {\n readonly warnings: string[];\n}\n\nexport function validateContractDomain(contract: DomainContractShape): DomainValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n const modelNames = new Set(Object.keys(contract.models));\n\n validateRoots(contract, modelNames, errors);\n validateVariantsAndBases(contract, modelNames, errors);\n validateRelationTargets(contract, modelNames, errors);\n validateDiscriminators(contract, errors);\n detectOrphanedModels(contract, modelNames, warnings);\n\n if (errors.length > 0) {\n throw new Error(`Contract domain validation failed:\\n- ${errors.join('\\n- ')}`);\n }\n\n return { warnings };\n}\n\nfunction validateRoots(\n contract: DomainContractShape,\n modelNames: Set<string>,\n errors: string[],\n): void {\n const seenValues = new Set<string>();\n for (const [rootKey, modelName] of Object.entries(contract.roots)) {\n if (seenValues.has(modelName)) {\n errors.push(`Duplicate root value: \"${modelName}\" is mapped by multiple root keys`);\n }\n seenValues.add(modelName);\n\n if (!modelNames.has(modelName)) {\n errors.push(\n `Root \"${rootKey}\" references model \"${modelName}\" which does not exist in models`,\n );\n }\n }\n}\n\nfunction validateVariantsAndBases(\n contract: DomainContractShape,\n modelNames: Set<string>,\n errors: string[],\n): void {\n for (const [modelName, model] of Object.entries(contract.models)) {\n if (model.variants) {\n for (const variantName of Object.keys(model.variants)) {\n if (!modelNames.has(variantName)) {\n errors.push(\n `Model \"${modelName}\" lists variant \"${variantName}\" which does not exist in models`,\n );\n continue;\n }\n const variantModel = contract.models[variantName];\n if (!variantModel) continue;\n if (variantModel.base !== modelName) {\n errors.push(\n `Variant \"${variantName}\" has base \"${variantModel.base ?? '(none)'}\" but expected \"${modelName}\"`,\n );\n }\n }\n }\n\n if (model.base) {\n if (!modelNames.has(model.base)) {\n errors.push(`Model \"${modelName}\" has base \"${model.base}\" which does not exist in models`);\n continue;\n }\n const baseModel = contract.models[model.base];\n if (!baseModel) continue;\n if (!baseModel.variants || !(modelName in baseModel.variants)) {\n errors.push(\n `Model \"${modelName}\" has base \"${model.base}\" which does not list it as a variant`,\n );\n }\n }\n }\n}\n\nfunction validateRelationTargets(\n contract: DomainContractShape,\n modelNames: Set<string>,\n errors: string[],\n): void {\n for (const [modelName, model] of Object.entries(contract.models)) {\n for (const [relName, relation] of Object.entries(model.relations)) {\n if (!modelNames.has(relation.to)) {\n errors.push(\n `Relation \"${relName}\" on model \"${modelName}\" targets \"${relation.to}\" which does not exist in models`,\n );\n }\n }\n }\n}\n\nfunction validateDiscriminators(contract: DomainContractShape, errors: string[]): void {\n for (const [modelName, model] of Object.entries(contract.models)) {\n if (model.discriminator) {\n if (!model.variants || Object.keys(model.variants).length === 0) {\n errors.push(`Model \"${modelName}\" has discriminator but no variants`);\n }\n if (!(model.discriminator.field in model.fields)) {\n errors.push(\n `Discriminator field \"${model.discriminator.field}\" is not a field on model \"${modelName}\"`,\n );\n }\n }\n\n if (model.variants && Object.keys(model.variants).length > 0 && !model.discriminator) {\n errors.push(`Model \"${modelName}\" has variants but no discriminator`);\n }\n\n // Single-level polymorphism only: a variant (model with `base`) cannot itself\n // declare discriminator/variants. Multi-level polymorphism is out of scope per ADR 2.\n if (model.base) {\n if (model.discriminator) {\n errors.push(`Model \"${modelName}\" has base and must not have discriminator`);\n }\n if (model.variants && Object.keys(model.variants).length > 0) {\n errors.push(`Model \"${modelName}\" has base and must not have variants`);\n }\n }\n }\n}\n\nfunction detectOrphanedModels(\n contract: DomainContractShape,\n modelNames: Set<string>,\n warnings: string[],\n): void {\n const referenced = new Set<string>();\n\n for (const modelName of Object.values(contract.roots)) {\n referenced.add(modelName);\n }\n\n for (const model of Object.values(contract.models)) {\n for (const relation of Object.values(model.relations)) {\n referenced.add(relation.to);\n }\n if (model.variants) {\n for (const variantName of Object.keys(model.variants)) {\n referenced.add(variantName);\n }\n }\n if (model.base) {\n referenced.add(model.base);\n }\n }\n\n for (const modelName of modelNames) {\n if (!referenced.has(modelName)) {\n warnings.push(\n `Orphaned model: \"${modelName}\" is not referenced by any root, relation, or variant`,\n );\n }\n }\n}\n","import { type } from 'arktype';\n\nconst MongoModelFieldSchema = type({\n '+': 'reject',\n codecId: 'string',\n nullable: 'boolean',\n});\n\nconst MongoModelStorageSchema = type({\n '+': 'reject',\n 'collection?': 'string',\n});\n\nconst MongoDiscriminatorSchema = type({\n '+': 'reject',\n field: 'string',\n});\n\nconst MongoVariantEntrySchema = type({\n '+': 'reject',\n value: 'string',\n});\n\nconst MongoReferenceRelationOnSchema = type({\n '+': 'reject',\n localFields: 'string[]',\n targetFields: 'string[]',\n});\n\nconst MongoReferenceRelationSchema = type({\n '+': 'reject',\n to: 'string',\n cardinality: \"'1:1' | '1:N' | 'N:1'\",\n strategy: \"'reference'\",\n on: MongoReferenceRelationOnSchema,\n});\n\nconst MongoEmbedRelationSchema = type({\n '+': 'reject',\n to: 'string',\n cardinality: \"'1:1' | '1:N'\",\n strategy: \"'embed'\",\n field: 'string',\n});\n\nconst MongoRelationSchema = MongoReferenceRelationSchema.or(MongoEmbedRelationSchema);\n\nconst MongoModelDefinitionSchema = type({\n '+': 'reject',\n fields: type('Record<string, unknown>').pipe((fields) => {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(fields)) {\n const parsed = MongoModelFieldSchema(value);\n if (parsed instanceof type.errors) {\n throw new Error(`Invalid field \"${key}\": ${parsed.summary}`);\n }\n result[key] = parsed;\n }\n return result;\n }),\n storage: MongoModelStorageSchema,\n relations: type('Record<string, unknown>').pipe((relations) => {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(relations)) {\n const parsed = MongoRelationSchema(value);\n if (parsed instanceof type.errors) {\n throw new Error(`Invalid relation \"${key}\": ${parsed.summary}`);\n }\n result[key] = parsed;\n }\n return result;\n }),\n 'discriminator?': MongoDiscriminatorSchema,\n 'variants?': type('Record<string, unknown>').pipe((variants) => {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(variants)) {\n const parsed = MongoVariantEntrySchema(value);\n if (parsed instanceof type.errors) {\n throw new Error(`Invalid variant \"${key}\": ${parsed.summary}`);\n }\n result[key] = parsed;\n }\n return result;\n }),\n 'base?': 'string',\n});\n\nconst MongoStorageCollectionSchema = type({ '+': 'reject' });\n\nexport const MongoContractSchema = type({\n '+': 'reject',\n targetFamily: \"'mongo'\",\n roots: 'Record<string, string>',\n storage: type({\n '+': 'reject',\n collections: type('Record<string, unknown>').pipe((collections) => {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(collections)) {\n const parsed = MongoStorageCollectionSchema(value);\n if (parsed instanceof type.errors) {\n throw new Error(`Invalid collection \"${key}\": ${parsed.summary}`);\n }\n result[key] = parsed;\n }\n return result;\n }),\n }),\n models: type('Record<string, unknown>').pipe((models) => {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(models)) {\n const parsed = MongoModelDefinitionSchema(value);\n if (parsed instanceof type.errors) {\n throw new Error(`Invalid model \"${key}\": ${parsed.summary}`);\n }\n result[key] = parsed;\n }\n return result;\n }),\n});\n","import type { MongoContract } from './contract-types';\n\nexport function validateMongoStorage(contract: MongoContract): void {\n const errors: string[] = [];\n\n for (const [modelName, model] of Object.entries(contract.models)) {\n if (model.storage.collection && !(model.storage.collection in contract.storage.collections)) {\n errors.push(\n `Model \"${modelName}\" references collection \"${model.storage.collection}\" which is not in storage.collections`,\n );\n }\n\n // Mongo does not support multi-table inheritance (ADR 2): all variants of a base\n // must share the same collection (single-table inheritance only).\n if (model.base) {\n const baseModel = contract.models[model.base];\n if (baseModel) {\n const variantCollection = model.storage.collection;\n const baseCollection = baseModel.storage.collection;\n if (variantCollection !== baseCollection) {\n errors.push(\n `Mongo does not support multi-table inheritance; variant \"${modelName}\" must share its base's collection (\"${baseCollection ?? '(none)'}\"), but has \"${variantCollection ?? '(none)'}\"`,\n );\n }\n }\n }\n\n for (const [relName, relation] of Object.entries(model.relations)) {\n if (relation.strategy === 'embed') {\n const target = contract.models[relation.to];\n if (target?.storage.collection) {\n errors.push(\n `Embed relation \"${relName}\" targets \"${relation.to}\" which must not have a collection`,\n );\n }\n }\n\n if (relation.strategy === 'reference') {\n for (const localField of relation.on.localFields) {\n if (!(localField in model.fields)) {\n errors.push(\n `Reference relation \"${relName}\": localField \"${localField}\" is not a field on model \"${modelName}\"`,\n );\n }\n }\n\n const targetModel = contract.models[relation.to];\n if (targetModel) {\n for (const targetField of relation.on.targetFields) {\n if (!(targetField in targetModel.fields)) {\n errors.push(\n `Reference relation \"${relName}\": targetField \"${targetField}\" is not a field on model \"${relation.to}\"`,\n );\n }\n }\n }\n }\n }\n }\n\n if (errors.length > 0) {\n throw new Error(`Contract storage validation failed:\\n- ${errors.join('\\n- ')}`);\n }\n}\n","import { type as arktypeType } from 'arktype';\nimport { MongoContractSchema } from './contract-schema';\nimport type { MongoContract } from './contract-types';\nimport { validateContractDomain } from './validate-domain';\nimport { validateMongoStorage } from './validate-storage';\n\nexport interface MongoContractIndices {\n readonly variantToBase: Record<string, string>;\n readonly modelToVariants: Record<string, string[]>;\n}\n\nexport interface ValidatedMongoContract<TContract extends MongoContract> {\n readonly contract: TContract;\n readonly indices: MongoContractIndices;\n readonly warnings: string[];\n}\n\nexport function validateMongoContract<TContract extends MongoContract>(\n value: unknown,\n): ValidatedMongoContract<TContract> {\n const parsed = MongoContractSchema(value);\n if (parsed instanceof arktypeType.errors) {\n throw new Error(`Contract structural validation failed: ${parsed.summary}`);\n }\n\n const contract = parsed as unknown as TContract;\n\n const { warnings } = validateContractDomain(contract);\n validateMongoStorage(contract);\n\n const indices = buildIndices(contract);\n\n return { contract, indices, warnings };\n}\n\nfunction buildIndices(contract: MongoContract): MongoContractIndices {\n const variantToBase: Record<string, string> = {};\n const modelToVariants: Record<string, string[]> = {};\n\n for (const [modelName, model] of Object.entries(contract.models)) {\n if (model.base) {\n variantToBase[modelName] = model.base;\n }\n if (model.variants) {\n modelToVariants[modelName] = Object.keys(model.variants);\n }\n }\n\n return { variantToBase, modelToVariants };\n}\n","import type { Document, RawPipeline } from './values';\n\nabstract class MongoWireCommand {\n abstract readonly kind: string;\n readonly collection: string;\n\n protected constructor(collection: string) {\n this.collection = collection;\n }\n\n protected freeze(): void {\n Object.freeze(this);\n }\n}\n\nexport class FindWireCommand extends MongoWireCommand {\n readonly kind = 'find' as const;\n readonly filter: Document | undefined;\n readonly projection: Document | undefined;\n readonly sort: Document | undefined;\n readonly limit: number | undefined;\n readonly skip: number | undefined;\n\n constructor(\n collection: string,\n filter?: Document,\n options?: {\n projection?: Document;\n sort?: Document;\n limit?: number;\n skip?: number;\n },\n ) {\n super(collection);\n this.filter = filter;\n this.projection = options?.projection;\n this.sort = options?.sort;\n this.limit = options?.limit;\n this.skip = options?.skip;\n this.freeze();\n }\n}\n\nexport class InsertOneWireCommand extends MongoWireCommand {\n readonly kind = 'insertOne' as const;\n readonly document: Document;\n\n constructor(collection: string, document: Document) {\n super(collection);\n this.document = document;\n this.freeze();\n }\n}\n\nexport class UpdateOneWireCommand extends MongoWireCommand {\n readonly kind = 'updateOne' as const;\n readonly filter: Document;\n readonly update: Document;\n\n constructor(collection: string, filter: Document, update: Document) {\n super(collection);\n this.filter = filter;\n this.update = update;\n this.freeze();\n }\n}\n\nexport class DeleteOneWireCommand extends MongoWireCommand {\n readonly kind = 'deleteOne' as const;\n readonly filter: Document;\n\n constructor(collection: string, filter: Document) {\n super(collection);\n this.filter = filter;\n this.freeze();\n }\n}\n\nexport class AggregateWireCommand extends MongoWireCommand {\n readonly kind = 'aggregate' as const;\n readonly pipeline: RawPipeline;\n\n constructor(collection: string, pipeline: RawPipeline) {\n super(collection);\n this.pipeline = pipeline;\n this.freeze();\n }\n}\n\nexport type AnyMongoWireCommand =\n | FindWireCommand\n | InsertOneWireCommand\n | UpdateOneWireCommand\n | DeleteOneWireCommand\n | AggregateWireCommand;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["#byId","result: Record<string, unknown>","errors: string[]","arktypeType","variantToBase: Record<string, string>","modelToVariants: Record<string, string[]>"],"sources":["../src/codec-registry.ts","../src/codecs.ts","../src/commands.ts","../src/param-ref.ts","../src/contract-schema.ts","../src/validate-storage.ts","../src/validate-mongo-contract.ts","../src/wire-commands.ts"],"sourcesContent":["import type { MongoCodec } from './codecs';\n\nexport interface MongoCodecRegistry {\n get(id: string): MongoCodec<string> | undefined;\n has(id: string): boolean;\n register(codec: MongoCodec<string>): void;\n [Symbol.iterator](): Iterator<MongoCodec<string>>;\n values(): IterableIterator<MongoCodec<string>>;\n}\n\nclass MongoCodecRegistryImpl implements MongoCodecRegistry {\n readonly #byId = new Map<string, MongoCodec<string>>();\n\n get(id: string): MongoCodec<string> | undefined {\n return this.#byId.get(id);\n }\n\n has(id: string): boolean {\n return this.#byId.has(id);\n }\n\n register(codec: MongoCodec<string>): void {\n if (this.#byId.has(codec.id)) {\n throw new Error(`Codec with ID '${codec.id}' is already registered`);\n }\n this.#byId.set(codec.id, codec);\n }\n\n *[Symbol.iterator](): Iterator<MongoCodec<string>> {\n yield* this.#byId.values();\n }\n\n values(): IterableIterator<MongoCodec<string>> {\n return this.#byId.values();\n }\n}\n\nexport function createMongoCodecRegistry(): MongoCodecRegistry {\n return new MongoCodecRegistryImpl();\n}\n","export interface MongoCodec<Id extends string = string, TWire = unknown, TJs = unknown> {\n readonly id: Id;\n readonly targetTypes: readonly string[];\n decode(wire: TWire): TJs;\n encode?(value: TJs): TWire;\n}\n\nexport function mongoCodec<Id extends string, TWire, TJs>(config: {\n typeId: Id;\n targetTypes: readonly string[];\n encode: (value: TJs) => TWire;\n decode: (wire: TWire) => TJs;\n}): MongoCodec<Id, TWire, TJs> {\n return {\n id: config.typeId,\n targetTypes: config.targetTypes,\n decode: config.decode,\n encode: config.encode,\n };\n}\n\nexport type MongoCodecJsType<T> = T extends MongoCodec<string, unknown, infer TJs> ? TJs : never;\n","import type { MongoExpr, MongoUpdateDocument, MongoValue, RawPipeline } from './values';\n\nabstract class MongoCommand {\n abstract readonly kind: string;\n readonly collection: string;\n\n protected constructor(collection: string) {\n this.collection = collection;\n }\n\n protected freeze(): void {\n Object.freeze(this);\n }\n}\n\nexport interface FindOptions {\n readonly projection?: Record<string, 1 | 0>;\n readonly sort?: Record<string, 1 | -1>;\n readonly limit?: number;\n readonly skip?: number;\n}\n\nexport class FindCommand extends MongoCommand {\n readonly kind = 'find' as const;\n readonly filter: MongoExpr | undefined;\n readonly projection: Record<string, 1 | 0> | undefined;\n readonly sort: Record<string, 1 | -1> | undefined;\n readonly limit: number | undefined;\n readonly skip: number | undefined;\n\n constructor(collection: string, filter?: MongoExpr, options?: FindOptions) {\n super(collection);\n this.filter = filter;\n this.projection = options?.projection;\n this.sort = options?.sort;\n this.limit = options?.limit;\n this.skip = options?.skip;\n this.freeze();\n }\n}\n\nexport class InsertOneCommand extends MongoCommand {\n readonly kind = 'insertOne' as const;\n readonly document: Record<string, MongoValue>;\n\n constructor(collection: string, document: Record<string, MongoValue>) {\n super(collection);\n this.document = document;\n this.freeze();\n }\n}\n\nexport class UpdateOneCommand extends MongoCommand {\n readonly kind = 'updateOne' as const;\n readonly filter: MongoExpr;\n readonly update: MongoUpdateDocument;\n\n constructor(collection: string, filter: MongoExpr, update: MongoUpdateDocument) {\n super(collection);\n this.filter = filter;\n this.update = update;\n this.freeze();\n }\n}\n\nexport class DeleteOneCommand extends MongoCommand {\n readonly kind = 'deleteOne' as const;\n readonly filter: MongoExpr;\n\n constructor(collection: string, filter: MongoExpr) {\n super(collection);\n this.filter = filter;\n this.freeze();\n }\n}\n\nexport class AggregateCommand extends MongoCommand {\n readonly kind = 'aggregate' as const;\n readonly pipeline: RawPipeline;\n\n constructor(collection: string, pipeline: RawPipeline) {\n super(collection);\n this.pipeline = pipeline;\n this.freeze();\n }\n}\n\nexport type AnyMongoCommand =\n | FindCommand\n | InsertOneCommand\n | UpdateOneCommand\n | DeleteOneCommand\n | AggregateCommand;\n","export class MongoParamRef {\n readonly value: unknown;\n readonly name: string | undefined;\n readonly codecId: string | undefined;\n\n constructor(value: unknown, options?: { name?: string; codecId?: string }) {\n this.value = value;\n this.name = options?.name;\n this.codecId = options?.codecId;\n Object.freeze(this);\n }\n\n static of(value: unknown, options?: { name?: string; codecId?: string }): MongoParamRef {\n return new MongoParamRef(value, options);\n }\n}\n","import { type } from 'arktype';\n\nconst MongoModelFieldSchema = type({\n '+': 'reject',\n codecId: 'string',\n nullable: 'boolean',\n});\n\nconst MongoModelStorageSchema = type({\n '+': 'reject',\n 'collection?': 'string',\n});\n\nconst MongoDiscriminatorSchema = type({\n '+': 'reject',\n field: 'string',\n});\n\nconst MongoVariantEntrySchema = type({\n '+': 'reject',\n value: 'string',\n});\n\nconst MongoReferenceRelationOnSchema = type({\n '+': 'reject',\n localFields: 'string[]',\n targetFields: 'string[]',\n});\n\nconst MongoReferenceRelationSchema = type({\n '+': 'reject',\n to: 'string',\n cardinality: \"'1:1' | '1:N' | 'N:1'\",\n strategy: \"'reference'\",\n on: MongoReferenceRelationOnSchema,\n});\n\nconst MongoEmbedRelationSchema = type({\n '+': 'reject',\n to: 'string',\n cardinality: \"'1:1' | '1:N'\",\n strategy: \"'embed'\",\n field: 'string',\n});\n\nconst MongoRelationSchema = MongoReferenceRelationSchema.or(MongoEmbedRelationSchema);\n\nconst MongoModelDefinitionSchema = type({\n '+': 'reject',\n fields: type('Record<string, unknown>').pipe((fields) => {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(fields)) {\n const parsed = MongoModelFieldSchema(value);\n if (parsed instanceof type.errors) {\n throw new Error(`Invalid field \"${key}\": ${parsed.summary}`);\n }\n result[key] = parsed;\n }\n return result;\n }),\n storage: MongoModelStorageSchema,\n relations: type('Record<string, unknown>').pipe((relations) => {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(relations)) {\n const parsed = MongoRelationSchema(value);\n if (parsed instanceof type.errors) {\n throw new Error(`Invalid relation \"${key}\": ${parsed.summary}`);\n }\n result[key] = parsed;\n }\n return result;\n }),\n 'discriminator?': MongoDiscriminatorSchema,\n 'variants?': type('Record<string, unknown>').pipe((variants) => {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(variants)) {\n const parsed = MongoVariantEntrySchema(value);\n if (parsed instanceof type.errors) {\n throw new Error(`Invalid variant \"${key}\": ${parsed.summary}`);\n }\n result[key] = parsed;\n }\n return result;\n }),\n 'base?': 'string',\n});\n\nconst MongoStorageCollectionSchema = type({ '+': 'reject' });\n\nexport const MongoContractSchema = type({\n '+': 'reject',\n targetFamily: \"'mongo'\",\n roots: 'Record<string, string>',\n storage: type({\n '+': 'reject',\n collections: type('Record<string, unknown>').pipe((collections) => {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(collections)) {\n const parsed = MongoStorageCollectionSchema(value);\n if (parsed instanceof type.errors) {\n throw new Error(`Invalid collection \"${key}\": ${parsed.summary}`);\n }\n result[key] = parsed;\n }\n return result;\n }),\n }),\n models: type('Record<string, unknown>').pipe((models) => {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(models)) {\n const parsed = MongoModelDefinitionSchema(value);\n if (parsed instanceof type.errors) {\n throw new Error(`Invalid model \"${key}\": ${parsed.summary}`);\n }\n result[key] = parsed;\n }\n return result;\n }),\n});\n","import type { MongoContract } from './contract-types';\n\nexport function validateMongoStorage(contract: MongoContract): void {\n const errors: string[] = [];\n\n for (const [modelName, model] of Object.entries(contract.models)) {\n if (model.storage.collection && !(model.storage.collection in contract.storage.collections)) {\n errors.push(\n `Model \"${modelName}\" references collection \"${model.storage.collection}\" which is not in storage.collections`,\n );\n }\n\n // Mongo does not support multi-table inheritance (ADR 2): all variants of a base\n // must share the same collection (single-table inheritance only).\n if (model.base) {\n const baseModel = contract.models[model.base];\n if (baseModel) {\n const variantCollection = model.storage.collection;\n const baseCollection = baseModel.storage.collection;\n if (variantCollection !== baseCollection) {\n errors.push(\n `Mongo does not support multi-table inheritance; variant \"${modelName}\" must share its base's collection (\"${baseCollection ?? '(none)'}\"), but has \"${variantCollection ?? '(none)'}\"`,\n );\n }\n }\n }\n\n for (const [relName, relation] of Object.entries(model.relations)) {\n if (relation.strategy === 'embed') {\n const target = contract.models[relation.to];\n if (target?.storage.collection) {\n errors.push(\n `Embed relation \"${relName}\" targets \"${relation.to}\" which must not have a collection`,\n );\n }\n }\n\n if (relation.strategy === 'reference') {\n for (const localField of relation.on.localFields) {\n if (!(localField in model.fields)) {\n errors.push(\n `Reference relation \"${relName}\": localField \"${localField}\" is not a field on model \"${modelName}\"`,\n );\n }\n }\n\n const targetModel = contract.models[relation.to];\n if (targetModel) {\n for (const targetField of relation.on.targetFields) {\n if (!(targetField in targetModel.fields)) {\n errors.push(\n `Reference relation \"${relName}\": targetField \"${targetField}\" is not a field on model \"${relation.to}\"`,\n );\n }\n }\n }\n }\n }\n }\n\n if (errors.length > 0) {\n throw new Error(`Contract storage validation failed:\\n- ${errors.join('\\n- ')}`);\n }\n}\n","import { type as arktypeType } from 'arktype';\nimport { MongoContractSchema } from './contract-schema';\nimport type { MongoContract } from './contract-types';\nimport { validateContractDomain } from './validate-domain';\nimport { validateMongoStorage } from './validate-storage';\n\nexport interface MongoContractIndices {\n readonly variantToBase: Record<string, string>;\n readonly modelToVariants: Record<string, string[]>;\n}\n\nexport interface ValidatedMongoContract<TContract extends MongoContract> {\n readonly contract: TContract;\n readonly indices: MongoContractIndices;\n readonly warnings: string[];\n}\n\nexport function validateMongoContract<TContract extends MongoContract>(\n value: unknown,\n): ValidatedMongoContract<TContract> {\n const parsed = MongoContractSchema(value);\n if (parsed instanceof arktypeType.errors) {\n throw new Error(`Contract structural validation failed: ${parsed.summary}`);\n }\n\n const contract = parsed as unknown as TContract;\n\n const { warnings } = validateContractDomain(contract);\n validateMongoStorage(contract);\n\n const indices = buildIndices(contract);\n\n return { contract, indices, warnings };\n}\n\nfunction buildIndices(contract: MongoContract): MongoContractIndices {\n const variantToBase: Record<string, string> = {};\n const modelToVariants: Record<string, string[]> = {};\n\n for (const [modelName, model] of Object.entries(contract.models)) {\n if (model.base) {\n variantToBase[modelName] = model.base;\n }\n if (model.variants) {\n modelToVariants[modelName] = Object.keys(model.variants);\n }\n }\n\n return { variantToBase, modelToVariants };\n}\n","import type { Document, RawPipeline } from './values';\n\nabstract class MongoWireCommand {\n abstract readonly kind: string;\n readonly collection: string;\n\n protected constructor(collection: string) {\n this.collection = collection;\n }\n\n protected freeze(): void {\n Object.freeze(this);\n }\n}\n\nexport class FindWireCommand extends MongoWireCommand {\n readonly kind = 'find' as const;\n readonly filter: Document | undefined;\n readonly projection: Document | undefined;\n readonly sort: Document | undefined;\n readonly limit: number | undefined;\n readonly skip: number | undefined;\n\n constructor(\n collection: string,\n filter?: Document,\n options?: {\n projection?: Document;\n sort?: Document;\n limit?: number;\n skip?: number;\n },\n ) {\n super(collection);\n this.filter = filter;\n this.projection = options?.projection;\n this.sort = options?.sort;\n this.limit = options?.limit;\n this.skip = options?.skip;\n this.freeze();\n }\n}\n\nexport class InsertOneWireCommand extends MongoWireCommand {\n readonly kind = 'insertOne' as const;\n readonly document: Document;\n\n constructor(collection: string, document: Document) {\n super(collection);\n this.document = document;\n this.freeze();\n }\n}\n\nexport class UpdateOneWireCommand extends MongoWireCommand {\n readonly kind = 'updateOne' as const;\n readonly filter: Document;\n readonly update: Document;\n\n constructor(collection: string, filter: Document, update: Document) {\n super(collection);\n this.filter = filter;\n this.update = update;\n this.freeze();\n }\n}\n\nexport class DeleteOneWireCommand extends MongoWireCommand {\n readonly kind = 'deleteOne' as const;\n readonly filter: Document;\n\n constructor(collection: string, filter: Document) {\n super(collection);\n this.filter = filter;\n this.freeze();\n }\n}\n\nexport class AggregateWireCommand extends MongoWireCommand {\n readonly kind = 'aggregate' as const;\n readonly pipeline: RawPipeline;\n\n constructor(collection: string, pipeline: RawPipeline) {\n super(collection);\n this.pipeline = pipeline;\n this.freeze();\n }\n}\n\nexport type AnyMongoWireCommand =\n | FindWireCommand\n | InsertOneWireCommand\n | UpdateOneWireCommand\n | DeleteOneWireCommand\n | AggregateWireCommand;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@prisma-next/mongo-core",
3
- "version": "0.3.0-dev.123",
3
+ "version": "0.3.0-dev.125",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "description": "Core types for Prisma Next MongoDB support",
7
7
  "dependencies": {
8
8
  "arktype": "^2.1.29",
9
- "@prisma-next/contract": "0.3.0-dev.123"
9
+ "@prisma-next/contract": "0.3.0-dev.125"
10
10
  },
11
11
  "devDependencies": {
12
12
  "tsdown": "0.18.4",
@@ -1,174 +1,6 @@
1
- export interface DomainModelShape {
2
- readonly fields: Record<string, unknown>;
3
- readonly relations: Record<string, { readonly to: string }>;
4
- readonly discriminator?: { readonly field: string };
5
- readonly variants?: Record<string, unknown>;
6
- readonly base?: string;
7
- }
8
-
9
- export interface DomainContractShape {
10
- readonly roots: Record<string, string>;
11
- readonly models: Record<string, DomainModelShape>;
12
- }
13
-
14
- export interface DomainValidationResult {
15
- readonly warnings: string[];
16
- }
17
-
18
- export function validateContractDomain(contract: DomainContractShape): DomainValidationResult {
19
- const errors: string[] = [];
20
- const warnings: string[] = [];
21
- const modelNames = new Set(Object.keys(contract.models));
22
-
23
- validateRoots(contract, modelNames, errors);
24
- validateVariantsAndBases(contract, modelNames, errors);
25
- validateRelationTargets(contract, modelNames, errors);
26
- validateDiscriminators(contract, errors);
27
- detectOrphanedModels(contract, modelNames, warnings);
28
-
29
- if (errors.length > 0) {
30
- throw new Error(`Contract domain validation failed:\n- ${errors.join('\n- ')}`);
31
- }
32
-
33
- return { warnings };
34
- }
35
-
36
- function validateRoots(
37
- contract: DomainContractShape,
38
- modelNames: Set<string>,
39
- errors: string[],
40
- ): void {
41
- const seenValues = new Set<string>();
42
- for (const [rootKey, modelName] of Object.entries(contract.roots)) {
43
- if (seenValues.has(modelName)) {
44
- errors.push(`Duplicate root value: "${modelName}" is mapped by multiple root keys`);
45
- }
46
- seenValues.add(modelName);
47
-
48
- if (!modelNames.has(modelName)) {
49
- errors.push(
50
- `Root "${rootKey}" references model "${modelName}" which does not exist in models`,
51
- );
52
- }
53
- }
54
- }
55
-
56
- function validateVariantsAndBases(
57
- contract: DomainContractShape,
58
- modelNames: Set<string>,
59
- errors: string[],
60
- ): void {
61
- for (const [modelName, model] of Object.entries(contract.models)) {
62
- if (model.variants) {
63
- for (const variantName of Object.keys(model.variants)) {
64
- if (!modelNames.has(variantName)) {
65
- errors.push(
66
- `Model "${modelName}" lists variant "${variantName}" which does not exist in models`,
67
- );
68
- continue;
69
- }
70
- const variantModel = contract.models[variantName];
71
- if (!variantModel) continue;
72
- if (variantModel.base !== modelName) {
73
- errors.push(
74
- `Variant "${variantName}" has base "${variantModel.base ?? '(none)'}" but expected "${modelName}"`,
75
- );
76
- }
77
- }
78
- }
79
-
80
- if (model.base) {
81
- if (!modelNames.has(model.base)) {
82
- errors.push(`Model "${modelName}" has base "${model.base}" which does not exist in models`);
83
- continue;
84
- }
85
- const baseModel = contract.models[model.base];
86
- if (!baseModel) continue;
87
- if (!baseModel.variants || !(modelName in baseModel.variants)) {
88
- errors.push(
89
- `Model "${modelName}" has base "${model.base}" which does not list it as a variant`,
90
- );
91
- }
92
- }
93
- }
94
- }
95
-
96
- function validateRelationTargets(
97
- contract: DomainContractShape,
98
- modelNames: Set<string>,
99
- errors: string[],
100
- ): void {
101
- for (const [modelName, model] of Object.entries(contract.models)) {
102
- for (const [relName, relation] of Object.entries(model.relations)) {
103
- if (!modelNames.has(relation.to)) {
104
- errors.push(
105
- `Relation "${relName}" on model "${modelName}" targets "${relation.to}" which does not exist in models`,
106
- );
107
- }
108
- }
109
- }
110
- }
111
-
112
- function validateDiscriminators(contract: DomainContractShape, errors: string[]): void {
113
- for (const [modelName, model] of Object.entries(contract.models)) {
114
- if (model.discriminator) {
115
- if (!model.variants || Object.keys(model.variants).length === 0) {
116
- errors.push(`Model "${modelName}" has discriminator but no variants`);
117
- }
118
- if (!(model.discriminator.field in model.fields)) {
119
- errors.push(
120
- `Discriminator field "${model.discriminator.field}" is not a field on model "${modelName}"`,
121
- );
122
- }
123
- }
124
-
125
- if (model.variants && Object.keys(model.variants).length > 0 && !model.discriminator) {
126
- errors.push(`Model "${modelName}" has variants but no discriminator`);
127
- }
128
-
129
- // Single-level polymorphism only: a variant (model with `base`) cannot itself
130
- // declare discriminator/variants. Multi-level polymorphism is out of scope per ADR 2.
131
- if (model.base) {
132
- if (model.discriminator) {
133
- errors.push(`Model "${modelName}" has base and must not have discriminator`);
134
- }
135
- if (model.variants && Object.keys(model.variants).length > 0) {
136
- errors.push(`Model "${modelName}" has base and must not have variants`);
137
- }
138
- }
139
- }
140
- }
141
-
142
- function detectOrphanedModels(
143
- contract: DomainContractShape,
144
- modelNames: Set<string>,
145
- warnings: string[],
146
- ): void {
147
- const referenced = new Set<string>();
148
-
149
- for (const modelName of Object.values(contract.roots)) {
150
- referenced.add(modelName);
151
- }
152
-
153
- for (const model of Object.values(contract.models)) {
154
- for (const relation of Object.values(model.relations)) {
155
- referenced.add(relation.to);
156
- }
157
- if (model.variants) {
158
- for (const variantName of Object.keys(model.variants)) {
159
- referenced.add(variantName);
160
- }
161
- }
162
- if (model.base) {
163
- referenced.add(model.base);
164
- }
165
- }
166
-
167
- for (const modelName of modelNames) {
168
- if (!referenced.has(modelName)) {
169
- warnings.push(
170
- `Orphaned model: "${modelName}" is not referenced by any root, relation, or variant`,
171
- );
172
- }
173
- }
174
- }
1
+ export {
2
+ type DomainContractShape,
3
+ type DomainModelShape,
4
+ type DomainValidationResult,
5
+ validateContractDomain,
6
+ } from '@prisma-next/contract/validate-domain';