@xylabs/forget 4.13.21 → 4.13.23

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
@@ -15,430 +15,9 @@
15
15
 
16
16
  Base functionality used throughout XY Labs TypeScript/JavaScript libraries
17
17
 
18
- ## API Documentation
19
-
20
- **@xylabs/forget**
21
-
22
- ***
23
-
24
- ## Classes
25
-
26
- - [ForgetPromise](#classes/ForgetPromise)
27
-
28
- ## Interfaces
29
-
30
- - [ForgetNodeConfig](#interfaces/ForgetNodeConfig)
31
-
32
- ## Variables
33
-
34
- - [defaultForgetNodeConfig](#variables/defaultForgetNodeConfig)
35
-
36
- ## Functions
37
-
38
- - [forget](#functions/forget)
39
-
40
- ### classes
41
-
42
- ### <a id="ForgetPromise"></a>ForgetPromise
43
-
44
- [**@xylabs/forget**](#../README)
45
-
46
- ***
47
-
48
- ## Extends
49
-
50
- - `ForgetPromise`
51
-
52
- ## Constructors
53
-
54
- ### Constructor
55
-
56
- ```ts
57
- new ForgetPromise(): ForgetPromiseNode;
58
- ```
59
-
60
- ### Returns
61
-
62
- `ForgetPromiseNode`
63
-
64
- ### Inherited from
65
-
66
- ```ts
67
- ForgetPromise.constructor
68
- ```
69
-
70
- ## Properties
71
-
72
- ### activeForgets
73
-
74
- ```ts
75
- static activeForgets: number = 0;
76
- ```
77
-
78
- ### Inherited from
79
-
80
- ```ts
81
- ForgetPromise.activeForgets
82
- ```
83
-
84
- ***
85
-
86
- ### exceptedForgets
87
-
88
- ```ts
89
- static exceptedForgets: number = 0;
90
- ```
91
-
92
- ### Inherited from
93
-
94
- ```ts
95
- ForgetPromise.exceptedForgets
96
- ```
97
-
98
- ***
99
-
100
- ### logger
101
-
102
- ```ts
103
- static logger: Logger = console;
104
- ```
105
-
106
- ### Inherited from
107
-
108
- ```ts
109
- ForgetPromise.logger
110
- ```
111
-
112
- ## Accessors
113
-
114
- ### active
115
-
116
- ### Get Signature
117
-
118
- ```ts
119
- get static active(): boolean;
120
- ```
121
-
122
- #### Returns
123
-
124
- `boolean`
125
-
126
- ### Inherited from
127
-
128
- ```ts
129
- ForgetPromise.active
130
- ```
131
-
132
- ## Methods
133
-
134
- ### awaitInactive()
135
-
136
- ```ts
137
- static awaitInactive(interval, timeout?): Promise<number>;
138
- ```
139
-
140
- ### Parameters
141
-
142
- #### interval
143
-
144
- `number` = `100`
145
-
146
- #### timeout?
147
-
148
- `number`
149
-
150
- ### Returns
151
-
152
- `Promise`\<`number`\>
153
-
154
- ### Inherited from
155
-
156
- ```ts
157
- ForgetPromise.awaitInactive
158
- ```
159
-
160
- ***
161
-
162
- ### exceptionHandler()
163
-
164
- ```ts
165
- static exceptionHandler(
166
- error,
167
- config,
168
- externalStackTrace?): void;
169
- ```
170
-
171
- ### Parameters
172
-
173
- #### error
174
-
175
- `Error`
176
-
177
- #### config
178
-
179
- [`ForgetNodeConfig`](#../interfaces/ForgetNodeConfig)
180
-
181
- #### externalStackTrace?
182
-
183
- `string`
184
-
185
- ### Returns
186
-
187
- `void`
188
-
189
- ### Overrides
190
-
191
- ```ts
192
- ForgetPromise.exceptionHandler
193
- ```
194
-
195
- ***
196
-
197
- ### forget()
198
-
199
- ```ts
200
- static forget<T>(promise, config?): void;
201
- ```
202
-
203
- Used to explicitly launch an async function (or Promise) with awaiting it
204
-
205
- ### Type Parameters
206
-
207
- #### T
208
-
209
- `T`
210
-
211
- ### Parameters
212
-
213
- #### promise
214
-
215
- `Promisable`\<`T`\>
216
-
217
- The promise to forget
218
-
219
- #### config?
220
-
221
- [`ForgetNodeConfig`](#../interfaces/ForgetNodeConfig)\<`T`\>
222
-
223
- Configuration of forget settings
224
-
225
- ### Returns
226
-
227
- `void`
228
-
229
- ### Overrides
230
-
231
- ```ts
232
- ForgetPromise.forget
233
- ```
234
-
235
- ***
236
-
237
- ### timeoutHandler()
238
-
239
- ```ts
240
- static timeoutHandler(
241
- time,
242
- config,
243
- externalStackTrace?): void;
244
- ```
245
-
246
- ### Parameters
247
-
248
- #### time
249
-
250
- `number`
251
-
252
- #### config
253
-
254
- [`ForgetNodeConfig`](#../interfaces/ForgetNodeConfig)
255
-
256
- #### externalStackTrace?
257
-
258
- `string`
259
-
260
- ### Returns
261
-
262
- `void`
263
-
264
- ### Overrides
265
-
266
- ```ts
267
- ForgetPromise.timeoutHandler
268
- ```
269
-
270
- ### functions
271
-
272
- ### <a id="forget"></a>forget
273
-
274
- [**@xylabs/forget**](#../README)
275
-
276
- ***
277
-
278
- ```ts
279
- function forget<T>(promise, config?): void;
280
- ```
281
-
282
- ## Type Parameters
283
-
284
- ### T
285
-
286
- `T`
287
-
288
- ## Parameters
289
-
290
- ### promise
291
-
292
- `Promisable`\<`T`\>
293
-
294
- ### config?
295
-
296
- [`ForgetNodeConfig`](#../interfaces/ForgetNodeConfig)\<`T`\>
297
-
298
- ## Returns
299
-
300
- `void`
301
-
302
- ### interfaces
303
-
304
- ### <a id="ForgetNodeConfig"></a>ForgetNodeConfig
305
-
306
- [**@xylabs/forget**](#../README)
307
-
308
- ***
309
-
310
- ## Extends
311
-
312
- - `ForgetConfig`\<`T`\>
313
-
314
- ## Type Parameters
315
-
316
- ### T
317
-
318
- `T` = `any`
319
-
320
- ## Properties
321
-
322
- ### name?
323
-
324
- ```ts
325
- optional name: string;
326
- ```
327
-
328
- ### Inherited from
329
-
330
- ```ts
331
- ForgetConfig.name
332
- ```
333
-
334
- ***
335
-
336
- ### onCancel()?
337
-
338
- ```ts
339
- optional onCancel: () => void;
340
- ```
341
-
342
- ### Returns
343
-
344
- `void`
345
-
346
- ### Inherited from
347
-
348
- ```ts
349
- ForgetConfig.onCancel
350
- ```
351
-
352
- ***
353
-
354
- ### onComplete()?
355
-
356
- ```ts
357
- optional onComplete: (result) => void;
358
- ```
359
-
360
- ### Parameters
361
-
362
- #### result
363
-
364
- \[`undefined` \| `T`, `undefined` \| `Error`\]
365
-
366
- ### Returns
367
-
368
- `void`
369
-
370
- ### Inherited from
371
-
372
- ```ts
373
- ForgetConfig.onComplete
374
- ```
375
-
376
- ***
377
-
378
- ### onException()?
379
-
380
- ```ts
381
- optional onException: (error) => void;
382
- ```
383
-
384
- ### Parameters
385
-
386
- #### error
387
-
388
- `Error`
389
-
390
- ### Returns
391
-
392
- `void`
393
-
394
- ### Inherited from
395
-
396
- ```ts
397
- ForgetConfig.onException
398
- ```
399
-
400
- ***
401
-
402
- ### timeout?
403
-
404
- ```ts
405
- optional timeout: number;
406
- ```
407
-
408
- ### Inherited from
409
-
410
- ```ts
411
- ForgetConfig.timeout
412
- ```
413
-
414
- ***
415
-
416
- ### terminateOnException?
417
-
418
- ```ts
419
- optional terminateOnException: boolean;
420
- ```
421
-
422
- ***
423
-
424
- ### terminateOnTimeout?
425
-
426
- ```ts
427
- optional terminateOnTimeout: boolean;
428
- ```
429
-
430
- ### variables
431
-
432
- ### <a id="defaultForgetNodeConfig"></a>defaultForgetNodeConfig
433
-
434
- [**@xylabs/forget**](#../README)
435
-
436
- ***
437
-
438
- ```ts
439
- const defaultForgetNodeConfig: ForgetNodeConfig<unknown>;
440
- ```
18
+ ## Reference
441
19
 
20
+ Reference generation failed.
442
21
 
443
22
  Part of [sdk-js](https://www.npmjs.com/package/@xyo-network/sdk-js)
444
23
 
@@ -0,0 +1,2 @@
1
+ export * from './node/index.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA"}
@@ -1,12 +1,17 @@
1
- // src/ForgetPromise.ts
2
- import { delay } from "@xylabs/delay";
3
- import { isPromise } from "@xylabs/promise";
4
- import { isNumber } from "@xylabs/typeof";
5
-
6
1
  // src/ForgetConfig.ts
7
2
  var defaultForgetConfig = { timeout: 3e4 };
8
3
 
4
+ // src/ForgetNodeConfig.ts
5
+ var defaultForgetNodeConfig = {
6
+ ...defaultForgetConfig,
7
+ terminateOnTimeout: false,
8
+ terminateOnException: false
9
+ };
10
+
9
11
  // src/ForgetPromise.ts
12
+ import { delay } from "@xylabs/delay";
13
+ import { isPromise } from "@xylabs/promise";
14
+ import { isNumber } from "@xylabs/typeof";
10
15
  var ForgetPromise = class {
11
16
  static activeForgets = 0;
12
17
  static exceptedForgets = 0;
@@ -97,13 +102,39 @@ var ForgetPromise = class {
97
102
  }
98
103
  };
99
104
 
100
- // src/forget.ts
101
- var forget = (promise, config) => {
102
- ForgetPromise.forget(promise, config);
105
+ // src/ForgetPromiseNode.ts
106
+ var ForgetPromiseNode = class extends ForgetPromise {
107
+ static exceptionHandler(error, config, externalStackTrace) {
108
+ super.exceptionHandler(error, config, externalStackTrace);
109
+ if (config?.terminateOnException === true) {
110
+ this.logger.error(`Attempting to terminate process [${config?.name ?? "unknown"}]...`);
111
+ process.exit(1);
112
+ }
113
+ }
114
+ static forget(promise, config) {
115
+ const resolvedConfig = {
116
+ ...defaultForgetNodeConfig,
117
+ ...globalThis.xy?.forget?.config,
118
+ ...config
119
+ };
120
+ super.forget(promise, resolvedConfig);
121
+ }
122
+ static timeoutHandler(time, config, externalStackTrace) {
123
+ super.timeoutHandler(time, config, externalStackTrace);
124
+ if (config?.terminateOnTimeout === true) {
125
+ this.logger.error(`Attempting to terminate process [${config?.name ?? "unknown"}]...`);
126
+ process.exit(2);
127
+ }
128
+ }
129
+ };
130
+
131
+ // src/forgetNode.ts
132
+ var forgetNode = (promise, config) => {
133
+ ForgetPromiseNode.forget(promise, config);
103
134
  };
104
135
  export {
105
- ForgetPromise,
106
- defaultForgetConfig,
107
- forget
136
+ ForgetPromiseNode as ForgetPromise,
137
+ defaultForgetNodeConfig,
138
+ forgetNode as forget
108
139
  };
109
140
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ForgetPromise.ts","../../src/ForgetConfig.ts","../../src/forget.ts"],"sourcesContent":["import { delay } from '@xylabs/delay'\nimport type { Logger } from '@xylabs/logger'\nimport type { Promisable, PromiseEx } from '@xylabs/promise'\nimport { isPromise } from '@xylabs/promise'\nimport { isNumber } from '@xylabs/typeof'\n\nimport { defaultForgetConfig, type ForgetConfig } from './ForgetConfig.ts'\n\ntype PromisableFunction<T> = () => Promisable<T>\n\n// eslint-disable-next-line unicorn/no-static-only-class\nexport class ForgetPromise {\n static activeForgets = 0\n static exceptedForgets = 0\n static logger: Logger = console\n\n static get active() {\n return this.activeForgets > 0\n }\n\n static async awaitInactive(interval = 100, timeout?: number) {\n let timeoutRemaining = timeout\n while (this.active) {\n await delay(interval)\n if (timeoutRemaining !== undefined) {\n timeoutRemaining -= interval\n if (timeoutRemaining <= 0) {\n return this.activeForgets\n }\n }\n }\n return 0\n }\n\n static exceptionHandler(error: Error, { name }: ForgetConfig, externalStackTrace?: string) {\n this.logger.error(`forget promise handler excepted [${name}]: ${error.message}`, error)\n if (externalStackTrace !== undefined) {\n this.logger.warn(`External Stack trace [${name}]:`, externalStackTrace)\n }\n }\n\n /**\n * Used to explicitly launch an async function (or Promise) with awaiting it\n * @param promise The promise to forget\n * @param config Configuration of forget settings\n */\n static forget<T>(promise: Promise<T> | PromiseEx<T> | PromisableFunction<T> | T, config?: ForgetConfig<T>) {\n const externalStackTrace = (new Error('Stack')).stack\n\n // default | global | provided priorities for config (not deep merge)\n const resolvedConfig = {\n ...defaultForgetConfig, ...globalThis.xy?.forget?.config, ...config,\n }\n const resolvedPromise = typeof promise === 'function' ? (promise as PromisableFunction<T>)() : promise\n if (isPromise(resolvedPromise)) {\n try {\n let completed = false\n this.activeForgets++\n\n const promiseWrapper = async () => {\n await resolvedPromise\n .then((result: T) => {\n this.activeForgets--\n completed = true\n resolvedConfig?.onComplete?.([result, undefined])\n })\n .catch((error) => {\n this.activeForgets--\n completed = true\n this.logger.error(`forgotten promise excepted [${config?.name ?? 'unknown'}]: ${error.message}`, error)\n resolvedConfig?.onComplete?.([undefined, error])\n })\n }\n\n const promises = [promiseWrapper()]\n\n // if there is a timeout, add it to the race\n const timeout = resolvedConfig.timeout ?? defaultForgetConfig.timeout\n if (isNumber(timeout)) {\n const timeoutFunc = async () => {\n await delay(timeout)\n if (!completed) {\n resolvedConfig.onCancel?.()\n this.timeoutHandler(timeout, resolvedConfig, externalStackTrace)\n }\n }\n promises.push(timeoutFunc())\n }\n\n const all = Promise.race(promises)\n\n all\n .then(() => {\n return\n })\n .catch(() => {\n return\n })\n } catch (ex) {\n this.exceptedForgets += 1\n resolvedConfig?.onException?.(ex as Error)\n this.exceptionHandler(ex as Error, resolvedConfig, externalStackTrace)\n }\n } else {\n // we do nothing here since if it was a non-promise, it already got invoked.\n return\n }\n }\n\n static timeoutHandler(time: number, { name = 'unknown' }: ForgetConfig, externalStackTrace?: string) {\n this.logger.error(`forget promise timeout out after ${time}ms [Cancelling] [${name}]`)\n if (externalStackTrace !== undefined) {\n this.logger.warn(`External Stack trace [${name}]:`, externalStackTrace)\n }\n }\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface ForgetConfig<T = any> {\n name?: string\n onCancel?: () => void\n onComplete?: (result: [T | undefined, Error | undefined]) => void\n onException?: (error: Error) => void\n timeout?: number\n}\n\nexport const defaultForgetConfig: ForgetConfig<unknown> = { timeout: 30_000 }\n","import { type Promisable } from '@xylabs/promise'\n\nimport type { ForgetConfig } from './ForgetConfig.ts'\nimport { ForgetPromise } from './ForgetPromise.ts'\n\n// used to explicitly launch an async function (or Promise) with awaiting it\nexport const forget = <T>(promise: Promisable<T>, config?: ForgetConfig<T>) => {\n ForgetPromise.forget<T>(promise, config)\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/ForgetConfig.ts","../../src/ForgetNodeConfig.ts","../../src/ForgetPromise.ts","../../src/ForgetPromiseNode.ts","../../src/forgetNode.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface ForgetConfig<T = any> {\n name?: string\n onCancel?: () => void\n onComplete?: (result: [T | undefined, Error | undefined]) => void\n onException?: (error: Error) => void\n timeout?: number\n}\n\nexport const defaultForgetConfig: ForgetConfig<unknown> = { timeout: 30_000 }\n","import { defaultForgetConfig, type ForgetConfig } from './ForgetConfig.ts'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface ForgetNodeConfig<T = any> extends ForgetConfig<T> {\n terminateOnException?: boolean // terminate the process on an exception that happens outside of the promise being forgotten\n terminateOnTimeout?: boolean // terminate the process if the promise times out\n}\n\nexport const defaultForgetNodeConfig: ForgetNodeConfig<unknown> = {\n ...defaultForgetConfig,\n terminateOnTimeout: false,\n terminateOnException: false,\n}\n","import { delay } from '@xylabs/delay'\nimport type { Logger } from '@xylabs/logger'\nimport type { Promisable, PromiseEx } from '@xylabs/promise'\nimport { isPromise } from '@xylabs/promise'\nimport { isNumber } from '@xylabs/typeof'\n\nimport { defaultForgetConfig, type ForgetConfig } from './ForgetConfig.ts'\n\ntype PromisableFunction<T> = () => Promisable<T>\n\n// eslint-disable-next-line unicorn/no-static-only-class\nexport class ForgetPromise {\n static activeForgets = 0\n static exceptedForgets = 0\n static logger: Logger = console\n\n static get active() {\n return this.activeForgets > 0\n }\n\n static async awaitInactive(interval = 100, timeout?: number) {\n let timeoutRemaining = timeout\n while (this.active) {\n await delay(interval)\n if (timeoutRemaining !== undefined) {\n timeoutRemaining -= interval\n if (timeoutRemaining <= 0) {\n return this.activeForgets\n }\n }\n }\n return 0\n }\n\n static exceptionHandler(error: Error, { name }: ForgetConfig, externalStackTrace?: string) {\n this.logger.error(`forget promise handler excepted [${name}]: ${error.message}`, error)\n if (externalStackTrace !== undefined) {\n this.logger.warn(`External Stack trace [${name}]:`, externalStackTrace)\n }\n }\n\n /**\n * Used to explicitly launch an async function (or Promise) with awaiting it\n * @param promise The promise to forget\n * @param config Configuration of forget settings\n */\n static forget<T>(promise: Promise<T> | PromiseEx<T> | PromisableFunction<T> | T, config?: ForgetConfig<T>) {\n const externalStackTrace = (new Error('Stack')).stack\n\n // default | global | provided priorities for config (not deep merge)\n const resolvedConfig = {\n ...defaultForgetConfig, ...globalThis.xy?.forget?.config, ...config,\n }\n const resolvedPromise = typeof promise === 'function' ? (promise as PromisableFunction<T>)() : promise\n if (isPromise(resolvedPromise)) {\n try {\n let completed = false\n this.activeForgets++\n\n const promiseWrapper = async () => {\n await resolvedPromise\n .then((result: T) => {\n this.activeForgets--\n completed = true\n resolvedConfig?.onComplete?.([result, undefined])\n })\n .catch((error) => {\n this.activeForgets--\n completed = true\n this.logger.error(`forgotten promise excepted [${config?.name ?? 'unknown'}]: ${error.message}`, error)\n resolvedConfig?.onComplete?.([undefined, error])\n })\n }\n\n const promises = [promiseWrapper()]\n\n // if there is a timeout, add it to the race\n const timeout = resolvedConfig.timeout ?? defaultForgetConfig.timeout\n if (isNumber(timeout)) {\n const timeoutFunc = async () => {\n await delay(timeout)\n if (!completed) {\n resolvedConfig.onCancel?.()\n this.timeoutHandler(timeout, resolvedConfig, externalStackTrace)\n }\n }\n promises.push(timeoutFunc())\n }\n\n const all = Promise.race(promises)\n\n all\n .then(() => {\n return\n })\n .catch(() => {\n return\n })\n } catch (ex) {\n this.exceptedForgets += 1\n resolvedConfig?.onException?.(ex as Error)\n this.exceptionHandler(ex as Error, resolvedConfig, externalStackTrace)\n }\n } else {\n // we do nothing here since if it was a non-promise, it already got invoked.\n return\n }\n }\n\n static timeoutHandler(time: number, { name = 'unknown' }: ForgetConfig, externalStackTrace?: string) {\n this.logger.error(`forget promise timeout out after ${time}ms [Cancelling] [${name}]`)\n if (externalStackTrace !== undefined) {\n this.logger.warn(`External Stack trace [${name}]:`, externalStackTrace)\n }\n }\n}\n","/// <reference types=\"node\" />\n\nimport type { Promisable } from '@xylabs/promise'\n\nimport { defaultForgetNodeConfig, type ForgetNodeConfig } from './ForgetNodeConfig.ts'\nimport { ForgetPromise } from './ForgetPromise.ts'\n\nexport class ForgetPromiseNode extends ForgetPromise {\n static override exceptionHandler(error: Error, config: ForgetNodeConfig, externalStackTrace?: string) {\n // default | global | provided priorities for config (not deep merge)\n super.exceptionHandler(error, config, externalStackTrace)\n if (config?.terminateOnException === true) {\n this.logger.error(`Attempting to terminate process [${config?.name ?? 'unknown'}]...`)\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(1)\n }\n }\n\n static override forget<T>(promise: Promisable<T>, config?: ForgetNodeConfig<T>) {\n const resolvedConfig = {\n ...defaultForgetNodeConfig, ...globalThis.xy?.forget?.config, ...config,\n }\n super.forget(promise, resolvedConfig)\n }\n\n static override timeoutHandler(time: number, config: ForgetNodeConfig, externalStackTrace?: string) {\n super.timeoutHandler(time, config, externalStackTrace)\n if (config?.terminateOnTimeout === true) {\n this.logger.error(`Attempting to terminate process [${config?.name ?? 'unknown'}]...`)\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(2)\n }\n }\n}\n","import { type Promisable } from '@xylabs/promise'\n\nimport type { ForgetNodeConfig } from './ForgetNodeConfig.ts'\nimport { ForgetPromiseNode } from './ForgetPromiseNode.ts'\n\n// used to explicitly launch an async function (or Promise) with awaiting it\nexport const forgetNode = <T>(promise: Promisable<T>, config?: ForgetNodeConfig<T>) => {\n ForgetPromiseNode.forget<T>(promise, config)\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,2 @@
1
+ export * from './node/index.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xylabs/forget",
3
- "version": "4.13.21",
3
+ "version": "4.13.23",
4
4
  "description": "Base functionality used throughout XY Labs TypeScript/JavaScript libraries",
5
5
  "keywords": [
6
6
  "forget",
@@ -29,11 +29,11 @@
29
29
  "exports": {
30
30
  ".": {
31
31
  "node": {
32
- "types": "./dist/node/node/index.d.ts",
32
+ "types": "./dist/node/index.d.ts",
33
33
  "source": "./src/node/index.ts",
34
34
  "default": "./dist/node/index.mjs"
35
35
  },
36
- "types": "./dist/node/node/index.d.ts",
36
+ "types": "./dist/node/index.d.ts",
37
37
  "source": "./src/node/index.ts",
38
38
  "default": "./dist/node/index.mjs"
39
39
  },
@@ -41,16 +41,16 @@
41
41
  },
42
42
  "module": "./dist/node/index.mjs",
43
43
  "source": "./src/node/index.ts",
44
- "types": "./dist/node/node/index.d.ts",
44
+ "types": "./dist/node/index.d.ts",
45
45
  "files": [
46
46
  "dist",
47
47
  "src"
48
48
  ],
49
49
  "dependencies": {
50
- "@xylabs/delay": "^4.13.21",
51
- "@xylabs/logger": "^4.13.21",
52
- "@xylabs/promise": "^4.13.21",
53
- "@xylabs/typeof": "^4.13.21"
50
+ "@xylabs/delay": "^4.13.23",
51
+ "@xylabs/logger": "^4.13.23",
52
+ "@xylabs/promise": "^4.13.23",
53
+ "@xylabs/typeof": "^4.13.23"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@xylabs/ts-scripts-yarn3": "^7.0.0",
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './node/index.ts'