mirror of
https://github.com/fluxscape/fluxscape.git
synced 2026-01-13 07:42:54 +01:00
Initial commit
Co-Authored-By: Eric Tuvesson <eric.tuvesson@gmail.com> Co-Authored-By: mikaeltellhed <2311083+mikaeltellhed@users.noreply.github.com> Co-Authored-By: kotte <14197736+mrtamagotchi@users.noreply.github.com> Co-Authored-By: Anders Larsson <64838990+anders-topp@users.noreply.github.com> Co-Authored-By: Johan <4934465+joolsus@users.noreply.github.com> Co-Authored-By: Tore Knudsen <18231882+torekndsn@users.noreply.github.com> Co-Authored-By: victoratndl <99176179+victoratndl@users.noreply.github.com>
This commit is contained in:
28
packages/noodl-platform/src/utils/convert.ts
Normal file
28
packages/noodl-platform/src/utils/convert.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
export namespace ConvertUtils {
|
||||
export function bytesToKilobytes(bytes: number): number {
|
||||
const kilobytes = bytes / 1024;
|
||||
return kilobytes;
|
||||
}
|
||||
|
||||
export function bytesToMegabytes(bytes: number): number {
|
||||
const megabytes = bytes / (1024 * 1024);
|
||||
return megabytes;
|
||||
}
|
||||
|
||||
export function bytesToGigabytes(bytes: number): number {
|
||||
const gigabytes = bytes / (1024 * 1024 * 1024);
|
||||
return gigabytes;
|
||||
}
|
||||
|
||||
export function bytesToMostSuitableSize(bytes: number): string {
|
||||
if (bytes < 1024) {
|
||||
return bytes + ' bytes';
|
||||
} else if (bytes < 1024 * 1024) {
|
||||
return bytesToKilobytes(bytes).toFixed(2) + ' KB';
|
||||
} else if (bytes < 1024 * 1024 * 1024) {
|
||||
return bytesToMegabytes(bytes).toFixed(2) + ' MB';
|
||||
} else {
|
||||
return bytesToGigabytes(bytes).toFixed(2) + ' GB';
|
||||
}
|
||||
}
|
||||
}
|
||||
3
packages/noodl-platform/src/utils/index.ts
Normal file
3
packages/noodl-platform/src/utils/index.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export * from './convert';
|
||||
export * from './promise';
|
||||
export * from './random';
|
||||
30
packages/noodl-platform/src/utils/promise.ts
Normal file
30
packages/noodl-platform/src/utils/promise.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
// TODO(typescript): Remove when we upgrade to Typescript 4.5
|
||||
type Awaited<T> = T extends null | undefined
|
||||
? T // special case for `null | undefined` when not in `--strictNullChecks` mode
|
||||
: T extends object & { then(onfulfilled: infer F): any } // `await` only unwraps object types with a callable `then`. Non-object types are not unwrapped
|
||||
? F extends (value: infer V, ...args: any) => any // if the argument to `then` is callable, extracts the first argument
|
||||
? Awaited<V> // recursively unwrap the value
|
||||
: never // the argument to `then` was not callable
|
||||
: T; // non-object or non-thenable
|
||||
|
||||
type PromiseHash = Record<string, Promise<unknown>>;
|
||||
|
||||
type AwaitedPromiseHash<T extends PromiseHash> = {
|
||||
[P in keyof T]: Awaited<T[P]>;
|
||||
};
|
||||
|
||||
export namespace PromiseUtils {
|
||||
export async function allObjects<T extends PromiseHash>(object: T): Promise<AwaitedPromiseHash<T>> {
|
||||
return Object.fromEntries(
|
||||
await Promise.all(
|
||||
Object.entries(object).map(async ([key, promise]) => {
|
||||
return [key, await promise];
|
||||
})
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
export function sleep(ms: number) {
|
||||
return new Promise((resolve) => setTimeout(resolve, ms));
|
||||
}
|
||||
}
|
||||
9
packages/noodl-platform/src/utils/random.ts
Normal file
9
packages/noodl-platform/src/utils/random.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
export namespace RandomUtils {
|
||||
export function range(min: number, max: number): number {
|
||||
return Math.floor(Math.random() * (max - min + 1) + min);
|
||||
}
|
||||
|
||||
export function within(max: number): number {
|
||||
return Math.floor(Math.random() * max);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user