Projektstart
This commit is contained in:
57
backend/node_modules/msgpackr/stream.js
generated
vendored
Normal file
57
backend/node_modules/msgpackr/stream.js
generated
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
import { Transform } from 'stream'
|
||||
import { Packr } from './pack.js'
|
||||
import { Unpackr } from './unpack.js'
|
||||
var DEFAULT_OPTIONS = {objectMode: true}
|
||||
|
||||
export class PackrStream extends Transform {
|
||||
constructor(options) {
|
||||
if (!options)
|
||||
options = {}
|
||||
options.writableObjectMode = true
|
||||
super(options)
|
||||
options.sequential = true
|
||||
this.packr = options.packr || new Packr(options)
|
||||
}
|
||||
_transform(value, encoding, callback) {
|
||||
this.push(this.packr.pack(value))
|
||||
callback()
|
||||
}
|
||||
}
|
||||
|
||||
export class UnpackrStream extends Transform {
|
||||
constructor(options) {
|
||||
if (!options)
|
||||
options = {}
|
||||
options.objectMode = true
|
||||
super(options)
|
||||
options.structures = []
|
||||
this.unpackr = options.unpackr || new Unpackr(options)
|
||||
}
|
||||
_transform(chunk, encoding, callback) {
|
||||
if (this.incompleteBuffer) {
|
||||
chunk = Buffer.concat([this.incompleteBuffer, chunk])
|
||||
this.incompleteBuffer = null
|
||||
}
|
||||
let values
|
||||
try {
|
||||
values = this.unpackr.unpackMultiple(chunk)
|
||||
} catch(error) {
|
||||
if (error.incomplete) {
|
||||
this.incompleteBuffer = chunk.slice(error.lastPosition)
|
||||
values = error.values
|
||||
}
|
||||
else
|
||||
throw error
|
||||
} finally {
|
||||
for (let value of values || []) {
|
||||
if (value === null)
|
||||
value = this.getNullValue()
|
||||
this.push(value)
|
||||
}
|
||||
}
|
||||
if (callback) callback()
|
||||
}
|
||||
getNullValue() {
|
||||
return Symbol.for(null)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user