UNPKG

@robot.com/better-mqtt

Version:

A modern, TypeScript-first MQTT client library that provides a better developer experience with async iterators, shared subscriptions, and React hooks. Better MQTT is a wrapper around the excellent [mqtt.js](https://github.com/mqttjs/MQTT.js) library, enh

105 lines (104 loc) 3.22 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/react/index.tsx var react_exports = {}; __export(react_exports, { BetterMQTTProvider: () => BetterMQTTProvider, useMQTT: () => useMQTT, useMQTTError: () => useMQTTError, useMQTTStatus: () => useMQTTStatus, useMQTTSubscription: () => useMQTTSubscription }); module.exports = __toCommonJS(react_exports); var import_react = require("react"); var import_jsx_runtime = require("react/jsx-runtime"); var ctx = (0, import_react.createContext)(null); function BetterMQTTProvider(props) { return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ctx.Provider, { value: props.client, children: props.children }); } function useMQTT() { const client = (0, import_react.useContext)(ctx); if (!client) { throw new Error("useMQTT must be used within MQTTProvider"); } return client; } function useMQTTStatus() { const client = useMQTT(); const [status, setStatus] = (0, import_react.useState)(client.status); (0, import_react.useEffect)(() => { const listener = client.on("status", setStatus); return () => { client.off("status", listener); }; }, [client]); return status; } function useMQTTSubscription(topic, parser, onMessage, opts) { const client = useMQTT(); const onMessageRef = (0, import_react.useRef)(onMessage); onMessageRef.current = onMessage; const parserRef = (0, import_react.useRef)(parser); parserRef.current = parser; const parserMemoed = (0, import_react.useCallback)((message) => { return parserRef.current(message); }, []); (0, import_react.useEffect)(() => { if (opts?.enabled === false) { return; } const sub = client.subscribe(topic, parserMemoed, { nl: opts?.nl, qos: opts?.qos, rap: opts?.rap, rh: opts?.rh }); sub.on("message", (message) => { onMessageRef.current(message.content); }); return () => { sub.end(); }; }, [ client, topic, parserMemoed, opts?.enabled, opts?.nl, opts?.qos, opts?.rap, opts?.rh ]); } function useMQTTError(onError) { const client = useMQTT(); const [error, setError] = (0, import_react.useState)(null); (0, import_react.useEffect)(() => { const listener = (err) => { setError(err); onError(err); }; client.on("error", listener); return () => { client.off("error", listener); }; }, [client, onError]); return error; } //# sourceMappingURL=react.cjs.map