123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- "use strict";
- //binary data writer tuned for encoding binary specific to the postgres binary protocol
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.Writer = void 0;
- class Writer {
- constructor(size = 256) {
- this.size = size;
- this.offset = 5;
- this.headerPosition = 0;
- this.buffer = Buffer.allocUnsafe(size);
- }
- ensure(size) {
- var remaining = this.buffer.length - this.offset;
- if (remaining < size) {
- var oldBuffer = this.buffer;
- // exponential growth factor of around ~ 1.5
- // https://stackoverflow.com/questions/2269063/buffer-growth-strategy
- var newSize = oldBuffer.length + (oldBuffer.length >> 1) + size;
- this.buffer = Buffer.allocUnsafe(newSize);
- oldBuffer.copy(this.buffer);
- }
- }
- addInt32(num) {
- this.ensure(4);
- this.buffer[this.offset++] = (num >>> 24) & 0xff;
- this.buffer[this.offset++] = (num >>> 16) & 0xff;
- this.buffer[this.offset++] = (num >>> 8) & 0xff;
- this.buffer[this.offset++] = (num >>> 0) & 0xff;
- return this;
- }
- addInt16(num) {
- this.ensure(2);
- this.buffer[this.offset++] = (num >>> 8) & 0xff;
- this.buffer[this.offset++] = (num >>> 0) & 0xff;
- return this;
- }
- addCString(string) {
- if (!string) {
- this.ensure(1);
- }
- else {
- var len = Buffer.byteLength(string);
- this.ensure(len + 1); // +1 for null terminator
- this.buffer.write(string, this.offset, 'utf-8');
- this.offset += len;
- }
- this.buffer[this.offset++] = 0; // null terminator
- return this;
- }
- addString(string = '') {
- var len = Buffer.byteLength(string);
- this.ensure(len);
- this.buffer.write(string, this.offset);
- this.offset += len;
- return this;
- }
- add(otherBuffer) {
- this.ensure(otherBuffer.length);
- otherBuffer.copy(this.buffer, this.offset);
- this.offset += otherBuffer.length;
- return this;
- }
- join(code) {
- if (code) {
- this.buffer[this.headerPosition] = code;
- //length is everything in this packet minus the code
- const length = this.offset - (this.headerPosition + 1);
- this.buffer.writeInt32BE(length, this.headerPosition + 1);
- }
- return this.buffer.slice(code ? 0 : 5, this.offset);
- }
- flush(code) {
- var result = this.join(code);
- this.offset = 5;
- this.headerPosition = 0;
- this.buffer = Buffer.allocUnsafe(this.size);
- return result;
- }
- }
- exports.Writer = Writer;
- //# sourceMappingURL=buffer-writer.js.map
|