@nxtedition/shared 1.4.2 → 2.0.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.
Files changed (2) hide show
  1. package/index.js +10 -36
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -62,11 +62,9 @@ export function writer({ sharedState, sharedBuffer }) {
62
62
  const state = new Int32Array(sharedState)
63
63
  const buffer = Buffer.from(sharedBuffer)
64
64
  const size = buffer.byteLength
65
- const queue = []
66
65
 
67
66
  let readPos = 0
68
67
  let writePos = 0
69
- let flushing = null
70
68
 
71
69
  function tryWrite(maxLen, fn, opaque) {
72
70
  readPos = Atomics.load(state, READ_INDEX)
@@ -105,35 +103,16 @@ export function writer({ sharedState, sharedBuffer }) {
105
103
  return true
106
104
  }
107
105
 
108
- function flush() {
109
- if (queue.length && !flushing) {
110
- flushing = _flush()
111
- }
112
- return flushing
113
- }
106
+ async function _write(len, fn, opaque) {
107
+ const buf = Buffer.allocUnsafe(len)
108
+ buf.subarray(0, fn(buf, opaque))
114
109
 
115
- async function _flush() {
116
- while (queue.length) {
117
- const buf = queue[0]
118
- while (
119
- !tryWrite(
120
- buf.byteLength,
121
- (dst, buf) => {
122
- dst.set(buf)
123
- return buf.byteLength
124
- },
125
- buf
126
- )
127
- ) {
128
- const { async, value } = Atomics.waitAsync(state, READ_INDEX, readPos)
129
- if (async) {
130
- await value
131
- }
110
+ while (!tryWrite(len, (dst, buf) => buf.copy(dst), buf)) {
111
+ const { async, value } = Atomics.waitAsync(state, READ_INDEX, readPos)
112
+ if (async) {
113
+ await value
132
114
  }
133
- queue.shift()
134
115
  }
135
-
136
- flushing = null
137
116
  }
138
117
 
139
118
  function write(...args) {
@@ -175,18 +154,13 @@ export function writer({ sharedState, sharedBuffer }) {
175
154
  opaque = args
176
155
  }
177
156
 
178
- if (!queue.length && tryWrite(len, fn, opaque)) {
179
- return
157
+ if (!tryWrite(len, fn, opaque)) {
158
+ return _write(len, fn, opaque)
180
159
  }
181
-
182
- const buf = Buffer.allocUnsafe(len)
183
- queue.push(buf.subarray(0, fn(buf, opaque)))
184
-
185
- return flush()
186
160
  }
187
161
 
188
162
  write.write = write
189
- write.flush = flush
163
+ write.flush = () => {}
190
164
 
191
165
  return write
192
166
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxtedition/shared",
3
- "version": "1.4.2",
3
+ "version": "2.0.0",
4
4
  "description": "Ring Buffer for NodeJS cross Worker communication",
5
5
  "main": "index.js",
6
6
  "repository": {