@absurd-sqlite/sdk 0.2.1-alpha.1 → 0.3.0-alpha.0

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.
@@ -4,13 +4,13 @@ import { mkdtempSync, rmSync } from "node:fs";
4
4
  import { join } from "node:path";
5
5
  import { tmpdir } from "node:os";
6
6
 
7
- import { SqliteConnection } from "../src/sqlite";
7
+ import { SQLiteConnection } from "../src/sqlite-connection";
8
8
  import type { SQLiteDatabase } from "../src/sqlite-types";
9
9
 
10
- describe("SqliteConnection", () => {
10
+ describe("SQLiteConnection", () => {
11
11
  it("rewrites postgres-style params and absurd schema names", async () => {
12
- const db = new sqlite(":memory:") as unknown as SQLiteDatabase;
13
- const conn = new SqliteConnection(db);
12
+ const db = new sqlite(":memory:") as SQLiteDatabase;
13
+ const conn = new SQLiteConnection(db);
14
14
 
15
15
  await conn.exec("CREATE TABLE absurd_tasks (id, name)");
16
16
  await conn.exec("INSERT INTO absurd.tasks (id, name) VALUES ($1, $2)", [
@@ -28,8 +28,8 @@ describe("SqliteConnection", () => {
28
28
  });
29
29
 
30
30
  it("throws when query is used for non-reader statements", async () => {
31
- const db = new sqlite(":memory:") as unknown as SQLiteDatabase;
32
- const conn = new SqliteConnection(db);
31
+ const db = new sqlite(":memory:") as SQLiteDatabase;
32
+ const conn = new SQLiteConnection(db);
33
33
 
34
34
  await expect(conn.query("CREATE TABLE t (id)")).rejects.toThrow(
35
35
  "only statements that return data"
@@ -38,8 +38,8 @@ describe("SqliteConnection", () => {
38
38
  });
39
39
 
40
40
  it("decodes JSON from typeless columns", async () => {
41
- const db = new sqlite(":memory:") as unknown as SQLiteDatabase;
42
- const conn = new SqliteConnection(db);
41
+ const db = new sqlite(":memory:") as SQLiteDatabase;
42
+ const conn = new SQLiteConnection(db);
43
43
 
44
44
  await conn.exec("CREATE TABLE t (payload)");
45
45
  await conn.exec("INSERT INTO t (payload) VALUES ($1)", ['{"a":1}']);
@@ -53,8 +53,8 @@ describe("SqliteConnection", () => {
53
53
  });
54
54
 
55
55
  it("decodes JSON from blob columns", async () => {
56
- const db = new sqlite(":memory:") as unknown as SQLiteDatabase;
57
- const conn = new SqliteConnection(db);
56
+ const db = new sqlite(":memory:") as SQLiteDatabase;
57
+ const conn = new SQLiteConnection(db);
58
58
 
59
59
  await conn.exec("CREATE TABLE t_blob (payload BLOB)");
60
60
  await conn.exec("INSERT INTO t_blob (payload) VALUES ($1)", [
@@ -70,8 +70,8 @@ describe("SqliteConnection", () => {
70
70
  });
71
71
 
72
72
  it("decodes datetime columns into Date objects", async () => {
73
- const db = new sqlite(":memory:") as unknown as SQLiteDatabase;
74
- const conn = new SqliteConnection(db);
73
+ const db = new sqlite(":memory:") as SQLiteDatabase;
74
+ const conn = new SQLiteConnection(db);
75
75
  const now = Date.now();
76
76
 
77
77
  await conn.exec("CREATE TABLE t_date (created_at DATETIME)");
@@ -86,12 +86,42 @@ describe("SqliteConnection", () => {
86
86
  db.close();
87
87
  });
88
88
 
89
+ it("allows custom value codec overrides", async () => {
90
+ const db = new sqlite(":memory:") as SQLiteDatabase;
91
+ const encodedValues: unknown[] = [];
92
+ const conn = new SQLiteConnection(db, {
93
+ valueCodec: {
94
+ encodeParam: (value) => {
95
+ encodedValues.push(value);
96
+ return value;
97
+ },
98
+ decodeColumn: ({ value }) => {
99
+ if (typeof value === "string") {
100
+ return value.toUpperCase();
101
+ }
102
+ return value;
103
+ },
104
+ },
105
+ });
106
+
107
+ await conn.exec("CREATE TABLE t (name TEXT)");
108
+ await conn.exec("INSERT INTO t (name) VALUES ($1)", ["alpha"]);
109
+
110
+ const { rows } = await conn.query<{ name: string }>(
111
+ "SELECT name FROM t"
112
+ );
113
+
114
+ expect(encodedValues).toEqual(["alpha"]);
115
+ expect(rows[0]?.name).toBe("ALPHA");
116
+ db.close();
117
+ });
118
+
89
119
  it("retries when SQLite reports the database is busy", async () => {
90
120
  const tempDir = mkdtempSync(join(tmpdir(), "absurd-sqlite-busy-"));
91
121
  const dbPath = join(tempDir, "busy.db");
92
- const primary = new sqlite(dbPath) as unknown as SQLiteDatabase;
122
+ const primary = new sqlite(dbPath) as SQLiteDatabase;
93
123
  (primary as any).pragma("busy_timeout = 1");
94
- const conn = new SqliteConnection(primary);
124
+ const conn = new SQLiteConnection(primary);
95
125
  await conn.exec("CREATE TABLE t_busy (id INTEGER PRIMARY KEY, value TEXT)");
96
126
 
97
127
  const blocker = new sqlite(dbPath);
@@ -150,7 +180,7 @@ describe("SqliteConnection", () => {
150
180
  close: vi.fn(),
151
181
  loadExtension: vi.fn(),
152
182
  };
153
- const conn = new SqliteConnection(db);
183
+ const conn = new SQLiteConnection(db);
154
184
 
155
185
  await expect(
156
186
  conn.exec("UPDATE locked_table SET value = $1 WHERE id = $2", [1, 1])
@@ -1,109 +0,0 @@
1
- import type { ClaimedTask, JsonValue, SpawnOptions, SpawnResult, TaskHandler, TaskRegistrationOptions, WorkerOptions } from "absurd-sdk";
2
- import type { SQLiteRestBindParams } from "./sqlite-types";
3
- /**
4
- * Minimal query interface compatible with Absurd's database operations.
5
- */
6
- export interface Queryable {
7
- /**
8
- * Execute a parameterized SQL query and return rows.
9
- * @param sql SQL text with parameter placeholders.
10
- * @param params Optional positional parameters.
11
- */
12
- query<R extends object = Record<string, any>>(sql: string, params?: SQLiteRestBindParams): Promise<{
13
- rows: R[];
14
- }>;
15
- }
16
- /**
17
- * Background worker handle returned by startWorker().
18
- */
19
- export interface Worker {
20
- /**
21
- * Stop the worker loop and wait for in-flight tasks to settle.
22
- */
23
- close(): Promise<void>;
24
- }
25
- /**
26
- * Absurd client interface.
27
- */
28
- export interface AbsurdClient {
29
- /**
30
- * Create a new client bound to the provided connection.
31
- * @param con Connection to use for queries.
32
- * @param owned If true, close the connection when close() is called.
33
- */
34
- /**
35
- * Register a task handler.
36
- * @param options Task registration options.
37
- * @param handler Async task handler.
38
- */
39
- registerTask<P = any, R = any>(options: TaskRegistrationOptions, handler: TaskHandler<P, R>): void;
40
- /**
41
- * Create a queue.
42
- * @param queueName Optional queue name (defaults to client queue).
43
- */
44
- createQueue(queueName?: string): Promise<void>;
45
- /**
46
- * Drop a queue.
47
- * @param queueName Optional queue name (defaults to client queue).
48
- */
49
- dropQueue(queueName?: string): Promise<void>;
50
- /**
51
- * List available queues.
52
- */
53
- listQueues(): Promise<Array<string>>;
54
- /**
55
- * Spawn a task execution.
56
- * @param taskName Task name.
57
- * @param params Task parameters.
58
- * @param options Spawn options including queue and retry behavior.
59
- */
60
- spawn<P = any>(taskName: string, params: P, options?: SpawnOptions): Promise<SpawnResult>;
61
- /**
62
- * Emit an event on a queue.
63
- * @param eventName Non-empty event name.
64
- * @param payload Optional JSON payload.
65
- * @param queueName Optional queue name (defaults to client queue).
66
- */
67
- emitEvent(eventName: string, payload?: JsonValue, queueName?: string): Promise<void>;
68
- /**
69
- * Cancel a task by ID.
70
- * @param taskID Task identifier.
71
- * @param queueName Optional queue name (defaults to client queue).
72
- */
73
- cancelTask(taskID: string, queueName?: string): Promise<void>;
74
- /**
75
- * Claim tasks for processing.
76
- * @param options Claiming options.
77
- */
78
- claimTasks(options?: {
79
- batchSize?: number;
80
- claimTimeout?: number;
81
- workerId?: string;
82
- }): Promise<ClaimedTask[]>;
83
- /**
84
- * Claim and process a batch of tasks sequentially.
85
- * @param workerId Worker identifier.
86
- * @param claimTimeout Lease duration in seconds.
87
- * @param batchSize Max tasks to process.
88
- */
89
- workBatch(workerId?: string, claimTimeout?: number, batchSize?: number): Promise<void>;
90
- /**
91
- * Start a background worker that polls and executes tasks.
92
- * @param options Worker behavior options.
93
- */
94
- startWorker(options?: WorkerOptions): Promise<Worker>;
95
- /**
96
- * Close the client and any owned resources.
97
- */
98
- close(): Promise<void>;
99
- /**
100
- * Execute a claimed task (used by workers).
101
- * @param task Claimed task record.
102
- * @param claimTimeout Lease duration in seconds.
103
- * @param options Execution options.
104
- */
105
- executeTask(task: ClaimedTask, claimTimeout: number, options?: {
106
- fatalOnLeaseTimeout?: boolean;
107
- }): Promise<void>;
108
- }
109
- //# sourceMappingURL=absurd-types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"absurd-types.d.ts","sourceRoot":"","sources":["../src/absurd-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,WAAW,EACX,WAAW,EACX,uBAAuB,EACvB,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,KAAK,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1C,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,EAAE,CAAA;KAAE,CAAC,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IAGH;;;;OAIG;IACH,YAAY,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAC3B,OAAO,EAAE,uBAAuB,EAChC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GACzB,IAAI,CAAC;IAER;;;OAGG;IACH,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C;;;OAGG;IACH,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAErC;;;;;OAKG;IACH,KAAK,CAAC,CAAC,GAAG,GAAG,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,CAAC,EACT,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,WAAW,CAAC,CAAC;IAExB;;;;;OAKG;IACH,SAAS,CACP,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,SAAS,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9D;;;OAGG;IACH,UAAU,CAAC,OAAO,CAAC,EAAE;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAE3B;;;;;OAKG;IACH,SAAS,CACP,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;OAGG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtD;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;;;;OAKG;IACH,WAAW,CACT,IAAI,EAAE,WAAW,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;QAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAE,GAC1C,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=absurd-types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"absurd-types.js","sourceRoot":"","sources":["../src/absurd-types.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
package/dist/sqlite.d.ts DELETED
@@ -1,14 +0,0 @@
1
- import type { Queryable } from "./absurd-types";
2
- import type { SQLiteRestBindParams, SQLiteDatabase } from "./sqlite-types";
3
- export declare class SqliteConnection implements Queryable {
4
- private readonly db;
5
- private readonly maxRetries;
6
- private readonly baseRetryDelayMs;
7
- constructor(db: SQLiteDatabase);
8
- query<R extends object = Record<string, any>>(sql: string, params?: SQLiteRestBindParams): Promise<{
9
- rows: R[];
10
- }>;
11
- exec(sql: string, params?: SQLiteRestBindParams): Promise<void>;
12
- private runWithRetry;
13
- }
14
- //# sourceMappingURL=sqlite.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EACV,oBAAoB,EACpB,cAAc,EAGf,MAAM,gBAAgB,CAAC;AAExB,qBAAa,gBAAiB,YAAW,SAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAiB;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAK;IAChC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAM;gBAE3B,EAAE,EAAE,cAAc;IAKxB,KAAK,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChD,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,EAAE,CAAA;KAAE,CAAC;IAoBnB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;YAQvD,YAAY;CAc3B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"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"}
@@ -1,149 +0,0 @@
1
- import type {
2
- ClaimedTask,
3
- JsonValue,
4
- SpawnOptions,
5
- SpawnResult,
6
- TaskHandler,
7
- TaskRegistrationOptions,
8
- WorkerOptions,
9
- } from "absurd-sdk";
10
-
11
- import type { SQLiteRestBindParams } from "./sqlite-types";
12
-
13
- /**
14
- * Minimal query interface compatible with Absurd's database operations.
15
- */
16
- export interface Queryable {
17
- /**
18
- * Execute a parameterized SQL query and return rows.
19
- * @param sql SQL text with parameter placeholders.
20
- * @param params Optional positional parameters.
21
- */
22
- query<R extends object = Record<string, any>>(
23
- sql: string,
24
- params?: SQLiteRestBindParams
25
- ): Promise<{ rows: R[] }>;
26
- }
27
-
28
- /**
29
- * Background worker handle returned by startWorker().
30
- */
31
- export interface Worker {
32
- /**
33
- * Stop the worker loop and wait for in-flight tasks to settle.
34
- */
35
- close(): Promise<void>;
36
- }
37
-
38
- /**
39
- * Absurd client interface.
40
- */
41
- export interface AbsurdClient {
42
- /**
43
- * Create a new client bound to the provided connection.
44
- * @param con Connection to use for queries.
45
- * @param owned If true, close the connection when close() is called.
46
- */
47
- // bindToConnection(con: Queryable, owned?: boolean): this;
48
-
49
- /**
50
- * Register a task handler.
51
- * @param options Task registration options.
52
- * @param handler Async task handler.
53
- */
54
- registerTask<P = any, R = any>(
55
- options: TaskRegistrationOptions,
56
- handler: TaskHandler<P, R>
57
- ): void;
58
-
59
- /**
60
- * Create a queue.
61
- * @param queueName Optional queue name (defaults to client queue).
62
- */
63
- createQueue(queueName?: string): Promise<void>;
64
- /**
65
- * Drop a queue.
66
- * @param queueName Optional queue name (defaults to client queue).
67
- */
68
- dropQueue(queueName?: string): Promise<void>;
69
- /**
70
- * List available queues.
71
- */
72
- listQueues(): Promise<Array<string>>;
73
-
74
- /**
75
- * Spawn a task execution.
76
- * @param taskName Task name.
77
- * @param params Task parameters.
78
- * @param options Spawn options including queue and retry behavior.
79
- */
80
- spawn<P = any>(
81
- taskName: string,
82
- params: P,
83
- options?: SpawnOptions
84
- ): Promise<SpawnResult>;
85
-
86
- /**
87
- * Emit an event on a queue.
88
- * @param eventName Non-empty event name.
89
- * @param payload Optional JSON payload.
90
- * @param queueName Optional queue name (defaults to client queue).
91
- */
92
- emitEvent(
93
- eventName: string,
94
- payload?: JsonValue,
95
- queueName?: string
96
- ): Promise<void>;
97
-
98
- /**
99
- * Cancel a task by ID.
100
- * @param taskID Task identifier.
101
- * @param queueName Optional queue name (defaults to client queue).
102
- */
103
- cancelTask(taskID: string, queueName?: string): Promise<void>;
104
-
105
- /**
106
- * Claim tasks for processing.
107
- * @param options Claiming options.
108
- */
109
- claimTasks(options?: {
110
- batchSize?: number;
111
- claimTimeout?: number;
112
- workerId?: string;
113
- }): Promise<ClaimedTask[]>;
114
-
115
- /**
116
- * Claim and process a batch of tasks sequentially.
117
- * @param workerId Worker identifier.
118
- * @param claimTimeout Lease duration in seconds.
119
- * @param batchSize Max tasks to process.
120
- */
121
- workBatch(
122
- workerId?: string,
123
- claimTimeout?: number,
124
- batchSize?: number
125
- ): Promise<void>;
126
-
127
- /**
128
- * Start a background worker that polls and executes tasks.
129
- * @param options Worker behavior options.
130
- */
131
- startWorker(options?: WorkerOptions): Promise<Worker>;
132
-
133
- /**
134
- * Close the client and any owned resources.
135
- */
136
- close(): Promise<void>;
137
-
138
- /**
139
- * Execute a claimed task (used by workers).
140
- * @param task Claimed task record.
141
- * @param claimTimeout Lease duration in seconds.
142
- * @param options Execution options.
143
- */
144
- executeTask(
145
- task: ClaimedTask,
146
- claimTimeout: number,
147
- options?: { fatalOnLeaseTimeout?: boolean }
148
- ): Promise<void>;
149
- }