@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.
- package/index.js +32 -41
- 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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
109
|
-
|
|
110
|
-
buffer.writeInt32LE(
|
|
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
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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 =
|
|
154
|
-
|
|
155
|
-
|
|
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
|
-
|
|
170
|
-
|
|
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
|
|