88 lines
2.8 KiB
TypeScript
88 lines
2.8 KiB
TypeScript
// Reference:
|
|
// - https://docs.deno.com/runtime/fundamentals/testing/
|
|
|
|
import { assertEquals } from "jsr:@std/assert";
|
|
|
|
export function compareVersion(ver1: string, ver2: string): 0 | 1 | -1 {
|
|
if (ver1 === ver2) return 0;
|
|
const ver1Parts = ver1.split(".");
|
|
const ver2Parts = ver2.split(".");
|
|
const ver1Main = parseInt(ver1Parts[0]);
|
|
const ver2Main = parseInt(ver2Parts[0]);
|
|
if (ver1Main > ver2Main) return 1;
|
|
if (ver1Main < ver2Main) return -1;
|
|
const ver1Second = parseInt(ver1Parts[1]);
|
|
const ver2Second = parseInt(ver2Parts[1]);
|
|
if (ver1Second > ver2Second) return 1;
|
|
if (ver1Second < ver2Second) return -1;
|
|
const ver1Third = parseInt(ver1Parts[2]);
|
|
const ver2Third = parseInt(ver2Parts[2]);
|
|
if (ver1Third > ver2Third) return 1;
|
|
if (ver1Third < ver2Third) return -1;
|
|
return 0;
|
|
}
|
|
|
|
export function isOn(val: string | undefined): boolean {
|
|
if ((val === null) || (val === undefined)) {
|
|
return false;
|
|
}
|
|
const lowerVal = val.toLowerCase();
|
|
return lowerVal === "on" || lowerVal === "yes" || lowerVal === "1" ||
|
|
lowerVal === "true";
|
|
}
|
|
|
|
export function isEnvOn(envKey: string): boolean {
|
|
return isOn(Deno.env.get(envKey));
|
|
}
|
|
|
|
export function formatHumanTime(timeMillis: number): string {
|
|
const times = [];
|
|
if (timeMillis < 1000) {
|
|
return `${timeMillis}ms`;
|
|
}
|
|
const timeSecs = Math.floor(timeMillis / 1000);
|
|
const timeSecsLow = timeSecs % 60;
|
|
if (timeSecsLow > 0) {
|
|
times.push(`${timeSecsLow}s`);
|
|
}
|
|
const timeMinutes = Math.floor(timeSecs / 60);
|
|
const timeMinutesLow = timeMinutes % 60;
|
|
if (timeMinutesLow > 0) {
|
|
times.push(`${timeMinutesLow}m`);
|
|
}
|
|
const timeHours = Math.floor(timeMinutes / 60);
|
|
const timeHoursLow = timeHours % 24;
|
|
if (timeHoursLow > 0) {
|
|
times.push(`${timeHoursLow}h`);
|
|
}
|
|
const timeDays = Math.floor(timeHours / 24);
|
|
if (timeDays > 0) {
|
|
times.push(`${timeDays}d`);
|
|
}
|
|
return times.reverse().join(" ");
|
|
}
|
|
|
|
Deno.test("isOn", () => {
|
|
assertEquals(false, isOn(undefined));
|
|
assertEquals(false, isOn(""));
|
|
assertEquals(true, isOn("true"));
|
|
assertEquals(true, isOn("TRUE"));
|
|
assertEquals(true, isOn("yes"));
|
|
assertEquals(true, isOn("YES"));
|
|
assertEquals(true, isOn("on"));
|
|
assertEquals(true, isOn("ON"));
|
|
assertEquals(true, isOn("1"));
|
|
});
|
|
|
|
Deno.test("formatHumanTime", () => {
|
|
assertEquals("0ms", formatHumanTime(0));
|
|
assertEquals("1ms", formatHumanTime(1));
|
|
assertEquals("1s", formatHumanTime(1000));
|
|
assertEquals("1s", formatHumanTime(1001));
|
|
assertEquals("1m", formatHumanTime(60001));
|
|
assertEquals("1m 1s", formatHumanTime(61001));
|
|
assertEquals("1h", formatHumanTime(3600000));
|
|
assertEquals("1h 1s", formatHumanTime(3601000));
|
|
assertEquals("1h 1m 1s", formatHumanTime(3661000));
|
|
});
|