@prisma-next/mongo-contract 0.14.0-dev.3 → 0.14.0-dev.30

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.
@@ -19,12 +19,29 @@ const UnionFieldTypeSchema = type({
19
19
  kind: "'union'",
20
20
  members: ScalarFieldTypeSchema.or(ValueObjectFieldTypeSchema).array()
21
21
  });
22
+ const FieldTypeSchema = ScalarFieldTypeSchema.or(ValueObjectFieldTypeSchema).or(UnionFieldTypeSchema);
23
+ const DomainEnumRefSchema = type({
24
+ plane: "'domain'",
25
+ namespaceId: "string",
26
+ entityKind: "'enum'",
27
+ entityName: "string",
28
+ "spaceId?": "string"
29
+ });
30
+ const ContractEnumSchema = type({
31
+ "+": "reject",
32
+ codecId: "string",
33
+ members: type({
34
+ name: "string",
35
+ value: "string | number | boolean | null | unknown[] | Record<string, unknown>"
36
+ }).array().atLeastLength(1).readonly()
37
+ });
22
38
  const FieldSchema = type({
23
39
  "+": "reject",
24
- type: ScalarFieldTypeSchema.or(ValueObjectFieldTypeSchema).or(UnionFieldTypeSchema),
40
+ type: FieldTypeSchema,
25
41
  "nullable?": "boolean",
26
42
  "many?": "boolean",
27
- "dict?": "boolean"
43
+ "dict?": "boolean",
44
+ "valueSet?": DomainEnumRefSchema
28
45
  }).pipe((field) => ({
29
46
  ...field,
30
47
  nullable: field.nullable ?? false
@@ -304,7 +321,8 @@ function createMongoContractSchema(fragments) {
304
321
  "valueObjects?": type({ "[string]": type({
305
322
  "+": "reject",
306
323
  fields: type({ "[string]": FieldSchema })
307
- }) })
324
+ }) }),
325
+ "enum?": type({ "[string]": ContractEnumSchema })
308
326
  }) }) }),
309
327
  storage: type({
310
328
  "+": "reject",
@@ -569,4 +587,4 @@ function composeMongoEntityKinds(packKinds = []) {
569
587
  //#endregion
570
588
  export { MongoIndex as a, MongoIndexOptionDefaults as c, MongoContractSchema as d, createMongoContractSchema as f, MongoValidator as i, MongoCollationOptions as l, composeMongoEntityKinds as n, MongoCollectionOptions as o, createMongoNamespaceEnvelopeSchema as p, MongoCollection as r, MongoTimeSeriesCollectionOptions as s, collectionEntityKind as t, MongoChangeStreamPreAndPostImagesOptions as u };
571
589
 
572
- //# sourceMappingURL=entity-kinds-C9KNr9IE.mjs.map
590
+ //# sourceMappingURL=entity-kinds-AqGb90Nt.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-kinds-AqGb90Nt.mjs","names":[],"sources":["../src/contract-schema.ts","../src/ir/mongo-change-stream-pre-and-post-images-options.ts","../src/ir/mongo-collation-options.ts","../src/ir/mongo-index-option-defaults.ts","../src/ir/mongo-time-series-collection-options.ts","../src/ir/mongo-collection-options.ts","../src/ir/mongo-index.ts","../src/ir/mongo-validator.ts","../src/ir/mongo-collection.ts","../src/entity-kinds.ts"],"sourcesContent":["import { CrossReferenceSchema } from '@prisma-next/contract/types';\nimport { type Type, type } from 'arktype';\nimport type { MongoJsonObject, MongoJsonPrimitive, MongoJsonValue } from './contract-types';\n\nconst ControlPolicySchema = type(\"'managed' | 'tolerated' | 'external' | 'observed'\");\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 DomainEnumRefSchema = type({\n plane: \"'domain'\",\n namespaceId: 'string',\n entityKind: \"'enum'\",\n entityName: 'string',\n 'spaceId?': 'string',\n});\n\nconst ContractEnumSchema = type({\n '+': 'reject',\n codecId: 'string',\n members: type({\n name: 'string',\n value: 'string | number | boolean | null | unknown[] | Record<string, unknown>',\n })\n .array()\n .atLeastLength(1)\n .readonly(),\n});\n\nconst RawFieldSchema = type({\n '+': 'reject',\n type: FieldTypeSchema,\n 'nullable?': 'boolean',\n 'many?': 'boolean',\n 'dict?': 'boolean',\n 'valueSet?': DomainEnumRefSchema,\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: CrossReferenceSchema,\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 'kind?': \"'mongo-collation-options'\",\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 'kind?': \"'mongo-index-option-defaults'\",\n 'storageEngine?': MongoJsonObjectSchema,\n});\n\nconst TimeSeriesCollectionOptionsSchema = type({\n '+': 'reject',\n 'kind?': \"'mongo-time-series-collection-options'\",\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 'kind?': \"'mongo-clustered-collection-options'\",\n 'name?': 'string',\n key: ClusteredCollectionKeySchema,\n unique: 'boolean',\n});\n\nconst ChangeStreamPreAndPostImagesSchema = type({\n '+': 'reject',\n 'kind?': \"'mongo-change-stream-pre-and-post-images-options'\",\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?': CrossReferenceSchema,\n 'owner?': 'string',\n});\n\nconst WildcardProjectionSchema = type({\n '+': 'reject',\n '[string]': '0 | 1',\n});\n\nconst IndexOptionsSchema = type({\n '+': 'reject',\n 'kind?': \"'mongo-index-options'\",\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 'kind?': \"'mongo-index'\",\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 'kind?': \"'mongo-validator'\",\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 'kind?': \"'mongo-time-series-collection-options'\",\n timeField: 'string',\n 'metaField?': 'string',\n 'granularity?': \"'seconds' | 'minutes' | 'hours'\",\n 'bucketMaxSpanSeconds?': 'number',\n 'bucketRoundingSeconds?': 'number',\n});\n\nconst ClusteredIndexSchema = type({\n '+': 'reject',\n 'name?': 'string',\n});\n\nconst MongoCollectionOptionsSchema = type({\n '+': 'reject',\n 'kind?': \"'mongo-collection-options'\",\n 'capped?': CappedOptionsSchema,\n 'storageEngine?': MongoJsonObjectSchema,\n 'indexOptionDefaults?': IndexOptionDefaultsSchema,\n 'timeseries?': TimeseriesOptionsSchema,\n 'collation?': 'Record<string, unknown>',\n 'expireAfterSeconds?': 'number',\n 'changeStreamPreAndPostImages?': ChangeStreamPreAndPostImagesSchema,\n 'clusteredIndex?': ClusteredIndexSchema,\n});\n\nexport const StorageCollectionSchema = type({\n '+': 'reject',\n 'kind?': \"'mongo-collection'\",\n 'indexes?': MongoStorageIndexSchema.array(),\n 'validator?': MongoStorageValidatorSchema,\n 'options?': MongoCollectionOptionsSchema,\n 'control?': ControlPolicySchema,\n});\n\nfunction collectionEntrySchema(fragments?: ReadonlyMap<string, Type<unknown>>): Type<unknown> {\n if (fragments === undefined || fragments.size === 0) {\n return StorageCollectionSchema;\n }\n return type('unknown').narrow((entry, ctx) => {\n if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) {\n return ctx.mustBe('an object');\n }\n const kind = (entry as { kind?: unknown }).kind;\n if (typeof kind === 'string') {\n const fragment = fragments.get(kind);\n if (fragment !== undefined) {\n const parsed = fragment(entry);\n if (parsed instanceof type.errors) {\n return ctx.reject({ expected: parsed.summary });\n }\n return true;\n }\n }\n const parsed = StorageCollectionSchema(entry);\n if (parsed instanceof type.errors) {\n return ctx.reject({ expected: parsed.summary });\n }\n return true;\n });\n}\n\n/**\n * Builds the per-namespace envelope schema for Mongo storage. Pack\n * contributions are keyed by the descriptor's `discriminator` and\n * validate each entry by matching the entry's `kind` field. Mongo today\n * has no pack contributions; the composition surface exists for symmetry\n * with SQL and as the substrate for future entity kinds.\n *\n * `'kind?': 'string'` because `kind` is non-enumerable on built\n * Mongo namespace IR classes and therefore absent from the wire shape; the\n * type-side narrowing is enforced by the IR class, not by this validator.\n */\nexport function createMongoNamespaceEnvelopeSchema(\n fragments?: ReadonlyMap<string, Type<unknown>>,\n): Type<unknown> {\n return type({\n '+': 'reject',\n id: 'string',\n 'kind?': 'string',\n entries: type({\n 'collection?': type({ '[string]': collectionEntrySchema(fragments) }),\n }),\n }).narrow((ns, ctx) => {\n if (typeof ns !== 'object' || ns === null || Array.isArray(ns)) {\n return ctx.mustBe('an object');\n }\n if (Object.hasOwn(ns, 'collections') || Object.hasOwn(ns, 'tables')) {\n return ctx.reject({\n expected:\n 'namespace must use `entries: { collection? }`; flat `collections` / `tables` keys are no longer accepted',\n });\n }\n return true;\n }) as Type<unknown>;\n}\n\n/**\n * Builds the full Mongo contract schema. The per-namespace entry\n * threading happens through {@link createMongoNamespaceEnvelopeSchema};\n * the rest of the envelope is family-shared.\n */\nexport function createMongoContractSchema(\n fragments?: ReadonlyMap<string, Type<unknown>>,\n): Type<unknown> {\n const namespaceEnvelope = createMongoNamespaceEnvelopeSchema(fragments);\n return type({\n '+': 'reject',\n targetFamily: \"'mongo'\",\n 'schemaVersion?': 'string',\n 'target?': 'string',\n 'storageHash?': 'string',\n 'profileHash?': 'string',\n roots: type({ '[string]': CrossReferenceSchema }),\n 'capabilities?': 'Record<string, unknown>',\n 'extensionPacks?': 'Record<string, unknown>',\n 'meta?': 'Record<string, unknown>',\n 'defaultControlPolicy?': ControlPolicySchema,\n 'sources?': 'Record<string, unknown>',\n '_generated?': 'Record<string, unknown>',\n domain: type({\n namespaces: type({\n '[string]': type({\n models: type({ '[string]': ModelDefinitionSchema }),\n 'valueObjects?': type({\n '[string]': type({ '+': 'reject', fields: type({ '[string]': FieldSchema }) }),\n }),\n 'enum?': type({ '[string]': ContractEnumSchema }),\n }),\n }),\n }),\n storage: type({\n '+': 'reject',\n namespaces: type({ '[string]': namespaceEnvelope }),\n 'storageHash?': 'string',\n }),\n }) as Type<unknown>;\n}\n\nexport const MongoContractSchema = createMongoContractSchema();\n\nexport {\n CollationSchema,\n CollectionOptionsSchema,\n IndexFieldsSchema,\n IndexOptionsSchema,\n IndexSchema,\n MongoIndexKeySchema,\n MongoStorageIndexSchema,\n NumberRecordSchema,\n WildcardProjectionSchema,\n};\n","import { freezeNode, IRNodeBase } from '@prisma-next/framework-components/ir';\n\nexport interface MongoChangeStreamPreAndPostImagesOptionsInput {\n readonly enabled: boolean;\n}\n\n/**\n * Change-stream pre-and-post-images collection option. Lifted from a\n * `type =` data shape to an AST class extending `IRNodeBase` per\n * FR18. Single-field shape; the class exists for AST-pattern\n * consistency (every nested data shape inside `MongoCollectionOptions`\n * is an AST node so the verifier can walk uniformly).\n */\nexport class MongoChangeStreamPreAndPostImagesOptions extends IRNodeBase {\n readonly kind = 'mongo-change-stream-pre-and-post-images-options' as const;\n readonly enabled: boolean;\n\n constructor(options: MongoChangeStreamPreAndPostImagesOptionsInput) {\n super();\n this.enabled = options.enabled;\n freezeNode(this);\n }\n}\n","import { freezeNode, IRNodeBase } from '@prisma-next/framework-components/ir';\n\nexport type MongoCollationCaseFirst = 'off' | 'upper' | 'lower';\nexport type MongoCollationStrength = 1 | 2 | 3 | 4 | 5;\nexport type MongoCollationAlternate = 'non-ignorable' | 'shifted';\nexport type MongoCollationMaxVariable = 'punct' | 'space';\n\n/**\n * Authoring / hydration input shape for {@link MongoCollationOptions}. Carries\n * the canonical data without the IR-class `kind` discriminator; the class\n * fabricates `kind` so the authoring DSL and the SPI hydration walker can\n * pass plain data literals through the constructor without forcing every\n * call site to spell out `kind: 'mongo-collation-options'`.\n */\nexport interface MongoCollationOptionsInput {\n readonly locale: string;\n readonly caseLevel?: boolean;\n readonly caseFirst?: MongoCollationCaseFirst;\n readonly strength?: MongoCollationStrength;\n readonly numericOrdering?: boolean;\n readonly alternate?: MongoCollationAlternate;\n readonly maxVariable?: MongoCollationMaxVariable;\n readonly backwards?: boolean;\n readonly normalization?: boolean;\n}\n\n/**\n * Mongo Contract IR leaf for collection / index collation options.\n *\n * Lifted from a `type =` data shape to an AST class extending\n * `IRNodeBase` per FR18 (\"Mongo's Contract IR is fully unified under\n * the AST-class pattern, layered family / target\"). Single concrete class\n * (no target subclass): collation options carry no target-specific\n * variation at this layer — both Atlas and self-hosted Mongo consume the\n * same option vocabulary.\n *\n * Undefined optional fields are not assigned, so `JSON.stringify` omits\n * them from the canonical JSON output (matches the pre-lift data shape's\n * round-trip behaviour, modulo the new `kind` discriminator).\n */\nexport class MongoCollationOptions extends IRNodeBase {\n readonly kind = 'mongo-collation-options' as const;\n readonly locale: string;\n declare readonly caseLevel?: boolean;\n declare readonly caseFirst?: MongoCollationCaseFirst;\n declare readonly strength?: MongoCollationStrength;\n declare readonly numericOrdering?: boolean;\n declare readonly alternate?: MongoCollationAlternate;\n declare readonly maxVariable?: MongoCollationMaxVariable;\n declare readonly backwards?: boolean;\n declare readonly normalization?: boolean;\n\n constructor(options: MongoCollationOptionsInput) {\n super();\n this.locale = options.locale;\n if (options.caseLevel !== undefined) this.caseLevel = options.caseLevel;\n if (options.caseFirst !== undefined) this.caseFirst = options.caseFirst;\n if (options.strength !== undefined) this.strength = options.strength;\n if (options.numericOrdering !== undefined) this.numericOrdering = options.numericOrdering;\n if (options.alternate !== undefined) this.alternate = options.alternate;\n if (options.maxVariable !== undefined) this.maxVariable = options.maxVariable;\n if (options.backwards !== undefined) this.backwards = options.backwards;\n if (options.normalization !== undefined) this.normalization = options.normalization;\n freezeNode(this);\n }\n}\n","import { freezeNode, IRNodeBase } from '@prisma-next/framework-components/ir';\nimport type { MongoJsonObject } from '../contract-types';\n\nexport interface MongoIndexOptionDefaultsInput {\n readonly storageEngine?: MongoJsonObject;\n}\n\n/**\n * Collection-level default index options (the `indexOptionDefaults`\n * collection-creation field on Mongo's `createCollection`). Lifted from\n * a `type =` data shape to an AST class extending `IRNodeBase` per\n * FR18 (Mongo Contract IR fully unified under the AST-class pattern).\n *\n * Carries `storageEngine` only — the underlying MongoDB option set is\n * intentionally narrow at this layer; per-engine richer option vocabularies\n * are out of scope for this project.\n */\nexport class MongoIndexOptionDefaults extends IRNodeBase {\n readonly kind = 'mongo-index-option-defaults' as const;\n declare readonly storageEngine?: MongoJsonObject;\n\n constructor(options: MongoIndexOptionDefaultsInput = {}) {\n super();\n if (options.storageEngine !== undefined) this.storageEngine = options.storageEngine;\n freezeNode(this);\n }\n}\n","import { freezeNode, IRNodeBase } from '@prisma-next/framework-components/ir';\n\nexport type MongoTimeSeriesGranularity = 'seconds' | 'minutes' | 'hours';\n\nexport interface MongoTimeSeriesCollectionOptionsInput {\n readonly timeField: string;\n readonly metaField?: string;\n readonly granularity?: MongoTimeSeriesGranularity;\n readonly bucketMaxSpanSeconds?: number;\n readonly bucketRoundingSeconds?: number;\n}\n\n/**\n * Time-series collection options. Lifted from a `type =` data shape to\n * an AST class extending `IRNodeBase` per FR18.\n *\n * MongoDB requires `timeField` for any time-series collection; the\n * constructor enforces presence by type signature (`timeField: string`\n * is required on the input).\n */\nexport class MongoTimeSeriesCollectionOptions extends IRNodeBase {\n readonly kind = 'mongo-time-series-collection-options' as const;\n readonly timeField: string;\n declare readonly metaField?: string;\n declare readonly granularity?: MongoTimeSeriesGranularity;\n declare readonly bucketMaxSpanSeconds?: number;\n declare readonly bucketRoundingSeconds?: number;\n\n constructor(options: MongoTimeSeriesCollectionOptionsInput) {\n super();\n this.timeField = options.timeField;\n if (options.metaField !== undefined) this.metaField = options.metaField;\n if (options.granularity !== undefined) this.granularity = options.granularity;\n if (options.bucketMaxSpanSeconds !== undefined)\n this.bucketMaxSpanSeconds = options.bucketMaxSpanSeconds;\n if (options.bucketRoundingSeconds !== undefined)\n this.bucketRoundingSeconds = options.bucketRoundingSeconds;\n freezeNode(this);\n }\n}\n","import { freezeNode, IRNodeBase } from '@prisma-next/framework-components/ir';\nimport type { MongoJsonObject } from '../contract-types';\nimport {\n MongoChangeStreamPreAndPostImagesOptions,\n type MongoChangeStreamPreAndPostImagesOptionsInput,\n} from './mongo-change-stream-pre-and-post-images-options';\nimport type {\n MongoClusteredCollectionOptions,\n MongoClusteredCollectionOptionsInput,\n} from './mongo-clustered-collection-options';\nimport { MongoCollationOptions, type MongoCollationOptionsInput } from './mongo-collation-options';\nimport {\n MongoIndexOptionDefaults,\n type MongoIndexOptionDefaultsInput,\n} from './mongo-index-option-defaults';\nimport {\n MongoTimeSeriesCollectionOptions,\n type MongoTimeSeriesCollectionOptionsInput,\n} from './mongo-time-series-collection-options';\n\n/**\n * Storage-shape sub-shape: only `name` is persisted on the storage\n * `clusteredIndex` field. The richer authoring vocabulary\n * (`MongoClusteredCollectionOptions.key`, `…unique`) is intentionally\n * not round-tripped through the on-disk JSON envelope — those fields\n * are application-side configuration that informs collection creation\n * but does not survive into the persisted collection options.\n */\nexport interface MongoStorageClusteredIndexShape {\n readonly name?: string;\n}\n\n/**\n * Storage-shape sub-shape: `capped` collections persist `size` (required)\n * and optionally `max` document count. The authoring DSL surface uses a\n * flat `capped: boolean` + separate `size` / `max` fields; builders\n * translate that authoring vocabulary into this nested storage form\n * before constructing {@link MongoCollectionOptions}.\n */\nexport interface MongoStorageCappedShape {\n readonly size: number;\n readonly max?: number;\n}\n\n/**\n * Hydration / construction input shape for {@link MongoCollectionOptions}.\n * Mirrors the on-disk storage JSON envelope exactly (nested `capped`,\n * `clusteredIndex`, …) so the family-base serializer's hydration walker\n * can hand an arktype-validated object literal straight to `new`.\n * Nested IR-class fields may be supplied as either plain data literals\n * (typical for JSON-derived input) or already-constructed class\n * instances (typical when re-wrapping during a partial walk).\n */\nexport interface MongoCollectionOptionsInput {\n readonly capped?: MongoStorageCappedShape;\n readonly storageEngine?: MongoJsonObject;\n readonly indexOptionDefaults?: MongoIndexOptionDefaults | MongoIndexOptionDefaultsInput;\n readonly collation?: MongoCollationOptions | MongoCollationOptionsInput;\n readonly timeseries?: MongoTimeSeriesCollectionOptions | MongoTimeSeriesCollectionOptionsInput;\n readonly clusteredIndex?: MongoStorageClusteredIndexShape;\n readonly expireAfterSeconds?: number;\n readonly changeStreamPreAndPostImages?:\n | MongoChangeStreamPreAndPostImagesOptions\n | MongoChangeStreamPreAndPostImagesOptionsInput;\n}\n\n/**\n * Authoring-side flat vocabulary accepted by the contract-ts builder\n * DSL (e.g. `capped: boolean` + separate `size` / `max` scalars). The\n * builder translates this surface into a {@link MongoCollectionOptionsInput}\n * before constructing {@link MongoCollectionOptions}. Kept as a\n * standalone type so authoring DSL ergonomics do not leak into the\n * storage IR construction contract.\n */\nexport interface MongoCollectionOptionsAuthoringInput {\n readonly capped?: boolean;\n readonly size?: number;\n readonly max?: number;\n readonly storageEngine?: MongoJsonObject;\n readonly indexOptionDefaults?: MongoIndexOptionDefaults | MongoIndexOptionDefaultsInput;\n readonly collation?: MongoCollationOptions | MongoCollationOptionsInput;\n readonly timeseries?: MongoTimeSeriesCollectionOptions | MongoTimeSeriesCollectionOptionsInput;\n readonly clusteredIndex?: MongoClusteredCollectionOptions | MongoClusteredCollectionOptionsInput;\n readonly expireAfterSeconds?: number;\n readonly changeStreamPreAndPostImages?:\n | MongoChangeStreamPreAndPostImagesOptions\n | MongoChangeStreamPreAndPostImagesOptionsInput;\n}\n\n/**\n * Mongo Contract IR node for collection-level creation options (the\n * second argument to `db.createCollection(name, options)`). Lifted from\n * the pre-M2R2 `MongoStorageCollectionOptions` storage interface to a\n * class extending `IRNodeBase` per FR18.\n *\n * Single concrete family-layer class (no target subclass). The\n * constructor accepts the storage JSON envelope shape ({@link\n * MongoCollectionOptionsInput}) so the family-base hydration walker\n * can pass arktype-validated objects directly to `new`. Authoring\n * vocabulary is translated to this shape upstream in the contract-ts\n * builder.\n *\n * Nested IR sub-shapes (collation, timeseries, …) are normalised to\n * their respective IR class instances inside the constructor so\n * downstream walks see a uniform AST regardless of whether the input\n * was a JSON literal or an already-constructed class.\n */\nexport class MongoCollectionOptions extends IRNodeBase {\n readonly kind = 'mongo-collection-options' as const;\n declare readonly capped?: MongoStorageCappedShape;\n declare readonly storageEngine?: MongoJsonObject;\n declare readonly indexOptionDefaults?: MongoIndexOptionDefaults;\n declare readonly collation?: MongoCollationOptions;\n declare readonly timeseries?: MongoTimeSeriesCollectionOptions;\n declare readonly clusteredIndex?: MongoStorageClusteredIndexShape;\n declare readonly expireAfterSeconds?: number;\n declare readonly changeStreamPreAndPostImages?: MongoChangeStreamPreAndPostImagesOptions;\n\n constructor(input: MongoCollectionOptionsInput = {}) {\n super();\n if (input.capped !== undefined) {\n this.capped = {\n size: input.capped.size,\n ...(input.capped.max != null && { max: input.capped.max }),\n };\n }\n if (input.storageEngine !== undefined) this.storageEngine = input.storageEngine;\n if (input.indexOptionDefaults !== undefined) {\n this.indexOptionDefaults =\n input.indexOptionDefaults instanceof MongoIndexOptionDefaults\n ? input.indexOptionDefaults\n : new MongoIndexOptionDefaults(input.indexOptionDefaults);\n }\n if (input.collation !== undefined) {\n this.collation =\n input.collation instanceof MongoCollationOptions\n ? input.collation\n : new MongoCollationOptions(input.collation);\n }\n if (input.timeseries !== undefined) {\n this.timeseries =\n input.timeseries instanceof MongoTimeSeriesCollectionOptions\n ? input.timeseries\n : new MongoTimeSeriesCollectionOptions(input.timeseries);\n }\n if (input.clusteredIndex !== undefined) {\n this.clusteredIndex =\n input.clusteredIndex.name !== undefined ? { name: input.clusteredIndex.name } : {};\n }\n if (input.expireAfterSeconds !== undefined) this.expireAfterSeconds = input.expireAfterSeconds;\n if (input.changeStreamPreAndPostImages !== undefined) {\n this.changeStreamPreAndPostImages =\n input.changeStreamPreAndPostImages instanceof MongoChangeStreamPreAndPostImagesOptions\n ? input.changeStreamPreAndPostImages\n : new MongoChangeStreamPreAndPostImagesOptions(input.changeStreamPreAndPostImages);\n }\n freezeNode(this);\n }\n}\n","import { freezeNode, IRNodeBase } from '@prisma-next/framework-components/ir';\nimport type { CollationOptions } from '@prisma-next/mongo-value/mongodb-types';\nimport type { MongoIndexKey } from '../contract-types';\n\n/**\n * Hydration / construction input shape for {@link MongoIndex}. Mirrors\n * the on-disk storage JSON envelope exactly so the family-base\n * serializer's hydration walker can hand an arktype-validated literal\n * straight to `new`.\n */\nexport interface MongoIndexInput {\n readonly keys: ReadonlyArray<MongoIndexKey>;\n readonly unique?: boolean;\n readonly sparse?: boolean;\n readonly expireAfterSeconds?: number;\n readonly partialFilterExpression?: Record<string, unknown>;\n readonly wildcardProjection?: Record<string, 0 | 1>;\n readonly collation?: CollationOptions;\n readonly weights?: Record<string, number>;\n readonly default_language?: string;\n readonly language_override?: string;\n}\n\n/**\n * Mongo Contract IR node for a single collection index entry (one\n * element of `MongoCollection.indexes`). Lifted from the\n * pre-M2R2 `MongoStorageIndex` storage interface to a class extending\n * `IRNodeBase` per FR18.\n *\n * Single concrete family-layer class (no target subclass). The spec's\n * `MongoTargetIndex extends MongoIndex` pattern remains additive — a\n * future Mongo target with target-specific index extensions is free to\n * subclass; for the single Mongo target shipped today a concrete\n * family-layer class is enough and avoids a target-import layering\n * violation from the contract-ts builder.\n */\nexport class MongoIndex extends IRNodeBase {\n readonly kind = 'mongo-index' as const;\n readonly keys: ReadonlyArray<MongoIndexKey>;\n declare readonly unique?: boolean;\n declare readonly sparse?: boolean;\n declare readonly expireAfterSeconds?: number;\n declare readonly partialFilterExpression?: Record<string, unknown>;\n declare readonly wildcardProjection?: Record<string, 0 | 1>;\n declare readonly collation?: CollationOptions;\n declare readonly weights?: Record<string, number>;\n declare readonly default_language?: string;\n declare readonly language_override?: string;\n\n constructor(input: MongoIndexInput) {\n super();\n this.keys = input.keys;\n if (input.unique !== undefined) this.unique = input.unique;\n if (input.sparse !== undefined) this.sparse = input.sparse;\n if (input.expireAfterSeconds !== undefined) this.expireAfterSeconds = input.expireAfterSeconds;\n if (input.partialFilterExpression !== undefined)\n this.partialFilterExpression = input.partialFilterExpression;\n if (input.wildcardProjection !== undefined) this.wildcardProjection = input.wildcardProjection;\n if (input.collation !== undefined) this.collation = input.collation;\n if (input.weights !== undefined) this.weights = input.weights;\n if (input.default_language !== undefined) this.default_language = input.default_language;\n if (input.language_override !== undefined) this.language_override = input.language_override;\n freezeNode(this);\n }\n}\n","import { freezeNode, IRNodeBase } from '@prisma-next/framework-components/ir';\n\nexport type MongoValidatorValidationLevel = 'strict' | 'moderate';\nexport type MongoValidatorValidationAction = 'error' | 'warn';\n\nexport interface MongoValidatorInput {\n readonly jsonSchema: Record<string, unknown>;\n readonly validationLevel: MongoValidatorValidationLevel;\n readonly validationAction: MongoValidatorValidationAction;\n}\n\n/**\n * Mongo Contract IR node for collection-level document validators (the\n * `validator` field on Mongo's `createCollection`). Lifted from the\n * pre-M2R2 `MongoStorageValidator` storage interface to a class extending\n * `IRNodeBase` per FR18.\n *\n * Concrete at the family layer (no target subclass). The spec's\n * abstract-family + target-concrete pattern (`MongoTargetValidator\n * extends MongoValidator`) becomes meaningful when a second Mongo target\n * introduces target-specific validator extensions (Atlas search rules,\n * DocumentDB-specific levels, …); for the single Mongo target shipped\n * today, a concrete family-layer class lets the PSL JSON-Schema deriver\n * and the contract-ts builder construct instances directly without a\n * target-import layering violation. Target subclassing remains additive\n * — a future `MongoTargetValidator extends MongoValidator` is an\n * additive change, not a breaking one.\n */\nexport class MongoValidator extends IRNodeBase {\n readonly kind = 'mongo-validator' as const;\n readonly jsonSchema: Record<string, unknown>;\n readonly validationLevel: MongoValidatorValidationLevel;\n readonly validationAction: MongoValidatorValidationAction;\n\n constructor(input: MongoValidatorInput) {\n super();\n this.jsonSchema = input.jsonSchema;\n this.validationLevel = input.validationLevel;\n this.validationAction = input.validationAction;\n freezeNode(this);\n }\n}\n","import type { ControlPolicy } from '@prisma-next/contract/types';\nimport { freezeNode, IRNodeBase } from '@prisma-next/framework-components/ir';\nimport {\n MongoCollectionOptions,\n type MongoCollectionOptionsInput,\n} from './mongo-collection-options';\nimport { MongoIndex, type MongoIndexInput } from './mongo-index';\nimport { MongoValidator, type MongoValidatorInput } from './mongo-validator';\n\n/**\n * Hydration / construction input shape for {@link MongoCollection}.\n * Mirrors the on-disk storage JSON envelope exactly (the value held at\n * `contract.storage.namespaces[<namespaceId>].entries.collection[<name>]`) so the family-base\n * serializer's hydration walker can hand an arktype-validated literal\n * straight to `new`. Nested IR-class fields may be supplied as either\n * plain data literals (typical for JSON-derived input) or\n * already-constructed class instances.\n */\nexport interface MongoCollectionInput {\n readonly indexes?: ReadonlyArray<MongoIndex | MongoIndexInput>;\n readonly validator?: MongoValidator | MongoValidatorInput;\n readonly options?: MongoCollectionOptions | MongoCollectionOptionsInput;\n readonly control?: ControlPolicy;\n}\n\n/**\n * Mongo Contract IR node for a single collection entry in a namespace's\n * `collections` map. Lifted from the pre-M2R2\n * `MongoStorageCollection` storage interface to a class extending\n * `IRNodeBase` per FR18.\n *\n * Concrete at the family layer (no target subclass). The spec's\n * `MongoTargetCollection extends MongoCollection` pattern remains\n * additive: a future Mongo target with target-specific extensions is\n * free to subclass without breaking the family-layer construction\n * sites.\n *\n * The unprefixed name `MongoCollection` is now the contract IR class.\n * Note that `@prisma-next/mongo-orm` also exports a (different)\n * `MongoCollection<TContract, ModelName>` generic for the user-facing\n * ORM query builder; the two live in separate packages and are\n * resolved by import path. A source file that needs both should alias\n * one (e.g. `import { MongoCollection as MongoContractCollection }\n * from '@prisma-next/mongo-contract'`).\n */\nexport class MongoCollection extends IRNodeBase {\n readonly kind = 'mongo-collection' as const;\n declare readonly indexes?: ReadonlyArray<MongoIndex>;\n declare readonly validator?: MongoValidator;\n declare readonly options?: MongoCollectionOptions;\n declare readonly control?: ControlPolicy;\n\n constructor(input: MongoCollectionInput = {}) {\n super();\n if (input.indexes !== undefined) {\n this.indexes = input.indexes.map((idx) =>\n idx instanceof MongoIndex ? idx : new MongoIndex(idx),\n );\n }\n if (input.validator !== undefined) {\n this.validator =\n input.validator instanceof MongoValidator\n ? input.validator\n : new MongoValidator(input.validator);\n }\n if (input.options !== undefined) {\n this.options =\n input.options instanceof MongoCollectionOptions\n ? input.options\n : new MongoCollectionOptions(input.options);\n }\n if (input.control !== undefined) this.control = input.control;\n freezeNode(this);\n }\n}\n","import type {\n AnyEntityKindDescriptor,\n EntityKindDescriptor,\n} from '@prisma-next/framework-components/ir';\nimport { StorageCollectionSchema } from './contract-schema';\nimport { MongoCollection, type MongoCollectionInput } from './ir/mongo-collection';\n\nexport const collectionEntityKind: EntityKindDescriptor<MongoCollectionInput, MongoCollection> = {\n kind: 'collection',\n schema: StorageCollectionSchema,\n construct: (input) => new MongoCollection(input),\n};\n\n/**\n * Assembles the `kind → descriptor` registry for Mongo namespaces: the built-in\n * `collection` kind plus any target `packKinds`. This builds the lookup table —\n * it does not touch contract data. `hydrateNamespaceEntities` later consumes\n * this registry to turn a namespace's raw entries into IR instances. Throws on\n * a duplicate kind.\n */\nexport function composeMongoEntityKinds(\n packKinds: readonly AnyEntityKindDescriptor[] = [],\n): ReadonlyMap<string, AnyEntityKindDescriptor> {\n const kinds = new Map<string, AnyEntityKindDescriptor>([['collection', collectionEntityKind]]);\n for (const descriptor of packKinds) {\n if (kinds.has(descriptor.kind)) {\n throw new Error(\n `composeMongoEntityKinds: duplicate entity kind \"${descriptor.kind}\" — each kind may be registered only once`,\n );\n }\n kinds.set(descriptor.kind, descriptor);\n }\n return kinds;\n}\n"],"mappings":";;;;AAIA,MAAM,sBAAsB,KAAK,mDAAmD;AAEpF,MAAM,wBAAwB,KAAK;CACjC,KAAK;CACL,MAAM;CACN,SAAS;CACT,eAAe;AACjB,CAAC;AAED,MAAM,6BAA6B,KAAK;CACtC,KAAK;CACL,MAAM;CACN,MAAM;AACR,CAAC;AAED,MAAM,uBAAuB,KAAK;CAChC,KAAK;CACL,MAAM;CACN,SAAS,sBAAsB,GAAG,0BAA0B,CAAC,CAAC,MAAM;AACtE,CAAC;AAED,MAAM,kBAAkB,sBAAsB,GAAG,0BAA0B,CAAC,CAAC,GAC3E,oBACF;AAEA,MAAM,sBAAsB,KAAK;CAC/B,OAAO;CACP,aAAa;CACb,YAAY;CACZ,YAAY;CACZ,YAAY;AACd,CAAC;AAED,MAAM,qBAAqB,KAAK;CAC9B,KAAK;CACL,SAAS;CACT,SAAS,KAAK;EACZ,MAAM;EACN,OAAO;CACT,CAAC,CAAC,CACC,MAAM,CAAC,CACP,cAAc,CAAC,CAAC,CAChB,SAAS;AACd,CAAC;AAWD,MAAM,cATiB,KAAK;CAC1B,KAAK;CACL,MAAM;CACN,aAAa;CACb,SAAS;CACT,SAAS;CACT,aAAa;AACf,CAEiC,CAAC,CAAC,MAAM,WAAW;CAClD,GAAG;CACH,UAAU,MAAM,YAAY;AAC9B,EAAE;AAQF,MAAM,iBAAiB,KAAK;CAC1B,KAAK;CACL,IAAI;CACJ,aAAa;CACb,OAVuB,KAAK;EAC5B,KAAK;EACL,aAAa;EACb,cAAc;CAChB,CAMwB;AACxB,CAAC;AAED,MAAM,6BAA6B,KAAK;CACtC,KAAK;CACL,OAAO;AACT,CAAC;AAED,MAAM,2BAA2B,KAC9B,QAA4B,CAAC,CAC7B,KAAK,kCAAkC;AAE1C,SAAS,kBAAkB,OAAkD;CAC3E,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GACpE,OAAO;CAET,MAAM,YAAY,OAAO,eAAe,KAAK;CAC7C,OAAO,cAAc,OAAO,aAAa,cAAc;AACzD;AAEA,SAAS,oBAAoB,OAAe,MAAuB,OAA+B;CAChG,IAAI,KAAK,IAAI,KAAK,GAChB,OAAO;CAGT,KAAK,IAAI,KAAK;CACd,MAAM,SAAS,MAAM;CACrB,KAAK,OAAO,KAAK;CACjB,OAAO;AACT;AAEA,SAAS,kBAAkB,OAAgB,MAAiD;CAC1F,OACE,kBAAkB,KAAK,KACvB,oBAAoB,OAAO,YACzB,OAAO,OAAO,KAAK,CAAC,CAAC,OAAO,UAAU,iBAAiB,OAAO,IAAI,CAAC,CACrE;AAEJ;AAEA,SAAS,iBAAiB,OAAgB,uBAAO,IAAI,QAAgB,GAA4B;CAC/F,IAAI,yBAAyB,OAAO,KAAK,GACvC,OAAO;CAET,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,oBAAoB,OAAO,YAChC,MAAM,OAAO,UAAU,iBAAiB,OAAO,IAAI,CAAC,CACtD;CAEF,OAAO,kBAAkB,OAAO,IAAI;AACtC;AAEA,MAAM,uBAAuB,KAAK,SAAS,CAAC,CAAC,QAAQ,OAAO,QAC1D,iBAAiB,KAAK,IAAI,OAAO,IAAI,OAAO,oCAAoC,CAClF;AAEA,MAAM,wBAAwB,KAAK,EAAE,YAAY,UAAU,CAAC,CAAC,CAAC,QAAQ,OAAO,QAC3E,kBAAkB,KAAK,KACvB,OAAO,OAAO,KAAK,CAAC,CAAC,OAAO,UAAU,qBAAqB,OAAO,KAAK,CAAC,IACpE,OACA,IAAI,OAAO,2CAA2C,CAC5D;AAEA,MAAM,qBAAqB,KAAK,EAAE,YAAY,SAAS,CAAC;AAExD,MAAM,oBAAoB,KAAK;CAC7B,KAAK;CACL,YAAY;AACd,CAAC,CAAC,CAAC,QAAQ,QAAQ,QACjB,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,IAAI,OAAO,IAAI,OAAO,4CAA4C,CACjG;AAEA,MAAM,kBAAkB,KAAK;CAC3B,KAAK;CACL,SAAS;CACT,QAAQ;CACR,cAAc;CACd,cAAc;CACd,aAAa;CACb,oBAAoB;CACpB,cAAc;CACd,gBAAgB;CAChB,cAAc;CACd,kBAAkB;AACpB,CAAC;AAED,MAAM,4BAA4B,KAAK;CACrC,KAAK;CACL,SAAS;CACT,kBAAkB;AACpB,CAAC;AAED,MAAM,oCAAoC,KAAK;CAC7C,KAAK;CACL,SAAS;CACT,WAAW;CACX,cAAc;CACd,gBAAgB;CAChB,yBAAyB;CACzB,0BAA0B;AAC5B,CAAC;AAWD,MAAM,mCAAmC,KAAK;CAC5C,KAAK;CACL,SAAS;CACT,SAAS;CACT,KAbmC,KAAK;EACxC,KAAK;EACL,YAAY;CACd,CAAC,CAAC,CAAC,QAAQ,KAAK,QACd,OAAO,KAAK,GAAG,CAAC,CAAC,SAAS,IACtB,OACA,IAAI,OAAO,mDAAmD,CAOlC;CAChC,QAAQ;AACV,CAAC;AAED,MAAM,qCAAqC,KAAK;CAC9C,KAAK;CACL,SAAS;CACT,SAAS;AACX,CAAC;AAE+B,KAAK;CACnC,KAAK;CACL,WAAW;CACX,SAAS;CACT,QAAQ;CACR,kBAAkB;CAClB,wBAAwB;CACxB,cAAc;CACd,eAAe;CACf,mBAAmB;CACnB,uBAAuB;CACvB,iCAAiC;AACnC,CAAC;AAED,MAAM,qBAAqB,KAAK;CAC9B,KAAK;CACL,eAAe;CACf,cAAc,KAAK,EAAE,YAAY,2BAA2B,CAAC;AAC/D,CAAC;AAED,MAAM,sBAAsB,KAAK;CAC/B,KAAK;CACL,OAAO;AACT,CAAC;AAED,MAAM,qBAAqB,KAAK;CAC9B,KAAK;CACL,OAAO;AACT,CAAC;AAED,MAAM,wBAAwB,KAAK;CACjC,KAAK;CACL,QAAQ,KAAK,EAAE,YAAY,YAAY,CAAC;CACxC,SAAS;CACT,cAAc,KAAK,EAAE,YAAY,eAAe,CAAC;CACjD,kBAAkB;CAClB,aAAa,KAAK,EAAE,YAAY,mBAAmB,CAAC;CACpD,SAAS;CACT,UAAU;AACZ,CAAC;AA6BmB,KAAK;CACvB,KAAK;CACL,QAAQ;CACR,YAzByB,KAAK;EAC9B,KAAK;EACL,SAAS;EACT,WAAW;EACX,SAAS;EACT,4BAA4B;EAC5B,WAAW;EACX,uBAAuB;EACvB,YAAY;EACZ,qBAAqB;EACrB,sBAAsB;EACtB,qBAAqB;EACrB,yBAAyB;EACzB,SAAS;EACT,QAAQ;EACR,QAAQ;EACR,eAAe;EACf,WAAW;EACX,cAAc;EACd,uBAxB+B,KAAK;GACpC,KAAK;GACL,YAAY;EACd,CAqByB;CACzB,CAKc;AACd,CAAC;AAQD,MAAM,0BAA0B,KAAK;CACnC,KAAK;CACL,SAAS;CACT,MAT0B,KAAK;EAC/B,KAAK;EACL,OAAO;EACP,WAAW;CACb,CAKQ,CAAA,CAAoB,MAAM,CAAC,CAAC,cAAc,CAAC;CACjD,WAAW;CACX,WAAW;CACX,uBAAuB;CACvB,4BAA4B;CAC5B,uBAAuB;CACvB,cAAc;CACd,YAAY;CACZ,qBAAqB;CACrB,sBAAsB;AACxB,CAAC;AAED,MAAM,8BAA8B,KAAK;CACvC,KAAK;CACL,SAAS;CACT,YAAY;CACZ,iBAAiB;CACjB,kBAAkB;AACpB,CAAC;AAuBD,MAAM,+BAA+B,KAAK;CACxC,KAAK;CACL,SAAS;CACT,WAxB0B,KAAK;EAC/B,KAAK;EACL,MAAM;EACN,QAAQ;CACV,CAoB+B;CAC7B,kBAAkB;CAClB,wBAAwB;CACxB,eArB8B,KAAK;EACnC,KAAK;EACL,SAAS;EACT,WAAW;EACX,cAAc;EACd,gBAAgB;EAChB,yBAAyB;EACzB,0BAA0B;CAC5B,CAauC;CACrC,cAAc;CACd,uBAAuB;CACvB,iCAAiC;CACjC,mBAf2B,KAAK;EAChC,KAAK;EACL,SAAS;CACX,CAYwC;AACxC,CAAC;AAED,MAAa,0BAA0B,KAAK;CAC1C,KAAK;CACL,SAAS;CACT,YAAY,wBAAwB,MAAM;CAC1C,cAAc;CACd,YAAY;CACZ,YAAY;AACd,CAAC;AAED,SAAS,sBAAsB,WAA+D;CAC5F,IAAI,cAAc,KAAA,KAAa,UAAU,SAAS,GAChD,OAAO;CAET,OAAO,KAAK,SAAS,CAAC,CAAC,QAAQ,OAAO,QAAQ;EAC5C,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GACpE,OAAO,IAAI,OAAO,WAAW;EAE/B,MAAM,OAAQ,MAA6B;EAC3C,IAAI,OAAO,SAAS,UAAU;GAC5B,MAAM,WAAW,UAAU,IAAI,IAAI;GACnC,IAAI,aAAa,KAAA,GAAW;IAC1B,MAAM,SAAS,SAAS,KAAK;IAC7B,IAAI,kBAAkB,KAAK,QACzB,OAAO,IAAI,OAAO,EAAE,UAAU,OAAO,QAAQ,CAAC;IAEhD,OAAO;GACT;EACF;EACA,MAAM,SAAS,wBAAwB,KAAK;EAC5C,IAAI,kBAAkB,KAAK,QACzB,OAAO,IAAI,OAAO,EAAE,UAAU,OAAO,QAAQ,CAAC;EAEhD,OAAO;CACT,CAAC;AACH;;;;;;;;;;;;AAaA,SAAgB,mCACd,WACe;CACf,OAAO,KAAK;EACV,KAAK;EACL,IAAI;EACJ,SAAS;EACT,SAAS,KAAK,EACZ,eAAe,KAAK,EAAE,YAAY,sBAAsB,SAAS,EAAE,CAAC,EACtE,CAAC;CACH,CAAC,CAAC,CAAC,QAAQ,IAAI,QAAQ;EACrB,IAAI,OAAO,OAAO,YAAY,OAAO,QAAQ,MAAM,QAAQ,EAAE,GAC3D,OAAO,IAAI,OAAO,WAAW;EAE/B,IAAI,OAAO,OAAO,IAAI,aAAa,KAAK,OAAO,OAAO,IAAI,QAAQ,GAChE,OAAO,IAAI,OAAO,EAChB,UACE,2GACJ,CAAC;EAEH,OAAO;CACT,CAAC;AACH;;;;;;AAOA,SAAgB,0BACd,WACe;CACf,MAAM,oBAAoB,mCAAmC,SAAS;CACtE,OAAO,KAAK;EACV,KAAK;EACL,cAAc;EACd,kBAAkB;EAClB,WAAW;EACX,gBAAgB;EAChB,gBAAgB;EAChB,OAAO,KAAK,EAAE,YAAY,qBAAqB,CAAC;EAChD,iBAAiB;EACjB,mBAAmB;EACnB,SAAS;EACT,yBAAyB;EACzB,YAAY;EACZ,eAAe;EACf,QAAQ,KAAK,EACX,YAAY,KAAK,EACf,YAAY,KAAK;GACf,QAAQ,KAAK,EAAE,YAAY,sBAAsB,CAAC;GAClD,iBAAiB,KAAK,EACpB,YAAY,KAAK;IAAE,KAAK;IAAU,QAAQ,KAAK,EAAE,YAAY,YAAY,CAAC;GAAE,CAAC,EAC/E,CAAC;GACD,SAAS,KAAK,EAAE,YAAY,mBAAmB,CAAC;EAClD,CAAC,EACH,CAAC,EACH,CAAC;EACD,SAAS,KAAK;GACZ,KAAK;GACL,YAAY,KAAK,EAAE,YAAY,kBAAkB,CAAC;GAClD,gBAAgB;EAClB,CAAC;CACH,CAAC;AACH;AAEA,MAAa,sBAAsB,0BAA0B;;;;;;;;;;ACnb7D,IAAa,2CAAb,cAA8D,WAAW;CACvE,OAAgB;CAChB;CAEA,YAAY,SAAwD;EAClE,MAAM;EACN,KAAK,UAAU,QAAQ;EACvB,WAAW,IAAI;CACjB;AACF;;;;;;;;;;;;;;;;;ACkBA,IAAa,wBAAb,cAA2C,WAAW;CACpD,OAAgB;CAChB;CAUA,YAAY,SAAqC;EAC/C,MAAM;EACN,KAAK,SAAS,QAAQ;EACtB,IAAI,QAAQ,cAAc,KAAA,GAAW,KAAK,YAAY,QAAQ;EAC9D,IAAI,QAAQ,cAAc,KAAA,GAAW,KAAK,YAAY,QAAQ;EAC9D,IAAI,QAAQ,aAAa,KAAA,GAAW,KAAK,WAAW,QAAQ;EAC5D,IAAI,QAAQ,oBAAoB,KAAA,GAAW,KAAK,kBAAkB,QAAQ;EAC1E,IAAI,QAAQ,cAAc,KAAA,GAAW,KAAK,YAAY,QAAQ;EAC9D,IAAI,QAAQ,gBAAgB,KAAA,GAAW,KAAK,cAAc,QAAQ;EAClE,IAAI,QAAQ,cAAc,KAAA,GAAW,KAAK,YAAY,QAAQ;EAC9D,IAAI,QAAQ,kBAAkB,KAAA,GAAW,KAAK,gBAAgB,QAAQ;EACtE,WAAW,IAAI;CACjB;AACF;;;;;;;;;;;;;AChDA,IAAa,2BAAb,cAA8C,WAAW;CACvD,OAAgB;CAGhB,YAAY,UAAyC,CAAC,GAAG;EACvD,MAAM;EACN,IAAI,QAAQ,kBAAkB,KAAA,GAAW,KAAK,gBAAgB,QAAQ;EACtE,WAAW,IAAI;CACjB;AACF;;;;;;;;;;;ACNA,IAAa,mCAAb,cAAsD,WAAW;CAC/D,OAAgB;CAChB;CAMA,YAAY,SAAgD;EAC1D,MAAM;EACN,KAAK,YAAY,QAAQ;EACzB,IAAI,QAAQ,cAAc,KAAA,GAAW,KAAK,YAAY,QAAQ;EAC9D,IAAI,QAAQ,gBAAgB,KAAA,GAAW,KAAK,cAAc,QAAQ;EAClE,IAAI,QAAQ,yBAAyB,KAAA,GACnC,KAAK,uBAAuB,QAAQ;EACtC,IAAI,QAAQ,0BAA0B,KAAA,GACpC,KAAK,wBAAwB,QAAQ;EACvC,WAAW,IAAI;CACjB;AACF;;;;;;;;;;;;;;;;;;;;;ACoEA,IAAa,yBAAb,cAA4C,WAAW;CACrD,OAAgB;CAUhB,YAAY,QAAqC,CAAC,GAAG;EACnD,MAAM;EACN,IAAI,MAAM,WAAW,KAAA,GACnB,KAAK,SAAS;GACZ,MAAM,MAAM,OAAO;GACnB,GAAI,MAAM,OAAO,OAAO,QAAQ,EAAE,KAAK,MAAM,OAAO,IAAI;EAC1D;EAEF,IAAI,MAAM,kBAAkB,KAAA,GAAW,KAAK,gBAAgB,MAAM;EAClE,IAAI,MAAM,wBAAwB,KAAA,GAChC,KAAK,sBACH,MAAM,+BAA+B,2BACjC,MAAM,sBACN,IAAI,yBAAyB,MAAM,mBAAmB;EAE9D,IAAI,MAAM,cAAc,KAAA,GACtB,KAAK,YACH,MAAM,qBAAqB,wBACvB,MAAM,YACN,IAAI,sBAAsB,MAAM,SAAS;EAEjD,IAAI,MAAM,eAAe,KAAA,GACvB,KAAK,aACH,MAAM,sBAAsB,mCACxB,MAAM,aACN,IAAI,iCAAiC,MAAM,UAAU;EAE7D,IAAI,MAAM,mBAAmB,KAAA,GAC3B,KAAK,iBACH,MAAM,eAAe,SAAS,KAAA,IAAY,EAAE,MAAM,MAAM,eAAe,KAAK,IAAI,CAAC;EAErF,IAAI,MAAM,uBAAuB,KAAA,GAAW,KAAK,qBAAqB,MAAM;EAC5E,IAAI,MAAM,iCAAiC,KAAA,GACzC,KAAK,+BACH,MAAM,wCAAwC,2CAC1C,MAAM,+BACN,IAAI,yCAAyC,MAAM,4BAA4B;EAEvF,WAAW,IAAI;CACjB;AACF;;;;;;;;;;;;;;;;AC1HA,IAAa,aAAb,cAAgC,WAAW;CACzC,OAAgB;CAChB;CAWA,YAAY,OAAwB;EAClC,MAAM;EACN,KAAK,OAAO,MAAM;EAClB,IAAI,MAAM,WAAW,KAAA,GAAW,KAAK,SAAS,MAAM;EACpD,IAAI,MAAM,WAAW,KAAA,GAAW,KAAK,SAAS,MAAM;EACpD,IAAI,MAAM,uBAAuB,KAAA,GAAW,KAAK,qBAAqB,MAAM;EAC5E,IAAI,MAAM,4BAA4B,KAAA,GACpC,KAAK,0BAA0B,MAAM;EACvC,IAAI,MAAM,uBAAuB,KAAA,GAAW,KAAK,qBAAqB,MAAM;EAC5E,IAAI,MAAM,cAAc,KAAA,GAAW,KAAK,YAAY,MAAM;EAC1D,IAAI,MAAM,YAAY,KAAA,GAAW,KAAK,UAAU,MAAM;EACtD,IAAI,MAAM,qBAAqB,KAAA,GAAW,KAAK,mBAAmB,MAAM;EACxE,IAAI,MAAM,sBAAsB,KAAA,GAAW,KAAK,oBAAoB,MAAM;EAC1E,WAAW,IAAI;CACjB;AACF;;;;;;;;;;;;;;;;;;;;ACpCA,IAAa,iBAAb,cAAoC,WAAW;CAC7C,OAAgB;CAChB;CACA;CACA;CAEA,YAAY,OAA4B;EACtC,MAAM;EACN,KAAK,aAAa,MAAM;EACxB,KAAK,kBAAkB,MAAM;EAC7B,KAAK,mBAAmB,MAAM;EAC9B,WAAW,IAAI;CACjB;AACF;;;;;;;;;;;;;;;;;;;;;;;ACIA,IAAa,kBAAb,cAAqC,WAAW;CAC9C,OAAgB;CAMhB,YAAY,QAA8B,CAAC,GAAG;EAC5C,MAAM;EACN,IAAI,MAAM,YAAY,KAAA,GACpB,KAAK,UAAU,MAAM,QAAQ,KAAK,QAChC,eAAe,aAAa,MAAM,IAAI,WAAW,GAAG,CACtD;EAEF,IAAI,MAAM,cAAc,KAAA,GACtB,KAAK,YACH,MAAM,qBAAqB,iBACvB,MAAM,YACN,IAAI,eAAe,MAAM,SAAS;EAE1C,IAAI,MAAM,YAAY,KAAA,GACpB,KAAK,UACH,MAAM,mBAAmB,yBACrB,MAAM,UACN,IAAI,uBAAuB,MAAM,OAAO;EAEhD,IAAI,MAAM,YAAY,KAAA,GAAW,KAAK,UAAU,MAAM;EACtD,WAAW,IAAI;CACjB;AACF;;;ACnEA,MAAa,uBAAoF;CAC/F,MAAM;CACN,QAAQ;CACR,YAAY,UAAU,IAAI,gBAAgB,KAAK;AACjD;;;;;;;;AASA,SAAgB,wBACd,YAAgD,CAAC,GACH;CAC9C,MAAM,QAAQ,IAAI,IAAqC,CAAC,CAAC,cAAc,oBAAoB,CAAC,CAAC;CAC7F,KAAK,MAAM,cAAc,WAAW;EAClC,IAAI,MAAM,IAAI,WAAW,IAAI,GAC3B,MAAM,IAAI,MACR,mDAAmD,WAAW,KAAK,0CACrE;EAEF,MAAM,IAAI,WAAW,MAAM,UAAU;CACvC;CACA,OAAO;AACT"}
@@ -1,4 +1,4 @@
1
- import { n as MongoCollectionInput, t as MongoCollection } from "./mongo-collection-BCi-Bq_a.mjs";
1
+ import { n as MongoCollectionInput, t as MongoCollection } from "./mongo-collection-DrXh4EbI.mjs";
2
2
  import { AnyEntityKindDescriptor, EntityKindDescriptor } from "@prisma-next/framework-components/ir";
3
3
 
4
4
  //#region src/entity-kinds.d.ts
@@ -1,2 +1,2 @@
1
- import { n as composeMongoEntityKinds, t as collectionEntityKind } from "./entity-kinds-C9KNr9IE.mjs";
1
+ import { n as composeMongoEntityKinds, t as collectionEntityKind } from "./entity-kinds-AqGb90Nt.mjs";
2
2
  export { collectionEntityKind, composeMongoEntityKinds };
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as MongoCollationMaxVariable, A as MongoContractWithTypeMaps, B as MongoModelStorage, C as MongoChangeStreamPreAndPostImagesOptionsInput, D as ExtractMongoTypeMaps, E as ExtractMongoFieldOutputTypes, F as MongoIndexKeyDirection, G as MongoUnboundFieldInputTypes, H as MongoStorageShape, I as MongoJsonObject, J as RootModelName, K as MongoUnboundFieldOutputTypes, L as MongoJsonPrimitive, M as MongoIndexFieldValue, N as MongoIndexFields, O as InferModelRow, P as MongoIndexKey, Q as MongoCollationCaseFirst, R as MongoJsonValue, S as MongoChangeStreamPreAndPostImagesOptions, T as ExtractMongoFieldInputTypes, U as MongoTypeMaps, V as MongoModelsMap, W as MongoTypeMapsPhantomKey, X as MongoIndexOptionsInput, Y as MongoIndexOptions, Z as MongoCollationAlternate, _ as MongoIndexOptionDefaults, a as MongoValidatorValidationAction, b as MongoClusteredCollectionOptions, c as MongoIndexInput, d as MongoCollectionOptionsInput, et as MongoCollationOptions, f as MongoStorageCappedShape, g as MongoTimeSeriesGranularity, h as MongoTimeSeriesCollectionOptionsInput, i as MongoValidatorInput, j as MongoIndexAuthoringInput, k as MongoContract, l as MongoCollectionOptions, m as MongoTimeSeriesCollectionOptions, n as MongoCollectionInput, nt as MongoCollationStrength, o as MongoValidatorValidationLevel, p as MongoStorageClusteredIndexShape, q as MongoWildcardProjection, r as MongoValidator, s as MongoIndex, t as MongoCollection, tt as MongoCollationOptionsInput, u as MongoCollectionOptionsAuthoringInput, v as MongoIndexOptionDefaultsInput, w as ExtractMongoCodecTypes, x as MongoClusteredCollectionOptionsInput, y as MongoClusteredCollectionKey, z as MongoModelDefinition } from "./mongo-collection-BCi-Bq_a.mjs";
1
+ import { $ as MongoCollationCaseFirst, A as MongoContract, B as MongoModelDefinition, C as MongoChangeStreamPreAndPostImagesOptionsInput, D as ExtractMongoFieldOutputTypes, E as ExtractMongoFieldInputTypes, F as MongoIndexKey, G as MongoTypeMapsPhantomKey, H as MongoModelsMap, I as MongoIndexKeyDirection, J as MongoWildcardProjection, K as MongoUnboundFieldInputTypes, L as MongoJsonObject, M as MongoIndexAuthoringInput, N as MongoIndexFieldValue, O as ExtractMongoTypeMaps, P as MongoIndexFields, Q as MongoCollationAlternate, R as MongoJsonPrimitive, S as MongoChangeStreamPreAndPostImagesOptions, T as ExtractMongoCodecTypes, U as MongoStorageShape, V as MongoModelStorage, W as MongoTypeMaps, X as MongoIndexOptions, Y as RootModelName, Z as MongoIndexOptionsInput, _ as MongoIndexOptionDefaults, a as MongoValidatorValidationAction, b as MongoClusteredCollectionOptions, c as MongoIndexInput, d as MongoCollectionOptionsInput, et as MongoCollationMaxVariable, f as MongoStorageCappedShape, g as MongoTimeSeriesGranularity, h as MongoTimeSeriesCollectionOptionsInput, i as MongoValidatorInput, j as MongoContractWithTypeMaps, k as InferModelRow, l as MongoCollectionOptions, m as MongoTimeSeriesCollectionOptions, n as MongoCollectionInput, nt as MongoCollationOptionsInput, o as MongoValidatorValidationLevel, p as MongoStorageClusteredIndexShape, q as MongoUnboundFieldOutputTypes, r as MongoValidator, rt as MongoCollationStrength, s as MongoIndex, t as MongoCollection, tt as MongoCollationOptions, u as MongoCollectionOptionsAuthoringInput, v as MongoIndexOptionDefaultsInput, w as AnyMongoTypeMaps, x as MongoClusteredCollectionOptionsInput, y as MongoClusteredCollectionKey, z as MongoJsonValue } from "./mongo-collection-DrXh4EbI.mjs";
2
2
  import { StorageHashBase } from "@prisma-next/contract/types";
3
3
  import { Type } from "arktype";
4
4
  import { IRNodeBase, Namespace, NamespaceBase, Storage } from "@prisma-next/framework-components/ir";
@@ -81,5 +81,5 @@ declare function applyPolymorphicScopeToMongoIndex(index: MongoIndex, scope: Pol
81
81
  //#region src/validate-storage.d.ts
82
82
  declare function validateMongoStorage(contract: MongoContract): void;
83
83
  //#endregion
84
- export { type ApplyScopeResult, type ExtractMongoCodecTypes, type ExtractMongoFieldInputTypes, type ExtractMongoFieldOutputTypes, type ExtractMongoTypeMaps, type InferModelRow, MongoChangeStreamPreAndPostImagesOptions, type MongoChangeStreamPreAndPostImagesOptionsInput, type MongoClusteredCollectionKey, MongoClusteredCollectionOptions, type MongoClusteredCollectionOptionsInput, type MongoCollationAlternate, type MongoCollationCaseFirst, type MongoCollationMaxVariable, MongoCollationOptions, type MongoCollationOptionsInput, type MongoCollationStrength, MongoCollection, type MongoCollectionInput, MongoCollectionOptions, type MongoCollectionOptionsAuthoringInput, type MongoCollectionOptionsInput, type MongoContract, MongoContractSchema, type MongoContractWithTypeMaps, MongoIndex, type MongoIndexAuthoringInput, type MongoIndexFieldValue, type MongoIndexFields, type MongoIndexInput, type MongoIndexKey, type MongoIndexKeyDirection, MongoIndexOptionDefaults, type MongoIndexOptionDefaultsInput, MongoIndexOptions, type MongoIndexOptionsInput, type MongoJsonObject, type MongoJsonPrimitive, type MongoJsonValue, type MongoModelDefinition, type MongoModelStorage, type MongoModelsMap, type MongoNamespace, type MongoNamespaceEntries, MongoStorage, type MongoStorageCappedShape, type MongoStorageClusteredIndexShape, type MongoStorageInput, type MongoStorageShape, MongoTimeSeriesCollectionOptions, type MongoTimeSeriesCollectionOptionsInput, type MongoTimeSeriesGranularity, type MongoTypeMaps, type MongoTypeMapsPhantomKey, type MongoUnboundFieldInputTypes, type MongoUnboundFieldOutputTypes, MongoUnboundNamespace, MongoValidator, type MongoValidatorInput, type MongoValidatorValidationAction, type MongoValidatorValidationLevel, type MongoWildcardProjection, type PolymorphicIndexScope, type RootModelName, applyPolymorphicScopeToMongoIndex, buildMongoNamespace, createMongoContractSchema, createMongoNamespaceEnvelopeSchema, defaultMongoDomainNamespaceId, defaultMongoStorageNamespaceId, validateMongoStorage };
84
+ export { type AnyMongoTypeMaps, type ApplyScopeResult, type ExtractMongoCodecTypes, type ExtractMongoFieldInputTypes, type ExtractMongoFieldOutputTypes, type ExtractMongoTypeMaps, type InferModelRow, MongoChangeStreamPreAndPostImagesOptions, type MongoChangeStreamPreAndPostImagesOptionsInput, type MongoClusteredCollectionKey, MongoClusteredCollectionOptions, type MongoClusteredCollectionOptionsInput, type MongoCollationAlternate, type MongoCollationCaseFirst, type MongoCollationMaxVariable, MongoCollationOptions, type MongoCollationOptionsInput, type MongoCollationStrength, MongoCollection, type MongoCollectionInput, MongoCollectionOptions, type MongoCollectionOptionsAuthoringInput, type MongoCollectionOptionsInput, type MongoContract, MongoContractSchema, type MongoContractWithTypeMaps, MongoIndex, type MongoIndexAuthoringInput, type MongoIndexFieldValue, type MongoIndexFields, type MongoIndexInput, type MongoIndexKey, type MongoIndexKeyDirection, MongoIndexOptionDefaults, type MongoIndexOptionDefaultsInput, MongoIndexOptions, type MongoIndexOptionsInput, type MongoJsonObject, type MongoJsonPrimitive, type MongoJsonValue, type MongoModelDefinition, type MongoModelStorage, type MongoModelsMap, type MongoNamespace, type MongoNamespaceEntries, MongoStorage, type MongoStorageCappedShape, type MongoStorageClusteredIndexShape, type MongoStorageInput, type MongoStorageShape, MongoTimeSeriesCollectionOptions, type MongoTimeSeriesCollectionOptionsInput, type MongoTimeSeriesGranularity, type MongoTypeMaps, type MongoTypeMapsPhantomKey, type MongoUnboundFieldInputTypes, type MongoUnboundFieldOutputTypes, MongoUnboundNamespace, MongoValidator, type MongoValidatorInput, type MongoValidatorValidationAction, type MongoValidatorValidationLevel, type MongoWildcardProjection, type PolymorphicIndexScope, type RootModelName, applyPolymorphicScopeToMongoIndex, buildMongoNamespace, createMongoContractSchema, createMongoNamespaceEnvelopeSchema, defaultMongoDomainNamespaceId, defaultMongoStorageNamespaceId, validateMongoStorage };
85
85
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/contract-schema.ts","../src/default-namespace.ts","../src/ir/mongo-storage.ts","../src/ir/build-mongo-namespace.ts","../src/ir/mongo-unbound-namespace.ts","../src/polymorphic-index-scope.ts","../src/validate-storage.ts"],"mappings":";;;;;;;;;AMkB4D;;;;;;;;iBNuV5C,kCAAA,CACd,SAAA,GAAY,WAAA,SAAoB,IAAA,aAC/B,IAAA;;;;;;iBA2Ba,yBAAA,CACd,SAAA,GAAY,WAAA,SAAoB,IAAA,aAC/B,IAAA;AAAA,cAkCU,mBAAA,oBAAmB,QAAA;;;;cCtanB,8BAAA;;cAGA,6BAAA;;;KCED,qBAAA,GAAwB,QAAA,CAAS,MAAA,SAAe,QAAA,CAAS,MAAA;EAAA,SAC1D,UAAA,GAAa,QAAA,CAAS,MAAA,SAAe,eAAA;AAAA;AAAA,UAG/B,8BAAA;EAAA,SACN,EAAA;EAAA,SACA,OAAA,EAAS,QAAA,CAAS,MAAA,SAAe,QAAA,CAAS,MAAA,SAAe,oBAAA;AAAA;AAAA,KAGxD,cAAA,GAAiB,SAAA;EAAA,SAClB,OAAA,EAAS,qBAAqB;AAAA;AAAA,UAGxB,iBAAA;EAAA,SACN,WAAA,EAAa,eAAA,CAAgB,KAAA;EAAA,SAC7B,UAAA,EAAY,QAAA,CAAS,MAAA,SAAe,cAAA;AAAA;AAAA,cAGlC,YAAA,wCAAoD,UAAA,YAAsB,OAAA;EAAA,SACpE,IAAA;EAAA,SACR,WAAA,EAAa,eAAA,CAAgB,KAAA;EAAA,SAC7B,UAAA,EAAY,QAAA,CAAS,MAAA,SAAe,cAAA;cAEjC,KAAA,EAAO,iBAAA,CAAkB,KAAA;AAAA;;;iBC8BvB,mBAAA,CAAoB,KAAA,EAAO,8BAAA,GAAiC,cAAc;;;cCvD7E,qBAAA,SAA8B,aAAA;EAAA,gBACzB,QAAA,EAAU,qBAAA;EAAA,SAEjB,EAAA;EAAA,SACA,OAAA,EAAS,qBAAA;EAAA,SAGD,IAAA;EAAA,QAEV,WAAA;AAAA;;;KCdG,qBAAA;EAAA,SACD,kBAAA;EAAA,SACA,kBAAkB;AAAA;AAAA,KAGjB,gBAAA;EAAA,SACG,IAAA;EAAA,SAAqB,KAAA,EAAO,UAAU;AAAA;EAAA,SACtC,IAAA;EAAA,SAA2B,MAAA;AAAA;AAAA,iBAe1B,iCAAA,CACd,KAAA,EAAO,UAAA,EACP,KAAA,EAAO,qBAAA,GACN,gBAAA;;;iBCTa,oBAAA,CAAqB,QAAuB,EAAb,aAAa"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/contract-schema.ts","../src/default-namespace.ts","../src/ir/mongo-storage.ts","../src/ir/build-mongo-namespace.ts","../src/ir/mongo-unbound-namespace.ts","../src/polymorphic-index-scope.ts","../src/validate-storage.ts"],"mappings":";;;;;;;;;AMkB4D;;;;;;;;iBN4W5C,kCAAA,CACd,SAAA,GAAY,WAAA,SAAoB,IAAA,aAC/B,IAAA;;;;;;iBA2Ba,yBAAA,CACd,SAAA,GAAY,WAAA,SAAoB,IAAA,aAC/B,IAAA;AAAA,cAmCU,mBAAA,oBAAmB,QAAA;;;;cC5bnB,8BAAA;;cAGA,6BAAA;;;KCED,qBAAA,GAAwB,QAAA,CAAS,MAAA,SAAe,QAAA,CAAS,MAAA;EAAA,SAC1D,UAAA,GAAa,QAAA,CAAS,MAAA,SAAe,eAAA;AAAA;AAAA,UAG/B,8BAAA;EAAA,SACN,EAAA;EAAA,SACA,OAAA,EAAS,QAAA,CAAS,MAAA,SAAe,QAAA,CAAS,MAAA,SAAe,oBAAA;AAAA;AAAA,KAGxD,cAAA,GAAiB,SAAA;EAAA,SAClB,OAAA,EAAS,qBAAqB;AAAA;AAAA,UAGxB,iBAAA;EAAA,SACN,WAAA,EAAa,eAAA,CAAgB,KAAA;EAAA,SAC7B,UAAA,EAAY,QAAA,CAAS,MAAA,SAAe,cAAA;AAAA;AAAA,cAGlC,YAAA,wCAAoD,UAAA,YAAsB,OAAA;EAAA,SACpE,IAAA;EAAA,SACR,WAAA,EAAa,eAAA,CAAgB,KAAA;EAAA,SAC7B,UAAA,EAAY,QAAA,CAAS,MAAA,SAAe,cAAA;cAEjC,KAAA,EAAO,iBAAA,CAAkB,KAAA;AAAA;;;iBC8BvB,mBAAA,CAAoB,KAAA,EAAO,8BAAA,GAAiC,cAAc;;;cCvD7E,qBAAA,SAA8B,aAAA;EAAA,gBACzB,QAAA,EAAU,qBAAA;EAAA,SAEjB,EAAA;EAAA,SACA,OAAA,EAAS,qBAAA;EAAA,SAGD,IAAA;EAAA,QAEV,WAAA;AAAA;;;KCdG,qBAAA;EAAA,SACD,kBAAA;EAAA,SACA,kBAAkB;AAAA;AAAA,KAGjB,gBAAA;EAAA,SACG,IAAA;EAAA,SAAqB,KAAA,EAAO,UAAU;AAAA;EAAA,SACtC,IAAA;EAAA,SAA2B,MAAA;AAAA;AAAA,iBAe1B,iCAAA,CACd,KAAA,EAAO,UAAA,EACP,KAAA,EAAO,qBAAA,GACN,gBAAA;;;iBCTa,oBAAA,CAAqB,QAAuB,EAAb,aAAa"}
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { a as MongoIndex, c as MongoIndexOptionDefaults, d as MongoContractSchema, f as createMongoContractSchema, i as MongoValidator, l as MongoCollationOptions, n as composeMongoEntityKinds, o as MongoCollectionOptions, p as createMongoNamespaceEnvelopeSchema, r as MongoCollection, s as MongoTimeSeriesCollectionOptions, u as MongoChangeStreamPreAndPostImagesOptions } from "./entity-kinds-C9KNr9IE.mjs";
1
+ import { a as MongoIndex, c as MongoIndexOptionDefaults, d as MongoContractSchema, f as createMongoContractSchema, i as MongoValidator, l as MongoCollationOptions, n as composeMongoEntityKinds, o as MongoCollectionOptions, p as createMongoNamespaceEnvelopeSchema, r as MongoCollection, s as MongoTimeSeriesCollectionOptions, u as MongoChangeStreamPreAndPostImagesOptions } from "./entity-kinds-AqGb90Nt.mjs";
2
2
  import { UNBOUND_DOMAIN_NAMESPACE_ID } from "@prisma-next/contract/default-namespace";
3
3
  import { IRNodeBase, NamespaceBase, UNBOUND_NAMESPACE_ID, freezeNode, hydrateNamespaceEntities } from "@prisma-next/framework-components/ir";
4
4
  import { blindCast } from "@prisma-next/utils/casts";
@@ -1,4 +1,4 @@
1
- import { Contract, ContractField, ContractModel, ContractValueObject, ContractValueObjectDefinitions, ControlPolicy, StorageBase } from "@prisma-next/contract/types";
1
+ import { Contract, ContractModel, ControlPolicy, StorageBase } from "@prisma-next/contract/types";
2
2
  import { IRNodeBase, Namespace, UNBOUND_NAMESPACE_ID } from "@prisma-next/framework-components/ir";
3
3
  import { CollationOptions } from "@prisma-next/mongo-value/mongodb-types";
4
4
 
@@ -164,13 +164,14 @@ type RootModelName<TContract extends MongoContract, RootName extends keyof TCont
164
164
  } ? M & keyof MongoModelsMap<TContract> : never;
165
165
  type MongoTypeMaps<TCodecTypes extends Record<string, {
166
166
  output: unknown;
167
- }> = Record<string, {
168
- output: unknown;
169
- }>, TFieldOutputTypes extends Record<string, Record<string, unknown>> = Record<string, Record<string, unknown>>, TFieldInputTypes extends Record<string, Record<string, unknown>> = Record<string, Record<string, unknown>>> = {
167
+ }>, TFieldOutputTypes extends Record<string, Record<string, unknown>>, TFieldInputTypes extends Record<string, Record<string, unknown>>> = {
170
168
  readonly codecTypes: TCodecTypes;
171
169
  readonly fieldOutputTypes: TFieldOutputTypes;
172
170
  readonly fieldInputTypes: TFieldInputTypes;
173
171
  };
172
+ type AnyMongoTypeMaps = MongoTypeMaps<Record<string, {
173
+ output: unknown;
174
+ }>, Record<string, Record<string, unknown>>, Record<string, Record<string, unknown>>>;
174
175
  type MongoTypeMapsPhantomKey = '__@prisma-next/mongo-core/typeMaps@__';
175
176
  type MongoContractWithTypeMaps<TContract, TTypeMaps> = TContract & { readonly [K in MongoTypeMapsPhantomKey]?: TTypeMaps };
176
177
  type ExtractMongoTypeMaps<T> = MongoTypeMapsPhantomKey extends keyof T ? NonNullable<T[MongoTypeMapsPhantomKey & keyof T]> : never;
@@ -197,29 +198,9 @@ type ExtractMongoFieldInputTypes<T> = ExtractMongoTypeMaps<T> extends {
197
198
  type MongoUnboundFieldOutputTypes<T> = ExtractMongoFieldOutputTypes<T> extends Record<typeof UNBOUND_NAMESPACE_ID, infer Inner> ? Inner : never;
198
199
  /** Input-side counterpart of {@link MongoUnboundFieldOutputTypes}. */
199
200
  type MongoUnboundFieldInputTypes<T> = ExtractMongoFieldInputTypes<T> extends Record<typeof UNBOUND_NAMESPACE_ID, infer Inner> ? Inner : never;
200
- type ExtractValueObjects<TContract extends Contract> = ContractValueObjectDefinitions<TContract>;
201
- type NormalizeContractFields<TFields> = { [K in keyof TFields]: TFields[K] extends ContractField ? TFields[K] : never };
202
- type ExtractValueObjectFields<TValueObjects extends Record<string, ContractValueObject>, VOName extends keyof TValueObjects> = NormalizeContractFields<TValueObjects[VOName]['fields']>;
203
- type InferFieldBaseType<TFieldType, TValueObjects extends Record<string, ContractValueObject>, TCodecTypes extends Record<string, {
204
- output: unknown;
205
- }>> = TFieldType extends {
206
- kind: 'scalar';
207
- codecId: infer CId extends string & keyof TCodecTypes;
208
- } ? TCodecTypes[CId]['output'] : TFieldType extends {
209
- kind: 'valueObject';
210
- name: infer VOName extends string;
211
- } ? VOName extends keyof TValueObjects ? { -readonly [K in keyof ExtractValueObjectFields<TValueObjects, VOName>]: InferFieldType<ExtractValueObjectFields<TValueObjects, VOName>[K], TValueObjects, TCodecTypes> } : unknown : TFieldType extends {
212
- kind: 'union';
213
- members: infer TMembers extends ReadonlyArray<unknown>;
214
- } ? TMembers[number] extends infer TMember ? InferFieldBaseType<TMember, TValueObjects, TCodecTypes> : unknown : unknown;
215
- type InferFieldType<TField, TValueObjects extends Record<string, ContractValueObject>, TCodecTypes extends Record<string, {
216
- output: unknown;
217
- }>> = TField extends ContractField ? TField extends {
218
- many: true;
219
- } ? TField['nullable'] extends true ? InferFieldBaseType<TField['type'], TValueObjects, TCodecTypes>[] | null : InferFieldBaseType<TField['type'], TValueObjects, TCodecTypes>[] : TField['nullable'] extends true ? InferFieldBaseType<TField['type'], TValueObjects, TCodecTypes> | null : InferFieldBaseType<TField['type'], TValueObjects, TCodecTypes> : never;
220
- type InferModelRow<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>, ModelName extends string & keyof MongoModelsMap<TContract>, TFields extends Record<string, ContractField> = MongoModelsMap<TContract>[ModelName]['fields'], TCodecTypes extends Record<string, {
201
+ type InferModelRow<TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps<Record<string, {
221
202
  output: unknown;
222
- }> = ExtractMongoCodecTypes<TContract>, TValueObjects extends Record<string, ContractValueObject> = ExtractValueObjects<TContract>> = { -readonly [FieldName in keyof TFields]: InferFieldType<TFields[FieldName], TValueObjects, TCodecTypes> };
203
+ }>, Record<string, Record<string, unknown>>, Record<string, Record<string, unknown>>>>, ModelName extends string & keyof MongoModelsMap<TContract>> = ModelName extends keyof MongoUnboundFieldOutputTypes<TContract> ? MongoUnboundFieldOutputTypes<TContract>[ModelName] : { readonly [K in keyof MongoModelsMap<TContract>[ModelName]['fields']]: unknown };
223
204
  //#endregion
224
205
  //#region src/ir/mongo-change-stream-pre-and-post-images-options.d.ts
225
206
  interface MongoChangeStreamPreAndPostImagesOptionsInput {
@@ -526,5 +507,5 @@ declare class MongoCollection extends IRNodeBase {
526
507
  constructor(input?: MongoCollectionInput);
527
508
  }
528
509
  //#endregion
529
- export { MongoCollationMaxVariable as $, MongoContractWithTypeMaps as A, MongoModelStorage as B, MongoChangeStreamPreAndPostImagesOptionsInput as C, ExtractMongoTypeMaps as D, ExtractMongoFieldOutputTypes as E, MongoIndexKeyDirection as F, MongoUnboundFieldInputTypes as G, MongoStorageShape as H, MongoJsonObject as I, RootModelName as J, MongoUnboundFieldOutputTypes as K, MongoJsonPrimitive as L, MongoIndexFieldValue as M, MongoIndexFields as N, InferModelRow as O, MongoIndexKey as P, MongoCollationCaseFirst as Q, MongoJsonValue as R, MongoChangeStreamPreAndPostImagesOptions as S, ExtractMongoFieldInputTypes as T, MongoTypeMaps as U, MongoModelsMap as V, MongoTypeMapsPhantomKey as W, MongoIndexOptionsInput as X, MongoIndexOptions as Y, MongoCollationAlternate as Z, MongoIndexOptionDefaults as _, MongoValidatorValidationAction as a, MongoClusteredCollectionOptions as b, MongoIndexInput as c, MongoCollectionOptionsInput as d, MongoCollationOptions as et, MongoStorageCappedShape as f, MongoTimeSeriesGranularity as g, MongoTimeSeriesCollectionOptionsInput as h, MongoValidatorInput as i, MongoIndexAuthoringInput as j, MongoContract as k, MongoCollectionOptions as l, MongoTimeSeriesCollectionOptions as m, MongoCollectionInput as n, MongoCollationStrength as nt, MongoValidatorValidationLevel as o, MongoStorageClusteredIndexShape as p, MongoWildcardProjection as q, MongoValidator as r, MongoIndex as s, MongoCollection as t, MongoCollationOptionsInput as tt, MongoCollectionOptionsAuthoringInput as u, MongoIndexOptionDefaultsInput as v, ExtractMongoCodecTypes as w, MongoClusteredCollectionOptionsInput as x, MongoClusteredCollectionKey as y, MongoModelDefinition as z };
530
- //# sourceMappingURL=mongo-collection-BCi-Bq_a.d.mts.map
510
+ export { MongoCollationCaseFirst as $, MongoContract as A, MongoModelDefinition as B, MongoChangeStreamPreAndPostImagesOptionsInput as C, ExtractMongoFieldOutputTypes as D, ExtractMongoFieldInputTypes as E, MongoIndexKey as F, MongoTypeMapsPhantomKey as G, MongoModelsMap as H, MongoIndexKeyDirection as I, MongoWildcardProjection as J, MongoUnboundFieldInputTypes as K, MongoJsonObject as L, MongoIndexAuthoringInput as M, MongoIndexFieldValue as N, ExtractMongoTypeMaps as O, MongoIndexFields as P, MongoCollationAlternate as Q, MongoJsonPrimitive as R, MongoChangeStreamPreAndPostImagesOptions as S, ExtractMongoCodecTypes as T, MongoStorageShape as U, MongoModelStorage as V, MongoTypeMaps as W, MongoIndexOptions as X, RootModelName as Y, MongoIndexOptionsInput as Z, MongoIndexOptionDefaults as _, MongoValidatorValidationAction as a, MongoClusteredCollectionOptions as b, MongoIndexInput as c, MongoCollectionOptionsInput as d, MongoCollationMaxVariable as et, MongoStorageCappedShape as f, MongoTimeSeriesGranularity as g, MongoTimeSeriesCollectionOptionsInput as h, MongoValidatorInput as i, MongoContractWithTypeMaps as j, InferModelRow as k, MongoCollectionOptions as l, MongoTimeSeriesCollectionOptions as m, MongoCollectionInput as n, MongoCollationOptionsInput as nt, MongoValidatorValidationLevel as o, MongoStorageClusteredIndexShape as p, MongoUnboundFieldOutputTypes as q, MongoValidator as r, MongoCollationStrength as rt, MongoIndex as s, MongoCollection as t, MongoCollationOptions as tt, MongoCollectionOptionsAuthoringInput as u, MongoIndexOptionDefaultsInput as v, AnyMongoTypeMaps as w, MongoClusteredCollectionOptionsInput as x, MongoClusteredCollectionKey as y, MongoJsonValue as z };
511
+ //# sourceMappingURL=mongo-collection-DrXh4EbI.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo-collection-DrXh4EbI.d.mts","names":[],"sources":["../src/ir/mongo-collation-options.ts","../src/ir/mongo-index-options.ts","../src/contract-types.ts","../src/ir/mongo-change-stream-pre-and-post-images-options.ts","../src/ir/mongo-clustered-collection-options.ts","../src/ir/mongo-index-option-defaults.ts","../src/ir/mongo-time-series-collection-options.ts","../src/ir/mongo-collection-options.ts","../src/ir/mongo-index.ts","../src/ir/mongo-validator.ts","../src/ir/mongo-collection.ts"],"mappings":"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"}
package/package.json CHANGED
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "name": "@prisma-next/mongo-contract",
3
- "version": "0.14.0-dev.3",
3
+ "version": "0.14.0-dev.30",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
7
  "description": "Contract types and validation for Prisma Next MongoDB support",
8
8
  "dependencies": {
9
- "@prisma-next/contract": "0.14.0-dev.3",
10
- "@prisma-next/framework-components": "0.14.0-dev.3",
11
- "@prisma-next/mongo-value": "0.14.0-dev.3",
12
- "@prisma-next/utils": "0.14.0-dev.3",
9
+ "@prisma-next/contract": "0.14.0-dev.30",
10
+ "@prisma-next/framework-components": "0.14.0-dev.30",
11
+ "@prisma-next/mongo-value": "0.14.0-dev.30",
12
+ "@prisma-next/utils": "0.14.0-dev.30",
13
13
  "arktype": "^2.2.0",
14
14
  "mongodb": "^7.2.0"
15
15
  },
16
16
  "devDependencies": {
17
- "@prisma-next/test-utils": "0.14.0-dev.3",
18
- "@prisma-next/tsconfig": "0.14.0-dev.3",
19
- "@prisma-next/tsdown": "0.14.0-dev.3",
17
+ "@prisma-next/test-utils": "0.14.0-dev.30",
18
+ "@prisma-next/tsconfig": "0.14.0-dev.30",
19
+ "@prisma-next/tsdown": "0.14.0-dev.30",
20
20
  "tsdown": "0.22.1",
21
21
  "typescript": "5.9.3",
22
22
  "vitest": "4.1.8"
@@ -27,12 +27,33 @@ const FieldTypeSchema = ScalarFieldTypeSchema.or(ValueObjectFieldTypeSchema).or(
27
27
  UnionFieldTypeSchema,
28
28
  );
29
29
 
30
+ const DomainEnumRefSchema = type({
31
+ plane: "'domain'",
32
+ namespaceId: 'string',
33
+ entityKind: "'enum'",
34
+ entityName: 'string',
35
+ 'spaceId?': 'string',
36
+ });
37
+
38
+ const ContractEnumSchema = type({
39
+ '+': 'reject',
40
+ codecId: 'string',
41
+ members: type({
42
+ name: 'string',
43
+ value: 'string | number | boolean | null | unknown[] | Record<string, unknown>',
44
+ })
45
+ .array()
46
+ .atLeastLength(1)
47
+ .readonly(),
48
+ });
49
+
30
50
  const RawFieldSchema = type({
31
51
  '+': 'reject',
32
52
  type: FieldTypeSchema,
33
53
  'nullable?': 'boolean',
34
54
  'many?': 'boolean',
35
55
  'dict?': 'boolean',
56
+ 'valueSet?': DomainEnumRefSchema,
36
57
  });
37
58
 
38
59
  const FieldSchema = RawFieldSchema.pipe((field) => ({
@@ -413,6 +434,7 @@ export function createMongoContractSchema(
413
434
  'valueObjects?': type({
414
435
  '[string]': type({ '+': 'reject', fields: type({ '[string]': FieldSchema }) }),
415
436
  }),
437
+ 'enum?': type({ '[string]': ContractEnumSchema }),
416
438
  }),
417
439
  }),
418
440
  }),
@@ -1,11 +1,4 @@
1
- import type {
2
- Contract,
3
- ContractField,
4
- ContractModel,
5
- ContractValueObject,
6
- ContractValueObjectDefinitions,
7
- StorageBase,
8
- } from '@prisma-next/contract/types';
1
+ import type { Contract, ContractModel, StorageBase } from '@prisma-next/contract/types';
9
2
  import type { Namespace, UNBOUND_NAMESPACE_ID } from '@prisma-next/framework-components/ir';
10
3
  import type { MongoIndexOptionsInput } from './ir/mongo-index-options';
11
4
 
@@ -92,21 +85,21 @@ export type RootModelName<
92
85
  : never;
93
86
 
94
87
  export type MongoTypeMaps<
95
- TCodecTypes extends Record<string, { output: unknown }> = Record<string, { output: unknown }>,
96
- TFieldOutputTypes extends Record<string, Record<string, unknown>> = Record<
97
- string,
98
- Record<string, unknown>
99
- >,
100
- TFieldInputTypes extends Record<string, Record<string, unknown>> = Record<
101
- string,
102
- Record<string, unknown>
103
- >,
88
+ TCodecTypes extends Record<string, { output: unknown }>,
89
+ TFieldOutputTypes extends Record<string, Record<string, unknown>>,
90
+ TFieldInputTypes extends Record<string, Record<string, unknown>>,
104
91
  > = {
105
92
  readonly codecTypes: TCodecTypes;
106
93
  readonly fieldOutputTypes: TFieldOutputTypes;
107
94
  readonly fieldInputTypes: TFieldInputTypes;
108
95
  };
109
96
 
97
+ export type AnyMongoTypeMaps = MongoTypeMaps<
98
+ Record<string, { output: unknown }>,
99
+ Record<string, Record<string, unknown>>,
100
+ Record<string, Record<string, unknown>>
101
+ >;
102
+
110
103
  export type MongoTypeMapsPhantomKey = '__@prisma-next/mongo-core/typeMaps@__';
111
104
 
112
105
  export type MongoContractWithTypeMaps<TContract, TTypeMaps> = TContract & {
@@ -158,66 +151,17 @@ export type MongoUnboundFieldInputTypes<T> =
158
151
  ? Inner
159
152
  : never;
160
153
 
161
- type ExtractValueObjects<TContract extends Contract> = ContractValueObjectDefinitions<TContract>;
162
-
163
- type NormalizeContractFields<TFields> = {
164
- [K in keyof TFields]: TFields[K] extends ContractField ? TFields[K] : never;
165
- };
166
-
167
- type ExtractValueObjectFields<
168
- TValueObjects extends Record<string, ContractValueObject>,
169
- VOName extends keyof TValueObjects,
170
- > = NormalizeContractFields<TValueObjects[VOName]['fields']>;
171
-
172
- type InferFieldBaseType<
173
- TFieldType,
174
- TValueObjects extends Record<string, ContractValueObject>,
175
- TCodecTypes extends Record<string, { output: unknown }>,
176
- > = TFieldType extends { kind: 'scalar'; codecId: infer CId extends string & keyof TCodecTypes }
177
- ? TCodecTypes[CId]['output']
178
- : TFieldType extends { kind: 'valueObject'; name: infer VOName extends string }
179
- ? VOName extends keyof TValueObjects
180
- ? {
181
- -readonly [K in keyof ExtractValueObjectFields<TValueObjects, VOName>]: InferFieldType<
182
- ExtractValueObjectFields<TValueObjects, VOName>[K],
183
- TValueObjects,
184
- TCodecTypes
185
- >;
186
- }
187
- : unknown
188
- : TFieldType extends {
189
- kind: 'union';
190
- members: infer TMembers extends ReadonlyArray<unknown>;
191
- }
192
- ? TMembers[number] extends infer TMember
193
- ? InferFieldBaseType<TMember, TValueObjects, TCodecTypes>
194
- : unknown
195
- : unknown;
196
-
197
- type InferFieldType<
198
- TField,
199
- TValueObjects extends Record<string, ContractValueObject>,
200
- TCodecTypes extends Record<string, { output: unknown }>,
201
- > = TField extends ContractField
202
- ? TField extends { many: true }
203
- ? TField['nullable'] extends true
204
- ? InferFieldBaseType<TField['type'], TValueObjects, TCodecTypes>[] | null
205
- : InferFieldBaseType<TField['type'], TValueObjects, TCodecTypes>[]
206
- : TField['nullable'] extends true
207
- ? InferFieldBaseType<TField['type'], TValueObjects, TCodecTypes> | null
208
- : InferFieldBaseType<TField['type'], TValueObjects, TCodecTypes>
209
- : never;
210
-
211
154
  export type InferModelRow<
212
- TContract extends MongoContractWithTypeMaps<MongoContract, MongoTypeMaps>,
155
+ TContract extends MongoContractWithTypeMaps<
156
+ MongoContract,
157
+ MongoTypeMaps<
158
+ Record<string, { output: unknown }>,
159
+ Record<string, Record<string, unknown>>,
160
+ Record<string, Record<string, unknown>>
161
+ >
162
+ >,
213
163
  ModelName extends string & keyof MongoModelsMap<TContract>,
214
- TFields extends Record<string, ContractField> = MongoModelsMap<TContract>[ModelName]['fields'],
215
- TCodecTypes extends Record<string, { output: unknown }> = ExtractMongoCodecTypes<TContract>,
216
- TValueObjects extends Record<string, ContractValueObject> = ExtractValueObjects<TContract>,
217
- > = {
218
- -readonly [FieldName in keyof TFields]: InferFieldType<
219
- TFields[FieldName],
220
- TValueObjects,
221
- TCodecTypes
222
- >;
223
- };
164
+ > = ModelName extends keyof MongoUnboundFieldOutputTypes<TContract>
165
+ ? MongoUnboundFieldOutputTypes<TContract>[ModelName]
166
+ : // Only reachable for a contract with no MongoTypeMaps phantom key (e.g. validateContract<MongoContract>).
167
+ { readonly [K in keyof MongoModelsMap<TContract>[ModelName]['fields']]: unknown };
@@ -4,6 +4,7 @@ export {
4
4
  MongoContractSchema,
5
5
  } from '../contract-schema';
6
6
  export type {
7
+ AnyMongoTypeMaps,
7
8
  ExtractMongoCodecTypes,
8
9
  ExtractMongoFieldInputTypes,
9
10
  ExtractMongoFieldOutputTypes,
@@ -1 +0,0 @@
1
- {"version":3,"file":"entity-kinds-C9KNr9IE.mjs","names":[],"sources":["../src/contract-schema.ts","../src/ir/mongo-change-stream-pre-and-post-images-options.ts","../src/ir/mongo-collation-options.ts","../src/ir/mongo-index-option-defaults.ts","../src/ir/mongo-time-series-collection-options.ts","../src/ir/mongo-collection-options.ts","../src/ir/mongo-index.ts","../src/ir/mongo-validator.ts","../src/ir/mongo-collection.ts","../src/entity-kinds.ts"],"sourcesContent":["import { CrossReferenceSchema } from '@prisma-next/contract/types';\nimport { type Type, type } from 'arktype';\nimport type { MongoJsonObject, MongoJsonPrimitive, MongoJsonValue } from './contract-types';\n\nconst ControlPolicySchema = type(\"'managed' | 'tolerated' | 'external' | 'observed'\");\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: CrossReferenceSchema,\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 'kind?': \"'mongo-collation-options'\",\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 'kind?': \"'mongo-index-option-defaults'\",\n 'storageEngine?': MongoJsonObjectSchema,\n});\n\nconst TimeSeriesCollectionOptionsSchema = type({\n '+': 'reject',\n 'kind?': \"'mongo-time-series-collection-options'\",\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 'kind?': \"'mongo-clustered-collection-options'\",\n 'name?': 'string',\n key: ClusteredCollectionKeySchema,\n unique: 'boolean',\n});\n\nconst ChangeStreamPreAndPostImagesSchema = type({\n '+': 'reject',\n 'kind?': \"'mongo-change-stream-pre-and-post-images-options'\",\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?': CrossReferenceSchema,\n 'owner?': 'string',\n});\n\nconst WildcardProjectionSchema = type({\n '+': 'reject',\n '[string]': '0 | 1',\n});\n\nconst IndexOptionsSchema = type({\n '+': 'reject',\n 'kind?': \"'mongo-index-options'\",\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 'kind?': \"'mongo-index'\",\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 'kind?': \"'mongo-validator'\",\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 'kind?': \"'mongo-time-series-collection-options'\",\n timeField: 'string',\n 'metaField?': 'string',\n 'granularity?': \"'seconds' | 'minutes' | 'hours'\",\n 'bucketMaxSpanSeconds?': 'number',\n 'bucketRoundingSeconds?': 'number',\n});\n\nconst ClusteredIndexSchema = type({\n '+': 'reject',\n 'name?': 'string',\n});\n\nconst MongoCollectionOptionsSchema = type({\n '+': 'reject',\n 'kind?': \"'mongo-collection-options'\",\n 'capped?': CappedOptionsSchema,\n 'storageEngine?': MongoJsonObjectSchema,\n 'indexOptionDefaults?': IndexOptionDefaultsSchema,\n 'timeseries?': TimeseriesOptionsSchema,\n 'collation?': 'Record<string, unknown>',\n 'expireAfterSeconds?': 'number',\n 'changeStreamPreAndPostImages?': ChangeStreamPreAndPostImagesSchema,\n 'clusteredIndex?': ClusteredIndexSchema,\n});\n\nexport const StorageCollectionSchema = type({\n '+': 'reject',\n 'kind?': \"'mongo-collection'\",\n 'indexes?': MongoStorageIndexSchema.array(),\n 'validator?': MongoStorageValidatorSchema,\n 'options?': MongoCollectionOptionsSchema,\n 'control?': ControlPolicySchema,\n});\n\nfunction collectionEntrySchema(fragments?: ReadonlyMap<string, Type<unknown>>): Type<unknown> {\n if (fragments === undefined || fragments.size === 0) {\n return StorageCollectionSchema;\n }\n return type('unknown').narrow((entry, ctx) => {\n if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) {\n return ctx.mustBe('an object');\n }\n const kind = (entry as { kind?: unknown }).kind;\n if (typeof kind === 'string') {\n const fragment = fragments.get(kind);\n if (fragment !== undefined) {\n const parsed = fragment(entry);\n if (parsed instanceof type.errors) {\n return ctx.reject({ expected: parsed.summary });\n }\n return true;\n }\n }\n const parsed = StorageCollectionSchema(entry);\n if (parsed instanceof type.errors) {\n return ctx.reject({ expected: parsed.summary });\n }\n return true;\n });\n}\n\n/**\n * Builds the per-namespace envelope schema for Mongo storage. Pack\n * contributions are keyed by the descriptor's `discriminator` and\n * validate each entry by matching the entry's `kind` field. Mongo today\n * has no pack contributions; the composition surface exists for symmetry\n * with SQL and as the substrate for future entity kinds.\n *\n * `'kind?': 'string'` because `kind` is non-enumerable on built\n * Mongo namespace IR classes and therefore absent from the wire shape; the\n * type-side narrowing is enforced by the IR class, not by this validator.\n */\nexport function createMongoNamespaceEnvelopeSchema(\n fragments?: ReadonlyMap<string, Type<unknown>>,\n): Type<unknown> {\n return type({\n '+': 'reject',\n id: 'string',\n 'kind?': 'string',\n entries: type({\n 'collection?': type({ '[string]': collectionEntrySchema(fragments) }),\n }),\n }).narrow((ns, ctx) => {\n if (typeof ns !== 'object' || ns === null || Array.isArray(ns)) {\n return ctx.mustBe('an object');\n }\n if (Object.hasOwn(ns, 'collections') || Object.hasOwn(ns, 'tables')) {\n return ctx.reject({\n expected:\n 'namespace must use `entries: { collection? }`; flat `collections` / `tables` keys are no longer accepted',\n });\n }\n return true;\n }) as Type<unknown>;\n}\n\n/**\n * Builds the full Mongo contract schema. The per-namespace entry\n * threading happens through {@link createMongoNamespaceEnvelopeSchema};\n * the rest of the envelope is family-shared.\n */\nexport function createMongoContractSchema(\n fragments?: ReadonlyMap<string, Type<unknown>>,\n): Type<unknown> {\n const namespaceEnvelope = createMongoNamespaceEnvelopeSchema(fragments);\n return type({\n '+': 'reject',\n targetFamily: \"'mongo'\",\n 'schemaVersion?': 'string',\n 'target?': 'string',\n 'storageHash?': 'string',\n 'profileHash?': 'string',\n roots: type({ '[string]': CrossReferenceSchema }),\n 'capabilities?': 'Record<string, unknown>',\n 'extensionPacks?': 'Record<string, unknown>',\n 'meta?': 'Record<string, unknown>',\n 'defaultControlPolicy?': ControlPolicySchema,\n 'sources?': 'Record<string, unknown>',\n '_generated?': 'Record<string, unknown>',\n domain: type({\n namespaces: type({\n '[string]': type({\n models: type({ '[string]': ModelDefinitionSchema }),\n 'valueObjects?': type({\n '[string]': type({ '+': 'reject', fields: type({ '[string]': FieldSchema }) }),\n }),\n }),\n }),\n }),\n storage: type({\n '+': 'reject',\n namespaces: type({ '[string]': namespaceEnvelope }),\n 'storageHash?': 'string',\n }),\n }) as Type<unknown>;\n}\n\nexport const MongoContractSchema = createMongoContractSchema();\n\nexport {\n CollationSchema,\n CollectionOptionsSchema,\n IndexFieldsSchema,\n IndexOptionsSchema,\n IndexSchema,\n MongoIndexKeySchema,\n MongoStorageIndexSchema,\n NumberRecordSchema,\n WildcardProjectionSchema,\n};\n","import { freezeNode, IRNodeBase } from '@prisma-next/framework-components/ir';\n\nexport interface MongoChangeStreamPreAndPostImagesOptionsInput {\n readonly enabled: boolean;\n}\n\n/**\n * Change-stream pre-and-post-images collection option. Lifted from a\n * `type =` data shape to an AST class extending `IRNodeBase` per\n * FR18. Single-field shape; the class exists for AST-pattern\n * consistency (every nested data shape inside `MongoCollectionOptions`\n * is an AST node so the verifier can walk uniformly).\n */\nexport class MongoChangeStreamPreAndPostImagesOptions extends IRNodeBase {\n readonly kind = 'mongo-change-stream-pre-and-post-images-options' as const;\n readonly enabled: boolean;\n\n constructor(options: MongoChangeStreamPreAndPostImagesOptionsInput) {\n super();\n this.enabled = options.enabled;\n freezeNode(this);\n }\n}\n","import { freezeNode, IRNodeBase } from '@prisma-next/framework-components/ir';\n\nexport type MongoCollationCaseFirst = 'off' | 'upper' | 'lower';\nexport type MongoCollationStrength = 1 | 2 | 3 | 4 | 5;\nexport type MongoCollationAlternate = 'non-ignorable' | 'shifted';\nexport type MongoCollationMaxVariable = 'punct' | 'space';\n\n/**\n * Authoring / hydration input shape for {@link MongoCollationOptions}. Carries\n * the canonical data without the IR-class `kind` discriminator; the class\n * fabricates `kind` so the authoring DSL and the SPI hydration walker can\n * pass plain data literals through the constructor without forcing every\n * call site to spell out `kind: 'mongo-collation-options'`.\n */\nexport interface MongoCollationOptionsInput {\n readonly locale: string;\n readonly caseLevel?: boolean;\n readonly caseFirst?: MongoCollationCaseFirst;\n readonly strength?: MongoCollationStrength;\n readonly numericOrdering?: boolean;\n readonly alternate?: MongoCollationAlternate;\n readonly maxVariable?: MongoCollationMaxVariable;\n readonly backwards?: boolean;\n readonly normalization?: boolean;\n}\n\n/**\n * Mongo Contract IR leaf for collection / index collation options.\n *\n * Lifted from a `type =` data shape to an AST class extending\n * `IRNodeBase` per FR18 (\"Mongo's Contract IR is fully unified under\n * the AST-class pattern, layered family / target\"). Single concrete class\n * (no target subclass): collation options carry no target-specific\n * variation at this layer — both Atlas and self-hosted Mongo consume the\n * same option vocabulary.\n *\n * Undefined optional fields are not assigned, so `JSON.stringify` omits\n * them from the canonical JSON output (matches the pre-lift data shape's\n * round-trip behaviour, modulo the new `kind` discriminator).\n */\nexport class MongoCollationOptions extends IRNodeBase {\n readonly kind = 'mongo-collation-options' as const;\n readonly locale: string;\n declare readonly caseLevel?: boolean;\n declare readonly caseFirst?: MongoCollationCaseFirst;\n declare readonly strength?: MongoCollationStrength;\n declare readonly numericOrdering?: boolean;\n declare readonly alternate?: MongoCollationAlternate;\n declare readonly maxVariable?: MongoCollationMaxVariable;\n declare readonly backwards?: boolean;\n declare readonly normalization?: boolean;\n\n constructor(options: MongoCollationOptionsInput) {\n super();\n this.locale = options.locale;\n if (options.caseLevel !== undefined) this.caseLevel = options.caseLevel;\n if (options.caseFirst !== undefined) this.caseFirst = options.caseFirst;\n if (options.strength !== undefined) this.strength = options.strength;\n if (options.numericOrdering !== undefined) this.numericOrdering = options.numericOrdering;\n if (options.alternate !== undefined) this.alternate = options.alternate;\n if (options.maxVariable !== undefined) this.maxVariable = options.maxVariable;\n if (options.backwards !== undefined) this.backwards = options.backwards;\n if (options.normalization !== undefined) this.normalization = options.normalization;\n freezeNode(this);\n }\n}\n","import { freezeNode, IRNodeBase } from '@prisma-next/framework-components/ir';\nimport type { MongoJsonObject } from '../contract-types';\n\nexport interface MongoIndexOptionDefaultsInput {\n readonly storageEngine?: MongoJsonObject;\n}\n\n/**\n * Collection-level default index options (the `indexOptionDefaults`\n * collection-creation field on Mongo's `createCollection`). Lifted from\n * a `type =` data shape to an AST class extending `IRNodeBase` per\n * FR18 (Mongo Contract IR fully unified under the AST-class pattern).\n *\n * Carries `storageEngine` only — the underlying MongoDB option set is\n * intentionally narrow at this layer; per-engine richer option vocabularies\n * are out of scope for this project.\n */\nexport class MongoIndexOptionDefaults extends IRNodeBase {\n readonly kind = 'mongo-index-option-defaults' as const;\n declare readonly storageEngine?: MongoJsonObject;\n\n constructor(options: MongoIndexOptionDefaultsInput = {}) {\n super();\n if (options.storageEngine !== undefined) this.storageEngine = options.storageEngine;\n freezeNode(this);\n }\n}\n","import { freezeNode, IRNodeBase } from '@prisma-next/framework-components/ir';\n\nexport type MongoTimeSeriesGranularity = 'seconds' | 'minutes' | 'hours';\n\nexport interface MongoTimeSeriesCollectionOptionsInput {\n readonly timeField: string;\n readonly metaField?: string;\n readonly granularity?: MongoTimeSeriesGranularity;\n readonly bucketMaxSpanSeconds?: number;\n readonly bucketRoundingSeconds?: number;\n}\n\n/**\n * Time-series collection options. Lifted from a `type =` data shape to\n * an AST class extending `IRNodeBase` per FR18.\n *\n * MongoDB requires `timeField` for any time-series collection; the\n * constructor enforces presence by type signature (`timeField: string`\n * is required on the input).\n */\nexport class MongoTimeSeriesCollectionOptions extends IRNodeBase {\n readonly kind = 'mongo-time-series-collection-options' as const;\n readonly timeField: string;\n declare readonly metaField?: string;\n declare readonly granularity?: MongoTimeSeriesGranularity;\n declare readonly bucketMaxSpanSeconds?: number;\n declare readonly bucketRoundingSeconds?: number;\n\n constructor(options: MongoTimeSeriesCollectionOptionsInput) {\n super();\n this.timeField = options.timeField;\n if (options.metaField !== undefined) this.metaField = options.metaField;\n if (options.granularity !== undefined) this.granularity = options.granularity;\n if (options.bucketMaxSpanSeconds !== undefined)\n this.bucketMaxSpanSeconds = options.bucketMaxSpanSeconds;\n if (options.bucketRoundingSeconds !== undefined)\n this.bucketRoundingSeconds = options.bucketRoundingSeconds;\n freezeNode(this);\n }\n}\n","import { freezeNode, IRNodeBase } from '@prisma-next/framework-components/ir';\nimport type { MongoJsonObject } from '../contract-types';\nimport {\n MongoChangeStreamPreAndPostImagesOptions,\n type MongoChangeStreamPreAndPostImagesOptionsInput,\n} from './mongo-change-stream-pre-and-post-images-options';\nimport type {\n MongoClusteredCollectionOptions,\n MongoClusteredCollectionOptionsInput,\n} from './mongo-clustered-collection-options';\nimport { MongoCollationOptions, type MongoCollationOptionsInput } from './mongo-collation-options';\nimport {\n MongoIndexOptionDefaults,\n type MongoIndexOptionDefaultsInput,\n} from './mongo-index-option-defaults';\nimport {\n MongoTimeSeriesCollectionOptions,\n type MongoTimeSeriesCollectionOptionsInput,\n} from './mongo-time-series-collection-options';\n\n/**\n * Storage-shape sub-shape: only `name` is persisted on the storage\n * `clusteredIndex` field. The richer authoring vocabulary\n * (`MongoClusteredCollectionOptions.key`, `…unique`) is intentionally\n * not round-tripped through the on-disk JSON envelope — those fields\n * are application-side configuration that informs collection creation\n * but does not survive into the persisted collection options.\n */\nexport interface MongoStorageClusteredIndexShape {\n readonly name?: string;\n}\n\n/**\n * Storage-shape sub-shape: `capped` collections persist `size` (required)\n * and optionally `max` document count. The authoring DSL surface uses a\n * flat `capped: boolean` + separate `size` / `max` fields; builders\n * translate that authoring vocabulary into this nested storage form\n * before constructing {@link MongoCollectionOptions}.\n */\nexport interface MongoStorageCappedShape {\n readonly size: number;\n readonly max?: number;\n}\n\n/**\n * Hydration / construction input shape for {@link MongoCollectionOptions}.\n * Mirrors the on-disk storage JSON envelope exactly (nested `capped`,\n * `clusteredIndex`, …) so the family-base serializer's hydration walker\n * can hand an arktype-validated object literal straight to `new`.\n * Nested IR-class fields may be supplied as either plain data literals\n * (typical for JSON-derived input) or already-constructed class\n * instances (typical when re-wrapping during a partial walk).\n */\nexport interface MongoCollectionOptionsInput {\n readonly capped?: MongoStorageCappedShape;\n readonly storageEngine?: MongoJsonObject;\n readonly indexOptionDefaults?: MongoIndexOptionDefaults | MongoIndexOptionDefaultsInput;\n readonly collation?: MongoCollationOptions | MongoCollationOptionsInput;\n readonly timeseries?: MongoTimeSeriesCollectionOptions | MongoTimeSeriesCollectionOptionsInput;\n readonly clusteredIndex?: MongoStorageClusteredIndexShape;\n readonly expireAfterSeconds?: number;\n readonly changeStreamPreAndPostImages?:\n | MongoChangeStreamPreAndPostImagesOptions\n | MongoChangeStreamPreAndPostImagesOptionsInput;\n}\n\n/**\n * Authoring-side flat vocabulary accepted by the contract-ts builder\n * DSL (e.g. `capped: boolean` + separate `size` / `max` scalars). The\n * builder translates this surface into a {@link MongoCollectionOptionsInput}\n * before constructing {@link MongoCollectionOptions}. Kept as a\n * standalone type so authoring DSL ergonomics do not leak into the\n * storage IR construction contract.\n */\nexport interface MongoCollectionOptionsAuthoringInput {\n readonly capped?: boolean;\n readonly size?: number;\n readonly max?: number;\n readonly storageEngine?: MongoJsonObject;\n readonly indexOptionDefaults?: MongoIndexOptionDefaults | MongoIndexOptionDefaultsInput;\n readonly collation?: MongoCollationOptions | MongoCollationOptionsInput;\n readonly timeseries?: MongoTimeSeriesCollectionOptions | MongoTimeSeriesCollectionOptionsInput;\n readonly clusteredIndex?: MongoClusteredCollectionOptions | MongoClusteredCollectionOptionsInput;\n readonly expireAfterSeconds?: number;\n readonly changeStreamPreAndPostImages?:\n | MongoChangeStreamPreAndPostImagesOptions\n | MongoChangeStreamPreAndPostImagesOptionsInput;\n}\n\n/**\n * Mongo Contract IR node for collection-level creation options (the\n * second argument to `db.createCollection(name, options)`). Lifted from\n * the pre-M2R2 `MongoStorageCollectionOptions` storage interface to a\n * class extending `IRNodeBase` per FR18.\n *\n * Single concrete family-layer class (no target subclass). The\n * constructor accepts the storage JSON envelope shape ({@link\n * MongoCollectionOptionsInput}) so the family-base hydration walker\n * can pass arktype-validated objects directly to `new`. Authoring\n * vocabulary is translated to this shape upstream in the contract-ts\n * builder.\n *\n * Nested IR sub-shapes (collation, timeseries, …) are normalised to\n * their respective IR class instances inside the constructor so\n * downstream walks see a uniform AST regardless of whether the input\n * was a JSON literal or an already-constructed class.\n */\nexport class MongoCollectionOptions extends IRNodeBase {\n readonly kind = 'mongo-collection-options' as const;\n declare readonly capped?: MongoStorageCappedShape;\n declare readonly storageEngine?: MongoJsonObject;\n declare readonly indexOptionDefaults?: MongoIndexOptionDefaults;\n declare readonly collation?: MongoCollationOptions;\n declare readonly timeseries?: MongoTimeSeriesCollectionOptions;\n declare readonly clusteredIndex?: MongoStorageClusteredIndexShape;\n declare readonly expireAfterSeconds?: number;\n declare readonly changeStreamPreAndPostImages?: MongoChangeStreamPreAndPostImagesOptions;\n\n constructor(input: MongoCollectionOptionsInput = {}) {\n super();\n if (input.capped !== undefined) {\n this.capped = {\n size: input.capped.size,\n ...(input.capped.max != null && { max: input.capped.max }),\n };\n }\n if (input.storageEngine !== undefined) this.storageEngine = input.storageEngine;\n if (input.indexOptionDefaults !== undefined) {\n this.indexOptionDefaults =\n input.indexOptionDefaults instanceof MongoIndexOptionDefaults\n ? input.indexOptionDefaults\n : new MongoIndexOptionDefaults(input.indexOptionDefaults);\n }\n if (input.collation !== undefined) {\n this.collation =\n input.collation instanceof MongoCollationOptions\n ? input.collation\n : new MongoCollationOptions(input.collation);\n }\n if (input.timeseries !== undefined) {\n this.timeseries =\n input.timeseries instanceof MongoTimeSeriesCollectionOptions\n ? input.timeseries\n : new MongoTimeSeriesCollectionOptions(input.timeseries);\n }\n if (input.clusteredIndex !== undefined) {\n this.clusteredIndex =\n input.clusteredIndex.name !== undefined ? { name: input.clusteredIndex.name } : {};\n }\n if (input.expireAfterSeconds !== undefined) this.expireAfterSeconds = input.expireAfterSeconds;\n if (input.changeStreamPreAndPostImages !== undefined) {\n this.changeStreamPreAndPostImages =\n input.changeStreamPreAndPostImages instanceof MongoChangeStreamPreAndPostImagesOptions\n ? input.changeStreamPreAndPostImages\n : new MongoChangeStreamPreAndPostImagesOptions(input.changeStreamPreAndPostImages);\n }\n freezeNode(this);\n }\n}\n","import { freezeNode, IRNodeBase } from '@prisma-next/framework-components/ir';\nimport type { CollationOptions } from '@prisma-next/mongo-value/mongodb-types';\nimport type { MongoIndexKey } from '../contract-types';\n\n/**\n * Hydration / construction input shape for {@link MongoIndex}. Mirrors\n * the on-disk storage JSON envelope exactly so the family-base\n * serializer's hydration walker can hand an arktype-validated literal\n * straight to `new`.\n */\nexport interface MongoIndexInput {\n readonly keys: ReadonlyArray<MongoIndexKey>;\n readonly unique?: boolean;\n readonly sparse?: boolean;\n readonly expireAfterSeconds?: number;\n readonly partialFilterExpression?: Record<string, unknown>;\n readonly wildcardProjection?: Record<string, 0 | 1>;\n readonly collation?: CollationOptions;\n readonly weights?: Record<string, number>;\n readonly default_language?: string;\n readonly language_override?: string;\n}\n\n/**\n * Mongo Contract IR node for a single collection index entry (one\n * element of `MongoCollection.indexes`). Lifted from the\n * pre-M2R2 `MongoStorageIndex` storage interface to a class extending\n * `IRNodeBase` per FR18.\n *\n * Single concrete family-layer class (no target subclass). The spec's\n * `MongoTargetIndex extends MongoIndex` pattern remains additive — a\n * future Mongo target with target-specific index extensions is free to\n * subclass; for the single Mongo target shipped today a concrete\n * family-layer class is enough and avoids a target-import layering\n * violation from the contract-ts builder.\n */\nexport class MongoIndex extends IRNodeBase {\n readonly kind = 'mongo-index' as const;\n readonly keys: ReadonlyArray<MongoIndexKey>;\n declare readonly unique?: boolean;\n declare readonly sparse?: boolean;\n declare readonly expireAfterSeconds?: number;\n declare readonly partialFilterExpression?: Record<string, unknown>;\n declare readonly wildcardProjection?: Record<string, 0 | 1>;\n declare readonly collation?: CollationOptions;\n declare readonly weights?: Record<string, number>;\n declare readonly default_language?: string;\n declare readonly language_override?: string;\n\n constructor(input: MongoIndexInput) {\n super();\n this.keys = input.keys;\n if (input.unique !== undefined) this.unique = input.unique;\n if (input.sparse !== undefined) this.sparse = input.sparse;\n if (input.expireAfterSeconds !== undefined) this.expireAfterSeconds = input.expireAfterSeconds;\n if (input.partialFilterExpression !== undefined)\n this.partialFilterExpression = input.partialFilterExpression;\n if (input.wildcardProjection !== undefined) this.wildcardProjection = input.wildcardProjection;\n if (input.collation !== undefined) this.collation = input.collation;\n if (input.weights !== undefined) this.weights = input.weights;\n if (input.default_language !== undefined) this.default_language = input.default_language;\n if (input.language_override !== undefined) this.language_override = input.language_override;\n freezeNode(this);\n }\n}\n","import { freezeNode, IRNodeBase } from '@prisma-next/framework-components/ir';\n\nexport type MongoValidatorValidationLevel = 'strict' | 'moderate';\nexport type MongoValidatorValidationAction = 'error' | 'warn';\n\nexport interface MongoValidatorInput {\n readonly jsonSchema: Record<string, unknown>;\n readonly validationLevel: MongoValidatorValidationLevel;\n readonly validationAction: MongoValidatorValidationAction;\n}\n\n/**\n * Mongo Contract IR node for collection-level document validators (the\n * `validator` field on Mongo's `createCollection`). Lifted from the\n * pre-M2R2 `MongoStorageValidator` storage interface to a class extending\n * `IRNodeBase` per FR18.\n *\n * Concrete at the family layer (no target subclass). The spec's\n * abstract-family + target-concrete pattern (`MongoTargetValidator\n * extends MongoValidator`) becomes meaningful when a second Mongo target\n * introduces target-specific validator extensions (Atlas search rules,\n * DocumentDB-specific levels, …); for the single Mongo target shipped\n * today, a concrete family-layer class lets the PSL JSON-Schema deriver\n * and the contract-ts builder construct instances directly without a\n * target-import layering violation. Target subclassing remains additive\n * — a future `MongoTargetValidator extends MongoValidator` is an\n * additive change, not a breaking one.\n */\nexport class MongoValidator extends IRNodeBase {\n readonly kind = 'mongo-validator' as const;\n readonly jsonSchema: Record<string, unknown>;\n readonly validationLevel: MongoValidatorValidationLevel;\n readonly validationAction: MongoValidatorValidationAction;\n\n constructor(input: MongoValidatorInput) {\n super();\n this.jsonSchema = input.jsonSchema;\n this.validationLevel = input.validationLevel;\n this.validationAction = input.validationAction;\n freezeNode(this);\n }\n}\n","import type { ControlPolicy } from '@prisma-next/contract/types';\nimport { freezeNode, IRNodeBase } from '@prisma-next/framework-components/ir';\nimport {\n MongoCollectionOptions,\n type MongoCollectionOptionsInput,\n} from './mongo-collection-options';\nimport { MongoIndex, type MongoIndexInput } from './mongo-index';\nimport { MongoValidator, type MongoValidatorInput } from './mongo-validator';\n\n/**\n * Hydration / construction input shape for {@link MongoCollection}.\n * Mirrors the on-disk storage JSON envelope exactly (the value held at\n * `contract.storage.namespaces[<namespaceId>].entries.collection[<name>]`) so the family-base\n * serializer's hydration walker can hand an arktype-validated literal\n * straight to `new`. Nested IR-class fields may be supplied as either\n * plain data literals (typical for JSON-derived input) or\n * already-constructed class instances.\n */\nexport interface MongoCollectionInput {\n readonly indexes?: ReadonlyArray<MongoIndex | MongoIndexInput>;\n readonly validator?: MongoValidator | MongoValidatorInput;\n readonly options?: MongoCollectionOptions | MongoCollectionOptionsInput;\n readonly control?: ControlPolicy;\n}\n\n/**\n * Mongo Contract IR node for a single collection entry in a namespace's\n * `collections` map. Lifted from the pre-M2R2\n * `MongoStorageCollection` storage interface to a class extending\n * `IRNodeBase` per FR18.\n *\n * Concrete at the family layer (no target subclass). The spec's\n * `MongoTargetCollection extends MongoCollection` pattern remains\n * additive: a future Mongo target with target-specific extensions is\n * free to subclass without breaking the family-layer construction\n * sites.\n *\n * The unprefixed name `MongoCollection` is now the contract IR class.\n * Note that `@prisma-next/mongo-orm` also exports a (different)\n * `MongoCollection<TContract, ModelName>` generic for the user-facing\n * ORM query builder; the two live in separate packages and are\n * resolved by import path. A source file that needs both should alias\n * one (e.g. `import { MongoCollection as MongoContractCollection }\n * from '@prisma-next/mongo-contract'`).\n */\nexport class MongoCollection extends IRNodeBase {\n readonly kind = 'mongo-collection' as const;\n declare readonly indexes?: ReadonlyArray<MongoIndex>;\n declare readonly validator?: MongoValidator;\n declare readonly options?: MongoCollectionOptions;\n declare readonly control?: ControlPolicy;\n\n constructor(input: MongoCollectionInput = {}) {\n super();\n if (input.indexes !== undefined) {\n this.indexes = input.indexes.map((idx) =>\n idx instanceof MongoIndex ? idx : new MongoIndex(idx),\n );\n }\n if (input.validator !== undefined) {\n this.validator =\n input.validator instanceof MongoValidator\n ? input.validator\n : new MongoValidator(input.validator);\n }\n if (input.options !== undefined) {\n this.options =\n input.options instanceof MongoCollectionOptions\n ? input.options\n : new MongoCollectionOptions(input.options);\n }\n if (input.control !== undefined) this.control = input.control;\n freezeNode(this);\n }\n}\n","import type {\n AnyEntityKindDescriptor,\n EntityKindDescriptor,\n} from '@prisma-next/framework-components/ir';\nimport { StorageCollectionSchema } from './contract-schema';\nimport { MongoCollection, type MongoCollectionInput } from './ir/mongo-collection';\n\nexport const collectionEntityKind: EntityKindDescriptor<MongoCollectionInput, MongoCollection> = {\n kind: 'collection',\n schema: StorageCollectionSchema,\n construct: (input) => new MongoCollection(input),\n};\n\n/**\n * Assembles the `kind → descriptor` registry for Mongo namespaces: the built-in\n * `collection` kind plus any target `packKinds`. This builds the lookup table —\n * it does not touch contract data. `hydrateNamespaceEntities` later consumes\n * this registry to turn a namespace's raw entries into IR instances. Throws on\n * a duplicate kind.\n */\nexport function composeMongoEntityKinds(\n packKinds: readonly AnyEntityKindDescriptor[] = [],\n): ReadonlyMap<string, AnyEntityKindDescriptor> {\n const kinds = new Map<string, AnyEntityKindDescriptor>([['collection', collectionEntityKind]]);\n for (const descriptor of packKinds) {\n if (kinds.has(descriptor.kind)) {\n throw new Error(\n `composeMongoEntityKinds: duplicate entity kind \"${descriptor.kind}\" — each kind may be registered only once`,\n );\n }\n kinds.set(descriptor.kind, descriptor);\n }\n return kinds;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mongo-collection-BCi-Bq_a.d.mts","names":[],"sources":["../src/ir/mongo-collation-options.ts","../src/ir/mongo-index-options.ts","../src/contract-types.ts","../src/ir/mongo-change-stream-pre-and-post-images-options.ts","../src/ir/mongo-clustered-collection-options.ts","../src/ir/mongo-index-option-defaults.ts","../src/ir/mongo-time-series-collection-options.ts","../src/ir/mongo-collection-options.ts","../src/ir/mongo-index.ts","../src/ir/mongo-validator.ts","../src/ir/mongo-collection.ts"],"mappings":"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"}