export * from './resource'; // https://www.raygesualdo.com/posts/flattening-object-keys-with-typescript-types/ export type FlattenObjectKeys, Key = keyof T> = Key extends string ? T[Key] extends Record ? `${Key}.${FlattenObjectKeys}` : `${Key}` : never; export function sleep(ms: number) { return new Promise((resolve) => setTimeout(resolve, ms, null)); } export async function waitFor(cb: () => T, errMessage: string | void, timeout = 1000): Promise { let value = await cb(); if (value !== undefined) return value; if (IsDuplicityVersion()) timeout /= 50; else timeout -= GetFrameTime() * 1000; const start = GetGameTimer(); let id: number; let i = 0; const p = new Promise((resolve, reject) => { id = setTick(async () => { i++; if (i > timeout) return reject(`${errMessage || 'failed to resolve callback'} (waited ${(GetGameTimer() - start) / 1000}ms)`); value = await cb(); if (value !== undefined) resolve(value); }); }).finally(() => clearTick(id)); return p; }