@radically-straightforward/utilities 2.0.23 → 2.0.25

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/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.25 · 2026-09-03
4
+
5
+ - Added `reciprocalRankFusion()`.
6
+
7
+ ## 2.0.24 · 2026-06-29
8
+
9
+ - **Breaking changes:**
10
+ - `utilities.foregroundJob()` was renamed to `utilities.throttle()`.
11
+ - `utilities.backgroundJob()` was renamed to `utilities.setInterval()` and the `interval` parameter was renamed to `duration`.
12
+
3
13
  ## 2.0.21 · 2026-01-15
4
14
 
5
15
  - Removed `Cache`, because it became so specific to Live Navigation cache that it was moved there.
package/README.md CHANGED
@@ -319,6 +319,14 @@ console.log(
319
319
  // => `… work in restaurants? For my <span class="highlight">peanuts</span> allergy <span class="highlight">peanut</span> butter is sometimes …`
320
320
  ```
321
321
 
322
+ ### `reciprocalRankFusion()`
323
+
324
+ ```typescript
325
+ export function reciprocalRankFusion(arrays: any[][]): any[];
326
+ ```
327
+
328
+ Merge multiple ranked lists into a single ranked list using [Reciprocal Rank Fusion](https://dl.acm.org/doi/10.1145/1571941.1572114). The `arrays` are expected to be sorted in descending order of relevance, for example, the first element is the most relevant and the last element is the least relevant.
329
+
322
330
  ### `isDate()`
323
331
 
324
332
  ```typescript
@@ -484,51 +492,68 @@ Similar to `collections-deep-equal` but either incomplete, or lacking type defin
484
492
  - <https://twitter.com/swannodette/status/1067962983924539392>
485
493
  - <https://gist.github.com/modernserf/c000e62d40f678cf395e3f360b9b0e43>
486
494
 
487
- ### `backgroundJob()`
495
+ ### `setInterval()`
488
496
 
489
497
  ```typescript
490
- export function backgroundJob(
498
+ export function setInterval(
491
499
  {
492
- interval,
500
+ duration,
493
501
  firstRun = "async",
494
502
  onStop = () => {},
495
503
  }: {
496
- interval: number;
504
+ duration: number;
497
505
  firstRun?: "sync" | "async" | "delayed";
498
506
  onStop?: () => void | Promise<void>;
499
507
  },
500
- job: () => void | Promise<void>,
508
+ function_: () => void | Promise<void>,
501
509
  ): {
502
510
  run: () => Promise<void>;
503
511
  stop: () => Promise<void>;
504
512
  };
505
513
  ```
506
514
 
507
- > **Note:** This is a lower level utility. See `@radically-straightforward/node`’s and `@radically-straightforward/javascript`’s extensions to `backgroundJob()` that are better suited for their specific environments.
515
+ > **Note:** This is a lower level utility. See `@radically-straightforward/node`’s and `@radically-straightforward/javascript`’s extensions to `setInterval()` that are better suited for their specific environments.
508
516
 
509
- Start a background job that runs every `interval`.
517
+ JavaScript’s `setInterval()` and `utilities.setInterval()` are different in the following ways:
510
518
 
511
- `backgroundJob()` is different from `setInterval()` in the following ways:
519
+ 1. In JavaScript’s `setInterval()`, the interval starts counting when the `function_` **starts** running, so if the `function_` takes too long to run, then there may be multiple runs of `function_` happening at the same time:
512
520
 
513
- 1. The interval counts **between** jobs, so slow background jobs don’t get called concurrently:
521
+ ```
522
+ Interval: |--------------|--------------|...
523
+ Execution: |-------------------|
524
+ |-------------------|
525
+ |-------------------|
526
+ ```
527
+
528
+ In `utilities.setInterval()`, the interval starts counting when `function_` **ends** running, so there’s always at most one run of `function_` happening at any given time:
514
529
 
515
530
  ```
516
- setInterval()
517
- | SLOW BACKGROUND JOB |
518
- | INTERVAL | SLOW BACKGROUND JOB |
519
- | INTERVAL | ...
531
+ Interval: |--------------| |--------------|
532
+ Execution: |------------| |------------| ...
533
+ ```
534
+
535
+ 2. You may use `interval.run()` to force the `function_` to run right away. If the `function_` is already running, calling `interval.run()` schedules it to run again:
520
536
 
521
- backgroundJob()
522
- | SLOW BACKGROUND JOB | INTERVAL | SLOW BACKGROUND JOB | INTERVAL | ...
537
+ ```
538
+ interval.run(): ↓ ↓
539
+ Interval: |------XXXXXXXX| |--------------| ...
540
+ Execution: |------------| |------------| |------------|------------|
523
541
  ```
524
542
 
525
- 2. You may use `backgroundJob.run()` to force the background job to run right away. If the background job is already running, calling `backgroundJob.run()` schedules it to run again as soon as possible (with a wait interval of `0`).
543
+ 3. You may use `interval.stop()` to stop the interval. If the `function_` is in the middle of running, it will finish, but it will not be scheduled to run again. This is similar to how an HTTP server may terminate gracefully by stopping accepting new requests but finishing responding to existing requests. After a job has been stopped, you may not `interval.run()` it again (calling `interval.run()` has no effect).
526
544
 
527
- 3. You may use `backgroundJob.stop()` to stop the background job. If the background job is in the middle of running, it will finish but it will not be scheduled to run again. This is similar to how an HTTP server may terminate gracefully by stopping accepting new requests but finishing responding to existing requests. After a job has been stopped, you may not `backgroundJob.run()` it again (calling `backgroundJob.run()` has no effect).
545
+ ```
546
+ interval.stop(): ↓
547
+ Interval: |--------XXXXXXX|
548
+ Execution: |------------|
528
549
 
529
- 4. We introduce a random interval variance of 10% on top of the given `interval` to avoid many background jobs from starting at the same time and overloading the machine.
530
550
 
531
- > **Note:** If the job throws an exception, the exception is logged and the background job continues.
551
+ interval.stop(): ↓
552
+ Interval: |--------------|
553
+ Execution: |------------| |------------|
554
+ ```
555
+
556
+ 4. We introduce a random variance of 10% on top of the given `duration` to avoid the `function_`s from different processes of the same kind from starting at the same time and overloading the machine.
532
557
 
533
558
  ### `timeout()`
534
559
 
@@ -541,24 +566,34 @@ export async function timeout<Type>(
541
566
 
542
567
  Run the given `function_` up to the timeout. If the timeout is reached, the returned promise rejects, but there is no way to guarantee that the `function_` execution will stop.
543
568
 
544
- ### `foregroundJob()`
569
+ ### `throttle()`
545
570
 
546
571
  ```typescript
547
- export function foregroundJob(
548
- job: () => void | Promise<void>,
572
+ export function throttle(
573
+ function_: () => void | Promise<void>,
549
574
  ): (() => Promise<void>) & {
550
575
  promise: Promise<void>;
551
576
  };
552
577
  ```
553
578
 
554
- Controls the execution of the given `job` such that it can’t execute until the previous execution finished.
579
+ Ensures that the given `function_` is running at most once at any given moment.
580
+
581
+ If the function is called only once, it runs immediately (this is different from Lodash’s [`debounce()`](https://lodash.com/docs/4.17.15#debounce) and [`throttle()`](https://lodash.com/docs/4.17.15#throttle) that can include a waiting time—the timing of `utilities.throttle()` is based on how long the `function_` takes to finish):
555
582
 
556
- This is useful, for example, for an autocomplete feature in which an event listener of the `input` event `fetch()`es from the server. If the `job` is called again while it’s running, then it schedules itself to be rerun as soon as it completes.
583
+ ```
584
+ Calls: ↓
585
+ Execution: |------|
586
+ ```
587
+
588
+ If the function is called multiple times, it’s scheduled to rerun **once** after completion (this is different from enqueuing the function calls, which would run the function three times instead of twice in the following example):
557
589
 
558
- This is different from `backgroundJob()` because it doesn’t run periodically—it only runs when it’s called.
590
+ ```
591
+ Calls: ↓ ↓ ↓
592
+ Execution: |------|----|
593
+ ```
559
594
 
560
- This is different from Lodash’s [`debounce()`](https://lodash.com/docs/4.17.15#debounce) and [`throttle()`](https://lodash.com/docs/4.17.15#throttle) because it doesn’t `wait`. Instead, it depends on the timing of the `job` itself to pace the execution, so it works best when the `job` is slow.
595
+ This is useful, for example, for an autocomplete feature in which an event listener of the `input` event `fetch()`es from the server.
561
596
 
562
- There’s a promise available under the `.promise` property of the returned value that resolves when there’s no job running. It’s useful to synchronize actions that must wait on the job to be over.
597
+ There’s a promise available under the `.promise` property of the returned value that resolves when there’s no `function_` running. It’s useful to synchronize actions that must wait on the `function_` to be over.
563
598
 
564
599
  <!-- DOCUMENTATION END: ./source/index.mts -->
package/build/index.d.mts CHANGED
@@ -233,6 +233,10 @@ export declare function highlight(text: string, search: Set<string>, { prefix, s
233
233
  export declare function snippet(text: string, search: Set<string>, { surroundingTokens, ...highlightOptions }?: {
234
234
  surroundingTokens?: number;
235
235
  } & Parameters<typeof highlight>[2]): string;
236
+ /**
237
+ * Merge multiple ranked lists into a single ranked list using [Reciprocal Rank Fusion](https://dl.acm.org/doi/10.1145/1571941.1572114). The `arrays` are expected to be sorted in descending order of relevance, for example, the first element is the most relevant and the last element is the least relevant.
238
+ */
239
+ export declare function reciprocalRankFusion(arrays: any[][]): any[];
236
240
  /**
237
241
  * Determine whether the given `string` is a valid `Date`, that is, it’s in ISO format and corresponds to an existing date, for example, it is **not** April 32nd.
238
242
  */
@@ -378,37 +382,54 @@ export declare namespace intern {
378
382
  }
379
383
  export declare const internSymbol: unique symbol;
380
384
  /**
381
- * > **Note:** This is a lower level utility. See `@radically-straightforward/node`’s and `@radically-straightforward/javascript`’s extensions to `backgroundJob()` that are better suited for their specific environments.
385
+ * > **Note:** This is a lower level utility. See `@radically-straightforward/node`’s and `@radically-straightforward/javascript`’s extensions to `setInterval()` that are better suited for their specific environments.
386
+ *
387
+ * JavaScript’s `setInterval()` and `utilities.setInterval()` are different in the following ways:
382
388
  *
383
- * Start a background job that runs every `interval`.
389
+ * 1. In JavaScript’s `setInterval()`, the interval starts counting when the `function_` **starts** running, so if the `function_` takes too long to run, then there may be multiple runs of `function_` happening at the same time:
384
390
  *
385
- * `backgroundJob()` is different from `setInterval()` in the following ways:
391
+ * ```
392
+ * Interval: |--------------|--------------|...
393
+ * Execution: |-------------------|
394
+ * |-------------------|
395
+ * |-------------------|
396
+ * ```
386
397
  *
387
- * 1. The interval counts **between** jobs, so slow background jobs don’t get called concurrently:
398
+ * In `utilities.setInterval()`, the interval starts counting when `function_` **ends** running, so there’s always at most one run of `function_` happening at any given time:
388
399
  *
389
400
  * ```
390
- * setInterval()
391
- * | SLOW BACKGROUND JOB |
392
- * | INTERVAL | SLOW BACKGROUND JOB |
393
- * | INTERVAL | ...
401
+ * Interval: |--------------| |--------------|
402
+ * Execution: |------------| |------------| ...
403
+ * ```
404
+ *
405
+ * 2. You may use `interval.run()` to force the `function_` to run right away. If the `function_` is already running, calling `interval.run()` schedules it to run again:
394
406
  *
395
- * backgroundJob()
396
- * | SLOW BACKGROUND JOB | INTERVAL | SLOW BACKGROUND JOB | INTERVAL | ...
407
+ * ```
408
+ * interval.run(): ↓ ↓
409
+ * Interval: |------XXXXXXXX| |--------------| ...
410
+ * Execution: |------------| |------------| |------------|------------|
397
411
  * ```
398
412
  *
399
- * 2. You may use `backgroundJob.run()` to force the background job to run right away. If the background job is already running, calling `backgroundJob.run()` schedules it to run again as soon as possible (with a wait interval of `0`).
413
+ * 3. You may use `interval.stop()` to stop the interval. If the `function_` is in the middle of running, it will finish, but it will not be scheduled to run again. This is similar to how an HTTP server may terminate gracefully by stopping accepting new requests but finishing responding to existing requests. After a job has been stopped, you may not `interval.run()` it again (calling `interval.run()` has no effect).
400
414
  *
401
- * 3. You may use `backgroundJob.stop()` to stop the background job. If the background job is in the middle of running, it will finish but it will not be scheduled to run again. This is similar to how an HTTP server may terminate gracefully by stopping accepting new requests but finishing responding to existing requests. After a job has been stopped, you may not `backgroundJob.run()` it again (calling `backgroundJob.run()` has no effect).
415
+ * ```
416
+ * interval.stop(): ↓
417
+ * Interval: |--------XXXXXXX|
418
+ * Execution: |------------|
402
419
  *
403
- * 4. We introduce a random interval variance of 10% on top of the given `interval` to avoid many background jobs from starting at the same time and overloading the machine.
404
420
  *
405
- * > **Note:** If the job throws an exception, the exception is logged and the background job continues.
421
+ * interval.stop(): ↓
422
+ * Interval: |--------------|
423
+ * Execution: |------------| |------------|
424
+ * ```
425
+ *
426
+ * 4. We introduce a random variance of 10% on top of the given `duration` to avoid the `function_`s from different processes of the same kind from starting at the same time and overloading the machine.
406
427
  */
407
- export declare function backgroundJob({ interval, firstRun, onStop, }: {
408
- interval: number;
428
+ export declare function setInterval({ duration, firstRun, onStop, }: {
429
+ duration: number;
409
430
  firstRun?: "sync" | "async" | "delayed";
410
431
  onStop?: () => void | Promise<void>;
411
- }, job: () => void | Promise<void>): {
432
+ }, function_: () => void | Promise<void>): {
412
433
  run: () => Promise<void>;
413
434
  stop: () => Promise<void>;
414
435
  };
@@ -417,17 +438,27 @@ export declare function backgroundJob({ interval, firstRun, onStop, }: {
417
438
  */
418
439
  export declare function timeout<Type>(duration: number, function_: () => Promise<Type>): Promise<Type>;
419
440
  /**
420
- * Controls the execution of the given `job` such that it can’t execute until the previous execution finished.
441
+ * Ensures that the given `function_` is running at most once at any given moment.
442
+ *
443
+ * If the function is called only once, it runs immediately (this is different from Lodash’s [`debounce()`](https://lodash.com/docs/4.17.15#debounce) and [`throttle()`](https://lodash.com/docs/4.17.15#throttle) that can include a waiting time—the timing of `utilities.throttle()` is based on how long the `function_` takes to finish):
444
+ *
445
+ * ```
446
+ * Calls: ↓
447
+ * Execution: |------|
448
+ * ```
421
449
  *
422
- * This is useful, for example, for an autocomplete feature in which an event listener of the `input` event `fetch()`es from the server. If the `job` is called again while it’s running, then it schedules itself to be rerun as soon as it completes.
450
+ * If the function is called multiple times, it’s scheduled to rerun **once** after completion (this is different from enqueuing the function calls, which would run the function three times instead of twice in the following example):
423
451
  *
424
- * This is different from `backgroundJob()` because it doesn’t run periodically—it only runs when it’s called.
452
+ * ```
453
+ * Calls: ↓ ↓ ↓
454
+ * Execution: |------|----|
455
+ * ```
425
456
  *
426
- * This is different from Lodash’s [`debounce()`](https://lodash.com/docs/4.17.15#debounce) and [`throttle()`](https://lodash.com/docs/4.17.15#throttle) because it doesn’t `wait`. Instead, it depends on the timing of the `job` itself to pace the execution, so it works best when the `job` is slow.
457
+ * This is useful, for example, for an autocomplete feature in which an event listener of the `input` event `fetch()`es from the server.
427
458
  *
428
- * There’s a promise available under the `.promise` property of the returned value that resolves when there’s no job running. It’s useful to synchronize actions that must wait on the job to be over.
459
+ * There’s a promise available under the `.promise` property of the returned value that resolves when there’s no `function_` running. It’s useful to synchronize actions that must wait on the `function_` to be over.
429
460
  */
430
- export declare function foregroundJob(job: () => void | Promise<void>): (() => Promise<void>) & {
461
+ export declare function throttle(function_: () => void | Promise<void>): (() => Promise<void>) & {
431
462
  promise: Promise<void>;
432
463
  };
433
464
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../source/index.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../source/index.mts"],"names":[],"mappings":"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"}
package/build/index.mjs CHANGED
@@ -320,6 +320,25 @@ export function snippet(text, search, { surroundingTokens = 5, ...highlightOptio
320
320
  : textTokens[textTokenSnippetIndexEnd].end) +
321
321
  (textTokenSnippetIndexEnd === textTokens.length - 1 ? "" : " …"), search, highlightOptions);
322
322
  }
323
+ /**
324
+ * Merge multiple ranked lists into a single ranked list using [Reciprocal Rank Fusion](https://dl.acm.org/doi/10.1145/1571941.1572114). The `arrays` are expected to be sorted in descending order of relevance, for example, the first element is the most relevant and the last element is the least relevant.
325
+ */
326
+ export function reciprocalRankFusion(arrays) {
327
+ const elements = new Set(arrays.flat());
328
+ const elementsWithScores = [...elements].map((element) => {
329
+ let score = 0;
330
+ for (const array of arrays) {
331
+ const index = array.indexOf(element);
332
+ if (index !== -1) {
333
+ score += 1 / (index + 1 + 60);
334
+ }
335
+ }
336
+ return { element, score };
337
+ });
338
+ return elementsWithScores
339
+ .sort((a, b) => b.score - a.score)
340
+ .map((elementWithScore) => elementWithScore.element);
341
+ }
323
342
  /**
324
343
  * Determine whether the given `string` is a valid `Date`, that is, it’s in ISO format and corresponds to an existing date, for example, it is **not** April 32nd.
325
344
  */
@@ -479,54 +498,70 @@ intern.finalizationRegistry = new FinalizationRegistry(({ type, key }) => {
479
498
  intern.pool[type].delete(key);
480
499
  });
481
500
  /**
482
- * > **Note:** This is a lower level utility. See `@radically-straightforward/node`’s and `@radically-straightforward/javascript`’s extensions to `backgroundJob()` that are better suited for their specific environments.
501
+ * > **Note:** This is a lower level utility. See `@radically-straightforward/node`’s and `@radically-straightforward/javascript`’s extensions to `setInterval()` that are better suited for their specific environments.
483
502
  *
484
- * Start a background job that runs every `interval`.
503
+ * JavaScript’s `setInterval()` and `utilities.setInterval()` are different in the following ways:
485
504
  *
486
- * `backgroundJob()` is different from `setInterval()` in the following ways:
505
+ * 1. In JavaScript’s `setInterval()`, the interval starts counting when the `function_` **starts** running, so if the `function_` takes too long to run, then there may be multiple runs of `function_` happening at the same time:
487
506
  *
488
- * 1. The interval counts **between** jobs, so slow background jobs don’t get called concurrently:
507
+ * ```
508
+ * Interval: |--------------|--------------|...
509
+ * Execution: |-------------------|
510
+ * |-------------------|
511
+ * |-------------------|
512
+ * ```
513
+ *
514
+ * In `utilities.setInterval()`, the interval starts counting when `function_` **ends** running, so there’s always at most one run of `function_` happening at any given time:
489
515
  *
490
516
  * ```
491
- * setInterval()
492
- * | SLOW BACKGROUND JOB |
493
- * | INTERVAL | SLOW BACKGROUND JOB |
494
- * | INTERVAL | ...
517
+ * Interval: |--------------| |--------------|
518
+ * Execution: |------------| |------------| ...
519
+ * ```
520
+ *
521
+ * 2. You may use `interval.run()` to force the `function_` to run right away. If the `function_` is already running, calling `interval.run()` schedules it to run again:
495
522
  *
496
- * backgroundJob()
497
- * | SLOW BACKGROUND JOB | INTERVAL | SLOW BACKGROUND JOB | INTERVAL | ...
523
+ * ```
524
+ * interval.run(): ↓ ↓
525
+ * Interval: |------XXXXXXXX| |--------------| ...
526
+ * Execution: |------------| |------------| |------------|------------|
498
527
  * ```
499
528
  *
500
- * 2. You may use `backgroundJob.run()` to force the background job to run right away. If the background job is already running, calling `backgroundJob.run()` schedules it to run again as soon as possible (with a wait interval of `0`).
529
+ * 3. You may use `interval.stop()` to stop the interval. If the `function_` is in the middle of running, it will finish, but it will not be scheduled to run again. This is similar to how an HTTP server may terminate gracefully by stopping accepting new requests but finishing responding to existing requests. After a job has been stopped, you may not `interval.run()` it again (calling `interval.run()` has no effect).
530
+ *
531
+ * ```
532
+ * interval.stop(): ↓
533
+ * Interval: |--------XXXXXXX|
534
+ * Execution: |------------|
501
535
  *
502
- * 3. You may use `backgroundJob.stop()` to stop the background job. If the background job is in the middle of running, it will finish but it will not be scheduled to run again. This is similar to how an HTTP server may terminate gracefully by stopping accepting new requests but finishing responding to existing requests. After a job has been stopped, you may not `backgroundJob.run()` it again (calling `backgroundJob.run()` has no effect).
503
536
  *
504
- * 4. We introduce a random interval variance of 10% on top of the given `interval` to avoid many background jobs from starting at the same time and overloading the machine.
537
+ * interval.stop(): ↓
538
+ * Interval: |--------------|
539
+ * Execution: |------------| |------------|
540
+ * ```
505
541
  *
506
- * > **Note:** If the job throws an exception, the exception is logged and the background job continues.
542
+ * 4. We introduce a random variance of 10% on top of the given `duration` to avoid the `function_`s from different processes of the same kind from starting at the same time and overloading the machine.
507
543
  */
508
- export function backgroundJob({ interval, firstRun = "async", onStop = () => { }, }, job) {
509
- let state = "sleeping";
544
+ export function setInterval({ duration, firstRun = "async", onStop = () => { }, }, function_) {
545
+ let state = "waiting";
510
546
  let timeout;
511
- const backgroundJob = {
547
+ const interval = {
512
548
  run: async () => {
513
- if (state === "sleeping") {
549
+ if (state === "waiting") {
514
550
  clearTimeout(timeout);
515
551
  state = "running";
516
552
  try {
517
- await job();
553
+ await function_();
518
554
  }
519
- catch (error) {
520
- log("BACKGROUND JOB ERROR", String(error), error?.stack ?? "");
521
- }
522
- if (state === "running" || state === "runningAndMarkedForRerun") {
523
- timeout = setTimeout(() => {
524
- backgroundJob.run();
525
- }, state ===
526
- "runningAndMarkedForRerun"
527
- ? 0
528
- : interval * (1 + 0.1 * Math.random()));
529
- state = "sleeping";
555
+ finally {
556
+ if (state === "running" || state === "runningAndMarkedForRerun") {
557
+ timeout = setTimeout(() => {
558
+ interval.run();
559
+ }, state ===
560
+ "runningAndMarkedForRerun"
561
+ ? 0
562
+ : duration * (1 + 0.1 * Math.random()));
563
+ state = "waiting";
564
+ }
530
565
  }
531
566
  }
532
567
  else if (state === "running")
@@ -539,18 +574,18 @@ export function backgroundJob({ interval, firstRun = "async", onStop = () => { }
539
574
  },
540
575
  };
541
576
  if (firstRun === "sync")
542
- backgroundJob.run();
577
+ interval.run();
543
578
  else
544
579
  timeout = setTimeout(() => {
545
- backgroundJob.run();
580
+ interval.run();
546
581
  }, firstRun === "async"
547
582
  ? 0
548
583
  : firstRun === "delayed"
549
- ? interval * (1 + 0.1 * Math.random())
584
+ ? duration * (1 + 0.1 * Math.random())
550
585
  : (() => {
551
586
  throw new Error();
552
587
  })());
553
- return backgroundJob;
588
+ return interval;
554
589
  }
555
590
  /**
556
591
  * Run the given `function_` up to the timeout. If the timeout is reached, the returned promise rejects, but there is no way to guarantee that the `function_` execution will stop.
@@ -572,17 +607,27 @@ export async function timeout(duration, function_) {
572
607
  }
573
608
  }
574
609
  /**
575
- * Controls the execution of the given `job` such that it can’t execute until the previous execution finished.
610
+ * Ensures that the given `function_` is running at most once at any given moment.
611
+ *
612
+ * If the function is called only once, it runs immediately (this is different from Lodash’s [`debounce()`](https://lodash.com/docs/4.17.15#debounce) and [`throttle()`](https://lodash.com/docs/4.17.15#throttle) that can include a waiting time—the timing of `utilities.throttle()` is based on how long the `function_` takes to finish):
613
+ *
614
+ * ```
615
+ * Calls: ↓
616
+ * Execution: |------|
617
+ * ```
576
618
  *
577
- * This is useful, for example, for an autocomplete feature in which an event listener of the `input` event `fetch()`es from the server. If the `job` is called again while it’s running, then it schedules itself to be rerun as soon as it completes.
619
+ * If the function is called multiple times, it’s scheduled to rerun **once** after completion (this is different from enqueuing the function calls, which would run the function three times instead of twice in the following example):
578
620
  *
579
- * This is different from `backgroundJob()` because it doesn’t run periodically—it only runs when it’s called.
621
+ * ```
622
+ * Calls: ↓ ↓ ↓
623
+ * Execution: |------|----|
624
+ * ```
580
625
  *
581
- * This is different from Lodash’s [`debounce()`](https://lodash.com/docs/4.17.15#debounce) and [`throttle()`](https://lodash.com/docs/4.17.15#throttle) because it doesn’t `wait`. Instead, it depends on the timing of the `job` itself to pace the execution, so it works best when the `job` is slow.
626
+ * This is useful, for example, for an autocomplete feature in which an event listener of the `input` event `fetch()`es from the server.
582
627
  *
583
- * There’s a promise available under the `.promise` property of the returned value that resolves when there’s no job running. It’s useful to synchronize actions that must wait on the job to be over.
628
+ * There’s a promise available under the `.promise` property of the returned value that resolves when there’s no `function_` running. It’s useful to synchronize actions that must wait on the `function_` to be over.
584
629
  */
585
- export function foregroundJob(job) {
630
+ export function throttle(function_) {
586
631
  let state = "available";
587
632
  let promiseWithResolvers;
588
633
  return run;
@@ -594,18 +639,17 @@ export function foregroundJob(job) {
594
639
  }
595
640
  state = "running";
596
641
  try {
597
- await job();
598
- }
599
- catch (error) {
600
- log("FOREGROUND JOB ERROR", String(error), error?.stack ?? "");
642
+ await function_();
601
643
  }
602
- if (state ===
603
- "runningAndMarkedForRerun") {
604
- state = "rerun";
605
- await run();
644
+ finally {
645
+ if (state ===
646
+ "runningAndMarkedForRerun") {
647
+ state = "rerun";
648
+ await run();
649
+ }
650
+ state = "available";
651
+ promiseWithResolvers.resolve(undefined);
606
652
  }
607
- state = "available";
608
- promiseWithResolvers.resolve(undefined);
609
653
  }
610
654
  else {
611
655
  state = "runningAndMarkedForRerun";
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../source/index.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../source/index.mts"],"names":[],"mappings":"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"}
@@ -149,6 +149,13 @@ test("snippet()", () => {
149
149
  stem: (token) => natural.PorterStemmer.stem(token),
150
150
  }), `… work in restaurants?\n\nFor my <span class="highlight">peanuts</span> allergy <span class="highlight">peanut</span> butter is sometimes …`);
151
151
  });
152
+ test("reciprocalRankFusion()", () => {
153
+ assert.deepEqual(utilities.reciprocalRankFusion([
154
+ ["a", "b", "c"],
155
+ ["b", "c", "d"],
156
+ ["c", "d", "e"],
157
+ ]), ["c", "b", "d", "a", "e"]);
158
+ });
152
159
  test("isDate()", () => {
153
160
  assert(utilities.isDate("2024-04-01T14:57:46.638Z"));
154
161
  assert(!utilities.isDate("2024-04-01T14:57:46.68Z"));
@@ -210,25 +217,25 @@ test("intern()", () => {
210
217
  $([1])[0] = 2;
211
218
  });
212
219
  });
213
- test("backgroundJob()", {
214
- skip: process.stdin.isTTY && process.argv[2] === "backgroundJob()"
220
+ test("setInterval()", {
221
+ skip: process.stdin.isTTY && process.argv[2] === "setInterval()"
215
222
  ? false
216
- : `Run interactive test with ‘node ./build/index.test.mjs "backgroundJob()"’.`,
223
+ : `Run interactive test with ‘node ./build/index.test.mjs "setInterval()"’.`,
217
224
  }, async () => {
218
- const backgroundJob = utilities.backgroundJob({ interval: 3 * 1000 }, async () => {
219
- console.log("backgroundJob(): Running background job...");
225
+ const interval = utilities.setInterval({ duration: 3 * 1000 }, async () => {
226
+ console.log("setInterval(): Running ‘function_’...");
220
227
  await utilities.sleep(3 * 1000);
221
- console.log("backgroundJob(): ...finished running background job.");
228
+ console.log("setInterval(): ...finished running ‘function_’.");
222
229
  if (Math.random() < 0.3)
223
- throw new Error("There’s a 30% chance that the background job results in error.");
230
+ throw new Error("There’s a 30% chance that the ‘function_’ results in error.");
224
231
  });
225
232
  process.on("SIGTSTP", () => {
226
- backgroundJob.run();
233
+ interval.run();
227
234
  });
228
235
  process.on("SIGINT", () => {
229
- backgroundJob.stop();
236
+ interval.stop();
230
237
  });
231
- console.log("backgroundJob(): Press ⌃Z to ‘run()’ and ⌃C to ‘stop()’...");
238
+ console.log("setInterval(): Press ⌃Z to ‘interval.run()’ and ⌃C to ‘interval.stop()’...");
232
239
  });
233
240
  test("timeout()", async () => {
234
241
  await utilities.timeout(5000, async () => {
@@ -248,22 +255,22 @@ test("timeout()", async () => {
248
255
  });
249
256
  });
250
257
  });
251
- test("foregroundJob()", {
252
- skip: process.stdin.isTTY && process.argv[2] === "foregroundJob()"
258
+ test("throttle()", {
259
+ skip: process.stdin.isTTY && process.argv[2] === "throttle()"
253
260
  ? false
254
- : `Run interactive test with ‘node ./build/index.test.mjs "foregroundJob()"’.`,
261
+ : `Run interactive test with ‘node ./build/index.test.mjs "throttle()"’.`,
255
262
  }, async () => {
256
- const foregroundJob = utilities.foregroundJob(async () => {
257
- console.log("foregroundJob(): Running foreground job...");
263
+ const throttledFunction = utilities.throttle(async () => {
264
+ console.log("throttle(): Running ‘function_’...");
258
265
  await utilities.sleep(3 * 1000);
259
- console.log("foregroundJob(): ...finished running foreground job.");
266
+ console.log("throttle(): ...finished running ‘function_’.");
260
267
  if (Math.random() < 0.3)
261
- throw new Error("There’s a 30% chance that the foreground job results in error.");
268
+ throw new Error("There’s a 30% chance that the ‘function_’ results in error.");
262
269
  });
263
270
  process.on("SIGTSTP", () => {
264
- foregroundJob();
271
+ throttledFunction();
265
272
  });
266
- console.log("foregroundJob(): Press ⌃Z to run foreground job...");
273
+ console.log("throttle(): Press ⌃Z to run ‘function_’...");
267
274
  setInterval(() => { });
268
275
  });
269
276
  //# sourceMappingURL=index.test.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.test.mjs","sourceRoot":"","sources":["../source/index.test.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.test.mjs","sourceRoot":"","sources":["../source/index.test.mts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@radically-straightforward/utilities",
3
- "version": "2.0.23",
3
+ "version": "2.0.25",
4
4
  "description": "🛠️ Utilities for Node.js and the browser",
5
5
  "keywords": [
6
6
  "node",
@@ -29,11 +29,14 @@
29
29
  },
30
30
  "devDependencies": {
31
31
  "@radically-straightforward/documentation": "^1.0.9",
32
- "@radically-straightforward/typescript": "^1.0.4",
33
- "@types/node": "^25.6.0",
32
+ "@radically-straightforward/typescript": "^1.0.5",
33
+ "@types/node": "^26.1.1",
34
34
  "natural": "^8.1.1",
35
- "prettier": "^3.8.3",
36
- "typescript": "^6.0.3"
35
+ "prettier": "^3.9.5",
36
+ "typescript": "^7.0.2"
37
+ },
38
+ "allowScripts": {
39
+ "@radically-straightforward/typescript@1.0.5": true
37
40
  },
38
41
  "prettier": {}
39
42
  }
package/source/index.mts CHANGED
@@ -405,6 +405,26 @@ export function snippet(
405
405
  );
406
406
  }
407
407
 
408
+ /**
409
+ * Merge multiple ranked lists into a single ranked list using [Reciprocal Rank Fusion](https://dl.acm.org/doi/10.1145/1571941.1572114). The `arrays` are expected to be sorted in descending order of relevance, for example, the first element is the most relevant and the last element is the least relevant.
410
+ */
411
+ export function reciprocalRankFusion(arrays: any[][]): any[] {
412
+ const elements = new Set(arrays.flat());
413
+ const elementsWithScores = [...elements].map((element) => {
414
+ let score = 0;
415
+ for (const array of arrays) {
416
+ const index = array.indexOf(element);
417
+ if (index !== -1) {
418
+ score += 1 / (index + 1 + 60);
419
+ }
420
+ }
421
+ return { element, score };
422
+ });
423
+ return elementsWithScores
424
+ .sort((a, b) => b.score - a.score)
425
+ .map((elementWithScore) => elementWithScore.element);
426
+ }
427
+
408
428
  /**
409
429
  * Determine whether the given `string` is a valid `Date`, that is, it’s in ISO format and corresponds to an existing date, for example, it is **not** April 32nd.
410
430
  */
@@ -567,18 +587,16 @@ export function intern<
567
587
  return internValue as any;
568
588
  }
569
589
  for (const innerValue of Object.values(value))
570
- if (
571
- !(
572
- typeof innerValue === "string" ||
573
- typeof innerValue === "number" ||
574
- typeof innerValue === "bigint" ||
575
- typeof innerValue === "boolean" ||
576
- typeof innerValue === "symbol" ||
577
- innerValue === undefined ||
578
- innerValue === null ||
579
- (innerValue as any)[internSymbol] === true
580
- )
581
- )
590
+ if (!(
591
+ typeof innerValue === "string" ||
592
+ typeof innerValue === "number" ||
593
+ typeof innerValue === "bigint" ||
594
+ typeof innerValue === "boolean" ||
595
+ typeof innerValue === "symbol" ||
596
+ innerValue === undefined ||
597
+ innerValue === null ||
598
+ (innerValue as any)[internSymbol] === true
599
+ ))
582
600
  throw new Error(
583
601
  `Failed to intern value because of non-interned inner value.`,
584
602
  );
@@ -608,75 +626,87 @@ intern.finalizationRegistry = new FinalizationRegistry<{
608
626
  });
609
627
 
610
628
  /**
611
- * > **Note:** This is a lower level utility. See `@radically-straightforward/node`’s and `@radically-straightforward/javascript`’s extensions to `backgroundJob()` that are better suited for their specific environments.
629
+ * > **Note:** This is a lower level utility. See `@radically-straightforward/node`’s and `@radically-straightforward/javascript`’s extensions to `setInterval()` that are better suited for their specific environments.
612
630
  *
613
- * Start a background job that runs every `interval`.
631
+ * JavaScript’s `setInterval()` and `utilities.setInterval()` are different in the following ways:
614
632
  *
615
- * `backgroundJob()` is different from `setInterval()` in the following ways:
633
+ * 1. In JavaScript’s `setInterval()`, the interval starts counting when the `function_` **starts** running, so if the `function_` takes too long to run, then there may be multiple runs of `function_` happening at the same time:
616
634
  *
617
- * 1. The interval counts **between** jobs, so slow background jobs don’t get called concurrently:
635
+ * ```
636
+ * Interval: |--------------|--------------|...
637
+ * Execution: |-------------------|
638
+ * |-------------------|
639
+ * |-------------------|
640
+ * ```
618
641
  *
642
+ * In `utilities.setInterval()`, the interval starts counting when `function_` **ends** running, so there’s always at most one run of `function_` happening at any given time:
643
+ *
644
+ * ```
645
+ * Interval: |--------------| |--------------|
646
+ * Execution: |------------| |------------| ...
619
647
  * ```
620
- * setInterval()
621
- * | SLOW BACKGROUND JOB |
622
- * | INTERVAL | SLOW BACKGROUND JOB |
623
- * | INTERVAL | ...
624
648
  *
625
- * backgroundJob()
626
- * | SLOW BACKGROUND JOB | INTERVAL | SLOW BACKGROUND JOB | INTERVAL | ...
649
+ * 2. You may use `interval.run()` to force the `function_` to run right away. If the `function_` is already running, calling `interval.run()` schedules it to run again:
650
+ *
627
651
  * ```
652
+ * interval.run(): ↓ ↓ ↓ ↓
653
+ * Interval: |------XXXXXXXX| |--------------| ...
654
+ * Execution: |------------| |------------| |------------|------------|
655
+ * ```
656
+ *
657
+ * 3. You may use `interval.stop()` to stop the interval. If the `function_` is in the middle of running, it will finish, but it will not be scheduled to run again. This is similar to how an HTTP server may terminate gracefully by stopping accepting new requests but finishing responding to existing requests. After a job has been stopped, you may not `interval.run()` it again (calling `interval.run()` has no effect).
628
658
  *
629
- * 2. You may use `backgroundJob.run()` to force the background job to run right away. If the background job is already running, calling `backgroundJob.run()` schedules it to run again as soon as possible (with a wait interval of `0`).
659
+ * ```
660
+ * interval.stop(): ↓
661
+ * Interval: |--------XXXXXXX|
662
+ * Execution: |------------|
630
663
  *
631
- * 3. You may use `backgroundJob.stop()` to stop the background job. If the background job is in the middle of running, it will finish but it will not be scheduled to run again. This is similar to how an HTTP server may terminate gracefully by stopping accepting new requests but finishing responding to existing requests. After a job has been stopped, you may not `backgroundJob.run()` it again (calling `backgroundJob.run()` has no effect).
632
664
  *
633
- * 4. We introduce a random interval variance of 10% on top of the given `interval` to avoid many background jobs from starting at the same time and overloading the machine.
665
+ * interval.stop(): ↓
666
+ * Interval: |--------------|
667
+ * Execution: |------------| |------------|
668
+ * ```
634
669
  *
635
- * > **Note:** If the job throws an exception, the exception is logged and the background job continues.
670
+ * 4. We introduce a random variance of 10% on top of the given `duration` to avoid the `function_`s from different processes of the same kind from starting at the same time and overloading the machine.
636
671
  */
637
- export function backgroundJob(
672
+ export function setInterval(
638
673
  {
639
- interval,
674
+ duration,
640
675
  firstRun = "async",
641
676
  onStop = () => {},
642
677
  }: {
643
- interval: number;
678
+ duration: number;
644
679
  firstRun?: "sync" | "async" | "delayed";
645
680
  onStop?: () => void | Promise<void>;
646
681
  },
647
- job: () => void | Promise<void>,
682
+ function_: () => void | Promise<void>,
648
683
  ): {
649
684
  run: () => Promise<void>;
650
685
  stop: () => Promise<void>;
651
686
  } {
652
- let state: "sleeping" | "running" | "runningAndMarkedForRerun" | "stopped" =
653
- "sleeping";
687
+ let state: "waiting" | "running" | "runningAndMarkedForRerun" | "stopped" =
688
+ "waiting";
654
689
  let timeout: ReturnType<typeof setTimeout>;
655
- const backgroundJob = {
690
+ const interval = {
656
691
  run: async () => {
657
- if (state === "sleeping") {
692
+ if (state === "waiting") {
658
693
  clearTimeout(timeout);
659
694
  state = "running";
660
695
  try {
661
- await job();
662
- } catch (error) {
663
- log(
664
- "BACKGROUND JOB ERROR",
665
- String(error),
666
- (error as Error)?.stack ?? "",
667
- );
668
- }
669
- if (state === "running" || state === "runningAndMarkedForRerun") {
670
- timeout = setTimeout(
671
- () => {
672
- backgroundJob.run();
673
- },
674
- (state as "running" | "runningAndMarkedForRerun") ===
675
- "runningAndMarkedForRerun"
676
- ? 0
677
- : interval * (1 + 0.1 * Math.random()),
678
- );
679
- state = "sleeping";
696
+ await function_();
697
+ } finally {
698
+ if (state === "running" || state === "runningAndMarkedForRerun") {
699
+ timeout = setTimeout(
700
+ () => {
701
+ interval.run();
702
+ },
703
+ (state as "running" | "runningAndMarkedForRerun") ===
704
+ "runningAndMarkedForRerun"
705
+ ? 0
706
+ : duration * (1 + 0.1 * Math.random()),
707
+ );
708
+ state = "waiting";
709
+ }
680
710
  }
681
711
  } else if (state === "running") state = "runningAndMarkedForRerun";
682
712
  },
@@ -686,21 +716,21 @@ export function backgroundJob(
686
716
  await onStop();
687
717
  },
688
718
  };
689
- if (firstRun === "sync") backgroundJob.run();
719
+ if (firstRun === "sync") interval.run();
690
720
  else
691
721
  timeout = setTimeout(
692
722
  () => {
693
- backgroundJob.run();
723
+ interval.run();
694
724
  },
695
725
  firstRun === "async"
696
726
  ? 0
697
727
  : firstRun === "delayed"
698
- ? interval * (1 + 0.1 * Math.random())
728
+ ? duration * (1 + 0.1 * Math.random())
699
729
  : (() => {
700
730
  throw new Error();
701
731
  })(),
702
732
  );
703
- return backgroundJob;
733
+ return interval;
704
734
  }
705
735
 
706
736
  /**
@@ -726,18 +756,28 @@ export async function timeout<Type>(
726
756
  }
727
757
 
728
758
  /**
729
- * Controls the execution of the given `job` such that it can’t execute until the previous execution finished.
759
+ * Ensures that the given `function_` is running at most once at any given moment.
760
+ *
761
+ * If the function is called only once, it runs immediately (this is different from Lodash’s [`debounce()`](https://lodash.com/docs/4.17.15#debounce) and [`throttle()`](https://lodash.com/docs/4.17.15#throttle) that can include a waiting time—the timing of `utilities.throttle()` is based on how long the `function_` takes to finish):
730
762
  *
731
- * This is useful, for example, for an autocomplete feature in which an event listener of the `input` event `fetch()`es from the server. If the `job` is called again while it’s running, then it schedules itself to be rerun as soon as it completes.
763
+ * ```
764
+ * Calls: ↓
765
+ * Execution: |------|
766
+ * ```
732
767
  *
733
- * This is different from `backgroundJob()` because it doesn’t run periodically—it only runs when it’s called.
768
+ * If the function is called multiple times, it’s scheduled to rerun **once** after completion (this is different from enqueuing the function calls, which would run the function three times instead of twice in the following example):
734
769
  *
735
- * This is different from Lodash’s [`debounce()`](https://lodash.com/docs/4.17.15#debounce) and [`throttle()`](https://lodash.com/docs/4.17.15#throttle) because it doesn’t `wait`. Instead, it depends on the timing of the `job` itself to pace the execution, so it works best when the `job` is slow.
770
+ * ```
771
+ * Calls: ↓ ↓ ↓
772
+ * Execution: |------|----|
773
+ * ```
736
774
  *
737
- * There’s a promise available under the `.promise` property of the returned value that resolves when there’s no job running. It’s useful to synchronize actions that must wait on the job to be over.
775
+ * This is useful, for example, for an autocomplete feature in which an event listener of the `input` event `fetch()`es from the server.
776
+ *
777
+ * There’s a promise available under the `.promise` property of the returned value that resolves when there’s no `function_` running. It’s useful to synchronize actions that must wait on the `function_` to be over.
738
778
  */
739
- export function foregroundJob(
740
- job: () => void | Promise<void>,
779
+ export function throttle(
780
+ function_: () => void | Promise<void>,
741
781
  ): (() => Promise<void>) & { promise: Promise<void> } {
742
782
  let state: "available" | "running" | "runningAndMarkedForRerun" | "rerun" =
743
783
  "available";
@@ -751,23 +791,18 @@ export function foregroundJob(
751
791
  }
752
792
  state = "running";
753
793
  try {
754
- await job();
755
- } catch (error) {
756
- log(
757
- "FOREGROUND JOB ERROR",
758
- String(error),
759
- (error as Error)?.stack ?? "",
760
- );
761
- }
762
- if (
763
- (state as "running" | "runningAndMarkedForRerun") ===
764
- "runningAndMarkedForRerun"
765
- ) {
766
- state = "rerun";
767
- await run();
794
+ await function_();
795
+ } finally {
796
+ if (
797
+ (state as "running" | "runningAndMarkedForRerun") ===
798
+ "runningAndMarkedForRerun"
799
+ ) {
800
+ state = "rerun";
801
+ await run();
802
+ }
803
+ state = "available";
804
+ promiseWithResolvers.resolve(undefined);
768
805
  }
769
- state = "available";
770
- promiseWithResolvers.resolve(undefined);
771
806
  } else {
772
807
  state = "runningAndMarkedForRerun";
773
808
  await promiseWithResolvers.promise;
@@ -219,6 +219,17 @@ test("snippet()", () => {
219
219
  );
220
220
  });
221
221
 
222
+ test("reciprocalRankFusion()", () => {
223
+ assert.deepEqual(
224
+ utilities.reciprocalRankFusion([
225
+ ["a", "b", "c"],
226
+ ["b", "c", "d"],
227
+ ["c", "d", "e"],
228
+ ]),
229
+ ["c", "b", "d", "a", "e"],
230
+ );
231
+ });
232
+
222
233
  test("isDate()", () => {
223
234
  assert(utilities.isDate("2024-04-01T14:57:46.638Z"));
224
235
  assert(!utilities.isDate("2024-04-01T14:57:46.68Z"));
@@ -292,33 +303,32 @@ test("intern()", () => {
292
303
  });
293
304
 
294
305
  test(
295
- "backgroundJob()",
306
+ "setInterval()",
296
307
  {
297
308
  skip:
298
- process.stdin.isTTY && process.argv[2] === "backgroundJob()"
309
+ process.stdin.isTTY && process.argv[2] === "setInterval()"
299
310
  ? false
300
- : `Run interactive test with ‘node ./build/index.test.mjs "backgroundJob()"’.`,
311
+ : `Run interactive test with ‘node ./build/index.test.mjs "setInterval()"’.`,
301
312
  },
302
313
  async () => {
303
- const backgroundJob = utilities.backgroundJob(
304
- { interval: 3 * 1000 },
305
- async () => {
306
- console.log("backgroundJob(): Running background job...");
307
- await utilities.sleep(3 * 1000);
308
- console.log("backgroundJob(): ...finished running background job.");
309
- if (Math.random() < 0.3)
310
- throw new Error(
311
- "There’s a 30% chance that the background job results in error.",
312
- );
313
- },
314
- );
314
+ const interval = utilities.setInterval({ duration: 3 * 1000 }, async () => {
315
+ console.log("setInterval(): Running ‘function_’...");
316
+ await utilities.sleep(3 * 1000);
317
+ console.log("setInterval(): ...finished running ‘function_’.");
318
+ if (Math.random() < 0.3)
319
+ throw new Error(
320
+ "There’s a 30% chance that the ‘function_’ results in error.",
321
+ );
322
+ });
315
323
  process.on("SIGTSTP", () => {
316
- backgroundJob.run();
324
+ interval.run();
317
325
  });
318
326
  process.on("SIGINT", () => {
319
- backgroundJob.stop();
327
+ interval.stop();
320
328
  });
321
- console.log("backgroundJob(): Press ⌃Z to ‘run()’ and ⌃C to ‘stop()’...");
329
+ console.log(
330
+ "setInterval(): Press ⌃Z to ‘interval.run()’ and ⌃C to ‘interval.stop()’...",
331
+ );
322
332
  },
323
333
  );
324
334
 
@@ -342,27 +352,27 @@ test("timeout()", async () => {
342
352
  });
343
353
 
344
354
  test(
345
- "foregroundJob()",
355
+ "throttle()",
346
356
  {
347
357
  skip:
348
- process.stdin.isTTY && process.argv[2] === "foregroundJob()"
358
+ process.stdin.isTTY && process.argv[2] === "throttle()"
349
359
  ? false
350
- : `Run interactive test with ‘node ./build/index.test.mjs "foregroundJob()"’.`,
360
+ : `Run interactive test with ‘node ./build/index.test.mjs "throttle()"’.`,
351
361
  },
352
362
  async () => {
353
- const foregroundJob = utilities.foregroundJob(async () => {
354
- console.log("foregroundJob(): Running foreground job...");
363
+ const throttledFunction = utilities.throttle(async () => {
364
+ console.log("throttle(): Running ‘function_’...");
355
365
  await utilities.sleep(3 * 1000);
356
- console.log("foregroundJob(): ...finished running foreground job.");
366
+ console.log("throttle(): ...finished running ‘function_’.");
357
367
  if (Math.random() < 0.3)
358
368
  throw new Error(
359
- "There’s a 30% chance that the foreground job results in error.",
369
+ "There’s a 30% chance that the ‘function_’ results in error.",
360
370
  );
361
371
  });
362
372
  process.on("SIGTSTP", () => {
363
- foregroundJob();
373
+ throttledFunction();
364
374
  });
365
- console.log("foregroundJob(): Press ⌃Z to run foreground job...");
375
+ console.log("throttle(): Press ⌃Z to run ‘function_’...");
366
376
  setInterval(() => {});
367
377
  },
368
378
  );