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