Comparing version 1.0.0-alpha.8 to 1.0.0-alpha.9
@@ -38,16 +38,16 @@ /** | ||
export declare class Rate<T extends Key> extends Processor<T, TimeRange> { | ||
private _fieldSpec; | ||
private _allowNegative; | ||
private _previous; | ||
constructor(options: RateOptions); | ||
/** | ||
* Generate a new `TimeRangeEvent` containing the rate per second | ||
* between two events. | ||
*/ | ||
getRate(event: any): Event<TimeRange>; | ||
/** | ||
* Perform the rate operation on the `Event` and the the `_previous` | ||
* `Event` and emit the result. | ||
*/ | ||
addEvent(event: Event<T>): Immutable.List<Event<TimeRange>>; | ||
private _fieldSpec; | ||
private _allowNegative; | ||
private _previous; | ||
constructor(options: RateOptions); | ||
/** | ||
* Perform the rate operation on the `Event` and the the `_previous` | ||
* `Event` and emit the result. | ||
*/ | ||
addEvent(event: Event<T>): Immutable.List<Event<TimeRange>>; | ||
/** | ||
* Generate a new `TimeRangeEvent` containing the rate per second | ||
* between two events. | ||
*/ | ||
private getRate; | ||
} |
122
lib/rate.js
@@ -40,63 +40,69 @@ "use strict"; | ||
class Rate extends processor_1.Processor { | ||
constructor(options) { | ||
super(); | ||
const { fieldSpec, allowNegative = false } = options; | ||
// Options | ||
this._fieldSpec = _.isString(fieldSpec) ? [fieldSpec] : fieldSpec; | ||
this._allowNegative = allowNegative; | ||
// Previous event | ||
this._previous = null; | ||
constructor(options) { | ||
super(); | ||
const { fieldSpec, allowNegative = false } = options; | ||
// Options | ||
this._fieldSpec = _.isString(fieldSpec) ? [fieldSpec] : fieldSpec; | ||
this._allowNegative = allowNegative; | ||
// Previous event | ||
this._previous = null; | ||
} | ||
/** | ||
* Perform the rate operation on the `Event` and the the `_previous` | ||
* `Event` and emit the result. | ||
*/ | ||
addEvent(event) { | ||
const eventList = new Array(); | ||
if (!this._previous) { | ||
this._previous = event; | ||
return Immutable.List(); | ||
} | ||
/** | ||
* Generate a new `TimeRangeEvent` containing the rate per second | ||
* between two events. | ||
*/ | ||
getRate(event) { | ||
let d = Immutable.Map(); | ||
const previousTime = this._previous.timestamp().getTime(); | ||
const currentTime = event.timestamp().getTime(); | ||
const deltaTime = (currentTime - previousTime) / 1000; | ||
this._fieldSpec.forEach(path => { | ||
const fieldPath = util_1.default.fieldAsArray(path); | ||
const ratePath = fieldPath.slice(); | ||
ratePath[ratePath.length - 1] += "_rate"; | ||
const previousVal = this._previous.get(fieldPath); | ||
const currentVal = event.get(fieldPath); | ||
let rate = null; | ||
if (!_.isNumber(previousVal) || !_.isNumber(currentVal)) { | ||
// tslint:disable-next-line | ||
console.warn(`Path ${fieldPath} contains a non-numeric value or does not exist`); | ||
} | ||
else { | ||
rate = (currentVal - previousVal) / deltaTime; | ||
} | ||
if (this._allowNegative === false && rate < 0) { | ||
// don't allow negative differentials in certain cases | ||
d = d.setIn(ratePath, null); | ||
} | ||
else { | ||
d = d.setIn(ratePath, rate); | ||
} | ||
}); | ||
return new event_1.Event(timerange_1.timerange(previousTime, currentTime), d); | ||
const rate = this.getRate(event); | ||
if (rate) { | ||
eventList.push(rate); | ||
} | ||
/** | ||
* Perform the rate operation on the `Event` and the the `_previous` | ||
* `Event` and emit the result. | ||
*/ | ||
addEvent(event) { | ||
const eventList = new Array(); | ||
if (!this._previous) { | ||
this._previous = event; | ||
return Immutable.List(); | ||
} | ||
const rate = this.getRate(event); | ||
if (rate) { | ||
eventList.push(rate); | ||
} | ||
this._previous = event; | ||
return Immutable.List(eventList); | ||
} | ||
this._previous = event; | ||
return Immutable.List(eventList); | ||
} | ||
/** | ||
* Generate a new `TimeRangeEvent` containing the rate per second | ||
* between two events. | ||
*/ | ||
getRate(event) { | ||
let d = Immutable.Map(); | ||
const previousTime = this._previous.timestamp().getTime(); | ||
const currentTime = event.timestamp().getTime(); | ||
const deltaTime = (currentTime - previousTime) / 1000; | ||
this._fieldSpec.forEach(path => { | ||
const fieldPath = util_1.default.fieldAsArray(path); | ||
const ratePath = fieldPath.slice(); | ||
ratePath[ratePath.length - 1] += "_rate"; | ||
const previousVal = this._previous.get(fieldPath); | ||
const currentVal = event.get(fieldPath); | ||
let rate = null; | ||
if (_.isNumber(currentVal) && _.isNumber(previousVal)) { | ||
// Calculate the rate | ||
rate = (currentVal - previousVal) / deltaTime; | ||
} else if ( | ||
(previousVal !== null && !_.isNumber(previousVal)) || | ||
(currentVal !== null && !_.isNumber(currentVal)) | ||
) { | ||
// Only issue warning if the current or previous values are bad | ||
// i.e. not a number or not null (null values result in null output) | ||
console.warn( | ||
`Event field "${fieldPath}" is a non-numeric or non-null value` | ||
); | ||
} | ||
d = | ||
this._allowNegative === false && rate < 0 | ||
? (d = d.setIn(ratePath, null)) // don't allow negative differentials in certain cases | ||
: (d = d.setIn(ratePath, rate)); | ||
}); | ||
return new event_1.Event( | ||
timerange_1.timerange(previousTime, currentTime), | ||
d | ||
); | ||
} | ||
} | ||
exports.Rate = Rate; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7R0FRRzs7QUFFSCx1Q0FBdUM7QUFDdkMsNEJBQTRCO0FBRTVCLG1DQUFnQztBQUVoQywyQ0FBd0M7QUFDeEMsMkNBQW1EO0FBQ25ELGlDQUEwQjtBQUkxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFhLElBQW9CLFNBQVEscUJBQXVCO0lBTzVELFlBQVksT0FBb0I7UUFDNUIsS0FBSyxFQUFFLENBQUM7UUFDUixNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsR0FBRyxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFckQsVUFBVTtRQUNWLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO1FBRXBDLGlCQUFpQjtRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLEtBQUs7UUFDVCxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFlLENBQUM7UUFFckMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDaEQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBRXRELElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzNCLE1BQU0sU0FBUyxHQUFHLGNBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQztZQUV6QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXhDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztZQUNoQixJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ3JELDJCQUEyQjtnQkFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLFNBQVMsaURBQWlELENBQUMsQ0FBQzthQUNwRjtpQkFBTTtnQkFDSCxJQUFJLEdBQUcsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLEdBQUcsU0FBUyxDQUFDO2FBQ2pEO1lBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO2dCQUMzQyxzREFBc0Q7Z0JBQ3RELENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUMvQjtpQkFBTTtnQkFDSCxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDL0I7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxhQUFLLENBQUMscUJBQVMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVEsQ0FBQyxLQUFlO1FBQ3BCLE1BQU0sU0FBUyxHQUFHLElBQUksS0FBSyxFQUFvQixDQUFDO1FBRWhELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLE9BQU8sU0FBUyxDQUFDLElBQUksRUFBb0IsQ0FBQztTQUM3QztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsSUFBSSxJQUFJLEVBQUU7WUFDTixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hCO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFFdkIsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7Q0FDSjtBQTlFRCxvQkE4RUMifQ== | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7R0FRRzs7QUFFSCx1Q0FBdUM7QUFDdkMsNEJBQTRCO0FBRTVCLG1DQUFnQztBQUVoQywyQ0FBd0M7QUFDeEMsMkNBQW1EO0FBQ25ELGlDQUEwQjtBQUkxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFhLElBQW9CLFNBQVEscUJBQXVCO0lBTzVELFlBQVksT0FBb0I7UUFDNUIsS0FBSyxFQUFFLENBQUM7UUFDUixNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsR0FBRyxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFckQsVUFBVTtRQUNWLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO1FBRXBDLGlCQUFpQjtRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksUUFBUSxDQUFDLEtBQWU7UUFDM0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQW9CLENBQUM7UUFFaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsT0FBTyxTQUFTLENBQUMsSUFBSSxFQUFvQixDQUFDO1NBQzdDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLElBQUksRUFBRTtZQUNOLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDeEI7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUV2QixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7T0FHRztJQUNLLE9BQU8sQ0FBQyxLQUFlO1FBQzNCLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQWUsQ0FBQztRQUVyQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoRCxNQUFNLFNBQVMsR0FBRyxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7UUFFdEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDM0IsTUFBTSxTQUFTLEdBQUcsY0FBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDO1lBRXpDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFeEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBRWhCLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUNuRCxxQkFBcUI7Z0JBQ3JCLElBQUksR0FBRyxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsR0FBRyxTQUFTLENBQUM7YUFDakQ7aUJBQU0sSUFDSCxDQUFDLFdBQVcsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNsRCxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQ2xEO2dCQUNFLCtEQUErRDtnQkFDL0Qsb0VBQW9FO2dCQUNwRSxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixTQUFTLHNDQUFzQyxDQUFDLENBQUM7YUFDakY7WUFFRCxDQUFDO2dCQUNHLElBQUksQ0FBQyxjQUFjLEtBQUssS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDO29CQUNyQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxzREFBc0Q7b0JBQ3RGLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLGFBQUssQ0FBQyxxQkFBUyxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0NBQ0o7QUFsRkQsb0JBa0ZDIn0= |
@@ -39,238 +39,246 @@ "use strict"; | ||
class TimeRange extends key_1.Key { | ||
constructor(arg1, arg2) { | ||
super(); | ||
if (arg1 instanceof TimeRange) { | ||
const other = arg1; | ||
this._range = other._range; | ||
} | ||
else if (arg1 instanceof Immutable.List) { | ||
const rangeList = arg1; | ||
this._range = rangeList; | ||
} | ||
else if (arg1 instanceof Array) { | ||
const rangeArray = arg1; | ||
this._range = Immutable.List([new Date(rangeArray[0]), new Date(rangeArray[1])]); | ||
} | ||
else { | ||
const b = arg1; | ||
const e = arg2; | ||
if (_.isDate(b) && _.isDate(e)) { | ||
this._range = Immutable.List([new Date(b.getTime()), new Date(e.getTime())]); | ||
} | ||
else if (moment.isMoment(b) && moment.isMoment(e)) { | ||
this._range = Immutable.List([new Date(b.valueOf()), new Date(e.valueOf())]); | ||
} | ||
else if (time_1.Time.isTime(b) && time_1.Time.isTime(e)) { | ||
this._range = Immutable.List([new Date(b.valueOf()), new Date(e.valueOf())]); | ||
} | ||
else if (_.isNumber(b) && _.isNumber(e)) { | ||
this._range = Immutable.List([new Date(b), new Date(e)]); | ||
} | ||
} | ||
constructor(arg1, arg2) { | ||
super(); | ||
if (arg1 instanceof TimeRange) { | ||
const other = arg1; | ||
this._range = other._range; | ||
} else if (arg1 instanceof Immutable.List) { | ||
const rangeList = arg1; | ||
this._range = rangeList; | ||
} else if (arg1 instanceof Array) { | ||
const rangeArray = arg1; | ||
this._range = Immutable.List([ | ||
new Date(rangeArray[0]), | ||
new Date(rangeArray[1]) | ||
]); | ||
} else { | ||
const b = arg1; | ||
const e = arg2; | ||
if (_.isDate(b) && _.isDate(e)) { | ||
this._range = Immutable.List([ | ||
new Date(b.getTime()), | ||
new Date(e.getTime()) | ||
]); | ||
} else if (moment.isMoment(b) && moment.isMoment(e)) { | ||
this._range = Immutable.List([ | ||
new Date(b.valueOf()), | ||
new Date(e.valueOf()) | ||
]); | ||
} else if (time_1.Time.isTime(b) && time_1.Time.isTime(e)) { | ||
this._range = Immutable.List([ | ||
new Date(b.valueOf()), | ||
new Date(e.valueOf()) | ||
]); | ||
} else if (_.isNumber(b) && _.isNumber(e)) { | ||
this._range = Immutable.List([new Date(b), new Date(e)]); | ||
} | ||
} | ||
type() { | ||
return "timerange"; | ||
} | ||
type() { | ||
return "timerange"; | ||
} | ||
/** | ||
* Returns the internal range, which is an `Immutable.List` of two elements | ||
* containing begin and end times as `Date`'s. | ||
*/ | ||
internal() { | ||
return this._range; | ||
} | ||
/** | ||
* Returns the `TimeRange` as JSON, which will be a Javascript array | ||
* of two `ms` timestamps. | ||
*/ | ||
toJSON() { | ||
return { timerange: [this.begin().getTime(), this.end().getTime()] }; | ||
} | ||
/** | ||
* Returns the `TimeRange` as a string, useful for serialization. | ||
* | ||
* @return {string} String representation of the TimeRange | ||
*/ | ||
toString() { | ||
return JSON.stringify(this.toJSON()); | ||
} | ||
/** | ||
* Returns the `TimeRange` as a string expressed in local time | ||
*/ | ||
toLocalString() { | ||
return `[${this.begin()}, ${this.end()}]`; | ||
} | ||
/** | ||
* Returns the `TimeRange` as a string expressed in UTC time | ||
*/ | ||
toUTCString() { | ||
return `[${this.begin().toUTCString()}, ${this.end().toUTCString()}]`; | ||
} | ||
/** | ||
* Returns a human friendly version of the `TimeRange`, e.g. | ||
* "Aug 1, 2014 05:19:59 am to Aug 1, 2014 07:41:06 am" | ||
*/ | ||
humanize() { | ||
const begin = moment(this.begin()); | ||
const end = moment(this.end()); | ||
const beginStr = begin.format("MMM D, YYYY hh:mm:ss a"); | ||
const endStr = end.format("MMM D, YYYY hh:mm:ss a"); | ||
return `${beginStr} to ${endStr}`; | ||
} | ||
/** | ||
* Returns a human friendly version of the `TimeRange` | ||
* @example | ||
* Example: "a few seconds ago to a month ago" | ||
*/ | ||
relativeString() { | ||
const begin = moment(this.begin()); | ||
const end = moment(this.end()); | ||
return `${begin.fromNow()} to ${end.fromNow()}`; | ||
} | ||
/** | ||
* Returns the begin time of the `TimeRange`. | ||
*/ | ||
begin() { | ||
return this._range.get(0); | ||
} | ||
/** | ||
* Returns the end time of the `TimeRange`. | ||
*/ | ||
end() { | ||
return this._range.get(1); | ||
} | ||
/** | ||
* Returns the midpoint of the `TimeRange`. | ||
*/ | ||
mid() { | ||
return new Date((+this.begin() + +this.end()) / 2); | ||
} | ||
/** | ||
* Returns a `Time` that is either at the beginning, | ||
* middle or end of this `TimeRange`. Specify the alignment | ||
* of the output `Time` with the `align` parameter. This is | ||
* either: | ||
* * TimeAlignment.Begin | ||
* * TimeAlignment.Middle | ||
* * TimeAlignment.End | ||
*/ | ||
toTime(align) { | ||
switch (align) { | ||
case types_1.TimeAlignment.Begin: | ||
return time_1.time(this.begin()); | ||
break; | ||
case types_1.TimeAlignment.Middle: | ||
return time_1.time(this.mid()); | ||
break; | ||
case types_1.TimeAlignment.End: | ||
return time_1.time(this.end()); | ||
break; | ||
} | ||
/** | ||
* Returns the internal range, which is an `Immutable.List` of two elements | ||
* containing begin and end times as `Date`'s. | ||
*/ | ||
internal() { | ||
return this._range; | ||
} | ||
/** | ||
* Returns the midpoint of the `TimeRange` as the representitive | ||
* timestamp for the timerange. | ||
*/ | ||
timestamp() { | ||
return this.mid(); | ||
} | ||
/** | ||
* Sets a new begin time on the `TimeRange`. The result will be | ||
* a new `TimeRange`. | ||
*/ | ||
setBegin(t) { | ||
return new TimeRange(this._range.set(0, t)); | ||
} | ||
/** | ||
* Sets a new end time on the `TimeRange`. The result will be | ||
* a new `TimeRange`. | ||
*/ | ||
setEnd(t) { | ||
return new TimeRange(this._range.set(1, t)); | ||
} | ||
/** | ||
* Returns if the two `TimeRange`'s can be considered equal, | ||
* in that they have the same times. | ||
*/ | ||
equals(other) { | ||
return ( | ||
this.begin().getTime() === other.begin().getTime() && | ||
this.end().getTime() === other.end().getTime() | ||
); | ||
} | ||
/** | ||
* Determine if a `Date` or a `TimeRange` is contained entirely | ||
* within this `TimeRange` | ||
*/ | ||
contains(other) { | ||
if (_.isDate(other)) { | ||
return this.begin() <= other && this.end() >= other; | ||
} else { | ||
return this.begin() <= other.begin() && this.end() >= other.end(); | ||
} | ||
/** | ||
* Returns the `TimeRange` as JSON, which will be a Javascript array | ||
* of two `ms` timestamps. | ||
*/ | ||
toJSON() { | ||
return { timerange: [this.begin().getTime(), this.end().getTime()] }; | ||
} | ||
/** | ||
* Returns true if this `TimeRange` is completely within the supplied | ||
* other `TimeRange`. | ||
*/ | ||
within(other) { | ||
return this.begin() >= other.begin() && this.end() <= other.end(); | ||
} | ||
/** | ||
* Returns true if the passed in other `TimeRange` overlaps | ||
* this `TimeRange`. | ||
*/ | ||
overlaps(other) { | ||
if ( | ||
(this.contains(other.begin()) && !this.contains(other.end())) || | ||
(this.contains(other.end()) && !this.contains(other.begin())) | ||
) { | ||
return true; | ||
} else { | ||
return false; | ||
} | ||
/** | ||
* Returns the `TimeRange` as a string, useful for serialization. | ||
* | ||
* @return {string} String representation of the TimeRange | ||
*/ | ||
toString() { | ||
return JSON.stringify(this.toJSON()); | ||
} | ||
/** | ||
* Returns true if the passed in other `TimeRange` in no way | ||
* overlaps this `TimeRange`. | ||
*/ | ||
disjoint(other) { | ||
return this.end() < other.begin() || this.begin() > other.end(); | ||
} | ||
/** | ||
* Returns a new `Timerange` which covers the extents of this and | ||
* other combined. | ||
*/ | ||
extents(other) { | ||
const b = this.begin() < other.begin() ? this.begin() : other.begin(); | ||
const e = this.end() > other.end() ? this.end() : other.end(); | ||
return new TimeRange(new Date(b.getTime()), new Date(e.getTime())); | ||
} | ||
/** | ||
* Returns a new `TimeRange` which represents the intersection | ||
* (overlapping) part of this and other. | ||
*/ | ||
intersection(other) { | ||
if (this.disjoint(other)) { | ||
return; | ||
} | ||
/** | ||
* Returns the `TimeRange` as a string expressed in local time | ||
*/ | ||
toLocalString() { | ||
return `[${this.begin()}, ${this.end()}]`; | ||
} | ||
/** | ||
* Returns the `TimeRange` as a string expressed in UTC time | ||
*/ | ||
toUTCString() { | ||
return `[${this.begin().toUTCString()}, ${this.end().toUTCString()}]`; | ||
} | ||
/** | ||
* Returns a human friendly version of the `TimeRange`, e.g. | ||
* "Aug 1, 2014 05:19:59 am to Aug 1, 2014 07:41:06 am" | ||
*/ | ||
humanize() { | ||
const begin = moment(this.begin()); | ||
const end = moment(this.end()); | ||
const beginStr = begin.format("MMM D, YYYY hh:mm:ss a"); | ||
const endStr = end.format("MMM D, YYYY hh:mm:ss a"); | ||
return `${beginStr} to ${endStr}`; | ||
} | ||
/** | ||
* Returns a human friendly version of the `TimeRange` | ||
* @example | ||
* Example: "a few seconds ago to a month ago" | ||
*/ | ||
relativeString() { | ||
const begin = moment(this.begin()); | ||
const end = moment(this.end()); | ||
return `${begin.fromNow()} to ${end.fromNow()}`; | ||
} | ||
/** | ||
* Returns the begin time of the `TimeRange`. | ||
*/ | ||
begin() { | ||
return this._range.get(0); | ||
} | ||
/** | ||
* Returns the end time of the `TimeRange`. | ||
*/ | ||
end() { | ||
return this._range.get(1); | ||
} | ||
/** | ||
* Returns the midpoint of the `TimeRange`. | ||
*/ | ||
mid() { | ||
return new Date((+this.begin() + +this.end()) / 2); | ||
} | ||
/** | ||
* Returns a `Time` that is either at the beginning, | ||
* middle or end of this `TimeRange`. Specify the alignment | ||
* of the output `Time` with the `align` parameter. This is | ||
* either: | ||
* * TimeAlignment.Begin | ||
* * TimeAlignment.Middle | ||
* * TimeAlignment.End | ||
*/ | ||
toTime(align) { | ||
switch (align) { | ||
case types_1.TimeAlignment.Begin: | ||
return time_1.time(this.begin()); | ||
break; | ||
case types_1.TimeAlignment.Middle: | ||
return time_1.time(this.mid()); | ||
break; | ||
case types_1.TimeAlignment.End: | ||
return time_1.time(this.end()); | ||
break; | ||
} | ||
} | ||
/** | ||
* Returns the midpoint of the `TimeRange` as the representitive | ||
* timestamp for the timerange. | ||
*/ | ||
timestamp() { | ||
return this.mid(); | ||
} | ||
/** | ||
* Sets a new begin time on the `TimeRange`. The result will be | ||
* a new `TimeRange`. | ||
*/ | ||
setBegin(t) { | ||
return new TimeRange(this._range.set(0, t)); | ||
} | ||
/** | ||
* Sets a new end time on the `TimeRange`. The result will be | ||
* a new `TimeRange`. | ||
*/ | ||
setEnd(t) { | ||
return new TimeRange(this._range.set(1, t)); | ||
} | ||
/** | ||
* Returns if the two `TimeRange`'s can be considered equal, | ||
* in that they have the same times. | ||
*/ | ||
equals(other) { | ||
return (this.begin().getTime() === other.begin().getTime() && | ||
this.end().getTime() === other.end().getTime()); | ||
} | ||
/** | ||
* Determine if a `Date` or a `TimeRange` is contained entirely | ||
* within this `TimeRange` | ||
*/ | ||
contains(other) { | ||
if (_.isDate(other)) { | ||
return this.begin() <= other && this.end() >= other; | ||
} | ||
else { | ||
return this.begin() <= other.begin() && this.end() >= other.end(); | ||
} | ||
} | ||
/** | ||
* Returns true if this `TimeRange` is completely within the supplied | ||
* other `TimeRange`. | ||
*/ | ||
within(other) { | ||
return this.begin() >= other.begin() && this.end() <= other.end(); | ||
} | ||
/** | ||
* Returns true if the passed in other `TimeRange` overlaps | ||
* this `TimeRange`. | ||
*/ | ||
overlaps(other) { | ||
if ((this.contains(other.begin()) && !this.contains(other.end())) || | ||
(this.contains(other.end()) && !this.contains(other.begin()))) { | ||
return true; | ||
} | ||
else { | ||
return false; | ||
} | ||
} | ||
/** | ||
* Returns true if the passed in other `TimeRange` in no way | ||
* overlaps this `TimeRange`. | ||
*/ | ||
disjoint(other) { | ||
return this.end() < other.begin() || this.begin() > other.end(); | ||
} | ||
/** | ||
* Returns a new `Timerange` which covers the extents of this and | ||
* other combined. | ||
*/ | ||
extents(other) { | ||
const b = this.begin() < other.begin() ? this.begin() : other.begin(); | ||
const e = this.end() > other.end() ? this.end() : other.end(); | ||
return new TimeRange(new Date(b.getTime()), new Date(e.getTime())); | ||
} | ||
/** | ||
* Returns a new `TimeRange` which represents the intersection | ||
* (overlapping) part of this and other. | ||
*/ | ||
intersection(other) { | ||
if (this.disjoint(other)) { | ||
return; | ||
} | ||
const b = this.begin() > other.begin() ? this.begin() : other.begin(); | ||
const e = this.end() < other.end() ? this.end() : other.end(); | ||
return new TimeRange(new Date(b.getTime()), new Date(e.getTime())); | ||
} | ||
/** | ||
* Returns the duration of the `TimeRange` in milliseconds | ||
*/ | ||
duration() { | ||
return this.end().getTime() - this.begin().getTime(); | ||
} | ||
/** | ||
* A user friendly version of the duration. | ||
*/ | ||
humanizeDuration() { | ||
return moment.duration(this.duration()).humanize(); | ||
} | ||
const b = this.begin() > other.begin() ? this.begin() : other.begin(); | ||
const e = this.end() < other.end() ? this.end() : other.end(); | ||
return new TimeRange(new Date(b.getTime()), new Date(e.getTime())); | ||
} | ||
/** | ||
* Returns the duration of the `TimeRange` in milliseconds | ||
*/ | ||
duration() { | ||
return this.end().getTime() - this.begin().getTime(); | ||
} | ||
/** | ||
* A user friendly version of the duration. | ||
*/ | ||
humanizeDuration() { | ||
return moment.duration(this.duration()).humanize(); | ||
} | ||
} | ||
exports.TimeRange = TimeRange; | ||
function timerange(arg1, arg2) { | ||
return new TimeRange(arg1, arg2); | ||
return new TimeRange(arg1, arg2); | ||
} | ||
exports.timerange = timerange; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXJhbmdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RpbWVyYW5nZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7O0FBRUgsdUNBQXVDO0FBQ3ZDLDRCQUE0QjtBQUM1QixpQ0FBaUM7QUFHakMsK0JBQTRCO0FBQzVCLGlDQUFvQztBQUNwQyxtQ0FBd0M7QUFFeEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFhLFNBQVUsU0FBUSxTQUFHO0lBbUI5QixZQUFZLElBQVMsRUFBRSxJQUFVO1FBQzdCLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxJQUFJLFlBQVksU0FBUyxFQUFFO1lBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQztZQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7U0FDOUI7YUFBTSxJQUFJLElBQUksWUFBWSxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQ3ZDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztTQUMzQjthQUFNLElBQUksSUFBSSxZQUFZLEtBQUssRUFBRTtZQUM5QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BGO2FBQU07WUFDSCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDZixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDZixJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hGO2lCQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNqRCxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDaEY7aUJBQU0sSUFBSSxXQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoRjtpQkFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzVEO1NBQ0o7SUFDTCxDQUFDO0lBRUQsSUFBSTtRQUNBLE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRO1FBQ0osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNO1FBQ0YsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsUUFBUTtRQUNKLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1QsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1AsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQztJQUMxRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUTtRQUNKLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNuQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDL0IsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUNwRCxPQUFPLEdBQUcsUUFBUSxPQUFPLE1BQU0sRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYztRQUNWLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNuQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDL0IsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxHQUFHO1FBQ0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxHQUFHO1FBQ0MsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLEtBQW9CO1FBQ3ZCLFFBQVEsS0FBSyxFQUFFO1lBQ1gsS0FBSyxxQkFBYSxDQUFDLEtBQUs7Z0JBQ3BCLE9BQU8sV0FBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQixNQUFNO1lBQ1YsS0FBSyxxQkFBYSxDQUFDLE1BQU07Z0JBQ3JCLE9BQU8sV0FBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QixNQUFNO1lBQ1YsS0FBSyxxQkFBYSxDQUFDLEdBQUc7Z0JBQ2xCLE9BQU8sV0FBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QixNQUFNO1NBQ2I7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUztRQUNMLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRLENBQUMsQ0FBTztRQUNaLE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxDQUFPO1FBQ1YsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEtBQWdCO1FBQ25CLE9BQU8sQ0FDSCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRTtZQUNsRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUNqRCxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVEsQ0FBQyxLQUF1QjtRQUM1QixJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUM7U0FDdkQ7YUFBTTtZQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ3JFO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxLQUFnQjtRQUNuQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFDLEtBQWdCO1FBQ3JCLElBQ0ksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM3RCxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQy9EO1lBQ0UsT0FBTyxJQUFJLENBQUM7U0FDZjthQUFNO1lBQ0gsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFDLEtBQWdCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3BFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxPQUFPLENBQUMsS0FBZ0I7UUFDcEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDOUQsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUFZLENBQUMsS0FBZ0I7UUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzlELE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ0osT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQjtRQUNaLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0NBQ0o7QUE3UUQsOEJBNlFDO0FBV0QsU0FBUyxTQUFTLENBQUMsSUFBUyxFQUFFLElBQVU7SUFDcEMsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVRLDhCQUFTIn0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXJhbmdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RpbWVyYW5nZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7O0FBRUgsdUNBQXVDO0FBQ3ZDLDRCQUE0QjtBQUM1QixpQ0FBaUM7QUFHakMsK0JBQTRCO0FBQzVCLGlDQUFvQztBQUNwQyxtQ0FBd0M7QUFFeEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFhLFNBQVUsU0FBUSxTQUFHO0lBbUI5QixZQUFZLElBQVMsRUFBRSxJQUFVO1FBQzdCLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxJQUFJLFlBQVksU0FBUyxFQUFFO1lBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQztZQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7U0FDOUI7YUFBTSxJQUFJLElBQUksWUFBWSxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQ3ZDLE1BQU0sU0FBUyxHQUFHLElBQTRCLENBQUM7WUFDL0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7U0FDM0I7YUFBTSxJQUFJLElBQUksWUFBWSxLQUFLLEVBQUU7WUFDOUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwRjthQUFNO1lBQ0gsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2YsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoRjtpQkFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDakQsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hGO2lCQUFNLElBQUksV0FBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDaEY7aUJBQU0sSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM1RDtTQUNKO0lBQ0wsQ0FBQztJQUVELElBQUk7UUFDQSxPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUTtRQUNKLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTTtRQUNGLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN6RSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVE7UUFDSixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYTtRQUNULE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDOUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNQLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUM7SUFDMUUsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVE7UUFDSixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbkMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUN4RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDcEQsT0FBTyxHQUFHLFFBQVEsT0FBTyxNQUFNLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWM7UUFDVixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbkMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsR0FBRztRQUNDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsR0FBRztRQUNDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILE1BQU0sQ0FBQyxLQUFvQjtRQUN2QixRQUFRLEtBQUssRUFBRTtZQUNYLEtBQUsscUJBQWEsQ0FBQyxLQUFLO2dCQUNwQixPQUFPLFdBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDMUIsTUFBTTtZQUNWLEtBQUsscUJBQWEsQ0FBQyxNQUFNO2dCQUNyQixPQUFPLFdBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDeEIsTUFBTTtZQUNWLEtBQUsscUJBQWEsQ0FBQyxHQUFHO2dCQUNsQixPQUFPLFdBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDeEIsTUFBTTtTQUNiO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVM7UUFDTCxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFDLENBQU87UUFDWixPQUFPLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsQ0FBTztRQUNWLE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxLQUFnQjtRQUNuQixPQUFPLENBQ0gsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUU7WUFDbEQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FDakQsQ0FBQztJQUNOLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRLENBQUMsS0FBdUI7UUFDNUIsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksS0FBSyxDQUFDO1NBQ3ZEO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNyRTtJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsS0FBZ0I7UUFDbkIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdEUsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVEsQ0FBQyxLQUFnQjtRQUNyQixJQUNJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDN0QsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUMvRDtZQUNFLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7YUFBTTtZQUNILE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVEsQ0FBQyxLQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLEtBQWdCO1FBQ3BCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzlELE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLEtBQWdCO1FBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN0QixPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0RSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM5RCxPQUFPLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNKLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0I7UUFDWixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdkQsQ0FBQztDQUNKO0FBN1FELDhCQTZRQztBQVdELFNBQVMsU0FBUyxDQUFDLElBQVMsRUFBRSxJQUFVO0lBQ3BDLE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFUSw4QkFBUyJ9 |
{ | ||
"name": "pondjs", | ||
"version": "1.0.0-alpha.8", | ||
"version": "1.0.0-alpha.9", | ||
"description": "A TimeSeries library built on Immutable.js with Typescript", | ||
@@ -10,16 +10,17 @@ "main": "lib/exports.js", | ||
"dependencies": { | ||
"immutable": "^4.0.0-rc.9", | ||
"lodash": "^4.17.4", | ||
"moment": "^2.18.1", | ||
"moment-timezone": "^0.5.13" | ||
"immutable": "^4.0.0-rc.12", | ||
"lodash": "^4.17.11", | ||
"moment": "^2.24.0", | ||
"moment-timezone": "^0.5.25" | ||
}, | ||
"devDependencies": { | ||
"@types/lodash": "^4.14.71", | ||
"jest": "^21.2.1 ", | ||
"jest-cli": "^21.2.1", | ||
"prettier": "^1.9.1", | ||
"ts-jest": "^21.2.4", | ||
"tslint": "^5.5.0", | ||
"typedoc": "^0.9.0", | ||
"typescript": "^2.5.3" | ||
"@types/lodash": "^4.14.123", | ||
"jest": "^24.7.1", | ||
"jest-cli": "^24.7.1", | ||
"prettier": "^1.17.0", | ||
"ts-jest": "^24.0.2", | ||
"tslint": "^5.16.0", | ||
"tslint-config-prettier": "^1.18.0", | ||
"typedoc": "^0.14.2", | ||
"typescript": "^3.4.5" | ||
}, | ||
@@ -26,0 +27,0 @@ "scripts": { |
@@ -108,1 +108,18 @@ declare const it: any; | ||
}); | ||
it("can output a null rate when data has nulls", () => { | ||
const INPUT = [[0, 10], [30000, 40], [60000, null], [90000, 100], [120000, 130]]; | ||
const list = INPUT.map(e => { | ||
return event(time(e[0]), Immutable.Map({ in: e[1] })); | ||
}); | ||
const c = sortedCollection(Immutable.List(list)); | ||
const rates = c.rate({ fieldSpec: "in" }); | ||
expect(rates.size()).toEqual(list.length - 1); | ||
expect(rates.at(0).get("in_rate")).toEqual(1); | ||
expect(rates.at(1).get("in_rate")).toEqual(null); | ||
expect(rates.at(2).get("in_rate")).toEqual(null); | ||
expect(rates.at(3).get("in_rate")).toEqual(1); | ||
}); |
@@ -21,4 +21,3 @@ /** | ||
import { duration } from "../src/duration"; | ||
import { event } from "../src/event"; | ||
import { indexedEvent, timeEvent, timeRangeEvent } from "../src/event"; | ||
import { event, indexedEvent, timeEvent, timeRangeEvent } from "../src/event"; | ||
import { avg, max, sum } from "../src/functions"; | ||
@@ -28,4 +27,9 @@ import { index, Index } from "../src/index"; | ||
import { timerange } from "../src/timerange"; | ||
import { TimeSeries, TimeSeriesWireFormat } from "../src/timeseries"; | ||
import { indexedSeries, timeRangeSeries, timeSeries } from "../src/timeseries"; | ||
import { | ||
indexedSeries, | ||
timeRangeSeries, | ||
TimeSeries, | ||
timeSeries, | ||
TimeSeriesWireFormat | ||
} from "../src/timeseries"; | ||
import { TimeAlignment } from "../src/types"; | ||
@@ -458,3 +462,6 @@ import { window } from "../src/window"; | ||
events.push(timeEvent(time(new Date(2015, 8, 1)), Immutable.Map({ value: 14 }))); | ||
const series = new TimeSeries({ name: "events", events: Immutable.List(events) }); | ||
const series = new TimeSeries({ | ||
name: "events", | ||
events: Immutable.List(events) | ||
}); | ||
expect(series.size()).toBe(2); | ||
@@ -492,3 +499,6 @@ }); | ||
const events = []; | ||
const series = new TimeSeries({ name: "events", events: Immutable.List(events) }); | ||
const series = new TimeSeries({ | ||
name: "events", | ||
events: Immutable.List(events) | ||
}); | ||
expect(series.size()).toBe(0); | ||
@@ -631,3 +641,6 @@ }); | ||
); | ||
const series = new TimeSeries({ name: "Map traffic", events: Immutable.List(events) }); | ||
const series = new TimeSeries({ | ||
name: "Map traffic", | ||
events: Immutable.List(events) | ||
}); | ||
expect(series.at(0).get("NASA_north").in).toBe(100); | ||
@@ -634,0 +647,0 @@ expect(series.at(3).get("NASA_south").out).toBe(175); |
{ | ||
"extends": "tslint:recommended", | ||
"rules": { | ||
"max-line-length": [ | ||
true, | ||
100 | ||
], | ||
"member-access": false, | ||
"variable-name": [ | ||
true, | ||
"ban-keywords", | ||
"check-format", | ||
"allow-leading-underscore" | ||
], | ||
"object-literal-sort-keys": false, | ||
"no-require-imports": false, | ||
"interface-name": [ | ||
true, | ||
"never-prefix" | ||
], | ||
"arrow-parens": [ | ||
true, | ||
"ban-single-arg-parens" | ||
], | ||
"trailing-comma": [ | ||
false, | ||
{ | ||
"multiline": "never", | ||
"singleline": "never" | ||
} | ||
], | ||
"semicolon": [ | ||
false | ||
] | ||
} | ||
} | ||
"defaultSeverity": "error", | ||
"extends": ["tslint:latest", "tslint-config-prettier"], | ||
"jsRules": {}, | ||
"rules": { | ||
"no-console": false, | ||
"interface-name": false, | ||
"no-submodule-imports": false, | ||
"no-object-literal-type-assertion": false, | ||
"object-literal-sort-keys": false | ||
}, | ||
"rulesDirectory": [] | ||
} |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
16930
1118687
9
Updatedimmutable@^4.0.0-rc.12
Updatedlodash@^4.17.11
Updatedmoment@^2.24.0
Updatedmoment-timezone@^0.5.25