ciorent 1.0.4 → 1.0.6

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/deferred.d.ts ADDED
@@ -0,0 +1,22 @@
1
+ export interface Deferred<T> {
2
+ get: Promise<T>;
3
+ set: T extends undefined ? (value?: T) => void : (value: T) => void;
4
+ }
5
+ /**
6
+ * Create a deferred value.
7
+ *
8
+ * @example
9
+ * const result = deferred.init();
10
+ *
11
+ * // Set result value, unblock all
12
+ * // coroutines waiting for the results
13
+ * result.set(10);
14
+ *
15
+ * // Get result value
16
+ * await result.get;
17
+ */
18
+ export declare const init: <T>() => Deferred<T>;
19
+ /**
20
+ * Reset a deferred value.
21
+ */
22
+ export declare const reset: (value: Deferred<any>) => void;
package/deferred.js ADDED
@@ -0,0 +1 @@
1
+ import{loadedResolve,loadResolve}from"./utils.js";export let init=()=>({get:new Promise(loadResolve),set:loadedResolve});export let reset=value=>{value.get=new Promise(loadResolve);value.set=loadedResolve};
package/index.d.ts CHANGED
@@ -13,13 +13,13 @@ export declare const nextTick: Promise<void>;
13
13
  */
14
14
  export declare const state: (p: Promise<any>) => Promise<0 | 1 | 2>;
15
15
  /**
16
- * Check whether a value is awaitable
16
+ * Check whether a value is awaitable.
17
17
  * @param p
18
18
  * @returns
19
19
  */
20
20
  export declare const isThenable: <T>(p: unknown) => p is PromiseLike<T>;
21
21
  /**
22
- * Timeout a promise
22
+ * Timeout a promise.
23
23
  * @param p
24
24
  * @param ms
25
25
  */
@@ -38,6 +38,7 @@ export declare const sleep: (ms: number) => Promise<void>;
38
38
  * @param ms - Sleep duration in milliseconds
39
39
  */
40
40
  export declare const sleepSync: (ms: number) => void;
41
+ export * as deferred from "./deferred.js";
41
42
  export * as mutex from "./mutex.js";
42
43
  export * as limit from "./rate-limit.js";
43
44
  export * as semaphore from "./semaphore.js";
package/index.js CHANGED
@@ -1 +1 @@
1
- import{loadedReject,loadedResolve,loadResolve,loadResolvers}from"./utils.js";export let nextTick=Promise.resolve();let getFinishedState=async(s,p)=>{try{await p;s[0]=1}catch(e){s[0]=0;return p}};export let state=async p=>{let res=[2];getFinishedState(res,p);await nextTick;return res[0]};export let isThenable=p=>p!==null&&typeof p===`object`&&!Array.isArray(p)&&typeof p.then===`function`;let resolvePromise=async(res,rej,p)=>{try{res(await p)}catch(e){rej(e)}};export let timeout=(p,ms)=>{let promise=new Promise(loadResolvers);setTimeout(loadedResolve,ms);resolvePromise(loadedResolve,loadedReject,p);return promise};export let sleep=globalThis.Bun?.sleep??globalThis.process?.getBuiltinModule?.(`timers/promises`).setTimeout??(ms=>{let promise=new Promise(loadResolve);setTimeout(loadedResolve,ms);return promise});let sharedBuf=new Int32Array(new SharedArrayBuffer(4));export let sleepSync=globalThis.Bun?.sleepSync??(ms=>{Atomics.wait(sharedBuf,0,0,ms)});export*as mutex from"./mutex.js";export*as limit from"./rate-limit.js";export*as semaphore from"./semaphore.js";export*as signal from"./signal.js";
1
+ import{loadedReject,loadedResolve,loadResolve,loadResolvers}from"./utils.js";export let nextTick=Promise.resolve();let getFinishedState=async(s,p)=>{try{await p;s[0]=1}catch(e){s[0]=0;return p}};export let state=async p=>{let res=[2];getFinishedState(res,p);await nextTick;return res[0]};export let isThenable=p=>p!==null&&typeof p===`object`&&!Array.isArray(p)&&typeof p.then===`function`;export let timeout=(p,ms)=>{let promise=new Promise(loadResolvers);setTimeout(loadedResolve,ms);p.then(loadedResolve,loadedReject);return promise};export let sleep=globalThis.Bun?.sleep??globalThis.process?.getBuiltinModule?.(`timers/promises`).setTimeout??(ms=>{let promise=new Promise(loadResolve);setTimeout(loadedResolve,ms);return promise});let sharedBuf=new Int32Array(new SharedArrayBuffer(4));export let sleepSync=globalThis.Bun?.sleepSync??(ms=>{Atomics.wait(sharedBuf,0,0,ms)});export*as deferred from"./deferred.js";export*as mutex from"./mutex.js";export*as limit from"./rate-limit.js";export*as semaphore from"./semaphore.js";export*as signal from"./signal.js";
package/mutex.js CHANGED
@@ -1 +1 @@
1
- import{nextTick}from"./index.js";import{chainLock,loadedResolve,loadResolve}from"./utils.js";export let init=()=>[nextTick];export let acquire=async mu=>{let currentLock=mu[0];mu[0]=new Promise(loadResolve);let release=loadedResolve;await currentLock;return release};export let run=(mu,fn,...args)=>mu[0]=chainLock(mu[0],fn,...args);
1
+ import{nextTick}from"./index.js";import{loadedResolve,loadResolve}from"./utils.js";export let init=()=>[nextTick];export let acquire=async mu=>{let currentLock=mu[0];mu[0]=new Promise(loadResolve);let release=loadedResolve;await currentLock;return release};let chainLock=async(lock,fn,...args)=>{try{await lock}finally{return fn(...args)}};export let run=(mu,fn,...args)=>mu[0]=chainLock(mu[0],fn,...args);
package/package.json CHANGED
@@ -1,21 +1 @@
1
- {
2
- "name": "ciorent",
3
- "version": "1.0.4",
4
- "description": "A lightweight, low-overhead concurrency library",
5
- "homepage": "https://re-utils.pages.dev/concurrency",
6
- "repository": {
7
- "type": "git",
8
- "url": "git+https://github.com/re-utils/ciorent.git"
9
- },
10
- "keywords": ["low-overhead", "lightweight", "concurrency", "cross-runtime"],
11
- "license": "MIT",
12
- "type": "module",
13
- "exports": {
14
- "./utils": "./utils.js",
15
- ".": "./index.js",
16
- "./semaphore": "./semaphore.js",
17
- "./mutex": "./mutex.js",
18
- "./rate-limit": "./rate-limit.js",
19
- "./signal": "./signal.js"
20
- }
21
- }
1
+ {"name":"ciorent","version":"1.0.6","description":"A lightweight, low-overhead concurrency library","homepage":"https://re-utils.pages.dev/concurrency","repository":{"type":"git","url":"git+https://github.com/re-utils/ciorent.git"},"keywords":["low-overhead","lightweight","concurrency","cross-runtime"],"license":"MIT","type":"module","exports":{"./utils":"./utils.js","./rate-limit":"./rate-limit.js","./signal":"./signal.js","./mutex":"./mutex.js","./deferred":"./deferred.js",".":"./index.js","./semaphore":"./semaphore.js"}}
package/rate-limit.d.ts CHANGED
@@ -1,21 +1,21 @@
1
1
  /**
2
- * Describe a rate limiter
2
+ * Describe a rate limiter.
3
3
  */
4
4
  export type Limiter = (limit: number, ms: number) => () => boolean;
5
5
  /**
6
- * Fixed window strategy
6
+ * Fixed window strategy.
7
7
  * @param limit
8
8
  * @param ms
9
9
  */
10
10
  export declare const fixedWindow: Limiter;
11
11
  /**
12
- * Sliding window strategy
12
+ * Sliding window strategy.
13
13
  * @param limit
14
14
  * @param ms
15
15
  */
16
16
  export declare const slidingWindow: Limiter;
17
17
  /**
18
- * Token bucket strategy
18
+ * Token bucket strategy.
19
19
  * @param limit
20
20
  * @param ms
21
21
  */
package/signal.d.ts CHANGED
@@ -1,37 +1,37 @@
1
1
  /**
2
- * Describe a signal
2
+ * Describe a signal.
3
3
  */
4
4
  export type Signal = [interrupted: boolean, ...parents: Signal[]];
5
5
  /**
6
- * Create a signal
6
+ * Create a signal.
7
7
  */
8
8
  export declare const init: () => Signal;
9
9
  /**
10
- * Create a signal that aborts when any of the input signals abort
10
+ * Create a signal that aborts when any of the input signals abort.
11
11
  * @param sigs
12
12
  */
13
13
  export declare const any: (signals: Signal[]) => Signal;
14
14
  /**
15
- * Create a signal that when interrupted will interrupt a group of other signals
15
+ * Create a signal that when interrupted will interrupt a group of other signals.
16
16
  */
17
17
  export declare const group: (signals: Signal[]) => Signal;
18
18
  /**
19
- * Check whether the signal has been aborted
19
+ * Check whether the signal has been aborted.
20
20
  * @param t
21
21
  */
22
22
  export declare const aborted: (t: Signal) => boolean;
23
23
  /**
24
- * Abort a signal
24
+ * Abort a signal.
25
25
  * @param t
26
26
  */
27
27
  export declare const abort: (t: Signal) => void;
28
28
  /**
29
- * Abort a signal after a duration
29
+ * Abort a signal after a duration.
30
30
  * @param t
31
31
  */
32
32
  export declare const abortAfter: (ms: number, t: Signal) => void;
33
33
  /**
34
- * Create a signal that aborts after ms
34
+ * Create a signal that aborts after ms.
35
35
  * @param ms
36
36
  */
37
37
  export declare const timeout: (ms: number) => Signal;
package/utils.d.ts CHANGED
@@ -3,8 +3,3 @@ export declare let loadedResolve: (res?: any) => void;
3
3
  export declare let loadedReject: (reason?: any) => void;
4
4
  export declare const loadResolvers: (res: (value?: any) => void, rej: (reason?: any) => void) => void;
5
5
  export declare const loadResolve: (res: (value?: any) => void) => void;
6
- /**
7
- * Unswallow promise error.
8
- */
9
- export declare const unswallow: (p: Promise<any>) => Promise<any>;
10
- export declare const chainLock: (lock: Promise<void>, fn: any, ...args: any[]) => Promise<any>;
package/utils.js CHANGED
@@ -1 +1 @@
1
- export let loadedResolve;export let loadedReject;export let loadResolvers=(res,rej)=>{loadedResolve=res;loadedReject=rej};export let loadResolve=res=>{loadedResolve=res};export let unswallow=async p=>p;export let chainLock=async(lock,fn,...args)=>{try{await lock}catch{unswallow(lock)}return fn(...args)};
1
+ export let loadedResolve;export let loadedReject;export let loadResolvers=(res,rej)=>{loadedResolve=res;loadedReject=rej};export let loadResolve=res=>{loadedResolve=res};