"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