UNPKG

@embrace-io/react-native-redux

Version:

Collects telemetry from dispatching actions with Redux

64 lines (63 loc) 2.87 kB
"use strict"; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; Object.defineProperty(exports, "__esModule", { value: true }); const api_1 = require("@opentelemetry/api"); const version_1 = require("./version"); const spanFactory_1 = require("./utils/spanFactory"); const logFactory_1 = require("./utils/logFactory"); const defaultAttributeTransform = (attrs) => attrs; const middleware = (provider, config) => { const { debug, name, attributeTransform = defaultAttributeTransform, } = config || {}; const console = (0, logFactory_1.default)(!!debug); return () => { if (provider) { console.info("TracerProvider. Using custom tracer."); } else { console.info("No TracerProvider found. Using global tracer instead."); } const tracer = provider ? provider.getTracer(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION) : api_1.trace.getTracer(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION); return next => { return action => { const actionTyped = action; if (!(actionTyped && actionTyped.type)) { return next(action); } const { type } = actionTyped, otherValues = __rest(actionTyped, ["type"]); const span = (0, spanFactory_1.spanStart)(tracer, name !== null && name !== void 0 ? name : spanFactory_1.STATIC_NAME, { attributes: attributeTransform({ [spanFactory_1.ATTRIBUTES.type]: type, [spanFactory_1.ATTRIBUTES.payload]: JSON.stringify(otherValues), [spanFactory_1.ATTRIBUTES.outcome]: spanFactory_1.OUTCOMES.incomplete, }), }); try { const result = next(action); (0, spanFactory_1.spanEnd)(span, attributeTransform({ [spanFactory_1.ATTRIBUTES.outcome]: spanFactory_1.OUTCOMES.success, })); return result; } catch (err) { (0, spanFactory_1.spanEnd)(span, attributeTransform({ [spanFactory_1.ATTRIBUTES.outcome]: spanFactory_1.OUTCOMES.fail, })); throw err; } }; }; }; }; exports.default = middleware;