@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.
- package/index.js +10 -36
- 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
|
|
109
|
-
|
|
110
|
-
|
|
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
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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 (!
|
|
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 =
|
|
163
|
+
write.flush = () => {}
|
|
190
164
|
|
|
191
165
|
return write
|
|
192
166
|
}
|