@nicia-ai/typegraph 0.48.0 → 0.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/backend/postgres/index.cjs +3 -3
- package/dist/backend/postgres/index.js +2 -2
- package/dist/backend/postgres/pglite-store.cjs +4 -4
- package/dist/backend/postgres/pglite-store.d.cts +2 -2
- package/dist/backend/postgres/pglite-store.d.ts +2 -2
- package/dist/backend/postgres/pglite-store.js +3 -3
- package/dist/backend/postgres/pglite.cjs +4 -4
- package/dist/backend/postgres/pglite.js +3 -3
- package/dist/backend/sqlite/index.cjs +3 -3
- package/dist/backend/sqlite/index.js +2 -2
- package/dist/backend/sqlite/libsql.cjs +4 -4
- package/dist/backend/sqlite/libsql.js +2 -2
- package/dist/backend/sqlite/local-store.cjs +5 -5
- package/dist/backend/sqlite/local-store.d.cts +2 -2
- package/dist/backend/sqlite/local-store.d.ts +2 -2
- package/dist/backend/sqlite/local-store.js +4 -4
- package/dist/backend/sqlite/local.cjs +5 -5
- package/dist/backend/sqlite/local.js +3 -3
- package/dist/{chunk-TKZXMWQF.cjs → chunk-2O4PCIZ6.cjs} +4 -4
- package/dist/{chunk-TKZXMWQF.cjs.map → chunk-2O4PCIZ6.cjs.map} +1 -1
- package/dist/{chunk-OTUPEF2W.cjs → chunk-3G5W2U2L.cjs} +30 -4
- package/dist/chunk-3G5W2U2L.cjs.map +1 -0
- package/dist/{chunk-WCCATHMB.cjs → chunk-3QNZ5SAJ.cjs} +3 -3
- package/dist/chunk-3QNZ5SAJ.cjs.map +1 -0
- package/dist/{chunk-OD4SSY2U.js → chunk-7LZJNLA5.js} +3 -3
- package/dist/{chunk-OD4SSY2U.js.map → chunk-7LZJNLA5.js.map} +1 -1
- package/dist/{chunk-7XUYFFR4.cjs → chunk-7UOLHNWC.cjs} +5 -5
- package/dist/{chunk-7XUYFFR4.cjs.map → chunk-7UOLHNWC.cjs.map} +1 -1
- package/dist/{chunk-2SYZXD54.js → chunk-D4QLTJSM.js} +3 -3
- package/dist/{chunk-2SYZXD54.js.map → chunk-D4QLTJSM.js.map} +1 -1
- package/dist/{chunk-CT3ZKTOF.js → chunk-JPD2CTC3.js} +3 -3
- package/dist/{chunk-CT3ZKTOF.js.map → chunk-JPD2CTC3.js.map} +1 -1
- package/dist/{chunk-AX6JGVTZ.js → chunk-LTXQOEIC.js} +30 -5
- package/dist/chunk-LTXQOEIC.js.map +1 -0
- package/dist/{chunk-PFBRJBUL.cjs → chunk-UGHQV7MP.cjs} +55 -55
- package/dist/{chunk-PFBRJBUL.cjs.map → chunk-UGHQV7MP.cjs.map} +1 -1
- package/dist/{chunk-4WMMBDS5.js → chunk-WIC7DRXW.js} +3 -3
- package/dist/{chunk-4WMMBDS5.js.map → chunk-WIC7DRXW.js.map} +1 -1
- package/dist/{chunk-2HIYYMWY.cjs → chunk-YYUHLYM2.cjs} +54 -54
- package/dist/{chunk-2HIYYMWY.cjs.map → chunk-YYUHLYM2.cjs.map} +1 -1
- package/dist/{chunk-ACGSAMD3.js → chunk-Z2JCLZFJ.js} +3 -3
- package/dist/chunk-Z2JCLZFJ.js.map +1 -0
- package/dist/graph-merge/index.cjs +28 -5
- package/dist/graph-merge/index.cjs.map +1 -1
- package/dist/graph-merge/index.d.cts +7 -4
- package/dist/graph-merge/index.d.ts +7 -4
- package/dist/graph-merge/index.js +24 -1
- package/dist/graph-merge/index.js.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js.map +1 -1
- package/dist/ingestion-import-target-XPxZYw89.d.cts +17 -0
- package/dist/ingestion-import-target-dNeL7iAv.d.ts +17 -0
- package/dist/interchange/index.cjs +25 -25
- package/dist/interchange/index.d.cts +9 -6
- package/dist/interchange/index.d.ts +9 -6
- package/dist/interchange/index.js +2 -2
- package/dist/profiler/index.d.cts +1 -1
- package/dist/profiler/index.d.ts +1 -1
- package/dist/provenance/index.d.cts +1 -1
- package/dist/provenance/index.d.ts +1 -1
- package/dist/{store-UzrGvZOo.d.ts → store-DRrFCx5x.d.ts} +9 -1
- package/dist/{store-JUVvtmR4.d.cts → store-bphCSo7z.d.cts} +9 -1
- package/package.json +2 -3
- package/dist/chunk-ACGSAMD3.js.map +0 -1
- package/dist/chunk-AX6JGVTZ.js.map +0 -1
- package/dist/chunk-OTUPEF2W.cjs.map +0 -1
- package/dist/chunk-WCCATHMB.cjs.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createSqliteBackend } from './chunk-
|
|
1
|
+
import { createSqliteBackend } from './chunk-D4QLTJSM.js';
|
|
2
2
|
import { sqliteVecStrategy } from './chunk-7SQSZN2J.js';
|
|
3
3
|
import { tables2, generateSqliteDDL } from './chunk-6SWPJEYN.js';
|
|
4
4
|
import { wrapWithManagedClose } from './chunk-UGHG7PGX.js';
|
|
@@ -179,5 +179,5 @@ function tryLoadSqliteVec(sqlite) {
|
|
|
179
179
|
}
|
|
180
180
|
|
|
181
181
|
export { DEFAULT_LOCAL_SQLITE_PRAGMAS, createLocalSqliteBackend };
|
|
182
|
-
//# sourceMappingURL=chunk-
|
|
183
|
-
//# sourceMappingURL=chunk-
|
|
182
|
+
//# sourceMappingURL=chunk-WIC7DRXW.js.map
|
|
183
|
+
//# sourceMappingURL=chunk-WIC7DRXW.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/backend/sqlite/local-options.ts","../src/backend/sqlite/local.ts"],"names":["tables"],"mappings":";;;;;;;;;;AA8BO,IAAM,4BAAA,GACX;AAAA,EACE,WAAA,EAAa,KAAA;AAAA,EACb,WAAA,EAAa,QAAA;AAAA,EACb,aAAA,EAAe,GAAA;AAAA,EACf,YAAA,EAAc,MAAA;AAAA,EACd,aAAA,EAAe,MAAA;AAAA,EACf,sBAAA,EAAwB;AAC1B;;;AC0BF,IAAM,WAAA,GAAc,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AAWjD,SAAS,uBAAuB,KAAA,EAAwB;AACtD,EAAA,IAAI,KAAA,YAAiB,KAAA,EAAO,OAAO,KAAA,CAAM,OAAA;AACzC,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,sCACP,OAAA,EACuC;AACvC,EAAA,MAAM,MAAA,GACJ,kFAAA;AACF,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACjC,EAAA,IAAI,CAAC,KAAA,EAAO,MAAA,EAAQ,OAAO,MAAA;AAE3B,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,UAAU,CAAC,CAAA;AAChD,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,UAAU,CAAC,CAAA;AAEhD,EAAA,IAAI,CAAC,OAAO,QAAA,CAAS,QAAQ,KAAK,CAAC,MAAA,CAAO,SAAS,QAAQ,CAAA;AACzD,IAAA,OAAO,MAAA;AAET,EAAA,OAAO,EAAE,UAAU,QAAA,EAAS;AAC9B;AAEA,SAAS,eAAe,IAAA,EAAiC;AACvD,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,SAAS,IAAI,CAAA;AAAA,EAC1B,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,OAAA,GAAU,uBAAuB,KAAK,CAAA;AAC5C,IAAA,MAAM,QAAA,GAAW,sCAAsC,OAAO,CAAA;AAC9D,IAAA,IAAI,CAAC,UAAU,MAAM,KAAA;AAErB,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR;AAAA,QACE,6CAAA;AAAA,QACA,CAAA,wCAAA,EAA2C,QAAA,CAAS,QAAQ,CAAA,oCAAA,EAAuC,SAAS,QAAQ,CAAA,CAAA,CAAA;AAAA,QACpH,4FAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG,CAAA;AAAA,MACV;AAAA,QACE,aAAa,OAAA,CAAQ,OAAA;AAAA,QACrB,iBAAA,EAAmB,QAAQ,QAAA,CAAS,OAAA;AAAA,QACpC,2BAA2B,QAAA,CAAS,QAAA;AAAA,QACpC,2BAA2B,QAAA,CAAS;AAAA,OACtC;AAAA,MACA,EAAE,OAAO,KAAA;AAAM,KACjB;AAAA,EACF;AACF;AAMA,IAAM,0BAAA,GAAgE;AAAA,EACpE,KAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,8BAAA,GAAwE;AAAA,EAC5E,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,mCAAA,GAAsC,UAAA;AAE5C,SAAS,sBAAA,CACP,QACA,OAAA,EACM;AACN,EAAA,IAAI,YAAY,KAAA,EAAO;AACvB,EAAA,MAAM,QAAA,GAA+C;AAAA,IACnD,GAAG,4BAAA;AAAA,IACH,GAAG;AAAA,GACL;AAKA,EAAA,IAAI,CAAC,0BAAA,CAA2B,QAAA,CAAS,QAAA,CAAS,WAAW,CAAA,EAAG;AAC9D,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,+BAA+B,QAAA,CAAS,WAAW,sBAC7B,0BAAA,CAA2B,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,MAC3D,EAAE,WAAA,EAAa,QAAA,CAAS,WAAA;AAAY,KACtC;AAAA,EACF;AACA,EAAA,IAAI,CAAC,8BAAA,CAA+B,QAAA,CAAS,QAAA,CAAS,WAAW,CAAA,EAAG;AAClE,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,+BAA+B,QAAA,CAAS,WAAW,sBAC7B,8BAAA,CAA+B,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,MAC/D,EAAE,WAAA,EAAa,QAAA,CAAS,WAAA;AAAY,KACtC;AAAA,EACF;AACA,EAAA,IACE,CAAC,OAAO,aAAA,CAAc,QAAA,CAAS,aAAa,CAAA,IAC5C,QAAA,CAAS,gBAAgB,CAAA,EACzB;AACA,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,8BAAA,EAAiC,MAAA,CAAO,QAAA,CAAS,aAAa,CAAC,CAAA,yDAAA,CAAA;AAAA,MAE/D,EAAE,aAAA,EAAe,QAAA,CAAS,aAAA;AAAc,KAC1C;AAAA,EACF;AACA,EAAA,IACE,QAAA,CAAS,YAAA,KAAiB,MAAA,KACzB,CAAC,MAAA,CAAO,aAAA,CAAc,QAAA,CAAS,YAAY,CAAA,IAAK,QAAA,CAAS,YAAA,IAAgB,CAAA,CAAA,EAC1E;AACA,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,6BAAA,EAAgC,MAAA,CAAO,QAAA,CAAS,YAAY,CAAC,CAAA,kQAAA,CAAA;AAAA,MAK7D,EAAE,YAAA,EAAc,QAAA,CAAS,YAAA;AAAa,KACxC;AAAA,EACF;AACA,EAAA,IACE,QAAA,CAAS,aAAA,KAAkB,MAAA,KAC1B,CAAC,MAAA,CAAO,aAAA,CAAc,QAAA,CAAS,aAAa,CAAA,IAC3C,QAAA,CAAS,aAAA,GAAgB,CAAA,CAAA,EAC3B;AACA,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,8BAAA,EAAiC,MAAA,CAAO,QAAA,CAAS,aAAa,CAAC,CAAA,uDAAA,CAAA;AAAA,MAE/D,EAAE,aAAA,EAAe,QAAA,CAAS,aAAA;AAAc,KAC1C;AAAA,EACF;AACA,EAAA,IACE,QAAA,CAAS,sBAAA,KAA2B,MAAA,KACnC,CAAC,OAAO,aAAA,CAAc,QAAA,CAAS,sBAAsB,CAAA,IACpD,QAAA,CAAS,sBAAA,GAAyB,CAAA,IAClC,QAAA,CAAS,yBAAyB,mCAAA,CAAA,EACpC;AACA,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,0CAA0C,MAAA,CAAO,QAAA,CAAS,sBAAsB,CAAC,uCAC1C,mCAAmC,CAAA,yDAAA,CAAA;AAAA,MAE1E,EAAE,sBAAA,EAAwB,QAAA,CAAS,sBAAA;AAAuB,KAC5D;AAAA,EACF;AAIA,EAAA,MAAA,CAAO,MAAA,CAAO,CAAA,eAAA,EAAkB,QAAA,CAAS,WAAW,CAAA,CAAE,CAAA;AACtD,EAAA,MAAA,CAAO,MAAA,CAAO,CAAA,cAAA,EAAiB,QAAA,CAAS,WAAW,CAAA,CAAE,CAAA;AACrD,EAAA,MAAA,CAAO,MAAA,CAAO,CAAA,eAAA,EAAkB,QAAA,CAAS,aAAa,CAAA,CAAE,CAAA;AACxD,EAAA,IAAI,QAAA,CAAS,iBAAiB,MAAA,EAAW;AACvC,IAAA,MAAA,CAAO,MAAA,CAAO,CAAA,aAAA,EAAgB,QAAA,CAAS,YAAY,CAAA,CAAE,CAAA;AAAA,EACvD;AACA,EAAA,IAAI,QAAA,CAAS,kBAAkB,MAAA,EAAW;AACxC,IAAA,MAAA,CAAO,MAAA,CAAO,CAAA,YAAA,EAAe,QAAA,CAAS,aAAa,CAAA,CAAE,CAAA;AAAA,EACvD;AACA,EAAA,IAAI,QAAA,CAAS,2BAA2B,MAAA,EAAW;AACjD,IAAA,MAAA,CAAO,MAAA,CAAO,CAAA,qBAAA,EAAwB,QAAA,CAAS,sBAAsB,CAAA,CAAE,CAAA;AAAA,EACzE;AACF;AAuFO,SAAS,wBAAA,CACd,OAAA,GAAqC,EAAC,EACZ;AAC1B,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,IAAQ,UAAA;AAC7B,EAAA,MAAMA,SAAAA,GAAS,QAAQ,MAAA,IAAUA,OAAA;AAEjC,EAAA,MAAM,MAAA,GAAS,eAAe,IAAI,CAAA;AAClC,EAAA,IAAI;AACF,IAAA,sBAAA,CAAuB,MAAA,EAAQ,QAAQ,OAAO,CAAA;AAO9C,IAAA,MAAM,YAAA,GAAe,iBAAiB,MAAM,CAAA;AAE5C,IAAA,MAAM,EAAA,GAAK,QAAQ,MAAM,CAAA;AAGzB,IAAA,MAAM,aAAA,GAAgB,kBAAkBA,SAAM,CAAA;AAC9C,IAAA,KAAA,MAAW,aAAa,aAAA,EAAe;AACrC,MAAA,MAAA,CAAO,KAAK,SAAS,CAAA;AAAA,IACvB;AAEA,IAAA,MAAM,OAAA,GAAU,oBAAoB,EAAA,EAAI;AAAA,MACtC,gBAAA,EAAkB;AAAA,QAChB,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,MAAA,EAAAA,SAAAA;AAAA,MACA,GAAI,YAAA,GAAe,EAAE,MAAA,EAAQ,iBAAA,KAAsB,EAAC;AAAA,MACpD,YAAA,EAAc;AAAA,QACZ,GAAG,OAAA,CAAQ,YAAA;AAAA,QACX,cAAA,EAAgB;AAAA,UACd,WACE,OAAA,CAAQ,YAAA,EAAc,gBAAgB,SAAA,IACtC,OAAA,CAAQ,cAAc,YAAA,KAAiB,KAAA;AAAA,UACzC,aAAA,EACE,OAAA,CAAQ,YAAA,EAAc,cAAA,EAAgB,aAAA,IAAiB;AAAA;AAC3D;AACF,KACD,CAAA;AACD,IAAA,MAAM,cAAA,GAAiB,oBAAA,CAAqB,OAAA,EAAS,MAAM;AACzD,MAAA,MAAA,CAAO,KAAA,EAAM;AAAA,IACf,CAAC,CAAA;AAED,IAAA,OAAO,EAAE,OAAA,EAAS,cAAA,EAAgB,EAAA,EAAG;AAAA,EACvC,SAAS,KAAA,EAAO;AACd,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,KAAA,EAAM;AAAA,IACf,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAEA,SAAS,iBAAiB,MAAA,EAAoC;AAC5D,EAAA,IAAI;AAIF,IAAA,MAAM,OAAA,GAAmB,YAAY,YAAY,CAAA;AACjD,IAAA,IACE,OAAO,OAAA,KAAY,QAAA,IACnB,OAAA,KAAY,IAAA,IACZ,UAAU,OAAA,IACV,OAAO,OAAA,CAAQ,IAAA,KAAS,UAAA,EACxB;AACA,MAAC,OAAA,CAAsD,KAAK,MAAM,CAAA;AAClE,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF","file":"chunk-4WMMBDS5.js","sourcesContent":["/** Journal modes accepted by local SQLite connections. */\nexport type LocalSqliteJournalMode =\n \"wal\" | \"delete\" | \"truncate\" | \"persist\" | \"memory\" | \"off\";\n\n/** Synchronous levels accepted by local SQLite connections. */\nexport type LocalSqliteSynchronousMode = \"off\" | \"normal\" | \"full\" | \"extra\";\n\n/** Connection pragmas applied when TypeGraph opens a local SQLite database. */\nexport type LocalSqlitePragmaOptions = Readonly<{\n /** `PRAGMA journal_mode`. Default: `\"wal\"` (no-op on `\":memory:\"`). */\n journalMode?: LocalSqliteJournalMode;\n /** `PRAGMA synchronous`. Default: `\"normal\"`. */\n synchronous?: LocalSqliteSynchronousMode;\n /** `PRAGMA busy_timeout`, in milliseconds. Default: `5000`. */\n busyTimeoutMs?: number;\n /**\n * `PRAGMA cache_size`, expressed as a negative KiB value. Positive values\n * mean pages in SQLite and are rejected to prevent accidental oversizing.\n */\n cacheSizeKib?: number | undefined;\n /** `PRAGMA mmap_size`, in non-negative bytes. */\n mmapSizeBytes?: number | undefined;\n /**\n * `PRAGMA wal_autocheckpoint`, in WAL pages. Use `0` to disable automatic\n * checkpoints and run them explicitly after controlled bulk loads.\n */\n walAutocheckpointPages?: number | undefined;\n}>;\n\n/** Defaults for TypeGraph-owned local SQLite connections. */\nexport const DEFAULT_LOCAL_SQLITE_PRAGMAS: Required<LocalSqlitePragmaOptions> =\n {\n journalMode: \"wal\",\n synchronous: \"normal\",\n busyTimeoutMs: 5000,\n cacheSizeKib: undefined,\n mmapSizeBytes: undefined,\n walAutocheckpointPages: undefined,\n };\n","/**\n * Local SQLite backend using better-sqlite3.\n *\n * This module depends on the `better-sqlite3` native addon and should only\n * be imported in Node.js environments. For bundler-friendly SQLite DDL\n * generation and Drizzle backend creation, import from `@nicia-ai/typegraph/adapters/drizzle/sqlite`.\n *\n * @example In-memory database (default)\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/adapters/drizzle/sqlite/local\";\n *\n * const { backend, db } = createLocalSqliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example File-based database for persistent local development\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/adapters/drizzle/sqlite/local\";\n *\n * const { backend, db } = createLocalSqliteBackend({ path: \"./dev.db\" });\n * const store = createStore(graph, backend);\n * ```\n */\nimport { createRequire } from \"node:module\";\n\nimport Database from \"better-sqlite3\";\nimport {\n type BetterSQLite3Database,\n drizzle,\n} from \"drizzle-orm/better-sqlite3\";\n\nimport { ConfigurationError } from \"../../errors\";\nimport { sqliteVecStrategy } from \"../../query/dialect/vector/sqlite-vec-strategy\";\nimport { wrapWithManagedClose } from \"../derive-backend\";\nimport { generateSqliteDDL } from \"../drizzle/ddl\";\nimport { type AnySqliteDatabase } from \"../drizzle/execution\";\nexport type { AnySqliteDatabase } from \"../drizzle/execution\";\nimport {\n createSqliteBackend,\n type SqliteTables,\n tables as defaultTables,\n} from \"../drizzle/sqlite\";\nimport {\n DEFAULT_LOCAL_SQLITE_PRAGMAS,\n type LocalSqliteJournalMode,\n type LocalSqlitePragmaOptions,\n type LocalSqliteSynchronousMode,\n} from \"./local-options\";\n\nexport {\n DEFAULT_LOCAL_SQLITE_PRAGMAS,\n type LocalSqliteJournalMode,\n type LocalSqlitePragmaOptions,\n type LocalSqliteSynchronousMode,\n} from \"./local-options\";\nimport { type AdapterBackend, type BackendCapabilities } from \"../types\";\n\nexport type {\n ContributionDiagnostic,\n ContributionDiagnosticState,\n ContributionRepairEntry,\n ContributionRepairResult,\n} from \"../types\";\n\nconst nodeRequire = createRequire(import.meta.url);\n\n// ============================================================\n// Native Addon Helpers\n// ============================================================\n\ntype NodeModuleVersionMismatch = Readonly<{\n compiled: number;\n required: number;\n}>;\n\nfunction getUnknownErrorMessage(error: unknown): string {\n if (error instanceof Error) return error.message;\n return String(error);\n}\n\nfunction parseNodeModuleVersionMismatchMessage(\n message: string,\n): NodeModuleVersionMismatch | undefined {\n const regexp =\n /NODE_MODULE_VERSION (?<compiled>\\d+)[\\s\\S]*?NODE_MODULE_VERSION (?<required>\\d+)/;\n const match = regexp.exec(message);\n if (!match?.groups) return undefined;\n\n const compiled = Number(match.groups[\"compiled\"]);\n const required = Number(match.groups[\"required\"]);\n\n if (!Number.isFinite(compiled) || !Number.isFinite(required))\n return undefined;\n\n return { compiled, required };\n}\n\nfunction createDatabase(path: string): Database.Database {\n try {\n return new Database(path);\n } catch (error) {\n const message = getUnknownErrorMessage(error);\n const mismatch = parseNodeModuleVersionMismatchMessage(message);\n if (!mismatch) throw error;\n\n throw new ConfigurationError(\n [\n \"Failed to load better-sqlite3 native addon.\",\n `It was compiled for NODE_MODULE_VERSION ${mismatch.compiled}, but this Node.js runtime requires ${mismatch.required}.`,\n \"This usually happens after switching Node versions without rebuilding native dependencies.\",\n \"Rebuild with: pnpm rebuild better-sqlite3 (or npm rebuild better-sqlite3).\",\n ].join(\" \"),\n {\n nodeVersion: process.version,\n nodeModuleVersion: process.versions.modules,\n compiledNodeModuleVersion: mismatch.compiled,\n requiredNodeModuleVersion: mismatch.required,\n },\n { cause: error },\n );\n }\n}\n\n// ============================================================\n// Types\n// ============================================================\n\nconst LOCAL_SQLITE_JOURNAL_MODES: readonly LocalSqliteJournalMode[] = [\n \"wal\",\n \"delete\",\n \"truncate\",\n \"persist\",\n \"memory\",\n \"off\",\n];\n\nconst LOCAL_SQLITE_SYNCHRONOUS_MODES: readonly LocalSqliteSynchronousMode[] = [\n \"off\",\n \"normal\",\n \"full\",\n \"extra\",\n];\n\nconst SQLITE_MAX_WAL_AUTOCHECKPOINT_PAGES = 2_147_483_647;\n\nfunction applyConnectionPragmas(\n sqlite: Database.Database,\n pragmas: LocalSqlitePragmaOptions | false | undefined,\n): void {\n if (pragmas === false) return;\n const resolved: Required<LocalSqlitePragmaOptions> = {\n ...DEFAULT_LOCAL_SQLITE_PRAGMAS,\n ...pragmas,\n };\n\n // Runtime guards mirror the compile-time unions: pragma values are spliced\n // into pragma statements, so reject anything outside the allowlists rather\n // than forwarding it to SQLite.\n if (!LOCAL_SQLITE_JOURNAL_MODES.includes(resolved.journalMode)) {\n throw new ConfigurationError(\n `Invalid journalMode pragma: ${resolved.journalMode}. ` +\n `Expected one of: ${LOCAL_SQLITE_JOURNAL_MODES.join(\", \")}.`,\n { journalMode: resolved.journalMode },\n );\n }\n if (!LOCAL_SQLITE_SYNCHRONOUS_MODES.includes(resolved.synchronous)) {\n throw new ConfigurationError(\n `Invalid synchronous pragma: ${resolved.synchronous}. ` +\n `Expected one of: ${LOCAL_SQLITE_SYNCHRONOUS_MODES.join(\", \")}.`,\n { synchronous: resolved.synchronous },\n );\n }\n if (\n !Number.isSafeInteger(resolved.busyTimeoutMs) ||\n resolved.busyTimeoutMs < 0\n ) {\n throw new ConfigurationError(\n `Invalid busyTimeoutMs pragma: ${String(resolved.busyTimeoutMs)}. ` +\n \"Expected a non-negative integer number of milliseconds.\",\n { busyTimeoutMs: resolved.busyTimeoutMs },\n );\n }\n if (\n resolved.cacheSizeKib !== undefined &&\n (!Number.isSafeInteger(resolved.cacheSizeKib) || resolved.cacheSizeKib >= 0)\n ) {\n throw new ConfigurationError(\n `Invalid cacheSizeKib pragma: ${String(resolved.cacheSizeKib)}. ` +\n \"Expected a negative safe integer — SQLite's own cache_size pragma \" +\n \"interprets a positive value as a page count, not KiB, so a caller \" +\n 'who passes e.g. 131072 meaning \"131072 KiB\" silently gets ' +\n \"131072 pages (~512MiB at the default 4KiB page size) instead.\",\n { cacheSizeKib: resolved.cacheSizeKib },\n );\n }\n if (\n resolved.mmapSizeBytes !== undefined &&\n (!Number.isSafeInteger(resolved.mmapSizeBytes) ||\n resolved.mmapSizeBytes < 0)\n ) {\n throw new ConfigurationError(\n `Invalid mmapSizeBytes pragma: ${String(resolved.mmapSizeBytes)}. ` +\n \"Expected a non-negative safe integer number of bytes.\",\n { mmapSizeBytes: resolved.mmapSizeBytes },\n );\n }\n if (\n resolved.walAutocheckpointPages !== undefined &&\n (!Number.isSafeInteger(resolved.walAutocheckpointPages) ||\n resolved.walAutocheckpointPages < 0 ||\n resolved.walAutocheckpointPages > SQLITE_MAX_WAL_AUTOCHECKPOINT_PAGES)\n ) {\n throw new ConfigurationError(\n `Invalid walAutocheckpointPages pragma: ${String(resolved.walAutocheckpointPages)}. ` +\n `Expected an integer between 0 and ${SQLITE_MAX_WAL_AUTOCHECKPOINT_PAGES} ` +\n \"WAL pages (0 disables automatic checkpointing entirely).\",\n { walAutocheckpointPages: resolved.walAutocheckpointPages },\n );\n }\n\n // \":memory:\" databases always journal in memory; SQLite answers the WAL\n // request with \"memory\" instead of erroring, so no special-casing needed.\n sqlite.pragma(`journal_mode = ${resolved.journalMode}`);\n sqlite.pragma(`synchronous = ${resolved.synchronous}`);\n sqlite.pragma(`busy_timeout = ${resolved.busyTimeoutMs}`);\n if (resolved.cacheSizeKib !== undefined) {\n sqlite.pragma(`cache_size = ${resolved.cacheSizeKib}`);\n }\n if (resolved.mmapSizeBytes !== undefined) {\n sqlite.pragma(`mmap_size = ${resolved.mmapSizeBytes}`);\n }\n if (resolved.walAutocheckpointPages !== undefined) {\n sqlite.pragma(`wal_autocheckpoint = ${resolved.walAutocheckpointPages}`);\n }\n}\n\n/**\n * Options for creating a local SQLite backend.\n */\nexport type LocalSqliteBackendOptions = Readonly<{\n /**\n * Path to the SQLite database file.\n * Defaults to \":memory:\" for an in-memory database.\n */\n path?: string;\n\n /**\n * Connection pragmas applied at open. Defaults to\n * {@link DEFAULT_LOCAL_SQLITE_PRAGMAS} (WAL, `synchronous=NORMAL`, 5s busy\n * timeout, and SQLite's own tiny built-in page cache / disabled mmap\n * left untouched). Individual values merge over the defaults; pass\n * `false` to skip pragma configuration entirely and keep the driver\n * defaults (rollback journal, `synchronous=FULL`, and better-sqlite3's\n * own 5s busy timeout from its `timeout` constructor option). Set\n * `cacheSizeKib`/`mmapSizeBytes` explicitly once a database's working\n * set is known to exceed SQLite's 2MiB default cache — otherwise every\n * query pays a fresh disk read per page past that tiny working set. Set\n * `walAutocheckpointPages` explicitly for a bulk-insert-heavy workload —\n * SQLite's own default checkpoints every ~4MiB of WAL growth, which gets\n * more expensive as the database file grows over a large load.\n */\n pragmas?: LocalSqlitePragmaOptions | false;\n\n /**\n * Custom table definitions.\n * Defaults to standard TypeGraph table names.\n */\n tables?: SqliteTables;\n\n /**\n * Override specific backend capabilities — e.g. to simulate an engine-level\n * gap like missing SQL window functions in tests. Forwarded to\n * createSqliteBackend.\n */\n capabilities?: Partial<BackendCapabilities>;\n}>;\n\n/**\n * Result of creating a local SQLite backend.\n */\nexport type LocalSqliteBackendResult = Readonly<{\n /**\n * The GraphBackend instance for use with createStore.\n */\n backend: AdapterBackend<AnySqliteDatabase>;\n\n /**\n * The underlying Drizzle database instance.\n * Useful for direct SQL access or cleanup.\n */\n db: BetterSQLite3Database;\n}>;\n\n// ============================================================\n// Factory Function\n// ============================================================\n\n/**\n * Creates a SQLite backend with minimal configuration.\n *\n * This is a convenience function for local development and testing.\n * It handles database creation, schema migration, and backend setup.\n *\n * For production deployments or custom configurations, use createSqliteBackend\n * directly with your own Drizzle database instance.\n *\n * @param options - Configuration options\n * @returns Backend and database instances\n *\n * @example In-memory database (default)\n * ```typescript\n * const { backend } = createLocalSqliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example File-based database\n * ```typescript\n * const { backend, db } = createLocalSqliteBackend({ path: \"./data.db\" });\n * const store = createStore(graph, backend);\n * ```\n */\nexport function createLocalSqliteBackend(\n options: LocalSqliteBackendOptions = {},\n): LocalSqliteBackendResult {\n const path = options.path ?? \":memory:\";\n const tables = options.tables ?? defaultTables;\n\n const sqlite = createDatabase(path);\n try {\n applyConnectionPragmas(sqlite, options.pragmas);\n\n // Best-effort: load sqlite-vec so embedding fields are persisted to\n // per-`(kind, field)` `vec0` storage. Without it, nodes with\n // `embedding()` fields validate and insert but their vectors are silently\n // dropped. When the user has installed sqlite-vec as a peer dep we load\n // it and wire the strategy; otherwise we proceed without vector support.\n const hasSqliteVec = tryLoadSqliteVec(sqlite);\n\n const db = drizzle(sqlite);\n\n // Generate and execute DDL from schema\n const ddlStatements = generateSqliteDDL(tables);\n for (const statement of ddlStatements) {\n sqlite.exec(statement);\n }\n\n const backend = createSqliteBackend(db, {\n executionProfile: {\n isSync: true,\n },\n tables,\n ...(hasSqliteVec ? { vector: sqliteVecStrategy } : {}),\n capabilities: {\n ...options.capabilities,\n graphAnalytics: {\n supported:\n options.capabilities?.graphAnalytics?.supported ??\n options.capabilities?.transactions !== false,\n mathFunctions:\n options.capabilities?.graphAnalytics?.mathFunctions ?? true,\n },\n },\n });\n const managedBackend = wrapWithManagedClose(backend, () => {\n sqlite.close();\n });\n\n return { backend: managedBackend, db };\n } catch (error) {\n try {\n sqlite.close();\n } catch {\n // Preserve the provisioning error; a cleanup failure is secondary.\n }\n throw error;\n }\n}\n\nfunction tryLoadSqliteVec(sqlite: Database.Database): boolean {\n try {\n // `sqlite-vec` is an optional peer dep; resolved via createRequire so\n // bundlers don't mark it as a hard import. Node resolves the package\n // only when it's actually installed.\n const module_: unknown = nodeRequire(\"sqlite-vec\");\n if (\n typeof module_ === \"object\" &&\n module_ !== null &&\n \"load\" in module_ &&\n typeof module_.load === \"function\"\n ) {\n (module_ as { load: (db: Database.Database) => void }).load(sqlite);\n return true;\n }\n return false;\n } catch {\n return false;\n }\n}\nexport type { GraphIdentityConfig } from \"../../core/define-graph\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/backend/sqlite/local-options.ts","../src/backend/sqlite/local.ts"],"names":["tables"],"mappings":";;;;;;;;;;AA8BO,IAAM,4BAAA,GACX;AAAA,EACE,WAAA,EAAa,KAAA;AAAA,EACb,WAAA,EAAa,QAAA;AAAA,EACb,aAAA,EAAe,GAAA;AAAA,EACf,YAAA,EAAc,MAAA;AAAA,EACd,aAAA,EAAe,MAAA;AAAA,EACf,sBAAA,EAAwB;AAC1B;;;AC0BF,IAAM,WAAA,GAAc,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AAWjD,SAAS,uBAAuB,KAAA,EAAwB;AACtD,EAAA,IAAI,KAAA,YAAiB,KAAA,EAAO,OAAO,KAAA,CAAM,OAAA;AACzC,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,sCACP,OAAA,EACuC;AACvC,EAAA,MAAM,MAAA,GACJ,kFAAA;AACF,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACjC,EAAA,IAAI,CAAC,KAAA,EAAO,MAAA,EAAQ,OAAO,MAAA;AAE3B,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,UAAU,CAAC,CAAA;AAChD,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,UAAU,CAAC,CAAA;AAEhD,EAAA,IAAI,CAAC,OAAO,QAAA,CAAS,QAAQ,KAAK,CAAC,MAAA,CAAO,SAAS,QAAQ,CAAA;AACzD,IAAA,OAAO,MAAA;AAET,EAAA,OAAO,EAAE,UAAU,QAAA,EAAS;AAC9B;AAEA,SAAS,eAAe,IAAA,EAAiC;AACvD,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,SAAS,IAAI,CAAA;AAAA,EAC1B,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,OAAA,GAAU,uBAAuB,KAAK,CAAA;AAC5C,IAAA,MAAM,QAAA,GAAW,sCAAsC,OAAO,CAAA;AAC9D,IAAA,IAAI,CAAC,UAAU,MAAM,KAAA;AAErB,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR;AAAA,QACE,6CAAA;AAAA,QACA,CAAA,wCAAA,EAA2C,QAAA,CAAS,QAAQ,CAAA,oCAAA,EAAuC,SAAS,QAAQ,CAAA,CAAA,CAAA;AAAA,QACpH,4FAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG,CAAA;AAAA,MACV;AAAA,QACE,aAAa,OAAA,CAAQ,OAAA;AAAA,QACrB,iBAAA,EAAmB,QAAQ,QAAA,CAAS,OAAA;AAAA,QACpC,2BAA2B,QAAA,CAAS,QAAA;AAAA,QACpC,2BAA2B,QAAA,CAAS;AAAA,OACtC;AAAA,MACA,EAAE,OAAO,KAAA;AAAM,KACjB;AAAA,EACF;AACF;AAMA,IAAM,0BAAA,GAAgE;AAAA,EACpE,KAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,8BAAA,GAAwE;AAAA,EAC5E,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,mCAAA,GAAsC,UAAA;AAE5C,SAAS,sBAAA,CACP,QACA,OAAA,EACM;AACN,EAAA,IAAI,YAAY,KAAA,EAAO;AACvB,EAAA,MAAM,QAAA,GAA+C;AAAA,IACnD,GAAG,4BAAA;AAAA,IACH,GAAG;AAAA,GACL;AAKA,EAAA,IAAI,CAAC,0BAAA,CAA2B,QAAA,CAAS,QAAA,CAAS,WAAW,CAAA,EAAG;AAC9D,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,+BAA+B,QAAA,CAAS,WAAW,sBAC7B,0BAAA,CAA2B,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,MAC3D,EAAE,WAAA,EAAa,QAAA,CAAS,WAAA;AAAY,KACtC;AAAA,EACF;AACA,EAAA,IAAI,CAAC,8BAAA,CAA+B,QAAA,CAAS,QAAA,CAAS,WAAW,CAAA,EAAG;AAClE,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,+BAA+B,QAAA,CAAS,WAAW,sBAC7B,8BAAA,CAA+B,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,MAC/D,EAAE,WAAA,EAAa,QAAA,CAAS,WAAA;AAAY,KACtC;AAAA,EACF;AACA,EAAA,IACE,CAAC,OAAO,aAAA,CAAc,QAAA,CAAS,aAAa,CAAA,IAC5C,QAAA,CAAS,gBAAgB,CAAA,EACzB;AACA,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,8BAAA,EAAiC,MAAA,CAAO,QAAA,CAAS,aAAa,CAAC,CAAA,yDAAA,CAAA;AAAA,MAE/D,EAAE,aAAA,EAAe,QAAA,CAAS,aAAA;AAAc,KAC1C;AAAA,EACF;AACA,EAAA,IACE,QAAA,CAAS,YAAA,KAAiB,MAAA,KACzB,CAAC,MAAA,CAAO,aAAA,CAAc,QAAA,CAAS,YAAY,CAAA,IAAK,QAAA,CAAS,YAAA,IAAgB,CAAA,CAAA,EAC1E;AACA,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,6BAAA,EAAgC,MAAA,CAAO,QAAA,CAAS,YAAY,CAAC,CAAA,kQAAA,CAAA;AAAA,MAK7D,EAAE,YAAA,EAAc,QAAA,CAAS,YAAA;AAAa,KACxC;AAAA,EACF;AACA,EAAA,IACE,QAAA,CAAS,aAAA,KAAkB,MAAA,KAC1B,CAAC,MAAA,CAAO,aAAA,CAAc,QAAA,CAAS,aAAa,CAAA,IAC3C,QAAA,CAAS,aAAA,GAAgB,CAAA,CAAA,EAC3B;AACA,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,8BAAA,EAAiC,MAAA,CAAO,QAAA,CAAS,aAAa,CAAC,CAAA,uDAAA,CAAA;AAAA,MAE/D,EAAE,aAAA,EAAe,QAAA,CAAS,aAAA;AAAc,KAC1C;AAAA,EACF;AACA,EAAA,IACE,QAAA,CAAS,sBAAA,KAA2B,MAAA,KACnC,CAAC,OAAO,aAAA,CAAc,QAAA,CAAS,sBAAsB,CAAA,IACpD,QAAA,CAAS,sBAAA,GAAyB,CAAA,IAClC,QAAA,CAAS,yBAAyB,mCAAA,CAAA,EACpC;AACA,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,0CAA0C,MAAA,CAAO,QAAA,CAAS,sBAAsB,CAAC,uCAC1C,mCAAmC,CAAA,yDAAA,CAAA;AAAA,MAE1E,EAAE,sBAAA,EAAwB,QAAA,CAAS,sBAAA;AAAuB,KAC5D;AAAA,EACF;AAIA,EAAA,MAAA,CAAO,MAAA,CAAO,CAAA,eAAA,EAAkB,QAAA,CAAS,WAAW,CAAA,CAAE,CAAA;AACtD,EAAA,MAAA,CAAO,MAAA,CAAO,CAAA,cAAA,EAAiB,QAAA,CAAS,WAAW,CAAA,CAAE,CAAA;AACrD,EAAA,MAAA,CAAO,MAAA,CAAO,CAAA,eAAA,EAAkB,QAAA,CAAS,aAAa,CAAA,CAAE,CAAA;AACxD,EAAA,IAAI,QAAA,CAAS,iBAAiB,MAAA,EAAW;AACvC,IAAA,MAAA,CAAO,MAAA,CAAO,CAAA,aAAA,EAAgB,QAAA,CAAS,YAAY,CAAA,CAAE,CAAA;AAAA,EACvD;AACA,EAAA,IAAI,QAAA,CAAS,kBAAkB,MAAA,EAAW;AACxC,IAAA,MAAA,CAAO,MAAA,CAAO,CAAA,YAAA,EAAe,QAAA,CAAS,aAAa,CAAA,CAAE,CAAA;AAAA,EACvD;AACA,EAAA,IAAI,QAAA,CAAS,2BAA2B,MAAA,EAAW;AACjD,IAAA,MAAA,CAAO,MAAA,CAAO,CAAA,qBAAA,EAAwB,QAAA,CAAS,sBAAsB,CAAA,CAAE,CAAA;AAAA,EACzE;AACF;AAuFO,SAAS,wBAAA,CACd,OAAA,GAAqC,EAAC,EACZ;AAC1B,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,IAAQ,UAAA;AAC7B,EAAA,MAAMA,SAAAA,GAAS,QAAQ,MAAA,IAAUA,OAAA;AAEjC,EAAA,MAAM,MAAA,GAAS,eAAe,IAAI,CAAA;AAClC,EAAA,IAAI;AACF,IAAA,sBAAA,CAAuB,MAAA,EAAQ,QAAQ,OAAO,CAAA;AAO9C,IAAA,MAAM,YAAA,GAAe,iBAAiB,MAAM,CAAA;AAE5C,IAAA,MAAM,EAAA,GAAK,QAAQ,MAAM,CAAA;AAGzB,IAAA,MAAM,aAAA,GAAgB,kBAAkBA,SAAM,CAAA;AAC9C,IAAA,KAAA,MAAW,aAAa,aAAA,EAAe;AACrC,MAAA,MAAA,CAAO,KAAK,SAAS,CAAA;AAAA,IACvB;AAEA,IAAA,MAAM,OAAA,GAAU,oBAAoB,EAAA,EAAI;AAAA,MACtC,gBAAA,EAAkB;AAAA,QAChB,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,MAAA,EAAAA,SAAAA;AAAA,MACA,GAAI,YAAA,GAAe,EAAE,MAAA,EAAQ,iBAAA,KAAsB,EAAC;AAAA,MACpD,YAAA,EAAc;AAAA,QACZ,GAAG,OAAA,CAAQ,YAAA;AAAA,QACX,cAAA,EAAgB;AAAA,UACd,WACE,OAAA,CAAQ,YAAA,EAAc,gBAAgB,SAAA,IACtC,OAAA,CAAQ,cAAc,YAAA,KAAiB,KAAA;AAAA,UACzC,aAAA,EACE,OAAA,CAAQ,YAAA,EAAc,cAAA,EAAgB,aAAA,IAAiB;AAAA;AAC3D;AACF,KACD,CAAA;AACD,IAAA,MAAM,cAAA,GAAiB,oBAAA,CAAqB,OAAA,EAAS,MAAM;AACzD,MAAA,MAAA,CAAO,KAAA,EAAM;AAAA,IACf,CAAC,CAAA;AAED,IAAA,OAAO,EAAE,OAAA,EAAS,cAAA,EAAgB,EAAA,EAAG;AAAA,EACvC,SAAS,KAAA,EAAO;AACd,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,KAAA,EAAM;AAAA,IACf,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAEA,SAAS,iBAAiB,MAAA,EAAoC;AAC5D,EAAA,IAAI;AAIF,IAAA,MAAM,OAAA,GAAmB,YAAY,YAAY,CAAA;AACjD,IAAA,IACE,OAAO,OAAA,KAAY,QAAA,IACnB,OAAA,KAAY,IAAA,IACZ,UAAU,OAAA,IACV,OAAO,OAAA,CAAQ,IAAA,KAAS,UAAA,EACxB;AACA,MAAC,OAAA,CAAsD,KAAK,MAAM,CAAA;AAClE,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF","file":"chunk-WIC7DRXW.js","sourcesContent":["/** Journal modes accepted by local SQLite connections. */\nexport type LocalSqliteJournalMode =\n \"wal\" | \"delete\" | \"truncate\" | \"persist\" | \"memory\" | \"off\";\n\n/** Synchronous levels accepted by local SQLite connections. */\nexport type LocalSqliteSynchronousMode = \"off\" | \"normal\" | \"full\" | \"extra\";\n\n/** Connection pragmas applied when TypeGraph opens a local SQLite database. */\nexport type LocalSqlitePragmaOptions = Readonly<{\n /** `PRAGMA journal_mode`. Default: `\"wal\"` (no-op on `\":memory:\"`). */\n journalMode?: LocalSqliteJournalMode;\n /** `PRAGMA synchronous`. Default: `\"normal\"`. */\n synchronous?: LocalSqliteSynchronousMode;\n /** `PRAGMA busy_timeout`, in milliseconds. Default: `5000`. */\n busyTimeoutMs?: number;\n /**\n * `PRAGMA cache_size`, expressed as a negative KiB value. Positive values\n * mean pages in SQLite and are rejected to prevent accidental oversizing.\n */\n cacheSizeKib?: number | undefined;\n /** `PRAGMA mmap_size`, in non-negative bytes. */\n mmapSizeBytes?: number | undefined;\n /**\n * `PRAGMA wal_autocheckpoint`, in WAL pages. Use `0` to disable automatic\n * checkpoints and run them explicitly after controlled bulk loads.\n */\n walAutocheckpointPages?: number | undefined;\n}>;\n\n/** Defaults for TypeGraph-owned local SQLite connections. */\nexport const DEFAULT_LOCAL_SQLITE_PRAGMAS: Required<LocalSqlitePragmaOptions> =\n {\n journalMode: \"wal\",\n synchronous: \"normal\",\n busyTimeoutMs: 5000,\n cacheSizeKib: undefined,\n mmapSizeBytes: undefined,\n walAutocheckpointPages: undefined,\n };\n","/**\n * Local SQLite backend using better-sqlite3.\n *\n * This module depends on the `better-sqlite3` native addon and should only\n * be imported in Node.js environments. For bundler-friendly SQLite DDL\n * generation and Drizzle backend creation, import from `@nicia-ai/typegraph/adapters/drizzle/sqlite`.\n *\n * @example In-memory database (default)\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/adapters/drizzle/sqlite/local\";\n *\n * const { backend, db } = createLocalSqliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example File-based database for persistent local development\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/adapters/drizzle/sqlite/local\";\n *\n * const { backend, db } = createLocalSqliteBackend({ path: \"./dev.db\" });\n * const store = createStore(graph, backend);\n * ```\n */\nimport { createRequire } from \"node:module\";\n\nimport Database from \"better-sqlite3\";\nimport {\n type BetterSQLite3Database,\n drizzle,\n} from \"drizzle-orm/better-sqlite3\";\n\nimport { ConfigurationError } from \"../../errors\";\nimport { sqliteVecStrategy } from \"../../query/dialect/vector/sqlite-vec-strategy\";\nimport { wrapWithManagedClose } from \"../derive-backend\";\nimport { generateSqliteDDL } from \"../drizzle/ddl\";\nimport { type AnySqliteDatabase } from \"../drizzle/execution\";\nexport type { AnySqliteDatabase } from \"../drizzle/execution\";\nimport {\n createSqliteBackend,\n type SqliteTables,\n tables as defaultTables,\n} from \"../drizzle/sqlite\";\nimport {\n DEFAULT_LOCAL_SQLITE_PRAGMAS,\n type LocalSqliteJournalMode,\n type LocalSqlitePragmaOptions,\n type LocalSqliteSynchronousMode,\n} from \"./local-options\";\n\nexport {\n DEFAULT_LOCAL_SQLITE_PRAGMAS,\n type LocalSqliteJournalMode,\n type LocalSqlitePragmaOptions,\n type LocalSqliteSynchronousMode,\n} from \"./local-options\";\nimport { type AdapterBackend, type BackendCapabilities } from \"../types\";\n\nexport type {\n ContributionDiagnostic,\n ContributionDiagnosticState,\n ContributionRepairEntry,\n ContributionRepairResult,\n} from \"../types\";\n\nconst nodeRequire = createRequire(import.meta.url);\n\n// ============================================================\n// Native Addon Helpers\n// ============================================================\n\ntype NodeModuleVersionMismatch = Readonly<{\n compiled: number;\n required: number;\n}>;\n\nfunction getUnknownErrorMessage(error: unknown): string {\n if (error instanceof Error) return error.message;\n return String(error);\n}\n\nfunction parseNodeModuleVersionMismatchMessage(\n message: string,\n): NodeModuleVersionMismatch | undefined {\n const regexp =\n /NODE_MODULE_VERSION (?<compiled>\\d+)[\\s\\S]*?NODE_MODULE_VERSION (?<required>\\d+)/;\n const match = regexp.exec(message);\n if (!match?.groups) return undefined;\n\n const compiled = Number(match.groups[\"compiled\"]);\n const required = Number(match.groups[\"required\"]);\n\n if (!Number.isFinite(compiled) || !Number.isFinite(required))\n return undefined;\n\n return { compiled, required };\n}\n\nfunction createDatabase(path: string): Database.Database {\n try {\n return new Database(path);\n } catch (error) {\n const message = getUnknownErrorMessage(error);\n const mismatch = parseNodeModuleVersionMismatchMessage(message);\n if (!mismatch) throw error;\n\n throw new ConfigurationError(\n [\n \"Failed to load better-sqlite3 native addon.\",\n `It was compiled for NODE_MODULE_VERSION ${mismatch.compiled}, but this Node.js runtime requires ${mismatch.required}.`,\n \"This usually happens after switching Node versions without rebuilding native dependencies.\",\n \"Rebuild with: pnpm rebuild better-sqlite3 (or npm rebuild better-sqlite3).\",\n ].join(\" \"),\n {\n nodeVersion: process.version,\n nodeModuleVersion: process.versions.modules,\n compiledNodeModuleVersion: mismatch.compiled,\n requiredNodeModuleVersion: mismatch.required,\n },\n { cause: error },\n );\n }\n}\n\n// ============================================================\n// Types\n// ============================================================\n\nconst LOCAL_SQLITE_JOURNAL_MODES: readonly LocalSqliteJournalMode[] = [\n \"wal\",\n \"delete\",\n \"truncate\",\n \"persist\",\n \"memory\",\n \"off\",\n];\n\nconst LOCAL_SQLITE_SYNCHRONOUS_MODES: readonly LocalSqliteSynchronousMode[] = [\n \"off\",\n \"normal\",\n \"full\",\n \"extra\",\n];\n\nconst SQLITE_MAX_WAL_AUTOCHECKPOINT_PAGES = 2_147_483_647;\n\nfunction applyConnectionPragmas(\n sqlite: Database.Database,\n pragmas: LocalSqlitePragmaOptions | false | undefined,\n): void {\n if (pragmas === false) return;\n const resolved: Required<LocalSqlitePragmaOptions> = {\n ...DEFAULT_LOCAL_SQLITE_PRAGMAS,\n ...pragmas,\n };\n\n // Runtime guards mirror the compile-time unions: pragma values are spliced\n // into pragma statements, so reject anything outside the allowlists rather\n // than forwarding it to SQLite.\n if (!LOCAL_SQLITE_JOURNAL_MODES.includes(resolved.journalMode)) {\n throw new ConfigurationError(\n `Invalid journalMode pragma: ${resolved.journalMode}. ` +\n `Expected one of: ${LOCAL_SQLITE_JOURNAL_MODES.join(\", \")}.`,\n { journalMode: resolved.journalMode },\n );\n }\n if (!LOCAL_SQLITE_SYNCHRONOUS_MODES.includes(resolved.synchronous)) {\n throw new ConfigurationError(\n `Invalid synchronous pragma: ${resolved.synchronous}. ` +\n `Expected one of: ${LOCAL_SQLITE_SYNCHRONOUS_MODES.join(\", \")}.`,\n { synchronous: resolved.synchronous },\n );\n }\n if (\n !Number.isSafeInteger(resolved.busyTimeoutMs) ||\n resolved.busyTimeoutMs < 0\n ) {\n throw new ConfigurationError(\n `Invalid busyTimeoutMs pragma: ${String(resolved.busyTimeoutMs)}. ` +\n \"Expected a non-negative integer number of milliseconds.\",\n { busyTimeoutMs: resolved.busyTimeoutMs },\n );\n }\n if (\n resolved.cacheSizeKib !== undefined &&\n (!Number.isSafeInteger(resolved.cacheSizeKib) || resolved.cacheSizeKib >= 0)\n ) {\n throw new ConfigurationError(\n `Invalid cacheSizeKib pragma: ${String(resolved.cacheSizeKib)}. ` +\n \"Expected a negative safe integer — SQLite's own cache_size pragma \" +\n \"interprets a positive value as a page count, not KiB, so a caller \" +\n 'who passes e.g. 131072 meaning \"131072 KiB\" silently gets ' +\n \"131072 pages (~512MiB at the default 4KiB page size) instead.\",\n { cacheSizeKib: resolved.cacheSizeKib },\n );\n }\n if (\n resolved.mmapSizeBytes !== undefined &&\n (!Number.isSafeInteger(resolved.mmapSizeBytes) ||\n resolved.mmapSizeBytes < 0)\n ) {\n throw new ConfigurationError(\n `Invalid mmapSizeBytes pragma: ${String(resolved.mmapSizeBytes)}. ` +\n \"Expected a non-negative safe integer number of bytes.\",\n { mmapSizeBytes: resolved.mmapSizeBytes },\n );\n }\n if (\n resolved.walAutocheckpointPages !== undefined &&\n (!Number.isSafeInteger(resolved.walAutocheckpointPages) ||\n resolved.walAutocheckpointPages < 0 ||\n resolved.walAutocheckpointPages > SQLITE_MAX_WAL_AUTOCHECKPOINT_PAGES)\n ) {\n throw new ConfigurationError(\n `Invalid walAutocheckpointPages pragma: ${String(resolved.walAutocheckpointPages)}. ` +\n `Expected an integer between 0 and ${SQLITE_MAX_WAL_AUTOCHECKPOINT_PAGES} ` +\n \"WAL pages (0 disables automatic checkpointing entirely).\",\n { walAutocheckpointPages: resolved.walAutocheckpointPages },\n );\n }\n\n // \":memory:\" databases always journal in memory; SQLite answers the WAL\n // request with \"memory\" instead of erroring, so no special-casing needed.\n sqlite.pragma(`journal_mode = ${resolved.journalMode}`);\n sqlite.pragma(`synchronous = ${resolved.synchronous}`);\n sqlite.pragma(`busy_timeout = ${resolved.busyTimeoutMs}`);\n if (resolved.cacheSizeKib !== undefined) {\n sqlite.pragma(`cache_size = ${resolved.cacheSizeKib}`);\n }\n if (resolved.mmapSizeBytes !== undefined) {\n sqlite.pragma(`mmap_size = ${resolved.mmapSizeBytes}`);\n }\n if (resolved.walAutocheckpointPages !== undefined) {\n sqlite.pragma(`wal_autocheckpoint = ${resolved.walAutocheckpointPages}`);\n }\n}\n\n/**\n * Options for creating a local SQLite backend.\n */\nexport type LocalSqliteBackendOptions = Readonly<{\n /**\n * Path to the SQLite database file.\n * Defaults to \":memory:\" for an in-memory database.\n */\n path?: string;\n\n /**\n * Connection pragmas applied at open. Defaults to\n * {@link DEFAULT_LOCAL_SQLITE_PRAGMAS} (WAL, `synchronous=NORMAL`, 5s busy\n * timeout, and SQLite's own tiny built-in page cache / disabled mmap\n * left untouched). Individual values merge over the defaults; pass\n * `false` to skip pragma configuration entirely and keep the driver\n * defaults (rollback journal, `synchronous=FULL`, and better-sqlite3's\n * own 5s busy timeout from its `timeout` constructor option). Set\n * `cacheSizeKib`/`mmapSizeBytes` explicitly once a database's working\n * set is known to exceed SQLite's 2MiB default cache — otherwise every\n * query pays a fresh disk read per page past that tiny working set. Set\n * `walAutocheckpointPages` explicitly for a bulk-insert-heavy workload —\n * SQLite's own default checkpoints every ~4MiB of WAL growth, which gets\n * more expensive as the database file grows over a large load.\n */\n pragmas?: LocalSqlitePragmaOptions | false;\n\n /**\n * Custom table definitions.\n * Defaults to standard TypeGraph table names.\n */\n tables?: SqliteTables;\n\n /**\n * Override specific backend capabilities — e.g. to simulate an engine-level\n * gap like missing SQL window functions in tests. Forwarded to\n * createSqliteBackend.\n */\n capabilities?: Partial<BackendCapabilities>;\n}>;\n\n/**\n * Result of creating a local SQLite backend.\n */\nexport type LocalSqliteBackendResult = Readonly<{\n /**\n * The GraphBackend instance for use with createStore.\n */\n backend: AdapterBackend<AnySqliteDatabase>;\n\n /**\n * The underlying Drizzle database instance.\n * Useful for direct SQL access or cleanup.\n */\n db: BetterSQLite3Database;\n}>;\n\n// ============================================================\n// Factory Function\n// ============================================================\n\n/**\n * Creates a SQLite backend with minimal configuration.\n *\n * This is a convenience function for local development and testing.\n * It handles database creation, schema migration, and backend setup.\n *\n * For production deployments or custom configurations, use createSqliteBackend\n * directly with your own Drizzle database instance.\n *\n * @param options - Configuration options\n * @returns Backend and database instances\n *\n * @example In-memory database (default)\n * ```typescript\n * const { backend } = createLocalSqliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example File-based database\n * ```typescript\n * const { backend, db } = createLocalSqliteBackend({ path: \"./data.db\" });\n * const store = createStore(graph, backend);\n * ```\n */\nexport function createLocalSqliteBackend(\n options: LocalSqliteBackendOptions = {},\n): LocalSqliteBackendResult {\n const path = options.path ?? \":memory:\";\n const tables = options.tables ?? defaultTables;\n\n const sqlite = createDatabase(path);\n try {\n applyConnectionPragmas(sqlite, options.pragmas);\n\n // Best-effort: load sqlite-vec so embedding fields are persisted to\n // per-`(kind, field)` `vec0` storage. Without it, nodes with\n // `embedding()` fields validate and insert but their vectors are silently\n // dropped. When the user has installed sqlite-vec as a peer dep we load\n // it and wire the strategy; otherwise we proceed without vector support.\n const hasSqliteVec = tryLoadSqliteVec(sqlite);\n\n const db = drizzle(sqlite);\n\n // Generate and execute DDL from schema\n const ddlStatements = generateSqliteDDL(tables);\n for (const statement of ddlStatements) {\n sqlite.exec(statement);\n }\n\n const backend = createSqliteBackend(db, {\n executionProfile: {\n isSync: true,\n },\n tables,\n ...(hasSqliteVec ? { vector: sqliteVecStrategy } : {}),\n capabilities: {\n ...options.capabilities,\n graphAnalytics: {\n supported:\n options.capabilities?.graphAnalytics?.supported ??\n options.capabilities?.transactions !== false,\n mathFunctions:\n options.capabilities?.graphAnalytics?.mathFunctions ?? true,\n },\n },\n });\n const managedBackend = wrapWithManagedClose(backend, () => {\n sqlite.close();\n });\n\n return { backend: managedBackend, db };\n } catch (error) {\n try {\n sqlite.close();\n } catch {\n // Preserve the provisioning error; a cleanup failure is secondary.\n }\n throw error;\n }\n}\n\nfunction tryLoadSqliteVec(sqlite: Database.Database): boolean {\n try {\n // `sqlite-vec` is an optional peer dep; resolved via createRequire so\n // bundlers don't mark it as a hard import. Node resolves the package\n // only when it's actually installed.\n const module_: unknown = nodeRequire(\"sqlite-vec\");\n if (\n typeof module_ === \"object\" &&\n module_ !== null &&\n \"load\" in module_ &&\n typeof module_.load === \"function\"\n ) {\n (module_ as { load: (db: Database.Database) => void }).load(sqlite);\n return true;\n }\n return false;\n } catch {\n return false;\n }\n}\nexport type { GraphIdentityConfig } from \"../../core/define-graph\";\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk3QNZ5SAJ_cjs = require('./chunk-3QNZ5SAJ.cjs');
|
|
4
4
|
var chunkFA2AFWLP_cjs = require('./chunk-FA2AFWLP.cjs');
|
|
5
5
|
var chunkHDL2ARHX_cjs = require('./chunk-HDL2ARHX.cjs');
|
|
6
6
|
var chunkWODMN3Q2_cjs = require('./chunk-WODMN3Q2.cjs');
|
|
@@ -148,7 +148,7 @@ function resolveSqliteClient(db) {
|
|
|
148
148
|
return sqliteClient;
|
|
149
149
|
}
|
|
150
150
|
function getOrCreatePreparedStatement(cache, sqliteClient, sqlText, cacheMax) {
|
|
151
|
-
return
|
|
151
|
+
return chunk3QNZ5SAJ_cjs.getOrCreateLru(
|
|
152
152
|
cache,
|
|
153
153
|
sqlText,
|
|
154
154
|
cacheMax,
|
|
@@ -305,7 +305,7 @@ function computeSqliteBatchChunkSizes(maxBindParameters) {
|
|
|
305
305
|
),
|
|
306
306
|
embeddingUpsertBatchSize: Math.max(
|
|
307
307
|
1,
|
|
308
|
-
Math.floor(maxBindParameters /
|
|
308
|
+
Math.floor(maxBindParameters / chunk3QNZ5SAJ_cjs.EMBEDDING_UPSERT_PARAM_COUNT)
|
|
309
309
|
),
|
|
310
310
|
fulltextUpsertBatchSize: Math.max(
|
|
311
311
|
1,
|
|
@@ -321,7 +321,7 @@ function computeSqliteBatchChunkSizes(maxBindParameters) {
|
|
|
321
321
|
),
|
|
322
322
|
findEdgesEndpointChunkSize: Math.max(
|
|
323
323
|
1,
|
|
324
|
-
maxBindParameters -
|
|
324
|
+
maxBindParameters - chunk3QNZ5SAJ_cjs.FIND_EDGES_ENDPOINT_FIXED_PARAM_COUNT
|
|
325
325
|
),
|
|
326
326
|
getEdgesChunkSize: Math.max(
|
|
327
327
|
1,
|
|
@@ -502,7 +502,7 @@ function createSqliteOperationBackend(options) {
|
|
|
502
502
|
const batchConfig = computeSqliteBatchChunkSizes(
|
|
503
503
|
capabilities.maxBindParameters ?? chunk5PRKMB24_cjs.SQLITE_MAX_BIND_PARAMETERS
|
|
504
504
|
);
|
|
505
|
-
const commonOperationMembers =
|
|
505
|
+
const commonOperationMembers = chunk3QNZ5SAJ_cjs.createCommonOperationBackend({
|
|
506
506
|
batchConfig,
|
|
507
507
|
execution: {
|
|
508
508
|
execAll,
|
|
@@ -530,7 +530,7 @@ function createSqliteOperationBackend(options) {
|
|
|
530
530
|
};
|
|
531
531
|
const vectorEmbeddingMethods = vectorStrategy === void 0 ? {} : {
|
|
532
532
|
async upsertEmbedding(params) {
|
|
533
|
-
const slot =
|
|
533
|
+
const slot = chunk3QNZ5SAJ_cjs.vectorSlotFromParams(params);
|
|
534
534
|
await contributionMaterializer.assertVectorSlot(slot);
|
|
535
535
|
const statements = vectorStrategy.buildUpsert(slot, params, chunkFA2AFWLP_cjs.nowIso());
|
|
536
536
|
try {
|
|
@@ -538,12 +538,12 @@ function createSqliteOperationBackend(options) {
|
|
|
538
538
|
await execRun(statement);
|
|
539
539
|
}
|
|
540
540
|
} catch (error) {
|
|
541
|
-
throw
|
|
541
|
+
throw chunk3QNZ5SAJ_cjs.mapVectorWriteError(error, params);
|
|
542
542
|
}
|
|
543
543
|
},
|
|
544
544
|
async upsertEmbeddingBatch(params) {
|
|
545
545
|
if (params.rows.length === 0) return;
|
|
546
|
-
const slot =
|
|
546
|
+
const slot = chunk3QNZ5SAJ_cjs.vectorSlotFromParams(params);
|
|
547
547
|
await contributionMaterializer.assertVectorSlot(slot);
|
|
548
548
|
const rowsById = new Map(
|
|
549
549
|
params.rows.map((row) => [row.nodeId, row])
|
|
@@ -580,11 +580,11 @@ function createSqliteOperationBackend(options) {
|
|
|
580
580
|
}
|
|
581
581
|
}
|
|
582
582
|
} catch (error) {
|
|
583
|
-
throw
|
|
583
|
+
throw chunk3QNZ5SAJ_cjs.mapVectorWriteError(error, params);
|
|
584
584
|
}
|
|
585
585
|
},
|
|
586
586
|
async deleteEmbedding(params) {
|
|
587
|
-
const slot =
|
|
587
|
+
const slot = chunk3QNZ5SAJ_cjs.vectorSlotFromParams(params);
|
|
588
588
|
await contributionMaterializer.assertVectorSlot(slot);
|
|
589
589
|
const statements = vectorStrategy.buildDelete(slot, params);
|
|
590
590
|
for (const statement of statements) {
|
|
@@ -593,7 +593,7 @@ function createSqliteOperationBackend(options) {
|
|
|
593
593
|
},
|
|
594
594
|
async deleteEmbeddingBatch(params) {
|
|
595
595
|
if (params.nodeIds.length === 0) return;
|
|
596
|
-
const slot =
|
|
596
|
+
const slot = chunk3QNZ5SAJ_cjs.vectorSlotFromParams(params);
|
|
597
597
|
await contributionMaterializer.assertVectorSlot(slot);
|
|
598
598
|
for (const nodeIds of chunkSIT26LAZ_cjs.chunk(
|
|
599
599
|
[...new Set(params.nodeIds)],
|
|
@@ -616,13 +616,13 @@ function createSqliteOperationBackend(options) {
|
|
|
616
616
|
dialect: "SQLite",
|
|
617
617
|
engine: vectorStrategy.name
|
|
618
618
|
});
|
|
619
|
-
const slot =
|
|
619
|
+
const slot = chunk3QNZ5SAJ_cjs.vectorSlotFromParams(params);
|
|
620
620
|
const query = vectorStrategy.buildSearch(
|
|
621
621
|
slot,
|
|
622
622
|
params,
|
|
623
623
|
// Store-compiled candidates (predicates + subclass + currency)
|
|
624
624
|
// take precedence; the live-node default covers direct backend use.
|
|
625
|
-
params.candidates ??
|
|
625
|
+
params.candidates ?? chunk3QNZ5SAJ_cjs.buildLiveNodeCandidates(
|
|
626
626
|
tableNames.nodes,
|
|
627
627
|
params.graphId,
|
|
628
628
|
params.nodeKind,
|
|
@@ -633,7 +633,7 @@ function createSqliteOperationBackend(options) {
|
|
|
633
633
|
try {
|
|
634
634
|
rows = await execAll(query);
|
|
635
635
|
} catch (error) {
|
|
636
|
-
throw
|
|
636
|
+
throw chunk3QNZ5SAJ_cjs.mapVectorWriteError(error, params);
|
|
637
637
|
}
|
|
638
638
|
return rows.map((row) => ({
|
|
639
639
|
nodeId: row.node_id,
|
|
@@ -655,7 +655,7 @@ function createSqliteOperationBackend(options) {
|
|
|
655
655
|
dialect: "SQLite",
|
|
656
656
|
engine: vectorStrategy.name
|
|
657
657
|
});
|
|
658
|
-
const slot =
|
|
658
|
+
const slot = chunk3QNZ5SAJ_cjs.vectorSlotFromParams({
|
|
659
659
|
graphId: params.graphId,
|
|
660
660
|
nodeKind: params.nodeKind,
|
|
661
661
|
fieldPath: params.vector.fieldPath,
|
|
@@ -663,7 +663,7 @@ function createSqliteOperationBackend(options) {
|
|
|
663
663
|
metric: params.vector.metric,
|
|
664
664
|
indexType: params.vector.indexType
|
|
665
665
|
});
|
|
666
|
-
const candidates = params.candidates ??
|
|
666
|
+
const candidates = params.candidates ?? chunk3QNZ5SAJ_cjs.buildLiveNodeCandidates(
|
|
667
667
|
tableNames.nodes,
|
|
668
668
|
params.graphId,
|
|
669
669
|
params.nodeKind,
|
|
@@ -694,9 +694,9 @@ function createSqliteOperationBackend(options) {
|
|
|
694
694
|
try {
|
|
695
695
|
raw = await execAll(statement);
|
|
696
696
|
} catch (error) {
|
|
697
|
-
throw
|
|
697
|
+
throw chunk3QNZ5SAJ_cjs.mapVectorWriteError(error, vectorParams);
|
|
698
698
|
}
|
|
699
|
-
return raw.map((row) =>
|
|
699
|
+
return raw.map((row) => chunk3QNZ5SAJ_cjs.mapHybridSearchRow(row, toNodeRow));
|
|
700
700
|
}
|
|
701
701
|
} : {}
|
|
702
702
|
};
|
|
@@ -752,7 +752,7 @@ function createSqliteOperationBackend(options) {
|
|
|
752
752
|
const active = await commonOperationMembers.getActiveSchema(
|
|
753
753
|
params.graphId
|
|
754
754
|
);
|
|
755
|
-
|
|
755
|
+
chunk3QNZ5SAJ_cjs.assertActiveSchemaVersion(
|
|
756
756
|
params.graphId,
|
|
757
757
|
params.expectedVersion,
|
|
758
758
|
active?.version ?? 0
|
|
@@ -760,7 +760,7 @@ function createSqliteOperationBackend(options) {
|
|
|
760
760
|
},
|
|
761
761
|
async createVectorIndex(params) {
|
|
762
762
|
if (vectorStrategy === void 0) return;
|
|
763
|
-
const slot =
|
|
763
|
+
const slot = chunk3QNZ5SAJ_cjs.vectorSlotFromCreateIndexParams(params);
|
|
764
764
|
await contributionMaterializer.ensureVectorSlot(slot);
|
|
765
765
|
const indexStatement = vectorStrategy.buildCreateIndex?.(slot);
|
|
766
766
|
if (indexStatement !== void 0) {
|
|
@@ -769,7 +769,7 @@ function createSqliteOperationBackend(options) {
|
|
|
769
769
|
},
|
|
770
770
|
async dropVectorIndex(params) {
|
|
771
771
|
if (vectorStrategy === void 0) return;
|
|
772
|
-
const slot =
|
|
772
|
+
const slot = chunk3QNZ5SAJ_cjs.vectorSlotFromDropIndexParams(params);
|
|
773
773
|
const dropStatement = vectorStrategy.buildDropIndex?.(slot);
|
|
774
774
|
if (dropStatement === void 0) return;
|
|
775
775
|
try {
|
|
@@ -897,7 +897,7 @@ function createSqliteBackend(db, options = {}) {
|
|
|
897
897
|
contributions: {
|
|
898
898
|
supported: true,
|
|
899
899
|
probe: true,
|
|
900
|
-
rebuild:
|
|
900
|
+
rebuild: chunk3QNZ5SAJ_cjs.contributionRebuildSupported(
|
|
901
901
|
fulltextStrategy,
|
|
902
902
|
tables2.fulltextTableName,
|
|
903
903
|
declaredCapabilities.transactions
|
|
@@ -933,7 +933,7 @@ function createSqliteBackend(db, options = {}) {
|
|
|
933
933
|
tableNames.identityClosure,
|
|
934
934
|
tableNames.identitySeparation
|
|
935
935
|
];
|
|
936
|
-
const operationStrategy =
|
|
936
|
+
const operationStrategy = chunk3QNZ5SAJ_cjs.createSqliteOperationStrategy(
|
|
937
937
|
tables2,
|
|
938
938
|
fulltextStrategy
|
|
939
939
|
);
|
|
@@ -953,25 +953,25 @@ function createSqliteBackend(db, options = {}) {
|
|
|
953
953
|
);
|
|
954
954
|
const row = rows[0];
|
|
955
955
|
if (row === void 0) return void 0;
|
|
956
|
-
return
|
|
956
|
+
return chunk3QNZ5SAJ_cjs.mapContributionMaterializationRow(
|
|
957
957
|
row,
|
|
958
|
-
|
|
958
|
+
chunk3QNZ5SAJ_cjs.SQLITE_CONTRIBUTION_MAT_TIMESTAMPS.decode
|
|
959
959
|
);
|
|
960
960
|
}
|
|
961
961
|
async function getContributionMaterializationRows(graphId) {
|
|
962
962
|
const rows = await db.select().from(matTable).where(drizzleOrm.eq(matTable.graphId, graphId));
|
|
963
963
|
return rows.map(
|
|
964
|
-
(row) =>
|
|
964
|
+
(row) => chunk3QNZ5SAJ_cjs.mapContributionMaterializationRow(
|
|
965
965
|
row,
|
|
966
|
-
|
|
966
|
+
chunk3QNZ5SAJ_cjs.SQLITE_CONTRIBUTION_MAT_TIMESTAMPS.decode
|
|
967
967
|
)
|
|
968
968
|
);
|
|
969
969
|
}
|
|
970
970
|
async function recordContributionMaterializationRow(params) {
|
|
971
971
|
await db.insert(matTable).values(
|
|
972
|
-
|
|
972
|
+
chunk3QNZ5SAJ_cjs.buildContributionInsertValues(
|
|
973
973
|
params,
|
|
974
|
-
|
|
974
|
+
chunk3QNZ5SAJ_cjs.SQLITE_CONTRIBUTION_MAT_TIMESTAMPS.encode
|
|
975
975
|
)
|
|
976
976
|
).onConflictDoUpdate({
|
|
977
977
|
target: [
|
|
@@ -980,7 +980,7 @@ function createSqliteBackend(db, options = {}) {
|
|
|
980
980
|
matTable.owner,
|
|
981
981
|
matTable.tableName
|
|
982
982
|
],
|
|
983
|
-
set:
|
|
983
|
+
set: chunk3QNZ5SAJ_cjs.buildContributionOnConflictSet(
|
|
984
984
|
matTable.materializedAt,
|
|
985
985
|
params.materializedAt
|
|
986
986
|
)
|
|
@@ -1000,7 +1000,7 @@ function createSqliteBackend(db, options = {}) {
|
|
|
1000
1000
|
const rows = await executionAdapter.execute(
|
|
1001
1001
|
operationStrategy.buildTableExists(tableName)
|
|
1002
1002
|
);
|
|
1003
|
-
return
|
|
1003
|
+
return chunk3QNZ5SAJ_cjs.tableExistsFromRow(rows[0]);
|
|
1004
1004
|
}
|
|
1005
1005
|
function identityContributionsFor(identityTableNames) {
|
|
1006
1006
|
const identityTables = chunkHDL2ARHX_cjs.createSqliteTables({
|
|
@@ -1013,7 +1013,7 @@ function createSqliteBackend(db, options = {}) {
|
|
|
1013
1013
|
(contribution) => IDENTITY_TABLE_LOGICAL_NAMES.has(contribution.logicalName)
|
|
1014
1014
|
);
|
|
1015
1015
|
}
|
|
1016
|
-
const contributionMaterializer =
|
|
1016
|
+
const contributionMaterializer = chunk3QNZ5SAJ_cjs.createContributionMaterializer({
|
|
1017
1017
|
dialect: "sqlite",
|
|
1018
1018
|
fulltextStrategy,
|
|
1019
1019
|
fulltextTableName: tables2.fulltextTableName,
|
|
@@ -1153,7 +1153,7 @@ function createSqliteBackend(db, options = {}) {
|
|
|
1153
1153
|
vectorStrategy,
|
|
1154
1154
|
contributionMaterializer
|
|
1155
1155
|
});
|
|
1156
|
-
return
|
|
1156
|
+
return chunk3QNZ5SAJ_cjs.gateFulltext(
|
|
1157
1157
|
txBackend,
|
|
1158
1158
|
contributionMaterializer.assertInitialized,
|
|
1159
1159
|
contributionMaterializer.refuseUnavailableFulltext
|
|
@@ -1169,16 +1169,16 @@ function createSqliteBackend(db, options = {}) {
|
|
|
1169
1169
|
...options_.schemaWrite
|
|
1170
1170
|
});
|
|
1171
1171
|
}
|
|
1172
|
-
await
|
|
1173
|
-
const indexDefinitions = await
|
|
1172
|
+
await chunk3QNZ5SAJ_cjs.assertTrustedImportDatabaseEmpty(tx, tableNames);
|
|
1173
|
+
const indexDefinitions = await chunk3QNZ5SAJ_cjs.suspendSqliteSecondaryIndexes(
|
|
1174
1174
|
tx,
|
|
1175
1175
|
tableNames
|
|
1176
1176
|
);
|
|
1177
1177
|
const result = await fn(
|
|
1178
|
-
|
|
1178
|
+
chunk3QNZ5SAJ_cjs.createSqliteTrustedImportSession(executionAdapter, tableNames)
|
|
1179
1179
|
);
|
|
1180
|
-
await
|
|
1181
|
-
await
|
|
1180
|
+
await chunk3QNZ5SAJ_cjs.restoreSecondaryIndexes(tx, indexDefinitions);
|
|
1181
|
+
await chunk3QNZ5SAJ_cjs.analyzeImportedTables(tx, tableNames);
|
|
1182
1182
|
return result;
|
|
1183
1183
|
});
|
|
1184
1184
|
}
|
|
@@ -1221,7 +1221,7 @@ function createSqliteBackend(db, options = {}) {
|
|
|
1221
1221
|
// uninitialized database throws `StoreNotInitializedError` rather
|
|
1222
1222
|
// than self-healing (#135). Shared verbatim with the tx-scoped gate
|
|
1223
1223
|
// via `gateFulltextMethods`.
|
|
1224
|
-
...
|
|
1224
|
+
...chunk3QNZ5SAJ_cjs.gateFulltextMethods(
|
|
1225
1225
|
operations,
|
|
1226
1226
|
contributionMaterializer.assertInitialized,
|
|
1227
1227
|
contributionMaterializer.refuseUnavailableFulltext
|
|
@@ -1239,26 +1239,26 @@ function createSqliteBackend(db, options = {}) {
|
|
|
1239
1239
|
const rows = await db.select().from(t).where(drizzleOrm.eq(t.indexName, indexName));
|
|
1240
1240
|
const row = rows[0];
|
|
1241
1241
|
if (row === void 0) return void 0;
|
|
1242
|
-
return
|
|
1242
|
+
return chunk3QNZ5SAJ_cjs.mapMaterializationRow(row, chunk3QNZ5SAJ_cjs.SQLITE_INDEX_MAT_TIMESTAMPS.decode);
|
|
1243
1243
|
},
|
|
1244
1244
|
async getIndexMaterializations(statusKeys) {
|
|
1245
1245
|
if (statusKeys.length === 0) return [];
|
|
1246
1246
|
const t = tables2.indexMaterializations;
|
|
1247
1247
|
const rows = await db.select().from(t).where(drizzleOrm.inArray(t.indexName, [...statusKeys]));
|
|
1248
1248
|
return rows.map(
|
|
1249
|
-
(row) =>
|
|
1249
|
+
(row) => chunk3QNZ5SAJ_cjs.mapMaterializationRow(row, chunk3QNZ5SAJ_cjs.SQLITE_INDEX_MAT_TIMESTAMPS.decode)
|
|
1250
1250
|
);
|
|
1251
1251
|
},
|
|
1252
1252
|
async recordIndexMaterialization(params) {
|
|
1253
1253
|
const t = tables2.indexMaterializations;
|
|
1254
1254
|
await db.insert(t).values(
|
|
1255
|
-
|
|
1255
|
+
chunk3QNZ5SAJ_cjs.buildMaterializationInsertValues(
|
|
1256
1256
|
params,
|
|
1257
|
-
|
|
1257
|
+
chunk3QNZ5SAJ_cjs.SQLITE_INDEX_MAT_TIMESTAMPS.encode
|
|
1258
1258
|
)
|
|
1259
1259
|
).onConflictDoUpdate({
|
|
1260
1260
|
target: t.indexName,
|
|
1261
|
-
set:
|
|
1261
|
+
set: chunk3QNZ5SAJ_cjs.buildMaterializationOnConflictSet(params.materializedAt)
|
|
1262
1262
|
});
|
|
1263
1263
|
},
|
|
1264
1264
|
async ensureContributionMaterializationsTable() {
|
|
@@ -1280,26 +1280,26 @@ function createSqliteBackend(db, options = {}) {
|
|
|
1280
1280
|
const t = tables2.kindRemovals;
|
|
1281
1281
|
const rows = await db.select().from(t).where(drizzleOrm.and(drizzleOrm.eq(t.graphId, graphId), drizzleOrm.isNull(t.removedAt)));
|
|
1282
1282
|
return rows.map(
|
|
1283
|
-
(row) =>
|
|
1283
|
+
(row) => chunk3QNZ5SAJ_cjs.mapKindRemovalRow(row, chunk3QNZ5SAJ_cjs.SQLITE_KIND_REMOVAL_TIMESTAMPS.decode)
|
|
1284
1284
|
);
|
|
1285
1285
|
},
|
|
1286
1286
|
async getAllKindRemovals(graphId) {
|
|
1287
1287
|
const t = tables2.kindRemovals;
|
|
1288
1288
|
const rows = await db.select().from(t).where(drizzleOrm.eq(t.graphId, graphId));
|
|
1289
1289
|
return rows.map(
|
|
1290
|
-
(row) =>
|
|
1290
|
+
(row) => chunk3QNZ5SAJ_cjs.mapKindRemovalRow(row, chunk3QNZ5SAJ_cjs.SQLITE_KIND_REMOVAL_TIMESTAMPS.decode)
|
|
1291
1291
|
);
|
|
1292
1292
|
},
|
|
1293
1293
|
async recordKindRemoval(params) {
|
|
1294
1294
|
const t = tables2.kindRemovals;
|
|
1295
1295
|
await db.insert(t).values(
|
|
1296
|
-
|
|
1296
|
+
chunk3QNZ5SAJ_cjs.buildKindRemovalInsertValues(
|
|
1297
1297
|
params,
|
|
1298
|
-
|
|
1298
|
+
chunk3QNZ5SAJ_cjs.SQLITE_KIND_REMOVAL_TIMESTAMPS.encode
|
|
1299
1299
|
)
|
|
1300
1300
|
).onConflictDoUpdate({
|
|
1301
1301
|
target: [t.graphId, t.kindName, t.entity, t.schemaVersion],
|
|
1302
|
-
set:
|
|
1302
|
+
set: chunk3QNZ5SAJ_cjs.buildKindRemovalOnConflictSet(t.removedAt, params.removedAt)
|
|
1303
1303
|
});
|
|
1304
1304
|
},
|
|
1305
1305
|
async ensureReconciliationMarkersTable() {
|
|
@@ -1406,7 +1406,7 @@ function createSqliteBackend(db, options = {}) {
|
|
|
1406
1406
|
},
|
|
1407
1407
|
async commitSchemaVersionIfKindsEmpty(params, probes) {
|
|
1408
1408
|
return runSchemaWriteTransaction(
|
|
1409
|
-
(target) =>
|
|
1409
|
+
(target) => chunk3QNZ5SAJ_cjs.commitSchemaVersionIfKindsEmpty(target, params, probes)
|
|
1410
1410
|
);
|
|
1411
1411
|
},
|
|
1412
1412
|
async commitSchemaVersionWithPreflight(params, preflight) {
|
|
@@ -1457,7 +1457,7 @@ function createSqliteBackend(db, options = {}) {
|
|
|
1457
1457
|
);
|
|
1458
1458
|
try {
|
|
1459
1459
|
const result = await fn(
|
|
1460
|
-
|
|
1460
|
+
chunk3QNZ5SAJ_cjs.gateFulltext(
|
|
1461
1461
|
txBackend,
|
|
1462
1462
|
contributionMaterializer.assertInitialized,
|
|
1463
1463
|
contributionMaterializer.refuseUnavailableFulltext
|
|
@@ -1490,7 +1490,7 @@ function createSqliteBackend(db, options = {}) {
|
|
|
1490
1490
|
"Cross-store atomicity is unavailable on this SQLite backend: transactions are disabled (transactionMode: 'none'). Adopting an external transaction here would let the caller's relational write commit with no way to roll back the graph write. Configure a driver that supports transactions (better-sqlite3, libsql, bun:sqlite)."
|
|
1491
1491
|
);
|
|
1492
1492
|
}
|
|
1493
|
-
|
|
1493
|
+
chunk3QNZ5SAJ_cjs.assertAdoptedDialect(
|
|
1494
1494
|
externalTx,
|
|
1495
1495
|
sqliteCore.BaseSQLiteDatabase,
|
|
1496
1496
|
"sqlite"
|
|
@@ -1524,5 +1524,5 @@ function createTransactionBackend(options) {
|
|
|
1524
1524
|
|
|
1525
1525
|
exports.createSqliteBackend = createSqliteBackend;
|
|
1526
1526
|
exports.isLocalLibsqlClient = isLocalLibsqlClient;
|
|
1527
|
-
//# sourceMappingURL=chunk-
|
|
1528
|
-
//# sourceMappingURL=chunk-
|
|
1527
|
+
//# sourceMappingURL=chunk-YYUHLYM2.cjs.map
|
|
1528
|
+
//# sourceMappingURL=chunk-YYUHLYM2.cjs.map
|