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 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
- 2: QueueNode<T>;
13
+ 3: QueueNode<T>;
14
14
  /**
15
15
  * The tail of the value queue
16
16
  */
17
- 3: QueueNode<T>;
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 null if no message is currently in queue
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{acquire as lockAcquire,release as lockRelease,released as lockReleased}from"./lock.js";export let init=()=>{let resolveQu=[null];let qu=[null];return[resolveQu,resolveQu,qu,qu]};export let send=(c,t)=>{if(lockReleased(c))c[2]=c[2][0]=[null,t];else lockRelease(c,t)};export let recieve=(c)=>c[3][0]!==null?Promise.resolve((c[3]=c[3][0])[1]):lockAcquire(c);export let poll=(c)=>c[3][0]!==null?(c[3]=c[3][0])[1]:undefined;export{flush}from"./lock.js";
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){return new Promise((res)=>{head=head[0]=[null,res]})}if(!scheduled){scheduled=true;setTimeout(unlock,ms)}cur--;return nextTick}};
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 acquire=(lock)=>new Promise((res)=>{lock[0]=lock[0][0]=[null,res]});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]()};
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",
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
- "./dropping-queue": "./dropping-queue.js",
25
- "./channel": "./channel.js",
22
+ "./sliding-queue": "./sliding-queue.js",
23
+ "./topic": "./topic.js",
26
24
  ".": "./index.js",
27
- "./fiber": "./fiber.js",
28
25
  "./lock": "./lock.js",
29
- "./semaphore": "./semaphore.js",
30
- "./topic": "./topic.js"
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<undefined> {
8
+ export interface Semaphore extends Lock<void> {
9
9
  /**
10
10
  * Current remaining process allowed
11
11
  */
12
- 2: number;
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{acquire as lockAcquire,release as lockRelease}from"./lock.js";export let init=(n)=>{let root=[null];return[root,root,n]};export let acquire=(s)=>{s[2]--;return s[2]>=0?resolvedPromise:lockAcquire(s)};export let release=(s)=>{if(s[2]<0)lockRelease(s);s[2]++};export let bind=(f,s)=>async(...a)=>{s[2]--;if(s[2]<0)await acquire(s);try{return await f(...a)}finally{if(s[2]<0)release(s);s[2]++}};
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]++}};