@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
@@ -1,6 +1,6 @@
1
1
  import { b as throwIfAborted } from "./chunks/input-CAxt_aV-.js";
2
- import { d as defineSource, S as SPARQL_SOURCE_ID, f as failOn } from "./chunks/credentials-DXHx7nwR.js";
3
- import { sha256Hex } from "./chunks/sigv4-EokFic1V.js";
2
+ import { d as defineSource, S as SPARQL_SOURCE_ID, f as failOn } from "./chunks/credentials-CmvJXYeH.js";
3
+ import { sha256Hex } from "./chunks/sigv4-BXwVbza3.js";
4
4
  import { S as SPARQL_DESCRIPTOR } from "./chunks/descriptor-B28U25x4.js";
5
5
  const TERM = /\s*(?:<([^<>]*)>|_:([\w.-]*[\w-])|"((?:[^"\\]|\\.)*)"(?:@([A-Za-z][\w-]*)|\^\^<([^<>]*)>)?)/y;
6
6
  const END = /\s*\.\s*(?:#.*)?$/y;
@@ -129,13 +129,41 @@ const LANGUAGE = /^[a-z]{1,8}(-[a-z\d]{1,8})*$/i;
129
129
  function bare(query) {
130
130
  return query.replaceAll(/<[^<>\s]*>/g, "<>").replaceAll(/"""[\s\S]*?"""|'''[\s\S]*?'''|"(?:[^"\\\n]|\\.)*"|'(?:[^'\\\n]|\\.)*'/g, '""').replaceAll(/#[^\n]*/g, "");
131
131
  }
132
+ const UPDATE_KEYWORDS = /\b(INSERT|DELETE|LOAD|CLEAR|DROP|CREATE|ADD|MOVE|COPY|WITH)\b/i;
133
+ const DECLARATION = /^\s*(?:BASE|PREFIX\s*[^\s:<]*:)\s*<>/i;
134
+ function afterPrologue(text) {
135
+ let rest = text;
136
+ for (let found = DECLARATION.exec(rest); found !== null; found = DECLARATION.exec(rest)) {
137
+ rest = rest.slice(found[0].length);
138
+ }
139
+ return rest;
140
+ }
141
+ function keywordsOnly(text) {
142
+ return text.replaceAll(/[?$]\w+/g, "?v").replaceAll(/[\w.%:-]+/g, (run) => run.includes(":") ? "_" : run);
143
+ }
144
+ function semicolonOutside(text) {
145
+ let depth = 0;
146
+ for (const char of text) {
147
+ if (char === "{") {
148
+ depth++;
149
+ } else if (char === "}") {
150
+ depth--;
151
+ } else if (char === ";" && depth <= 0) {
152
+ return true;
153
+ }
154
+ }
155
+ return false;
156
+ }
132
157
  function readQuery(query) {
133
- const text = bare(query);
134
- const form = /\b(CONSTRUCT|DESCRIBE|SELECT|ASK)\b/i.exec(text)?.[1]?.toLowerCase() ?? null;
158
+ const body = afterPrologue(bare(query));
159
+ const text = keywordsOnly(body);
160
+ const first = /^\s*([A-Za-z]+)/.exec(text)?.[1]?.toUpperCase() ?? "";
161
+ const update = UPDATE_KEYWORDS.test(text) || semicolonOutside(text);
162
+ const form = !update && ["CONSTRUCT", "DESCRIBE", "SELECT", "ASK"].includes(first) ? first.toLowerCase() : null;
135
163
  const tail = text.slice(text.lastIndexOf("}") + 1);
136
164
  let templateVars = [];
137
165
  if (form === "construct") {
138
- const template = /\bCONSTRUCT\s*\{([^}]*)\}/i.exec(text)?.[1] ?? "";
166
+ const template = /\bCONSTRUCT\s*\{([^}]*)\}/i.exec(body)?.[1] ?? "";
139
167
  templateVars = [...new Set(template.match(/[?$]\w+/g) ?? [])].map((v) => `?${v.slice(1)}`);
140
168
  }
141
169
  return {
@@ -309,8 +337,14 @@ function write(graphed, sink, ctx) {
309
337
  }
310
338
  }
311
339
  }
340
+ function byCodeUnits(a, b) {
341
+ if (a === b) {
342
+ return 0;
343
+ }
344
+ return a < b ? -1 : 1;
345
+ }
312
346
  function hashOf(triples) {
313
- return sha256Hex(triples.map(canonicalTriple).sort().join("\n"));
347
+ return sha256Hex(triples.map(canonicalTriple).sort(byCodeUnits).join("\n"));
314
348
  }
315
349
  async function load(params, sink, ctx) {
316
350
  const plan = planOf(params, ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"sources-sparql.js","sources":["../src/sources/sparql/ntriples.ts","../src/sources/sparql/query.ts","../src/sources/sparql/index.ts"],"sourcesContent":["/**\n * Reading the N-Triples a CONSTRUCT or DESCRIBE answers, and turning triples into nodes and edges:\n * an IRI or blank-node object is an edge from the subject, a literal is an attribute of the\n * subject named by the predicate's local name.\n */\n\n/** One RDF term. */\nexport type Term =\n | { readonly kind: \"iri\"; readonly value: string }\n | { readonly kind: \"bnode\"; readonly value: string }\n | { readonly kind: \"literal\"; readonly value: string; readonly lang: string; readonly datatype: string };\n\n/** One triple. */\nexport interface Triple {\n /** The subject: an IRI or a blank node. */\n readonly s: Term;\n /** The predicate IRI. */\n readonly p: string;\n /** The object. */\n readonly o: Term;\n}\n\n/** One term at the sticky position: an IRI, a blank node, or a literal with its tag or type. */\nconst TERM = /\\s*(?:<([^<>]*)>|_:([\\w.-]*[\\w-])|\"((?:[^\"\\\\]|\\\\.)*)\"(?:@([A-Za-z][\\w-]*)|\\^\\^<([^<>]*)>)?)/y;\n\n/** The end of a statement: a dot, then an optional comment. */\nconst END = /\\s*\\.\\s*(?:#.*)?$/y;\n\n/** The XSD namespace. */\nconst XSD = \"http://www.w3.org/2001/XMLSchema#\";\n\n/** The XSD numeric types, read as numbers. */\nconst NUMERIC: ReadonlySet<string> = new Set(\n [\n \"integer\",\n \"decimal\",\n \"double\",\n \"float\",\n \"int\",\n \"long\",\n \"short\",\n \"byte\",\n \"nonNegativeInteger\",\n \"nonPositiveInteger\",\n \"positiveInteger\",\n \"negativeInteger\",\n \"unsignedInt\",\n \"unsignedLong\",\n \"unsignedShort\",\n \"unsignedByte\",\n ].map((t) => XSD + t),\n);\n\n/**\n * Undo N-Triples escapes.\n * @param text - escaped text\n * @returns the text\n */\nfunction unescape(text: string): string {\n if (!text.includes(\"\\\\\")) {\n return text;\n }\n const simple: Readonly<Record<string, string>> = { t: \"\\t\", b: \"\\b\", n: \"\\n\", r: \"\\r\", f: \"\\f\" };\n return text.replaceAll(\n /\\\\(?:u([\\da-fA-F]{4})|U([\\da-fA-F]{8})|(.))/g,\n (_m, u4?: string, u8?: string, c?: string) => {\n const hex = u4 ?? u8;\n if (hex !== undefined) {\n return String.fromCodePoint(Number.parseInt(hex, 16));\n }\n return simple[c ?? \"\"] ?? c ?? \"\";\n },\n );\n}\n\n/**\n * Read one term at `at`.\n * @param line - the line\n * @param at - where to start\n * @returns the term and where it ended, or null when there is none\n */\nfunction readTerm(line: string, at: number): { term: Term; end: number } | null {\n TERM.lastIndex = at;\n const m = TERM.exec(line);\n if (m === null) {\n return null;\n }\n const [, iri, bnode, lexical, lang, datatype] = m;\n let term: Term;\n if (iri !== undefined) {\n term = { kind: \"iri\", value: unescape(iri) };\n } else if (bnode === undefined) {\n term = {\n kind: \"literal\",\n value: unescape(lexical ?? \"\"),\n lang: lang?.toLowerCase() ?? \"\",\n datatype: datatype ?? \"\",\n };\n } else {\n term = { kind: \"bnode\", value: `_:${bnode}` };\n }\n return { term, end: TERM.lastIndex };\n}\n\n/**\n * Parse N-Triples.\n * @param text - the document\n * @returns the triples, or the 1-based number of the first line that is not a triple\n */\nexport function parseNTriples(text: string): { triples: Triple[]; badLine: number | null } {\n const triples: Triple[] = [];\n const lines = text.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const trimmed = line.trim();\n if (trimmed === \"\" || trimmed.startsWith(\"#\")) {\n continue;\n }\n const s = readTerm(line, 0);\n const p = s === null ? null : readTerm(line, s.end);\n const o = p === null ? null : readTerm(line, p.end);\n END.lastIndex = o?.end ?? 0;\n if (\n s === null ||\n p === null ||\n o === null ||\n s.term.kind === \"literal\" ||\n p.term.kind !== \"iri\" ||\n !END.test(line)\n ) {\n return { triples, badLine: i + 1 };\n }\n triples.push({ s: s.term, p: p.term.value, o: o.term });\n }\n return { triples, badLine: null };\n}\n\n/**\n * The local name of an IRI: what follows its last `#`, else its last `/`, else its last `:`.\n * @param iri - the IRI\n * @returns the local name, or the whole IRI when nothing follows\n */\nexport function localName(iri: string): string {\n const cut = Math.max(iri.lastIndexOf(\"#\"), iri.lastIndexOf(\"/\"), iri.lastIndexOf(\":\"));\n const name = iri.slice(cut + 1);\n return name === \"\" ? iri : name;\n}\n\n/**\n * A literal's value: numbers and booleans as such, everything else as its text.\n * @param term - the literal\n * @returns the value\n */\nfunction literalValue(term: Extract<Term, { kind: \"literal\" }>): string | number | boolean {\n if (NUMERIC.has(term.datatype)) {\n const n = Number(term.value);\n return Number.isFinite(n) ? n : term.value;\n }\n if (term.datatype === `${XSD}boolean`) {\n return term.value === \"true\" || term.value === \"1\";\n }\n return term.value;\n}\n\n/**\n * Whether a literal's language tag passes a language filter (SPARQL's langMatches, plus untagged).\n * @param lang - the literal's tag, lowercase\n * @param want - the filter, lowercase, or \"\" for none\n * @returns whether to keep it\n */\nfunction languageMatches(lang: string, want: string): boolean {\n return want === \"\" || lang === \"\" || lang === want || lang.startsWith(`${want}-`);\n}\n\n/** The nodes and edges of some triples. */\nexport interface Graphed {\n /** Each subject's literal attributes, by subject id; a predicate's first value wins. */\n readonly nodes: Map<string, Record<string, string | number | boolean>>;\n /** One edge per IRI or blank-node object. */\n readonly edges: { source: string; target: string; type: string; predicate: string }[];\n}\n\n/**\n * Turn triples into nodes and edges.\n * @param triples - the triples\n * @param language - the language filter, lowercase, or \"\"\n * @param into - nodes and edges to add to\n * @returns the nodes and edges\n */\nexport function graphTriples(triples: readonly Triple[], language: string, into?: Graphed): Graphed {\n const out: Graphed = into ?? { nodes: new Map(), edges: [] };\n for (const { s, p, o } of triples) {\n let attrs = out.nodes.get(s.value);\n if (attrs === undefined) {\n attrs = {};\n out.nodes.set(s.value, attrs);\n }\n if (o.kind === \"literal\") {\n const key = localName(p);\n // ponytail: one value per predicate (the first); a list column if multi-valued literals matter\n if (languageMatches(o.lang, language) && !(key in attrs)) {\n attrs[key] = literalValue(o);\n }\n } else {\n out.edges.push({ source: s.value, target: o.value, type: localName(p), predicate: p });\n }\n }\n return out;\n}\n\n/**\n * One canonical line per triple, for the content hash.\n * @param t - the triple\n * @returns the line\n */\nexport function canonicalTriple(t: Triple): string {\n const o = t.o.kind === \"literal\" ? JSON.stringify([t.o.value, t.o.lang, t.o.datatype]) : t.o.value;\n return `${t.s.value} ${t.p} ${o}`;\n}\n","/**\n * The SPARQL the source sends: the caller's CONSTRUCT or DESCRIBE with the paging the source\n * adds (`ORDER BY` the template's variables, `LIMIT` and `OFFSET`), and the generated queries of\n * \"all\", \"neighborhood\" and expand (`VALUES ?s { ... }`).\n */\n\n/** Characters an IRIREF may not hold. */\nconst NOT_IRI = /[\\s<>\"{}|^`\\\\]/;\n\n/** A language tag a filter may name. */\nconst LANGUAGE = /^[a-z]{1,8}(-[a-z\\d]{1,8})*$/i;\n\n/** The query forms, as the first keyword after the prologue. */\ntype QueryForm = \"construct\" | \"describe\" | \"select\" | \"ask\" | null;\n\n/** What paging the caller's query takes. */\ninterface UserQuery {\n /** Its form. */\n readonly form: QueryForm;\n /** Whether it sets its own LIMIT or OFFSET, so the source sends it as written. */\n readonly ownLimit: boolean;\n /** Whether it orders its solutions itself. */\n readonly ordered: boolean;\n /** The variables of a CONSTRUCT template, in order, for ORDER BY. */\n readonly templateVars: readonly string[];\n}\n\n/**\n * The query with IRIs, strings and comments blanked out, so keywords and braces can be found.\n * @param query - the query\n * @returns the bare text\n */\nfunction bare(query: string): string {\n return query\n .replaceAll(/<[^<>\\s]*>/g, \"<>\")\n .replaceAll(/\"\"\"[\\s\\S]*?\"\"\"|'''[\\s\\S]*?'''|\"(?:[^\"\\\\\\n]|\\\\.)*\"|'(?:[^'\\\\\\n]|\\\\.)*'/g, '\"\"')\n .replaceAll(/#[^\\n]*/g, \"\");\n}\n\n/**\n * Read what paging a caller's query takes.\n * @param query - the query\n * @returns its form, its own modifiers and its template variables\n */\nexport function readQuery(query: string): UserQuery {\n const text = bare(query);\n const form = /\\b(CONSTRUCT|DESCRIBE|SELECT|ASK)\\b/i.exec(text)?.[1]?.toLowerCase() ?? null;\n // the solution modifiers follow the last closing brace (a trailing VALUES block is not handled)\n const tail = text.slice(text.lastIndexOf(\"}\") + 1);\n let templateVars: string[] = [];\n if (form === \"construct\") {\n const template = /\\bCONSTRUCT\\s*\\{([^}]*)\\}/i.exec(text)?.[1] ?? \"\";\n templateVars = [...new Set(template.match(/[?$]\\w+/g) ?? [])].map((v) => `?${v.slice(1)}`);\n }\n return {\n form: form as QueryForm,\n ownLimit: /\\b(LIMIT|OFFSET)\\b/i.test(tail),\n ordered: /\\bORDER\\s+BY\\b/i.test(tail),\n templateVars,\n };\n}\n\n/**\n * The caller's query with one page's modifiers added.\n * @param query - the query\n * @param shape - what readQuery found\n * @param limit - solutions per page\n * @param offset - solutions to skip\n * @returns the query to send\n */\nexport function pagedQuery(query: string, shape: UserQuery, limit: number, offset: number): string {\n const order = shape.ordered || shape.templateVars.length === 0 ? \"\" : `\\nORDER BY ${shape.templateVars.join(\" \")}`;\n const skip = offset > 0 ? ` OFFSET ${String(offset)}` : \"\";\n return `${query.trimEnd()}${order}\\nLIMIT ${String(limit)}${skip}`;\n}\n\n/**\n * An IRI as a SPARQL term, or null when it cannot be one.\n * @param id - the id\n * @returns `<iri>`, or null\n */\nexport function iriTerm(id: unknown): string | null {\n const text = String(id);\n return /^[a-z][\\w+.-]*:/i.test(text) && !NOT_IRI.test(text) ? `<${text}>` : null;\n}\n\n/** What generated queries keep: literals in a language, edges along some predicates. */\ninterface TripleFilter {\n /** Keep literals tagged with this language or untagged; \"\" keeps every literal. */\n readonly language: string;\n /** Keep edges whose predicate starts with one of these IRIs; empty keeps every edge. */\n readonly predicates: readonly string[];\n}\n\n/**\n * The FILTERs of generated queries, or \"\" for none. Both values are checked by the caller.\n * @param filter - the language and the predicate prefixes\n * @returns the FILTER clauses\n */\nfunction filters(filter: TripleFilter): string {\n const { language, predicates } = filter;\n const lang =\n language === \"\" ? \"\" : ` FILTER(!isLiteral(?o) || lang(?o) = \"\" || langMatches(lang(?o), \"${language}\"))`;\n const along = predicates.map((p) => `STRSTARTS(STR(?p), \"${p}\")`).join(\" || \");\n return predicates.length === 0 ? lang : `${lang} FILTER(isLiteral(?o) || ${along})`;\n}\n\n/**\n * Whether a language tag may go into a FILTER.\n * @param language - the tag\n * @returns whether it is well formed\n */\nexport function validLanguage(language: string): boolean {\n return LANGUAGE.test(language);\n}\n\n/**\n * Mode \"all\": every triple, ordered so pages are stable.\n * @param filter - what to keep\n * @param limit - solutions per page\n * @param offset - solutions to skip\n * @returns the query\n */\nexport function allQuery(filter: TripleFilter, limit: number, offset: number): string {\n return pagedQuery(\n `CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o .${filters(filter)} }`,\n { form: \"construct\", ownLimit: false, ordered: false, templateVars: [\"?s\", \"?p\", \"?o\"] },\n limit,\n offset,\n );\n}\n\n/**\n * The triples around some IRIs: out (`VALUES ?s`), in (`VALUES ?o`) or both.\n * @param iris - the IRIs as terms\n * @param direction - which triples\n * @param filter - what to keep\n * @param limit - solutions per page\n * @param offset - solutions to skip\n * @returns the query\n */\nexport function aroundQuery(\n iris: readonly string[],\n direction: \"out\" | \"in\" | \"both\",\n filter: TripleFilter,\n limit: number,\n offset: number,\n): string {\n const values = iris.join(\" \");\n const out = `{ VALUES ?s { ${values} } ?s ?p ?o .${filters(filter)} }`;\n const inward = `{ VALUES ?o { ${values} } ?s ?p ?o .${filters({ ...filter, language: \"\" })} }`;\n let where = `${out} UNION ${inward}`;\n if (direction !== \"both\") {\n where = direction === \"out\" ? out : inward;\n }\n return pagedQuery(\n `CONSTRUCT { ?s ?p ?o } WHERE { ${where} }`,\n { form: \"construct\", ownLimit: false, ordered: false, templateVars: [\"?s\", \"?p\", \"?o\"] },\n limit,\n offset,\n );\n}\n","/**\n * `@graphty/graph-io/sources/sparql`: the SPARQL source. It sends CONSTRUCT (or DESCRIBE) queries\n * over the SPARQL 1.1 protocol (a form POST, N-Triples back) and reads the triples as a graph: an\n * IRI or blank-node object is an edge from the subject (`type` is the predicate's local name,\n * `predicate` the full IRI), a literal is an attribute of the subject named by the predicate's\n * local name. Node ids are the IRIs.\n *\n * - Paging: the source adds `ORDER BY` (the template's variables) and `LIMIT` / `OFFSET` to the\n * caller's query, unless it sets its own; a load stops between pages at a cap and hands back\n * `{ offset }` as its cursor. A page is `pageSize` solutions, so its triple count varies; the\n * first empty page ends the load.\n * - Expand: the triples of the seeds, `VALUES ?s { ... }` out and `VALUES ?o { ... }` in.\n * - Validate: SHA-256 of the first page's triples.\n *\n * Experimental.\n * @module @graphty/graph-io/sources/sparql\n */\n\nimport { type GraphSink } from \"@graphty/graph-format\";\n\nimport { throwIfAborted } from \"../../common/input.js\";\nimport { type ImportReport } from \"../../types.js\";\nimport { defineSource } from \"../define.js\";\nimport { failOn } from \"../fail.js\";\nimport { SPARQL_SOURCE_ID } from \"../ids.js\";\nimport { sha256Hex } from \"../sigv4.js\";\nimport {\n type ExpandRequest,\n type GraphSource,\n type SourceContext,\n type SourceCursor,\n type SourceFreshness,\n type SourceProbe,\n} from \"../types.js\";\nimport { SPARQL_DESCRIPTOR } from \"./descriptor.js\";\nimport { canonicalTriple, type Graphed, graphTriples, parseNTriples, type Triple } from \"./ntriples.js\";\nimport { type SparqlParams } from \"./params.js\";\nimport { allQuery, aroundQuery, iriTerm, pagedQuery, readQuery, validLanguage } from \"./query.js\";\n\nexport { SPARQL_DESCRIPTOR } from \"./descriptor.js\";\nexport { type SparqlParams } from \"./params.js\";\n\n/** Solutions per page when the params name none. */\nconst DEFAULT_PAGE_SIZE = 1000;\n\n/** Triples per hop of an expansion when the request names no limit. */\nconst DEFAULT_EXPAND_LIMIT = 500;\n\n/** The deepest expansion, as for every built-in source. */\nconst MAX_DEPTH = 10;\n\n/** What CONSTRUCT and DESCRIBE are asked to answer. */\nconst ACCEPT_TRIPLES = \"application/n-triples, text/plain;q=0.9\";\n\n/** One page's query, by offset; `paged` false when the query is sent once, as written. */\ninterface Plan {\n /** The query of the page at an offset. */\n readonly at: (offset: number) => string;\n /** Whether the source pages it. */\n readonly paged: boolean;\n}\n\n/**\n * Send a query and read the answer as N-Triples.\n * @param ctx - the context\n * @param query - the query\n * @returns the triples\n */\nasync function send(ctx: SourceContext, query: string): Promise<Triple[]> {\n throwIfAborted(ctx.signal);\n const response = await ctx.fetch(ctx.endpoint ?? \"\", {\n method: \"POST\",\n idempotent: true,\n headers: { Accept: ACCEPT_TRIPLES, \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({ query }).toString(),\n allowStatus: [400],\n });\n if (response.status === 400) {\n const text = (await response.text()).trim().slice(0, 500);\n failOn(ctx.report, \"E_SOURCE_QUERY\", \"the endpoint refused the query\", {\n serverCode: null,\n line: null,\n column: null,\n serverMessage: text === \"\" ? null : text,\n });\n }\n const contentType = response.headers.get(\"content-type\");\n const notTriples = (): never =>\n failOn(ctx.report, \"E_SOURCE_RESPONSE\", \"the endpoint did not answer N-Triples\", {\n expected: \"n-triples\",\n contentType,\n });\n if (contentType !== null && /html|json|xml/i.test(contentType)) {\n notTriples();\n }\n const { triples, badLine } = parseNTriples(await response.text());\n if (badLine !== null) {\n notTriples();\n }\n return triples;\n}\n\n/**\n * A whole-number param, checked.\n * @param value - the value\n * @param name - the param\n * @param max - the largest allowed\n * @param ctx - the context\n * @returns the number\n */\nfunction integer(value: number, name: string, max: number, ctx: SourceContext): number {\n if (!Number.isInteger(value) || value < 1 || value > max) {\n failOn(ctx.report, \"E_SOURCE_PARAM\", `${name} is an integer from 1 to ${String(max)}`, {\n name,\n reason: \"range\",\n });\n }\n return value;\n}\n\n/**\n * The language filter, lowercase and checked, or \"\" for none.\n * @param params - the params\n * @param ctx - the context\n * @returns the tag\n */\nfunction languageOf(params: SparqlParams, ctx: SourceContext): string {\n const language = params.language ?? \"\";\n if (language !== \"\" && !validLanguage(language)) {\n failOn(ctx.report, \"E_SOURCE_PARAM\", \"language is a language tag\", { name: \"language\", reason: \"type\" });\n }\n return language.toLowerCase();\n}\n\n/**\n * The predicate prefixes generated queries follow, checked.\n * @param params - the params\n * @param ctx - the context\n * @returns the prefixes; empty means every predicate\n */\nfunction predicatesOf(params: SparqlParams, ctx: SourceContext): readonly string[] {\n const list = params.predicates ?? [];\n const prefixes = typeof list === \"string\" ? [list] : list;\n for (const p of prefixes) {\n if (typeof p !== \"string\" || iriTerm(p) === null) {\n failOn(ctx.report, \"E_SOURCE_PARAM\", \"predicates are IRI prefixes\", { name: \"predicates\", reason: \"iri\" });\n }\n }\n return prefixes;\n}\n\n/**\n * Seed ids as IRI terms; a blank node or anything else that is not an IRI is refused.\n * @param ids - the ids\n * @param name - the param, for the error\n * @param ctx - the context\n * @returns the terms\n */\nfunction irisOf(ids: readonly unknown[] | undefined, name: string, ctx: SourceContext): string[] {\n if (ids === undefined || ids.length === 0) {\n failOn(ctx.report, \"E_SOURCE_PARAM\", `${name} needs at least one IRI`, { name, reason: \"required\" });\n }\n return ids.map(\n (id) => iriTerm(id) ?? failOn(ctx.report, \"E_SOURCE_PARAM\", `${name}: not an IRI`, { name, reason: \"iri\" }),\n );\n}\n\n/**\n * What a load sends, from its mode.\n * @param params - the params\n * @param ctx - the context\n * @returns the plan\n */\nfunction planOf(params: SparqlParams, ctx: SourceContext): Plan {\n const size = integer(params.pageSize ?? DEFAULT_PAGE_SIZE, \"pageSize\", 10_000, ctx);\n const filter = { language: languageOf(params, ctx), predicates: predicatesOf(params, ctx) };\n const query = params.query?.trim() ?? \"\";\n const mode = params.mode ?? (query === \"\" ? \"all\" : \"query\");\n if (mode === \"neighborhood\") {\n const iris = irisOf(params.ids, \"ids\", ctx);\n return { at: (offset) => aroundQuery(iris, \"both\", filter, size, offset), paged: true };\n }\n if (mode === \"all\") {\n return { at: (offset) => allQuery(filter, size, offset), paged: true };\n }\n if (query === \"\") {\n failOn(ctx.report, \"E_SOURCE_PARAM\", \"mode query needs a query\", { name: \"query\", reason: \"required\" });\n }\n const shape = readQuery(query);\n if (shape.form !== \"construct\" && shape.form !== \"describe\") {\n failOn(ctx.report, \"E_SOURCE_PARAM\", \"the query must be CONSTRUCT or DESCRIBE\", {\n name: \"query\",\n reason: \"form\",\n });\n }\n if (shape.ownLimit) {\n return { at: () => query, paged: false };\n }\n return { at: (offset) => pagedQuery(query, shape, size, offset), paged: true };\n}\n\n/**\n * Write nodes and edges into the sink, counting them on the report.\n * @param graphed - the nodes and edges\n * @param sink - where to write\n * @param ctx - the context\n */\nfunction write(graphed: Graphed, sink: GraphSink, ctx: SourceContext): void {\n const { report } = ctx;\n if (sink.edgeCount === 0) {\n sink.setDirected(true);\n }\n for (const [id, attrs] of graphed.nodes) {\n try {\n sink.addNodeRecord(id, attrs);\n report.counts.nodes++;\n } catch (err) {\n report.recordError(err, { element: id });\n report.counts.skippedNodes++;\n }\n }\n for (const { source, target, ...attrs } of graphed.edges) {\n try {\n sink.addEdgeRecord(source, target, attrs, null);\n report.counts.edges++;\n } catch (err) {\n report.recordError(err, { element: `${source} -> ${target}` });\n report.counts.skippedEdges++;\n }\n }\n}\n\n/**\n * The content hash of some triples, in any order.\n * @param triples - the triples\n * @returns the SHA-256, hex\n */\nfunction hashOf(triples: readonly Triple[]): Promise<string> {\n return sha256Hex(triples.map(canonicalTriple).sort().join(\"\\n\")); // NOSONAR(S2871): code-unit order is the point: a locale-free, stable order for the hash\n}\n\n/**\n * Load pages into the sink from the cursor's offset until an empty page or a cap.\n * @param params - the params\n * @param sink - where to write\n * @param ctx - the context\n * @returns the report\n */\nasync function load(params: SparqlParams, sink: GraphSink, ctx: SourceContext): Promise<ImportReport> {\n const plan = planOf(params, ctx);\n const size = params.pageSize ?? DEFAULT_PAGE_SIZE;\n const start = Number(ctx.cursor?.offset ?? 0);\n const language = languageOf(params, ctx);\n let offset = start;\n let next: SourceCursor | null = null;\n let contentHash: string | undefined;\n for (;;) {\n const triples = await send(ctx, plan.at(offset));\n if (offset === 0) {\n contentHash = await hashOf(triples);\n }\n write(graphTriples(triples, language), sink, ctx);\n const { counts } = ctx.report;\n ctx.progress(counts.nodes + counts.edges, undefined, \"items\");\n if (!plan.paged || triples.length === 0) {\n next = null;\n break;\n }\n offset += size;\n next = { offset };\n if (ctx.limits.reached()) {\n break;\n }\n }\n return ctx.finish({ next, ...(contentHash === undefined ? {} : { validators: { contentHash } }) });\n}\n\n/**\n * Fetch the triples around some IRIs into the sink, hop by hop.\n * @param request - the seeds, direction, depth, limit and predicate filter\n * @param sink - where to write\n * @param ctx - the context\n * @returns the report\n */\nasync function expand(\n request: ExpandRequest<SparqlParams>,\n sink: GraphSink,\n ctx: SourceContext,\n): Promise<ImportReport> {\n const direction = request.direction ?? \"both\";\n if (![\"out\", \"in\", \"both\"].includes(direction)) {\n failOn(ctx.report, \"E_SOURCE_PARAM\", \"direction must be out, in or both\", {\n name: \"direction\",\n reason: \"enum\",\n });\n }\n const depth = integer(request.depth ?? 1, \"depth\", MAX_DEPTH, ctx);\n const limit = integer(request.limit ?? DEFAULT_EXPAND_LIMIT, \"limit\", Number.MAX_SAFE_INTEGER, ctx);\n const language = languageOf(request.params, ctx);\n const filter = { language, predicates: predicatesOf(request.params, ctx) };\n const types = request.relationshipTypes === undefined ? null : new Set(request.relationshipTypes);\n // a capped one-hop expansion resumes at its offset; deeper ones are read whole per hop\n const offset = depth === 1 ? Number(ctx.cursor?.offset ?? 0) : 0;\n const seen = new Set<string>(request.ids.map(String));\n let frontier = irisOf(request.ids, \"ids\", ctx);\n let next: SourceCursor | null = null;\n const graphed: Graphed = { nodes: new Map(), edges: [] };\n for (let hop = 0; hop < depth && frontier.length > 0; hop++) {\n const triples = await send(ctx, aroundQuery(frontier, direction, filter, limit, offset));\n const before = graphed.edges.length;\n graphTriples(triples, language, graphed);\n if (types !== null) {\n const kept = graphed.edges.slice(before).filter((e) => types.has(e.type) || types.has(e.predicate));\n graphed.edges.splice(before, Infinity, ...kept);\n }\n if (depth === 1 && triples.length > 0) {\n next = { offset: offset + limit };\n }\n const reached = graphed.edges.slice(before).flatMap((e) => [e.source, e.target]);\n frontier = [...new Set(reached)]\n .filter((id) => !seen.has(id))\n .flatMap((id) => {\n seen.add(id);\n const term = iriTerm(id);\n return term === null ? [] : [term];\n });\n }\n write(graphed, sink, ctx);\n return ctx.finish({ next });\n}\n\n/**\n * The SPARQL source: CONSTRUCT or DESCRIBE queries against any SPARQL 1.1 endpoint, paged by\n * `LIMIT` and `OFFSET`, expanded by `VALUES`, validated by a hash of the first page. Experimental.\n * @category Network sources\n */\nexport const sparqlSource: GraphSource<SparqlParams> = defineSource<SparqlParams>({\n id: SPARQL_SOURCE_ID,\n descriptor: SPARQL_DESCRIPTOR,\n import: load,\n expand,\n probe: async (params, ctx): Promise<SourceProbe> => {\n // the endpoint answers a one-solution query: it is up, it reads SPARQL, the credential works\n await send(ctx, \"CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o } LIMIT 1\");\n languageOf(params, ctx);\n return { ok: true };\n },\n validate: async (params, seen, ctx): Promise<SourceFreshness> => {\n const contentHash = await hashOf(await send(ctx, planOf(params, ctx).at(0)));\n let status: SourceFreshness[\"status\"] = \"unverifiable\";\n if (seen.contentHash !== undefined) {\n status = seen.contentHash === contentHash ? \"current\" : \"changed\";\n }\n return { status, via: \"hash\", validators: { contentHash } };\n },\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sources-sparql.js","sources":["../src/sources/sparql/ntriples.ts","../src/sources/sparql/query.ts","../src/sources/sparql/index.ts"],"sourcesContent":["/**\n * Reading the N-Triples a CONSTRUCT or DESCRIBE answers, and turning triples into nodes and edges:\n * an IRI or blank-node object is an edge from the subject, a literal is an attribute of the\n * subject named by the predicate's local name.\n */\n\n/** One RDF term. */\nexport type Term =\n | { readonly kind: \"iri\"; readonly value: string }\n | { readonly kind: \"bnode\"; readonly value: string }\n | { readonly kind: \"literal\"; readonly value: string; readonly lang: string; readonly datatype: string };\n\n/** One triple. */\nexport interface Triple {\n /** The subject: an IRI or a blank node. */\n readonly s: Term;\n /** The predicate IRI. */\n readonly p: string;\n /** The object. */\n readonly o: Term;\n}\n\n/** One term at the sticky position: an IRI, a blank node, or a literal with its tag or type. */\nconst TERM = /\\s*(?:<([^<>]*)>|_:([\\w.-]*[\\w-])|\"((?:[^\"\\\\]|\\\\.)*)\"(?:@([A-Za-z][\\w-]*)|\\^\\^<([^<>]*)>)?)/y;\n\n/** The end of a statement: a dot, then an optional comment. */\nconst END = /\\s*\\.\\s*(?:#.*)?$/y;\n\n/** The XSD namespace. */\nconst XSD = \"http://www.w3.org/2001/XMLSchema#\";\n\n/** The XSD numeric types, read as numbers. */\nconst NUMERIC: ReadonlySet<string> = new Set(\n [\n \"integer\",\n \"decimal\",\n \"double\",\n \"float\",\n \"int\",\n \"long\",\n \"short\",\n \"byte\",\n \"nonNegativeInteger\",\n \"nonPositiveInteger\",\n \"positiveInteger\",\n \"negativeInteger\",\n \"unsignedInt\",\n \"unsignedLong\",\n \"unsignedShort\",\n \"unsignedByte\",\n ].map((t) => XSD + t),\n);\n\n/**\n * Undo N-Triples escapes.\n * @param text - escaped text\n * @returns the text\n */\nfunction unescape(text: string): string {\n if (!text.includes(\"\\\\\")) {\n return text;\n }\n const simple: Readonly<Record<string, string>> = { t: \"\\t\", b: \"\\b\", n: \"\\n\", r: \"\\r\", f: \"\\f\" };\n return text.replaceAll(\n /\\\\(?:u([\\da-fA-F]{4})|U([\\da-fA-F]{8})|(.))/g,\n (_m, u4?: string, u8?: string, c?: string) => {\n const hex = u4 ?? u8;\n if (hex !== undefined) {\n return String.fromCodePoint(Number.parseInt(hex, 16));\n }\n return simple[c ?? \"\"] ?? c ?? \"\";\n },\n );\n}\n\n/**\n * Read one term at `at`.\n * @param line - the line\n * @param at - where to start\n * @returns the term and where it ended, or null when there is none\n */\nfunction readTerm(line: string, at: number): { term: Term; end: number } | null {\n TERM.lastIndex = at;\n const m = TERM.exec(line);\n if (m === null) {\n return null;\n }\n const [, iri, bnode, lexical, lang, datatype] = m;\n let term: Term;\n if (iri !== undefined) {\n term = { kind: \"iri\", value: unescape(iri) };\n } else if (bnode === undefined) {\n term = {\n kind: \"literal\",\n value: unescape(lexical ?? \"\"),\n lang: lang?.toLowerCase() ?? \"\",\n datatype: datatype ?? \"\",\n };\n } else {\n term = { kind: \"bnode\", value: `_:${bnode}` };\n }\n return { term, end: TERM.lastIndex };\n}\n\n/**\n * Parse N-Triples.\n * @param text - the document\n * @returns the triples, or the 1-based number of the first line that is not a triple\n */\nexport function parseNTriples(text: string): { triples: Triple[]; badLine: number | null } {\n const triples: Triple[] = [];\n const lines = text.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const trimmed = line.trim();\n if (trimmed === \"\" || trimmed.startsWith(\"#\")) {\n continue;\n }\n const s = readTerm(line, 0);\n const p = s === null ? null : readTerm(line, s.end);\n const o = p === null ? null : readTerm(line, p.end);\n END.lastIndex = o?.end ?? 0;\n if (\n s === null ||\n p === null ||\n o === null ||\n s.term.kind === \"literal\" ||\n p.term.kind !== \"iri\" ||\n !END.test(line)\n ) {\n return { triples, badLine: i + 1 };\n }\n triples.push({ s: s.term, p: p.term.value, o: o.term });\n }\n return { triples, badLine: null };\n}\n\n/**\n * The local name of an IRI: what follows its last `#`, else its last `/`, else its last `:`.\n * @param iri - the IRI\n * @returns the local name, or the whole IRI when nothing follows\n */\nexport function localName(iri: string): string {\n const cut = Math.max(iri.lastIndexOf(\"#\"), iri.lastIndexOf(\"/\"), iri.lastIndexOf(\":\"));\n const name = iri.slice(cut + 1);\n return name === \"\" ? iri : name;\n}\n\n/**\n * A literal's value: numbers and booleans as such, everything else as its text.\n * @param term - the literal\n * @returns the value\n */\nfunction literalValue(term: Extract<Term, { kind: \"literal\" }>): string | number | boolean {\n if (NUMERIC.has(term.datatype)) {\n const n = Number(term.value);\n return Number.isFinite(n) ? n : term.value;\n }\n if (term.datatype === `${XSD}boolean`) {\n return term.value === \"true\" || term.value === \"1\";\n }\n return term.value;\n}\n\n/**\n * Whether a literal's language tag passes a language filter (SPARQL's langMatches, plus untagged).\n * @param lang - the literal's tag, lowercase\n * @param want - the filter, lowercase, or \"\" for none\n * @returns whether to keep it\n */\nfunction languageMatches(lang: string, want: string): boolean {\n return want === \"\" || lang === \"\" || lang === want || lang.startsWith(`${want}-`);\n}\n\n/** The nodes and edges of some triples. */\nexport interface Graphed {\n /** Each subject's literal attributes, by subject id; a predicate's first value wins. */\n readonly nodes: Map<string, Record<string, string | number | boolean>>;\n /** One edge per IRI or blank-node object. */\n readonly edges: { source: string; target: string; type: string; predicate: string }[];\n}\n\n/**\n * Turn triples into nodes and edges.\n * @param triples - the triples\n * @param language - the language filter, lowercase, or \"\"\n * @param into - nodes and edges to add to\n * @returns the nodes and edges\n */\nexport function graphTriples(triples: readonly Triple[], language: string, into?: Graphed): Graphed {\n const out: Graphed = into ?? { nodes: new Map(), edges: [] };\n for (const { s, p, o } of triples) {\n let attrs = out.nodes.get(s.value);\n if (attrs === undefined) {\n attrs = {};\n out.nodes.set(s.value, attrs);\n }\n if (o.kind === \"literal\") {\n const key = localName(p);\n // ponytail: one value per predicate (the first); a list column if multi-valued literals matter\n if (languageMatches(o.lang, language) && !(key in attrs)) {\n attrs[key] = literalValue(o);\n }\n } else {\n out.edges.push({ source: s.value, target: o.value, type: localName(p), predicate: p });\n }\n }\n return out;\n}\n\n/**\n * One canonical line per triple, for the content hash.\n * @param t - the triple\n * @returns the line\n */\nexport function canonicalTriple(t: Triple): string {\n const o = t.o.kind === \"literal\" ? JSON.stringify([t.o.value, t.o.lang, t.o.datatype]) : t.o.value;\n return `${t.s.value} ${t.p} ${o}`;\n}\n","/**\n * The SPARQL the source sends: the caller's CONSTRUCT or DESCRIBE with the paging the source\n * adds (`ORDER BY` the template's variables, `LIMIT` and `OFFSET`), and the generated queries of\n * \"all\", \"neighborhood\" and expand (`VALUES ?s { ... }`).\n */\n\n/** Characters an IRIREF may not hold. */\nconst NOT_IRI = /[\\s<>\"{}|^`\\\\]/;\n\n/** A language tag a filter may name. */\nconst LANGUAGE = /^[a-z]{1,8}(-[a-z\\d]{1,8})*$/i;\n\n/** The query forms, as the first keyword after the prologue. */\ntype QueryForm = \"construct\" | \"describe\" | \"select\" | \"ask\" | null;\n\n/** What paging the caller's query takes. */\ninterface UserQuery {\n /** Its form. */\n readonly form: QueryForm;\n /** Whether it sets its own LIMIT or OFFSET, so the source sends it as written. */\n readonly ownLimit: boolean;\n /** Whether it orders its solutions itself. */\n readonly ordered: boolean;\n /** The variables of a CONSTRUCT template, in order, for ORDER BY. */\n readonly templateVars: readonly string[];\n}\n\n/**\n * The query with IRIs, strings and comments blanked out, so keywords and braces can be found.\n * @param query - the query\n * @returns the bare text\n */\nfunction bare(query: string): string {\n return query\n .replaceAll(/<[^<>\\s]*>/g, \"<>\")\n .replaceAll(/\"\"\"[\\s\\S]*?\"\"\"|'''[\\s\\S]*?'''|\"(?:[^\"\\\\\\n]|\\\\.)*\"|'(?:[^'\\\\\\n]|\\\\.)*'/g, '\"\"')\n .replaceAll(/#[^\\n]*/g, \"\");\n}\n\n/** The keywords of SPARQL Update, which a query this source sends never holds. */\nconst UPDATE_KEYWORDS = /\\b(INSERT|DELETE|LOAD|CLEAR|DROP|CREATE|ADD|MOVE|COPY|WITH)\\b/i;\n\n/** One declaration of the prologue, as `bare` leaves it: `BASE <>` or `PREFIX ex: <>`. */\nconst DECLARATION = /^\\s*(?:BASE|PREFIX\\s*[^\\s:<]*:)\\s*<>/i;\n\n/**\n * Bare text after its prologue, one declaration at a time.\n * @param text - the bare text\n * @returns what follows the prologue\n */\nfunction afterPrologue(text: string): string {\n let rest = text;\n for (let found = DECLARATION.exec(rest); found !== null; found = DECLARATION.exec(rest)) {\n rest = rest.slice(found[0].length);\n }\n return rest;\n}\n\n/**\n * The bare text with variables and prefixed names blanked too, so a name such as `ex:LIMIT` or\n * `?DELETE` is never read as a keyword.\n * @param text - the bare text after the prologue\n * @returns the text holding only keywords, punctuation and blanks\n */\nfunction keywordsOnly(text: string): string {\n // one run of name characters at a time: a run holding a colon is a prefixed name\n return text.replaceAll(/[?$]\\w+/g, \"?v\").replaceAll(/[\\w.%:-]+/g, (run) => (run.includes(\":\") ? \"_\" : run));\n}\n\n/**\n * Whether bare text holds a `;` outside every brace: SPARQL Update separates its operations so, and\n * a query never holds one there.\n * @param text - the text\n * @returns true when it does\n */\nfunction semicolonOutside(text: string): boolean {\n let depth = 0;\n for (const char of text) {\n if (char === \"{\") {\n depth++;\n } else if (char === \"}\") {\n depth--;\n } else if (char === \";\" && depth <= 0) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Read what paging a caller's query takes. Its form is the first keyword after the prologue; a\n * text that holds an update keyword, or a `;` outside braces, has no form, so it is refused.\n * @param query - the query\n * @returns its form, its own modifiers and its template variables\n */\nexport function readQuery(query: string): UserQuery {\n const body = afterPrologue(bare(query));\n const text = keywordsOnly(body);\n const first = /^\\s*([A-Za-z]+)/.exec(text)?.[1]?.toUpperCase() ?? \"\";\n const update = UPDATE_KEYWORDS.test(text) || semicolonOutside(text);\n const form = !update && [\"CONSTRUCT\", \"DESCRIBE\", \"SELECT\", \"ASK\"].includes(first) ? first.toLowerCase() : null;\n // the solution modifiers follow the last closing brace (a trailing VALUES block is not handled)\n const tail = text.slice(text.lastIndexOf(\"}\") + 1);\n let templateVars: string[] = [];\n if (form === \"construct\") {\n const template = /\\bCONSTRUCT\\s*\\{([^}]*)\\}/i.exec(body)?.[1] ?? \"\";\n templateVars = [...new Set(template.match(/[?$]\\w+/g) ?? [])].map((v) => `?${v.slice(1)}`);\n }\n return {\n form: form as QueryForm,\n ownLimit: /\\b(LIMIT|OFFSET)\\b/i.test(tail),\n ordered: /\\bORDER\\s+BY\\b/i.test(tail),\n templateVars,\n };\n}\n\n/**\n * The caller's query with one page's modifiers added.\n * @param query - the query\n * @param shape - what readQuery found\n * @param limit - solutions per page\n * @param offset - solutions to skip\n * @returns the query to send\n */\nexport function pagedQuery(query: string, shape: UserQuery, limit: number, offset: number): string {\n const order = shape.ordered || shape.templateVars.length === 0 ? \"\" : `\\nORDER BY ${shape.templateVars.join(\" \")}`;\n const skip = offset > 0 ? ` OFFSET ${String(offset)}` : \"\";\n return `${query.trimEnd()}${order}\\nLIMIT ${String(limit)}${skip}`;\n}\n\n/**\n * An IRI as a SPARQL term, or null when it cannot be one.\n * @param id - the id\n * @returns `<iri>`, or null\n */\nexport function iriTerm(id: unknown): string | null {\n const text = String(id);\n return /^[a-z][\\w+.-]*:/i.test(text) && !NOT_IRI.test(text) ? `<${text}>` : null;\n}\n\n/** What generated queries keep: literals in a language, edges along some predicates. */\ninterface TripleFilter {\n /** Keep literals tagged with this language or untagged; \"\" keeps every literal. */\n readonly language: string;\n /** Keep edges whose predicate starts with one of these IRIs; empty keeps every edge. */\n readonly predicates: readonly string[];\n}\n\n/**\n * The FILTERs of generated queries, or \"\" for none. Both values are checked by the caller.\n * @param filter - the language and the predicate prefixes\n * @returns the FILTER clauses\n */\nfunction filters(filter: TripleFilter): string {\n const { language, predicates } = filter;\n const lang =\n language === \"\" ? \"\" : ` FILTER(!isLiteral(?o) || lang(?o) = \"\" || langMatches(lang(?o), \"${language}\"))`;\n const along = predicates.map((p) => `STRSTARTS(STR(?p), \"${p}\")`).join(\" || \");\n return predicates.length === 0 ? lang : `${lang} FILTER(isLiteral(?o) || ${along})`;\n}\n\n/**\n * Whether a language tag may go into a FILTER.\n * @param language - the tag\n * @returns whether it is well formed\n */\nexport function validLanguage(language: string): boolean {\n return LANGUAGE.test(language);\n}\n\n/**\n * Mode \"all\": every triple, ordered so pages are stable.\n * @param filter - what to keep\n * @param limit - solutions per page\n * @param offset - solutions to skip\n * @returns the query\n */\nexport function allQuery(filter: TripleFilter, limit: number, offset: number): string {\n return pagedQuery(\n `CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o .${filters(filter)} }`,\n { form: \"construct\", ownLimit: false, ordered: false, templateVars: [\"?s\", \"?p\", \"?o\"] },\n limit,\n offset,\n );\n}\n\n/**\n * The triples around some IRIs: out (`VALUES ?s`), in (`VALUES ?o`) or both.\n * @param iris - the IRIs as terms\n * @param direction - which triples\n * @param filter - what to keep\n * @param limit - solutions per page\n * @param offset - solutions to skip\n * @returns the query\n */\nexport function aroundQuery(\n iris: readonly string[],\n direction: \"out\" | \"in\" | \"both\",\n filter: TripleFilter,\n limit: number,\n offset: number,\n): string {\n const values = iris.join(\" \");\n const out = `{ VALUES ?s { ${values} } ?s ?p ?o .${filters(filter)} }`;\n const inward = `{ VALUES ?o { ${values} } ?s ?p ?o .${filters({ ...filter, language: \"\" })} }`;\n let where = `${out} UNION ${inward}`;\n if (direction !== \"both\") {\n where = direction === \"out\" ? out : inward;\n }\n return pagedQuery(\n `CONSTRUCT { ?s ?p ?o } WHERE { ${where} }`,\n { form: \"construct\", ownLimit: false, ordered: false, templateVars: [\"?s\", \"?p\", \"?o\"] },\n limit,\n offset,\n );\n}\n","/**\n * `@graphty/graph-io/sources/sparql`: the SPARQL source. It sends CONSTRUCT (or DESCRIBE) queries\n * over the SPARQL 1.1 protocol (a form POST, N-Triples back) and reads the triples as a graph: an\n * IRI or blank-node object is an edge from the subject (`type` is the predicate's local name,\n * `predicate` the full IRI), a literal is an attribute of the subject named by the predicate's\n * local name. Node ids are the IRIs.\n *\n * - Paging: the source adds `ORDER BY` (the template's variables) and `LIMIT` / `OFFSET` to the\n * caller's query, unless it sets its own; a load stops between pages at a cap and hands back\n * `{ offset }` as its cursor. A page is `pageSize` solutions, so its triple count varies; the\n * first empty page ends the load.\n * - Expand: the triples of the seeds, `VALUES ?s { ... }` out and `VALUES ?o { ... }` in.\n * - Validate: SHA-256 of the first page's triples.\n *\n * Experimental.\n * @module @graphty/graph-io/sources/sparql\n */\n\nimport { type GraphSink } from \"@graphty/graph-format\";\n\nimport { throwIfAborted } from \"../../common/input.js\";\nimport { type ImportReport } from \"../../types.js\";\nimport { defineSource } from \"../define.js\";\nimport { failOn } from \"../fail.js\";\nimport { SPARQL_SOURCE_ID } from \"../ids.js\";\nimport { sha256Hex } from \"../sigv4.js\";\nimport {\n type ExpandRequest,\n type GraphSource,\n type SourceContext,\n type SourceCursor,\n type SourceFreshness,\n type SourceProbe,\n} from \"../types.js\";\nimport { SPARQL_DESCRIPTOR } from \"./descriptor.js\";\nimport { canonicalTriple, type Graphed, graphTriples, parseNTriples, type Triple } from \"./ntriples.js\";\nimport { type SparqlParams } from \"./params.js\";\nimport { allQuery, aroundQuery, iriTerm, pagedQuery, readQuery, validLanguage } from \"./query.js\";\n\nexport { SPARQL_DESCRIPTOR } from \"./descriptor.js\";\nexport { type SparqlParams } from \"./params.js\";\n\n/** Solutions per page when the params name none. */\nconst DEFAULT_PAGE_SIZE = 1000;\n\n/** Triples per hop of an expansion when the request names no limit. */\nconst DEFAULT_EXPAND_LIMIT = 500;\n\n/** The deepest expansion, as for every built-in source. */\nconst MAX_DEPTH = 10;\n\n/** What CONSTRUCT and DESCRIBE are asked to answer. */\nconst ACCEPT_TRIPLES = \"application/n-triples, text/plain;q=0.9\";\n\n/** One page's query, by offset; `paged` false when the query is sent once, as written. */\ninterface Plan {\n /** The query of the page at an offset. */\n readonly at: (offset: number) => string;\n /** Whether the source pages it. */\n readonly paged: boolean;\n}\n\n/**\n * Send a query and read the answer as N-Triples.\n * @param ctx - the context\n * @param query - the query\n * @returns the triples\n */\nasync function send(ctx: SourceContext, query: string): Promise<Triple[]> {\n throwIfAborted(ctx.signal);\n const response = await ctx.fetch(ctx.endpoint ?? \"\", {\n method: \"POST\",\n idempotent: true,\n headers: { Accept: ACCEPT_TRIPLES, \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({ query }).toString(),\n allowStatus: [400],\n });\n if (response.status === 400) {\n const text = (await response.text()).trim().slice(0, 500);\n failOn(ctx.report, \"E_SOURCE_QUERY\", \"the endpoint refused the query\", {\n serverCode: null,\n line: null,\n column: null,\n serverMessage: text === \"\" ? null : text,\n });\n }\n const contentType = response.headers.get(\"content-type\");\n const notTriples = (): never =>\n failOn(ctx.report, \"E_SOURCE_RESPONSE\", \"the endpoint did not answer N-Triples\", {\n expected: \"n-triples\",\n contentType,\n });\n if (contentType !== null && /html|json|xml/i.test(contentType)) {\n notTriples();\n }\n const { triples, badLine } = parseNTriples(await response.text());\n if (badLine !== null) {\n notTriples();\n }\n return triples;\n}\n\n/**\n * A whole-number param, checked.\n * @param value - the value\n * @param name - the param\n * @param max - the largest allowed\n * @param ctx - the context\n * @returns the number\n */\nfunction integer(value: number, name: string, max: number, ctx: SourceContext): number {\n if (!Number.isInteger(value) || value < 1 || value > max) {\n failOn(ctx.report, \"E_SOURCE_PARAM\", `${name} is an integer from 1 to ${String(max)}`, {\n name,\n reason: \"range\",\n });\n }\n return value;\n}\n\n/**\n * The language filter, lowercase and checked, or \"\" for none.\n * @param params - the params\n * @param ctx - the context\n * @returns the tag\n */\nfunction languageOf(params: SparqlParams, ctx: SourceContext): string {\n const language = params.language ?? \"\";\n if (language !== \"\" && !validLanguage(language)) {\n failOn(ctx.report, \"E_SOURCE_PARAM\", \"language is a language tag\", { name: \"language\", reason: \"type\" });\n }\n return language.toLowerCase();\n}\n\n/**\n * The predicate prefixes generated queries follow, checked.\n * @param params - the params\n * @param ctx - the context\n * @returns the prefixes; empty means every predicate\n */\nfunction predicatesOf(params: SparqlParams, ctx: SourceContext): readonly string[] {\n const list = params.predicates ?? [];\n const prefixes = typeof list === \"string\" ? [list] : list;\n for (const p of prefixes) {\n if (typeof p !== \"string\" || iriTerm(p) === null) {\n failOn(ctx.report, \"E_SOURCE_PARAM\", \"predicates are IRI prefixes\", { name: \"predicates\", reason: \"iri\" });\n }\n }\n return prefixes;\n}\n\n/**\n * Seed ids as IRI terms; a blank node or anything else that is not an IRI is refused.\n * @param ids - the ids\n * @param name - the param, for the error\n * @param ctx - the context\n * @returns the terms\n */\nfunction irisOf(ids: readonly unknown[] | undefined, name: string, ctx: SourceContext): string[] {\n if (ids === undefined || ids.length === 0) {\n failOn(ctx.report, \"E_SOURCE_PARAM\", `${name} needs at least one IRI`, { name, reason: \"required\" });\n }\n return ids.map(\n (id) => iriTerm(id) ?? failOn(ctx.report, \"E_SOURCE_PARAM\", `${name}: not an IRI`, { name, reason: \"iri\" }),\n );\n}\n\n/**\n * What a load sends, from its mode.\n * @param params - the params\n * @param ctx - the context\n * @returns the plan\n */\nfunction planOf(params: SparqlParams, ctx: SourceContext): Plan {\n const size = integer(params.pageSize ?? DEFAULT_PAGE_SIZE, \"pageSize\", 10_000, ctx);\n const filter = { language: languageOf(params, ctx), predicates: predicatesOf(params, ctx) };\n const query = params.query?.trim() ?? \"\";\n const mode = params.mode ?? (query === \"\" ? \"all\" : \"query\");\n if (mode === \"neighborhood\") {\n const iris = irisOf(params.ids, \"ids\", ctx);\n return { at: (offset) => aroundQuery(iris, \"both\", filter, size, offset), paged: true };\n }\n if (mode === \"all\") {\n return { at: (offset) => allQuery(filter, size, offset), paged: true };\n }\n if (query === \"\") {\n failOn(ctx.report, \"E_SOURCE_PARAM\", \"mode query needs a query\", { name: \"query\", reason: \"required\" });\n }\n const shape = readQuery(query);\n if (shape.form !== \"construct\" && shape.form !== \"describe\") {\n failOn(ctx.report, \"E_SOURCE_PARAM\", \"the query must be CONSTRUCT or DESCRIBE\", {\n name: \"query\",\n reason: \"form\",\n });\n }\n if (shape.ownLimit) {\n return { at: () => query, paged: false };\n }\n return { at: (offset) => pagedQuery(query, shape, size, offset), paged: true };\n}\n\n/**\n * Write nodes and edges into the sink, counting them on the report.\n * @param graphed - the nodes and edges\n * @param sink - where to write\n * @param ctx - the context\n */\nfunction write(graphed: Graphed, sink: GraphSink, ctx: SourceContext): void {\n const { report } = ctx;\n if (sink.edgeCount === 0) {\n sink.setDirected(true);\n }\n for (const [id, attrs] of graphed.nodes) {\n try {\n sink.addNodeRecord(id, attrs);\n report.counts.nodes++;\n } catch (err) {\n report.recordError(err, { element: id });\n report.counts.skippedNodes++;\n }\n }\n for (const { source, target, ...attrs } of graphed.edges) {\n try {\n sink.addEdgeRecord(source, target, attrs, null);\n report.counts.edges++;\n } catch (err) {\n report.recordError(err, { element: `${source} -> ${target}` });\n report.counts.skippedEdges++;\n }\n }\n}\n\n/**\n * Order strings by UTF-16 code units, as `Array.prototype.sort` does with no compare function, so\n * a content hash never depends on the locale.\n * @param a - one string\n * @param b - the other\n * @returns negative, zero or positive\n */\nfunction byCodeUnits(a: string, b: string): number {\n if (a === b) {\n return 0;\n }\n\n return a < b ? -1 : 1;\n}\n\n/**\n * The content hash of some triples, in any order.\n * @param triples - the triples\n * @returns the SHA-256, hex\n */\nfunction hashOf(triples: readonly Triple[]): Promise<string> {\n return sha256Hex(triples.map(canonicalTriple).sort(byCodeUnits).join(\"\\n\"));\n}\n\n/**\n * Load pages into the sink from the cursor's offset until an empty page or a cap.\n * @param params - the params\n * @param sink - where to write\n * @param ctx - the context\n * @returns the report\n */\nasync function load(params: SparqlParams, sink: GraphSink, ctx: SourceContext): Promise<ImportReport> {\n const plan = planOf(params, ctx);\n const size = params.pageSize ?? DEFAULT_PAGE_SIZE;\n const start = Number(ctx.cursor?.offset ?? 0);\n const language = languageOf(params, ctx);\n let offset = start;\n let next: SourceCursor | null = null;\n let contentHash: string | undefined;\n for (;;) {\n const triples = await send(ctx, plan.at(offset));\n if (offset === 0) {\n contentHash = await hashOf(triples);\n }\n write(graphTriples(triples, language), sink, ctx);\n const { counts } = ctx.report;\n ctx.progress(counts.nodes + counts.edges, undefined, \"items\");\n if (!plan.paged || triples.length === 0) {\n next = null;\n break;\n }\n offset += size;\n next = { offset };\n if (ctx.limits.reached()) {\n break;\n }\n }\n return ctx.finish({ next, ...(contentHash === undefined ? {} : { validators: { contentHash } }) });\n}\n\n/**\n * Fetch the triples around some IRIs into the sink, hop by hop.\n * @param request - the seeds, direction, depth, limit and predicate filter\n * @param sink - where to write\n * @param ctx - the context\n * @returns the report\n */\nasync function expand(\n request: ExpandRequest<SparqlParams>,\n sink: GraphSink,\n ctx: SourceContext,\n): Promise<ImportReport> {\n const direction = request.direction ?? \"both\";\n if (![\"out\", \"in\", \"both\"].includes(direction)) {\n failOn(ctx.report, \"E_SOURCE_PARAM\", \"direction must be out, in or both\", {\n name: \"direction\",\n reason: \"enum\",\n });\n }\n const depth = integer(request.depth ?? 1, \"depth\", MAX_DEPTH, ctx);\n const limit = integer(request.limit ?? DEFAULT_EXPAND_LIMIT, \"limit\", Number.MAX_SAFE_INTEGER, ctx);\n const language = languageOf(request.params, ctx);\n const filter = { language, predicates: predicatesOf(request.params, ctx) };\n const types = request.relationshipTypes === undefined ? null : new Set(request.relationshipTypes);\n // a capped one-hop expansion resumes at its offset; deeper ones are read whole per hop\n const offset = depth === 1 ? Number(ctx.cursor?.offset ?? 0) : 0;\n const seen = new Set<string>(request.ids.map(String));\n let frontier = irisOf(request.ids, \"ids\", ctx);\n let next: SourceCursor | null = null;\n const graphed: Graphed = { nodes: new Map(), edges: [] };\n for (let hop = 0; hop < depth && frontier.length > 0; hop++) {\n const triples = await send(ctx, aroundQuery(frontier, direction, filter, limit, offset));\n const before = graphed.edges.length;\n graphTriples(triples, language, graphed);\n if (types !== null) {\n const kept = graphed.edges.slice(before).filter((e) => types.has(e.type) || types.has(e.predicate));\n graphed.edges.splice(before, Infinity, ...kept);\n }\n if (depth === 1 && triples.length > 0) {\n next = { offset: offset + limit };\n }\n const reached = graphed.edges.slice(before).flatMap((e) => [e.source, e.target]);\n frontier = [...new Set(reached)]\n .filter((id) => !seen.has(id))\n .flatMap((id) => {\n seen.add(id);\n const term = iriTerm(id);\n return term === null ? [] : [term];\n });\n }\n write(graphed, sink, ctx);\n return ctx.finish({ next });\n}\n\n/**\n * The SPARQL source: CONSTRUCT or DESCRIBE queries against any SPARQL 1.1 endpoint, paged by\n * `LIMIT` and `OFFSET`, expanded by `VALUES`, validated by a hash of the first page. Experimental.\n * @category Network sources\n */\nexport const sparqlSource: GraphSource<SparqlParams> = defineSource<SparqlParams>({\n id: SPARQL_SOURCE_ID,\n descriptor: SPARQL_DESCRIPTOR,\n import: load,\n expand,\n probe: async (params, ctx): Promise<SourceProbe> => {\n // the endpoint answers a one-solution query: it is up, it reads SPARQL, the credential works\n await send(ctx, \"CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o } LIMIT 1\");\n languageOf(params, ctx);\n return { ok: true };\n },\n validate: async (params, seen, ctx): Promise<SourceFreshness> => {\n const contentHash = await hashOf(await send(ctx, planOf(params, ctx).at(0)));\n let status: SourceFreshness[\"status\"] = \"unverifiable\";\n if (seen.contentHash !== undefined) {\n status = seen.contentHash === contentHash ? \"current\" : \"changed\";\n }\n return { status, via: \"hash\", validators: { contentHash } };\n },\n});\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../../src/formats/dot/exporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAgBH,OAAO,EAAE,KAAK,mBAAmB,EAA2B,KAAK,aAAa,EAAiB,MAAM,gBAAgB,CAAC;AAiBtH;;;GAGG;AACH,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB;IACzD;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACrC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ;IACjB;;;OAGG;;IAEH,mGAAmG;;IAEnG;;;OAGG;;IAEH,+GAA+G;;IAE/G,sDAAsD;;IAEtD,4EAA4E;;IAE5E,uFAAuF;;IAEvF,kHAAkH;;IAElH,wGAAwG;;IAExG;;;OAGG;;IAEH,uHAAuH;;IAEvH,wGAAwG;;EAE1G,CAAC;AAwHH;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC,gBAAgB,CAkDtD,CAAC"}
1
+ {"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../../src/formats/dot/exporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAgBH,OAAO,EAAE,KAAK,mBAAmB,EAA2B,KAAK,aAAa,EAAiB,MAAM,gBAAgB,CAAC;AAsBtH;;;GAGG;AACH,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB;IACzD;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACrC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ;IACjB;;;OAGG;;IAEH,mGAAmG;;IAEnG;;;OAGG;;IAEH,+GAA+G;;IAE/G,sDAAsD;;IAEtD,4EAA4E;;IAE5E,uFAAuF;;IAEvF,kHAAkH;;IAElH,wGAAwG;;IAExG;;;OAGG;;IAEH,uHAAuH;;IAEvH,wGAAwG;;EAE1G,CAAC;AAwHH;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC,gBAAgB,CAkDtD,CAAC"}
@@ -24,8 +24,10 @@ import { agree, plural } from "../../common/plural.js";
24
24
  import { inferTextDtype } from "../../common/text.js";
25
25
  import { explicitWeights } from "../../common/weights.js";
26
26
  import { encodeChunks, indentUnit, joinText } from "../../common/writer.js";
27
- import { CLUSTER_COLUMN, DOT_FORMAT, DOT_META_KEY, KEY_ATTRIBUTE, LABEL_ATTRIBUTE, PARENT_COLUMN, POS_ATTRIBUTE, SOURCE_PORT_COLUMN, TARGET_PORT_COLUMN, } from "./names.js";
27
+ import { CLUSTER_COLUMN, DOT_FORMAT, DOT_META_KEY, KEY_ATTRIBUTE, LABEL_ATTRIBUTE, PARENT_COLUMN, POS_ATTRIBUTE, RANK_COLUMN, RANK_SET_COLUMN, SOURCE_PORT_COLUMN, TARGET_PORT_COLUMN, } from "./names.js";
28
28
  import { DOT_ATTRIBUTE_CLASH_CODE, DOT_STYLE_CAPABILITIES, dotStyledExport, isHtmlString } from "./styles.js";
29
+ /** The node columns written as rank subgraphs rather than as node attributes. */
30
+ const RANK_COLUMNS = new Set([RANK_COLUMN, RANK_SET_COLUMN]);
29
31
  /**
30
32
  * The LossNote codes of the DOT exporter; the shared ones are LOSS's.
31
33
  * @category Built-in formats
@@ -445,7 +447,7 @@ class ExportPlan {
445
447
  */
446
448
  writesNodeColumn(column) {
447
449
  const { name, role } = column.meta;
448
- if (!isTextualDtype(column) || name === CLUSTER_COLUMN) {
450
+ if (!isTextualDtype(column) || name === CLUSTER_COLUMN || RANK_COLUMNS.has(name)) {
449
451
  return false;
450
452
  }
451
453
  if (role !== null && SKIPPED_NODE_ROLES.has(role)) {
@@ -664,9 +666,39 @@ class ExportPlan {
664
666
  for (let i = 0; i < snapshot.nodeCount; i++) {
665
667
  yield* this.writeNode(i, 1, emitted);
666
668
  }
669
+ yield* this.writeRanks();
667
670
  yield* this.writeEdges();
668
671
  yield "}\n";
669
672
  }
673
+ /**
674
+ * Write each rank subgraph the `graphty.rank` and `graphty.rankSet` columns hold, after the nodes: a named one
675
+ * under its name, an anonymous one (`%<n>`) as an anonymous subgraph.
676
+ * @yields the statements
677
+ * @returns nothing
678
+ */
679
+ *writeRanks() {
680
+ const { nodes } = this.snapshot;
681
+ const rank = nodes.get(RANK_COLUMN);
682
+ const set = nodes.get(RANK_SET_COLUMN);
683
+ if (rank === null || set === null) {
684
+ return;
685
+ }
686
+ const sets = new Map();
687
+ for (let i = 0; i < this.snapshot.nodeCount; i++) {
688
+ if (rank.isSet(i) && set.isSet(i)) {
689
+ const key = String(set.value(i));
690
+ const entry = sets.get(key) ?? { rank: String(rank.value(i)), members: [] };
691
+ entry.members.push(writeId(this.idText(i)));
692
+ sets.set(key, entry);
693
+ }
694
+ }
695
+ // anonymous ones in their number's order, so the file read back numbers them the same
696
+ const order = (key) => (key.startsWith("%") ? Number(key.slice(1)) : -1);
697
+ for (const [key, entry] of [...sets].sort(([a], [b]) => order(a) - order(b))) {
698
+ const head = key.startsWith("%") ? "" : `subgraph ${quoteDotId(key)} `;
699
+ yield `${this.indent}${head}{ rank=${quoteDotId(entry.rank)}; ${entry.members.join("; ")}; }\n`;
700
+ }
701
+ }
670
702
  /**
671
703
  * Write one node (and, for a container, its cluster block with the members nested).
672
704
  * @param i - the node index
@@ -1 +1 @@
1
- {"version":3,"file":"exporter.js","sourceRoot":"","sources":["../../../../src/formats/dot/exporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exporter.js","sourceRoot":"","sources":["../../../../src/formats/dot/exporter.ts"],"names":[],"mappings":"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"}
@@ -101,8 +101,13 @@ export declare const DOT_ISSUE: Readonly<{
101
101
  AMBIGUOUS_GRAPH_NAME: "E_AMBIGUOUS_GRAPH_NAME";
102
102
  /** A badly delimited numeral (`1e3`) split into two tokens, as Graphviz does with a warning. */
103
103
  NUMERAL_AMBIGUITY: "W_DOT_NUMERAL_AMBIGUITY";
104
- /** Attributes of a subgraph that is not a cluster (rank=same and the like) cannot be represented. */
104
+ /**
105
+ * Attributes of a subgraph that is not a cluster cannot be represented, except its `rank`, which is kept in the
106
+ * `graphty.rank` and `graphty.rankSet` node columns.
107
+ */
105
108
  SUBGRAPH_ATTRIBUTES_DROPPED: "W_DOT_SUBGRAPH_ATTRIBUTES_DROPPED";
109
+ /** A node in two rank subgraphs (`rank=same` and the like) keeps the first one's rank. */
110
+ RANK_CONFLICT: "W_DOT_RANK_CONFLICT";
106
111
  /** A port on a node statement has no meaning and was dropped. */
107
112
  NODE_PORT_DROPPED: "W_DOT_NODE_PORT_DROPPED";
108
113
  /** A plain node and a cluster share a name and were merged into one container node. */
@@ -1 +1 @@
1
- {"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../../../../src/formats/dot/importer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAmDH,OAAO,EACH,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAGrB,MAAM,gBAAgB,CAAC;AAkBxB;;;GAGG;AACH,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB,EAAE,mBAAmB;IAC7E;;;;;;;OAOG;IACH,sBAAsB,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IACrE;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC5C;AAED;;;;;GAKG;AACH,eAAO,MAAM,SAAS;IAGlB,8EAA8E;;IAE9E,gFAAgF;;IAEhF,sDAAsD;;IAEtD;;;OAGG;;IAEH,kFAAkF;;IAElF,kEAAkE;;IAElE,2EAA2E;;IAE3E,mFAAmF;;IAEnF;;;OAGG;;IAEH;;;OAGG;;IAEH,uHAAuH;;IAEvH,oFAAoF;;IAEpF,gGAAgG;;IAEhG,qGAAqG;;IAErG,iEAAiE;;IAEjE,uFAAuF;;IAEvF,kEAAkE;;IAElE,oGAAoG;;IAEpG,gGAAgG;;IAEhG,gHAAgH;;IAEhH,0GAA0G;;IAE1G,uGAAuG;;IAEvG,yGAAyG;;IAGzG,iEAAiE;;IAEjE,4EAA4E;;IAE5E;;;OAGG;;IAEH;;;OAGG;;IAEH,kGAAkG;;IAElG,2GAA2G;;IAE3G;;;OAGG;;IAEH;;;OAGG;;IAEH,0FAA0F;;IAE1F;;;;OAIG;;IAEH;;;OAGG;;;;;;;;;;;;EAEL,CAAC;AAgHH;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC,gBAAgB,CAsItD,CAAC"}
1
+ {"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../../../../src/formats/dot/importer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAmDH,OAAO,EACH,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAGrB,MAAM,gBAAgB,CAAC;AAoBxB;;;GAGG;AACH,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB,EAAE,mBAAmB;IAC7E;;;;;;;OAOG;IACH,sBAAsB,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IACrE;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC5C;AAED;;;;;GAKG;AACH,eAAO,MAAM,SAAS;IAGlB,8EAA8E;;IAE9E,gFAAgF;;IAEhF,sDAAsD;;IAEtD;;;OAGG;;IAEH,kFAAkF;;IAElF,kEAAkE;;IAElE,2EAA2E;;IAE3E,mFAAmF;;IAEnF;;;OAGG;;IAEH;;;OAGG;;IAEH,uHAAuH;;IAEvH,oFAAoF;;IAEpF,gGAAgG;;IAEhG;;;OAGG;;IAEH,0FAA0F;;IAE1F,iEAAiE;;IAEjE,uFAAuF;;IAEvF,kEAAkE;;IAElE,oGAAoG;;IAEpG,gGAAgG;;IAEhG,gHAAgH;;IAEhH,0GAA0G;;IAE1G,uGAAuG;;IAEvG,yGAAyG;;IAGzG,iEAAiE;;IAEjE,4EAA4E;;IAE5E;;;OAGG;;IAEH;;;OAGG;;IAEH,kGAAkG;;IAElG,2GAA2G;;IAE3G;;;OAGG;;IAEH;;;OAGG;;IAEH,0FAA0F;;IAE1F;;;;OAIG;;IAEH;;;OAGG;;;;;;;;;;;;EAEL,CAAC;AAoHH;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC,gBAAgB,CAsItD,CAAC"}