UNPKG

@embrace-io/react-native-redux

Version:

Collects telemetry from dispatching actions with Redux

43 lines (42 loc) 1.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createEmbraceMiddleware = exports.useEmbraceMiddleware = void 0; const react_1 = require("react"); const gzip_js_1 = require("gzip-js"); const instrumentation_1 = require("./instrumentation"); const attributeTransform = (attrs) => { var _a, _b; const transformed = { "emb.type": "sys.rn_action", }; if (attrs["action.type"]) { transformed.name = (_a = attrs["action.type"]) === null || _a === void 0 ? void 0 : _a.toString(); } if (attrs["action.payload"]) { transformed.payload_size = (0, gzip_js_1.zip)(attrs["action.payload"].toString()).length.toString(); } if (attrs["action.outcome"]) { transformed.outcome = (_b = attrs["action.outcome"]) === null || _b === void 0 ? void 0 : _b.toString(); } return transformed; }; const createEmbraceMiddleware = (tracerProvider) => (0, instrumentation_1.dispatchMiddleware)(tracerProvider, { attributeTransform, }); exports.createEmbraceMiddleware = createEmbraceMiddleware; const useEmbraceMiddleware = (tracerProvider) => { // disabling rule following recommendation on: https://redux.js.org/usage/usage-with-typescript#type-checking-middleware // eslint-disable-next-line @typescript-eslint/ban-types const [middleware, setMiddleware] = (0, react_1.useState)(); (0, react_1.useEffect)(() => { if (tracerProvider && !middleware) { // since `middleware` is a function the wrapping anonymous function is needed here to avoid using the overloaded // signature of `setMiddleware` that accepts a function as the first argument setMiddleware(() => createEmbraceMiddleware(tracerProvider)); } }, [tracerProvider, middleware]); return { middleware, }; }; exports.useEmbraceMiddleware = useEmbraceMiddleware;