UNPKG

stencil-quantum

Version:

Experience the quantum realm of stencil.

51 lines (50 loc) 1.52 kB
import { throwQuantum } from "../error"; import { Provider } from "../provider"; import { hookComponent } from "../utils"; import { getElement } from "@stencil/core"; export function Observe(config, key) { return function (prototype, propertyName, propertyDesciptor) { const opts = config === null || config === void 0 ? void 0 : config.get(key); const method = propertyDesciptor.value; hookComponent(prototype, "componentWillLoad", obj => { let provider; let listener; const el = getElement(obj); const hookProvider = () => { provider = Provider.find(el, key, opts === null || opts === void 0 ? void 0 : opts.namespace); listener = provider.listen(v => { try { method.apply(obj, [v]); } catch (err) { throwQuantum(el, err); } }); }; hookComponent(prototype, "disconnectedCallback", o => { if (o === obj && listener) listener.paused = true; }); hookComponent(prototype, "connectedCallback", o => { if (o === obj && listener) listener.paused = false; }); try { hookProvider(); } catch (err) { } return () => { if (provider) return; listener === null || listener === void 0 ? void 0 : listener.unlisten(); try { hookProvider(); } catch (err) { throwQuantum(el, err); } }; }); return propertyDesciptor; }; }