import { TAsyncLoadCallback } from "types"; import { Export } from "./Export"; import { isBrowser } from "./platform"; import { _top } from "./top"; export const _asyncLoad:any[] = []; export function asyncLoad(callback: TAsyncLoadCallback, args?: any[]): any { class AsyncCallback { func:TAsyncLoadCallback; args?:any[]; constructor(callback: TAsyncLoadCallback, args: any[] = []) { this.func = callback; this.args = args; } dispatch() { ((this as AsyncCallback).func as Function).apply(this, ...args as [], this); } } _asyncLoad.push((new AsyncCallback(callback, args)) as unknown as never); return AsyncCallback; } export const _fireAsyncLoad = ():void => { if (isBrowser){ document.addEventListener("readystatechange", () => { if (document.readyState === "complete") { // eslint-disable-next-line array-callback-return _asyncLoad.map(function (fc) { (fc).dispatch.call(fc); }); } }); } else if (typeof _top.global !== "undefined") { // eslint-disable-next-line array-callback-return _asyncLoad.map(function (fc) { (fc).dispatch.call(fc); }); } }; Export(asyncLoad);