-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
loki-incremental-adapter.js
88 lines (78 loc) · 2.19 KB
/
loki-incremental-adapter.js
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
(function (root, factory) {
module.exports = factory();
})(this, function () {
return (function () {
const fs = require("fs");
const accessDataDir = (datadir) => {
return new Promise((resolve, reject) => {
fs.lstat(datadir, (err, stats) => {
if (err) {
reject({
message: "Dir does not exist",
});
}
resolve(stats);
});
});
};
const saveRecord = (coll, obj, dir) => {
console.log(`File is ${dir}/${coll}/${obj.$loki}.json`);
fs.writeFile(
`${dir}/${coll}/${obj.$loki}.json`,
JSON.stringify(obj),
{
encoding: "utf8",
},
(err) => {
if (err) {
console.log("Document save failed.");
throw err;
}
console.log("Document saved correctly");
}
);
};
const iterateFolders = (db, dir) => {
console.log(`Colls: ${db.listCollections().length}`);
console.log(`Changes: ${db.generateChangesNotification().length}`);
db.generateChangesNotification().forEach((change) => {
saveRecord(change.name, change.obj, dir);
});
};
class LokiIncrementalAdapter {
constructor(options) {
const config = options || {
journaling: false,
format: "json",
};
this.mode = "reference";
this.journaling = config.journaling;
this.format = config.format;
}
checkAvailability() {
if (typeof fs !== "undefined" && fs) return true;
return false;
}
exportDatabase(dir, dbref, callback) {
console.log("Saving with incremental adapter");
console.log("Database dir is " + dir);
const promise = accessDataDir(dir);
console.log(promise);
promise.then(() => {
console.log("iterating folders...");
iterateFolders(dbref, dir);
});
promise.catch((err) => {
console.log(err);
});
if (callback) {
callback();
}
}
loadDatabase(dbname, callback) {
console.log(this, dbname, callback);
}
}
return LokiIncrementalAdapter;
})();
});