PDPA Features: ✅ Cookie consent banner ✅ Consent logging API ✅ Admin dashboard ✅ Privacy Policy ✅ Terms & Conditions Technical: ✅ Astro 5.x + Tailwind v4 ✅ Docker on port 80 ✅ SQLite database ✅ 15 pages built Ready for Easypanel deployment.
156 lines
4.2 KiB
JavaScript
156 lines
4.2 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.readProtobufMessage = exports.FieldReader = void 0;
|
|
const errors_js_1 = require("../../errors.js");
|
|
const util_js_1 = require("./util.js");
|
|
class MessageReader {
|
|
#array;
|
|
#view;
|
|
#pos;
|
|
constructor(array) {
|
|
this.#array = array;
|
|
this.#view = new DataView(array.buffer, array.byteOffset, array.byteLength);
|
|
this.#pos = 0;
|
|
}
|
|
varint() {
|
|
let value = 0;
|
|
for (let shift = 0;; shift += 7) {
|
|
const byte = this.#array[this.#pos++];
|
|
value |= (byte & 0x7f) << shift;
|
|
if (!(byte & 0x80)) {
|
|
break;
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
varintBig() {
|
|
let value = 0n;
|
|
for (let shift = 0n;; shift += 7n) {
|
|
const byte = this.#array[this.#pos++];
|
|
value |= BigInt(byte & 0x7f) << shift;
|
|
if (!(byte & 0x80)) {
|
|
break;
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
bytes(length) {
|
|
const array = new Uint8Array(this.#array.buffer, this.#array.byteOffset + this.#pos, length);
|
|
this.#pos += length;
|
|
return array;
|
|
}
|
|
double() {
|
|
const value = this.#view.getFloat64(this.#pos, true);
|
|
this.#pos += 8;
|
|
return value;
|
|
}
|
|
skipVarint() {
|
|
for (;;) {
|
|
const byte = this.#array[this.#pos++];
|
|
if (!(byte & 0x80)) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
skip(count) {
|
|
this.#pos += count;
|
|
}
|
|
eof() {
|
|
return this.#pos >= this.#array.byteLength;
|
|
}
|
|
}
|
|
class FieldReader {
|
|
#reader;
|
|
#wireType;
|
|
constructor(reader) {
|
|
this.#reader = reader;
|
|
this.#wireType = -1;
|
|
}
|
|
setup(wireType) {
|
|
this.#wireType = wireType;
|
|
}
|
|
#expect(expectedWireType) {
|
|
if (this.#wireType !== expectedWireType) {
|
|
throw new errors_js_1.ProtoError(`Expected wire type ${expectedWireType}, got ${this.#wireType}`);
|
|
}
|
|
this.#wireType = -1;
|
|
}
|
|
bytes() {
|
|
this.#expect(util_js_1.LENGTH_DELIMITED);
|
|
const length = this.#reader.varint();
|
|
return this.#reader.bytes(length);
|
|
}
|
|
string() {
|
|
return new TextDecoder().decode(this.bytes());
|
|
}
|
|
message(def) {
|
|
return readProtobufMessage(this.bytes(), def);
|
|
}
|
|
int32() {
|
|
this.#expect(util_js_1.VARINT);
|
|
return this.#reader.varint();
|
|
}
|
|
uint32() {
|
|
return this.int32();
|
|
}
|
|
bool() {
|
|
return this.int32() !== 0;
|
|
}
|
|
uint64() {
|
|
this.#expect(util_js_1.VARINT);
|
|
return this.#reader.varintBig();
|
|
}
|
|
sint64() {
|
|
const value = this.uint64();
|
|
return (value >> 1n) ^ (-(value & 1n));
|
|
}
|
|
double() {
|
|
this.#expect(util_js_1.FIXED_64);
|
|
return this.#reader.double();
|
|
}
|
|
maybeSkip() {
|
|
if (this.#wireType < 0) {
|
|
return;
|
|
}
|
|
else if (this.#wireType === util_js_1.VARINT) {
|
|
this.#reader.skipVarint();
|
|
}
|
|
else if (this.#wireType === util_js_1.FIXED_64) {
|
|
this.#reader.skip(8);
|
|
}
|
|
else if (this.#wireType === util_js_1.LENGTH_DELIMITED) {
|
|
const length = this.#reader.varint();
|
|
this.#reader.skip(length);
|
|
}
|
|
else if (this.#wireType === util_js_1.FIXED_32) {
|
|
this.#reader.skip(4);
|
|
}
|
|
else {
|
|
throw new errors_js_1.ProtoError(`Unexpected wire type ${this.#wireType}`);
|
|
}
|
|
this.#wireType = -1;
|
|
}
|
|
}
|
|
exports.FieldReader = FieldReader;
|
|
function readProtobufMessage(data, def) {
|
|
const msgReader = new MessageReader(data);
|
|
const fieldReader = new FieldReader(msgReader);
|
|
let value = def.default();
|
|
while (!msgReader.eof()) {
|
|
const key = msgReader.varint();
|
|
const tag = key >> 3;
|
|
const wireType = key & 0x7;
|
|
fieldReader.setup(wireType);
|
|
const tagFun = def[tag];
|
|
if (tagFun !== undefined) {
|
|
const returnedValue = tagFun(fieldReader, value);
|
|
if (returnedValue !== undefined) {
|
|
value = returnedValue;
|
|
}
|
|
}
|
|
fieldReader.maybeSkip();
|
|
}
|
|
return value;
|
|
}
|
|
exports.readProtobufMessage = readProtobufMessage;
|