@nxtedition/shared 1.2.0 → 1.2.1
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 -57
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -68,17 +68,26 @@ export function writer({ sharedState, sharedBuffer }) {
|
|
|
68
68
|
let writePos = 0
|
|
69
69
|
let flushing = null
|
|
70
70
|
|
|
71
|
-
function
|
|
72
|
-
if (
|
|
73
|
-
|
|
71
|
+
function tryWrite(...raw) {
|
|
72
|
+
if (Array.isArray(raw[0])) {
|
|
73
|
+
raw = raw[0]
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (!raw.length) {
|
|
77
|
+
return true
|
|
74
78
|
}
|
|
75
79
|
|
|
76
80
|
readPos = Atomics.load(state, READ_INDEX)
|
|
77
81
|
|
|
78
|
-
|
|
82
|
+
let maxLen = 4
|
|
83
|
+
for (const buf of raw) {
|
|
84
|
+
maxLen += buf.byteLength ?? buf.length * 3
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
assert(maxLen < size / 2)
|
|
79
88
|
|
|
80
|
-
if (size - writePos <
|
|
81
|
-
if (readPos <
|
|
89
|
+
if (size - writePos < maxLen + 4) {
|
|
90
|
+
if (readPos < maxLen + 4) {
|
|
82
91
|
return false
|
|
83
92
|
}
|
|
84
93
|
|
|
@@ -87,64 +96,31 @@ export function writer({ sharedState, sharedBuffer }) {
|
|
|
87
96
|
} else {
|
|
88
97
|
const available = writePos >= readPos ? size - writePos : readPos - writePos
|
|
89
98
|
|
|
90
|
-
if (available <
|
|
99
|
+
if (available < maxLen + 4) {
|
|
91
100
|
return false
|
|
92
101
|
}
|
|
93
102
|
}
|
|
94
103
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
function acquireSync (len) {
|
|
99
|
-
while (true) {
|
|
100
|
-
const buf = acquire(len)
|
|
101
|
-
if (buf) {
|
|
102
|
-
return buf
|
|
103
|
-
}
|
|
104
|
-
Atomics.wait(state, READ_INDEX, readPos)
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
function release(len) {
|
|
109
|
-
buffer.writeInt32LE(len, writePos)
|
|
110
|
-
writePos += 4 + len
|
|
111
|
-
|
|
112
|
-
Atomics.store(state, WRITE_INDEX, writePos)
|
|
113
|
-
Atomics.notify(state, WRITE_INDEX)
|
|
114
|
-
}
|
|
104
|
+
const lenPos = writePos
|
|
105
|
+
writePos += 4
|
|
115
106
|
|
|
116
|
-
function tryWrite(...raw) {
|
|
117
|
-
if (Array.isArray(raw[0])) {
|
|
118
|
-
raw = raw[0]
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
if (!raw.length) {
|
|
122
|
-
return true
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
let maxLen = 4
|
|
126
|
-
for (const buf of raw) {
|
|
127
|
-
maxLen += buf.byteLength ?? buf.length * 3
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
const dst = acquire(maxLen)
|
|
131
|
-
if (!dst) {
|
|
132
|
-
return false
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
let pos = 0
|
|
136
107
|
for (const buf of raw) {
|
|
137
108
|
if (typeof buf === 'string') {
|
|
138
|
-
|
|
109
|
+
writePos += buffer.write(buf, writePos)
|
|
139
110
|
} else {
|
|
140
|
-
buffer.set(buf,
|
|
141
|
-
|
|
111
|
+
buffer.set(buf, writePos)
|
|
112
|
+
writePos += buf.byteLength
|
|
142
113
|
}
|
|
143
114
|
}
|
|
144
115
|
|
|
145
|
-
|
|
116
|
+
const len = writePos - lenPos
|
|
146
117
|
|
|
147
|
-
|
|
118
|
+
assert(len <= maxLen)
|
|
119
|
+
|
|
120
|
+
buffer.writeInt32LE(len, lenPos)
|
|
121
|
+
|
|
122
|
+
Atomics.store(state, WRITE_INDEX, writePos)
|
|
123
|
+
Atomics.notify(state, WRITE_INDEX)
|
|
148
124
|
|
|
149
125
|
return true
|
|
150
126
|
}
|
|
@@ -173,10 +149,5 @@ export function writer({ sharedState, sharedBuffer }) {
|
|
|
173
149
|
return (flushing ??= flush())
|
|
174
150
|
}
|
|
175
151
|
|
|
176
|
-
write.acquireSync = acquireSync
|
|
177
|
-
write.acquire = acquire
|
|
178
|
-
write.release = release
|
|
179
|
-
write.flush = flush
|
|
180
|
-
|
|
181
152
|
return write
|
|
182
153
|
}
|