@reifydb/client 0.0.1-alpha.1

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.
@@ -0,0 +1,74 @@
1
+ import { Params, SchemaNode, FrameResults } from '@reifydb/core';
2
+ export { Diagnostic, DiagnosticColumn, FrameResults, ReifyError, SingleFrameResult, Span, asFrameResults } from '@reifydb/core';
3
+
4
+ /**
5
+ * MIT License
6
+ * Copyright (c) 2025 ReifyDB
7
+ * See license.md file for full license text
8
+ */
9
+
10
+ interface CommandRequest {
11
+ id: string;
12
+ type: "Command";
13
+ payload: {
14
+ statements: string[];
15
+ params?: Params;
16
+ };
17
+ }
18
+ interface QueryRequest {
19
+ id: string;
20
+ type: "Query";
21
+ payload: {
22
+ statements: string[];
23
+ params?: Params;
24
+ };
25
+ }
26
+
27
+ interface WsClientOptions {
28
+ url: string;
29
+ timeoutMs?: number;
30
+ token?: string;
31
+ }
32
+ declare class WsClient {
33
+ private options;
34
+ private nextId;
35
+ private socket;
36
+ private pending;
37
+ private constructor();
38
+ static connect(options: WsClientOptions): Promise<WsClient>;
39
+ /**
40
+ * Execute command(s) with schemas for each statement for proper type inference
41
+ * @param statements - Single statement or array of RQL commands
42
+ * @param params - Parameters for the commands (use null or {} if no params)
43
+ * @param schemas - Schema for each statement's result
44
+ */
45
+ command<const S extends readonly SchemaNode[]>(statements: string | string[], params: any, schemas: S): Promise<FrameResults<S>>;
46
+ /**
47
+ * Execute query(s) with schemas for each statement for proper type inference
48
+ * @param statements - Single statement or array of RQL queries
49
+ * @param params - Parameters for the queries (use null or {} if no params)
50
+ * @param schemas - Schema for each statement's result
51
+ */
52
+ query<const S extends readonly SchemaNode[]>(statements: string | string[], params: any, schemas: S): Promise<FrameResults<S>>;
53
+ send(req: CommandRequest | QueryRequest): Promise<any>;
54
+ private transformResult;
55
+ disconnect(): void;
56
+ }
57
+
58
+ /**
59
+ * MIT License
60
+ * Copyright (c) 2025 ReifyDB
61
+ * See license.md file for full license text
62
+ */
63
+
64
+ declare class Client {
65
+ /**
66
+ * Connect to ReifyDB via WebSocket
67
+ * @param url WebSocket URL
68
+ * @param options Optional configuration
69
+ * @returns Connected WebSocket client
70
+ */
71
+ static connect_ws(url: string, options?: Omit<WsClientOptions, 'url'>): Promise<WsClient>;
72
+ }
73
+
74
+ export { Client, WsClient, type WsClientOptions };
package/dist/index.js ADDED
@@ -0,0 +1,325 @@
1
+ // src/ws.ts
2
+ import {
3
+ decode
4
+ } from "@reifydb/core";
5
+
6
+ // src/types.ts
7
+ import {
8
+ Params,
9
+ Frame,
10
+ DiagnosticColumn,
11
+ Span,
12
+ Diagnostic,
13
+ Column,
14
+ ErrorResponse,
15
+ ReifyError
16
+ } from "@reifydb/core";
17
+
18
+ // src/encoder.ts
19
+ import { UNDEFINED_VALUE } from "@reifydb/core";
20
+ function encodeValue(value) {
21
+ if (value === null || value === void 0) {
22
+ return { type: "Undefined", value: UNDEFINED_VALUE };
23
+ }
24
+ if (value && typeof value === "object" && "encode" in value && typeof value.encode === "function") {
25
+ return value.encode();
26
+ }
27
+ if (typeof value === "boolean") {
28
+ return { type: "Bool", value: value.toString() };
29
+ }
30
+ if (typeof value === "number") {
31
+ if (Number.isInteger(value)) {
32
+ if (value >= -128 && value <= 127) {
33
+ return { type: "Int1", value: value.toString() };
34
+ } else if (value >= -32768 && value <= 32767) {
35
+ return { type: "Int2", value: value.toString() };
36
+ } else if (value >= -2147483648 && value <= 2147483647) {
37
+ return { type: "Int4", value: value.toString() };
38
+ } else {
39
+ return { type: "Int8", value: value.toString() };
40
+ }
41
+ } else {
42
+ return { type: "Float8", value: value.toString() };
43
+ }
44
+ }
45
+ if (typeof value === "string") {
46
+ if (/^[0-9a-f]{8}-[0-9a-f]{4}-[47][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value)) {
47
+ const version = value[14];
48
+ if (version === "4") {
49
+ return { type: "Uuid4", value };
50
+ } else if (version === "7") {
51
+ return { type: "Uuid7", value };
52
+ }
53
+ }
54
+ return { type: "Utf8", value };
55
+ }
56
+ if (typeof value === "bigint") {
57
+ if (value >= BigInt(0)) {
58
+ if (value <= BigInt(255)) {
59
+ return { type: "Uint1", value: value.toString() };
60
+ } else if (value <= BigInt(65535)) {
61
+ return { type: "Uint2", value: value.toString() };
62
+ } else if (value <= BigInt(4294967295)) {
63
+ return { type: "Uint4", value: value.toString() };
64
+ } else if (value <= BigInt("18446744073709551615")) {
65
+ return { type: "Uint8", value: value.toString() };
66
+ } else {
67
+ return { type: "Uint16", value: value.toString() };
68
+ }
69
+ } else {
70
+ if (value >= BigInt("-9223372036854775808")) {
71
+ return { type: "Int8", value: value.toString() };
72
+ } else {
73
+ return { type: "Int16", value: value.toString() };
74
+ }
75
+ }
76
+ }
77
+ if (value instanceof Date) {
78
+ return { type: "DateTime", value: value.toISOString() };
79
+ }
80
+ if (value instanceof Uint8Array) {
81
+ const hex = Array.from(value).map((b) => b.toString(16).padStart(2, "0")).join("");
82
+ return { type: "Blob", value: "0x" + hex };
83
+ }
84
+ if (value instanceof ArrayBuffer) {
85
+ const uint8Array = new Uint8Array(value);
86
+ const hex = Array.from(uint8Array).map((b) => b.toString(16).padStart(2, "0")).join("");
87
+ return { type: "Blob", value: "0x" + hex };
88
+ }
89
+ throw new Error(`Cannot encode value of type ${typeof value}: ${value}`);
90
+ }
91
+ function encodeParams(params) {
92
+ if (params === void 0 || params === null) {
93
+ return [];
94
+ }
95
+ if (Array.isArray(params)) {
96
+ return params.map((param) => encodeValue(param));
97
+ } else if (typeof params === "object") {
98
+ const encoded = {};
99
+ for (const [key, value] of Object.entries(params)) {
100
+ encoded[key] = encodeValue(value);
101
+ }
102
+ return encoded;
103
+ }
104
+ throw new Error(`Invalid parameters type: expected array or object, got ${typeof params}`);
105
+ }
106
+
107
+ // src/ws.ts
108
+ async function createWebSocket(url) {
109
+ if (typeof window !== "undefined" && typeof window.WebSocket !== "undefined") {
110
+ return new WebSocket(url);
111
+ } else {
112
+ const wsModule = await import("ws");
113
+ return new wsModule.WebSocket(url);
114
+ }
115
+ }
116
+ var WsClient = class _WsClient {
117
+ constructor(socket, options) {
118
+ this.pending = /* @__PURE__ */ new Map();
119
+ this.options = options;
120
+ this.nextId = 1;
121
+ this.socket = socket;
122
+ this.socket.onmessage = (event) => {
123
+ const msg = JSON.parse(event.data);
124
+ const { id, type, payload } = msg;
125
+ const handler = this.pending.get(id);
126
+ if (!handler) {
127
+ return;
128
+ }
129
+ this.pending.delete(id);
130
+ handler({ id, type, payload });
131
+ };
132
+ this.socket.onerror = (err) => {
133
+ console.error("WebSocket error", err);
134
+ };
135
+ }
136
+ static async connect(options) {
137
+ const socket = await createWebSocket(options.url);
138
+ if (socket.readyState !== socket.OPEN) {
139
+ await new Promise((resolve, reject) => {
140
+ const onOpen = () => {
141
+ socket.removeEventListener("open", onOpen);
142
+ socket.removeEventListener("error", onError);
143
+ resolve();
144
+ };
145
+ const onError = () => {
146
+ socket.removeEventListener("open", onOpen);
147
+ socket.removeEventListener("error", onError);
148
+ reject(new Error("WebSocket connection failed"));
149
+ };
150
+ socket.addEventListener("open", onOpen);
151
+ socket.addEventListener("error", onError);
152
+ });
153
+ }
154
+ socket.send('{"id":"reifydb-auth-1","type":"Auth","payload":{"token":"mysecrettoken"}}');
155
+ return new _WsClient(socket, options);
156
+ }
157
+ /**
158
+ * Execute command(s) with schemas for each statement for proper type inference
159
+ * @param statements - Single statement or array of RQL commands
160
+ * @param params - Parameters for the commands (use null or {} if no params)
161
+ * @param schemas - Schema for each statement's result
162
+ */
163
+ async command(statements, params, schemas) {
164
+ const id = `req-${this.nextId++}`;
165
+ const statementArray = Array.isArray(statements) ? statements : [statements];
166
+ const encodedParams = params !== void 0 && params !== null ? encodeParams(params) : void 0;
167
+ const result = await this.send({
168
+ id,
169
+ type: "Command",
170
+ payload: {
171
+ statements: statementArray,
172
+ params: encodedParams
173
+ }
174
+ });
175
+ const transformedFrames = result.map((frame, frameIndex) => {
176
+ const frameSchema = schemas[frameIndex];
177
+ if (!frameSchema) {
178
+ return frame;
179
+ }
180
+ return frame.map((row) => this.transformResult(row, frameSchema));
181
+ });
182
+ return transformedFrames;
183
+ }
184
+ /**
185
+ * Execute query(s) with schemas for each statement for proper type inference
186
+ * @param statements - Single statement or array of RQL queries
187
+ * @param params - Parameters for the queries (use null or {} if no params)
188
+ * @param schemas - Schema for each statement's result
189
+ */
190
+ async query(statements, params, schemas) {
191
+ const id = `req-${this.nextId++}`;
192
+ const statementArray = Array.isArray(statements) ? statements : [statements];
193
+ const encodedParams = params !== void 0 && params !== null ? encodeParams(params) : void 0;
194
+ const result = await this.send({
195
+ id,
196
+ type: "Query",
197
+ payload: {
198
+ statements: statementArray,
199
+ params: encodedParams
200
+ }
201
+ });
202
+ const transformedFrames = result.map((frame, frameIndex) => {
203
+ const frameSchema = schemas[frameIndex];
204
+ if (!frameSchema) {
205
+ return frame;
206
+ }
207
+ return frame.map((row) => this.transformResult(row, frameSchema));
208
+ });
209
+ return transformedFrames;
210
+ }
211
+ async send(req) {
212
+ const id = req.id;
213
+ const response = await new Promise((resolve, reject) => {
214
+ const timeout = setTimeout(() => {
215
+ this.pending.delete(id);
216
+ reject(new Error("ReifyDB query timeout"));
217
+ }, this.options.timeoutMs);
218
+ this.pending.set(id, (res) => {
219
+ clearTimeout(timeout);
220
+ resolve(res);
221
+ });
222
+ this.socket.send(JSON.stringify(req));
223
+ });
224
+ if (response.type === "Err") {
225
+ throw new ReifyError(response);
226
+ }
227
+ if (response.type !== req.type) {
228
+ throw new Error(`Unexpected response type: ${response.type}`);
229
+ }
230
+ return response.payload.frames.map(
231
+ (frame) => columnsToRows(frame.columns)
232
+ );
233
+ }
234
+ transformResult(row, resultSchema) {
235
+ if (resultSchema && resultSchema.kind === "object" && resultSchema.properties) {
236
+ const transformedRow = {};
237
+ for (const [key, value] of Object.entries(row)) {
238
+ const propertySchema = resultSchema.properties[key];
239
+ if (propertySchema && propertySchema.kind === "primitive") {
240
+ if (value && typeof value === "object" && "value" in value) {
241
+ const rawValue = value.value;
242
+ if (propertySchema.type === "RowNumber" && typeof rawValue === "number") {
243
+ transformedRow[key] = BigInt(rawValue);
244
+ } else {
245
+ transformedRow[key] = rawValue;
246
+ }
247
+ } else {
248
+ transformedRow[key] = value;
249
+ }
250
+ } else if (propertySchema && propertySchema.kind === "value") {
251
+ transformedRow[key] = value;
252
+ } else {
253
+ transformedRow[key] = propertySchema ? this.transformResult(value, propertySchema) : value;
254
+ }
255
+ }
256
+ return transformedRow;
257
+ }
258
+ if (resultSchema && resultSchema.kind === "primitive") {
259
+ if (row && typeof row === "object" && "value" in row) {
260
+ const rawValue = row.value;
261
+ if (resultSchema.type === "RowNumber" && typeof rawValue === "number") {
262
+ return BigInt(rawValue);
263
+ }
264
+ return rawValue;
265
+ }
266
+ return row;
267
+ }
268
+ if (resultSchema && resultSchema.kind === "value") {
269
+ return row;
270
+ }
271
+ if (resultSchema && resultSchema.kind === "array") {
272
+ if (Array.isArray(row)) {
273
+ return row.map((item) => this.transformResult(item, resultSchema.items));
274
+ }
275
+ return row;
276
+ }
277
+ if (resultSchema && resultSchema.kind === "optional") {
278
+ if (row === void 0 || row === null) {
279
+ return void 0;
280
+ }
281
+ return this.transformResult(row, resultSchema.schema);
282
+ }
283
+ return row;
284
+ }
285
+ disconnect() {
286
+ this.socket.close();
287
+ }
288
+ };
289
+ function columnsToRows(columns) {
290
+ const rowCount = columns[0]?.data.length ?? 0;
291
+ return Array.from({ length: rowCount }, (_, i) => {
292
+ const row = {};
293
+ for (const col of columns) {
294
+ row[col.name] = decode({ type: col.ty, value: col.data[i] });
295
+ }
296
+ return row;
297
+ });
298
+ }
299
+
300
+ // src/index.ts
301
+ import { ReifyError as ReifyError2, Diagnostic as Diagnostic2, Span as Span2, DiagnosticColumn as DiagnosticColumn2 } from "@reifydb/core";
302
+ import { FrameResults as FrameResults2, SingleFrameResult, asFrameResults } from "@reifydb/core";
303
+ var Client = class {
304
+ /**
305
+ * Connect to ReifyDB via WebSocket
306
+ * @param url WebSocket URL
307
+ * @param options Optional configuration
308
+ * @returns Connected WebSocket client
309
+ */
310
+ static async connect_ws(url, options = {}) {
311
+ return WsClient.connect({ url, ...options });
312
+ }
313
+ };
314
+ export {
315
+ Client,
316
+ Diagnostic2 as Diagnostic,
317
+ DiagnosticColumn2 as DiagnosticColumn,
318
+ FrameResults2 as FrameResults,
319
+ ReifyError2 as ReifyError,
320
+ SingleFrameResult,
321
+ Span2 as Span,
322
+ WsClient,
323
+ asFrameResults
324
+ };
325
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ws.ts","../src/types.ts","../src/encoder.ts","../src/index.ts"],"sourcesContent":["/*\n * MIT License\n * Copyright (c) 2025 ReifyDB\n * See license.md file for full license text\n */\nimport {\n decode,\n Value,\n SchemaNode,\n InferSchemas,\n FrameResults\n} from \"@reifydb/core\";\n\nimport {\n CommandRequest,\n CommandResponse,\n ErrorResponse,\n QueryRequest,\n QueryResponse,\n ReifyError,\n Column,\n Params\n} from \"./types\";\nimport {encodeParams} from \"./encoder\";\n\nexport interface WsClientOptions {\n url: string;\n timeoutMs?: number;\n token?: string;\n}\n\ntype ResponsePayload = ErrorResponse | CommandResponse | QueryResponse;\n\nasync function createWebSocket(url: string): Promise<WebSocket> {\n if (typeof window !== \"undefined\" && typeof window.WebSocket !== \"undefined\") {\n return new WebSocket(url);\n } else {\n //@ts-ignore\n const wsModule = await import(\"ws\");\n return new wsModule.WebSocket(url);\n }\n}\n\n\nexport class WsClient {\n private options: WsClientOptions;\n private nextId: number;\n private socket: WebSocket;\n private pending = new Map<string, (response: ResponsePayload) => void>();\n\n private constructor(socket: WebSocket, options: WsClientOptions) {\n this.options = options;\n this.nextId = 1;\n this.socket = socket;\n\n this.socket.onmessage = (event) => {\n const msg = JSON.parse(event.data);\n const {id, type, payload} = msg;\n\n const handler = this.pending.get(id);\n if (!handler) {\n return;\n }\n\n this.pending.delete(id);\n handler({id, type, payload});\n };\n\n this.socket.onerror = (err) => {\n console.error(\"WebSocket error\", err);\n };\n }\n\n static async connect(options: WsClientOptions): Promise<WsClient> {\n const socket = await createWebSocket(options.url);\n\n // Wait for connection to open if not already open\n if (socket.readyState !== socket.OPEN) {\n await new Promise<void>((resolve, reject) => {\n const onOpen = () => {\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n resolve();\n };\n\n const onError = () => {\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n reject(new Error(\"WebSocket connection failed\"));\n };\n\n socket.addEventListener(\"open\", onOpen);\n socket.addEventListener(\"error\", onError);\n });\n }\n\n socket.send(\"{\\\"id\\\":\\\"reifydb-auth-1\\\",\\\"type\\\":\\\"Auth\\\",\\\"payload\\\":{\\\"token\\\":\\\"mysecrettoken\\\"}}\");\n\n return new WsClient(socket, options);\n }\n\n /**\n * Execute command(s) with schemas for each statement for proper type inference\n * @param statements - Single statement or array of RQL commands\n * @param params - Parameters for the commands (use null or {} if no params)\n * @param schemas - Schema for each statement's result\n */\n async command<const S extends readonly SchemaNode[]>(\n statements: string | string[],\n params: any,\n schemas: S\n ): Promise<FrameResults<S>> {\n const id = `req-${this.nextId++}`;\n\n // Normalize statements to array\n const statementArray = Array.isArray(statements) ? statements : [statements];\n\n // Encode params without schema assumptions\n const encodedParams = params !== undefined && params !== null\n ? encodeParams(params)\n : undefined;\n\n const result = await this.send({\n id,\n type: \"Command\",\n payload: {\n statements: statementArray,\n params: encodedParams\n },\n });\n\n // Transform each frame with its corresponding schema\n const transformedFrames = result.map((frame: any, frameIndex: number) => {\n const frameSchema = schemas[frameIndex];\n if (!frameSchema) {\n return frame; // No schema for this frame, return as-is\n }\n return frame.map((row: any) => this.transformResult(row, frameSchema));\n });\n\n return transformedFrames as FrameResults<S>;\n }\n\n\n /**\n * Execute query(s) with schemas for each statement for proper type inference\n * @param statements - Single statement or array of RQL queries\n * @param params - Parameters for the queries (use null or {} if no params)\n * @param schemas - Schema for each statement's result\n */\n async query<const S extends readonly SchemaNode[]>(\n statements: string | string[],\n params: any,\n schemas: S\n ): Promise<FrameResults<S>> {\n const id = `req-${this.nextId++}`;\n\n // Normalize statements to array\n const statementArray = Array.isArray(statements) ? statements : [statements];\n\n // Encode params without schema assumptions\n const encodedParams = params !== undefined && params !== null\n ? encodeParams(params)\n : undefined;\n\n const result = await this.send({\n id,\n type: \"Query\",\n payload: {\n statements: statementArray,\n params: encodedParams\n },\n });\n\n // Transform each frame with its corresponding schema\n const transformedFrames = result.map((frame: any, frameIndex: number) => {\n const frameSchema = schemas[frameIndex];\n if (!frameSchema) {\n return frame; // No schema for this frame, return as-is\n }\n return frame.map((row: any) => this.transformResult(row, frameSchema));\n });\n\n return transformedFrames as FrameResults<S>;\n }\n\n async send(req: CommandRequest | QueryRequest): Promise<any> {\n const id = req.id;\n\n const response = await new Promise<ResponsePayload>((resolve, reject) => {\n const timeout = setTimeout(() => {\n this.pending.delete(id);\n reject(new Error(\"ReifyDB query timeout\"));\n }, this.options.timeoutMs);\n\n this.pending.set(id, (res) => {\n clearTimeout(timeout);\n resolve(res);\n });\n\n this.socket.send(JSON.stringify(req));\n });\n\n if (response.type === \"Err\") {\n throw new ReifyError(response);\n\n }\n\n if (response.type !== req.type) {\n throw new Error(`Unexpected response type: ${response.type}`);\n }\n\n return response.payload.frames.map((frame) =>\n columnsToRows(frame.columns)\n );\n }\n\n\n private transformResult(row: any, resultSchema: any): any {\n // Handle object schema with primitive or value properties\n if (resultSchema && resultSchema.kind === 'object' && resultSchema.properties) {\n const transformedRow: any = {};\n for (const [key, value] of Object.entries(row)) {\n const propertySchema = resultSchema.properties[key];\n if (propertySchema && propertySchema.kind === 'primitive') {\n // Convert Value objects to primitives for primitive schema properties\n if (value && typeof value === 'object' && 'value' in value) {\n const rawValue = (value as any).value;\n // Special handling for RowNumber - ensure it's returned as bigint\n if (propertySchema.type === 'RowNumber' && typeof rawValue === 'number') {\n transformedRow[key] = BigInt(rawValue);\n } else {\n transformedRow[key] = rawValue;\n }\n } else {\n transformedRow[key] = value;\n }\n } else if (propertySchema && propertySchema.kind === 'value') {\n // Keep Value objects as-is for value schema properties\n transformedRow[key] = value;\n } else {\n // Recursively transform nested structures\n transformedRow[key] = propertySchema ? this.transformResult(value, propertySchema) : value;\n }\n }\n return transformedRow;\n }\n\n // Handle primitive schema transformation\n if (resultSchema && resultSchema.kind === 'primitive') {\n // Single primitive value - extract from Value object if needed\n if (row && typeof row === 'object' && 'value' in row) {\n const rawValue = row.value;\n // Special handling for RowNumber - ensure it's returned as bigint\n if (resultSchema.type === 'RowNumber' && typeof rawValue === 'number') {\n return BigInt(rawValue);\n }\n return rawValue;\n }\n return row;\n }\n\n // Handle value schema transformation - keep Value objects as-is\n if (resultSchema && resultSchema.kind === 'value') {\n return row;\n }\n\n // Handle array schema\n if (resultSchema && resultSchema.kind === 'array') {\n if (Array.isArray(row)) {\n return row.map((item: any) => this.transformResult(item, resultSchema.items));\n }\n return row;\n }\n\n // Handle optional schema\n if (resultSchema && resultSchema.kind === 'optional') {\n if (row === undefined || row === null) {\n return undefined;\n }\n return this.transformResult(row, resultSchema.schema);\n }\n\n // Default: return as-is\n return row;\n }\n\n disconnect() {\n this.socket.close();\n }\n}\n\n\nfunction columnsToRows(columns: Column[]): Record<string, Value>[] {\n const rowCount = columns[0]?.data.length ?? 0;\n return Array.from({length: rowCount}, (_, i) => {\n const row: Record<string, Value> = {};\n for (const col of columns) {\n row[col.name] = decode({type: col.ty, value: col.data[i]});\n }\n return row;\n });\n}","/**\n * MIT License\n * Copyright (c) 2025 ReifyDB\n * See license.md file for full license text\n */\n\nimport { Params, Frame } from \"@reifydb/core\";\n\n// Re-export common types from core\nexport {\n Params,\n Frame,\n DiagnosticColumn,\n Span,\n Diagnostic,\n Column,\n ErrorResponse,\n ReifyError\n} from \"@reifydb/core\";\n\nexport interface CommandRequest {\n id: string;\n type: \"Command\";\n payload: {\n statements: string[];\n params?: Params;\n }\n}\n\nexport interface CommandResponse {\n id: string;\n type: \"Command\";\n payload: {\n frames: Frame[];\n };\n}\n\nexport interface QueryRequest {\n id: string;\n type: \"Query\";\n payload: {\n statements: string[];\n params?: Params;\n }\n}\n\nexport interface QueryResponse {\n id: string;\n type: \"Query\";\n payload: {\n frames: Frame[];\n };\n}","/**\n * MIT License\n * Copyright (c) 2025 ReifyDB\n * See license.md file for full license text\n */\n\nimport {Type, UNDEFINED_VALUE} from \"@reifydb/core\";\n\nexport interface TypeValuePair {\n type: Type;\n value: string;\n}\n\nexport function encodeValue(value: any): TypeValuePair {\n\n if (value === null || value === undefined) {\n return { type: 'Undefined', value: UNDEFINED_VALUE };\n }\n \n if (value && typeof value === 'object' && 'encode' in value && typeof value.encode === 'function') {\n return value.encode();\n }\n \n if (typeof value === 'boolean') {\n return { type: 'Bool', value: value.toString() };\n }\n \n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n // Choose appropriate integer type based on value range\n if (value >= -128 && value <= 127) {\n return { type: 'Int1', value: value.toString() };\n } else if (value >= -32768 && value <= 32767) {\n return { type: 'Int2', value: value.toString() };\n } else if (value >= -2147483648 && value <= 2147483647) {\n return { type: 'Int4', value: value.toString() };\n } else {\n return { type: 'Int8', value: value.toString() };\n }\n } else {\n // Floating point number\n return { type: 'Float8', value: value.toString() };\n }\n }\n \n if (typeof value === 'string') {\n if (/^[0-9a-f]{8}-[0-9a-f]{4}-[47][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value)) {\n const version = value[14];\n if (version === '4') {\n return { type: 'Uuid4', value: value };\n } else if (version === '7') {\n return { type: 'Uuid7', value: value };\n }\n }\n return { type: 'Utf8', value: value };\n }\n \n if (typeof value === 'bigint') {\n if (value >= BigInt(0)) {\n if (value <= BigInt(255)) {\n return { type: 'Uint1', value: value.toString() };\n } else if (value <= BigInt(65535)) {\n return { type: 'Uint2', value: value.toString() };\n } else if (value <= BigInt(4294967295)) {\n return { type: 'Uint4', value: value.toString() };\n } else if (value <= BigInt('18446744073709551615')) {\n return { type: 'Uint8', value: value.toString() };\n } else {\n return { type: 'Uint16', value: value.toString() };\n }\n } else {\n if (value >= BigInt('-9223372036854775808')) {\n return { type: 'Int8', value: value.toString() };\n } else {\n return { type: 'Int16', value: value.toString() };\n }\n }\n }\n \n if (value instanceof Date) {\n return { type: 'DateTime', value: value.toISOString() };\n }\n \n if (value instanceof Uint8Array) {\n const hex = Array.from(value)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n return { type: 'Blob', value: '0x' + hex };\n }\n \n if (value instanceof ArrayBuffer) {\n const uint8Array = new Uint8Array(value);\n const hex = Array.from(uint8Array)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n return { type: 'Blob', value: '0x' + hex };\n }\n \n throw new Error(`Cannot encode value of type ${typeof value}: ${value}`);\n}\n\nexport function encodeParams(params: any): TypeValuePair[] | Record<string, TypeValuePair> {\n if (params === undefined || params === null) {\n return [];\n }\n \n if (Array.isArray(params)) {\n return params.map(param => encodeValue(param));\n } else if (typeof params === 'object') {\n const encoded: Record<string, TypeValuePair> = {};\n for (const [key, value] of Object.entries(params)) {\n encoded[key] = encodeValue(value);\n }\n return encoded;\n }\n \n throw new Error(`Invalid parameters type: expected array or object, got ${typeof params}`);\n}","/**\n * MIT License\n * Copyright (c) 2025 ReifyDB\n * See license.md file for full license text\n */\n\nimport {WsClient, WsClientOptions} from \"./ws\";\n\nexport class Client {\n /**\n * Connect to ReifyDB via WebSocket\n * @param url WebSocket URL\n * @param options Optional configuration\n * @returns Connected WebSocket client\n */\n static async connect_ws(url: string, options: Omit<WsClientOptions, 'url'> = {}): Promise<WsClient> {\n return WsClient.connect({url, ...options});\n }\n}\n\nexport {ReifyError, Diagnostic, Span, DiagnosticColumn} from \"@reifydb/core\";\nexport {WsClient, WsClientOptions} from \"./ws\";\nexport {FrameResults, SingleFrameResult, asFrameResults} from \"@reifydb/core\";"],"mappings":"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","names":["ReifyError","Diagnostic","Span","DiagnosticColumn","FrameResults"]}
package/license.md ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2025 The ReifyDB Developers <license@reifydb.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@reifydb/client",
3
+ "type": "module",
4
+ "version": "0.0.1-alpha.1",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "dependencies": {
8
+ "@reifydb/core": "^0.0.1",
9
+ "uuid": "^11.1.0",
10
+ "ws": "^8.18.3"
11
+ },
12
+ "devDependencies": {
13
+ "@types/node": "^24.0.10",
14
+ "@vitest/coverage-v8": "^2.1.8",
15
+ "tsup": "^8.5.0",
16
+ "typescript": "^5.8.3",
17
+ "vitest": "^2.1.8"
18
+ },
19
+ "engines": {
20
+ "node": ">=16.0.0"
21
+ },
22
+ "keywords": [
23
+ "reifydb",
24
+ "database",
25
+ "websocket",
26
+ "client",
27
+ "typescript"
28
+ ],
29
+ "files": [
30
+ "dist/",
31
+ "package.json",
32
+ "readme.md",
33
+ "license.md"
34
+ ],
35
+ "publishConfig": {
36
+ "access": "public"
37
+ },
38
+ "license": "MIT",
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "https://github.com/reifydb/reifydb.git",
42
+ "directory": "pkg/typescript/client"
43
+ },
44
+ "homepage": "https://github.com/reifydb/reifydb#readme",
45
+ "bugs": {
46
+ "url": "https://github.com/reifydb/reifydb/issues"
47
+ },
48
+ "scripts": {
49
+ "build": "tsup src/index.ts --dts --format esm --sourcemap",
50
+ "test": "pnpm test:integration",
51
+ "test:integration": "vitest run --config vitest.integration.config.ts",
52
+ "test:integration:watch": "vitest --config vitest.integration.config.ts",
53
+ "test:integration:coverage": "vitest run --coverage --config vitest.integration.config.ts",
54
+ "test:coverage": "pnpm test:integration:coverage",
55
+ "pretest:integration": "pnpm build",
56
+ "publish:npm": "pnpm publish --access public"
57
+ }
58
+ }
package/readme.md ADDED
@@ -0,0 +1 @@
1
+ # ReifyDB Client