@mongodb-js/mongodb-schema 12.7.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/.esm-wrapper.mjs +10 -0
- package/LICENSE +201 -0
- package/README.md +353 -0
- package/bin/mongodb-schema +231 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/schema-accessor.d.ts +30 -0
- package/dist/schema-accessor.d.ts.map +1 -0
- package/dist/schema-accessor.js +30 -0
- package/dist/schema-accessor.js.map +1 -0
- package/dist/schema-analyzer.d.ts +161 -0
- package/dist/schema-analyzer.d.ts.map +1 -0
- package/dist/schema-analyzer.js +379 -0
- package/dist/schema-analyzer.js.map +1 -0
- package/dist/schema-converters/internal-to-expanded.d.ts +6 -0
- package/dist/schema-converters/internal-to-expanded.d.ts.map +1 -0
- package/dist/schema-converters/internal-to-expanded.js +97 -0
- package/dist/schema-converters/internal-to-expanded.js.map +1 -0
- package/dist/schema-converters/internal-to-mongodb.d.ts +7 -0
- package/dist/schema-converters/internal-to-mongodb.d.ts.map +1 -0
- package/dist/schema-converters/internal-to-mongodb.js +93 -0
- package/dist/schema-converters/internal-to-mongodb.js.map +1 -0
- package/dist/schema-converters/internal-to-standard.d.ts +228 -0
- package/dist/schema-converters/internal-to-standard.d.ts.map +1 -0
- package/dist/schema-converters/internal-to-standard.js +318 -0
- package/dist/schema-converters/internal-to-standard.js.map +1 -0
- package/dist/semantic-types/email.d.ts +2 -0
- package/dist/semantic-types/email.d.ts.map +1 -0
- package/dist/semantic-types/email.js +8 -0
- package/dist/semantic-types/email.js.map +1 -0
- package/dist/semantic-types/index.d.ts +6 -0
- package/dist/semantic-types/index.d.ts.map +1 -0
- package/dist/semantic-types/index.js +7 -0
- package/dist/semantic-types/index.js.map +1 -0
- package/dist/stats.d.ts +11 -0
- package/dist/stats.d.ts.map +1 -0
- package/dist/stats.js +82 -0
- package/dist/stats.js.map +1 -0
- package/dist/to-typescript.d.ts +3 -0
- package/dist/to-typescript.d.ts.map +1 -0
- package/dist/to-typescript.js +103 -0
- package/dist/to-typescript.js.map +1 -0
- package/dist/types.d.ts +29 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/util.d.ts +3 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +13 -0
- package/dist/util.js.map +1 -0
- package/package.json +110 -0
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SchemaAnalyzer = void 0;
|
|
7
|
+
exports.verifyStreamSource = verifyStreamSource;
|
|
8
|
+
exports.getCompletedSchemaAnalyzer = getCompletedSchemaAnalyzer;
|
|
9
|
+
const reservoir_1 = __importDefault(require("reservoir"));
|
|
10
|
+
const bson_1 = require("bson");
|
|
11
|
+
const semantic_types_1 = __importDefault(require("./semantic-types"));
|
|
12
|
+
const util_1 = require("./util");
|
|
13
|
+
const defaultSchemaParseOptions = {
|
|
14
|
+
semanticTypes: false,
|
|
15
|
+
storeValues: true,
|
|
16
|
+
storedValuesLengthLimit: 10000,
|
|
17
|
+
};
|
|
18
|
+
function extractStringValueFromBSON(value) {
|
|
19
|
+
if (value?._bsontype) {
|
|
20
|
+
if (['Decimal128', 'Long'].includes(value._bsontype)) {
|
|
21
|
+
return value.toString();
|
|
22
|
+
}
|
|
23
|
+
if (['Double', 'Int32'].includes(value._bsontype)) {
|
|
24
|
+
return String(value.value);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (typeof value === 'string') {
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
return String(value);
|
|
31
|
+
}
|
|
32
|
+
function fieldComparator(a, b) {
|
|
33
|
+
const aName = a.name;
|
|
34
|
+
const bName = b.name;
|
|
35
|
+
if (aName === '_id') {
|
|
36
|
+
return -1;
|
|
37
|
+
}
|
|
38
|
+
if (bName === '_id') {
|
|
39
|
+
return 1;
|
|
40
|
+
}
|
|
41
|
+
return aName.toLowerCase() < bName.toLowerCase() ? -1 : 1;
|
|
42
|
+
}
|
|
43
|
+
function getBSONType(value) {
|
|
44
|
+
const bsonType = value?._bsontype
|
|
45
|
+
? value._bsontype
|
|
46
|
+
: Object.prototype.toString.call(value).replace(/^\[object (\w+)\]$/, '$1');
|
|
47
|
+
if (bsonType === 'Object') {
|
|
48
|
+
return 'Document';
|
|
49
|
+
}
|
|
50
|
+
if (bsonType === 'Code' && value.scope) {
|
|
51
|
+
return 'CodeWScope';
|
|
52
|
+
}
|
|
53
|
+
return bsonType;
|
|
54
|
+
}
|
|
55
|
+
function isNullType(type) {
|
|
56
|
+
return type.name === 'Null';
|
|
57
|
+
}
|
|
58
|
+
function isArrayType(type) {
|
|
59
|
+
return type.name === 'Array';
|
|
60
|
+
}
|
|
61
|
+
function isDocumentType(type) {
|
|
62
|
+
return type.name === 'Document';
|
|
63
|
+
}
|
|
64
|
+
function schemaToPaths(fields, parent = []) {
|
|
65
|
+
const paths = [];
|
|
66
|
+
const sortedFields = Object.values(fields).sort(fieldComparator);
|
|
67
|
+
for (const field of sortedFields) {
|
|
68
|
+
const path = [...parent, field.name];
|
|
69
|
+
paths.push(path);
|
|
70
|
+
const doc = Object.values(field.types).find((f) => f.bsonType === 'Document');
|
|
71
|
+
if (doc) {
|
|
72
|
+
paths.push(...schemaToPaths(doc.fields, path));
|
|
73
|
+
}
|
|
74
|
+
const array = Object.values(field.types).find((f) => f.bsonType === 'Array');
|
|
75
|
+
if (array) {
|
|
76
|
+
const arrayDoc = Object.values(array.types).find((f) => f.bsonType === 'Document');
|
|
77
|
+
if (arrayDoc) {
|
|
78
|
+
paths.push(...schemaToPaths(arrayDoc.fields, path));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return paths;
|
|
83
|
+
}
|
|
84
|
+
function simplifiedSchema(fields) {
|
|
85
|
+
function finalizeSchemaFieldTypes(types) {
|
|
86
|
+
return Object.values(types)
|
|
87
|
+
.sort((a, b) => {
|
|
88
|
+
return b.count - a.count;
|
|
89
|
+
})
|
|
90
|
+
.map((type) => {
|
|
91
|
+
return {
|
|
92
|
+
bsonType: type.bsonType,
|
|
93
|
+
...(isArrayType(type)
|
|
94
|
+
? {
|
|
95
|
+
types: finalizeSchemaFieldTypes(type.types),
|
|
96
|
+
}
|
|
97
|
+
: {}),
|
|
98
|
+
...(isDocumentType(type)
|
|
99
|
+
? { fields: finalizeDocumentFieldSchema(type.fields) }
|
|
100
|
+
: {}),
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
function finalizeDocumentFieldSchema(fieldMap) {
|
|
105
|
+
const fieldSchema = Object.create(null);
|
|
106
|
+
Object.values(fieldMap).forEach((field) => {
|
|
107
|
+
const fieldTypes = finalizeSchemaFieldTypes(field.types);
|
|
108
|
+
fieldSchema[field.name] = {
|
|
109
|
+
types: fieldTypes,
|
|
110
|
+
};
|
|
111
|
+
});
|
|
112
|
+
return fieldSchema;
|
|
113
|
+
}
|
|
114
|
+
return finalizeDocumentFieldSchema(fields);
|
|
115
|
+
}
|
|
116
|
+
function cropString(value, limit) {
|
|
117
|
+
if (limit < 1)
|
|
118
|
+
return '';
|
|
119
|
+
return value.charCodeAt(limit - 1) === value.codePointAt(limit - 1)
|
|
120
|
+
? value.slice(0, limit)
|
|
121
|
+
: value.slice(0, limit - 1);
|
|
122
|
+
}
|
|
123
|
+
function getCappedValue(bsonType, value, limit) {
|
|
124
|
+
if (bsonType === 'String') {
|
|
125
|
+
return cropString(value, limit);
|
|
126
|
+
}
|
|
127
|
+
if (bsonType === 'Binary') {
|
|
128
|
+
value = value;
|
|
129
|
+
return value.buffer.length > limit
|
|
130
|
+
? new bson_1.Binary(value.buffer.slice(0, limit), value.sub_type)
|
|
131
|
+
: value;
|
|
132
|
+
}
|
|
133
|
+
if (bsonType === 'Code') {
|
|
134
|
+
value = value;
|
|
135
|
+
return value.code.length >= limit
|
|
136
|
+
? new bson_1.Code(cropString(value.code, limit), value.scope)
|
|
137
|
+
: value;
|
|
138
|
+
}
|
|
139
|
+
return value;
|
|
140
|
+
}
|
|
141
|
+
function computeHasDuplicatesForType(type, unique) {
|
|
142
|
+
if (isNullType(type)) {
|
|
143
|
+
return type.count > 0;
|
|
144
|
+
}
|
|
145
|
+
if (!type.values) {
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
return unique !== type.values.length;
|
|
149
|
+
}
|
|
150
|
+
function computeUniqueForType(type) {
|
|
151
|
+
if (isNullType(type)) {
|
|
152
|
+
return type.count === 0 ? 0 : 1;
|
|
153
|
+
}
|
|
154
|
+
if (!type.values) {
|
|
155
|
+
return undefined;
|
|
156
|
+
}
|
|
157
|
+
return new Set(type.values.map(extractStringValueFromBSON)).size;
|
|
158
|
+
}
|
|
159
|
+
function finalizeSchema(schemaAnalysis) {
|
|
160
|
+
function finalizeArrayFieldProperties(type) {
|
|
161
|
+
const totalCount = Object.values(type.types)
|
|
162
|
+
.map((v) => v.count)
|
|
163
|
+
.reduce((p, c) => p + c, 0);
|
|
164
|
+
const types = finalizeSchemaFieldTypes(type.types, totalCount);
|
|
165
|
+
return {
|
|
166
|
+
types,
|
|
167
|
+
totalCount,
|
|
168
|
+
lengths: type.lengths,
|
|
169
|
+
averageLength: totalCount / type.lengths.length,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
function finalizeSchemaFieldTypes(types, parentCount) {
|
|
173
|
+
return Object.values(types)
|
|
174
|
+
.map((type) => {
|
|
175
|
+
const unique = computeUniqueForType(type);
|
|
176
|
+
return {
|
|
177
|
+
name: type.name,
|
|
178
|
+
path: type.path,
|
|
179
|
+
count: type.count,
|
|
180
|
+
probability: type.count / parentCount,
|
|
181
|
+
unique,
|
|
182
|
+
hasDuplicates: computeHasDuplicatesForType(type, unique),
|
|
183
|
+
values: isNullType(type) ? undefined : type.values,
|
|
184
|
+
bsonType: type.bsonType,
|
|
185
|
+
...(isArrayType(type) ? finalizeArrayFieldProperties(type) : {}),
|
|
186
|
+
...(isDocumentType(type)
|
|
187
|
+
? { fields: finalizeDocumentFieldSchema(type.fields, type.count) }
|
|
188
|
+
: {}),
|
|
189
|
+
};
|
|
190
|
+
})
|
|
191
|
+
.sort((a, b) => b.probability - a.probability);
|
|
192
|
+
}
|
|
193
|
+
function finalizeDocumentFieldSchema(fieldMap, parentCount) {
|
|
194
|
+
return Object.values(fieldMap)
|
|
195
|
+
.map((field) => {
|
|
196
|
+
const fieldTypes = finalizeSchemaFieldTypes(field.types, parentCount);
|
|
197
|
+
const undefinedCount = parentCount - field.count;
|
|
198
|
+
if (undefinedCount > 0) {
|
|
199
|
+
fieldTypes.push({
|
|
200
|
+
name: 'Undefined',
|
|
201
|
+
bsonType: 'Undefined',
|
|
202
|
+
unique: undefinedCount > 1 ? 0 : 1,
|
|
203
|
+
hasDuplicates: undefinedCount > 1,
|
|
204
|
+
path: field.path,
|
|
205
|
+
count: undefinedCount,
|
|
206
|
+
probability: undefinedCount / parentCount,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
return {
|
|
210
|
+
name: field.name,
|
|
211
|
+
path: field.path,
|
|
212
|
+
count: field.count,
|
|
213
|
+
type: fieldTypes.length === 1
|
|
214
|
+
? fieldTypes[0].name
|
|
215
|
+
: fieldTypes.map((v) => v.name),
|
|
216
|
+
probability: field.count / parentCount,
|
|
217
|
+
hasDuplicates: !!fieldTypes.find((v) => v.hasDuplicates),
|
|
218
|
+
types: fieldTypes,
|
|
219
|
+
};
|
|
220
|
+
})
|
|
221
|
+
.sort(fieldComparator);
|
|
222
|
+
}
|
|
223
|
+
return finalizeDocumentFieldSchema(schemaAnalysis.fields, schemaAnalysis.count);
|
|
224
|
+
}
|
|
225
|
+
class SchemaAnalyzer {
|
|
226
|
+
semanticTypes;
|
|
227
|
+
options;
|
|
228
|
+
documentsAnalyzed = 0;
|
|
229
|
+
fieldsCount = 0;
|
|
230
|
+
schemaAnalysisRoot = {
|
|
231
|
+
fields: Object.create(null),
|
|
232
|
+
count: 0,
|
|
233
|
+
};
|
|
234
|
+
finalized = true;
|
|
235
|
+
schemaResult = {
|
|
236
|
+
count: 0,
|
|
237
|
+
fields: [],
|
|
238
|
+
};
|
|
239
|
+
fieldAndTypeAnalysisCounter = 0;
|
|
240
|
+
constructor(options) {
|
|
241
|
+
this.options = { ...defaultSchemaParseOptions, ...options };
|
|
242
|
+
this.semanticTypes = {
|
|
243
|
+
...semantic_types_1.default,
|
|
244
|
+
};
|
|
245
|
+
if (typeof this.options.semanticTypes === 'object') {
|
|
246
|
+
const enabledTypes = Object.entries(this.options.semanticTypes)
|
|
247
|
+
.filter(([, v]) => typeof v === 'boolean' && v)
|
|
248
|
+
.map(([k]) => k.toLowerCase());
|
|
249
|
+
this.semanticTypes = {
|
|
250
|
+
...Object.entries(this.semanticTypes)
|
|
251
|
+
.filter(([k]) => enabledTypes.includes(k.toLowerCase()))
|
|
252
|
+
.reduce((p, [k, v]) => ({ ...p, [k]: v }), Object.create(null)),
|
|
253
|
+
};
|
|
254
|
+
Object.entries(this.options.semanticTypes)
|
|
255
|
+
.filter(([, v]) => typeof v === 'function')
|
|
256
|
+
.forEach(([k, v]) => {
|
|
257
|
+
this.semanticTypes[k] = v;
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
allowAbortDuringAnalysis() {
|
|
262
|
+
if (this.fieldAndTypeAnalysisCounter++ % util_1.ALLOW_ABORT_INTERVAL_COUNT === 0) {
|
|
263
|
+
void (0, util_1.allowAbort)();
|
|
264
|
+
}
|
|
265
|
+
return Promise.resolve();
|
|
266
|
+
}
|
|
267
|
+
increaseFieldCount() {
|
|
268
|
+
if (!this.options.distinctFieldsAbortThreshold)
|
|
269
|
+
return;
|
|
270
|
+
this.fieldsCount++;
|
|
271
|
+
if (this.fieldsCount > this.options.distinctFieldsAbortThreshold) {
|
|
272
|
+
throw new Error(`Schema analysis aborted: Fields count above ${this.options.distinctFieldsAbortThreshold}`);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
getSemanticType(value, path) {
|
|
276
|
+
const returnValue = Object.entries(this.semanticTypes)
|
|
277
|
+
.filter(([, v]) => {
|
|
278
|
+
return v(value, path);
|
|
279
|
+
})
|
|
280
|
+
.map(([k]) => k)[0];
|
|
281
|
+
return returnValue;
|
|
282
|
+
}
|
|
283
|
+
async analyzeDoc(doc) {
|
|
284
|
+
this.finalized = false;
|
|
285
|
+
const addToType = async (path, value, schema) => {
|
|
286
|
+
await this.allowAbortDuringAnalysis();
|
|
287
|
+
const bsonType = getBSONType(value);
|
|
288
|
+
const typeName = this.options.semanticTypes
|
|
289
|
+
? this.getSemanticType(value, path) || bsonType
|
|
290
|
+
: bsonType;
|
|
291
|
+
if (!schema[typeName]) {
|
|
292
|
+
schema[typeName] = {
|
|
293
|
+
name: typeName,
|
|
294
|
+
bsonType: bsonType,
|
|
295
|
+
path,
|
|
296
|
+
count: 0,
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
const type = schema[typeName];
|
|
300
|
+
type.count++;
|
|
301
|
+
if (isArrayType(type)) {
|
|
302
|
+
type.types = type.types ?? Object.create(null);
|
|
303
|
+
type.lengths = type.lengths ?? [];
|
|
304
|
+
type.lengths.push(value.length);
|
|
305
|
+
for (const v of value) {
|
|
306
|
+
await addToType(path, v, type.types);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
else if (isDocumentType(type)) {
|
|
310
|
+
type.fields = type.fields ?? Object.create(null);
|
|
311
|
+
for (const [fieldName, v] of Object.entries(value)) {
|
|
312
|
+
await addToField(fieldName, [...path, fieldName], v, type.fields);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
else if (this.options.storeValues && !isNullType(type)) {
|
|
316
|
+
if (!type.values) {
|
|
317
|
+
type.values = ['String', 'Binary', 'Code'].includes(bsonType)
|
|
318
|
+
? (0, reservoir_1.default)(100)
|
|
319
|
+
: (0, reservoir_1.default)(10000);
|
|
320
|
+
}
|
|
321
|
+
type.values.pushSome(getCappedValue(type.bsonType, value, this.options.storedValuesLengthLimit));
|
|
322
|
+
}
|
|
323
|
+
};
|
|
324
|
+
const addToField = async (fieldName, path, value, schema) => {
|
|
325
|
+
await this.allowAbortDuringAnalysis();
|
|
326
|
+
if (!schema[fieldName]) {
|
|
327
|
+
schema[fieldName] = {
|
|
328
|
+
name: fieldName,
|
|
329
|
+
path: path,
|
|
330
|
+
count: 0,
|
|
331
|
+
types: Object.create(null),
|
|
332
|
+
};
|
|
333
|
+
this.increaseFieldCount();
|
|
334
|
+
}
|
|
335
|
+
const field = schema[fieldName];
|
|
336
|
+
field.count++;
|
|
337
|
+
await addToType(path, value, field.types);
|
|
338
|
+
};
|
|
339
|
+
for (const key of Object.keys(doc)) {
|
|
340
|
+
await addToField(key, [key], doc[key], this.schemaAnalysisRoot.fields);
|
|
341
|
+
}
|
|
342
|
+
this.schemaAnalysisRoot.count += 1;
|
|
343
|
+
}
|
|
344
|
+
getResult() {
|
|
345
|
+
if (this.finalized) {
|
|
346
|
+
return this.schemaResult;
|
|
347
|
+
}
|
|
348
|
+
this.schemaResult = {
|
|
349
|
+
count: this.schemaAnalysisRoot.count,
|
|
350
|
+
fields: finalizeSchema(this.schemaAnalysisRoot),
|
|
351
|
+
};
|
|
352
|
+
this.finalized = true;
|
|
353
|
+
return this.schemaResult;
|
|
354
|
+
}
|
|
355
|
+
getSchemaPaths() {
|
|
356
|
+
return schemaToPaths(this.schemaAnalysisRoot.fields);
|
|
357
|
+
}
|
|
358
|
+
getSimplifiedSchema() {
|
|
359
|
+
return simplifiedSchema(this.schemaAnalysisRoot.fields);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
exports.SchemaAnalyzer = SchemaAnalyzer;
|
|
363
|
+
function verifyStreamSource(source) {
|
|
364
|
+
if (!(Symbol.iterator in source) && !(Symbol.asyncIterator in source)) {
|
|
365
|
+
throw new Error('Unknown input type for `docs`. Must be an array, ' +
|
|
366
|
+
'stream or MongoDB Cursor.');
|
|
367
|
+
}
|
|
368
|
+
return source;
|
|
369
|
+
}
|
|
370
|
+
async function getCompletedSchemaAnalyzer(source, options) {
|
|
371
|
+
const analyzer = new SchemaAnalyzer(options);
|
|
372
|
+
for await (const doc of verifyStreamSource(source)) {
|
|
373
|
+
if (options?.signal?.aborted)
|
|
374
|
+
throw options.signal.reason;
|
|
375
|
+
await analyzer.analyzeDoc(doc);
|
|
376
|
+
}
|
|
377
|
+
return analyzer;
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=schema-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-analyzer.js","sourceRoot":"","sources":["../src/schema-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Schema as InternalSchema } from '../schema-analyzer';
|
|
2
|
+
import { type ExpandedJSONSchema } from '../types';
|
|
3
|
+
export declare function convertInternalToExpanded(internalSchema: InternalSchema, options?: {
|
|
4
|
+
signal?: AbortSignal;
|
|
5
|
+
}): Promise<ExpandedJSONSchema>;
|
|
6
|
+
//# sourceMappingURL=internal-to-expanded.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-to-expanded.d.ts","sourceRoot":"","sources":["../../src/schema-converters/internal-to-expanded.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,MAAM,IAAI,cAAc,EAGzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAC;AA0InD,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,cAAc,EAC9B,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACrC,OAAO,CAAC,kBAAkB,CAAC,CAE7B"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convertInternalToExpanded = convertInternalToExpanded;
|
|
4
|
+
const internal_to_standard_1 = require("./internal-to-standard");
|
|
5
|
+
const internal_to_mongodb_1 = require("./internal-to-mongodb");
|
|
6
|
+
const util_1 = require("../util");
|
|
7
|
+
const createConvertInternalToExpanded = function () {
|
|
8
|
+
const usedDefinitions = new Set();
|
|
9
|
+
function getUsedDefinitions() {
|
|
10
|
+
const filteredDefinitions = Object.fromEntries(Object.entries(internal_to_standard_1.RELAXED_EJSON_DEFINITIONS).filter(([key]) => usedDefinitions.has(key)));
|
|
11
|
+
return Object.freeze(filteredDefinitions);
|
|
12
|
+
}
|
|
13
|
+
function markUsedDefinition(ref) {
|
|
14
|
+
usedDefinitions.add(ref.split('/')[2]);
|
|
15
|
+
}
|
|
16
|
+
function getStandardType(internalType) {
|
|
17
|
+
const type = internal_to_standard_1.InternalTypeToStandardTypeMap[internalType];
|
|
18
|
+
if (!type)
|
|
19
|
+
throw new Error(`Encountered unknown type: ${internalType}`);
|
|
20
|
+
return { ...type };
|
|
21
|
+
}
|
|
22
|
+
function getBsonType(internalType) {
|
|
23
|
+
const type = internal_to_mongodb_1.InternalTypeToBsonTypeMap[internalType];
|
|
24
|
+
if (!type)
|
|
25
|
+
throw new Error(`Encountered unknown type: ${internalType}`);
|
|
26
|
+
return type;
|
|
27
|
+
}
|
|
28
|
+
async function parseType(type, signal) {
|
|
29
|
+
await (0, util_1.allowAbort)(signal);
|
|
30
|
+
const schema = {
|
|
31
|
+
...getStandardType(type.bsonType),
|
|
32
|
+
'x-bsonType': getBsonType(type.bsonType),
|
|
33
|
+
'x-metadata': getMetadata(type),
|
|
34
|
+
};
|
|
35
|
+
if ('values' in type && type.values) {
|
|
36
|
+
schema['x-sampleValues'] = type.values;
|
|
37
|
+
}
|
|
38
|
+
if (schema.$ref)
|
|
39
|
+
markUsedDefinition(schema.$ref);
|
|
40
|
+
switch (type.bsonType) {
|
|
41
|
+
case 'Array':
|
|
42
|
+
schema.items = await parseTypes(type.types, signal);
|
|
43
|
+
break;
|
|
44
|
+
case 'Document':
|
|
45
|
+
Object.assign(schema, await parseFields(type.fields, signal));
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
return schema;
|
|
49
|
+
}
|
|
50
|
+
function getMetadata({ hasDuplicates, probability, count, }) {
|
|
51
|
+
return {
|
|
52
|
+
...(typeof hasDuplicates === 'boolean' ? { hasDuplicates } : {}),
|
|
53
|
+
probability,
|
|
54
|
+
count,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
async function parseTypes(types, signal) {
|
|
58
|
+
await (0, util_1.allowAbort)(signal);
|
|
59
|
+
const definedTypes = types.filter((type) => type.bsonType.toLowerCase() !== 'undefined');
|
|
60
|
+
const isSingleType = definedTypes.length === 1;
|
|
61
|
+
if (isSingleType) {
|
|
62
|
+
return parseType(definedTypes[0], signal);
|
|
63
|
+
}
|
|
64
|
+
const parsedTypes = await Promise.all(definedTypes.map((type) => parseType(type, signal)));
|
|
65
|
+
return {
|
|
66
|
+
anyOf: parsedTypes,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async function parseFields(fields, signal) {
|
|
70
|
+
const required = [];
|
|
71
|
+
const properties = {};
|
|
72
|
+
for (const field of fields) {
|
|
73
|
+
if (field.probability === 1)
|
|
74
|
+
required.push(field.name);
|
|
75
|
+
properties[field.name] = {
|
|
76
|
+
...(await parseTypes(field.types, signal)),
|
|
77
|
+
'x-metadata': getMetadata(field),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
return { required, properties };
|
|
81
|
+
}
|
|
82
|
+
return async function convert(internalSchema, options = {}) {
|
|
83
|
+
const { required, properties } = await parseFields(internalSchema.fields, options.signal);
|
|
84
|
+
const schema = {
|
|
85
|
+
type: 'object',
|
|
86
|
+
'x-bsonType': 'object',
|
|
87
|
+
required,
|
|
88
|
+
properties,
|
|
89
|
+
$defs: getUsedDefinitions(),
|
|
90
|
+
};
|
|
91
|
+
return schema;
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
function convertInternalToExpanded(internalSchema, options = {}) {
|
|
95
|
+
return createConvertInternalToExpanded()(internalSchema, options);
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=internal-to-expanded.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-to-expanded.js","sourceRoot":"","sources":["../../src/schema-converters/internal-to-expanded.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Schema as InternalSchema, SchemaType } from '../schema-analyzer';
|
|
2
|
+
import type { MongoDBJSONSchema } from '../types';
|
|
3
|
+
export declare const InternalTypeToBsonTypeMap: Record<SchemaType['name'] | 'Double' | 'BSONSymbol', string>;
|
|
4
|
+
export declare function convertInternalToMongodb(internalSchema: InternalSchema, options?: {
|
|
5
|
+
signal?: AbortSignal;
|
|
6
|
+
}): Promise<MongoDBJSONSchema>;
|
|
7
|
+
//# sourceMappingURL=internal-to-mongodb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-to-mongodb.d.ts","sourceRoot":"","sources":["../../src/schema-converters/internal-to-mongodb.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,MAAM,IAAI,cAAc,EACxB,UAAU,EACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAMlD,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAC5C,UAAU,CAAC,MAAM,CAAC,GAAG,QAAQ,GAAG,YAAY,EAC5C,MAAM,CA0BP,CAAC;AAoFF,wBAAsB,wBAAwB,CAC5C,cAAc,EAAE,cAAc,EAC9B,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,WAAW,CAAC;CACjB,GACL,OAAO,CAAC,iBAAiB,CAAC,CAY5B"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InternalTypeToBsonTypeMap = void 0;
|
|
4
|
+
exports.convertInternalToMongodb = convertInternalToMongodb;
|
|
5
|
+
const util_1 = require("../util");
|
|
6
|
+
exports.InternalTypeToBsonTypeMap = {
|
|
7
|
+
Double: 'double',
|
|
8
|
+
Number: 'double',
|
|
9
|
+
String: 'string',
|
|
10
|
+
Document: 'object',
|
|
11
|
+
Array: 'array',
|
|
12
|
+
Binary: 'binData',
|
|
13
|
+
Undefined: 'undefined',
|
|
14
|
+
ObjectId: 'objectId',
|
|
15
|
+
Boolean: 'bool',
|
|
16
|
+
Date: 'date',
|
|
17
|
+
Null: 'null',
|
|
18
|
+
RegExp: 'regex',
|
|
19
|
+
BSONRegExp: 'regex',
|
|
20
|
+
DBRef: 'dbPointer',
|
|
21
|
+
BSONSymbol: 'symbol',
|
|
22
|
+
Symbol: 'symbol',
|
|
23
|
+
Code: 'javascript',
|
|
24
|
+
CodeWScope: 'javascriptWithScope',
|
|
25
|
+
Int32: 'int',
|
|
26
|
+
Timestamp: 'timestamp',
|
|
27
|
+
Long: 'long',
|
|
28
|
+
Decimal128: 'decimal',
|
|
29
|
+
MinKey: 'minKey',
|
|
30
|
+
MaxKey: 'maxKey',
|
|
31
|
+
};
|
|
32
|
+
const convertInternalType = (type) => {
|
|
33
|
+
const bsonType = exports.InternalTypeToBsonTypeMap[type];
|
|
34
|
+
if (!bsonType)
|
|
35
|
+
throw new Error(`Encountered unknown type: ${type}`);
|
|
36
|
+
return bsonType;
|
|
37
|
+
};
|
|
38
|
+
async function parseType(type, signal) {
|
|
39
|
+
await (0, util_1.allowAbort)(signal);
|
|
40
|
+
const schema = {
|
|
41
|
+
bsonType: convertInternalType(type.bsonType),
|
|
42
|
+
};
|
|
43
|
+
if (type.bsonType === 'Array') {
|
|
44
|
+
const items = await parseTypes(type.types);
|
|
45
|
+
if (!items.bsonType || items.bsonType?.length > 0) {
|
|
46
|
+
schema.items = items;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else if (type.bsonType === 'Document') {
|
|
50
|
+
Object.assign(schema, await parseFields(type.fields, signal));
|
|
51
|
+
}
|
|
52
|
+
return schema;
|
|
53
|
+
}
|
|
54
|
+
function isPlainTypesOnly(types) {
|
|
55
|
+
return types.every((definition) => !!definition.bsonType && Object.keys(definition).length === 1);
|
|
56
|
+
}
|
|
57
|
+
async function parseTypes(types, signal) {
|
|
58
|
+
await (0, util_1.allowAbort)(signal);
|
|
59
|
+
const definedTypes = types.filter((type) => type.bsonType.toLowerCase() !== 'undefined');
|
|
60
|
+
const isSingleType = definedTypes.length === 1;
|
|
61
|
+
if (isSingleType) {
|
|
62
|
+
return parseType(definedTypes[0], signal);
|
|
63
|
+
}
|
|
64
|
+
const parsedTypes = await Promise.all(definedTypes.map((type) => parseType(type, signal)));
|
|
65
|
+
if (isPlainTypesOnly(parsedTypes)) {
|
|
66
|
+
return {
|
|
67
|
+
bsonType: parsedTypes.map(({ bsonType }) => bsonType),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
anyOf: parsedTypes,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
async function parseFields(fields, signal) {
|
|
75
|
+
const required = [];
|
|
76
|
+
const properties = {};
|
|
77
|
+
for (const field of fields) {
|
|
78
|
+
if (field.probability === 1)
|
|
79
|
+
required.push(field.name);
|
|
80
|
+
properties[field.name] = await parseTypes(field.types, signal);
|
|
81
|
+
}
|
|
82
|
+
return { properties, ...(required.length > 0 ? { required } : {}) };
|
|
83
|
+
}
|
|
84
|
+
async function convertInternalToMongodb(internalSchema, options = {}) {
|
|
85
|
+
const { required, properties } = await parseFields(internalSchema.fields, options.signal);
|
|
86
|
+
const schema = {
|
|
87
|
+
bsonType: 'object',
|
|
88
|
+
...(required === undefined ? {} : { required }),
|
|
89
|
+
properties,
|
|
90
|
+
};
|
|
91
|
+
return schema;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=internal-to-mongodb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-to-mongodb.js","sourceRoot":"","sources":["../../src/schema-converters/internal-to-mongodb.ts"],"names":[],"mappings":"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"}
|