@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
43 lines (42 loc) • 4.64 kB
JavaScript
import { Pipe } from '@angular/core';
import { isNaN, isFinite } from 'lodash-es';
import * as i0 from "@angular/core";
/**
* Converts the file size to a readable format.
* Usage:
*
* ```html
* {{ myData | bytes }} <!-- e.g. 100.1 MB -->
* ```
*
* Default precision is set to 1 decimal place.
* To change the precision, pass an additional argument to pipe.
* ```html
* {{ myData | bytes: 5 }} <!-- e.g. 100.12345 MB -->
* ```
*/
export class BytesPipe {
static bytes(bytes, precision) {
if (isNaN(bytes) || !isFinite(bytes)) {
return '-';
}
if (bytes === 0) {
return 0;
}
const units = ['bytes', 'kB', 'MB', 'GB', 'TB', 'PB'];
const num = Math.floor(Math.log(bytes) / Math.log(1024));
// eslint-disable-next-line no-mixed-operators
const result = (bytes / 1024 ** Math.floor(num)).toFixed(precision);
return `${result} ${units[num]}`;
}
transform(value, precision = 1) {
return BytesPipe.bytes(value, precision);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BytesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: BytesPipe, isStandalone: true, name: "bytes" }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BytesPipe, decorators: [{
type: Pipe,
args: [{ name: 'bytes', standalone: true }]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnl0ZXMucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL2J5dGVzLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBRTVDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsTUFBTSxPQUFPLFNBQVM7SUFDcEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFhLEVBQUUsU0FBaUI7UUFDM0MsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7UUFDRCxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN6RCw4Q0FBOEM7UUFDOUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFcEUsT0FBTyxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWEsRUFBRSxTQUFTLEdBQUcsQ0FBQztRQUNwQyxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7K0dBbEJVLFNBQVM7NkdBQVQsU0FBUzs7NEZBQVQsU0FBUztrQkFEckIsSUFBSTttQkFBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzTmFOLCBpc0Zpbml0ZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGZpbGUgc2l6ZSB0byBhIHJlYWRhYmxlIGZvcm1hdC5cbiAqIFVzYWdlOlxuICpcbiAqIGBgYGh0bWxcbiAqICB7eyBteURhdGEgfCBieXRlcyB9fSA8IS0tIGUuZy4gMTAwLjEgTUIgLS0+XG4gKiBgYGBcbiAqXG4gKiBEZWZhdWx0IHByZWNpc2lvbiBpcyBzZXQgdG8gMSBkZWNpbWFsIHBsYWNlLlxuICogVG8gY2hhbmdlIHRoZSBwcmVjaXNpb24sIHBhc3MgYW4gYWRkaXRpb25hbCBhcmd1bWVudCB0byBwaXBlLlxuXG4gKiBgYGBodG1sXG4gKiB7eyBteURhdGEgfCBieXRlczogNSB9fSA8IS0tIGUuZy4gMTAwLjEyMzQ1IE1CIC0tPlxuICogYGBgXG4gKi9cbkBQaXBlKHsgbmFtZTogJ2J5dGVzJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIEJ5dGVzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBzdGF0aWMgYnl0ZXMoYnl0ZXM6IG51bWJlciwgcHJlY2lzaW9uOiBudW1iZXIpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIGlmIChpc05hTihieXRlcykgfHwgIWlzRmluaXRlKGJ5dGVzKSkge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG4gICAgaWYgKGJ5dGVzID09PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY29uc3QgdW5pdHMgPSBbJ2J5dGVzJywgJ2tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJ107XG4gICAgY29uc3QgbnVtID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZygxMDI0KSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1peGVkLW9wZXJhdG9yc1xuICAgIGNvbnN0IHJlc3VsdCA9IChieXRlcyAvIDEwMjQgKiogTWF0aC5mbG9vcihudW0pKS50b0ZpeGVkKHByZWNpc2lvbik7XG5cbiAgICByZXR1cm4gYCR7cmVzdWx0fSAke3VuaXRzW251bV19YDtcbiAgfVxuXG4gIHRyYW5zZm9ybSh2YWx1ZTogbnVtYmVyLCBwcmVjaXNpb24gPSAxKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICByZXR1cm4gQnl0ZXNQaXBlLmJ5dGVzKHZhbHVlLCBwcmVjaXNpb24pO1xuICB9XG59XG4iXX0=