@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
package/dist/index.js CHANGED
@@ -1,11 +1,13 @@
1
+ import { quoteIdentifier, EMPTY_REQUIRED_COLUMNS, addRequiredColumn, markSelectiveFieldAsRequired, markFieldRefAsRequired, NODE_COLUMNS, shouldProjectColumn, mapSelectiveSystemFieldToColumn, isIdFieldRef, isAggregateExpr, EDGE_COLUMNS } from './chunk-3EUKJEQ3.js';
1
2
  import { META_EDGE_BRAND, META_EDGE_SUB_CLASS_OF, META_EDGE_NARROWER, META_EDGE_BROADER, META_EDGE_RELATED_TO, META_EDGE_EQUIVALENT_TO, META_EDGE_SAME_AS, META_EDGE_DIFFERENT_FROM, META_EDGE_DISJOINT_WITH, META_EDGE_HAS_PART, META_EDGE_PART_OF, META_EDGE_INVERSE_OF, META_EDGE_IMPLIES, ensureSchema, computeClosuresFromOntology, createEmptyClosures, KindRegistry, validateNodeProps, validateEdgeProps } from './chunk-JYUQA77I.js';
2
3
  export { isMetaEdge } from './chunk-JYUQA77I.js';
3
4
  import { NODE_TYPE_BRAND, EDGE_TYPE_BRAND, nowIso, validateOptionalIsoDate, getNodeKinds, getEdgeKinds } from './chunk-RS5OLGEW.js';
4
5
  export { defineGraph, getEdgeKinds, getNodeKinds, isEdgeType, isEdgeTypeWithEndpoints, isGraphDef, isNodeType } from './chunk-RS5OLGEW.js';
6
+ import { runOptionallyInTransaction } from './chunk-7TU5EWQ7.js';
5
7
  import { ConfigurationError, UnsupportedPredicateError, ValidationError, CompilerInvariantError, KindNotFoundError, DatabaseOperationError, EdgeNotFoundError, NodeConstraintNotFoundError, RestrictedDeleteError, NodeNotFoundError, EndpointNotFoundError, UniquenessError, CardinalityError, EndpointError, DisjointError } from './chunk-WFMTAEEN.js';
6
8
  export { BackendDisposedError, CardinalityError, CompilerInvariantError, ConfigurationError, DatabaseOperationError, DisjointError, EdgeNotFoundError, EndpointError, EndpointNotFoundError, KindNotFoundError, MigrationError, NodeConstraintNotFoundError, NodeNotFoundError, RestrictedDeleteError, SchemaMismatchError, TypeGraphError, UniquenessError, UnsupportedPredicateError, ValidationError, VersionConflictError, getErrorSuggestion, isConstraintError, isSystemError, isTypeGraphError, isUserRecoverable } from './chunk-WFMTAEEN.js';
7
- import { MAX_PG_IDENTIFIER_LENGTH, DEFAULT_PAGINATION_LIMIT, getDialect, DEFAULT_STREAM_BATCH_SIZE, NODE_META_KEYS, EDGE_META_KEYS, SQLITE_PATH_DELIMITER, PG_ARRAY_START, PG_ARRAY_END, PG_PATH_ELEMENT_SEPARATOR, fnv1aBase36 } from './chunk-4XNE2JG3.js';
8
- export { fts5Strategy, tsvectorStrategy } from './chunk-4XNE2JG3.js';
9
+ import { MAX_PG_IDENTIFIER_LENGTH, DEFAULT_PAGINATION_LIMIT, getDialect, DEFAULT_STREAM_BATCH_SIZE, NODE_META_KEYS, EDGE_META_KEYS, SQLITE_PATH_DELIMITER, PG_ARRAY_START, PG_ARRAY_END, PG_PATH_ELEMENT_SEPARATOR, fnv1aBase36 } from './chunk-753F33CV.js';
10
+ export { fts5Strategy, tsvectorStrategy } from './chunk-753F33CV.js';
9
11
  import { jsonPointer, parseJsonPointer, createSchemaIntrospector, normalizeJsonPointer, joinJsonPointers, resolveFieldTypeInfoAtJsonPointer, getSearchableMetadata, DEFAULT_SEARCHABLE_LANGUAGE, getEmbeddingDimensions, isEmbeddingSchema } from './chunk-EYELZHKY.js';
10
12
  export { DEFAULT_SEARCHABLE_LANGUAGE, MAX_JSON_POINTER_DEPTH, embedding, getEmbeddingDimensions, getSearchableMetadata, isEmbeddingSchema, isSearchableSchema, joinJsonPointers, jsonPointer, normalizeJsonPointer, parseJsonPointer, searchable } from './chunk-EYELZHKY.js';
11
13
  import { z } from 'zod';
@@ -1944,7 +1946,7 @@ function validateTableName(name, label) {
1944
1946
  );
1945
1947
  }
1946
1948
  }
1947
- function quoteIdentifier(name) {
1949
+ function quoteIdentifier2(name) {
1948
1950
  return `"${name.replaceAll('"', '""')}"`;
1949
1951
  }
1950
1952
  function createSqlSchema(names = {}) {
@@ -1955,10 +1957,10 @@ function createSqlSchema(names = {}) {
1955
1957
  validateTableName(tables.fulltext, "fulltext");
1956
1958
  return {
1957
1959
  tables,
1958
- nodesTable: sql.raw(quoteIdentifier(tables.nodes)),
1959
- edgesTable: sql.raw(quoteIdentifier(tables.edges)),
1960
- embeddingsTable: sql.raw(quoteIdentifier(tables.embeddings)),
1961
- fulltextTable: sql.raw(quoteIdentifier(tables.fulltext))
1960
+ nodesTable: sql.raw(quoteIdentifier2(tables.nodes)),
1961
+ edgesTable: sql.raw(quoteIdentifier2(tables.edges)),
1962
+ embeddingsTable: sql.raw(quoteIdentifier2(tables.embeddings)),
1963
+ fulltextTable: sql.raw(quoteIdentifier2(tables.fulltext))
1962
1964
  };
1963
1965
  }
1964
1966
  var DEFAULT_SQL_SCHEMA = createSqlSchema();
@@ -1996,76 +1998,6 @@ function compileTypedJsonExtract(input) {
1996
1998
  }
1997
1999
  }
1998
2000
  }
1999
- var NODE_COLUMNS = [
2000
- "id",
2001
- "kind",
2002
- "props",
2003
- "version",
2004
- "valid_from",
2005
- "valid_to",
2006
- "created_at",
2007
- "updated_at",
2008
- "deleted_at"
2009
- ];
2010
- var EDGE_COLUMNS = [
2011
- "id",
2012
- "kind",
2013
- "from_id",
2014
- "to_id",
2015
- "props",
2016
- "valid_from",
2017
- "valid_to",
2018
- "created_at",
2019
- "updated_at",
2020
- "deleted_at"
2021
- ];
2022
- var EMPTY_REQUIRED_COLUMNS = /* @__PURE__ */ new Set();
2023
- function quoteIdentifier2(identifier) {
2024
- return sql.raw(`"${identifier.replaceAll('"', '""')}"`);
2025
- }
2026
- function shouldProjectColumn(requiredColumns, column, alwaysRequiredColumns) {
2027
- if (alwaysRequiredColumns?.has(column)) return true;
2028
- if (requiredColumns === void 0) return true;
2029
- return requiredColumns.has(column);
2030
- }
2031
- function addRequiredColumn(requiredColumnsByAlias, alias, column) {
2032
- const existing = requiredColumnsByAlias.get(alias);
2033
- if (existing) {
2034
- existing.add(column);
2035
- return;
2036
- }
2037
- requiredColumnsByAlias.set(alias, /* @__PURE__ */ new Set([column]));
2038
- }
2039
- function markFieldRefAsRequired(requiredColumnsByAlias, field2) {
2040
- const column = field2.path[0];
2041
- if (column === void 0) return;
2042
- addRequiredColumn(requiredColumnsByAlias, field2.alias, column);
2043
- }
2044
- function mapSelectiveSystemFieldToColumn(field2) {
2045
- if (field2 === "fromId") return "from_id";
2046
- if (field2 === "toId") return "to_id";
2047
- if (field2.startsWith("meta.")) {
2048
- return field2.slice(5).replaceAll(/([A-Z])/g, "_$1").toLowerCase();
2049
- }
2050
- return field2;
2051
- }
2052
- function markSelectiveFieldAsRequired(requiredColumnsByAlias, field2) {
2053
- if (field2.isSystemField) {
2054
- addRequiredColumn(
2055
- requiredColumnsByAlias,
2056
- field2.alias,
2057
- mapSelectiveSystemFieldToColumn(field2.field)
2058
- );
2059
- return;
2060
- }
2061
- addRequiredColumn(requiredColumnsByAlias, field2.alias, "props");
2062
- }
2063
- function isIdFieldRef(field2) {
2064
- return field2.path.length === 1 && field2.path[0] === "id" && field2.jsonPointer === void 0;
2065
- }
2066
- function isAggregateExpr(source) {
2067
- return "__type" in source && source.__type === "aggregate";
2068
- }
2069
2001
 
2070
2002
  // src/query/compiler/emitter/standard-builders.ts
2071
2003
  function compileColumnReference(tableAlias, column) {
@@ -2075,7 +2007,7 @@ function compileColumnReference(tableAlias, column) {
2075
2007
  return sql`${sql.raw(tableAlias)}.${sql.raw(column)}`;
2076
2008
  }
2077
2009
  function qualifyColumn(owner, name) {
2078
- return sql`${quoteIdentifier2(owner)}.${quoteIdentifier2(name)}`;
2010
+ return sql`${quoteIdentifier(owner)}.${quoteIdentifier(name)}`;
2079
2011
  }
2080
2012
  var SCOPED_RELEVANCE_NODES_ALIAS = "scoped_relevance_nodes";
2081
2013
  function buildScopedNodeIdsSubquery(nodeAlias) {
@@ -2085,7 +2017,7 @@ function buildScopedNodeIdsSubquery(nodeAlias) {
2085
2017
  SELECT DISTINCT
2086
2018
  ${qualifyColumn(cteAlias, `${nodeAlias}_id`)} AS node_id,
2087
2019
  ${qualifyColumn(cteAlias, `${nodeAlias}_kind`)} AS node_kind
2088
- FROM ${quoteIdentifier2(cteAlias)}
2020
+ FROM ${quoteIdentifier(cteAlias)}
2089
2021
  ) AS ${sql.raw(SCOPED_RELEVANCE_NODES_ALIAS)}
2090
2022
  `;
2091
2023
  }
@@ -2107,6 +2039,7 @@ function buildStandardStartCte(input) {
2107
2039
  const { ast, ctx, graphId, predicateIndex, requiredColumnsByAlias } = input;
2108
2040
  const alias = ast.start.alias;
2109
2041
  const kinds = ast.start.kinds;
2042
+ const cteMaterialization = ctx.dialect.capabilities.emitNotMaterializedHint ? sql`NOT MATERIALIZED ` : sql``;
2110
2043
  const kindFilter = compileKindFilter(sql.raw("kind"), kinds);
2111
2044
  const temporalFilter = input.temporalFilterPass.forAlias();
2112
2045
  const cteContext = { ...ctx, cteColumnPrefix: "" };
@@ -2121,14 +2054,19 @@ function buildStandardStartCte(input) {
2121
2054
  ...predicateClauses
2122
2055
  ];
2123
2056
  const effectiveRequiredColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(alias) ?? EMPTY_REQUIRED_COLUMNS : void 0;
2057
+ const limitClause = input.limitOffset === void 0 ? sql`` : input.limitOffset.offset === void 0 ? sql`
2058
+ LIMIT ${input.limitOffset.limit}
2059
+ ` : sql`
2060
+ LIMIT ${input.limitOffset.limit} OFFSET ${input.limitOffset.offset}
2061
+ `;
2124
2062
  return sql`
2125
- cte_${sql.raw(alias)} AS (
2063
+ cte_${sql.raw(alias)} AS ${cteMaterialization}(
2126
2064
  SELECT ${sql.join(
2127
2065
  compileNodeSelectColumns(void 0, alias, effectiveRequiredColumns),
2128
2066
  sql`, `
2129
2067
  )}
2130
2068
  FROM ${ctx.schema.nodesTable}
2131
- WHERE ${sql.join(whereClauses, sql` AND `)}
2069
+ WHERE ${sql.join(whereClauses, sql` AND `)}${limitClause}
2132
2070
  )
2133
2071
  `;
2134
2072
  }
@@ -2192,7 +2130,7 @@ function buildStandardTraversalCte(input) {
2192
2130
  ...compileEdgeSelectColumns("e", edgeAlias, requiredEdgeColumns),
2193
2131
  ...compileNodeSelectColumns("n", nodeAlias, requiredNodeColumns)
2194
2132
  ];
2195
- const cteMaterialization = materializeCte ? sql`MATERIALIZED ` : sql``;
2133
+ const cteMaterialization = materializeCte ? sql`MATERIALIZED ` : ctx.dialect.capabilities.emitNotMaterializedHint ? sql`NOT MATERIALIZED ` : sql``;
2196
2134
  function compileTraversalBranch(branch) {
2197
2135
  const whereClauses = [
2198
2136
  ...baseWhereClauses,
@@ -2341,7 +2279,7 @@ function buildStandardProjection(input) {
2341
2279
  }
2342
2280
  const projectedFields = fields.map((field2) => {
2343
2281
  const source = compileProjectedSource(field2, dialect);
2344
- return sql`${source} AS ${quoteIdentifier2(field2.outputName)}`;
2282
+ return sql`${source} AS ${quoteIdentifier(field2.outputName)}`;
2345
2283
  });
2346
2284
  return sql.join(projectedFields, sql`, `);
2347
2285
  }
@@ -2361,7 +2299,7 @@ function compileSelectiveProjection(fields, dialect, ast, collapsedTraversalCteA
2361
2299
  const cteAlias = collapsedTraversalCteAlias ?? aliasToCte.get(field2.alias) ?? `cte_${field2.alias}`;
2362
2300
  if (field2.isSystemField) {
2363
2301
  const dbColumn = mapSelectiveSystemFieldToColumn(field2.field);
2364
- return sql`${sql.raw(cteAlias)}.${sql.raw(`${field2.alias}_${dbColumn}`)} AS ${quoteIdentifier2(field2.outputName)}`;
2302
+ return sql`${sql.raw(cteAlias)}.${sql.raw(`${field2.alias}_${dbColumn}`)} AS ${quoteIdentifier(field2.outputName)}`;
2365
2303
  }
2366
2304
  const propsColumn = `${field2.alias}_props`;
2367
2305
  const column = sql`${sql.raw(cteAlias)}.${sql.raw(propsColumn)}`;
@@ -2372,7 +2310,7 @@ function compileSelectiveProjection(fields, dialect, ast, collapsedTraversalCteA
2372
2310
  pointer,
2373
2311
  valueType: field2.valueType
2374
2312
  });
2375
- return sql`${extracted} AS ${quoteIdentifier2(field2.outputName)}`;
2313
+ return sql`${extracted} AS ${quoteIdentifier(field2.outputName)}`;
2376
2314
  });
2377
2315
  return sql.join(columns, sql`, `);
2378
2316
  }
@@ -3703,10 +3641,10 @@ function compileRecursiveProjection(ast, traversal, dialect) {
3703
3641
  sql`${sql.raw(nodeAlias)}_deleted_at`
3704
3642
  ];
3705
3643
  if (vl.depthAlias !== void 0) {
3706
- fields.push(sql`depth AS ${quoteIdentifier2(vl.depthAlias)}`);
3644
+ fields.push(sql`depth AS ${quoteIdentifier(vl.depthAlias)}`);
3707
3645
  }
3708
3646
  if (vl.pathAlias !== void 0) {
3709
- fields.push(sql`path AS ${quoteIdentifier2(vl.pathAlias)}`);
3647
+ fields.push(sql`path AS ${quoteIdentifier(vl.pathAlias)}`);
3710
3648
  }
3711
3649
  return sql.join(fields, sql`, `);
3712
3650
  }
@@ -3720,7 +3658,7 @@ function compileRecursiveSelectiveProjection(fields, ast, traversal, dialect) {
3720
3658
  }
3721
3659
  if (field2.isSystemField) {
3722
3660
  const dbColumn = mapSelectiveSystemFieldToColumn(field2.field);
3723
- return sql`${sql.raw(`${field2.alias}_${dbColumn}`)} AS ${quoteIdentifier2(field2.outputName)}`;
3661
+ return sql`${sql.raw(`${field2.alias}_${dbColumn}`)} AS ${quoteIdentifier(field2.outputName)}`;
3724
3662
  }
3725
3663
  const column = sql.raw(`${field2.alias}_props`);
3726
3664
  const extracted = compileTypedJsonExtract({
@@ -3729,14 +3667,14 @@ function compileRecursiveSelectiveProjection(fields, ast, traversal, dialect) {
3729
3667
  pointer: jsonPointer([field2.field]),
3730
3668
  valueType: field2.valueType
3731
3669
  });
3732
- return sql`${extracted} AS ${quoteIdentifier2(field2.outputName)}`;
3670
+ return sql`${extracted} AS ${quoteIdentifier(field2.outputName)}`;
3733
3671
  });
3734
3672
  const vl = traversal.variableLength;
3735
3673
  if (vl.depthAlias !== void 0) {
3736
- columns.push(sql`depth AS ${quoteIdentifier2(vl.depthAlias)}`);
3674
+ columns.push(sql`depth AS ${quoteIdentifier(vl.depthAlias)}`);
3737
3675
  }
3738
3676
  if (vl.pathAlias !== void 0) {
3739
- columns.push(sql`path AS ${quoteIdentifier2(vl.pathAlias)}`);
3677
+ columns.push(sql`path AS ${quoteIdentifier(vl.pathAlias)}`);
3740
3678
  }
3741
3679
  return sql.join(columns, sql`, `);
3742
3680
  }
@@ -4251,7 +4189,7 @@ function buildProjectedPropertyColumns(alias, plan, dialect) {
4251
4189
  valueType: fieldPlan.typeInfo?.valueType
4252
4190
  });
4253
4191
  columns.push(
4254
- sql`CASE WHEN ${sql.raw(alias)}.kind = ${kind} THEN ${extracted} ELSE NULL END AS ${quoteIdentifier2(fieldPlan.outputName)}`
4192
+ sql`CASE WHEN ${sql.raw(alias)}.kind = ${kind} THEN ${extracted} ELSE NULL END AS ${quoteIdentifier(fieldPlan.outputName)}`
4255
4193
  );
4256
4194
  }
4257
4195
  }
@@ -5282,8 +5220,10 @@ function resolveCountAggregateFastPath(ast) {
5282
5220
  if (groupField.alias !== ast.start.alias || !isIdFieldRef(groupField)) {
5283
5221
  return void 0;
5284
5222
  }
5285
- let requiresCount = false;
5286
- let requiresCountDistinct = false;
5223
+ let requiresNodeCount = false;
5224
+ let requiresNodeCountDistinct = false;
5225
+ let requiresEdgeCount = false;
5226
+ let requiresEdgeCountDistinct = false;
5287
5227
  for (const projectedField of ast.projection.fields) {
5288
5228
  const source = projectedField.source;
5289
5229
  if (!isAggregateExpr(source)) {
@@ -5292,26 +5232,35 @@ function resolveCountAggregateFastPath(ast) {
5292
5232
  }
5293
5233
  continue;
5294
5234
  }
5295
- if (source.field.alias !== traversal.nodeAlias || !isIdFieldRef(source.field)) {
5235
+ if (!isIdFieldRef(source.field)) {
5236
+ return void 0;
5237
+ }
5238
+ const isNodeTarget = source.field.alias === traversal.nodeAlias;
5239
+ const isEdgeTarget = source.field.alias === traversal.edgeAlias;
5240
+ if (!isNodeTarget && !isEdgeTarget) {
5296
5241
  return void 0;
5297
5242
  }
5298
5243
  if (source.function === "count") {
5299
- requiresCount = true;
5244
+ if (isNodeTarget) requiresNodeCount = true;
5245
+ else requiresEdgeCount = true;
5300
5246
  continue;
5301
5247
  }
5302
5248
  if (source.function === "countDistinct") {
5303
- requiresCountDistinct = true;
5249
+ if (isNodeTarget) requiresNodeCountDistinct = true;
5250
+ else requiresEdgeCountDistinct = true;
5304
5251
  continue;
5305
5252
  }
5306
5253
  return void 0;
5307
5254
  }
5308
- if (!requiresCount && !requiresCountDistinct) {
5255
+ if (!requiresNodeCount && !requiresNodeCountDistinct && !requiresEdgeCount && !requiresEdgeCountDistinct) {
5309
5256
  return void 0;
5310
5257
  }
5311
5258
  return {
5312
5259
  traversal,
5313
- requiresCount,
5314
- requiresCountDistinct
5260
+ requiresNodeCount,
5261
+ requiresNodeCountDistinct,
5262
+ requiresEdgeCount,
5263
+ requiresEdgeCountDistinct
5315
5264
  };
5316
5265
  }
5317
5266
  function compileCountAggregateFastPath(ast, graphId, ctx, logicalPlan, requiredColumnsByAlias, predicateIndex, temporalFilterPass) {
@@ -5319,15 +5268,23 @@ function compileCountAggregateFastPath(ast, graphId, ctx, logicalPlan, requiredC
5319
5268
  if (!plan) {
5320
5269
  return void 0;
5321
5270
  }
5322
- const { traversal, requiresCount, requiresCountDistinct } = plan;
5271
+ const {
5272
+ traversal,
5273
+ requiresNodeCount,
5274
+ requiresNodeCountDistinct,
5275
+ requiresEdgeCount,
5276
+ requiresEdgeCountDistinct
5277
+ } = plan;
5323
5278
  const { dialect } = ctx;
5324
5279
  const startAlias = ast.start.alias;
5325
5280
  const previousAlias = traversal.joinFromAlias;
5326
5281
  const previousAliasIdColumn = `${previousAlias}_id`;
5327
5282
  const previousAliasKindColumn = `${previousAlias}_kind`;
5328
5283
  const countCteAlias = `cte_${traversal.nodeAlias}_counts`;
5329
- const countColumn = `${traversal.nodeAlias}_count`;
5330
- const countDistinctColumn = `${traversal.nodeAlias}_count_distinct`;
5284
+ const nodeCountColumn = `${traversal.nodeAlias}_count`;
5285
+ const nodeCountDistinctColumn = `${traversal.nodeAlias}_count_distinct`;
5286
+ const edgeCountColumn = `${traversal.edgeAlias}_count`;
5287
+ const edgeCountDistinctColumn = `${traversal.edgeAlias}_count_distinct`;
5331
5288
  const previousNodeKinds = getNodeKindsForAlias(ast, traversal.joinFromAlias);
5332
5289
  const edgeKinds = [...new Set(traversal.edgeKinds)];
5333
5290
  const nodeKinds = traversal.nodeKinds;
@@ -5353,34 +5310,68 @@ function compileCountAggregateFastPath(ast, graphId, ctx, logicalPlan, requiredC
5353
5310
  const targetField = traversal.direction === "out" ? "to_id" : "from_id";
5354
5311
  const joinKindField = traversal.direction === "out" ? "from_kind" : "to_kind";
5355
5312
  const targetKindField = traversal.direction === "out" ? "to_kind" : "from_kind";
5313
+ const hasNodePredicates = nodePredicateClauses.length > 0;
5314
+ const requiresNodeJoin = requiresNodeCount || requiresNodeCountDistinct || hasNodePredicates;
5315
+ const useInnerJoin = hasNodePredicates;
5356
5316
  const whereClauses = [
5357
5317
  sql`e.graph_id = ${graphId}`,
5358
5318
  compileKindFilter(sql.raw("e.kind"), edgeKinds),
5359
5319
  compileKindFilter(sql.raw(`e.${joinKindField}`), previousNodeKinds),
5360
5320
  compileKindFilter(sql.raw(`e.${targetKindField}`), nodeKinds),
5361
- compileKindFilter(sql.raw("n.kind"), nodeKinds),
5362
5321
  edgeTemporalFilter,
5363
- nodeTemporalFilter,
5364
- ...nodePredicateClauses,
5365
- ...edgePredicateClauses
5322
+ ...edgePredicateClauses,
5323
+ // INNER JOIN mode: node-side filters in WHERE constrain every aggregate.
5324
+ ...requiresNodeJoin && useInnerJoin ? [
5325
+ compileKindFilter(sql.raw("n.kind"), nodeKinds),
5326
+ nodeTemporalFilter,
5327
+ ...nodePredicateClauses
5328
+ ] : []
5366
5329
  ];
5330
+ const nodeJoinOnClauses = requiresNodeJoin ? useInnerJoin ? (
5331
+ // INNER JOIN: only the key conditions; filters live in WHERE.
5332
+ [
5333
+ sql`n.graph_id = e.graph_id`,
5334
+ sql`n.id = e.${sql.raw(targetField)}`,
5335
+ sql`n.kind = e.${sql.raw(targetKindField)}`
5336
+ ]
5337
+ ) : [
5338
+ sql`n.graph_id = e.graph_id`,
5339
+ sql`n.id = e.${sql.raw(targetField)}`,
5340
+ sql`n.kind = e.${sql.raw(targetKindField)}`,
5341
+ compileKindFilter(sql.raw("n.kind"), nodeKinds),
5342
+ nodeTemporalFilter
5343
+ ] : [];
5367
5344
  const aggregateColumns = [];
5368
- if (requiresCount) {
5369
- aggregateColumns.push(sql`COUNT(n.id) AS ${sql.raw(countColumn)}`);
5345
+ if (requiresNodeCount) {
5346
+ aggregateColumns.push(sql`COUNT(n.id) AS ${sql.raw(nodeCountColumn)}`);
5347
+ }
5348
+ if (requiresNodeCountDistinct) {
5349
+ aggregateColumns.push(
5350
+ sql`COUNT(DISTINCT n.id) AS ${sql.raw(nodeCountDistinctColumn)}`
5351
+ );
5370
5352
  }
5371
- if (requiresCountDistinct) {
5353
+ if (requiresEdgeCount) {
5354
+ aggregateColumns.push(sql`COUNT(e.id) AS ${sql.raw(edgeCountColumn)}`);
5355
+ }
5356
+ if (requiresEdgeCountDistinct) {
5372
5357
  aggregateColumns.push(
5373
- sql`COUNT(DISTINCT n.id) AS ${sql.raw(countDistinctColumn)}`
5358
+ sql`COUNT(DISTINCT e.id) AS ${sql.raw(edgeCountDistinctColumn)}`
5374
5359
  );
5375
5360
  }
5361
+ const startCteLimit = traversal.optional && ast.orderBy === void 0 && ast.limit !== void 0 ? { limit: ast.limit, offset: ast.offset } : void 0;
5376
5362
  const startCte = buildStandardStartCte({
5377
5363
  ast,
5378
5364
  ctx,
5379
5365
  graphId,
5380
5366
  predicateIndex,
5381
5367
  requiredColumnsByAlias,
5382
- temporalFilterPass
5368
+ temporalFilterPass,
5369
+ ...startCteLimit === void 0 ? {} : { limitOffset: startCteLimit }
5383
5370
  });
5371
+ const targetNodeJoinKeyword = useInnerJoin ? "JOIN" : "LEFT JOIN";
5372
+ const targetNodeJoin = requiresNodeJoin ? sql`
5373
+ ${sql.raw(targetNodeJoinKeyword)} ${ctx.schema.nodesTable} n ON ${sql.join(nodeJoinOnClauses, sql` AND `)}
5374
+ ` : sql``;
5384
5375
  const countCte = sql`
5385
5376
  ${sql.raw(countCteAlias)} AS (
5386
5377
  SELECT
@@ -5389,16 +5380,20 @@ function compileCountAggregateFastPath(ast, graphId, ctx, logicalPlan, requiredC
5389
5380
  ${sql.join(aggregateColumns, sql`, `)}
5390
5381
  FROM cte_${sql.raw(previousAlias)}
5391
5382
  JOIN ${ctx.schema.edgesTable} e ON cte_${sql.raw(previousAlias)}.${sql.raw(previousAliasIdColumn)} = e.${sql.raw(joinField)}
5392
- AND cte_${sql.raw(previousAlias)}.${sql.raw(previousAliasKindColumn)} = e.${sql.raw(joinKindField)}
5393
- JOIN ${ctx.schema.nodesTable} n ON n.graph_id = e.graph_id
5394
- AND n.id = e.${sql.raw(targetField)}
5395
- AND n.kind = e.${sql.raw(targetKindField)}
5383
+ AND cte_${sql.raw(previousAlias)}.${sql.raw(previousAliasKindColumn)} = e.${sql.raw(joinKindField)}${targetNodeJoin}
5396
5384
  WHERE ${sql.join(whereClauses, sql` AND `)}
5397
5385
  GROUP BY
5398
5386
  cte_${sql.raw(previousAlias)}.${sql.raw(previousAliasIdColumn)},
5399
5387
  cte_${sql.raw(previousAlias)}.${sql.raw(previousAliasKindColumn)}
5400
5388
  )
5401
5389
  `;
5390
+ function resolveCountColumn(source) {
5391
+ const isEdge = source.field.alias === traversal.edgeAlias;
5392
+ if (source.function === "countDistinct") {
5393
+ return isEdge ? edgeCountDistinctColumn : nodeCountDistinctColumn;
5394
+ }
5395
+ return isEdge ? edgeCountColumn : nodeCountColumn;
5396
+ }
5402
5397
  const projection = sql.join(
5403
5398
  ast.projection.fields.map((projectedField) => {
5404
5399
  const source = projectedField.source;
@@ -5409,12 +5404,12 @@ function compileCountAggregateFastPath(ast, graphId, ctx, logicalPlan, requiredC
5409
5404
  source.valueType,
5410
5405
  `cte_${source.alias}`
5411
5406
  );
5412
- return sql`${value} AS ${quoteIdentifier2(projectedField.outputName)}`;
5407
+ return sql`${value} AS ${quoteIdentifier(projectedField.outputName)}`;
5413
5408
  }
5414
- const projectedCountColumn = source.function === "countDistinct" ? countDistinctColumn : countColumn;
5409
+ const projectedCountColumn = resolveCountColumn(source);
5415
5410
  const countValue = sql`${sql.raw(countCteAlias)}.${sql.raw(projectedCountColumn)}`;
5416
5411
  const aggregateValue = traversal.optional ? sql`COALESCE(${countValue}, 0)` : countValue;
5417
- return sql`${aggregateValue} AS ${quoteIdentifier2(projectedField.outputName)}`;
5412
+ return sql`${aggregateValue} AS ${quoteIdentifier(projectedField.outputName)}`;
5418
5413
  }),
5419
5414
  sql`, `
5420
5415
  );
@@ -5426,19 +5421,29 @@ function compileCountAggregateFastPath(ast, graphId, ctx, logicalPlan, requiredC
5426
5421
  AND ${sql.raw(countCteAlias)}.${sql.raw(previousAliasKindColumn)} = cte_${sql.raw(previousAlias)}.${sql.raw(previousAliasKindColumn)}
5427
5422
  `;
5428
5423
  const orderBy = buildStandardOrderBy({ ast, dialect });
5429
- const limitOffset = buildLimitOffsetClause({
5430
- limit: ast.limit,
5431
- offset: ast.offset
5432
- });
5424
+ const emittedLogicalPlan = startCteLimit === void 0 ? logicalPlan : stripLimitOffsetFromPlan(logicalPlan);
5425
+ const limitOffset = startCteLimit === void 0 ? buildLimitOffsetClause({ limit: ast.limit, offset: ast.offset }) : void 0;
5433
5426
  return emitStandardQuerySql({
5434
5427
  ctes: [startCte, countCte],
5435
5428
  fromClause,
5436
5429
  ...orderBy === void 0 ? {} : { orderBy },
5437
5430
  ...limitOffset === void 0 ? {} : { limitOffset },
5438
- logicalPlan,
5431
+ logicalPlan: emittedLogicalPlan,
5439
5432
  projection
5440
5433
  });
5441
5434
  }
5435
+ function stripLimitOffsetFromPlan(plan) {
5436
+ return { ...plan, root: stripLimitOffsetFromPlanNode(plan.root) };
5437
+ }
5438
+ function stripLimitOffsetFromPlanNode(node) {
5439
+ if (node.op === "limit_offset") {
5440
+ return stripLimitOffsetFromPlanNode(node.input);
5441
+ }
5442
+ if ("input" in node) {
5443
+ return { ...node, input: stripLimitOffsetFromPlanNode(node.input) };
5444
+ }
5445
+ return node;
5446
+ }
5442
5447
  var STANDARD_QUERY_STRATEGY_HANDLERS = {
5443
5448
  cte_project: compileStandardQueryWithCteStrategy
5444
5449
  };
@@ -9363,6 +9368,12 @@ function countDistinct(alias, field2) {
9363
9368
  }
9364
9369
  };
9365
9370
  }
9371
+ function countEdges(edgeAlias) {
9372
+ return count(edgeAlias);
9373
+ }
9374
+ function countDistinctEdges(edgeAlias) {
9375
+ return countDistinct(edgeAlias);
9376
+ }
9366
9377
  function sum(alias, field2) {
9367
9378
  return {
9368
9379
  __type: "aggregate",
@@ -12708,17 +12719,17 @@ async function rebuildFulltextIndex(ctx, nodeKind, options) {
12708
12719
  if (remaining > 0 && pageResult.skippedIds.length > 0) {
12709
12720
  skippedIds.push(...pageResult.skippedIds.slice(0, remaining));
12710
12721
  }
12711
- await backend.transaction(async (tx) => {
12722
+ const writePage = async (target) => {
12712
12723
  if (pageResult.toUpsert.length > 0) {
12713
- if (tx.upsertFulltextBatch) {
12714
- await tx.upsertFulltextBatch({
12724
+ if (target.upsertFulltextBatch) {
12725
+ await target.upsertFulltextBatch({
12715
12726
  graphId: ctx.graphId,
12716
12727
  nodeKind: kind,
12717
12728
  rows: pageResult.toUpsert
12718
12729
  });
12719
- } else if (tx.upsertFulltext) {
12730
+ } else if (target.upsertFulltext) {
12720
12731
  for (const item of pageResult.toUpsert) {
12721
- await tx.upsertFulltext({
12732
+ await target.upsertFulltext({
12722
12733
  graphId: ctx.graphId,
12723
12734
  nodeKind: kind,
12724
12735
  nodeId: item.nodeId,
@@ -12729,15 +12740,15 @@ async function rebuildFulltextIndex(ctx, nodeKind, options) {
12729
12740
  }
12730
12741
  }
12731
12742
  if (pageResult.toDelete.length > 0) {
12732
- if (tx.deleteFulltextBatch) {
12733
- await tx.deleteFulltextBatch({
12743
+ if (target.deleteFulltextBatch) {
12744
+ await target.deleteFulltextBatch({
12734
12745
  graphId: ctx.graphId,
12735
12746
  nodeKind: kind,
12736
12747
  nodeIds: pageResult.toDelete
12737
12748
  });
12738
- } else if (tx.deleteFulltext) {
12749
+ } else if (target.deleteFulltext) {
12739
12750
  for (const nodeId of pageResult.toDelete) {
12740
- await tx.deleteFulltext({
12751
+ await target.deleteFulltext({
12741
12752
  graphId: ctx.graphId,
12742
12753
  nodeKind: kind,
12743
12754
  nodeId
@@ -12745,7 +12756,8 @@ async function rebuildFulltextIndex(ctx, nodeKind, options) {
12745
12756
  }
12746
12757
  }
12747
12758
  }
12748
- });
12759
+ };
12760
+ await runOptionallyInTransaction(backend, writePage);
12749
12761
  processed += rows.length;
12750
12762
  upserted += pageResult.toUpsert.length;
12751
12763
  cleared += pageResult.toDelete.length;
@@ -13427,12 +13439,19 @@ var Store = class {
13427
13439
  }
13428
13440
  // === Batch Query Execution ===
13429
13441
  /**
13430
- * Executes multiple queries over a single connection with snapshot consistency.
13442
+ * Executes multiple queries and returns a typed tuple of results.
13431
13443
  *
13432
- * Acquires one connection via an implicit transaction, executes each query
13433
- * sequentially on that connection, and returns a typed tuple of results.
13434
- * Each query preserves its own result type, projection, filtering,
13435
- * sorting, and pagination.
13444
+ * Each query preserves its own result type, projection, filtering, sorting,
13445
+ * and pagination.
13446
+ *
13447
+ * **Snapshot consistency is conditional.** When
13448
+ * `backend.capabilities.transactions` is `true`, queries run sequentially
13449
+ * on a single connection inside an implicit transaction and observe the
13450
+ * same database snapshot. When transactions are unavailable
13451
+ * (Cloudflare D1, `drizzle-orm/neon-http`), queries run sequentially over
13452
+ * independent connections and may observe writes that landed between them.
13453
+ * Branch on `backend.capabilities.transactions` if you need a guaranteed
13454
+ * snapshot.
13436
13455
  *
13437
13456
  * Read-only — use `bulkCreate`, `bulkInsert`, etc. for write batching.
13438
13457
  *
@@ -13456,10 +13475,10 @@ var Store = class {
13456
13475
  * @returns A tuple with per-query typed results, preserving input order
13457
13476
  */
13458
13477
  async batch(...queries) {
13459
- return this.#backend.transaction(async (txBackend) => {
13478
+ return runOptionallyInTransaction(this.#backend, async (target) => {
13460
13479
  const results = [];
13461
13480
  for (const query of queries) {
13462
- const result = await query.executeOn(txBackend);
13481
+ const result = await query.executeOn(target);
13463
13482
  results.push(result);
13464
13483
  }
13465
13484
  return results;
@@ -13523,8 +13542,26 @@ var Store = class {
13523
13542
  * );
13524
13543
  * });
13525
13544
  * ```
13545
+ *
13546
+ * **Backends without transactions.** When `backend.capabilities.transactions`
13547
+ * is `false` (Cloudflare D1, `drizzle-orm/neon-http`), this method runs the
13548
+ * callback against the same backend used outside `transaction()` — writes
13549
+ * are applied as they happen and a thrown error does **not** roll back
13550
+ * earlier writes inside the callback. Branch on
13551
+ * `backend.capabilities.transactions` if you require atomicity:
13552
+ *
13553
+ * ```typescript
13554
+ * if (backend.capabilities.transactions) {
13555
+ * await store.transaction(async (tx) => { ... });
13556
+ * } else {
13557
+ * // sequential, non-atomic — handle partial-failure recovery yourself
13558
+ * }
13559
+ * ```
13526
13560
  */
13527
13561
  async transaction(fn) {
13562
+ if (!this.#backend.capabilities.transactions) {
13563
+ return fn({ nodes: this.nodes, edges: this.edges });
13564
+ }
13528
13565
  return this.#backend.transaction(async (txBackend) => {
13529
13566
  const txNodeOperations = {
13530
13567
  ...this.#nodeOperations,
@@ -13572,6 +13609,36 @@ var Store = class {
13572
13609
  this.#search = void 0;
13573
13610
  }
13574
13611
  // === Lifecycle ===
13612
+ /**
13613
+ * Refreshes the backend's query-planner statistics.
13614
+ *
13615
+ * Call this once after a large initial import or bulk backfill. The
13616
+ * planner uses table statistics to choose between TypeGraph's
13617
+ * multi-column indexes; without fresh stats a forward traversal can
13618
+ * pick a reverse index and run an order of magnitude slower than
13619
+ * needed. Autovacuum / background statistics will catch up
13620
+ * eventually, but calling this explicitly after a bulk load gives
13621
+ * you correct latencies immediately.
13622
+ *
13623
+ * Implementations:
13624
+ * - SQLite runs `ANALYZE`, populating `sqlite_stat1`
13625
+ * - PostgreSQL runs `ANALYZE` on the TypeGraph-managed tables
13626
+ *
13627
+ * Costs a few tens of milliseconds at the sizes this library is
13628
+ * designed for. Safe to call at any time.
13629
+ *
13630
+ * @example
13631
+ * ```typescript
13632
+ * // After a bulk import
13633
+ * for (const batch of batches) {
13634
+ * await store.nodes.Document.bulkCreate(batch);
13635
+ * }
13636
+ * await store.refreshStatistics();
13637
+ * ```
13638
+ */
13639
+ async refreshStatistics() {
13640
+ await this.#backend.refreshStatistics();
13641
+ }
13575
13642
  /**
13576
13643
  * Closes the store and releases underlying resources.
13577
13644
  *
@@ -13676,6 +13743,6 @@ async function createStoreWithSchema(graph, backend, options) {
13676
13743
  return [store, result];
13677
13744
  }
13678
13745
 
13679
- export { DEFAULT_SQL_SCHEMA, ExecutableAggregateQuery, ExecutableQuery, MAX_EXPLICIT_RECURSIVE_DEPTH, MAX_RECURSIVE_DEPTH, PreparedQuery, QueryBuilder, StoreSearch, UnionableQuery, avg, broader, composeFragments, core, count, countDistinct, createExternalRef, createFragment, createQueryBuilder, createSqlSchema, createStore, createStoreWithSchema, defineEdge, defineNode, defineSubgraphProject, differentFrom, disjointWith, equivalentTo, exists, externalRef, field, fieldRef, generateId, getExternalRefTable, hasPart, having, havingEq, havingGt, havingGte, havingLt, havingLte, implies, inSubquery, inverseOf, isExternalRefSchema, isParameterRef, limitFragment, max, metaEdge, min, narrower, notExists, notInSubquery, offsetFragment, orderByFragment, param, partOf, relatedTo, sameAs, subClassOf, sum };
13746
+ export { DEFAULT_SQL_SCHEMA, ExecutableAggregateQuery, ExecutableQuery, MAX_EXPLICIT_RECURSIVE_DEPTH, MAX_RECURSIVE_DEPTH, PreparedQuery, QueryBuilder, StoreSearch, UnionableQuery, avg, broader, composeFragments, core, count, countDistinct, countDistinctEdges, countEdges, createExternalRef, createFragment, createQueryBuilder, createSqlSchema, createStore, createStoreWithSchema, defineEdge, defineNode, defineSubgraphProject, differentFrom, disjointWith, equivalentTo, exists, externalRef, field, fieldRef, generateId, getExternalRefTable, hasPart, having, havingEq, havingGt, havingGte, havingLt, havingLte, implies, inSubquery, inverseOf, isExternalRefSchema, isParameterRef, limitFragment, max, metaEdge, min, narrower, notExists, notInSubquery, offsetFragment, orderByFragment, param, partOf, relatedTo, sameAs, subClassOf, sum };
13680
13747
  //# sourceMappingURL=index.js.map
13681
13748
  //# sourceMappingURL=index.js.map