@prisma-next/mongo-contract 0.3.0-dev.147 → 0.3.0-dev.149

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
@@ -79,10 +79,22 @@ type MongoCollectionOptions = {
79
79
  readonly expireAfterSeconds?: number;
80
80
  readonly changeStreamPreAndPostImages?: MongoChangeStreamPreAndPostImagesOptions;
81
81
  };
82
- type MongoStorageCollection = {
82
+ type MongoIndexKeyDirection = 1 | -1 | 'text' | '2dsphere' | '2d' | 'hashed';
83
+ interface MongoIndexKey {
84
+ readonly field: string;
85
+ readonly direction: MongoIndexKeyDirection;
86
+ }
87
+ interface MongoStorageIndex {
88
+ readonly keys: ReadonlyArray<MongoIndexKey>;
89
+ readonly unique?: boolean;
90
+ readonly sparse?: boolean;
91
+ readonly expireAfterSeconds?: number;
92
+ readonly partialFilterExpression?: Record<string, unknown>;
93
+ }
94
+ interface MongoStorageCollection {
83
95
  readonly indexes?: readonly MongoIndex[];
84
96
  readonly options?: MongoCollectionOptions;
85
- };
97
+ }
86
98
  type MongoStorage<THash extends string = string> = StorageBase<THash> & {
87
99
  readonly collections: Record<string, MongoStorageCollection>;
88
100
  };
@@ -154,5 +166,5 @@ declare function validateMongoContract<TContract extends MongoContract>(value: u
154
166
  //#region src/validate-storage.d.ts
155
167
  declare function validateMongoStorage(contract: MongoContract): void;
156
168
  //#endregion
157
- 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 MongoIndexOptionDefaults, type MongoIndexOptions, type MongoJsonObject, type MongoJsonPrimitive, type MongoJsonValue, type MongoModelDefinition, type MongoModelStorage, type MongoStorage, type MongoStorageCollection, type MongoTimeSeriesCollectionOptions, type MongoTimeSeriesGranularity, type MongoTypeMaps, type MongoTypeMapsPhantomKey, type MongoWildcardProjection, type ValidatedMongoContract, validateMongoContract, validateMongoStorage };
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 };
158
170
  //# 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
@@ -84,35 +84,6 @@ const CollationSchema = type({
84
84
  "backwards?": "boolean",
85
85
  "normalization?": "boolean"
86
86
  });
87
- const WildcardProjectionSchema = type({
88
- "+": "reject",
89
- "[string]": "0 | 1"
90
- });
91
- const IndexOptionsSchema = type({
92
- "+": "reject",
93
- "unique?": "boolean",
94
- "name?": "string",
95
- "partialFilterExpression?": MongoJsonObjectSchema,
96
- "sparse?": "boolean",
97
- "expireAfterSeconds?": "number",
98
- "weights?": NumberRecordSchema,
99
- "default_language?": "string",
100
- "language_override?": "string",
101
- "textIndexVersion?": "number",
102
- "2dsphereIndexVersion?": "number",
103
- "bits?": "number",
104
- "min?": "number",
105
- "max?": "number",
106
- "bucketSize?": "number",
107
- "hidden?": "boolean",
108
- "collation?": CollationSchema,
109
- "wildcardProjection?": WildcardProjectionSchema
110
- });
111
- const IndexSchema = type({
112
- "+": "reject",
113
- fields: IndexFieldsSchema,
114
- "options?": IndexOptionsSchema
115
- });
116
87
  const IndexOptionDefaultsSchema = type({
117
88
  "+": "reject",
118
89
  "storageEngine?": MongoJsonObjectSchema
@@ -175,6 +146,35 @@ const ModelDefinitionSchema = type({
175
146
  "base?": "string",
176
147
  "owner?": "string"
177
148
  });
149
+ const WildcardProjectionSchema = type({
150
+ "+": "reject",
151
+ "[string]": "0 | 1"
152
+ });
153
+ const IndexOptionsSchema = type({
154
+ "+": "reject",
155
+ "unique?": "boolean",
156
+ "name?": "string",
157
+ "partialFilterExpression?": MongoJsonObjectSchema,
158
+ "sparse?": "boolean",
159
+ "expireAfterSeconds?": "number",
160
+ "weights?": NumberRecordSchema,
161
+ "default_language?": "string",
162
+ "language_override?": "string",
163
+ "textIndexVersion?": "number",
164
+ "2dsphereIndexVersion?": "number",
165
+ "bits?": "number",
166
+ "min?": "number",
167
+ "max?": "number",
168
+ "bucketSize?": "number",
169
+ "hidden?": "boolean",
170
+ "collation?": CollationSchema,
171
+ "wildcardProjection?": WildcardProjectionSchema
172
+ });
173
+ const IndexSchema = type({
174
+ "+": "reject",
175
+ fields: IndexFieldsSchema,
176
+ "options?": IndexOptionsSchema
177
+ });
178
178
  const StorageCollectionSchema = type({
179
179
  "+": "reject",
180
180
  "indexes?": IndexSchema.array(),
@@ -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 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 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 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 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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"}
package/package.json CHANGED
@@ -1,21 +1,20 @@
1
1
  {
2
2
  "name": "@prisma-next/mongo-contract",
3
- "version": "0.3.0-dev.147",
3
+ "version": "0.3.0-dev.149",
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.147"
9
+ "@prisma-next/contract": "0.3.0-dev.149"
10
10
  },
11
11
  "devDependencies": {
12
12
  "tsdown": "0.18.4",
13
13
  "typescript": "5.9.3",
14
14
  "vitest": "4.0.17",
15
- "@prisma-next/tsconfig": "0.0.0",
16
15
  "@prisma-next/test-utils": "0.0.1",
17
- "@prisma-next/adapter-mongo": "0.3.0-dev.147",
18
- "@prisma-next/tsdown": "0.0.0"
16
+ "@prisma-next/tsdown": "0.0.0",
17
+ "@prisma-next/tsconfig": "0.0.0"
19
18
  },
20
19
  "files": [
21
20
  "dist",
@@ -132,38 +132,6 @@ const CollationSchema = type({
132
132
  'normalization?': 'boolean',
133
133
  });
134
134
 
135
- const WildcardProjectionSchema = type({
136
- '+': 'reject',
137
- '[string]': '0 | 1',
138
- });
139
-
140
- const IndexOptionsSchema = type({
141
- '+': 'reject',
142
- 'unique?': 'boolean',
143
- 'name?': 'string',
144
- 'partialFilterExpression?': MongoJsonObjectSchema,
145
- 'sparse?': 'boolean',
146
- 'expireAfterSeconds?': 'number',
147
- 'weights?': NumberRecordSchema,
148
- 'default_language?': 'string',
149
- 'language_override?': 'string',
150
- 'textIndexVersion?': 'number',
151
- '2dsphereIndexVersion?': 'number',
152
- 'bits?': 'number',
153
- 'min?': 'number',
154
- 'max?': 'number',
155
- 'bucketSize?': 'number',
156
- 'hidden?': 'boolean',
157
- 'collation?': CollationSchema,
158
- 'wildcardProjection?': WildcardProjectionSchema,
159
- });
160
-
161
- const IndexSchema = type({
162
- '+': 'reject',
163
- fields: IndexFieldsSchema,
164
- 'options?': IndexOptionsSchema,
165
- });
166
-
167
135
  const IndexOptionDefaultsSchema = type({
168
136
  '+': 'reject',
169
137
  'storageEngine?': MongoJsonObjectSchema,
@@ -240,6 +208,38 @@ const ModelDefinitionSchema = type({
240
208
  'owner?': 'string',
241
209
  });
242
210
 
211
+ const WildcardProjectionSchema = type({
212
+ '+': 'reject',
213
+ '[string]': '0 | 1',
214
+ });
215
+
216
+ const IndexOptionsSchema = type({
217
+ '+': 'reject',
218
+ 'unique?': 'boolean',
219
+ 'name?': 'string',
220
+ 'partialFilterExpression?': MongoJsonObjectSchema,
221
+ 'sparse?': 'boolean',
222
+ 'expireAfterSeconds?': 'number',
223
+ 'weights?': NumberRecordSchema,
224
+ 'default_language?': 'string',
225
+ 'language_override?': 'string',
226
+ 'textIndexVersion?': 'number',
227
+ '2dsphereIndexVersion?': 'number',
228
+ 'bits?': 'number',
229
+ 'min?': 'number',
230
+ 'max?': 'number',
231
+ 'bucketSize?': 'number',
232
+ 'hidden?': 'boolean',
233
+ 'collation?': CollationSchema,
234
+ 'wildcardProjection?': WildcardProjectionSchema,
235
+ });
236
+
237
+ const IndexSchema = type({
238
+ '+': 'reject',
239
+ fields: IndexFieldsSchema,
240
+ 'options?': IndexOptionsSchema,
241
+ });
242
+
243
243
  const StorageCollectionSchema = type({
244
244
  '+': 'reject',
245
245
  'indexes?': IndexSchema.array(),
@@ -104,10 +104,25 @@ export type MongoCollectionOptions = {
104
104
  readonly changeStreamPreAndPostImages?: MongoChangeStreamPreAndPostImagesOptions;
105
105
  };
106
106
 
107
- export type MongoStorageCollection = {
107
+ export type MongoIndexKeyDirection = 1 | -1 | 'text' | '2dsphere' | '2d' | 'hashed';
108
+
109
+ export interface MongoIndexKey {
110
+ readonly field: string;
111
+ readonly direction: MongoIndexKeyDirection;
112
+ }
113
+
114
+ export interface MongoStorageIndex {
115
+ readonly keys: ReadonlyArray<MongoIndexKey>;
116
+ readonly unique?: boolean;
117
+ readonly sparse?: boolean;
118
+ readonly expireAfterSeconds?: number;
119
+ readonly partialFilterExpression?: Record<string, unknown>;
120
+ }
121
+
122
+ export interface MongoStorageCollection {
108
123
  readonly indexes?: readonly MongoIndex[];
109
124
  readonly options?: MongoCollectionOptions;
110
- };
125
+ }
111
126
 
112
127
  export type MongoStorage<THash extends string = string> = StorageBase<THash> & {
113
128
  readonly collections: Record<string, MongoStorageCollection>;
@@ -17,6 +17,8 @@ export type {
17
17
  MongoIndex,
18
18
  MongoIndexFields,
19
19
  MongoIndexFieldValue,
20
+ MongoIndexKey,
21
+ MongoIndexKeyDirection,
20
22
  MongoIndexOptionDefaults,
21
23
  MongoIndexOptions,
22
24
  MongoJsonObject,
@@ -26,6 +28,7 @@ export type {
26
28
  MongoModelStorage,
27
29
  MongoStorage,
28
30
  MongoStorageCollection,
31
+ MongoStorageIndex,
29
32
  MongoTimeSeriesCollectionOptions,
30
33
  MongoTimeSeriesGranularity,
31
34
  MongoTypeMaps,