UNPKG

@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
"use strict"; 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