data-unit
Version:
Simple TypeScript/ES2017 classes to represent unit values (like time/data size)
124 lines • 4.99 kB
JavaScript
;
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 (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var Amount_1 = require("./Amount");
var DataAmountParseError = /** @class */ (function (_super) {
__extends(DataAmountParseError, _super);
function DataAmountParseError() {
return _super !== null && _super.apply(this, arguments) || this;
}
return DataAmountParseError;
}(Error));
exports.DataAmountParseError = DataAmountParseError;
var DataUnit;
(function (DataUnit) {
DataUnit[DataUnit["BITS"] = 0] = "BITS";
DataUnit[DataUnit["BYTES"] = 1] = "BYTES";
DataUnit[DataUnit["KILOBITS"] = 2] = "KILOBITS";
DataUnit[DataUnit["KILOBYTES"] = 3] = "KILOBYTES";
DataUnit[DataUnit["MEGABITS"] = 4] = "MEGABITS";
DataUnit[DataUnit["MEGABYTES"] = 5] = "MEGABYTES";
DataUnit[DataUnit["GIGABITS"] = 6] = "GIGABITS";
DataUnit[DataUnit["GIGABYTES"] = 7] = "GIGABYTES";
DataUnit[DataUnit["TERABITS"] = 8] = "TERABITS";
DataUnit[DataUnit["TERABYTES"] = 9] = "TERABYTES";
})(DataUnit = exports.DataUnit || (exports.DataUnit = {}));
var DataAmount = /** @class */ (function (_super) {
__extends(DataAmount, _super);
function DataAmount() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.exchangeRates = [
{ unit: DataUnit.BITS, multiplier: 1 },
{ unit: DataUnit.BYTES, multiplier: 8 },
{ unit: DataUnit.KILOBITS, multiplier: 125 },
{ unit: DataUnit.KILOBYTES, multiplier: 8 },
{ unit: DataUnit.MEGABITS, multiplier: 125 },
{ unit: DataUnit.MEGABYTES, multiplier: 8 },
{ unit: DataUnit.GIGABITS, multiplier: 125 },
{ unit: DataUnit.GIGABYTES, multiplier: 8 },
{ unit: DataUnit.TERABITS, multiplier: 125 },
{ unit: DataUnit.TERABYTES, multiplier: 8 },
];
return _this;
}
DataAmount.isValid = function (value) {
return value && (typeof value === 'number' || (typeof value === 'string' && DataAmount.pattern.test(value)));
};
DataAmount.parse = function (value) {
if (!value) {
throw new DataAmountParseError("Value is null.");
}
if (value instanceof DataAmount) {
return value;
}
else if (typeof value === 'number') {
return new DataAmount(value, DataUnit.BYTES);
}
else if (typeof value === 'string') {
var match = value.match(DataAmount.pattern);
if (match) {
var unit = DataAmount.unitKeywords[match[3]];
if (!unit) {
throw new DataAmountParseError("Data value string has invalid unit: " + match[3] + ".");
}
return new DataAmount(parseFloat(match[1] + (match[2] || '')), unit);
}
else {
throw new DataAmountParseError("Data value string has invalid format.");
}
}
else {
throw new DataAmountParseError("Value should be a DataAmount, number or string.");
}
};
DataAmount.tryParse = function (value) {
try {
return DataAmount.parse(value);
}
catch (error) {
if (error instanceof DataAmountParseError) {
return null;
}
throw error;
}
};
DataAmount.prototype.unitToString = function () {
return DataUnit[this.unit];
};
DataAmount.pattern = /([0-9]+)(\.[0-9]+)?([KMGkmg][bB]?|[bB])?/;
DataAmount.unitKeywords = {
'b': DataUnit.BITS,
'B': DataUnit.BYTES,
'kb': DataUnit.KILOBYTES,
'kB': DataUnit.KILOBYTES,
'KB': DataUnit.KILOBYTES,
'Kb': DataUnit.KILOBITS,
'mb': DataUnit.MEGABYTES,
'mB': DataUnit.MEGABYTES,
'MB': DataUnit.MEGABYTES,
'Mb': DataUnit.MEGABITS,
'gb': DataUnit.GIGABYTES,
'gB': DataUnit.GIGABYTES,
'GB': DataUnit.GIGABYTES,
'Gb': DataUnit.GIGABITS,
'tb': DataUnit.TERABYTES,
'tB': DataUnit.TERABYTES,
'TB': DataUnit.TERABYTES,
'Tb': DataUnit.TERABITS,
};
return DataAmount;
}(Amount_1.Amount));
exports.DataAmount = DataAmount;
//# sourceMappingURL=Data.js.map