@graphty/graph-io 0.3.47 → 0.3.49

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 (770) hide show
  1. package/dist/chunks/{approximations-wWjCRzKj.js → approximations-Bzn3L-je.js} +2 -2
  2. package/dist/chunks/{approximations-wWjCRzKj.js.map → approximations-Bzn3L-je.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-DiGq58c3.js → block-iptrlMBb.js} +947 -134
  6. package/dist/chunks/block-iptrlMBb.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-BE2xir2k.js +157 -0
  10. package/dist/chunks/codes-BE2xir2k.js.map +1 -0
  11. package/dist/chunks/{constants-BKwqelYD.js → constants-CKkYLPtt.js} +2 -2
  12. package/dist/chunks/{constants-BKwqelYD.js.map → constants-CKkYLPtt.js.map} +1 -1
  13. package/dist/chunks/context-C3p0RQxR.js +664 -0
  14. package/dist/chunks/context-C3p0RQxR.js.map +1 -0
  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-DXHx7nwR.js +349 -0
  18. package/dist/chunks/credentials-DXHx7nwR.js.map +1 -0
  19. package/dist/chunks/cx-export-Bt6NoqTQ.js +259 -0
  20. package/dist/chunks/cx-export-Bt6NoqTQ.js.map +1 -0
  21. package/dist/chunks/descriptor-B28U25x4.js +60 -0
  22. package/dist/chunks/descriptor-B28U25x4.js.map +1 -0
  23. package/dist/chunks/descriptor-C-YDhtsn.js +48 -0
  24. package/dist/chunks/descriptor-C-YDhtsn.js.map +1 -0
  25. package/dist/chunks/descriptor-DLA5kINx.js +142 -0
  26. package/dist/chunks/descriptor-DLA5kINx.js.map +1 -0
  27. package/dist/chunks/{emit-CwU8cUmG.js → emit-BwHQkZle.js} +1690 -103
  28. package/dist/chunks/emit-BwHQkZle.js.map +1 -0
  29. package/dist/chunks/{escape-CgzxiYPg.js → escape-CuCIzNMB.js} +12 -12
  30. package/dist/chunks/{escape-CgzxiYPg.js.map → escape-CuCIzNMB.js.map} +1 -1
  31. package/dist/chunks/{export-BvqAXCKh.js → export-Cha4dRFz.js} +48 -1780
  32. package/dist/chunks/export-Cha4dRFz.js.map +1 -0
  33. package/dist/chunks/{exporter--Mk9gXCJ.js → exporter-BP6otMO6.js} +6 -4
  34. package/dist/chunks/{exporter--Mk9gXCJ.js.map → exporter-BP6otMO6.js.map} +1 -1
  35. package/dist/chunks/{exporter-CrDWIyiq.js → exporter-D2CETOMK.js} +1222 -154
  36. package/dist/chunks/exporter-D2CETOMK.js.map +1 -0
  37. package/dist/chunks/{exporter-DndFlGSa.js → exporter-D9yMtocA.js} +7 -6
  38. package/dist/chunks/{exporter-DndFlGSa.js.map → exporter-D9yMtocA.js.map} +1 -1
  39. package/dist/chunks/exporter-_jrBTnos.js +1009 -0
  40. package/dist/chunks/exporter-_jrBTnos.js.map +1 -0
  41. package/dist/chunks/{exporter-CJgfhF-l.js → exporter-nDfxIK5D.js} +9 -7
  42. package/dist/chunks/{exporter-CJgfhF-l.js.map → exporter-nDfxIK5D.js.map} +1 -1
  43. package/dist/chunks/format-BXiAb-1h.js +408 -0
  44. package/dist/chunks/format-BXiAb-1h.js.map +1 -0
  45. package/dist/chunks/{generic-Dq1ntt9q.js → generic-ymWCETAJ.js} +387 -31
  46. package/dist/chunks/generic-ymWCETAJ.js.map +1 -0
  47. package/dist/chunks/{importer-CMmeMWlC.js → importer-B92x1xY5.js} +15 -263
  48. package/dist/chunks/importer-B92x1xY5.js.map +1 -0
  49. package/dist/chunks/{importer-DiZRmOQG.js → importer-CT9mJ1nn.js} +328 -90
  50. package/dist/chunks/importer-CT9mJ1nn.js.map +1 -0
  51. package/dist/chunks/{importer-COTK9Tsl.js → importer-DaLTjbds.js} +116 -1099
  52. package/dist/chunks/importer-DaLTjbds.js.map +1 -0
  53. package/dist/chunks/{importer-iFYPEKaJ.js → importer-GREKMdIf.js} +28 -16
  54. package/dist/chunks/importer-GREKMdIf.js.map +1 -0
  55. package/dist/chunks/{importer-BSvfrX_h.js → importer-PqaaKKnY.js} +23 -1016
  56. package/dist/chunks/importer-PqaaKKnY.js.map +1 -0
  57. package/dist/chunks/{importer-yh_aBCU6.js → importer-Vn5QvmmJ.js} +66 -12
  58. package/dist/chunks/importer-Vn5QvmmJ.js.map +1 -0
  59. package/dist/chunks/{importer-e6LGpqHB.js → importer-vRq4h3j5.js} +1470 -354
  60. package/dist/chunks/importer-vRq4h3j5.js.map +1 -0
  61. package/dist/chunks/input-CAxt_aV-.js +1397 -0
  62. package/dist/chunks/input-CAxt_aV-.js.map +1 -0
  63. package/dist/chunks/{json-elements-DJZRZ6jd.js → json-elements-Cq76WjnZ.js} +4 -4
  64. package/dist/chunks/{json-elements-DJZRZ6jd.js.map → json-elements-Cq76WjnZ.js.map} +1 -1
  65. package/dist/chunks/{lexicon-CT69Kd87.js → lexicon-Clf4QIyl.js} +299 -77
  66. package/dist/chunks/lexicon-Clf4QIyl.js.map +1 -0
  67. package/dist/chunks/{ontology-export-G4MqRdux.js → ontology-export-OMo91mb0.js} +4 -3
  68. package/dist/chunks/{ontology-export-G4MqRdux.js.map → ontology-export-OMo91mb0.js.map} +1 -1
  69. package/dist/chunks/{records-CiaWZrFH.js → records-NJiYvekn.js} +2 -2
  70. package/dist/chunks/{records-CiaWZrFH.js.map → records-NJiYvekn.js.map} +1 -1
  71. package/dist/chunks/{format-BpQBx8MZ.js → report-CwMfYa9J.js} +70 -127
  72. package/dist/chunks/report-CwMfYa9J.js.map +1 -0
  73. package/dist/chunks/round-trip-Zm3_ivgq.js +79 -0
  74. package/dist/chunks/round-trip-Zm3_ivgq.js.map +1 -0
  75. package/dist/chunks/sigv4-EokFic1V.js +247 -0
  76. package/dist/chunks/sigv4-EokFic1V.js.map +1 -0
  77. package/dist/chunks/{styles-BQnsga7p.js → styles-CCs214_3.js} +1300 -168
  78. package/dist/chunks/styles-CCs214_3.js.map +1 -0
  79. package/dist/chunks/styles-Cm62yyQX.js +2812 -0
  80. package/dist/chunks/styles-Cm62yyQX.js.map +1 -0
  81. package/dist/chunks/styles-DPQQIig4.js +1928 -0
  82. package/dist/chunks/styles-DPQQIig4.js.map +1 -0
  83. package/dist/chunks/styles-yed-UMFdNqze.js +1213 -0
  84. package/dist/chunks/styles-yed-UMFdNqze.js.map +1 -0
  85. package/dist/chunks/{text-CzJNFOS9.js → text-ystE2bYi.js} +2 -2
  86. package/dist/chunks/{text-CzJNFOS9.js.map → text-ystE2bYi.js.map} +1 -1
  87. package/dist/csv.js +7 -5
  88. package/dist/csv.js.map +1 -1
  89. package/dist/cx.js +5 -4
  90. package/dist/cx.js.map +1 -1
  91. package/dist/cx2.js +2 -2
  92. package/dist/cys.js +1 -1
  93. package/dist/dot.js +5 -4
  94. package/dist/dot.js.map +1 -1
  95. package/dist/gexf.js +42 -10
  96. package/dist/gexf.js.map +1 -1
  97. package/dist/gml.js +850 -193
  98. package/dist/gml.js.map +1 -1
  99. package/dist/graph-io.js +1189 -220
  100. package/dist/graph-io.js.map +1 -1
  101. package/dist/graphml.js +3 -3
  102. package/dist/json.js +3 -2
  103. package/dist/neo4j.js +6 -4
  104. package/dist/neo4j.js.map +1 -1
  105. package/dist/obo.js +1 -1
  106. package/dist/pajek.js +1 -1
  107. package/dist/positions.js +45 -3
  108. package/dist/positions.js.map +1 -1
  109. package/dist/sources-cypher.d.ts +1 -0
  110. package/dist/sources-cypher.js +1351 -0
  111. package/dist/sources-cypher.js.map +1 -0
  112. package/dist/sources-ndex.d.ts +1 -0
  113. package/dist/sources-ndex.js +278 -0
  114. package/dist/sources-ndex.js.map +1 -0
  115. package/dist/sources-rest.d.ts +1 -0
  116. package/dist/sources-rest.js +1377 -0
  117. package/dist/sources-rest.js.map +1 -0
  118. package/dist/sources-sparql.d.ts +1 -0
  119. package/dist/sources-sparql.js +405 -0
  120. package/dist/sources-sparql.js.map +1 -0
  121. package/dist/src/common/report.d.ts +6 -3
  122. package/dist/src/common/report.d.ts.map +1 -1
  123. package/dist/src/common/report.js +15 -9
  124. package/dist/src/common/report.js.map +1 -1
  125. package/dist/src/formats/cx/importer.d.ts.map +1 -1
  126. package/dist/src/formats/cx/importer.js +5 -1
  127. package/dist/src/formats/cx/importer.js.map +1 -1
  128. package/dist/src/formats/cx/styles.d.ts +24 -1
  129. package/dist/src/formats/cx/styles.d.ts.map +1 -1
  130. package/dist/src/formats/cx/styles.js +118 -11
  131. package/dist/src/formats/cx/styles.js.map +1 -1
  132. package/dist/src/formats/cx2/importer.d.ts.map +1 -1
  133. package/dist/src/formats/cx2/importer.js +1 -0
  134. package/dist/src/formats/cx2/importer.js.map +1 -1
  135. package/dist/src/formats/cx2/styles.d.ts.map +1 -1
  136. package/dist/src/formats/cx2/styles.js +3 -1
  137. package/dist/src/formats/cx2/styles.js.map +1 -1
  138. package/dist/src/formats/cys/importer.d.ts.map +1 -1
  139. package/dist/src/formats/cys/importer.js +1 -0
  140. package/dist/src/formats/cys/importer.js.map +1 -1
  141. package/dist/src/formats/cys/styles.d.ts +2 -0
  142. package/dist/src/formats/cys/styles.d.ts.map +1 -1
  143. package/dist/src/formats/cys/styles.js +15 -7
  144. package/dist/src/formats/cys/styles.js.map +1 -1
  145. package/dist/src/formats/dot/drawing.d.ts +98 -0
  146. package/dist/src/formats/dot/drawing.d.ts.map +1 -0
  147. package/dist/src/formats/dot/drawing.js +734 -0
  148. package/dist/src/formats/dot/drawing.js.map +1 -0
  149. package/dist/src/formats/dot/importer.d.ts.map +1 -1
  150. package/dist/src/formats/dot/importer.js +108 -31
  151. package/dist/src/formats/dot/importer.js.map +1 -1
  152. package/dist/src/formats/dot/label-places.d.ts +34 -0
  153. package/dist/src/formats/dot/label-places.d.ts.map +1 -0
  154. package/dist/src/formats/dot/label-places.js +179 -0
  155. package/dist/src/formats/dot/label-places.js.map +1 -0
  156. package/dist/src/formats/dot/record.d.ts +50 -0
  157. package/dist/src/formats/dot/record.d.ts.map +1 -0
  158. package/dist/src/formats/dot/record.js +275 -0
  159. package/dist/src/formats/dot/record.js.map +1 -0
  160. package/dist/src/formats/dot/styles.d.ts +62 -2
  161. package/dist/src/formats/dot/styles.d.ts.map +1 -1
  162. package/dist/src/formats/dot/styles.js +1457 -120
  163. package/dist/src/formats/dot/styles.js.map +1 -1
  164. package/dist/src/formats/gexf/dialog-metrics.d.ts +15 -0
  165. package/dist/src/formats/gexf/dialog-metrics.d.ts.map +1 -0
  166. package/dist/src/formats/gexf/dialog-metrics.js +59 -0
  167. package/dist/src/formats/gexf/dialog-metrics.js.map +1 -0
  168. package/dist/src/formats/gexf/importer.d.ts +7 -0
  169. package/dist/src/formats/gexf/importer.d.ts.map +1 -1
  170. package/dist/src/formats/gexf/importer.js +41 -5
  171. package/dist/src/formats/gexf/importer.js.map +1 -1
  172. package/dist/src/formats/gexf/preview.d.ts +77 -0
  173. package/dist/src/formats/gexf/preview.d.ts.map +1 -0
  174. package/dist/src/formats/gexf/preview.js +191 -0
  175. package/dist/src/formats/gexf/preview.js.map +1 -0
  176. package/dist/src/formats/gexf/schema.d.ts.map +1 -1
  177. package/dist/src/formats/gexf/schema.js +2 -1
  178. package/dist/src/formats/gexf/schema.js.map +1 -1
  179. package/dist/src/formats/gexf/styles.d.ts +60 -16
  180. package/dist/src/formats/gexf/styles.d.ts.map +1 -1
  181. package/dist/src/formats/gexf/styles.js +883 -131
  182. package/dist/src/formats/gexf/styles.js.map +1 -1
  183. package/dist/src/formats/gml/importer.d.ts +5 -2
  184. package/dist/src/formats/gml/importer.d.ts.map +1 -1
  185. package/dist/src/formats/gml/importer.js +258 -71
  186. package/dist/src/formats/gml/importer.js.map +1 -1
  187. package/dist/src/formats/gml/index.d.ts +1 -1
  188. package/dist/src/formats/gml/index.d.ts.map +1 -1
  189. package/dist/src/formats/gml/index.js +1 -1
  190. package/dist/src/formats/gml/index.js.map +1 -1
  191. package/dist/src/formats/gml/positions.d.ts +7 -0
  192. package/dist/src/formats/gml/positions.d.ts.map +1 -1
  193. package/dist/src/formats/gml/positions.js +29 -7
  194. package/dist/src/formats/gml/positions.js.map +1 -1
  195. package/dist/src/formats/gml/styles.d.ts.map +1 -1
  196. package/dist/src/formats/gml/styles.js +756 -103
  197. package/dist/src/formats/gml/styles.js.map +1 -1
  198. package/dist/src/formats/graphml/styles-plain.d.ts.map +1 -1
  199. package/dist/src/formats/graphml/styles-plain.js +8 -12
  200. package/dist/src/formats/graphml/styles-plain.js.map +1 -1
  201. package/dist/src/formats/graphml/styles-yed.d.ts +21 -15
  202. package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -1
  203. package/dist/src/formats/graphml/styles-yed.js +749 -148
  204. package/dist/src/formats/graphml/styles-yed.js.map +1 -1
  205. package/dist/src/formats/graphml/styles-yfiles3.d.ts +1 -1
  206. package/dist/src/formats/graphml/styles-yfiles3.d.ts.map +1 -1
  207. package/dist/src/formats/graphml/styles-yfiles3.js +429 -64
  208. package/dist/src/formats/graphml/styles-yfiles3.js.map +1 -1
  209. package/dist/src/formats/graphml/yfiles.d.ts +3 -3
  210. package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
  211. package/dist/src/formats/graphml/yfiles.js +16 -6
  212. package/dist/src/formats/graphml/yfiles.js.map +1 -1
  213. package/dist/src/formats/json/dialect.d.ts +3 -2
  214. package/dist/src/formats/json/dialect.d.ts.map +1 -1
  215. package/dist/src/formats/json/dialect.js +39 -5
  216. package/dist/src/formats/json/dialect.js.map +1 -1
  217. package/dist/src/formats/json/importer.d.ts +13 -2
  218. package/dist/src/formats/json/importer.d.ts.map +1 -1
  219. package/dist/src/formats/json/importer.js +42 -6
  220. package/dist/src/formats/json/importer.js.map +1 -1
  221. package/dist/src/formats/json/index.d.ts +1 -1
  222. package/dist/src/formats/json/index.d.ts.map +1 -1
  223. package/dist/src/formats/json/index.js +1 -1
  224. package/dist/src/formats/json/index.js.map +1 -1
  225. package/dist/src/formats/json/positions.d.ts +5 -2
  226. package/dist/src/formats/json/positions.d.ts.map +1 -1
  227. package/dist/src/formats/json/positions.js +20 -4
  228. package/dist/src/formats/json/positions.js.map +1 -1
  229. package/dist/src/formats/json/styles.d.ts +12 -1
  230. package/dist/src/formats/json/styles.d.ts.map +1 -1
  231. package/dist/src/formats/json/styles.js +1755 -136
  232. package/dist/src/formats/json/styles.js.map +1 -1
  233. package/dist/src/formats/pajek/draw.d.ts +96 -0
  234. package/dist/src/formats/pajek/draw.d.ts.map +1 -0
  235. package/dist/src/formats/pajek/draw.js +372 -0
  236. package/dist/src/formats/pajek/draw.js.map +1 -0
  237. package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
  238. package/dist/src/formats/pajek/exporter.js +70 -51
  239. package/dist/src/formats/pajek/exporter.js.map +1 -1
  240. package/dist/src/formats/pajek/importer.d.ts +9 -0
  241. package/dist/src/formats/pajek/importer.d.ts.map +1 -1
  242. package/dist/src/formats/pajek/importer.js +233 -102
  243. package/dist/src/formats/pajek/importer.js.map +1 -1
  244. package/dist/src/formats/pajek/index.d.ts +1 -0
  245. package/dist/src/formats/pajek/index.d.ts.map +1 -1
  246. package/dist/src/formats/pajek/index.js.map +1 -1
  247. package/dist/src/formats/pajek/styles.d.ts +15 -7
  248. package/dist/src/formats/pajek/styles.d.ts.map +1 -1
  249. package/dist/src/formats/pajek/styles.js +1279 -114
  250. package/dist/src/formats/pajek/styles.js.map +1 -1
  251. package/dist/src/formats/pajek/syntax.d.ts +10 -1
  252. package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
  253. package/dist/src/formats/pajek/syntax.js +26 -2
  254. package/dist/src/formats/pajek/syntax.js.map +1 -1
  255. package/dist/src/formats/xgmml/emit.d.ts +1 -0
  256. package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
  257. package/dist/src/formats/xgmml/emit.js +65 -5
  258. package/dist/src/formats/xgmml/emit.js.map +1 -1
  259. package/dist/src/formats/xgmml/styles.d.ts +23 -3
  260. package/dist/src/formats/xgmml/styles.d.ts.map +1 -1
  261. package/dist/src/formats/xgmml/styles.js +278 -60
  262. package/dist/src/formats/xgmml/styles.js.map +1 -1
  263. package/dist/src/index.d.ts +10 -2
  264. package/dist/src/index.d.ts.map +1 -1
  265. package/dist/src/index.js +11 -2
  266. package/dist/src/index.js.map +1 -1
  267. package/dist/src/positions/convert.d.ts.map +1 -1
  268. package/dist/src/positions/convert.js +11 -1
  269. package/dist/src/positions/convert.js.map +1 -1
  270. package/dist/src/positions/extract.d.ts.map +1 -1
  271. package/dist/src/positions/extract.js +53 -1
  272. package/dist/src/positions/extract.js.map +1 -1
  273. package/dist/src/positions/index.d.ts +1 -1
  274. package/dist/src/positions/index.d.ts.map +1 -1
  275. package/dist/src/positions/types.d.ts +59 -0
  276. package/dist/src/positions/types.d.ts.map +1 -1
  277. package/dist/src/registry.d.ts +173 -1
  278. package/dist/src/registry.d.ts.map +1 -1
  279. package/dist/src/registry.js +196 -1
  280. package/dist/src/registry.js.map +1 -1
  281. package/dist/src/sources/builtins.d.ts +11 -0
  282. package/dist/src/sources/builtins.d.ts.map +1 -0
  283. package/dist/src/sources/builtins.js +53 -0
  284. package/dist/src/sources/builtins.js.map +1 -0
  285. package/dist/src/sources/codes.d.ts +230 -0
  286. package/dist/src/sources/codes.d.ts.map +1 -0
  287. package/dist/src/sources/codes.js +58 -0
  288. package/dist/src/sources/codes.js.map +1 -0
  289. package/dist/src/sources/context.d.ts +112 -0
  290. package/dist/src/sources/context.d.ts.map +1 -0
  291. package/dist/src/sources/context.js +740 -0
  292. package/dist/src/sources/context.js.map +1 -0
  293. package/dist/src/sources/credentials.d.ts +179 -0
  294. package/dist/src/sources/credentials.d.ts.map +1 -0
  295. package/dist/src/sources/credentials.js +301 -0
  296. package/dist/src/sources/credentials.js.map +1 -0
  297. package/dist/src/sources/cypher/descriptor.d.ts +21 -0
  298. package/dist/src/sources/cypher/descriptor.d.ts.map +1 -0
  299. package/dist/src/sources/cypher/descriptor.js +124 -0
  300. package/dist/src/sources/cypher/descriptor.js.map +1 -0
  301. package/dist/src/sources/cypher/flatten.d.ts +72 -0
  302. package/dist/src/sources/cypher/flatten.d.ts.map +1 -0
  303. package/dist/src/sources/cypher/flatten.js +279 -0
  304. package/dist/src/sources/cypher/flatten.js.map +1 -0
  305. package/dist/src/sources/cypher/index.d.ts +33 -0
  306. package/dist/src/sources/cypher/index.d.ts.map +1 -0
  307. package/dist/src/sources/cypher/index.js +511 -0
  308. package/dist/src/sources/cypher/index.js.map +1 -0
  309. package/dist/src/sources/cypher/params.d.ts +40 -0
  310. package/dist/src/sources/cypher/params.d.ts.map +1 -0
  311. package/dist/src/sources/cypher/params.js +6 -0
  312. package/dist/src/sources/cypher/params.js.map +1 -0
  313. package/dist/src/sources/cypher/profiles.d.ts +44 -0
  314. package/dist/src/sources/cypher/profiles.d.ts.map +1 -0
  315. package/dist/src/sources/cypher/profiles.js +61 -0
  316. package/dist/src/sources/cypher/profiles.js.map +1 -0
  317. package/dist/src/sources/cypher/query-builder.d.ts +123 -0
  318. package/dist/src/sources/cypher/query-builder.d.ts.map +1 -0
  319. package/dist/src/sources/cypher/query-builder.js +267 -0
  320. package/dist/src/sources/cypher/query-builder.js.map +1 -0
  321. package/dist/src/sources/cypher/transports/bolt.d.ts +21 -0
  322. package/dist/src/sources/cypher/transports/bolt.d.ts.map +1 -0
  323. package/dist/src/sources/cypher/transports/bolt.js +185 -0
  324. package/dist/src/sources/cypher/transports/bolt.js.map +1 -0
  325. package/dist/src/sources/cypher/transports/neptune-analytics.d.ts +15 -0
  326. package/dist/src/sources/cypher/transports/neptune-analytics.d.ts.map +1 -0
  327. package/dist/src/sources/cypher/transports/neptune-analytics.js +38 -0
  328. package/dist/src/sources/cypher/transports/neptune-analytics.js.map +1 -0
  329. package/dist/src/sources/cypher/transports/neptune-https.d.ts +31 -0
  330. package/dist/src/sources/cypher/transports/neptune-https.d.ts.map +1 -0
  331. package/dist/src/sources/cypher/transports/neptune-https.js +104 -0
  332. package/dist/src/sources/cypher/transports/neptune-https.js.map +1 -0
  333. package/dist/src/sources/cypher/transports/query-api.d.ts +14 -0
  334. package/dist/src/sources/cypher/transports/query-api.d.ts.map +1 -0
  335. package/dist/src/sources/cypher/transports/query-api.js +80 -0
  336. package/dist/src/sources/cypher/transports/query-api.js.map +1 -0
  337. package/dist/src/sources/cypher/transports/transport.d.ts +78 -0
  338. package/dist/src/sources/cypher/transports/transport.d.ts.map +1 -0
  339. package/dist/src/sources/cypher/transports/transport.js +77 -0
  340. package/dist/src/sources/cypher/transports/transport.js.map +1 -0
  341. package/dist/src/sources/cypher/types-map.d.ts +91 -0
  342. package/dist/src/sources/cypher/types-map.d.ts.map +1 -0
  343. package/dist/src/sources/cypher/types-map.js +306 -0
  344. package/dist/src/sources/cypher/types-map.js.map +1 -0
  345. package/dist/src/sources/define.d.ts +47 -0
  346. package/dist/src/sources/define.d.ts.map +1 -0
  347. package/dist/src/sources/define.js +173 -0
  348. package/dist/src/sources/define.js.map +1 -0
  349. package/dist/src/sources/fail.d.ts +33 -0
  350. package/dist/src/sources/fail.d.ts.map +1 -0
  351. package/dist/src/sources/fail.js +49 -0
  352. package/dist/src/sources/fail.js.map +1 -0
  353. package/dist/src/sources/ids.d.ts +69 -0
  354. package/dist/src/sources/ids.d.ts.map +1 -0
  355. package/dist/src/sources/ids.js +69 -0
  356. package/dist/src/sources/ids.js.map +1 -0
  357. package/dist/src/sources/ndex/client.d.ts +31 -0
  358. package/dist/src/sources/ndex/client.d.ts.map +1 -0
  359. package/dist/src/sources/ndex/client.js +90 -0
  360. package/dist/src/sources/ndex/client.js.map +1 -0
  361. package/dist/src/sources/ndex/descriptor.d.ts +10 -0
  362. package/dist/src/sources/ndex/descriptor.d.ts.map +1 -0
  363. package/dist/src/sources/ndex/descriptor.js +55 -0
  364. package/dist/src/sources/ndex/descriptor.js.map +1 -0
  365. package/dist/src/sources/ndex/expand.d.ts +20 -0
  366. package/dist/src/sources/ndex/expand.d.ts.map +1 -0
  367. package/dist/src/sources/ndex/expand.js +87 -0
  368. package/dist/src/sources/ndex/expand.js.map +1 -0
  369. package/dist/src/sources/ndex/index.d.ts +25 -0
  370. package/dist/src/sources/ndex/index.d.ts.map +1 -0
  371. package/dist/src/sources/ndex/index.js +191 -0
  372. package/dist/src/sources/ndex/index.js.map +1 -0
  373. package/dist/src/sources/ndex/params.d.ts +17 -0
  374. package/dist/src/sources/ndex/params.d.ts.map +1 -0
  375. package/dist/src/sources/ndex/params.js +6 -0
  376. package/dist/src/sources/ndex/params.js.map +1 -0
  377. package/dist/src/sources/ndex/share-url.d.ts +40 -0
  378. package/dist/src/sources/ndex/share-url.d.ts.map +1 -0
  379. package/dist/src/sources/ndex/share-url.js +64 -0
  380. package/dist/src/sources/ndex/share-url.js.map +1 -0
  381. package/dist/src/sources/params.d.ts +31 -0
  382. package/dist/src/sources/params.d.ts.map +1 -0
  383. package/dist/src/sources/params.js +6 -0
  384. package/dist/src/sources/params.js.map +1 -0
  385. package/dist/src/sources/registry.d.ts +118 -0
  386. package/dist/src/sources/registry.d.ts.map +1 -0
  387. package/dist/src/sources/registry.js +193 -0
  388. package/dist/src/sources/registry.js.map +1 -0
  389. package/dist/src/sources/rest/descriptor.d.ts +16 -0
  390. package/dist/src/sources/rest/descriptor.d.ts.map +1 -0
  391. package/dist/src/sources/rest/descriptor.js +76 -0
  392. package/dist/src/sources/rest/descriptor.js.map +1 -0
  393. package/dist/src/sources/rest/index.d.ts +14 -0
  394. package/dist/src/sources/rest/index.d.ts.map +1 -0
  395. package/dist/src/sources/rest/index.js +13 -0
  396. package/dist/src/sources/rest/index.js.map +1 -0
  397. package/dist/src/sources/rest/mapping.d.ts +30 -0
  398. package/dist/src/sources/rest/mapping.d.ts.map +1 -0
  399. package/dist/src/sources/rest/mapping.js +362 -0
  400. package/dist/src/sources/rest/mapping.js.map +1 -0
  401. package/dist/src/sources/rest/openalex.d.ts +27 -0
  402. package/dist/src/sources/rest/openalex.d.ts.map +1 -0
  403. package/dist/src/sources/rest/openalex.js +269 -0
  404. package/dist/src/sources/rest/openalex.js.map +1 -0
  405. package/dist/src/sources/rest/paging.d.ts +53 -0
  406. package/dist/src/sources/rest/paging.d.ts.map +1 -0
  407. package/dist/src/sources/rest/paging.js +138 -0
  408. package/dist/src/sources/rest/paging.js.map +1 -0
  409. package/dist/src/sources/rest/params.d.ts +216 -0
  410. package/dist/src/sources/rest/params.d.ts.map +1 -0
  411. package/dist/src/sources/rest/params.js +7 -0
  412. package/dist/src/sources/rest/params.js.map +1 -0
  413. package/dist/src/sources/rest/records.d.ts +41 -0
  414. package/dist/src/sources/rest/records.d.ts.map +1 -0
  415. package/dist/src/sources/rest/records.js +240 -0
  416. package/dist/src/sources/rest/records.js.map +1 -0
  417. package/dist/src/sources/rest/samples/deps-dev.d.ts +10 -0
  418. package/dist/src/sources/rest/samples/deps-dev.d.ts.map +1 -0
  419. package/dist/src/sources/rest/samples/deps-dev.js +47 -0
  420. package/dist/src/sources/rest/samples/deps-dev.js.map +1 -0
  421. package/dist/src/sources/rest/samples/string.d.ts +9 -0
  422. package/dist/src/sources/rest/samples/string.d.ts.map +1 -0
  423. package/dist/src/sources/rest/samples/string.js +42 -0
  424. package/dist/src/sources/rest/samples/string.js.map +1 -0
  425. package/dist/src/sources/rest/selectors.d.ts +41 -0
  426. package/dist/src/sources/rest/selectors.d.ts.map +1 -0
  427. package/dist/src/sources/rest/selectors.js +81 -0
  428. package/dist/src/sources/rest/selectors.js.map +1 -0
  429. package/dist/src/sources/rest/source.d.ts +67 -0
  430. package/dist/src/sources/rest/source.d.ts.map +1 -0
  431. package/dist/src/sources/rest/source.js +650 -0
  432. package/dist/src/sources/rest/source.js.map +1 -0
  433. package/dist/src/sources/rest/templates.d.ts +38 -0
  434. package/dist/src/sources/rest/templates.d.ts.map +1 -0
  435. package/dist/src/sources/rest/templates.js +125 -0
  436. package/dist/src/sources/rest/templates.js.map +1 -0
  437. package/dist/src/sources/run.d.ts +93 -0
  438. package/dist/src/sources/run.d.ts.map +1 -0
  439. package/dist/src/sources/run.js +673 -0
  440. package/dist/src/sources/run.js.map +1 -0
  441. package/dist/src/sources/sha256.d.ts +12 -0
  442. package/dist/src/sources/sha256.d.ts.map +1 -0
  443. package/dist/src/sources/sha256.js +95 -0
  444. package/dist/src/sources/sha256.js.map +1 -0
  445. package/dist/src/sources/sigv4.d.ts +26 -0
  446. package/dist/src/sources/sigv4.d.ts.map +1 -0
  447. package/dist/src/sources/sigv4.js +184 -0
  448. package/dist/src/sources/sigv4.js.map +1 -0
  449. package/dist/src/sources/sparql/descriptor.d.ts +10 -0
  450. package/dist/src/sources/sparql/descriptor.d.ts.map +1 -0
  451. package/dist/src/sources/sparql/descriptor.js +64 -0
  452. package/dist/src/sources/sparql/descriptor.js.map +1 -0
  453. package/dist/src/sources/sparql/index.d.ts +28 -0
  454. package/dist/src/sources/sparql/index.d.ts.map +1 -0
  455. package/dist/src/sources/sparql/index.js +314 -0
  456. package/dist/src/sources/sparql/index.js.map +1 -0
  457. package/dist/src/sources/sparql/ntriples.d.ts +69 -0
  458. package/dist/src/sources/sparql/ntriples.d.ts.map +1 -0
  459. package/dist/src/sources/sparql/ntriples.js +180 -0
  460. package/dist/src/sources/sparql/ntriples.js.map +1 -0
  461. package/dist/src/sources/sparql/params.d.ts +27 -0
  462. package/dist/src/sources/sparql/params.d.ts.map +1 -0
  463. package/dist/src/sources/sparql/params.js +5 -0
  464. package/dist/src/sources/sparql/params.js.map +1 -0
  465. package/dist/src/sources/sparql/query.d.ts +72 -0
  466. package/dist/src/sources/sparql/query.d.ts.map +1 -0
  467. package/dist/src/sources/sparql/query.js +113 -0
  468. package/dist/src/sources/sparql/query.js.map +1 -0
  469. package/dist/src/sources/testing.d.ts +96 -0
  470. package/dist/src/sources/testing.d.ts.map +1 -0
  471. package/dist/src/sources/testing.js +138 -0
  472. package/dist/src/sources/testing.js.map +1 -0
  473. package/dist/src/sources/types.d.ts +696 -0
  474. package/dist/src/sources/types.d.ts.map +1 -0
  475. package/dist/src/sources/types.js +10 -0
  476. package/dist/src/sources/types.js.map +1 -0
  477. package/dist/src/styles/annotations.d.ts +61 -5
  478. package/dist/src/styles/annotations.d.ts.map +1 -1
  479. package/dist/src/styles/annotations.js +130 -22
  480. package/dist/src/styles/annotations.js.map +1 -1
  481. package/dist/src/styles/canon/bends.d.ts +46 -0
  482. package/dist/src/styles/canon/bends.d.ts.map +1 -1
  483. package/dist/src/styles/canon/bends.js +123 -0
  484. package/dist/src/styles/canon/bends.js.map +1 -1
  485. package/dist/src/styles/canon/color-tables.d.ts +6 -1
  486. package/dist/src/styles/canon/color-tables.d.ts.map +1 -1
  487. package/dist/src/styles/canon/color-tables.js +10 -4
  488. package/dist/src/styles/canon/color-tables.js.map +1 -1
  489. package/dist/src/styles/canon/color.d.ts +3 -1
  490. package/dist/src/styles/canon/color.d.ts.map +1 -1
  491. package/dist/src/styles/canon/color.js +103 -3
  492. package/dist/src/styles/canon/color.js.map +1 -1
  493. package/dist/src/styles/canon/enums.d.ts +2 -2
  494. package/dist/src/styles/canon/enums.d.ts.map +1 -1
  495. package/dist/src/styles/canon/enums.js +82 -7
  496. package/dist/src/styles/canon/enums.js.map +1 -1
  497. package/dist/src/styles/canon/graphviz.d.ts +12 -3
  498. package/dist/src/styles/canon/graphviz.d.ts.map +1 -1
  499. package/dist/src/styles/canon/graphviz.js +57 -9
  500. package/dist/src/styles/canon/graphviz.js.map +1 -1
  501. package/dist/src/styles/canon/number.d.ts +8 -0
  502. package/dist/src/styles/canon/number.d.ts.map +1 -1
  503. package/dist/src/styles/canon/number.js +18 -0
  504. package/dist/src/styles/canon/number.js.map +1 -1
  505. package/dist/src/styles/canon/text.d.ts +29 -2
  506. package/dist/src/styles/canon/text.d.ts.map +1 -1
  507. package/dist/src/styles/canon/text.js +156 -16
  508. package/dist/src/styles/canon/text.js.map +1 -1
  509. package/dist/src/styles/codes.d.ts +2 -0
  510. package/dist/src/styles/codes.d.ts.map +1 -1
  511. package/dist/src/styles/codes.js +2 -0
  512. package/dist/src/styles/codes.js.map +1 -1
  513. package/dist/src/styles/cyjs/cascade.d.ts.map +1 -1
  514. package/dist/src/styles/cyjs/cascade.js +1037 -35
  515. package/dist/src/styles/cyjs/cascade.js.map +1 -1
  516. package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -1
  517. package/dist/src/styles/cyjs/defaults-table.js +5 -0
  518. package/dist/src/styles/cyjs/defaults-table.js.map +1 -1
  519. package/dist/src/styles/cyjs/emit.d.ts.map +1 -1
  520. package/dist/src/styles/cyjs/emit.js +216 -12
  521. package/dist/src/styles/cyjs/emit.js.map +1 -1
  522. package/dist/src/styles/cyjs/face.d.ts +20 -0
  523. package/dist/src/styles/cyjs/face.d.ts.map +1 -0
  524. package/dist/src/styles/cyjs/face.js +332 -0
  525. package/dist/src/styles/cyjs/face.js.map +1 -0
  526. package/dist/src/styles/cyjs/mappers.d.ts +48 -2
  527. package/dist/src/styles/cyjs/mappers.d.ts.map +1 -1
  528. package/dist/src/styles/cyjs/mappers.js +463 -26
  529. package/dist/src/styles/cyjs/mappers.js.map +1 -1
  530. package/dist/src/styles/cyjs/routes.d.ts +53 -0
  531. package/dist/src/styles/cyjs/routes.d.ts.map +1 -0
  532. package/dist/src/styles/cyjs/routes.js +360 -0
  533. package/dist/src/styles/cyjs/routes.js.map +1 -0
  534. package/dist/src/styles/cytoscape/charts.d.ts +23 -0
  535. package/dist/src/styles/cytoscape/charts.d.ts.map +1 -0
  536. package/dist/src/styles/cytoscape/charts.js +560 -0
  537. package/dist/src/styles/cytoscape/charts.js.map +1 -0
  538. package/dist/src/styles/cytoscape/emit.d.ts.map +1 -1
  539. package/dist/src/styles/cytoscape/emit.js +204 -44
  540. package/dist/src/styles/cytoscape/emit.js.map +1 -1
  541. package/dist/src/styles/cytoscape/lexicon.d.ts +97 -3
  542. package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -1
  543. package/dist/src/styles/cytoscape/lexicon.js +413 -79
  544. package/dist/src/styles/cytoscape/lexicon.js.map +1 -1
  545. package/dist/src/styles/cytoscape/mappings.d.ts +30 -0
  546. package/dist/src/styles/cytoscape/mappings.d.ts.map +1 -1
  547. package/dist/src/styles/cytoscape/mappings.js +92 -0
  548. package/dist/src/styles/cytoscape/mappings.js.map +1 -1
  549. package/dist/src/styles/cytoscape/resolve.d.ts +46 -3
  550. package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -1
  551. package/dist/src/styles/cytoscape/resolve.js +632 -22
  552. package/dist/src/styles/cytoscape/resolve.js.map +1 -1
  553. package/dist/src/styles/cytoscape/translate.d.ts.map +1 -1
  554. package/dist/src/styles/cytoscape/translate.js +10 -10
  555. package/dist/src/styles/cytoscape/translate.js.map +1 -1
  556. package/dist/src/styles/defaults.d.ts +50 -0
  557. package/dist/src/styles/defaults.d.ts.map +1 -1
  558. package/dist/src/styles/defaults.js +315 -37
  559. package/dist/src/styles/defaults.js.map +1 -1
  560. package/dist/src/styles/index.d.ts +4 -3
  561. package/dist/src/styles/index.d.ts.map +1 -1
  562. package/dist/src/styles/index.js +3 -2
  563. package/dist/src/styles/index.js.map +1 -1
  564. package/dist/src/styles/internal.d.ts +1 -0
  565. package/dist/src/styles/internal.d.ts.map +1 -1
  566. package/dist/src/styles/internal.js +1 -0
  567. package/dist/src/styles/internal.js.map +1 -1
  568. package/dist/src/styles/io/block.d.ts.map +1 -1
  569. package/dist/src/styles/io/block.js +9 -0
  570. package/dist/src/styles/io/block.js.map +1 -1
  571. package/dist/src/styles/io/generic.d.ts.map +1 -1
  572. package/dist/src/styles/io/generic.js +56 -16
  573. package/dist/src/styles/io/generic.js.map +1 -1
  574. package/dist/src/styles/io/round-trip.d.ts +56 -0
  575. package/dist/src/styles/io/round-trip.d.ts.map +1 -0
  576. package/dist/src/styles/io/round-trip.js +138 -0
  577. package/dist/src/styles/io/round-trip.js.map +1 -0
  578. package/dist/src/styles/io/writer.d.ts.map +1 -1
  579. package/dist/src/styles/io/writer.js +13 -4
  580. package/dist/src/styles/io/writer.js.map +1 -1
  581. package/dist/src/styles/notes.d.ts.map +1 -1
  582. package/dist/src/styles/notes.js +1 -0
  583. package/dist/src/styles/notes.js.map +1 -1
  584. package/dist/src/styles/plan/features.d.ts +1 -1
  585. package/dist/src/styles/plan/features.d.ts.map +1 -1
  586. package/dist/src/styles/plan/features.js +22 -2
  587. package/dist/src/styles/plan/features.js.map +1 -1
  588. package/dist/src/styles/plan/index.d.ts +1 -1
  589. package/dist/src/styles/plan/index.d.ts.map +1 -1
  590. package/dist/src/styles/plan/index.js +1 -1
  591. package/dist/src/styles/plan/index.js.map +1 -1
  592. package/dist/src/styles/plan/plan.d.ts.map +1 -1
  593. package/dist/src/styles/plan/plan.js +61 -4
  594. package/dist/src/styles/plan/plan.js.map +1 -1
  595. package/dist/src/styles/plan/resolve.d.ts +13 -1
  596. package/dist/src/styles/plan/resolve.d.ts.map +1 -1
  597. package/dist/src/styles/plan/resolve.js +53 -6
  598. package/dist/src/styles/plan/resolve.js.map +1 -1
  599. package/dist/src/styles/slots.d.ts +14 -0
  600. package/dist/src/styles/slots.d.ts.map +1 -0
  601. package/dist/src/styles/slots.js +20 -0
  602. package/dist/src/styles/slots.js.map +1 -0
  603. package/dist/src/styles/types.d.ts +638 -5
  604. package/dist/src/styles/types.d.ts.map +1 -1
  605. package/dist/src/styles/vocabulary.d.ts +3 -2
  606. package/dist/src/styles/vocabulary.d.ts.map +1 -1
  607. package/dist/src/styles/vocabulary.js +218 -1
  608. package/dist/src/styles/vocabulary.js.map +1 -1
  609. package/dist/src/types.d.ts +19 -5
  610. package/dist/src/types.d.ts.map +1 -1
  611. package/dist/src/types.js.map +1 -1
  612. package/dist/styles.js +29 -238
  613. package/dist/styles.js.map +1 -1
  614. package/dist/xgmml.js +3 -3
  615. package/docs/samples/people.json +6 -0
  616. package/package.json +53 -8
  617. package/src/common/report.ts +27 -7
  618. package/src/formats/cx/importer.ts +6 -1
  619. package/src/formats/cx/styles.ts +144 -9
  620. package/src/formats/cx2/importer.ts +1 -0
  621. package/src/formats/cx2/styles.ts +3 -1
  622. package/src/formats/cys/importer.ts +1 -0
  623. package/src/formats/cys/styles.ts +27 -5
  624. package/src/formats/dot/drawing.ts +799 -0
  625. package/src/formats/dot/importer.ts +120 -35
  626. package/src/formats/dot/label-places.ts +228 -0
  627. package/src/formats/dot/record.ts +336 -0
  628. package/src/formats/dot/styles.ts +1657 -154
  629. package/src/formats/gexf/dialog-metrics.ts +61 -0
  630. package/src/formats/gexf/importer.ts +50 -5
  631. package/src/formats/gexf/preview.ts +217 -0
  632. package/src/formats/gexf/schema.ts +2 -1
  633. package/src/formats/gexf/styles.ts +1144 -142
  634. package/src/formats/gml/importer.ts +291 -76
  635. package/src/formats/gml/index.ts +1 -1
  636. package/src/formats/gml/positions.ts +29 -7
  637. package/src/formats/gml/styles.ts +854 -111
  638. package/src/formats/graphml/styles-plain.ts +8 -23
  639. package/src/formats/graphml/styles-yed.ts +821 -159
  640. package/src/formats/graphml/styles-yfiles3.ts +485 -63
  641. package/src/formats/graphml/yfiles.ts +19 -6
  642. package/src/formats/json/dialect.ts +41 -5
  643. package/src/formats/json/importer.ts +59 -7
  644. package/src/formats/json/index.ts +1 -0
  645. package/src/formats/json/positions.ts +22 -5
  646. package/src/formats/json/styles.ts +2041 -185
  647. package/src/formats/pajek/draw.ts +458 -0
  648. package/src/formats/pajek/exporter.ts +81 -49
  649. package/src/formats/pajek/importer.ts +278 -103
  650. package/src/formats/pajek/index.ts +1 -0
  651. package/src/formats/pajek/styles.ts +1382 -133
  652. package/src/formats/pajek/syntax.ts +27 -2
  653. package/src/formats/xgmml/emit.ts +73 -5
  654. package/src/formats/xgmml/styles.ts +331 -71
  655. package/src/index.ts +94 -0
  656. package/src/positions/convert.ts +12 -1
  657. package/src/positions/extract.ts +55 -1
  658. package/src/positions/index.ts +1 -0
  659. package/src/positions/types.ts +60 -0
  660. package/src/registry.ts +326 -1
  661. package/src/sources/builtins.ts +63 -0
  662. package/src/sources/codes.ts +235 -0
  663. package/src/sources/context.ts +894 -0
  664. package/src/sources/credentials.ts +409 -0
  665. package/src/sources/cypher/descriptor.ts +131 -0
  666. package/src/sources/cypher/flatten.ts +323 -0
  667. package/src/sources/cypher/index.ts +628 -0
  668. package/src/sources/cypher/params.ts +41 -0
  669. package/src/sources/cypher/profiles.ts +78 -0
  670. package/src/sources/cypher/query-builder.ts +327 -0
  671. package/src/sources/cypher/transports/bolt.ts +228 -0
  672. package/src/sources/cypher/transports/neptune-analytics.ts +41 -0
  673. package/src/sources/cypher/transports/neptune-https.ts +122 -0
  674. package/src/sources/cypher/transports/query-api.ts +100 -0
  675. package/src/sources/cypher/transports/transport.ts +139 -0
  676. package/src/sources/cypher/types-map.ts +418 -0
  677. package/src/sources/define.ts +195 -0
  678. package/src/sources/fail.ts +70 -0
  679. package/src/sources/ids.ts +80 -0
  680. package/src/sources/ndex/client.ts +102 -0
  681. package/src/sources/ndex/descriptor.ts +64 -0
  682. package/src/sources/ndex/expand.ts +100 -0
  683. package/src/sources/ndex/index.ts +235 -0
  684. package/src/sources/ndex/params.ts +17 -0
  685. package/src/sources/ndex/share-url.ts +84 -0
  686. package/src/sources/params.ts +32 -0
  687. package/src/sources/registry.ts +325 -0
  688. package/src/sources/rest/descriptor.ts +79 -0
  689. package/src/sources/rest/index.ts +22 -0
  690. package/src/sources/rest/mapping.ts +401 -0
  691. package/src/sources/rest/openalex.ts +288 -0
  692. package/src/sources/rest/paging.ts +180 -0
  693. package/src/sources/rest/params.ts +243 -0
  694. package/src/sources/rest/records.ts +289 -0
  695. package/src/sources/rest/samples/deps-dev.ts +49 -0
  696. package/src/sources/rest/samples/string.ts +44 -0
  697. package/src/sources/rest/selectors.ts +91 -0
  698. package/src/sources/rest/source.ts +776 -0
  699. package/src/sources/rest/templates.ts +151 -0
  700. package/src/sources/run.ts +793 -0
  701. package/src/sources/sha256.ts +99 -0
  702. package/src/sources/sigv4.ts +209 -0
  703. package/src/sources/sparql/descriptor.ts +67 -0
  704. package/src/sources/sparql/index.ts +356 -0
  705. package/src/sources/sparql/ntriples.ts +219 -0
  706. package/src/sources/sparql/params.ts +28 -0
  707. package/src/sources/sparql/query.ts +162 -0
  708. package/src/sources/testing.ts +210 -0
  709. package/src/sources/types.ts +776 -0
  710. package/src/styles/annotations.ts +201 -27
  711. package/src/styles/canon/bends.ts +137 -0
  712. package/src/styles/canon/color-tables.ts +10 -4
  713. package/src/styles/canon/color.ts +105 -3
  714. package/src/styles/canon/enums.ts +99 -8
  715. package/src/styles/canon/graphviz.ts +71 -10
  716. package/src/styles/canon/number.ts +19 -0
  717. package/src/styles/canon/text.ts +187 -16
  718. package/src/styles/codes.ts +2 -0
  719. package/src/styles/cyjs/cascade.ts +1193 -38
  720. package/src/styles/cyjs/defaults-table.ts +5 -0
  721. package/src/styles/cyjs/emit.ts +247 -16
  722. package/src/styles/cyjs/face.ts +372 -0
  723. package/src/styles/cyjs/mappers.ts +498 -28
  724. package/src/styles/cyjs/routes.ts +432 -0
  725. package/src/styles/cytoscape/charts.ts +684 -0
  726. package/src/styles/cytoscape/emit.ts +220 -44
  727. package/src/styles/cytoscape/lexicon.ts +459 -80
  728. package/src/styles/cytoscape/mappings.ts +108 -0
  729. package/src/styles/cytoscape/resolve.ts +763 -23
  730. package/src/styles/cytoscape/translate.ts +11 -11
  731. package/src/styles/defaults.ts +436 -38
  732. package/src/styles/index.ts +5 -0
  733. package/src/styles/internal.ts +1 -0
  734. package/src/styles/io/block.ts +10 -0
  735. package/src/styles/io/generic.ts +79 -23
  736. package/src/styles/io/round-trip.ts +202 -0
  737. package/src/styles/io/writer.ts +14 -4
  738. package/src/styles/notes.ts +1 -0
  739. package/src/styles/plan/features.ts +23 -2
  740. package/src/styles/plan/index.ts +1 -1
  741. package/src/styles/plan/plan.ts +69 -5
  742. package/src/styles/plan/resolve.ts +61 -6
  743. package/src/styles/slots.ts +25 -0
  744. package/src/styles/types.ts +658 -4
  745. package/src/styles/vocabulary.ts +226 -3
  746. package/src/types.ts +19 -5
  747. package/dist/chunks/block-DiGq58c3.js.map +0 -1
  748. package/dist/chunks/choose--jM0yYCo.js +0 -57
  749. package/dist/chunks/choose--jM0yYCo.js.map +0 -1
  750. package/dist/chunks/convert-BcQ8_jMo.js.map +0 -1
  751. package/dist/chunks/emit-CwU8cUmG.js.map +0 -1
  752. package/dist/chunks/export-BvqAXCKh.js.map +0 -1
  753. package/dist/chunks/exporter-CrDWIyiq.js.map +0 -1
  754. package/dist/chunks/format-BpQBx8MZ.js.map +0 -1
  755. package/dist/chunks/generic-Dq1ntt9q.js.map +0 -1
  756. package/dist/chunks/importer-BSvfrX_h.js.map +0 -1
  757. package/dist/chunks/importer-CMmeMWlC.js.map +0 -1
  758. package/dist/chunks/importer-COTK9Tsl.js.map +0 -1
  759. package/dist/chunks/importer-DiZRmOQG.js.map +0 -1
  760. package/dist/chunks/importer-e6LGpqHB.js.map +0 -1
  761. package/dist/chunks/importer-iFYPEKaJ.js.map +0 -1
  762. package/dist/chunks/importer-yh_aBCU6.js.map +0 -1
  763. package/dist/chunks/lexicon-CT69Kd87.js.map +0 -1
  764. package/dist/chunks/styles-BQnsga7p.js.map +0 -1
  765. package/dist/chunks/styles-D3fRphrO.js +0 -690
  766. package/dist/chunks/styles-D3fRphrO.js.map +0 -1
  767. package/dist/chunks/styles-yed-BF5x3_Y5.js +0 -842
  768. package/dist/chunks/styles-yed-BF5x3_Y5.js.map +0 -1
  769. package/dist/chunks/writer-DMKvthQE.js +0 -448
  770. package/dist/chunks/writer-DMKvthQE.js.map +0 -1
@@ -0,0 +1,80 @@
1
+ /**
2
+ * The public names of network sources: one constant per built-in source id, and the reserved
3
+ * `_source.` attribute names. Nothing else in graph-io spells them, so a rename is one edit here.
4
+ *
5
+ * Experimental: the ids and the `_source.` namespace await the owner's final word (design
6
+ * section 22, items 4 and 5).
7
+ */
8
+
9
+ /**
10
+ * The NDEx source (www.ndexbio.org). Experimental.
11
+ * @category Network sources
12
+ */
13
+ export const NDEX_SOURCE_ID = "ndex";
14
+
15
+ /**
16
+ * The generic Cypher source, for any openCypher server. Experimental.
17
+ * @category Network sources
18
+ */
19
+ export const CYPHER_SOURCE_ID = "cypher";
20
+
21
+ /**
22
+ * The Neo4j preset of the Cypher source. Experimental.
23
+ * @category Network sources
24
+ */
25
+ export const NEO4J_SOURCE_ID = "neo4j";
26
+
27
+ /**
28
+ * The Amazon Neptune preset of the Cypher source. Experimental.
29
+ * @category Network sources
30
+ */
31
+ export const NEPTUNE_SOURCE_ID = "neptune";
32
+
33
+ /**
34
+ * The generic REST mapping source. Experimental.
35
+ * @category Network sources
36
+ */
37
+ export const REST_SOURCE_ID = "rest";
38
+
39
+ /**
40
+ * The OpenAlex preset of the REST mapping source. Experimental.
41
+ * @category Network sources
42
+ */
43
+ export const OPENALEX_SOURCE_ID = "openalex";
44
+
45
+ /**
46
+ * The SPARQL source, for any SPARQL 1.1 endpoint. Experimental.
47
+ * @category Network sources
48
+ */
49
+ export const SPARQL_SOURCE_ID = "sparql";
50
+
51
+ /**
52
+ * The prefix of the reserved attribute namespace sources and graphty-element write facts under.
53
+ * @category Network sources
54
+ */
55
+ export const SOURCE_ATTR_PREFIX = "_source.";
56
+
57
+ /**
58
+ * Node attribute: true on a stub, a node known only by its id until it is hydrated or expanded.
59
+ * @category Network sources
60
+ */
61
+ export const SOURCE_STUB_ATTR = "_source.stub";
62
+
63
+ /**
64
+ * Node attribute: the entity a stub node is (a REST mapping's entity name).
65
+ * @category Network sources
66
+ */
67
+ export const SOURCE_ENTITY_ATTR = "_source.entity";
68
+
69
+ /**
70
+ * Node attribute: the node's degree at the source, when the source returns it at no extra cost
71
+ * (the Cypher source's degree hint).
72
+ * @category Network sources
73
+ */
74
+ export const SOURCE_DEGREE_ATTR = "_source.degree";
75
+
76
+ /**
77
+ * The prefix of `ImportGraphResult.format` for a load from a source: `"source:<id>"`.
78
+ * @category Network sources
79
+ */
80
+ export const SOURCE_FORMAT_PREFIX = "source:";
@@ -0,0 +1,102 @@
1
+ /**
2
+ * What every NDEx call shares: the checks on the endpoint and the network UUID, and a fetch that
3
+ * classifies NDEx's failures.
4
+ */
5
+
6
+ import { failOn } from "../fail.js";
7
+ import { type SourceContext } from "../types.js";
8
+
9
+ /** An NDEx network UUID. */
10
+ const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
11
+
12
+ /** The query parameter NDEx reads a link-share access key from. */
13
+ export const ACCESS_KEY_QUERY = "accesskey";
14
+
15
+ /** The statuses whose JSON body (NDEx's errorCode) is read; every other failure is classified by status alone. */
16
+ const READ_STATUSES = [401, 403, 404] as const;
17
+
18
+ /**
19
+ * Refuse an access key in the endpoint: it belongs in a credential, which is never logged.
20
+ * @param ctx - the context
21
+ */
22
+ export function checkEndpoint(ctx: SourceContext): void {
23
+ if (ctx.endpoint?.searchParams.has(ACCESS_KEY_QUERY) === true) {
24
+ failOn(ctx.report, "E_SOURCE_PARAM", "an access key goes in a credential, never in the endpoint", {
25
+ name: "endpoint",
26
+ reason: "credentials-in-url",
27
+ });
28
+ }
29
+ }
30
+
31
+ /**
32
+ * Check a call's endpoint and network UUID.
33
+ * @param uuid - the network UUID
34
+ * @param ctx - the context
35
+ * @returns the UUID, lowercase and URL-safe
36
+ */
37
+ export function checkedUuid(uuid: unknown, ctx: SourceContext): string {
38
+ checkEndpoint(ctx);
39
+ const value = String(uuid);
40
+ if (/accesskey/i.test(value)) {
41
+ failOn(ctx.report, "E_SOURCE_PARAM", "an access key goes in a credential, never in the uuid", {
42
+ name: "uuid",
43
+ reason: "credentials-in-url",
44
+ });
45
+ }
46
+ if (!UUID.test(value)) {
47
+ failOn(ctx.report, "E_SOURCE_PARAM", "the uuid is not a network UUID", { name: "uuid", reason: "format" });
48
+ }
49
+ return value.toLowerCase();
50
+ }
51
+
52
+ /**
53
+ * Fetch from NDEx, turning a 401, 403 or 404 into its coded error with NDEx's own errorCode.
54
+ * @param ctx - the context
55
+ * @param path - the path, relative to the endpoint
56
+ * @param uuid - the network the request is about, for E_SOURCE_NOT_FOUND
57
+ * @param init - the request init
58
+ * @returns the response, status 2xx
59
+ */
60
+ export async function ndexFetch(
61
+ ctx: SourceContext,
62
+ path: string,
63
+ uuid: string | null,
64
+ init: RequestInit & { readonly idempotent?: boolean } = {},
65
+ ): Promise<Response> {
66
+ const response = await ctx.fetch(path, { ...init, allowStatus: READ_STATUSES });
67
+ if (response.ok) {
68
+ return response;
69
+ }
70
+ const url = new URL(path, ctx.endpoint ?? undefined);
71
+ const serverCode = await errorCode(response);
72
+ const { status } = response;
73
+ if (status === 401) {
74
+ failOn(ctx.report, "E_SOURCE_AUTH", `NDEx answered ${String(status)}`, {
75
+ origin: url.origin,
76
+ status,
77
+ scheme: response.headers.get("www-authenticate")?.split(/\s/)[0] ?? null,
78
+ serverCode,
79
+ });
80
+ }
81
+ if (status === 403) {
82
+ failOn(ctx.report, "E_SOURCE_FORBIDDEN", "NDEx answered 403", { status, serverCode });
83
+ }
84
+ return failOn(ctx.report, "E_SOURCE_NOT_FOUND", "NDEx has no such network", {
85
+ what: uuid === null ? "url" : "network",
86
+ value: uuid ?? `${url.origin}${url.pathname}`,
87
+ });
88
+ }
89
+
90
+ /**
91
+ * NDEx's own error code from a JSON error body, never its message or stack trace.
92
+ * @param response - the failed response
93
+ * @returns the code, or null
94
+ */
95
+ async function errorCode(response: Response): Promise<string | null> {
96
+ try {
97
+ const body = (await response.json()) as { errorCode?: unknown };
98
+ return typeof body.errorCode === "string" ? body.errorCode.slice(0, 100) : null;
99
+ } catch {
100
+ return null;
101
+ }
102
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * The NDEx source's descriptor: catalog data, available without loading the source's code.
3
+ */
4
+
5
+ import { type SourceDescriptor, type SourceSample } from "../types.js";
6
+
7
+ /**
8
+ * One public NDEx network offered as a sample.
9
+ * @param id - the sample id
10
+ * @param plainName - its name
11
+ * @param uuid - the network UUID
12
+ * @param nodes - its node count
13
+ * @param edges - its edge count
14
+ * @returns the sample
15
+ */
16
+ function sample(id: string, plainName: string, uuid: string, nodes: number, edges: number): SourceSample {
17
+ return { id, plainName, params: { uuid }, counts: { nodes, edges } };
18
+ }
19
+
20
+ /**
21
+ * The descriptor of the `ndex` source. Experimental.
22
+ * @category Network sources
23
+ */
24
+ export const NDEX_DESCRIPTOR: SourceDescriptor = Object.freeze({
25
+ plainName: "NDEx",
26
+ kind: "repository",
27
+ version: 1,
28
+ defaultEndpoint: "https://www.ndexbio.org/",
29
+ auth: ["basic", "bearer", "api-key"],
30
+ authRequired: "optional",
31
+ rateLimit: { requests: 50, perMs: 1000, concurrent: 4 },
32
+ params: [
33
+ { name: "uuid", plainName: "Network UUID", type: "string", required: true },
34
+ {
35
+ name: "format",
36
+ plainName: "Format",
37
+ type: "enum",
38
+ default: "cx2",
39
+ advanced: true,
40
+ values: [
41
+ { value: "cx2", label: "CX2" },
42
+ { value: "cx", label: "CX" },
43
+ ],
44
+ },
45
+ { name: "idAttribute", plainName: "Id attribute", type: "string", advanced: true },
46
+ ],
47
+ features: ["probe", "list", "expand", "validate"],
48
+ samples: [
49
+ sample("ndex-wp5483", "WikiPathways WP5483", "86719f5b-1439-11f0-9806-005056ae3c32", 57, 34),
50
+ sample("ndex-nci-pid", "NCI PID cancer signaling", "640e2cef-795d-11e8-a4bf-0ac135e8bacf", 2794, 25296),
51
+ sample("ndex-huri", "HuRI human interactome", "73bc2c06-5fb2-11e9-9f06-0ac135e8bacf", 8275, 52569),
52
+ sample("ndex-signor", "Signor", "523fff27-afe8-11e9-8bb4-0ac135e8bacf", 10339, 33381),
53
+ sample("ndex-dgidb", "DGIdb drugs and target genes", "7e5e64ff-f6cf-11ea-99da-0ac135e8bacf", 12100, 32814),
54
+ sample(
55
+ "ndex-wikipathways-landscape",
56
+ "WikiPathways landscape",
57
+ "2b3ed6af-5031-11eb-9e72-0ac135e8bacf",
58
+ 32077,
59
+ 74109,
60
+ ),
61
+ // 3.3 million edges and a 690 MB download: offered for neighborhoods, and as a maxBytes test
62
+ { ...sample("ndex-pcnet", "PCNet 2.2", "8b4b54fa-e87d-11ee-9621-005056ae23aa", 18558, 3323928), whole: false },
63
+ ],
64
+ });
@@ -0,0 +1,100 @@
1
+ /**
2
+ * The NDEx source's expand: NDEx's neighborhood query (`POST /v2/search/network/{uuid}/query`),
3
+ * which answers CX1, read by the CX importer. Seeds are node ids, sent as `nodeIds`; NDEx's CX1
4
+ * answer keeps the ids of the CX2 download (checked on 2026-10-17), so an expansion merges into a
5
+ * loaded network by id. With `idAttribute`, seeds are values of that node attribute instead,
6
+ * matched by NDEx's node search.
7
+ */
8
+
9
+ import { type GraphSink } from "@graphty/graph-format";
10
+
11
+ import { cxImporter } from "../../formats/cx/importer.js";
12
+ import { type ImportReport } from "../../types.js";
13
+ import { failOn } from "../fail.js";
14
+ import { type ExpandRequest, type SourceContext } from "../types.js";
15
+ import { checkedUuid, ndexFetch } from "./client.js";
16
+ import { type NdexParams } from "./params.js";
17
+
18
+ /** The deepest neighborhood asked for, as for every built-in source. */
19
+ const MAX_DEPTH = 10;
20
+
21
+ /**
22
+ * Quote a value for NDEx's search syntax.
23
+ * @param value - the value
24
+ * @returns the quoted term
25
+ */
26
+ function term(value: string): string {
27
+ const escaped = value.replaceAll(/["\\]/g, String.raw`\$&`);
28
+ return `"${escaped}"`;
29
+ }
30
+
31
+ /**
32
+ * The query body: the seeds as node ids, or as values of `idAttribute`.
33
+ * @param request - the expand request
34
+ * @param ctx - the context
35
+ * @returns the body NDEx's query takes
36
+ */
37
+ function queryBody(request: ExpandRequest<NdexParams>, ctx: SourceContext): Record<string, unknown> {
38
+ const { ids } = request;
39
+ const { idAttribute } = request.params;
40
+ const depth = request.depth ?? 1;
41
+ if (!Number.isInteger(depth) || depth < 1 || depth > MAX_DEPTH) {
42
+ failOn(ctx.report, "E_SOURCE_PARAM", "depth is an integer from 1 to 10", { name: "depth", reason: "range" });
43
+ }
44
+ if (ids.length === 0) {
45
+ failOn(ctx.report, "E_SOURCE_PARAM", "an expansion needs at least one id", { name: "ids", reason: "required" });
46
+ }
47
+ const limit = request.limit === undefined ? {} : { edgeLimit: request.limit, errorWhenLimitIsOver: false };
48
+ if (idAttribute !== undefined) {
49
+ if (!/^[A-Za-z_][\w.]*$/.test(idAttribute)) {
50
+ failOn(ctx.report, "E_SOURCE_PARAM", "idAttribute is not an attribute name", {
51
+ name: "idAttribute",
52
+ reason: "identifier",
53
+ });
54
+ }
55
+ const searchString = ids.map((id) => `${idAttribute}:${term(String(id))}`).join(" ");
56
+ return { searchString, searchDepth: depth, ...limit };
57
+ }
58
+ const nodeIds = ids.map(Number);
59
+ if (nodeIds.some((n) => !Number.isSafeInteger(n))) {
60
+ failOn(ctx.report, "E_SOURCE_PARAM", "NDEx node ids are integers; set idAttribute to seed by name", {
61
+ name: "ids",
62
+ reason: "type",
63
+ });
64
+ }
65
+ return { searchString: "", searchDepth: depth, nodeIds, ...limit };
66
+ }
67
+
68
+ /**
69
+ * Fetch the neighborhood of some nodes of an NDEx network into a sink.
70
+ * @param request - the seeds, depth and limit; `limit` caps the edges NDEx returns
71
+ * @param sink - where to write
72
+ * @param ctx - the context
73
+ * @returns the report
74
+ */
75
+ export async function expandNdex(
76
+ request: ExpandRequest<NdexParams>,
77
+ sink: GraphSink,
78
+ ctx: SourceContext,
79
+ ): Promise<ImportReport> {
80
+ const uuid = checkedUuid(request.params.uuid, ctx);
81
+ if (request.direction !== undefined && request.direction !== "both") {
82
+ failOn(ctx.report, "E_SOURCE_UNSUPPORTED", "NDEx expands in both directions only", {
83
+ feature: "direction",
84
+ needs: "both",
85
+ });
86
+ }
87
+ if ((request.relationshipTypes ?? []).length > 0) {
88
+ failOn(ctx.report, "E_SOURCE_UNSUPPORTED", "NDEx cannot filter an expansion by relationship type", {
89
+ feature: "relationshipTypes",
90
+ });
91
+ }
92
+ const response = await ndexFetch(ctx, `v2/search/network/${uuid}/query`, uuid, {
93
+ method: "POST",
94
+ idempotent: true,
95
+ headers: { "Content-Type": "application/json", Accept: "application/json" },
96
+ body: JSON.stringify(queryBody(request, ctx)),
97
+ });
98
+ ctx.report.include(await cxImporter.import(response.body ?? "", sink, { signal: ctx.signal }));
99
+ return ctx.finish();
100
+ }
@@ -0,0 +1,235 @@
1
+ /**
2
+ * `@graphty/graph-io/sources/ndex`: the NDEx source (design section 12.1). Experimental.
3
+ *
4
+ * - load: the network's summary first (counts, download size, modification time), checked against
5
+ * the caps before a byte of the network is read; then the CX2 (or CX) download, streamed into
6
+ * the CX2 (or CX) importer.
7
+ * - probe: the summary. list: NDEx's v2 network search. validate: the summary's modificationTime.
8
+ * - expand: NDEx's neighborhood query (`expand.ts`).
9
+ *
10
+ * Errors are classified by status; a body is read only from a 401, 403 or 404 (NDEx's own
11
+ * `errorCode`, passed through as `serverCode`), so a 500 with a Java stack trace never reaches a
12
+ * report.
13
+ * @module @graphty/graph-io/sources/ndex
14
+ */
15
+
16
+ import { defineSource } from "../define.js";
17
+ import { failOn } from "../fail.js";
18
+ import { NDEX_SOURCE_ID } from "../ids.js";
19
+ import {
20
+ type GraphSource,
21
+ type SourceContext,
22
+ type SourceFreshness,
23
+ type SourceListing,
24
+ type SourceListQuery,
25
+ type SourceProbe,
26
+ type SourceValidators,
27
+ } from "../types.js";
28
+ import { checkedUuid, checkEndpoint, ndexFetch } from "./client.js";
29
+ import { NDEX_DESCRIPTOR } from "./descriptor.js";
30
+ import { expandNdex } from "./expand.js";
31
+ import { type NdexParams } from "./params.js";
32
+
33
+ export { NDEX_DESCRIPTOR } from "./descriptor.js";
34
+ export { type NdexParams } from "./params.js";
35
+ export { type NdexShareLink, parseShareUrl } from "./share-url.js";
36
+
37
+ /** The fields of a network summary this source reads. */
38
+ interface NdexSummary {
39
+ readonly nodeCount?: number;
40
+ readonly edgeCount?: number;
41
+ readonly cxFileSize?: number;
42
+ readonly cx2FileSize?: number;
43
+ readonly modificationTime?: number;
44
+ readonly creationTime?: number;
45
+ readonly visibility?: string;
46
+ readonly properties?: Readonly<Record<string, { readonly v?: unknown } | undefined>>;
47
+ }
48
+
49
+ /** One network of a v2 search answer. */
50
+ interface NdexSearchHit {
51
+ readonly externalId?: string;
52
+ readonly name?: string;
53
+ readonly nodeCount?: number;
54
+ readonly edgeCount?: number;
55
+ readonly modificationTime?: number;
56
+ }
57
+
58
+ /**
59
+ * Read a network's summary.
60
+ * @param uuid - the checked UUID
61
+ * @param ctx - the context
62
+ * @returns the summary and the bytes it took
63
+ */
64
+ async function readSummary(uuid: string, ctx: SourceContext): Promise<{ summary: NdexSummary; bytes: number }> {
65
+ const response = await ndexFetch(ctx, `v3/networks/${uuid}/summary`, uuid, {
66
+ headers: { Accept: "application/json" },
67
+ });
68
+ const text = await response.text();
69
+ try {
70
+ return { summary: JSON.parse(text) as NdexSummary, bytes: new TextEncoder().encode(text).byteLength };
71
+ } catch {
72
+ return failOn(ctx.report, "E_SOURCE_RESPONSE", "the NDEx summary is not JSON", {
73
+ expected: "json",
74
+ contentType: response.headers.get("content-type"),
75
+ });
76
+ }
77
+ }
78
+
79
+ /**
80
+ * An NDEx time (epoch milliseconds) as an ISO string.
81
+ * @param ms - the time
82
+ * @returns the ISO string, or undefined
83
+ */
84
+ function iso(ms: number | undefined): string | undefined {
85
+ return typeof ms === "number" && Number.isFinite(ms) ? new Date(ms).toISOString() : undefined;
86
+ }
87
+
88
+ /**
89
+ * The download size the summary gives for a format.
90
+ * @param summary - the summary
91
+ * @param format - "cx2" or "cx"
92
+ * @returns the size in bytes, or undefined
93
+ */
94
+ function sizeOf(summary: NdexSummary, format: string): number | undefined {
95
+ return format === "cx" ? summary.cxFileSize : summary.cx2FileSize;
96
+ }
97
+
98
+ /**
99
+ * Stop the load before its first byte when the summary says a cap would cut it: a network file cut
100
+ * short is not a graph, so this is E_SOURCE_LIMIT under either `onLimit`.
101
+ * @param summary - the summary
102
+ * @param format - the download format
103
+ * @param ctx - the context
104
+ */
105
+ function checkCaps(summary: NdexSummary, format: string, ctx: SourceContext): void {
106
+ const caps: [string, number | undefined, number | undefined][] = [
107
+ ["maxNodes", summary.nodeCount, ctx.limits.maxNodes],
108
+ ["maxEdges", summary.edgeCount, ctx.limits.maxEdges],
109
+ ["maxBytes", sizeOf(summary, format), ctx.limits.maxBytes],
110
+ ];
111
+ for (const [limit, value, cap] of caps) {
112
+ if (value !== undefined && cap !== undefined && value > cap) {
113
+ failOn(ctx.report, "E_SOURCE_LIMIT", `the network's ${limit} of ${String(value)} is over the cap`, {
114
+ limit,
115
+ value,
116
+ });
117
+ }
118
+ }
119
+ }
120
+
121
+ /**
122
+ * The graph facts a summary adds: when it changed, and who may use it.
123
+ * @param summary - the summary
124
+ * @returns the facts
125
+ */
126
+ function metaOf(summary: NdexSummary): Record<string, string> {
127
+ const meta: Record<string, string> = {};
128
+ const modified = iso(summary.modificationTime);
129
+ if (modified !== undefined) {
130
+ meta.modified = modified;
131
+ }
132
+ if (typeof summary.visibility === "string") {
133
+ meta.visibility = summary.visibility;
134
+ }
135
+ for (const key of ["rights", "rightsHolder"]) {
136
+ const value = summary.properties?.[key]?.v;
137
+ if (typeof value === "string") {
138
+ meta[key] = value;
139
+ }
140
+ }
141
+ return meta;
142
+ }
143
+
144
+ /**
145
+ * The validators of a summary.
146
+ * @param summary - the summary
147
+ * @returns `{ modified }` when NDEx gave a modification time
148
+ */
149
+ function validatorsOf(summary: NdexSummary): SourceValidators {
150
+ const modified = iso(summary.modificationTime);
151
+ return modified === undefined ? {} : { modified };
152
+ }
153
+
154
+ /**
155
+ * The NDEx source. Experimental.
156
+ * @category Network sources
157
+ */
158
+ export const ndexSource: GraphSource<NdexParams> = defineSource<NdexParams>({
159
+ id: NDEX_SOURCE_ID,
160
+ descriptor: NDEX_DESCRIPTOR,
161
+ async file(params, ctx) {
162
+ const uuid = checkedUuid(params.uuid, ctx);
163
+ const format = params.format ?? "cx2";
164
+ const { summary, bytes } = await readSummary(uuid, ctx);
165
+ checkCaps(summary, format, ctx);
166
+ const size = sizeOf(summary, format);
167
+ // progress counts every byte read, the summary's included
168
+ ctx.progress(bytes, size === undefined ? undefined : bytes + size, "bytes");
169
+ // records the validators in report.source; the file path keeps them
170
+ ctx.finish({ validators: validatorsOf(summary) });
171
+ const path = format === "cx" ? `v2/network/${uuid}` : `v3/networks/${uuid}`;
172
+ const body = await ndexFetch(ctx, path, uuid);
173
+ return { body, format, meta: metaOf(summary) };
174
+ },
175
+ async probe(params, ctx): Promise<SourceProbe> {
176
+ const uuid = checkedUuid(params.uuid, ctx);
177
+ const { summary } = await readSummary(uuid, ctx);
178
+ return {
179
+ ok: true,
180
+ counts: {
181
+ nodes: summary.nodeCount,
182
+ edges: summary.edgeCount,
183
+ bytes: sizeOf(summary, params.format ?? "cx2"),
184
+ },
185
+ };
186
+ },
187
+ async list(query: SourceListQuery<NdexParams>, ctx): Promise<SourceListing> {
188
+ checkEndpoint(ctx);
189
+ const start = Number(query.cursor?.start ?? 0);
190
+ const size = query.size ?? 25;
191
+ const body = await ctx.fetchJson<{ networks?: unknown; numFound?: unknown }>(
192
+ `v2/search/network?start=${String(start)}&size=${String(size)}`,
193
+ {
194
+ method: "POST",
195
+ idempotent: true,
196
+ headers: { "Content-Type": "application/json" },
197
+ body: JSON.stringify({ searchString: query.search ?? "" }),
198
+ },
199
+ );
200
+ const networks = Array.isArray(body.networks)
201
+ ? (body.networks as readonly NdexSearchHit[])
202
+ : failOn(ctx.report, "E_SOURCE_RESPONSE", "the NDEx search answer has no networks", {
203
+ expected: "ndex-search",
204
+ contentType: "application/json",
205
+ });
206
+ const { numFound } = body;
207
+ const items = networks.flatMap((n) =>
208
+ typeof n.externalId === "string"
209
+ ? [
210
+ {
211
+ params: { uuid: n.externalId },
212
+ name: n.name ?? n.externalId,
213
+ nodeCount: n.nodeCount,
214
+ edgeCount: n.edgeCount,
215
+ modified: iso(n.modificationTime),
216
+ },
217
+ ]
218
+ : [],
219
+ );
220
+ const total = typeof numFound === "number" ? numFound : undefined;
221
+ const more = total === undefined ? networks.length === size : start + networks.length < total;
222
+ return { items, next: more && networks.length > 0 ? { start: start + networks.length } : null, total };
223
+ },
224
+ async validate(params, seen, ctx): Promise<SourceFreshness> {
225
+ const uuid = checkedUuid(params.uuid, ctx);
226
+ const validators = validatorsOf((await readSummary(uuid, ctx)).summary);
227
+ if (seen.modified === undefined || validators.modified === undefined) {
228
+ return { status: "unverifiable", validators };
229
+ }
230
+ return seen.modified === validators.modified
231
+ ? { status: "current", via: "modified", validators }
232
+ : { status: "changed", via: "modified", changedAt: validators.modified, validators };
233
+ },
234
+ expand: expandNdex,
235
+ });
@@ -0,0 +1,17 @@
1
+ /**
2
+ * The parameters of the NDEx source (design section 12.1). Experimental. The NDEx work may add
3
+ * optional fields only.
4
+ */
5
+
6
+ /**
7
+ * What to load from NDEx. Experimental.
8
+ * @category Network sources
9
+ */
10
+ export interface NdexParams {
11
+ /** The network's UUID ("86719f5b-1439-11f0-9806-005056ae3c32"). */
12
+ readonly uuid: string;
13
+ /** The download format. @defaultValue "cx2" */
14
+ readonly format?: "cx2" | "cx" | undefined;
15
+ /** The node attribute that identifies a node across NDEx's two id spaces (for expand): "name", "represents". */
16
+ readonly idAttribute?: string | undefined;
17
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * NDEx share links: a network's page or API URL, possibly carrying a link-share access key.
3
+ */
4
+
5
+ import { credentials } from "../credentials.js";
6
+ import { failAlone } from "../fail.js";
7
+ import { NDEX_SOURCE_ID } from "../ids.js";
8
+ import { type Credential } from "../types.js";
9
+ import { ACCESS_KEY_QUERY } from "./client.js";
10
+
11
+ /** A network UUID anywhere in a URL's path or hash. */
12
+ const UUID_IN_URL = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i;
13
+
14
+ /**
15
+ * What a share link says: the network, the NDEx server, and the access key as a credential.
16
+ * Experimental.
17
+ * @category Network sources
18
+ */
19
+ export interface NdexShareLink {
20
+ /** The params to load the network with. */
21
+ readonly params: {
22
+ /** The network's NDEx id. */
23
+ readonly uuid: string;
24
+ };
25
+ /** The NDEx server the link points at ("https://www.ndexbio.org/"). */
26
+ readonly endpoint: string;
27
+ /** The link's access key, sent only to that server; absent when the link has none. */
28
+ readonly credential?: Credential | undefined;
29
+ }
30
+
31
+ /**
32
+ * Read an NDEx share link (`https://www.ndexbio.org/viewer/networks/<uuid>?accesskey=<key>`, the
33
+ * older `#/network/<uuid>` form, or an API URL). The access key leaves the URL and becomes a
34
+ * credential bound to the link's server, so it is never logged or stored with the params.
35
+ * Rejects with `E_SOURCE_PARAM` (`name: "url"`): `reason: "format"` when the text is not a URL
36
+ * naming a network, `"credentials-in-url"` when it carries a user name or password. Experimental.
37
+ * @param url - the link
38
+ * @returns the params, endpoint and credential to load it with
39
+ * @example
40
+ * ```ts
41
+ * const link = parseShareUrl(sharedUrl);
42
+ * const { snapshot } = await loadFromSource("ndex", link.params, {
43
+ * endpoint: link.endpoint,
44
+ * credential: link.credential,
45
+ * });
46
+ * ```
47
+ * @category Network sources
48
+ */
49
+ export function parseShareUrl(url: string | URL): NdexShareLink {
50
+ let parsed: URL;
51
+ try {
52
+ parsed = new URL(url);
53
+ } catch {
54
+ return refuse("format");
55
+ }
56
+ if (parsed.username !== "" || parsed.password !== "") {
57
+ return refuse("credentials-in-url");
58
+ }
59
+ // the older viewer keeps the network and its key in the hash
60
+ const hash = new URL(parsed.hash.replace(/^#/, ""), "https://hash.invalid/");
61
+ const uuid = UUID_IN_URL.exec(`${parsed.pathname} ${hash.pathname}`)?.[0];
62
+ if (uuid === undefined || (parsed.protocol !== "https:" && parsed.protocol !== "http:")) {
63
+ return refuse("format");
64
+ }
65
+ // the bare host redirects to www without CORS headers, so a page cannot follow it
66
+ const host = parsed.host.toLowerCase() === "ndexbio.org" ? "www.ndexbio.org" : parsed.host;
67
+ const endpoint = `${parsed.protocol}//${host}/`;
68
+ const key = parsed.searchParams.get(ACCESS_KEY_QUERY) ?? hash.searchParams.get(ACCESS_KEY_QUERY);
69
+ const params = { uuid: uuid.toLowerCase() };
70
+ if (key === null || key === "") {
71
+ return { params, endpoint };
72
+ }
73
+ const credential = credentials.apiKey({ query: ACCESS_KEY_QUERY }, key, { origins: [new URL(endpoint).origin] });
74
+ return { params, endpoint, credential };
75
+ }
76
+
77
+ /**
78
+ * Reject a share link.
79
+ * @param reason - why
80
+ * @returns never
81
+ */
82
+ function refuse(reason: "format" | "credentials-in-url"): never {
83
+ return failAlone("E_SOURCE_PARAM", "not an NDEx share link", { name: "url", reason }, `source:${NDEX_SOURCE_ID}`);
84
+ }