@deno/kv
Version:
A Deno KV client library optimized for Node.js.
62 lines (61 loc) • 2.47 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const Long_js_1 = __importDefault(require("../Long.js"));
const index_js_1 = require("./index.js");
const varint_js_1 = require("./varint.js");
function deserialize(uint8array) {
let idx = 0;
const offset = uint8array.byteOffset;
const result = [];
const dataview = new DataView(uint8array.buffer, offset);
while (idx < uint8array.length) {
const decodeResult = (0, varint_js_1.decode)(new DataView(uint8array.buffer, offset + idx));
const key = decodeResult[1][0];
idx += decodeResult[0];
const type = (key & 0b111);
const fieldNumber = key >>> 3;
switch (type) {
default:
throw new Error(`Unknown wire type ${type}`);
case index_js_1.WireType.Varint: {
const [len, value] = (0, varint_js_1.decode)(new DataView(uint8array.buffer, offset + idx));
result.push([fieldNumber, { type, value }]);
idx += len;
break;
}
case index_js_1.WireType.Fixed64:
const lo = dataview.getUint32(idx, true);
const hi = dataview.getUint32(idx += 4, true);
idx += 4;
result.push([fieldNumber, {
type,
value: new Long_js_1.default(lo, hi),
}]);
break;
case index_js_1.WireType.LengthDelimited: {
const [len, value] = (0, varint_js_1.decode)(new DataView(uint8array.buffer, offset + idx));
result.push([fieldNumber, {
type,
value: uint8array.subarray(idx += len, idx += value[0]),
}]);
break;
}
case index_js_1.WireType.StartGroup:
case index_js_1.WireType.EndGroup:
result.push([fieldNumber, { type }]);
break;
case index_js_1.WireType.Fixed32:
result.push([fieldNumber, {
type,
value: dataview.getUint32(idx, true),
}]);
idx += 4;
break;
}
}
return result;
}
exports.default = deserialize;