@terascope/core-utils 2.0.0-dev.7

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.
Files changed (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +17 -0
  3. package/dist/src/arrays.d.ts +59 -0
  4. package/dist/src/arrays.d.ts.map +1 -0
  5. package/dist/src/arrays.js +180 -0
  6. package/dist/src/arrays.js.map +1 -0
  7. package/dist/src/big-lru-map.d.ts +14 -0
  8. package/dist/src/big-lru-map.d.ts.map +1 -0
  9. package/dist/src/big-lru-map.js +20 -0
  10. package/dist/src/big-lru-map.js.map +1 -0
  11. package/dist/src/big-map.d.ts +28 -0
  12. package/dist/src/big-map.d.ts.map +1 -0
  13. package/dist/src/big-map.js +148 -0
  14. package/dist/src/big-map.js.map +1 -0
  15. package/dist/src/big-set.d.ts +20 -0
  16. package/dist/src/big-set.d.ts.map +1 -0
  17. package/dist/src/big-set.js +109 -0
  18. package/dist/src/big-set.js.map +1 -0
  19. package/dist/src/booleans.d.ts +44 -0
  20. package/dist/src/booleans.d.ts.map +1 -0
  21. package/dist/src/booleans.js +81 -0
  22. package/dist/src/booleans.js.map +1 -0
  23. package/dist/src/buffers.d.ts +9 -0
  24. package/dist/src/buffers.d.ts.map +1 -0
  25. package/dist/src/buffers.js +22 -0
  26. package/dist/src/buffers.js.map +1 -0
  27. package/dist/src/collector.d.ts +48 -0
  28. package/dist/src/collector.d.ts.map +1 -0
  29. package/dist/src/collector.js +74 -0
  30. package/dist/src/collector.js.map +1 -0
  31. package/dist/src/dates.d.ts +180 -0
  32. package/dist/src/dates.d.ts.map +1 -0
  33. package/dist/src/dates.js +744 -0
  34. package/dist/src/dates.js.map +1 -0
  35. package/dist/src/decorators.d.ts +7 -0
  36. package/dist/src/decorators.d.ts.map +1 -0
  37. package/dist/src/decorators.js +21 -0
  38. package/dist/src/decorators.js.map +1 -0
  39. package/dist/src/deps.d.ts +25 -0
  40. package/dist/src/deps.d.ts.map +1 -0
  41. package/dist/src/deps.js +96 -0
  42. package/dist/src/deps.js.map +1 -0
  43. package/dist/src/empty.d.ts +11 -0
  44. package/dist/src/empty.d.ts.map +1 -0
  45. package/dist/src/empty.js +32 -0
  46. package/dist/src/empty.js.map +1 -0
  47. package/dist/src/entities/data-entity.d.ts +153 -0
  48. package/dist/src/entities/data-entity.d.ts.map +1 -0
  49. package/dist/src/entities/data-entity.js +354 -0
  50. package/dist/src/entities/data-entity.js.map +1 -0
  51. package/dist/src/entities/index.d.ts +3 -0
  52. package/dist/src/entities/index.d.ts.map +1 -0
  53. package/dist/src/entities/index.js +3 -0
  54. package/dist/src/entities/index.js.map +1 -0
  55. package/dist/src/entities/interfaces.d.ts +52 -0
  56. package/dist/src/entities/interfaces.d.ts.map +1 -0
  57. package/dist/src/entities/interfaces.js +13 -0
  58. package/dist/src/entities/interfaces.js.map +1 -0
  59. package/dist/src/entities/utils.d.ts +9 -0
  60. package/dist/src/entities/utils.d.ts.map +1 -0
  61. package/dist/src/entities/utils.js +44 -0
  62. package/dist/src/entities/utils.js.map +1 -0
  63. package/dist/src/env.d.ts +6 -0
  64. package/dist/src/env.d.ts.map +1 -0
  65. package/dist/src/env.js +15 -0
  66. package/dist/src/env.js.map +1 -0
  67. package/dist/src/equality.d.ts +72 -0
  68. package/dist/src/equality.d.ts.map +1 -0
  69. package/dist/src/equality.js +128 -0
  70. package/dist/src/equality.js.map +1 -0
  71. package/dist/src/errors.d.ts +140 -0
  72. package/dist/src/errors.d.ts.map +1 -0
  73. package/dist/src/errors.js +372 -0
  74. package/dist/src/errors.js.map +1 -0
  75. package/dist/src/event-loop.d.ts +33 -0
  76. package/dist/src/event-loop.d.ts.map +1 -0
  77. package/dist/src/event-loop.js +74 -0
  78. package/dist/src/event-loop.js.map +1 -0
  79. package/dist/src/fp.d.ts +15 -0
  80. package/dist/src/fp.d.ts.map +1 -0
  81. package/dist/src/fp.js +25 -0
  82. package/dist/src/fp.js.map +1 -0
  83. package/dist/src/functions.d.ts +19 -0
  84. package/dist/src/functions.d.ts.map +1 -0
  85. package/dist/src/functions.js +58 -0
  86. package/dist/src/functions.js.map +1 -0
  87. package/dist/src/index.d.ts +32 -0
  88. package/dist/src/index.d.ts.map +1 -0
  89. package/dist/src/index.js +32 -0
  90. package/dist/src/index.js.map +1 -0
  91. package/dist/src/iterators.d.ts +9 -0
  92. package/dist/src/iterators.d.ts.map +1 -0
  93. package/dist/src/iterators.js +13 -0
  94. package/dist/src/iterators.js.map +1 -0
  95. package/dist/src/json.d.ts +8 -0
  96. package/dist/src/json.d.ts.map +1 -0
  97. package/dist/src/json.js +46 -0
  98. package/dist/src/json.js.map +1 -0
  99. package/dist/src/logger.d.ts +18 -0
  100. package/dist/src/logger.d.ts.map +1 -0
  101. package/dist/src/logger.js +87 -0
  102. package/dist/src/logger.js.map +1 -0
  103. package/dist/src/numbers.d.ts +86 -0
  104. package/dist/src/numbers.d.ts.map +1 -0
  105. package/dist/src/numbers.js +354 -0
  106. package/dist/src/numbers.js.map +1 -0
  107. package/dist/src/objects.d.ts +66 -0
  108. package/dist/src/objects.d.ts.map +1 -0
  109. package/dist/src/objects.js +170 -0
  110. package/dist/src/objects.js.map +1 -0
  111. package/dist/src/phone-number.d.ts +4 -0
  112. package/dist/src/phone-number.d.ts.map +1 -0
  113. package/dist/src/phone-number.js +31 -0
  114. package/dist/src/phone-number.js.map +1 -0
  115. package/dist/src/promises.d.ts +102 -0
  116. package/dist/src/promises.d.ts.map +1 -0
  117. package/dist/src/promises.js +289 -0
  118. package/dist/src/promises.js.map +1 -0
  119. package/dist/src/queue/index.d.ts +27 -0
  120. package/dist/src/queue/index.d.ts.map +1 -0
  121. package/dist/src/queue/index.js +170 -0
  122. package/dist/src/queue/index.js.map +1 -0
  123. package/dist/src/queue/node.d.ts +7 -0
  124. package/dist/src/queue/node.d.ts.map +1 -0
  125. package/dist/src/queue/node.js +17 -0
  126. package/dist/src/queue/node.js.map +1 -0
  127. package/dist/src/regex.d.ts +19 -0
  128. package/dist/src/regex.d.ts.map +1 -0
  129. package/dist/src/regex.js +138 -0
  130. package/dist/src/regex.js.map +1 -0
  131. package/dist/src/status-codes.d.ts +67 -0
  132. package/dist/src/status-codes.d.ts.map +1 -0
  133. package/dist/src/status-codes.js +66 -0
  134. package/dist/src/status-codes.js.map +1 -0
  135. package/dist/src/strings.d.ts +279 -0
  136. package/dist/src/strings.d.ts.map +1 -0
  137. package/dist/src/strings.js +578 -0
  138. package/dist/src/strings.js.map +1 -0
  139. package/dist/src/vector.d.ts +2 -0
  140. package/dist/src/vector.d.ts.map +1 -0
  141. package/dist/src/vector.js +16 -0
  142. package/dist/src/vector.js.map +1 -0
  143. package/package.json +65 -0
@@ -0,0 +1,102 @@
1
+ /** promisified setTimeout */
2
+ export declare function pDelay<T = undefined>(delay?: number, arg?: T): Promise<T>;
3
+ /** promisified process.nextTick,setImmediate or setTimeout depending on your environment */
4
+ export declare function pImmediate<T = undefined>(arg?: T): Promise<T>;
5
+ export interface PRetryConfig {
6
+ /**
7
+ * The number of retries to attempt before failing.
8
+ * This does not include the initial attempt
9
+ *
10
+ * @default 3
11
+ */
12
+ retries: number;
13
+ /**
14
+ * The initial time to delay before retrying the function
15
+ *
16
+ * @default 500
17
+ */
18
+ delay: number;
19
+ /**
20
+ * The maximum time to delay when retrying in milliseconds
21
+ *
22
+ * @default 60000
23
+ */
24
+ maxDelay: number;
25
+ /**
26
+ * The backoff multiplier
27
+ *
28
+ * @default 2
29
+ */
30
+ backoff: number;
31
+ /**
32
+ * If set to true, this will set fail with fatalError to true
33
+ */
34
+ endWithFatal: boolean;
35
+ /**
36
+ * Set a error message prefix
37
+ */
38
+ reason?: string;
39
+ /**
40
+ * Log function for logging any errors that occurred
41
+ */
42
+ logError: (...args: any[]) => void;
43
+ /**
44
+ * If this not specified or is empty, all errors will be treated as retryable.
45
+ * If any of the items in the array match the error message,
46
+ * it will be considered retryable
47
+ */
48
+ matches?: (string | RegExp)[];
49
+ }
50
+ /**
51
+ * A promise retry fn.
52
+ */
53
+ export declare function pRetry<T = any>(fn: PromiseFn<T>, options?: Partial<PRetryConfig>): Promise<T>;
54
+ export type PWhileOptions = {
55
+ /** @defaults to -1 which is never */
56
+ timeoutMs?: number;
57
+ /** @defaults to "Request" */
58
+ name?: string;
59
+ /** enable jitter to stagger requests */
60
+ enabledJitter?: boolean;
61
+ /** the minimum the jitter wait time will be (in milliseconds),
62
+ * defaults to 100ms */
63
+ minJitter?: number;
64
+ /** the maximum the jitter wait time will be (in milliseconds),
65
+ * defaults to 3x the minJitter setting, but less than timeoutMs
66
+ * */
67
+ maxJitter?: number;
68
+ /** error that can be expressed if the timer ends because the function does not return true */
69
+ error?: string;
70
+ };
71
+ /**
72
+ * Run a function until it returns true or throws an error
73
+ */
74
+ export declare function pWhile(fn: PromiseFn, options?: PWhileOptions): Promise<void>;
75
+ /**
76
+ * Get backoff delay that will safe to retry and is slightly staggered
77
+ */
78
+ export declare function getBackoffDelay(current: number, factor?: number, max?: number, min?: number): number;
79
+ interface PromiseFn<T = any> {
80
+ (...args: any[]): Promise<T>;
81
+ }
82
+ /** Async waterfall function */
83
+ export declare function waterfall(input: unknown, fns: PromiseFn[], addBreak?: boolean): Promise<any>;
84
+ /**
85
+ * Run multiple promises at once, and resolve/reject when the first completes
86
+ */
87
+ export declare function pRace(promises: Promise<any>[], logError?: (err: any) => void): Promise<any>;
88
+ /**
89
+ * Similar to pRace but with
90
+ */
91
+ export declare function pRaceWithTimeout(promises: Promise<any>[] | Promise<any>, timeout: number, logError?: (err: any) => void): Promise<any>;
92
+ /**
93
+ * An alternative to Bluebird.defer: http://bluebirdjs.com/docs/api/deferred-migration.html
94
+ * Considered bad practice in most cases, use the Promise constructor
95
+ */
96
+ export declare function pDefer(): {
97
+ resolve: (value?: unknown) => void;
98
+ reject: (reason?: any) => void;
99
+ promise: Promise<any>;
100
+ };
101
+ export {};
102
+ //# sourceMappingURL=promises.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promises.d.ts","sourceRoot":"","sources":["../../src/promises.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,289 @@
1
+ import { debugLogger } from './logger.js';
2
+ import { toHumanTime } from './dates.js';
3
+ import { isRetryableError, TSError, parseError, isFatalError } from './errors.js';
4
+ const logger = debugLogger('utils:promises');
5
+ /** promisified setTimeout */
6
+ export function pDelay(delay, arg) {
7
+ return new Promise((resolve) => {
8
+ setTimeout(resolve, delay ?? 0, arg);
9
+ });
10
+ }
11
+ let supportsSetImmediate = false;
12
+ try {
13
+ if (typeof globalThis.setImmediate === 'function') {
14
+ supportsSetImmediate = true;
15
+ }
16
+ }
17
+ catch (err) {
18
+ supportsSetImmediate = false;
19
+ }
20
+ let supportsNextTick = false;
21
+ try {
22
+ if (typeof globalThis.process.nextTick === 'function') {
23
+ supportsNextTick = true;
24
+ }
25
+ }
26
+ catch (err) {
27
+ supportsNextTick = false;
28
+ }
29
+ let supportsQueueMicroTask = false;
30
+ try {
31
+ if (typeof globalThis.queueMicrotask === 'function') {
32
+ supportsQueueMicroTask = true;
33
+ }
34
+ }
35
+ catch (err) {
36
+ supportsQueueMicroTask = false;
37
+ }
38
+ /** promisified process.nextTick,setImmediate or setTimeout depending on your environment */
39
+ export function pImmediate(arg) {
40
+ return new Promise((resolve) => {
41
+ if (supportsQueueMicroTask) {
42
+ if (typeof arg !== 'undefined') {
43
+ queueMicrotask(resolve.bind(resolve, arg));
44
+ }
45
+ else {
46
+ queueMicrotask(resolve);
47
+ }
48
+ }
49
+ else if (supportsNextTick) {
50
+ process.nextTick(resolve, arg);
51
+ }
52
+ else if (supportsSetImmediate) {
53
+ if (typeof arg !== 'undefined') {
54
+ setImmediate(resolve, arg);
55
+ }
56
+ else {
57
+ setImmediate(resolve);
58
+ }
59
+ }
60
+ else {
61
+ setTimeout(resolve, 0, arg);
62
+ }
63
+ });
64
+ }
65
+ /**
66
+ * A promise retry fn.
67
+ */
68
+ export async function pRetry(fn, options) {
69
+ const config = Object.assign({
70
+ retries: 3,
71
+ delay: 500,
72
+ maxDelay: 60000,
73
+ backoff: 2,
74
+ matches: [],
75
+ _currentDelay: 0,
76
+ // @ts-expect-error
77
+ _context: undefined,
78
+ }, options);
79
+ if (!config._currentDelay) {
80
+ config._currentDelay = config.delay;
81
+ }
82
+ config._context = config._context || {
83
+ startTime: Date.now(),
84
+ attempts: 0,
85
+ };
86
+ config._context.attempts++;
87
+ try {
88
+ return await fn();
89
+ }
90
+ catch (_err) {
91
+ let matches = true;
92
+ if (config.matches?.length) {
93
+ const rawErr = parseError(_err);
94
+ matches = config.matches.some((match) => {
95
+ const reg = new RegExp(match);
96
+ return reg.test(rawErr);
97
+ });
98
+ }
99
+ const context = {
100
+ ...config._context,
101
+ duration: Date.now() - config._context.startTime,
102
+ };
103
+ const err = new TSError(_err, {
104
+ reason: config.reason,
105
+ context,
106
+ });
107
+ if (_err && _err.stack) {
108
+ err.stack += `\n${_err.stack
109
+ .split('\n')
110
+ .slice(1)
111
+ .join('\n')}`;
112
+ }
113
+ if (!isFatalError(err) && err.retryable == null) {
114
+ err.retryable = matches;
115
+ }
116
+ if (isRetryableError(err) && config.retries > 1) {
117
+ config.retries--;
118
+ config._currentDelay = getBackoffDelay(config._currentDelay, config.backoff, config.maxDelay, config.delay);
119
+ await pDelay(config._currentDelay);
120
+ if (config.logError) {
121
+ config.logError(err, 'retry error, retrying...', {
122
+ ...config,
123
+ _context: null,
124
+ });
125
+ }
126
+ return pRetry(fn, config);
127
+ }
128
+ err.retryable = false;
129
+ if (config.endWithFatal) {
130
+ err.fatalError = true;
131
+ }
132
+ throw err;
133
+ }
134
+ }
135
+ /**
136
+ * Run a function until it returns true or throws an error
137
+ */
138
+ export async function pWhile(fn, options = {}) {
139
+ const { timeoutMs = -1, name = 'Request', enabledJitter = false, minJitter = 100, } = options;
140
+ const maxJitter = options.maxJitter ?? minJitter * 3;
141
+ if (timeoutMs <= 2 && options.enabledJitter) {
142
+ throw new Error('Jitter cannot be enabled whe timeout is <=2');
143
+ }
144
+ const startTime = Date.now();
145
+ const endTime = timeoutMs > 0 ? startTime + timeoutMs : Number.POSITIVE_INFINITY;
146
+ let running = false;
147
+ let interval;
148
+ const promise = new Promise((resolve, reject) => {
149
+ interval = setInterval(async () => {
150
+ if (running)
151
+ return;
152
+ running = true;
153
+ const remaining = endTime - Date.now();
154
+ if (remaining <= 0) {
155
+ let errMsg = `${name} timeout after ${toHumanTime(timeoutMs)}`;
156
+ if (options.error)
157
+ errMsg = `${errMsg}; ${options.error}`;
158
+ reject(new TSError(errMsg, {
159
+ statusCode: 503,
160
+ }));
161
+ return;
162
+ }
163
+ try {
164
+ if (enabledJitter) {
165
+ const jitterDelay = getBackoffDelay(minJitter, 3, maxJitter, minJitter);
166
+ // ensure we don't exceed the remaing time
167
+ const delay = Math.min(jitterDelay, remaining - 2);
168
+ if (delay > 2) {
169
+ await pDelay(delay);
170
+ }
171
+ }
172
+ const result = await fn();
173
+ if (result) {
174
+ resolve();
175
+ return;
176
+ }
177
+ running = false;
178
+ }
179
+ catch (err) {
180
+ reject(err);
181
+ }
182
+ }, 1);
183
+ });
184
+ try {
185
+ await promise;
186
+ }
187
+ finally {
188
+ clearInterval(interval);
189
+ }
190
+ }
191
+ /**
192
+ * Get backoff delay that will safe to retry and is slightly staggered
193
+ */
194
+ export function getBackoffDelay(current, factor = 2, max = 60000, min = 500) {
195
+ // jitter is a floating point number between -0.2 and 0.8
196
+ const jitter = Math.random() * 0.8 + -0.2;
197
+ let n = current;
198
+ // ensure the number does not go below the min val
199
+ if (n < min)
200
+ n = min;
201
+ // multiple the current backoff value by input factor and jitter
202
+ n *= factor + jitter;
203
+ // ensure the number does not exceed the max val
204
+ if (n > max)
205
+ n = max;
206
+ // round it so it remains a whole number
207
+ return Math.round(n);
208
+ }
209
+ /** Async waterfall function */
210
+ export function waterfall(input, fns, addBreak = false) {
211
+ let i = 0;
212
+ return fns.reduce(async (last, fn) => {
213
+ if (i++ === 0 && addBreak)
214
+ await pImmediate();
215
+ return fn(await last);
216
+ }, input);
217
+ }
218
+ /**
219
+ * Run multiple promises at once, and resolve/reject when the first completes
220
+ */
221
+ export function pRace(promises, logError) {
222
+ if (!promises || !Array.isArray(promises)) {
223
+ throw new Error('Invalid promises argument, must be an array');
224
+ }
225
+ return new Promise((resolve, reject) => {
226
+ let done = false;
227
+ promises.forEach(async (promise) => {
228
+ try {
229
+ const result = await promise;
230
+ resolve(result);
231
+ done = true;
232
+ }
233
+ catch (err) {
234
+ if (done) {
235
+ if (logError)
236
+ logError(err);
237
+ else
238
+ logger.error(err, 'pRace reject with an error after complete');
239
+ }
240
+ reject(err);
241
+ }
242
+ });
243
+ });
244
+ }
245
+ /**
246
+ * Similar to pRace but with
247
+ */
248
+ export async function pRaceWithTimeout(promises, timeout, logError) {
249
+ if (!timeout || typeof timeout !== 'number') {
250
+ throw new Error('Invalid timeout argument, must be a number');
251
+ }
252
+ let timeoutId;
253
+ try {
254
+ const pTimeout = new Promise((resolve) => {
255
+ // add unref to avoid keeping the process open
256
+ timeoutId = setTimeout(resolve, timeout);
257
+ timeoutId.unref();
258
+ });
259
+ const _promises = Array.isArray(promises) ? promises : [promises];
260
+ await pRace([..._promises, pTimeout], logError);
261
+ }
262
+ catch (err) {
263
+ if (logError)
264
+ logError(err);
265
+ else
266
+ console.error(err);
267
+ }
268
+ finally {
269
+ clearTimeout(timeoutId);
270
+ }
271
+ }
272
+ /**
273
+ * An alternative to Bluebird.defer: http://bluebirdjs.com/docs/api/deferred-migration.html
274
+ * Considered bad practice in most cases, use the Promise constructor
275
+ */
276
+ export function pDefer() {
277
+ let resolve;
278
+ let reject;
279
+ const promise = new Promise((res, rej) => {
280
+ resolve = res;
281
+ reject = rej;
282
+ });
283
+ return {
284
+ resolve: resolve,
285
+ reject: reject,
286
+ promise
287
+ };
288
+ }
289
+ //# sourceMappingURL=promises.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promises.js","sourceRoot":"","sources":["../../src/promises.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import Node from './node.js';
2
+ /** A basic FIFO queue */
3
+ export declare class Queue<T> {
4
+ head?: Node<T>;
5
+ tail?: Node<T>;
6
+ private _size;
7
+ /** A value to the end of the queue */
8
+ enqueue(value: T): void;
9
+ unshift(value: T): void;
10
+ dequeue(): T | undefined;
11
+ /** Iterate over each value */
12
+ each(fn: (value: T) => void): void;
13
+ remove(id: string, keyForID?: string): void;
14
+ /**
15
+ * Search the queue for a key that matches a value and return the match
16
+ */
17
+ extract(key: string, val: unknown): T | undefined;
18
+ /**
19
+ * Get the length of the queue
20
+ */
21
+ size(): number;
22
+ /**
23
+ * Search the queue to see if a key value pair exists
24
+ */
25
+ exists(key: string, val: unknown): boolean;
26
+ }
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/queue/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,yBAAyB;AACzB,qBAAa,KAAK,CAAC,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACf,OAAO,CAAC,KAAK,CAAK;IAElB,sCAAsC;IACtC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAQvB,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAUvB,OAAO,IAAI,CAAC,GAAG,SAAS;IAqBxB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI;IAWlC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAkD3C;;MAEE;IACF,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,CAAC,GAAG,SAAS;IAyCjD;;MAEE;IACF,IAAI,IAAI,MAAM;IAId;;MAEE;IACF,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO;CAmB7C"}
@@ -0,0 +1,170 @@
1
+ import Node from './node.js';
2
+ /** A basic FIFO queue */
3
+ export class Queue {
4
+ head;
5
+ tail;
6
+ _size = 0;
7
+ /** A value to the end of the queue */
8
+ enqueue(value) {
9
+ this.tail = new Node(value, this.tail);
10
+ if (!this.head) {
11
+ this.head = this.tail;
12
+ }
13
+ this._size += 1;
14
+ }
15
+ unshift(value) {
16
+ const currentNode = this.head;
17
+ const node = new Node(value, undefined, currentNode);
18
+ this.head = node;
19
+ if (this.tail == null) {
20
+ this.tail = node;
21
+ }
22
+ this._size += 1;
23
+ }
24
+ dequeue() {
25
+ if (this._size === 0 || this.head == null) {
26
+ return;
27
+ }
28
+ const node = this.head;
29
+ this.head = node.next;
30
+ if (node.next) {
31
+ node.next = undefined;
32
+ node.prev = undefined;
33
+ }
34
+ this._size -= 1;
35
+ if (this._size === 1) {
36
+ this.tail = this.head;
37
+ }
38
+ else if (this._size === 0) {
39
+ this.head = undefined;
40
+ this.tail = undefined;
41
+ }
42
+ return node.value;
43
+ }
44
+ /** Iterate over each value */
45
+ each(fn) {
46
+ let currentNode = this.head;
47
+ if (currentNode) {
48
+ fn(currentNode.value);
49
+ }
50
+ while (currentNode && currentNode.next) {
51
+ currentNode = currentNode.next;
52
+ fn(currentNode.value);
53
+ }
54
+ }
55
+ remove(id, keyForID) {
56
+ const key = keyForID || 'id';
57
+ if (this.head == null || !id) {
58
+ return;
59
+ }
60
+ // fast forward head to right spot
61
+ while (this.head && this.head.value[key] === id) {
62
+ this.head = this.head.next;
63
+ this._size -= 1;
64
+ }
65
+ // if whole list is gone, set tail to undefined
66
+ if (this.head == null) {
67
+ this.tail = undefined;
68
+ return;
69
+ }
70
+ // clean up prev
71
+ this.head.prev = undefined;
72
+ // there is anything left in list
73
+ if (this.head) {
74
+ let currentNode = this.head;
75
+ while (currentNode) {
76
+ const previousNode = currentNode.prev;
77
+ const nextNode = currentNode.next;
78
+ if (currentNode.value[key] === id) {
79
+ if (nextNode) {
80
+ if (previousNode) {
81
+ previousNode.next = nextNode;
82
+ nextNode.prev = previousNode;
83
+ }
84
+ else {
85
+ nextNode.prev = undefined;
86
+ }
87
+ }
88
+ else if (previousNode) {
89
+ previousNode.next = undefined;
90
+ this.tail = previousNode;
91
+ }
92
+ this._size -= 1;
93
+ currentNode = nextNode;
94
+ }
95
+ else {
96
+ currentNode = nextNode;
97
+ }
98
+ }
99
+ }
100
+ }
101
+ /**
102
+ * Search the queue for a key that matches a value and return the match
103
+ */
104
+ extract(key, val) {
105
+ if (val == null)
106
+ return;
107
+ if (this.head) {
108
+ let currentNode = this.head;
109
+ let isFound = false;
110
+ while (currentNode && !isFound) {
111
+ const previousNode = currentNode.prev;
112
+ const nextNode = currentNode.next;
113
+ if (currentNode.value[key] === val) {
114
+ const data = currentNode.value;
115
+ isFound = true;
116
+ if (nextNode) {
117
+ if (previousNode) {
118
+ previousNode.next = nextNode;
119
+ nextNode.prev = previousNode;
120
+ }
121
+ else {
122
+ this.head = nextNode;
123
+ nextNode.prev = undefined;
124
+ }
125
+ }
126
+ else if (previousNode) {
127
+ previousNode.next = undefined;
128
+ this.tail = previousNode;
129
+ }
130
+ this._size -= 1;
131
+ if (this._size === 1) {
132
+ this.tail = this.head;
133
+ }
134
+ else if (this._size === 0) {
135
+ this.head = undefined;
136
+ this.tail = undefined;
137
+ }
138
+ return data;
139
+ }
140
+ currentNode = nextNode;
141
+ }
142
+ }
143
+ }
144
+ /**
145
+ * Get the length of the queue
146
+ */
147
+ size() {
148
+ return this._size;
149
+ }
150
+ /**
151
+ * Search the queue to see if a key value pair exists
152
+ */
153
+ exists(key, val) {
154
+ let currentNode = this.head;
155
+ if (val == null) {
156
+ return false;
157
+ }
158
+ if (currentNode && currentNode.value[key] === val) {
159
+ return true;
160
+ }
161
+ while (currentNode && currentNode.next) {
162
+ currentNode = currentNode.next;
163
+ if (currentNode.value[key] === val) {
164
+ return true;
165
+ }
166
+ }
167
+ return false;
168
+ }
169
+ }
170
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/queue/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export default class Node<T> {
2
+ value: T;
3
+ next?: Node<T>;
4
+ prev?: Node<T>;
5
+ constructor(value: T, prev?: Node<T>, next?: Node<T>);
6
+ }
7
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/queue/node.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,IAAI,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC;IACT,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gBAEH,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;CAWvD"}
@@ -0,0 +1,17 @@
1
+ export default class Node {
2
+ value;
3
+ next;
4
+ prev;
5
+ constructor(value, prev, next) {
6
+ this.next = next;
7
+ if (next) {
8
+ next.prev = this;
9
+ }
10
+ this.prev = prev;
11
+ if (prev) {
12
+ prev.next = this;
13
+ }
14
+ this.value = value;
15
+ }
16
+ }
17
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/queue/node.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,IAAI;IACrB,KAAK,CAAI;IACT,IAAI,CAAW;IACf,IAAI,CAAW;IAEf,YAAY,KAAQ,EAAE,IAAc,EAAE,IAAc;QAChD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;CACJ"}
@@ -0,0 +1,19 @@
1
+ export declare function isRegExp(input: unknown): input is RegExp;
2
+ export declare function isRegExpLike(input: unknown, strict?: boolean): boolean;
3
+ type RegexFlag = 'g' | 'i' | 's' | 'm' | 'x';
4
+ export declare function formatRegex(input: RegExp | string, flags?: RegexFlag[]): RegExp;
5
+ export declare function match(regexp: string | RegExp, value: string): string | null;
6
+ /**
7
+ * A functional version of match
8
+ */
9
+ export declare function matchFP(regexp: string | RegExp): (value: string) => string | null;
10
+ export declare function matchAll(regexp: RegExp | string, value: string): string[] | null;
11
+ /**
12
+ * A functional version of matchAll
13
+ */
14
+ export declare function matchAllFP(regexp: string | RegExp): (value: string) => string[] | null;
15
+ export declare function isWildCardString(term: string): boolean;
16
+ export declare function wildCardToRegex(term: string): RegExp;
17
+ export declare function matchWildcard(wildCard: string, value: string): boolean;
18
+ export {};
19
+ //# sourceMappingURL=regex.d.ts.map