ciorent 0.4.2 → 0.5.0
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/fiber.d.ts +1 -1
- package/fiber.js +1 -1
- package/index.d.ts +6 -0
- package/index.js +1 -1
- package/package.json +5 -5
- package/queue.d.ts +2 -5
- package/rate-limit.d.ts +25 -0
- package/rate-limit.js +1 -0
- package/semaphore.js +1 -1
- package/stream.d.ts +0 -27
- package/stream.js +0 -1
package/fiber.d.ts
CHANGED
@@ -51,7 +51,7 @@ export declare function join<T extends Process>(t: T): Generator<Awaited<T[0]>,
|
|
51
51
|
* Wait for a fiber to finish and retrieve its result
|
52
52
|
* @param t
|
53
53
|
*/
|
54
|
-
export declare const
|
54
|
+
export declare const complete: <T extends Process>(t: T) => T[0];
|
55
55
|
/**
|
56
56
|
* Mount child fiber lifetime to parent lifetime
|
57
57
|
* @param child
|
package/fiber.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
import{nextTick,sleep}from"./index.js";export let running=e=>e[1]===1;export let completed=e=>e[1]===2;export let interrupted=e=>e[1]===3;let invoke=async(f,p)=>{await nextTick;try{let e=f.next();
|
1
|
+
import{nextTick,sleep}from"./index.js";export let running=e=>e[1]===1;export let completed=e=>e[1]===2;export let interrupted=e=>e[1]===3;let invoke=async(f,p)=>{await nextTick;try{let e=f.next();while(!e.done){let m=await e.value;if(p[1]===3)return;e=f.next(m)}p[1]=2;return e.value}finally{if(p[1]!==2)p[1]=3;p[2].forEach(interrupt)}};export let fn=e=>e;export let spawn=(e,...f)=>{let p=[null,1,[]];p[0]=invoke(e(p,...f),p);return p};export let interrupt=e=>{if(e[1]!==2)e[1]=3};export let timeout=async(e,p)=>{await sleep(p);interrupt(e)};export function*join(e){return yield e[0]}export let complete=e=>e[0];export let mount=(e,f)=>{f[2].push(e)};export let control=(e,f)=>{f.addEventListener(`abort`,()=>{interrupt(e)})};export function*unwrap(e){return yield e}
|
package/index.d.ts
CHANGED
@@ -12,6 +12,12 @@ export declare const nextTick: Promise<void>;
|
|
12
12
|
*/
|
13
13
|
export declare const sleep: (ms: number) => Promise<void>;
|
14
14
|
/**
|
15
|
+
* Timeout a promise after ms milliseconds
|
16
|
+
* @param promise - Target promise to timeout
|
17
|
+
* @param ms - Timeout duration
|
18
|
+
*/
|
19
|
+
export declare const timeout: <T>(promise: Promise<T>, ms: number) => Promise<T | void>;
|
20
|
+
/**
|
15
21
|
* Sleep for a duration synchronously.
|
16
22
|
*
|
17
23
|
* This method blocks the current thread.
|
package/index.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export let nextTick=Promise.resolve();export let sleep=globalThis.Bun?.sleep??globalThis.process?.getBuiltinModule?.(`timers/promises`).setTimeout??(e=>new Promise(t=>{setTimeout(t,e)}));let sharedBuf=new Int32Array(new SharedArrayBuffer(4));export let sleepSync=globalThis.Bun?.sleepSync??(e=>{Atomics.wait(sharedBuf,0,0,e)});export let sequential=async(e,t,...n)=>{for(let r=0;r<e;r++)await t(...n,r)};export let spawn=(e,t,...n)=>{let r=Array(e);for(let i=0;i<e;i++)r[i]=t(...n,i);return r};export let throttle=(e,t)=>{let n=[null]
|
1
|
+
export let nextTick=Promise.resolve();export let sleep=globalThis.Bun?.sleep??globalThis.process?.getBuiltinModule?.(`timers/promises`).setTimeout??(e=>new Promise(t=>{setTimeout(t,e)}));export let timeout=(e,n)=>Promise.race([e,sleep(n)]);let sharedBuf=new Int32Array(new SharedArrayBuffer(4));export let sleepSync=globalThis.Bun?.sleepSync??(e=>{Atomics.wait(sharedBuf,0,0,e)});export let sequential=async(e,t,...n)=>{for(let r=0;r<e;r++)await t(...n,r)};export let spawn=(e,t,...n)=>{let r=new Array(e);for(let i=0;i<e;i++)r[i]=t(...n,i);return r};export let throttle=(e,t)=>{let n=[null];let r=n;let i=e=>{n=n[0]=[null,e]};let a=t;let o=false;let s=()=>{a=t;if(r===n){o=false;return}do{a--;(r=r[0])[1]()}while(a>0&&r!==n);setTimeout(s,e)};return async()=>{if(a===0)return new Promise(i);if(!o){o=true;setTimeout(s,e)}a--}};
|
package/package.json
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
{
|
2
2
|
"name": "ciorent",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.5.0",
|
4
4
|
"description": "A lightweight, low-overhead concurrency library",
|
5
5
|
"homepage": "https://ciorent.netlify.app",
|
6
6
|
"repository": {
|
7
|
-
"type": "
|
8
|
-
"url": "https://github.com/re-utils/ciorent"
|
7
|
+
"type": "git",
|
8
|
+
"url": "git+https://github.com/re-utils/ciorent.git"
|
9
9
|
},
|
10
10
|
"keywords": ["low-overhead", "lightweight", "concurrency", "cross-runtime"],
|
11
11
|
"license": "MIT",
|
@@ -16,7 +16,7 @@
|
|
16
16
|
"./queue": "./queue.js",
|
17
17
|
"./fiber": "./fiber.js",
|
18
18
|
".": "./index.js",
|
19
|
-
"./
|
20
|
-
"./
|
19
|
+
"./rate-limit": "./rate-limit.js",
|
20
|
+
"./semaphore": "./semaphore.js"
|
21
21
|
}
|
22
22
|
}
|
package/queue.d.ts
CHANGED
@@ -1,11 +1,8 @@
|
|
1
1
|
/**
|
2
|
-
* @module Queue
|
2
|
+
* @module Queue types
|
3
|
+
* @private
|
3
4
|
*/
|
4
5
|
/**
|
5
|
-
* Describe a fixed-sized queue
|
6
|
-
*/
|
7
|
-
export type FixedQueue<T extends {} = {}> = [buffer: (T | undefined | null)[], capacity: number, head: number, tail: number];
|
8
|
-
/**
|
9
6
|
* Describe a queue node (singly linked list node)
|
10
7
|
*/
|
11
8
|
export type QueueNode<T> = [next: QueueNode<T> | null, value: T];
|
package/rate-limit.d.ts
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
/**
|
2
|
+
* @module Rate limit
|
3
|
+
*/
|
4
|
+
/**
|
5
|
+
* Describe a rate limiter
|
6
|
+
*/
|
7
|
+
export type Limiter = (calls: number, ms: number) => () => boolean;
|
8
|
+
/**
|
9
|
+
* Fixed window strategy
|
10
|
+
* @param limit
|
11
|
+
* @param ms
|
12
|
+
*/
|
13
|
+
export declare const fixed: Limiter;
|
14
|
+
/**
|
15
|
+
* Sliding window strategy
|
16
|
+
* @param limit
|
17
|
+
* @param ms
|
18
|
+
*/
|
19
|
+
export declare const sliding: Limiter;
|
20
|
+
/**
|
21
|
+
* Token bucket strategy
|
22
|
+
* @param limit
|
23
|
+
* @param ms
|
24
|
+
*/
|
25
|
+
export declare const bucket: Limiter;
|
package/rate-limit.js
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
export let fixed=(e,t)=>{let n=e;let r=()=>{n=e};return()=>{if(n===0)return false;if(n===e)setTimeout(r,t);n--;return true}};export let sliding=(e,t)=>{let n=e;let r=()=>{n++};return()=>{if(n===0)return false;n--;setTimeout(r,t);return true}};export let bucket=(e,t)=>{let n=e;t/=e;let r=()=>{n++;if(n<e)setTimeout(r,t)};return()=>{if(n===0)return false;if(n===e)setTimeout(r,t);n--;return true}};
|
package/semaphore.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export let init=e=>{let n=[null]
|
1
|
+
export let init=e=>{let n=[null];let r=[n,n,e=>{r[0]=r[0][0]=[null,e]},e];return r};export let acquire=async e=>{e[3]--;if(e[3]<0)return new Promise(e[2])};export let release=e=>{if(e[3]<0)(e[1]=e[1][0])[1]();e[3]++};export let bind=(e,n)=>async(...r)=>{n[3]--;if(n[3]<0)await new Promise(n[2]);try{return await e(...r)}finally{if(n[3]<0)(n[1]=n[1][0])[1]();n[3]++}};
|
package/stream.d.ts
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @module Streams
|
3
|
-
*/
|
4
|
-
import type { PromiseFn, UnboundedQueue } from "./queue.js";
|
5
|
-
/**
|
6
|
-
* Describe a stream
|
7
|
-
*/
|
8
|
-
export type Stream<T extends {} = {}> = [...UnboundedQueue<T | ((val?: T) => void)>, callback: PromiseFn<T>, queueing: boolean];
|
9
|
-
/**
|
10
|
-
* Create a stream
|
11
|
-
*/
|
12
|
-
export declare const init: <T extends {} = {}>() => Stream<T>;
|
13
|
-
/**
|
14
|
-
* Write a value to the stream
|
15
|
-
* @param s
|
16
|
-
* @param v
|
17
|
-
*/
|
18
|
-
export declare const write: <T extends {} = {}>(s: Stream<T>, v: T) => void;
|
19
|
-
/**
|
20
|
-
* Read a value from the stream
|
21
|
-
* @param s
|
22
|
-
*/
|
23
|
-
export declare const read: <T extends {} = {}>(s: Stream<T>) => Promise<T | undefined>;
|
24
|
-
/**
|
25
|
-
* Release all pending read with undefined
|
26
|
-
*/
|
27
|
-
export declare const flush: (s: Stream) => void;
|
package/stream.js
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
export let init=()=>{let e=[null],r=[e,e,e=>{r[0]=r[0][0]=[null,e]},!1];return r};export let write=(e,r)=>{if(!e[3]){if(e[1][0]!==null){(e[1]=e[1][0])[1](r);return}e[3]=!0}e[0]=e[0][0]=[null,r]};export let read=async e=>e[3]?(e[1]=e[1][0],e[1][0]===null&&(e[3]=!1),e[1][1]):new Promise(e[2]);export let flush=e=>{if(!e[3])for(;e[1][0]!==null;)(e[1]=e[1][0])[1]()};
|