UNPKG

typia

Version:

Superfast runtime validators with only one line

1 lines 5.36 kB
{"version":3,"file":"_ProtobufWriter.mjs","names":[],"sources":["../../src/internal/_ProtobufWriter.ts"],"sourcesContent":["import { Singleton } from \"@typia/utils\";\n\nimport { _IProtobufWriter } from \"./_IProtobufWriter\";\nimport { _ProtobufSizer } from \"./_ProtobufSizer\";\n\n/// @reference https://github.com/piotr-oles/as-proto/blob/main/packages/as-proto/assembly/internal/FixedWriter.ts\nexport class _ProtobufWriter implements _IProtobufWriter {\n /** Related sizer */\n private readonly sizer: _ProtobufSizer;\n\n /** Current pointer. */\n private ptr: number;\n\n /** Protobuf buffer. */\n private buf: Uint8Array;\n\n /** DataView for buffer. */\n private view: DataView;\n\n /** Index in varlen array from sizer. */\n private varlenidx: number;\n\n constructor(sizer: _ProtobufSizer) {\n this.sizer = sizer;\n this.buf = new Uint8Array(sizer.len);\n this.view = new DataView(this.buf.buffer);\n this.ptr = 0;\n this.varlenidx = 0;\n }\n\n buffer(): Uint8Array {\n return this.buf;\n }\n\n bool(value: boolean): void {\n this.byte(value ? 1 : 0);\n }\n\n byte(value: number): void {\n this.buf[this.ptr++] = value & 255;\n }\n\n int32(value: number): void {\n if (value < 0) this.int64(value);\n else this.variant32(value >>> 0);\n }\n\n sint32(value: number): void {\n this.variant32((value << 1) ^ (value >> 31));\n }\n\n uint32(value: number): void {\n this.variant32(value);\n }\n\n sint64(value: number | bigint): void {\n value = BigInt(value);\n this.variant64((value << BigInt(0x01)) ^ (value >> BigInt(0x3f)));\n }\n\n int64(value: number | bigint): void {\n this.variant64(BigInt(value));\n }\n\n uint64(value: number | bigint): void {\n this.variant64(BigInt(value));\n }\n\n float(val: number): void {\n this.view.setFloat32(this.ptr, val, true);\n this.ptr += 4;\n }\n\n double(val: number): void {\n this.view.setFloat64(this.ptr, val, true);\n this.ptr += 8;\n }\n\n bytes(value: Uint8Array): void {\n this.uint32(value.byteLength);\n for (let i = 0; i < value.byteLength; i++) this.buf[this.ptr++] = value[i]!;\n }\n\n string(value: string): void {\n const len: number = this.varlen(); // use precomputed length\n this.uint32(len);\n\n const binary: Uint8Array = utf8.get().encode(value);\n for (let i = 0; i < binary.byteLength; i++)\n this.buf[this.ptr++] = binary[i]!;\n }\n\n fork(): void {\n this.uint32(this.varlen()); // use precomputed length\n }\n\n ldelim(): void {\n // nothing to do - all dirty work done by sizer\n }\n\n finish(): Uint8Array {\n return this.buf;\n }\n\n reset(): void {\n this.buf = new Uint8Array(this.sizer.len);\n this.view = new DataView(this.buf.buffer);\n this.ptr = 0;\n this.varlenidx = 0;\n }\n\n private variant32(val: number): void {\n while (val > 0x7f) {\n this.buf[this.ptr++] = (val & 0x7f) | 0x80;\n val = val >>> 7;\n }\n this.buf[this.ptr++] = val;\n }\n\n private variant64(val: bigint): void {\n val = BigInt.asUintN(64, val);\n while (val > BigInt(0x7f)) {\n this.buf[this.ptr++] = Number((val & BigInt(0x7f)) | BigInt(0x80));\n val = val >> BigInt(0x07);\n }\n this.buf[this.ptr++] = Number(val);\n }\n\n private varlen(): number {\n return this.varlenidx >= this.sizer.varlen.length\n ? 0\n : this.sizer.varlen[this.varlenidx++]!;\n }\n}\nconst utf8 = new Singleton(() => new TextEncoder());\n"],"mappings":";;AAMA,IAAa,kBAAb,MAAyD;CAgBvD,YAAY,OAAuB;EACjC,KAAK,QAAQ;EACb,KAAK,MAAM,IAAI,WAAW,MAAM,GAAG;EACnC,KAAK,OAAO,IAAI,SAAS,KAAK,IAAI,MAAM;EACxC,KAAK,MAAM;EACX,KAAK,YAAY;CACnB;CAEA,SAAqB;EACnB,OAAO,KAAK;CACd;CAEA,KAAK,OAAsB;EACzB,KAAK,KAAK,QAAQ,IAAI,CAAC;CACzB;CAEA,KAAK,OAAqB;EACxB,KAAK,IAAI,KAAK,SAAS,QAAQ;CACjC;CAEA,MAAM,OAAqB;EACzB,IAAI,QAAQ,GAAG,KAAK,MAAM,KAAK;OAC1B,KAAK,UAAU,UAAU,CAAC;CACjC;CAEA,OAAO,OAAqB;EAC1B,KAAK,UAAW,SAAS,IAAM,SAAS,EAAG;CAC7C;CAEA,OAAO,OAAqB;EAC1B,KAAK,UAAU,KAAK;CACtB;CAEA,OAAO,OAA8B;EACnC,QAAQ,OAAO,KAAK;EACpB,KAAK,UAAW,SAAS,OAAO,CAAI,IAAM,SAAS,OAAO,EAAI,CAAE;CAClE;CAEA,MAAM,OAA8B;EAClC,KAAK,UAAU,OAAO,KAAK,CAAC;CAC9B;CAEA,OAAO,OAA8B;EACnC,KAAK,UAAU,OAAO,KAAK,CAAC;CAC9B;CAEA,MAAM,KAAmB;EACvB,KAAK,KAAK,WAAW,KAAK,KAAK,KAAK,IAAI;EACxC,KAAK,OAAO;CACd;CAEA,OAAO,KAAmB;EACxB,KAAK,KAAK,WAAW,KAAK,KAAK,KAAK,IAAI;EACxC,KAAK,OAAO;CACd;CAEA,MAAM,OAAyB;EAC7B,KAAK,OAAO,MAAM,UAAU;EAC5B,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,YAAY,KAAK,KAAK,IAAI,KAAK,SAAS,MAAM;CAC1E;CAEA,OAAO,OAAqB;EAC1B,MAAM,MAAc,KAAK,OAAO;EAChC,KAAK,OAAO,GAAG;EAEf,MAAM,SAAqB,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK;EAClD,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,YAAY,KACrC,KAAK,IAAI,KAAK,SAAS,OAAO;CAClC;CAEA,OAAa;EACX,KAAK,OAAO,KAAK,OAAO,CAAC;CAC3B;CAEA,SAAe,CAEf;CAEA,SAAqB;EACnB,OAAO,KAAK;CACd;CAEA,QAAc;EACZ,KAAK,MAAM,IAAI,WAAW,KAAK,MAAM,GAAG;EACxC,KAAK,OAAO,IAAI,SAAS,KAAK,IAAI,MAAM;EACxC,KAAK,MAAM;EACX,KAAK,YAAY;CACnB;CAEA,UAAkB,KAAmB;EACnC,OAAO,MAAM,KAAM;GACjB,KAAK,IAAI,KAAK,SAAU,MAAM,MAAQ;GACtC,MAAM,QAAQ;EAChB;EACA,KAAK,IAAI,KAAK,SAAS;CACzB;CAEA,UAAkB,KAAmB;EACnC,MAAM,OAAO,QAAQ,IAAI,GAAG;EAC5B,OAAO,MAAM,OAAO,GAAI,GAAG;GACzB,KAAK,IAAI,KAAK,SAAS,OAAQ,MAAM,OAAO,GAAI,IAAK,OAAO,GAAI,CAAC;GACjE,MAAM,OAAO,OAAO,CAAI;EAC1B;EACA,KAAK,IAAI,KAAK,SAAS,OAAO,GAAG;CACnC;CAEA,SAAyB;EACvB,OAAO,KAAK,aAAa,KAAK,MAAM,OAAO,SACvC,IACA,KAAK,MAAM,OAAO,KAAK;CAC7B;AACF;AACA,MAAM,OAAO,IAAI,gBAAgB,IAAI,YAAY,CAAC"}