UNPKG

vue-intlayer

Version:

Easily internationalize i18n your Vue applications with type-safe multilingual content management.

31 lines (30 loc) 1.07 kB
import { compareUrls as u } from "@intlayer/editor"; import { onScopeDispose as f, getCurrentInstance as d } from "vue"; import { useCommunicator as p } from "./communicator.mjs"; const o = /* @__PURE__ */ new Map(); let c = !1; function m(e, t) { let s = o.get(e); s || (s = /* @__PURE__ */ new Set(), o.set(e, s)), s.add(t); } function l(e, t) { const s = o.get(e); s && (s.delete(t), s.size === 0 && o.delete(e)); } function w(e, t) { c || window && (window.addEventListener("message", (s) => { const { type: n, data: i, senderId: a } = s.data ?? {}; n && a !== t && (!e || e.includes("*") || e.some((r) => u(r, s.origin))) && o.get(n)?.forEach((r) => r(i)); }), c = !0); } const L = (e, t) => { const { allowedOrigins: s, postMessage: n, senderId: i } = p(); return w(s, i), t ? (m(e, t), f(() => l(e, t))) : d() || console.warn( "useCrossFrameMessageListener called outside a component without a callback; nothing to listen for." ), (r) => { n({ type: e, data: r, senderId: i }); }; }; export { L as useCrossFrameMessageListener };