@nicia-ai/typegraph 0.21.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/dist/{ast-CSLbPIOC.d.ts → ast-C8S37w1A.d.ts} +1 -1
  2. package/dist/{ast-DogwbBqA.d.cts → ast-dgLhLOg0.d.cts} +1 -1
  3. package/dist/backend/postgres/index.cjs +169 -52
  4. package/dist/backend/postgres/index.cjs.map +1 -1
  5. package/dist/backend/postgres/index.d.cts +43 -6
  6. package/dist/backend/postgres/index.d.ts +43 -6
  7. package/dist/backend/postgres/index.js +140 -23
  8. package/dist/backend/postgres/index.js.map +1 -1
  9. package/dist/backend/sqlite/index.cjs +15 -14
  10. package/dist/backend/sqlite/index.d.cts +17 -6
  11. package/dist/backend/sqlite/index.d.ts +17 -6
  12. package/dist/backend/sqlite/index.js +5 -4
  13. package/dist/backend/sqlite/libsql.cjs +8 -7
  14. package/dist/backend/sqlite/libsql.cjs.map +1 -1
  15. package/dist/backend/sqlite/libsql.d.cts +4 -4
  16. package/dist/backend/sqlite/libsql.d.ts +4 -4
  17. package/dist/backend/sqlite/libsql.js +5 -4
  18. package/dist/backend/sqlite/libsql.js.map +1 -1
  19. package/dist/backend/sqlite/local.cjs +27 -9
  20. package/dist/backend/sqlite/local.cjs.map +1 -1
  21. package/dist/backend/sqlite/local.d.cts +4 -4
  22. package/dist/backend/sqlite/local.d.ts +4 -4
  23. package/dist/backend/sqlite/local.js +22 -5
  24. package/dist/backend/sqlite/local.js.map +1 -1
  25. package/dist/chunk-3EUKJEQ3.js +77 -0
  26. package/dist/chunk-3EUKJEQ3.js.map +1 -0
  27. package/dist/{chunk-FQCQM3KG.cjs → chunk-3JK66E3I.cjs} +4 -2
  28. package/dist/chunk-3JK66E3I.cjs.map +1 -0
  29. package/dist/{chunk-SMMOAVJ5.js → chunk-3PPEHLGK.js} +3 -3
  30. package/dist/{chunk-SMMOAVJ5.js.map → chunk-3PPEHLGK.js.map} +1 -1
  31. package/dist/{chunk-4XNE2JG3.js → chunk-753F33CV.js} +4 -2
  32. package/dist/chunk-753F33CV.js.map +1 -0
  33. package/dist/{chunk-Q73OWTJY.cjs → chunk-7OD2EPN4.cjs} +130 -106
  34. package/dist/chunk-7OD2EPN4.cjs.map +1 -0
  35. package/dist/chunk-7TU5EWQ7.js +47 -0
  36. package/dist/chunk-7TU5EWQ7.js.map +1 -0
  37. package/dist/{chunk-NRNJ52AA.js → chunk-EP2KSSD5.js} +41 -25
  38. package/dist/chunk-EP2KSSD5.js.map +1 -0
  39. package/dist/{chunk-UQVBVBVG.js → chunk-H2CAJ4ZV.js} +71 -45
  40. package/dist/chunk-H2CAJ4ZV.js.map +1 -0
  41. package/dist/chunk-HTGDWIDE.cjs +89 -0
  42. package/dist/chunk-HTGDWIDE.cjs.map +1 -0
  43. package/dist/{chunk-CQL6FOTT.cjs → chunk-O5BRZEIZ.cjs} +58 -42
  44. package/dist/chunk-O5BRZEIZ.cjs.map +1 -0
  45. package/dist/{chunk-2X7P7AD5.cjs → chunk-PEE4EWXZ.cjs} +22 -22
  46. package/dist/{chunk-2X7P7AD5.cjs.map → chunk-PEE4EWXZ.cjs.map} +1 -1
  47. package/dist/chunk-RNUNP5JD.cjs +52 -0
  48. package/dist/chunk-RNUNP5JD.cjs.map +1 -0
  49. package/dist/{ddl-BqkTShcR.d.ts → ddl-1tFIvt9V.d.ts} +3 -3
  50. package/dist/{ddl-Dk1NDN3M.d.cts → ddl-B_H8JM-E.d.cts} +3 -3
  51. package/dist/index.cjs +267 -198
  52. package/dist/index.cjs.map +1 -1
  53. package/dist/index.d.cts +53 -9
  54. package/dist/index.d.ts +53 -9
  55. package/dist/index.js +209 -142
  56. package/dist/index.js.map +1 -1
  57. package/dist/indexes/index.cjs +16 -16
  58. package/dist/indexes/index.d.cts +5 -5
  59. package/dist/indexes/index.d.ts +5 -5
  60. package/dist/indexes/index.js +2 -2
  61. package/dist/interchange/index.d.cts +4 -4
  62. package/dist/interchange/index.d.ts +4 -4
  63. package/dist/{manager-BPK-2PUI.d.cts → manager-Vkz28eAC.d.cts} +1 -1
  64. package/dist/{manager-0jVZtiE8.d.ts → manager-nIhmttD-.d.ts} +1 -1
  65. package/dist/profiler/index.d.cts +6 -6
  66. package/dist/profiler/index.d.ts +6 -6
  67. package/dist/schema/index.d.cts +4 -4
  68. package/dist/schema/index.d.ts +4 -4
  69. package/dist/{sqlite-D1rrwcir.d.cts → sqlite-D0aceIe0.d.cts} +1 -1
  70. package/dist/{sqlite-W3rmJMlc.d.ts → sqlite-SUxbZqfy.d.ts} +1 -1
  71. package/dist/{store-C0q13mtJ.d.ts → store-CpvwTMxV.d.cts} +58 -8
  72. package/dist/{store-2QW2SIRk.d.cts → store-U3i2tUch.d.ts} +58 -8
  73. package/dist/{types-IMQCuser.d.ts → types-C-zfYDJB.d.ts} +2 -2
  74. package/dist/{types-vgjar7Ch.d.cts → types-CQx4iW5Y.d.cts} +2 -2
  75. package/dist/{types-CQF88McG.d.ts → types-Qk2l3IkQ.d.cts} +20 -1
  76. package/dist/{types-CQF88McG.d.cts → types-Qk2l3IkQ.d.ts} +20 -1
  77. package/dist/{types-CglvhPKz.d.ts → types-qYFZ9SqD.d.ts} +1 -1
  78. package/dist/{types-D23slCOA.d.cts → types-yH4_p0XB.d.cts} +1 -1
  79. package/package.json +15 -1
  80. package/dist/chunk-4XNE2JG3.js.map +0 -1
  81. package/dist/chunk-CQL6FOTT.cjs.map +0 -1
  82. package/dist/chunk-FQCQM3KG.cjs.map +0 -1
  83. package/dist/chunk-NRNJ52AA.js.map +0 -1
  84. package/dist/chunk-Q73OWTJY.cjs.map +0 -1
  85. package/dist/chunk-UQVBVBVG.js.map +0 -1
@@ -0,0 +1,89 @@
1
+ 'use strict';
2
+
3
+ var drizzleOrm = require('drizzle-orm');
4
+
5
+ // src/query/compiler/utils.ts
6
+ var NODE_COLUMNS = [
7
+ "id",
8
+ "kind",
9
+ "props",
10
+ "version",
11
+ "valid_from",
12
+ "valid_to",
13
+ "created_at",
14
+ "updated_at",
15
+ "deleted_at"
16
+ ];
17
+ var EDGE_COLUMNS = [
18
+ "id",
19
+ "kind",
20
+ "from_id",
21
+ "to_id",
22
+ "props",
23
+ "valid_from",
24
+ "valid_to",
25
+ "created_at",
26
+ "updated_at",
27
+ "deleted_at"
28
+ ];
29
+ var EMPTY_REQUIRED_COLUMNS = /* @__PURE__ */ new Set();
30
+ function quoteIdentifier(identifier) {
31
+ return drizzleOrm.sql.raw(`"${identifier.replaceAll('"', '""')}"`);
32
+ }
33
+ function shouldProjectColumn(requiredColumns, column, alwaysRequiredColumns) {
34
+ if (alwaysRequiredColumns?.has(column)) return true;
35
+ if (requiredColumns === void 0) return true;
36
+ return requiredColumns.has(column);
37
+ }
38
+ function addRequiredColumn(requiredColumnsByAlias, alias, column) {
39
+ const existing = requiredColumnsByAlias.get(alias);
40
+ if (existing) {
41
+ existing.add(column);
42
+ return;
43
+ }
44
+ requiredColumnsByAlias.set(alias, /* @__PURE__ */ new Set([column]));
45
+ }
46
+ function markFieldRefAsRequired(requiredColumnsByAlias, field) {
47
+ const column = field.path[0];
48
+ if (column === void 0) return;
49
+ addRequiredColumn(requiredColumnsByAlias, field.alias, column);
50
+ }
51
+ function mapSelectiveSystemFieldToColumn(field) {
52
+ if (field === "fromId") return "from_id";
53
+ if (field === "toId") return "to_id";
54
+ if (field.startsWith("meta.")) {
55
+ return field.slice(5).replaceAll(/([A-Z])/g, "_$1").toLowerCase();
56
+ }
57
+ return field;
58
+ }
59
+ function markSelectiveFieldAsRequired(requiredColumnsByAlias, field) {
60
+ if (field.isSystemField) {
61
+ addRequiredColumn(
62
+ requiredColumnsByAlias,
63
+ field.alias,
64
+ mapSelectiveSystemFieldToColumn(field.field)
65
+ );
66
+ return;
67
+ }
68
+ addRequiredColumn(requiredColumnsByAlias, field.alias, "props");
69
+ }
70
+ function isIdFieldRef(field) {
71
+ return field.path.length === 1 && field.path[0] === "id" && field.jsonPointer === void 0;
72
+ }
73
+ function isAggregateExpr(source) {
74
+ return "__type" in source && source.__type === "aggregate";
75
+ }
76
+
77
+ exports.EDGE_COLUMNS = EDGE_COLUMNS;
78
+ exports.EMPTY_REQUIRED_COLUMNS = EMPTY_REQUIRED_COLUMNS;
79
+ exports.NODE_COLUMNS = NODE_COLUMNS;
80
+ exports.addRequiredColumn = addRequiredColumn;
81
+ exports.isAggregateExpr = isAggregateExpr;
82
+ exports.isIdFieldRef = isIdFieldRef;
83
+ exports.mapSelectiveSystemFieldToColumn = mapSelectiveSystemFieldToColumn;
84
+ exports.markFieldRefAsRequired = markFieldRefAsRequired;
85
+ exports.markSelectiveFieldAsRequired = markSelectiveFieldAsRequired;
86
+ exports.quoteIdentifier = quoteIdentifier;
87
+ exports.shouldProjectColumn = shouldProjectColumn;
88
+ //# sourceMappingURL=chunk-HTGDWIDE.cjs.map
89
+ //# sourceMappingURL=chunk-HTGDWIDE.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/query/compiler/utils.ts"],"names":["sql"],"mappings":";;;;;AAaO,IAAM,YAAA,GAAe;AAAA,EAC1B,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF;AAEO,IAAM,YAAA,GAAe;AAAA,EAC1B,IAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF;AAGO,IAAM,sBAAA,uBAA6B,GAAA;AAMnC,SAAS,gBAAgB,UAAA,EAAyB;AACvD,EAAA,OAAOA,cAAA,CAAI,IAAI,CAAA,CAAA,EAAI,UAAA,CAAW,WAAW,GAAA,EAAK,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AACxD;AAcO,SAAS,mBAAA,CACd,eAAA,EACA,MAAA,EACA,qBAAA,EACS;AACT,EAAA,IAAI,qBAAA,EAAuB,GAAA,CAAI,MAAM,CAAA,EAAG,OAAO,IAAA;AAC/C,EAAA,IAAI,eAAA,KAAoB,QAAW,OAAO,IAAA;AAC1C,EAAA,OAAO,eAAA,CAAgB,IAAI,MAAM,CAAA;AACnC;AAMO,SAAS,iBAAA,CACd,sBAAA,EACA,KAAA,EACA,MAAA,EACM;AACN,EAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,GAAA,CAAI,KAAK,CAAA;AACjD,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,QAAA,CAAS,IAAI,MAAM,CAAA;AACnB,IAAA;AAAA,EACF;AACA,EAAA,sBAAA,CAAuB,IAAI,KAAA,kBAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AACrD;AAEO,SAAS,sBAAA,CACd,wBACA,KAAA,EACM;AACN,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA;AAC3B,EAAA,IAAI,WAAW,MAAA,EAAW;AAC1B,EAAA,iBAAA,CAAkB,sBAAA,EAAwB,KAAA,CAAM,KAAA,EAAO,MAAM,CAAA;AAC/D;AAEO,SAAS,gCAAgC,KAAA,EAAuB;AACrE,EAAA,IAAI,KAAA,KAAU,UAAU,OAAO,SAAA;AAC/B,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,OAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,UAAA,CAAW,OAAO,CAAA,EAAG;AAC7B,IAAA,OAAO,KAAA,CACJ,MAAM,CAAC,CAAA,CACP,WAAW,UAAA,EAAY,KAAK,EAC5B,WAAA,EAAY;AAAA,EACjB;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,4BAAA,CACd,wBACA,KAAA,EACM;AACN,EAAA,IAAI,MAAM,aAAA,EAAe;AACvB,IAAA,iBAAA;AAAA,MACE,sBAAA;AAAA,MACA,KAAA,CAAM,KAAA;AAAA,MACN,+BAAA,CAAgC,MAAM,KAAK;AAAA,KAC7C;AACA,IAAA;AAAA,EACF;AACA,EAAA,iBAAA,CAAkB,sBAAA,EAAwB,KAAA,CAAM,KAAA,EAAO,OAAO,CAAA;AAChE;AAMO,SAAS,aAAa,KAAA,EAA0B;AACrD,EAAA,OACE,KAAA,CAAM,IAAA,CAAK,MAAA,KAAW,CAAA,IACtB,KAAA,CAAM,KAAK,CAAC,CAAA,KAAM,IAAA,IAClB,KAAA,CAAM,WAAA,KAAgB,MAAA;AAE1B;AAEO,SAAS,gBACd,MAAA,EACyB;AACzB,EAAA,OAAO,QAAA,IAAY,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,WAAA;AACjD","file":"chunk-HTGDWIDE.cjs","sourcesContent":["/**\n * Shared Compiler Utilities\n *\n * Functions and constants shared between the standard and recursive compilers.\n */\nimport { type SQL, sql } from \"drizzle-orm\";\n\nimport { type AggregateExpr, type FieldRef, type SelectiveField } from \"../ast\";\n\n// ============================================================\n// Constants\n// ============================================================\n\nexport const NODE_COLUMNS = [\n \"id\",\n \"kind\",\n \"props\",\n \"version\",\n \"valid_from\",\n \"valid_to\",\n \"created_at\",\n \"updated_at\",\n \"deleted_at\",\n] as const;\n\nexport const EDGE_COLUMNS = [\n \"id\",\n \"kind\",\n \"from_id\",\n \"to_id\",\n \"props\",\n \"valid_from\",\n \"valid_to\",\n \"created_at\",\n \"updated_at\",\n \"deleted_at\",\n] as const;\n\nexport type RequiredColumnsByAlias = ReadonlyMap<string, ReadonlySet<string>>;\nexport const EMPTY_REQUIRED_COLUMNS = new Set<string>();\n\n// ============================================================\n// SQL Helpers\n// ============================================================\n\nexport function quoteIdentifier(identifier: string): SQL {\n return sql.raw(`\"${identifier.replaceAll('\"', '\"\"')}\"`);\n}\n\n// ============================================================\n// Column Projection\n// ============================================================\n\n/**\n * Determines whether a column should be included in the projection.\n *\n * @param requiredColumns - Set of columns required by the query, or undefined to include all.\n * @param column - The column name to check.\n * @param alwaysRequiredColumns - Optional set of columns that are always projected\n * (e.g. join keys in recursive CTEs). Pass only from recursive compiler callers.\n */\nexport function shouldProjectColumn(\n requiredColumns: ReadonlySet<string> | undefined,\n column: string,\n alwaysRequiredColumns?: ReadonlySet<string>,\n): boolean {\n if (alwaysRequiredColumns?.has(column)) return true;\n if (requiredColumns === undefined) return true;\n return requiredColumns.has(column);\n}\n\n// ============================================================\n// Required Column Tracking\n// ============================================================\n\nexport function addRequiredColumn(\n requiredColumnsByAlias: Map<string, Set<string>>,\n alias: string,\n column: string,\n): void {\n const existing = requiredColumnsByAlias.get(alias);\n if (existing) {\n existing.add(column);\n return;\n }\n requiredColumnsByAlias.set(alias, new Set([column]));\n}\n\nexport function markFieldRefAsRequired(\n requiredColumnsByAlias: Map<string, Set<string>>,\n field: FieldRef,\n): void {\n const column = field.path[0];\n if (column === undefined) return;\n addRequiredColumn(requiredColumnsByAlias, field.alias, column);\n}\n\nexport function mapSelectiveSystemFieldToColumn(field: string): string {\n if (field === \"fromId\") return \"from_id\";\n if (field === \"toId\") return \"to_id\";\n if (field.startsWith(\"meta.\")) {\n return field\n .slice(5)\n .replaceAll(/([A-Z])/g, \"_$1\")\n .toLowerCase();\n }\n return field;\n}\n\nexport function markSelectiveFieldAsRequired(\n requiredColumnsByAlias: Map<string, Set<string>>,\n field: SelectiveField,\n): void {\n if (field.isSystemField) {\n addRequiredColumn(\n requiredColumnsByAlias,\n field.alias,\n mapSelectiveSystemFieldToColumn(field.field),\n );\n return;\n }\n addRequiredColumn(requiredColumnsByAlias, field.alias, \"props\");\n}\n\n// ============================================================\n// AST Type Guards\n// ============================================================\n\nexport function isIdFieldRef(field: FieldRef): boolean {\n return (\n field.path.length === 1 &&\n field.path[0] === \"id\" &&\n field.jsonPointer === undefined\n );\n}\n\nexport function isAggregateExpr(\n source: FieldRef | AggregateExpr,\n): source is AggregateExpr {\n return \"__type\" in source && source.__type === \"aggregate\";\n}\n"]}
@@ -1,8 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkQ73OWTJY_cjs = require('./chunk-Q73OWTJY.cjs');
3
+ var chunk7OD2EPN4_cjs = require('./chunk-7OD2EPN4.cjs');
4
+ var chunkRNUNP5JD_cjs = require('./chunk-RNUNP5JD.cjs');
4
5
  var chunkO5PST6TB_cjs = require('./chunk-O5PST6TB.cjs');
5
- var chunkFQCQM3KG_cjs = require('./chunk-FQCQM3KG.cjs');
6
+ var chunk3JK66E3I_cjs = require('./chunk-3JK66E3I.cjs');
6
7
  var drizzleOrm = require('drizzle-orm');
7
8
 
8
9
  var DEFAULT_PREPARED_STATEMENT_CACHE_MAX = 256;
@@ -62,21 +63,12 @@ function resolveSqliteClient(db) {
62
63
  return sqliteClient;
63
64
  }
64
65
  function getOrCreatePreparedStatement(cache, sqliteClient, sqlText, cacheMax) {
65
- const cachedStatement = cache.get(sqlText);
66
- if (cachedStatement !== void 0) {
67
- cache.delete(sqlText);
68
- cache.set(sqlText, cachedStatement);
69
- return cachedStatement;
70
- }
71
- const preparedStatement = sqliteClient.prepare(sqlText);
72
- cache.set(sqlText, preparedStatement);
73
- if (cache.size > cacheMax) {
74
- const oldestSqlText = cache.keys().next().value;
75
- if (typeof oldestSqlText === "string") {
76
- cache.delete(oldestSqlText);
77
- }
78
- }
79
- return preparedStatement;
66
+ return chunk7OD2EPN4_cjs.getOrCreateLru(
67
+ cache,
68
+ sqlText,
69
+ cacheMax,
70
+ () => sqliteClient.prepare(sqlText)
71
+ );
80
72
  }
81
73
  async function executeDrizzleQuery(db, query) {
82
74
  return await db.all(query);
@@ -107,7 +99,7 @@ function createSqliteExecutionAdapter(db, statementCacheMaxOrOptions = {}) {
107
99
  supportsCompiledExecution: sqliteClient !== void 0,
108
100
  transactionMode
109
101
  };
110
- const compile = (query) => chunkQ73OWTJY_cjs.compileQueryWithDialect(db, query, "SQLite");
102
+ const compile = (query) => chunk7OD2EPN4_cjs.compileQueryWithDialect(db, query, "SQLite");
111
103
  if (sqliteClient !== void 0) {
112
104
  let executeCompiled2 = function(compiledQuery) {
113
105
  const preparedStatement = getOrCreatePreparedStatement(
@@ -178,10 +170,10 @@ var SQLITE_CHECK_UNIQUE_BATCH_CHUNK_SIZE = Math.max(
178
170
  1,
179
171
  SQLITE_MAX_BIND_PARAMETERS - CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT
180
172
  );
181
- var toNodeRow = chunkQ73OWTJY_cjs.createNodeRowMapper(chunkQ73OWTJY_cjs.SQLITE_ROW_MAPPER_CONFIG);
182
- var toEdgeRow = chunkQ73OWTJY_cjs.createEdgeRowMapper(chunkQ73OWTJY_cjs.SQLITE_ROW_MAPPER_CONFIG);
183
- var toUniqueRow = chunkQ73OWTJY_cjs.createUniqueRowMapper(chunkQ73OWTJY_cjs.SQLITE_ROW_MAPPER_CONFIG);
184
- var toSchemaVersionRow = chunkQ73OWTJY_cjs.createSchemaVersionRowMapper(chunkQ73OWTJY_cjs.SQLITE_ROW_MAPPER_CONFIG);
173
+ var toNodeRow = chunk7OD2EPN4_cjs.createNodeRowMapper(chunk7OD2EPN4_cjs.SQLITE_ROW_MAPPER_CONFIG);
174
+ var toEdgeRow = chunk7OD2EPN4_cjs.createEdgeRowMapper(chunk7OD2EPN4_cjs.SQLITE_ROW_MAPPER_CONFIG);
175
+ var toUniqueRow = chunk7OD2EPN4_cjs.createUniqueRowMapper(chunk7OD2EPN4_cjs.SQLITE_ROW_MAPPER_CONFIG);
176
+ var toSchemaVersionRow = chunk7OD2EPN4_cjs.createSchemaVersionRowMapper(chunk7OD2EPN4_cjs.SQLITE_ROW_MAPPER_CONFIG);
185
177
  var PENDING_FOREVER = new Promise(noop);
186
178
  function pendingForever() {
187
179
  return PENDING_FOREVER;
@@ -248,7 +240,7 @@ function createSqliteOperationBackend(options) {
248
240
  await db.run(query);
249
241
  });
250
242
  }
251
- const commonBackend = chunkQ73OWTJY_cjs.createCommonOperationBackend({
243
+ const commonBackend = chunk7OD2EPN4_cjs.createCommonOperationBackend({
252
244
  batchConfig: {
253
245
  checkUniqueBatchChunkSize: SQLITE_CHECK_UNIQUE_BATCH_CHUNK_SIZE,
254
246
  edgeInsertBatchSize: SQLITE_EDGE_INSERT_BATCH_SIZE,
@@ -261,7 +253,7 @@ function createSqliteOperationBackend(options) {
261
253
  execGet,
262
254
  execRun
263
255
  },
264
- nowIso: chunkQ73OWTJY_cjs.nowIso,
256
+ nowIso: chunk7OD2EPN4_cjs.nowIso,
265
257
  operationStrategy,
266
258
  rowMappers: {
267
259
  toEdgeRow,
@@ -279,9 +271,23 @@ function createSqliteOperationBackend(options) {
279
271
  );
280
272
  }
281
273
  };
274
+ const vectorEmbeddingMethods = options.hasVectorEmbeddings ? {
275
+ async upsertEmbedding(params) {
276
+ const query = operationStrategy.buildUpsertEmbedding(
277
+ params,
278
+ chunk7OD2EPN4_cjs.nowIso()
279
+ );
280
+ await execRun(query);
281
+ },
282
+ async deleteEmbedding(params) {
283
+ const query = operationStrategy.buildDeleteEmbedding(params);
284
+ await execRun(query);
285
+ }
286
+ } : {};
282
287
  const operationBackend = {
283
288
  ...commonBackend,
284
289
  ...executeRawMethod,
290
+ ...vectorEmbeddingMethods,
285
291
  capabilities,
286
292
  dialect: "sqlite",
287
293
  tableNames,
@@ -298,14 +304,14 @@ function createSqliteOperationBackend(options) {
298
304
  ...params.indexParams?.efConstruction === void 0 ? {} : { hnswEfConstruction: params.indexParams.efConstruction },
299
305
  ...params.indexParams?.lists === void 0 ? {} : { ivfflatLists: params.indexParams.lists }
300
306
  };
301
- const result = chunkQ73OWTJY_cjs.createSqliteVectorIndex(indexOptions);
307
+ const result = chunk7OD2EPN4_cjs.createSqliteVectorIndex(indexOptions);
302
308
  if (!result.success) {
303
309
  throw new Error(result.message ?? "Failed to create SQLite vector index");
304
310
  }
305
311
  return Promise.resolve();
306
312
  },
307
313
  dropVectorIndex(params) {
308
- const result = chunkQ73OWTJY_cjs.dropSqliteVectorIndex(
314
+ const result = chunk7OD2EPN4_cjs.dropSqliteVectorIndex(
309
315
  params.graphId,
310
316
  params.nodeKind,
311
317
  params.fieldPath
@@ -317,7 +323,7 @@ function createSqliteOperationBackend(options) {
317
323
  },
318
324
  // === Fulltext Operations ===
319
325
  async upsertFulltext(params) {
320
- const timestamp = chunkQ73OWTJY_cjs.nowIso();
326
+ const timestamp = chunk7OD2EPN4_cjs.nowIso();
321
327
  const statements = operationStrategy.buildUpsertFulltext(
322
328
  params,
323
329
  timestamp
@@ -334,7 +340,7 @@ function createSqliteOperationBackend(options) {
334
340
  },
335
341
  async upsertFulltextBatch(params) {
336
342
  if (params.rows.length === 0) return;
337
- const timestamp = chunkQ73OWTJY_cjs.nowIso();
343
+ const timestamp = chunk7OD2EPN4_cjs.nowIso();
338
344
  const statements = operationStrategy.buildUpsertFulltextBatch(
339
345
  params,
340
346
  timestamp
@@ -374,15 +380,15 @@ function createSqliteOperationBackend(options) {
374
380
  return operationBackend;
375
381
  }
376
382
  function createSqliteBackend(db, options = {}) {
377
- const tables2 = options.tables ?? chunkQ73OWTJY_cjs.tables2;
378
- const fulltextStrategy = options.fulltext ?? chunkFQCQM3KG_cjs.fts5Strategy;
383
+ const tables2 = options.tables ?? chunk7OD2EPN4_cjs.tables2;
384
+ const fulltextStrategy = options.fulltext ?? chunk3JK66E3I_cjs.fts5Strategy;
379
385
  const profileHints = options.executionProfile ?? {};
380
386
  const executionAdapter = createSqliteExecutionAdapter(db, { profileHints });
381
387
  const { isSync, transactionMode } = executionAdapter.profile;
382
- const baseCapabilities = transactionMode === "none" ? { ...chunkQ73OWTJY_cjs.SQLITE_CAPABILITIES, transactions: false } : chunkQ73OWTJY_cjs.SQLITE_CAPABILITIES;
388
+ const baseCapabilities = transactionMode === "none" ? { ...chunkRNUNP5JD_cjs.SQLITE_CAPABILITIES, transactions: false } : chunkRNUNP5JD_cjs.SQLITE_CAPABILITIES;
383
389
  const capabilities = {
384
390
  ...baseCapabilities,
385
- fulltext: chunkFQCQM3KG_cjs.buildFulltextCapabilities(fulltextStrategy)
391
+ fulltext: chunk3JK66E3I_cjs.buildFulltextCapabilities(fulltextStrategy)
386
392
  };
387
393
  const tableNames = {
388
394
  nodes: drizzleOrm.getTableName(tables2.nodes),
@@ -390,11 +396,12 @@ function createSqliteBackend(db, options = {}) {
390
396
  embeddings: drizzleOrm.getTableName(tables2.embeddings),
391
397
  fulltext: tables2.fulltextTableName
392
398
  };
393
- const operationStrategy = chunkQ73OWTJY_cjs.createSqliteOperationStrategy(
399
+ const operationStrategy = chunk7OD2EPN4_cjs.createSqliteOperationStrategy(
394
400
  tables2,
395
401
  fulltextStrategy
396
402
  );
397
403
  const serializedQueue = isSync ? createSerializedExecutionQueue() : void 0;
404
+ const hasVectorEmbeddings = options.hasVectorEmbeddings === true;
398
405
  const operations = createSqliteOperationBackend({
399
406
  capabilities,
400
407
  db,
@@ -402,20 +409,26 @@ function createSqliteBackend(db, options = {}) {
402
409
  operationStrategy,
403
410
  tableNames,
404
411
  fulltextStrategy,
412
+ hasVectorEmbeddings,
405
413
  ...serializedQueue === void 0 ? {} : { serializedQueue }
406
414
  });
407
415
  const backend = {
408
416
  ...operations,
409
417
  async bootstrapTables() {
410
- const statements = chunkQ73OWTJY_cjs.generateSqliteDDL(tables2, fulltextStrategy);
418
+ const statements = chunk7OD2EPN4_cjs.generateSqliteDDL(tables2, fulltextStrategy);
411
419
  for (const statement of statements) {
412
420
  await db.run(drizzleOrm.sql.raw(statement));
413
421
  }
414
422
  },
423
+ async refreshStatistics() {
424
+ await db.run(drizzleOrm.sql`ANALYZE`);
425
+ },
415
426
  async setActiveSchema(graphId, version) {
416
- await backend.transaction(async (txBackend) => {
417
- await txBackend.setActiveSchema(graphId, version);
418
- });
427
+ await chunkRNUNP5JD_cjs.runOptionallyInTransaction(
428
+ backend,
429
+ (target) => target.setActiveSchema(graphId, version),
430
+ operations
431
+ );
419
432
  },
420
433
  async transaction(fn, _options) {
421
434
  if (transactionMode === "none") {
@@ -437,7 +450,8 @@ function createSqliteBackend(db, options = {}) {
437
450
  operationStrategy,
438
451
  profileHints: { isSync: true },
439
452
  tableNames,
440
- fulltextStrategy
453
+ fulltextStrategy,
454
+ hasVectorEmbeddings
441
455
  });
442
456
  db.run(drizzleOrm.sql`BEGIN`);
443
457
  try {
@@ -459,7 +473,8 @@ function createSqliteBackend(db, options = {}) {
459
473
  operationStrategy,
460
474
  profileHints: { isSync },
461
475
  tableNames,
462
- fulltextStrategy
476
+ fulltextStrategy,
477
+ hasVectorEmbeddings
463
478
  });
464
479
  return fn(txBackend);
465
480
  })
@@ -482,10 +497,11 @@ function createTransactionBackend(options) {
482
497
  executionAdapter: txExecutionAdapter,
483
498
  operationStrategy: options.operationStrategy,
484
499
  tableNames: options.tableNames,
485
- fulltextStrategy: options.fulltextStrategy
500
+ fulltextStrategy: options.fulltextStrategy,
501
+ ...options.hasVectorEmbeddings === void 0 ? {} : { hasVectorEmbeddings: options.hasVectorEmbeddings }
486
502
  });
487
503
  }
488
504
 
489
505
  exports.createSqliteBackend = createSqliteBackend;
490
- //# sourceMappingURL=chunk-CQL6FOTT.cjs.map
491
- //# sourceMappingURL=chunk-CQL6FOTT.cjs.map
506
+ //# sourceMappingURL=chunk-O5BRZEIZ.cjs.map
507
+ //# sourceMappingURL=chunk-O5BRZEIZ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/backend/drizzle/execution/sqlite-execution.ts","../src/backend/drizzle/sqlite.ts"],"names":["sql","getOrCreateLru","compileQueryWithDialect","executeCompiled","createNodeRowMapper","SQLITE_ROW_MAPPER_CONFIG","createEdgeRowMapper","createUniqueRowMapper","createSchemaVersionRowMapper","BackendDisposedError","createCommonOperationBackend","nowIso","createSqliteVectorIndex","dropSqliteVectorIndex","tables","fts5Strategy","SQLITE_CAPABILITIES","buildFulltextCapabilities","getTableName","createSqliteOperationStrategy","generateSqliteDDL","runOptionallyInTransaction","ConfigurationError"],"mappings":"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","file":"chunk-O5BRZEIZ.cjs","sourcesContent":["import { type SQL, sql } from \"drizzle-orm\";\nimport { type BaseSQLiteDatabase } from \"drizzle-orm/sqlite-core\";\n\nimport { getOrCreateLru } from \"./lru\";\nimport {\n type CompiledSqlQuery,\n compileQueryWithDialect,\n type PreparedSqlStatement,\n type SqlExecutionAdapter,\n} from \"./types\";\n\nconst DEFAULT_PREPARED_STATEMENT_CACHE_MAX = 256;\n\ntype PreparedAllStatement = Readonly<{\n all: (...params: readonly unknown[]) => readonly unknown[];\n}>;\n\ntype SqliteClientWithPrepare = Readonly<{\n prepare: (sqlText: string) => PreparedAllStatement;\n}>;\n\ntype SqliteClientCarrier = Readonly<{\n $client?: SqliteClientWithPrepare;\n}>;\n\ntype SessionLike = Readonly<{\n constructor?: Readonly<{\n name?: string;\n }>;\n}>;\n\ntype DatabaseWithSession = Readonly<{\n _?: Readonly<{\n session?: SessionLike;\n }>;\n session?: SessionLike;\n}>;\n\n/**\n * Controls how the backend manages SQLite transactions.\n *\n * - `\"sql\"`: TypeGraph issues BEGIN / COMMIT / ROLLBACK SQL directly.\n * Default for sync drivers (better-sqlite3, bun:sqlite).\n * - `\"drizzle\"`: Delegates to Drizzle's `db.transaction()` method.\n * Default for async drivers (libsql, sql.js).\n * - `\"none\"`: Transactions disabled.\n * Default for Cloudflare D1 and Durable Objects.\n */\nexport type SqliteTransactionMode = \"sql\" | \"drizzle\" | \"none\";\n\nexport type SqliteExecutionProfileHints = Readonly<{\n isSync?: boolean;\n transactionMode?: SqliteTransactionMode;\n}>;\n\ntype SqliteExecutionAdapterOptions = Readonly<{\n profileHints?: SqliteExecutionProfileHints;\n statementCacheMax?: number;\n}>;\n\nexport type AnySqliteDatabase = BaseSQLiteDatabase<\"sync\" | \"async\", unknown>;\n\nexport type SqliteExecutionProfile = Readonly<{\n isSync: boolean;\n supportsCompiledExecution: boolean;\n transactionMode: SqliteTransactionMode;\n}>;\n\nexport type SqliteExecutionAdapter = Readonly<\n SqlExecutionAdapter & {\n clearStatementCache: () => void;\n profile: SqliteExecutionProfile;\n }\n>;\n\nfunction getSessionName(db: AnySqliteDatabase): string | undefined {\n const databaseWithSession = db as DatabaseWithSession;\n const primarySessionName = databaseWithSession.session?.constructor?.name;\n if (primarySessionName !== undefined) {\n return primarySessionName;\n }\n\n return databaseWithSession._?.session?.constructor?.name;\n}\n\nfunction isD1DatabaseBySessionName(db: AnySqliteDatabase): boolean {\n return getSessionName(db) === \"SQLiteD1Session\";\n}\n\nfunction isDurableObjectBySessionName(db: AnySqliteDatabase): boolean {\n const sessionName = getSessionName(db);\n return sessionName === \"SQLiteDurableObjectSession\";\n}\n\nfunction isSyncDatabaseBySessionName(db: AnySqliteDatabase): boolean {\n const sessionName = getSessionName(db);\n return (\n sessionName === \"BetterSQLiteSession\" || sessionName === \"BunSQLiteSession\"\n );\n}\n\nfunction detectSyncProfile(\n db: AnySqliteDatabase,\n profileHints: SqliteExecutionProfileHints,\n): boolean {\n if (profileHints.isSync !== undefined) {\n return profileHints.isSync;\n }\n\n const sessionName = getSessionName(db);\n if (sessionName === \"BetterSQLiteSession\" || sessionName === \"BunSQLiteSession\") {\n return true;\n }\n if (sessionName === \"SQLiteD1Session\") {\n return false;\n }\n\n try {\n const probeResult = db.get(sql`SELECT 1 AS __typegraph_sync_probe__`);\n return !(probeResult instanceof Promise);\n } catch {\n return isSyncDatabaseBySessionName(db);\n }\n}\n\nfunction detectTransactionMode(\n db: AnySqliteDatabase,\n profileHints: SqliteExecutionProfileHints,\n isSync: boolean,\n): SqliteTransactionMode {\n if (profileHints.transactionMode !== undefined) {\n return profileHints.transactionMode;\n }\n // D1 and Durable Object SQLite do not support raw BEGIN/COMMIT SQL\n // through Drizzle's db.run(). Default to \"none\" because async\n // transaction callbacks are not reliably supported across sync\n // Drizzle drivers. Users can opt in to \"drizzle\" mode explicitly if\n // their runtime's db.transaction() handles async callbacks.\n if (isD1DatabaseBySessionName(db) || isDurableObjectBySessionName(db)) {\n return \"none\";\n }\n if (isSync) return \"sql\";\n return \"drizzle\";\n}\n\nfunction resolveSqliteClient(\n db: AnySqliteDatabase,\n): SqliteClientWithPrepare | undefined {\n const databaseWithClient = db as SqliteClientCarrier;\n const sqliteClient = databaseWithClient.$client;\n if (sqliteClient?.prepare === undefined) {\n return undefined;\n }\n return sqliteClient;\n}\n\nfunction getOrCreatePreparedStatement(\n cache: Map<string, PreparedAllStatement>,\n sqliteClient: SqliteClientWithPrepare,\n sqlText: string,\n cacheMax: number,\n): PreparedAllStatement {\n return getOrCreateLru(cache, sqlText, cacheMax, () =>\n sqliteClient.prepare(sqlText),\n );\n}\n\n// Uses unconditional `await` because Drizzle returns SQLiteRaw thenables\n// that fail `instanceof Promise` checks (drizzle-team/drizzle-orm#2275).\nasync function executeDrizzleQuery<TRow>(\n db: AnySqliteDatabase,\n query: SQL,\n): Promise<readonly TRow[]> {\n return (await db.all(query));\n}\n\nfunction createPreparedStatementExecutor(\n sqliteClient: SqliteClientWithPrepare,\n cache: Map<string, PreparedAllStatement>,\n sqlText: string,\n cacheMax: number,\n): PreparedSqlStatement {\n return {\n execute<TRow>(params: readonly unknown[]): Promise<readonly TRow[]> {\n const preparedStatement = getOrCreatePreparedStatement(\n cache,\n sqliteClient,\n sqlText,\n cacheMax,\n );\n const rows = preparedStatement.all(...params);\n return Promise.resolve(rows as readonly TRow[]);\n },\n };\n}\n\nexport function createSqliteExecutionAdapter(\n db: AnySqliteDatabase,\n statementCacheMaxOrOptions: number | SqliteExecutionAdapterOptions = {},\n): SqliteExecutionAdapter {\n const options: SqliteExecutionAdapterOptions =\n typeof statementCacheMaxOrOptions === \"number\"\n ? { statementCacheMax: statementCacheMaxOrOptions }\n : statementCacheMaxOrOptions;\n const statementCacheMax =\n options.statementCacheMax ?? DEFAULT_PREPARED_STATEMENT_CACHE_MAX;\n const profileHints = options.profileHints ?? {};\n\n const isSync = detectSyncProfile(db, profileHints);\n const sqliteClient = isSync ? resolveSqliteClient(db) : undefined;\n const transactionMode = detectTransactionMode(db, profileHints, isSync);\n\n const profile: SqliteExecutionProfile = {\n isSync,\n supportsCompiledExecution: sqliteClient !== undefined,\n transactionMode,\n };\n\n const compile = (query: SQL): CompiledSqlQuery =>\n compileQueryWithDialect(db, query, \"SQLite\");\n\n if (sqliteClient !== undefined) {\n const client = sqliteClient;\n const statementCache = new Map<string, PreparedAllStatement>();\n\n function executeCompiled<TRow>(\n compiledQuery: CompiledSqlQuery,\n ): Promise<readonly TRow[]> {\n const preparedStatement = getOrCreatePreparedStatement(\n statementCache,\n client,\n compiledQuery.sql,\n statementCacheMax,\n );\n const rows = preparedStatement.all(...compiledQuery.params);\n return Promise.resolve(rows as readonly TRow[]);\n }\n\n return {\n clearStatementCache() {\n statementCache.clear();\n },\n compile,\n execute<TRow>(query: SQL): Promise<readonly TRow[]> {\n const compiledQuery = compile(query);\n return executeCompiled<TRow>(compiledQuery);\n },\n executeCompiled,\n prepare(sqlText: string): PreparedSqlStatement {\n return createPreparedStatementExecutor(\n client,\n statementCache,\n sqlText,\n statementCacheMax,\n );\n },\n profile,\n };\n }\n\n return {\n clearStatementCache() {\n // No-op: no statement cache in async/D1 mode\n },\n compile,\n execute<TRow>(query: SQL): Promise<readonly TRow[]> {\n return executeDrizzleQuery<TRow>(db, query);\n },\n profile,\n };\n}\n","/**\n * SQLite backend adapter for TypeGraph.\n *\n * Works with any Drizzle SQLite database instance:\n * - better-sqlite3\n * - libsql / Turso\n * - Cloudflare D1\n * - bun:sqlite\n * - sql.js\n *\n * @example\n * ```typescript\n * import { drizzle } from \"drizzle-orm/better-sqlite3\";\n * import Database from \"better-sqlite3\";\n * import { createSqliteBackend, tables } from \"@nicia-ai/typegraph/sqlite\";\n *\n * const sqlite = new Database(\"app.db\");\n * const db = drizzle(sqlite);\n * const backend = createSqliteBackend(db, { tables });\n * ```\n */\nimport { getTableName, type SQL, sql } from \"drizzle-orm\";\n\nimport { BackendDisposedError, ConfigurationError } from \"../../errors\";\nimport type { SqlTableNames } from \"../../query/compiler/schema\";\nimport {\n buildFulltextCapabilities,\n fts5Strategy,\n type FulltextStrategy,\n} from \"../../query/dialect/fulltext-strategy\";\nimport {\n type BackendCapabilities,\n type CreateVectorIndexParams,\n type DeleteEmbeddingParams,\n type DeleteFulltextBatchParams,\n type DeleteFulltextParams,\n type DropVectorIndexParams,\n type FulltextSearchParams,\n type FulltextSearchResult,\n type GraphBackend,\n runOptionallyInTransaction,\n SQLITE_CAPABILITIES,\n type TransactionBackend,\n type TransactionOptions,\n type UpsertEmbeddingParams,\n type UpsertFulltextBatchParams,\n type UpsertFulltextParams,\n} from \"../types\";\nimport {\n type AnySqliteDatabase,\n createSqliteExecutionAdapter,\n type SqliteExecutionAdapter,\n type SqliteExecutionProfileHints,\n} from \"./execution/sqlite-execution\";\nexport type { SqliteTransactionMode } from \"./execution/sqlite-execution\";\nimport { generateSqliteDDL } from \"./ddl\";\nimport { createCommonOperationBackend } from \"./operation-backend-core\";\nimport { createSqliteOperationStrategy } from \"./operations/strategy\";\nimport {\n createEdgeRowMapper,\n createNodeRowMapper,\n createSchemaVersionRowMapper,\n createUniqueRowMapper,\n nowIso,\n SQLITE_ROW_MAPPER_CONFIG,\n} from \"./row-mappers\";\nimport { type SqliteTables, tables as defaultTables } from \"./schema/sqlite\";\nimport {\n createSqliteVectorIndex,\n dropSqliteVectorIndex,\n type VectorIndexOptions,\n} from \"./vector-index\";\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Options for creating a SQLite backend.\n */\nexport type SqliteBackendOptions = Readonly<{\n /**\n * Custom table definitions. Use createSqliteTables() to customize table names.\n * Defaults to standard TypeGraph table names.\n */\n tables?: SqliteTables;\n /**\n * Optional execution profile hints used to avoid runtime driver reflection.\n * Set `transactionMode: \"none\"` for drivers that do not support transactions\n * (e.g. Cloudflare D1, Durable Objects).\n */\n executionProfile?: SqliteExecutionProfileHints;\n /**\n * Fulltext strategy override. Defaults to `fts5Strategy` (SQLite's\n * built-in FTS5 virtual table). Most users should leave this alone.\n */\n fulltext?: FulltextStrategy;\n /**\n * Set to `true` when sqlite-vec has been loaded on the connection.\n * Enables vector embedding persistence via `upsertEmbedding` /\n * `deleteEmbedding`, which the store's embedding-sync path relies on\n * whenever node schemas declare `embedding()` fields. When omitted the\n * backend does not expose those methods and embedding values pass\n * through writes without being indexed — matching existing behavior\n * for backends without sqlite-vec. `createLocalSqliteBackend` sets\n * this automatically when it loads the extension.\n */\n hasVectorEmbeddings?: boolean;\n}>;\n\nconst SQLITE_MAX_BIND_PARAMETERS = 999;\nconst NODE_INSERT_PARAM_COUNT = 9;\nconst EDGE_INSERT_PARAM_COUNT = 12;\nconst SQLITE_NODE_INSERT_BATCH_SIZE = Math.max(\n 1,\n Math.floor(SQLITE_MAX_BIND_PARAMETERS / NODE_INSERT_PARAM_COUNT),\n);\nconst SQLITE_EDGE_INSERT_BATCH_SIZE = Math.max(\n 1,\n Math.floor(SQLITE_MAX_BIND_PARAMETERS / EDGE_INSERT_PARAM_COUNT),\n);\nconst SQLITE_GET_NODES_ID_CHUNK_SIZE = Math.max(\n 1,\n SQLITE_MAX_BIND_PARAMETERS - 2,\n);\nconst SQLITE_GET_EDGES_ID_CHUNK_SIZE = Math.max(\n 1,\n SQLITE_MAX_BIND_PARAMETERS - 1,\n);\nconst CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT = 3;\nconst SQLITE_CHECK_UNIQUE_BATCH_CHUNK_SIZE = Math.max(\n 1,\n SQLITE_MAX_BIND_PARAMETERS - CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT,\n);\n\ntype SerializedExecutionQueue = Readonly<{\n dispose: () => void;\n runExclusive: <T>(task: () => Promise<T>) => Promise<T>;\n}>;\n\n// ============================================================\n// Utilities\n// ============================================================\n\nconst toNodeRow = createNodeRowMapper(SQLITE_ROW_MAPPER_CONFIG);\nconst toEdgeRow = createEdgeRowMapper(SQLITE_ROW_MAPPER_CONFIG);\nconst toUniqueRow = createUniqueRowMapper(SQLITE_ROW_MAPPER_CONFIG);\nconst toSchemaVersionRow = createSchemaVersionRowMapper(SQLITE_ROW_MAPPER_CONFIG);\n\n/** A shared promise that never settles — used to absorb post-dispose work. */\nconst PENDING_FOREVER: Promise<never> = new Promise<never>(noop);\n\nfunction pendingForever<T>(): Promise<T> {\n return PENDING_FOREVER;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop(): void {}\n\nfunction createSerializedExecutionQueue(): SerializedExecutionQueue {\n let tail: Promise<unknown> = Promise.resolve();\n let disposed = false;\n\n function isDisposed(): boolean {\n return disposed;\n }\n\n return {\n dispose() {\n disposed = true;\n },\n\n runExclusive<T>(task: () => Promise<T>): Promise<T> {\n if (isDisposed()) return Promise.reject(new BackendDisposedError());\n\n // When disposed, runTask returns a never-settling promise so that no\n // rejection propagates through the 7+ async wrappers between this\n // queue and the store-level caller. A rejection here would become an\n // unhandled rejection if the caller abandoned the promise during\n // teardown — and JavaScript offers no way to `.catch()` a rejection\n // at the bottom of a chain without every async wrapper above it also\n // creating an independently-unhandled rejected promise.\n //\n // The tradeoff: an active caller whose operation was queued before\n // dispose() will see a permanently-pending promise rather than a\n // BackendDisposedError. Post-dispose submissions (the check above)\n // still reject immediately since the caller actively holds that\n // promise.\n const runTask = async (): Promise<T> => {\n if (isDisposed()) return pendingForever<T>();\n try {\n return await task();\n } catch (error) {\n if (isDisposed()) return pendingForever<T>();\n throw error;\n }\n };\n const result = tail.then(runTask, runTask);\n tail = result.then(\n () => 0,\n () => 0,\n );\n return result;\n },\n };\n}\n\nfunction runWithSerializedQueue<T>(\n queue: SerializedExecutionQueue | undefined,\n task: () => Promise<T>,\n): Promise<T> {\n if (queue === undefined) return task();\n return queue.runExclusive(task);\n}\n\n// ============================================================\n// Backend Factory\n// ============================================================\n\n/**\n * Creates a TypeGraph backend for SQLite databases.\n *\n * Works with any Drizzle SQLite instance regardless of the underlying driver.\n *\n * @param db - A Drizzle SQLite database instance\n * @param options - Backend configuration\n * @returns A GraphBackend implementation\n */\ntype CreateSqliteOperationBackendOptions = Readonly<{\n capabilities: GraphBackend[\"capabilities\"];\n db: AnySqliteDatabase;\n executionAdapter: SqliteExecutionAdapter;\n operationStrategy: ReturnType<typeof createSqliteOperationStrategy>;\n serializedQueue?: SerializedExecutionQueue;\n tableNames: SqlTableNames;\n fulltextStrategy: FulltextStrategy;\n /** Wire up upsertEmbedding / deleteEmbedding. See transaction options for details. */\n hasVectorEmbeddings?: boolean;\n}>;\n\ntype CreateSqliteTransactionBackendOptions = Readonly<{\n capabilities: GraphBackend[\"capabilities\"];\n db: AnySqliteDatabase;\n executionAdapter?: SqliteExecutionAdapter;\n operationStrategy: ReturnType<typeof createSqliteOperationStrategy>;\n profileHints: SqliteExecutionProfileHints;\n tableNames: SqlTableNames;\n fulltextStrategy: FulltextStrategy;\n /**\n * When true, the backend exposes upsertEmbedding / deleteEmbedding —\n * detected by probing `vec_f32(...)` on the connection at boot so the\n * store's embedding-sync path persists vectors to the embeddings table.\n */\n hasVectorEmbeddings?: boolean;\n}>;\n\nfunction createSqliteOperationBackend(\n options: CreateSqliteOperationBackendOptions,\n): TransactionBackend {\n const {\n capabilities,\n db,\n executionAdapter,\n operationStrategy,\n serializedQueue,\n tableNames,\n fulltextStrategy,\n } = options;\n\n function execGet<T>(query: SQL): Promise<T | undefined> {\n // Workaround: drizzle-team/drizzle-orm#1049 — db.get() crashes with\n // the libsql driver when no rows match (normalizeRow receives undefined).\n // Using db.all()[0] avoids the crash for all drivers.\n //\n // All three exec helpers use `await` unconditionally rather than\n // `instanceof Promise` because Drizzle returns SQLiteRaw thenables\n // that are NOT Promise instances (drizzle-team/drizzle-orm#2275).\n return runWithSerializedQueue(serializedQueue, async () => {\n const rows = await db.all(query);\n return (rows as T[])[0];\n });\n }\n\n function execAll<T>(query: SQL): Promise<T[]> {\n return runWithSerializedQueue(serializedQueue, async () => {\n return await db.all(query);\n });\n }\n\n function execRun(query: SQL): Promise<void> {\n return runWithSerializedQueue(serializedQueue, async () => {\n await db.run(query);\n });\n }\n\n const commonBackend = createCommonOperationBackend({\n batchConfig: {\n checkUniqueBatchChunkSize: SQLITE_CHECK_UNIQUE_BATCH_CHUNK_SIZE,\n edgeInsertBatchSize: SQLITE_EDGE_INSERT_BATCH_SIZE,\n getEdgesChunkSize: SQLITE_GET_EDGES_ID_CHUNK_SIZE,\n getNodesChunkSize: SQLITE_GET_NODES_ID_CHUNK_SIZE,\n nodeInsertBatchSize: SQLITE_NODE_INSERT_BATCH_SIZE,\n },\n execution: {\n execAll,\n execGet,\n execRun,\n },\n nowIso,\n operationStrategy,\n rowMappers: {\n toEdgeRow,\n toNodeRow,\n toSchemaVersionRow,\n toUniqueRow,\n },\n });\n\n const executeCompiled = executionAdapter.executeCompiled;\n const executeRawMethod: Pick<TransactionBackend, \"executeRaw\"> =\n executeCompiled === undefined ?\n {}\n : {\n executeRaw<T>(\n sqlText: string,\n params: readonly unknown[],\n ): Promise<readonly T[]> {\n return runWithSerializedQueue(serializedQueue, async () =>\n executeCompiled<T>({ params, sql: sqlText }),\n );\n },\n };\n\n const vectorEmbeddingMethods =\n options.hasVectorEmbeddings\n ? {\n async upsertEmbedding(params: UpsertEmbeddingParams): Promise<void> {\n const query = operationStrategy.buildUpsertEmbedding(\n params,\n nowIso(),\n );\n await execRun(query);\n },\n async deleteEmbedding(params: DeleteEmbeddingParams): Promise<void> {\n const query = operationStrategy.buildDeleteEmbedding(params);\n await execRun(query);\n },\n }\n : {};\n\n const operationBackend: TransactionBackend = {\n ...commonBackend,\n ...executeRawMethod,\n ...vectorEmbeddingMethods,\n capabilities,\n dialect: \"sqlite\",\n tableNames,\n fulltextStrategy,\n\n createVectorIndex(params: CreateVectorIndexParams): Promise<void> {\n const indexOptions: VectorIndexOptions = {\n graphId: params.graphId,\n nodeKind: params.nodeKind,\n fieldPath: params.fieldPath,\n dimensions: params.dimensions,\n indexType: params.indexType,\n metric: params.metric,\n ...(params.indexParams?.m === undefined\n ? {}\n : { hnswM: params.indexParams.m }),\n ...(params.indexParams?.efConstruction === undefined\n ? {}\n : { hnswEfConstruction: params.indexParams.efConstruction }),\n ...(params.indexParams?.lists === undefined\n ? {}\n : { ivfflatLists: params.indexParams.lists }),\n };\n\n const result = createSqliteVectorIndex(indexOptions);\n\n if (!result.success) {\n throw new Error(result.message ?? \"Failed to create SQLite vector index\");\n }\n return Promise.resolve();\n },\n\n dropVectorIndex(params: DropVectorIndexParams): Promise<void> {\n const result = dropSqliteVectorIndex(\n params.graphId,\n params.nodeKind,\n params.fieldPath,\n );\n if (!result.success) {\n throw new Error(result.message ?? \"Failed to drop SQLite vector index\");\n }\n return Promise.resolve();\n },\n\n // === Fulltext Operations ===\n\n async upsertFulltext(params: UpsertFulltextParams): Promise<void> {\n const timestamp = nowIso();\n const statements = operationStrategy.buildUpsertFulltext(\n params,\n timestamp,\n );\n for (const stmt of statements) {\n await execRun(stmt);\n }\n },\n\n async deleteFulltext(params: DeleteFulltextParams): Promise<void> {\n const statements = operationStrategy.buildDeleteFulltext(params);\n for (const stmt of statements) {\n await execRun(stmt);\n }\n },\n\n async upsertFulltextBatch(\n params: UpsertFulltextBatchParams,\n ): Promise<void> {\n if (params.rows.length === 0) return;\n const timestamp = nowIso();\n const statements = operationStrategy.buildUpsertFulltextBatch(\n params,\n timestamp,\n );\n for (const stmt of statements) {\n await execRun(stmt);\n }\n },\n\n async deleteFulltextBatch(\n params: DeleteFulltextBatchParams,\n ): Promise<void> {\n if (params.nodeIds.length === 0) return;\n const statements = operationStrategy.buildDeleteFulltextBatch(params);\n for (const stmt of statements) {\n await execRun(stmt);\n }\n },\n\n async fulltextSearch(\n params: FulltextSearchParams,\n ): Promise<readonly FulltextSearchResult[]> {\n const query = operationStrategy.buildFulltextSearch(params);\n const rows = await execAll<{\n node_id: string;\n score: number;\n snippet: string | null;\n }>(query);\n return rows.map((row, index) => ({\n nodeId: row.node_id,\n score: row.score,\n rank: index + 1,\n ...(row.snippet === null ? {} : { snippet: row.snippet }),\n }));\n },\n\n // === Query Execution ===\n\n async execute<T>(query: SQL): Promise<readonly T[]> {\n return runWithSerializedQueue(serializedQueue, async () =>\n executionAdapter.execute<T>(query),\n );\n },\n\n compileSql(query: SQL): Readonly<{ sql: string; params: readonly unknown[] }> {\n return executionAdapter.compile(query);\n },\n };\n\n return operationBackend;\n}\n\nexport function createSqliteBackend(\n db: AnySqliteDatabase,\n options: SqliteBackendOptions = {},\n): GraphBackend {\n const tables = options.tables ?? defaultTables;\n const fulltextStrategy = options.fulltext ?? fts5Strategy;\n const profileHints = options.executionProfile ?? {};\n const executionAdapter = createSqliteExecutionAdapter(db, { profileHints });\n const { isSync, transactionMode } = executionAdapter.profile;\n const baseCapabilities: BackendCapabilities =\n transactionMode === \"none\"\n ? { ...SQLITE_CAPABILITIES, transactions: false }\n : SQLITE_CAPABILITIES;\n const capabilities: BackendCapabilities = {\n ...baseCapabilities,\n fulltext: buildFulltextCapabilities(fulltextStrategy),\n };\n\n const tableNames: SqlTableNames = {\n nodes: getTableName(tables.nodes),\n edges: getTableName(tables.edges),\n embeddings: getTableName(tables.embeddings),\n fulltext: tables.fulltextTableName,\n };\n const operationStrategy = createSqliteOperationStrategy(\n tables,\n fulltextStrategy,\n );\n const serializedQueue = isSync ? createSerializedExecutionQueue() : undefined;\n // Explicit opt-in: wire upsertEmbedding / deleteEmbedding only when\n // the caller confirms sqlite-vec is loaded. Probing synchronously\n // isn't portable across drizzle SQLite drivers (sync vs async), so\n // the gate lives with the caller that loaded the extension.\n const hasVectorEmbeddings = options.hasVectorEmbeddings === true;\n const operations = createSqliteOperationBackend({\n capabilities,\n db,\n executionAdapter,\n operationStrategy,\n tableNames,\n fulltextStrategy,\n hasVectorEmbeddings,\n ...(serializedQueue === undefined ? {} : { serializedQueue }),\n });\n\n const backend: GraphBackend = {\n ...operations,\n\n async bootstrapTables(): Promise<void> {\n const statements = generateSqliteDDL(tables, fulltextStrategy);\n for (const statement of statements) {\n await db.run(sql.raw(statement));\n }\n },\n\n async refreshStatistics(): Promise<void> {\n // `ANALYZE` populates `sqlite_stat1`. With no stat table, the\n // planner falls back to heuristics that, at least for FTS5\n // virtual-table queries and multi-column index selection, can be\n // an order of magnitude slower. Running it explicitly makes the\n // planner data-driven.\n await db.run(sql`ANALYZE`);\n },\n\n async setActiveSchema(graphId: string, version: number): Promise<void> {\n await runOptionallyInTransaction(\n backend,\n (target) => target.setActiveSchema(graphId, version),\n operations,\n );\n },\n\n async transaction<T>(\n fn: (tx: TransactionBackend) => Promise<T>,\n _options?: TransactionOptions,\n ): Promise<T> {\n if (transactionMode === \"none\") {\n throw new ConfigurationError(\n \"This SQLite backend does not support atomic transactions. \" +\n \"Operations within a transaction are not rolled back on failure. \" +\n \"Use backend.capabilities.transactions to check for transaction support, \" +\n \"or use individual operations with manual error handling.\",\n {\n backend: \"sqlite\",\n capability: \"transactions\",\n supportsTransactions: false,\n },\n );\n }\n\n if (transactionMode === \"sql\") {\n return runWithSerializedQueue(serializedQueue, async () => {\n const txBackend = createTransactionBackend({\n capabilities,\n db,\n executionAdapter,\n operationStrategy,\n profileHints: { isSync: true },\n tableNames,\n fulltextStrategy,\n hasVectorEmbeddings,\n });\n db.run(sql`BEGIN`);\n\n try {\n const result = await fn(txBackend);\n db.run(sql`COMMIT`);\n return result;\n } catch (error) {\n db.run(sql`ROLLBACK`);\n throw error;\n }\n });\n }\n\n // transactionMode === \"drizzle\"\n return runWithSerializedQueue(serializedQueue, async () =>\n db.transaction(async (tx) => {\n const txBackend = createTransactionBackend({\n capabilities,\n db: tx,\n operationStrategy,\n profileHints: { isSync },\n tableNames,\n fulltextStrategy,\n hasVectorEmbeddings,\n });\n return fn(txBackend);\n }) as Promise<T>,\n );\n },\n\n close(): Promise<void> {\n serializedQueue?.dispose();\n return Promise.resolve();\n },\n };\n\n return backend;\n}\n\nfunction createTransactionBackend(\n options: CreateSqliteTransactionBackendOptions,\n): TransactionBackend {\n const txExecutionAdapter =\n options.executionAdapter ??\n createSqliteExecutionAdapter(options.db, {\n profileHints: options.profileHints,\n });\n\n return createSqliteOperationBackend({\n capabilities: options.capabilities,\n db: options.db,\n executionAdapter: txExecutionAdapter,\n operationStrategy: options.operationStrategy,\n tableNames: options.tableNames,\n fulltextStrategy: options.fulltextStrategy,\n ...(options.hasVectorEmbeddings === undefined\n ? {}\n : { hasVectorEmbeddings: options.hasVectorEmbeddings }),\n });\n}\n\n// Re-export schema utilities\nexport type { SqliteTableNames,SqliteTables } from \"./schema/sqlite\";\nexport { createSqliteTables, tables } from \"./schema/sqlite\";\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkFQCQM3KG_cjs = require('./chunk-FQCQM3KG.cjs');
3
+ var chunk3JK66E3I_cjs = require('./chunk-3JK66E3I.cjs');
4
4
  var chunkUVZHTBZ5_cjs = require('./chunk-UVZHTBZ5.cjs');
5
5
  var drizzleOrm = require('drizzle-orm');
6
6
  var casing = require('drizzle-orm/casing');
@@ -8,7 +8,7 @@ var pgCore = require('drizzle-orm/pg-core');
8
8
  var sqliteCore = require('drizzle-orm/sqlite-core');
9
9
 
10
10
  function compileNodeIndexKeys(index, dialect, propsColumn, systemColumn) {
11
- const adapter = chunkFQCQM3KG_cjs.getDialect(dialect);
11
+ const adapter = chunk3JK66E3I_cjs.getDialect(dialect);
12
12
  const keys = [];
13
13
  for (const column of getNodeScopeColumns(index.scope)) {
14
14
  keys.push(systemColumn(column));
@@ -31,7 +31,7 @@ function compileNodeIndexKeys(index, dialect, propsColumn, systemColumn) {
31
31
  return { keys };
32
32
  }
33
33
  function compileEdgeIndexKeys(index, dialect, propsColumn, systemColumn) {
34
- const adapter = chunkFQCQM3KG_cjs.getDialect(dialect);
34
+ const adapter = chunk3JK66E3I_cjs.getDialect(dialect);
35
35
  const keys = [];
36
36
  for (const column of getEdgeScopeColumns(index.scope, index.direction)) {
37
37
  keys.push(systemColumn(column));
@@ -153,7 +153,7 @@ function compileIndexWhereOperand(ctx, operand) {
153
153
  if (operand.__type === "index_operand_system") {
154
154
  return ctx.systemColumn(operand.column);
155
155
  }
156
- const adapter = chunkFQCQM3KG_cjs.getDialect(ctx.dialect);
156
+ const adapter = chunk3JK66E3I_cjs.getDialect(ctx.dialect);
157
157
  const pointer = chunkUVZHTBZ5_cjs.jsonPointer([operand.field]);
158
158
  switch (operand.valueType) {
159
159
  case "number": {
@@ -187,7 +187,7 @@ function compileIndexWhereLiteral(dialect, literal) {
187
187
  return drizzleOrm.sql.raw(literal.value.toString());
188
188
  }
189
189
  case "boolean": {
190
- return chunkFQCQM3KG_cjs.getDialect(dialect).booleanLiteral(literal.value);
190
+ return chunk3JK66E3I_cjs.getDialect(dialect).booleanLiteral(literal.value);
191
191
  }
192
192
  case "array":
193
193
  case "object":
@@ -225,7 +225,7 @@ function escapeStringLiteral(value) {
225
225
 
226
226
  // src/indexes/ddl.ts
227
227
  function generateIndexDDL(index, dialect, options = {}) {
228
- if (index.__type === chunkFQCQM3KG_cjs.NODE_INDEX_TYPE_MARKER) {
228
+ if (index.__type === chunk3JK66E3I_cjs.NODE_INDEX_TYPE_MARKER) {
229
229
  return generateNodeIndexDDL(index, dialect, options);
230
230
  }
231
231
  return generateEdgeIndexDDL(index, dialect, options);
@@ -242,7 +242,7 @@ function generateTableIndexDDL(index, dialect, tableName, options) {
242
242
  const ifNotExists = options.ifNotExists ?? true;
243
243
  const propsColumn = drizzleOrm.sql.raw('"props"');
244
244
  const systemColumn = (column) => drizzleOrm.sql.raw(quoteIdentifier(column));
245
- const keys = index.__type === chunkFQCQM3KG_cjs.NODE_INDEX_TYPE_MARKER ? compileNodeIndexKeys(index, dialect, propsColumn, systemColumn).keys : compileEdgeIndexKeys(index, dialect, propsColumn, systemColumn).keys;
245
+ const keys = index.__type === chunk3JK66E3I_cjs.NODE_INDEX_TYPE_MARKER ? compileNodeIndexKeys(index, dialect, propsColumn, systemColumn).keys : compileEdgeIndexKeys(index, dialect, propsColumn, systemColumn).keys;
246
246
  const whereSql = index.where ? sqlToInlineString(
247
247
  compileIndexWhere(
248
248
  {
@@ -293,7 +293,7 @@ function inlineParam(value, dialect) {
293
293
  return value.toString();
294
294
  }
295
295
  if (typeof value === "boolean") {
296
- return chunkFQCQM3KG_cjs.getDialect(dialect).booleanLiteralString(value);
296
+ return chunk3JK66E3I_cjs.getDialect(dialect).booleanLiteralString(value);
297
297
  }
298
298
  if (typeof value === "bigint") {
299
299
  return value.toString();
@@ -342,7 +342,7 @@ function defineNodeIndex(node, config) {
342
342
  coveringFields
343
343
  });
344
344
  return {
345
- __type: chunkFQCQM3KG_cjs.NODE_INDEX_TYPE_MARKER,
345
+ __type: chunk3JK66E3I_cjs.NODE_INDEX_TYPE_MARKER,
346
346
  node,
347
347
  nodeKind: node.kind,
348
348
  fields,
@@ -392,7 +392,7 @@ function defineEdgeIndex(edge, config) {
392
392
  coveringFields
393
393
  });
394
394
  return {
395
- __type: chunkFQCQM3KG_cjs.EDGE_INDEX_TYPE_MARKER,
395
+ __type: chunk3JK66E3I_cjs.EDGE_INDEX_TYPE_MARKER,
396
396
  edge,
397
397
  edgeKind: edge.kind,
398
398
  fields,
@@ -570,7 +570,7 @@ function createSystemColumnMapForNode() {
570
570
  ["kind", { column: "kind", valueType: "string" }],
571
571
  ["id", { column: "id", valueType: "string" }]
572
572
  ];
573
- for (const key of chunkFQCQM3KG_cjs.NODE_META_KEYS) {
573
+ for (const key of chunk3JK66E3I_cjs.NODE_META_KEYS) {
574
574
  if (key === "version") {
575
575
  entries.push([key, { column: "version", valueType: "number" }]);
576
576
  continue;
@@ -589,7 +589,7 @@ function createSystemColumnMapForEdge() {
589
589
  ["toKind", { column: "to_kind", valueType: "string" }],
590
590
  ["toId", { column: "to_id", valueType: "string" }]
591
591
  ];
592
- for (const key of chunkFQCQM3KG_cjs.EDGE_META_KEYS) {
592
+ for (const key of chunk3JK66E3I_cjs.EDGE_META_KEYS) {
593
593
  entries.push([key, { column: toSystemColumnName(key), valueType: "date" }]);
594
594
  }
595
595
  return new Map(entries);
@@ -755,7 +755,7 @@ function resolveEdgeFieldTypeInfoOrThrow(edgeKind, pointer, schemaIntrospector)
755
755
  return resolved;
756
756
  }
757
757
  function generateDefaultIndexName(parts) {
758
- const hash = chunkFQCQM3KG_cjs.fnv1aBase36(
758
+ const hash = chunk3JK66E3I_cjs.fnv1aBase36(
759
759
  JSON.stringify({
760
760
  kind: parts.kind,
761
761
  kindName: parts.kindName,
@@ -779,14 +779,14 @@ function generateDefaultIndexName(parts) {
779
779
  hash
780
780
  ].filter((part) => part !== void 0);
781
781
  const joined = nameParts.join("_");
782
- return joined.length <= chunkFQCQM3KG_cjs.MAX_PG_IDENTIFIER_LENGTH ? joined : `${joined.slice(0, chunkFQCQM3KG_cjs.TRUNCATED_IDENTIFIER_MAX_LENGTH)}_${hash}`;
782
+ return joined.length <= chunk3JK66E3I_cjs.MAX_PG_IDENTIFIER_LENGTH ? joined : `${joined.slice(0, chunk3JK66E3I_cjs.TRUNCATED_IDENTIFIER_MAX_LENGTH)}_${hash}`;
783
783
  }
784
784
  function sanitizeIdentifierComponent(value) {
785
- return value.toLowerCase().replaceAll(/[^a-z0-9_]+/g, "_").replaceAll(/^_+|_+$/g, "").slice(0, chunkFQCQM3KG_cjs.IDENTIFIER_COMPONENT_MAX_LENGTH);
785
+ return value.toLowerCase().replaceAll(/[^a-z0-9_]+/g, "_").replaceAll(/^_+|_+$/g, "").slice(0, chunk3JK66E3I_cjs.IDENTIFIER_COMPONENT_MAX_LENGTH);
786
786
  }
787
787
  function buildPostgresNodeIndexBuilders(table, indexes) {
788
788
  const nodeIndexes = indexes.filter(
789
- (index) => index.__type === chunkFQCQM3KG_cjs.NODE_INDEX_TYPE_MARKER
789
+ (index) => index.__type === chunk3JK66E3I_cjs.NODE_INDEX_TYPE_MARKER
790
790
  );
791
791
  return nodeIndexes.map((index) => {
792
792
  const propsColumn = drizzleOrm.sql`${table.props}`;
@@ -813,7 +813,7 @@ function buildPostgresNodeIndexBuilders(table, indexes) {
813
813
  }
814
814
  function buildPostgresEdgeIndexBuilders(table, indexes) {
815
815
  const edgeIndexes = indexes.filter(
816
- (index) => index.__type === chunkFQCQM3KG_cjs.EDGE_INDEX_TYPE_MARKER
816
+ (index) => index.__type === chunk3JK66E3I_cjs.EDGE_INDEX_TYPE_MARKER
817
817
  );
818
818
  return edgeIndexes.map((index) => {
819
819
  const propsColumn = drizzleOrm.sql`${table.props}`;
@@ -920,7 +920,7 @@ function getPostgresEdgeSystemColumn(table, column) {
920
920
  }
921
921
  function buildSqliteNodeIndexBuilders(table, indexes) {
922
922
  const nodeIndexes = indexes.filter(
923
- (index) => index.__type === chunkFQCQM3KG_cjs.NODE_INDEX_TYPE_MARKER
923
+ (index) => index.__type === chunk3JK66E3I_cjs.NODE_INDEX_TYPE_MARKER
924
924
  );
925
925
  return nodeIndexes.map((index) => {
926
926
  const propsColumn = drizzleOrm.sql`${table.props}`;
@@ -947,7 +947,7 @@ function buildSqliteNodeIndexBuilders(table, indexes) {
947
947
  }
948
948
  function buildSqliteEdgeIndexBuilders(table, indexes) {
949
949
  const edgeIndexes = indexes.filter(
950
- (index) => index.__type === chunkFQCQM3KG_cjs.EDGE_INDEX_TYPE_MARKER
950
+ (index) => index.__type === chunk3JK66E3I_cjs.EDGE_INDEX_TYPE_MARKER
951
951
  );
952
952
  return edgeIndexes.map((index) => {
953
953
  const propsColumn = drizzleOrm.sql`${table.props}`;
@@ -1060,7 +1060,7 @@ function assertNonEmpty2(values, label) {
1060
1060
 
1061
1061
  // src/indexes/profiler.ts
1062
1062
  function toDeclaredIndex(index) {
1063
- if (index.__type === chunkFQCQM3KG_cjs.NODE_INDEX_TYPE_MARKER) {
1063
+ if (index.__type === chunk3JK66E3I_cjs.NODE_INDEX_TYPE_MARKER) {
1064
1064
  return toDeclaredNodeIndex(index);
1065
1065
  }
1066
1066
  return toDeclaredEdgeIndex(index);
@@ -1127,5 +1127,5 @@ exports.notWhere = notWhere;
1127
1127
  exports.orWhere = orWhere;
1128
1128
  exports.toDeclaredIndex = toDeclaredIndex;
1129
1129
  exports.toDeclaredIndexes = toDeclaredIndexes;
1130
- //# sourceMappingURL=chunk-2X7P7AD5.cjs.map
1131
- //# sourceMappingURL=chunk-2X7P7AD5.cjs.map
1130
+ //# sourceMappingURL=chunk-PEE4EWXZ.cjs.map
1131
+ //# sourceMappingURL=chunk-PEE4EWXZ.cjs.map