@tucmc/hazel
Version:
Clubs Data Processing Framework
77 lines (76 loc) • 3.3 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DMapUtil = void 0;
const fs_1 = __importDefault(require("fs"));
const Debugger_1 = require("../debugger/Debugger");
class DMapUtil {
static debug = new Debugger_1.Debugger('DMapUtil');
static buildChanges(data) {
const fname = `${new Date().getTime()}.json`;
this.debug.info(`generating review file ${fname}`);
let changes;
let live = false;
if (Array.isArray(data)) {
changes = data
.filter((v) => v.isEdited())
.map((v) => {
return {
type: !v.document || v.synthesized
? 'create'
: v.isDeleted()
? 'delete'
: 'update',
_docID: v.document,
from: v.saved,
to: v.document
? v.synthesized
? v.data()
: v.changes
: v.getOriginal()
};
});
}
else {
live = data.isLive();
if (!data.isLive()) {
this.debug.warn('changes from cached DMap are not accepted by the database changes handler by default.');
}
changes = data
.filter((_, v) => v.isEdited())
.map((_, v) => {
return {
type: !v.document || v.synthesized
? 'create'
: v.isDeleted()
? 'delete'
: 'update',
_docID: v.document,
from: v.saved,
to: v.document
? v.synthesized
? v.data()
: v.changes
: v.getOriginal()
};
});
}
const deletion = changes.filter((c) => c.type === 'delete');
const update = changes.filter((c) => c.type === 'update');
const create = changes.filter((c) => c.type === 'create');
this.debug.info(`change analysed with ${changes.length} entities affected (${deletion.length} deletion, ${update.length} update, ${create.length} creation).`);
fs_1.default.writeFileSync(`review/${process.env.RUNTIME_MODE}/${fname}`, JSON.stringify(changes, null, 4));
return { changes: changes, isLive: live };
}
static loadChanges(fpath) {
const changes = JSON.parse(fs_1.default.readFileSync(fpath).toString());
const deletion = changes.filter((c) => c.type === 'delete');
const update = changes.filter((c) => c.type === 'update');
const create = changes.filter((c) => c.type === 'create');
this.debug.info(`change loaded from ${fpath} with ${changes.length} entities affected (${deletion.length} deletion, ${update.length} update, ${create.length} creation).`);
return { changes: changes, isLive: false };
}
}
exports.DMapUtil = DMapUtil;