UNPKG

vite-plugin-shopify-theme-islands

Version:
77 lines (75 loc) 1.99 kB
// src/runtime-surface.ts var SILENT_LOGGER = { note() {}, flush() {} }; function addListener(target, name, handler) { const listener = (event) => handler(event.detail); target.addEventListener(name, listener); return () => target.removeEventListener(name, listener); } function dispatch(target, name, detail) { target.dispatchEvent(new CustomEvent(name, { detail })); } function createRuntimeSurface(deps) { return { dispatchLoad(detail) { dispatch(deps.target, "islands:load", detail); }, dispatchError(detail) { dispatch(deps.target, "islands:error", detail); }, onLoad(handler) { return addListener(deps.target, "islands:load", handler); }, onError(handler) { return addListener(deps.target, "islands:error", handler); }, createLogger(tagName, debug) { if (!debug) return SILENT_LOGGER; const msgs = []; return { note(msg) { msgs.push(msg); }, flush(summary) { if (msgs.length === 0) { deps.console.log("[islands]", `<${tagName}> ${summary}`); } else { deps.console.groupCollapsed(`[islands] <${tagName}> ${summary}`); for (const msg of msgs) deps.console.log(msg); deps.console.groupEnd(); } msgs.length = 0; } }; }, beginReadyLog(islandCount, debug) { if (!debug) return () => {}; deps.console.groupCollapsed(`[islands] ready — ${islandCount} island(s)`); return () => deps.console.groupEnd(); } }; } var runtimeSurface; function getRuntimeSurface() { runtimeSurface ??= createRuntimeSurface({ target: document, console }); return runtimeSurface; } // src/events.ts function onIslandLoad(handler) { return getRuntimeSurface().onLoad(handler); } function onIslandError(handler) { return getRuntimeSurface().onError(handler); } export { onIslandLoad, onIslandError };