@tracking-exposed/data
Version:
A common data layer for tracking exposed.
75 lines (60 loc) • 1.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.findByMember = exports.addToSet = exports.upsertOne = exports.findOneBy = exports.client = void 0;
var _mongodb = require("mongodb");
// FIXME: flow's type definition for mongodb inject any for all mongodb
// operations. Verify any return from any mongodb operation.
const client = (() => {
let cache;
const fn = async connectionString => {
if (cache != null) return cache;
cache = await _mongodb.MongoClient.connect(connectionString);
return cache;
};
fn.reset = async () => {
if (cache == null) return;
await cache.close();
cache = null;
};
return fn;
})();
exports.client = client;
const findOneBy = (mongo, collection, query) => mongo.db().collection(collection).findOne(query, {
projection: {
_id: 0
}
});
exports.findOneBy = findOneBy;
const upsertOne = (mongo, collection, query, data) => mongo.db().collection(collection).updateOne(query, {
$set: data
}, {
upsert: true
});
exports.upsertOne = upsertOne;
const addToSet = (mongo, collection, query, field, values) => mongo.db().collection(collection).updateOne(query, {
$addToSet: {
[field]: {
$each: Array.isArray(values) ? values : [values]
}
}
});
exports.addToSet = addToSet;
const findByMember = (mongo, collection, field, members) => mongo.db().collection(collection).find({
[field]: {
$all: Array.isArray(members) ? members : [members]
}
}, {
_id: 0
}).limit(100).toArray();
exports.findByMember = findByMember;
var _default = {
client,
findOneBy,
upsertOne,
addToSet,
findByMember
};
exports.default = _default;
//# sourceMappingURL=mongo.js.map