diff options
| author | pack <pack@packgekko.xyz> | 2026-08-09 10:37:07 +0000 |
|---|---|---|
| committer | pack <pack@packgekko.xyz> | 2026-08-09 10:37:07 +0000 |
| commit | 55a4f1fc869e41aca748c63d3018f0448b1606e0 (patch) | |
| tree | d132d1d01772b6d53faee3e63c534dea5706b78a /node_modules/exponential-backoff/src/jitter | |
| download | crud-55a4f1fc869e41aca748c63d3018f0448b1606e0.tar.gz | |
first commit
Diffstat (limited to 'node_modules/exponential-backoff/src/jitter')
5 files changed, 63 insertions, 0 deletions
diff --git a/node_modules/exponential-backoff/src/jitter/full/full.jitter.spec.ts b/node_modules/exponential-backoff/src/jitter/full/full.jitter.spec.ts new file mode 100644 index 0000000..003d08d --- /dev/null +++ b/node_modules/exponential-backoff/src/jitter/full/full.jitter.spec.ts @@ -0,0 +1,31 @@ +import { fullJitter } from './full.jitter'; + +describe(`Testing ${fullJitter.name}`, () => { + const delay = 100; + + function arrayWith5FullJitterDelays() { + return Array(5).fill(delay).map(fullJitter) + } + + describe(`when calling #fullJitter on the same delay multiple times`, () => { + it('all the delays are greater than or equal to 0', () => { + arrayWith5FullJitterDelays() + .forEach(value => expect(value).toBeGreaterThanOrEqual(0)); + }) + + it('all the delays are less than or equal to the original delay', () => { + arrayWith5FullJitterDelays() + .forEach(value => expect(value).toBeLessThanOrEqual(delay)); + }) + + it('the delays are not equal to one another', () => { + const delays = arrayWith5FullJitterDelays(); + expect(new Set(delays).size).not.toBe(1); + }) + + it('the delays are integers', () => { + arrayWith5FullJitterDelays() + .forEach(value => expect(Number.isInteger(value)).toBe(true)) + }) + }) +})
\ No newline at end of file diff --git a/node_modules/exponential-backoff/src/jitter/full/full.jitter.ts b/node_modules/exponential-backoff/src/jitter/full/full.jitter.ts new file mode 100644 index 0000000..b3c447b --- /dev/null +++ b/node_modules/exponential-backoff/src/jitter/full/full.jitter.ts @@ -0,0 +1,4 @@ +export function fullJitter(delay: number) { + const jitteredDelay = Math.random() * delay; + return Math.round(jitteredDelay); +}
\ No newline at end of file diff --git a/node_modules/exponential-backoff/src/jitter/jitter.factory.ts b/node_modules/exponential-backoff/src/jitter/jitter.factory.ts new file mode 100644 index 0000000..b549887 --- /dev/null +++ b/node_modules/exponential-backoff/src/jitter/jitter.factory.ts @@ -0,0 +1,16 @@ +import { IBackOffOptions } from "../options"; +import { fullJitter } from "./full/full.jitter"; +import { noJitter } from "./no/no.jitter"; + +export type Jitter = (delay: number) => number; + +export function JitterFactory(options: IBackOffOptions): Jitter { + switch (options.jitter) { + case "full": + return fullJitter; + + case "none": + default: + return noJitter; + } +} diff --git a/node_modules/exponential-backoff/src/jitter/no/no.jitter.spec.ts b/node_modules/exponential-backoff/src/jitter/no/no.jitter.spec.ts new file mode 100644 index 0000000..1d56524 --- /dev/null +++ b/node_modules/exponential-backoff/src/jitter/no/no.jitter.spec.ts @@ -0,0 +1,9 @@ +import { noJitter } from './no.jitter'; + +describe(`Testing ${noJitter.name}`, () => { + it(`when calling #noJitter with a delay, + it returns the same delay`, () => { + const delay = 100; + expect(noJitter(delay)).toBe(delay); + }) +})
\ No newline at end of file diff --git a/node_modules/exponential-backoff/src/jitter/no/no.jitter.ts b/node_modules/exponential-backoff/src/jitter/no/no.jitter.ts new file mode 100644 index 0000000..bc1b56f --- /dev/null +++ b/node_modules/exponential-backoff/src/jitter/no/no.jitter.ts @@ -0,0 +1,3 @@ +export function noJitter(delay: number) { + return delay; +}
\ No newline at end of file |