declare const global: any; declare const window: any; /** * globalThis when supported. * if not, window in browser, global in nodejs * @public */ export const globalObject: any = typeof globalThis === 'undefined' ? (typeof window === 'undefined' ? global : window) : globalThis; export function ensureGlobalObject(symbol: string, constructor: () => T): T { const sm = Symbol.for(symbol); if (!Object.hasOwn(globalObject, sm)) { globalObject[sm] = constructor(); } return globalObject[sm]; } export function ensureGlobalObjectSingleton(symbol: string, constructor: () => T): T { const sm = Symbol.for(symbol); if (!Object.hasOwn(globalObject, sm)) { globalObject[sm] = constructor(); } else { throw new Error(`global object ${symbol} initialized twice`); } return globalObject[sm]; }