2024-07-22 01:40:00 +02:00
|
|
|
import { checkIsValidObject, checkMatchesObjectStructure } from "./typeSafety";
|
2024-07-21 22:42:32 +02:00
|
|
|
|
2024-07-19 19:49:55 +02:00
|
|
|
// date
|
|
|
|
|
export function createTimestamp(): string {
|
|
|
|
|
return new Date().toISOString();
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-23 01:58:34 +02:00
|
|
|
// handlers
|
|
|
|
|
export type Handler<T> = (item: T) => void;
|
|
|
|
|
|
|
|
|
|
export class HandlerManager<T> {
|
|
|
|
|
handlers: Set<Handler<T>> = new Set();
|
|
|
|
|
|
|
|
|
|
// manage
|
|
|
|
|
addHandler = (handler: Handler<T>): void => {
|
|
|
|
|
this.handlers.add(handler);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
deleteHandler = (handler: Handler<T>): void => {
|
|
|
|
|
this.handlers.delete(handler);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// trigger
|
|
|
|
|
trigger = (item: T): void => {
|
|
|
|
|
for (const handler of this.handlers) {
|
|
|
|
|
handler(item);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-19 19:49:55 +02:00
|
|
|
// string
|
2024-07-19 17:56:18 +02:00
|
|
|
export function stringify(data: any): string {
|
2024-07-20 20:42:43 +02:00
|
|
|
return JSON.stringify(data, null, 4);
|
2024-07-19 17:56:18 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function parse(string: string): any {
|
2024-07-21 22:42:32 +02:00
|
|
|
try {
|
|
|
|
|
return JSON.parse(string);
|
|
|
|
|
} catch {
|
|
|
|
|
return {};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-22 01:40:00 +02:00
|
|
|
export function parseValidObject<T>(string: string, reference: T): T | null {
|
2024-07-21 22:42:32 +02:00
|
|
|
const parsed: any = parse(string);
|
|
|
|
|
if (checkIsValidObject(parsed) == false) return null;
|
2024-07-22 01:40:00 +02:00
|
|
|
|
|
|
|
|
const doesMatchReference: boolean = checkMatchesObjectStructure(
|
|
|
|
|
parsed,
|
|
|
|
|
reference
|
|
|
|
|
);
|
|
|
|
|
if (doesMatchReference == false) return null;
|
|
|
|
|
|
2024-07-21 22:42:32 +02:00
|
|
|
return parsed;
|
2024-07-19 19:49:55 +02:00
|
|
|
}
|
2024-07-20 18:58:25 +02:00
|
|
|
|
|
|
|
|
// sort
|
|
|
|
|
export function localeCompare(a: string, b: string): number {
|
|
|
|
|
return a.localeCompare(b);
|
2024-07-21 22:42:32 +02:00
|
|
|
}
|