UNPKG

@streambird/streambird-js

Version:
60 lines (46 loc) 1.56 kB
import { StreambirdFactory } from './types'; import { STREAMBIRD_JS_URL } from './constants'; const findOrCreateScript = (): HTMLScriptElement => { const scripts = document.querySelectorAll<HTMLScriptElement>(`script[src="${STREAMBIRD_JS_URL}"]`); if (scripts[0]) { return scripts[0]; } const script = document.createElement('script'); script.src = STREAMBIRD_JS_URL; document.head.appendChild(script); return script; }; const loadScript = (): Promise<StreambirdFactory | null> => { const isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined'; if (!isBrowser) { return Promise.resolve(null); } return new Promise((resolve, reject) => { if (window.Streambird) { console.warn('Streambird.js has already been loaded'); resolve(window.Streambird); } const script = findOrCreateScript(); script.addEventListener('load', () => { if (window.Streambird) { resolve(window.Streambird); } else { reject(new Error('Streambird.js could not be loaded')); } }); script.addEventListener('error', () => { reject(new Error('Streambird.js could not be loaded')); }); }); }; const streambirdPromise: Promise<StreambirdFactory | null> = Promise.resolve().then(() => loadScript()); let loadCalled = false; streambirdPromise.catch((err: Error) => { if (!loadCalled) { console.warn(err); } }); export const loadStreambird = (): Promise<StreambirdFactory | null> => { loadCalled = true; return streambirdPromise; };