@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.
- package/dist/exports/index.d.mts +8 -9
- package/dist/exports/index.d.mts.map +1 -1
- package/dist/exports/index.mjs +13 -16
- package/dist/exports/index.mjs.map +1 -1
- package/package.json +6 -5
- package/src/exports/index.ts +1 -1
- package/src/schema-collection-options.ts +4 -3
- package/src/schema-collection.ts +4 -3
- package/src/schema-index.ts +4 -3
- package/src/schema-ir.ts +4 -3
- package/src/schema-node.ts +2 -7
- package/src/schema-validator.ts +4 -3
package/dist/exports/index.d.mts
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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":"
|
|
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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"}
|
package/dist/exports/index.mjs
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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.
|
|
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/
|
|
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.
|
|
13
|
-
"@prisma-next/tsconfig": "0.
|
|
14
|
-
"@prisma-next/tsdown": "0.
|
|
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"
|
package/src/exports/index.ts
CHANGED
|
@@ -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 {
|
|
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 {
|
|
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
|
|
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
|
|
34
|
+
freezeNode(this);
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
accept<R>(visitor: MongoSchemaVisitor<R>): R {
|
package/src/schema-collection.ts
CHANGED
|
@@ -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 {
|
|
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
|
|
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
|
|
28
|
+
freezeNode(this);
|
|
28
29
|
}
|
|
29
30
|
|
|
30
31
|
accept<R>(visitor: MongoSchemaVisitor<R>): R {
|
package/src/schema-index.ts
CHANGED
|
@@ -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 {
|
|
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
|
|
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
|
|
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 {
|
|
3
|
+
import { MongoSchemaIRNode } from './schema-node';
|
|
3
4
|
import type { MongoSchemaVisitor } from './visitor';
|
|
4
5
|
|
|
5
|
-
export class MongoSchemaIR extends
|
|
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
|
|
19
|
+
freezeNode(this);
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
accept<R>(visitor: MongoSchemaVisitor<R>): R {
|
package/src/schema-node.ts
CHANGED
|
@@ -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
|
|
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
|
}
|
package/src/schema-validator.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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
|
|
22
|
+
freezeNode(this);
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
accept<R>(visitor: MongoSchemaVisitor<R>): R {
|