@prisma-next/mongo-schema-ir 0.7.0-dev.7 → 0.8.0-dev.1

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.
@@ -1,3 +1,4 @@
1
+ import { IRNodeBase } from "@prisma-next/framework-components/ir";
1
2
  import { MongoIndexKey } from "@prisma-next/mongo-contract";
2
3
 
3
4
  //#region src/canonicalize.d.ts
@@ -22,7 +23,7 @@ interface MongoSchemaCollectionOptionsInput {
22
23
  name?: string;
23
24
  };
24
25
  }
25
- declare class MongoSchemaCollectionOptions extends MongoSchemaNode {
26
+ declare class MongoSchemaCollectionOptions extends MongoSchemaIRNode {
26
27
  readonly kind: "collectionOptions";
27
28
  readonly capped?: {
28
29
  size: number;
@@ -50,7 +51,7 @@ interface MongoSchemaValidatorOptions {
50
51
  readonly validationLevel: 'strict' | 'moderate';
51
52
  readonly validationAction: 'error' | 'warn';
52
53
  }
53
- declare class MongoSchemaValidator extends MongoSchemaNode {
54
+ declare class MongoSchemaValidator extends MongoSchemaIRNode {
54
55
  readonly kind: "validator";
55
56
  readonly jsonSchema: Record<string, unknown>;
56
57
  readonly validationLevel: 'strict' | 'moderate';
@@ -66,7 +67,7 @@ interface MongoSchemaCollectionCtorOptions {
66
67
  readonly validator?: MongoSchemaValidator;
67
68
  readonly options?: MongoSchemaCollectionOptions;
68
69
  }
69
- declare class MongoSchemaCollection extends MongoSchemaNode {
70
+ declare class MongoSchemaCollection extends MongoSchemaIRNode {
70
71
  readonly kind: "collection";
71
72
  readonly name: string;
72
73
  readonly indexes: ReadonlyArray<MongoSchemaIndex>;
@@ -77,7 +78,7 @@ declare class MongoSchemaCollection extends MongoSchemaNode {
77
78
  }
78
79
  //#endregion
79
80
  //#region src/schema-ir.d.ts
80
- declare class MongoSchemaIR extends MongoSchemaNode {
81
+ declare class MongoSchemaIR extends MongoSchemaIRNode {
81
82
  readonly kind: "schema";
82
83
  readonly collections: ReadonlyArray<MongoSchemaCollection>;
83
84
  readonly collectionNames: ReadonlyArray<string>;
@@ -97,10 +98,8 @@ interface MongoSchemaVisitor<R> {
97
98
  }
98
99
  //#endregion
99
100
  //#region src/schema-node.d.ts
100
- declare abstract class MongoSchemaNode {
101
- abstract readonly kind: string;
101
+ declare abstract class MongoSchemaIRNode extends IRNodeBase {
102
102
  abstract accept<R>(visitor: MongoSchemaVisitor<R>): R;
103
- protected freeze(): void;
104
103
  }
105
104
  //#endregion
106
105
  //#region src/schema-index.d.ts
@@ -116,7 +115,7 @@ interface MongoSchemaIndexOptions {
116
115
  readonly default_language?: string | undefined;
117
116
  readonly language_override?: string | undefined;
118
117
  }
119
- declare class MongoSchemaIndex extends MongoSchemaNode {
118
+ declare class MongoSchemaIndex extends MongoSchemaIRNode {
120
119
  readonly kind: "index";
121
120
  readonly keys: ReadonlyArray<MongoIndexKey>;
122
121
  readonly unique: boolean;
@@ -143,5 +142,5 @@ declare function indexesEquivalent(a: MongoSchemaIndex, b: MongoSchemaIndex): bo
143
142
  //#region src/types.d.ts
144
143
  type AnyMongoSchemaNode = MongoSchemaIR | MongoSchemaCollection | MongoSchemaCollectionOptions | MongoSchemaIndex | MongoSchemaValidator;
145
144
  //#endregion
146
- export { type AnyMongoSchemaNode, MongoSchemaCollection, type MongoSchemaCollectionCtorOptions, MongoSchemaCollectionOptions, type MongoSchemaCollectionOptionsInput, MongoSchemaIR, MongoSchemaIndex, type MongoSchemaIndexOptions, MongoSchemaNode, MongoSchemaValidator, type MongoSchemaValidatorOptions, type MongoSchemaVisitor, canonicalize, deepEqual, indexesEquivalent };
145
+ export { type AnyMongoSchemaNode, MongoSchemaCollection, type MongoSchemaCollectionCtorOptions, MongoSchemaCollectionOptions, type MongoSchemaCollectionOptionsInput, MongoSchemaIR, MongoSchemaIRNode, MongoSchemaIndex, type MongoSchemaIndexOptions, MongoSchemaValidator, type MongoSchemaValidatorOptions, type MongoSchemaVisitor, canonicalize, deepEqual, indexesEquivalent };
147
146
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/canonicalize.ts","../../src/schema-collection-options.ts","../../src/schema-validator.ts","../../src/schema-collection.ts","../../src/schema-ir.ts","../../src/visitor.ts","../../src/schema-node.ts","../../src/schema-index.ts","../../src/index-equivalence.ts","../../src/types.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/canonicalize.ts","../../src/schema-collection-options.ts","../../src/schema-validator.ts","../../src/schema-collection.ts","../../src/schema-ir.ts","../../src/visitor.ts","../../src/schema-node.ts","../../src/schema-index.ts","../../src/index-equivalence.ts","../../src/types.ts"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { IRNodeBase, freezeNode } from "@prisma-next/framework-components/ir";
1
2
  //#region src/canonicalize.ts
2
3
  function canonicalize(obj) {
3
4
  if (obj === null) return "null";
@@ -61,14 +62,10 @@ function indexesEquivalent(a, b) {
61
62
  }
62
63
  //#endregion
63
64
  //#region src/schema-node.ts
64
- var MongoSchemaNode = class {
65
- freeze() {
66
- Object.freeze(this);
67
- }
68
- };
65
+ var MongoSchemaIRNode = class extends IRNodeBase {};
69
66
  //#endregion
70
67
  //#region src/schema-collection.ts
71
- var MongoSchemaCollection = class extends MongoSchemaNode {
68
+ var MongoSchemaCollection = class extends MongoSchemaIRNode {
72
69
  kind = "collection";
73
70
  name;
74
71
  indexes;
@@ -80,7 +77,7 @@ var MongoSchemaCollection = class extends MongoSchemaNode {
80
77
  this.indexes = options.indexes ?? [];
81
78
  this.validator = options.validator;
82
79
  this.options = options.options;
83
- this.freeze();
80
+ freezeNode(this);
84
81
  }
85
82
  accept(visitor) {
86
83
  return visitor.collection(this);
@@ -88,7 +85,7 @@ var MongoSchemaCollection = class extends MongoSchemaNode {
88
85
  };
89
86
  //#endregion
90
87
  //#region src/schema-collection-options.ts
91
- var MongoSchemaCollectionOptions = class extends MongoSchemaNode {
88
+ var MongoSchemaCollectionOptions = class extends MongoSchemaIRNode {
92
89
  kind = "collectionOptions";
93
90
  capped;
94
91
  timeseries;
@@ -102,7 +99,7 @@ var MongoSchemaCollectionOptions = class extends MongoSchemaNode {
102
99
  this.collation = options.collation;
103
100
  this.changeStreamPreAndPostImages = options.changeStreamPreAndPostImages;
104
101
  this.clusteredIndex = options.clusteredIndex;
105
- this.freeze();
102
+ freezeNode(this);
106
103
  }
107
104
  accept(visitor) {
108
105
  return visitor.collectionOptions(this);
@@ -110,7 +107,7 @@ var MongoSchemaCollectionOptions = class extends MongoSchemaNode {
110
107
  };
111
108
  //#endregion
112
109
  //#region src/schema-index.ts
113
- var MongoSchemaIndex = class extends MongoSchemaNode {
110
+ var MongoSchemaIndex = class extends MongoSchemaIRNode {
114
111
  kind = "index";
115
112
  keys;
116
113
  unique;
@@ -134,7 +131,7 @@ var MongoSchemaIndex = class extends MongoSchemaNode {
134
131
  this.weights = options.weights;
135
132
  this.default_language = options.default_language;
136
133
  this.language_override = options.language_override;
137
- this.freeze();
134
+ freezeNode(this);
138
135
  }
139
136
  accept(visitor) {
140
137
  return visitor.index(this);
@@ -142,7 +139,7 @@ var MongoSchemaIndex = class extends MongoSchemaNode {
142
139
  };
143
140
  //#endregion
144
141
  //#region src/schema-ir.ts
145
- var MongoSchemaIR = class extends MongoSchemaNode {
142
+ var MongoSchemaIR = class extends MongoSchemaIRNode {
146
143
  kind = "schema";
147
144
  collections;
148
145
  collectionNames;
@@ -153,7 +150,7 @@ var MongoSchemaIR = class extends MongoSchemaNode {
153
150
  this.collections = sorted;
154
151
  this._byName = new Map(sorted.map((c) => [c.name, c]));
155
152
  this.collectionNames = sorted.map((c) => c.name);
156
- this.freeze();
153
+ freezeNode(this);
157
154
  }
158
155
  accept(visitor) {
159
156
  return visitor.schema(this);
@@ -164,7 +161,7 @@ var MongoSchemaIR = class extends MongoSchemaNode {
164
161
  };
165
162
  //#endregion
166
163
  //#region src/schema-validator.ts
167
- var MongoSchemaValidator = class extends MongoSchemaNode {
164
+ var MongoSchemaValidator = class extends MongoSchemaIRNode {
168
165
  kind = "validator";
169
166
  jsonSchema;
170
167
  validationLevel;
@@ -174,13 +171,13 @@ var MongoSchemaValidator = class extends MongoSchemaNode {
174
171
  this.jsonSchema = options.jsonSchema;
175
172
  this.validationLevel = options.validationLevel;
176
173
  this.validationAction = options.validationAction;
177
- this.freeze();
174
+ freezeNode(this);
178
175
  }
179
176
  accept(visitor) {
180
177
  return visitor.validator(this);
181
178
  }
182
179
  };
183
180
  //#endregion
184
- export { MongoSchemaCollection, MongoSchemaCollectionOptions, MongoSchemaIR, MongoSchemaIndex, MongoSchemaNode, MongoSchemaValidator, canonicalize, deepEqual, indexesEquivalent };
181
+ export { MongoSchemaCollection, MongoSchemaCollectionOptions, MongoSchemaIR, MongoSchemaIRNode, MongoSchemaIndex, MongoSchemaValidator, canonicalize, deepEqual, indexesEquivalent };
185
182
 
186
183
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/canonicalize.ts","../../src/index-equivalence.ts","../../src/schema-node.ts","../../src/schema-collection.ts","../../src/schema-collection-options.ts","../../src/schema-index.ts","../../src/schema-ir.ts","../../src/schema-validator.ts"],"sourcesContent":["export function canonicalize(obj: unknown): string {\n if (obj === null) return 'null';\n if (obj === undefined) return 'undefined';\n if (typeof obj !== 'object') return JSON.stringify(obj);\n if (Array.isArray(obj)) return `[${obj.map(canonicalize).join(',')}]`;\n const record = obj as Record<string, unknown>;\n const sorted = Object.keys(record).sort();\n const entries = sorted.map((k) => `${JSON.stringify(k)}:${canonicalize(record[k])}`);\n return `{${entries.join(',')}}`;\n}\n","import { canonicalize } from './canonicalize';\nimport type { MongoSchemaIndex } from './schema-index';\n\n/**\n * Key-order-sensitive structural comparison. For key-order-independent\n * comparison (e.g. lookup key construction), use {@link canonicalize}.\n */\nexport function deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a === null || b === null) return false;\n if (a === undefined || b === undefined) return false;\n if (typeof a !== typeof b) return false;\n\n if (Array.isArray(a)) {\n if (!Array.isArray(b)) return false;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i])) return false;\n }\n return true;\n }\n\n if (typeof a === 'object' && typeof b === 'object') {\n const aObj = a as Record<string, unknown>;\n const bObj = b as Record<string, unknown>;\n const aKeys = Object.keys(aObj);\n const bKeys = Object.keys(bObj);\n if (aKeys.length !== bKeys.length) return false;\n for (let i = 0; i < aKeys.length; i++) {\n if (aKeys[i] !== bKeys[i]) return false;\n const key = aKeys[i] as string;\n if (!deepEqual(aObj[key], bObj[key])) return false;\n }\n return true;\n }\n\n return false;\n}\n\nexport function indexesEquivalent(a: MongoSchemaIndex, b: MongoSchemaIndex): boolean {\n if (a.keys.length !== b.keys.length) return false;\n for (let i = 0; i < a.keys.length; i++) {\n const aKey = a.keys[i];\n const bKey = b.keys[i];\n if (!aKey || !bKey) return false;\n if (aKey.field !== bKey.field) return false;\n if (aKey.direction !== bKey.direction) return false;\n }\n if (a.unique !== b.unique) return false;\n if (a.sparse !== b.sparse) return false;\n if (a.expireAfterSeconds !== b.expireAfterSeconds) return false;\n if (canonicalize(a.partialFilterExpression) !== canonicalize(b.partialFilterExpression))\n return false;\n if (canonicalize(a.wildcardProjection) !== canonicalize(b.wildcardProjection)) return false;\n if (canonicalize(a.collation) !== canonicalize(b.collation)) return false;\n if (canonicalize(a.weights) !== canonicalize(b.weights)) return false;\n if (a.default_language !== b.default_language) return false;\n if (a.language_override !== b.language_override) return false;\n return true;\n}\n","import type { MongoSchemaVisitor } from './visitor';\n\nexport abstract class MongoSchemaNode {\n abstract readonly kind: string;\n\n abstract accept<R>(visitor: MongoSchemaVisitor<R>): R;\n\n protected freeze(): void {\n Object.freeze(this);\n }\n}\n","import type { MongoSchemaCollectionOptions } from './schema-collection-options';\nimport type { MongoSchemaIndex } from './schema-index';\nimport { MongoSchemaNode } from './schema-node';\nimport type { MongoSchemaValidator } from './schema-validator';\nimport type { MongoSchemaVisitor } from './visitor';\n\nexport interface MongoSchemaCollectionCtorOptions {\n readonly name: string;\n readonly indexes?: ReadonlyArray<MongoSchemaIndex>;\n readonly validator?: MongoSchemaValidator;\n readonly options?: MongoSchemaCollectionOptions;\n}\n\nexport class MongoSchemaCollection extends MongoSchemaNode {\n readonly kind = 'collection' as const;\n readonly name: string;\n readonly indexes: ReadonlyArray<MongoSchemaIndex>;\n readonly validator?: MongoSchemaValidator | undefined;\n readonly options?: MongoSchemaCollectionOptions | undefined;\n\n constructor(options: MongoSchemaCollectionCtorOptions) {\n super();\n this.name = options.name;\n this.indexes = options.indexes ?? [];\n this.validator = options.validator;\n this.options = options.options;\n this.freeze();\n }\n\n accept<R>(visitor: MongoSchemaVisitor<R>): R {\n return visitor.collection(this);\n }\n}\n","import { MongoSchemaNode } from './schema-node';\nimport type { MongoSchemaVisitor } from './visitor';\n\nexport interface MongoSchemaCollectionOptionsInput {\n readonly capped?: { size: number; max?: number };\n readonly timeseries?: {\n timeField: string;\n metaField?: string;\n granularity?: 'seconds' | 'minutes' | 'hours';\n };\n readonly collation?: Record<string, unknown>;\n readonly changeStreamPreAndPostImages?: { enabled: boolean };\n readonly clusteredIndex?: { name?: string };\n}\n\nexport class MongoSchemaCollectionOptions extends MongoSchemaNode {\n readonly kind = 'collectionOptions' as const;\n readonly capped?: { size: number; max?: number } | undefined;\n readonly timeseries?:\n | { timeField: string; metaField?: string; granularity?: 'seconds' | 'minutes' | 'hours' }\n | undefined;\n readonly collation?: Record<string, unknown> | undefined;\n readonly changeStreamPreAndPostImages?: { enabled: boolean } | undefined;\n readonly clusteredIndex?: { name?: string } | undefined;\n\n constructor(options: MongoSchemaCollectionOptionsInput) {\n super();\n this.capped = options.capped;\n this.timeseries = options.timeseries;\n this.collation = options.collation;\n this.changeStreamPreAndPostImages = options.changeStreamPreAndPostImages;\n this.clusteredIndex = options.clusteredIndex;\n this.freeze();\n }\n\n accept<R>(visitor: MongoSchemaVisitor<R>): R {\n return visitor.collectionOptions(this);\n }\n}\n","import type { MongoIndexKey } from '@prisma-next/mongo-contract';\nimport { MongoSchemaNode } from './schema-node';\nimport type { MongoSchemaVisitor } from './visitor';\n\nexport interface MongoSchemaIndexOptions {\n readonly keys: ReadonlyArray<MongoIndexKey>;\n readonly unique?: boolean | undefined;\n readonly sparse?: boolean | undefined;\n readonly expireAfterSeconds?: number | undefined;\n readonly partialFilterExpression?: Record<string, unknown> | undefined;\n readonly wildcardProjection?: Record<string, 0 | 1> | undefined;\n readonly collation?: Record<string, unknown> | undefined;\n readonly weights?: Record<string, number> | undefined;\n readonly default_language?: string | undefined;\n readonly language_override?: string | undefined;\n}\n\nexport class MongoSchemaIndex extends MongoSchemaNode {\n readonly kind = 'index' as const;\n readonly keys: ReadonlyArray<MongoIndexKey>;\n readonly unique: boolean;\n readonly sparse?: boolean | undefined;\n readonly expireAfterSeconds?: number | undefined;\n readonly partialFilterExpression?: Record<string, unknown> | undefined;\n readonly wildcardProjection?: Record<string, 0 | 1> | undefined;\n readonly collation?: Record<string, unknown> | undefined;\n readonly weights?: Record<string, number> | undefined;\n readonly default_language?: string | undefined;\n readonly language_override?: string | undefined;\n\n constructor(options: MongoSchemaIndexOptions) {\n super();\n this.keys = options.keys;\n this.unique = options.unique ?? false;\n this.sparse = options.sparse;\n this.expireAfterSeconds = options.expireAfterSeconds;\n this.partialFilterExpression = options.partialFilterExpression;\n this.wildcardProjection = options.wildcardProjection;\n this.collation = options.collation;\n this.weights = options.weights;\n this.default_language = options.default_language;\n this.language_override = options.language_override;\n this.freeze();\n }\n\n accept<R>(visitor: MongoSchemaVisitor<R>): R {\n return visitor.index(this);\n }\n}\n","import type { MongoSchemaCollection } from './schema-collection';\nimport { MongoSchemaNode } from './schema-node';\nimport type { MongoSchemaVisitor } from './visitor';\n\nexport class MongoSchemaIR extends MongoSchemaNode {\n readonly kind = 'schema' as const;\n readonly collections: ReadonlyArray<MongoSchemaCollection>;\n readonly collectionNames: ReadonlyArray<string>;\n\n private readonly _byName: Map<string, MongoSchemaCollection>;\n\n constructor(collections: ReadonlyArray<MongoSchemaCollection>) {\n super();\n const sorted = [...collections].sort((a, b) => a.name.localeCompare(b.name));\n this.collections = sorted;\n this._byName = new Map(sorted.map((c) => [c.name, c]));\n this.collectionNames = sorted.map((c) => c.name);\n this.freeze();\n }\n\n accept<R>(visitor: MongoSchemaVisitor<R>): R {\n return visitor.schema(this);\n }\n\n collection(name: string): MongoSchemaCollection | undefined {\n return this._byName.get(name);\n }\n}\n","import { MongoSchemaNode } from './schema-node';\nimport type { MongoSchemaVisitor } from './visitor';\n\nexport interface MongoSchemaValidatorOptions {\n readonly jsonSchema: Record<string, unknown>;\n readonly validationLevel: 'strict' | 'moderate';\n readonly validationAction: 'error' | 'warn';\n}\n\nexport class MongoSchemaValidator extends MongoSchemaNode {\n readonly kind = 'validator' as const;\n readonly jsonSchema: Record<string, unknown>;\n readonly validationLevel: 'strict' | 'moderate';\n readonly validationAction: 'error' | 'warn';\n\n constructor(options: MongoSchemaValidatorOptions) {\n super();\n this.jsonSchema = options.jsonSchema;\n this.validationLevel = options.validationLevel;\n this.validationAction = options.validationAction;\n this.freeze();\n }\n\n accept<R>(visitor: MongoSchemaVisitor<R>): R {\n return visitor.validator(this);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/canonicalize.ts","../../src/index-equivalence.ts","../../src/schema-node.ts","../../src/schema-collection.ts","../../src/schema-collection-options.ts","../../src/schema-index.ts","../../src/schema-ir.ts","../../src/schema-validator.ts"],"sourcesContent":["export function canonicalize(obj: unknown): string {\n if (obj === null) return 'null';\n if (obj === undefined) return 'undefined';\n if (typeof obj !== 'object') return JSON.stringify(obj);\n if (Array.isArray(obj)) return `[${obj.map(canonicalize).join(',')}]`;\n const record = obj as Record<string, unknown>;\n const sorted = Object.keys(record).sort();\n const entries = sorted.map((k) => `${JSON.stringify(k)}:${canonicalize(record[k])}`);\n return `{${entries.join(',')}}`;\n}\n","import { canonicalize } from './canonicalize';\nimport type { MongoSchemaIndex } from './schema-index';\n\n/**\n * Key-order-sensitive structural comparison. For key-order-independent\n * comparison (e.g. lookup key construction), use {@link canonicalize}.\n */\nexport function deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a === null || b === null) return false;\n if (a === undefined || b === undefined) return false;\n if (typeof a !== typeof b) return false;\n\n if (Array.isArray(a)) {\n if (!Array.isArray(b)) return false;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i])) return false;\n }\n return true;\n }\n\n if (typeof a === 'object' && typeof b === 'object') {\n const aObj = a as Record<string, unknown>;\n const bObj = b as Record<string, unknown>;\n const aKeys = Object.keys(aObj);\n const bKeys = Object.keys(bObj);\n if (aKeys.length !== bKeys.length) return false;\n for (let i = 0; i < aKeys.length; i++) {\n if (aKeys[i] !== bKeys[i]) return false;\n const key = aKeys[i] as string;\n if (!deepEqual(aObj[key], bObj[key])) return false;\n }\n return true;\n }\n\n return false;\n}\n\nexport function indexesEquivalent(a: MongoSchemaIndex, b: MongoSchemaIndex): boolean {\n if (a.keys.length !== b.keys.length) return false;\n for (let i = 0; i < a.keys.length; i++) {\n const aKey = a.keys[i];\n const bKey = b.keys[i];\n if (!aKey || !bKey) return false;\n if (aKey.field !== bKey.field) return false;\n if (aKey.direction !== bKey.direction) return false;\n }\n if (a.unique !== b.unique) return false;\n if (a.sparse !== b.sparse) return false;\n if (a.expireAfterSeconds !== b.expireAfterSeconds) return false;\n if (canonicalize(a.partialFilterExpression) !== canonicalize(b.partialFilterExpression))\n return false;\n if (canonicalize(a.wildcardProjection) !== canonicalize(b.wildcardProjection)) return false;\n if (canonicalize(a.collation) !== canonicalize(b.collation)) return false;\n if (canonicalize(a.weights) !== canonicalize(b.weights)) return false;\n if (a.default_language !== b.default_language) return false;\n if (a.language_override !== b.language_override) return false;\n return true;\n}\n","import { IRNodeBase } from '@prisma-next/framework-components/ir';\nimport type { MongoSchemaVisitor } from './visitor';\n\nexport abstract class MongoSchemaIRNode extends IRNodeBase {\n abstract accept<R>(visitor: MongoSchemaVisitor<R>): R;\n}\n","import { freezeNode } from '@prisma-next/framework-components/ir';\nimport type { MongoSchemaCollectionOptions } from './schema-collection-options';\nimport type { MongoSchemaIndex } from './schema-index';\nimport { MongoSchemaIRNode } from './schema-node';\nimport type { MongoSchemaValidator } from './schema-validator';\nimport type { MongoSchemaVisitor } from './visitor';\n\nexport interface MongoSchemaCollectionCtorOptions {\n readonly name: string;\n readonly indexes?: ReadonlyArray<MongoSchemaIndex>;\n readonly validator?: MongoSchemaValidator;\n readonly options?: MongoSchemaCollectionOptions;\n}\n\nexport class MongoSchemaCollection extends MongoSchemaIRNode {\n readonly kind = 'collection' as const;\n readonly name: string;\n readonly indexes: ReadonlyArray<MongoSchemaIndex>;\n readonly validator?: MongoSchemaValidator | undefined;\n readonly options?: MongoSchemaCollectionOptions | undefined;\n\n constructor(options: MongoSchemaCollectionCtorOptions) {\n super();\n this.name = options.name;\n this.indexes = options.indexes ?? [];\n this.validator = options.validator;\n this.options = options.options;\n freezeNode(this);\n }\n\n accept<R>(visitor: MongoSchemaVisitor<R>): R {\n return visitor.collection(this);\n }\n}\n","import { freezeNode } from '@prisma-next/framework-components/ir';\nimport { MongoSchemaIRNode } from './schema-node';\nimport type { MongoSchemaVisitor } from './visitor';\n\nexport interface MongoSchemaCollectionOptionsInput {\n readonly capped?: { size: number; max?: number };\n readonly timeseries?: {\n timeField: string;\n metaField?: string;\n granularity?: 'seconds' | 'minutes' | 'hours';\n };\n readonly collation?: Record<string, unknown>;\n readonly changeStreamPreAndPostImages?: { enabled: boolean };\n readonly clusteredIndex?: { name?: string };\n}\n\nexport class MongoSchemaCollectionOptions extends MongoSchemaIRNode {\n readonly kind = 'collectionOptions' as const;\n readonly capped?: { size: number; max?: number } | undefined;\n readonly timeseries?:\n | { timeField: string; metaField?: string; granularity?: 'seconds' | 'minutes' | 'hours' }\n | undefined;\n readonly collation?: Record<string, unknown> | undefined;\n readonly changeStreamPreAndPostImages?: { enabled: boolean } | undefined;\n readonly clusteredIndex?: { name?: string } | undefined;\n\n constructor(options: MongoSchemaCollectionOptionsInput) {\n super();\n this.capped = options.capped;\n this.timeseries = options.timeseries;\n this.collation = options.collation;\n this.changeStreamPreAndPostImages = options.changeStreamPreAndPostImages;\n this.clusteredIndex = options.clusteredIndex;\n freezeNode(this);\n }\n\n accept<R>(visitor: MongoSchemaVisitor<R>): R {\n return visitor.collectionOptions(this);\n }\n}\n","import { freezeNode } from '@prisma-next/framework-components/ir';\nimport type { MongoIndexKey } from '@prisma-next/mongo-contract';\nimport { MongoSchemaIRNode } from './schema-node';\nimport type { MongoSchemaVisitor } from './visitor';\n\nexport interface MongoSchemaIndexOptions {\n readonly keys: ReadonlyArray<MongoIndexKey>;\n readonly unique?: boolean | undefined;\n readonly sparse?: boolean | undefined;\n readonly expireAfterSeconds?: number | undefined;\n readonly partialFilterExpression?: Record<string, unknown> | undefined;\n readonly wildcardProjection?: Record<string, 0 | 1> | undefined;\n readonly collation?: Record<string, unknown> | undefined;\n readonly weights?: Record<string, number> | undefined;\n readonly default_language?: string | undefined;\n readonly language_override?: string | undefined;\n}\n\nexport class MongoSchemaIndex extends MongoSchemaIRNode {\n readonly kind = 'index' as const;\n readonly keys: ReadonlyArray<MongoIndexKey>;\n readonly unique: boolean;\n readonly sparse?: boolean | undefined;\n readonly expireAfterSeconds?: number | undefined;\n readonly partialFilterExpression?: Record<string, unknown> | undefined;\n readonly wildcardProjection?: Record<string, 0 | 1> | undefined;\n readonly collation?: Record<string, unknown> | undefined;\n readonly weights?: Record<string, number> | undefined;\n readonly default_language?: string | undefined;\n readonly language_override?: string | undefined;\n\n constructor(options: MongoSchemaIndexOptions) {\n super();\n this.keys = options.keys;\n this.unique = options.unique ?? false;\n this.sparse = options.sparse;\n this.expireAfterSeconds = options.expireAfterSeconds;\n this.partialFilterExpression = options.partialFilterExpression;\n this.wildcardProjection = options.wildcardProjection;\n this.collation = options.collation;\n this.weights = options.weights;\n this.default_language = options.default_language;\n this.language_override = options.language_override;\n freezeNode(this);\n }\n\n accept<R>(visitor: MongoSchemaVisitor<R>): R {\n return visitor.index(this);\n }\n}\n","import { freezeNode } from '@prisma-next/framework-components/ir';\nimport type { MongoSchemaCollection } from './schema-collection';\nimport { MongoSchemaIRNode } from './schema-node';\nimport type { MongoSchemaVisitor } from './visitor';\n\nexport class MongoSchemaIR extends MongoSchemaIRNode {\n readonly kind = 'schema' as const;\n readonly collections: ReadonlyArray<MongoSchemaCollection>;\n readonly collectionNames: ReadonlyArray<string>;\n\n private readonly _byName: Map<string, MongoSchemaCollection>;\n\n constructor(collections: ReadonlyArray<MongoSchemaCollection>) {\n super();\n const sorted = [...collections].sort((a, b) => a.name.localeCompare(b.name));\n this.collections = sorted;\n this._byName = new Map(sorted.map((c) => [c.name, c]));\n this.collectionNames = sorted.map((c) => c.name);\n freezeNode(this);\n }\n\n accept<R>(visitor: MongoSchemaVisitor<R>): R {\n return visitor.schema(this);\n }\n\n collection(name: string): MongoSchemaCollection | undefined {\n return this._byName.get(name);\n }\n}\n","import { freezeNode } from '@prisma-next/framework-components/ir';\nimport { MongoSchemaIRNode } from './schema-node';\nimport type { MongoSchemaVisitor } from './visitor';\n\nexport interface MongoSchemaValidatorOptions {\n readonly jsonSchema: Record<string, unknown>;\n readonly validationLevel: 'strict' | 'moderate';\n readonly validationAction: 'error' | 'warn';\n}\n\nexport class MongoSchemaValidator extends MongoSchemaIRNode {\n readonly kind = 'validator' as const;\n readonly jsonSchema: Record<string, unknown>;\n readonly validationLevel: 'strict' | 'moderate';\n readonly validationAction: 'error' | 'warn';\n\n constructor(options: MongoSchemaValidatorOptions) {\n super();\n this.jsonSchema = options.jsonSchema;\n this.validationLevel = options.validationLevel;\n this.validationAction = options.validationAction;\n freezeNode(this);\n }\n\n accept<R>(visitor: MongoSchemaVisitor<R>): R {\n return visitor.validator(this);\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,17 +1,18 @@
1
1
  {
2
2
  "name": "@prisma-next/mongo-schema-ir",
3
- "version": "0.7.0-dev.7",
3
+ "version": "0.8.0-dev.1",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
7
  "description": "MongoDB schema IR AST for migration diffing",
8
8
  "dependencies": {
9
- "@prisma-next/mongo-contract": "0.7.0-dev.7"
9
+ "@prisma-next/framework-components": "0.8.0-dev.1",
10
+ "@prisma-next/mongo-contract": "0.8.0-dev.1"
10
11
  },
11
12
  "devDependencies": {
12
- "@prisma-next/test-utils": "0.7.0-dev.7",
13
- "@prisma-next/tsconfig": "0.7.0-dev.7",
14
- "@prisma-next/tsdown": "0.7.0-dev.7",
13
+ "@prisma-next/test-utils": "0.8.0-dev.1",
14
+ "@prisma-next/tsconfig": "0.8.0-dev.1",
15
+ "@prisma-next/tsdown": "0.8.0-dev.1",
15
16
  "tsdown": "0.22.0",
16
17
  "typescript": "5.9.3",
17
18
  "vitest": "4.1.5"
@@ -7,7 +7,7 @@ export { MongoSchemaCollectionOptions } from '../schema-collection-options';
7
7
  export type { MongoSchemaIndexOptions } from '../schema-index';
8
8
  export { MongoSchemaIndex } from '../schema-index';
9
9
  export { MongoSchemaIR } from '../schema-ir';
10
- export { MongoSchemaNode } from '../schema-node';
10
+ export { MongoSchemaIRNode } from '../schema-node';
11
11
  export type { MongoSchemaValidatorOptions } from '../schema-validator';
12
12
  export { MongoSchemaValidator } from '../schema-validator';
13
13
  export type { AnyMongoSchemaNode } from '../types';
@@ -1,4 +1,5 @@
1
- import { MongoSchemaNode } from './schema-node';
1
+ import { freezeNode } from '@prisma-next/framework-components/ir';
2
+ import { MongoSchemaIRNode } from './schema-node';
2
3
  import type { MongoSchemaVisitor } from './visitor';
3
4
 
4
5
  export interface MongoSchemaCollectionOptionsInput {
@@ -13,7 +14,7 @@ export interface MongoSchemaCollectionOptionsInput {
13
14
  readonly clusteredIndex?: { name?: string };
14
15
  }
15
16
 
16
- export class MongoSchemaCollectionOptions extends MongoSchemaNode {
17
+ export class MongoSchemaCollectionOptions extends MongoSchemaIRNode {
17
18
  readonly kind = 'collectionOptions' as const;
18
19
  readonly capped?: { size: number; max?: number } | undefined;
19
20
  readonly timeseries?:
@@ -30,7 +31,7 @@ export class MongoSchemaCollectionOptions extends MongoSchemaNode {
30
31
  this.collation = options.collation;
31
32
  this.changeStreamPreAndPostImages = options.changeStreamPreAndPostImages;
32
33
  this.clusteredIndex = options.clusteredIndex;
33
- this.freeze();
34
+ freezeNode(this);
34
35
  }
35
36
 
36
37
  accept<R>(visitor: MongoSchemaVisitor<R>): R {
@@ -1,6 +1,7 @@
1
+ import { freezeNode } from '@prisma-next/framework-components/ir';
1
2
  import type { MongoSchemaCollectionOptions } from './schema-collection-options';
2
3
  import type { MongoSchemaIndex } from './schema-index';
3
- import { MongoSchemaNode } from './schema-node';
4
+ import { MongoSchemaIRNode } from './schema-node';
4
5
  import type { MongoSchemaValidator } from './schema-validator';
5
6
  import type { MongoSchemaVisitor } from './visitor';
6
7
 
@@ -11,7 +12,7 @@ export interface MongoSchemaCollectionCtorOptions {
11
12
  readonly options?: MongoSchemaCollectionOptions;
12
13
  }
13
14
 
14
- export class MongoSchemaCollection extends MongoSchemaNode {
15
+ export class MongoSchemaCollection extends MongoSchemaIRNode {
15
16
  readonly kind = 'collection' as const;
16
17
  readonly name: string;
17
18
  readonly indexes: ReadonlyArray<MongoSchemaIndex>;
@@ -24,7 +25,7 @@ export class MongoSchemaCollection extends MongoSchemaNode {
24
25
  this.indexes = options.indexes ?? [];
25
26
  this.validator = options.validator;
26
27
  this.options = options.options;
27
- this.freeze();
28
+ freezeNode(this);
28
29
  }
29
30
 
30
31
  accept<R>(visitor: MongoSchemaVisitor<R>): R {
@@ -1,5 +1,6 @@
1
+ import { freezeNode } from '@prisma-next/framework-components/ir';
1
2
  import type { MongoIndexKey } from '@prisma-next/mongo-contract';
2
- import { MongoSchemaNode } from './schema-node';
3
+ import { MongoSchemaIRNode } from './schema-node';
3
4
  import type { MongoSchemaVisitor } from './visitor';
4
5
 
5
6
  export interface MongoSchemaIndexOptions {
@@ -15,7 +16,7 @@ export interface MongoSchemaIndexOptions {
15
16
  readonly language_override?: string | undefined;
16
17
  }
17
18
 
18
- export class MongoSchemaIndex extends MongoSchemaNode {
19
+ export class MongoSchemaIndex extends MongoSchemaIRNode {
19
20
  readonly kind = 'index' as const;
20
21
  readonly keys: ReadonlyArray<MongoIndexKey>;
21
22
  readonly unique: boolean;
@@ -40,7 +41,7 @@ export class MongoSchemaIndex extends MongoSchemaNode {
40
41
  this.weights = options.weights;
41
42
  this.default_language = options.default_language;
42
43
  this.language_override = options.language_override;
43
- this.freeze();
44
+ freezeNode(this);
44
45
  }
45
46
 
46
47
  accept<R>(visitor: MongoSchemaVisitor<R>): R {
package/src/schema-ir.ts CHANGED
@@ -1,8 +1,9 @@
1
+ import { freezeNode } from '@prisma-next/framework-components/ir';
1
2
  import type { MongoSchemaCollection } from './schema-collection';
2
- import { MongoSchemaNode } from './schema-node';
3
+ import { MongoSchemaIRNode } from './schema-node';
3
4
  import type { MongoSchemaVisitor } from './visitor';
4
5
 
5
- export class MongoSchemaIR extends MongoSchemaNode {
6
+ export class MongoSchemaIR extends MongoSchemaIRNode {
6
7
  readonly kind = 'schema' as const;
7
8
  readonly collections: ReadonlyArray<MongoSchemaCollection>;
8
9
  readonly collectionNames: ReadonlyArray<string>;
@@ -15,7 +16,7 @@ export class MongoSchemaIR extends MongoSchemaNode {
15
16
  this.collections = sorted;
16
17
  this._byName = new Map(sorted.map((c) => [c.name, c]));
17
18
  this.collectionNames = sorted.map((c) => c.name);
18
- this.freeze();
19
+ freezeNode(this);
19
20
  }
20
21
 
21
22
  accept<R>(visitor: MongoSchemaVisitor<R>): R {
@@ -1,11 +1,6 @@
1
+ import { IRNodeBase } from '@prisma-next/framework-components/ir';
1
2
  import type { MongoSchemaVisitor } from './visitor';
2
3
 
3
- export abstract class MongoSchemaNode {
4
- abstract readonly kind: string;
5
-
4
+ export abstract class MongoSchemaIRNode extends IRNodeBase {
6
5
  abstract accept<R>(visitor: MongoSchemaVisitor<R>): R;
7
-
8
- protected freeze(): void {
9
- Object.freeze(this);
10
- }
11
6
  }
@@ -1,4 +1,5 @@
1
- import { MongoSchemaNode } from './schema-node';
1
+ import { freezeNode } from '@prisma-next/framework-components/ir';
2
+ import { MongoSchemaIRNode } from './schema-node';
2
3
  import type { MongoSchemaVisitor } from './visitor';
3
4
 
4
5
  export interface MongoSchemaValidatorOptions {
@@ -7,7 +8,7 @@ export interface MongoSchemaValidatorOptions {
7
8
  readonly validationAction: 'error' | 'warn';
8
9
  }
9
10
 
10
- export class MongoSchemaValidator extends MongoSchemaNode {
11
+ export class MongoSchemaValidator extends MongoSchemaIRNode {
11
12
  readonly kind = 'validator' as const;
12
13
  readonly jsonSchema: Record<string, unknown>;
13
14
  readonly validationLevel: 'strict' | 'moderate';
@@ -18,7 +19,7 @@ export class MongoSchemaValidator extends MongoSchemaNode {
18
19
  this.jsonSchema = options.jsonSchema;
19
20
  this.validationLevel = options.validationLevel;
20
21
  this.validationAction = options.validationAction;
21
- this.freeze();
22
+ freezeNode(this);
22
23
  }
23
24
 
24
25
  accept<R>(visitor: MongoSchemaVisitor<R>): R {