{"version":3,"file":"rawproto.cjs","sources":["../src/index.js"],"sourcesContent":["import { unflatten } from 'flat'\n\nexport const wireTypes = {\n  VARINT: 0, //  int32, int64, uint32, uint64, sint32, sint64, bool, enum\n  I64: 1, // fixed64, sfixed64, double\n  LEN: 2, // string, bytes, embedded messages, packed repeated fields\n  SGROUP: 3, //  group start (deprecated)\n  EGROUP: 4, //  group end (deprecated)\n  I32: 5 // fixed32, sfixed32, float\n}\n\nconst dec = new TextDecoder()\n\nexport const wireMap = {\n  0: ['uint32', 'int32', 'int64', 'uint64', 'sint32', 'sint64', 'bool', 'raw', 'bytes'],\n  1: ['uint32', 'int32', 'bytes', 'fixed64', 'sfixed64', 'double'],\n  2: ['raw', 'bytes', 'string', 'sub', 'packedIntVar', 'packedInt32', 'packedInt64'],\n  5: ['uint32', 'int32', 'bytes', 'fixed32', 'sfixed32', 'float', 'raw']\n}\n\nexport class ReaderFixed {\n  constructor (buffer, type, path, renderType) {\n    this.buffer = buffer\n    this.type = type\n    this.dataView = new DataView(this.buffer)\n    this.path = path\n    this.renderType = renderType || wireMap[this.type][0]\n  }\n\n  // lazy-load representations other than this.buffer (ArrayBuffer)\n  get raw () {\n    return this\n  }\n\n  get string () {\n    return this.int + ''\n  }\n\n  get bytes () {\n    this._bytes ||= new Uint8Array(this.buffer)\n    return this._bytes\n  }\n}\n\nexport class ReaderFixed64 extends ReaderFixed {\n  constructor (buffer, path, renderType) {\n    super(buffer, wireTypes.I64, path, renderType)\n  }\n\n  // lazy-load representations other than this.buffer (ArrayBuffer)\n  get uint () {\n    const v = this.dataView.getBigUint64(0, true)\n    try {\n      return Number(v)\n    } catch (e) {\n      return v\n    }\n  }\n\n  get int () {\n    const v = this.dataView.getBigInt64(0, true)\n    try {\n      return Number(v)\n    } catch (e) {\n      return v\n    }\n  }\n\n  get float () {\n    const v = this.dataView.getFloat64(0, true)\n    try {\n      return Number(v)\n    } catch (e) {\n      return v\n    }\n  }\n\n  get double () {\n    return this.float\n  }\n\n  get fixed64 () {\n    return this.uint\n  }\n\n  get sfixed64 () {\n    return this.int\n  }\n}\n\nexport class ReaderFixed32 extends ReaderFixed {\n  constructor (buffer, path, renderType) {\n    super(buffer, wireTypes.I32, path, renderType)\n  }\n\n  // lazy-load representations other than this.buffer (ArrayBuffer)\n  get uint () {\n    return this.dataView.getUint32(0, true)\n  }\n\n  get int () {\n    return this.dataView.getInt32(0, true)\n  }\n\n  get float () {\n    return this.dataView.getFloat32(0, true)\n  }\n\n  get fixed32 () {\n    return this.uint\n  }\n\n  get sfixed32 () {\n    return this.int\n  }\n}\n\nexport class ReaderVarInt {\n  constructor (buffer, path, renderType, value) {\n    this.type = wireTypes.VARINT\n    this.buffer = buffer\n    this.value = this.uint = this.int = value\n    this.path = path\n    this.renderType = renderType || wireMap[this.type][0]\n  }\n\n  // lazy-load representations other than this.buffer (ArrayBuffer)\n  get raw () {\n    return this\n  }\n\n  get bytes () {\n    this._bytes ||= new Uint8Array(this.buffer)\n    return this._bytes\n  }\n\n  get string () {\n    return this.uint.toString()\n  }\n\n  get bool () {\n    return !!this.uint\n  }\n\n  get int32 () {\n    return this.int\n  }\n\n  get int64 () {\n    return this.int\n  }\n\n  get sint32 () {\n    return this.int\n  }\n\n  get sint64 () {\n    return this.int\n  }\n\n  get uint32 () {\n    return this.uint\n  }\n\n  get uint64 () {\n    return this.uint\n  }\n}\n\nexport class ReaderMessage {\n  constructor (buffer, path = '0', renderType) {\n    this.type = wireTypes.LEN\n    this.path = path\n    this.renderType = renderType || wireMap[this.type][0]\n\n    // Buffer is weird because it will say it's an instance of Uint8Array\n    if (typeof Buffer !== 'undefined' && buffer instanceof Buffer) {\n      this.bytes = new Uint8Array(buffer)\n      this.buffer = this.bytes.buffer\n    } else if (buffer instanceof ArrayBuffer) {\n      this.buffer = buffer\n      this.bytes = new Uint8Array(this.buffer)\n    } else if (buffer instanceof Uint8Array) {\n      this.buffer = buffer.buffer\n      this.bytes = new Uint8Array(this.buffer)\n    } else {\n      this.bytes = new Uint8Array(buffer)\n      this.buffer = this.bytes.buffer\n    }\n    this.offset = 0\n  }\n\n  // render: pull a group (as bytes) from this\n  readBufferUntilGroupEnd (index) {\n    const offsetStart = this.offset\n    let indexType = parseInt(this.readVarInt())\n    let type = indexType & 7\n    let foundIndex = index\n\n    while (type !== wireTypes.EGROUP) {\n      indexType = parseInt(this.readVarInt())\n      type = indexType & 7\n      foundIndex = indexType >> 3\n    }\n\n    // if (foundIndex !== index) {\n    //   throw new Error(`Group index ${foundIndex} should match ${index}`)\n    // }\n\n    return this.buffer.slice(offsetStart, this.offset)\n  }\n\n  // render: pull a varint from this\n  readVarInt () {\n    if (typeof this.offset === 'undefined') {\n      throw new Error('Offset must be defined to use readVarInt. If you really want to do this, try setting it to 0.')\n    }\n    let result = 0\n    let shift = 0\n    let byte\n    do {\n      if (this.offset >= this.buffer.byteLength) {\n        throw new Error(`Buffer overflow while reading varint: ${this.offset}/${this.buffer.byteLength}`)\n      }\n      byte = this.bytes[this.offset++]\n      result |= (byte & 0x7f) << shift\n      shift += 7\n    } while (byte >= 0x80)\n    return result\n  }\n\n  // lazy-load fields\n\n  // is it possible this is a message?\n  get couldHaveSub () {\n    if (typeof this._couldHaveSub === 'undefined') {\n      this._couldHaveSub = Object.keys(this.sub).length > 0\n    }\n    return this._couldHaveSub\n  }\n\n  // is it likely this is a string?\n  get likelyString () {\n    this._likelyString ||= typeof (this.bytes.find(b => b < 32)) === 'undefined'\n    return this._likelyString\n  }\n\n  // get list of sub-fields with counts\n  get fields () {\n    if (this._fields) {\n      return this._fields\n    }\n\n    // sub triggers field-analysis\n    const s = this.sub\n    return this._fields\n  }\n\n  // get sub-fields, triggers sub-render (cached)\n  get sub () {\n    if (this._sub) {\n      return this._sub\n    }\n\n    this.offset = 0\n    this._fields = {}\n    this._sub = {}\n\n    let rollbackOffset = this.offset\n\n    try {\n      while (this.offset < this.buffer.byteLength) {\n        const indexType = parseInt(this.readVarInt())\n        const type = indexType & 7\n        const index = indexType >> 3\n        this._fields[index] ||= 0\n        this._fields[index]++\n        this._sub[index] ||= []\n\n        if (type === wireTypes.VARINT) {\n          const s = this.offset\n          const value = parseInt(this.readVarInt())\n          const reader = new ReaderVarInt(this.buffer.slice(s, this.offset - 1), [this.path, index].join('.'), 'int32', value)\n          this._sub[index].push(reader)\n          rollbackOffset = this.offset\n        }\n\n        if (type === wireTypes.LEN) {\n          const byteLength = this.readVarInt()\n          const reader = new ReaderMessage(this.buffer.slice(this.offset, this.offset + byteLength), [this.path, index].join('.'))\n          this.offset += byteLength\n          this._sub[index].push(reader)\n          rollbackOffset = this.offset\n        }\n\n        if (type === wireTypes.SGROUP) {\n          const reader = new ReaderMessage(this.readBufferUntilGroupEnd(index), [this.path, index].join('.'))\n          this._sub[index].push(reader)\n          rollbackOffset = this.offset\n        }\n\n        if (type === wireTypes.I64) {\n          const reader = new ReaderFixed64(this.buffer.slice(this.offset, this.offset + 8), [this.path, index].join('.'))\n          this.offset += 8\n          this._sub[index].push(reader)\n          rollbackOffset = this.offset\n        }\n\n        if (type === wireTypes.I32) {\n          const reader = new ReaderFixed32(this.buffer.slice(this.offset, this.offset + 4), [this.path, index].join('.'))\n          this.offset += 4\n          this._sub[index].push(reader)\n          rollbackOffset = this.offset\n        }\n      }\n      return this._sub\n    } catch (e) {\n      // console.error(e)\n      this.remainder = this.buffer.slice(rollbackOffset)\n      return {}\n    }\n  }\n\n  // get raw representation of this (used for queries)\n  get raw () {\n    return this\n  }\n\n  // get string of this\n  get string () {\n    this._string ||= dec.decode(this.bytes)\n    return this._string\n  }\n\n  // render: pull packed ints from this\n\n  get packedIntVar () {\n    if (typeof this._packedintvar !== 'undefined') {\n      return this._packedintvar\n    }\n    this._packedintvar = []\n    this.offset = 0\n    while (this.offset < this.buffer.byteLength) {\n      this._packedintvar.push(this.readVarInt())\n    }\n    return this._packedintvar\n  }\n\n  get packedInt32 () {\n    if (typeof this._packedint32 !== 'undefined') {\n      return this._packedint32\n    }\n    this.dataView ||= new DataView(this.buffer)\n    this._packedint32 = []\n    this.offset = 0\n    while (this.offset < this.buffer.byteLength) {\n      this._packedint32.push(this.dataView.getInt32(this.offset, true))\n      this.offset += 4\n    }\n    return this._packedint32\n  }\n\n  get packedInt64 () {\n    if (typeof this._packedint64 !== 'undefined') {\n      return this._packedint64\n    }\n    this.dataView ||= new DataView(this.buffer)\n    this._packedint64 = []\n    this.offset = 0\n    while (this.offset < this.buffer.byteLength) {\n      try {\n        this._packedint64.push(parseInt(this.dataView.getBigInt64(this.offset, true)))\n      } catch (e) {\n        this._packedint64.push(this.dataView.getBigInt64(this.offset, true))\n      }\n      this.offset += 8\n    }\n    return this._packedint64\n  }\n\n  // utils\n\n  // use string-queries to get data, without walking all messages (just those in query)\n  query (...queries) {\n    return query(this, this.path, ...queries)\n  }\n\n  toJS (queryMap = {}, prefix = 'f', nameMap, typeMap) {\n    return toJS(this, queryMap, prefix, nameMap, typeMap)\n  }\n\n  toProto (queryMap = {}, prefix = 'f', nameMap, typeMap, messageName = 'MessageRoot') {\n    return toProto(this, queryMap, prefix, nameMap, typeMap, messageName)\n  }\n}\n\nexport function query (tree, prefix = '0', ...queries) {\n  const out = []\n  for (const q of queries) {\n    let [path, type = 'raw'] = q.split(':')\n    if (path.substr(0, prefix.length) !== prefix) {\n      path = `${prefix}.${path}`\n    }\n    const pathTraverse = path.replace(new RegExp(`^${prefix}\\.`), '').split('.')\n    let current = [tree]\n    for (const i of pathTraverse) {\n      const ca = []\n      for (const c of current) {\n        if (c.sub[i]) {\n          ca.push(...c.sub[i])\n        }\n      }\n      current = ca\n    }\n    out.push(...current.filter(c => c.path === path).map(c => c[type]))\n  }\n  return out\n}\n\nexport function toJS (tree, queryMap, prefix = 'f', nameMap, typeMap) {\n  let out = {}\n\n  // this is used as a marker that it's top-level\n  if (typeof queryMap === 'object') {\n    if (!nameMap) {\n      nameMap = {}\n    }\n    if (!typeMap) {\n      typeMap = {}\n    }\n    for (const name of Object.keys(queryMap)) {\n      let [path, type = 'raw'] = queryMap[name].split(':')\n      if (path[0] !== '0') {\n        path = `0.${path}`\n      }\n      nameMap[path] = name\n      typeMap[path] = type\n    }\n  }\n\n  for (const subs of Object.values(tree.sub || {})) {\n    for (const t of subs) {\n      try {\n        const name = nameMap[t.path] || prefixify(prefix, t.path)\n        out[name] ||= []\n        const renderType = typeMap[t.path] || t.renderType\n        if (t.type === wireTypes.LEN && !['string', 'bytes'].includes(renderType)) {\n          if (t.couldHaveSub) {\n            out = { ...out, ...toJS(t, undefined, prefix, nameMap, typeMap) }\n          } else if (t.likelyString) {\n            out[name].push(t.string)\n          } else {\n            out[name].push(t.bytes)\n          }\n        } else {\n          out[name].push(t[renderType])\n        }\n      } catch (e) {}\n    }\n  }\n\n  return unflatten(out)\n}\n\nconst prefixify = (prefix, path) => path.split('.').map((v, k, a) => `${prefix}${v}`).join('.')\nconst indentString = (str, count, indent = ' ') => str.replace(/^/gm, indent.repeat(count))\n\nexport function toProto (tree, queryMap, prefix = 'f', nameMap, typeMap, messageName = 'MessageRoot', indent = 0, isSub = false) {\n  const out = []\n\n  // this is used as a marker that it's top-level\n  if (typeof queryMap === 'object') {\n    if (!nameMap) {\n      nameMap = {}\n    }\n    if (!typeMap) {\n      typeMap = {}\n    }\n    for (const name of Object.keys(queryMap)) {\n      let [path, type = 'raw'] = queryMap[name].split(':')\n      if (path[0] !== '0') {\n        path = `0.${path}`\n      }\n      nameMap[path] = name\n      typeMap[path] = type\n    }\n  }\n\n  out.push(`message ${messageName} {`)\n\n  const treekeys = Object.keys(tree.sub || {})\n\n  for (const n in treekeys) {\n    const fn = parseInt(n) + 1\n\n    const f = tree?.sub[treekeys[n]]\n    if (!f[0]?.path) {\n      // not really sure why this happens\n      continue\n    }\n    let repeated = ''\n    let options = ''\n    let renderType = typeMap[f[0]?.path] || f[0].renderType\n    const name = nameMap[f[0].path] ? nameMap[f[0].path].split('.').pop() : `${prefix}${fn}`\n\n    if (f.length > 1) {\n      repeated = 'repeated '\n    }\n\n    if (renderType === 'packedIntVar') {\n      renderType = 'int32'\n      repeated = 'repeated '\n      options = ' [packed=true]'\n    }\n\n    if (renderType === 'packedInt32') {\n      renderType = 'fixed32'\n      repeated = 'repeated '\n      options = ' [packed=true]'\n    }\n\n    if (renderType === 'packedInt64') {\n      renderType = 'fixed64'\n      repeated = 'repeated '\n      options = ' [packed=true]'\n    }\n\n    if (typeof f[0] === 'object' && f[0].type === wireTypes.LEN && !['string', 'bytes'].includes(renderType)) {\n      if (f[0].couldHaveSub) {\n        out.push(indentString(`Message${fn} ${name} = ${fn};`, 2))\n        out.push(toProto(f[0], undefined, prefix, nameMap, typeMap, `Message${fn}`, indent + 1, true))\n      } else {\n        out.push(indentString(`bytes ${name} = ${fn};`, 2))\n      }\n    } else {\n      out.push(indentString(`${repeated}${renderType} ${name} = ${fn}${options};`, 2))\n    }\n  }\n\n  out.push('}')\n\n  return indentString(out.join('\\n'), 2 * indent)\n}\n\nexport default ReaderMessage\n"],"names":["wireTypes","VARINT","I64","LEN","SGROUP","EGROUP","I32","dec","TextDecoder","wireMap","ReaderFixed","_createClass","buffer","type","path","renderType","this","dataView","DataView","key","get","_bytes","Uint8Array","ReaderFixed64","_ReaderFixed","call","_inheritsLoose","v","getBigUint64","Number","e","getBigInt64","getFloat64","uint","ReaderFixed32","_ReaderFixed2","getUint32","getInt32","getFloat32","ReaderVarInt","value","toString","ReaderMessage","Buffer","bytes","ArrayBuffer","offset","_proto","prototype","readBufferUntilGroupEnd","index","offsetStart","indexType","parseInt","readVarInt","slice","Error","byte","result","shift","byteLength","query","apply","concat","arguments","toJS","queryMap","prefix","nameMap","typeMap","toProto","messageName","_couldHaveSub","Object","keys","sub","length","_likelyString","find","b","_fields","_sub","rollbackOffset","_this$_fields","_this$_sub","s","reader","join","push","remainder","_string","decode","_packedintvar","_packedint32","_packedint64","tree","_step","out","_loop","_q$split","split","_q$split$","substr","_step2","pathTraverse","replace","RegExp","current","_iterator2","_createForOfIteratorHelperLoose","done","_step3","i","ca","_iterator3","c","filter","map","_iterator","_i","_Object$keys","name","_queryMap$name$split","_queryMap$name$split$","_i2","_Object$values","values","_step4","_iterator4","t","_out","prefixify","includes","couldHaveSub","_extends","undefined","likelyString","string","unflatten","k","a","indentString","str","count","indent","repeat","isSub","_i3","_Object$keys2","_queryMap$name$split2","_queryMap$name$split3","treekeys","n","_f$","_f$2","fn","f","repeated","options","pop"],"mappings":"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"}