hazo_connect 1.0.0 → 2.0.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.
@@ -1,49 +1,45 @@
1
1
  /**
2
- * Purpose: SQLite adapter stub
2
+ * Purpose: SQLite adapter powered by sql.js for parity with the PostgREST adapter.
3
3
  *
4
- * This adapter will support SQLite database connections.
5
- * Currently returns NotImplementedError.
6
- *
7
- * Expected config structure:
8
- * {
9
- * sqlite: {
10
- * database_path: string, // Path to SQLite database file
11
- * read_only?: boolean // Optional read-only mode
12
- * }
13
- * }
4
+ * The adapter supports in-memory and file-backed databases, translating QueryBuilder
5
+ * instructions into parameterised SQL statements and persisting results when required.
14
6
  */
15
7
  import type { HazoConnectAdapter, Logger } from '../types';
16
8
  import { BaseAdapter } from './base-adapter';
17
9
  import { QueryBuilder } from '../query-builder';
18
- /**
19
- * SQLite adapter implementation (stub)
20
- */
21
10
  export declare class SqliteAdapter extends BaseAdapter implements HazoConnectAdapter {
22
- /**
23
- * Constructor
24
- * @param config - SQLite configuration
25
- * @param logger - Optional logger instance
26
- */
11
+ private readonly sqliteConfig;
12
+ private readonly isReadOnlyMode;
13
+ private readonly wasmDirectory;
14
+ private readonly sqlJsPromise;
15
+ private readonly databasePromise;
16
+ private dbInstance?;
17
+ private readonly databasePath?;
27
18
  constructor(config: any, logger?: Logger);
28
- /**
29
- * Execute a query using the query builder
30
- * @param builder - QueryBuilder instance
31
- * @param method - HTTP method
32
- * @param body - Request body
33
- * @returns Promise with query results
34
- */
35
- query(builder: QueryBuilder, method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE', body?: any): Promise<any>;
36
- /**
37
- * Execute a raw query
38
- * @param endpoint - Raw endpoint string (not applicable for SQLite)
39
- * @param options - Request options
40
- * @returns Promise with query results
41
- */
42
- rawQuery(endpoint: string, options?: RequestInit): Promise<any>;
43
- /**
44
- * Get the adapter's configuration
45
- * @returns Promise with adapter-specific config
46
- */
19
+ query(builder: QueryBuilder, method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE', body?: unknown): Promise<any>;
20
+ rawQuery(sql: string, options?: RequestInit & {
21
+ params?: unknown[];
22
+ }): Promise<any>;
47
23
  getConfig(): Promise<any>;
24
+ private executeSelect;
25
+ private executeInsert;
26
+ private executeUpdate;
27
+ private executeDelete;
28
+ private normalizeConfig;
29
+ private resolveWasmDirectory;
30
+ private loadSqlJs;
31
+ private initializeDatabase;
32
+ private getDatabase;
33
+ private executeStatements;
34
+ private executeStatement;
35
+ private persistDatabase;
36
+ private ensureWritable;
37
+ private normalizeInsertBody;
38
+ private normalizeUpdateBody;
39
+ private normalizeRawParams;
40
+ private isMutatingSql;
41
+ private translateWithHandling;
42
+ private handleSqliteError;
43
+ private isPlainObject;
48
44
  }
49
45
  //# sourceMappingURL=sqlite-adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-adapter.d.ts","sourceRoot":"","sources":["../../src/lib/adapters/sqlite-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAG/C;;GAEG;AACH,qBAAa,aAAc,SAAQ,WAAY,YAAW,kBAAkB;IAC1E;;;;OAIG;gBACS,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM;IAKxC;;;;;;OAMG;IACG,KAAK,CACT,OAAO,EAAE,YAAY,EACrB,MAAM,GAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAgB,EAC3D,IAAI,CAAC,EAAE,GAAG,GACT,OAAO,CAAC,GAAG,CAAC;IAOf;;;;;OAKG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,GAAG,CAAC;IAOzE;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC;CAGhC"}
1
+ {"version":3,"file":"sqlite-adapter.d.ts","sourceRoot":"","sources":["../../src/lib/adapters/sqlite-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAoB/C,qBAAa,aAAc,SAAQ,WAAY,YAAW,kBAAkB;IAC1E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwB;IACxD,OAAO,CAAC,UAAU,CAAC,CAAe;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAQ;gBAE1B,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM;IAmBlC,KAAK,CACT,OAAO,EAAE,YAAY,EACrB,MAAM,GAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAgB,EAC3D,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,GAAG,CAAC;IA4BT,QAAQ,CACZ,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAW,GAAG;QAAE,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAO,GACjD,OAAO,CAAC,GAAG,CAAC;IA4BT,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC;YAMjB,aAAa;YAcb,aAAa;YAmBb,aAAa;YAoBb,aAAa;IAiB3B,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,SAAS;YAMH,kBAAkB;YAmClB,WAAW;IAWzB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,gBAAgB;YAsBV,eAAe;IAU7B,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,aAAa;CAGtB"}
@@ -1,60 +1,302 @@
1
1
  "use strict";
2
2
  /**
3
- * Purpose: SQLite adapter stub
3
+ * Purpose: SQLite adapter powered by sql.js for parity with the PostgREST adapter.
4
4
  *
5
- * This adapter will support SQLite database connections.
6
- * Currently returns NotImplementedError.
7
- *
8
- * Expected config structure:
9
- * {
10
- * sqlite: {
11
- * database_path: string, // Path to SQLite database file
12
- * read_only?: boolean // Optional read-only mode
13
- * }
14
- * }
5
+ * The adapter supports in-memory and file-backed databases, translating QueryBuilder
6
+ * instructions into parameterised SQL statements and persisting results when required.
15
7
  */
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
16
11
  Object.defineProperty(exports, "__esModule", { value: true });
17
12
  exports.SqliteAdapter = void 0;
13
+ const fs_1 = __importDefault(require("fs"));
14
+ const path_1 = __importDefault(require("path"));
15
+ const module_1 = require("module");
16
+ const sql_js_1 = __importDefault(require("sql.js"));
18
17
  const base_adapter_1 = require("./base-adapter");
19
18
  const types_1 = require("../types");
20
- /**
21
- * SQLite adapter implementation (stub)
22
- */
19
+ const query_translator_1 = require("../sqlite/query-translator");
20
+ const nodeRequire = (0, module_1.createRequire)(__filename);
23
21
  class SqliteAdapter extends base_adapter_1.BaseAdapter {
24
- /**
25
- * Constructor
26
- * @param config - SQLite configuration
27
- * @param logger - Optional logger instance
28
- */
29
22
  constructor(config, logger) {
30
23
  super(config, logger);
31
- // TODO: Validate SQLite config when implemented
32
- }
33
- /**
34
- * Execute a query using the query builder
35
- * @param builder - QueryBuilder instance
36
- * @param method - HTTP method
37
- * @param body - Request body
38
- * @returns Promise with query results
39
- */
24
+ this.sqliteConfig = this.normalizeConfig(config);
25
+ this.isReadOnlyMode = Boolean(this.sqliteConfig.read_only);
26
+ this.databasePath = this.sqliteConfig.database_path;
27
+ this.wasmDirectory = this.resolveWasmDirectory();
28
+ if (this.isReadOnlyMode && !this.databasePath) {
29
+ this.throwError(types_1.ErrorCode.CONFIG_ERROR, "SQLite adapter requires 'database_path' when read_only is enabled");
30
+ }
31
+ this.sqlJsPromise = this.loadSqlJs();
32
+ this.databasePromise = this.initializeDatabase();
33
+ }
40
34
  async query(builder, method = 'GET', body) {
41
- this.throwError(types_1.ErrorCode.NOT_IMPLEMENTED, 'SQLite adapter is not yet implemented. Please use PostgREST adapter for now.');
42
- }
43
- /**
44
- * Execute a raw query
45
- * @param endpoint - Raw endpoint string (not applicable for SQLite)
46
- * @param options - Request options
47
- * @returns Promise with query results
48
- */
49
- async rawQuery(endpoint, options = {}) {
50
- this.throwError(types_1.ErrorCode.NOT_IMPLEMENTED, 'SQLite adapter is not yet implemented. Please use PostgREST adapter for now.');
51
- }
52
- /**
53
- * Get the adapter's configuration
54
- * @returns Promise with adapter-specific config
55
- */
35
+ const normalizedMethod = method.toUpperCase();
36
+ try {
37
+ switch (normalizedMethod) {
38
+ case 'GET':
39
+ return await this.executeSelect(builder);
40
+ case 'POST':
41
+ this.ensureWritable();
42
+ return await this.executeInsert(builder, body);
43
+ case 'PUT':
44
+ case 'PATCH':
45
+ this.ensureWritable();
46
+ return await this.executeUpdate(builder, body);
47
+ case 'DELETE':
48
+ this.ensureWritable();
49
+ return await this.executeDelete(builder);
50
+ default:
51
+ this.throwError(types_1.ErrorCode.VALIDATION_ERROR, `Unsupported method '${method}' for SQLite adapter`);
52
+ }
53
+ }
54
+ catch (error) {
55
+ return this.handleSqliteError(error);
56
+ }
57
+ }
58
+ async rawQuery(sql, options = {}) {
59
+ try {
60
+ const params = this.normalizeRawParams(options?.params);
61
+ const mutating = this.isMutatingSql(sql);
62
+ if (mutating) {
63
+ this.ensureWritable();
64
+ }
65
+ const database = await this.getDatabase();
66
+ const rows = this.executeStatement(database, sql, params);
67
+ if (mutating) {
68
+ await this.persistDatabase(database);
69
+ }
70
+ this.logQuery('SQLite raw query', {
71
+ sql,
72
+ params,
73
+ row_count: rows.length
74
+ });
75
+ return rows;
76
+ }
77
+ catch (error) {
78
+ return this.handleSqliteError(error);
79
+ }
80
+ }
56
81
  async getConfig() {
57
- return Promise.resolve(this.config.sqlite || this.config);
82
+ return { ...this.sqliteConfig };
83
+ }
84
+ // Query execution ---------------------------------------------------------------------------
85
+ async executeSelect(builder) {
86
+ const translation = this.translateWithHandling(() => (0, query_translator_1.translateSelect)(builder));
87
+ const database = await this.getDatabase();
88
+ const rows = this.executeStatements(database, [translation]);
89
+ this.logQuery('SQLite select', {
90
+ sql: translation.sql,
91
+ params: translation.params,
92
+ row_count: rows.length
93
+ });
94
+ return rows;
95
+ }
96
+ async executeInsert(builder, body) {
97
+ const payload = this.normalizeInsertBody(body);
98
+ const translation = this.translateWithHandling(() => (0, query_translator_1.translateInsert)(builder, payload));
99
+ const database = await this.getDatabase();
100
+ const rows = this.executeStatements(database, translation.statements);
101
+ await this.persistDatabase(database);
102
+ this.logQuery('SQLite insert', {
103
+ statements_executed: translation.statements.length,
104
+ row_count: rows.length
105
+ });
106
+ return rows;
107
+ }
108
+ async executeUpdate(builder, body) {
109
+ const updates = this.normalizeUpdateBody(body);
110
+ const translation = this.translateWithHandling(() => (0, query_translator_1.translateUpdate)(builder, updates));
111
+ const database = await this.getDatabase();
112
+ const rows = this.executeStatements(database, [translation]);
113
+ await this.persistDatabase(database);
114
+ this.logQuery('SQLite update', {
115
+ sql: translation.sql,
116
+ params: translation.params,
117
+ row_count: rows.length
118
+ });
119
+ return rows;
120
+ }
121
+ async executeDelete(builder) {
122
+ const translation = this.translateWithHandling(() => (0, query_translator_1.translateDelete)(builder));
123
+ const database = await this.getDatabase();
124
+ const rows = this.executeStatements(database, [translation]);
125
+ await this.persistDatabase(database);
126
+ this.logQuery('SQLite delete', {
127
+ sql: translation.sql,
128
+ row_count: rows.length
129
+ });
130
+ return rows;
131
+ }
132
+ // Database lifecycle -----------------------------------------------------------------------
133
+ normalizeConfig(config) {
134
+ const raw = config?.sqlite ? config.sqlite : config;
135
+ const initialSqlInput = raw?.initial_sql;
136
+ const initialSqlArray = Array.isArray(initialSqlInput)
137
+ ? initialSqlInput
138
+ : initialSqlInput
139
+ ? [initialSqlInput]
140
+ : [];
141
+ return {
142
+ database_path: raw?.database_path ? path_1.default.resolve(String(raw.database_path)) : undefined,
143
+ read_only: raw?.read_only === true,
144
+ initial_sql: initialSqlArray.map((statement) => String(statement)).filter(Boolean),
145
+ wasm_directory: raw?.wasm_directory ? path_1.default.resolve(String(raw.wasm_directory)) : undefined
146
+ };
147
+ }
148
+ resolveWasmDirectory() {
149
+ if (this.sqliteConfig.wasm_directory) {
150
+ return this.sqliteConfig.wasm_directory;
151
+ }
152
+ const resolved = nodeRequire.resolve('sql.js/dist/sql-wasm.wasm');
153
+ return path_1.default.dirname(resolved);
154
+ }
155
+ loadSqlJs() {
156
+ return (0, sql_js_1.default)({
157
+ locateFile: (file) => path_1.default.join(this.wasmDirectory, file)
158
+ });
159
+ }
160
+ async initializeDatabase() {
161
+ const SQL = await this.sqlJsPromise;
162
+ const databasePath = this.databasePath;
163
+ let database;
164
+ const fileExists = Boolean(databasePath && fs_1.default.existsSync(databasePath));
165
+ if (fileExists && databasePath) {
166
+ const buffer = await fs_1.default.promises.readFile(databasePath);
167
+ database = new SQL.Database(new Uint8Array(buffer));
168
+ }
169
+ else {
170
+ if (this.isReadOnlyMode && databasePath) {
171
+ this.throwError(types_1.ErrorCode.CONFIG_ERROR, `SQLite database not found at '${databasePath}' while read_only is enabled`);
172
+ }
173
+ database = new SQL.Database();
174
+ if (this.sqliteConfig.initial_sql?.length) {
175
+ for (const statement of this.sqliteConfig.initial_sql) {
176
+ database.exec(statement);
177
+ }
178
+ }
179
+ if (databasePath && !this.isReadOnlyMode) {
180
+ await this.persistDatabase(database);
181
+ }
182
+ }
183
+ this.dbInstance = database;
184
+ return database;
185
+ }
186
+ async getDatabase() {
187
+ if (this.dbInstance) {
188
+ return this.dbInstance;
189
+ }
190
+ this.dbInstance = await this.databasePromise;
191
+ return this.dbInstance;
192
+ }
193
+ // Statement execution ----------------------------------------------------------------------
194
+ executeStatements(database, statements) {
195
+ const results = [];
196
+ for (const statement of statements) {
197
+ results.push(...this.executeStatement(database, statement.sql, statement.params));
198
+ }
199
+ return results;
200
+ }
201
+ executeStatement(database, sql, params) {
202
+ let statement;
203
+ try {
204
+ statement = database.prepare(sql);
205
+ if (params && params.length) {
206
+ statement.bind(params);
207
+ }
208
+ const rows = [];
209
+ while (statement.step()) {
210
+ rows.push(statement.getAsObject());
211
+ }
212
+ return rows;
213
+ }
214
+ catch (error) {
215
+ throw error;
216
+ }
217
+ finally {
218
+ if (statement) {
219
+ statement.free();
220
+ }
221
+ }
222
+ }
223
+ async persistDatabase(database) {
224
+ if (!this.databasePath || this.isReadOnlyMode) {
225
+ return;
226
+ }
227
+ const data = database.export();
228
+ await fs_1.default.promises.mkdir(path_1.default.dirname(this.databasePath), { recursive: true });
229
+ await fs_1.default.promises.writeFile(this.databasePath, Buffer.from(data));
230
+ }
231
+ ensureWritable() {
232
+ if (this.isReadOnlyMode) {
233
+ this.throwError(types_1.ErrorCode.CONFIG_ERROR, 'SQLite database is configured as read-only and cannot accept write operations');
234
+ }
235
+ }
236
+ // Payload helpers --------------------------------------------------------------------------
237
+ normalizeInsertBody(body) {
238
+ if (Array.isArray(body)) {
239
+ if (!body.length) {
240
+ this.throwError(types_1.ErrorCode.CONFIG_ERROR, 'Insert payload array cannot be empty');
241
+ }
242
+ return body.map(row => {
243
+ if (!this.isPlainObject(row)) {
244
+ this.throwError(types_1.ErrorCode.CONFIG_ERROR, 'Insert payload array items must be plain objects');
245
+ }
246
+ return row;
247
+ });
248
+ }
249
+ if (this.isPlainObject(body)) {
250
+ return body;
251
+ }
252
+ this.throwError(types_1.ErrorCode.CONFIG_ERROR, 'Insert payload must be an object or array of objects');
253
+ }
254
+ normalizeUpdateBody(body) {
255
+ if (!this.isPlainObject(body)) {
256
+ this.throwError(types_1.ErrorCode.CONFIG_ERROR, 'Update payload must be an object');
257
+ }
258
+ const updates = body;
259
+ if (Object.keys(updates).length === 0) {
260
+ this.throwError(types_1.ErrorCode.CONFIG_ERROR, 'Update payload must include at least one column');
261
+ }
262
+ return updates;
263
+ }
264
+ normalizeRawParams(params) {
265
+ if (params === undefined || params === null) {
266
+ return [];
267
+ }
268
+ if (!Array.isArray(params)) {
269
+ this.throwError(types_1.ErrorCode.CONFIG_ERROR, 'SQLite rawQuery params must be an array');
270
+ }
271
+ return params;
272
+ }
273
+ isMutatingSql(sql) {
274
+ const keyword = sql.trim().split(/\s+/)[0]?.toUpperCase() ?? '';
275
+ return ['INSERT', 'UPDATE', 'DELETE', 'REPLACE', 'CREATE', 'DROP', 'ALTER'].includes(keyword);
276
+ }
277
+ translateWithHandling(translate) {
278
+ try {
279
+ return translate();
280
+ }
281
+ catch (error) {
282
+ if (error instanceof query_translator_1.SqliteTranslationError) {
283
+ this.throwError(types_1.ErrorCode.CONFIG_ERROR, error.message);
284
+ }
285
+ throw error;
286
+ }
287
+ }
288
+ handleSqliteError(error) {
289
+ if (error instanceof query_translator_1.SqliteTranslationError) {
290
+ this.throwError(types_1.ErrorCode.CONFIG_ERROR, error.message);
291
+ }
292
+ if (error?.code) {
293
+ throw error;
294
+ }
295
+ const message = error instanceof Error ? error.message : String(error);
296
+ this.throwError(types_1.ErrorCode.QUERY_ERROR, `SQLite request failed: ${message}`, undefined, error);
297
+ }
298
+ isPlainObject(value) {
299
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
58
300
  }
59
301
  }
60
302
  exports.SqliteAdapter = SqliteAdapter;
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-adapter.js","sourceRoot":"","sources":["../../src/lib/adapters/sqlite-adapter.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAGH,iDAA4C;AAE5C,oCAAoC;AAEpC;;GAEG;AACH,MAAa,aAAc,SAAQ,0BAAW;IAC5C;;;;OAIG;IACH,YAAY,MAAW,EAAE,MAAe;QACtC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACrB,gDAAgD;IAClD,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,CACT,OAAqB,EACrB,SAAsD,KAAK,EAC3D,IAAU;QAEV,IAAI,CAAC,UAAU,CACb,iBAAS,CAAC,eAAe,EACzB,8EAA8E,CAC/E,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,UAAuB,EAAE;QACxD,IAAI,CAAC,UAAU,CACb,iBAAS,CAAC,eAAe,EACzB,8EAA8E,CAC/E,CAAA;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS;QACb,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAA;IAC3D,CAAC;CACF;AAjDD,sCAiDC"}
1
+ {"version":3,"file":"sqlite-adapter.js","sourceRoot":"","sources":["../../src/lib/adapters/sqlite-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { QueryBuilder } from "../query-builder";
2
+ /**
3
+ * Error raised when translation from QueryBuilder to SQL fails due to invalid configuration.
4
+ */
5
+ export declare class SqliteTranslationError extends Error {
6
+ constructor(message: string);
7
+ }
8
+ /**
9
+ * Represents a single SQL statement with bound parameters.
10
+ */
11
+ export interface TranslatedQuery {
12
+ sql: string;
13
+ params: unknown[];
14
+ }
15
+ /**
16
+ * Represents one or more INSERT statements generated from a payload.
17
+ */
18
+ export interface InsertTranslation {
19
+ statements: TranslatedQuery[];
20
+ }
21
+ /**
22
+ * Translate a QueryBuilder instance into a SELECT statement.
23
+ */
24
+ export declare function translateSelect(builder: QueryBuilder): TranslatedQuery;
25
+ /**
26
+ * Translate an insert payload into one or more INSERT statements.
27
+ */
28
+ export declare function translateInsert(builder: QueryBuilder, rowsInput: Record<string, unknown> | Array<Record<string, unknown>>): InsertTranslation;
29
+ /**
30
+ * Translate an update payload into an UPDATE statement.
31
+ */
32
+ export declare function translateUpdate(builder: QueryBuilder, updates: Record<string, unknown>): TranslatedQuery;
33
+ /**
34
+ * Translate delete instructions into a DELETE statement.
35
+ */
36
+ export declare function translateDelete(builder: QueryBuilder): TranslatedQuery;
37
+ //# sourceMappingURL=query-translator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-translator.d.ts","sourceRoot":"","sources":["../../src/lib/sqlite/query-translator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAG/C;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,OAAO,EAAE,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,eAAe,EAAE,CAAA;CAC9B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,eAAe,CAsBtE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAClE,iBAAiB,CAoCnB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,eAAe,CAkBjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,eAAe,CAUtE"}
@@ -0,0 +1,426 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SqliteTranslationError = void 0;
4
+ exports.translateSelect = translateSelect;
5
+ exports.translateInsert = translateInsert;
6
+ exports.translateUpdate = translateUpdate;
7
+ exports.translateDelete = translateDelete;
8
+ /**
9
+ * Error raised when translation from QueryBuilder to SQL fails due to invalid configuration.
10
+ */
11
+ class SqliteTranslationError extends Error {
12
+ constructor(message) {
13
+ super(message);
14
+ this.name = "SqliteTranslationError";
15
+ }
16
+ }
17
+ exports.SqliteTranslationError = SqliteTranslationError;
18
+ /**
19
+ * Translate a QueryBuilder instance into a SELECT statement.
20
+ */
21
+ function translateSelect(builder) {
22
+ validateNestedSelects(builder);
23
+ const tableName = resolveTableName(builder);
24
+ const selectClause = buildSelectClause(builder.getSelectFields());
25
+ const joinClause = buildJoinClauses(builder.getJoins());
26
+ const whereClause = buildWhereClause(builder);
27
+ const orderClause = buildOrderClause(builder.getOrderBy());
28
+ const limitOffsetClause = buildLimitOffsetClause(builder.getLimit(), builder.getOffset());
29
+ const sqlParts = [
30
+ `SELECT ${selectClause}`,
31
+ `FROM ${quoteIdentifier(tableName)}`,
32
+ joinClause,
33
+ whereClause.clause,
34
+ orderClause,
35
+ limitOffsetClause
36
+ ].filter(Boolean);
37
+ return {
38
+ sql: sqlParts.join(" ").trim(),
39
+ params: whereClause.params
40
+ };
41
+ }
42
+ /**
43
+ * Translate an insert payload into one or more INSERT statements.
44
+ */
45
+ function translateInsert(builder, rowsInput) {
46
+ const tableName = resolveTableName(builder);
47
+ const rows = Array.isArray(rowsInput) ? rowsInput : [rowsInput];
48
+ if (rows.length === 0) {
49
+ throw new SqliteTranslationError("Insert payload must contain at least one row");
50
+ }
51
+ const columns = Object.keys(rows[0]);
52
+ if (columns.length === 0) {
53
+ throw new SqliteTranslationError("Insert payload must include at least one column");
54
+ }
55
+ const quotedColumns = columns.map(quoteColumnName);
56
+ for (const row of rows) {
57
+ const rowColumnNames = Object.keys(row);
58
+ const allColumnsPresent = rowColumnNames.length === columns.length &&
59
+ rowColumnNames.every(columnName => columns.includes(columnName));
60
+ if (!allColumnsPresent) {
61
+ throw new SqliteTranslationError("All inserted rows must share the same set of columns");
62
+ }
63
+ }
64
+ const baseSql = `INSERT INTO ${quoteIdentifier(tableName)} (${quotedColumns.join(", ")}) VALUES (${columns
65
+ .map(() => "?")
66
+ .join(", ")}) RETURNING *`;
67
+ const statements = rows.map(row => ({
68
+ sql: baseSql,
69
+ params: columns.map(column => normalizeValue(row[column]))
70
+ }));
71
+ return { statements };
72
+ }
73
+ /**
74
+ * Translate an update payload into an UPDATE statement.
75
+ */
76
+ function translateUpdate(builder, updates) {
77
+ const tableName = resolveTableName(builder);
78
+ const updateColumns = Object.keys(updates);
79
+ if (updateColumns.length === 0) {
80
+ throw new SqliteTranslationError("Update payload must include at least one column");
81
+ }
82
+ const setFragments = updateColumns.map(column => `${quoteColumnName(column)} = ?`);
83
+ const setParams = updateColumns.map(column => normalizeValue(updates[column]));
84
+ const whereClause = buildWhereClause(builder);
85
+ const sql = `UPDATE ${quoteIdentifier(tableName)} SET ${setFragments.join(", ")}${whereClause.clause} RETURNING *`;
86
+ return {
87
+ sql,
88
+ params: [...setParams, ...whereClause.params]
89
+ };
90
+ }
91
+ /**
92
+ * Translate delete instructions into a DELETE statement.
93
+ */
94
+ function translateDelete(builder) {
95
+ const tableName = resolveTableName(builder);
96
+ const whereClause = buildWhereClause(builder);
97
+ const sql = `DELETE FROM ${quoteIdentifier(tableName)}${whereClause.clause} RETURNING *`;
98
+ return {
99
+ sql,
100
+ params: [...whereClause.params]
101
+ };
102
+ }
103
+ // Helper functions ---------------------------------------------------------------------------
104
+ function resolveTableName(builder) {
105
+ const table = builder.getTable();
106
+ if (!table) {
107
+ throw new SqliteTranslationError("A table name must be specified before executing a query");
108
+ }
109
+ return table;
110
+ }
111
+ function validateNestedSelects(builder) {
112
+ if (builder.getNestedSelects().length > 0) {
113
+ throw new SqliteTranslationError("Nested selects are not supported by the SQLite adapter yet");
114
+ }
115
+ }
116
+ function buildSelectClause(selectFields) {
117
+ if (!selectFields.length) {
118
+ return "*";
119
+ }
120
+ return selectFields.map(quoteSelectField).join(", ");
121
+ }
122
+ function buildJoinClauses(joins) {
123
+ if (!joins || joins.length === 0) {
124
+ return "";
125
+ }
126
+ const clauses = joins.map(join => {
127
+ const joinType = normalizeJoinType(join.type);
128
+ const tableSql = quoteJoinTarget(join.table);
129
+ const conditionSql = sanitizeJoinCondition(join.on);
130
+ return `${joinType} ${tableSql} ON ${conditionSql}`;
131
+ });
132
+ return ` ${clauses.join(" ")}`;
133
+ }
134
+ function buildWhereClause(builder) {
135
+ const params = [];
136
+ const clauses = [];
137
+ for (const condition of builder.getWhereConditions()) {
138
+ const { clause, params: conditionParams } = translateCondition(condition);
139
+ if (clause) {
140
+ clauses.push(clause);
141
+ params.push(...conditionParams);
142
+ }
143
+ }
144
+ for (const group of builder.getWhereOrConditions()) {
145
+ if (!group || group.length === 0) {
146
+ continue;
147
+ }
148
+ const groupClauses = [];
149
+ const groupParams = [];
150
+ for (const condition of group) {
151
+ const { clause, params: conditionParams } = translateCondition(condition);
152
+ if (clause) {
153
+ groupClauses.push(clause);
154
+ groupParams.push(...conditionParams);
155
+ }
156
+ }
157
+ if (groupClauses.length === 0) {
158
+ continue;
159
+ }
160
+ const joinedGroup = groupClauses.length === 1 ? groupClauses[0] : groupClauses.map(c => `(${c})`).join(" OR ");
161
+ clauses.push(`(${joinedGroup})`);
162
+ params.push(...groupParams);
163
+ }
164
+ if (!clauses.length) {
165
+ return { clause: "", params };
166
+ }
167
+ return { clause: ` WHERE ${clauses.join(" AND ")}`, params };
168
+ }
169
+ function buildOrderClause(orderBy) {
170
+ if (!orderBy || orderBy.length === 0) {
171
+ return "";
172
+ }
173
+ const parts = orderBy.map(order => {
174
+ const direction = normalizeOrderDirection(order.direction);
175
+ return `${quoteQualifiedIdentifier(order.field)} ${direction}`;
176
+ });
177
+ return ` ORDER BY ${parts.join(", ")}`;
178
+ }
179
+ function buildLimitOffsetClause(limit, offset) {
180
+ const parts = [];
181
+ if (limit !== null && limit !== undefined) {
182
+ if (!Number.isInteger(limit) || limit < 0) {
183
+ throw new SqliteTranslationError("Limit must be a non-negative integer");
184
+ }
185
+ parts.push(`LIMIT ${limit}`);
186
+ }
187
+ if (offset !== null && offset !== undefined) {
188
+ if (!Number.isInteger(offset) || offset < 0) {
189
+ throw new SqliteTranslationError("Offset must be a non-negative integer");
190
+ }
191
+ parts.push(`OFFSET ${offset}`);
192
+ }
193
+ if (!parts.length) {
194
+ return "";
195
+ }
196
+ return ` ${parts.join(" ")}`;
197
+ }
198
+ function translateCondition(condition) {
199
+ const operator = condition.operator;
200
+ const field = quoteQualifiedIdentifier(condition.field);
201
+ const params = [];
202
+ const normalizedValue = normalizeValue(condition.value);
203
+ switch (operator) {
204
+ case "eq": {
205
+ if (condition.value === null || condition.value === undefined) {
206
+ return { clause: `${field} IS NULL`, params };
207
+ }
208
+ return { clause: `${field} = ?`, params: [normalizedValue] };
209
+ }
210
+ case "neq": {
211
+ if (condition.value === null || condition.value === undefined) {
212
+ return { clause: `${field} IS NOT NULL`, params };
213
+ }
214
+ return { clause: `${field} != ?`, params: [normalizedValue] };
215
+ }
216
+ case "gt":
217
+ return { clause: `${field} > ?`, params: [normalizedValue] };
218
+ case "gte":
219
+ return { clause: `${field} >= ?`, params: [normalizedValue] };
220
+ case "lt":
221
+ return { clause: `${field} < ?`, params: [normalizedValue] };
222
+ case "lte":
223
+ return { clause: `${field} <= ?`, params: [normalizedValue] };
224
+ case "like":
225
+ return { clause: `${field} LIKE ?`, params: [String(normalizedValue)] };
226
+ case "ilike":
227
+ return { clause: `LOWER(${field}) LIKE LOWER(?)`, params: [String(normalizedValue)] };
228
+ case "in": {
229
+ const values = Array.isArray(condition.value) ? condition.value : [condition.value];
230
+ if (!values.length) {
231
+ return { clause: "1=0", params: [] };
232
+ }
233
+ const placeholders = values.map(() => "?").join(", ");
234
+ return {
235
+ clause: `${field} IN (${placeholders})`,
236
+ params: values.map(normalizeValue)
237
+ };
238
+ }
239
+ case "is": {
240
+ const valueString = condition.value === null || condition.value === undefined
241
+ ? "null"
242
+ : String(condition.value).toLowerCase();
243
+ if (valueString === "null") {
244
+ return { clause: `${field} IS NULL`, params };
245
+ }
246
+ if (valueString === "not.null" || valueString === "not null") {
247
+ return { clause: `${field} IS NOT NULL`, params };
248
+ }
249
+ throw new SqliteTranslationError(`Unsupported IS comparison value '${condition.value}'. Use 'null' or 'not.null'.`);
250
+ }
251
+ default:
252
+ throw new SqliteTranslationError(`Unsupported operator '${operator}' in WHERE clause. Use whereOr() for OR groupings.`);
253
+ }
254
+ }
255
+ function normalizeOrderDirection(direction) {
256
+ const normalized = direction?.toString().toLowerCase();
257
+ if (normalized === "asc" || normalized === "desc") {
258
+ return normalized.toUpperCase();
259
+ }
260
+ throw new SqliteTranslationError(`Unsupported ORDER BY direction '${direction}'`);
261
+ }
262
+ function normalizeJoinType(type) {
263
+ const normalized = type?.toString().toLowerCase() ?? "inner";
264
+ if (normalized === "inner") {
265
+ return "INNER JOIN";
266
+ }
267
+ if (normalized === "left") {
268
+ return "LEFT JOIN";
269
+ }
270
+ if (normalized === "right") {
271
+ throw new SqliteTranslationError("SQLite does not support RIGHT JOIN operations");
272
+ }
273
+ throw new SqliteTranslationError(`Unsupported join type '${type}' for SQLite adapter`);
274
+ }
275
+ function quoteJoinTarget(target) {
276
+ const trimmed = target.trim();
277
+ const parts = trimmed.split(/\s+/);
278
+ if (parts.length === 1) {
279
+ return quoteIdentifier(parts[0]);
280
+ }
281
+ if (parts.length === 2) {
282
+ return `${quoteIdentifier(parts[0])} AS ${quoteIdentifier(parts[1])}`;
283
+ }
284
+ if (parts.length === 3 && parts[1].toLowerCase() === "as") {
285
+ return `${quoteIdentifier(parts[0])} AS ${quoteIdentifier(parts[2])}`;
286
+ }
287
+ throw new SqliteTranslationError(`Unsupported join table format '${target}'. Use 'table', 'table alias', or 'table AS alias'.`);
288
+ }
289
+ function sanitizeJoinCondition(condition) {
290
+ const parts = condition.split("=").map(part => part.trim());
291
+ if (parts.length !== 2 || !parts[0] || !parts[1]) {
292
+ throw new SqliteTranslationError(`Join conditions must be expressed as single-column equality (e.g. table_a.id = table_b.id). Received '${condition}'.`);
293
+ }
294
+ return `${quoteQualifiedIdentifier(parts[0])} = ${quoteQualifiedIdentifier(parts[1])}`;
295
+ }
296
+ function quoteSelectField(field) {
297
+ const trimmed = field.trim();
298
+ const { expression, alias } = extractSelectAlias(trimmed);
299
+ const formattedExpression = formatSelectExpression(expression);
300
+ if (!alias) {
301
+ return formattedExpression;
302
+ }
303
+ return `${formattedExpression} AS ${quoteIdentifier(alias)}`;
304
+ }
305
+ function quoteColumnName(column) {
306
+ if (column.includes(".")) {
307
+ throw new SqliteTranslationError(`Column names in insert/update payloads must not be qualified. Received '${column}'.`);
308
+ }
309
+ return quoteIdentifier(column);
310
+ }
311
+ const identifierPattern = /^[A-Za-z_][A-Za-z0-9_]*$/;
312
+ function quoteIdentifier(identifier) {
313
+ if (!identifierPattern.test(identifier)) {
314
+ throw new SqliteTranslationError(`Identifier '${identifier}' contains unsupported characters`);
315
+ }
316
+ return `"${identifier}"`;
317
+ }
318
+ function quoteQualifiedIdentifier(identifier) {
319
+ const parts = identifier.split(".");
320
+ if (parts.some(part => part === "*")) {
321
+ throw new SqliteTranslationError(`Wildcard selectors are only supported via 'table.*' syntax`);
322
+ }
323
+ return parts.map(quoteIdentifier).join(".");
324
+ }
325
+ function extractSelectAlias(field) {
326
+ const match = field.match(/^(.*)\s+as\s+([A-Za-z_][A-Za-z0-9_]*)$/i);
327
+ if (!match) {
328
+ return { expression: field };
329
+ }
330
+ const alias = match[2].trim();
331
+ if (!identifierPattern.test(alias)) {
332
+ throw new SqliteTranslationError(`Alias '${alias}' contains unsupported characters`);
333
+ }
334
+ return { expression: match[1].trim(), alias };
335
+ }
336
+ function formatSelectExpression(expression) {
337
+ const trimmed = expression.trim();
338
+ if (trimmed === "*") {
339
+ return "*";
340
+ }
341
+ const wildcardMatch = trimmed.match(/^([A-Za-z_][A-Za-z0-9_]*)\.\*$/);
342
+ if (wildcardMatch) {
343
+ return `${quoteIdentifier(wildcardMatch[1])}.*`;
344
+ }
345
+ const functionMatch = trimmed.match(/^([A-Za-z_][A-Za-z0-9_]*)\((.*)\)$/);
346
+ if (functionMatch) {
347
+ return formatFunctionCall(functionMatch[1], functionMatch[2]);
348
+ }
349
+ return quoteQualifiedIdentifier(trimmed);
350
+ }
351
+ function formatFunctionCall(functionName, rawArguments) {
352
+ if (!identifierPattern.test(functionName)) {
353
+ throw new SqliteTranslationError(`Function name '${functionName}' contains unsupported characters`);
354
+ }
355
+ const argumentText = rawArguments.trim();
356
+ if (!argumentText.length) {
357
+ throw new SqliteTranslationError(`Function '${functionName}' requires at least one argument`);
358
+ }
359
+ const args = splitFunctionArgs(argumentText).map(formatFunctionArgument);
360
+ return `${functionName}(${args.join(", ")})`;
361
+ }
362
+ function splitFunctionArgs(argumentText) {
363
+ const args = [];
364
+ let depth = 0;
365
+ let current = "";
366
+ for (const char of argumentText) {
367
+ if (char === "(") {
368
+ depth += 1;
369
+ current += char;
370
+ }
371
+ else if (char === ")") {
372
+ depth -= 1;
373
+ current += char;
374
+ }
375
+ else if (char === "," && depth === 0) {
376
+ if (current.trim().length > 0) {
377
+ args.push(current.trim());
378
+ }
379
+ current = "";
380
+ }
381
+ else {
382
+ current += char;
383
+ }
384
+ }
385
+ if (current.trim().length > 0) {
386
+ args.push(current.trim());
387
+ }
388
+ return args.length ? args : [argumentText.trim()];
389
+ }
390
+ function formatFunctionArgument(argument) {
391
+ const trimmed = argument.trim();
392
+ if (!trimmed.length) {
393
+ throw new SqliteTranslationError("Function arguments cannot be empty");
394
+ }
395
+ if (trimmed === "*") {
396
+ return "*";
397
+ }
398
+ if (/^[0-9]+(\.[0-9]+)?$/.test(trimmed)) {
399
+ return trimmed;
400
+ }
401
+ if (/^'.*'$/.test(trimmed) || /^".*"$/.test(trimmed)) {
402
+ return trimmed;
403
+ }
404
+ if (trimmed.toUpperCase().startsWith("DISTINCT ")) {
405
+ const remainder = trimmed.slice(8).trim();
406
+ return `DISTINCT ${formatFunctionArgument(remainder)}`;
407
+ }
408
+ const nestedFunction = trimmed.match(/^([A-Za-z_][A-Za-z0-9_]*)\((.*)\)$/);
409
+ if (nestedFunction) {
410
+ return formatFunctionCall(nestedFunction[1], nestedFunction[2]);
411
+ }
412
+ return quoteQualifiedIdentifier(trimmed);
413
+ }
414
+ function normalizeValue(value) {
415
+ if (value === undefined) {
416
+ return null;
417
+ }
418
+ if (value instanceof Date) {
419
+ return value.toISOString();
420
+ }
421
+ if (typeof value === "boolean") {
422
+ return value ? 1 : 0;
423
+ }
424
+ return value;
425
+ }
426
+ //# sourceMappingURL=query-translator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-translator.js","sourceRoot":"","sources":["../../src/lib/sqlite/query-translator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hazo_connect",
3
- "version": "1.0.0",
3
+ "version": "2.0.0",
4
4
  "description": "Module to connect to the data store (postgres via postgrest, supabase, etc)",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -21,6 +21,7 @@
21
21
  "test:watch": "jest --watch",
22
22
  "test:coverage": "jest --coverage",
23
23
  "test:integration": "POSTGREST_INTEGRATION=true jest --runInBand tests/integration/postgrest.integration.test.ts",
24
+ "test:integration:sqlite": "jest --runInBand tests/integration/sqlite.integration.test.ts",
24
25
  "prepublishOnly": "npm run build:lib",
25
26
  "postinstall": "patch-package"
26
27
  },
@@ -44,7 +45,8 @@
44
45
  "hazo_config": "^1.3.0",
45
46
  "next": "14.2.5",
46
47
  "react": "18.3.1",
47
- "react-dom": "18.3.1"
48
+ "react-dom": "18.3.1",
49
+ "sql.js": "^1.13.0"
48
50
  },
49
51
  "devDependencies": {
50
52
  "@storybook/addon-essentials": "^8.2.6",
@@ -57,6 +59,7 @@
57
59
  "@types/node": "^20.14.10",
58
60
  "@types/react": "^18.3.3",
59
61
  "@types/react-dom": "^18.3.0",
62
+ "@types/sql.js": "^1.4.9",
60
63
  "autoprefixer": "^10.4.19",
61
64
  "eslint": "^8.57.0",
62
65
  "eslint-config-next": "14.2.5",