series-processing
Version:
Time-series processing for forex, market analysis, including MA, EMA,...
119 lines (92 loc) • 2.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _dataStream = require('./data-stream');
var _dataStream2 = _interopRequireDefault(_dataStream);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var TimeSeries = function TimeSeries(options) {
var _this = this;
_classCallCheck(this, TimeSeries);
this.chain = [];
this.getDataSeries = function () {
return _this.dataStream.getData();
};
this.getLatest = function () {
var num = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
return _this.dataStream.getLast(num);
};
this.initData = function () {
var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var skip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
if (skip) {
_this.dataStream.setData(data);
} else {
// Append one-by-one
_this.dataStream.setData(null);
data.map(function (record) {
return _this.appendData(record);
});
}
return _this;
};
this.appendData = function (record) {
// TODO How about update last data?
_this.dataStream.push(record);
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = _this.chain[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var _ref2 = _step.value;
var type = _ref2.type,
func = _ref2.func;
if (type === 'map') {
Object.assign(record, func(record, _this.dataStream));
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return _this;
};
this.map = function (func) {
if (Array.isArray(func)) {
// Recursive add to chain if array
func.map(function (f) {
return _this.map(f);
});
} else if (typeof func === 'function') {
_this.chain.push({
type: 'map',
func: func
});
// TODO Call func if data exists
if (_this.dataStream.hasData()) {}
}
return _this;
};
this.aggregate = function (func) {
return func(_this.dataStream);
};
this.options = Object.assign({
// Default value
}, options);
this.dataStream = new _dataStream2.default();
}
// TODO Reduce function?
;
exports.default = TimeSeries;
module.exports = exports['default'];