@m2k-5f/pgtx 2.7.1 → 2.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -22,6 +22,8 @@ export declare class ConnectionResponseBuffer {
22
22
  readBool(): boolean;
23
23
  readBigInt64(): bigint;
24
24
  readInt64(): number;
25
+ readNumeric(): string;
26
+ readBinaryTimetz(): string;
25
27
  readFloat32(): number;
26
28
  readFloat64(): number;
27
29
  readUuid(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"connection-response-reader.d.ts","sourceRoot":"","sources":["../../src/protocol/connection-response-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAA6B,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC5G,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAOxC,qBAAa,wBAAwB;IAI7B,OAAO,CAAC,MAAM;IAHlB,OAAO,CAAC,KAAK,CAAI;IAEjB,OAAO;IAKP,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;IAK1B,QAAQ,IAAI,MAAM;IAOlB,SAAS,IAAI,MAAM;IAOnB,SAAS,IAAI,MAAM;IAOnB,WAAW,IAAI,MAAM;IAQrB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAOrC,OAAO,IAAI,OAAO;IAKlB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAO3C,cAAc,IAAI,IAAI;IAOtB,mBAAmB,IAAI,IAAI;IAO3B,cAAc,IAAI,MAAM;IAaxB,SAAS,CAAC,SAAS,EAAE,MAAM;IAK3B,aAAa,IAAI,OAAO;IAaxB,iBAAiB;IAIjB,QAAQ;IAMR,YAAY,IAAI,MAAM;IAOtB,SAAS;IAST,WAAW;IAOX,WAAW,IAAI,MAAM;IAMrB,QAAQ;IAWR,SAAS,CAAC,MAAM,EAAE,MAAM;IAQxB,aAAa,CAAC,MAAM,EAAE,MAAM;CAW/B;AAGD,qBAAa,wBAAwB;IAG7B,OAAO,CAAC,MAAM;IADlB,OAAO;IAKP,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;IAK1B,QAAQ;cACoC,YAAY;;;IAIxD,kBAAkB,IACoB,kBAAkB;IAIxD,WAAW;IAKX,mBAAmB;;;;IAQnB,kBAAkB;;;;IAQlB,iBAAiB,IAAI,aAAa;IA4ClC,iBAAiB,IACoB,iBAAiB;IAItD,kBAAkB,IAAI,MAAM,EAAE;IAa9B,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAKvC,kBAAkB;IAsBlB,WAAW,CAAC,YAAY,EAAE,iBAAiB,EAAE,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IA0G1F,wBAAwB;;;;IASxB,mBAAmB,IAAI,MAAM;IAK7B,OAAO;IAKP,aAAa;IAKb,iBAAiB;IAKjB,iBAAiB;IAGjB,gBAAgB;IAGhB,wBAAwB;IAOxB,UAAU;IAEV,IAAI,CAAC,KAAK,EAAE,MAAM;CAGrB"}
1
+ {"version":3,"file":"connection-response-reader.d.ts","sourceRoot":"","sources":["../../src/protocol/connection-response-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAA6B,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC5G,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAOxC,qBAAa,wBAAwB;IAI7B,OAAO,CAAC,MAAM;IAHlB,OAAO,CAAC,KAAK,CAAI;IAEjB,OAAO;IAKP,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;IAK1B,QAAQ,IAAI,MAAM;IAOlB,SAAS,IAAI,MAAM;IAOnB,SAAS,IAAI,MAAM;IAOnB,WAAW,IAAI,MAAM;IAQrB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAOrC,OAAO,IAAI,OAAO;IAKlB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAO3C,cAAc,IAAI,IAAI;IAOtB,mBAAmB,IAAI,IAAI;IAO3B,cAAc,IAAI,MAAM;IAaxB,SAAS,CAAC,SAAS,EAAE,MAAM;IAK3B,aAAa,IAAI,OAAO;IAaxB,iBAAiB;IAIjB,QAAQ;IAMR,YAAY,IAAI,MAAM;IAOtB,SAAS;IAST,WAAW,IAAI,MAAM;IA2CrB,gBAAgB,IAAI,MAAM;IAY1B,WAAW;IAOX,WAAW,IAAI,MAAM;IAMrB,QAAQ;IAWR,SAAS,CAAC,MAAM,EAAE,MAAM;IAQxB,aAAa,CAAC,MAAM,EAAE,MAAM;CAW/B;AAGD,qBAAa,wBAAwB;IAG7B,OAAO,CAAC,MAAM;IADlB,OAAO;IAKP,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;IAK1B,QAAQ;cACoC,YAAY;;;IAIxD,kBAAkB,IACoB,kBAAkB;IAIxD,WAAW;IAKX,mBAAmB;;;;IAQnB,kBAAkB;;;;IAQlB,iBAAiB,IAAI,aAAa;IA4ClC,iBAAiB,IACoB,iBAAiB;IAItD,kBAAkB,IAAI,MAAM,EAAE;IAa9B,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAKvC,kBAAkB;IAsBlB,WAAW,CAAC,YAAY,EAAE,iBAAiB,EAAE,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAsH1F,wBAAwB;;;;IASxB,mBAAmB,IAAI,MAAM;IAK7B,OAAO;IAKP,aAAa;IAKb,iBAAiB;IAKjB,iBAAiB;IAGjB,gBAAgB;IAGhB,wBAAwB;IAOxB,UAAU;IAEV,IAAI,CAAC,KAAK,EAAE,MAAM;CAGrB"}
@@ -94,6 +94,53 @@ export class ConnectionResponseBuffer {
94
94
  this.caret += 8;
95
95
  return (hi * 4294967296) + lo;
96
96
  }
97
+ readNumeric() {
98
+ const ndigits = this.readInt16();
99
+ const weight = this.readInt16();
100
+ const sign = this.readInt16();
101
+ const dscale = this.readInt16();
102
+ if (sign === 0xC000 || sign === -16384)
103
+ return 'NaN';
104
+ const digits = new Array(ndigits);
105
+ for (let i = 0; i < ndigits; i++) {
106
+ digits[i] = this.readInt16();
107
+ }
108
+ const highExp = Math.max(weight, 0);
109
+ const lowExp = Math.min(weight - ndigits + 1, -1);
110
+ let intPart = '';
111
+ for (let exp = highExp; exp >= 0; exp--) {
112
+ const idx = weight - exp;
113
+ const digit = (idx >= 0 && idx < ndigits) ? digits[idx] : 0;
114
+ intPart += exp === highExp ? String(digit) : String(digit).padStart(4, '0');
115
+ }
116
+ if (intPart === '')
117
+ intPart = '0';
118
+ let fracPart = '';
119
+ for (let exp = -1; exp >= lowExp; exp--) {
120
+ const idx = weight - exp;
121
+ const digit = (idx >= 0 && idx < ndigits) ? digits[idx] : 0;
122
+ fracPart += String(digit).padStart(4, '0');
123
+ }
124
+ if (dscale > 0) {
125
+ fracPart = fracPart.padEnd(dscale, '0').slice(0, dscale);
126
+ }
127
+ else {
128
+ fracPart = '';
129
+ }
130
+ const negative = sign === 0x4000 || sign === 16384;
131
+ const result = fracPart ? `${intPart}.${fracPart}` : intPart;
132
+ return negative ? `-${result}` : result;
133
+ }
134
+ readBinaryTimetz() {
135
+ const time = this.readBinaryTime();
136
+ const zoneOffsetSeconds = this.readInt32();
137
+ const offsetMinutesTotal = -zoneOffsetSeconds / 60;
138
+ const sign = offsetMinutesTotal >= 0 ? '+' : '-';
139
+ const abs = Math.abs(offsetMinutesTotal);
140
+ const offH = Math.floor(abs / 60);
141
+ const offM = abs % 60;
142
+ return `${time}${sign}${String(offH).padStart(2, '0')}:${String(offM).padStart(2, '0')}`;
143
+ }
97
144
  readFloat32() {
98
145
  const value = this.buffer.readFloatBE(this.caret);
99
146
  this.caret += 4;
@@ -339,6 +386,21 @@ export class ConnectionResponseReader {
339
386
  row[key] = this.buffer.readUuid();
340
387
  }
341
388
  break;
389
+ case DataTypeOids.Time:
390
+ {
391
+ row[key] = this.buffer.readBinaryTime();
392
+ }
393
+ break;
394
+ case DataTypeOids.Timetz:
395
+ {
396
+ row[key] = this.buffer.readBinaryTimetz();
397
+ }
398
+ break;
399
+ case DataTypeOids.Numeric:
400
+ {
401
+ row[key] = this.buffer.readNumeric();
402
+ }
403
+ break;
342
404
  default:
343
405
  {
344
406
  this.buffer.skipBytes(fieldLength);
@@ -127,7 +127,7 @@ export const authorizeSocket = (socket, config) => {
127
127
  case AuthenticationCodes.CleartextPassword:
128
128
  {
129
129
  if (!config.password)
130
- throw ErrPasswordRequired;
130
+ return reject(ErrPasswordRequired);
131
131
  connector.write(writer.writePassword(config.password));
132
132
  writer.clear();
133
133
  }
@@ -136,7 +136,7 @@ export const authorizeSocket = (socket, config) => {
136
136
  {
137
137
  const salt = reader.readMD5Salt();
138
138
  if (!config.password)
139
- throw ErrPasswordRequired;
139
+ return reject(ErrPasswordRequired);
140
140
  const password = encryptMd5(config.password, config.user, salt);
141
141
  connector.write(writer.writePassword(password));
142
142
  writer.clear();
@@ -146,7 +146,7 @@ export const authorizeSocket = (socket, config) => {
146
146
  {
147
147
  reader.readSaslMechanisms();
148
148
  if (!config.password)
149
- throw ErrPasswordRequired;
149
+ return reject(ErrPasswordRequired);
150
150
  clientMessage = `n=${config.user},r=${nonce}`;
151
151
  connector.write(writer.writeSaslInitial('SCRAM-SHA-256', `n,,${clientMessage}`));
152
152
  writer.clear();
@@ -156,7 +156,7 @@ export const authorizeSocket = (socket, config) => {
156
156
  {
157
157
  serverMessage = reader.readSaslMessage(length);
158
158
  if (!config.password)
159
- throw ErrPasswordRequired;
159
+ return reject(ErrPasswordRequired);
160
160
  const parts = Object.fromEntries(serverMessage.split(',').map(x => x.split('=')));
161
161
  const serverNonce = parts.r;
162
162
  const saltBase64 = parts.s;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m2k-5f/pgtx",
3
- "version": "2.7.1",
3
+ "version": "2.7.2",
4
4
  "type": "module",
5
5
  "description": "Blazing-fast PostgreSQL driver with pipeline support.",
6
6
  "files": [