@nxtedition/shared 2.0.8 → 2.0.11

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 +32 -41
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -33,18 +33,21 @@ async function* _reader({ sharedState, sharedBuffer }, cb) {
33
33
  continue
34
34
  }
35
35
 
36
- assert.equal(tag, -2)
36
+ assert(tag === -2, `tag: ${tag} === -2`)
37
37
 
38
38
  const len = buffer.readInt32LE(readPos)
39
39
  readPos += 4
40
40
 
41
- assert(len >= 0)
41
+ assert(len > 0, `len: ${len} > 0`)
42
42
 
43
43
  const raw = buffer.subarray(readPos, readPos + len)
44
44
  readPos += len
45
45
 
46
46
  if (cb) {
47
- await cb(raw)
47
+ const thenable = cb(raw)
48
+ if (thenable) {
49
+ await thenable
50
+ }
48
51
  } else {
49
52
  yield raw
50
53
  }
@@ -72,8 +75,6 @@ export function writer({ sharedState, sharedBuffer }) {
72
75
  let writePos = 0
73
76
 
74
77
  function _tryWrite(maxLen, fn, opaque) {
75
- maxLen += 4
76
-
77
78
  assert(maxLen <= size)
78
79
 
79
80
  readPos = Atomics.load(state, READ_INDEX)
@@ -96,18 +97,15 @@ export function writer({ sharedState, sharedBuffer }) {
96
97
  buffer.writeInt32LE(-2, writePos)
97
98
  writePos += 4
98
99
 
99
- const lenPos = writePos
100
- writePos += 4
101
-
102
- const len = fn(buffer.subarray(writePos, writePos + maxLen), opaque)
103
- assert(len <= size)
104
-
105
- writePos += len
106
100
  buffer.writeInt32LE(-3, writePos)
101
+ const len = fn(buffer.subarray(writePos + 4, writePos + 4 + maxLen), opaque)
102
+ assert(len > 0, `len: ${len} > 0`)
103
+ assert(len <= maxLen, `len: ${len} <= maxLen: ${maxLen}`)
104
+ assert(len <= size, `len: ${len} <= size: ${size}`)
107
105
 
108
- assert(len <= maxLen)
109
-
110
- buffer.writeInt32LE(len, lenPos)
106
+ buffer.writeInt32LE(len, writePos)
107
+ writePos += 4 + len
108
+ buffer.writeInt32LE(-4, writePos)
111
109
 
112
110
  Atomics.store(state, WRITE_INDEX, writePos)
113
111
  Atomics.notify(state, WRITE_INDEX)
@@ -115,18 +113,16 @@ export function writer({ sharedState, sharedBuffer }) {
115
113
  return true
116
114
  }
117
115
 
118
- async function _write(maxLen, fn, opaque) {
119
- assert(maxLen <= size)
120
-
121
- const buf = Buffer.allocUnsafe(maxLen)
122
- const len = fn(buf, opaque)
123
-
124
- while (!_tryWrite(len, (dst, buf) => buf.copy(dst, 0, 0, len))) {
125
- const { async, value } = Atomics.waitAsync(state, READ_INDEX, readPos)
126
- if (async) {
127
- await value
116
+ function defaultWrite(dst, data) {
117
+ let pos = 0
118
+ for (const buf of data) {
119
+ if (typeof buf === 'string') {
120
+ pos += dst.write(buf, pos)
121
+ } else {
122
+ pos += buf.copy(dst, pos)
128
123
  }
129
124
  }
125
+ return pos
130
126
  }
131
127
 
132
128
  function write(...args) {
@@ -143,31 +139,26 @@ export function writer({ sharedState, sharedBuffer }) {
143
139
  fn = args[1]
144
140
  opaque = args[2]
145
141
 
146
- assert(maxLen >= 0)
147
- assert(typeof fn === 'function')
142
+ assert(maxLen >= 0, `maxLen: ${maxLen} >= 0`)
143
+ assert(typeof fn === 'function', `fn: ${typeof fn} === 'function`)
148
144
  } else {
149
145
  if (Array.isArray(args[0])) {
150
146
  args = args[0]
151
147
  }
152
148
 
153
- maxLen = args.reduce((len, buf) => len + Buffer.byteLength(buf), 0)
154
- fn = (dst, data) => {
155
- let pos = 0
156
- for (const buf of data) {
157
- if (typeof buf === 'string') {
158
- pos += dst.write(buf, pos)
159
- } else {
160
- pos += buf.copy(dst, pos)
161
- }
162
- }
163
- assert(pos < maxLen)
164
- return pos
149
+ maxLen = 0
150
+ for (const buf of args) {
151
+ maxLen += Buffer.byteLength(buf)
165
152
  }
153
+
154
+ fn = defaultWrite
155
+
166
156
  opaque = args
167
157
  }
168
158
 
169
- if (!_tryWrite(maxLen, fn, opaque)) {
170
- return _write(maxLen, fn, opaque)
159
+ while (!_tryWrite(maxLen, fn, opaque)) {
160
+ // TODO (fix): Async? Warn? Timeout?
161
+ Atomics.wait(state, READ_INDEX, readPos)
171
162
  }
172
163
  }
173
164
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxtedition/shared",
3
- "version": "2.0.8",
3
+ "version": "2.0.11",
4
4
  "description": "Ring Buffer for NodeJS cross Worker communication",
5
5
  "main": "index.js",
6
6
  "repository": {