@zvndev/powdb-client 0.3.1 → 0.3.3

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.
package/README.md CHANGED
@@ -304,6 +304,10 @@ The client enforces the same frame limits as the server and throws on violation:
304
304
  - Node.js 18+ (uses `node:net`, `node:tls`)
305
305
  - A running PowDB server (`cargo run --release -p powdb-server`)
306
306
 
307
+ For local development, `npm test` and `npm run test:pool` start a disposable
308
+ PowDB server automatically when `POWDB_PORT` is not set. Set `POWDB_HOST` and
309
+ `POWDB_PORT` to run those tests against an existing server.
310
+
307
311
  ## License
308
312
 
309
313
  MIT
package/dist/index.d.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  * protocol.
6
6
  *
7
7
  * const client = await Client.connect({
8
- * host: "213.188.194.202",
8
+ * host: "127.0.0.1",
9
9
  * port: 5433,
10
10
  * dbName: "default",
11
11
  * password: process.env.POWDB_PASSWORD,
@@ -18,7 +18,7 @@ import * as tls from "node:tls";
18
18
  import { EventEmitter } from "node:events";
19
19
  import { type TypedRow, type TypedSchema } from "./typed.js";
20
20
  /** Client library version. Compared to the server's reported version. */
21
- export declare const CLIENT_VERSION = "0.3.1";
21
+ export declare const CLIENT_VERSION = "0.3.3";
22
22
  export type QueryResult = {
23
23
  kind: "rows";
24
24
  columns: string[];
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@
5
5
  * protocol.
6
6
  *
7
7
  * const client = await Client.connect({
8
- * host: "213.188.194.202",
8
+ * host: "127.0.0.1",
9
9
  * port: 5433,
10
10
  * dbName: "default",
11
11
  * password: process.env.POWDB_PASSWORD,
@@ -21,7 +21,7 @@ import { encode, tryDecode } from "./protocol.js";
21
21
  import { PowDBError } from "./errors.js";
22
22
  import { coerceRows, } from "./typed.js";
23
23
  /** Client library version. Compared to the server's reported version. */
24
- export const CLIENT_VERSION = "0.3.1";
24
+ export const CLIENT_VERSION = "0.3.3";
25
25
  /** Module-level set of host:port pairs we've already warned about. */
26
26
  const versionWarnings = new Set();
27
27
  /** Extract the major component of a dotted version string, e.g. "0.2.0" → "0". */
package/dist/protocol.js CHANGED
@@ -131,8 +131,7 @@ function decodePayload(msgType, payload) {
131
131
  case MSG_QUERY:
132
132
  return { type: "Query", query: decodeString(payload, cursor) };
133
133
  case MSG_RESULT_ROWS: {
134
- const colCount = payload.readUInt16LE(cursor.pos);
135
- cursor.pos += 2;
134
+ const colCount = readU16(payload, cursor, "column count");
136
135
  if (colCount > MAX_COLUMNS) {
137
136
  throw new Error(`too many columns: ${colCount} (max ${MAX_COLUMNS})`);
138
137
  }
@@ -140,8 +139,7 @@ function decodePayload(msgType, payload) {
140
139
  for (let i = 0; i < colCount; i++) {
141
140
  columns.push(decodeString(payload, cursor));
142
141
  }
143
- const rowCount = payload.readUInt32LE(cursor.pos);
144
- cursor.pos += 4;
142
+ const rowCount = readU32(payload, cursor, "row count");
145
143
  if (rowCount > MAX_ROWS) {
146
144
  throw new Error(`too many rows: ${rowCount} (max ${MAX_ROWS})`);
147
145
  }
@@ -158,7 +156,7 @@ function decodePayload(msgType, payload) {
158
156
  case MSG_RESULT_SCALAR:
159
157
  return { type: "ResultScalar", value: decodeString(payload, cursor) };
160
158
  case MSG_RESULT_OK: {
161
- const affected = payload.readBigUInt64LE(0);
159
+ const affected = readU64(payload, cursor, "affected count");
162
160
  return { type: "ResultOk", affected };
163
161
  }
164
162
  case MSG_ERROR:
@@ -185,8 +183,7 @@ function decodeString(buf, cursor) {
185
183
  if (cursor.pos + 4 > buf.length) {
186
184
  throw new Error("truncated string length");
187
185
  }
188
- const len = buf.readUInt32LE(cursor.pos);
189
- cursor.pos += 4;
186
+ const len = readU32(buf, cursor, "string length");
190
187
  if (cursor.pos + len > buf.length) {
191
188
  throw new Error("truncated string data");
192
189
  }
@@ -194,6 +191,30 @@ function decodeString(buf, cursor) {
194
191
  cursor.pos += len;
195
192
  return s;
196
193
  }
194
+ function readU16(buf, cursor, label) {
195
+ if (cursor.pos + 2 > buf.length) {
196
+ throw new Error(`truncated ${label}`);
197
+ }
198
+ const value = buf.readUInt16LE(cursor.pos);
199
+ cursor.pos += 2;
200
+ return value;
201
+ }
202
+ function readU32(buf, cursor, label) {
203
+ if (cursor.pos + 4 > buf.length) {
204
+ throw new Error(`truncated ${label}`);
205
+ }
206
+ const value = buf.readUInt32LE(cursor.pos);
207
+ cursor.pos += 4;
208
+ return value;
209
+ }
210
+ function readU64(buf, cursor, label) {
211
+ if (cursor.pos + 8 > buf.length) {
212
+ throw new Error(`truncated ${label}`);
213
+ }
214
+ const value = buf.readBigUInt64LE(cursor.pos);
215
+ cursor.pos += 8;
216
+ return value;
217
+ }
197
218
  function u32LE(n) {
198
219
  const b = Buffer.alloc(4);
199
220
  b.writeUInt32LE(n, 0);
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@zvndev/powdb-client",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "TypeScript client for PowDB (PowQL wire protocol)",
5
5
  "type": "module",
6
+ "packageManager": "pnpm@10.29.3",
6
7
  "main": "dist/index.js",
7
8
  "types": "dist/index.d.ts",
8
9
  "exports": {
@@ -15,7 +16,7 @@
15
16
  "license": "MIT",
16
17
  "repository": {
17
18
  "type": "git",
18
- "url": "https://github.com/zvndev/powdb",
19
+ "url": "git+https://github.com/zvndev/powdb.git",
19
20
  "directory": "clients/ts"
20
21
  },
21
22
  "keywords": ["powdb", "database", "client", "powql"],
@@ -24,10 +25,10 @@
24
25
  },
25
26
  "scripts": {
26
27
  "build": "tsc -p tsconfig.json",
27
- "test": "tsx test/client.test.ts",
28
+ "test": "tsx test/run-with-server.ts test/client.test.ts",
28
29
  "test:escape": "tsx test/escape.test.ts",
29
30
  "test:protocol": "tsx test/protocol.test.ts",
30
- "test:pool": "tsx test/pool.test.ts",
31
+ "test:pool": "tsx test/run-with-server.ts test/pool.test.ts",
31
32
  "test:typed": "tsx test/typed.test.ts",
32
33
  "test:errors": "tsx test/errors.test.ts",
33
34
  "demo": "tsx demo/demo.ts",
package/src/index.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  * protocol.
6
6
  *
7
7
  * const client = await Client.connect({
8
- * host: "213.188.194.202",
8
+ * host: "127.0.0.1",
9
9
  * port: 5433,
10
10
  * dbName: "default",
11
11
  * password: process.env.POWDB_PASSWORD,
@@ -27,7 +27,7 @@ import {
27
27
  } from "./typed.js";
28
28
 
29
29
  /** Client library version. Compared to the server's reported version. */
30
- export const CLIENT_VERSION = "0.3.1";
30
+ export const CLIENT_VERSION = "0.3.3";
31
31
 
32
32
  export type QueryResult =
33
33
  | { kind: "rows"; columns: string[]; rows: string[][] }
package/src/protocol.ts CHANGED
@@ -156,8 +156,7 @@ function decodePayload(msgType: number, payload: Buffer): Message {
156
156
  case MSG_QUERY:
157
157
  return { type: "Query", query: decodeString(payload, cursor) };
158
158
  case MSG_RESULT_ROWS: {
159
- const colCount = payload.readUInt16LE(cursor.pos);
160
- cursor.pos += 2;
159
+ const colCount = readU16(payload, cursor, "column count");
161
160
  if (colCount > MAX_COLUMNS) {
162
161
  throw new Error(
163
162
  `too many columns: ${colCount} (max ${MAX_COLUMNS})`,
@@ -167,8 +166,7 @@ function decodePayload(msgType: number, payload: Buffer): Message {
167
166
  for (let i = 0; i < colCount; i++) {
168
167
  columns.push(decodeString(payload, cursor));
169
168
  }
170
- const rowCount = payload.readUInt32LE(cursor.pos);
171
- cursor.pos += 4;
169
+ const rowCount = readU32(payload, cursor, "row count");
172
170
  if (rowCount > MAX_ROWS) {
173
171
  throw new Error(
174
172
  `too many rows: ${rowCount} (max ${MAX_ROWS})`,
@@ -187,7 +185,7 @@ function decodePayload(msgType: number, payload: Buffer): Message {
187
185
  case MSG_RESULT_SCALAR:
188
186
  return { type: "ResultScalar", value: decodeString(payload, cursor) };
189
187
  case MSG_RESULT_OK: {
190
- const affected = payload.readBigUInt64LE(0);
188
+ const affected = readU64(payload, cursor, "affected count");
191
189
  return { type: "ResultOk", affected };
192
190
  }
193
191
  case MSG_ERROR:
@@ -217,8 +215,7 @@ function decodeString(buf: Buffer, cursor: { pos: number }): string {
217
215
  if (cursor.pos + 4 > buf.length) {
218
216
  throw new Error("truncated string length");
219
217
  }
220
- const len = buf.readUInt32LE(cursor.pos);
221
- cursor.pos += 4;
218
+ const len = readU32(buf, cursor, "string length");
222
219
  if (cursor.pos + len > buf.length) {
223
220
  throw new Error("truncated string data");
224
221
  }
@@ -227,6 +224,33 @@ function decodeString(buf: Buffer, cursor: { pos: number }): string {
227
224
  return s;
228
225
  }
229
226
 
227
+ function readU16(buf: Buffer, cursor: { pos: number }, label: string): number {
228
+ if (cursor.pos + 2 > buf.length) {
229
+ throw new Error(`truncated ${label}`);
230
+ }
231
+ const value = buf.readUInt16LE(cursor.pos);
232
+ cursor.pos += 2;
233
+ return value;
234
+ }
235
+
236
+ function readU32(buf: Buffer, cursor: { pos: number }, label: string): number {
237
+ if (cursor.pos + 4 > buf.length) {
238
+ throw new Error(`truncated ${label}`);
239
+ }
240
+ const value = buf.readUInt32LE(cursor.pos);
241
+ cursor.pos += 4;
242
+ return value;
243
+ }
244
+
245
+ function readU64(buf: Buffer, cursor: { pos: number }, label: string): bigint {
246
+ if (cursor.pos + 8 > buf.length) {
247
+ throw new Error(`truncated ${label}`);
248
+ }
249
+ const value = buf.readBigUInt64LE(cursor.pos);
250
+ cursor.pos += 8;
251
+ return value;
252
+ }
253
+
230
254
  function u32LE(n: number): Buffer {
231
255
  const b = Buffer.alloc(4);
232
256
  b.writeUInt32LE(n, 0);