@rindle/sql-client 0.6.4

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,204 @@
1
+ /** A value accepted by Rindle SQL's v1 client. Binary values are deliberately unsupported. */
2
+ export type SqlValue = null | string | number | bigint | boolean;
3
+ export type SqlArgs = readonly SqlValue[] | Readonly<Record<string, SqlValue>>;
4
+ export interface Statement {
5
+ sql: string;
6
+ args?: SqlArgs;
7
+ wantRows?: boolean;
8
+ }
9
+ export interface Column {
10
+ name: string;
11
+ decltype: string | null;
12
+ }
13
+ export interface StatementResult {
14
+ columns: Column[];
15
+ rows: SqlValue[][];
16
+ rowsAffected: number;
17
+ lastInsertRowid: string | null;
18
+ rowsRead: number | null;
19
+ rowsWritten: number | null;
20
+ }
21
+ export interface RoutingMetadata {
22
+ servedBy: "master" | "follower";
23
+ appliedLagMs: number | null;
24
+ fenceFallback: boolean;
25
+ }
26
+ export interface ExecuteResult {
27
+ result: StatementResult;
28
+ commitCursor: string | null;
29
+ routing: RoutingMetadata;
30
+ }
31
+ export interface BatchResult {
32
+ results: StatementResult[];
33
+ commitCursor: string | null;
34
+ routing: RoutingMetadata;
35
+ }
36
+ export interface MigrationInput {
37
+ id: string;
38
+ checksum: string;
39
+ statements: string[];
40
+ }
41
+ export interface MigrationResult {
42
+ applied: boolean;
43
+ commitCursor: string;
44
+ }
45
+ export type ReadConsistency = "session" | "strong" | "eventual";
46
+ export type IntMode = "bigint" | "number" | "string";
47
+ export type RetryScope = "request" | "transaction" | "closure" | "never";
48
+ export type TransactionState = "open" | "closed" | "unknown";
49
+ export interface OperationOptions {
50
+ signal?: AbortSignal;
51
+ }
52
+ export interface ExecuteOptions extends OperationOptions {
53
+ consistency?: ReadConsistency;
54
+ sessionCursor?: string | null;
55
+ }
56
+ export type BatchOptions = ExecuteOptions;
57
+ export interface TransactionOptions extends OperationOptions {
58
+ readOnly?: boolean;
59
+ isolation?: "serializable" | "snapshot";
60
+ consistency?: ReadConsistency;
61
+ sessionCursor?: string | null;
62
+ }
63
+ /** The optimistic mutation whose effects a mutation-aware SQL transaction commits. `mid` is the
64
+ * requested mutation id; `lmid` is server-owned state and therefore only appears in receipts. */
65
+ export interface MutationIdentity {
66
+ clientId: string;
67
+ mid: number;
68
+ }
69
+ /** The authoritative outcome of a mutation commit or lmid-only rejection. */
70
+ export interface MutationReceipt {
71
+ applied: boolean;
72
+ lmid: number;
73
+ commitCursor: string | null;
74
+ }
75
+ /** Positional rows returned by a read inside an open mutation transaction. */
76
+ export interface MutationRows {
77
+ columns: string[];
78
+ rows: SqlValue[][];
79
+ }
80
+ export interface ExecuteMutationInput extends MutationIdentity {
81
+ /** May be empty: an accepted no-op must still advance lmid and retire the prediction. */
82
+ statements: Statement[];
83
+ }
84
+ export interface BeginMutationInput extends MutationIdentity {
85
+ /** A pure-write prefix accumulated before the mutator's first read. */
86
+ statements?: Statement[];
87
+ /** Optional first read, coalesced with begin to preserve the mutation fast path. */
88
+ query?: Statement | string;
89
+ }
90
+ export interface RejectMutationInput extends MutationIdentity {
91
+ reason?: string;
92
+ }
93
+ export interface SqlMutationTransaction {
94
+ execute(statement: Statement | string, options?: OperationOptions): Promise<void>;
95
+ batch(statements: Statement[], options?: OperationOptions): Promise<void>;
96
+ query(statement: Statement | string, options?: OperationOptions): Promise<MutationRows>;
97
+ commit(options?: OperationOptions): Promise<MutationReceipt>;
98
+ rollback(options?: OperationOptions): Promise<void>;
99
+ }
100
+ /** Begin-time mid dedup can absorb a replay without opening a transaction; callers must skip the
101
+ * mutator body in that branch. */
102
+ export type BeginMutationResult = {
103
+ absorbed: true;
104
+ receipt: MutationReceipt;
105
+ } | {
106
+ absorbed: false;
107
+ transaction: SqlMutationTransaction;
108
+ read?: MutationRows;
109
+ };
110
+ export interface RetryOptions extends TransactionOptions {
111
+ /** Total closure attempts, including the first. Defaults to 5. */
112
+ maxAttempts?: number;
113
+ /** Initial closure-retry delay. Defaults to 10ms. */
114
+ baseDelayMs?: number;
115
+ /** Maximum closure-retry delay. Defaults to 250ms. */
116
+ maxDelayMs?: number;
117
+ }
118
+ /** Portable subset of the WHATWG fetch signature used by the client. Keeping the input to the
119
+ * URL forms we actually emit avoids leaking the DOM-only `RequestInfo` alias into Node/Worker
120
+ * consumers that compile this package from source. */
121
+ export type Fetch = (input: string | URL, init?: RequestInit) => Promise<Response>;
122
+ export interface ClientOptions {
123
+ url: string;
124
+ authToken: string;
125
+ consistency?: ReadConsistency;
126
+ sessionCursor?: string | null;
127
+ intMode?: IntMode;
128
+ /** Test/service-binding seam. The default is the runtime's global fetch. */
129
+ fetch?: Fetch;
130
+ }
131
+ export interface SqlTransaction {
132
+ execute(statement: Statement | string, options?: OperationOptions): Promise<StatementResult>;
133
+ batch(statements: Statement[], options?: OperationOptions): Promise<StatementResult[]>;
134
+ commit(options?: OperationOptions): Promise<{
135
+ commitCursor: string | null;
136
+ }>;
137
+ rollback(options?: OperationOptions): Promise<void>;
138
+ }
139
+ export interface SqlSession {
140
+ execute(statement: Statement | string, options?: ExecuteOptions): Promise<ExecuteResult>;
141
+ batch(statements: Statement[], options?: BatchOptions): Promise<BatchResult>;
142
+ begin(options?: TransactionOptions): Promise<SqlTransaction>;
143
+ withTransaction<T>(fn: (tx: SqlTransaction) => Promise<T>, options?: TransactionOptions): Promise<T>;
144
+ withTransactionRetry<T>(fn: (tx: SqlTransaction) => Promise<T>, options?: RetryOptions): Promise<T>;
145
+ /** One-round-trip optimistic mutation commit (effects + lmid in the same atomic unit). */
146
+ executeMutation(input: ExecuteMutationInput, options?: OperationOptions): Promise<MutationReceipt>;
147
+ /** Open an interactive optimistic mutation transaction, or absorb a replay before it runs. */
148
+ beginMutation(input: BeginMutationInput, options?: OperationOptions): Promise<BeginMutationResult>;
149
+ /** Process a business/pre-flight rejection as an lmid-only commit. */
150
+ rejectMutation(input: RejectMutationInput, options?: OperationOptions): Promise<MutationReceipt>;
151
+ executeDdl(sql: string, options?: OperationOptions): Promise<ExecuteResult>;
152
+ migrate(input: MigrationInput, options?: OperationOptions): Promise<MigrationResult>;
153
+ executeMultiple(sql: string, options?: OperationOptions): Promise<void>;
154
+ session(cursor?: string | null): SqlSession;
155
+ getSessionCursor(): string | null;
156
+ resetSessionCursor(): void;
157
+ ping(options?: OperationOptions): Promise<void>;
158
+ }
159
+ export interface SqlClient extends SqlSession {
160
+ close(): void;
161
+ }
162
+ export interface WireI64 {
163
+ $rindle: "i64";
164
+ value: string;
165
+ }
166
+ export interface WireFloat {
167
+ $rindle: "float";
168
+ value: "Infinity" | "-Infinity";
169
+ }
170
+ export type WireSqlValue = null | string | number | WireI64 | WireFloat;
171
+ export type WireArgs = WireSqlValue[] | Record<string, WireSqlValue>;
172
+ export interface WireStatement {
173
+ sql: string;
174
+ args?: WireArgs;
175
+ want_rows?: boolean;
176
+ }
177
+ export interface WireColumn {
178
+ name: string;
179
+ decltype: string | null;
180
+ }
181
+ export interface WireStatementResult {
182
+ columns: WireColumn[];
183
+ rows: WireSqlValue[][];
184
+ rows_affected: number;
185
+ last_insert_rowid: string | null;
186
+ rows_read: number | null;
187
+ rows_written: number | null;
188
+ }
189
+ export interface WireRoutingMetadata {
190
+ served_by: "master" | "follower";
191
+ applied_lag_ms: number | null;
192
+ fence_fallback: boolean;
193
+ }
194
+ export interface WireExecuteResponse {
195
+ result: WireStatementResult;
196
+ commit_cursor: string | null;
197
+ routing: WireRoutingMetadata;
198
+ }
199
+ export interface WireBatchResponse {
200
+ results: WireStatementResult[];
201
+ commit_cursor: string | null;
202
+ routing: WireRoutingMetadata;
203
+ }
204
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import type { IntMode, SqlArgs, SqlValue, Statement, WireArgs, WireSqlValue, WireStatement } from "./types.ts";
2
+ /** Encode one public SDK value into the frozen v1 tagged JSON representation. */
3
+ export declare function encodeSqlValue(value: SqlValue): WireSqlValue;
4
+ /** Decode one frozen v1 tagged JSON value using the client's integer policy. */
5
+ export declare function decodeSqlValue(value: unknown, intMode?: IntMode): SqlValue;
6
+ export declare function encodeArgs(args: SqlArgs): WireArgs;
7
+ export declare function encodeStatement(statement: Statement | string): WireStatement;
8
+ //# sourceMappingURL=value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value.d.ts","sourceRoot":"","sources":["../src/value.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAqB/G,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,YAAY,CAuB5D;AAkBD,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,OAAkB,GAAG,QAAQ,CA0BpF;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,CAMlD;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,aAAa,CAU5E"}
package/dist/value.js ADDED
@@ -0,0 +1,122 @@
1
+ import { protocolError, valueUnsupported } from "./errors.js";
2
+ const I64_MIN = -(1n << 63n);
3
+ const I64_MAX = (1n << 63n) - 1n;
4
+ const DECIMAL_I64 = /^(?:0|-[1-9][0-9]*|[1-9][0-9]*)$/;
5
+ function binaryKind(value) {
6
+ if (typeof ArrayBuffer !== "undefined") {
7
+ if (value instanceof ArrayBuffer)
8
+ return "ArrayBuffer";
9
+ if (ArrayBuffer.isView(value))
10
+ return value?.constructor?.name ?? "binary view";
11
+ }
12
+ if (typeof Blob !== "undefined" && value instanceof Blob)
13
+ return "Blob";
14
+ return null;
15
+ }
16
+ function assertI64(value, source) {
17
+ if (value < I64_MIN || value > I64_MAX) {
18
+ throw valueUnsupported(`${source} is outside SQLite's signed 64-bit integer range`);
19
+ }
20
+ }
21
+ /** Encode one public SDK value into the frozen v1 tagged JSON representation. */
22
+ export function encodeSqlValue(value) {
23
+ if (value === null || typeof value === "string")
24
+ return value;
25
+ if (typeof value === "boolean")
26
+ return { $rindle: "i64", value: value ? "1" : "0" };
27
+ if (typeof value === "bigint") {
28
+ assertI64(value, `integer ${value.toString()}`);
29
+ return { $rindle: "i64", value: value.toString() };
30
+ }
31
+ if (typeof value === "number") {
32
+ if (Number.isNaN(value))
33
+ throw valueUnsupported("NaN is not a supported SQLite value");
34
+ if (value === Infinity)
35
+ return { $rindle: "float", value: "Infinity" };
36
+ if (value === -Infinity)
37
+ return { $rindle: "float", value: "-Infinity" };
38
+ // JavaScript has one number type, but SQLite distinguishes INTEGER and REAL storage classes.
39
+ // Safe integral numbers carry the exact i64 tag; non-integral and larger numeric values remain
40
+ // REALs. Callers that need a larger integer must use bigint so intent and precision are explicit.
41
+ if (Number.isSafeInteger(value)) {
42
+ return { $rindle: "i64", value: BigInt(value).toString() };
43
+ }
44
+ return value;
45
+ }
46
+ const kind = binaryKind(value);
47
+ if (kind !== null)
48
+ throw valueUnsupported(`${kind} bind values are not supported in Rindle SQL v1`);
49
+ throw valueUnsupported(`unsupported bind value of type ${typeof value}`);
50
+ }
51
+ function parseWireI64(decimal) {
52
+ if (typeof decimal !== "string" || !DECIMAL_I64.test(decimal)) {
53
+ throw protocolError("server returned a malformed tagged i64 value");
54
+ }
55
+ let value;
56
+ try {
57
+ value = BigInt(decimal);
58
+ }
59
+ catch (cause) {
60
+ throw protocolError("server returned a malformed tagged i64 value", cause);
61
+ }
62
+ if (value < I64_MIN || value > I64_MAX) {
63
+ throw protocolError("server returned an out-of-range tagged i64 value");
64
+ }
65
+ return value;
66
+ }
67
+ /** Decode one frozen v1 tagged JSON value using the client's integer policy. */
68
+ export function decodeSqlValue(value, intMode = "bigint") {
69
+ if (value === null || typeof value === "string")
70
+ return value;
71
+ if (typeof value === "number") {
72
+ if (!Number.isFinite(value))
73
+ throw protocolError("server returned a non-finite untagged JSON number");
74
+ return value;
75
+ }
76
+ if (typeof value !== "object" || Array.isArray(value)) {
77
+ throw protocolError("server returned a malformed SQL value");
78
+ }
79
+ const tagged = value;
80
+ if (tagged.$rindle === "float") {
81
+ if (tagged.value === "Infinity")
82
+ return Infinity;
83
+ if (tagged.value === "-Infinity")
84
+ return -Infinity;
85
+ throw protocolError("server returned a malformed tagged float value");
86
+ }
87
+ if (tagged.$rindle !== "i64")
88
+ throw protocolError("server returned an unknown tagged SQL value");
89
+ const integer = parseWireI64(tagged.value);
90
+ if (intMode === "bigint")
91
+ return integer;
92
+ if (intMode === "string")
93
+ return integer.toString();
94
+ const number = Number(integer);
95
+ if (!Number.isSafeInteger(number)) {
96
+ throw valueUnsupported(`integer ${integer.toString()} is outside Number's safe integer range`);
97
+ }
98
+ return number;
99
+ }
100
+ export function encodeArgs(args) {
101
+ if (Array.isArray(args))
102
+ return args.map((value) => encodeSqlValue(value));
103
+ if (args === null || typeof args !== "object") {
104
+ throw valueUnsupported("statement args must be a positional array or named object");
105
+ }
106
+ return Object.fromEntries(Object.entries(args).map(([name, value]) => [name, encodeSqlValue(value)]));
107
+ }
108
+ export function encodeStatement(statement) {
109
+ const normalized = typeof statement === "string" ? { sql: statement } : statement;
110
+ if (normalized === null || typeof normalized !== "object" || typeof normalized.sql !== "string") {
111
+ throw new TypeError("statement must be a SQL string or an object with a string sql field");
112
+ }
113
+ if (normalized.sql.length === 0)
114
+ throw new TypeError("statement sql must not be empty");
115
+ const wire = { sql: normalized.sql };
116
+ if (normalized.args !== undefined)
117
+ wire.args = encodeArgs(normalized.args);
118
+ if (normalized.wantRows !== undefined)
119
+ wire.want_rows = normalized.wantRows;
120
+ return wire;
121
+ }
122
+ //# sourceMappingURL=value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value.js","sourceRoot":"","sources":["../src/value.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@rindle/sql-client",
3
+ "version": "0.6.4",
4
+ "license": "Apache-2.0",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/rindle-sh/rindle.git",
8
+ "directory": "packages/sql-client"
9
+ },
10
+ "type": "module",
11
+ "description": "Fetch-native TypeScript client for Rindle SQL.",
12
+ "main": "./dist/index.js",
13
+ "types": "./dist/index.d.ts",
14
+ "sideEffects": false,
15
+ "exports": {
16
+ ".": {
17
+ "@rindle/source": "./src/index.ts",
18
+ "types": "./dist/index.d.ts",
19
+ "default": "./dist/index.js"
20
+ },
21
+ "./drizzle": {
22
+ "@rindle/source": "./src/drizzle.ts",
23
+ "types": "./dist/drizzle.d.ts",
24
+ "default": "./dist/drizzle.js"
25
+ }
26
+ },
27
+ "files": [
28
+ "dist",
29
+ "src",
30
+ "README.md"
31
+ ],
32
+ "peerDependencies": {
33
+ "drizzle-orm": "0.44.7"
34
+ },
35
+ "peerDependenciesMeta": {
36
+ "drizzle-orm": {
37
+ "optional": true
38
+ }
39
+ },
40
+ "devDependencies": {
41
+ "@types/node": "^22.10.0",
42
+ "drizzle-orm": "0.44.7",
43
+ "typescript": "^5.7.0"
44
+ },
45
+ "scripts": {
46
+ "build": "tsc -p tsconfig.build.json",
47
+ "typecheck": "tsc --noEmit",
48
+ "test": "tsc --noEmit && node --conditions=@rindle/source --test test/*.test.ts",
49
+ "test:rust-daemon": "node --conditions=@rindle/source test/live-server.e2e.mjs"
50
+ }
51
+ }