Skip to content

Commit 35e0c5e

Browse files
krolegluin
authored andcommitted
fix: removed flexbuffer dependency (#856)
1 parent 899486b commit 35e0c5e

File tree

4 files changed

+36
-25
lines changed

4 files changed

+36
-25
lines changed

lib/command.ts

+31-9
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import * as fbuffer from 'flexbuffer'
21
import * as commands from 'redis-commands'
32
import * as calculateSlot from 'cluster-key-slot'
43
import asCallback from 'standard-as-callback'
@@ -223,22 +222,22 @@ export default class Command {
223222
let result
224223
let commandStr = '*' + (this.args.length + 1) + '\r\n$' + this.name.length + '\r\n' + this.name + '\r\n'
225224
if (bufferMode) {
226-
const resultBuffer = new fbuffer.FlexBuffer(0)
227-
resultBuffer.write(commandStr)
225+
const buffers = new MixedBuffers();
226+
buffers.push(commandStr);
228227
for (const arg of this.args) {
229228
if (arg instanceof Buffer) {
230229
if (arg.length === 0) {
231-
resultBuffer.write('$0\r\n\r\n')
230+
buffers.push('$0\r\n\r\n')
232231
} else {
233-
resultBuffer.write('$' + arg.length + '\r\n')
234-
resultBuffer.write(arg)
235-
resultBuffer.write('\r\n')
232+
buffers.push('$' + arg.length + '\r\n')
233+
buffers.push(arg)
234+
buffers.push('\r\n')
236235
}
237236
} else {
238-
resultBuffer.write('$' + Buffer.byteLength(arg as string | Buffer) + '\r\n' + arg + '\r\n')
237+
buffers.push('$' + Buffer.byteLength(arg as string | Buffer) + '\r\n' + arg + '\r\n')
239238
}
240239
}
241-
result = resultBuffer.getBuffer()
240+
result = buffers.toBuffer();
242241
} else {
243242
result = commandStr
244243
for (const arg of this.args) {
@@ -332,3 +331,26 @@ Command.setReplyTransformer('hgetall', function (result) {
332331
}
333332
return result
334333
})
334+
335+
class MixedBuffers {
336+
length = 0
337+
items = []
338+
339+
public push(x: string | Buffer) {
340+
this.length += Buffer.byteLength(x);
341+
this.items.push(x)
342+
}
343+
344+
public toBuffer(): Buffer {
345+
const result = Buffer.allocUnsafe(this.length);
346+
let offset = 0;
347+
for (const item of this.items) {
348+
const length = Buffer.byteLength(item);
349+
Buffer.isBuffer(item)
350+
? (item as Buffer).copy(result, offset)
351+
: result.write(item, offset, length)
352+
offset += length;
353+
}
354+
return result;
355+
}
356+
}

lib/pipeline.ts

+5-11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import Command from './command'
2-
import {FlexBuffer} from 'flexbuffer'
32
import {deprecate} from 'util'
43
import asCallback from 'standard-as-callback'
54
import {exists, hasFlag} from 'redis-commands'
@@ -278,7 +277,7 @@ Pipeline.prototype.exec = function (callback: CallbackFunction) {
278277
}).then(execPipeline)
279278

280279
function execPipeline() {
281-
let data: FlexBuffer | string = ''
280+
let data: Buffer | string = ''
282281
let writePending: number = _this.replyPending = _this._queue.length
283282

284283
let node
@@ -292,19 +291,14 @@ Pipeline.prototype.exec = function (callback: CallbackFunction) {
292291
bufferMode = true
293292
}
294293
if (bufferMode) {
295-
if (typeof data === 'string') {
296-
var flexBuffer = new FlexBuffer(0)
297-
flexBuffer.write(data)
298-
data = flexBuffer
299-
}
300-
(data as FlexBuffer).write(writable)
294+
data = Buffer.concat([
295+
typeof data === 'string' ? Buffer.from(data, 'utf8') : data,
296+
typeof writable === 'string' ? Buffer.from(writable, 'utf8') : writable
297+
])
301298
} else {
302299
data += writable
303300
}
304301
if (!--writePending) {
305-
if (bufferMode) {
306-
data = data.getBuffer()
307-
}
308302
if (_this.isCluster) {
309303
node.redis.stream.write(data)
310304
} else {

package-lock.json

-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
"cluster-key-slot": "^1.0.6",
3232
"debug": "^3.1.0",
3333
"denque": "^1.1.0",
34-
"flexbuffer": "github:mercadolibre/flexbuffer-node#1487df393a30872e3e81b246711a4cf6b0b23314",
3534
"lodash.defaults": "^4.2.0",
3635
"lodash.flatten": "^4.4.0",
3736
"redis-commands": "1.4.0",

0 commit comments

Comments
 (0)