@prisma-next/mongo-contract 0.3.0-dev.150 → 0.3.0-dev.152

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
@@ -90,10 +90,39 @@ interface MongoStorageIndex {
90
90
  readonly sparse?: boolean;
91
91
  readonly expireAfterSeconds?: number;
92
92
  readonly partialFilterExpression?: Record<string, unknown>;
93
+ readonly wildcardProjection?: Record<string, 0 | 1>;
94
+ readonly collation?: Record<string, unknown>;
95
+ readonly weights?: Record<string, number>;
96
+ readonly default_language?: string;
97
+ readonly language_override?: string;
98
+ }
99
+ interface MongoStorageValidator {
100
+ readonly jsonSchema: Record<string, unknown>;
101
+ readonly validationLevel: 'strict' | 'moderate';
102
+ readonly validationAction: 'error' | 'warn';
103
+ }
104
+ interface MongoStorageCollectionOptions {
105
+ readonly capped?: {
106
+ size: number;
107
+ max?: number;
108
+ };
109
+ readonly timeseries?: {
110
+ timeField: string;
111
+ metaField?: string;
112
+ granularity?: 'seconds' | 'minutes' | 'hours';
113
+ };
114
+ readonly collation?: Record<string, unknown>;
115
+ readonly changeStreamPreAndPostImages?: {
116
+ enabled: boolean;
117
+ };
118
+ readonly clusteredIndex?: {
119
+ name?: string;
120
+ };
93
121
  }
94
122
  interface MongoStorageCollection {
95
- readonly indexes?: readonly MongoIndex[];
96
- readonly options?: MongoCollectionOptions;
123
+ readonly indexes?: ReadonlyArray<MongoStorageIndex>;
124
+ readonly validator?: MongoStorageValidator;
125
+ readonly options?: MongoStorageCollectionOptions;
97
126
  }
98
127
  type MongoStorage<THash extends string = string> = StorageBase<THash> & {
99
128
  readonly collections: Record<string, MongoStorageCollection>;
@@ -166,5 +195,5 @@ declare function validateMongoContract<TContract extends MongoContract>(value: u
166
195
  //#region src/validate-storage.d.ts
167
196
  declare function validateMongoStorage(contract: MongoContract): void;
168
197
  //#endregion
169
- export { type ExtractMongoCodecTypes, type ExtractMongoFieldOutputTypes, type ExtractMongoTypeMaps, type InferModelRow, type MongoChangeStreamPreAndPostImagesOptions, type MongoClusteredCollectionKey, type MongoClusteredCollectionOptions, type MongoCollationAlternate, type MongoCollationCaseFirst, type MongoCollationMaxVariable, type MongoCollationOptions, type MongoCollationStrength, type MongoCollectionOptions, type MongoContract, type MongoContractIndices, type MongoContractWithTypeMaps, type MongoIndex, type MongoIndexFieldValue, type MongoIndexFields, type MongoIndexKey, type MongoIndexKeyDirection, type MongoIndexOptionDefaults, type MongoIndexOptions, type MongoJsonObject, type MongoJsonPrimitive, type MongoJsonValue, type MongoModelDefinition, type MongoModelStorage, type MongoStorage, type MongoStorageCollection, type MongoStorageIndex, type MongoTimeSeriesCollectionOptions, type MongoTimeSeriesGranularity, type MongoTypeMaps, type MongoTypeMapsPhantomKey, type MongoWildcardProjection, type ValidatedMongoContract, validateMongoContract, validateMongoStorage };
198
+ export { type ExtractMongoCodecTypes, type ExtractMongoFieldOutputTypes, type ExtractMongoTypeMaps, type InferModelRow, type MongoChangeStreamPreAndPostImagesOptions, type MongoClusteredCollectionKey, type MongoClusteredCollectionOptions, type MongoCollationAlternate, type MongoCollationCaseFirst, type MongoCollationMaxVariable, type MongoCollationOptions, type MongoCollationStrength, type MongoCollectionOptions, type MongoContract, type MongoContractIndices, type MongoContractWithTypeMaps, type MongoIndex, type MongoIndexFieldValue, type MongoIndexFields, type MongoIndexKey, type MongoIndexKeyDirection, type MongoIndexOptionDefaults, type MongoIndexOptions, type MongoJsonObject, type MongoJsonPrimitive, type MongoJsonValue, type MongoModelDefinition, type MongoModelStorage, type MongoStorage, type MongoStorageCollection, type MongoStorageCollectionOptions, type MongoStorageIndex, type MongoStorageValidator, type MongoTimeSeriesCollectionOptions, type MongoTimeSeriesGranularity, type MongoTypeMaps, type MongoTypeMapsPhantomKey, type MongoWildcardProjection, type ValidatedMongoContract, validateMongoContract, validateMongoStorage };
170
199
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/contract-types.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/validate-mongo-contract.ts","../src/validate-storage.ts"],"sourcesContent":[],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -175,10 +175,58 @@ const IndexSchema = type({
175
175
  fields: IndexFieldsSchema,
176
176
  "options?": IndexOptionsSchema
177
177
  });
178
+ const MongoIndexKeySchema = type({
179
+ "+": "reject",
180
+ field: "string",
181
+ direction: "1 | -1 | \"text\" | \"2dsphere\" | \"2d\" | \"hashed\""
182
+ });
183
+ const MongoStorageIndexSchema = type({
184
+ "+": "reject",
185
+ keys: MongoIndexKeySchema.array().atLeastLength(1),
186
+ "unique?": "boolean",
187
+ "sparse?": "boolean",
188
+ "expireAfterSeconds?": "number",
189
+ "partialFilterExpression?": "Record<string, unknown>",
190
+ "wildcardProjection?": "Record<string, 0 | 1>",
191
+ "collation?": "Record<string, unknown>",
192
+ "weights?": "Record<string, number>",
193
+ "default_language?": "string",
194
+ "language_override?": "string"
195
+ });
196
+ const MongoStorageValidatorSchema = type({
197
+ "+": "reject",
198
+ jsonSchema: "Record<string, unknown>",
199
+ validationLevel: "'strict' | 'moderate'",
200
+ validationAction: "'error' | 'warn'"
201
+ });
202
+ const CappedOptionsSchema = type({
203
+ "+": "reject",
204
+ size: "number",
205
+ "max?": "number"
206
+ });
207
+ const TimeseriesOptionsSchema = type({
208
+ "+": "reject",
209
+ timeField: "string",
210
+ "metaField?": "string",
211
+ "granularity?": "'seconds' | 'minutes' | 'hours'"
212
+ });
213
+ const ClusteredIndexSchema = type({
214
+ "+": "reject",
215
+ "name?": "string"
216
+ });
217
+ const MongoCollectionOptionsSchema = type({
218
+ "+": "reject",
219
+ "capped?": CappedOptionsSchema,
220
+ "timeseries?": TimeseriesOptionsSchema,
221
+ "collation?": "Record<string, unknown>",
222
+ "changeStreamPreAndPostImages?": ChangeStreamPreAndPostImagesSchema,
223
+ "clusteredIndex?": ClusteredIndexSchema
224
+ });
178
225
  const StorageCollectionSchema = type({
179
226
  "+": "reject",
180
- "indexes?": IndexSchema.array(),
181
- "options?": CollectionOptionsSchema
227
+ "indexes?": MongoStorageIndexSchema.array(),
228
+ "validator?": MongoStorageValidatorSchema,
229
+ "options?": MongoCollectionOptionsSchema
182
230
  });
183
231
  const MongoContractSchema = type({
184
232
  "+": "reject",
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["errors: string[]","arktypeType","variantToBase: Record<string, string>","modelToVariants: Record<string, string[]>"],"sources":["../src/contract-schema.ts","../src/validate-storage.ts","../src/validate-mongo-contract.ts"],"sourcesContent":["import { type } from 'arktype';\nimport type { MongoJsonObject, MongoJsonPrimitive, MongoJsonValue } from './contract-types';\n\nconst ScalarFieldTypeSchema = type({\n '+': 'reject',\n kind: \"'scalar'\",\n codecId: 'string',\n 'typeParams?': 'Record<string, unknown>',\n});\n\nconst ValueObjectFieldTypeSchema = type({\n '+': 'reject',\n kind: \"'valueObject'\",\n name: 'string',\n});\n\nconst UnionFieldTypeSchema = type({\n '+': 'reject',\n kind: \"'union'\",\n members: ScalarFieldTypeSchema.or(ValueObjectFieldTypeSchema).array(),\n});\n\nconst FieldTypeSchema = ScalarFieldTypeSchema.or(ValueObjectFieldTypeSchema).or(\n UnionFieldTypeSchema,\n);\n\nconst RawFieldSchema = type({\n '+': 'reject',\n type: FieldTypeSchema,\n 'nullable?': 'boolean',\n 'many?': 'boolean',\n 'dict?': 'boolean',\n});\n\nconst FieldSchema = RawFieldSchema.pipe((field) => ({\n ...field,\n nullable: field.nullable ?? false,\n}));\n\nconst RelationOnSchema = type({\n '+': 'reject',\n localFields: 'string[]',\n targetFields: 'string[]',\n});\n\nconst RelationSchema = type({\n '+': 'reject',\n to: 'string',\n cardinality: \"'1:1' | '1:N' | 'N:1'\",\n 'on?': RelationOnSchema,\n});\n\nconst StorageRelationEntrySchema = type({\n '+': 'reject',\n field: 'string',\n});\n\nconst MongoJsonPrimitiveSchema = type\n .declare<MongoJsonPrimitive>()\n .type('string | number | boolean | null');\n\nfunction isMongoJsonRecord(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction withUnseenReference(value: object, seen: WeakSet<object>, visit: () => boolean): boolean {\n if (seen.has(value)) {\n return false;\n }\n\n seen.add(value);\n const result = visit();\n seen.delete(value);\n return result;\n}\n\nfunction isMongoJsonObject(value: unknown, seen: WeakSet<object>): value is MongoJsonObject {\n return (\n isMongoJsonRecord(value) &&\n withUnseenReference(value, seen, () =>\n Object.values(value).every((entry) => isMongoJsonValue(entry, seen)),\n )\n );\n}\n\nfunction isMongoJsonValue(value: unknown, seen = new WeakSet<object>()): value is MongoJsonValue {\n if (MongoJsonPrimitiveSchema.allows(value)) {\n return true;\n }\n if (Array.isArray(value)) {\n return withUnseenReference(value, seen, () =>\n value.every((entry) => isMongoJsonValue(entry, seen)),\n );\n }\n return isMongoJsonObject(value, seen);\n}\n\nconst MongoJsonValueSchema = type('unknown').narrow((value, ctx) =>\n isMongoJsonValue(value) ? true : ctx.mustBe('a JSON-serializable MongoJsonValue'),\n);\n\nconst MongoJsonObjectSchema = type({ '[string]': 'unknown' }).narrow((value, ctx) =>\n isMongoJsonRecord(value) &&\n Object.values(value).every((entry) => MongoJsonValueSchema.allows(entry))\n ? true\n : ctx.mustBe('a JSON object with MongoJsonValue entries'),\n);\n\nconst NumberRecordSchema = type({ '[string]': 'number' });\n\nconst IndexFieldsSchema = type({\n '+': 'reject',\n '[string]': '1 | -1 | \"text\" | \"2dsphere\" | \"2d\" | \"hashed\"',\n}).narrow((fields, ctx) =>\n Object.keys(fields).length > 0 ? true : ctx.mustBe('an index field map with at least one entry'),\n);\n\nconst CollationSchema = type({\n '+': 'reject',\n locale: 'string',\n 'caseLevel?': 'boolean',\n 'caseFirst?': '\"off\" | \"upper\" | \"lower\"',\n 'strength?': '1 | 2 | 3 | 4 | 5',\n 'numericOrdering?': 'boolean',\n 'alternate?': '\"non-ignorable\" | \"shifted\"',\n 'maxVariable?': '\"punct\" | \"space\"',\n 'backwards?': 'boolean',\n 'normalization?': 'boolean',\n});\n\nconst IndexOptionDefaultsSchema = type({\n '+': 'reject',\n 'storageEngine?': MongoJsonObjectSchema,\n});\n\nconst TimeSeriesCollectionOptionsSchema = type({\n '+': 'reject',\n timeField: 'string',\n 'metaField?': 'string',\n 'granularity?': '\"seconds\" | \"minutes\" | \"hours\"',\n 'bucketMaxSpanSeconds?': 'number',\n 'bucketRoundingSeconds?': 'number',\n});\n\nconst ClusteredCollectionKeySchema = type({\n '+': 'reject',\n '[string]': '1',\n}).narrow((key, ctx) =>\n Object.keys(key).length > 0\n ? true\n : ctx.mustBe('a clustered index key map with at least one entry'),\n);\n\nconst ClusteredCollectionOptionsSchema = type({\n '+': 'reject',\n 'name?': 'string',\n key: ClusteredCollectionKeySchema,\n unique: 'boolean',\n});\n\nconst ChangeStreamPreAndPostImagesSchema = type({\n '+': 'reject',\n enabled: 'boolean',\n});\n\nconst CollectionOptionsSchema = type({\n '+': 'reject',\n 'capped?': 'boolean',\n 'size?': 'number',\n 'max?': 'number',\n 'storageEngine?': MongoJsonObjectSchema,\n 'indexOptionDefaults?': IndexOptionDefaultsSchema,\n 'collation?': CollationSchema,\n 'timeseries?': TimeSeriesCollectionOptionsSchema,\n 'clusteredIndex?': ClusteredCollectionOptionsSchema,\n 'expireAfterSeconds?': 'number',\n 'changeStreamPreAndPostImages?': ChangeStreamPreAndPostImagesSchema,\n});\n\nconst ModelStorageSchema = type({\n '+': 'reject',\n 'collection?': 'string',\n 'relations?': type({ '[string]': StorageRelationEntrySchema }),\n});\n\nconst DiscriminatorSchema = type({\n '+': 'reject',\n field: 'string',\n});\n\nconst VariantEntrySchema = type({\n '+': 'reject',\n value: 'string',\n});\n\nconst ModelDefinitionSchema = type({\n '+': 'reject',\n fields: type({ '[string]': FieldSchema }),\n storage: ModelStorageSchema,\n 'relations?': type({ '[string]': RelationSchema }),\n 'discriminator?': DiscriminatorSchema,\n 'variants?': type({ '[string]': VariantEntrySchema }),\n 'base?': 'string',\n 'owner?': 'string',\n});\n\nconst WildcardProjectionSchema = type({\n '+': 'reject',\n '[string]': '0 | 1',\n});\n\nconst IndexOptionsSchema = type({\n '+': 'reject',\n 'unique?': 'boolean',\n 'name?': 'string',\n 'partialFilterExpression?': MongoJsonObjectSchema,\n 'sparse?': 'boolean',\n 'expireAfterSeconds?': 'number',\n 'weights?': NumberRecordSchema,\n 'default_language?': 'string',\n 'language_override?': 'string',\n 'textIndexVersion?': 'number',\n '2dsphereIndexVersion?': 'number',\n 'bits?': 'number',\n 'min?': 'number',\n 'max?': 'number',\n 'bucketSize?': 'number',\n 'hidden?': 'boolean',\n 'collation?': CollationSchema,\n 'wildcardProjection?': WildcardProjectionSchema,\n});\n\nconst IndexSchema = type({\n '+': 'reject',\n fields: IndexFieldsSchema,\n 'options?': IndexOptionsSchema,\n});\n\nconst StorageCollectionSchema = type({\n '+': 'reject',\n 'indexes?': IndexSchema.array(),\n 'options?': CollectionOptionsSchema,\n});\n\nexport const MongoContractSchema = type({\n '+': 'reject',\n targetFamily: \"'mongo'\",\n 'schemaVersion?': 'string',\n 'target?': 'string',\n 'storageHash?': 'string',\n 'profileHash?': 'string',\n roots: 'Record<string, string>',\n 'capabilities?': 'Record<string, unknown>',\n 'extensionPacks?': 'Record<string, unknown>',\n 'meta?': 'Record<string, unknown>',\n 'sources?': 'Record<string, unknown>',\n '_generated?': 'Record<string, unknown>',\n storage: type({\n '+': 'reject',\n collections: type({ '[string]': StorageCollectionSchema }),\n 'storageHash?': 'string',\n }),\n models: type({ '[string]': ModelDefinitionSchema }),\n 'valueObjects?': type({\n '[string]': type({ '+': 'reject', fields: type({ '[string]': FieldSchema }) }),\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 const targetModel = contract.models[relation.to];\n\n if (targetModel?.owner) {\n if (targetModel.owner !== modelName) {\n errors.push(\n `Embed relation \"${relName}\" targets \"${relation.to}\" which is owned by \"${targetModel.owner}\", not \"${modelName}\"`,\n );\n }\n if (targetModel.storage.collection) {\n errors.push(\n `Embed relation \"${relName}\" targets \"${relation.to}\" which must not have a collection`,\n );\n }\n } else if ('on' in relation && relation.on) {\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 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 { validateContractDomain } from '@prisma-next/contract/validate-domain';\nimport { type as arktypeType } from 'arktype';\nimport { MongoContractSchema } from './contract-schema';\nimport type { MongoContract } from './contract-types';\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}\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 validateContractDomain(contract);\n validateMongoStorage(contract);\n\n const indices = buildIndices(contract);\n\n return { contract, indices };\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"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["errors: string[]","arktypeType","variantToBase: Record<string, string>","modelToVariants: Record<string, string[]>"],"sources":["../src/contract-schema.ts","../src/validate-storage.ts","../src/validate-mongo-contract.ts"],"sourcesContent":["import { type } from 'arktype';\nimport type { MongoJsonObject, MongoJsonPrimitive, MongoJsonValue } from './contract-types';\n\nconst ScalarFieldTypeSchema = type({\n '+': 'reject',\n kind: \"'scalar'\",\n codecId: 'string',\n 'typeParams?': 'Record<string, unknown>',\n});\n\nconst ValueObjectFieldTypeSchema = type({\n '+': 'reject',\n kind: \"'valueObject'\",\n name: 'string',\n});\n\nconst UnionFieldTypeSchema = type({\n '+': 'reject',\n kind: \"'union'\",\n members: ScalarFieldTypeSchema.or(ValueObjectFieldTypeSchema).array(),\n});\n\nconst FieldTypeSchema = ScalarFieldTypeSchema.or(ValueObjectFieldTypeSchema).or(\n UnionFieldTypeSchema,\n);\n\nconst RawFieldSchema = type({\n '+': 'reject',\n type: FieldTypeSchema,\n 'nullable?': 'boolean',\n 'many?': 'boolean',\n 'dict?': 'boolean',\n});\n\nconst FieldSchema = RawFieldSchema.pipe((field) => ({\n ...field,\n nullable: field.nullable ?? false,\n}));\n\nconst RelationOnSchema = type({\n '+': 'reject',\n localFields: 'string[]',\n targetFields: 'string[]',\n});\n\nconst RelationSchema = type({\n '+': 'reject',\n to: 'string',\n cardinality: \"'1:1' | '1:N' | 'N:1'\",\n 'on?': RelationOnSchema,\n});\n\nconst StorageRelationEntrySchema = type({\n '+': 'reject',\n field: 'string',\n});\n\nconst MongoJsonPrimitiveSchema = type\n .declare<MongoJsonPrimitive>()\n .type('string | number | boolean | null');\n\nfunction isMongoJsonRecord(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction withUnseenReference(value: object, seen: WeakSet<object>, visit: () => boolean): boolean {\n if (seen.has(value)) {\n return false;\n }\n\n seen.add(value);\n const result = visit();\n seen.delete(value);\n return result;\n}\n\nfunction isMongoJsonObject(value: unknown, seen: WeakSet<object>): value is MongoJsonObject {\n return (\n isMongoJsonRecord(value) &&\n withUnseenReference(value, seen, () =>\n Object.values(value).every((entry) => isMongoJsonValue(entry, seen)),\n )\n );\n}\n\nfunction isMongoJsonValue(value: unknown, seen = new WeakSet<object>()): value is MongoJsonValue {\n if (MongoJsonPrimitiveSchema.allows(value)) {\n return true;\n }\n if (Array.isArray(value)) {\n return withUnseenReference(value, seen, () =>\n value.every((entry) => isMongoJsonValue(entry, seen)),\n );\n }\n return isMongoJsonObject(value, seen);\n}\n\nconst MongoJsonValueSchema = type('unknown').narrow((value, ctx) =>\n isMongoJsonValue(value) ? true : ctx.mustBe('a JSON-serializable MongoJsonValue'),\n);\n\nconst MongoJsonObjectSchema = type({ '[string]': 'unknown' }).narrow((value, ctx) =>\n isMongoJsonRecord(value) &&\n Object.values(value).every((entry) => MongoJsonValueSchema.allows(entry))\n ? true\n : ctx.mustBe('a JSON object with MongoJsonValue entries'),\n);\n\nconst NumberRecordSchema = type({ '[string]': 'number' });\n\nconst IndexFieldsSchema = type({\n '+': 'reject',\n '[string]': '1 | -1 | \"text\" | \"2dsphere\" | \"2d\" | \"hashed\"',\n}).narrow((fields, ctx) =>\n Object.keys(fields).length > 0 ? true : ctx.mustBe('an index field map with at least one entry'),\n);\n\nconst CollationSchema = type({\n '+': 'reject',\n locale: 'string',\n 'caseLevel?': 'boolean',\n 'caseFirst?': '\"off\" | \"upper\" | \"lower\"',\n 'strength?': '1 | 2 | 3 | 4 | 5',\n 'numericOrdering?': 'boolean',\n 'alternate?': '\"non-ignorable\" | \"shifted\"',\n 'maxVariable?': '\"punct\" | \"space\"',\n 'backwards?': 'boolean',\n 'normalization?': 'boolean',\n});\n\nconst IndexOptionDefaultsSchema = type({\n '+': 'reject',\n 'storageEngine?': MongoJsonObjectSchema,\n});\n\nconst TimeSeriesCollectionOptionsSchema = type({\n '+': 'reject',\n timeField: 'string',\n 'metaField?': 'string',\n 'granularity?': '\"seconds\" | \"minutes\" | \"hours\"',\n 'bucketMaxSpanSeconds?': 'number',\n 'bucketRoundingSeconds?': 'number',\n});\n\nconst ClusteredCollectionKeySchema = type({\n '+': 'reject',\n '[string]': '1',\n}).narrow((key, ctx) =>\n Object.keys(key).length > 0\n ? true\n : ctx.mustBe('a clustered index key map with at least one entry'),\n);\n\nconst ClusteredCollectionOptionsSchema = type({\n '+': 'reject',\n 'name?': 'string',\n key: ClusteredCollectionKeySchema,\n unique: 'boolean',\n});\n\nconst ChangeStreamPreAndPostImagesSchema = type({\n '+': 'reject',\n enabled: 'boolean',\n});\n\nconst CollectionOptionsSchema = type({\n '+': 'reject',\n 'capped?': 'boolean',\n 'size?': 'number',\n 'max?': 'number',\n 'storageEngine?': MongoJsonObjectSchema,\n 'indexOptionDefaults?': IndexOptionDefaultsSchema,\n 'collation?': CollationSchema,\n 'timeseries?': TimeSeriesCollectionOptionsSchema,\n 'clusteredIndex?': ClusteredCollectionOptionsSchema,\n 'expireAfterSeconds?': 'number',\n 'changeStreamPreAndPostImages?': ChangeStreamPreAndPostImagesSchema,\n});\n\nconst ModelStorageSchema = type({\n '+': 'reject',\n 'collection?': 'string',\n 'relations?': type({ '[string]': StorageRelationEntrySchema }),\n});\n\nconst DiscriminatorSchema = type({\n '+': 'reject',\n field: 'string',\n});\n\nconst VariantEntrySchema = type({\n '+': 'reject',\n value: 'string',\n});\n\nconst ModelDefinitionSchema = type({\n '+': 'reject',\n fields: type({ '[string]': FieldSchema }),\n storage: ModelStorageSchema,\n 'relations?': type({ '[string]': RelationSchema }),\n 'discriminator?': DiscriminatorSchema,\n 'variants?': type({ '[string]': VariantEntrySchema }),\n 'base?': 'string',\n 'owner?': 'string',\n});\n\nconst WildcardProjectionSchema = type({\n '+': 'reject',\n '[string]': '0 | 1',\n});\n\nconst IndexOptionsSchema = type({\n '+': 'reject',\n 'unique?': 'boolean',\n 'name?': 'string',\n 'partialFilterExpression?': MongoJsonObjectSchema,\n 'sparse?': 'boolean',\n 'expireAfterSeconds?': 'number',\n 'weights?': NumberRecordSchema,\n 'default_language?': 'string',\n 'language_override?': 'string',\n 'textIndexVersion?': 'number',\n '2dsphereIndexVersion?': 'number',\n 'bits?': 'number',\n 'min?': 'number',\n 'max?': 'number',\n 'bucketSize?': 'number',\n 'hidden?': 'boolean',\n 'collation?': CollationSchema,\n 'wildcardProjection?': WildcardProjectionSchema,\n});\n\nconst IndexSchema = type({\n '+': 'reject',\n fields: IndexFieldsSchema,\n 'options?': IndexOptionsSchema,\n});\n\nconst MongoIndexKeySchema = type({\n '+': 'reject',\n field: 'string',\n direction: '1 | -1 | \"text\" | \"2dsphere\" | \"2d\" | \"hashed\"',\n});\n\nconst MongoStorageIndexSchema = type({\n '+': 'reject',\n keys: MongoIndexKeySchema.array().atLeastLength(1),\n 'unique?': 'boolean',\n 'sparse?': 'boolean',\n 'expireAfterSeconds?': 'number',\n 'partialFilterExpression?': 'Record<string, unknown>',\n 'wildcardProjection?': 'Record<string, 0 | 1>',\n 'collation?': 'Record<string, unknown>',\n 'weights?': 'Record<string, number>',\n 'default_language?': 'string',\n 'language_override?': 'string',\n});\n\nconst MongoStorageValidatorSchema = type({\n '+': 'reject',\n jsonSchema: 'Record<string, unknown>',\n validationLevel: \"'strict' | 'moderate'\",\n validationAction: \"'error' | 'warn'\",\n});\n\nconst CappedOptionsSchema = type({\n '+': 'reject',\n size: 'number',\n 'max?': 'number',\n});\n\nconst TimeseriesOptionsSchema = type({\n '+': 'reject',\n timeField: 'string',\n 'metaField?': 'string',\n 'granularity?': \"'seconds' | 'minutes' | 'hours'\",\n});\n\nconst ClusteredIndexSchema = type({\n '+': 'reject',\n 'name?': 'string',\n});\n\nconst MongoCollectionOptionsSchema = type({\n '+': 'reject',\n 'capped?': CappedOptionsSchema,\n 'timeseries?': TimeseriesOptionsSchema,\n 'collation?': 'Record<string, unknown>',\n 'changeStreamPreAndPostImages?': ChangeStreamPreAndPostImagesSchema,\n 'clusteredIndex?': ClusteredIndexSchema,\n});\n\nconst StorageCollectionSchema = type({\n '+': 'reject',\n 'indexes?': MongoStorageIndexSchema.array(),\n 'validator?': MongoStorageValidatorSchema,\n 'options?': MongoCollectionOptionsSchema,\n});\n\nexport const MongoContractSchema = type({\n '+': 'reject',\n targetFamily: \"'mongo'\",\n 'schemaVersion?': 'string',\n 'target?': 'string',\n 'storageHash?': 'string',\n 'profileHash?': 'string',\n roots: 'Record<string, string>',\n 'capabilities?': 'Record<string, unknown>',\n 'extensionPacks?': 'Record<string, unknown>',\n 'meta?': 'Record<string, unknown>',\n 'sources?': 'Record<string, unknown>',\n '_generated?': 'Record<string, unknown>',\n storage: type({\n '+': 'reject',\n collections: type({ '[string]': StorageCollectionSchema }),\n 'storageHash?': 'string',\n }),\n models: type({ '[string]': ModelDefinitionSchema }),\n 'valueObjects?': type({\n '[string]': type({ '+': 'reject', fields: type({ '[string]': FieldSchema }) }),\n }),\n});\n\nexport {\n CollationSchema,\n CollectionOptionsSchema,\n IndexFieldsSchema,\n IndexOptionsSchema,\n IndexSchema,\n MongoIndexKeySchema,\n MongoStorageIndexSchema,\n NumberRecordSchema,\n WildcardProjectionSchema,\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 const targetModel = contract.models[relation.to];\n\n if (targetModel?.owner) {\n if (targetModel.owner !== modelName) {\n errors.push(\n `Embed relation \"${relName}\" targets \"${relation.to}\" which is owned by \"${targetModel.owner}\", not \"${modelName}\"`,\n );\n }\n if (targetModel.storage.collection) {\n errors.push(\n `Embed relation \"${relName}\" targets \"${relation.to}\" which must not have a collection`,\n );\n }\n } else if ('on' in relation && relation.on) {\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 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 { validateContractDomain } from '@prisma-next/contract/validate-domain';\nimport { type as arktypeType } from 'arktype';\nimport { MongoContractSchema } from './contract-schema';\nimport type { MongoContract } from './contract-types';\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}\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 validateContractDomain(contract);\n validateMongoStorage(contract);\n\n const indices = buildIndices(contract);\n\n return { contract, indices };\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"],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@prisma-next/mongo-contract",
3
- "version": "0.3.0-dev.150",
3
+ "version": "0.3.0-dev.152",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "description": "Contract types and validation for Prisma Next MongoDB support",
7
7
  "dependencies": {
8
8
  "arktype": "^2.1.29",
9
- "@prisma-next/contract": "0.3.0-dev.150"
9
+ "@prisma-next/contract": "0.3.0-dev.152"
10
10
  },
11
11
  "devDependencies": {
12
12
  "tsdown": "0.18.4",
@@ -240,10 +240,65 @@ const IndexSchema = type({
240
240
  'options?': IndexOptionsSchema,
241
241
  });
242
242
 
243
+ const MongoIndexKeySchema = type({
244
+ '+': 'reject',
245
+ field: 'string',
246
+ direction: '1 | -1 | "text" | "2dsphere" | "2d" | "hashed"',
247
+ });
248
+
249
+ const MongoStorageIndexSchema = type({
250
+ '+': 'reject',
251
+ keys: MongoIndexKeySchema.array().atLeastLength(1),
252
+ 'unique?': 'boolean',
253
+ 'sparse?': 'boolean',
254
+ 'expireAfterSeconds?': 'number',
255
+ 'partialFilterExpression?': 'Record<string, unknown>',
256
+ 'wildcardProjection?': 'Record<string, 0 | 1>',
257
+ 'collation?': 'Record<string, unknown>',
258
+ 'weights?': 'Record<string, number>',
259
+ 'default_language?': 'string',
260
+ 'language_override?': 'string',
261
+ });
262
+
263
+ const MongoStorageValidatorSchema = type({
264
+ '+': 'reject',
265
+ jsonSchema: 'Record<string, unknown>',
266
+ validationLevel: "'strict' | 'moderate'",
267
+ validationAction: "'error' | 'warn'",
268
+ });
269
+
270
+ const CappedOptionsSchema = type({
271
+ '+': 'reject',
272
+ size: 'number',
273
+ 'max?': 'number',
274
+ });
275
+
276
+ const TimeseriesOptionsSchema = type({
277
+ '+': 'reject',
278
+ timeField: 'string',
279
+ 'metaField?': 'string',
280
+ 'granularity?': "'seconds' | 'minutes' | 'hours'",
281
+ });
282
+
283
+ const ClusteredIndexSchema = type({
284
+ '+': 'reject',
285
+ 'name?': 'string',
286
+ });
287
+
288
+ const MongoCollectionOptionsSchema = type({
289
+ '+': 'reject',
290
+ 'capped?': CappedOptionsSchema,
291
+ 'timeseries?': TimeseriesOptionsSchema,
292
+ 'collation?': 'Record<string, unknown>',
293
+ 'changeStreamPreAndPostImages?': ChangeStreamPreAndPostImagesSchema,
294
+ 'clusteredIndex?': ClusteredIndexSchema,
295
+ });
296
+
243
297
  const StorageCollectionSchema = type({
244
298
  '+': 'reject',
245
- 'indexes?': IndexSchema.array(),
246
- 'options?': CollectionOptionsSchema,
299
+ 'indexes?': MongoStorageIndexSchema.array(),
300
+ 'validator?': MongoStorageValidatorSchema,
301
+ 'options?': MongoCollectionOptionsSchema,
247
302
  });
248
303
 
249
304
  export const MongoContractSchema = type({
@@ -269,3 +324,15 @@ export const MongoContractSchema = type({
269
324
  '[string]': type({ '+': 'reject', fields: type({ '[string]': FieldSchema }) }),
270
325
  }),
271
326
  });
327
+
328
+ export {
329
+ CollationSchema,
330
+ CollectionOptionsSchema,
331
+ IndexFieldsSchema,
332
+ IndexOptionsSchema,
333
+ IndexSchema,
334
+ MongoIndexKeySchema,
335
+ MongoStorageIndexSchema,
336
+ NumberRecordSchema,
337
+ WildcardProjectionSchema,
338
+ };
@@ -117,11 +117,35 @@ export interface MongoStorageIndex {
117
117
  readonly sparse?: boolean;
118
118
  readonly expireAfterSeconds?: number;
119
119
  readonly partialFilterExpression?: Record<string, unknown>;
120
+ readonly wildcardProjection?: Record<string, 0 | 1>;
121
+ readonly collation?: Record<string, unknown>;
122
+ readonly weights?: Record<string, number>;
123
+ readonly default_language?: string;
124
+ readonly language_override?: string;
125
+ }
126
+
127
+ export interface MongoStorageValidator {
128
+ readonly jsonSchema: Record<string, unknown>;
129
+ readonly validationLevel: 'strict' | 'moderate';
130
+ readonly validationAction: 'error' | 'warn';
131
+ }
132
+
133
+ export interface MongoStorageCollectionOptions {
134
+ readonly capped?: { size: number; max?: number };
135
+ readonly timeseries?: {
136
+ timeField: string;
137
+ metaField?: string;
138
+ granularity?: 'seconds' | 'minutes' | 'hours';
139
+ };
140
+ readonly collation?: Record<string, unknown>;
141
+ readonly changeStreamPreAndPostImages?: { enabled: boolean };
142
+ readonly clusteredIndex?: { name?: string };
120
143
  }
121
144
 
122
145
  export interface MongoStorageCollection {
123
- readonly indexes?: readonly MongoIndex[];
124
- readonly options?: MongoCollectionOptions;
146
+ readonly indexes?: ReadonlyArray<MongoStorageIndex>;
147
+ readonly validator?: MongoStorageValidator;
148
+ readonly options?: MongoStorageCollectionOptions;
125
149
  }
126
150
 
127
151
  export type MongoStorage<THash extends string = string> = StorageBase<THash> & {
@@ -28,7 +28,9 @@ export type {
28
28
  MongoModelStorage,
29
29
  MongoStorage,
30
30
  MongoStorageCollection,
31
+ MongoStorageCollectionOptions,
31
32
  MongoStorageIndex,
33
+ MongoStorageValidator,
32
34
  MongoTimeSeriesCollectionOptions,
33
35
  MongoTimeSeriesGranularity,
34
36
  MongoTypeMaps,