Convert backend code to ES modules

Bundling code now with Rollup for its flat bundling and tree shaking
support. Front end code still goes through Webpack for browser support.
This commit is contained in:
Zaid Abdulla committed 2019-02-04 23:47:54 -08:00
1 parent 824639976f
commit 1e41c72d60
62 files changed
+718 -898

No files matched your search

+52 -69
View File
@@ -18,12 +18,12 @@
*/
"use strict";
const mongodb = require("mongodb");
const config = require("./config");
const common = require("./common");
const expressionParser = require("./common/expression-parser");
import { MongoClient, ObjectID } from "mongodb";
import { get } from "./config";
import { escapeRegExp } from "./common";
import { parse } from "./common/expression-parser";
let tasksCollection,
export let tasksCollection,
devicesCollection,
presetsCollection,
objectsCollection,
@@ -34,32 +34,28 @@ let tasksCollection,
operationsCollection,
configCollection;
function connect(callback) {
mongodb.MongoClient.connect(
config.get("MONGODB_CONNECTION_URL"),
export let client;
export function connect(callback) {
MongoClient.connect(
get("MONGODB_CONNECTION_URL"),
{ useNewUrlParser: true },
(err, client) => {
(err, _client) => {
if (err) return void callback(err);
exports.client = client;
client = _client;
const db = client.db();
exports.tasksCollection = tasksCollection = db.collection("tasks");
tasksCollection = db.collection("tasks");
tasksCollection.createIndex({ device: 1, timestamp: 1 });
exports.devicesCollection = devicesCollection = db.collection("devices");
exports.presetsCollection = presetsCollection = db.collection("presets");
exports.objectsCollection = objectsCollection = db.collection("objects");
exports.filesCollection = filesCollection = db.collection("fs.files");
exports.provisionsCollection = provisionsCollection = db.collection(
"provisions"
);
exports.virtualParametersCollection = virtualParametersCollection = db.collection(
"virtualParameters"
);
exports.faultsCollection = faultsCollection = db.collection("faults");
exports.operationsCollection = operationsCollection = db.collection(
"operations"
);
devicesCollection = db.collection("devices");
presetsCollection = db.collection("presets");
objectsCollection = db.collection("objects");
filesCollection = db.collection("fs.files");
provisionsCollection = db.collection("provisions");
virtualParametersCollection = db.collection("virtualParameters");
faultsCollection = db.collection("faults");
operationsCollection = db.collection("operations");
configCollection = db.collection("config");
callback();
@@ -67,8 +63,8 @@ function connect(callback) {
);
}
function disconnect() {
if (exports.client) exports.client.close();
export function disconnect() {
if (client) client.close();
}
// Optimize projection by removing overlaps
@@ -92,8 +88,8 @@ function optimizeProjection(obj) {
return obj;
}
function fetchDevice(id, timestamp, patterns, callback) {
const MAX_DEPTH = config.get("MAX_DEPTH", id);
export function fetchDevice(id, timestamp, patterns, callback) {
const MAX_DEPTH = get("MAX_DEPTH", id);
if (!patterns || !patterns.length) patterns = [[[], (1 << MAX_DEPTH) - 1]];
@@ -476,7 +472,13 @@ function fetchDevice(id, timestamp, patterns, callback) {
});
}
function saveDevice(deviceId, deviceData, isNew, sessionTimestamp, callback) {
export function saveDevice(
deviceId,
deviceData,
isNew,
sessionTimestamp,
callback
) {
const update = { $set: {}, $unset: {}, $addToSet: {}, $pull: {} };
for (const diff of deviceData.timestamps.diff()) {
@@ -724,9 +726,9 @@ function saveDevice(deviceId, deviceData, isNew, sessionTimestamp, callback) {
);
}
function getFaults(deviceId, callback) {
export function getFaults(deviceId, callback) {
faultsCollection
.find({ _id: { $regex: `^${common.escapeRegExp(deviceId)}\\:` } })
.find({ _id: { $regex: `^${escapeRegExp(deviceId)}\\:` } })
.toArray((err, res) => {
if (err) return callback(err);
@@ -745,7 +747,7 @@ function getFaults(deviceId, callback) {
});
}
function saveFault(deviceId, channel, fault, callback) {
export function saveFault(deviceId, channel, fault, callback) {
const id = `${deviceId}:${channel}`;
fault = Object.assign({}, fault);
fault._id = id;
@@ -756,11 +758,11 @@ function saveFault(deviceId, channel, fault, callback) {
faultsCollection.replaceOne({ _id: id }, fault, { upsert: true }, callback);
}
function deleteFault(deviceId, channel, callback) {
export function deleteFault(deviceId, channel, callback) {
faultsCollection.deleteOne({ _id: `${deviceId}:${channel}` }, callback);
}
function getDueTasks(deviceId, timestamp, callback) {
export function getDueTasks(deviceId, timestamp, callback) {
const cur = tasksCollection.find({ device: deviceId }).sort(["timestamp"]);
const tasks = [];
@@ -782,8 +784,8 @@ function getDueTasks(deviceId, timestamp, callback) {
// For API compatibility
if (task.name === "download" && task.file) {
let q;
if (mongodb.ObjectID.isValid(task.file))
q = { _id: { $in: [task.file, new mongodb.ObjectID(task.file)] } };
if (ObjectID.isValid(task.file))
q = { _id: { $in: [task.file, new ObjectID(task.file)] } };
else q = { _id: task.file };
filesCollection.find(q).toArray((err, res) => {
@@ -805,16 +807,16 @@ function getDueTasks(deviceId, timestamp, callback) {
);
}
function clearTasks(deviceId, taskIds, callback) {
export function clearTasks(deviceId, taskIds, callback) {
tasksCollection.deleteMany(
{ _id: { $in: taskIds.map(id => new mongodb.ObjectID(id)) } },
{ _id: { $in: taskIds.map(id => new ObjectID(id)) } },
callback
);
}
function getOperations(deviceId, callback) {
export function getOperations(deviceId, callback) {
operationsCollection
.find({ _id: { $regex: `^${common.escapeRegExp(deviceId)}\\:` } })
.find({ _id: { $regex: `^${escapeRegExp(deviceId)}\\:` } })
.toArray((err, res) => {
if (err) return void callback(err);
@@ -833,7 +835,7 @@ function getOperations(deviceId, callback) {
});
}
function saveOperation(deviceId, commandKey, operation, callback) {
export function saveOperation(deviceId, commandKey, operation, callback) {
const id = `${deviceId}:${commandKey}`;
operation = Object.assign({}, operation);
operation._id = id;
@@ -849,34 +851,34 @@ function saveOperation(deviceId, commandKey, operation, callback) {
);
}
function deleteOperation(deviceId, commandKey, callback) {
export function deleteOperation(deviceId, commandKey, callback) {
operationsCollection.deleteOne(
{ _id: `${deviceId}:${commandKey}` },
callback
);
}
function getPresets(callback) {
export function getPresets(callback) {
presetsCollection.find().toArray(callback);
}
function getObjects(callback) {
export function getObjects(callback) {
objectsCollection.find().toArray(callback);
}
function getProvisions(callback) {
export function getProvisions(callback) {
provisionsCollection.find().toArray(callback);
}
function getVirtualParameters(callback) {
export function getVirtualParameters(callback) {
virtualParametersCollection.find().toArray(callback);
}
function getFiles(callback) {
export function getFiles(callback) {
filesCollection.find().toArray(callback);
}
function getConfig(callback) {
export function getConfig(callback) {
configCollection.find().toArray((err, res) => {
if (err) return void callback(err);
@@ -884,27 +886,8 @@ function getConfig(callback) {
null,
res.map(c => ({
id: c["_id"],
value: expressionParser.parse(c["value"])
value: parse(c["value"])
}))
);
});
}
exports.connect = connect;
exports.disconnect = disconnect;
exports.fetchDevice = fetchDevice;
exports.saveDevice = saveDevice;
exports.getFaults = getFaults;
exports.saveFault = saveFault;
exports.deleteFault = deleteFault;
exports.clearTasks = clearTasks;
exports.saveOperation = saveOperation;
exports.deleteOperation = deleteOperation;
exports.getPresets = getPresets;
exports.getObjects = getObjects;
exports.getProvisions = getProvisions;
exports.getVirtualParameters = getVirtualParameters;
exports.getFiles = getFiles;
exports.getDueTasks = getDueTasks;
exports.getOperations = getOperations;
exports.getConfig = getConfig;