@segment/analytics-core
Version:
This package represents core 'shared' functionality that is shared by analytics packages. This is not designed to be used directly, but internal to analytics-node and analytics-browser.
54 lines • 2.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.dispatch = exports.getDelay = void 0;
var tslib_1 = require("tslib");
var callback_1 = require("../callback");
/* The amount of time in ms to wait before invoking the callback. */
var getDelay = function (startTimeInEpochMS, timeoutInMS) {
var elapsedTime = Date.now() - startTimeInEpochMS;
// increasing the timeout increases the delay by almost the same amount -- this is weird legacy behavior.
return Math.max((timeoutInMS !== null && timeoutInMS !== void 0 ? timeoutInMS : 300) - elapsedTime, 0);
};
exports.getDelay = getDelay;
/**
* Push an event into the dispatch queue and invoke any callbacks.
*
* @param event - Segment event to enqueue.
* @param queue - Queue to dispatch against.
* @param emitter - This is typically an instance of "Analytics" -- used for metrics / progress information.
* @param options
*/
function dispatch(ctx, queue, emitter, options) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var startTime, dispatched;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
emitter.emit('dispatch_start', ctx);
startTime = Date.now();
if (!queue.isEmpty()) return [3 /*break*/, 2];
return [4 /*yield*/, queue.dispatchSingle(ctx)];
case 1:
dispatched = _a.sent();
return [3 /*break*/, 4];
case 2: return [4 /*yield*/, queue.dispatch(ctx)];
case 3:
dispatched = _a.sent();
_a.label = 4;
case 4:
if (!(options === null || options === void 0 ? void 0 : options.callback)) return [3 /*break*/, 6];
return [4 /*yield*/, (0, callback_1.invokeCallback)(dispatched, options.callback, (0, exports.getDelay)(startTime, options.timeout))];
case 5:
dispatched = _a.sent();
_a.label = 6;
case 6:
if (options === null || options === void 0 ? void 0 : options.debug) {
dispatched.flush();
}
return [2 /*return*/, dispatched];
}
});
});
}
exports.dispatch = dispatch;
//# sourceMappingURL=dispatch.js.map