ciorent 0.3.3 → 0.3.4
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/channel.d.ts +3 -3
- package/channel.js +1 -1
- package/index.js +1 -1
- package/lock.d.ts +0 -5
- package/lock.js +1 -1
- package/package.json +8 -8
- package/semaphore.d.ts +2 -2
- package/semaphore.js +1 -1
package/channel.d.ts
CHANGED
@@ -10,11 +10,11 @@ export interface Channel<T = any> extends Lock<T> {
|
|
10
10
|
/**
|
11
11
|
* The head of the value queue
|
12
12
|
*/
|
13
|
-
|
13
|
+
3: QueueNode<T>;
|
14
14
|
/**
|
15
15
|
* The tail of the value queue
|
16
16
|
*/
|
17
|
-
|
17
|
+
4: QueueNode<T>;
|
18
18
|
}
|
19
19
|
/**
|
20
20
|
* Create a channel
|
@@ -32,7 +32,7 @@ export declare const send: <T>(c: Channel<T>, t: T) => void;
|
|
32
32
|
*/
|
33
33
|
export declare const recieve: <T>(c: Channel<T>) => Promise<T | undefined>;
|
34
34
|
/**
|
35
|
-
* Recieve a message from a channel, return
|
35
|
+
* Recieve a message from a channel, return undefined if no message is currently in queue
|
36
36
|
* @param c
|
37
37
|
*/
|
38
38
|
export declare const poll: <T>(c: Channel<T>) => T | undefined;
|
package/channel.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
import{
|
1
|
+
import{release as lockRelease,released as lockReleased}from"./lock.js";export let init=()=>{let resolveQu=[null];let qu=[null];let chan=[resolveQu,resolveQu,(res)=>{chan[0]=chan[0][0]=[null,res]},qu,qu];return chan};export let send=(c,t)=>{if(lockReleased(c))c[3]=c[3][0]=[null,t];else lockRelease(c,t)};export let recieve=(c)=>c[4][0]!==null?Promise.resolve((c[4]=c[4][0])[1]):new Promise(c[2]);export let poll=(c)=>c[4][0]!==null?(c[4]=c[4][0])[1]:undefined;export{flush}from"./lock.js";
|
package/index.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export let nextTick=Promise.resolve();export let sleep=globalThis.Bun?.sleep??globalThis.process?.getBuiltinModule?.("timers/promises").setTimeout??((ms)=>new Promise((res)=>{setTimeout(res,ms)}));let sharedBuf=new Int32Array(new SharedArrayBuffer(4));export let sleepSync=globalThis.Bun?.sleepSync??((ms)=>{Atomics.wait(sharedBuf,0,0,ms)});export let sequential=async(n,task,...args)=>{for(let i=0;i<n;i++)await task(...args,i)};export let spawn=(n,task,...args)=>{let arr=new Array(n);for(let i=0;i<n;i++)arr[i]=task(...args,i);return arr};export let debounce=(f,ms)=>{let id;return(...a)=>{clearTimeout(id);id=setTimeout(f,ms,...a)}};export let throttle=(ms,limit)=>{let head=[null];let tail=head;let cur=limit;let scheduled=false;let unlock=()=>{cur=limit;if(tail===head){scheduled=false;return}do{cur--;(tail=tail[0])[1]()}while(cur>0&&tail!==head);setTimeout(unlock,ms)};return()=>{if(cur===0)
|
1
|
+
export let nextTick=Promise.resolve();export let sleep=globalThis.Bun?.sleep??globalThis.process?.getBuiltinModule?.("timers/promises").setTimeout??((ms)=>new Promise((res)=>{setTimeout(res,ms)}));let sharedBuf=new Int32Array(new SharedArrayBuffer(4));export let sleepSync=globalThis.Bun?.sleepSync??((ms)=>{Atomics.wait(sharedBuf,0,0,ms)});export let sequential=async(n,task,...args)=>{for(let i=0;i<n;i++)await task(...args,i)};export let spawn=(n,task,...args)=>{let arr=new Array(n);for(let i=0;i<n;i++)arr[i]=task(...args,i);return arr};export let debounce=(f,ms)=>{let id;return(...a)=>{clearTimeout(id);id=setTimeout(f,ms,...a)}};export let throttle=(ms,limit)=>{let head=[null];let tail=head;let promiseCb=(res)=>{head=head[0]=[null,res]};let cur=limit;let scheduled=false;let unlock=()=>{cur=limit;if(tail===head){scheduled=false;return}do{cur--;(tail=tail[0])[1]()}while(cur>0&&tail!==head);setTimeout(unlock,ms)};return()=>{if(cur===0)return new Promise(promiseCb);if(!scheduled){scheduled=true;setTimeout(unlock,ms)}cur--;return nextTick}};
|
package/lock.d.ts
CHANGED
@@ -15,11 +15,6 @@ export interface Lock<T = any> {
|
|
15
15
|
*/
|
16
16
|
1: QueueNode<(value?: T) => void>;
|
17
17
|
}
|
18
|
-
/**
|
19
|
-
* Acquire an item
|
20
|
-
* @param lock
|
21
|
-
*/
|
22
|
-
export declare const acquire: <T>(lock: Lock<T>) => Promise<T | undefined>;
|
23
18
|
/**
|
24
19
|
* Release an item
|
25
20
|
* @param lock
|
package/lock.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export let
|
1
|
+
export let release=(lock,value)=>{(lock[1]=lock[1][0])[1](value)};export let released=(lock)=>lock[1][0]===null;export let flush=(lock)=>{while(lock[1][0]!==null)(lock[1]=lock[1][0])[1]()};
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "ciorent",
|
3
|
-
"version": "0.3.
|
3
|
+
"version": "0.3.4",
|
4
4
|
"description": "A lightweight, low-overhead concurrency library",
|
5
5
|
"homepage": "https://ciorent.netlify.app",
|
6
6
|
"repository": {
|
@@ -18,15 +18,15 @@
|
|
18
18
|
"main": "./index.js",
|
19
19
|
"types": "./index.d.ts",
|
20
20
|
"exports": {
|
21
|
-
"./sliding-queue": "./sliding-queue.js",
|
22
|
-
"./queue": "./queue.js",
|
23
21
|
"./defer": "./defer.js",
|
24
|
-
"./
|
25
|
-
"./
|
22
|
+
"./sliding-queue": "./sliding-queue.js",
|
23
|
+
"./topic": "./topic.js",
|
26
24
|
".": "./index.js",
|
27
|
-
"./fiber": "./fiber.js",
|
28
25
|
"./lock": "./lock.js",
|
29
|
-
"./
|
30
|
-
"./
|
26
|
+
"./channel": "./channel.js",
|
27
|
+
"./dropping-queue": "./dropping-queue.js",
|
28
|
+
"./fiber": "./fiber.js",
|
29
|
+
"./queue": "./queue.js",
|
30
|
+
"./semaphore": "./semaphore.js"
|
31
31
|
}
|
32
32
|
}
|
package/semaphore.d.ts
CHANGED
@@ -5,11 +5,11 @@ import { type Lock } from './lock.js';
|
|
5
5
|
/**
|
6
6
|
* Describe a semaphore
|
7
7
|
*/
|
8
|
-
export interface Semaphore extends Lock<
|
8
|
+
export interface Semaphore extends Lock<void> {
|
9
9
|
/**
|
10
10
|
* Current remaining process allowed
|
11
11
|
*/
|
12
|
-
|
12
|
+
3: number;
|
13
13
|
}
|
14
14
|
/**
|
15
15
|
* Create a semaphore that allows n accesses
|
package/semaphore.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
import{nextTick as resolvedPromise}from"./index.js";import{
|
1
|
+
import{nextTick as resolvedPromise}from"./index.js";import{release as lockRelease}from"./lock.js";export let init=(n)=>{let root=[null];let sem=[root,root,(res)=>{sem[0]=sem[0][0]=[null,res]},n];return sem};export let acquire=(s)=>{s[3]--;return s[3]>=0?resolvedPromise:new Promise(s[2])};export let release=(s)=>{if(s[3]<0)lockRelease(s);s[3]++};export let bind=(f,s)=>async(...a)=>{s[3]--;if(s[3]<0)await new Promise(s[2]);try{return await f(...a)}finally{if(s[3]<0)release(s);s[3]++}};
|