UNPKG

react-imported-component

Version:
30 lines (29 loc) 1.09 kB
import { rehydrateMarks } from '../loadable/marks'; /** * injects a loadable tracker on a given global variable name. * * WARNING: mutates the origin variable! * * @param name = 'importedComponents` * @example * ```js * window.importedMarks = window.importedMarks || []; * importedMarks.push(hydratedMarks[0]); * /// * injectLoadableTracker(); */ export const injectLoadableTracker = (name = 'importedComponents') => { const value = global[name]; if (value) { if (!value.push || (Boolean(value.push) && !Boolean(value.forEach))) { // tslint:disable-next-line:no-console console.error('given: ', value); throw new Error(`injectLoadableTracker(${name}) expected to be expected on Array-like variable, and only once.`); } value.forEach((mark) => rehydrateMarks(mark)); } global[name] = { push: rehydrateMarks, }; }; export const getLoadableTrackerCallback = (name = 'importedComponents') => (marks) => `<script>window.${name}=window.${name} || [];${name}.push(${JSON.stringify(marks)});</script>`;