diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3ec4a65..67432dc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1846,7 +1846,7 @@ packages: '@web/parse5-utils': 2.1.0 chokidar: 3.5.3 clone: 2.1.2 - es-module-lexer: 1.3.1 + es-module-lexer: 1.4.1 get-stream: 6.0.1 is-stream: 2.0.1 isbinaryfile: 5.0.0 @@ -2891,6 +2891,10 @@ packages: resolution: {integrity: sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==} dev: true + /es-module-lexer@1.4.1: + resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} + dev: true + /es-set-tostringtag@2.0.2: resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} engines: {node: '>= 0.4'} diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 4cc4f8f..b12a18e 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@push.rocks/lik', - version: '6.0.6', + version: '6.0.7', description: 'light little helpers for node' } diff --git a/ts/backpressuredarray.ts b/ts/backpressuredarray.ts new file mode 100644 index 0000000..8e16233 --- /dev/null +++ b/ts/backpressuredarray.ts @@ -0,0 +1,34 @@ +import * as plugins from './lik.plugins.js'; + +export class BackpressuredArray { + private data: T[]; + private highWaterMark: number; + public hasSpace: plugins.smartrx.rxjs.Subject; + + constructor(highWaterMark: number = 16) { + this.data = []; + this.highWaterMark = highWaterMark; + this.hasSpace = new plugins.smartrx.rxjs.Subject(); + } + + push(item: T): boolean { + this.data.push(item); + const spaceAvailable = this.checkSpaceAvailable(); + if (spaceAvailable) { + this.hasSpace.next(); + } + return spaceAvailable + } + + shift(): T | undefined { + const item = this.data.shift(); + if (this.checkSpaceAvailable()) { + this.hasSpace.next(); + } + return item; + } + + checkSpaceAvailable(): boolean { + return this.data.length < this.highWaterMark; + } +} diff --git a/ts/index.ts b/ts/index.ts index 48c7c83..9625eb3 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -1,4 +1,5 @@ export * from './lik.asyncexecutionstack.js'; +export * from './backpressuredarray.js'; export * from './lik.fastmap.js'; export * from './lik.interestmap.js'; export * from './lik.interestmap.interest.js';