@graphty/graph-io 0.3.49 → 0.3.50

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 (208) hide show
  1. package/dist/chunks/{approximations-Bzn3L-je.js → approximations-BRXsll0T.js} +2 -2
  2. package/dist/chunks/{approximations-Bzn3L-je.js.map → approximations-BRXsll0T.js.map} +1 -1
  3. package/dist/chunks/{block-iptrlMBb.js → block-yl0f_qLO.js} +27 -2
  4. package/dist/chunks/block-yl0f_qLO.js.map +1 -0
  5. package/dist/chunks/{context-C3p0RQxR.js → context-DizmppHy.js} +2 -2
  6. package/dist/chunks/{context-C3p0RQxR.js.map → context-DizmppHy.js.map} +1 -1
  7. package/dist/chunks/{credentials-DXHx7nwR.js → credentials-CmvJXYeH.js} +58 -9
  8. package/dist/chunks/credentials-CmvJXYeH.js.map +1 -0
  9. package/dist/chunks/{descriptor-DLA5kINx.js → descriptor-Dhez_Cew.js} +5 -1
  10. package/dist/chunks/{descriptor-DLA5kINx.js.map → descriptor-Dhez_Cew.js.map} +1 -1
  11. package/dist/chunks/{emit-BwHQkZle.js → emit-7Jkpg0yd.js} +132 -4
  12. package/dist/chunks/emit-7Jkpg0yd.js.map +1 -0
  13. package/dist/chunks/{exporter-nDfxIK5D.js → exporter-1Ajud15J.js} +4 -4
  14. package/dist/chunks/{exporter-nDfxIK5D.js.map → exporter-1Ajud15J.js.map} +1 -1
  15. package/dist/chunks/{exporter-D9yMtocA.js → exporter-B6yvL3wy.js} +3 -3
  16. package/dist/chunks/{exporter-D9yMtocA.js.map → exporter-B6yvL3wy.js.map} +1 -1
  17. package/dist/chunks/{exporter-_jrBTnos.js → exporter-CA5q8ROP.js} +4 -4
  18. package/dist/chunks/{exporter-_jrBTnos.js.map → exporter-CA5q8ROP.js.map} +1 -1
  19. package/dist/chunks/{exporter-D2CETOMK.js → exporter-CQQZFJ2v.js} +72 -10
  20. package/dist/chunks/exporter-CQQZFJ2v.js.map +1 -0
  21. package/dist/chunks/{generic-ymWCETAJ.js → generic-Dc21MAdg.js} +3 -3
  22. package/dist/chunks/{generic-ymWCETAJ.js.map → generic-Dc21MAdg.js.map} +1 -1
  23. package/dist/chunks/{importer-CT9mJ1nn.js → importer-C6NVpCXp.js} +7 -6
  24. package/dist/chunks/importer-C6NVpCXp.js.map +1 -0
  25. package/dist/chunks/{importer-GREKMdIf.js → importer-CKFe4q54.js} +4 -4
  26. package/dist/chunks/{importer-GREKMdIf.js.map → importer-CKFe4q54.js.map} +1 -1
  27. package/dist/chunks/{importer-PqaaKKnY.js → importer-CKbUbsJA.js} +4 -4
  28. package/dist/chunks/{importer-PqaaKKnY.js.map → importer-CKbUbsJA.js.map} +1 -1
  29. package/dist/chunks/{importer-DaLTjbds.js → importer-ClCsdgTJ.js} +97 -7
  30. package/dist/chunks/importer-ClCsdgTJ.js.map +1 -0
  31. package/dist/chunks/{importer-B92x1xY5.js → importer-CyVZTrf0.js} +3 -3
  32. package/dist/chunks/{importer-B92x1xY5.js.map → importer-CyVZTrf0.js.map} +1 -1
  33. package/dist/chunks/{importer-vRq4h3j5.js → importer-DgG4v1Ms.js} +89 -20
  34. package/dist/chunks/importer-DgG4v1Ms.js.map +1 -0
  35. package/dist/chunks/{importer-Vn5QvmmJ.js → importer-asFUrIsj.js} +2 -2
  36. package/dist/chunks/{importer-Vn5QvmmJ.js.map → importer-asFUrIsj.js.map} +1 -1
  37. package/dist/chunks/{lexicon-Clf4QIyl.js → lexicon-IVRq2Uoo.js} +2 -2
  38. package/dist/chunks/{lexicon-Clf4QIyl.js.map → lexicon-IVRq2Uoo.js.map} +1 -1
  39. package/dist/chunks/{round-trip-Zm3_ivgq.js → round-trip-Cy3_SHRZ.js} +2 -2
  40. package/dist/chunks/{round-trip-Zm3_ivgq.js.map → round-trip-Cy3_SHRZ.js.map} +1 -1
  41. package/dist/chunks/{sigv4-EokFic1V.js → sigv4-BXwVbza3.js} +3 -3
  42. package/dist/chunks/{sigv4-EokFic1V.js.map → sigv4-BXwVbza3.js.map} +1 -1
  43. package/dist/chunks/{styles-CCs214_3.js → styles-CAVmBLgp.js} +4 -4
  44. package/dist/chunks/{styles-CCs214_3.js.map → styles-CAVmBLgp.js.map} +1 -1
  45. package/dist/chunks/{styles-DPQQIig4.js → styles-CPczw1Jz.js} +4 -4
  46. package/dist/chunks/{styles-DPQQIig4.js.map → styles-CPczw1Jz.js.map} +1 -1
  47. package/dist/chunks/{styles-Cm62yyQX.js → styles-boK6Ln54.js} +65 -30
  48. package/dist/chunks/styles-boK6Ln54.js.map +1 -0
  49. package/dist/chunks/{styles-yed-UMFdNqze.js → styles-yed-XeFBQ6VS.js} +8 -8
  50. package/dist/chunks/{styles-yed-UMFdNqze.js.map → styles-yed-XeFBQ6VS.js.map} +1 -1
  51. package/dist/cx.js +2 -2
  52. package/dist/cx2.js +2 -2
  53. package/dist/cys.js +1 -1
  54. package/dist/dot.js +7 -4
  55. package/dist/gexf.js +2 -2
  56. package/dist/gml.js +8 -8
  57. package/dist/gml.js.map +1 -1
  58. package/dist/graph-io.js +129 -104
  59. package/dist/graph-io.js.map +1 -1
  60. package/dist/graphml.js +2 -2
  61. package/dist/json.js +1 -1
  62. package/dist/pajek.js +1 -1
  63. package/dist/sources-cypher.js +25 -22
  64. package/dist/sources-cypher.js.map +1 -1
  65. package/dist/sources-ndex.js +2 -2
  66. package/dist/sources-rest.js +20 -4
  67. package/dist/sources-rest.js.map +1 -1
  68. package/dist/sources-sparql.js +40 -6
  69. package/dist/sources-sparql.js.map +1 -1
  70. package/dist/src/formats/dot/exporter.d.ts.map +1 -1
  71. package/dist/src/formats/dot/exporter.js +34 -2
  72. package/dist/src/formats/dot/exporter.js.map +1 -1
  73. package/dist/src/formats/dot/importer.d.ts +6 -1
  74. package/dist/src/formats/dot/importer.d.ts.map +1 -1
  75. package/dist/src/formats/dot/importer.js +65 -5
  76. package/dist/src/formats/dot/importer.js.map +1 -1
  77. package/dist/src/formats/dot/index.d.ts +3 -1
  78. package/dist/src/formats/dot/index.d.ts.map +1 -1
  79. package/dist/src/formats/dot/index.js +2 -1
  80. package/dist/src/formats/dot/index.js.map +1 -1
  81. package/dist/src/formats/dot/label-places.d.ts +7 -0
  82. package/dist/src/formats/dot/label-places.d.ts.map +1 -1
  83. package/dist/src/formats/dot/label-places.js +9 -3
  84. package/dist/src/formats/dot/label-places.js.map +1 -1
  85. package/dist/src/formats/dot/names.d.ts +13 -0
  86. package/dist/src/formats/dot/names.d.ts.map +1 -1
  87. package/dist/src/formats/dot/names.js +13 -0
  88. package/dist/src/formats/dot/names.js.map +1 -1
  89. package/dist/src/formats/dot/styles.d.ts +10 -0
  90. package/dist/src/formats/dot/styles.d.ts.map +1 -1
  91. package/dist/src/formats/dot/styles.js +49 -3
  92. package/dist/src/formats/dot/styles.js.map +1 -1
  93. package/dist/src/formats/gml/styles.js +1 -1
  94. package/dist/src/formats/gml/styles.js.map +1 -1
  95. package/dist/src/formats/graphml/styles-yed.js +3 -3
  96. package/dist/src/formats/graphml/styles-yed.js.map +1 -1
  97. package/dist/src/formats/graphml/styles-yfiles3.d.ts.map +1 -1
  98. package/dist/src/formats/graphml/styles-yfiles3.js +6 -4
  99. package/dist/src/formats/graphml/styles-yfiles3.js.map +1 -1
  100. package/dist/src/formats/json/styles.d.ts.map +1 -1
  101. package/dist/src/formats/json/styles.js +94 -6
  102. package/dist/src/formats/json/styles.js.map +1 -1
  103. package/dist/src/formats/pajek/draw.d.ts +8 -0
  104. package/dist/src/formats/pajek/draw.d.ts.map +1 -1
  105. package/dist/src/formats/pajek/draw.js +10 -0
  106. package/dist/src/formats/pajek/draw.js.map +1 -1
  107. package/dist/src/formats/pajek/styles.d.ts.map +1 -1
  108. package/dist/src/formats/pajek/styles.js +142 -25
  109. package/dist/src/formats/pajek/styles.js.map +1 -1
  110. package/dist/src/index.d.ts +3 -3
  111. package/dist/src/index.d.ts.map +1 -1
  112. package/dist/src/index.js +2 -2
  113. package/dist/src/index.js.map +1 -1
  114. package/dist/src/sources/credentials.d.ts +50 -1
  115. package/dist/src/sources/credentials.d.ts.map +1 -1
  116. package/dist/src/sources/credentials.js +69 -0
  117. package/dist/src/sources/credentials.js.map +1 -1
  118. package/dist/src/sources/cypher/index.d.ts.map +1 -1
  119. package/dist/src/sources/cypher/index.js +12 -11
  120. package/dist/src/sources/cypher/index.js.map +1 -1
  121. package/dist/src/sources/cypher/query-builder.d.ts +6 -6
  122. package/dist/src/sources/cypher/query-builder.d.ts.map +1 -1
  123. package/dist/src/sources/cypher/query-builder.js +15 -15
  124. package/dist/src/sources/cypher/query-builder.js.map +1 -1
  125. package/dist/src/sources/rest/descriptor.d.ts.map +1 -1
  126. package/dist/src/sources/rest/descriptor.js +4 -0
  127. package/dist/src/sources/rest/descriptor.js.map +1 -1
  128. package/dist/src/sources/rest/openalex.d.ts +4 -2
  129. package/dist/src/sources/rest/openalex.d.ts.map +1 -1
  130. package/dist/src/sources/rest/openalex.js +4 -2
  131. package/dist/src/sources/rest/openalex.js.map +1 -1
  132. package/dist/src/sources/rest/source.d.ts.map +1 -1
  133. package/dist/src/sources/rest/source.js +23 -0
  134. package/dist/src/sources/rest/source.js.map +1 -1
  135. package/dist/src/sources/run.d.ts +2 -0
  136. package/dist/src/sources/run.d.ts.map +1 -1
  137. package/dist/src/sources/run.js +30 -3
  138. package/dist/src/sources/run.js.map +1 -1
  139. package/dist/src/sources/sparql/index.d.ts.map +1 -1
  140. package/dist/src/sources/sparql/index.js +14 -1
  141. package/dist/src/sources/sparql/index.js.map +1 -1
  142. package/dist/src/sources/sparql/query.d.ts +2 -1
  143. package/dist/src/sources/sparql/query.d.ts.map +1 -1
  144. package/dist/src/sources/sparql/query.js +55 -4
  145. package/dist/src/sources/sparql/query.js.map +1 -1
  146. package/dist/src/sources/types.d.ts +29 -0
  147. package/dist/src/sources/types.d.ts.map +1 -1
  148. package/dist/src/styles/canon/enums.d.ts.map +1 -1
  149. package/dist/src/styles/canon/enums.js +8 -0
  150. package/dist/src/styles/canon/enums.js.map +1 -1
  151. package/dist/src/styles/cyjs/cascade.d.ts.map +1 -1
  152. package/dist/src/styles/cyjs/cascade.js +124 -0
  153. package/dist/src/styles/cyjs/cascade.js.map +1 -1
  154. package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -1
  155. package/dist/src/styles/cyjs/defaults-table.js +1 -0
  156. package/dist/src/styles/cyjs/defaults-table.js.map +1 -1
  157. package/dist/src/styles/cyjs/emit.d.ts.map +1 -1
  158. package/dist/src/styles/cyjs/emit.js +30 -1
  159. package/dist/src/styles/cyjs/emit.js.map +1 -1
  160. package/dist/src/styles/cyjs/mappers.d.ts.map +1 -1
  161. package/dist/src/styles/cyjs/mappers.js +14 -0
  162. package/dist/src/styles/cyjs/mappers.js.map +1 -1
  163. package/dist/src/styles/types.d.ts +65 -0
  164. package/dist/src/styles/types.d.ts.map +1 -1
  165. package/dist/src/styles/vocabulary.d.ts.map +1 -1
  166. package/dist/src/styles/vocabulary.js +21 -0
  167. package/dist/src/styles/vocabulary.js.map +1 -1
  168. package/dist/styles.js +6 -6
  169. package/dist/xgmml.js +3 -3
  170. package/package.json +2 -2
  171. package/src/formats/dot/exporter.ts +37 -1
  172. package/src/formats/dot/importer.ts +75 -4
  173. package/src/formats/dot/index.ts +3 -1
  174. package/src/formats/dot/label-places.ts +16 -3
  175. package/src/formats/dot/names.ts +15 -0
  176. package/src/formats/dot/styles.ts +55 -3
  177. package/src/formats/gml/styles.ts +1 -1
  178. package/src/formats/graphml/styles-yed.ts +3 -3
  179. package/src/formats/graphml/styles-yfiles3.ts +6 -4
  180. package/src/formats/json/styles.ts +102 -6
  181. package/src/formats/pajek/draw.ts +11 -0
  182. package/src/formats/pajek/styles.ts +151 -26
  183. package/src/index.ts +7 -0
  184. package/src/sources/credentials.ts +90 -1
  185. package/src/sources/cypher/index.ts +12 -11
  186. package/src/sources/cypher/query-builder.ts +15 -15
  187. package/src/sources/rest/descriptor.ts +4 -0
  188. package/src/sources/rest/openalex.ts +4 -2
  189. package/src/sources/rest/source.ts +25 -0
  190. package/src/sources/run.ts +35 -3
  191. package/src/sources/sparql/index.ts +16 -1
  192. package/src/sources/sparql/query.ts +58 -4
  193. package/src/sources/types.ts +33 -0
  194. package/src/styles/canon/enums.ts +9 -0
  195. package/src/styles/cyjs/cascade.ts +143 -0
  196. package/src/styles/cyjs/defaults-table.ts +1 -0
  197. package/src/styles/cyjs/emit.ts +35 -1
  198. package/src/styles/cyjs/mappers.ts +14 -0
  199. package/src/styles/types.ts +65 -0
  200. package/src/styles/vocabulary.ts +21 -0
  201. package/dist/chunks/block-iptrlMBb.js.map +0 -1
  202. package/dist/chunks/credentials-DXHx7nwR.js.map +0 -1
  203. package/dist/chunks/emit-BwHQkZle.js.map +0 -1
  204. package/dist/chunks/exporter-D2CETOMK.js.map +0 -1
  205. package/dist/chunks/importer-CT9mJ1nn.js.map +0 -1
  206. package/dist/chunks/importer-DaLTjbds.js.map +0 -1
  207. package/dist/chunks/importer-vRq4h3j5.js.map +0 -1
  208. package/dist/chunks/styles-Cm62yyQX.js.map +0 -1
package/dist/graphml.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { G, a } from "./chunks/constants-CKkYLPtt.js";
2
- import { g, a as a2 } from "./chunks/importer-CT9mJ1nn.js";
3
- import { G as G2 } from "./chunks/styles-yed-UMFdNqze.js";
2
+ import { g, a as a2 } from "./chunks/importer-C6NVpCXp.js";
3
+ import { G as G2 } from "./chunks/styles-yed-XeFBQ6VS.js";
4
4
  export {
5
5
  G as GRAPHML_ISSUE,
6
6
  a as GRAPHML_LOSS,
package/dist/json.js CHANGED
@@ -1,4 +1,4 @@
1
- import { J, a, b, d, j, c, e, f, s } from "./chunks/exporter-D2CETOMK.js";
1
+ import { J, a, b, d, j, c, e, f, s } from "./chunks/exporter-CQQZFJ2v.js";
2
2
  export {
3
3
  J as JSON_DIALECTS,
4
4
  a as JSON_ISSUE,
package/dist/pajek.js CHANGED
@@ -1,4 +1,4 @@
1
- import { P, a, b, c, p, d } from "./chunks/importer-vRq4h3j5.js";
1
+ import { P, a, b, c, p, d } from "./chunks/importer-DgG4v1Ms.js";
2
2
  export {
3
3
  P as PAJEK_ISSUE,
4
4
  a as PAJEK_LOSS,
@@ -1,10 +1,10 @@
1
1
  import { b as throwIfAborted } from "./chunks/input-CAxt_aV-.js";
2
2
  import { P as PRECISION_CODE, ah as ImportError } from "./chunks/report-CwMfYa9J.js";
3
3
  import { C as CYPHER_DESCRIPTOR, N as NEO4J_DESCRIPTOR, a as NEPTUNE_DESCRIPTOR, S as SOURCE_ISSUE } from "./chunks/codes-BE2xir2k.js";
4
- import { w as warnOn, f as failOn, p as SOURCE_DEGREE_ATTR, b as failAlone, o as originOf, u as unwrapCredential, d as defineSource, C as CYPHER_SOURCE_ID, h as NEO4J_SOURCE_ID, i as NEPTUNE_SOURCE_ID } from "./chunks/credentials-DXHx7nwR.js";
5
- import { sha256Hex } from "./chunks/sigv4-EokFic1V.js";
4
+ import { w as warnOn, f as failOn, q as SOURCE_DEGREE_ATTR, b as failAlone, o as originOf, u as unwrapCredential, d as defineSource, C as CYPHER_SOURCE_ID, h as NEO4J_SOURCE_ID, i as NEPTUNE_SOURCE_ID } from "./chunks/credentials-CmvJXYeH.js";
5
+ import { sha256Hex } from "./chunks/sigv4-BXwVbza3.js";
6
6
  import { INVALID_INDEX } from "@graphty/graph-format";
7
- import { t as transportOptions, i as isLoopback } from "./chunks/context-C3p0RQxR.js";
7
+ import { t as transportOptions, i as isLoopback } from "./chunks/context-DizmppHy.js";
8
8
  class GraphNode {
9
9
  /**
10
10
  * Create one.
@@ -544,15 +544,17 @@ function edgePage(profile, filters, pageSize, after) {
544
544
  `ORDER BY key LIMIT ${pageSize}`
545
545
  ].filter((l) => l !== null).join(" ");
546
546
  }
547
- function edgesAmong(profile, filters, after) {
548
- const where = [nodePredicate("a", filters), nodePredicate("b", filters)].filter((p) => p !== null);
547
+ function edgesAmong(profile, filters) {
548
+ const ka = idExpression("a", profile, filters);
549
+ const kb = idExpression("b", profile, filters);
550
+ const ends = [nodePredicate("a", filters), nodePredicate("b", filters)].filter((p) => p !== null);
551
+ const rest = ends.length === 0 ? "" : ` AND ${ends.join(" AND ")}`;
552
+ const pattern = `MATCH (a)-[r${typesPattern(filters)}]->(b)`;
549
553
  return [
550
- `MATCH (a)-[r${typesPattern(filters)}]->(b)`,
551
- where.length === 0 ? null : `WHERE ${where.join(" AND ")}`,
552
- `WITH a, r, b, ${idExpression("a", profile, filters)} AS ka, ${idExpression("b", profile, filters)} AS kb`,
553
- `WHERE ka <= $last AND kb <= $last${after ? " AND (ka > $after OR kb > $after)" : ""}`,
554
- "RETURN a, r, b"
555
- ].filter((l) => l !== null).join(" ");
554
+ `${pattern} WHERE ${ka} IN $keys AND ${kb} <= $last${rest} RETURN a, r, b`,
555
+ "UNION ALL",
556
+ `${pattern} WHERE ${kb} IN $keys AND ${ka} <= $last AND NOT ${ka} IN $keys${rest} RETURN a, r, b`
557
+ ].join(" ");
556
558
  }
557
559
  function neighborhood(profile, filters, shape, degree) {
558
560
  const rel = `[${typesPattern(filters)}*1..${shape.depth}]`;
@@ -1066,7 +1068,8 @@ class Reader {
1066
1068
  * Mode "query": the reader's own query, as written. With a node cap (or a cursor from a capped
1067
1069
  * run) the server returns at most that many rows (`CALL { query } RETURN * LIMIT n`), and a full
1068
1070
  * result hands back a cursor that runs the query again with twice the rows, for the caller to
1069
- * merge. A server that refuses the wrapper runs the query uncapped.
1071
+ * merge. A server that refuses the wrapper fails the load with `E_SOURCE_PARAM` (`name:
1072
+ * "maxNodes"`, `reason: "uncappable"`): the query is never run past the cap the caller set.
1070
1073
  * @param query - the query
1071
1074
  * @param cursor - where to resume: `{ rows }` from an earlier capped run
1072
1075
  * @returns the one page
@@ -1077,7 +1080,6 @@ class Reader {
1077
1080
  const asked = cursor?.rows ?? ctx.limits.maxNodes;
1078
1081
  const rows = asked === void 0 || asked === null ? null : Number(checkedInteger(asked, "maxNodes", 1, Number.MAX_SAFE_INTEGER, ctx.report));
1079
1082
  let result;
1080
- let capped = rows !== null;
1081
1083
  try {
1082
1084
  result = await this.transport.run(
1083
1085
  rows === null ? query : `CALL {
@@ -1087,16 +1089,18 @@ RETURN * LIMIT ${String(rows)}`,
1087
1089
  parameters
1088
1090
  );
1089
1091
  } catch (err) {
1090
- if (!capped || !(err instanceof ImportError) || err.issue?.code !== SOURCE_ISSUE.E_SOURCE_QUERY) {
1092
+ if (rows === null || !(err instanceof ImportError) || err.issue?.code !== SOURCE_ISSUE.E_SOURCE_QUERY) {
1091
1093
  throw err;
1092
1094
  }
1093
- capped = false;
1094
- result = await this.transport.run(query, parameters);
1095
+ return failOn(ctx.report, "E_SOURCE_PARAM", "the server cannot cap this query; load it without maxNodes", {
1096
+ name: "maxNodes",
1097
+ reason: "uncappable"
1098
+ });
1095
1099
  }
1096
1100
  const collected = new Collector();
1097
1101
  collected.add(result, false);
1098
1102
  requireGraph(result, collected, ctx.report);
1099
- const full = capped && rows !== null && result.rows.length >= rows;
1103
+ const full = rows !== null && result.rows.length >= rows;
1100
1104
  return { collected, next: full ? { rows: rows * 2 } : null };
1101
1105
  }
1102
1106
  /**
@@ -1156,13 +1160,12 @@ RETURN * LIMIT ${String(rows)}`,
1156
1160
  (d) => nodePage(profile, this.filters, String(size), after !== null, d),
1157
1161
  after === null ? {} : { after }
1158
1162
  );
1159
- const last = rows.at(-1)?.[fields.indexOf("key")];
1163
+ const at = fields.indexOf("key");
1164
+ const last = rows.at(-1)?.[at];
1160
1165
  const key = typeof last === "string" || typeof last === "number" ? last : null;
1161
1166
  if (key !== null) {
1162
- const among = await this.transport.run(edgesAmong(profile, this.filters, after !== null), {
1163
- last: key,
1164
- ...after === null ? {} : { after }
1165
- });
1167
+ const keys = rows.map((row) => row[at]);
1168
+ const among = await this.transport.run(edgesAmong(profile, this.filters), { keys, last: key });
1166
1169
  collected.add(among, false);
1167
1170
  }
1168
1171
  const next = rows.length >= size && key !== null ? { phase: "nodes", after: key } : null;