@nicia-ai/typegraph 0.22.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 (73) 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 +165 -48
  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 +138 -21
  8. package/dist/backend/postgres/index.js.map +1 -1
  9. package/dist/backend/sqlite/index.cjs +13 -12
  10. package/dist/backend/sqlite/index.d.cts +6 -6
  11. package/dist/backend/sqlite/index.d.ts +6 -6
  12. package/dist/backend/sqlite/index.js +3 -2
  13. package/dist/backend/sqlite/libsql.cjs +6 -5
  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 +3 -2
  18. package/dist/backend/sqlite/libsql.js.map +1 -1
  19. package/dist/backend/sqlite/local.cjs +7 -6
  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 +3 -2
  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-SCXOGKLD.cjs → chunk-7OD2EPN4.cjs} +20 -42
  28. package/dist/chunk-7OD2EPN4.cjs.map +1 -0
  29. package/dist/chunk-7TU5EWQ7.js +47 -0
  30. package/dist/chunk-7TU5EWQ7.js.map +1 -0
  31. package/dist/{chunk-NSLTDXVH.js → chunk-EP2KSSD5.js} +18 -21
  32. package/dist/chunk-EP2KSSD5.js.map +1 -0
  33. package/dist/{chunk-5ZMMHUWR.js → chunk-H2CAJ4ZV.js} +20 -40
  34. package/dist/chunk-H2CAJ4ZV.js.map +1 -0
  35. package/dist/chunk-HTGDWIDE.cjs +89 -0
  36. package/dist/chunk-HTGDWIDE.cjs.map +1 -0
  37. package/dist/{chunk-GUYI6VAS.cjs → chunk-O5BRZEIZ.cjs} +34 -37
  38. package/dist/chunk-O5BRZEIZ.cjs.map +1 -0
  39. package/dist/chunk-RNUNP5JD.cjs +52 -0
  40. package/dist/chunk-RNUNP5JD.cjs.map +1 -0
  41. package/dist/{ddl-BqkTShcR.d.ts → ddl-1tFIvt9V.d.ts} +3 -3
  42. package/dist/{ddl-Dk1NDN3M.d.cts → ddl-B_H8JM-E.d.cts} +3 -3
  43. package/dist/index.cjs +133 -145
  44. package/dist/index.cjs.map +1 -1
  45. package/dist/index.d.cts +8 -8
  46. package/dist/index.d.ts +8 -8
  47. package/dist/index.js +94 -106
  48. package/dist/index.js.map +1 -1
  49. package/dist/indexes/index.d.cts +5 -5
  50. package/dist/indexes/index.d.ts +5 -5
  51. package/dist/interchange/index.d.cts +4 -4
  52. package/dist/interchange/index.d.ts +4 -4
  53. package/dist/{manager-BPK-2PUI.d.cts → manager-Vkz28eAC.d.cts} +1 -1
  54. package/dist/{manager-0jVZtiE8.d.ts → manager-nIhmttD-.d.ts} +1 -1
  55. package/dist/profiler/index.d.cts +6 -6
  56. package/dist/profiler/index.d.ts +6 -6
  57. package/dist/schema/index.d.cts +4 -4
  58. package/dist/schema/index.d.ts +4 -4
  59. package/dist/{sqlite-D1rrwcir.d.cts → sqlite-D0aceIe0.d.cts} +1 -1
  60. package/dist/{sqlite-W3rmJMlc.d.ts → sqlite-SUxbZqfy.d.ts} +1 -1
  61. package/dist/{store-C0q13mtJ.d.ts → store-CpvwTMxV.d.cts} +58 -8
  62. package/dist/{store-2QW2SIRk.d.cts → store-U3i2tUch.d.ts} +58 -8
  63. package/dist/{types-IMQCuser.d.ts → types-C-zfYDJB.d.ts} +2 -2
  64. package/dist/{types-vgjar7Ch.d.cts → types-CQx4iW5Y.d.cts} +2 -2
  65. package/dist/{types-CQF88McG.d.ts → types-Qk2l3IkQ.d.cts} +20 -1
  66. package/dist/{types-CQF88McG.d.cts → types-Qk2l3IkQ.d.ts} +20 -1
  67. package/dist/{types-CglvhPKz.d.ts → types-qYFZ9SqD.d.ts} +1 -1
  68. package/dist/{types-D23slCOA.d.cts → types-yH4_p0XB.d.cts} +1 -1
  69. package/package.json +15 -1
  70. package/dist/chunk-5ZMMHUWR.js.map +0 -1
  71. package/dist/chunk-GUYI6VAS.cjs.map +0 -1
  72. package/dist/chunk-NSLTDXVH.js.map +0 -1
  73. package/dist/chunk-SCXOGKLD.cjs.map +0 -1
package/dist/index.cjs CHANGED
@@ -1,7 +1,9 @@
1
1
  'use strict';
2
2
 
3
+ var chunkHTGDWIDE_cjs = require('./chunk-HTGDWIDE.cjs');
3
4
  var chunkHRNQ3DVJ_cjs = require('./chunk-HRNQ3DVJ.cjs');
4
5
  var chunkWRWVWKQL_cjs = require('./chunk-WRWVWKQL.cjs');
6
+ var chunkRNUNP5JD_cjs = require('./chunk-RNUNP5JD.cjs');
5
7
  var chunkO5PST6TB_cjs = require('./chunk-O5PST6TB.cjs');
6
8
  var chunk3JK66E3I_cjs = require('./chunk-3JK66E3I.cjs');
7
9
  var chunkUVZHTBZ5_cjs = require('./chunk-UVZHTBZ5.cjs');
@@ -1941,7 +1943,7 @@ function validateTableName(name, label) {
1941
1943
  );
1942
1944
  }
1943
1945
  }
1944
- function quoteIdentifier(name) {
1946
+ function quoteIdentifier2(name) {
1945
1947
  return `"${name.replaceAll('"', '""')}"`;
1946
1948
  }
1947
1949
  function createSqlSchema(names = {}) {
@@ -1952,10 +1954,10 @@ function createSqlSchema(names = {}) {
1952
1954
  validateTableName(tables.fulltext, "fulltext");
1953
1955
  return {
1954
1956
  tables,
1955
- nodesTable: drizzleOrm.sql.raw(quoteIdentifier(tables.nodes)),
1956
- edgesTable: drizzleOrm.sql.raw(quoteIdentifier(tables.edges)),
1957
- embeddingsTable: drizzleOrm.sql.raw(quoteIdentifier(tables.embeddings)),
1958
- fulltextTable: drizzleOrm.sql.raw(quoteIdentifier(tables.fulltext))
1957
+ nodesTable: drizzleOrm.sql.raw(quoteIdentifier2(tables.nodes)),
1958
+ edgesTable: drizzleOrm.sql.raw(quoteIdentifier2(tables.edges)),
1959
+ embeddingsTable: drizzleOrm.sql.raw(quoteIdentifier2(tables.embeddings)),
1960
+ fulltextTable: drizzleOrm.sql.raw(quoteIdentifier2(tables.fulltext))
1959
1961
  };
1960
1962
  }
1961
1963
  var DEFAULT_SQL_SCHEMA = createSqlSchema();
@@ -1993,76 +1995,6 @@ function compileTypedJsonExtract(input) {
1993
1995
  }
1994
1996
  }
1995
1997
  }
1996
- var NODE_COLUMNS = [
1997
- "id",
1998
- "kind",
1999
- "props",
2000
- "version",
2001
- "valid_from",
2002
- "valid_to",
2003
- "created_at",
2004
- "updated_at",
2005
- "deleted_at"
2006
- ];
2007
- var EDGE_COLUMNS = [
2008
- "id",
2009
- "kind",
2010
- "from_id",
2011
- "to_id",
2012
- "props",
2013
- "valid_from",
2014
- "valid_to",
2015
- "created_at",
2016
- "updated_at",
2017
- "deleted_at"
2018
- ];
2019
- var EMPTY_REQUIRED_COLUMNS = /* @__PURE__ */ new Set();
2020
- function quoteIdentifier2(identifier) {
2021
- return drizzleOrm.sql.raw(`"${identifier.replaceAll('"', '""')}"`);
2022
- }
2023
- function shouldProjectColumn(requiredColumns, column, alwaysRequiredColumns) {
2024
- if (alwaysRequiredColumns?.has(column)) return true;
2025
- if (requiredColumns === void 0) return true;
2026
- return requiredColumns.has(column);
2027
- }
2028
- function addRequiredColumn(requiredColumnsByAlias, alias, column) {
2029
- const existing = requiredColumnsByAlias.get(alias);
2030
- if (existing) {
2031
- existing.add(column);
2032
- return;
2033
- }
2034
- requiredColumnsByAlias.set(alias, /* @__PURE__ */ new Set([column]));
2035
- }
2036
- function markFieldRefAsRequired(requiredColumnsByAlias, field2) {
2037
- const column = field2.path[0];
2038
- if (column === void 0) return;
2039
- addRequiredColumn(requiredColumnsByAlias, field2.alias, column);
2040
- }
2041
- function mapSelectiveSystemFieldToColumn(field2) {
2042
- if (field2 === "fromId") return "from_id";
2043
- if (field2 === "toId") return "to_id";
2044
- if (field2.startsWith("meta.")) {
2045
- return field2.slice(5).replaceAll(/([A-Z])/g, "_$1").toLowerCase();
2046
- }
2047
- return field2;
2048
- }
2049
- function markSelectiveFieldAsRequired(requiredColumnsByAlias, field2) {
2050
- if (field2.isSystemField) {
2051
- addRequiredColumn(
2052
- requiredColumnsByAlias,
2053
- field2.alias,
2054
- mapSelectiveSystemFieldToColumn(field2.field)
2055
- );
2056
- return;
2057
- }
2058
- addRequiredColumn(requiredColumnsByAlias, field2.alias, "props");
2059
- }
2060
- function isIdFieldRef(field2) {
2061
- return field2.path.length === 1 && field2.path[0] === "id" && field2.jsonPointer === void 0;
2062
- }
2063
- function isAggregateExpr(source) {
2064
- return "__type" in source && source.__type === "aggregate";
2065
- }
2066
1998
 
2067
1999
  // src/query/compiler/emitter/standard-builders.ts
2068
2000
  function compileColumnReference(tableAlias, column) {
@@ -2072,7 +2004,7 @@ function compileColumnReference(tableAlias, column) {
2072
2004
  return drizzleOrm.sql`${drizzleOrm.sql.raw(tableAlias)}.${drizzleOrm.sql.raw(column)}`;
2073
2005
  }
2074
2006
  function qualifyColumn(owner, name) {
2075
- return drizzleOrm.sql`${quoteIdentifier2(owner)}.${quoteIdentifier2(name)}`;
2007
+ return drizzleOrm.sql`${chunkHTGDWIDE_cjs.quoteIdentifier(owner)}.${chunkHTGDWIDE_cjs.quoteIdentifier(name)}`;
2076
2008
  }
2077
2009
  var SCOPED_RELEVANCE_NODES_ALIAS = "scoped_relevance_nodes";
2078
2010
  function buildScopedNodeIdsSubquery(nodeAlias) {
@@ -2082,20 +2014,20 @@ function buildScopedNodeIdsSubquery(nodeAlias) {
2082
2014
  SELECT DISTINCT
2083
2015
  ${qualifyColumn(cteAlias, `${nodeAlias}_id`)} AS node_id,
2084
2016
  ${qualifyColumn(cteAlias, `${nodeAlias}_kind`)} AS node_kind
2085
- FROM ${quoteIdentifier2(cteAlias)}
2017
+ FROM ${chunkHTGDWIDE_cjs.quoteIdentifier(cteAlias)}
2086
2018
  ) AS ${drizzleOrm.sql.raw(SCOPED_RELEVANCE_NODES_ALIAS)}
2087
2019
  `;
2088
2020
  }
2089
2021
  function compileNodeSelectColumns(tableAlias, alias, requiredColumns) {
2090
- return NODE_COLUMNS.filter(
2091
- (column) => column === "id" || column === "kind" || shouldProjectColumn(requiredColumns, column)
2022
+ return chunkHTGDWIDE_cjs.NODE_COLUMNS.filter(
2023
+ (column) => column === "id" || column === "kind" || chunkHTGDWIDE_cjs.shouldProjectColumn(requiredColumns, column)
2092
2024
  ).map(
2093
2025
  (column) => drizzleOrm.sql`${compileColumnReference(tableAlias, column)} AS ${drizzleOrm.sql.raw(`${alias}_${column}`)}`
2094
2026
  );
2095
2027
  }
2096
2028
  function compileEdgeSelectColumns(tableAlias, alias, requiredColumns) {
2097
- return EDGE_COLUMNS.filter(
2098
- (column) => shouldProjectColumn(requiredColumns, column)
2029
+ return chunkHTGDWIDE_cjs.EDGE_COLUMNS.filter(
2030
+ (column) => chunkHTGDWIDE_cjs.shouldProjectColumn(requiredColumns, column)
2099
2031
  ).map(
2100
2032
  (column) => drizzleOrm.sql`${compileColumnReference(tableAlias, column)} AS ${drizzleOrm.sql.raw(`${alias}_${column}`)}`
2101
2033
  );
@@ -2118,7 +2050,7 @@ function buildStandardStartCte(input) {
2118
2050
  temporalFilter,
2119
2051
  ...predicateClauses
2120
2052
  ];
2121
- const effectiveRequiredColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(alias) ?? EMPTY_REQUIRED_COLUMNS : void 0;
2053
+ const effectiveRequiredColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(alias) ?? chunkHTGDWIDE_cjs.EMPTY_REQUIRED_COLUMNS : void 0;
2122
2054
  const limitClause = input.limitOffset === void 0 ? drizzleOrm.sql`` : input.limitOffset.offset === void 0 ? drizzleOrm.sql`
2123
2055
  LIMIT ${input.limitOffset.limit}
2124
2056
  ` : drizzleOrm.sql`
@@ -2184,8 +2116,8 @@ function buildStandardTraversalCte(input) {
2184
2116
  const previousAlias = traversal.joinFromAlias;
2185
2117
  const edgeAlias = traversal.edgeAlias;
2186
2118
  const nodeAlias = traversal.nodeAlias;
2187
- const requiredNodeColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(nodeAlias) ?? EMPTY_REQUIRED_COLUMNS : void 0;
2188
- const requiredEdgeColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(edgeAlias) ?? EMPTY_REQUIRED_COLUMNS : void 0;
2119
+ const requiredNodeColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(nodeAlias) ?? chunkHTGDWIDE_cjs.EMPTY_REQUIRED_COLUMNS : void 0;
2120
+ const requiredEdgeColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(edgeAlias) ?? chunkHTGDWIDE_cjs.EMPTY_REQUIRED_COLUMNS : void 0;
2189
2121
  const previousRowColumns = carryForwardPreviousColumns ? [drizzleOrm.sql`cte_${drizzleOrm.sql.raw(previousAlias)}.*`] : [
2190
2122
  drizzleOrm.sql`cte_${drizzleOrm.sql.raw(previousAlias)}.${drizzleOrm.sql.raw(previousAlias)}_id AS ${drizzleOrm.sql.raw(previousAlias)}_id`,
2191
2123
  drizzleOrm.sql`cte_${drizzleOrm.sql.raw(previousAlias)}.${drizzleOrm.sql.raw(previousAlias)}_kind AS ${drizzleOrm.sql.raw(previousAlias)}_kind`
@@ -2317,7 +2249,7 @@ function compileAggregateExprFromSource(expr, dialect) {
2317
2249
  }
2318
2250
  }
2319
2251
  function compileProjectedSource(field2, dialect) {
2320
- if (isAggregateExpr(field2.source)) {
2252
+ if (chunkHTGDWIDE_cjs.isAggregateExpr(field2.source)) {
2321
2253
  return compileAggregateExprFromSource(field2.source, dialect);
2322
2254
  }
2323
2255
  const cteAlias = field2.cteAlias ?? `cte_${field2.source.alias}`;
@@ -2344,7 +2276,7 @@ function buildStandardProjection(input) {
2344
2276
  }
2345
2277
  const projectedFields = fields.map((field2) => {
2346
2278
  const source = compileProjectedSource(field2, dialect);
2347
- return drizzleOrm.sql`${source} AS ${quoteIdentifier2(field2.outputName)}`;
2279
+ return drizzleOrm.sql`${source} AS ${chunkHTGDWIDE_cjs.quoteIdentifier(field2.outputName)}`;
2348
2280
  });
2349
2281
  return drizzleOrm.sql.join(projectedFields, drizzleOrm.sql`, `);
2350
2282
  }
@@ -2363,8 +2295,8 @@ function compileSelectiveProjection(fields, dialect, ast, collapsedTraversalCteA
2363
2295
  const columns = fields.map((field2) => {
2364
2296
  const cteAlias = collapsedTraversalCteAlias ?? aliasToCte.get(field2.alias) ?? `cte_${field2.alias}`;
2365
2297
  if (field2.isSystemField) {
2366
- const dbColumn = mapSelectiveSystemFieldToColumn(field2.field);
2367
- return drizzleOrm.sql`${drizzleOrm.sql.raw(cteAlias)}.${drizzleOrm.sql.raw(`${field2.alias}_${dbColumn}`)} AS ${quoteIdentifier2(field2.outputName)}`;
2298
+ const dbColumn = chunkHTGDWIDE_cjs.mapSelectiveSystemFieldToColumn(field2.field);
2299
+ return drizzleOrm.sql`${drizzleOrm.sql.raw(cteAlias)}.${drizzleOrm.sql.raw(`${field2.alias}_${dbColumn}`)} AS ${chunkHTGDWIDE_cjs.quoteIdentifier(field2.outputName)}`;
2368
2300
  }
2369
2301
  const propsColumn = `${field2.alias}_props`;
2370
2302
  const column = drizzleOrm.sql`${drizzleOrm.sql.raw(cteAlias)}.${drizzleOrm.sql.raw(propsColumn)}`;
@@ -2375,7 +2307,7 @@ function compileSelectiveProjection(fields, dialect, ast, collapsedTraversalCteA
2375
2307
  pointer,
2376
2308
  valueType: field2.valueType
2377
2309
  });
2378
- return drizzleOrm.sql`${extracted} AS ${quoteIdentifier2(field2.outputName)}`;
2310
+ return drizzleOrm.sql`${extracted} AS ${chunkHTGDWIDE_cjs.quoteIdentifier(field2.outputName)}`;
2379
2311
  });
2380
2312
  return drizzleOrm.sql.join(columns, drizzleOrm.sql`, `);
2381
2313
  }
@@ -3445,8 +3377,8 @@ function compileRecursiveCte(ast, traversal, graphId, ctx, requiredColumnsByAlia
3445
3377
  if (previousNodeKinds.length > 1) {
3446
3378
  recursiveJoinRequiredColumns.add("kind");
3447
3379
  }
3448
- const requiredStartColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(startAlias) ?? EMPTY_REQUIRED_COLUMNS : void 0;
3449
- const requiredNodeColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(nodeAlias) ?? EMPTY_REQUIRED_COLUMNS : void 0;
3380
+ const requiredStartColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(startAlias) ?? chunkHTGDWIDE_cjs.EMPTY_REQUIRED_COLUMNS : void 0;
3381
+ const requiredNodeColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(nodeAlias) ?? chunkHTGDWIDE_cjs.EMPTY_REQUIRED_COLUMNS : void 0;
3450
3382
  const startColumnsFromBase = compileNodeSelectColumnsFromTable(
3451
3383
  "n0",
3452
3384
  startAlias,
@@ -3642,30 +3574,30 @@ function collectRequiredColumnsByAlias(ast, traversal) {
3642
3574
  const previousNodeKinds = [
3643
3575
  .../* @__PURE__ */ new Set([...ast.start.kinds, ...traversal.nodeKinds])
3644
3576
  ];
3645
- addRequiredColumn(requiredColumnsByAlias, traversal.nodeAlias, "id");
3577
+ chunkHTGDWIDE_cjs.addRequiredColumn(requiredColumnsByAlias, traversal.nodeAlias, "id");
3646
3578
  if (previousNodeKinds.length > 1) {
3647
- addRequiredColumn(requiredColumnsByAlias, traversal.nodeAlias, "kind");
3579
+ chunkHTGDWIDE_cjs.addRequiredColumn(requiredColumnsByAlias, traversal.nodeAlias, "kind");
3648
3580
  }
3649
3581
  for (const field2 of selectiveFields) {
3650
- markSelectiveFieldAsRequired(requiredColumnsByAlias, field2);
3582
+ chunkHTGDWIDE_cjs.markSelectiveFieldAsRequired(requiredColumnsByAlias, field2);
3651
3583
  }
3652
3584
  if (ast.orderBy) {
3653
3585
  for (const orderSpec of ast.orderBy) {
3654
- markFieldRefAsRequired(requiredColumnsByAlias, orderSpec.field);
3586
+ chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, orderSpec.field);
3655
3587
  }
3656
3588
  }
3657
3589
  return requiredColumnsByAlias;
3658
3590
  }
3659
3591
  function compileNodeSelectColumnsFromTable(tableAlias, alias, requiredColumns, alwaysRequiredColumns) {
3660
- return NODE_COLUMNS.filter(
3661
- (column) => shouldProjectColumn(requiredColumns, column, alwaysRequiredColumns)
3592
+ return chunkHTGDWIDE_cjs.NODE_COLUMNS.filter(
3593
+ (column) => chunkHTGDWIDE_cjs.shouldProjectColumn(requiredColumns, column, alwaysRequiredColumns)
3662
3594
  ).map(
3663
3595
  (column) => drizzleOrm.sql`${drizzleOrm.sql.raw(tableAlias)}.${drizzleOrm.sql.raw(column)} AS ${drizzleOrm.sql.raw(`${alias}_${column}`)}`
3664
3596
  );
3665
3597
  }
3666
3598
  function compileNodeSelectColumnsFromRecursiveRow(alias, requiredColumns, alwaysRequiredColumns) {
3667
- return NODE_COLUMNS.filter(
3668
- (column) => shouldProjectColumn(requiredColumns, column, alwaysRequiredColumns)
3599
+ return chunkHTGDWIDE_cjs.NODE_COLUMNS.filter(
3600
+ (column) => chunkHTGDWIDE_cjs.shouldProjectColumn(requiredColumns, column, alwaysRequiredColumns)
3669
3601
  ).map((column) => {
3670
3602
  const projected = `${alias}_${column}`;
3671
3603
  return drizzleOrm.sql`r.${drizzleOrm.sql.raw(projected)} AS ${drizzleOrm.sql.raw(projected)}`;
@@ -3706,10 +3638,10 @@ function compileRecursiveProjection(ast, traversal, dialect) {
3706
3638
  drizzleOrm.sql`${drizzleOrm.sql.raw(nodeAlias)}_deleted_at`
3707
3639
  ];
3708
3640
  if (vl.depthAlias !== void 0) {
3709
- fields.push(drizzleOrm.sql`depth AS ${quoteIdentifier2(vl.depthAlias)}`);
3641
+ fields.push(drizzleOrm.sql`depth AS ${chunkHTGDWIDE_cjs.quoteIdentifier(vl.depthAlias)}`);
3710
3642
  }
3711
3643
  if (vl.pathAlias !== void 0) {
3712
- fields.push(drizzleOrm.sql`path AS ${quoteIdentifier2(vl.pathAlias)}`);
3644
+ fields.push(drizzleOrm.sql`path AS ${chunkHTGDWIDE_cjs.quoteIdentifier(vl.pathAlias)}`);
3713
3645
  }
3714
3646
  return drizzleOrm.sql.join(fields, drizzleOrm.sql`, `);
3715
3647
  }
@@ -3722,8 +3654,8 @@ function compileRecursiveSelectiveProjection(fields, ast, traversal, dialect) {
3722
3654
  );
3723
3655
  }
3724
3656
  if (field2.isSystemField) {
3725
- const dbColumn = mapSelectiveSystemFieldToColumn(field2.field);
3726
- return drizzleOrm.sql`${drizzleOrm.sql.raw(`${field2.alias}_${dbColumn}`)} AS ${quoteIdentifier2(field2.outputName)}`;
3657
+ const dbColumn = chunkHTGDWIDE_cjs.mapSelectiveSystemFieldToColumn(field2.field);
3658
+ return drizzleOrm.sql`${drizzleOrm.sql.raw(`${field2.alias}_${dbColumn}`)} AS ${chunkHTGDWIDE_cjs.quoteIdentifier(field2.outputName)}`;
3727
3659
  }
3728
3660
  const column = drizzleOrm.sql.raw(`${field2.alias}_props`);
3729
3661
  const extracted = compileTypedJsonExtract({
@@ -3732,14 +3664,14 @@ function compileRecursiveSelectiveProjection(fields, ast, traversal, dialect) {
3732
3664
  pointer: chunkUVZHTBZ5_cjs.jsonPointer([field2.field]),
3733
3665
  valueType: field2.valueType
3734
3666
  });
3735
- return drizzleOrm.sql`${extracted} AS ${quoteIdentifier2(field2.outputName)}`;
3667
+ return drizzleOrm.sql`${extracted} AS ${chunkHTGDWIDE_cjs.quoteIdentifier(field2.outputName)}`;
3736
3668
  });
3737
3669
  const vl = traversal.variableLength;
3738
3670
  if (vl.depthAlias !== void 0) {
3739
- columns.push(drizzleOrm.sql`depth AS ${quoteIdentifier2(vl.depthAlias)}`);
3671
+ columns.push(drizzleOrm.sql`depth AS ${chunkHTGDWIDE_cjs.quoteIdentifier(vl.depthAlias)}`);
3740
3672
  }
3741
3673
  if (vl.pathAlias !== void 0) {
3742
- columns.push(drizzleOrm.sql`path AS ${quoteIdentifier2(vl.pathAlias)}`);
3674
+ columns.push(drizzleOrm.sql`path AS ${chunkHTGDWIDE_cjs.quoteIdentifier(vl.pathAlias)}`);
3743
3675
  }
3744
3676
  return drizzleOrm.sql.join(columns, drizzleOrm.sql`, `);
3745
3677
  }
@@ -4254,7 +4186,7 @@ function buildProjectedPropertyColumns(alias, plan, dialect) {
4254
4186
  valueType: fieldPlan.typeInfo?.valueType
4255
4187
  });
4256
4188
  columns.push(
4257
- drizzleOrm.sql`CASE WHEN ${drizzleOrm.sql.raw(alias)}.kind = ${kind} THEN ${extracted} ELSE NULL END AS ${quoteIdentifier2(fieldPlan.outputName)}`
4189
+ drizzleOrm.sql`CASE WHEN ${drizzleOrm.sql.raw(alias)}.kind = ${kind} THEN ${extracted} ELSE NULL END AS ${chunkHTGDWIDE_cjs.quoteIdentifier(fieldPlan.outputName)}`
4258
4190
  );
4259
4191
  }
4260
4192
  }
@@ -4839,7 +4771,7 @@ function isColumnPruningEnabled(ast) {
4839
4771
  function markPredicateFieldsAsRequired(requiredColumnsByAlias, expression) {
4840
4772
  switch (expression.__type) {
4841
4773
  case "comparison": {
4842
- markFieldRefAsRequired(requiredColumnsByAlias, expression.left);
4774
+ chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, expression.left);
4843
4775
  return;
4844
4776
  }
4845
4777
  case "string_op":
@@ -4847,7 +4779,7 @@ function markPredicateFieldsAsRequired(requiredColumnsByAlias, expression) {
4847
4779
  case "between":
4848
4780
  case "array_op":
4849
4781
  case "object_op": {
4850
- markFieldRefAsRequired(requiredColumnsByAlias, expression.field);
4782
+ chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, expression.field);
4851
4783
  return;
4852
4784
  }
4853
4785
  case "and":
@@ -4865,22 +4797,22 @@ function markPredicateFieldsAsRequired(requiredColumnsByAlias, expression) {
4865
4797
  return;
4866
4798
  }
4867
4799
  case "aggregate_comparison": {
4868
- markFieldRefAsRequired(
4800
+ chunkHTGDWIDE_cjs.markFieldRefAsRequired(
4869
4801
  requiredColumnsByAlias,
4870
4802
  expression.aggregate.field
4871
4803
  );
4872
4804
  return;
4873
4805
  }
4874
4806
  case "in_subquery": {
4875
- markFieldRefAsRequired(requiredColumnsByAlias, expression.field);
4807
+ chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, expression.field);
4876
4808
  return;
4877
4809
  }
4878
4810
  case "vector_similarity": {
4879
- markFieldRefAsRequired(requiredColumnsByAlias, expression.field);
4811
+ chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, expression.field);
4880
4812
  return;
4881
4813
  }
4882
4814
  case "fulltext_match": {
4883
- markFieldRefAsRequired(requiredColumnsByAlias, expression.field);
4815
+ chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, expression.field);
4884
4816
  return;
4885
4817
  }
4886
4818
  case "exists": {
@@ -4890,33 +4822,33 @@ function markPredicateFieldsAsRequired(requiredColumnsByAlias, expression) {
4890
4822
  }
4891
4823
  function collectRequiredColumnsByAlias2(ast) {
4892
4824
  const requiredColumnsByAlias = /* @__PURE__ */ new Map();
4893
- addRequiredColumn(requiredColumnsByAlias, ast.start.alias, "id");
4825
+ chunkHTGDWIDE_cjs.addRequiredColumn(requiredColumnsByAlias, ast.start.alias, "id");
4894
4826
  for (const traversal of ast.traversals) {
4895
- addRequiredColumn(requiredColumnsByAlias, traversal.nodeAlias, "id");
4827
+ chunkHTGDWIDE_cjs.addRequiredColumn(requiredColumnsByAlias, traversal.nodeAlias, "id");
4896
4828
  }
4897
4829
  if (ast.selectiveFields && ast.selectiveFields.length > 0) {
4898
4830
  for (const field2 of ast.selectiveFields) {
4899
- markSelectiveFieldAsRequired(requiredColumnsByAlias, field2);
4831
+ chunkHTGDWIDE_cjs.markSelectiveFieldAsRequired(requiredColumnsByAlias, field2);
4900
4832
  }
4901
4833
  } else {
4902
4834
  for (const projectedField of ast.projection.fields) {
4903
4835
  const source = projectedField.source;
4904
4836
  if (source.__type === "field_ref") {
4905
- markFieldRefAsRequired(requiredColumnsByAlias, source);
4837
+ chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, source);
4906
4838
  } else {
4907
- addRequiredColumn(requiredColumnsByAlias, source.field.alias, "id");
4908
- markFieldRefAsRequired(requiredColumnsByAlias, source.field);
4839
+ chunkHTGDWIDE_cjs.addRequiredColumn(requiredColumnsByAlias, source.field.alias, "id");
4840
+ chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, source.field);
4909
4841
  }
4910
4842
  }
4911
4843
  }
4912
4844
  if (ast.groupBy) {
4913
4845
  for (const field2 of ast.groupBy.fields) {
4914
- markFieldRefAsRequired(requiredColumnsByAlias, field2);
4846
+ chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, field2);
4915
4847
  }
4916
4848
  }
4917
4849
  if (ast.orderBy) {
4918
4850
  for (const orderSpec of ast.orderBy) {
4919
- markFieldRefAsRequired(requiredColumnsByAlias, orderSpec.field);
4851
+ chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, orderSpec.field);
4920
4852
  }
4921
4853
  }
4922
4854
  if (ast.having) {
@@ -4930,7 +4862,7 @@ function collectRequiredColumnsByAlias2(ast) {
4930
4862
  function hasIdEqualityPredicate(expression, alias) {
4931
4863
  switch (expression.__type) {
4932
4864
  case "comparison": {
4933
- return expression.op === "eq" && expression.left.alias === alias && isIdFieldRef(expression.left);
4865
+ return expression.op === "eq" && expression.left.alias === alias && chunkHTGDWIDE_cjs.isIdFieldRef(expression.left);
4934
4866
  }
4935
4867
  case "and": {
4936
4868
  return expression.predicates.some(
@@ -5282,7 +5214,7 @@ function resolveCountAggregateFastPath(ast) {
5282
5214
  return void 0;
5283
5215
  }
5284
5216
  const groupField = ast.groupBy.fields[0];
5285
- if (groupField.alias !== ast.start.alias || !isIdFieldRef(groupField)) {
5217
+ if (groupField.alias !== ast.start.alias || !chunkHTGDWIDE_cjs.isIdFieldRef(groupField)) {
5286
5218
  return void 0;
5287
5219
  }
5288
5220
  let requiresNodeCount = false;
@@ -5291,13 +5223,13 @@ function resolveCountAggregateFastPath(ast) {
5291
5223
  let requiresEdgeCountDistinct = false;
5292
5224
  for (const projectedField of ast.projection.fields) {
5293
5225
  const source = projectedField.source;
5294
- if (!isAggregateExpr(source)) {
5226
+ if (!chunkHTGDWIDE_cjs.isAggregateExpr(source)) {
5295
5227
  if (source.alias !== ast.start.alias) {
5296
5228
  return void 0;
5297
5229
  }
5298
5230
  continue;
5299
5231
  }
5300
- if (!isIdFieldRef(source.field)) {
5232
+ if (!chunkHTGDWIDE_cjs.isIdFieldRef(source.field)) {
5301
5233
  return void 0;
5302
5234
  }
5303
5235
  const isNodeTarget = source.field.alias === traversal.nodeAlias;
@@ -5462,19 +5394,19 @@ function compileCountAggregateFastPath(ast, graphId, ctx, logicalPlan, requiredC
5462
5394
  const projection = drizzleOrm.sql.join(
5463
5395
  ast.projection.fields.map((projectedField) => {
5464
5396
  const source = projectedField.source;
5465
- if (!isAggregateExpr(source)) {
5397
+ if (!chunkHTGDWIDE_cjs.isAggregateExpr(source)) {
5466
5398
  const value = compileFieldValue(
5467
5399
  source,
5468
5400
  dialect,
5469
5401
  source.valueType,
5470
5402
  `cte_${source.alias}`
5471
5403
  );
5472
- return drizzleOrm.sql`${value} AS ${quoteIdentifier2(projectedField.outputName)}`;
5404
+ return drizzleOrm.sql`${value} AS ${chunkHTGDWIDE_cjs.quoteIdentifier(projectedField.outputName)}`;
5473
5405
  }
5474
5406
  const projectedCountColumn = resolveCountColumn(source);
5475
5407
  const countValue = drizzleOrm.sql`${drizzleOrm.sql.raw(countCteAlias)}.${drizzleOrm.sql.raw(projectedCountColumn)}`;
5476
5408
  const aggregateValue = traversal.optional ? drizzleOrm.sql`COALESCE(${countValue}, 0)` : countValue;
5477
- return drizzleOrm.sql`${aggregateValue} AS ${quoteIdentifier2(projectedField.outputName)}`;
5409
+ return drizzleOrm.sql`${aggregateValue} AS ${chunkHTGDWIDE_cjs.quoteIdentifier(projectedField.outputName)}`;
5478
5410
  }),
5479
5411
  drizzleOrm.sql`, `
5480
5412
  );
@@ -12784,17 +12716,17 @@ async function rebuildFulltextIndex(ctx, nodeKind, options) {
12784
12716
  if (remaining > 0 && pageResult.skippedIds.length > 0) {
12785
12717
  skippedIds.push(...pageResult.skippedIds.slice(0, remaining));
12786
12718
  }
12787
- await backend.transaction(async (tx) => {
12719
+ const writePage = async (target) => {
12788
12720
  if (pageResult.toUpsert.length > 0) {
12789
- if (tx.upsertFulltextBatch) {
12790
- await tx.upsertFulltextBatch({
12721
+ if (target.upsertFulltextBatch) {
12722
+ await target.upsertFulltextBatch({
12791
12723
  graphId: ctx.graphId,
12792
12724
  nodeKind: kind,
12793
12725
  rows: pageResult.toUpsert
12794
12726
  });
12795
- } else if (tx.upsertFulltext) {
12727
+ } else if (target.upsertFulltext) {
12796
12728
  for (const item of pageResult.toUpsert) {
12797
- await tx.upsertFulltext({
12729
+ await target.upsertFulltext({
12798
12730
  graphId: ctx.graphId,
12799
12731
  nodeKind: kind,
12800
12732
  nodeId: item.nodeId,
@@ -12805,15 +12737,15 @@ async function rebuildFulltextIndex(ctx, nodeKind, options) {
12805
12737
  }
12806
12738
  }
12807
12739
  if (pageResult.toDelete.length > 0) {
12808
- if (tx.deleteFulltextBatch) {
12809
- await tx.deleteFulltextBatch({
12740
+ if (target.deleteFulltextBatch) {
12741
+ await target.deleteFulltextBatch({
12810
12742
  graphId: ctx.graphId,
12811
12743
  nodeKind: kind,
12812
12744
  nodeIds: pageResult.toDelete
12813
12745
  });
12814
- } else if (tx.deleteFulltext) {
12746
+ } else if (target.deleteFulltext) {
12815
12747
  for (const nodeId of pageResult.toDelete) {
12816
- await tx.deleteFulltext({
12748
+ await target.deleteFulltext({
12817
12749
  graphId: ctx.graphId,
12818
12750
  nodeKind: kind,
12819
12751
  nodeId
@@ -12821,7 +12753,8 @@ async function rebuildFulltextIndex(ctx, nodeKind, options) {
12821
12753
  }
12822
12754
  }
12823
12755
  }
12824
- });
12756
+ };
12757
+ await chunkRNUNP5JD_cjs.runOptionallyInTransaction(backend, writePage);
12825
12758
  processed += rows.length;
12826
12759
  upserted += pageResult.toUpsert.length;
12827
12760
  cleared += pageResult.toDelete.length;
@@ -13503,12 +13436,19 @@ var Store = class {
13503
13436
  }
13504
13437
  // === Batch Query Execution ===
13505
13438
  /**
13506
- * Executes multiple queries over a single connection with snapshot consistency.
13439
+ * Executes multiple queries and returns a typed tuple of results.
13440
+ *
13441
+ * Each query preserves its own result type, projection, filtering, sorting,
13442
+ * and pagination.
13507
13443
  *
13508
- * Acquires one connection via an implicit transaction, executes each query
13509
- * sequentially on that connection, and returns a typed tuple of results.
13510
- * Each query preserves its own result type, projection, filtering,
13511
- * sorting, and pagination.
13444
+ * **Snapshot consistency is conditional.** When
13445
+ * `backend.capabilities.transactions` is `true`, queries run sequentially
13446
+ * on a single connection inside an implicit transaction and observe the
13447
+ * same database snapshot. When transactions are unavailable
13448
+ * (Cloudflare D1, `drizzle-orm/neon-http`), queries run sequentially over
13449
+ * independent connections and may observe writes that landed between them.
13450
+ * Branch on `backend.capabilities.transactions` if you need a guaranteed
13451
+ * snapshot.
13512
13452
  *
13513
13453
  * Read-only — use `bulkCreate`, `bulkInsert`, etc. for write batching.
13514
13454
  *
@@ -13532,10 +13472,10 @@ var Store = class {
13532
13472
  * @returns A tuple with per-query typed results, preserving input order
13533
13473
  */
13534
13474
  async batch(...queries) {
13535
- return this.#backend.transaction(async (txBackend) => {
13475
+ return chunkRNUNP5JD_cjs.runOptionallyInTransaction(this.#backend, async (target) => {
13536
13476
  const results = [];
13537
13477
  for (const query of queries) {
13538
- const result = await query.executeOn(txBackend);
13478
+ const result = await query.executeOn(target);
13539
13479
  results.push(result);
13540
13480
  }
13541
13481
  return results;
@@ -13599,8 +13539,26 @@ var Store = class {
13599
13539
  * );
13600
13540
  * });
13601
13541
  * ```
13542
+ *
13543
+ * **Backends without transactions.** When `backend.capabilities.transactions`
13544
+ * is `false` (Cloudflare D1, `drizzle-orm/neon-http`), this method runs the
13545
+ * callback against the same backend used outside `transaction()` — writes
13546
+ * are applied as they happen and a thrown error does **not** roll back
13547
+ * earlier writes inside the callback. Branch on
13548
+ * `backend.capabilities.transactions` if you require atomicity:
13549
+ *
13550
+ * ```typescript
13551
+ * if (backend.capabilities.transactions) {
13552
+ * await store.transaction(async (tx) => { ... });
13553
+ * } else {
13554
+ * // sequential, non-atomic — handle partial-failure recovery yourself
13555
+ * }
13556
+ * ```
13602
13557
  */
13603
13558
  async transaction(fn) {
13559
+ if (!this.#backend.capabilities.transactions) {
13560
+ return fn({ nodes: this.nodes, edges: this.edges });
13561
+ }
13604
13562
  return this.#backend.transaction(async (txBackend) => {
13605
13563
  const txNodeOperations = {
13606
13564
  ...this.#nodeOperations,
@@ -13648,6 +13606,36 @@ var Store = class {
13648
13606
  this.#search = void 0;
13649
13607
  }
13650
13608
  // === Lifecycle ===
13609
+ /**
13610
+ * Refreshes the backend's query-planner statistics.
13611
+ *
13612
+ * Call this once after a large initial import or bulk backfill. The
13613
+ * planner uses table statistics to choose between TypeGraph's
13614
+ * multi-column indexes; without fresh stats a forward traversal can
13615
+ * pick a reverse index and run an order of magnitude slower than
13616
+ * needed. Autovacuum / background statistics will catch up
13617
+ * eventually, but calling this explicitly after a bulk load gives
13618
+ * you correct latencies immediately.
13619
+ *
13620
+ * Implementations:
13621
+ * - SQLite runs `ANALYZE`, populating `sqlite_stat1`
13622
+ * - PostgreSQL runs `ANALYZE` on the TypeGraph-managed tables
13623
+ *
13624
+ * Costs a few tens of milliseconds at the sizes this library is
13625
+ * designed for. Safe to call at any time.
13626
+ *
13627
+ * @example
13628
+ * ```typescript
13629
+ * // After a bulk import
13630
+ * for (const batch of batches) {
13631
+ * await store.nodes.Document.bulkCreate(batch);
13632
+ * }
13633
+ * await store.refreshStatistics();
13634
+ * ```
13635
+ */
13636
+ async refreshStatistics() {
13637
+ await this.#backend.refreshStatistics();
13638
+ }
13651
13639
  /**
13652
13640
  * Closes the store and releases underlying resources.
13653
13641
  *