lokicms-plugin-sql 1.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.
Files changed (93) hide show
  1. package/dist/federation/cache-layer.d.ts +58 -0
  2. package/dist/federation/cache-layer.d.ts.map +1 -0
  3. package/dist/federation/cache-layer.js +210 -0
  4. package/dist/federation/cache-layer.js.map +1 -0
  5. package/dist/federation/index.d.ts +12 -0
  6. package/dist/federation/index.d.ts.map +1 -0
  7. package/dist/federation/index.js +9 -0
  8. package/dist/federation/index.js.map +1 -0
  9. package/dist/federation/source-manager.d.ts +57 -0
  10. package/dist/federation/source-manager.d.ts.map +1 -0
  11. package/dist/federation/source-manager.js +238 -0
  12. package/dist/federation/source-manager.js.map +1 -0
  13. package/dist/federation/sync-engine.d.ts +68 -0
  14. package/dist/federation/sync-engine.d.ts.map +1 -0
  15. package/dist/federation/sync-engine.js +288 -0
  16. package/dist/federation/sync-engine.js.map +1 -0
  17. package/dist/index.d.ts +80 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +79 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/plugin.d.ts +28 -0
  22. package/dist/plugin.d.ts.map +1 -0
  23. package/dist/plugin.js +798 -0
  24. package/dist/plugin.js.map +1 -0
  25. package/dist/providers/base.d.ts +142 -0
  26. package/dist/providers/base.d.ts.map +1 -0
  27. package/dist/providers/base.js +161 -0
  28. package/dist/providers/base.js.map +1 -0
  29. package/dist/providers/index.d.ts +22 -0
  30. package/dist/providers/index.d.ts.map +1 -0
  31. package/dist/providers/index.js +74 -0
  32. package/dist/providers/index.js.map +1 -0
  33. package/dist/providers/mariadb.d.ts +83 -0
  34. package/dist/providers/mariadb.d.ts.map +1 -0
  35. package/dist/providers/mariadb.js +293 -0
  36. package/dist/providers/mariadb.js.map +1 -0
  37. package/dist/providers/mysql.d.ts +78 -0
  38. package/dist/providers/mysql.d.ts.map +1 -0
  39. package/dist/providers/mysql.js +284 -0
  40. package/dist/providers/mysql.js.map +1 -0
  41. package/dist/providers/postgresql.d.ts +77 -0
  42. package/dist/providers/postgresql.d.ts.map +1 -0
  43. package/dist/providers/postgresql.js +296 -0
  44. package/dist/providers/postgresql.js.map +1 -0
  45. package/dist/providers/sqlite.d.ts +80 -0
  46. package/dist/providers/sqlite.d.ts.map +1 -0
  47. package/dist/providers/sqlite.js +283 -0
  48. package/dist/providers/sqlite.js.map +1 -0
  49. package/dist/query/builder.d.ts +74 -0
  50. package/dist/query/builder.d.ts.map +1 -0
  51. package/dist/query/builder.js +279 -0
  52. package/dist/query/builder.js.map +1 -0
  53. package/dist/query/index.d.ts +10 -0
  54. package/dist/query/index.d.ts.map +1 -0
  55. package/dist/query/index.js +8 -0
  56. package/dist/query/index.js.map +1 -0
  57. package/dist/query/transformer.d.ts +74 -0
  58. package/dist/query/transformer.d.ts.map +1 -0
  59. package/dist/query/transformer.js +236 -0
  60. package/dist/query/transformer.js.map +1 -0
  61. package/dist/types.d.ts +350 -0
  62. package/dist/types.d.ts.map +1 -0
  63. package/dist/types.js +38 -0
  64. package/dist/types.js.map +1 -0
  65. package/dist/vectors/adapter.d.ts +128 -0
  66. package/dist/vectors/adapter.d.ts.map +1 -0
  67. package/dist/vectors/adapter.js +79 -0
  68. package/dist/vectors/adapter.js.map +1 -0
  69. package/dist/vectors/index.d.ts +41 -0
  70. package/dist/vectors/index.d.ts.map +1 -0
  71. package/dist/vectors/index.js +87 -0
  72. package/dist/vectors/index.js.map +1 -0
  73. package/dist/vectors/lokijs-vector.d.ts +112 -0
  74. package/dist/vectors/lokijs-vector.d.ts.map +1 -0
  75. package/dist/vectors/lokijs-vector.js +217 -0
  76. package/dist/vectors/lokijs-vector.js.map +1 -0
  77. package/dist/vectors/mariadb-vector.d.ts +56 -0
  78. package/dist/vectors/mariadb-vector.d.ts.map +1 -0
  79. package/dist/vectors/mariadb-vector.js +263 -0
  80. package/dist/vectors/mariadb-vector.js.map +1 -0
  81. package/dist/vectors/mysql-vector.d.ts +56 -0
  82. package/dist/vectors/mysql-vector.d.ts.map +1 -0
  83. package/dist/vectors/mysql-vector.js +235 -0
  84. package/dist/vectors/mysql-vector.js.map +1 -0
  85. package/dist/vectors/pgvector.d.ts +52 -0
  86. package/dist/vectors/pgvector.d.ts.map +1 -0
  87. package/dist/vectors/pgvector.js +190 -0
  88. package/dist/vectors/pgvector.js.map +1 -0
  89. package/dist/vectors/sqlite-vec.d.ts +80 -0
  90. package/dist/vectors/sqlite-vec.d.ts.map +1 -0
  91. package/dist/vectors/sqlite-vec.js +362 -0
  92. package/dist/vectors/sqlite-vec.js.map +1 -0
  93. package/package.json +64 -0
@@ -0,0 +1,362 @@
1
+ /**
2
+ * SQLite-vec Adapter
3
+ *
4
+ * SQLite vector adapter using sqlite-vec extension.
5
+ */
6
+ import { BaseVectorAdapter } from './adapter.js';
7
+ /**
8
+ * SQLite-vec adapter
9
+ */
10
+ export class SQLiteVecAdapter extends BaseVectorAdapter {
11
+ type = 'sqlite';
12
+ hasVectorSupport = false;
13
+ constructor(options) {
14
+ super(options);
15
+ }
16
+ /**
17
+ * Check if vectors are supported
18
+ */
19
+ isSupported() {
20
+ return this.hasVectorSupport;
21
+ }
22
+ /**
23
+ * Initialize vector storage
24
+ */
25
+ async initialize(dimensions) {
26
+ this.dimensions = dimensions;
27
+ // Check for sqlite-vec extension
28
+ try {
29
+ await this.provider.query('SELECT vec_version()');
30
+ this.hasVectorSupport = true;
31
+ }
32
+ catch {
33
+ this.hasVectorSupport = false;
34
+ this.logger.warn('sqlite-vec extension not loaded. Using BLOB fallback for vector storage.');
35
+ }
36
+ // Create metadata table (for non-vector data)
37
+ const metaTableName = this.provider.escapeIdentifier(`${this.tableName}_meta`);
38
+ await this.provider.execute(`
39
+ CREATE TABLE IF NOT EXISTS ${metaTableName} (
40
+ id TEXT PRIMARY KEY,
41
+ entry_id TEXT NOT NULL,
42
+ collection TEXT NOT NULL,
43
+ text_hash TEXT NOT NULL,
44
+ created_at INTEGER NOT NULL,
45
+ updated_at INTEGER NOT NULL
46
+ )
47
+ `);
48
+ await this.provider.execute(`
49
+ CREATE INDEX IF NOT EXISTS idx_${this.tableName}_meta_entry_id
50
+ ON ${metaTableName} (entry_id)
51
+ `);
52
+ await this.provider.execute(`
53
+ CREATE INDEX IF NOT EXISTS idx_${this.tableName}_meta_collection
54
+ ON ${metaTableName} (collection)
55
+ `);
56
+ if (this.hasVectorSupport) {
57
+ // Create virtual table for vector search using sqlite-vec
58
+ const vecTableName = this.provider.escapeIdentifier(`${this.tableName}_vec`);
59
+ await this.provider.execute(`
60
+ CREATE VIRTUAL TABLE IF NOT EXISTS ${vecTableName} USING vec0(
61
+ id TEXT PRIMARY KEY,
62
+ vector FLOAT[${dimensions}]
63
+ )
64
+ `);
65
+ }
66
+ else {
67
+ // Fallback: store vectors as BLOB
68
+ const vecTableName = this.provider.escapeIdentifier(`${this.tableName}_vec`);
69
+ await this.provider.execute(`
70
+ CREATE TABLE IF NOT EXISTS ${vecTableName} (
71
+ id TEXT PRIMARY KEY,
72
+ vector BLOB NOT NULL
73
+ )
74
+ `);
75
+ }
76
+ this.initialized = true;
77
+ this.logger.info(`SQLite vector adapter initialized with ${dimensions} dimensions ` +
78
+ `(${this.hasVectorSupport ? 'sqlite-vec' : 'BLOB fallback'})`);
79
+ }
80
+ /**
81
+ * Store a vector
82
+ */
83
+ async store(entry) {
84
+ const now = Date.now();
85
+ const metaTableName = this.provider.escapeIdentifier(`${this.tableName}_meta`);
86
+ const vecTableName = this.provider.escapeIdentifier(`${this.tableName}_vec`);
87
+ // Start transaction for consistency
88
+ await this.provider.beginTransaction();
89
+ try {
90
+ // Insert/update metadata
91
+ await this.provider.execute(`INSERT INTO ${metaTableName} (id, entry_id, collection, text_hash, created_at, updated_at)
92
+ VALUES (?, ?, ?, ?, ?, ?)
93
+ ON CONFLICT(id) DO UPDATE SET
94
+ text_hash = excluded.text_hash,
95
+ updated_at = excluded.updated_at`, [entry.id, entry.entryId, entry.collection, entry.textHash, now, now]);
96
+ // Insert/update vector
97
+ if (this.hasVectorSupport) {
98
+ // sqlite-vec format
99
+ const vectorJson = JSON.stringify(entry.vector);
100
+ await this.provider.execute(`INSERT INTO ${vecTableName} (id, vector)
101
+ VALUES (?, vec_f32(?))
102
+ ON CONFLICT(id) DO UPDATE SET vector = vec_f32(excluded.vector)`, [entry.id, vectorJson]);
103
+ }
104
+ else {
105
+ // BLOB fallback
106
+ const vectorBlob = this.vectorToBlob(entry.vector);
107
+ await this.provider.execute(`INSERT INTO ${vecTableName} (id, vector)
108
+ VALUES (?, ?)
109
+ ON CONFLICT(id) DO UPDATE SET vector = excluded.vector`, [entry.id, vectorBlob]);
110
+ }
111
+ await this.provider.commit();
112
+ }
113
+ catch (error) {
114
+ await this.provider.rollback();
115
+ throw error;
116
+ }
117
+ }
118
+ /**
119
+ * Delete by ID
120
+ */
121
+ async delete(id) {
122
+ const metaTableName = this.provider.escapeIdentifier(`${this.tableName}_meta`);
123
+ const vecTableName = this.provider.escapeIdentifier(`${this.tableName}_vec`);
124
+ await this.provider.beginTransaction();
125
+ try {
126
+ await this.provider.execute(`DELETE FROM ${metaTableName} WHERE id = ?`, [id]);
127
+ await this.provider.execute(`DELETE FROM ${vecTableName} WHERE id = ?`, [id]);
128
+ await this.provider.commit();
129
+ return true;
130
+ }
131
+ catch {
132
+ await this.provider.rollback();
133
+ return false;
134
+ }
135
+ }
136
+ /**
137
+ * Delete by entry ID
138
+ */
139
+ async deleteByEntryId(entryId) {
140
+ const metaTableName = this.provider.escapeIdentifier(`${this.tableName}_meta`);
141
+ const vecTableName = this.provider.escapeIdentifier(`${this.tableName}_vec`);
142
+ // Get IDs to delete
143
+ const result = await this.provider.query(`SELECT id FROM ${metaTableName} WHERE entry_id = ?`, [entryId]);
144
+ if (result.rows.length === 0)
145
+ return 0;
146
+ await this.provider.beginTransaction();
147
+ try {
148
+ for (const row of result.rows) {
149
+ await this.provider.execute(`DELETE FROM ${vecTableName} WHERE id = ?`, [row.id]);
150
+ }
151
+ const count = await this.provider.execute(`DELETE FROM ${metaTableName} WHERE entry_id = ?`, [entryId]);
152
+ await this.provider.commit();
153
+ return count;
154
+ }
155
+ catch {
156
+ await this.provider.rollback();
157
+ return 0;
158
+ }
159
+ }
160
+ /**
161
+ * Search for similar vectors
162
+ */
163
+ async search(vector, options = {}) {
164
+ const { limit = 10, collection, minSimilarity = 0 } = options;
165
+ const metaTableName = this.provider.escapeIdentifier(`${this.tableName}_meta`);
166
+ const vecTableName = this.provider.escapeIdentifier(`${this.tableName}_vec`);
167
+ if (this.hasVectorSupport) {
168
+ // Use sqlite-vec for KNN search
169
+ const vectorJson = JSON.stringify(vector);
170
+ let sql = `
171
+ SELECT m.id, m.entry_id, m.collection,
172
+ 1 / (1 + v.distance) as similarity
173
+ FROM ${vecTableName} v
174
+ JOIN ${metaTableName} m ON v.id = m.id
175
+ WHERE v.vector MATCH vec_f32(?)
176
+ AND k = ?
177
+ `;
178
+ const params = [vectorJson, limit * 2]; // Get more for filtering
179
+ if (collection) {
180
+ sql = `
181
+ SELECT m.id, m.entry_id, m.collection,
182
+ 1 / (1 + v.distance) as similarity
183
+ FROM ${vecTableName} v
184
+ JOIN ${metaTableName} m ON v.id = m.id
185
+ WHERE v.vector MATCH vec_f32(?)
186
+ AND m.collection = ?
187
+ ORDER BY v.distance
188
+ LIMIT ?
189
+ `;
190
+ params.length = 0;
191
+ params.push(vectorJson, collection, limit);
192
+ }
193
+ const result = await this.provider.query(sql, params);
194
+ return result.rows
195
+ .filter((r) => r.similarity >= minSimilarity)
196
+ .slice(0, limit)
197
+ .map((row) => ({
198
+ id: row.id,
199
+ entryId: row.entry_id,
200
+ collection: row.collection,
201
+ similarity: row.similarity,
202
+ }));
203
+ }
204
+ else {
205
+ // BLOB fallback - compute in application
206
+ let sql = `
207
+ SELECT m.id, m.entry_id, m.collection, v.vector
208
+ FROM ${metaTableName} m
209
+ JOIN ${vecTableName} v ON m.id = v.id
210
+ `;
211
+ const params = [];
212
+ if (collection) {
213
+ sql += ` WHERE m.collection = ?`;
214
+ params.push(collection);
215
+ }
216
+ const result = await this.provider.query(sql, params);
217
+ // Calculate cosine similarity for each row
218
+ const results = result.rows
219
+ .map((row) => {
220
+ const storedVector = this.blobToVector(row.vector);
221
+ const similarity = this.cosineSimilarity(vector, storedVector);
222
+ return {
223
+ id: row.id,
224
+ entryId: row.entry_id,
225
+ collection: row.collection,
226
+ similarity,
227
+ };
228
+ })
229
+ .filter((r) => r.similarity >= minSimilarity)
230
+ .sort((a, b) => b.similarity - a.similarity)
231
+ .slice(0, limit);
232
+ return results;
233
+ }
234
+ }
235
+ /**
236
+ * Get vector by ID
237
+ */
238
+ async get(id) {
239
+ const metaTableName = this.provider.escapeIdentifier(`${this.tableName}_meta`);
240
+ const vecTableName = this.provider.escapeIdentifier(`${this.tableName}_vec`);
241
+ const result = await this.provider.queryOne(`
242
+ SELECT m.id, m.entry_id, m.collection, m.text_hash, m.created_at, m.updated_at, v.vector
243
+ FROM ${metaTableName} m
244
+ JOIN ${vecTableName} v ON m.id = v.id
245
+ WHERE m.id = ?
246
+ `, [id]);
247
+ return result ? this.rowToEntry(result) : null;
248
+ }
249
+ /**
250
+ * Create index (sqlite-vec handles this automatically)
251
+ */
252
+ async createIndex(_indexType) {
253
+ if (!this.hasVectorSupport) {
254
+ this.logger.warn('Vector indexing not available without sqlite-vec');
255
+ return false;
256
+ }
257
+ // sqlite-vec uses internal indexing
258
+ this.logger.info('sqlite-vec uses automatic indexing');
259
+ return true;
260
+ }
261
+ /**
262
+ * Check if index exists
263
+ */
264
+ async hasIndex() {
265
+ // sqlite-vec has built-in indexing
266
+ return this.hasVectorSupport;
267
+ }
268
+ /**
269
+ * Count vectors
270
+ */
271
+ async count(collection) {
272
+ const metaTableName = this.provider.escapeIdentifier(`${this.tableName}_meta`);
273
+ let sql = `SELECT COUNT(*) as count FROM ${metaTableName}`;
274
+ const params = [];
275
+ if (collection) {
276
+ sql += ` WHERE collection = ?`;
277
+ params.push(collection);
278
+ }
279
+ const result = await this.provider.queryOne(sql, params);
280
+ return result?.count ?? 0;
281
+ }
282
+ /**
283
+ * Convert row to VectorEntry
284
+ */
285
+ rowToEntry(row) {
286
+ let vector;
287
+ if (this.hasVectorSupport) {
288
+ vector = this.storageToVector(row.vector);
289
+ }
290
+ else {
291
+ vector = this.blobToVector(row.vector);
292
+ }
293
+ return {
294
+ id: row.id,
295
+ entryId: row.entry_id,
296
+ collection: row.collection,
297
+ vector,
298
+ textHash: row.text_hash,
299
+ createdAt: row.created_at,
300
+ updatedAt: row.updated_at,
301
+ };
302
+ }
303
+ /**
304
+ * Convert vector to storage format
305
+ */
306
+ vectorToStorage(vector) {
307
+ return JSON.stringify(vector);
308
+ }
309
+ /**
310
+ * Convert storage format to vector
311
+ */
312
+ storageToVector(value) {
313
+ if (typeof value === 'string') {
314
+ return JSON.parse(value);
315
+ }
316
+ if (Array.isArray(value)) {
317
+ return value.map((n) => Number(n));
318
+ }
319
+ if (Buffer.isBuffer(value)) {
320
+ return this.blobToVector(value);
321
+ }
322
+ return [];
323
+ }
324
+ /**
325
+ * Convert vector to BLOB (float32 array)
326
+ */
327
+ vectorToBlob(vector) {
328
+ const buffer = Buffer.alloc(vector.length * 4);
329
+ for (let i = 0; i < vector.length; i++) {
330
+ buffer.writeFloatLE(vector[i], i * 4);
331
+ }
332
+ return buffer;
333
+ }
334
+ /**
335
+ * Convert BLOB to vector
336
+ */
337
+ blobToVector(blob) {
338
+ const floats = [];
339
+ for (let i = 0; i < blob.length; i += 4) {
340
+ floats.push(blob.readFloatLE(i));
341
+ }
342
+ return floats;
343
+ }
344
+ /**
345
+ * Compute cosine similarity between two vectors
346
+ */
347
+ cosineSimilarity(a, b) {
348
+ if (a.length !== b.length)
349
+ return 0;
350
+ let dotProduct = 0;
351
+ let normA = 0;
352
+ let normB = 0;
353
+ for (let i = 0; i < a.length; i++) {
354
+ dotProduct += a[i] * b[i];
355
+ normA += a[i] * a[i];
356
+ normB += b[i] * b[i];
357
+ }
358
+ const magnitude = Math.sqrt(normA) * Math.sqrt(normB);
359
+ return magnitude === 0 ? 0 : dotProduct / magnitude;
360
+ }
361
+ }
362
+ //# sourceMappingURL=sqlite-vec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-vec.js","sourceRoot":"","sources":["../../src/vectors/sqlite-vec.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "lokicms-plugin-sql",
3
+ "version": "1.0.0",
4
+ "description": "Universal SQL adapter for LokiCMS with multi-database support, data federation, and vector search",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "dev": "tsc --watch",
17
+ "clean": "rimraf dist",
18
+ "typecheck": "tsc --noEmit",
19
+ "prepublishOnly": "npm run build"
20
+ },
21
+ "keywords": [
22
+ "lokicms",
23
+ "plugin",
24
+ "sql",
25
+ "postgresql",
26
+ "mysql",
27
+ "mariadb",
28
+ "sqlite",
29
+ "database",
30
+ "federation",
31
+ "vectors",
32
+ "pgvector"
33
+ ],
34
+ "author": "MauricioPerera",
35
+ "license": "MIT",
36
+ "dependencies": {
37
+ "pg": "^8.11.0"
38
+ },
39
+ "optionalDependencies": {
40
+ "mysql2": "^3.6.0",
41
+ "better-sqlite3": "^9.0.0"
42
+ },
43
+ "peerDependencies": {
44
+ "zod": "^3.0.0"
45
+ },
46
+ "devDependencies": {
47
+ "@types/better-sqlite3": "^7.6.0",
48
+ "@types/node": "^20.10.0",
49
+ "@types/pg": "^8.10.0",
50
+ "rimraf": "^5.0.5",
51
+ "typescript": "^5.3.0"
52
+ },
53
+ "engines": {
54
+ "node": ">=18.0.0"
55
+ },
56
+ "files": [
57
+ "dist",
58
+ "README.md"
59
+ ],
60
+ "repository": {
61
+ "type": "git",
62
+ "url": "https://github.com/MauricioPerera/lokicms-plugin-sql.git"
63
+ }
64
+ }