mirror of
https://github.com/cloudflare/wrangler-action.git
synced 2024-10-07 04:53:25 +02:00
66 lines
1.4 KiB
JavaScript
66 lines
1.4 KiB
JavaScript
|
|
||
|
|
||
|
class ResizeableBuffer{
|
||
|
constructor(size=100){
|
||
|
this.size = size
|
||
|
this.length = 0
|
||
|
this.buf = Buffer.alloc(size)
|
||
|
}
|
||
|
prepend(val){
|
||
|
if(Buffer.isBuffer(val)){
|
||
|
const length = this.length + val.length
|
||
|
if(length >= this.size){
|
||
|
this.resize()
|
||
|
if(length >= this.size){
|
||
|
throw Error('INVALID_BUFFER_STATE')
|
||
|
}
|
||
|
}
|
||
|
const buf = this.buf
|
||
|
this.buf = Buffer.alloc(this.size)
|
||
|
val.copy(this.buf, 0)
|
||
|
buf.copy(this.buf, val.length)
|
||
|
this.length += val.length
|
||
|
}else{
|
||
|
const length = this.length++
|
||
|
if(length === this.size){
|
||
|
this.resize()
|
||
|
}
|
||
|
const buf = this.clone()
|
||
|
this.buf[0] = val
|
||
|
buf.copy(this.buf,1, 0, length)
|
||
|
}
|
||
|
}
|
||
|
append(val){
|
||
|
const length = this.length++
|
||
|
if(length === this.size){
|
||
|
this.resize()
|
||
|
}
|
||
|
this.buf[length] = val
|
||
|
}
|
||
|
clone(){
|
||
|
return Buffer.from(this.buf.slice(0, this.length))
|
||
|
}
|
||
|
resize(){
|
||
|
const length = this.length
|
||
|
this.size = this.size * 2
|
||
|
const buf = Buffer.alloc(this.size)
|
||
|
this.buf.copy(buf,0, 0, length)
|
||
|
this.buf = buf
|
||
|
}
|
||
|
toString(encoding){
|
||
|
if(encoding){
|
||
|
return this.buf.slice(0, this.length).toString(encoding)
|
||
|
}else{
|
||
|
return Uint8Array.prototype.slice.call(this.buf.slice(0, this.length))
|
||
|
}
|
||
|
}
|
||
|
toJSON(){
|
||
|
return this.toString('utf8')
|
||
|
}
|
||
|
reset(){
|
||
|
this.length = 0
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = ResizeableBuffer
|