db_ref.js
3.23 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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DBRef = exports.isDBRefLike = void 0;
var utils_1 = require("./parser/utils");
/** @internal */
function isDBRefLike(value) {
return (utils_1.isObjectLike(value) &&
value.$id != null &&
typeof value.$ref === 'string' &&
(value.$db == null || typeof value.$db === 'string'));
}
exports.isDBRefLike = isDBRefLike;
/**
* A class representation of the BSON DBRef type.
* @public
* @category BSONType
*/
var DBRef = /** @class */ (function () {
/**
* @param collection - the collection name.
* @param oid - the reference ObjectId.
* @param db - optional db name, if omitted the reference is local to the current db.
*/
function DBRef(collection, oid, db, fields) {
if (!(this instanceof DBRef))
return new DBRef(collection, oid, db, fields);
// check if namespace has been provided
var parts = collection.split('.');
if (parts.length === 2) {
db = parts.shift();
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
collection = parts.shift();
}
this.collection = collection;
this.oid = oid;
this.db = db;
this.fields = fields || {};
}
Object.defineProperty(DBRef.prototype, "namespace", {
// Property provided for compatibility with the 1.x parser
// the 1.x parser used a "namespace" property, while 4.x uses "collection"
/** @internal */
get: function () {
return this.collection;
},
set: function (value) {
this.collection = value;
},
enumerable: false,
configurable: true
});
DBRef.prototype.toJSON = function () {
var o = Object.assign({
$ref: this.collection,
$id: this.oid
}, this.fields);
if (this.db != null)
o.$db = this.db;
return o;
};
/** @internal */
DBRef.prototype.toExtendedJSON = function (options) {
options = options || {};
var o = {
$ref: this.collection,
$id: this.oid
};
if (options.legacy) {
return o;
}
if (this.db)
o.$db = this.db;
o = Object.assign(o, this.fields);
return o;
};
/** @internal */
DBRef.fromExtendedJSON = function (doc) {
var copy = Object.assign({}, doc);
delete copy.$ref;
delete copy.$id;
delete copy.$db;
return new DBRef(doc.$ref, doc.$id, doc.$db, copy);
};
/** @internal */
DBRef.prototype[Symbol.for('nodejs.util.inspect.custom')] = function () {
return this.inspect();
};
DBRef.prototype.inspect = function () {
// NOTE: if OID is an ObjectId class it will just print the oid string.
var oid = this.oid === undefined || this.oid.toString === undefined ? this.oid : this.oid.toString();
return "new DBRef(\"" + this.namespace + "\", new ObjectId(\"" + oid + "\")" + (this.db ? ", \"" + this.db + "\"" : '') + ")";
};
return DBRef;
}());
exports.DBRef = DBRef;
Object.defineProperty(DBRef.prototype, '_bsontype', { value: 'DBRef' });
//# sourceMappingURL=db_ref.js.map