@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
JavaScript
// 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