@graphty/graph-io 0.3.48 → 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 (600) hide show
  1. package/dist/chunks/{approximations-C2riR4NT.js → approximations-BRXsll0T.js} +2 -2
  2. package/dist/chunks/{approximations-C2riR4NT.js.map → approximations-BRXsll0T.js.map} +1 -1
  3. package/dist/chunks/bends-BGXjv_U4.js +129 -0
  4. package/dist/chunks/bends-BGXjv_U4.js.map +1 -0
  5. package/dist/chunks/{block-Cu22ewuS.js → block-yl0f_qLO.js} +931 -164
  6. package/dist/chunks/block-yl0f_qLO.js.map +1 -0
  7. package/dist/chunks/choose-CczZJaX_.js +717 -0
  8. package/dist/chunks/choose-CczZJaX_.js.map +1 -0
  9. package/dist/chunks/{codes-CV_Bhcyi.js → codes-BE2xir2k.js} +6 -2
  10. package/dist/chunks/codes-BE2xir2k.js.map +1 -0
  11. package/dist/chunks/{constants-D0LqcsLJ.js → constants-CKkYLPtt.js} +2 -2
  12. package/dist/chunks/{constants-D0LqcsLJ.js.map → constants-CKkYLPtt.js.map} +1 -1
  13. package/dist/chunks/{context-cgmmOxZ2.js → context-DizmppHy.js} +5 -4
  14. package/dist/chunks/{context-cgmmOxZ2.js.map → context-DizmppHy.js.map} +1 -1
  15. package/dist/chunks/{convert-BcQ8_jMo.js → convert-Ct2zelbQ.js} +7 -2
  16. package/dist/chunks/convert-Ct2zelbQ.js.map +1 -0
  17. package/dist/chunks/{credentials-BiQsnMTb.js → credentials-CmvJXYeH.js} +67 -16
  18. package/dist/chunks/credentials-CmvJXYeH.js.map +1 -0
  19. package/dist/chunks/{cx-export-BEeF6ymo.js → cx-export-Bt6NoqTQ.js} +3 -3
  20. package/dist/chunks/{cx-export-BEeF6ymo.js.map → cx-export-Bt6NoqTQ.js.map} +1 -1
  21. package/dist/chunks/descriptor-B28U25x4.js +60 -0
  22. package/dist/chunks/descriptor-B28U25x4.js.map +1 -0
  23. package/dist/chunks/{descriptor-BJ-W0Jd-.js → descriptor-Dhez_Cew.js} +11 -2
  24. package/dist/chunks/descriptor-Dhez_Cew.js.map +1 -0
  25. package/dist/chunks/{emit-CD8xnY8s.js → emit-7Jkpg0yd.js} +1788 -133
  26. package/dist/chunks/emit-7Jkpg0yd.js.map +1 -0
  27. package/dist/chunks/{escape-DH2Egt-l.js → escape-CuCIzNMB.js} +8 -8
  28. package/dist/chunks/{escape-DH2Egt-l.js.map → escape-CuCIzNMB.js.map} +1 -1
  29. package/dist/chunks/{export-CZ7VRm4I.js → export-Cha4dRFz.js} +45 -387
  30. package/dist/chunks/export-Cha4dRFz.js.map +1 -0
  31. package/dist/chunks/{exporter-ChjL5fmP.js → exporter-1Ajud15J.js} +9 -8
  32. package/dist/chunks/{exporter-ChjL5fmP.js.map → exporter-1Ajud15J.js.map} +1 -1
  33. package/dist/chunks/{exporter-BIdaoIgh.js → exporter-B6yvL3wy.js} +7 -7
  34. package/dist/chunks/{exporter-BIdaoIgh.js.map → exporter-B6yvL3wy.js.map} +1 -1
  35. package/dist/chunks/{exporter-Dcw7Ldtq.js → exporter-BP6otMO6.js} +6 -6
  36. package/dist/chunks/{exporter-Dcw7Ldtq.js.map → exporter-BP6otMO6.js.map} +1 -1
  37. package/dist/chunks/{exporter-DtVU80Fa.js → exporter-CA5q8ROP.js} +9 -8
  38. package/dist/chunks/{exporter-DtVU80Fa.js.map → exporter-CA5q8ROP.js.map} +1 -1
  39. package/dist/chunks/{exporter-bxxjOrDZ.js → exporter-CQQZFJ2v.js} +1284 -156
  40. package/dist/chunks/exporter-CQQZFJ2v.js.map +1 -0
  41. package/dist/chunks/format-BXiAb-1h.js +408 -0
  42. package/dist/chunks/format-BXiAb-1h.js.map +1 -0
  43. package/dist/chunks/{generic-CP6YD34u.js → generic-Dc21MAdg.js} +387 -31
  44. package/dist/chunks/generic-Dc21MAdg.js.map +1 -0
  45. package/dist/chunks/{importer-B87_fmVx.js → importer-C6NVpCXp.js} +327 -84
  46. package/dist/chunks/importer-C6NVpCXp.js.map +1 -0
  47. package/dist/chunks/{importer-DPZDN40-.js → importer-CKFe4q54.js} +25 -17
  48. package/dist/chunks/importer-CKFe4q54.js.map +1 -0
  49. package/dist/chunks/{importer-Bji2MeWr.js → importer-CKbUbsJA.js} +13 -10
  50. package/dist/chunks/{importer-Bji2MeWr.js.map → importer-CKbUbsJA.js.map} +1 -1
  51. package/dist/chunks/{importer-CB_zV5_L.js → importer-ClCsdgTJ.js} +208 -1104
  52. package/dist/chunks/importer-ClCsdgTJ.js.map +1 -0
  53. package/dist/chunks/{importer-e3huMZbm.js → importer-CyVZTrf0.js} +14 -10
  54. package/dist/chunks/importer-CyVZTrf0.js.map +1 -0
  55. package/dist/chunks/{importer-CVT-JyDE.js → importer-DgG4v1Ms.js} +1537 -355
  56. package/dist/chunks/importer-DgG4v1Ms.js.map +1 -0
  57. package/dist/chunks/{importer-Cyy6UseH.js → importer-asFUrIsj.js} +66 -13
  58. package/dist/chunks/importer-asFUrIsj.js.map +1 -0
  59. package/dist/chunks/{input-Ccg9I22A.js → input-CAxt_aV-.js} +4 -4
  60. package/dist/chunks/{input-Ccg9I22A.js.map → input-CAxt_aV-.js.map} +1 -1
  61. package/dist/chunks/{json-elements-By172SVq.js → json-elements-Cq76WjnZ.js} +4 -4
  62. package/dist/chunks/{json-elements-By172SVq.js.map → json-elements-Cq76WjnZ.js.map} +1 -1
  63. package/dist/chunks/{lexicon-u2SI5xcx.js → lexicon-IVRq2Uoo.js} +282 -74
  64. package/dist/chunks/lexicon-IVRq2Uoo.js.map +1 -0
  65. package/dist/chunks/{ontology-export-BwgMyuF0.js → ontology-export-OMo91mb0.js} +4 -4
  66. package/dist/chunks/{ontology-export-BwgMyuF0.js.map → ontology-export-OMo91mb0.js.map} +1 -1
  67. package/dist/chunks/{records-Cgvxz-Vx.js → records-NJiYvekn.js} +2 -2
  68. package/dist/chunks/{records-Cgvxz-Vx.js.map → records-NJiYvekn.js.map} +1 -1
  69. package/dist/chunks/{report-CgdsL9Hb.js → report-CwMfYa9J.js} +23 -23
  70. package/dist/chunks/{report-CgdsL9Hb.js.map → report-CwMfYa9J.js.map} +1 -1
  71. package/dist/chunks/round-trip-Cy3_SHRZ.js +79 -0
  72. package/dist/chunks/round-trip-Cy3_SHRZ.js.map +1 -0
  73. package/dist/chunks/{sigv4-LkAzsLAu.js → sigv4-BXwVbza3.js} +5 -5
  74. package/dist/chunks/sigv4-BXwVbza3.js.map +1 -0
  75. package/dist/chunks/{styles-CaABMoO1.js → styles-CAVmBLgp.js} +1237 -138
  76. package/dist/chunks/styles-CAVmBLgp.js.map +1 -0
  77. package/dist/chunks/styles-CPczw1Jz.js +1928 -0
  78. package/dist/chunks/styles-CPczw1Jz.js.map +1 -0
  79. package/dist/chunks/styles-boK6Ln54.js +2847 -0
  80. package/dist/chunks/styles-boK6Ln54.js.map +1 -0
  81. package/dist/chunks/{styles-yed-Cs1nmrjn.js → styles-yed-XeFBQ6VS.js} +506 -175
  82. package/dist/chunks/styles-yed-XeFBQ6VS.js.map +1 -0
  83. package/dist/chunks/{text-BuKQVMz2.js → text-ystE2bYi.js} +2 -2
  84. package/dist/chunks/{text-BuKQVMz2.js.map → text-ystE2bYi.js.map} +1 -1
  85. package/dist/csv.js +7 -7
  86. package/dist/cx.js +2 -2
  87. package/dist/cx2.js +2 -2
  88. package/dist/cys.js +1 -1
  89. package/dist/dot.js +8 -4
  90. package/dist/dot.js.map +1 -1
  91. package/dist/gexf.js +42 -12
  92. package/dist/gexf.js.map +1 -1
  93. package/dist/gml.js +848 -194
  94. package/dist/gml.js.map +1 -1
  95. package/dist/graph-io.js +230 -193
  96. package/dist/graph-io.js.map +1 -1
  97. package/dist/graphml.js +3 -3
  98. package/dist/json.js +3 -2
  99. package/dist/neo4j.js +6 -6
  100. package/dist/obo.js +1 -1
  101. package/dist/pajek.js +1 -1
  102. package/dist/positions.js +45 -3
  103. package/dist/positions.js.map +1 -1
  104. package/dist/sources-cypher.js +141 -23
  105. package/dist/sources-cypher.js.map +1 -1
  106. package/dist/sources-ndex.js +2 -2
  107. package/dist/sources-rest.js +32 -6
  108. package/dist/sources-rest.js.map +1 -1
  109. package/dist/sources-sparql.d.ts +1 -0
  110. package/dist/sources-sparql.js +439 -0
  111. package/dist/sources-sparql.js.map +1 -0
  112. package/dist/src/formats/cx/importer.d.ts.map +1 -1
  113. package/dist/src/formats/cx/importer.js +5 -1
  114. package/dist/src/formats/cx/importer.js.map +1 -1
  115. package/dist/src/formats/cx/styles.d.ts +24 -1
  116. package/dist/src/formats/cx/styles.d.ts.map +1 -1
  117. package/dist/src/formats/cx/styles.js +117 -11
  118. package/dist/src/formats/cx/styles.js.map +1 -1
  119. package/dist/src/formats/cx2/importer.d.ts.map +1 -1
  120. package/dist/src/formats/cx2/importer.js +1 -0
  121. package/dist/src/formats/cx2/importer.js.map +1 -1
  122. package/dist/src/formats/cx2/styles.d.ts.map +1 -1
  123. package/dist/src/formats/cx2/styles.js +3 -1
  124. package/dist/src/formats/cx2/styles.js.map +1 -1
  125. package/dist/src/formats/cys/importer.d.ts.map +1 -1
  126. package/dist/src/formats/cys/importer.js +1 -0
  127. package/dist/src/formats/cys/importer.js.map +1 -1
  128. package/dist/src/formats/cys/styles.d.ts +2 -0
  129. package/dist/src/formats/cys/styles.d.ts.map +1 -1
  130. package/dist/src/formats/cys/styles.js +15 -7
  131. package/dist/src/formats/cys/styles.js.map +1 -1
  132. package/dist/src/formats/dot/drawing.d.ts +98 -0
  133. package/dist/src/formats/dot/drawing.d.ts.map +1 -0
  134. package/dist/src/formats/dot/drawing.js +734 -0
  135. package/dist/src/formats/dot/drawing.js.map +1 -0
  136. package/dist/src/formats/dot/exporter.d.ts.map +1 -1
  137. package/dist/src/formats/dot/exporter.js +34 -2
  138. package/dist/src/formats/dot/exporter.js.map +1 -1
  139. package/dist/src/formats/dot/importer.d.ts +6 -1
  140. package/dist/src/formats/dot/importer.d.ts.map +1 -1
  141. package/dist/src/formats/dot/importer.js +170 -33
  142. package/dist/src/formats/dot/importer.js.map +1 -1
  143. package/dist/src/formats/dot/index.d.ts +3 -1
  144. package/dist/src/formats/dot/index.d.ts.map +1 -1
  145. package/dist/src/formats/dot/index.js +2 -1
  146. package/dist/src/formats/dot/index.js.map +1 -1
  147. package/dist/src/formats/dot/label-places.d.ts +41 -0
  148. package/dist/src/formats/dot/label-places.d.ts.map +1 -0
  149. package/dist/src/formats/dot/label-places.js +185 -0
  150. package/dist/src/formats/dot/label-places.js.map +1 -0
  151. package/dist/src/formats/dot/names.d.ts +13 -0
  152. package/dist/src/formats/dot/names.d.ts.map +1 -1
  153. package/dist/src/formats/dot/names.js +13 -0
  154. package/dist/src/formats/dot/names.js.map +1 -1
  155. package/dist/src/formats/dot/record.d.ts +50 -0
  156. package/dist/src/formats/dot/record.d.ts.map +1 -0
  157. package/dist/src/formats/dot/record.js +275 -0
  158. package/dist/src/formats/dot/record.js.map +1 -0
  159. package/dist/src/formats/dot/styles.d.ts +72 -2
  160. package/dist/src/formats/dot/styles.d.ts.map +1 -1
  161. package/dist/src/formats/dot/styles.js +1500 -119
  162. package/dist/src/formats/dot/styles.js.map +1 -1
  163. package/dist/src/formats/gexf/dialog-metrics.d.ts +15 -0
  164. package/dist/src/formats/gexf/dialog-metrics.d.ts.map +1 -0
  165. package/dist/src/formats/gexf/dialog-metrics.js +59 -0
  166. package/dist/src/formats/gexf/dialog-metrics.js.map +1 -0
  167. package/dist/src/formats/gexf/importer.d.ts +7 -0
  168. package/dist/src/formats/gexf/importer.d.ts.map +1 -1
  169. package/dist/src/formats/gexf/importer.js +41 -5
  170. package/dist/src/formats/gexf/importer.js.map +1 -1
  171. package/dist/src/formats/gexf/preview.d.ts +77 -0
  172. package/dist/src/formats/gexf/preview.d.ts.map +1 -0
  173. package/dist/src/formats/gexf/preview.js +191 -0
  174. package/dist/src/formats/gexf/preview.js.map +1 -0
  175. package/dist/src/formats/gexf/schema.d.ts.map +1 -1
  176. package/dist/src/formats/gexf/schema.js +2 -1
  177. package/dist/src/formats/gexf/schema.js.map +1 -1
  178. package/dist/src/formats/gexf/styles.d.ts +58 -31
  179. package/dist/src/formats/gexf/styles.d.ts.map +1 -1
  180. package/dist/src/formats/gexf/styles.js +848 -225
  181. package/dist/src/formats/gexf/styles.js.map +1 -1
  182. package/dist/src/formats/gml/importer.d.ts +5 -2
  183. package/dist/src/formats/gml/importer.d.ts.map +1 -1
  184. package/dist/src/formats/gml/importer.js +258 -71
  185. package/dist/src/formats/gml/importer.js.map +1 -1
  186. package/dist/src/formats/gml/index.d.ts +1 -1
  187. package/dist/src/formats/gml/index.d.ts.map +1 -1
  188. package/dist/src/formats/gml/index.js +1 -1
  189. package/dist/src/formats/gml/index.js.map +1 -1
  190. package/dist/src/formats/gml/positions.d.ts +7 -0
  191. package/dist/src/formats/gml/positions.d.ts.map +1 -1
  192. package/dist/src/formats/gml/positions.js +29 -7
  193. package/dist/src/formats/gml/positions.js.map +1 -1
  194. package/dist/src/formats/gml/styles.d.ts.map +1 -1
  195. package/dist/src/formats/gml/styles.js +754 -102
  196. package/dist/src/formats/gml/styles.js.map +1 -1
  197. package/dist/src/formats/graphml/styles-plain.d.ts.map +1 -1
  198. package/dist/src/formats/graphml/styles-plain.js +6 -10
  199. package/dist/src/formats/graphml/styles-plain.js.map +1 -1
  200. package/dist/src/formats/graphml/styles-yed.d.ts +21 -15
  201. package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -1
  202. package/dist/src/formats/graphml/styles-yed.js +695 -164
  203. package/dist/src/formats/graphml/styles-yed.js.map +1 -1
  204. package/dist/src/formats/graphml/styles-yfiles3.d.ts +1 -1
  205. package/dist/src/formats/graphml/styles-yfiles3.d.ts.map +1 -1
  206. package/dist/src/formats/graphml/styles-yfiles3.js +431 -64
  207. package/dist/src/formats/graphml/styles-yfiles3.js.map +1 -1
  208. package/dist/src/formats/graphml/yfiles.d.ts +3 -3
  209. package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
  210. package/dist/src/formats/graphml/yfiles.js +16 -6
  211. package/dist/src/formats/graphml/yfiles.js.map +1 -1
  212. package/dist/src/formats/json/dialect.d.ts +3 -2
  213. package/dist/src/formats/json/dialect.d.ts.map +1 -1
  214. package/dist/src/formats/json/dialect.js +39 -5
  215. package/dist/src/formats/json/dialect.js.map +1 -1
  216. package/dist/src/formats/json/importer.d.ts +13 -2
  217. package/dist/src/formats/json/importer.d.ts.map +1 -1
  218. package/dist/src/formats/json/importer.js +42 -6
  219. package/dist/src/formats/json/importer.js.map +1 -1
  220. package/dist/src/formats/json/index.d.ts +1 -1
  221. package/dist/src/formats/json/index.d.ts.map +1 -1
  222. package/dist/src/formats/json/index.js +1 -1
  223. package/dist/src/formats/json/index.js.map +1 -1
  224. package/dist/src/formats/json/positions.d.ts +5 -2
  225. package/dist/src/formats/json/positions.d.ts.map +1 -1
  226. package/dist/src/formats/json/positions.js +20 -4
  227. package/dist/src/formats/json/positions.js.map +1 -1
  228. package/dist/src/formats/json/styles.d.ts +12 -1
  229. package/dist/src/formats/json/styles.d.ts.map +1 -1
  230. package/dist/src/formats/json/styles.js +1843 -136
  231. package/dist/src/formats/json/styles.js.map +1 -1
  232. package/dist/src/formats/pajek/draw.d.ts +104 -0
  233. package/dist/src/formats/pajek/draw.d.ts.map +1 -0
  234. package/dist/src/formats/pajek/draw.js +382 -0
  235. package/dist/src/formats/pajek/draw.js.map +1 -0
  236. package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
  237. package/dist/src/formats/pajek/exporter.js +70 -51
  238. package/dist/src/formats/pajek/exporter.js.map +1 -1
  239. package/dist/src/formats/pajek/importer.d.ts +9 -0
  240. package/dist/src/formats/pajek/importer.d.ts.map +1 -1
  241. package/dist/src/formats/pajek/importer.js +233 -102
  242. package/dist/src/formats/pajek/importer.js.map +1 -1
  243. package/dist/src/formats/pajek/index.d.ts +1 -0
  244. package/dist/src/formats/pajek/index.d.ts.map +1 -1
  245. package/dist/src/formats/pajek/index.js.map +1 -1
  246. package/dist/src/formats/pajek/styles.d.ts +15 -7
  247. package/dist/src/formats/pajek/styles.d.ts.map +1 -1
  248. package/dist/src/formats/pajek/styles.js +1395 -114
  249. package/dist/src/formats/pajek/styles.js.map +1 -1
  250. package/dist/src/formats/pajek/syntax.d.ts +10 -1
  251. package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
  252. package/dist/src/formats/pajek/syntax.js +26 -2
  253. package/dist/src/formats/pajek/syntax.js.map +1 -1
  254. package/dist/src/formats/xgmml/emit.d.ts +1 -0
  255. package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
  256. package/dist/src/formats/xgmml/emit.js +65 -5
  257. package/dist/src/formats/xgmml/emit.js.map +1 -1
  258. package/dist/src/formats/xgmml/styles.d.ts +23 -3
  259. package/dist/src/formats/xgmml/styles.d.ts.map +1 -1
  260. package/dist/src/formats/xgmml/styles.js +277 -60
  261. package/dist/src/formats/xgmml/styles.js.map +1 -1
  262. package/dist/src/index.d.ts +6 -5
  263. package/dist/src/index.d.ts.map +1 -1
  264. package/dist/src/index.js +6 -5
  265. package/dist/src/index.js.map +1 -1
  266. package/dist/src/positions/convert.d.ts.map +1 -1
  267. package/dist/src/positions/convert.js +11 -1
  268. package/dist/src/positions/convert.js.map +1 -1
  269. package/dist/src/positions/extract.d.ts.map +1 -1
  270. package/dist/src/positions/extract.js +53 -1
  271. package/dist/src/positions/extract.js.map +1 -1
  272. package/dist/src/positions/index.d.ts +1 -1
  273. package/dist/src/positions/index.d.ts.map +1 -1
  274. package/dist/src/positions/types.d.ts +59 -0
  275. package/dist/src/positions/types.d.ts.map +1 -1
  276. package/dist/src/sources/builtins.d.ts +1 -1
  277. package/dist/src/sources/builtins.d.ts.map +1 -1
  278. package/dist/src/sources/builtins.js +8 -2
  279. package/dist/src/sources/builtins.js.map +1 -1
  280. package/dist/src/sources/context.d.ts.map +1 -1
  281. package/dist/src/sources/context.js +1 -0
  282. package/dist/src/sources/context.js.map +1 -1
  283. package/dist/src/sources/credentials.d.ts +50 -1
  284. package/dist/src/sources/credentials.d.ts.map +1 -1
  285. package/dist/src/sources/credentials.js +69 -0
  286. package/dist/src/sources/credentials.js.map +1 -1
  287. package/dist/src/sources/cypher/descriptor.d.ts.map +1 -1
  288. package/dist/src/sources/cypher/descriptor.js +5 -0
  289. package/dist/src/sources/cypher/descriptor.js.map +1 -1
  290. package/dist/src/sources/cypher/index.d.ts.map +1 -1
  291. package/dist/src/sources/cypher/index.js +125 -18
  292. package/dist/src/sources/cypher/index.js.map +1 -1
  293. package/dist/src/sources/cypher/params.d.ts +1 -1
  294. package/dist/src/sources/cypher/params.d.ts.map +1 -1
  295. package/dist/src/sources/cypher/query-builder.d.ts +17 -0
  296. package/dist/src/sources/cypher/query-builder.d.ts.map +1 -1
  297. package/dist/src/sources/cypher/query-builder.js +31 -0
  298. package/dist/src/sources/cypher/query-builder.js.map +1 -1
  299. package/dist/src/sources/ids.d.ts +5 -0
  300. package/dist/src/sources/ids.d.ts.map +1 -1
  301. package/dist/src/sources/ids.js +5 -0
  302. package/dist/src/sources/ids.js.map +1 -1
  303. package/dist/src/sources/params.d.ts +3 -0
  304. package/dist/src/sources/params.d.ts.map +1 -1
  305. package/dist/src/sources/rest/descriptor.d.ts.map +1 -1
  306. package/dist/src/sources/rest/descriptor.js +9 -0
  307. package/dist/src/sources/rest/descriptor.js.map +1 -1
  308. package/dist/src/sources/rest/openalex.d.ts +4 -2
  309. package/dist/src/sources/rest/openalex.d.ts.map +1 -1
  310. package/dist/src/sources/rest/openalex.js +4 -2
  311. package/dist/src/sources/rest/openalex.js.map +1 -1
  312. package/dist/src/sources/rest/source.d.ts.map +1 -1
  313. package/dist/src/sources/rest/source.js +38 -0
  314. package/dist/src/sources/rest/source.js.map +1 -1
  315. package/dist/src/sources/run.d.ts +2 -0
  316. package/dist/src/sources/run.d.ts.map +1 -1
  317. package/dist/src/sources/run.js +30 -3
  318. package/dist/src/sources/run.js.map +1 -1
  319. package/dist/src/sources/sigv4.d.ts +5 -3
  320. package/dist/src/sources/sigv4.d.ts.map +1 -1
  321. package/dist/src/sources/sigv4.js +6 -4
  322. package/dist/src/sources/sigv4.js.map +1 -1
  323. package/dist/src/sources/sparql/descriptor.d.ts +10 -0
  324. package/dist/src/sources/sparql/descriptor.d.ts.map +1 -0
  325. package/dist/src/sources/sparql/descriptor.js +64 -0
  326. package/dist/src/sources/sparql/descriptor.js.map +1 -0
  327. package/dist/src/sources/sparql/index.d.ts +28 -0
  328. package/dist/src/sources/sparql/index.d.ts.map +1 -0
  329. package/dist/src/sources/sparql/index.js +327 -0
  330. package/dist/src/sources/sparql/index.js.map +1 -0
  331. package/dist/src/sources/sparql/ntriples.d.ts +69 -0
  332. package/dist/src/sources/sparql/ntriples.d.ts.map +1 -0
  333. package/dist/src/sources/sparql/ntriples.js +180 -0
  334. package/dist/src/sources/sparql/ntriples.js.map +1 -0
  335. package/dist/src/sources/sparql/params.d.ts +27 -0
  336. package/dist/src/sources/sparql/params.d.ts.map +1 -0
  337. package/dist/src/sources/sparql/params.js +5 -0
  338. package/dist/src/sources/sparql/params.js.map +1 -0
  339. package/dist/src/sources/sparql/query.d.ts +73 -0
  340. package/dist/src/sources/sparql/query.d.ts.map +1 -0
  341. package/dist/src/sources/sparql/query.js +164 -0
  342. package/dist/src/sources/sparql/query.js.map +1 -0
  343. package/dist/src/sources/types.d.ts +60 -0
  344. package/dist/src/sources/types.d.ts.map +1 -1
  345. package/dist/src/styles/annotations.d.ts +61 -5
  346. package/dist/src/styles/annotations.d.ts.map +1 -1
  347. package/dist/src/styles/annotations.js +130 -22
  348. package/dist/src/styles/annotations.js.map +1 -1
  349. package/dist/src/styles/canon/bends.d.ts +46 -0
  350. package/dist/src/styles/canon/bends.d.ts.map +1 -1
  351. package/dist/src/styles/canon/bends.js +123 -0
  352. package/dist/src/styles/canon/bends.js.map +1 -1
  353. package/dist/src/styles/canon/color-tables.d.ts +6 -1
  354. package/dist/src/styles/canon/color-tables.d.ts.map +1 -1
  355. package/dist/src/styles/canon/color-tables.js +10 -4
  356. package/dist/src/styles/canon/color-tables.js.map +1 -1
  357. package/dist/src/styles/canon/color.d.ts +3 -1
  358. package/dist/src/styles/canon/color.d.ts.map +1 -1
  359. package/dist/src/styles/canon/color.js +103 -3
  360. package/dist/src/styles/canon/color.js.map +1 -1
  361. package/dist/src/styles/canon/enums.d.ts +2 -2
  362. package/dist/src/styles/canon/enums.d.ts.map +1 -1
  363. package/dist/src/styles/canon/enums.js +89 -7
  364. package/dist/src/styles/canon/enums.js.map +1 -1
  365. package/dist/src/styles/canon/graphviz.d.ts +12 -3
  366. package/dist/src/styles/canon/graphviz.d.ts.map +1 -1
  367. package/dist/src/styles/canon/graphviz.js +57 -9
  368. package/dist/src/styles/canon/graphviz.js.map +1 -1
  369. package/dist/src/styles/canon/number.d.ts +8 -0
  370. package/dist/src/styles/canon/number.d.ts.map +1 -1
  371. package/dist/src/styles/canon/number.js +18 -0
  372. package/dist/src/styles/canon/number.js.map +1 -1
  373. package/dist/src/styles/canon/text.d.ts +29 -2
  374. package/dist/src/styles/canon/text.d.ts.map +1 -1
  375. package/dist/src/styles/canon/text.js +156 -16
  376. package/dist/src/styles/canon/text.js.map +1 -1
  377. package/dist/src/styles/codes.d.ts +2 -0
  378. package/dist/src/styles/codes.d.ts.map +1 -1
  379. package/dist/src/styles/codes.js +2 -0
  380. package/dist/src/styles/codes.js.map +1 -1
  381. package/dist/src/styles/cyjs/cascade.d.ts.map +1 -1
  382. package/dist/src/styles/cyjs/cascade.js +1139 -79
  383. package/dist/src/styles/cyjs/cascade.js.map +1 -1
  384. package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -1
  385. package/dist/src/styles/cyjs/defaults-table.js +4 -0
  386. package/dist/src/styles/cyjs/defaults-table.js.map +1 -1
  387. package/dist/src/styles/cyjs/emit.d.ts.map +1 -1
  388. package/dist/src/styles/cyjs/emit.js +232 -10
  389. package/dist/src/styles/cyjs/emit.js.map +1 -1
  390. package/dist/src/styles/cyjs/face.d.ts +20 -0
  391. package/dist/src/styles/cyjs/face.d.ts.map +1 -0
  392. package/dist/src/styles/cyjs/face.js +332 -0
  393. package/dist/src/styles/cyjs/face.js.map +1 -0
  394. package/dist/src/styles/cyjs/mappers.d.ts +44 -1
  395. package/dist/src/styles/cyjs/mappers.d.ts.map +1 -1
  396. package/dist/src/styles/cyjs/mappers.js +475 -26
  397. package/dist/src/styles/cyjs/mappers.js.map +1 -1
  398. package/dist/src/styles/cyjs/routes.d.ts +53 -0
  399. package/dist/src/styles/cyjs/routes.d.ts.map +1 -0
  400. package/dist/src/styles/cyjs/routes.js +360 -0
  401. package/dist/src/styles/cyjs/routes.js.map +1 -0
  402. package/dist/src/styles/cytoscape/charts.d.ts +23 -0
  403. package/dist/src/styles/cytoscape/charts.d.ts.map +1 -0
  404. package/dist/src/styles/cytoscape/charts.js +560 -0
  405. package/dist/src/styles/cytoscape/charts.js.map +1 -0
  406. package/dist/src/styles/cytoscape/emit.d.ts.map +1 -1
  407. package/dist/src/styles/cytoscape/emit.js +156 -48
  408. package/dist/src/styles/cytoscape/emit.js.map +1 -1
  409. package/dist/src/styles/cytoscape/lexicon.d.ts +91 -3
  410. package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -1
  411. package/dist/src/styles/cytoscape/lexicon.js +387 -77
  412. package/dist/src/styles/cytoscape/lexicon.js.map +1 -1
  413. package/dist/src/styles/cytoscape/mappings.d.ts +30 -0
  414. package/dist/src/styles/cytoscape/mappings.d.ts.map +1 -1
  415. package/dist/src/styles/cytoscape/mappings.js +92 -0
  416. package/dist/src/styles/cytoscape/mappings.js.map +1 -1
  417. package/dist/src/styles/cytoscape/resolve.d.ts +42 -2
  418. package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -1
  419. package/dist/src/styles/cytoscape/resolve.js +623 -17
  420. package/dist/src/styles/cytoscape/resolve.js.map +1 -1
  421. package/dist/src/styles/defaults.d.ts +46 -26
  422. package/dist/src/styles/defaults.d.ts.map +1 -1
  423. package/dist/src/styles/defaults.js +308 -71
  424. package/dist/src/styles/defaults.js.map +1 -1
  425. package/dist/src/styles/index.d.ts +4 -3
  426. package/dist/src/styles/index.d.ts.map +1 -1
  427. package/dist/src/styles/index.js +3 -2
  428. package/dist/src/styles/index.js.map +1 -1
  429. package/dist/src/styles/internal.d.ts +1 -0
  430. package/dist/src/styles/internal.d.ts.map +1 -1
  431. package/dist/src/styles/internal.js +1 -0
  432. package/dist/src/styles/internal.js.map +1 -1
  433. package/dist/src/styles/io/generic.d.ts.map +1 -1
  434. package/dist/src/styles/io/generic.js +56 -16
  435. package/dist/src/styles/io/generic.js.map +1 -1
  436. package/dist/src/styles/io/round-trip.d.ts +56 -0
  437. package/dist/src/styles/io/round-trip.d.ts.map +1 -0
  438. package/dist/src/styles/io/round-trip.js +138 -0
  439. package/dist/src/styles/io/round-trip.js.map +1 -0
  440. package/dist/src/styles/io/writer.d.ts.map +1 -1
  441. package/dist/src/styles/io/writer.js +6 -1
  442. package/dist/src/styles/io/writer.js.map +1 -1
  443. package/dist/src/styles/notes.d.ts.map +1 -1
  444. package/dist/src/styles/notes.js +1 -0
  445. package/dist/src/styles/notes.js.map +1 -1
  446. package/dist/src/styles/plan/features.d.ts +1 -1
  447. package/dist/src/styles/plan/features.d.ts.map +1 -1
  448. package/dist/src/styles/plan/features.js +22 -2
  449. package/dist/src/styles/plan/features.js.map +1 -1
  450. package/dist/src/styles/plan/index.d.ts +1 -1
  451. package/dist/src/styles/plan/index.d.ts.map +1 -1
  452. package/dist/src/styles/plan/index.js +1 -1
  453. package/dist/src/styles/plan/index.js.map +1 -1
  454. package/dist/src/styles/plan/plan.d.ts.map +1 -1
  455. package/dist/src/styles/plan/plan.js +61 -4
  456. package/dist/src/styles/plan/plan.js.map +1 -1
  457. package/dist/src/styles/plan/resolve.d.ts +11 -0
  458. package/dist/src/styles/plan/resolve.d.ts.map +1 -1
  459. package/dist/src/styles/plan/resolve.js +40 -4
  460. package/dist/src/styles/plan/resolve.js.map +1 -1
  461. package/dist/src/styles/slots.d.ts +14 -0
  462. package/dist/src/styles/slots.d.ts.map +1 -0
  463. package/dist/src/styles/slots.js +20 -0
  464. package/dist/src/styles/slots.js.map +1 -0
  465. package/dist/src/styles/types.d.ts +687 -6
  466. package/dist/src/styles/types.d.ts.map +1 -1
  467. package/dist/src/styles/vocabulary.d.ts +3 -2
  468. package/dist/src/styles/vocabulary.d.ts.map +1 -1
  469. package/dist/src/styles/vocabulary.js +224 -0
  470. package/dist/src/styles/vocabulary.js.map +1 -1
  471. package/dist/styles.js +30 -239
  472. package/dist/styles.js.map +1 -1
  473. package/dist/xgmml.js +3 -3
  474. package/package.json +27 -7
  475. package/src/formats/cx/importer.ts +6 -1
  476. package/src/formats/cx/styles.ts +143 -9
  477. package/src/formats/cx2/importer.ts +1 -0
  478. package/src/formats/cx2/styles.ts +3 -1
  479. package/src/formats/cys/importer.ts +1 -0
  480. package/src/formats/cys/styles.ts +27 -5
  481. package/src/formats/dot/drawing.ts +799 -0
  482. package/src/formats/dot/exporter.ts +37 -1
  483. package/src/formats/dot/importer.ts +192 -36
  484. package/src/formats/dot/index.ts +3 -1
  485. package/src/formats/dot/label-places.ts +241 -0
  486. package/src/formats/dot/names.ts +15 -0
  487. package/src/formats/dot/record.ts +336 -0
  488. package/src/formats/dot/styles.ts +1702 -149
  489. package/src/formats/gexf/dialog-metrics.ts +61 -0
  490. package/src/formats/gexf/importer.ts +50 -5
  491. package/src/formats/gexf/preview.ts +217 -0
  492. package/src/formats/gexf/schema.ts +2 -1
  493. package/src/formats/gexf/styles.ts +1099 -245
  494. package/src/formats/gml/importer.ts +291 -76
  495. package/src/formats/gml/index.ts +1 -1
  496. package/src/formats/gml/positions.ts +29 -7
  497. package/src/formats/gml/styles.ts +852 -110
  498. package/src/formats/graphml/styles-plain.ts +6 -15
  499. package/src/formats/graphml/styles-yed.ts +765 -176
  500. package/src/formats/graphml/styles-yfiles3.ts +487 -63
  501. package/src/formats/graphml/yfiles.ts +19 -6
  502. package/src/formats/json/dialect.ts +41 -5
  503. package/src/formats/json/importer.ts +59 -7
  504. package/src/formats/json/index.ts +1 -0
  505. package/src/formats/json/positions.ts +22 -5
  506. package/src/formats/json/styles.ts +2123 -171
  507. package/src/formats/pajek/draw.ts +469 -0
  508. package/src/formats/pajek/exporter.ts +81 -49
  509. package/src/formats/pajek/importer.ts +278 -103
  510. package/src/formats/pajek/index.ts +1 -0
  511. package/src/formats/pajek/styles.ts +1506 -133
  512. package/src/formats/pajek/syntax.ts +27 -2
  513. package/src/formats/xgmml/emit.ts +73 -5
  514. package/src/formats/xgmml/styles.ts +330 -71
  515. package/src/index.ts +12 -1
  516. package/src/positions/convert.ts +12 -1
  517. package/src/positions/extract.ts +55 -1
  518. package/src/positions/index.ts +1 -0
  519. package/src/positions/types.ts +60 -0
  520. package/src/sources/builtins.ts +8 -1
  521. package/src/sources/context.ts +1 -0
  522. package/src/sources/credentials.ts +90 -1
  523. package/src/sources/cypher/descriptor.ts +7 -1
  524. package/src/sources/cypher/index.ts +149 -18
  525. package/src/sources/cypher/params.ts +1 -1
  526. package/src/sources/cypher/query-builder.ts +33 -0
  527. package/src/sources/ids.ts +6 -0
  528. package/src/sources/params.ts +3 -0
  529. package/src/sources/rest/descriptor.ts +9 -0
  530. package/src/sources/rest/openalex.ts +4 -2
  531. package/src/sources/rest/source.ts +41 -0
  532. package/src/sources/run.ts +35 -3
  533. package/src/sources/sigv4.ts +6 -4
  534. package/src/sources/sparql/descriptor.ts +67 -0
  535. package/src/sources/sparql/index.ts +371 -0
  536. package/src/sources/sparql/ntriples.ts +219 -0
  537. package/src/sources/sparql/params.ts +28 -0
  538. package/src/sources/sparql/query.ts +216 -0
  539. package/src/sources/types.ts +68 -0
  540. package/src/styles/annotations.ts +201 -27
  541. package/src/styles/canon/bends.ts +137 -0
  542. package/src/styles/canon/color-tables.ts +10 -4
  543. package/src/styles/canon/color.ts +105 -3
  544. package/src/styles/canon/enums.ts +107 -8
  545. package/src/styles/canon/graphviz.ts +71 -10
  546. package/src/styles/canon/number.ts +19 -0
  547. package/src/styles/canon/text.ts +187 -16
  548. package/src/styles/codes.ts +2 -0
  549. package/src/styles/cyjs/cascade.ts +1303 -84
  550. package/src/styles/cyjs/defaults-table.ts +4 -0
  551. package/src/styles/cyjs/emit.ts +268 -14
  552. package/src/styles/cyjs/face.ts +372 -0
  553. package/src/styles/cyjs/mappers.ts +506 -27
  554. package/src/styles/cyjs/routes.ts +432 -0
  555. package/src/styles/cytoscape/charts.ts +684 -0
  556. package/src/styles/cytoscape/emit.ts +170 -48
  557. package/src/styles/cytoscape/lexicon.ts +431 -78
  558. package/src/styles/cytoscape/mappings.ts +108 -0
  559. package/src/styles/cytoscape/resolve.ts +741 -17
  560. package/src/styles/defaults.ts +417 -108
  561. package/src/styles/index.ts +5 -0
  562. package/src/styles/internal.ts +1 -0
  563. package/src/styles/io/generic.ts +79 -23
  564. package/src/styles/io/round-trip.ts +202 -0
  565. package/src/styles/io/writer.ts +6 -1
  566. package/src/styles/notes.ts +1 -0
  567. package/src/styles/plan/features.ts +23 -2
  568. package/src/styles/plan/index.ts +1 -1
  569. package/src/styles/plan/plan.ts +69 -5
  570. package/src/styles/plan/resolve.ts +47 -4
  571. package/src/styles/slots.ts +25 -0
  572. package/src/styles/types.ts +698 -5
  573. package/src/styles/vocabulary.ts +232 -2
  574. package/dist/chunks/block-Cu22ewuS.js.map +0 -1
  575. package/dist/chunks/choose-Cdx6Enl2.js +0 -57
  576. package/dist/chunks/choose-Cdx6Enl2.js.map +0 -1
  577. package/dist/chunks/codes-CV_Bhcyi.js.map +0 -1
  578. package/dist/chunks/convert-BcQ8_jMo.js.map +0 -1
  579. package/dist/chunks/credentials-BiQsnMTb.js.map +0 -1
  580. package/dist/chunks/descriptor-BJ-W0Jd-.js.map +0 -1
  581. package/dist/chunks/emit-CD8xnY8s.js.map +0 -1
  582. package/dist/chunks/export-CZ7VRm4I.js.map +0 -1
  583. package/dist/chunks/exporter-bxxjOrDZ.js.map +0 -1
  584. package/dist/chunks/format-BMS-1Nxb.js +0 -64
  585. package/dist/chunks/format-BMS-1Nxb.js.map +0 -1
  586. package/dist/chunks/generic-CP6YD34u.js.map +0 -1
  587. package/dist/chunks/importer-B87_fmVx.js.map +0 -1
  588. package/dist/chunks/importer-CB_zV5_L.js.map +0 -1
  589. package/dist/chunks/importer-CVT-JyDE.js.map +0 -1
  590. package/dist/chunks/importer-Cyy6UseH.js.map +0 -1
  591. package/dist/chunks/importer-DPZDN40-.js.map +0 -1
  592. package/dist/chunks/importer-e3huMZbm.js.map +0 -1
  593. package/dist/chunks/lexicon-u2SI5xcx.js.map +0 -1
  594. package/dist/chunks/sigv4-LkAzsLAu.js.map +0 -1
  595. package/dist/chunks/styles-CaABMoO1.js.map +0 -1
  596. package/dist/chunks/styles-P_gmFAOi.js +0 -770
  597. package/dist/chunks/styles-P_gmFAOi.js.map +0 -1
  598. package/dist/chunks/styles-yed-Cs1nmrjn.js.map +0 -1
  599. package/dist/chunks/writer-DvHTl36J.js +0 -449
  600. package/dist/chunks/writer-DvHTl36J.js.map +0 -1
package/src/index.ts CHANGED
@@ -108,7 +108,7 @@ export {
108
108
 
109
109
  // ============================================================ network sources (experimental)
110
110
  // The contract, the load functions and credentials; each built-in source's code is its own subpath
111
- // (@graphty/graph-io/sources/ndex, /cypher, /rest), loaded on first use.
111
+ // (@graphty/graph-io/sources/ndex, /cypher, /rest, /sparql), loaded on first use.
112
112
  export {
113
113
  SOURCE_ISSUE,
114
114
  type SourceBlockedCause,
@@ -119,7 +119,9 @@ export {
119
119
  type AwsSigV4Options,
120
120
  type CredentialBind,
121
121
  credentials,
122
+ credentialSlots,
122
123
  fromStorableCredential,
124
+ type SlotValue,
123
125
  type StorableCredential,
124
126
  storableCredential,
125
127
  } from "./sources/credentials.js";
@@ -136,8 +138,10 @@ export {
136
138
  SOURCE_ENTITY_ATTR,
137
139
  SOURCE_FORMAT_PREFIX,
138
140
  SOURCE_STUB_ATTR,
141
+ SPARQL_SOURCE_ID,
139
142
  } from "./sources/ids.js";
140
143
  export { type SourceParamsMap } from "./sources/params.js";
144
+ export { sha256Hex } from "./sources/sigv4.js";
141
145
  export {
142
146
  type Recording,
143
147
  recordingFrom,
@@ -164,6 +168,7 @@ export {
164
168
  type RetryOptions,
165
169
  type SourceBase,
166
170
  type SourceContext,
171
+ type SourceCredentialSlot,
167
172
  type SourceCursor,
168
173
  type SourceDescriptor,
169
174
  type SourceFeature,
@@ -185,6 +190,7 @@ export {
185
190
  type SourceRuntime,
186
191
  type SourceRuntimeReason,
187
192
  type SourceSample,
193
+ type SourceTotal,
188
194
  type SourceValidators,
189
195
  } from "./sources/types.js";
190
196
 
@@ -227,6 +233,7 @@ export {
227
233
  type CysImportOptions,
228
234
  } from "./formats/cys/index.js";
229
235
  export {
236
+ type BendPoint,
230
237
  DOT_ISSUE,
231
238
  DOT_LOSS,
232
239
  DOT_STYLE_BLOCK_ATTRIBUTE,
@@ -235,6 +242,9 @@ export {
235
242
  type DotExportOptions,
236
243
  dotImporter,
237
244
  type DotImportOptions,
245
+ graphvizPosBends,
246
+ RANK_COLUMN,
247
+ RANK_SET_COLUMN,
238
248
  } from "./formats/dot/index.js";
239
249
  export {
240
250
  GEXF_1_2_CAPABILITIES,
@@ -281,6 +291,7 @@ export {
281
291
  type JsonImportOptions,
282
292
  type JsonShapeMeta,
283
293
  jsonShapeOf,
294
+ sniffJsonDialect,
284
295
  } from "./formats/json/index.js";
285
296
  export {
286
297
  exportNeo4jFiles,
@@ -16,6 +16,15 @@ export function flipY(y: number): number {
16
16
  return y === 0 ? 0 : -y;
17
17
  }
18
18
 
19
+ /**
20
+ * How much longer a unit of y is than a unit of x, for a program that stretches its axes apart.
21
+ * @param extra - how the file spells its coordinates
22
+ * @returns `pxPerUnitY / pxPerUnit`, 1 when either is absent
23
+ */
24
+ function yStretch(extra: PositionColumnExtra): number {
25
+ return extra.pxPerUnit === undefined || extra.pxPerUnitY === undefined ? 1 : extra.pxPerUnitY / extra.pxPerUnit;
26
+ }
27
+
19
28
  /**
20
29
  * One coordinate from a file's spelling into the neutral convention, in place.
21
30
  * @param p - x, y, z as the file wrote them; becomes the node's center, y up
@@ -29,6 +38,7 @@ export function toNeutral(
29
38
  size: readonly [number, number] | null,
30
39
  realZ: boolean,
31
40
  ): void {
41
+ p[1] *= yStretch(extra);
32
42
  if (extra.anchor === "top-left" && size !== null) {
33
43
  p[0] += size[0] / 2;
34
44
  p[1] += extra.yAxis === "down" ? size[1] / 2 : -size[1] / 2;
@@ -60,8 +70,9 @@ export function toFilePositions(
60
70
  ): Float64Array {
61
71
  const out = new Float64Array(coords.length);
62
72
  const down = extra.yAxis === "down";
73
+ const stretch = yStretch(extra);
63
74
  for (let i = 0; i < coords.length; i += 3) {
64
- let y = coords[i + 1];
75
+ let y = coords[i + 1] / stretch;
65
76
  let z = coords[i + 2];
66
77
  if (down) {
67
78
  y = flipY(y);
@@ -89,6 +89,11 @@ export function extractPositions(
89
89
  const coords = readRows(n, spelling, notes);
90
90
  signal?.throwIfAborted();
91
91
  const containers = containersOf(snapshot);
92
+ if (spelling.extra.containersFollowChildren === true) {
93
+ for (const row of containers) {
94
+ coords.values.fill(Number.NaN, 3 * row, 3 * row + 3);
95
+ }
96
+ }
92
97
  const groups = applyGroups(spelling, coords);
93
98
  collectGroups(spelling, coords, containers, groups);
94
99
  const { placed, total } = countPlaced(coords, containers, notes);
@@ -104,6 +109,7 @@ export function extractPositions(
104
109
  },
105
110
  units: spelling.extra.units ?? "file",
106
111
  ...(spelling.extra.pxPerUnit === undefined ? {} : { pxPerUnit: spelling.extra.pxPerUnit }),
112
+ ...(spelling.extra.viewerFit === undefined ? {} : { viewerFit: spelling.extra.viewerFit }),
107
113
  medianNodeSize: spelling.medianNodeSize ?? medianSize(spelling.size, n, containers),
108
114
  dims: coords.realZ ? 3 : 2,
109
115
  coords: coords.values,
@@ -132,12 +138,35 @@ function spellingOf(importer: GraphImporter, snapshot: GraphSnapshot, signal: Ab
132
138
  }
133
139
  const column = hook?.column === undefined ? snapshot.nodes.byRole("position") : snapshot.nodes.get(hook.column);
134
140
  if (column === null || column.meta.components < 2) {
135
- return null;
141
+ return hook?.unplacedCircle === undefined ? null : circleSpelling(snapshot, hook);
136
142
  }
137
143
  const extra = { ...extraOf(column.meta.extra), ...extraOf(hook ?? {}) };
138
144
  return { read: vectorReader(column), size: sizeReader(snapshot, extra), extra, ...hookFields(hook) };
139
145
  }
140
146
 
147
+ /**
148
+ * The spelling of a file that places no node, whose program puts them round a circle (`unplacedCircle`).
149
+ * @param snapshot - the graph
150
+ * @param hook - the hook's answer, with its circle
151
+ * @returns the spelling
152
+ */
153
+ function circleSpelling(snapshot: GraphSnapshot, hook: ImporterPositions): Spelling {
154
+ const circle = hook.unplacedCircle;
155
+ const n = snapshot.nodeCount;
156
+ const read: RowReader = (row, out) => {
157
+ if (circle === undefined || n === 0) {
158
+ return false;
159
+ }
160
+ const a = ((circle.startDegrees + (circle.direction * 360 * row) / n) * Math.PI) / 180;
161
+ out[0] = circle.center[0] + circle.radius * Math.cos(a);
162
+ out[1] = circle.center[1] + circle.radius * Math.sin(a);
163
+ out[2] = 0;
164
+ return true;
165
+ };
166
+ const extra = { ...extraOf(hook), sourceDims: 2 } as const;
167
+ return { read, size: sizeReader(snapshot, extra), extra, ...hookFields(hook) };
168
+ }
169
+
141
170
  /**
142
171
  * The spelling of the simple hook form: plain x / y (/ z) columns.
143
172
  * @param snapshot - the graph
@@ -211,8 +240,15 @@ function extraOf(source: object): PositionColumnExtra {
211
240
  pick("width", (v) => typeof v === "string");
212
241
  pick("height", (v) => typeof v === "string");
213
242
  pick("pxPerUnit", (v) => typeof v === "number" && Number.isFinite(v) && v > 0);
243
+ pick("pxPerUnitY", (v) => typeof v === "number" && Number.isFinite(v) && v > 0);
214
244
  pick("zOrigin", (v) => typeof v === "number" && Number.isFinite(v));
215
245
  pick("zeroUnplaced", (v) => typeof v === "boolean");
246
+ pick("originUnplaced", (v) => typeof v === "boolean");
247
+ pick("containersFollowChildren", (v) => typeof v === "boolean");
248
+ const fit = extra.viewerFit as Readonly<Record<string, unknown>> | null | undefined;
249
+ if (typeof fit?.padding === "number" && Number.isFinite(fit.padding) && fit.padding >= 0) {
250
+ out.viewerFit = { padding: fit.padding };
251
+ }
216
252
  return out;
217
253
  }
218
254
 
@@ -247,11 +283,29 @@ function readRows(n: number, spelling: Spelling, notes: NoteCollector<PositionNo
247
283
  if (spelling.extra.zeroUnplaced === true) {
248
284
  dropZeroPile(values);
249
285
  }
286
+ if (spelling.extra.originUnplaced === true) {
287
+ placeUnplacedAtOrigin(values);
288
+ }
250
289
  const realZ = spelling.extra.sourceDims === 3 && !constantZ(values);
251
290
  convertRows(values, spelling.extra, spelling.size, realZ, notes);
252
291
  return { values, realZ };
253
292
  }
254
293
 
294
+ /**
295
+ * Put every unplaced row at the origin, when at least one row is placed.
296
+ * @param values - the coordinates, three per row; NaN rows are unplaced
297
+ */
298
+ function placeUnplacedAtOrigin(values: Float64Array): void {
299
+ if (!values.some((v) => !Number.isNaN(v))) {
300
+ return;
301
+ }
302
+ for (let i = 0; i < values.length; i += 3) {
303
+ if (Number.isNaN(values[i])) {
304
+ values.fill(0, i, i + 3);
305
+ }
306
+ }
307
+ }
308
+
255
309
  /**
256
310
  * Convert every placed row in place.
257
311
  * @param values - the raw coordinates
@@ -19,5 +19,6 @@ export type {
19
19
  PositionColumnExtra,
20
20
  PositionNote,
21
21
  PositionReadContext,
22
+ ViewerFit,
22
23
  YAxis,
23
24
  } from "./types.js";
@@ -41,6 +41,19 @@ export interface PositionColumnExtra {
41
41
  * the same unit as the file's px style lengths; the coordinates themselves stay as written.
42
42
  */
43
43
  readonly pxPerUnit?: number;
44
+ /**
45
+ * How many px one unit of y is, when the program that draws the file stretches its axes apart
46
+ * (Pajek fits the file's 0..1 square to its Draw window, x across the width and y down the
47
+ * height); absent when y is `pxPerUnit` like x. `extractPositions()` returns y in x's unit.
48
+ */
49
+ readonly pxPerUnitY?: number;
50
+ /**
51
+ * Set when the coordinates have no fixed length: the program that draws the file fits their
52
+ * bounding box into its canvas, `padding` px in from each side, and draws label sizes in the
53
+ * canvas's px rather than in the coordinates' unit (sigma.js). Absent when the coordinates
54
+ * keep their own length.
55
+ */
56
+ readonly viewerFit?: ViewerFit;
44
57
  /** How many coordinates the file wrote per node: 2, or 3 when it stored a z. */
45
58
  readonly sourceDims?: 2 | 3;
46
59
  /** Which way y grows; "down" is flipped to y up. */
@@ -58,6 +71,30 @@ export interface PositionColumnExtra {
58
71
  * rows are placed, a (0, 0) shared by two or more rows counts as unplaced.
59
72
  */
60
73
  readonly zeroUnplaced?: boolean;
74
+ /**
75
+ * The program that draws the file puts a node the file gives no position at the origin, (0, 0, 0) as written,
76
+ * when other nodes are placed (Gephi), rather than leaving it for a layout to place.
77
+ */
78
+ readonly originUnplaced?: boolean;
79
+ /**
80
+ * The program that draws the file draws a container node (one other nodes name as their
81
+ * parent) around its children, wherever the container's own stored coordinate says: Cytoscape.js
82
+ * computes a compound node's position and size from its children's. A container's stored
83
+ * coordinate is then not read, and it has no position here unless the file stores its box.
84
+ */
85
+ readonly containersFollowChildren?: boolean;
86
+ }
87
+
88
+ /**
89
+ * How the program that draws a file fits coordinates that have no fixed length into its canvas.
90
+ * @category Positions
91
+ */
92
+ export interface ViewerFit {
93
+ /**
94
+ * The px the fitted bounding box keeps from each end of the canvas's smaller side; along the
95
+ * longer side the room is that side's share of the same fraction (sigma.js's `stagePadding`).
96
+ */
97
+ readonly padding: number;
61
98
  }
62
99
 
63
100
  /**
@@ -104,6 +141,22 @@ export interface ImporterPositions extends PositionColumnExtra {
104
141
  readonly medianNodeSize?: number | null;
105
142
  /** The tool that wrote the file, when the importer knows it better than `meta.creator`. */
106
143
  readonly tool?: GraphTool | null;
144
+ /**
145
+ * Where the program that draws the file puts its nodes when the file places none: evenly round a circle in node
146
+ * order, the first at `startDegrees`, each next one further round in `direction` (1: the angle grows, -1: it
147
+ * shrinks), in the file's own coordinates as the rest of this answer spells them (Pajek: center 0.5, 0.5, radius
148
+ * 0.4, the first vertex on the left). Absent, such a file has no positions.
149
+ */
150
+ readonly unplacedCircle?: {
151
+ /** The circle's center, x and y. */
152
+ readonly center: readonly [number, number];
153
+ /** Its radius. */
154
+ readonly radius: number;
155
+ /** The angle of the first node, in degrees. */
156
+ readonly startDegrees: number;
157
+ /** Which way round the next nodes go: 1 the angle grows, -1 it shrinks. */
158
+ readonly direction: 1 | -1;
159
+ };
107
160
  }
108
161
 
109
162
  /**
@@ -186,6 +239,13 @@ export interface FilePositions {
186
239
  * it with the file's px style lengths.
187
240
  */
188
241
  readonly pxPerUnit?: number;
242
+ /**
243
+ * Set when the coordinates have no fixed length: the program that draws the file fits their
244
+ * bounding box into its canvas, `padding` px in from each side, and draws label sizes in the
245
+ * canvas's px (sigma.js). A label of `s` px is then `s / k` units, where k is the px per unit of
246
+ * that fit on the canvas it is drawn on. Absent otherwise.
247
+ */
248
+ readonly viewerFit?: ViewerFit;
189
249
  /** The median node diameter, in `units`, when the file stores node sizes; else null. */
190
250
  readonly medianNodeSize: number | null;
191
251
  /** 3 when the nodes differ in z, else 2 (z is then 0). */
@@ -11,13 +11,15 @@ import {
11
11
  NEPTUNE_SOURCE_ID,
12
12
  OPENALEX_SOURCE_ID,
13
13
  REST_SOURCE_ID,
14
+ SPARQL_SOURCE_ID,
14
15
  } from "./ids.js";
15
16
  import { NDEX_DESCRIPTOR } from "./ndex/descriptor.js";
16
17
  import { OPENALEX_DESCRIPTOR, REST_DESCRIPTOR } from "./rest/descriptor.js";
18
+ import { SPARQL_DESCRIPTOR } from "./sparql/descriptor.js";
17
19
  import { type LazySource } from "./types.js";
18
20
 
19
21
  /**
20
- * The six built-in sources, each loading its subpath on first use.
22
+ * The seven built-in sources, each loading its subpath on first use.
21
23
  * @returns the lazy sources, in catalog order
22
24
  */
23
25
  export function builtinSources(): readonly LazySource[] {
@@ -52,5 +54,10 @@ export function builtinSources(): readonly LazySource[] {
52
54
  descriptor: OPENALEX_DESCRIPTOR,
53
55
  load: async () => (await import("./rest/index.js")).openalexSource,
54
56
  },
57
+ {
58
+ id: SPARQL_SOURCE_ID,
59
+ descriptor: SPARQL_DESCRIPTOR,
60
+ load: async () => (await import("./sparql/index.js")).sparqlSource,
61
+ },
55
62
  ];
56
63
  }
@@ -835,6 +835,7 @@ class SourceFetcher {
835
835
  ...(finish?.server === undefined ? {} : { server: finish.server }),
836
836
  ...(finish?.budget === undefined ? {} : { budget: finish.budget }),
837
837
  ...(finish?.validators === undefined ? {} : { validators: finish.validators }),
838
+ ...(finish?.total === undefined ? {} : { total: finish.total }),
838
839
  });
839
840
  }
840
841
  }
@@ -7,7 +7,13 @@
7
7
  */
8
8
 
9
9
  import { failAlone } from "./fail.js";
10
- import { type AwsCredentials, type Credential, type CredentialKind } from "./types.js";
10
+ import {
11
+ type AwsCredentials,
12
+ type Credential,
13
+ type CredentialKind,
14
+ type SourceCredentialSlot,
15
+ type SourceDescriptor,
16
+ } from "./types.js";
11
17
 
12
18
  /**
13
19
  * Where a credential may go: the load's endpoint origin by default. Experimental.
@@ -145,6 +151,63 @@ function base64(text: string): string {
145
151
  return btoa(binary);
146
152
  }
147
153
 
154
+ /**
155
+ * The plain value a slot's credential is made from: a key or a token, or a user name and password.
156
+ * @category Network sources
157
+ */
158
+ export type SlotValue =
159
+ | string
160
+ | {
161
+ /** A basic slot's user name. */
162
+ readonly username: string;
163
+ /** A basic slot's password. */
164
+ readonly password: string;
165
+ };
166
+
167
+ /**
168
+ * The credential a slot describes, from its plain value.
169
+ * @param slot - the slot
170
+ * @param value - the key or token, or a basic slot's user name and password
171
+ * @param bind - the origins it may be sent to
172
+ * @returns the credential
173
+ */
174
+ function forSlot(slot: SourceCredentialSlot, value: SlotValue, bind?: CredentialBind): Credential {
175
+ if (typeof value !== "string") {
176
+ if (slot.kind === "basic") {
177
+ return new SourceCredential({ kind: "basic", username: value.username, password: value.password }, bind);
178
+ }
179
+ } else if (slot.kind === "bearer") {
180
+ return new SourceCredential({ kind: "bearer", token: value }, bind);
181
+ } else if (slot.kind === "api-key") {
182
+ const send = slot.send ?? { query: slot.name };
183
+ const header = "header" in send ? send.header : null;
184
+ const query = "query" in send ? send.query : null;
185
+ return new SourceCredential({ kind: "api-key", header, query, value }, bind);
186
+ }
187
+ return failAlone("E_SOURCE_PARAM", `a ${slot.kind} slot cannot take this value`, {
188
+ name: "credential",
189
+ reason: "type",
190
+ });
191
+ }
192
+
193
+ /**
194
+ * The credential slots a source takes: the ones its descriptor declares, else one slot `default`
195
+ * of its first credential kind when it takes a credential (`auth`), else none. Experimental.
196
+ * @param descriptor - the source's descriptor
197
+ * @returns the slots
198
+ * @category Network sources
199
+ */
200
+ export function credentialSlots(descriptor: SourceDescriptor | undefined): readonly SourceCredentialSlot[] {
201
+ if (descriptor?.credentials !== undefined) {
202
+ return descriptor.credentials;
203
+ }
204
+ const kind = descriptor?.auth?.[0];
205
+ if (kind === undefined || descriptor?.authRequired === "none") {
206
+ return [];
207
+ }
208
+ return [{ name: "default", kind, required: descriptor?.authRequired === "required" }];
209
+ }
210
+
148
211
  /**
149
212
  * The factories that make credentials. Pass the result as the `credential` option of a load; it is
150
213
  * sent only to the load's endpoint origin, or to `bind.origins` when you give them. Experimental.
@@ -213,6 +276,21 @@ export const credentials = Object.freeze({
213
276
  custom(apply: (request: Request) => Promise<Request> | Request, kind: string, bind?: CredentialBind): Credential {
214
277
  return new SourceCredential({ kind: "custom", name: kind, apply }, bind);
215
278
  },
279
+ /**
280
+ * The credential a source's slot describes (`credentialSlots(descriptor)`), from its plain
281
+ * value: an API key sent as the slot says, a bearer token, or a basic slot's user name and
282
+ * password.
283
+ * @example
284
+ * ```ts
285
+ * const [slot] = credentialSlots(openalex.descriptor); // api_key, sent as ?api_key=
286
+ * const credential = credentials.forSlot(slot, key);
287
+ * ```
288
+ * @param slot - the slot
289
+ * @param value - the key or token, or `{ username, password }` for a basic slot
290
+ * @param bind - the origins it may be sent to
291
+ * @returns the credential
292
+ */
293
+ forSlot,
216
294
  });
217
295
 
218
296
  /**
@@ -248,6 +326,17 @@ export function credentialHeader(credential: Credential): string | null {
248
326
  : null;
249
327
  }
250
328
 
329
+ /**
330
+ * The query parameter a credential is sent in, so a cursor can leave it out; null for one sent in
331
+ * a header or not at all.
332
+ * @param credential - the credential
333
+ * @returns the parameter's name
334
+ */
335
+ export function credentialQuery(credential: Credential): string | null {
336
+ const secret = secretOf(credential);
337
+ return secret?.kind === "api-key" && secret.header === null ? (secret.query ?? "api_key") : null;
338
+ }
339
+
251
340
  /**
252
341
  * Add a credential to a request. Internal to graph-io: only `ctx.fetch` calls it.
253
342
  * @param credential - the credential
@@ -3,7 +3,7 @@
3
3
  * the sources' code.
4
4
  */
5
5
 
6
- import { type SourceDescriptor, type SourceParamDescriptor } from "../types.js";
6
+ import { type SourceDescriptor, type SourceFeature, type SourceParamDescriptor } from "../types.js";
7
7
 
8
8
  /** The parameters every Cypher source shares. */
9
9
  const CYPHER_PARAMS: readonly SourceParamDescriptor[] = [
@@ -38,6 +38,9 @@ const CYPHER_PARAMS: readonly SourceParamDescriptor[] = [
38
38
  { name: "pageSize", plainName: "Page size", type: "integer", default: 1000, min: 1, max: 100000, advanced: true },
39
39
  ];
40
40
 
41
+ /** What every Cypher source can do: expand, probe, validate, and page a capped load. */
42
+ const CYPHER_FEATURES: readonly SourceFeature[] = ["expand", "probe", "validate", "page"];
43
+
41
44
  /** The transport parameter of the generic source. */
42
45
  const TRANSPORT_PARAM: SourceParamDescriptor = {
43
46
  name: "transport",
@@ -61,6 +64,7 @@ export const CYPHER_DESCRIPTOR: SourceDescriptor = Object.freeze({
61
64
  version: 1,
62
65
  auth: ["basic", "bearer", "aws-sigv4"],
63
66
  authRequired: "optional",
67
+ features: CYPHER_FEATURES,
64
68
  params: [...CYPHER_PARAMS, TRANSPORT_PARAM],
65
69
  });
66
70
 
@@ -74,6 +78,7 @@ export const NEO4J_DESCRIPTOR: SourceDescriptor = Object.freeze({
74
78
  version: 1,
75
79
  auth: ["basic", "bearer"],
76
80
  authRequired: "optional",
81
+ features: CYPHER_FEATURES,
77
82
  params: [
78
83
  ...CYPHER_PARAMS,
79
84
  {
@@ -112,6 +117,7 @@ export const NEPTUNE_DESCRIPTOR: SourceDescriptor = Object.freeze({
112
117
  version: 1,
113
118
  auth: ["aws-sigv4"],
114
119
  authRequired: "optional",
120
+ features: CYPHER_FEATURES,
115
121
  params: [
116
122
  ...CYPHER_PARAMS,
117
123
  {