"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var core_1 = require("@angular/core");
var utils_1 = require("../utils/utils");
var BytesPipe = (function () {
    function BytesPipe() {
    }
    BytesPipe.prototype.transform = function (input, decimal, from) {
        if (decimal === void 0) { decimal = 0; }
        if (from === void 0) { from = 'B'; }
        if (!(utils_1.isNumberFinite(input) &&
            utils_1.isNumberFinite(decimal) &&
            utils_1.isInteger(decimal) &&
            utils_1.isPositive(decimal))) {
            return input;
        }
        var bytes = input;
        var unit = from;
        while (unit != 'B') {
            bytes *= 1024;
            unit = BytesPipe.formats[unit].prev;
        }
        for (var key in BytesPipe.formats) {
            var format = BytesPipe.formats[key];
            if (bytes < format.max) {
                var prev = BytesPipe.formats[format.prev];
                var result = prev ?
                    utils_1.toDecimal(bytes / prev.max, decimal) :
                    utils_1.toDecimal(bytes, decimal);
                return result + " " + key;
            }
        }
    };
    return BytesPipe;
}());
BytesPipe.formats = {
    'B': { max: 1024 },
    'KB': { max: Math.pow(1024, 2), prev: 'B' },
    'MB': { max: Math.pow(1024, 3), prev: 'KB' },
    'GB': { max: Math.pow(1024, 4), prev: 'MB' },
    'TB': { max: Number.MAX_SAFE_INTEGER, prev: 'GB' }
};
BytesPipe.decorators = [
    { type: core_1.Pipe, args: [{
                name: 'bytes'
            },] },
];
/** @nocollapse */
BytesPipe.ctorParameters = function () { return []; };
exports.BytesPipe = BytesPipe;
//# sourceMappingURL=bytes.pipe.js.map