dynamic-throttled-queue 2.2.1-rc.b3d1777 → 2.3.0-rc.120625e

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -99,10 +99,11 @@ throttle.stop(); // halt processing
99
99
 
100
100
  | State | Pending work and enqueue | Active work | Scheduling and lifecycle operations |
101
101
  | ----- | ------------------------ | ----------- | ----------------------------------- |
102
- | Running | Pending work can start; new callbacks are accepted. | Continues normally. | `pause()` retains work and stops new starts. `stop()` retains work and clears timers. `abort()` is terminal. |
102
+ | Running | Pending work can start; new callbacks are accepted. | Continues normally. | `pause()` retains work and stops new starts. `stop()` retains work and clears timers. `abort()` is terminal. A rate strategy failure moves the queue to Failed. |
103
103
  | Paused | Pending work, newly enqueued callbacks, and retries are retained but do not start. | Continues and settles normally. | `resume()` restarts pacing at the current rate and begins a fresh adaptive-rate observation window. Delayed retries freeze their remaining delay and continue only after resume. `pause()` is idempotent. `stop()` clears the paused state. |
104
104
  | Stopped | Pending work is retained. A later enqueue restarts scheduling. | Continues and settles normally. | Delayed retries freeze their remaining delay; the later enqueue resumes them. `pause()` and `resume()` are no-ops. `stop()` is idempotent. |
105
105
  | Aborted | Pending work is discarded and future enqueues throw. | Receives the shared abort signal and may finish cooperatively. | `pause()`, `resume()`, `stop()`, and `abort()` do not restart scheduling; `abort()` is idempotent. |
106
+ | Failed | Pending work is discarded and future enqueues throw the strategy error. | Continues and settles without retries or accounting. The shared signal is not aborted. | Terminal. `pause()`, `resume()`, `stop()`, and `abort()` are no-ops. |
106
107
 
107
108
  While paused, callback outcomes do not contribute to adaptive-rate adjustment. A failed active callback may still create a configured retry, but that retry remains pending until `resume()`.
108
109
 
@@ -112,9 +113,11 @@ In settled timing, `pause()` discards the in-progress observation window rather
112
113
 
113
114
  `abort()` is terminal and idempotent. It clears scheduler timers, discards pending callbacks, and aborts the one shared signal supplied to active callbacks. Future enqueue attempts throw. Cancellation is cooperative: callbacks that ignore the signal can continue running, but their later success or failure does not retry work or affect adaptive-rate accounting.
114
115
 
115
- `getState()` returns a frozen `QueueState` snapshot. Each call is independent; mutations to the returned object do not affect the queue. Fields: `rate` (current rate), `pending` (queued + delayed retries), `active` (callbacks executing), `state` (`"running"` | `"paused"` | `"stopped"` | `"aborted"`), and monotonic lifetime counters `started`, `succeeded`, `failed`, `retried`, `rateIncreases`, `rateDecreases`. `started`/`succeeded`/`failed` count callback attempts: a retry is a new attempt; a failure is counted even when a later retry succeeds. `retried` increments only when another attempt is actually scheduled. Rate-direction counters match applied rate changes and `onRateChange` notifications exactly. Counters do not change for settlements after `abort()`.
116
+ A queue fails when `rateStrategy` throws or returns a malformed decision. The queue clears its timers, discards pending callbacks and delayed retries, and reports `state: "failed"`. The original error is still rethrown where the decision ran: an uncaught exception from the adaptive-rate timer, or an unhandled rejection when a slow asynchronous callback completes a settled-timing window. Pending `waitForIdle()` promises reject with that error immediately, even while callbacks are still active; later `waitForIdle()` calls reject with it and later enqueues throw it. Unlike `abort()`, failure does not wait for active callbacks to settle. Create a new queue to resume work.
116
117
 
117
- `waitForIdle()` returns a `Promise<void>` that resolves once all pending callbacks, active executions, and delayed retries have reached a terminal outcome. If the queue is already idle the promise resolves immediately. Each call is one-shot: a later enqueue does not affect a promise that has already resolved. Multiple simultaneous callers all resolve at the same idle transition without retaining waiter state. A callback failure that triggers a retry never exposes a transient idle transition between the failed attempt and the retry. `stop()` retains pending work, so existing waiters remain pending until that work completes after a later enqueue resumes the queue. `abort()` discards pending work but waiters remain pending until every active callback settles; post-abort settlements do not create new retry work. A paused queue resolves waiters only when both pending and active work are zero.
118
+ `getState()` returns a frozen `QueueState` snapshot. Each call is independent; mutations to the returned object do not affect the queue. Fields: `rate` (current rate), `pending` (queued + delayed retries), `active` (callbacks executing), `state` (`"running"` | `"paused"` | `"stopped"` | `"aborted"` | `"failed"`), and monotonic lifetime counters `started`, `succeeded`, `failed`, `retried`, `rateIncreases`, `rateDecreases`. `started`/`succeeded`/`failed` count callback attempts: a retry is a new attempt; a failure is counted even when a later retry succeeds. `retried` increments only when another attempt is actually scheduled. Rate-direction counters match applied rate changes and `onRateChange` notifications exactly. Counters do not change for settlements after `abort()` or a strategy failure.
119
+
120
+ `waitForIdle()` returns a `Promise<void>` that resolves once all pending callbacks, active executions, and delayed retries have reached a terminal outcome. If the queue is already idle the promise resolves immediately. Each call is one-shot: a later enqueue does not affect a promise that has already resolved. Multiple simultaneous callers all resolve at the same idle transition without retaining waiter state. A callback failure that triggers a retry never exposes a transient idle transition between the failed attempt and the retry. `stop()` retains pending work, so existing waiters remain pending until that work completes after a later enqueue resumes the queue. `abort()` discards pending work, so waiters resolve as soon as no callback is active: immediately when none is running, otherwise when the last active callback settles. Post-abort settlements do not create new retry work. A paused queue resolves waiters only when both pending and active work are zero. A failed queue rejects every waiter with the strategy error at once, without waiting for active callbacks.
118
121
 
119
122
  ## Examples
120
123
 
@@ -260,7 +263,7 @@ createThrottledQueue({ min_rpi: 1, max_rpi: 10, interval: 1000, rateStrategy: li
260
263
 
261
264
  A `RateStrategy` receives a frozen observation with `currentRate`, `minRate`, `maxRate`, `errorCount`, `errorThreshold`, `hasPendingWork`, and `wasBackedOff`; it returns `{ nextRate, shouldBackOff }`. Every queue starts at the midpoint of its configured range. The queue clamps finite integer `nextRate` values to its bounds. `shouldBackOff` requests a pause, which the queue performs only when `back_off` is `true`.
262
265
 
263
- Strategies must return a finite integer `nextRate` and a boolean `shouldBackOff`. A malformed decision or a strategy exception permanently halts that queue, clears its timers, retains unstarted callbacks in `pending`, and surfaces the original error. Create a new queue instance to resume work.
266
+ Strategies must return a finite integer `nextRate` and a boolean `shouldBackOff`. A malformed decision or a strategy exception fails that queue permanently: see [Lifecycle](#lifecycle) for what the failed state discards, rejects and rethrows. Create a new queue instance to resume work.
264
267
 
265
268
  ### Backoff
266
269
 
@@ -26,6 +26,8 @@ export type AdaptiveRateHost = {
26
26
  holdStarts: (deferBy?: number) => void;
27
27
  /** Observation ended: cancel the next paced start. */
28
28
  idle: () => void;
29
+ /** The rate strategy failed; the host must call `stop()`. The error is rethrown after this returns. */
30
+ failed: (error: unknown) => void;
29
31
  };
30
32
  export type AdaptiveRate = {
31
33
  readonly rate: number;
@@ -42,7 +44,5 @@ export type AdaptiveRate = {
42
44
  pause: () => void;
43
45
  /** Reports a callback start. Call the returned reporter once when that callback settles. */
44
46
  started: () => SettlementReporter;
45
- /** Throws the strategy failure that permanently halted adaptive rate, if one occurred. */
46
- throwIfFailed: () => void;
47
47
  };
48
48
  export declare function createAdaptiveRate(options: AdaptiveRateOptions, host: AdaptiveRateHost): AdaptiveRate;
@@ -120,7 +120,6 @@ export function createAdaptiveRate(options, host) {
120
120
  let wasBackedOff = false;
121
121
  let ignoringSettlements = false;
122
122
  let pacing = "idle";
123
- let failure;
124
123
  function isRateReducing(outcome) {
125
124
  try {
126
125
  return rateOutcomeClassifier?.(outcome) ?? true;
@@ -154,8 +153,7 @@ export function createAdaptiveRate(options, host) {
154
153
  decision = validateDecision(rateStrategy(observation));
155
154
  }
156
155
  catch (error) {
157
- failure = { error };
158
- timing.stop();
156
+ host.failed(error);
159
157
  throw error;
160
158
  }
161
159
  const hold = back_off && decision.shouldBackOff;
@@ -228,10 +226,6 @@ export function createAdaptiveRate(options, host) {
228
226
  ignoringSettlements = true;
229
227
  },
230
228
  started: () => timing.started(),
231
- throwIfFailed() {
232
- if (failure)
233
- throw failure.error;
234
- },
235
229
  };
236
230
  }
237
231
  //# sourceMappingURL=adaptive-rate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adaptive-rate.js","sourceRoot":"","sources":["../src/adaptive-rate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adaptive-rate.js","sourceRoot":"","sources":["../src/adaptive-rate.ts"],"names":[],"mappings":"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"}
@@ -71,7 +71,7 @@ export type ThrottleOptions = {
71
71
  onRateChange?: (rate: number) => void;
72
72
  };
73
73
  export type ThrottleFn = (callback: ThrottleCallback) => void;
74
- export type QueueLifecycleState = "running" | "paused" | "stopped" | "aborted";
74
+ export type QueueLifecycleState = "running" | "paused" | "stopped" | "aborted" | "failed";
75
75
  export type QueueState = Readonly<{
76
76
  rate: number;
77
77
  pending: number;
@@ -0,0 +1,50 @@
1
+ export type PendingWorkOptions = {
2
+ /** Most items that may hold a reservation at once, counting queued, held and active items. */
3
+ capacity: number;
4
+ /** Dead queue slots tolerated before the queue compacts. */
5
+ compactThreshold: number;
6
+ };
7
+ export type PendingWorkHost = {
8
+ /** A retry joined the queue, either straight from `settle` or once its delay elapsed. */
9
+ retryQueued: () => void;
10
+ };
11
+ /** How an ended attempt continues: queued again now, or held for `delay` ms first. */
12
+ export type Retry<T> = Readonly<{
13
+ item: T;
14
+ delay?: number;
15
+ }>;
16
+ /**
17
+ * Accepted work that has not reached a terminal outcome: queued items in FIFO order, retries held
18
+ * for a delay, and active items that have started but not settled. Each item keeps one capacity
19
+ * reservation from `accept` until it settles without a retry.
20
+ */
21
+ export type PendingWork<T> = {
22
+ /** Items that can start now. Held retries are not queued until their delay elapses. */
23
+ readonly queued: number;
24
+ /** Queued items plus held retries. */
25
+ readonly pending: number;
26
+ /** Items taken that have not settled. */
27
+ readonly active: number;
28
+ /** Reserves capacity and queues `item`. Throws when every reservation is taken. */
29
+ accept: (item: T) => void;
30
+ /** Makes the oldest queued item active and returns it, or `undefined` when nothing is queued. */
31
+ take: () => T | undefined;
32
+ /**
33
+ * Ends one active item. `decide` runs once the item no longer counts as active but still holds its
34
+ * reservation; returning a retry keeps that reservation, returning nothing releases it. `observe`
35
+ * runs after the retry is placed and before idle is checked: work it accepts keeps idle waiters
36
+ * pending, and `fail` called from inside it rejects them.
37
+ */
38
+ settle: (decide?: () => Retry<T> | undefined, observe?: () => void) => void;
39
+ /** Stops held-retry delays from elapsing, keeping each one's remaining time. */
40
+ freeze: () => void;
41
+ /** Resumes held-retry delays from their remaining time. Retries held while frozen wait for this. */
42
+ thaw: () => void;
43
+ /** Drops queued items and held retries. Active items still settle, and idle waits for them. */
44
+ discard: () => void;
45
+ /** Drops queued items and held retries, and rejects current idle waiters with `error`. */
46
+ fail: (error: unknown) => void;
47
+ /** Resolves once nothing is queued, held or active. */
48
+ whenIdle: () => Promise<void>;
49
+ };
50
+ export declare function createPendingWork<T>(options: PendingWorkOptions, host: PendingWorkHost): PendingWork<T>;
@@ -0,0 +1,132 @@
1
+ export function createPendingWork(options, host) {
2
+ const { capacity, compactThreshold } = options;
3
+ const queue = [];
4
+ let head = 0;
5
+ const held = [];
6
+ let frozen = false;
7
+ let active = 0;
8
+ /** Items between leaving `active` and having their retry placed; they keep their reservation. */
9
+ let deciding = 0;
10
+ const idleWaiters = [];
11
+ function queued() {
12
+ return queue.length - head;
13
+ }
14
+ function pending() {
15
+ return queued() + held.length;
16
+ }
17
+ function isIdle() {
18
+ return active === 0 && pending() === 0;
19
+ }
20
+ function notifyIdle() {
21
+ if (!isIdle())
22
+ return;
23
+ for (const waiter of idleWaiters.splice(0))
24
+ waiter.resolve();
25
+ }
26
+ function releaseHeld(retry) {
27
+ held.splice(held.indexOf(retry), 1);
28
+ queue.push(retry.item);
29
+ host.retryQueued();
30
+ }
31
+ function startHeld(retry) {
32
+ retry.due = Date.now() + retry.remaining;
33
+ retry.timeout = setTimeout(() => releaseHeld(retry), retry.remaining);
34
+ }
35
+ function hold(item, delay) {
36
+ const retry = { item, remaining: delay, due: 0 };
37
+ held.push(retry);
38
+ if (!frozen)
39
+ startHeld(retry);
40
+ }
41
+ function drop() {
42
+ for (const retry of held)
43
+ clearTimeout(retry.timeout);
44
+ held.length = 0;
45
+ queue.length = 0;
46
+ head = 0;
47
+ }
48
+ return {
49
+ get queued() {
50
+ return queued();
51
+ },
52
+ get pending() {
53
+ return pending();
54
+ },
55
+ get active() {
56
+ return active;
57
+ },
58
+ accept(item) {
59
+ if (pending() + active + deciding >= capacity)
60
+ throw new Error("Cannot enqueue work: maxQueueSize has been reached");
61
+ queue.push(item);
62
+ },
63
+ take() {
64
+ if (head === queue.length)
65
+ return undefined;
66
+ const item = queue[head++];
67
+ active++;
68
+ if (head === queue.length) {
69
+ queue.length = 0;
70
+ head = 0;
71
+ }
72
+ else if (head > compactThreshold && head > queue.length / 2) {
73
+ queue.splice(0, head);
74
+ head = 0;
75
+ }
76
+ return item;
77
+ },
78
+ settle(decide, observe) {
79
+ active--;
80
+ deciding++;
81
+ let retry;
82
+ try {
83
+ retry = decide?.();
84
+ }
85
+ finally {
86
+ deciding--;
87
+ }
88
+ if (retry?.delay !== undefined)
89
+ hold(retry.item, retry.delay);
90
+ else if (retry) {
91
+ queue.push(retry.item);
92
+ host.retryQueued();
93
+ }
94
+ observe?.();
95
+ notifyIdle();
96
+ },
97
+ freeze() {
98
+ frozen = true;
99
+ for (const retry of held) {
100
+ if (retry.timeout === undefined)
101
+ continue;
102
+ clearTimeout(retry.timeout);
103
+ retry.timeout = undefined;
104
+ retry.remaining = Math.max(0, retry.due - Date.now());
105
+ }
106
+ },
107
+ thaw() {
108
+ frozen = false;
109
+ for (const retry of held) {
110
+ if (retry.timeout === undefined)
111
+ startHeld(retry);
112
+ }
113
+ },
114
+ discard() {
115
+ drop();
116
+ notifyIdle();
117
+ },
118
+ fail(error) {
119
+ drop();
120
+ for (const waiter of idleWaiters.splice(0))
121
+ waiter.reject(error);
122
+ },
123
+ async whenIdle() {
124
+ if (isIdle())
125
+ return;
126
+ const waiter = Promise.withResolvers();
127
+ idleWaiters.push(waiter);
128
+ return waiter.promise;
129
+ },
130
+ };
131
+ }
132
+ //# sourceMappingURL=pending-work.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pending-work.js","sourceRoot":"","sources":["../src/pending-work.ts"],"names":[],"mappings":"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"}
package/dist/scheduler.js CHANGED
@@ -1,27 +1,28 @@
1
1
  import { createAdaptiveRate } from "./adaptive-rate.js";
2
+ import { createPendingWork } from "./pending-work.js";
2
3
  import { calculateRetryDelay } from "./retry-backoff.js";
4
+ /** The state each event leads to. An event missing from the current state's row is a no-op. */
5
+ const lifecycleTransitions = {
6
+ running: { pause: "paused", stop: "stopped", abort: "aborted", fail: "failed" },
7
+ paused: { resume: "running", stop: "stopped", abort: "aborted" },
8
+ stopped: { restart: "running", abort: "aborted" },
9
+ aborted: {},
10
+ failed: {},
11
+ };
3
12
  export function createScheduler(options, adaptiveRateOptions) {
4
13
  const { interval, evenly_spaced = true, retry = 0, retryBackoff, concurrency, maxQueueSize, compact_threshold = 512, retryClassifier, } = options;
5
14
  let last_called = 0;
6
15
  let timeout;
7
- let active_count = 0;
8
- let isPaused = false;
9
- let isStopped = false;
10
- let isAborted = false;
16
+ let lifecycle = { state: "running" };
11
17
  let cnt_started = 0;
12
18
  let cnt_succeeded = 0;
13
19
  let cnt_failed = 0;
14
20
  let cnt_retried = 0;
15
21
  const abortController = new AbortController();
16
22
  const max_concurrency = concurrency ?? Infinity;
17
- const max_queue_size = maxQueueSize ?? Infinity;
18
- const queue = [];
19
- const delayedRetries = [];
20
- let head = 0;
21
- let reserved_count = 0;
22
- const idleWaiters = [];
23
+ const work = createPendingWork({ capacity: maxQueueSize ?? Infinity, compactThreshold: compact_threshold }, { retryQueued: start });
23
24
  const adaptiveRate = createAdaptiveRate(adaptiveRateOptions, {
24
- hasPendingWork: () => queue.length > head,
25
+ hasPendingWork: () => work.queued > 0,
25
26
  resumeStarts() {
26
27
  last_called = Date.now();
27
28
  clearTimeout(timeout);
@@ -34,94 +35,43 @@ export function createScheduler(options, adaptiveRateOptions) {
34
35
  idle() {
35
36
  clearTimeout(timeout);
36
37
  timeout = undefined;
37
- if (head >= queue.length) {
38
- queue.length = 0;
39
- head = 0;
40
- }
38
+ },
39
+ failed(error) {
40
+ transition("fail", error);
41
41
  },
42
42
  });
43
43
  function spacing() {
44
44
  return evenly_spaced ? interval / adaptiveRate.rate : interval;
45
45
  }
46
- function isIdle() {
47
- return active_count === 0 && queue.length <= head && delayedRetries.length === 0;
48
- }
49
- function notifyIdle() {
50
- if (!isIdle())
51
- return;
52
- const waiters = idleWaiters.splice(0);
53
- for (const resolve of waiters)
54
- resolve();
55
- }
56
- function releaseDelayedRetry(delayedRetry) {
57
- const index = delayedRetries.indexOf(delayedRetry);
58
- if (index < 0)
46
+ /** Moves the lifecycle for `event` and runs the cleanup that entering the new state requires. */
47
+ function transition(event, error) {
48
+ const next = lifecycleTransitions[lifecycle.state][event];
49
+ if (next === undefined)
59
50
  return;
60
- delayedRetries.splice(index, 1);
61
- queue.push(delayedRetry.item);
62
- start();
63
- }
64
- function startDelayedRetry(delayedRetry) {
65
- delayedRetry.due = Date.now() + delayedRetry.remaining;
66
- delayedRetry.timeout = setTimeout(() => {
67
- releaseDelayedRetry(delayedRetry);
68
- }, delayedRetry.remaining);
69
- }
70
- function freezeDelayedRetries() {
71
- for (const delayedRetry of delayedRetries) {
72
- if (delayedRetry.timeout === undefined)
73
- continue;
74
- if (delayedRetry.due === undefined)
75
- continue;
76
- clearTimeout(delayedRetry.timeout);
77
- delayedRetry.timeout = undefined;
78
- delayedRetry.remaining = Math.max(0, delayedRetry.due - Date.now());
79
- }
80
- }
81
- function resumeDelayedRetries() {
82
- for (const delayedRetry of delayedRetries) {
83
- if (delayedRetry.timeout === undefined)
84
- startDelayedRetry(delayedRetry);
51
+ lifecycle = next === "failed" ? { state: next, error } : { state: next };
52
+ switch (next) {
53
+ case "running":
54
+ work.thaw();
55
+ adaptiveRate.start();
56
+ return;
57
+ case "paused":
58
+ work.freeze();
59
+ adaptiveRate.pause();
60
+ return;
61
+ case "stopped":
62
+ work.freeze();
63
+ adaptiveRate.stop();
64
+ return;
65
+ case "aborted":
66
+ adaptiveRate.stop();
67
+ work.discard();
68
+ abortController.abort();
69
+ return;
70
+ case "failed":
71
+ adaptiveRate.stop();
72
+ work.fail(error);
85
73
  }
86
74
  }
87
- function scheduleDelayedRetry(item, delay) {
88
- const delayedRetry = { item, remaining: delay };
89
- delayedRetries.push(delayedRetry);
90
- if (!isPaused && !isStopped)
91
- startDelayedRetry(delayedRetry);
92
- }
93
- function stop() {
94
- isStopped = true;
95
- isPaused = false;
96
- freezeDelayedRetries();
97
- adaptiveRate.stop();
98
- }
99
- function pause() {
100
- if (isAborted || isStopped || isPaused)
101
- return;
102
- isPaused = true;
103
- freezeDelayedRetries();
104
- adaptiveRate.pause();
105
- }
106
- function resume() {
107
- if (!isPaused)
108
- return;
109
- isPaused = false;
110
- resumeDelayedRetries();
111
- start();
112
- }
113
- function abort() {
114
- if (isAborted)
115
- return;
116
- isAborted = true;
117
- adaptiveRate.stop();
118
- freezeDelayedRetries();
119
- delayedRetries.length = 0;
120
- queue.length = 0;
121
- head = 0;
122
- reserved_count = 0;
123
- abortController.abort();
124
- }
125
75
  function isRetryable(item, outcome) {
126
76
  if (!outcome || item.retries === 0)
127
77
  return false;
@@ -132,40 +82,33 @@ export function createScheduler(options, adaptiveRateOptions) {
132
82
  return true;
133
83
  }
134
84
  }
135
- function handleResult(item, outcome, reportSettlement) {
136
- if (isAborted)
85
+ function nextAttempt(item, outcome) {
86
+ if (!isRetryable(item, outcome))
87
+ return undefined;
88
+ cnt_retried++;
89
+ const retryItem = { fn: item.fn, retries: item.retries - 1 };
90
+ if (retryBackoff === undefined)
91
+ return { item: retryItem };
92
+ return { item: retryItem, delay: calculateRetryDelay(retryBackoff, retry - item.retries + 1) };
93
+ }
94
+ function handleSettlement(item, outcome, reportSettlement, resume = false) {
95
+ if (lifecycle.state === "aborted" || lifecycle.state === "failed") {
96
+ work.settle();
137
97
  return;
98
+ }
138
99
  if (outcome)
139
100
  cnt_failed++;
140
101
  else
141
102
  cnt_succeeded++;
142
- if (isRetryable(item, outcome)) {
143
- cnt_retried++;
144
- const retryItem = { fn: item.fn, retries: item.retries - 1 };
145
- if (retryBackoff === undefined) {
146
- queue.push(retryItem);
147
- start();
148
- }
149
- else {
150
- const retryIndex = retry - item.retries + 1;
151
- scheduleDelayedRetry(retryItem, calculateRetryDelay(retryBackoff, retryIndex));
152
- }
153
- }
154
- else
155
- reserved_count--;
156
- reportSettlement(outcome);
157
- }
158
- function handleSettlement(item, outcome, reportSettlement, resume = false) {
159
- active_count--;
160
- handleResult(item, outcome, reportSettlement);
161
- if (resume && adaptiveRate.pacing === "open" && queue.length > head)
162
- dequeue();
163
- notifyIdle();
103
+ work.settle(() => nextAttempt(item, outcome), () => {
104
+ reportSettlement(outcome);
105
+ if (resume && adaptiveRate.pacing === "open" && work.queued > 0)
106
+ dequeue();
107
+ });
164
108
  }
165
109
  function execute(item) {
166
110
  const reportSettlement = adaptiveRate.started();
167
111
  cnt_started++;
168
- active_count++;
169
112
  let result;
170
113
  try {
171
114
  result = item.fn({ signal: abortController.signal });
@@ -188,62 +131,51 @@ export function createScheduler(options, adaptiveRateOptions) {
188
131
  timeout = setTimeout(dequeue, threshold - now);
189
132
  return;
190
133
  }
191
- const end = Math.min(head + (evenly_spaced ? 1 : adaptiveRate.rate), queue.length);
134
+ const batch = Math.min(evenly_spaced ? 1 : adaptiveRate.rate, work.queued);
192
135
  let started = 0;
193
- while (head < end && active_count < max_concurrency) {
194
- const item = queue[head++];
136
+ while (started < batch && work.active < max_concurrency) {
137
+ const item = work.take();
138
+ if (item === undefined)
139
+ break;
195
140
  if (started++ === 0)
196
141
  last_called = Date.now();
197
142
  execute(item);
198
143
  }
199
- if (head > compact_threshold && head > queue.length / 2) {
200
- queue.splice(0, head);
201
- head = 0;
202
- }
203
- if (head >= queue.length)
144
+ if (work.queued === 0)
204
145
  adaptiveRate.drained();
205
- if (adaptiveRate.pacing !== "open" || active_count >= max_concurrency)
146
+ if (adaptiveRate.pacing !== "open" || work.active >= max_concurrency)
206
147
  return;
207
148
  timeout = setTimeout(dequeue, spacing());
208
149
  }
209
150
  function start() {
210
- if (isAborted || isPaused || isStopped)
211
- return;
212
- adaptiveRate.start();
151
+ if (lifecycle.state === "running")
152
+ adaptiveRate.start();
213
153
  }
214
154
  function enqueue(callback) {
215
- if (isAborted)
155
+ if (lifecycle.state === "aborted")
216
156
  throw new Error("Cannot enqueue work after the queue has been aborted");
217
- adaptiveRate.throwIfFailed();
218
- if (reserved_count >= max_queue_size)
219
- throw new Error("Cannot enqueue work: maxQueueSize has been reached");
220
- reserved_count++;
221
- queue.push({ fn: callback, retries: retry });
222
- const wasStopped = isStopped;
223
- isStopped = false;
224
- if (wasStopped)
225
- resumeDelayedRetries();
226
- start();
227
- }
228
- function getLifecycleState() {
229
- if (isAborted)
230
- return "aborted";
231
- if (isStopped)
232
- return "stopped";
233
- if (isPaused)
234
- return "paused";
235
- return "running";
236
- }
237
- enqueue.pause = pause;
238
- enqueue.resume = resume;
239
- enqueue.stop = stop;
240
- enqueue.abort = abort;
241
- enqueue.waitForIdle = async () => isIdle() ? Promise.resolve() : new Promise(resolve => { idleWaiters.push(resolve); });
157
+ if (lifecycle.state === "failed")
158
+ throw lifecycle.error;
159
+ work.accept({ fn: callback, retries: retry });
160
+ if (lifecycle.state === "stopped")
161
+ transition("restart");
162
+ else
163
+ start();
164
+ }
165
+ enqueue.pause = () => transition("pause");
166
+ enqueue.resume = () => transition("resume");
167
+ enqueue.stop = () => transition("stop");
168
+ enqueue.abort = () => transition("abort");
169
+ enqueue.waitForIdle = async () => {
170
+ if (lifecycle.state === "failed")
171
+ throw lifecycle.error;
172
+ return work.whenIdle();
173
+ };
242
174
  enqueue.getState = () => Object.freeze({
243
175
  rate: adaptiveRate.rate,
244
- pending: queue.length - head + delayedRetries.length,
245
- active: active_count,
246
- state: getLifecycleState(),
176
+ pending: work.pending,
177
+ active: work.active,
178
+ state: lifecycle.state,
247
179
  started: cnt_started,
248
180
  succeeded: cnt_succeeded,
249
181
  failed: cnt_failed,
@@ -251,7 +183,7 @@ export function createScheduler(options, adaptiveRateOptions) {
251
183
  rateIncreases: adaptiveRate.rateIncreases,
252
184
  rateDecreases: adaptiveRate.rateDecreases,
253
185
  });
254
- Object.defineProperty(enqueue, "pending", { get: () => queue.length - head + delayedRetries.length });
186
+ Object.defineProperty(enqueue, "pending", { get: () => work.pending });
255
187
  return enqueue;
256
188
  }
257
189
  //# sourceMappingURL=scheduler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dynamic-throttled-queue",
3
- "version": "2.2.1-rc.b3d1777",
3
+ "version": "2.3.0-rc.120625e",
4
4
  "type": "module",
5
5
  "description": "Dynamically throttles arbitrary code to execute between a minimum and maximum number of times per interval. Best for making throttled API requests.",
6
6
  "files": [