@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
148 lines • 15.7 kB
JavaScript
import { Pipe } from '@angular/core';
import * as i0 from "@angular/core";
const byteUnit = 'B';
/**
* Methods for converting media units (i.e. bytes) into display formats.
*/
export var MediaConversion2;
(function (MediaConversion2) {
'use strict';
const iecUnitMap = {
0: byteUnit,
1: 'KB',
2: 'MB',
3: 'GB',
4: 'TB',
5: 'PB',
6: 'XB',
7: 'ZB',
8: 'YB'
};
/**
* The base of byte representation to use in conversion.
*/
let Base;
(function (Base) {
Base[Base["Binary"] = 1024] = "Binary";
Base[Base["Decimal"] = 1000] = "Decimal";
})(Base = MediaConversion2.Base || (MediaConversion2.Base = {}));
/**
* The units used in conversion.
*/
let Unit;
(function (Unit) {
Unit[Unit["Byte"] = 0] = "Byte";
// SI Prefix
Unit[Unit["Kilobyte"] = 1] = "Kilobyte";
Unit[Unit["Megabyte"] = 2] = "Megabyte";
Unit[Unit["Gigabyte"] = 3] = "Gigabyte";
Unit[Unit["Terabyte"] = 4] = "Terabyte";
Unit[Unit["Petabyte"] = 5] = "Petabyte";
Unit[Unit["Exabyte"] = 6] = "Exabyte";
Unit[Unit["Zettabyte"] = 7] = "Zettabyte";
Unit[Unit["Yottabyte"] = 8] = "Yottabyte";
// IEC Prefix
Unit[Unit["Kibibyte"] = 1] = "Kibibyte";
Unit[Unit["Mebibyte"] = 2] = "Mebibyte";
Unit[Unit["Gibibyte"] = 3] = "Gibibyte";
Unit[Unit["Tebibyte"] = 4] = "Tebibyte";
Unit[Unit["Pebibyte"] = 5] = "Pebibyte";
Unit[Unit["Exbiyte"] = 6] = "Exbiyte";
Unit[Unit["Zebibyte"] = 7] = "Zebibyte";
Unit[Unit["Yebibyte"] = 8] = "Yebibyte";
})(Unit || (Unit = {}));
/**
* Converts the supplied bytes into the appropriate display string.
*
* @param bytes The raw number of bytes.
* @param baseNumber The byte number representation base to use in conversion.
*/
function getConvertedValue(bytes, base) {
if (bytes != null && !isNaN(bytes)) {
let unit = getUnit(bytes, base);
let result = convertValue(bytes, base, unit, false);
const accpetableDifference = 1;
if (base - result < accpetableDifference) {
result = 1.0; // set to 1 whole unit
unit++; // increase the unit to next highest
}
const displayUnit = iecUnitMap[unit];
if (displayUnit) {
if (displayUnit === byteUnit) {
// round so we cannot have a fraction of a byte
result = MsftSme.round(result);
}
return '{0} {1}'.format(result, displayUnit);
}
return '{0} {1}'.format(bytes, byteUnit);
}
return '-';
}
MediaConversion2.getConvertedValue = getConvertedValue;
/**
* Converts the raw bytes into the number corresponding to it's appropriate display value.
*
* @param bytes The raw number of bytes.
* @param base the byte representation base to use in conversion.
* @param unit The desired unit of conversion.
* @param floor Whether or not to floor the result.
*/
function convertValue(bytes, base, unit, floor) {
const result = bytes / Math.pow(base, unit);
if (floor) {
return Math.floor(result);
}
let precisionDigits;
if (result >= 1000) {
precisionDigits = 4;
}
else {
precisionDigits = 3;
}
return parseFloat(result.toPrecision(precisionDigits));
}
/**
* Gets the appropriate unit for a number of raw bytes in a particular base.
*
* @param bytes The raw number of bytes.
* @param base The byte representation base to use in conversion.
*/
function getUnit(bytes, base) {
if (bytes === 0) {
return bytes;
}
let iterator = 0;
while ((bytes / Math.pow(base, iterator)) >= base) {
iterator++;
}
return iterator;
}
})(MediaConversion2 || (MediaConversion2 = {}));
/**
* @smeDoc {@label ByteConverterPipe @id smeByteUnitConverter}
*
* @overview
* @file {@filepath ./examples/byte-converter-overview.md}
*
* @example {@label Example byte Converter @id byte-converter-example }
* @file {@filename component.html @filepath ./examples/byte-converter-example.component.html}
* @file {@filename component.ts @filepath ./examples/byte-converter-example.component.ts}
*/
export class ByteUnitConverterPipe {
transform(value, baseNumber) {
const base = baseNumber;
if (value < 0 || typeof value !== 'number') {
return '-';
}
return MediaConversion2.getConvertedValue(value, base);
}
}
/** @nocollapse */ ByteUnitConverterPipe.ɵfac = function ByteUnitConverterPipe_Factory(t) { return new (t || ByteUnitConverterPipe)(); };
/** @nocollapse */ ByteUnitConverterPipe.ɵpipe = /** @pureOrBreakMyCode */ i0.ɵɵdefinePipe({ name: "smeByteUnitConverter", type: ByteUnitConverterPipe, pure: true });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ByteUnitConverterPipe, [{
type: Pipe,
args: [{
name: 'smeByteUnitConverter'
}]
}], null, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnl0ZS11bml0LWNvbnZlcnRlci1waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvcGlwZXMvYnl0ZS11bml0LWNvbnZlcnRlci1waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUVwRCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFFckI7O0dBRUc7QUFDSCxNQUFNLEtBQVEsZ0JBQWdCLENBOEg3QjtBQTlIRCxXQUFjLGdCQUFnQjtJQUMxQixZQUFZLENBQUM7SUFFYixNQUFNLFVBQVUsR0FBZ0M7UUFDNUMsQ0FBQyxFQUFFLFFBQVE7UUFDWCxDQUFDLEVBQUUsSUFBSTtRQUNQLENBQUMsRUFBRSxJQUFJO1FBQ1AsQ0FBQyxFQUFFLElBQUk7UUFDUCxDQUFDLEVBQUUsSUFBSTtRQUNQLENBQUMsRUFBRSxJQUFJO1FBQ1AsQ0FBQyxFQUFFLElBQUk7UUFDUCxDQUFDLEVBQUUsSUFBSTtRQUNQLENBQUMsRUFBRSxJQUFJO0tBQ1YsQ0FBQztJQUVGOztPQUVHO0lBQ0gsSUFBWSxJQUdYO0lBSEQsV0FBWSxJQUFJO1FBQ1osc0NBQWEsQ0FBQTtRQUNiLHdDQUFjLENBQUE7SUFDbEIsQ0FBQyxFQUhXLElBQUksR0FBSixxQkFBSSxLQUFKLHFCQUFJLFFBR2Y7SUFFRDs7T0FFRztJQUNILElBQUssSUFzQko7SUF0QkQsV0FBSyxJQUFJO1FBQ0wsK0JBQVEsQ0FBQTtRQUVSLFlBQVk7UUFDWix1Q0FBWSxDQUFBO1FBQ1osdUNBQVksQ0FBQTtRQUNaLHVDQUFZLENBQUE7UUFDWix1Q0FBWSxDQUFBO1FBQ1osdUNBQVksQ0FBQTtRQUNaLHFDQUFXLENBQUE7UUFDWCx5Q0FBYSxDQUFBO1FBQ2IseUNBQWEsQ0FBQTtRQUViLGFBQWE7UUFDYix1Q0FBWSxDQUFBO1FBQ1osdUNBQVksQ0FBQTtRQUNaLHVDQUFZ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TyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQzs7NkdBUlEscUJBQXFCO2lJQUFyQixxQkFBcUI7dUZBQXJCLHFCQUFxQjtjQUhqQyxJQUFJO2VBQUM7Z0JBQ0YsSUFBSSxFQUFFLHNCQUFzQjthQUMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmNvbnN0IGJ5dGVVbml0ID0gJ0InO1xyXG5cclxuLyoqXHJcbiAqIE1ldGhvZHMgZm9yIGNvbnZlcnRpbmcgbWVkaWEgdW5pdHMgKGkuZS4gYnl0ZXMpIGludG8gZGlzcGxheSBmb3JtYXRzLlxyXG4gKi9cclxuZXhwb3J0IG1vZHVsZSBNZWRpYUNvbnZlcnNpb24yIHtcclxuICAgICd1c2Ugc3RyaWN0JztcclxuXHJcbiAgICBjb25zdCBpZWNVbml0TWFwOiB7IFtpbmRleDogbnVtYmVyXTogc3RyaW5nIH0gPSB7XHJcbiAgICAgICAgMDogYnl0ZVVuaXQsXHJcbiAgICAgICAgMTogJ0tCJyxcclxuICAgICAgICAyOiAnTUInLFxyXG4gICAgICAgIDM6ICdHQicsXHJcbiAgICAgICAgNDogJ1RCJyxcclxuICAgICAgICA1OiAnUEInLFxyXG4gICAgICAgIDY6ICdYQicsXHJcbiAgICAgICAgNzogJ1pCJyxcclxuICAgICAgICA4OiAnWUInXHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGJhc2Ugb2YgYnl0ZSByZXByZXNlbnRhdGlvbiB0byB1c2UgaW4gY29udmVyc2lvbi5cclxuICAgICAqL1xyXG4gICAgZXhwb3J0IGVudW0gQmFzZSB7XHJcbiAgICAgICAgQmluYXJ5ID0gMTAyNCxcclxuICAgICAgICBEZWNpbWFsID0gMTAwMFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHVuaXRzIHVzZWQgaW4gY29udmVyc2lvbi5cclxuICAgICAqL1xyXG4gICAgZW51bSBVbml0IHtcclxuICAgICAgICBCeXRlID0gMCxcclxuXHJcbiAgICAgICAgLy8gU0kgUHJlZml4XHJcbiAgICAgICAgS2lsb2J5dGUgPSAxLFxyXG4gICAgICAgIE1lZ2FieXRlID0gMixcclxuICAgICAgICBHaWdhYnl0ZSA9IDMsXHJcbiAgICAgICAgVGVyYWJ5dGUgPSA0LFxyXG4gICAgICAgIFBldGFieXRlID0gNSxcclxuICAgICAgICBFeGFieXRlID0gNixcclxuICAgICAgICBaZXR0YWJ5dGUgPSA3LFxyXG4gICAgICAgIFlvdHRhYnl0ZSA9IDgsXHJcblxyXG4gICAgICAgIC8vIElFQyBQcmVmaXhcclxuICAgICAgICBLaWJpYnl0ZSA9IDEsXHJcbiAgICAgICAgTWViaWJ5dGUgPSAyLFxyXG4gICAgICAgIEdpYmlieXRlID0gMyxcclxuICAgICAgICBUZWJpYnl0ZSA9IDQsXHJcbiAgICAgICAgUGViaWJ5dGUgPSA1LFxyXG4gICAgICAgIEV4Yml5dGUgPSA2LFxyXG4gICAgICAgIFplYmlieXRlID0gNyxcclxuICAgICAgICBZZWJpYnl0ZSA9IDhcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRzIHRoZSBzdXBwbGllZCBieXRlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBkaXNwbGF5IHN0cmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gYnl0ZXMgVGhlIHJhdyBudW1iZXIgb2YgYnl0ZXMuXHJcbiAgICAgKiBAcGFyYW0gYmFzZU51bWJlciBUaGUgYnl0ZSBudW1iZXIgcmVwcmVzZW50YXRpb24gYmFzZSB0byB1c2UgaW4gY29udmVyc2lvbi5cclxuICAgICAqL1xyXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGdldENvbnZlcnRlZFZhbHVlKGJ5dGVzOiBudW1iZXIsIGJhc2U6IE1lZGlhQ29udmVyc2lvbjIuQmFzZSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGJ5dGVzICE9IG51bGwgJiYgIWlzTmFOKGJ5dGVzKSkge1xyXG4gICAgICAgICAgICBsZXQgdW5pdCA9IGdldFVuaXQoYnl0ZXMsIGJhc2UpO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gY29udmVydFZhbHVlKGJ5dGVzLCBiYXNlLCB1bml0LCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBhY2NwZXRhYmxlRGlmZmVyZW5jZSA9IDE7XHJcbiAgICAgICAgICAgIGlmIChiYXNlIC0gcmVzdWx0IDwgYWNjcGV0YWJsZURpZmZlcmVuY2UgKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSAxLjA7IC8vIHNldCB0byAxIHdob2xlIHVuaXRcclxuICAgICAgICAgICAgICAgIHVuaXQrKzsgLy8gaW5jcmVhc2UgdGhlIHVuaXQgdG8gbmV4dCBoaWdoZXN0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlVbml0ID0gaWVjVW5pdE1hcFt1bml0XTtcclxuICAgICAgICAgICAgaWYgKGRpc3BsYXlVbml0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlzcGxheVVuaXQgPT09IGJ5dGVVbml0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcm91bmQgc28gd2UgY2Fubm90IGhhdmUgYSBmcmFjdGlvbiBvZiBhIGJ5dGVcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBNc2Z0U21lLnJvdW5kKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICd7MH0gezF9Jy5mb3JtYXQocmVzdWx0LCBkaXNwbGF5VW5pdCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiAnezB9IHsxfScuZm9ybWF0KGJ5dGVzLCBieXRlVW5pdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJy0nO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydHMgdGhlIHJhdyBieXRlcyBpbnRvIHRoZSBudW1iZXIgY29ycmVzcG9uZGluZyB0byBpdCdzIGFwcHJvcHJpYXRlIGRpc3BsYXkgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGJ5dGVzIFRoZSByYXcgbnVtYmVyIG9mIGJ5dGVzLlxyXG4gICAgICogQHBhcmFtIGJhc2UgdGhlIGJ5dGUgcmVwcmVzZW50YXRpb24gYmFzZSB0byB1c2UgaW4gY29udmVyc2lvbi5cclxuICAgICAqIEBwYXJhbSB1bml0IFRoZSBkZXNpcmVkIHVuaXQgb2YgY29udmVyc2lvbi5cclxuICAgICAqIEBwYXJhbSBmbG9vciBXaGV0aGVyIG9yIG5vdCB0byBmbG9vciB0aGUgcmVzdWx0LlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUoYnl0ZXM6IG51bWJlciwgYmFzZTogQmFzZSwgdW5pdDogVW5pdCwgZmxvb3I/OiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBieXRlcyAvIE1hdGgucG93KGJhc2UsIHVuaXQpO1xyXG4gICAgICAgIGlmIChmbG9vcikge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHByZWNpc2lvbkRpZ2l0czogbnVtYmVyO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0ID49IDEwMDApIHtcclxuICAgICAgICAgICAgcHJlY2lzaW9uRGlnaXRzID0gNDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBwcmVjaXNpb25EaWdpdHMgPSAzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocmVzdWx0LnRvUHJlY2lzaW9uKHByZWNpc2lvbkRpZ2l0cykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgYXBwcm9wcmlhdGUgdW5pdCBmb3IgYSBudW1iZXIgb2YgcmF3IGJ5dGVzIGluIGEgcGFydGljdWxhciBiYXNlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBieXRlcyBUaGUgcmF3IG51bWJlciBvZiBieXRlcy5cclxuICAgICAqIEBwYXJhbSBiYXNlIFRoZSBieXRlIHJlcHJlc2VudGF0aW9uIGJhc2UgdG8gdXNlIGluIGNvbnZlcnNpb24uXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGdldFVuaXQoYnl0ZXM6IG51bWJlciwgYmFzZTogQmFzZSk6IFVuaXQge1xyXG4gICAgICAgIGlmIChieXRlcyA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gPFVuaXQ+Ynl0ZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlcmF0b3IgPSAwO1xyXG4gICAgICAgIHdoaWxlICgoYnl0ZXMgLyBNYXRoLnBvdyhiYXNlLCBpdGVyYXRvcikpID49IGJhc2UpIHtcclxuICAgICAgICAgICAgaXRlcmF0b3IrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiA8VW5pdD5pdGVyYXRvcjtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBzbWVEb2Mge0BsYWJlbCBCeXRlQ29udmVydGVyUGlwZSBAaWQgc21lQnl0ZVVuaXRDb252ZXJ0ZXJ9XHJcbiAqXHJcbiAqIEBvdmVydmlld1xyXG4gKiBAZmlsZSB7QGZpbGVwYXRoIC4vZXhhbXBsZXMvYnl0ZS1jb252ZXJ0ZXItb3ZlcnZpZXcubWR9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgRXhhbXBsZSBieXRlIENvbnZlcnRlciBAaWQgYnl0ZS1jb252ZXJ0ZXItZXhhbXBsZSB9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvYnl0ZS1jb252ZXJ0ZXItZXhhbXBsZS5jb21wb25lbnQuaHRtbH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvYnl0ZS1jb252ZXJ0ZXItZXhhbXBsZS5jb21wb25lbnQudHN9XHJcbiAqL1xyXG5AUGlwZSh7XHJcbiAgICBuYW1lOiAnc21lQnl0ZVVuaXRDb252ZXJ0ZXInXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCeXRlVW5pdENvbnZlcnRlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICAgIHB1YmxpYyB0cmFuc2Zvcm0odmFsdWU6IG51bWJlciwgYmFzZU51bWJlcjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBiYXNlID0gPE1lZGlhQ29udmVyc2lvbjIuQmFzZT5iYXNlTnVtYmVyO1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJy0nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIE1lZGlhQ29udmVyc2lvbjIuZ2V0Q29udmVydGVkVmFsdWUodmFsdWUsIGJhc2UpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==