@jdsalasc/solvejs-async 1.6.0 → 1.7.1

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
@@ -7,23 +7,24 @@ Zero-dependency async/concurrency utilities for JavaScript and TypeScript.
7
7
 
8
8
  ## Utilities
9
9
 
10
- - `sleep`
11
- - `timeout`
12
- - `retry`
13
- - `pMap`
14
- - `debouncePromise`
15
- - `throttlePromise`
16
-
17
- ## When to use this package
18
-
19
- Use it when you need predictable retry logic, promise time limits, and controlled async concurrency without adding heavy helper libraries.
20
-
21
- ## Limitations and Constraints
22
-
23
- - `throttlePromise` drops calls made during the throttle window.
24
- - `debouncePromise` cancels previous pending calls with a rejection.
25
- - Queueing/rate-limit orchestration is intentionally out of scope for now.
10
+ - `sleep`
11
+ - `timeout`
12
+ - `retry`
13
+ - `pMap`
14
+ - `debouncePromise`
15
+ - `throttlePromise`
16
+ - `createTaskQueue`
17
+ - `createRateLimiter`
18
+ - `createTokenBucketLimiter`
19
+
20
+ ## When to use this package
21
+
22
+ Use it when you need predictable retry logic, promise time limits, queues, and rate-limited async execution without heavy helper libraries.
23
+
24
+ ## Limitations and Constraints
26
25
 
26
+ - `throttlePromise` drops calls made during the throttle window.
27
+ - `debouncePromise` cancels previous pending calls with a rejection.
27
28
  ## Install
28
29
 
29
30
  ```bash
@@ -33,12 +34,35 @@ npm i @jdsalasc/solvejs-async
33
34
  ## Quick example
34
35
 
35
36
  ```ts
36
- import { retry, timeout, pMap } from "@jdsalasc/solvejs-async";
37
+ import { createTaskQueue, createRateLimiter, createTokenBucketLimiter, retry, timeout, pMap } from "@jdsalasc/solvejs-async";
37
38
 
38
39
  const data = await retry(
39
40
  () => timeout(fetch("https://api.example.com/items").then((r) => r.json()), 3000),
40
41
  { retries: 2, delayMs: 200, backoffFactor: 2 }
41
42
  );
42
43
 
43
- const ids = await pMap(data.items, async (item) => item.id, { concurrency: 4 });
44
- ```
44
+ const ids = await pMap(data.items, async (item) => item.id, { concurrency: 4 });
45
+ const queue = createTaskQueue({ concurrency: 2 });
46
+ const limiter = createRateLimiter({ maxCalls: 5, windowMs: 1000 });
47
+ const burstLimiter = createTokenBucketLimiter({ capacity: 10, refillTokens: 2, refillIntervalMs: 1000 });
48
+ await queue.add(() => limiter(() => fetch("https://api.example.com/reindex")));
49
+ await burstLimiter(() => fetch("https://api.example.com/heavy-sync"), 3);
50
+ ```
51
+
52
+ ## Endpoint tier token costs (token-bucket)
53
+
54
+ ```ts
55
+ import { createTokenBucketLimiter } from "@jdsalasc/solvejs-async";
56
+
57
+ const limiter = createTokenBucketLimiter({ capacity: 20, refillTokens: 10, refillIntervalMs: 1000 });
58
+ const endpointCost = {
59
+ "/health": 1,
60
+ "/search": 2,
61
+ "/invoice/preview": 3,
62
+ "/invoice/finalize": 6,
63
+ "/batch/settlement": 10
64
+ } as const;
65
+
66
+ await limiter(() => fetch("https://api.example.com/health"), endpointCost["/health"]);
67
+ await limiter(() => fetch("https://api.example.com/batch/settlement"), endpointCost["/batch/settlement"]);
68
+ ```
@@ -6,7 +6,9 @@ exports.retry = retry;
6
6
  exports.pMap = pMap;
7
7
  exports.debouncePromise = debouncePromise;
8
8
  exports.throttlePromise = throttlePromise;
9
- exports.pSettle = pSettle;
9
+ exports.createTaskQueue = createTaskQueue;
10
+ exports.createRateLimiter = createRateLimiter;
11
+ exports.createTokenBucketLimiter = createTokenBucketLimiter;
10
12
  function assertNonNegativeFinite(value, label) {
11
13
  if (!Number.isFinite(value) || value < 0) {
12
14
  throw new TypeError(`Expected ${label} to be a non-negative finite number.`);
@@ -190,22 +192,162 @@ function throttlePromise(fn, options) {
190
192
  };
191
193
  }
192
194
  /**
193
- * Runs a list of promises and returns their settlement status (fulfilled or rejected).
194
- * Similar to `Promise.allSettled` but can be used with any iterable.
195
+ * Creates a lightweight async task queue with bounded concurrency.
195
196
  *
196
- * @param promises - An iterable of Promises, Promise-like objects, or values.
197
- * @returns A Promise that resolves to an array of settlement result objects.
197
+ * @param options - Queue options.
198
+ * @param options.concurrency - Maximum number of tasks running in parallel.
199
+ * @returns Queue controller with `add`, `pending`, and `running`.
198
200
  */
199
- async function pSettle(promises) {
200
- const settledPromises = Array.from(promises).map(async (promise) => {
201
- try {
202
- const value = await promise;
203
- return { status: "fulfilled", value };
204
- }
205
- catch (reason) {
206
- return { status: "rejected", reason };
201
+ function createTaskQueue(options = {}) {
202
+ const concurrency = options.concurrency ?? 1;
203
+ assertPositiveInteger(concurrency, "concurrency");
204
+ const queue = [];
205
+ let activeCount = 0;
206
+ const schedule = () => {
207
+ while (activeCount < concurrency && queue.length > 0) {
208
+ const run = queue.shift();
209
+ if (!run)
210
+ return;
211
+ activeCount += 1;
212
+ run();
207
213
  }
214
+ };
215
+ const add = (task) => new Promise((resolve, reject) => {
216
+ queue.push(() => {
217
+ Promise.resolve()
218
+ .then(task)
219
+ .then(resolve, reject)
220
+ .finally(() => {
221
+ activeCount -= 1;
222
+ schedule();
223
+ });
224
+ });
225
+ schedule();
208
226
  });
209
- return Promise.all(settledPromises);
227
+ return {
228
+ add,
229
+ pending: () => queue.length,
230
+ running: () => activeCount
231
+ };
232
+ }
233
+ /**
234
+ * Creates a fixed-window async rate limiter wrapper.
235
+ *
236
+ * @param options - Rate limiter options.
237
+ * @param options.maxCalls - Maximum executions allowed within the window.
238
+ * @param options.windowMs - Window duration in milliseconds.
239
+ * @returns Function that schedules work respecting the configured rate.
240
+ */
241
+ function createRateLimiter(options) {
242
+ const { maxCalls, windowMs } = options;
243
+ assertPositiveInteger(maxCalls, "maxCalls");
244
+ assertNonNegativeFinite(windowMs, "windowMs");
245
+ let chain = Promise.resolve();
246
+ const executionTimestamps = [];
247
+ return async (task) => {
248
+ const run = async () => {
249
+ const now = Date.now();
250
+ while (executionTimestamps.length > 0 && now - executionTimestamps[0] >= windowMs) {
251
+ executionTimestamps.shift();
252
+ }
253
+ if (executionTimestamps.length >= maxCalls) {
254
+ const earliest = executionTimestamps[0];
255
+ const waitMs = Math.max(0, windowMs - (now - earliest));
256
+ if (waitMs > 0) {
257
+ await sleep(waitMs);
258
+ }
259
+ }
260
+ executionTimestamps.push(Date.now());
261
+ return task();
262
+ };
263
+ const resultPromise = chain.then(run, run);
264
+ chain = resultPromise.then(() => undefined, () => undefined);
265
+ return resultPromise;
266
+ };
267
+ }
268
+ /**
269
+ * Creates a token-bucket limiter for bursty traffic with smooth refill.
270
+ *
271
+ * @param options - Token bucket options.
272
+ * @param options.capacity - Maximum bucket size.
273
+ * @param options.refillTokens - Tokens added each refill interval.
274
+ * @param options.refillIntervalMs - Refill interval in milliseconds.
275
+ * @param options.initialTokens - Initial token count. Defaults to `capacity`.
276
+ * @returns Function that schedules work when enough tokens are available.
277
+ */
278
+ function createTokenBucketLimiter(options) {
279
+ const { capacity, refillTokens, refillIntervalMs } = options;
280
+ const initialTokens = options.initialTokens ?? capacity;
281
+ assertPositiveInteger(capacity, "capacity");
282
+ assertPositiveInteger(refillTokens, "refillTokens");
283
+ assertPositiveInteger(refillIntervalMs, "refillIntervalMs");
284
+ assertNonNegativeFinite(initialTokens, "initialTokens");
285
+ if (initialTokens > capacity) {
286
+ throw new TypeError("Expected initialTokens to be less than or equal to capacity.");
287
+ }
288
+ const queue = [];
289
+ let availableTokens = initialTokens;
290
+ let lastRefillAt = Date.now();
291
+ let drainTimer;
292
+ const refill = () => {
293
+ const now = Date.now();
294
+ const elapsed = now - lastRefillAt;
295
+ if (elapsed < refillIntervalMs) {
296
+ return;
297
+ }
298
+ const intervals = Math.floor(elapsed / refillIntervalMs);
299
+ availableTokens = Math.min(capacity, availableTokens + intervals * refillTokens);
300
+ lastRefillAt += intervals * refillIntervalMs;
301
+ };
302
+ const scheduleDrain = () => {
303
+ if (queue.length === 0 || drainTimer) {
304
+ return;
305
+ }
306
+ const next = queue[0];
307
+ const missingTokens = Math.max(0, next.tokenCost - availableTokens);
308
+ if (missingTokens === 0) {
309
+ return;
310
+ }
311
+ const intervalsNeeded = Math.ceil(missingTokens / refillTokens);
312
+ const nextReadyAt = lastRefillAt + intervalsNeeded * refillIntervalMs;
313
+ const waitMs = Math.max(1, nextReadyAt - Date.now());
314
+ drainTimer = setTimeout(() => {
315
+ drainTimer = undefined;
316
+ runQueue();
317
+ }, waitMs);
318
+ };
319
+ const runQueue = () => {
320
+ refill();
321
+ while (queue.length > 0) {
322
+ const next = queue[0];
323
+ if (next.tokenCost > availableTokens) {
324
+ break;
325
+ }
326
+ queue.shift();
327
+ availableTokens -= next.tokenCost;
328
+ Promise.resolve()
329
+ .then(next.task)
330
+ .then(next.resolve, next.reject)
331
+ .finally(() => {
332
+ runQueue();
333
+ });
334
+ }
335
+ scheduleDrain();
336
+ };
337
+ return (task, tokenCost = 1) => {
338
+ assertPositiveInteger(tokenCost, "tokenCost");
339
+ if (tokenCost > capacity) {
340
+ throw new TypeError("Expected tokenCost to be less than or equal to capacity.");
341
+ }
342
+ return new Promise((resolve, reject) => {
343
+ queue.push({
344
+ tokenCost,
345
+ task,
346
+ resolve: resolve,
347
+ reject
348
+ });
349
+ runQueue();
350
+ });
351
+ };
210
352
  }
211
353
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -63,18 +63,49 @@ export type ThrottlePromiseOptions = {
63
63
  * @returns Throttled async function.
64
64
  */
65
65
  export declare function throttlePromise<TArgs extends unknown[], TResult>(fn: (...args: TArgs) => Promise<TResult> | TResult, options: ThrottlePromiseOptions): (...args: TArgs) => Promise<TResult | undefined>;
66
- export type SettledResult<T> = {
67
- status: "fulfilled";
68
- value: T;
69
- } | {
70
- status: "rejected";
71
- reason: unknown;
66
+ export type TaskQueueOptions = {
67
+ concurrency?: number;
68
+ };
69
+ export type TaskQueue = {
70
+ add: <T>(task: () => Promise<T> | T) => Promise<T>;
71
+ pending: () => number;
72
+ running: () => number;
73
+ };
74
+ /**
75
+ * Creates a lightweight async task queue with bounded concurrency.
76
+ *
77
+ * @param options - Queue options.
78
+ * @param options.concurrency - Maximum number of tasks running in parallel.
79
+ * @returns Queue controller with `add`, `pending`, and `running`.
80
+ */
81
+ export declare function createTaskQueue(options?: TaskQueueOptions): TaskQueue;
82
+ export type RateLimiterOptions = {
83
+ maxCalls: number;
84
+ windowMs: number;
85
+ };
86
+ /**
87
+ * Creates a fixed-window async rate limiter wrapper.
88
+ *
89
+ * @param options - Rate limiter options.
90
+ * @param options.maxCalls - Maximum executions allowed within the window.
91
+ * @param options.windowMs - Window duration in milliseconds.
92
+ * @returns Function that schedules work respecting the configured rate.
93
+ */
94
+ export declare function createRateLimiter(options: RateLimiterOptions): <T>(task: () => Promise<T> | T) => Promise<T>;
95
+ export type TokenBucketLimiterOptions = {
96
+ capacity: number;
97
+ refillTokens: number;
98
+ refillIntervalMs: number;
99
+ initialTokens?: number;
72
100
  };
73
101
  /**
74
- * Runs a list of promises and returns their settlement status (fulfilled or rejected).
75
- * Similar to `Promise.allSettled` but can be used with any iterable.
102
+ * Creates a token-bucket limiter for bursty traffic with smooth refill.
76
103
  *
77
- * @param promises - An iterable of Promises, Promise-like objects, or values.
78
- * @returns A Promise that resolves to an array of settlement result objects.
104
+ * @param options - Token bucket options.
105
+ * @param options.capacity - Maximum bucket size.
106
+ * @param options.refillTokens - Tokens added each refill interval.
107
+ * @param options.refillIntervalMs - Refill interval in milliseconds.
108
+ * @param options.initialTokens - Initial token count. Defaults to `capacity`.
109
+ * @returns Function that schedules work when enough tokens are available.
79
110
  */
80
- export declare function pSettle<T>(promises: Iterable<PromiseLike<T> | T>): Promise<SettledResult<T>[]>;
111
+ export declare function createTokenBucketLimiter(options: TokenBucketLimiterOptions): <T>(task: () => Promise<T> | T, tokenCost?: number) => Promise<T>;
package/dist/esm/index.js CHANGED
@@ -181,22 +181,162 @@ export function throttlePromise(fn, options) {
181
181
  };
182
182
  }
183
183
  /**
184
- * Runs a list of promises and returns their settlement status (fulfilled or rejected).
185
- * Similar to `Promise.allSettled` but can be used with any iterable.
184
+ * Creates a lightweight async task queue with bounded concurrency.
186
185
  *
187
- * @param promises - An iterable of Promises, Promise-like objects, or values.
188
- * @returns A Promise that resolves to an array of settlement result objects.
186
+ * @param options - Queue options.
187
+ * @param options.concurrency - Maximum number of tasks running in parallel.
188
+ * @returns Queue controller with `add`, `pending`, and `running`.
189
189
  */
190
- export async function pSettle(promises) {
191
- const settledPromises = Array.from(promises).map(async (promise) => {
192
- try {
193
- const value = await promise;
194
- return { status: "fulfilled", value };
195
- }
196
- catch (reason) {
197
- return { status: "rejected", reason };
190
+ export function createTaskQueue(options = {}) {
191
+ const concurrency = options.concurrency ?? 1;
192
+ assertPositiveInteger(concurrency, "concurrency");
193
+ const queue = [];
194
+ let activeCount = 0;
195
+ const schedule = () => {
196
+ while (activeCount < concurrency && queue.length > 0) {
197
+ const run = queue.shift();
198
+ if (!run)
199
+ return;
200
+ activeCount += 1;
201
+ run();
198
202
  }
203
+ };
204
+ const add = (task) => new Promise((resolve, reject) => {
205
+ queue.push(() => {
206
+ Promise.resolve()
207
+ .then(task)
208
+ .then(resolve, reject)
209
+ .finally(() => {
210
+ activeCount -= 1;
211
+ schedule();
212
+ });
213
+ });
214
+ schedule();
199
215
  });
200
- return Promise.all(settledPromises);
216
+ return {
217
+ add,
218
+ pending: () => queue.length,
219
+ running: () => activeCount
220
+ };
221
+ }
222
+ /**
223
+ * Creates a fixed-window async rate limiter wrapper.
224
+ *
225
+ * @param options - Rate limiter options.
226
+ * @param options.maxCalls - Maximum executions allowed within the window.
227
+ * @param options.windowMs - Window duration in milliseconds.
228
+ * @returns Function that schedules work respecting the configured rate.
229
+ */
230
+ export function createRateLimiter(options) {
231
+ const { maxCalls, windowMs } = options;
232
+ assertPositiveInteger(maxCalls, "maxCalls");
233
+ assertNonNegativeFinite(windowMs, "windowMs");
234
+ let chain = Promise.resolve();
235
+ const executionTimestamps = [];
236
+ return async (task) => {
237
+ const run = async () => {
238
+ const now = Date.now();
239
+ while (executionTimestamps.length > 0 && now - executionTimestamps[0] >= windowMs) {
240
+ executionTimestamps.shift();
241
+ }
242
+ if (executionTimestamps.length >= maxCalls) {
243
+ const earliest = executionTimestamps[0];
244
+ const waitMs = Math.max(0, windowMs - (now - earliest));
245
+ if (waitMs > 0) {
246
+ await sleep(waitMs);
247
+ }
248
+ }
249
+ executionTimestamps.push(Date.now());
250
+ return task();
251
+ };
252
+ const resultPromise = chain.then(run, run);
253
+ chain = resultPromise.then(() => undefined, () => undefined);
254
+ return resultPromise;
255
+ };
256
+ }
257
+ /**
258
+ * Creates a token-bucket limiter for bursty traffic with smooth refill.
259
+ *
260
+ * @param options - Token bucket options.
261
+ * @param options.capacity - Maximum bucket size.
262
+ * @param options.refillTokens - Tokens added each refill interval.
263
+ * @param options.refillIntervalMs - Refill interval in milliseconds.
264
+ * @param options.initialTokens - Initial token count. Defaults to `capacity`.
265
+ * @returns Function that schedules work when enough tokens are available.
266
+ */
267
+ export function createTokenBucketLimiter(options) {
268
+ const { capacity, refillTokens, refillIntervalMs } = options;
269
+ const initialTokens = options.initialTokens ?? capacity;
270
+ assertPositiveInteger(capacity, "capacity");
271
+ assertPositiveInteger(refillTokens, "refillTokens");
272
+ assertPositiveInteger(refillIntervalMs, "refillIntervalMs");
273
+ assertNonNegativeFinite(initialTokens, "initialTokens");
274
+ if (initialTokens > capacity) {
275
+ throw new TypeError("Expected initialTokens to be less than or equal to capacity.");
276
+ }
277
+ const queue = [];
278
+ let availableTokens = initialTokens;
279
+ let lastRefillAt = Date.now();
280
+ let drainTimer;
281
+ const refill = () => {
282
+ const now = Date.now();
283
+ const elapsed = now - lastRefillAt;
284
+ if (elapsed < refillIntervalMs) {
285
+ return;
286
+ }
287
+ const intervals = Math.floor(elapsed / refillIntervalMs);
288
+ availableTokens = Math.min(capacity, availableTokens + intervals * refillTokens);
289
+ lastRefillAt += intervals * refillIntervalMs;
290
+ };
291
+ const scheduleDrain = () => {
292
+ if (queue.length === 0 || drainTimer) {
293
+ return;
294
+ }
295
+ const next = queue[0];
296
+ const missingTokens = Math.max(0, next.tokenCost - availableTokens);
297
+ if (missingTokens === 0) {
298
+ return;
299
+ }
300
+ const intervalsNeeded = Math.ceil(missingTokens / refillTokens);
301
+ const nextReadyAt = lastRefillAt + intervalsNeeded * refillIntervalMs;
302
+ const waitMs = Math.max(1, nextReadyAt - Date.now());
303
+ drainTimer = setTimeout(() => {
304
+ drainTimer = undefined;
305
+ runQueue();
306
+ }, waitMs);
307
+ };
308
+ const runQueue = () => {
309
+ refill();
310
+ while (queue.length > 0) {
311
+ const next = queue[0];
312
+ if (next.tokenCost > availableTokens) {
313
+ break;
314
+ }
315
+ queue.shift();
316
+ availableTokens -= next.tokenCost;
317
+ Promise.resolve()
318
+ .then(next.task)
319
+ .then(next.resolve, next.reject)
320
+ .finally(() => {
321
+ runQueue();
322
+ });
323
+ }
324
+ scheduleDrain();
325
+ };
326
+ return (task, tokenCost = 1) => {
327
+ assertPositiveInteger(tokenCost, "tokenCost");
328
+ if (tokenCost > capacity) {
329
+ throw new TypeError("Expected tokenCost to be less than or equal to capacity.");
330
+ }
331
+ return new Promise((resolve, reject) => {
332
+ queue.push({
333
+ tokenCost,
334
+ task,
335
+ resolve: resolve,
336
+ reject
337
+ });
338
+ runQueue();
339
+ });
340
+ };
201
341
  }
202
342
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jdsalasc/solvejs-async",
3
- "version": "1.6.0",
3
+ "version": "1.7.1",
4
4
  "description": "Zero-dependency JavaScript/TypeScript async utilities for production: sleep, promise timeout, retry with backoff, and concurrency-limited pMap.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -24,7 +24,7 @@
24
24
  "build:esm": "tsc -p tsconfig.esm.json",
25
25
  "build:cjs": "tsc -p tsconfig.cjs.json && node ./scripts/rename-cjs.mjs",
26
26
  "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
27
- "test": "node --test test/*.test.mjs",
27
+ "test": "npm run build && node --test test/*.test.mjs",
28
28
  "lint": "tsc -p tsconfig.esm.json --noEmit"
29
29
  },
30
30
  "publishConfig": {