flexmonster-mongo-connector
Version:
Custom data source API implementation for MongoDB
80 lines • 3.35 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ArrayDataObject = void 0;
const AbstractDataObject_1 = require("./AbstractDataObject");
const timers_1 = require("timers");
class ArrayDataObject extends AbstractDataObject_1.AbstractDataObject {
constructor(parsedData, startDate, dataMemorySize = 0) {
super();
this.data = parsedData;
this.computationTime = new Date().getTime() - startDate.getTime();
this.dataMemorySize = dataMemorySize;
this.isCompleted = true;
}
getChunk(iterator) {
let item = iterator.next();
let chunk = this.data[item.value];
let isFinished = item.done || item.value + 1 === this.data.length;
return {
data: chunk,
isFinished: isFinished
};
}
getChunkAsync(iterator) {
return __awaiter(this, void 0, void 0, function* () {
const index = iterator.next().value;
if (!this.isCompleted && index + 1 >= this.data.length) {
return this.subscribeForChunk(index);
}
let isFinished = (index + 1 === this.data.length);
return {
data: this.data[index],
isFinished: isFinished
};
});
}
subscribeForChunk(index, code) {
return __awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => {
const intervalTimeout = setInterval(() => {
if (index < this.data.length) {
(0, timers_1.clearInterval)(intervalTimeout);
resolve({
data: this.data[index],
isFinished: (index + 1 === this.data.length && this.isCompleted)
});
}
}, 700);
});
});
}
getIterationKeys() {
return this.data.keys();
}
push(arrayDataObject) {
this.dataMemorySize += arrayDataObject.dataMemorySize;
this.computationTime += arrayDataObject.computationTime;
for (let i = 0; i < arrayDataObject.data.length; i++) {
this.data.push(arrayDataObject.data[i]);
}
return;
}
getNumberOfItems() {
let numberOfMembers = 0;
for (let i = 0; i < this.data.length; i++) {
numberOfMembers += this.data[i].length;
}
return numberOfMembers;
}
}
exports.ArrayDataObject = ArrayDataObject;
//# sourceMappingURL=ArrayDataObject.js.map