@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
@@ -12,7 +12,9 @@
12
12
  * character references in strings, `Creator` / `Version` top-level metadata, `directed 0|1` and
13
13
  * `multigraph 0|1` graph flags, comments, keys and values on one line or split across lines, and
14
14
  * a `graphics [ x y z ]` node record mapped to the `position` role (note 07 section 9) with the
15
- * remaining graphics keys kept as a json column.
15
+ * remaining graphics keys kept as a json column, yEd's `gid` (the group a node sits in) read
16
+ * into the parent column as well as kept as a plain column, and OGDF's `rootcluster` read as group
17
+ * nodes (`cluster<id>`) holding their vertices through the parent column.
16
18
  *
17
19
  * Node ids are the `id` keys under `nodeIdFrom: "id"`, the `label` under `"label"`, and the node's
18
20
  * ordinal under `"index"`; `source` / `target` always resolve through the `id` keys. The GML spec
@@ -199,10 +201,14 @@ export const GRAPHICS_CODE = "W_GML_GRAPHICS";
199
201
  */
200
202
  export const NESTED_ELEMENT_CODE = "W_GML_NESTED_ELEMENT";
201
203
  /**
202
- * YEd's group keys (`isGroup`, `gid`); kept as plain node columns, the hierarchy is not read as containment.
204
+ * A yEd `gid` that names no other node: it stays a plain column value and puts the node in no group. Also an OGDF
205
+ * cluster `vertex` that names no node (it is in no cluster), and a cluster whose id a node has (it is read as no group).
203
206
  * @category Issue and loss codes
204
207
  */
205
208
  export const GROUPS_CODE = "W_GML_GROUPS";
209
+
210
+ /** The parent column yEd's `gid` keys and OGDF's clusters are read into. */
211
+ const GROUP_PARENT_COLUMN = "graphty.parent";
206
212
  /**
207
213
  * A key whose values mix numbers and strings; the column is string, the numbers kept as written.
208
214
  * @category Issue and loss codes
@@ -449,6 +455,18 @@ class GmlImport {
449
455
  /** The file ids of node blocks that were skipped: an edge naming one is skipped too, never given a new node. */
450
456
  private readonly skippedIds = new Set<NodeId>();
451
457
 
458
+ /** Each node's yEd `gid` (its group's file id): the node's index and the value token. */
459
+ private readonly groupRefs: [node: number, token: number][] = [];
460
+
461
+ /** The `[` of OGDF's `rootcluster` record (its cluster tree, after the graph block), or -1. */
462
+ private rootCluster = -1;
463
+
464
+ /** The parent column, once a node is given a parent. */
465
+ private parentHandle: ColumnHandle | null = null;
466
+
467
+ /** How many OGDF clusters were read, which names a cluster without an id. */
468
+ private clusterCount = 0;
469
+
452
470
  /** Node indices declared by a node block of this import, for duplicate detection. */
453
471
  private declared = new Uint32Array(64);
454
472
 
@@ -543,6 +561,9 @@ class GmlImport {
543
561
  this.creatorToken = v;
544
562
  } else if (key === "Version" && !record && this.versionToken < 0) {
545
563
  this.versionToken = v;
564
+ } else if (key === "rootcluster" && record && this.rootCluster < 0) {
565
+ // OGDF's cluster tree is structure: its clusters are read as group nodes (pushClusters)
566
+ this.rootCluster = v;
546
567
  } else {
547
568
  this.observe(this.topSchema, "graph", key, v, TOP_SEQ);
548
569
  }
@@ -744,7 +765,7 @@ class GmlImport {
744
765
 
745
766
  /**
746
767
  * Warn about keys of a node or edge whose meaning GML readers give but this import does not:
747
- * a nested graph / node / edge record, and yEd's group hierarchy.
768
+ * a nested graph / node / edge record.
748
769
  * @param domain - the table
749
770
  * @param key - the key
750
771
  * @param v - the value token
@@ -762,13 +783,6 @@ class GmlImport {
762
783
  { line: t.line[v], element: key },
763
784
  `${NESTED_ELEMENT_CODE}:${domain}:${key}`,
764
785
  );
765
- } else if (domain === "node" && (key === "isGroup" || key === "gid")) {
766
- this.report.warnOnce(
767
- "unsupported",
768
- GROUPS_CODE,
769
- "yEd group keys (isGroup, gid) are kept as plain node columns; the group hierarchy is not read as containment",
770
- { line: t.line[v], element: key },
771
- );
772
786
  }
773
787
  }
774
788
 
@@ -829,9 +843,162 @@ class GmlImport {
829
843
  }
830
844
  this.pushTopLevel();
831
845
  this.pushNodes();
846
+ this.pushGroups();
847
+ this.pushClusters();
832
848
  this.pushEdges();
833
849
  }
834
850
 
851
+ /**
852
+ * Read yEd's group hierarchy into the parent column: a node's `gid` names the group node it sits in. A `gid` that
853
+ * names no node (or the node itself) is warned once and left a plain column value.
854
+ */
855
+ private pushGroups(): void {
856
+ const t = this.requireTokens();
857
+ for (const [node, v] of this.groupRefs) {
858
+ let parent: number = INVALID_INDEX;
859
+ try {
860
+ const fileId = this.coerceFileId(v, this.fileIdOf(v, "gid"));
861
+ parent = this.sink.indexOf(this.idMap?.get(fileId) ?? fileId);
862
+ } catch {
863
+ parent = INVALID_INDEX;
864
+ }
865
+ if (parent === INVALID_INDEX || parent === node) {
866
+ this.report.warnOnce(
867
+ "validation-error",
868
+ GROUPS_CODE,
869
+ `gid ${t.kind[v] === TOKEN_OPEN ? "[...]" : t.textOf(v)} names no other node; it is kept as a plain column value`,
870
+ { line: t.line[v], element: "gid" },
871
+ );
872
+ continue;
873
+ }
874
+ this.setParent(node, parent, "gid");
875
+ }
876
+ }
877
+
878
+ /**
879
+ * Put a node in a group: the parent column, declared on first use.
880
+ * @param node - the node's index
881
+ * @param parent - the group node's index
882
+ * @param type - the file key the hierarchy came from (`gid`, `rootcluster`)
883
+ */
884
+ private setParent(node: number, parent: number, type: string): void {
885
+ this.parentHandle ??= this.sink.declareNodeColumn({
886
+ name: uniqueColumnName(GROUP_PARENT_COLUMN, null, (c) => this.sink.nodeColumn(c) !== INVALID_INDEX),
887
+ dtype: "u32",
888
+ role: "parent",
889
+ refersTo: "node",
890
+ nullable: true,
891
+ origin: { format: "gml", id: null, title: null, type, namespace: null },
892
+ });
893
+ this.sink.setNodeValue(this.parentHandle, node, parent);
894
+ }
895
+
896
+ /**
897
+ * Read OGDF's cluster tree (`rootcluster`, GraphIO::writeGML): every cluster below the root becomes a group node
898
+ * (id `cluster<id>`) holding its `vertex` nodes and its child clusters, with its label, its box as the node's
899
+ * center and size, and its graphics as a node's (`color` is the outline, `style` the shape, `stipple` kept as
900
+ * `clusterStipple`, since OGDF draws a cluster's outline solid). The root cluster is
901
+ * the whole graph and draws nothing of its own. A `vertex` that names no node is warned once.
902
+ */
903
+ private pushClusters(): void {
904
+ if (this.rootCluster < 0) {
905
+ return;
906
+ }
907
+ const t = this.requireTokens();
908
+ const stack: [open: number, parent: number][] = [[this.rootCluster, INVALID_INDEX]];
909
+ for (let frame = stack.pop(); frame !== undefined; frame = stack.pop()) {
910
+ const [open, parent] = frame;
911
+ for (let p = open + 1; p < t.match[open]; p = t.nextPair(p)) {
912
+ const key = t.textOf(p);
913
+ const v = p + 1;
914
+ if (key === "cluster" && t.kind[v] === TOKEN_OPEN) {
915
+ const cluster = this.addCluster(v, parent);
916
+ if (cluster !== INVALID_INDEX) {
917
+ stack.push([v, cluster]);
918
+ }
919
+ } else if (key === "vertex" && parent !== INVALID_INDEX) {
920
+ this.addClusterVertex(v, parent);
921
+ }
922
+ }
923
+ }
924
+ }
925
+
926
+ /**
927
+ * Put a cluster's `vertex` in it.
928
+ * @param v - the value token, the vertex's id as a string
929
+ * @param cluster - the cluster's group node
930
+ */
931
+ private addClusterVertex(v: number, cluster: number): void {
932
+ const t = this.requireTokens();
933
+ const id = t.kind[v] === TOKEN_STRING ? this.coercer.text(t.stringOf(v)) : null;
934
+ const node = id === null ? INVALID_INDEX : this.sink.indexOf(this.idMap?.get(id) ?? id);
935
+ if (node === INVALID_INDEX || node === cluster) {
936
+ this.report.warnOnce(
937
+ "validation-error",
938
+ GROUPS_CODE,
939
+ `cluster vertex ${describeValue(t, v)} names no node; it is in no cluster`,
940
+ { line: t.line[v], element: "vertex" },
941
+ );
942
+ return;
943
+ }
944
+ this.setParent(node, cluster, "rootcluster");
945
+ }
946
+
947
+ /**
948
+ * Add one OGDF cluster as a group node: its label, and its graphics box (x, y its top-left corner, width and
949
+ * height) as a node's center, w and h.
950
+ * @param open - the cluster record's `[`
951
+ * @param parent - the group node of the cluster it is in, or INVALID_INDEX under the root
952
+ * @returns the group node's index, or INVALID_INDEX when its id is taken
953
+ */
954
+ private addCluster(open: number, parent: number): number {
955
+ const t = this.requireTokens();
956
+ const record = parseRecord(t, open);
957
+ const ordinal = this.clusterCount++;
958
+ const ownId = typeof record.id === "number" || typeof record.id === "string" ? String(record.id) : null;
959
+ const fallback = `#${String(ordinal)}`;
960
+ const id = `cluster${ownId ?? fallback}`;
961
+ if (this.sink.indexOf(id) !== INVALID_INDEX) {
962
+ this.report.warnOnce(
963
+ "validation-error",
964
+ GROUPS_CODE,
965
+ `cluster ${id} has the id of a node; it is read as no group`,
966
+ { line: t.line[open], element: id },
967
+ );
968
+ return INVALID_INDEX;
969
+ }
970
+ const index = this.sink.addNode(id);
971
+ this.report.counts.nodes++;
972
+ if (parent !== INVALID_INDEX) {
973
+ this.setParent(index, parent, "rootcluster");
974
+ }
975
+ const label = this.nodePlans.get("label");
976
+ if (typeof record.label === "string" && record.label !== "" && label?.kind === "string" && !label.list) {
977
+ this.sink.setNodeValue(this.handleOf(label, "node"), index, record.label);
978
+ }
979
+ const graphics = this.nodePlans.get("graphics");
980
+ const g = isRecord(record.graphics) ? record.graphics : null;
981
+ if (g === null || graphics?.position === undefined || graphics.position === null) {
982
+ return index;
983
+ }
984
+ // GraphIO::drawSVG draws a cluster's outline solid whatever its stipple: it is kept under a name of its own
985
+ const { x, y, width, height, color, style, stipple, ...rest } = g;
986
+ if (typeof x === "number" && typeof y === "number" && typeof width === "number" && typeof height === "number") {
987
+ this.sink.setNodeValue(this.handleOf(graphics.position, "node"), index, [x + width / 2, y + height / 2, 0]);
988
+ Object.assign(rest, { w: width, h: height });
989
+ }
990
+ Object.assign(
991
+ rest,
992
+ color === undefined ? {} : { outline: color },
993
+ style === undefined ? {} : { type: style },
994
+ stipple === undefined ? {} : { clusterStipple: stipple },
995
+ );
996
+ if (graphics.rest !== null) {
997
+ this.sink.setNodeValue(this.handleOf(graphics.rest, "node"), index, rest);
998
+ }
999
+ return index;
1000
+ }
1001
+
835
1002
  /** Turn every schema entry into a column plan. */
836
1003
  private buildPlans(): void {
837
1004
  for (const [key, entry] of this.nodeSchema) {
@@ -1130,13 +1297,87 @@ class GmlImport {
1130
1297
  );
1131
1298
  }
1132
1299
 
1300
+ /**
1301
+ * Find a node block's id, label and original-id values.
1302
+ * @param open - the block's `[`
1303
+ * @param close - the block's `]`
1304
+ * @returns each key's value token, or -1 when the block has none
1305
+ */
1306
+ private nodeKeyTokens(open: number, close: number): { idTok: number; labelTok: number; originalTok: number } {
1307
+ const t = this.requireTokens();
1308
+ let idTok = -1;
1309
+ let labelTok = -1;
1310
+ let originalTok = -1;
1311
+ for (let p = open + 1; p < close; p = t.nextPair(p)) {
1312
+ const key = t.textOf(p);
1313
+ if (key === "id") {
1314
+ idTok = this.structuralToken(idTok, p, "id");
1315
+ } else if (key === "label") {
1316
+ labelTok = labelTok < 0 ? p + 1 : labelTok;
1317
+ } else if (key === ORIGINAL_ID_KEY && this.options.restoreMangledIds) {
1318
+ originalTok = originalTok < 0 ? p + 1 : originalTok;
1319
+ }
1320
+ }
1321
+ return { idTok, labelTok, originalTok };
1322
+ }
1323
+
1324
+ /**
1325
+ * The id a node is added to the sink under: its restored original id, else its label, its
1326
+ * ordinal or its file id, as `nodeIdFrom` says.
1327
+ * @param fileId - the node's file id
1328
+ * @param labelTok - its label's value token, or -1
1329
+ * @param originalTok - its original id's value token, or -1
1330
+ * @param ordinal - its position among the file's nodes
1331
+ * @returns the sink id
1332
+ */
1333
+ private nodeSinkId(fileId: NodeId, labelTok: number, originalTok: number, ordinal: number): NodeId {
1334
+ if (originalTok >= 0) {
1335
+ return this.restoredId(originalTok);
1336
+ }
1337
+ switch (this.options.nodeIdFrom) {
1338
+ case "label":
1339
+ if (labelTok < 0) {
1340
+ throw new GraphFormatError("E_INVALID_ID", "node has no label", {
1341
+ reason: "missing label",
1342
+ });
1343
+ }
1344
+ return this.coerceValueToken(labelTok);
1345
+ case "index":
1346
+ return ordinal;
1347
+ default:
1348
+ return fileId;
1349
+ }
1350
+ }
1351
+
1352
+ /**
1353
+ * Note which sink id a file id resolves to, warning when a file id is declared twice.
1354
+ * @param fileId - the file id
1355
+ * @param sinkId - the sink id it now resolves to
1356
+ * @param line - the node block's line
1357
+ */
1358
+ private mapFileId(fileId: NodeId, sinkId: NodeId, line: number): void {
1359
+ if (this.idMap === null) {
1360
+ return;
1361
+ }
1362
+ const before = this.idMap.get(fileId);
1363
+ if (before !== undefined && before !== sinkId) {
1364
+ this.report.warning(
1365
+ "merged",
1366
+ DUPLICATE_NODE_CODE,
1367
+ `file id ${JSON.stringify(fileId)} is declared twice (nodes ${JSON.stringify(before)} and ${JSON.stringify(sinkId)}); edges to it resolve to the later`,
1368
+ { line, element: String(fileId) },
1369
+ );
1370
+ }
1371
+ this.idMap.set(fileId, sinkId);
1372
+ }
1373
+
1133
1374
  /**
1134
1375
  * Push one node block.
1135
1376
  * @param open - the block's `[`
1136
1377
  */
1137
1378
  private importNode(open: number): void {
1138
1379
  const t = this.requireTokens();
1139
- const { sink, report, options } = this;
1380
+ const { sink, report } = this;
1140
1381
  const close = t.match[open];
1141
1382
  const line = t.line[open];
1142
1383
  const ordinal = this.nodeOrdinal++;
@@ -1145,57 +1386,16 @@ class GmlImport {
1145
1386
  let sinkId: NodeId;
1146
1387
  let fileId: NodeId | undefined;
1147
1388
  try {
1148
- let idTok = -1;
1149
- let labelTok = -1;
1150
- let originalTok = -1;
1151
- for (let p = open + 1; p < close; p = t.nextPair(p)) {
1152
- const key = t.textOf(p);
1153
- if (key === "id") {
1154
- idTok = this.structuralToken(idTok, p, "id");
1155
- } else if (key === "label") {
1156
- labelTok = labelTok < 0 ? p + 1 : labelTok;
1157
- } else if (key === ORIGINAL_ID_KEY && options.restoreMangledIds) {
1158
- originalTok = originalTok < 0 ? p + 1 : originalTok;
1159
- }
1160
- }
1389
+ const { idTok, labelTok, originalTok } = this.nodeKeyTokens(open, close);
1161
1390
  if (idTok < 0) {
1162
1391
  throw new GraphFormatError("E_INVALID_ID", "node has no id", { reason: "missing id" });
1163
1392
  }
1164
1393
  // the file id under the ids rule, so `id 1` and `source "1"` meet in idMap (except under
1165
1394
  // "keep", where the integer 1 and the string "1" are different ids by design)
1166
1395
  fileId = this.coerceFileId(idTok, this.fileIdOf(idTok, "id"));
1167
- if (originalTok >= 0) {
1168
- sinkId = this.restoredId(originalTok);
1169
- } else {
1170
- switch (options.nodeIdFrom) {
1171
- case "label":
1172
- if (labelTok < 0) {
1173
- throw new GraphFormatError("E_INVALID_ID", "node has no label", {
1174
- reason: "missing label",
1175
- });
1176
- }
1177
- sinkId = this.coerceValueToken(labelTok);
1178
- break;
1179
- case "index":
1180
- sinkId = ordinal;
1181
- break;
1182
- default:
1183
- sinkId = fileId;
1184
- }
1185
- }
1396
+ sinkId = this.nodeSinkId(fileId, labelTok, originalTok, ordinal);
1186
1397
  index = sink.addNode(sinkId);
1187
- if (this.idMap !== null) {
1188
- const before = this.idMap.get(fileId);
1189
- if (before !== undefined && before !== sinkId) {
1190
- report.warning(
1191
- "merged",
1192
- DUPLICATE_NODE_CODE,
1193
- `file id ${JSON.stringify(fileId)} is declared twice (nodes ${JSON.stringify(before)} and ${JSON.stringify(sinkId)}); edges to it resolve to the later`,
1194
- { line, element: String(fileId) },
1195
- );
1196
- }
1197
- this.idMap.set(fileId, sinkId);
1198
- }
1398
+ this.mapFileId(fileId, sinkId, line);
1199
1399
  } catch (err) {
1200
1400
  this.recordNodeError(err, line);
1201
1401
  report.counts.skippedNodes++;
@@ -1217,27 +1417,7 @@ class GmlImport {
1217
1417
  }
1218
1418
  this.beginElement(this.seq++);
1219
1419
  try {
1220
- const graphics: number[] = [];
1221
- let graphicsPlan: ColumnPlan | null = null;
1222
- for (let p = open + 1; p < close; p = t.nextPair(p)) {
1223
- const key = t.textOf(p);
1224
- if (key === "id" || (key === ORIGINAL_ID_KEY && options.restoreMangledIds)) {
1225
- continue;
1226
- }
1227
- const plan = this.nodePlans.get(key);
1228
- if (plan !== undefined && plan.position !== null) {
1229
- graphicsPlan = plan;
1230
- graphics.push(p + 1);
1231
- } else if (plan !== undefined) {
1232
- this.writeNode(plan, index, p + 1);
1233
- }
1234
- }
1235
- if (graphicsPlan !== null) {
1236
- this.writeGraphics(graphicsPlan, index, graphics, {
1237
- line: t.line[graphics[0]],
1238
- element: String(sinkId),
1239
- });
1240
- }
1420
+ this.writeNodeKeys(open, index, sinkId);
1241
1421
  this.flushLists("node", index);
1242
1422
  } catch (err) {
1243
1423
  this.touched.length = 0;
@@ -1245,6 +1425,41 @@ class GmlImport {
1245
1425
  }
1246
1426
  }
1247
1427
 
1428
+ /**
1429
+ * Write one node block's keys into its columns: its graphics record into the position plan, a yEd `gid` noted
1430
+ * for the group hierarchy, and every other planned key as it is.
1431
+ * @param open - the block's `[`
1432
+ * @param index - the node's index
1433
+ * @param sinkId - the node's id, for the report
1434
+ */
1435
+ private writeNodeKeys(open: number, index: number, sinkId: NodeId): void {
1436
+ const t = this.requireTokens();
1437
+ const graphics: number[] = [];
1438
+ let graphicsPlan: ColumnPlan | null = null;
1439
+ for (let p = open + 1; p < t.match[open]; p = t.nextPair(p)) {
1440
+ const key = t.textOf(p);
1441
+ if (key === "id" || (key === ORIGINAL_ID_KEY && this.options.restoreMangledIds)) {
1442
+ continue;
1443
+ }
1444
+ if (key === "gid") {
1445
+ this.groupRefs.push([index, p + 1]);
1446
+ }
1447
+ const plan = this.nodePlans.get(key);
1448
+ if (plan !== undefined && plan.position !== null) {
1449
+ graphicsPlan = plan;
1450
+ graphics.push(p + 1);
1451
+ } else if (plan !== undefined) {
1452
+ this.writeNode(plan, index, p + 1);
1453
+ }
1454
+ }
1455
+ if (graphicsPlan !== null) {
1456
+ this.writeGraphics(graphicsPlan, index, graphics, {
1457
+ line: t.line[graphics[0]],
1458
+ element: String(sinkId),
1459
+ });
1460
+ }
1461
+ }
1462
+
1248
1463
  /**
1249
1464
  * Push one edge block.
1250
1465
  * @param open - the block's `[`
@@ -126,7 +126,7 @@ export const GML_ISSUE = Object.freeze({
126
126
  GRAPHICS: GRAPHICS_CODE,
127
127
  /** A graph, node or edge record nested in a node or edge; kept as json, not read as structure. */
128
128
  NESTED_ELEMENT: NESTED_ELEMENT_CODE,
129
- /** YEd's isGroup / gid keys, kept as plain columns; the hierarchy is not read as containment. */
129
+ /** A yEd `gid` that names no other node; it stays a plain column value and puts the node in no group. */
130
130
  GROUPS: GROUPS_CODE,
131
131
  /**
132
132
  * An attribute's type was widened because a later value did not fit: an integer above 2^31 in an integer column,
@@ -22,30 +22,52 @@ export function gmlPositions(snapshot: GraphSnapshot): ImporterPositions | null
22
22
  if (snapshot.nodes.byRole("position") === null) {
23
23
  return null;
24
24
  }
25
- const tool = toolOf(snapshot.meta.creator);
25
+ // Gephi writes its Creator line inside the graph
26
+ const inGraph = snapshot.graph.has("Creator") ? snapshot.graph.value("Creator", 0) : null;
27
+ const gv2gml = writtenByGv2gml(snapshot);
28
+ const graphCreator = typeof inGraph === "string" ? inGraph : null;
29
+ const tool = gv2gml ? "graphviz" : toolOf(snapshot.meta.creator ?? graphCreator);
26
30
  return {
27
31
  units: "px",
28
32
  // a z that is the same on every node collapses to 2D
29
33
  sourceDims: 3,
30
- yAxis: tool === "gephi" || tool === "tulip" ? "up" : "down",
34
+ // gv2gml writes Graphviz's own coordinates, y up
35
+ yAxis: tool === "gephi" || tool === "tulip" || gv2gml ? "up" : "down",
31
36
  tool,
32
- medianNodeSize: graphicsMedian(snapshot),
37
+ medianNodeSize: graphicsMedian(snapshot, tool === "gephi"),
33
38
  };
34
39
  }
35
40
 
41
+ /**
42
+ * Whether Graphviz's gv2gml wrote a GML file: no `Creator` line, and the `version 2` it writes first in the graph
43
+ * (cmd/tools/gv2gml.c gv_to_gml).
44
+ * @param snapshot - the graph the GML importer read
45
+ * @returns true for gv2gml's GML
46
+ */
47
+ export function writtenByGv2gml(snapshot: GraphSnapshot): boolean {
48
+ if ((snapshot.meta.creator ?? null) !== null || snapshot.graph.has("Creator") || !snapshot.graph.has("version")) {
49
+ return false;
50
+ }
51
+ return Number(snapshot.graph.value("version", 0)) === 2;
52
+ }
53
+
36
54
  /**
37
55
  * The median node diameter from the graphics records' `w` and `h`.
38
56
  * @param snapshot - the graph
57
+ * @param gephi - whether Gephi wrote the file: its `w` is a node's size, a radius, and its `h` is ignored
39
58
  * @returns the median of each node's mean of w and h, or null when no node has both
40
59
  */
41
- function graphicsMedian(snapshot: GraphSnapshot): number | null {
60
+ function graphicsMedian(snapshot: GraphSnapshot, gephi: boolean): number | null {
42
61
  const graphics = snapshot.nodes.get(GRAPHICS_COLUMN);
43
62
  const sizes: number[] = [];
44
63
  for (let row = 0; graphics !== null && row < graphics.length; row++) {
45
64
  const g = graphics.isSet(row) ? graphics.value(row) : undefined;
46
- const { w, h } = typeof g === "object" && g !== null ? (g as Record<string, unknown>) : {};
47
- if (typeof w === "number" && typeof h === "number") {
48
- sizes.push((w + h) / 2);
65
+ const { w, h, H } = typeof g === "object" && g !== null ? (g as Record<string, unknown>) : {};
66
+ if (gephi && typeof w === "number") {
67
+ sizes.push(2 * w);
68
+ } else if (typeof w === "number" && typeof (h ?? H) === "number") {
69
+ // gv2gml writes the height as H
70
+ sizes.push((w + Number(h ?? H)) / 2);
49
71
  }
50
72
  }
51
73
  return median(sizes);