diffusion
Version:
Diffusion JavaScript client
160 lines (159 loc) • 6.18 kB
JavaScript
;
/**
* @module Services.Timeseries
*/
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.RangeQueryResultSerialiserClass = void 0;
var errors_1 = require("./../../../errors/errors");
var Codec = require("./../../io/codec");
var serialiser_1 = require("./../../serialisers/serialiser");
var uint8array_1 = require("./../../util/uint8array");
var Long = require("long");
var range_query_result_1 = require("./range-query-result");
var time_series_event_1 = require("./time-series-event");
var time_series_event_metadata_1 = require("./time-series-event-metadata");
var ORIGINAL_EVENT = 0;
var EDIT_EVENT = 1;
var METADATA_OFFSETS = 2;
var AUTHOR_ENCODING = 3;
/**
* Offsets of a range query result in the time series
*/
var Offsets = /** @class */ (function () {
/**
* Create a new Offsets instance
*
* @param sequence the sequence number offset
* @param timestamp the time offset
*/
function Offsets(sequence, timestamp) {
this.sequence = sequence;
this.timestamp = timestamp;
}
return Offsets;
}());
/**
* Read event metadata
*
* @param bis the input stream
* @param offsets the offsets of the range in the result
* @param codeToAuthor a mapping between author codes and authors
* @return the metadata that was read
*/
function readMetadata(input, offsets, codeToAuthor) {
var sequence = Codec.readInt64(input).add(offsets.sequence);
var timestamp = Codec.readInt64(input).add(offsets.timestamp);
var code = Codec.readBytes(input);
var decoded = codeToAuthor[code.toString()];
var author = decoded ? decoded : uint8array_1.uint8toUtf8(code);
return new time_series_event_metadata_1.EventMetadataImpl(sequence.toNumber(), timestamp.toNumber(), author);
}
/**
* Read an original event
*
* @param bis the input stream
* @param offsets the offsets of the range in the result
* @param codeToAuthor a mapping between author codes and authors
* @return the original event that was read
*/
function readOriginalEvent(bis, offsets, codeToAuthor) {
var metadata = readMetadata(bis, offsets, codeToAuthor);
return time_series_event_1.EventImpl.create(metadata, metadata, Codec.readBytes(bis));
}
/**
* Read an edit event
*
* @param bis the input stream
* @param offsets the offsets of the range in the result
* @param codeToAuthor a mapping between author codes and authors
* @return the edit event that was read
*/
function readEditEvent(bis, offsets, codeToAuthor) {
var originalEvent = readMetadata(bis, offsets, codeToAuthor);
var metadata = readMetadata(bis, offsets, codeToAuthor);
return time_series_event_1.EventImpl.create(metadata, originalEvent, Codec.readBytes(bis));
}
/**
* Read time series offsets
*
* @param bis the input stream
* @return the offsets of the range in the result that were read
*/
function readMetadataOffsets(bis) {
return new Offsets(Codec.readInt64(bis), Codec.readInt64(bis));
}
/**
* Read the author encoding an store it in the `codeToAuthor` map
*
* @param bis the input stream
* @param codeToAuthor a mapping between author codes and authors
*/
function readAuthorEncoding(bis, codeToAuthor) {
var code = Codec.readBytes(bis);
codeToAuthor[code.toString()] = Codec.readString(bis);
}
/**
* Serialiser for {@link RangeQueryResult}
*/
var RangeQueryResultSerialiserClass = /** @class */ (function (_super) {
__extends(RangeQueryResultSerialiserClass, _super);
function RangeQueryResultSerialiserClass(datatypes) {
var _this = _super.call(this) || this;
_this.datatypes = datatypes;
return _this;
}
/**
* Read a {@link RangeQueryResult} from the stream
*
* @param bis the input stream
* @return the {@link RangeQueryResult} that was read
*/
RangeQueryResultSerialiserClass.prototype.read = function (input) {
var dataType = this.datatypes.get(Codec.readString(input));
/* istanbul ignore next */
if (dataType === null) {
throw new errors_1.IOError('Received unexpected data type');
}
var selectedCount = Codec.readInt64(input);
var offsets = new Offsets(Long.ZERO, Long.ZERO);
var codeToAuthor = {};
var events = [];
var limit = Codec.readInt32(input);
for (var i = 0; i < limit; ++i) {
switch (Codec.readByte(input)) {
case ORIGINAL_EVENT:
events.push(readOriginalEvent(input, offsets, codeToAuthor));
break;
case EDIT_EVENT:
events.push(readEditEvent(input, offsets, codeToAuthor));
break;
case METADATA_OFFSETS:
offsets = readMetadataOffsets(input);
break;
case AUTHOR_ENCODING:
readAuthorEncoding(input, codeToAuthor);
break;
default:
readAuthorEncoding(input, codeToAuthor);
}
}
return new range_query_result_1.RangeQueryResult(dataType, selectedCount, events);
};
return RangeQueryResultSerialiserClass;
}(serialiser_1.AbstractSerialiser));
exports.RangeQueryResultSerialiserClass = RangeQueryResultSerialiserClass;