@mark1russell7/client-sqlite 0.0.0-stage → 0.1.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.
package/dist/module.js ADDED
@@ -0,0 +1,287 @@
1
+ /**
2
+ * Module (no side effects): the procedures of this package as data, for `createRegistry()`.
3
+ *
4
+ * Procedure Registration for SQLite
5
+ *
6
+ * Registers database and logging procedures with the client system.
7
+ * This file is referenced by package.json's client.procedures field.
8
+ */
9
+ import { createProcedure, zodAdapter, defineModule } from "@mark1russell7/client";
10
+ import { z } from "zod";
11
+ import { withConnection, query, execute, lastInsertRowId, runMigrations, } from "@mark1russell7/docker-sqlite";
12
+ import { DEFAULT_DB_PATH, LOG_LEVELS, } from "./types.js";
13
+ // =============================================================================
14
+ // Schemas
15
+ // =============================================================================
16
+ // Real schemas (roadmap 2.1): the input is validated before the handler, and the MCP tool list
17
+ // and the help of mark describe each field. zodAdapter<T> checks each schema against its type.
18
+ const dbPathField = z
19
+ .string()
20
+ .optional()
21
+ .describe(`The SQLite database file (default: ${DEFAULT_DB_PATH}). A query does not make a missing file.`);
22
+ const paramsField = z
23
+ .array(z.unknown())
24
+ .optional()
25
+ .describe("The values of the ? placeholders of the SQL, in order");
26
+ const logLevel = z.enum(LOG_LEVELS, { error: (issue) => `Invalid log level: ${JSON.stringify(issue.input)}` });
27
+ /** A non-negative integer: it goes into the SQL text, so the schema is strict. */
28
+ const nonNegativeInteger = (field) => z
29
+ .number({ error: (issue) => `Invalid ${field}: expected a non-negative integer, got ${JSON.stringify(issue.input)}` })
30
+ .int({ error: `Invalid ${field}: expected a non-negative integer` })
31
+ .min(0, { error: `Invalid ${field}: expected a non-negative integer` });
32
+ const dbQueryInputSchema = zodAdapter(z.object({
33
+ sql: z.string().describe("The SQL query (SELECT)"),
34
+ params: paramsField,
35
+ dbPath: dbPathField,
36
+ }));
37
+ const dbQueryOutputSchema = zodAdapter(z.looseObject({
38
+ columns: z.array(z.string()).describe("The column names"),
39
+ rows: z.array(z.record(z.string(), z.unknown())).describe("The rows, one object for each row"),
40
+ }));
41
+ const dbExecuteInputSchema = zodAdapter(z.object({
42
+ sql: z.string().describe("The SQL statement or script (INSERT, UPDATE, DELETE, CREATE TABLE, ...)"),
43
+ params: paramsField,
44
+ dbPath: dbPathField,
45
+ }));
46
+ const dbExecuteOutputSchema = zodAdapter(z.looseObject({ changes: z.number().describe("The number of rows that the statements changed") }));
47
+ const logsStoreInputSchema = zodAdapter(z.object({
48
+ level: logLevel.describe("The level: trace, debug, info, warn or error"),
49
+ message: z.string().describe("The log message"),
50
+ sessionId: z.string().optional().describe("The session that the entry belongs to (to group entries)"),
51
+ command: z.string().optional().describe("The command that made the entry"),
52
+ context: z.string().optional().describe("More context, for example a package name"),
53
+ data: z.record(z.string(), z.unknown()).optional().describe("Structured data of the entry"),
54
+ errorStack: z.string().optional().describe("The stack trace of an error"),
55
+ dbPath: dbPathField,
56
+ }));
57
+ const logsStoreOutputSchema = zodAdapter(z.looseObject({ id: z.number().describe("The id of the new log row") }));
58
+ const logsQueryInputSchema = zodAdapter(z.object({
59
+ sessionId: z.string().optional().describe("Only the entries of this session"),
60
+ command: z.string().optional().describe("Only the entries of this command"),
61
+ level: z.union([logLevel, z.array(logLevel)]).optional().describe("Only the entries of this level, or of these levels"),
62
+ limit: nonNegativeInteger("limit").optional().describe("The most entries to give"),
63
+ offset: nonNegativeInteger("offset").optional().describe("The number of entries to skip (for pages)"),
64
+ orderBy: z.enum(["asc", "desc"]).optional().describe("The order by time: desc (the default, newest first) or asc"),
65
+ dbPath: dbPathField,
66
+ }));
67
+ const logsQueryOutputSchema = zodAdapter(z.looseObject({
68
+ logs: z
69
+ .array(z.looseObject({
70
+ id: z.number().describe("The id of the log row"),
71
+ timestamp: z.string().describe("The time of the entry (SQLite datetime text, UTC)"),
72
+ level: logLevel.describe("The level of the entry"),
73
+ message: z.string().describe("The log message"),
74
+ data: z.record(z.string(), z.unknown()).nullable().describe("The structured data of the entry, or null"),
75
+ sessionId: z.string().nullable().describe("The session of the entry, or null"),
76
+ command: z.string().nullable().describe("The command that made the entry, or null"),
77
+ context: z.string().nullable().describe("More context, or null"),
78
+ errorStack: z.string().nullable().describe("The stack trace of an error, or null"),
79
+ }))
80
+ .describe("The entries that match the filters, in the order of orderBy"),
81
+ total: z.number().optional().describe("The number of entries that match the filters, without limit and offset"),
82
+ }));
83
+ // =============================================================================
84
+ // Log Table Migrations
85
+ // =============================================================================
86
+ const LOG_MIGRATIONS = [
87
+ {
88
+ version: 1,
89
+ description: "Create logs table",
90
+ up: `
91
+ CREATE TABLE IF NOT EXISTS logs (
92
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
93
+ timestamp TEXT NOT NULL DEFAULT (datetime('now')),
94
+ level TEXT NOT NULL CHECK (level IN ('trace', 'debug', 'info', 'warn', 'error')),
95
+ message TEXT NOT NULL,
96
+ data TEXT,
97
+ session_id TEXT,
98
+ command TEXT,
99
+ context TEXT,
100
+ error_stack TEXT,
101
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
102
+ );
103
+ CREATE INDEX IF NOT EXISTS idx_logs_session ON logs(session_id);
104
+ CREATE INDEX IF NOT EXISTS idx_logs_level ON logs(level);
105
+ CREATE INDEX IF NOT EXISTS idx_logs_timestamp ON logs(timestamp);
106
+ CREATE INDEX IF NOT EXISTS idx_logs_command ON logs(command);
107
+ `,
108
+ down: "DROP TABLE IF EXISTS logs;",
109
+ },
110
+ ];
111
+ /**
112
+ * Ensure the logs table exists
113
+ */
114
+ async function ensureLogsTable(dbPath) {
115
+ await withConnection({ dbPath }, (db) => {
116
+ runMigrations(db, LOG_MIGRATIONS);
117
+ });
118
+ }
119
+ // =============================================================================
120
+ // db.query Procedure
121
+ // =============================================================================
122
+ const dbQueryProcedure = createProcedure()
123
+ .path(["db", "query"])
124
+ .input(dbQueryInputSchema)
125
+ .output(dbQueryOutputSchema)
126
+ .meta({ description: "Execute a SQL SELECT query" })
127
+ .handler(async (input) => {
128
+ const dbPath = input.dbPath ?? DEFAULT_DB_PATH;
129
+ const params = input.params ?? [];
130
+ return withConnection({ dbPath }, (db) => {
131
+ const result = query(db, input.sql, params);
132
+ return {
133
+ columns: result.columns,
134
+ rows: result.rows,
135
+ };
136
+ });
137
+ })
138
+ .build();
139
+ // =============================================================================
140
+ // db.execute Procedure
141
+ // =============================================================================
142
+ const dbExecuteProcedure = createProcedure()
143
+ .path(["db", "execute"])
144
+ .input(dbExecuteInputSchema)
145
+ .output(dbExecuteOutputSchema)
146
+ .meta({ description: "Execute a SQL statement (INSERT, UPDATE, DELETE)" })
147
+ .handler(async (input) => {
148
+ const dbPath = input.dbPath ?? DEFAULT_DB_PATH;
149
+ const params = input.params ?? [];
150
+ return withConnection({ dbPath }, (db) => {
151
+ const result = execute(db, input.sql, params);
152
+ return { changes: result.changes };
153
+ });
154
+ })
155
+ .build();
156
+ // =============================================================================
157
+ // logs.store Procedure
158
+ // =============================================================================
159
+ const logsStoreProcedure = createProcedure()
160
+ .path(["logs", "store"])
161
+ .input(logsStoreInputSchema)
162
+ .output(logsStoreOutputSchema)
163
+ .meta({ description: "Store a log entry in the database" })
164
+ .handler(async (input) => {
165
+ const dbPath = input.dbPath ?? DEFAULT_DB_PATH;
166
+ // Validate log level
167
+ if (!LOG_LEVELS.includes(input.level)) {
168
+ throw new Error(`Invalid log level: ${input.level}`);
169
+ }
170
+ // Ensure table exists
171
+ await ensureLogsTable(dbPath);
172
+ return withConnection({ dbPath }, (db) => {
173
+ const dataJson = input.data ? JSON.stringify(input.data) : null;
174
+ execute(db, `INSERT INTO logs (level, message, data, session_id, command, context, error_stack)
175
+ VALUES (?, ?, ?, ?, ?, ?, ?)`, [
176
+ input.level,
177
+ input.message,
178
+ dataJson,
179
+ input.sessionId ?? null,
180
+ input.command ?? null,
181
+ input.context ?? null,
182
+ input.errorStack ?? null,
183
+ ]);
184
+ const id = lastInsertRowId(db);
185
+ return { id };
186
+ });
187
+ })
188
+ .build();
189
+ // =============================================================================
190
+ // logs.query Procedure
191
+ // =============================================================================
192
+ /**
193
+ * Validate a value as a non-negative integer before it is interpolated into
194
+ * SQL. The input schema is a pass-through, so `limit`/`offset` can arrive as
195
+ * arbitrary values; interpolating them directly is a SQL injection / syntax
196
+ * hazard. Throws on anything that is not a finite, non-negative integer.
197
+ */
198
+ function toNonNegativeInt(value, field) {
199
+ if (typeof value !== "number" || !Number.isInteger(value) || value < 0) {
200
+ throw new Error(`Invalid ${field}: expected a non-negative integer, got ${JSON.stringify(value)}`);
201
+ }
202
+ return value;
203
+ }
204
+ const logsQueryProcedure = createProcedure()
205
+ .path(["logs", "query"])
206
+ .input(logsQueryInputSchema)
207
+ .output(logsQueryOutputSchema)
208
+ .meta({ description: "Query log entries from the database" })
209
+ .handler(async (input) => {
210
+ const dbPath = input.dbPath ?? DEFAULT_DB_PATH;
211
+ // Ensure table exists
212
+ await ensureLogsTable(dbPath);
213
+ return withConnection({ dbPath }, (db) => {
214
+ const conditions = [];
215
+ const params = [];
216
+ if (input.sessionId !== undefined) {
217
+ conditions.push("session_id = ?");
218
+ params.push(input.sessionId);
219
+ }
220
+ if (input.command !== undefined) {
221
+ conditions.push("command = ?");
222
+ params.push(input.command);
223
+ }
224
+ if (input.level !== undefined) {
225
+ const levels = Array.isArray(input.level) ? input.level : [input.level];
226
+ const placeholders = levels.map(() => "?").join(", ");
227
+ conditions.push(`level IN (${placeholders})`);
228
+ params.push(...levels);
229
+ }
230
+ const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
231
+ const orderDir = input.orderBy === "asc" ? "ASC" : "DESC";
232
+ let limitClause = input.limit !== undefined
233
+ ? `LIMIT ${toNonNegativeInt(input.limit, "limit")}`
234
+ : "";
235
+ let offsetClause = "";
236
+ if (input.offset !== undefined) {
237
+ offsetClause = `OFFSET ${toNonNegativeInt(input.offset, "offset")}`;
238
+ // SQLite's grammar only allows OFFSET as part of a LIMIT clause; an
239
+ // OFFSET with no LIMIT is a syntax error. Use "LIMIT -1" (unbounded)
240
+ // so an offset-only query remains valid.
241
+ if (input.limit === undefined) {
242
+ limitClause = "LIMIT -1";
243
+ }
244
+ }
245
+ const sql = `
246
+ SELECT id, timestamp, level, message, data, session_id, command, context, error_stack
247
+ FROM logs
248
+ ${whereClause}
249
+ ORDER BY timestamp ${orderDir}
250
+ ${limitClause}
251
+ ${offsetClause}
252
+ `;
253
+ const result = query(db, sql, params);
254
+ const logs = result.rows.map((row) => ({
255
+ id: row.id,
256
+ timestamp: row.timestamp,
257
+ level: row.level,
258
+ message: row.message,
259
+ data: row.data ? JSON.parse(row.data) : null,
260
+ sessionId: row.session_id,
261
+ command: row.command,
262
+ context: row.context,
263
+ errorStack: row.error_stack,
264
+ }));
265
+ // Total number of rows matching the filters, ignoring LIMIT/OFFSET, so
266
+ // callers can paginate. `params` holds only the WHERE-clause bindings.
267
+ const countResult = query(db, `SELECT COUNT(*) AS total FROM logs ${whereClause}`, params);
268
+ const total = countResult.rows[0]?.total ?? 0;
269
+ return { logs, total };
270
+ });
271
+ })
272
+ .build();
273
+ // =============================================================================
274
+ // Registration
275
+ // =============================================================================
276
+ /**
277
+ * The module of this package, for `createRegistry()`: its procedures as data. Importing this
278
+ * file registers nothing. (`register.ts` registers the same procedures in the global registry.)
279
+ */
280
+ export const sqliteModule = defineModule("@mark1russell7/client-sqlite", [
281
+ dbQueryProcedure,
282
+ dbExecuteProcedure,
283
+ logsStoreProcedure,
284
+ logsQueryProcedure,
285
+ ]);
286
+ export default sqliteModule;
287
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Importing this file registers the procedures of @mark1russell7/client-sqlite in the global registry
3
+ * (DECISIONS-2026-10, "Every package root registers its procedures"). The procedures as data
4
+ * are in `module.ts`, which registers nothing: a host with its own registry uses that one.
5
+ */
6
+ export * from "./module.js";
7
+ export declare function registerSqliteProcedures(): void;
8
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,cAAc,aAAa,CAAC;AAE5B,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Importing this file registers the procedures of @mark1russell7/client-sqlite in the global registry
3
+ * (DECISIONS-2026-10, "Every package root registers its procedures"). The procedures as data
4
+ * are in `module.ts`, which registers nothing: a host with its own registry uses that one.
5
+ */
6
+ import { registerProcedures } from "@mark1russell7/client";
7
+ import { sqliteModule } from "./module.js";
8
+ export * from "./module.js";
9
+ export function registerSqliteProcedures() {
10
+ registerProcedures(sqliteModule.procedures);
11
+ }
12
+ // Auto-register when this module is loaded
13
+ registerSqliteProcedures();
14
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,cAAc,aAAa,CAAC;AAE5B,MAAM,UAAU,wBAAwB;IACtC,kBAAkB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;AAC9C,CAAC;AAED,2CAA2C;AAC3C,wBAAwB,EAAE,CAAC"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Type definitions for client-sqlite procedures
3
+ */
4
+ /**
5
+ * Default database path for CLI logs
6
+ */
7
+ export declare const DEFAULT_DB_PATH: string;
8
+ export type LogLevel = "trace" | "debug" | "info" | "warn" | "error";
9
+ export declare const LOG_LEVELS: readonly LogLevel[];
10
+ export interface DbQueryInput {
11
+ /** SQL query to execute */
12
+ sql: string;
13
+ /** Query parameters */
14
+ params?: unknown[] | undefined;
15
+ /** Database path (defaults to CLI log database) */
16
+ dbPath?: string | undefined;
17
+ }
18
+ export interface DbQueryOutput<T = Record<string, unknown>> {
19
+ /** Column names */
20
+ columns: string[];
21
+ /** Query results */
22
+ rows: T[];
23
+ }
24
+ export interface DbExecuteInput {
25
+ /** SQL statement to execute (INSERT, UPDATE, DELETE, etc.) */
26
+ sql: string;
27
+ /** Statement parameters */
28
+ params?: unknown[] | undefined;
29
+ /** Database path (defaults to CLI log database) */
30
+ dbPath?: string | undefined;
31
+ }
32
+ export interface DbExecuteOutput {
33
+ /** Number of rows affected */
34
+ changes: number;
35
+ }
36
+ export interface LogsStoreInput {
37
+ /** Log level */
38
+ level: LogLevel;
39
+ /** Log message */
40
+ message: string;
41
+ /** Session ID for grouping logs */
42
+ sessionId?: string | undefined;
43
+ /** Command that generated this log */
44
+ command?: string | undefined;
45
+ /** Additional context (e.g., package name) */
46
+ context?: string | undefined;
47
+ /** Additional structured data */
48
+ data?: Record<string, unknown> | undefined;
49
+ /** Error stack trace if applicable */
50
+ errorStack?: string | undefined;
51
+ /** Database path (defaults to CLI log database) */
52
+ dbPath?: string | undefined;
53
+ }
54
+ export interface LogsStoreOutput {
55
+ /** ID of the inserted log row */
56
+ id: number;
57
+ }
58
+ export interface LogsQueryInput {
59
+ /** Filter by session ID */
60
+ sessionId?: string | undefined;
61
+ /** Filter by command */
62
+ command?: string | undefined;
63
+ /** Filter by log level(s) */
64
+ level?: LogLevel | LogLevel[] | undefined;
65
+ /** Maximum number of logs to return */
66
+ limit?: number | undefined;
67
+ /** Offset for pagination */
68
+ offset?: number | undefined;
69
+ /** Order by (default: timestamp DESC) */
70
+ orderBy?: "asc" | "desc" | undefined;
71
+ /** Database path (defaults to CLI log database) */
72
+ dbPath?: string | undefined;
73
+ }
74
+ export interface LogEntry {
75
+ id: number;
76
+ timestamp: string;
77
+ level: LogLevel;
78
+ message: string;
79
+ data: Record<string, unknown> | null;
80
+ sessionId: string | null;
81
+ command: string | null;
82
+ context: string | null;
83
+ errorStack: string | null;
84
+ }
85
+ export interface LogsQueryOutput {
86
+ /** Log entries matching the query */
87
+ logs: LogEntry[];
88
+ /** Total count (if limit was applied) */
89
+ total?: number | undefined;
90
+ }
91
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAiD,CAAC;AAMhF,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAErE,eAAO,MAAM,UAAU,EAAE,SAAS,QAAQ,EAMhC,CAAC;AAMX,MAAM,WAAW,YAAY;IAC3B,2BAA2B;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;IAC/B,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxD,mBAAmB;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oBAAoB;IACpB,IAAI,EAAE,CAAC,EAAE,CAAC;CACX;AAMD,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,GAAG,EAAE,MAAM,CAAC;IACZ,2BAA2B;IAC3B,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;IAC/B,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,MAAM,WAAW,cAAc;IAC7B,gBAAgB;IAChB,KAAK,EAAE,QAAQ,CAAC;IAChB,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC3C,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;CACZ;AAMD,MAAM,WAAW,cAAc;IAC7B,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,6BAA6B;IAC7B,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,GAAG,SAAS,CAAC;IAC1C,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,yCAAyC;IACzC,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;IACrC,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B"}
package/dist/types.js ADDED
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Type definitions for client-sqlite procedures
3
+ */
4
+ import { homedir } from "node:os";
5
+ import { join } from "node:path";
6
+ // =============================================================================
7
+ // Configuration
8
+ // =============================================================================
9
+ /**
10
+ * Default database path for CLI logs
11
+ */
12
+ export const DEFAULT_DB_PATH = join(homedir(), "logs", "cli", "cli.db");
13
+ export const LOG_LEVELS = [
14
+ "trace",
15
+ "debug",
16
+ "info",
17
+ "warn",
18
+ "error",
19
+ ];
20
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAW,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAQhF,MAAM,CAAC,MAAM,UAAU,GAAwB;IAC7C,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;CACC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,77 @@
1
1
  {
2
+ "$schema": "https://json.schemastore.org/package",
2
3
  "name": "@mark1russell7/client-sqlite",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
4
+ "version": "0.1.0",
5
+ "description": "SQLite procedures with sql.js and no native build: db.query, db.execute and structured logs (logs.store, logs.query), safe for concurrent writes.",
6
+ "keywords": [
7
+ "sqlite",
8
+ "sql.js",
9
+ "database",
10
+ "logging",
11
+ "procedures"
12
+ ],
13
+ "homepage": "https://mark1russell7.github.io/client/",
14
+ "bugs": {
15
+ "url": "https://github.com/mark1russell7/client/issues"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/mark1russell7/client.git",
20
+ "directory": "packages/client-sqlite"
21
+ },
22
+ "license": "MIT",
23
+ "author": "Mark Russell (https://github.com/mark1russell7)",
24
+ "type": "module",
25
+ "main": "./dist/index.js",
26
+ "types": "./dist/index.d.ts",
27
+ "exports": {
28
+ ".": {
29
+ "types": "./dist/index.d.ts",
30
+ "import": "./dist/index.js"
31
+ },
32
+ "./module": {
33
+ "types": "./dist/module.d.ts",
34
+ "import": "./dist/module.js"
35
+ }
36
+ },
37
+ "files": [
38
+ "dist",
39
+ "src",
40
+ "!src/**/*.test.ts",
41
+ "!src/**/*.test.tsx",
42
+ "!src/**/__tests__",
43
+ "CHANGELOG.md"
44
+ ],
45
+ "sideEffects": [
46
+ "./dist/index.js",
47
+ "./dist/register.js"
48
+ ],
49
+ "engines": {
50
+ "node": ">=22"
51
+ },
52
+ "publishConfig": {
53
+ "access": "public",
54
+ "provenance": true
55
+ },
56
+ "client": {
57
+ "procedures": "./dist/register.js"
58
+ },
59
+ "dependencies": {
60
+ "@mark1russell7/client": "0.1.0",
61
+ "@mark1russell7/docker-sqlite": "^0.1.0",
62
+ "zod": "^4.6.5"
63
+ },
64
+ "devDependencies": {
65
+ "@mark1russell7/cue": "^1.0.0",
66
+ "@types/node": "^22.0.0",
67
+ "typescript": "^7.0.2",
68
+ "vitest": "^5.0.3"
69
+ },
70
+ "scripts": {
71
+ "build": "tsc -b",
72
+ "typecheck": "tsc --noEmit",
73
+ "clean": "rm -rf dist .tsbuildinfo",
74
+ "test": "vitest run",
75
+ "test:watch": "vitest"
76
+ }
6
77
  }
package/src/index.ts ADDED
@@ -0,0 +1,88 @@
1
+ /**
2
+ * client-sqlite
3
+ *
4
+ * SQLite database operations via client procedures.
5
+ * Enables database queries and logging via client.call().
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { Client } from "client";
10
+ *
11
+ * const client = new Client(...);
12
+ *
13
+ * // Execute a query
14
+ * const result = await client.call(["db", "query"], {
15
+ * sql: "SELECT * FROM logs WHERE level = ?",
16
+ * params: ["error"]
17
+ * });
18
+ * console.log(result.rows);
19
+ *
20
+ * // Store a log entry
21
+ * await client.call(["logs", "store"], {
22
+ * level: "info",
23
+ * message: "Task completed",
24
+ * sessionId: "20241215-143052-a7b3",
25
+ * command: "lib.refresh"
26
+ * });
27
+ *
28
+ * // Query logs
29
+ * const { logs } = await client.call(["logs", "query"], {
30
+ * sessionId: "20241215-143052-a7b3",
31
+ * level: ["error", "warn"],
32
+ * limit: 100
33
+ * });
34
+ * ```
35
+ */
36
+
37
+ // =============================================================================
38
+ // Types
39
+ // =============================================================================
40
+
41
+ export type {
42
+ DbQueryInput,
43
+ DbQueryOutput,
44
+ DbExecuteInput,
45
+ DbExecuteOutput,
46
+ LogsStoreInput,
47
+ LogsStoreOutput,
48
+ LogsQueryInput,
49
+ LogsQueryOutput,
50
+ LogEntry,
51
+ LogLevel,
52
+ } from "./types.js";
53
+
54
+ export { DEFAULT_DB_PATH, LOG_LEVELS } from "./types.js";
55
+
56
+ // =============================================================================
57
+ // Registration
58
+ // =============================================================================
59
+
60
+ export { registerSqliteProcedures } from "./register.js";
61
+
62
+ // =============================================================================
63
+ // Re-export docker-sqlite utilities for direct use
64
+ // =============================================================================
65
+
66
+ export {
67
+ withConnection,
68
+ createConnection,
69
+ query,
70
+ execute,
71
+ execMultiple,
72
+ lastInsertRowId,
73
+ tableExists,
74
+ getMigrationStatus,
75
+ runMigrations,
76
+ rollbackMigration,
77
+ createMigration,
78
+ } from "@mark1russell7/docker-sqlite";
79
+
80
+ export type {
81
+ ConnectionConfig,
82
+ ConnectionCallback,
83
+ QueryResult,
84
+ ExecuteResult,
85
+ Migration,
86
+ MigrationStatus,
87
+ Database,
88
+ } from "@mark1russell7/docker-sqlite";