fix: multi-repo local dev (file:../ deps, package exports, missing deps)

This commit is contained in:
Raven Scott
2026-05-21 20:14:15 -04:00
parent fc17ec7445
commit dfc3315572
395 changed files with 51601 additions and 0 deletions
+161
View File
@@ -0,0 +1,161 @@
const { Extension } = require('./messages')
// const MAX_ACTIVE = 32
const FLUSH_BATCH = 128
const MAX_PASSIVE_BATCH = 2048
const MAX_ACTIVE_BATCH = MAX_PASSIVE_BATCH + FLUSH_BATCH
class Batch {
constructor(outgoing, from) {
this.blocks = []
this.start = 0
this.end = 0
this.outgoing = outgoing
this.from = from
}
push(seq) {
const len = this.blocks.push(seq)
if (len === 1 || seq < this.start) this.start = seq
if (len === 1 || seq >= this.end) this.end = seq + 1
if (len >= FLUSH_BATCH) {
this.send()
this.clear()
}
}
send() {
if (!this.blocks.length) return
this.outgoing.send(
Extension.encode({
cache: { blocks: this.blocks, start: this.start, end: this.end }
}),
this.from
)
}
clear() {
this.start = this.end = 0
this.blocks = []
}
}
class HyperbeeExtension {
constructor(db) {
this.encoding = null
this.outgoing = null
this.db = db
this.active = 0
}
get(version, key) {
this.outgoing.broadcast(Extension.encode({ get: { version, key } }))
}
iterator(snapshot) {
if (snapshot.ended) return
if (snapshot.limit === 0) return
if (snapshot.limit === -1) snapshot.limit = 0
this.outgoing.broadcast(Extension.encode({ iterator: snapshot }))
}
onmessage(buf, from) {
// TODO: handle max active extension messages
// this.active++
const message = decode(buf)
if (!message) return
if (message.cache) this.oncache(message.cache, from)
if (message.get) this.onget(message.get, from)
if (message.iterator) this.oniterator(message.iterator, from)
}
oncache(message, from) {
if (!message.blocks.length) return
this.db.core.download(message)
}
onget(message, from) {
if (!message.version || message.version > this.db.version) return
const b = new Batch(this.outgoing, from)
const db = this.db.checkout(message.version)
db.get(message.key, {
extension: false,
wait: false,
update: false,
onseq
}).then(done, done)
function done() {
db.close().catch(noop)
b.send()
}
function onseq(seq) {
b.push(seq)
}
}
async oniterator(message, from) {
if (!message.version || message.version > this.db.version) return
const b = new Batch(this.outgoing, from)
const seqs = new Set()
let skip = message.checkpoint.length
let work = 0
const db = this.db.checkout(message.version)
const ite = db.createRangeIterator({
...message,
wait: false,
extension: false,
update: false,
limit: message.limit === 0 ? -1 : message.limit,
onseq(seq) {
if (skip && skip--) return
if (seqs.has(seq)) return
work++
seqs.add(seq)
b.push(seq)
}
})
try {
await ite.open()
// eslint-disable-next-line no-unmodified-loop-condition
while (work < MAX_ACTIVE_BATCH) {
if (!(await ite.next())) break
}
} catch (_) {
// do nothing
} finally {
ite.close().catch(noop)
db.close().catch(noop)
b.send()
}
}
static register(db) {
const e = new this(db)
e.outgoing = db.core.registerExtension('hyperbee', e)
return e
}
}
HyperbeeExtension.BATCH_SIZE = MAX_PASSIVE_BATCH
module.exports = HyperbeeExtension
function decode(buf) {
try {
return Extension.decode(buf)
} catch (err) {
return null
}
}
function noop() {}
+956
View File
@@ -0,0 +1,956 @@
// This file is auto generated by the protocol-buffers compiler
/* eslint-disable quotes */
/* eslint-disable indent */
/* eslint-disable no-redeclare */
/* eslint-disable camelcase */
/* eslint-disable no-var */
// Remember to `npm install --save protocol-buffers-encodings`
var encodings = require('protocol-buffers-encodings')
var b4a = require('b4a')
var varint = encodings.varint
var skip = encodings.skip
var YoloIndex = exports.YoloIndex = {
buffer: true,
encodingLength: null,
encode: null,
decode: null
}
var Header = exports.Header = {
buffer: true,
encodingLength: null,
encode: null,
decode: null
}
var Node = exports.Node = {
buffer: true,
encodingLength: null,
encode: null,
decode: null
}
var Extension = exports.Extension = {
buffer: true,
encodingLength: null,
encode: null,
decode: null
}
defineYoloIndex()
defineHeader()
defineNode()
defineExtension()
function defineYoloIndex () {
var Level = YoloIndex.Level = {
buffer: true,
encodingLength: null,
encode: null,
decode: null
}
defineLevel()
function defineLevel () {
Level.encodingLength = encodingLength
Level.encode = encode
Level.decode = decode
function encodingLength (obj) {
var length = 0
if (defined(obj.keys)) {
var packedLen = 0
for (var i = 0; i < obj.keys.length; i++) {
if (!defined(obj.keys[i])) continue
var len = encodings.varint.encodingLength(obj.keys[i])
packedLen += len
}
if (packedLen) {
length += 1 + packedLen + varint.encodingLength(packedLen)
}
}
if (defined(obj.children)) {
var packedLen = 0
for (var i = 0; i < obj.children.length; i++) {
if (!defined(obj.children[i])) continue
var len = encodings.varint.encodingLength(obj.children[i])
packedLen += len
}
if (packedLen) {
length += 1 + packedLen + varint.encodingLength(packedLen)
}
}
return length
}
function encode (obj, buf, offset) {
if (!offset) offset = 0
if (!buf) buf = b4a.allocUnsafe(encodingLength(obj))
var oldOffset = offset
if (defined(obj.keys)) {
var packedLen = 0
for (var i = 0; i < obj.keys.length; i++) {
if (!defined(obj.keys[i])) continue
packedLen += encodings.varint.encodingLength(obj.keys[i])
}
if (packedLen) {
buf[offset++] = 10
varint.encode(packedLen, buf, offset)
offset += varint.encode.bytes
}
for (var i = 0; i < obj.keys.length; i++) {
if (!defined(obj.keys[i])) continue
encodings.varint.encode(obj.keys[i], buf, offset)
offset += encodings.varint.encode.bytes
}
}
if (defined(obj.children)) {
var packedLen = 0
for (var i = 0; i < obj.children.length; i++) {
if (!defined(obj.children[i])) continue
packedLen += encodings.varint.encodingLength(obj.children[i])
}
if (packedLen) {
buf[offset++] = 18
varint.encode(packedLen, buf, offset)
offset += varint.encode.bytes
}
for (var i = 0; i < obj.children.length; i++) {
if (!defined(obj.children[i])) continue
encodings.varint.encode(obj.children[i], buf, offset)
offset += encodings.varint.encode.bytes
}
}
encode.bytes = offset - oldOffset
return buf
}
function decode (buf, offset, end) {
if (!offset) offset = 0
if (!end) end = buf.length
if (!(end <= buf.length && offset <= buf.length)) throw new Error("Decoded message is not valid")
var oldOffset = offset
var obj = {
keys: [],
children: []
}
while (true) {
if (end <= offset) {
decode.bytes = offset - oldOffset
return obj
}
var prefix = varint.decode(buf, offset)
offset += varint.decode.bytes
var tag = prefix >> 3
switch (tag) {
case 1:
var packedEnd = varint.decode(buf, offset)
offset += varint.decode.bytes
packedEnd += offset
while (offset < packedEnd) {
obj.keys.push(encodings.varint.decode(buf, offset))
offset += encodings.varint.decode.bytes
}
break
case 2:
var packedEnd = varint.decode(buf, offset)
offset += varint.decode.bytes
packedEnd += offset
while (offset < packedEnd) {
obj.children.push(encodings.varint.decode(buf, offset))
offset += encodings.varint.decode.bytes
}
break
default:
offset = skip(prefix & 7, buf, offset)
}
}
}
}
YoloIndex.encodingLength = encodingLength
YoloIndex.encode = encode
YoloIndex.decode = decode
function encodingLength (obj) {
var length = 0
if (defined(obj.levels)) {
for (var i = 0; i < obj.levels.length; i++) {
if (!defined(obj.levels[i])) continue
var len = Level.encodingLength(obj.levels[i])
length += varint.encodingLength(len)
length += 1 + len
}
}
return length
}
function encode (obj, buf, offset) {
if (!offset) offset = 0
if (!buf) buf = b4a.allocUnsafe(encodingLength(obj))
var oldOffset = offset
if (defined(obj.levels)) {
for (var i = 0; i < obj.levels.length; i++) {
if (!defined(obj.levels[i])) continue
buf[offset++] = 10
varint.encode(Level.encodingLength(obj.levels[i]), buf, offset)
offset += varint.encode.bytes
Level.encode(obj.levels[i], buf, offset)
offset += Level.encode.bytes
}
}
encode.bytes = offset - oldOffset
return buf
}
function decode (buf, offset, end) {
if (!offset) offset = 0
if (!end) end = buf.length
if (!(end <= buf.length && offset <= buf.length)) throw new Error("Decoded message is not valid")
var oldOffset = offset
var obj = {
levels: []
}
while (true) {
if (end <= offset) {
decode.bytes = offset - oldOffset
return obj
}
var prefix = varint.decode(buf, offset)
offset += varint.decode.bytes
var tag = prefix >> 3
switch (tag) {
case 1:
var len = varint.decode(buf, offset)
offset += varint.decode.bytes
obj.levels.push(Level.decode(buf, offset, offset + len))
offset += Level.decode.bytes
break
default:
offset = skip(prefix & 7, buf, offset)
}
}
}
}
function defineHeader () {
var Metadata = Header.Metadata = {
buffer: true,
encodingLength: null,
encode: null,
decode: null
}
defineMetadata()
function defineMetadata () {
Metadata.encodingLength = encodingLength
Metadata.encode = encode
Metadata.decode = decode
function encodingLength (obj) {
var length = 0
if (defined(obj.contentFeed)) {
var len = encodings.bytes.encodingLength(obj.contentFeed)
length += 1 + len
}
if (defined(obj.userData)) {
var len = encodings.bytes.encodingLength(obj.userData)
length += 1 + len
}
return length
}
function encode (obj, buf, offset) {
if (!offset) offset = 0
if (!buf) buf = b4a.allocUnsafe(encodingLength(obj))
var oldOffset = offset
if (defined(obj.contentFeed)) {
buf[offset++] = 10
encodings.bytes.encode(obj.contentFeed, buf, offset)
offset += encodings.bytes.encode.bytes
}
if (defined(obj.userData)) {
buf[offset++] = 18
encodings.bytes.encode(obj.userData, buf, offset)
offset += encodings.bytes.encode.bytes
}
encode.bytes = offset - oldOffset
return buf
}
function decode (buf, offset, end) {
if (!offset) offset = 0
if (!end) end = buf.length
if (!(end <= buf.length && offset <= buf.length)) throw new Error("Decoded message is not valid")
var oldOffset = offset
var obj = {
contentFeed: null,
userData: null
}
while (true) {
if (end <= offset) {
decode.bytes = offset - oldOffset
return obj
}
var prefix = varint.decode(buf, offset)
offset += varint.decode.bytes
var tag = prefix >> 3
switch (tag) {
case 1:
obj.contentFeed = encodings.bytes.decode(buf, offset)
offset += encodings.bytes.decode.bytes
break
case 2:
obj.userData = encodings.bytes.decode(buf, offset)
offset += encodings.bytes.decode.bytes
break
default:
offset = skip(prefix & 7, buf, offset)
}
}
}
}
Header.encodingLength = encodingLength
Header.encode = encode
Header.decode = decode
function encodingLength (obj) {
var length = 0
if (!defined(obj.protocol)) throw new Error("protocol is required")
var len = encodings.string.encodingLength(obj.protocol)
length += 1 + len
if (defined(obj.metadata)) {
var len = Metadata.encodingLength(obj.metadata)
length += varint.encodingLength(len)
length += 1 + len
}
return length
}
function encode (obj, buf, offset) {
if (!offset) offset = 0
if (!buf) buf = b4a.allocUnsafe(encodingLength(obj))
var oldOffset = offset
if (!defined(obj.protocol)) throw new Error("protocol is required")
buf[offset++] = 10
encodings.string.encode(obj.protocol, buf, offset)
offset += encodings.string.encode.bytes
if (defined(obj.metadata)) {
buf[offset++] = 18
varint.encode(Metadata.encodingLength(obj.metadata), buf, offset)
offset += varint.encode.bytes
Metadata.encode(obj.metadata, buf, offset)
offset += Metadata.encode.bytes
}
encode.bytes = offset - oldOffset
return buf
}
function decode (buf, offset, end) {
if (!offset) offset = 0
if (!end) end = buf.length
if (!(end <= buf.length && offset <= buf.length)) throw new Error("Decoded message is not valid")
var oldOffset = offset
var obj = {
protocol: "",
metadata: null
}
var found0 = false
while (true) {
if (end <= offset) {
if (!found0) throw new Error("Decoded message is not valid")
decode.bytes = offset - oldOffset
return obj
}
var prefix = varint.decode(buf, offset)
offset += varint.decode.bytes
var tag = prefix >> 3
switch (tag) {
case 1:
obj.protocol = encodings.string.decode(buf, offset)
offset += encodings.string.decode.bytes
found0 = true
break
case 2:
var len = varint.decode(buf, offset)
offset += varint.decode.bytes
obj.metadata = Metadata.decode(buf, offset, offset + len)
offset += Metadata.decode.bytes
break
default:
offset = skip(prefix & 7, buf, offset)
}
}
}
}
function defineNode () {
Node.encodingLength = encodingLength
Node.encode = encode
Node.decode = decode
function encodingLength (obj) {
var length = 0
if (!defined(obj.index)) throw new Error("index is required")
var len = encodings.bytes.encodingLength(obj.index)
length += 1 + len
if (!defined(obj.key)) throw new Error("key is required")
var len = encodings.bytes.encodingLength(obj.key)
length += 1 + len
if (defined(obj.value)) {
var len = encodings.bytes.encodingLength(obj.value)
length += 1 + len
}
return length
}
function encode (obj, buf, offset) {
if (!offset) offset = 0
if (!buf) buf = b4a.allocUnsafe(encodingLength(obj))
var oldOffset = offset
if (!defined(obj.index)) throw new Error("index is required")
buf[offset++] = 10
encodings.bytes.encode(obj.index, buf, offset)
offset += encodings.bytes.encode.bytes
if (!defined(obj.key)) throw new Error("key is required")
buf[offset++] = 18
encodings.bytes.encode(obj.key, buf, offset)
offset += encodings.bytes.encode.bytes
if (defined(obj.value)) {
buf[offset++] = 26
encodings.bytes.encode(obj.value, buf, offset)
offset += encodings.bytes.encode.bytes
}
encode.bytes = offset - oldOffset
return buf
}
function decode (buf, offset, end) {
if (!offset) offset = 0
if (!end) end = buf.length
if (!(end <= buf.length && offset <= buf.length)) throw new Error("Decoded message is not valid")
var oldOffset = offset
var obj = {
index: null,
key: null,
value: null
}
var found0 = false
var found1 = false
while (true) {
if (end <= offset) {
if (!found0 || !found1) throw new Error("Decoded message is not valid")
decode.bytes = offset - oldOffset
return obj
}
var prefix = varint.decode(buf, offset)
offset += varint.decode.bytes
var tag = prefix >> 3
switch (tag) {
case 1:
obj.index = encodings.bytes.decode(buf, offset)
offset += encodings.bytes.decode.bytes
found0 = true
break
case 2:
obj.key = encodings.bytes.decode(buf, offset)
offset += encodings.bytes.decode.bytes
found1 = true
break
case 3:
obj.value = encodings.bytes.decode(buf, offset)
offset += encodings.bytes.decode.bytes
break
default:
offset = skip(prefix & 7, buf, offset)
}
}
}
}
function defineExtension () {
var Get = Extension.Get = {
buffer: true,
encodingLength: null,
encode: null,
decode: null
}
var Iterator = Extension.Iterator = {
buffer: true,
encodingLength: null,
encode: null,
decode: null
}
var Cache = Extension.Cache = {
buffer: true,
encodingLength: null,
encode: null,
decode: null
}
defineGet()
defineIterator()
defineCache()
function defineGet () {
Get.encodingLength = encodingLength
Get.encode = encode
Get.decode = decode
function encodingLength (obj) {
var length = 0
if (defined(obj.version)) {
var len = encodings.varint.encodingLength(obj.version)
length += 1 + len
}
if (defined(obj.key)) {
var len = encodings.bytes.encodingLength(obj.key)
length += 1 + len
}
return length
}
function encode (obj, buf, offset) {
if (!offset) offset = 0
if (!buf) buf = b4a.allocUnsafe(encodingLength(obj))
var oldOffset = offset
if (defined(obj.version)) {
buf[offset++] = 8
encodings.varint.encode(obj.version, buf, offset)
offset += encodings.varint.encode.bytes
}
if (defined(obj.key)) {
buf[offset++] = 18
encodings.bytes.encode(obj.key, buf, offset)
offset += encodings.bytes.encode.bytes
}
encode.bytes = offset - oldOffset
return buf
}
function decode (buf, offset, end) {
if (!offset) offset = 0
if (!end) end = buf.length
if (!(end <= buf.length && offset <= buf.length)) throw new Error("Decoded message is not valid")
var oldOffset = offset
var obj = {
version: 0,
key: null
}
while (true) {
if (end <= offset) {
decode.bytes = offset - oldOffset
return obj
}
var prefix = varint.decode(buf, offset)
offset += varint.decode.bytes
var tag = prefix >> 3
switch (tag) {
case 1:
obj.version = encodings.varint.decode(buf, offset)
offset += encodings.varint.decode.bytes
break
case 2:
obj.key = encodings.bytes.decode(buf, offset)
offset += encodings.bytes.decode.bytes
break
default:
offset = skip(prefix & 7, buf, offset)
}
}
}
}
function defineIterator () {
Iterator.encodingLength = encodingLength
Iterator.encode = encode
Iterator.decode = decode
function encodingLength (obj) {
var length = 0
if (defined(obj.version)) {
var len = encodings.varint.encodingLength(obj.version)
length += 1 + len
}
if (defined(obj.gte)) {
var len = encodings.bytes.encodingLength(obj.gte)
length += 1 + len
}
if (defined(obj.gt)) {
var len = encodings.bytes.encodingLength(obj.gt)
length += 1 + len
}
if (defined(obj.lte)) {
var len = encodings.bytes.encodingLength(obj.lte)
length += 1 + len
}
if (defined(obj.lt)) {
var len = encodings.bytes.encodingLength(obj.lt)
length += 1 + len
}
if (defined(obj.limit)) {
var len = encodings.varint.encodingLength(obj.limit)
length += 1 + len
}
if (defined(obj.reverse)) {
var len = encodings.bool.encodingLength(obj.reverse)
length += 1 + len
}
if (defined(obj.checkpoint)) {
var packedLen = 0
for (var i = 0; i < obj.checkpoint.length; i++) {
if (!defined(obj.checkpoint[i])) continue
var len = encodings.varint.encodingLength(obj.checkpoint[i])
packedLen += len
}
if (packedLen) {
length += 1 + packedLen + varint.encodingLength(packedLen)
}
}
return length
}
function encode (obj, buf, offset) {
if (!offset) offset = 0
if (!buf) buf = b4a.allocUnsafe(encodingLength(obj))
var oldOffset = offset
if (defined(obj.version)) {
buf[offset++] = 8
encodings.varint.encode(obj.version, buf, offset)
offset += encodings.varint.encode.bytes
}
if (defined(obj.gte)) {
buf[offset++] = 18
encodings.bytes.encode(obj.gte, buf, offset)
offset += encodings.bytes.encode.bytes
}
if (defined(obj.gt)) {
buf[offset++] = 26
encodings.bytes.encode(obj.gt, buf, offset)
offset += encodings.bytes.encode.bytes
}
if (defined(obj.lte)) {
buf[offset++] = 34
encodings.bytes.encode(obj.lte, buf, offset)
offset += encodings.bytes.encode.bytes
}
if (defined(obj.lt)) {
buf[offset++] = 42
encodings.bytes.encode(obj.lt, buf, offset)
offset += encodings.bytes.encode.bytes
}
if (defined(obj.limit)) {
buf[offset++] = 48
encodings.varint.encode(obj.limit, buf, offset)
offset += encodings.varint.encode.bytes
}
if (defined(obj.reverse)) {
buf[offset++] = 56
encodings.bool.encode(obj.reverse, buf, offset)
offset += encodings.bool.encode.bytes
}
if (defined(obj.checkpoint)) {
var packedLen = 0
for (var i = 0; i < obj.checkpoint.length; i++) {
if (!defined(obj.checkpoint[i])) continue
packedLen += encodings.varint.encodingLength(obj.checkpoint[i])
}
if (packedLen) {
buf[offset++] = 66
varint.encode(packedLen, buf, offset)
offset += varint.encode.bytes
}
for (var i = 0; i < obj.checkpoint.length; i++) {
if (!defined(obj.checkpoint[i])) continue
encodings.varint.encode(obj.checkpoint[i], buf, offset)
offset += encodings.varint.encode.bytes
}
}
encode.bytes = offset - oldOffset
return buf
}
function decode (buf, offset, end) {
if (!offset) offset = 0
if (!end) end = buf.length
if (!(end <= buf.length && offset <= buf.length)) throw new Error("Decoded message is not valid")
var oldOffset = offset
var obj = {
version: 0,
gte: null,
gt: null,
lte: null,
lt: null,
limit: 0,
reverse: false,
checkpoint: []
}
while (true) {
if (end <= offset) {
decode.bytes = offset - oldOffset
return obj
}
var prefix = varint.decode(buf, offset)
offset += varint.decode.bytes
var tag = prefix >> 3
switch (tag) {
case 1:
obj.version = encodings.varint.decode(buf, offset)
offset += encodings.varint.decode.bytes
break
case 2:
obj.gte = encodings.bytes.decode(buf, offset)
offset += encodings.bytes.decode.bytes
break
case 3:
obj.gt = encodings.bytes.decode(buf, offset)
offset += encodings.bytes.decode.bytes
break
case 4:
obj.lte = encodings.bytes.decode(buf, offset)
offset += encodings.bytes.decode.bytes
break
case 5:
obj.lt = encodings.bytes.decode(buf, offset)
offset += encodings.bytes.decode.bytes
break
case 6:
obj.limit = encodings.varint.decode(buf, offset)
offset += encodings.varint.decode.bytes
break
case 7:
obj.reverse = encodings.bool.decode(buf, offset)
offset += encodings.bool.decode.bytes
break
case 8:
var packedEnd = varint.decode(buf, offset)
offset += varint.decode.bytes
packedEnd += offset
while (offset < packedEnd) {
obj.checkpoint.push(encodings.varint.decode(buf, offset))
offset += encodings.varint.decode.bytes
}
break
default:
offset = skip(prefix & 7, buf, offset)
}
}
}
}
function defineCache () {
Cache.encodingLength = encodingLength
Cache.encode = encode
Cache.decode = decode
function encodingLength (obj) {
var length = 0
if (!defined(obj.start)) throw new Error("start is required")
var len = encodings.varint.encodingLength(obj.start)
length += 1 + len
if (!defined(obj.end)) throw new Error("end is required")
var len = encodings.varint.encodingLength(obj.end)
length += 1 + len
if (defined(obj.blocks)) {
var packedLen = 0
for (var i = 0; i < obj.blocks.length; i++) {
if (!defined(obj.blocks[i])) continue
var len = encodings.varint.encodingLength(obj.blocks[i])
packedLen += len
}
if (packedLen) {
length += 1 + packedLen + varint.encodingLength(packedLen)
}
}
return length
}
function encode (obj, buf, offset) {
if (!offset) offset = 0
if (!buf) buf = b4a.allocUnsafe(encodingLength(obj))
var oldOffset = offset
if (!defined(obj.start)) throw new Error("start is required")
buf[offset++] = 8
encodings.varint.encode(obj.start, buf, offset)
offset += encodings.varint.encode.bytes
if (!defined(obj.end)) throw new Error("end is required")
buf[offset++] = 16
encodings.varint.encode(obj.end, buf, offset)
offset += encodings.varint.encode.bytes
if (defined(obj.blocks)) {
var packedLen = 0
for (var i = 0; i < obj.blocks.length; i++) {
if (!defined(obj.blocks[i])) continue
packedLen += encodings.varint.encodingLength(obj.blocks[i])
}
if (packedLen) {
buf[offset++] = 26
varint.encode(packedLen, buf, offset)
offset += varint.encode.bytes
}
for (var i = 0; i < obj.blocks.length; i++) {
if (!defined(obj.blocks[i])) continue
encodings.varint.encode(obj.blocks[i], buf, offset)
offset += encodings.varint.encode.bytes
}
}
encode.bytes = offset - oldOffset
return buf
}
function decode (buf, offset, end) {
if (!offset) offset = 0
if (!end) end = buf.length
if (!(end <= buf.length && offset <= buf.length)) throw new Error("Decoded message is not valid")
var oldOffset = offset
var obj = {
start: 0,
end: 0,
blocks: []
}
var found0 = false
var found1 = false
while (true) {
if (end <= offset) {
if (!found0 || !found1) throw new Error("Decoded message is not valid")
decode.bytes = offset - oldOffset
return obj
}
var prefix = varint.decode(buf, offset)
offset += varint.decode.bytes
var tag = prefix >> 3
switch (tag) {
case 1:
obj.start = encodings.varint.decode(buf, offset)
offset += encodings.varint.decode.bytes
found0 = true
break
case 2:
obj.end = encodings.varint.decode(buf, offset)
offset += encodings.varint.decode.bytes
found1 = true
break
case 3:
var packedEnd = varint.decode(buf, offset)
offset += varint.decode.bytes
packedEnd += offset
while (offset < packedEnd) {
obj.blocks.push(encodings.varint.decode(buf, offset))
offset += encodings.varint.decode.bytes
}
break
default:
offset = skip(prefix & 7, buf, offset)
}
}
}
}
Extension.encodingLength = encodingLength
Extension.encode = encode
Extension.decode = decode
function encodingLength (obj) {
var length = 0
if (defined(obj.cache)) {
var len = Cache.encodingLength(obj.cache)
length += varint.encodingLength(len)
length += 1 + len
}
if (defined(obj.get)) {
var len = Get.encodingLength(obj.get)
length += varint.encodingLength(len)
length += 1 + len
}
if (defined(obj.iterator)) {
var len = Iterator.encodingLength(obj.iterator)
length += varint.encodingLength(len)
length += 1 + len
}
return length
}
function encode (obj, buf, offset) {
if (!offset) offset = 0
if (!buf) buf = b4a.allocUnsafe(encodingLength(obj))
var oldOffset = offset
if (defined(obj.cache)) {
buf[offset++] = 10
varint.encode(Cache.encodingLength(obj.cache), buf, offset)
offset += varint.encode.bytes
Cache.encode(obj.cache, buf, offset)
offset += Cache.encode.bytes
}
if (defined(obj.get)) {
buf[offset++] = 18
varint.encode(Get.encodingLength(obj.get), buf, offset)
offset += varint.encode.bytes
Get.encode(obj.get, buf, offset)
offset += Get.encode.bytes
}
if (defined(obj.iterator)) {
buf[offset++] = 26
varint.encode(Iterator.encodingLength(obj.iterator), buf, offset)
offset += varint.encode.bytes
Iterator.encode(obj.iterator, buf, offset)
offset += Iterator.encode.bytes
}
encode.bytes = offset - oldOffset
return buf
}
function decode (buf, offset, end) {
if (!offset) offset = 0
if (!end) end = buf.length
if (!(end <= buf.length && offset <= buf.length)) throw new Error("Decoded message is not valid")
var oldOffset = offset
var obj = {
cache: null,
get: null,
iterator: null
}
while (true) {
if (end <= offset) {
decode.bytes = offset - oldOffset
return obj
}
var prefix = varint.decode(buf, offset)
offset += varint.decode.bytes
var tag = prefix >> 3
switch (tag) {
case 1:
var len = varint.decode(buf, offset)
offset += varint.decode.bytes
obj.cache = Cache.decode(buf, offset, offset + len)
offset += Cache.decode.bytes
break
case 2:
var len = varint.decode(buf, offset)
offset += varint.decode.bytes
obj.get = Get.decode(buf, offset, offset + len)
offset += Get.decode.bytes
break
case 3:
var len = varint.decode(buf, offset)
offset += varint.decode.bytes
obj.iterator = Iterator.decode(buf, offset, offset + len)
offset += Iterator.decode.bytes
break
default:
offset = skip(prefix & 7, buf, offset)
}
}
}
}
function defined (val) {
return val !== null && val !== undefined && (typeof val !== 'number' || !isNaN(val))
}