regexp.js
2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.BSONRegExp = void 0;
var error_1 = require("./error");
function alphabetize(str) {
return str.split('').sort().join('');
}
/**
* A class representation of the BSON RegExp type.
* @public
* @category BSONType
*/
var BSONRegExp = /** @class */ (function () {
/**
* @param pattern - The regular expression pattern to match
* @param options - The regular expression options
*/
function BSONRegExp(pattern, options) {
if (!(this instanceof BSONRegExp))
return new BSONRegExp(pattern, options);
this.pattern = pattern;
this.options = alphabetize(options !== null && options !== void 0 ? options : '');
if (this.pattern.indexOf('\x00') !== -1) {
throw new error_1.BSONError("BSON Regex patterns cannot contain null bytes, found: " + JSON.stringify(this.pattern));
}
if (this.options.indexOf('\x00') !== -1) {
throw new error_1.BSONError("BSON Regex options cannot contain null bytes, found: " + JSON.stringify(this.options));
}
// Validate options
for (var i = 0; i < this.options.length; i++) {
if (!(this.options[i] === 'i' ||
this.options[i] === 'm' ||
this.options[i] === 'x' ||
this.options[i] === 'l' ||
this.options[i] === 's' ||
this.options[i] === 'u')) {
throw new error_1.BSONError("The regular expression option [" + this.options[i] + "] is not supported");
}
}
}
BSONRegExp.parseOptions = function (options) {
return options ? options.split('').sort().join('') : '';
};
/** @internal */
BSONRegExp.prototype.toExtendedJSON = function (options) {
options = options || {};
if (options.legacy) {
return { $regex: this.pattern, $options: this.options };
}
return { $regularExpression: { pattern: this.pattern, options: this.options } };
};
/** @internal */
BSONRegExp.fromExtendedJSON = function (doc) {
if ('$regex' in doc) {
if (typeof doc.$regex !== 'string') {
// This is for $regex query operators that have extended json values.
if (doc.$regex._bsontype === 'BSONRegExp') {
return doc;
}
}
else {
return new BSONRegExp(doc.$regex, BSONRegExp.parseOptions(doc.$options));
}
}
if ('$regularExpression' in doc) {
return new BSONRegExp(doc.$regularExpression.pattern, BSONRegExp.parseOptions(doc.$regularExpression.options));
}
throw new error_1.BSONTypeError("Unexpected BSONRegExp EJSON object form: " + JSON.stringify(doc));
};
return BSONRegExp;
}());
exports.BSONRegExp = BSONRegExp;
Object.defineProperty(BSONRegExp.prototype, '_bsontype', { value: 'BSONRegExp' });
//# sourceMappingURL=regexp.js.map