@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
@@ -1,12 +1,13 @@
1
1
  /**
2
2
  * yFiles 3 styles (yFiles for HTML, yEd Live): the per-element style objects of the `NodeStyle`, `EdgeStyle`,
3
- * `NodeLabels`, `EdgeLabels` and `NodeGeometry` keys, inline or by reference to the graph's `SharedData`, read into
3
+ * `NodeLabels`, `EdgeLabels`, `NodeGeometry` and `EdgeGeometry` keys, inline or by reference to the graph's `SharedData`, read into
4
4
  * the neutral style vocabulary. References are resolved by value with a depth limit; a reference that is circular
5
5
  * or deeper than the limit is one `W_STYLE_REFERENCE_CYCLE` note, never a hang.
6
6
  */
7
7
 
8
8
  import type { GraphSnapshot } from "@graphty/graph-format";
9
9
 
10
+ import { type BendPoint, canonBends, canonNodeOffsets } from "../../styles/canon/bends.js";
10
11
  import { canonColor, colorOpacity } from "../../styles/canon/color.js";
11
12
  import { canonEnum } from "../../styles/canon/enums.js";
12
13
  import { canonNumber } from "../../styles/canon/number.js";
@@ -17,6 +18,7 @@ import type { StyleNotes } from "../../styles/notes.js";
17
18
  import { plainCell } from "../../styles/plan/resolve.js";
18
19
  import type { StyleDialect, StyleTarget, StyleWorkBudget } from "../../styles/types.js";
19
20
  import {
21
+ configurationOutline,
20
22
  isTree,
21
23
  localOf,
22
24
  type PutValue,
@@ -26,6 +28,7 @@ import {
26
28
  treeChildren,
27
29
  treeText,
28
30
  valueColumns,
31
+ type YedOutline,
29
32
  type YedRead,
30
33
  } from "./styles-yed.js";
31
34
 
@@ -54,8 +57,15 @@ const REFERENCE = /^\{\s*[\w.-]*:?GraphMLReference\s+([^\s}]+)\s*\}$/;
54
57
  const NULL_MARKUP = /^\{\s*[\w.-]*:?Null\s*\}$/;
55
58
 
56
59
  /** The yFiles key types the reader reads, by the last segment of their `attr.uri`. */
57
- type KeyKind = "NodeStyle" | "EdgeStyle" | "NodeLabels" | "EdgeLabels" | "NodeGeometry" | "SharedData";
58
- const KINDS: ReadonlySet<string> = new Set(["NodeStyle", "EdgeStyle", "NodeLabels", "EdgeLabels", "NodeGeometry"]);
60
+ type KeyKind = "NodeStyle" | "EdgeStyle" | "NodeLabels" | "EdgeLabels" | "NodeGeometry" | "EdgeGeometry" | "SharedData";
61
+ const KINDS: ReadonlySet<string> = new Set([
62
+ "NodeStyle",
63
+ "EdgeStyle",
64
+ "NodeLabels",
65
+ "EdgeLabels",
66
+ "NodeGeometry",
67
+ "EdgeGeometry",
68
+ ]);
59
69
 
60
70
  /**
61
71
  * The kind of a yFiles 3 column, from the `attr.uri` the importer keeps as its origin type.
@@ -349,14 +359,146 @@ function putPaint(pt: Paint, property: string, opacity: string | null, put: PutV
349
359
  }
350
360
  }
351
361
 
362
+ /** yFiles' black, the documented default color of the 2.6 Bevel, ShinyPlate and Panel styles. */
363
+ const BLACK = "#FF000000";
364
+
365
+ /** The demos' FlowchartNodeStyle defaults (yfiles-for-html-demos v2.6, FlowchartStyle.ts): fill rgb(183, 201, 227). */
366
+ const FLOWCHART_FILL = "#FFB7C9E3";
367
+
368
+ /**
369
+ * yFiles for HTML 2.6 ShapeNodeShape names the neutral shapes do not spell, as the shape yFiles documents them as:
370
+ * SHEARED_RECTANGLE sheared to the right and SHEARED_RECTANGLE2 to the left, TRAPEZ smaller at the bottom and TRAPEZ2
371
+ * at the top, TRIANGLE2 pointing to the bottom, FAT_ARROW an arrow pointing to the right and FAT_ARROW2 to the left
372
+ * (ShapeNodeShape API docs). A mirrored or turned shape is the polygon of its corners (`x,y` fractions of the half
373
+ * sizes, y up). STAR5_UP is a star; PILL, a stadium, is a rectangle with half-circle ends.
374
+ */
375
+ const SHAPES_26: ReadonlyMap<string, YedOutline> = new Map<string, YedOutline>([
376
+ ["sheared-rectangle", { shape: "parallelogram" }],
377
+ ["sheared-rectangle2", { shape: "polygon", points: "-0.5,-1 1,-1 0.5,1 -1,1" }],
378
+ ["trapez", { shape: "polygon", points: "-0.5,-1 0.5,-1 1,1 -1,1" }],
379
+ ["trapez2", { shape: "trapezoid" }],
380
+ ["star5-up", { shape: "star" }],
381
+ ["triangle2", { shape: "polygon", points: "-1,1 0,-1 1,1" }],
382
+ ["fat-arrow", { shape: "polygon", points: "-1,-1 0.6,-1 1,0 0.6,1 -1,1 -0.6,0" }],
383
+ ["fat-arrow2", { shape: "polygon", points: "-0.6,-1 1,-1 0.6,0 1,1 -0.6,1 -1,0" }],
384
+ ["pill", { shape: "round-rectangle" }],
385
+ ]);
386
+
387
+ /** ShapeNodeStyle's ROUND_RECTANGLE corner size (ShapeNodeShape API docs: "The corner size is 10"). */
388
+ const ROUND_RECTANGLE_CORNER = 10;
389
+
390
+ /** A node's size from its NodeGeometry, where it has one. */
391
+ interface Size {
392
+ readonly width: number;
393
+ readonly height: number;
394
+ }
395
+
396
+ /**
397
+ * A rounded box's corner: a radius of 0 is a plain box.
398
+ * @param radius - the style's `radius` attribute
399
+ * @param fallback - the style's documented default radius
400
+ * @param put - receives the values
401
+ * @param at - the sites
402
+ */
403
+ function putRounded(radius: string | undefined, fallback: number, put: PutValue, at: SiteOf): void {
404
+ const r = radius === undefined ? fallback : canonNumber(radius, at("cornerRadius"));
405
+ if (r === 0) {
406
+ put("shape", "rectangle");
407
+ return;
408
+ }
409
+ put("shape", "round-rectangle");
410
+ put("cornerRadius", r);
411
+ }
412
+
413
+ /**
414
+ * Reads the yFiles for HTML 2.6 node styles yEd Live wrote before yFiles 3, and the demos' FlowchartNodeStyle:
415
+ * BevelNodeStyle and PanelNodeStyle (a `color` fill, no outline), ShinyPlateNodeStyle (an outline only where `stroke`
416
+ * is set) and FlowchartNodeStyle (its `type`'s outline, drawn as yEd's flowchart palette draws the same type).
417
+ * @param refs - the references
418
+ * @param style - the style
419
+ * @param put - receives the values
420
+ * @param at - the sites
421
+ * @returns true when the style is one of these
422
+ */
423
+ function readStyle26(refs: References, style: StyleObject, put: PutValue, at: SiteOf): boolean {
424
+ const fill = (v: unknown): void => {
425
+ const gradient = (): void => {
426
+ noteAt(at("fill"), STYLE_ISSUE.GRADIENT, style.tag);
427
+ };
428
+ putPaint(paintOf(refs, v, gradient), "fill", "fillOpacity", put, at);
429
+ };
430
+ switch (style.tag) {
431
+ case "BevelNodeStyle":
432
+ fill(prop(style, "color") ?? BLACK);
433
+ put("borderWidth", 0);
434
+ putRounded(treeAttr(style.e, "radius"), 10, put, at);
435
+ return true;
436
+ case "PanelNodeStyle":
437
+ fill(prop(style, "color") ?? BLACK);
438
+ put("borderWidth", 0);
439
+ put("shape", "rectangle");
440
+ return true;
441
+ case "ShinyPlateNodeStyle": {
442
+ fill(prop(style, "fill") ?? BLACK);
443
+ const stroke = prop(style, "stroke");
444
+ if (stroke === undefined) {
445
+ put("borderWidth", 0);
446
+ } else {
447
+ putStroke(strokeOf(refs, stroke), put, at);
448
+ }
449
+ putRounded(treeAttr(style.e, "radius"), 5, put, at);
450
+ return true;
451
+ }
452
+ case "FlowchartNodeStyle": {
453
+ fill(prop(style, "fill") ?? FLOWCHART_FILL);
454
+ const type = treeAttr(style.e, "type") ?? "";
455
+ // an annotation's box has no outline (its bracket is not drawn); a style without a type draws the same
456
+ // box, outlined
457
+ if (type === "annotation") {
458
+ put("borderWidth", 0);
459
+ } else {
460
+ putStroke(strokeOf(refs, prop(style, "stroke") ?? BLACK), put, at);
461
+ }
462
+ const outline = type === "" || type === "annotation" ? null : configurationOutline(`flowchart.${type}`);
463
+ if (outline === null && type !== "" && type !== "annotation") {
464
+ noteAt(at("shape"), STYLE_ISSUE.UNKNOWN_VALUE, type.slice(0, MAX_STYLE_VALUE_LENGTH));
465
+ }
466
+ put("shape", outline?.shape ?? "rectangle");
467
+ if (outline?.points !== undefined) {
468
+ put("shapePoints", outline.points);
469
+ }
470
+ return true;
471
+ }
472
+ default:
473
+ return false;
474
+ }
475
+ }
476
+
477
+ /**
478
+ * Writes a stroke's color, width and line style, or no outline for `{x:Null}`.
479
+ * @param stroke - the stroke
480
+ * @param put - receives the values
481
+ * @param at - the sites
482
+ */
483
+ function putStroke(stroke: Stroke | typeof NULL | null, put: PutValue, at: SiteOf): void {
484
+ if (stroke === NULL) {
485
+ put("borderWidth", 0);
486
+ } else if (stroke !== null) {
487
+ putPaint(stroke.color, "borderColor", "borderOpacity", put, at);
488
+ put("borderWidth", canonNumber(stroke.width, at("borderWidth")));
489
+ put("borderStyle", canonEnum("borderStyle", stroke.line, "yfiles3", at("borderStyle")));
490
+ }
491
+ }
492
+
352
493
  /**
353
494
  * Reads a node style.
354
495
  * @param refs - the references
355
496
  * @param data - the `<data>` content of the NodeStyle key
356
497
  * @param put - receives the values
357
498
  * @param at - the sites
499
+ * @param size - the node's size, for a PILL's half-circle ends
358
500
  */
359
- function readNodeStyle(refs: References, data: unknown, put: PutValue, at: SiteOf): void {
501
+ function readNodeStyle(refs: References, data: unknown, put: PutValue, at: SiteOf, size: Size | null): void {
360
502
  const st = unwrapped(refs, refs.first(data));
361
503
  if (st === null || typeof st !== "object") {
362
504
  if (data !== null && data !== undefined && data !== "") {
@@ -365,6 +507,9 @@ function readNodeStyle(refs: References, data: unknown, put: PutValue, at: SiteO
365
507
  return;
366
508
  }
367
509
  const style = st;
510
+ if (readStyle26(refs, style, put, at)) {
511
+ return;
512
+ }
368
513
  putPaint(
369
514
  paintOf(refs, prop(style, "fill"), () => {
370
515
  noteAt(at("fill"), STYLE_ISSUE.GRADIENT, style.tag);
@@ -374,19 +519,33 @@ function readNodeStyle(refs: References, data: unknown, put: PutValue, at: SiteO
374
519
  put,
375
520
  at,
376
521
  );
377
- const stroke = strokeOf(refs, prop(style, "stroke"));
378
- if (stroke === NULL) {
379
- put("borderWidth", 0);
380
- } else if (stroke !== null) {
381
- putPaint(stroke.color, "borderColor", null, put, at);
382
- put("borderWidth", canonNumber(stroke.width, at("borderWidth")));
383
- put("borderStyle", canonEnum("borderStyle", stroke.line, "yfiles3", at("borderStyle")));
384
- }
522
+ putStroke(strokeOf(refs, prop(style, "stroke")), put, at);
385
523
  put("shape", nodeShapeOf(style, at));
524
+ const points = SHAPES_26.get(shapeKey(treeAttr(style.e, "shape")) ?? "")?.points;
525
+ if (points !== undefined) {
526
+ put("shapePoints", points);
527
+ }
386
528
  const cornerSize = style.tag === "RectangleNodeStyle" ? treeAttr(style.e, "cornerSize") : undefined;
387
529
  if (cornerSize !== undefined) {
388
530
  put("cornerRadius", canonNumber(cornerSize, at("cornerRadius")));
389
531
  }
532
+ const shape = style.tag === "ShapeNodeStyle" ? shapeKey(treeAttr(style.e, "shape")) : null;
533
+ if (shape === "round-rectangle") {
534
+ put("cornerRadius", ROUND_RECTANGLE_CORNER);
535
+ } else if (shape === "pill" && size !== null) {
536
+ put("cornerRadius", Math.min(size.width, size.height) / 2);
537
+ }
538
+ }
539
+
540
+ /**
541
+ * A ShapeNodeStyle `shape` as a lookup key: lowercase, underscores as hyphens.
542
+ * @param shape - the attribute
543
+ * @returns the key, or null
544
+ */
545
+ function shapeKey(shape: string | undefined): string | null {
546
+ return shape === undefined
547
+ ? null
548
+ : shape.slice(0, MAX_STYLE_VALUE_LENGTH).trim().toLowerCase().replaceAll("_", "-");
390
549
  }
391
550
 
392
551
  /**
@@ -418,7 +577,7 @@ function unwrapped(refs: References, first: Resolved): Resolved {
418
577
  function nodeShapeOf(style: StyleObject, at: SiteOf): string | null {
419
578
  const shape = treeAttr(style.e, "shape");
420
579
  if (shape !== undefined) {
421
- return canonEnum("shape", shape, "yfiles3", at("shape"));
580
+ return SHAPES_26.get(shapeKey(shape) ?? "")?.shape ?? canonEnum("shape", shape, "yfiles3", at("shape"));
422
581
  }
423
582
  if (style.tag === "RectangleNodeStyle") {
424
583
  return treeAttr(style.e, "cornerSize") === undefined ? "rectangle" : "round-rectangle";
@@ -451,19 +610,210 @@ function readEdgeStyle(refs: References, data: unknown, put: PutValue, at: SiteO
451
610
  put("lineStyle", canonEnum("lineStyle", stroke.line, "yfiles3", at("lineStyle")));
452
611
  }
453
612
  for (const end of ["source", "target"] as const) {
454
- const a = refs.deref(prop(st, `${end}Arrow`));
455
- const property = `${end}Arrow`;
456
- let type: string | null = null;
457
- if (a !== null && a !== NULL && typeof a === "object") {
458
- type = treeAttr(a.e, "type") ?? "DEFAULT";
459
- putPaint(paintOf(refs, prop(a, "fill"), null), `${end}ArrowColor`, null, put, at);
460
- } else if (typeof a === "string") {
461
- type = a;
462
- }
463
- if (type !== null) {
464
- put(property, canonEnum("arrow", /^default$/i.test(type) ? "triangle" : type, "yfiles3", at(property)));
613
+ readEdgeArrow(refs, refs.deref(prop(st, `${end}Arrow`)), end, put, at);
614
+ }
615
+ }
616
+
617
+ /**
618
+ * Reads one end's arrow of an edge style: its type, and for an arrow element its color, drawn hollow in its
619
+ * stroke's color when its fill is `{x:Null}`.
620
+ * @param refs - the references
621
+ * @param a - the dereferenced `sourceArrow` or `targetArrow` value
622
+ * @param end - which end
623
+ * @param put - receives the values
624
+ * @param at - the sites
625
+ */
626
+ function readEdgeArrow(
627
+ refs: References,
628
+ a: ReturnType<References["deref"]>,
629
+ end: "source" | "target",
630
+ put: PutValue,
631
+ at: SiteOf,
632
+ ): void {
633
+ const property = `${end}Arrow`;
634
+ let type: string | null = null;
635
+ let hollow = false;
636
+ if (a !== null && a !== NULL && typeof a === "object") {
637
+ type = treeAttr(a.e, "type") ?? "DEFAULT";
638
+ const fill = paintOf(refs, prop(a, "fill"), null);
639
+ // a `{x:Null}` fill draws the arrow's outline alone, in its stroke's color
640
+ const open = fill === NULL ? strokeOf(refs, prop(a, "stroke")) : null;
641
+ hollow = open !== null && open !== NULL;
642
+ putPaint(open !== null && open !== NULL ? open.color : fill, `${end}ArrowColor`, null, put, at);
643
+ } else if (typeof a === "string") {
644
+ type = a;
645
+ }
646
+ if (type !== null) {
647
+ const arrow = canonEnum("arrow", RENAMED_ARROWS.get(type.toUpperCase()) ?? type, "yfiles3", at(property));
648
+ put(property, hollow ? (HOLLOW_ARROWS.get(arrow ?? "") ?? arrow) : arrow);
649
+ }
650
+ }
651
+
652
+ /**
653
+ * yFiles 3.0 renamed 2.6's DEFAULT arrow to STEALTH and CIRCLE to ELLIPSE
654
+ * (https://docs.yfiles.com/yfiles-html/api/ArrowType/); each is read as its 2.6 name is.
655
+ */
656
+ const RENAMED_ARROWS: ReadonlyMap<string, string> = new Map([
657
+ ["DEFAULT", "triangle"],
658
+ ["STEALTH", "triangle"],
659
+ ["ELLIPSE", "circle"],
660
+ ]);
661
+
662
+ /** The filled arrows whose `{x:Null}` fill draws them as their open outline. */
663
+ const HOLLOW_ARROWS: ReadonlyMap<string, string> = new Map([
664
+ ["triangle", "triangle-open"],
665
+ ["diamond", "diamond-open"],
666
+ ["circle", "circle-open"],
667
+ ]);
668
+
669
+ /**
670
+ * Reads an edge's route from its EdgeGeometry: the `y:Bend` locations, relative to its two nodes' centers (a
671
+ * self-loop's to its node's size), and, for a PolylineEdgeStyle with a `smoothingLength` above 0, its rounded bends.
672
+ * @param refs - the references
673
+ * @param geometry - the `<data>` content of the EdgeGeometry key
674
+ * @param style - the `<data>` content of the EdgeStyle key
675
+ * @param ends - the source and target nodes' boxes (center x, y, width, height)
676
+ * @param put - receives the values
677
+ */
678
+ function readEdgeGeometry(
679
+ refs: References,
680
+ geometry: unknown,
681
+ style: unknown,
682
+ ends: readonly [Float64Array, Float64Array, boolean],
683
+ put: PutValue,
684
+ ): void {
685
+ const points = treeChildren(treeChild(geometry, "List"), "Bend").map((b): BendPoint => {
686
+ const [x, y] = (treeAttr(b, "Location") ?? "").split(",").map(Number);
687
+ return [x, y];
688
+ });
689
+ const [s, t, loop] = ends;
690
+ const bends = loop
691
+ ? canonNodeOffsets([s[0], s[1]], [s[2], s[3]], points, true)
692
+ : canonBends([s[0], s[1]], [t[0], t[1]], points, true);
693
+ put("bends", bends);
694
+ const st = refs.first(style);
695
+ const smoothing = st === null ? undefined : treeAttr(st.e, "smoothingLength");
696
+ if (bends !== null && st?.tag === "PolylineEdgeStyle" && Number(smoothing) > 0) {
697
+ put("curved", true);
698
+ }
699
+ }
700
+
701
+ /** yFiles' label positions (2.6 compass names and yFiles 3 side names, lowercase without `_`) as neutral sides. */
702
+ const SIDES: ReadonlyMap<string, string> = new Map([
703
+ ["north", "top"],
704
+ ["south", "bottom"],
705
+ ["east", "right"],
706
+ ["west", "left"],
707
+ ["northeast", "top-right"],
708
+ ["northwest", "top-left"],
709
+ ["southeast", "bottom-right"],
710
+ ["southwest", "bottom-left"],
711
+ ["top", "top"],
712
+ ["bottom", "bottom"],
713
+ ["right", "right"],
714
+ ["left", "left"],
715
+ ["topright", "top-right"],
716
+ ["topleft", "top-left"],
717
+ ["bottomright", "bottom-right"],
718
+ ["bottomleft", "bottom-left"],
719
+ ]);
720
+
721
+ /**
722
+ * The node label models by their parameter's local name: whether the label lies outside the node (exterior,
723
+ * sandwich) or inside it (interior, stretch).
724
+ */
725
+ const NODE_LABEL_MODELS: ReadonlyMap<string, "outside" | "inside"> = new Map([
726
+ ["ExteriorLabelModelParameter", "outside"],
727
+ ["ExteriorNodeLabelModelParameter", "outside"],
728
+ ["SandwichParameter", "outside"],
729
+ ["SandwichLabelModelParameter", "outside"],
730
+ ["InteriorLabelModelParameter", "inside"],
731
+ ["InteriorNodeLabelModelParameter", "inside"],
732
+ ["InteriorStretchLabelModelParameter", "inside"],
733
+ ["StretchNodeLabelModelParameter", "inside"],
734
+ ]);
735
+
736
+ /** A `{x:Static y:SomeLabelModel.Position}` markup extension: the model's local name and the member. */
737
+ const STATIC_PARAMETER = /^\{\s*[\w.-]*:?Static\s+(?:[\w.-]+:)?(\w+)\.(\w+)\s*\}$/;
738
+
739
+ /**
740
+ * A label's layout parameter, as a parameter element's local name and the element: the `Label.LayoutParameter`
741
+ * child, a `LayoutParameter` attribute naming a shared one, or a model's constant (`{x:Static
742
+ * y:InteriorStretchLabelModel.North}`), read as that model's parameter with that `Position`.
743
+ * @param refs - the references
744
+ * @param label - the `y:Label` element
745
+ * @returns the parameter, or null
746
+ */
747
+ function layoutParameter(refs: References, label: unknown): StyleObject | null {
748
+ const attr = treeAttr(label, "LayoutParameter");
749
+ if (attr !== undefined) {
750
+ const m = STATIC_PARAMETER.exec(attr.slice(0, MAX_STYLE_VALUE_LENGTH).trim());
751
+ if (m !== null) {
752
+ return { tag: `${m[1]}Parameter`, e: { "@_Position": m[2] } };
465
753
  }
466
754
  }
755
+ const p = refs.deref(attr ?? treeChild(label, "Label.LayoutParameter"));
756
+ return p === null || p === NULL || typeof p !== "object" ? null : p;
757
+ }
758
+
759
+ /**
760
+ * Where yFiles draws a node label, from its layout parameter's model and `Position`: outside the node for the
761
+ * exterior and sandwich models, inside it (`inside-*`) for the interior and stretch models, and the center for a
762
+ * centered position or any other model (the free and ratio-anchored models' offsets have no neutral property).
763
+ * @param refs - the references
764
+ * @param label - the `y:Label` element
765
+ * @returns the position
766
+ */
767
+ function labelPositionOf(refs: References, label: unknown): string {
768
+ const parameter = layoutParameter(refs, label);
769
+ const model = parameter === null ? undefined : NODE_LABEL_MODELS.get(parameter.tag);
770
+ if (parameter === null || model === undefined) {
771
+ return "center";
772
+ }
773
+ const raw = treeAttr(parameter.e, "Position") ?? "";
774
+ const side = SIDES.get(raw.slice(0, MAX_STYLE_VALUE_LENGTH).toLowerCase().replaceAll("_", ""));
775
+ if (side === undefined) {
776
+ return "center";
777
+ }
778
+ return model === "inside" ? `inside-${side}` : side;
779
+ }
780
+
781
+ /** yFiles' edge label sides (`SideOfEdge`, and the nine-position model's middle row), as neutral positions. */
782
+ const EDGE_SIDES: ReadonlyMap<string, string> = new Map([
783
+ ["aboveedge", "top"],
784
+ ["belowedge", "bottom"],
785
+ ["onedge", "center"],
786
+ ["centerabove", "top"],
787
+ ["centerbelow", "bottom"],
788
+ ["centercentered", "center"],
789
+ ]);
790
+
791
+ /** The edge label models that place a label above, on or below the line, and the attribute that says which. */
792
+ const EDGE_SIDE_ATTRIBUTES: ReadonlyMap<string, string> = new Map([
793
+ ["NinePositionsEdgeLabelModelParameter", "Position"],
794
+ ["EdgePathLabelModelParameter", "SideOfEdge"],
795
+ ]);
796
+
797
+ /**
798
+ * Where yFiles draws an edge label at the middle of its edge, above, on or below the line: the path model's
799
+ * `SideOfEdge` at a ratio of 0.5, and the nine-position model's center row. Other places (the ends, a
800
+ * segment's middle, left or right of the edge's direction, a free offset) give none.
801
+ * @param refs - the references
802
+ * @param label - the `y:Label` element
803
+ * @returns the position, or null
804
+ */
805
+ function edgeLabelPositionOf(refs: References, label: unknown): string | null {
806
+ const parameter = layoutParameter(refs, label);
807
+ if (parameter === null) {
808
+ return null;
809
+ }
810
+ const ratio = treeAttr(parameter.e, "Ratio");
811
+ if (ratio !== undefined && Number(ratio) !== 0.5) {
812
+ return null;
813
+ }
814
+ const attribute = EDGE_SIDE_ATTRIBUTES.get(parameter.tag);
815
+ const raw = attribute === undefined ? undefined : treeAttr(parameter.e, attribute);
816
+ return raw === undefined ? null : (EDGE_SIDES.get(raw.slice(0, MAX_STYLE_VALUE_LENGTH).toLowerCase()) ?? null);
467
817
  }
468
818
 
469
819
  /**
@@ -496,23 +846,122 @@ function readLabels(refs: References, data: unknown, put: PutValue, at: SiteOf):
496
846
  noteAt(at("label"), STYLE_ISSUE.EXTRA_LABELS, `${String(extra + 1)} labels`);
497
847
  }
498
848
  put("label", canonText(text, at("label")));
849
+ put(
850
+ "labelPosition",
851
+ at("label").target === "node" ? labelPositionOf(refs, label) : edgeLabelPositionOf(refs, label),
852
+ );
499
853
  const ls = refs.deref(treeAttr(label, "Style") ?? treeChild(label, "Label.Style"));
500
854
  if (ls === null || ls === NULL || typeof ls !== "object" || !ls.tag.endsWith("LabelStyle")) {
501
855
  return;
502
856
  }
503
857
  putPaint(paintOf(refs, prop(ls, "textFill"), null), "labelColor", null, put, at);
504
- const f = refs.deref(prop(ls, "font"));
505
- if (f !== null && f !== NULL && typeof f === "object" && f.tag === "Font") {
506
- put("labelSize", canonNumber(treeAttr(f.e, "fontSize"), at("labelSize")));
507
- const family = treeAttr(f.e, "fontFamily");
508
- if (family !== undefined) {
509
- put("labelFont", canonText(family.replaceAll(/(^['"])|(['"]$)/g, ""), at("labelFont")));
858
+ readLabelFont(refs.deref(prop(ls, "font")), put, at);
859
+ }
860
+
861
+ /**
862
+ * Reads a label style's `Font`: its size, family and weight.
863
+ * @param f - the dereferenced `font` property
864
+ * @param put - receives the values
865
+ * @param at - the sites
866
+ */
867
+ function readLabelFont(f: ReturnType<References["deref"]>, put: PutValue, at: SiteOf): void {
868
+ if (f === null || f === NULL || typeof f !== "object" || f.tag !== "Font") {
869
+ return;
870
+ }
871
+ put("labelSize", canonNumber(treeAttr(f.e, "fontSize"), at("labelSize")));
872
+ const family = treeAttr(f.e, "fontFamily");
873
+ if (family !== undefined) {
874
+ put("labelFont", canonText(family.replaceAll(/(^['"])|(['"]$)/g, ""), at("labelFont")));
875
+ }
876
+ const weight = treeAttr(f.e, "fontWeight");
877
+ if (weight !== undefined) {
878
+ put("labelWeight", canonEnum("weight", weight, "yfiles3", at("labelWeight")));
879
+ }
880
+ }
881
+
882
+ /** The style, labels and geometry key kinds of nodes and of edges. */
883
+ const YFILES3_KINDS: Readonly<Record<StyleTarget, readonly KeyKind[]>> = {
884
+ node: ["NodeStyle", "NodeLabels", "NodeGeometry"],
885
+ edge: ["EdgeStyle", "EdgeLabels", "EdgeGeometry"],
886
+ };
887
+
888
+ /** What reading one table's yFiles 3 styles shares. */
889
+ interface Yfiles3Context {
890
+ readonly snapshot: GraphSnapshot;
891
+ readonly notes: StyleNotes;
892
+ readonly budget: StyleWorkBudget;
893
+ readonly refs: References;
894
+ /** each node's center x and y, width and height from its NodeGeometry, for its edges' bends; NaN without one */
895
+ readonly boxes: Float64Array;
896
+ }
897
+
898
+ /**
899
+ * Reads the yFiles 3 styles of every node or every edge.
900
+ * @param ctx - the shared state
901
+ * @param target - nodes or edges
902
+ * @param kinds - the table's columns by key kind
903
+ * @returns the values
904
+ */
905
+ function readYfiles3Target(
906
+ ctx: Yfiles3Context,
907
+ target: StyleTarget,
908
+ kinds: Map<KeyKind, string>,
909
+ ): ReturnType<typeof valueColumns>["values"] {
910
+ const { snapshot, notes, budget, refs, boxes } = ctx;
911
+ const isNode = target === "node";
912
+ const table = isNode ? snapshot.nodes : snapshot.edges;
913
+ const n = isNode ? snapshot.nodeCount : snapshot.edgeCount;
914
+ const out = valueColumns(n);
915
+ const [style, labels, geometry] = YFILES3_KINDS[target].map((kind) => kinds.get(kind));
916
+ const cell = (name: string | undefined, i: number): unknown =>
917
+ name === undefined ? undefined : plainCell(table.value(name, i));
918
+ for (let i = 0; i < n; i++) {
919
+ budget.spend(target, 1);
920
+ const at: SiteOf = (property) => ({ notes, target, property, element: i, budget });
921
+ const put: PutValue = (property, value) => {
922
+ out.put(i, property, value);
923
+ };
924
+ let size: Size | null = null;
925
+ if (geometry !== undefined && !isNode) {
926
+ const box = (k: number): Float64Array => boxes.subarray(4 * k, 4 * k + 4);
927
+ const [s, t] = [snapshot.edgeSource(i), snapshot.edgeTarget(i)];
928
+ readEdgeGeometry(refs, cell(geometry, i), cell(style, i), [box(s), box(t), s === t], put);
929
+ } else if (geometry !== undefined) {
930
+ size = readNodeGeometry(cell(geometry, i), i, boxes, put, at);
510
931
  }
511
- const weight = treeAttr(f.e, "fontWeight");
512
- if (weight !== undefined) {
513
- put("labelWeight", canonEnum("weight", weight, "yfiles3", at("labelWeight")));
932
+ if (style !== undefined && isNode) {
933
+ readNodeStyle(refs, cell(style, i), put, at, size);
934
+ } else if (style !== undefined) {
935
+ readEdgeStyle(refs, cell(style, i), put, at);
936
+ }
937
+ if (labels !== undefined) {
938
+ readLabels(refs, cell(labels, i), put, at);
514
939
  }
515
940
  }
941
+ return out.values;
942
+ }
943
+
944
+ /**
945
+ * Reads a node's NodeGeometry: its width and height, and its box for its edges' bends.
946
+ * @param geometry - the `<data>` content of the NodeGeometry key
947
+ * @param i - the node's index
948
+ * @param boxes - receives the node's center x and y, width and height
949
+ * @param put - receives the values
950
+ * @param at - the sites
951
+ * @returns the node's size, or null when its width or height is not a number
952
+ */
953
+ function readNodeGeometry(geometry: unknown, i: number, boxes: Float64Array, put: PutValue, at: SiteOf): Size | null {
954
+ const rect = treeChild(geometry, "RectD");
955
+ const width = canonNumber(treeAttr(rect, "Width"), at("width"));
956
+ const height = canonNumber(treeAttr(rect, "Height"), at("height"));
957
+ put("width", width);
958
+ put("height", height);
959
+ if (width === null || height === null) {
960
+ return null;
961
+ }
962
+ const [x, y] = [Number(treeAttr(rect, "X")), Number(treeAttr(rect, "Y"))];
963
+ boxes.set([x + width / 2, y + height / 2, width, height], 4 * i);
964
+ return { width, height };
516
965
  }
517
966
 
518
967
  /**
@@ -532,36 +981,9 @@ export function readYfiles3Styles(snapshot: GraphSnapshot, notes: StyleNotes, bu
532
981
  const graphKinds = columnsByKind(snapshot.graph);
533
982
  const sharedName = graphKinds.get("SharedData");
534
983
  const refs = new References(sharedName === undefined ? null : plainCell(snapshot.graph.value(sharedName, 0)));
535
- const read = (target: StyleTarget, kinds: Map<KeyKind, string>): ReturnType<typeof valueColumns>["values"] => {
536
- const table = target === "node" ? snapshot.nodes : snapshot.edges;
537
- const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
538
- const out = valueColumns(n);
539
- const style = kinds.get(target === "node" ? "NodeStyle" : "EdgeStyle");
540
- const labels = kinds.get(target === "node" ? "NodeLabels" : "EdgeLabels");
541
- const geometry = target === "node" ? kinds.get("NodeGeometry") : undefined;
542
- const readStyle = target === "node" ? readNodeStyle : readEdgeStyle;
543
- const cell = (name: string | undefined, i: number): unknown =>
544
- name === undefined ? undefined : plainCell(table.value(name, i));
545
- for (let i = 0; i < n; i++) {
546
- budget.spend(target, 1);
547
- const at: SiteOf = (property) => ({ notes, target, property, element: i, budget });
548
- const put: PutValue = (property, value) => {
549
- out.put(i, property, value);
550
- };
551
- if (style !== undefined) {
552
- readStyle(refs, cell(style, i), put, at);
553
- }
554
- if (labels !== undefined) {
555
- readLabels(refs, cell(labels, i), put, at);
556
- }
557
- if (geometry !== undefined) {
558
- const rect = treeChild(cell(geometry, i), "RectD");
559
- put("width", canonNumber(treeAttr(rect, "Width"), at("width")));
560
- put("height", canonNumber(treeAttr(rect, "Height"), at("height")));
561
- }
562
- }
563
- return out.values;
564
- };
984
+ const boxes = new Float64Array(4 * snapshot.nodeCount).fill(Number.NaN);
985
+ const read = (target: StyleTarget, kinds: Map<KeyKind, string>): ReturnType<typeof valueColumns>["values"] =>
986
+ readYfiles3Target({ snapshot, notes, budget, refs, boxes }, target, kinds);
565
987
  const node = read("node", nodeKinds);
566
988
  const edge = read("edge", edgeKinds);
567
989
  if (refs.cycles > 0) {