mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
* Convert runMany and runManySync to use injectManyWithMeta Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fixup type errors due to new Runnable requirements Signed-off-by: Sebastian Malton <sebastian@malton.name> * Add documentation for verifyRunnablesAreDAG Signed-off-by: Sebastian Malton <sebastian@malton.name> * Simplify convertToWithIdWith Signed-off-by: Sebastian Malton <sebastian@malton.name> * Move all utility functions to separate package Signed-off-by: Sebastian Malton <sebastian@malton.name> * Move testing utilities to separate package Signed-off-by: Sebastian Malton <sebastian@malton.name> * Move run-many and run-many-sync to separate package Signed-off-by: Sebastian Malton <sebastian@malton.name> * Replace all internal uses of utilities with new packages Signed-off-by: Sebastian Malton <sebastian@malton.name> * Use new @k8slens/run-many package in core Signed-off-by: Sebastian Malton <sebastian@malton.name> * Add dep to open-lens Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fixup type errors Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fixup uses of @k8slens/test-utils Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fixup getGlobalOverride Signed-off-by: Sebastian Malton <sebastian@malton.name> * Move tests to new package too Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix type errors Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fixup uses of AsyncResult and autoBind Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fixup remaining import issues Signed-off-by: Sebastian Malton <sebastian@malton.name> * Finial fixups to fix build Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix lint Signed-off-by: Sebastian Malton <sebastian@malton.name> * Revert moving "testUsingFakeTime" to separate package - This fixes tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix integration tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix unit test failing due to spelling fix Signed-off-by: Sebastian Malton <sebastian@malton.name> --------- Signed-off-by: Sebastian Malton <sebastian@malton.name>
64 lines
1.8 KiB
TypeScript
64 lines
1.8 KiB
TypeScript
/**
|
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
*/
|
|
|
|
import assert from "assert";
|
|
import { iter } from "./iter";
|
|
|
|
// Helper to convert memory from units Ki, Mi, Gi, Ti, Pi to bytes and vise versa
|
|
|
|
const baseMagnitude = 1024;
|
|
const maxMagnitude = ["PiB", baseMagnitude ** 5] as const;
|
|
const magnitudes = new Map([
|
|
["B", 1] as const,
|
|
["KiB", baseMagnitude ** 1] as const,
|
|
["MiB", baseMagnitude ** 2] as const,
|
|
["GiB", baseMagnitude ** 3] as const,
|
|
["TiB", baseMagnitude ** 4] as const,
|
|
maxMagnitude,
|
|
]);
|
|
const unitRegex = /(?<value>[0-9]+(\.[0-9]*)?)(?<suffix>(B|[KMGTP]iB?))?/;
|
|
|
|
type BinaryUnit = typeof magnitudes extends Map<infer Key, any> ? Key : never;
|
|
|
|
export function unitsToBytes(value: string): number {
|
|
const unitsMatch = value.match(unitRegex);
|
|
|
|
if (!unitsMatch?.groups) {
|
|
return NaN;
|
|
}
|
|
|
|
const parsedValue = parseFloat(unitsMatch.groups.value);
|
|
|
|
if (!unitsMatch.groups?.suffix) {
|
|
return parsedValue;
|
|
}
|
|
|
|
const magnitude = magnitudes.get(unitsMatch.groups.suffix as BinaryUnit)
|
|
?? magnitudes.get(`${unitsMatch.groups.suffix}B` as BinaryUnit);
|
|
|
|
assert(magnitude, "UnitRegex is wrong some how");
|
|
|
|
return parseInt((parsedValue * magnitude).toFixed(1));
|
|
}
|
|
|
|
export interface BytesToUnitesOptions {
|
|
/**
|
|
* The number of decimal places. MUST be an integer. MUST be in the range [0, 20].
|
|
* @default 1
|
|
*/
|
|
precision?: number;
|
|
}
|
|
|
|
export function bytesToUnits(bytes: number, { precision = 1 }: BytesToUnitesOptions = {}): string {
|
|
if (bytes <= 0 || isNaN(bytes) || !isFinite(bytes)) {
|
|
return "N/A";
|
|
}
|
|
|
|
const index = Math.floor(Math.log(bytes) / Math.log(baseMagnitude));
|
|
const [suffix, magnitude] = iter.nth(magnitudes.entries(), index) ?? maxMagnitude;
|
|
|
|
return `${(bytes / magnitude).toFixed(precision)}${suffix}`;
|
|
}
|