UNPKG

@wordpress/interactivity

Version:

Package that provides a standard and simple way to handle the frontend interactivity of Gutenberg blocks.

38 lines (37 loc) 1.16 kB
// packages/interactivity/src/proxies/store.ts import { createProxy, getNamespaceFromProxy, shouldProxy } from "./registry"; import { setNamespace, resetNamespace } from "../namespaces"; import { withScope, isPlainObject } from "../utils"; var storeRoots = /* @__PURE__ */ new WeakSet(); var storeHandlers = { get: (target, key, receiver) => { const result = Reflect.get(target, key); const ns = getNamespaceFromProxy(receiver); if (typeof result === "undefined" && storeRoots.has(receiver)) { const obj = {}; Reflect.set(target, key, obj); return proxifyStore(ns, obj, false); } if (typeof result === "function") { setNamespace(ns); const scoped = withScope(result); resetNamespace(); return scoped; } if (isPlainObject(result) && shouldProxy(result)) { return proxifyStore(ns, result, false); } return result; } }; var proxifyStore = (namespace, obj, isRoot = true) => { const proxy = createProxy(namespace, obj, storeHandlers); if (proxy && isRoot) { storeRoots.add(proxy); } return proxy; }; export { proxifyStore }; //# sourceMappingURL=store.js.map