@nxtedition/shared 2.0.9 → 2.0.12
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 +28 -28
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -38,11 +38,16 @@ async function* _reader({ sharedState, sharedBuffer }, cb) {
|
|
|
38
38
|
const len = buffer.readInt32LE(readPos)
|
|
39
39
|
readPos += 4
|
|
40
40
|
|
|
41
|
+
assert(len > 0, `len: ${len} > 0`)
|
|
42
|
+
|
|
41
43
|
const raw = buffer.subarray(readPos, readPos + len)
|
|
42
44
|
readPos += len
|
|
43
45
|
|
|
44
46
|
if (cb) {
|
|
45
|
-
|
|
47
|
+
const thenable = cb(raw)
|
|
48
|
+
if (thenable) {
|
|
49
|
+
await thenable
|
|
50
|
+
}
|
|
46
51
|
} else {
|
|
47
52
|
yield raw
|
|
48
53
|
}
|
|
@@ -70,8 +75,6 @@ export function writer({ sharedState, sharedBuffer }) {
|
|
|
70
75
|
let writePos = 0
|
|
71
76
|
|
|
72
77
|
function _tryWrite(maxLen, fn, opaque) {
|
|
73
|
-
maxLen += 4
|
|
74
|
-
|
|
75
78
|
assert(maxLen <= size)
|
|
76
79
|
|
|
77
80
|
readPos = Atomics.load(state, READ_INDEX)
|
|
@@ -94,13 +97,15 @@ export function writer({ sharedState, sharedBuffer }) {
|
|
|
94
97
|
buffer.writeInt32LE(-2, writePos)
|
|
95
98
|
writePos += 4
|
|
96
99
|
|
|
100
|
+
buffer.writeInt32LE(-3, writePos)
|
|
97
101
|
const len = fn(buffer.subarray(writePos + 4, writePos + 4 + maxLen), opaque)
|
|
98
|
-
assert(len
|
|
102
|
+
assert(len > 0, `len: ${len} > 0`)
|
|
103
|
+
assert(len <= maxLen, `len: ${len} <= maxLen: ${maxLen}`)
|
|
99
104
|
assert(len <= size, `len: ${len} <= size: ${size}`)
|
|
100
105
|
|
|
101
106
|
buffer.writeInt32LE(len, writePos)
|
|
102
107
|
writePos += 4 + len
|
|
103
|
-
buffer.writeInt32LE(-
|
|
108
|
+
buffer.writeInt32LE(-4, writePos)
|
|
104
109
|
|
|
105
110
|
Atomics.store(state, WRITE_INDEX, writePos)
|
|
106
111
|
Atomics.notify(state, WRITE_INDEX)
|
|
@@ -108,18 +113,16 @@ export function writer({ sharedState, sharedBuffer }) {
|
|
|
108
113
|
return true
|
|
109
114
|
}
|
|
110
115
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
const { async, value } = Atomics.waitAsync(state, READ_INDEX, readPos)
|
|
119
|
-
if (async) {
|
|
120
|
-
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)
|
|
121
123
|
}
|
|
122
124
|
}
|
|
125
|
+
return pos
|
|
123
126
|
}
|
|
124
127
|
|
|
125
128
|
function write(...args) {
|
|
@@ -143,23 +146,20 @@ export function writer({ sharedState, sharedBuffer }) {
|
|
|
143
146
|
args = args[0]
|
|
144
147
|
}
|
|
145
148
|
|
|
146
|
-
maxLen =
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
for (const buf of data) {
|
|
150
|
-
if (typeof buf === 'string') {
|
|
151
|
-
pos += dst.write(buf, pos)
|
|
152
|
-
} else {
|
|
153
|
-
pos += buf.copy(dst, pos)
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
return pos
|
|
149
|
+
maxLen = 0
|
|
150
|
+
for (const buf of args) {
|
|
151
|
+
maxLen += Buffer.byteLength(buf)
|
|
157
152
|
}
|
|
153
|
+
|
|
154
|
+
fn = defaultWrite
|
|
155
|
+
|
|
158
156
|
opaque = args
|
|
159
157
|
}
|
|
160
158
|
|
|
161
|
-
|
|
162
|
-
|
|
159
|
+
while (!_tryWrite(maxLen, fn, opaque)) {
|
|
160
|
+
// TODO (fix): Async? Warn? Timeout?
|
|
161
|
+
const result = Atomics.wait(state, READ_INDEX, readPos, 1e3)
|
|
162
|
+
assert(result !== 'timed-out')
|
|
163
163
|
}
|
|
164
164
|
}
|
|
165
165
|
|