@framers/sql-storage-adapter 0.5.3 → 0.6.1
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/README.md +101 -1
- package/dist/adapters/betterSqliteAdapter.d.ts.map +1 -1
- package/dist/adapters/capacitorSqliteAdapter.d.ts.map +1 -1
- package/dist/adapters/electron/preload.d.ts.map +1 -1
- package/dist/adapters/sqlJsAdapter.d.ts.map +1 -1
- package/dist/codecs/BrowserBlobCodec.d.ts +14 -0
- package/dist/codecs/BrowserBlobCodec.d.ts.map +1 -0
- package/dist/codecs/BrowserBlobCodec.js +30 -0
- package/dist/codecs/BrowserBlobCodec.js.map +1 -0
- package/dist/codecs/NodeBlobCodec.d.ts +14 -0
- package/dist/codecs/NodeBlobCodec.d.ts.map +1 -0
- package/dist/codecs/NodeBlobCodec.js +31 -0
- package/dist/codecs/NodeBlobCodec.js.map +1 -0
- package/dist/core/contracts/blobCodec.d.ts +15 -0
- package/dist/core/contracts/blobCodec.d.ts.map +1 -0
- package/dist/core/contracts/blobCodec.js +2 -0
- package/dist/core/contracts/blobCodec.js.map +1 -0
- package/dist/core/contracts/dialect.d.ts +55 -0
- package/dist/core/contracts/dialect.d.ts.map +1 -0
- package/dist/core/contracts/dialect.js +2 -0
- package/dist/core/contracts/dialect.js.map +1 -0
- package/dist/core/contracts/exporter.d.ts +13 -0
- package/dist/core/contracts/exporter.d.ts.map +1 -0
- package/dist/core/contracts/exporter.js +2 -0
- package/dist/core/contracts/exporter.js.map +1 -0
- package/dist/core/contracts/features.d.ts +25 -0
- package/dist/core/contracts/features.d.ts.map +1 -0
- package/dist/core/contracts/features.js +44 -0
- package/dist/core/contracts/features.js.map +1 -0
- package/dist/core/contracts/fts.d.ts +66 -0
- package/dist/core/contracts/fts.d.ts.map +1 -0
- package/dist/core/contracts/fts.js +2 -0
- package/dist/core/contracts/fts.js.map +1 -0
- package/dist/core/contracts/index.d.ts +6 -0
- package/dist/core/contracts/index.d.ts.map +1 -1
- package/dist/core/contracts/index.js +1 -0
- package/dist/core/contracts/index.js.map +1 -1
- package/dist/core/resolver.d.ts.map +1 -1
- package/dist/dialects/PostgresDialect.d.ts +19 -0
- package/dist/dialects/PostgresDialect.d.ts.map +1 -0
- package/dist/dialects/PostgresDialect.js +45 -0
- package/dist/dialects/PostgresDialect.js.map +1 -0
- package/dist/dialects/SqliteDialect.d.ts +19 -0
- package/dist/dialects/SqliteDialect.d.ts.map +1 -0
- package/dist/dialects/SqliteDialect.js +34 -0
- package/dist/dialects/SqliteDialect.js.map +1 -0
- package/dist/exporters/PostgresExporter.d.ts +14 -0
- package/dist/exporters/PostgresExporter.d.ts.map +1 -0
- package/dist/exporters/PostgresExporter.js +32 -0
- package/dist/exporters/PostgresExporter.js.map +1 -0
- package/dist/exporters/SqliteFileExporter.d.ts +16 -0
- package/dist/exporters/SqliteFileExporter.d.ts.map +1 -0
- package/dist/exporters/SqliteFileExporter.js +26 -0
- package/dist/exporters/SqliteFileExporter.js.map +1 -0
- package/dist/features/sync/conflicts/conflictResolver.d.ts.map +1 -1
- package/dist/features/sync/crossPlatformSync.d.ts.map +1 -1
- package/dist/features/sync/devices/deviceManager.d.ts.map +1 -1
- package/dist/features/sync/transport/httpTransport.d.ts.map +1 -1
- package/dist/features/sync/transport/websocketTransport.d.ts.map +1 -1
- package/dist/fts/PostgresFts.d.ts +29 -0
- package/dist/fts/PostgresFts.d.ts.map +1 -0
- package/dist/fts/PostgresFts.js +62 -0
- package/dist/fts/PostgresFts.js.map +1 -0
- package/dist/fts/SqliteFts5.d.ts +22 -0
- package/dist/fts/SqliteFts5.d.ts.map +1 -0
- package/dist/fts/SqliteFts5.js +44 -0
- package/dist/fts/SqliteFts5.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/shared/parameterUtils.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
The SQL Storage Adapter provides a single, ergonomic interface over SQLite (native and WASM), PostgreSQL, Capacitor, IndexedDB, and in-memory stores. It handles adapter discovery, capability detection, and advanced features like cloud backups so you can focus on your application logic.
|
|
21
21
|
|
|
22
|
-
**🆕 NEW in v0.
|
|
22
|
+
**🆕 NEW in v0.6.0:** SQL Dialect abstractions for SQLite/Postgres parity + Cross-platform BLOB codec + Full-text search interface!
|
|
23
23
|
|
|
24
24
|
---
|
|
25
25
|
|
|
@@ -31,6 +31,7 @@ The SQL Storage Adapter provides a single, ergonomic interface over SQLite (nati
|
|
|
31
31
|
- [Cross-Platform Sync](#cross-platform-sync)
|
|
32
32
|
- [Configuration & Resolution](#configuration--resolution)
|
|
33
33
|
- [Platform Strategy](#platform-strategy)
|
|
34
|
+
- [SQL Dialect & Feature Abstractions](#sql-dialect--feature-abstractions)
|
|
34
35
|
- [CI, Releases, and Badges](#ci-releases-and-badges)
|
|
35
36
|
- [Contributing](#contributing)
|
|
36
37
|
- [License](#license)
|
|
@@ -48,6 +49,10 @@ The SQL Storage Adapter provides a single, ergonomic interface over SQLite (nati
|
|
|
48
49
|
- **Portable packaging** – optional native dependencies; falls back to pure TypeScript/WASM adapters when native modules are unavailable.
|
|
49
50
|
- **Browser-friendly** – Dynamic imports prevent bundlers from including server-only dependencies (`pg`, `path`) in browser builds.
|
|
50
51
|
- **Mobile/Offline Parity** – Same APIs work across desktop, mobile (Capacitor), and browser with automatic sync support.
|
|
52
|
+
- **🆕 SQL Dialect** – Write cross-platform SQL with `SqlDialect` interface. Automatically translates `INSERT OR IGNORE`, `json_extract`, `ifnull`, `PRAGMA` between SQLite and PostgreSQL.
|
|
53
|
+
- **🆕 Full-Text Search** – `IFullTextSearch` interface abstracts FTS5 (SQLite) and tsvector/GIN (PostgreSQL) with unified `createIndex`, `matchClause`, `rankExpression`, and `rebuildCommand` APIs.
|
|
54
|
+
- **🆕 BLOB Codec** – `IBlobCodec` for cross-platform binary vector storage. `NodeBlobCodec` (Buffer) for server, `BrowserBlobCodec` (DataView) for web.
|
|
55
|
+
- **🆕 Database Export** – `IDatabaseExporter` with `SqliteFileExporter` (VACUUM INTO) and `PostgresExporter` (pg_dump).
|
|
51
56
|
- **CI-first design** – Vitest coverage, Codecov integration, and GitHub Actions workflows for linting, testing, releasing, and npm publish/tag automation.
|
|
52
57
|
|
|
53
58
|
## Installation
|
|
@@ -398,6 +403,101 @@ const db = await createDatabase({
|
|
|
398
403
|
|
|
399
404
|
See [**guides/OPTIMIZATION_GUIDE.md**](./guides/OPTIMIZATION_GUIDE.md) for complete configuration options.
|
|
400
405
|
|
|
406
|
+
## SQL Dialect & Feature Abstractions
|
|
407
|
+
|
|
408
|
+
Write cross-platform SQL that works on both SQLite and PostgreSQL without changing your application code.
|
|
409
|
+
|
|
410
|
+
### StorageFeatures Factory
|
|
411
|
+
|
|
412
|
+
```typescript
|
|
413
|
+
import { resolveStorageAdapter, createStorageFeatures } from '@framers/sql-storage-adapter';
|
|
414
|
+
|
|
415
|
+
const adapter = await resolveStorageAdapter({ filePath: './app.db' });
|
|
416
|
+
const features = createStorageFeatures(adapter);
|
|
417
|
+
// features.dialect → SqliteDialect or PostgresDialect
|
|
418
|
+
// features.fts → SqliteFts5 or PostgresFts
|
|
419
|
+
// features.blobCodec → NodeBlobCodec or BrowserBlobCodec
|
|
420
|
+
// features.exporter → SqliteFileExporter or PostgresExporter
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
### SqlDialect — Cross-Platform SQL
|
|
424
|
+
|
|
425
|
+
```typescript
|
|
426
|
+
const { dialect } = features;
|
|
427
|
+
|
|
428
|
+
// INSERT OR IGNORE (SQLite) → ON CONFLICT DO NOTHING (Postgres)
|
|
429
|
+
const sql = dialect.insertOrIgnore('users', ['id', 'name'], ['?', '?']);
|
|
430
|
+
|
|
431
|
+
// INSERT OR REPLACE (SQLite) → ON CONFLICT DO UPDATE (Postgres)
|
|
432
|
+
const upsert = dialect.insertOrReplace('users', ['id', 'name'], ['?', '?'], 'id');
|
|
433
|
+
|
|
434
|
+
// json_extract(col, '$.key') (SQLite) → (col::jsonb)->>'key' (Postgres)
|
|
435
|
+
const expr = dialect.jsonExtract('metadata', '$.theme');
|
|
436
|
+
|
|
437
|
+
// ifnull(expr, fallback) (SQLite) → COALESCE(expr, fallback) (Postgres)
|
|
438
|
+
const safe = dialect.ifnull(dialect.jsonExtract('config', '$.lang'), "'en'");
|
|
439
|
+
|
|
440
|
+
// PRAGMA (SQLite) → null/no-op (Postgres)
|
|
441
|
+
const pragma = dialect.pragma('journal_mode', 'WAL');
|
|
442
|
+
if (pragma) await adapter.exec(pragma);
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
### IFullTextSearch — FTS5 & tsvector
|
|
446
|
+
|
|
447
|
+
```typescript
|
|
448
|
+
const { fts } = features;
|
|
449
|
+
|
|
450
|
+
// Create index: FTS5 virtual table (SQLite) or tsvector + GIN (Postgres)
|
|
451
|
+
await adapter.exec(fts.createIndex({
|
|
452
|
+
table: 'docs_fts',
|
|
453
|
+
columns: ['title', 'body'],
|
|
454
|
+
contentTable: 'documents',
|
|
455
|
+
tokenizer: 'porter ascii',
|
|
456
|
+
}));
|
|
457
|
+
|
|
458
|
+
// Search query
|
|
459
|
+
const sql = `
|
|
460
|
+
SELECT t.*
|
|
461
|
+
FROM ${fts.joinClause('documents', 't', 'fts', 'docs_fts')}
|
|
462
|
+
WHERE ${fts.matchClause('docs_fts', '?')}
|
|
463
|
+
ORDER BY ${fts.rankExpression('fts')}
|
|
464
|
+
`;
|
|
465
|
+
|
|
466
|
+
// Rebuild index
|
|
467
|
+
await adapter.exec(fts.rebuildCommand('docs_fts'));
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
### IBlobCodec — Cross-Platform Binary Encoding
|
|
471
|
+
|
|
472
|
+
```typescript
|
|
473
|
+
const { blobCodec } = features;
|
|
474
|
+
|
|
475
|
+
// Encode a float vector for storage
|
|
476
|
+
const blob = blobCodec.encode([0.1, 0.2, -0.5, 1.0]);
|
|
477
|
+
await adapter.run('INSERT INTO embeddings (vec) VALUES (?)', [blob]);
|
|
478
|
+
|
|
479
|
+
// Decode a stored vector
|
|
480
|
+
const row = await adapter.get<{ vec: Uint8Array }>('SELECT vec FROM embeddings WHERE id = ?', [id]);
|
|
481
|
+
const vector = blobCodec.decode(row!.vec);
|
|
482
|
+
|
|
483
|
+
// Cross-platform SHA-256
|
|
484
|
+
const hash = await blobCodec.sha256('content to hash');
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
### IDatabaseExporter — Portable Backups
|
|
488
|
+
|
|
489
|
+
```typescript
|
|
490
|
+
const { exporter } = features;
|
|
491
|
+
|
|
492
|
+
// Export to file (VACUUM INTO on SQLite, pg_dump on Postgres)
|
|
493
|
+
await exporter.exportToFile('/backups/snapshot.db');
|
|
494
|
+
|
|
495
|
+
// Export to bytes (for browser download or cloud upload)
|
|
496
|
+
const bytes = await exporter.exportToBytes();
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
On Postgres, `features.exporter` requires a Node runtime plus an adapter that was created with a connection string in `adapter.options.connectionString`, since `pg_dump` runs out-of-process.
|
|
500
|
+
|
|
401
501
|
## CI, Releases, and Badges
|
|
402
502
|
|
|
403
503
|
- GitHub Actions workflows:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"betterSqliteAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/betterSqliteAdapter.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAiDjK;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;;;;;;;;;;;GAWG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IAsB5C,OAAO,CAAC,QAAQ,CAAC,eAAe;IArB5C,SAAgB,IAAI,oBAAoB;IACxC,SAAgB,YAAY,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAQzD;IAEH,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,EAAE,CAAqC;IAC/C,OAAO,CAAC,kBAAkB,CAA4C;IAEtE;;;;;OAKG;gBAC0B,eAAe,EAAE,MAAM;IAEpD;;;;OAIG;IACU,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCjD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAOjF,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAOtF,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAOvE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAenE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IASnC;;;;;;;;OAQG;IACU,KAAK,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IA+CtE,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,UAAU;CAKnB;AAED;;GAEG;AACH;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"betterSqliteAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/betterSqliteAdapter.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAiDjK;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;;;;;;;;;;;GAWG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IAsB5C,OAAO,CAAC,QAAQ,CAAC,eAAe;IArB5C,SAAgB,IAAI,oBAAoB;IACxC,SAAgB,YAAY,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAQzD;IAEH,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,EAAE,CAAqC;IAC/C,OAAO,CAAC,kBAAkB,CAA4C;IAEtE;;;;;OAKG;gBAC0B,eAAe,EAAE,MAAM;IAEpD;;;;OAIG;IACU,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCjD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAOjF,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAOtF,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAOvE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAenE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IASnC;;;;;;;;OAQG;IACU,KAAK,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IA+CtE,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,UAAU;CAKnB;AAED;;GAEG;AACH;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,GAAI,UAAU,MAAM,KAAG,cAQ5D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capacitorSqliteAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/capacitorSqliteAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAK3B,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAuCD;;GAEG;AACH,qBAAa,sBAAuB,YAAW,cAAc;IAa/C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAZpC,SAAgB,IAAI,sBAAsB;IAC1C,SAAgB,YAAY,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAKzD;IAEH,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,MAAM,CAAS;gBAEM,OAAO,GAAE,uBAA4B;IAIrD,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BjD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAOjF,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAK5E,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAOvE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAanE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOnC,OAAO,CAAC,gBAAgB;CAMzB;AAED,eAAO,MAAM,4BAA4B,
|
|
1
|
+
{"version":3,"file":"capacitorSqliteAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/capacitorSqliteAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAK3B,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAuCD;;GAEG;AACH,qBAAa,sBAAuB,YAAW,cAAc;IAa/C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAZpC,SAAgB,IAAI,sBAAsB;IAC1C,SAAgB,YAAY,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAKzD;IAEH,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,MAAM,CAAS;gBAEM,OAAO,GAAE,uBAA4B;IAIrD,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BjD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAOjF,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAK5E,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAOvE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAanE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOnC,OAAO,CAAC,gBAAgB;CAMzB;AAED,eAAO,MAAM,4BAA4B,GAAI,UAAU,uBAAuB,KAAG,cAC5C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../../../src/adapters/electron/preload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,OAAO,KAAK,EAOV,kBAAkB,EAElB,UAAU,EACV,aAAa,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AA4C9B;;GAEG;AACH,QAAA,MAAM,aAAa;IAKjB;;OAEG;mBACkB,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvD;;OAEG;aACY,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;cACa,OAAO,CAAC,OAAO,CAAC;IAIhC;;OAEG;uBACsB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAIrD;;OAEG;mBACkB,MAAM,eAAe,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAKvF;;OAEG;QACO,CAAC,uBAAuB,MAAM,eAAe,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAK5F;;OAEG;QACO,CAAC,uBAAuB,MAAM,eAAe,iBAAiB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAKvF;;OAEG;iBACgB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC;;OAEG;sBACqB,cAAc,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAS/D;;OAEG;wBACuB,OAAO,CAAC,kBAAkB,CAAC;IAIrD;;OAEG;qCACoC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D;;OAEG;uCACsC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/D;;OAEG;wCAEc,MAAM,aACV,MAAM,eACJ,iBAAiB,GAC7B,OAAO,CAAC,gBAAgB,GAAG,OAAO,EAAE,CAAC;IAQxC;;;OAGG;gBACe,CAAC,MACb,CAAC,GAAG,EAAE;QACR,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACtF,GAAG,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../../../src/adapters/electron/preload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,OAAO,KAAK,EAOV,kBAAkB,EAElB,UAAU,EACV,aAAa,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AA4C9B;;GAEG;AACH,QAAA,MAAM,aAAa;IAKjB;;OAEG;mBACkB,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvD;;OAEG;aACY,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;cACa,OAAO,CAAC,OAAO,CAAC;IAIhC;;OAEG;uBACsB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAIrD;;OAEG;mBACkB,MAAM,eAAe,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAKvF;;OAEG;QACO,CAAC,uBAAuB,MAAM,eAAe,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAK5F;;OAEG;QACO,CAAC,uBAAuB,MAAM,eAAe,iBAAiB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAKvF;;OAEG;iBACgB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC;;OAEG;sBACqB,cAAc,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAS/D;;OAEG;wBACuB,OAAO,CAAC,kBAAkB,CAAC;IAIrD;;OAEG;qCACoC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D;;OAEG;uCACsC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/D;;OAEG;wCAEc,MAAM,aACV,MAAM,eACJ,iBAAiB,GAC7B,OAAO,CAAC,gBAAgB,GAAG,OAAO,EAAE,CAAC;IAQxC;;;OAGG;gBACe,CAAC,MACb,CAAC,GAAG,EAAE;QACR,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACtF,GAAG,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3F,GAAG,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;KACvF,KAAK,OAAO,CAAC,CAAC,CAAC,GACf,OAAO,CAAC,CAAC,CAAC;IAkCb;;OAEG;qBACoB,OAAO,CAAC,UAAU,CAAC;IAI1C;;OAEG;mBACkB,OAAO,CAAC,IAAI,CAAC;IAQlC;;OAEG;+BACwB,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI;IAQtE;;OAEG;6BACsB,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI;IAQhE;;OAEG;6BACsB,MAAM,IAAI,GAAG,MAAM,IAAI;IAMhD;;OAEG;0BACmB,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,MAAM,IAAI;CAO1D,CAAC;AAMF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC;AAQjD,OAAO,EAAE,aAAa,EAAE,CAAC;AAMzB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,UAAU,EAAE,aAAa,CAAC;KAC3B;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlJsAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/sqlJsAdapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,WAAW,EAA6B,MAAM,QAAQ,CAAC;AAGlF,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGpI,KAAK,mBAAmB,GAAG,WAAW,CAAC;AAqCvC;;GAEG;AACH,qBAAa,YAAa,YAAW,cAAc;IAQrC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAP3C,SAAgB,IAAI,WAAW;IAC/B,SAAgB,YAAY,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAE7D,OAAO,CAAC,GAAG,CAA4B;IACvC,OAAO,CAAC,EAAE,CAA8B;IACxC,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEG,cAAc,GAAE,mBAAwB;IAQxD,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBjD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAsBjF,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAK5E,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAwBvE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAcnE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQnC,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,UAAU;YAMJ,eAAe;CAW9B;AAED,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"sqlJsAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/sqlJsAdapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,WAAW,EAA6B,MAAM,QAAQ,CAAC;AAGlF,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGpI,KAAK,mBAAmB,GAAG,WAAW,CAAC;AAqCvC;;GAEG;AACH,qBAAa,YAAa,YAAW,cAAc;IAQrC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAP3C,SAAgB,IAAI,WAAW;IAC/B,SAAgB,YAAY,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAE7D,OAAO,CAAC,GAAG,CAA4B;IACvC,OAAO,CAAC,EAAE,CAA8B;IACxC,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEG,cAAc,GAAE,mBAAwB;IAQxD,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBjD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAsBjF,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAK5E,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAwBvE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAcnE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQnC,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,UAAU;YAMJ,eAAe;CAW9B;AAED,eAAO,MAAM,kBAAkB,GAAI,UAAU,mBAAmB,KAAG,cAA2C,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { IBlobCodec } from '../core/contracts/blobCodec.js';
|
|
2
|
+
/**
|
|
3
|
+
* Browser-compatible BLOB codec using typed arrays.
|
|
4
|
+
*
|
|
5
|
+
* Encodes number[] vectors as Float32Array binary BLOBs and computes
|
|
6
|
+
* SHA-256 hashes via `crypto.subtle` (with a Node.js fallback for
|
|
7
|
+
* test environments where SubtleCrypto may not be available).
|
|
8
|
+
*/
|
|
9
|
+
export declare class BrowserBlobCodec implements IBlobCodec {
|
|
10
|
+
encode(vec: number[]): Uint8Array;
|
|
11
|
+
decode(blob: Uint8Array | ArrayBufferLike): number[];
|
|
12
|
+
sha256(input: string): Promise<string>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=BrowserBlobCodec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrowserBlobCodec.d.ts","sourceRoot":"","sources":["../../src/codecs/BrowserBlobCodec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAEjE;;;;;;GAMG;AACH,qBAAa,gBAAiB,YAAW,UAAU;IACjD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,UAAU;IAKjC,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,eAAe,GAAG,MAAM,EAAE;IAU9C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAW7C"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-compatible BLOB codec using typed arrays.
|
|
3
|
+
*
|
|
4
|
+
* Encodes number[] vectors as Float32Array binary BLOBs and computes
|
|
5
|
+
* SHA-256 hashes via `crypto.subtle` (with a Node.js fallback for
|
|
6
|
+
* test environments where SubtleCrypto may not be available).
|
|
7
|
+
*/
|
|
8
|
+
export class BrowserBlobCodec {
|
|
9
|
+
encode(vec) {
|
|
10
|
+
const f32 = new Float32Array(vec);
|
|
11
|
+
return new Uint8Array(f32.buffer);
|
|
12
|
+
}
|
|
13
|
+
decode(blob) {
|
|
14
|
+
const bytes = blob instanceof Uint8Array ? blob : new Uint8Array(blob);
|
|
15
|
+
const f32 = new Float32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength / 4);
|
|
16
|
+
return Array.from(f32);
|
|
17
|
+
}
|
|
18
|
+
async sha256(input) {
|
|
19
|
+
if (typeof globalThis.crypto?.subtle?.digest === 'function') {
|
|
20
|
+
const encoded = new TextEncoder().encode(input);
|
|
21
|
+
const hashBuffer = await globalThis.crypto.subtle.digest('SHA-256', encoded);
|
|
22
|
+
const hashArray = new Uint8Array(hashBuffer);
|
|
23
|
+
return Array.from(hashArray).map((b) => b.toString(16).padStart(2, '0')).join('');
|
|
24
|
+
}
|
|
25
|
+
// Fallback for Node.js test environments
|
|
26
|
+
const { createHash } = await import('node:crypto');
|
|
27
|
+
return createHash('sha256').update(input, 'utf8').digest('hex');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=BrowserBlobCodec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrowserBlobCodec.js","sourceRoot":"","sources":["../../src/codecs/BrowserBlobCodec.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,OAAO,gBAAgB;IAC3B,MAAM,CAAC,GAAa;QAClB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,IAAkC;QACvC,MAAM,KAAK,GAAG,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,IAAI,YAAY,CAC1B,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,UAAU,GAAG,CAAC,CACrB,CAAC;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACxB,IAAI,OAAO,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,UAAU,EAAE,CAAC;YAC5D,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC7E,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;YAC7C,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,yCAAyC;QACzC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACnD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { IBlobCodec } from '../core/contracts/blobCodec.js';
|
|
2
|
+
/**
|
|
3
|
+
* Node.js Buffer-based BLOB codec.
|
|
4
|
+
*
|
|
5
|
+
* Encodes number[] vectors as Float32 little-endian binary BLOBs using
|
|
6
|
+
* `Buffer.writeFloatLE` / `Buffer.readFloatLE`, and computes SHA-256
|
|
7
|
+
* hashes using the `node:crypto` module.
|
|
8
|
+
*/
|
|
9
|
+
export declare class NodeBlobCodec implements IBlobCodec {
|
|
10
|
+
encode(vec: number[]): Uint8Array;
|
|
11
|
+
decode(blob: Uint8Array | ArrayBufferLike): number[];
|
|
12
|
+
sha256(input: string): Promise<string>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=NodeBlobCodec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeBlobCodec.d.ts","sourceRoot":"","sources":["../../src/codecs/NodeBlobCodec.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAEjE;;;;;;GAMG;AACH,qBAAa,aAAc,YAAW,UAAU;IAC9C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,UAAU;IAQjC,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,eAAe,GAAG,MAAM,EAAE;IAW9C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAG7C"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
/**
|
|
3
|
+
* Node.js Buffer-based BLOB codec.
|
|
4
|
+
*
|
|
5
|
+
* Encodes number[] vectors as Float32 little-endian binary BLOBs using
|
|
6
|
+
* `Buffer.writeFloatLE` / `Buffer.readFloatLE`, and computes SHA-256
|
|
7
|
+
* hashes using the `node:crypto` module.
|
|
8
|
+
*/
|
|
9
|
+
export class NodeBlobCodec {
|
|
10
|
+
encode(vec) {
|
|
11
|
+
const buf = Buffer.alloc(vec.length * 4);
|
|
12
|
+
for (let i = 0; i < vec.length; i++) {
|
|
13
|
+
buf.writeFloatLE(vec[i], i * 4);
|
|
14
|
+
}
|
|
15
|
+
return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
16
|
+
}
|
|
17
|
+
decode(blob) {
|
|
18
|
+
const bytes = blob instanceof Uint8Array ? blob : new Uint8Array(blob);
|
|
19
|
+
const buf = Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
20
|
+
const count = buf.length / 4;
|
|
21
|
+
const vec = new Array(count);
|
|
22
|
+
for (let i = 0; i < count; i++) {
|
|
23
|
+
vec[i] = buf.readFloatLE(i * 4);
|
|
24
|
+
}
|
|
25
|
+
return vec;
|
|
26
|
+
}
|
|
27
|
+
async sha256(input) {
|
|
28
|
+
return crypto.createHash('sha256').update(input, 'utf8').digest('hex');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=NodeBlobCodec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeBlobCodec.js","sourceRoot":"","sources":["../../src/codecs/NodeBlobCodec.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC;;;;;;GAMG;AACH,MAAM,OAAO,aAAa;IACxB,MAAM,CAAC,GAAa;QAClB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,CAAC,IAAkC;QACvC,MAAM,KAAK,GAAG,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAa,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACxB,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzE,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binary BLOB codec for encoding/decoding vectors and computing hashes.
|
|
3
|
+
*
|
|
4
|
+
* Node.js implementations use Buffer.
|
|
5
|
+
* Browser implementations use Uint8Array + DataView.
|
|
6
|
+
*/
|
|
7
|
+
export interface IBlobCodec {
|
|
8
|
+
/** Encode a number[] vector to a binary BLOB value (Float32 little-endian). */
|
|
9
|
+
encode(vec: number[]): Uint8Array;
|
|
10
|
+
/** Decode a BLOB column value back to number[]. */
|
|
11
|
+
decode(blob: Uint8Array | ArrayBufferLike): number[];
|
|
12
|
+
/** SHA-256 hex digest. Async to support crypto.subtle in browsers. */
|
|
13
|
+
sha256(input: string): Promise<string>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=blobCodec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blobCodec.d.ts","sourceRoot":"","sources":["../../../src/core/contracts/blobCodec.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,+EAA+E;IAC/E,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAElC,mDAAmD;IACnD,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,eAAe,GAAG,MAAM,EAAE,CAAC;IAErD,sEAAsE;IACtE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blobCodec.js","sourceRoot":"","sources":["../../../src/core/contracts/blobCodec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQL dialect abstraction for cross-platform SQL generation.
|
|
3
|
+
*
|
|
4
|
+
* Each method returns a SQL string fragment or full statement.
|
|
5
|
+
* Implementations are pure string transformers — no database calls.
|
|
6
|
+
*/
|
|
7
|
+
export interface SqlDialect {
|
|
8
|
+
/** Dialect identifier. */
|
|
9
|
+
readonly name: 'sqlite' | 'postgres';
|
|
10
|
+
/**
|
|
11
|
+
* Generate an INSERT OR IGNORE statement.
|
|
12
|
+
* SQLite: `INSERT OR IGNORE INTO t (a, b) VALUES (?, ?)`
|
|
13
|
+
* Postgres: `INSERT INTO t (a, b) VALUES ($1, $2) ON CONFLICT DO NOTHING`
|
|
14
|
+
*/
|
|
15
|
+
insertOrIgnore(table: string, columns: string[], placeholders: string[]): string;
|
|
16
|
+
/**
|
|
17
|
+
* Generate an INSERT OR REPLACE (upsert) statement.
|
|
18
|
+
* SQLite: `INSERT OR REPLACE INTO t (a, b) VALUES (?, ?)`
|
|
19
|
+
* Postgres: `INSERT INTO t (a, b) VALUES ($1, $2) ON CONFLICT (pk) DO UPDATE SET ...`
|
|
20
|
+
*
|
|
21
|
+
* @param primaryKey - Required for Postgres ON CONFLICT clause. Defaults to first column.
|
|
22
|
+
*/
|
|
23
|
+
insertOrReplace(table: string, columns: string[], placeholders: string[], primaryKey?: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Generate a JSON field extraction expression.
|
|
26
|
+
* SQLite: `json_extract(col, '$.key')`
|
|
27
|
+
* Postgres: `(col::jsonb)->>'key'`
|
|
28
|
+
*/
|
|
29
|
+
jsonExtract(column: string, jsonPath: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Generate a null-coalesce expression.
|
|
32
|
+
* SQLite: `ifnull(expr, fallback)`
|
|
33
|
+
* Postgres: `COALESCE(expr, fallback)`
|
|
34
|
+
*/
|
|
35
|
+
ifnull(expr: string, fallback: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* Column definition for an auto-incrementing integer primary key.
|
|
38
|
+
* SQLite: `INTEGER PRIMARY KEY AUTOINCREMENT`
|
|
39
|
+
* Postgres: `INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY`
|
|
40
|
+
*/
|
|
41
|
+
autoIncrementPrimaryKey(): string;
|
|
42
|
+
/**
|
|
43
|
+
* Generate a PRAGMA statement or equivalent.
|
|
44
|
+
* SQLite: `PRAGMA key = value`
|
|
45
|
+
* Postgres: returns null (skip — Postgres enforces FKs by default, etc.)
|
|
46
|
+
*/
|
|
47
|
+
pragma(key: string, value: string): string | null;
|
|
48
|
+
/**
|
|
49
|
+
* Parameter placeholder for the given 0-based index.
|
|
50
|
+
* SQLite: `?`
|
|
51
|
+
* Postgres: `$1`, `$2`, etc.
|
|
52
|
+
*/
|
|
53
|
+
placeholder(index: number): string;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=dialect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect.d.ts","sourceRoot":"","sources":["../../../src/core/contracts/dialect.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAErC;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAEjF;;;;;;OAMG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEvG;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAEtD;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAE/C;;;;OAIG;IACH,uBAAuB,IAAI,MAAM,CAAC;IAElC;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAElD;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect.js","sourceRoot":"","sources":["../../../src/core/contracts/dialect.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database export abstraction.
|
|
3
|
+
*
|
|
4
|
+
* SQLite: VACUUM INTO or db.export().
|
|
5
|
+
* Postgres: pg_dump via child_process.
|
|
6
|
+
*/
|
|
7
|
+
export interface IDatabaseExporter {
|
|
8
|
+
/** Export the full database to a file at the given path. */
|
|
9
|
+
exportToFile(outputPath: string): Promise<void>;
|
|
10
|
+
/** Export the full database as raw bytes. */
|
|
11
|
+
exportToBytes(): Promise<Uint8Array>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=exporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../src/core/contracts/exporter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD,6CAA6C;IAC7C,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;CACtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exporter.js","sourceRoot":"","sources":["../../../src/core/contracts/exporter.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { SqlDialect } from './dialect.js';
|
|
2
|
+
import type { IFullTextSearch } from './fts.js';
|
|
3
|
+
import type { IBlobCodec } from './blobCodec.js';
|
|
4
|
+
import type { IDatabaseExporter } from './exporter.js';
|
|
5
|
+
import type { StorageAdapter } from './index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Bundle of platform-aware database features.
|
|
8
|
+
*
|
|
9
|
+
* Created by `createStorageFeatures(adapter)` — consumers use this
|
|
10
|
+
* instead of writing raw platform-specific SQL.
|
|
11
|
+
*/
|
|
12
|
+
export interface StorageFeatures {
|
|
13
|
+
readonly dialect: SqlDialect;
|
|
14
|
+
readonly fts: IFullTextSearch;
|
|
15
|
+
readonly blobCodec: IBlobCodec;
|
|
16
|
+
readonly exporter: IDatabaseExporter;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create a platform-aware feature bundle for the given storage adapter.
|
|
20
|
+
*
|
|
21
|
+
* Inspects `adapter.kind` and the runtime environment to select the right
|
|
22
|
+
* dialect, FTS, BLOB codec, and exporter implementations.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createStorageFeatures(adapter: StorageAdapter): StorageFeatures;
|
|
25
|
+
//# sourceMappingURL=features.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../../src/core/contracts/features.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAmCjD;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;CACtC;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe,CAa9E"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { SqliteDialect } from '../../dialects/SqliteDialect.js';
|
|
2
|
+
import { PostgresDialect } from '../../dialects/PostgresDialect.js';
|
|
3
|
+
import { SqliteFts5 } from '../../fts/SqliteFts5.js';
|
|
4
|
+
import { PostgresFts } from '../../fts/PostgresFts.js';
|
|
5
|
+
import { NodeBlobCodec } from '../../codecs/NodeBlobCodec.js';
|
|
6
|
+
import { BrowserBlobCodec } from '../../codecs/BrowserBlobCodec.js';
|
|
7
|
+
import { SqliteFileExporter } from '../../exporters/SqliteFileExporter.js';
|
|
8
|
+
import { PostgresExporter } from '../../exporters/PostgresExporter.js';
|
|
9
|
+
function extractPostgresConnectionString(adapter) {
|
|
10
|
+
const options = adapter.options;
|
|
11
|
+
if (!options)
|
|
12
|
+
return undefined;
|
|
13
|
+
if (options.connectionString)
|
|
14
|
+
return options.connectionString;
|
|
15
|
+
if (!options.database)
|
|
16
|
+
return undefined;
|
|
17
|
+
const host = options.host ?? 'localhost';
|
|
18
|
+
const port = options.port ?? 5432;
|
|
19
|
+
const user = options.user ? encodeURIComponent(options.user) : '';
|
|
20
|
+
const password = options.password ? `:${encodeURIComponent(options.password)}` : '';
|
|
21
|
+
const auth = user ? `${user}${password}@` : '';
|
|
22
|
+
const sslQuery = options.ssl ? '?sslmode=require' : '';
|
|
23
|
+
return `postgresql://${auth}${host}:${port}/${options.database}${sslQuery}`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create a platform-aware feature bundle for the given storage adapter.
|
|
27
|
+
*
|
|
28
|
+
* Inspects `adapter.kind` and the runtime environment to select the right
|
|
29
|
+
* dialect, FTS, BLOB codec, and exporter implementations.
|
|
30
|
+
*/
|
|
31
|
+
export function createStorageFeatures(adapter) {
|
|
32
|
+
const isPostgres = adapter.kind === 'postgres';
|
|
33
|
+
const isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';
|
|
34
|
+
const postgresConnectionString = isPostgres ? extractPostgresConnectionString(adapter) : undefined;
|
|
35
|
+
return {
|
|
36
|
+
dialect: isPostgres ? new PostgresDialect() : new SqliteDialect(),
|
|
37
|
+
fts: isPostgres ? new PostgresFts() : new SqliteFts5(),
|
|
38
|
+
blobCodec: isBrowser ? new BrowserBlobCodec() : new NodeBlobCodec(),
|
|
39
|
+
exporter: isPostgres
|
|
40
|
+
? new PostgresExporter(postgresConnectionString)
|
|
41
|
+
: new SqliteFileExporter(adapter),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=features.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../../src/core/contracts/features.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAYvE,SAAS,+BAA+B,CAAC,OAAuB;IAC9D,MAAM,OAAO,GAAI,OAAqE,CAAC,OAAO,CAAC;IAC/F,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,IAAI,OAAO,CAAC,gBAAgB;QAAE,OAAO,OAAO,CAAC,gBAAgB,CAAC;IAC9D,IAAI,CAAC,OAAO,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAExC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;IACzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,OAAO,gBAAgB,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,QAAQ,GAAG,QAAQ,EAAE,CAAC;AAC9E,CAAC;AAeD;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAuB;IAC3D,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC;IAC/C,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC;IAC1F,MAAM,wBAAwB,GAAG,UAAU,CAAC,CAAC,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnG,OAAO;QACL,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI,aAAa,EAAE;QACjE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE;QACtD,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,aAAa,EAAE;QACnE,QAAQ,EAAE,UAAU;YAClB,CAAC,CAAC,IAAI,gBAAgB,CAAC,wBAAwB,CAAC;YAChD,CAAC,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC;KACpC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Full-text search abstraction.
|
|
3
|
+
*
|
|
4
|
+
* SQLite implementations use FTS5 virtual tables.
|
|
5
|
+
* Postgres implementations use tsvector columns with GIN indexes.
|
|
6
|
+
* Methods return SQL strings — no database calls.
|
|
7
|
+
*/
|
|
8
|
+
export interface IFullTextSearch {
|
|
9
|
+
/**
|
|
10
|
+
* Generate DDL to create the full-text search index.
|
|
11
|
+
*
|
|
12
|
+
* @param config.table - Name for the FTS index/virtual table.
|
|
13
|
+
* @param config.columns - Columns to index.
|
|
14
|
+
* @param config.contentTable - Source table (for external-content FTS5).
|
|
15
|
+
* @param config.tokenizer - Tokenizer config (e.g. 'porter ascii').
|
|
16
|
+
*/
|
|
17
|
+
createIndex(config: {
|
|
18
|
+
table: string;
|
|
19
|
+
columns: string[];
|
|
20
|
+
contentTable?: string;
|
|
21
|
+
tokenizer?: string;
|
|
22
|
+
}): string;
|
|
23
|
+
/**
|
|
24
|
+
* Generate a WHERE clause fragment for full-text matching.
|
|
25
|
+
* SQLite: `memory_traces_fts MATCH ?`
|
|
26
|
+
* Postgres: `memory_traces._tsv @@ plainto_tsquery('english', $1)`
|
|
27
|
+
*/
|
|
28
|
+
matchClause(indexName: string, queryPlaceholder: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Generate an ORDER BY rank expression.
|
|
31
|
+
* SQLite: `memory_traces_fts.rank`
|
|
32
|
+
* Postgres: `ts_rank(memory_traces._tsv, plainto_tsquery('english', $1))`
|
|
33
|
+
*/
|
|
34
|
+
rankExpression(indexName: string, queryPlaceholder?: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Generate the rebuild/reindex command.
|
|
37
|
+
* SQLite: `INSERT INTO fts_table(fts_table) VALUES('rebuild')`
|
|
38
|
+
* Postgres: `UPDATE content_table SET _tsv = to_tsvector('english', col1 || ' ' || col2)`
|
|
39
|
+
*/
|
|
40
|
+
rebuildCommand(indexName: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* Generate an INSERT to sync external-content FTS after a row insert.
|
|
43
|
+
* SQLite: `INSERT INTO fts_table (rowid, col1, col2) VALUES (expr, ?, ?)`
|
|
44
|
+
* Postgres: `UPDATE content_table SET _tsv = to_tsvector(...) WHERE ...`
|
|
45
|
+
*/
|
|
46
|
+
syncInsert(indexName: string, rowIdExpr: string, columns: string[]): string;
|
|
47
|
+
/**
|
|
48
|
+
* Sanitize natural-language input into a safe search query.
|
|
49
|
+
* SQLite: wraps words in quotes, strips FTS5 operators.
|
|
50
|
+
* Postgres: pass-through (plainto_tsquery handles it).
|
|
51
|
+
*/
|
|
52
|
+
sanitizeQuery(input: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Generate a SELECT joining the FTS index to the content table.
|
|
55
|
+
* This handles the structural difference between FTS5 (separate virtual table
|
|
56
|
+
* joined via rowid) and Postgres (tsvector column on the content table itself).
|
|
57
|
+
*
|
|
58
|
+
* @param contentTable - The base table (e.g. 'memory_traces').
|
|
59
|
+
* @param contentAlias - Alias for the content table (e.g. 't').
|
|
60
|
+
* @param ftsAlias - Alias for the FTS table/column (e.g. 'fts').
|
|
61
|
+
* @param indexName - FTS index/virtual table name.
|
|
62
|
+
* @returns FROM/JOIN clause fragment.
|
|
63
|
+
*/
|
|
64
|
+
joinClause(contentTable: string, contentAlias: string, ftsAlias: string, indexName: string): string;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=fts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fts.d.ts","sourceRoot":"","sources":["../../../src/core/contracts/fts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;;OAOG;IACH,WAAW,CAAC,MAAM,EAAE;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,MAAM,CAAC;IAEX;;;;OAIG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAAC;IAEjE;;;;OAIG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAErE;;;;OAIG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAE1C;;;;OAIG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAE5E;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAErC;;;;;;;;;;OAUG;IACH,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;CACrG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fts.js","sourceRoot":"","sources":["../../../src/core/contracts/fts.ts"],"names":[],"mappings":""}
|
|
@@ -242,4 +242,10 @@ export * from './performance';
|
|
|
242
242
|
* Designed for RAG integration, analytics, and auditing.
|
|
243
243
|
*/
|
|
244
244
|
export * from './hooks';
|
|
245
|
+
export type { SqlDialect } from './dialect.js';
|
|
246
|
+
export type { IFullTextSearch } from './fts.js';
|
|
247
|
+
export type { IBlobCodec } from './blobCodec.js';
|
|
248
|
+
export type { IDatabaseExporter } from './exporter.js';
|
|
249
|
+
export type { StorageFeatures } from './features.js';
|
|
250
|
+
export { createStorageFeatures } from './features.js';
|
|
245
251
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/contracts/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/contracts/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/contracts/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA6PH;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAe,EAAW,SAAoB,EAAE;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAC;QADqB,WAAM,GAAN,MAAM,CAAgB;QAE1D,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,+EAA+E;AAC/E,wCAAwC;AACxC,+EAA+E;AAE/E;;;GAGG;AACH,cAAc,eAAe,CAAC;AAE9B;;;GAGG;AACH,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/contracts/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA6PH;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAe,EAAW,SAAoB,EAAE;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAC;QADqB,WAAM,GAAN,MAAM,CAAgB;QAE1D,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,+EAA+E;AAC/E,wCAAwC;AACxC,+EAA+E;AAE/E;;;GAGG;AACH,cAAc,eAAe,CAAC;AAE9B;;;GAGG;AACH,cAAc,SAAS,CAAC;AAQxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/core/resolver.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,cAAc,EAAyB,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAgC,KAAK,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAEhH,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAG9F,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,wBAAwB;IACvC,iGAAiG;IACjG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,8CAA8C;IAC9C,QAAQ,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,qEAAqE;IACrE,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,yCAAyC;IACzC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,iFAAiF;IACjF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAyCD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/core/resolver.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,cAAc,EAAyB,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAgC,KAAK,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAEhH,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAG9F,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,wBAAwB;IACvC,iGAAiG;IACjG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,8CAA8C;IAC9C,QAAQ,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,qEAAqE;IACrE,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,yCAAyC;IACzC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,iFAAiF;IACjF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAyCD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAU,UAAS,wBAA6B,KAAG,OAAO,CAAC,cAAc,CAuH1G,CAAC"}
|