@embrace-io/react-native-redux
Version:
Collects telemetry from dispatching actions with Redux
43 lines (42 loc) • 1.89 kB
JavaScript
;
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;