@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 +0,0 @@
1
- {"version":3,"file":"styles-D3fRphrO.js","sources":["../../src/formats/gexf/schema.ts","../../src/formats/gexf/styles.ts"],"sourcesContent":["/**\n * What the GEXF importer and exporter share (research note 07 section 2.1, design sections 5.1,\n * 5.5, 5.6 and 5.10): the namespaces of the two supported versions, the fixed names and\n * declarations of the columns derived from XML attributes and viz elements (design section 5.6:\n * XML-attribute-derived columns have fixed names and roles, and a declared attribute that would\n * take one of them is renamed `<name>#<id>`), the shape of a temporal extension table, and the\n * declared-type table of each version for the exporter.\n */\n\nimport { type ColumnDecl, type Dtype } from \"@graphty/graph-format\";\n\nimport { TIME_TEXT_ROLE, TIME_TEXT_SUFFIX } from \"../../common/temporal.js\";\n\n/**\n * The GEXF versions the exporter writes.\n * @category Built-in formats\n */\nexport type GexfVersion = \"1.2\" | \"1.3\";\n\n/**\n * The format name.\n * @category Plugin helpers\n */\nexport const GEXF_FORMAT = \"gexf\";\n\n/**\n * The namespace URIs of each version.\n * @category Plugin helpers\n */\nexport const GEXF_NAMESPACES: Readonly<Record<GexfVersion, { readonly gexf: string; readonly viz: string }>> = {\n \"1.2\": { gexf: \"http://www.gexf.net/1.2draft\", viz: \"http://www.gexf.net/1.2draft/viz\" },\n \"1.3\": { gexf: \"http://gexf.net/1.3\", viz: \"http://gexf.net/1.3/viz\" },\n};\n\n/**\n * The default edge type values of `<graph defaultedgetype>` and `<edge type>`.\n * @category Plugin helpers\n */\nexport type GexfEdgeType = \"directed\" | \"undirected\" | \"mutual\";\n\n/**\n * The GEXF `timeformat` values.\n * @category Plugin helpers\n */\nexport const TIME_FORMATS: ReadonlySet<string> = new Set([\"integer\", \"double\", \"date\", \"dateTime\"]);\n\n/**\n * The GEXF graph `mode` values.\n * @category Plugin helpers\n */\nexport const GRAPH_MODES: ReadonlySet<string> = new Set([\"static\", \"dynamic\", \"slice\"]);\n\n/**\n * The GEXF 1.3 `timerepresentation` values.\n * @category Plugin helpers\n */\nexport const TIME_REPRESENTATIONS: ReadonlySet<string> = new Set([\"interval\", \"timestamp\"]);\n\n/**\n * The `origin.namespace` of viz-derived columns.\n * @category Plugin helpers\n */\nexport const VIZ_NAMESPACE = \"viz\";\n\n/** The origin every XML-derived column declares. */\nconst XML_ORIGIN = { format: GEXF_FORMAT };\n\n/** The origin of every viz-derived column. */\nconst VIZ_ORIGIN = { format: GEXF_FORMAT, namespace: VIZ_NAMESPACE };\n\n/**\n * The fixed node column names the importer owns (design section 5.6): a declared attribute with\n * one of these titles is renamed `<title>#<id>` so the XML-derived column keeps its name and role.\n *\n * Deprecated, unchanged until the next major version: the viz role columns (`color`, `size`,\n * `shape`, `shape.uri`, and on edges `color`, `thickness`, `shape`) and the rename of an attribute\n * titled like one. The GEXF style reader (styles.ts) is the only code that turns them into\n * drawing; in the next major they leave the import result.\n * @category Plugin helpers\n */\nexport const NODE_COLUMNS = Object.freeze({\n label: \"label\",\n parent: \"parent\",\n parents: \"parents\",\n start: \"start\",\n end: \"end\",\n timestamp: \"timestamp\",\n spells: \"spells\",\n spellsOpen: \"spells.open\",\n timestamps: \"timestamps\",\n open: \"open\",\n position: \"position\",\n color: \"color\",\n size: \"size\",\n shape: \"shape\",\n shapeUri: \"shape.uri\",\n});\n\n/** The fixed edge column names the importer owns. */\nconst EDGE_COLUMNS = Object.freeze({\n id: \"id\",\n label: \"label\",\n kind: \"kind\",\n start: \"start\",\n end: \"end\",\n timestamp: \"timestamp\",\n spells: \"spells\",\n spellsOpen: \"spells.open\",\n timestamps: \"timestamps\",\n open: \"open\",\n color: \"color\",\n thickness: \"thickness\",\n shape: \"shape\",\n});\n\n/**\n * Every reserved node column name, including the temporal companions.\n * @category Plugin helpers\n */\nexport const RESERVED_NODE_NAMES: ReadonlySet<string> = new Set([\n ...Object.values(NODE_COLUMNS),\n NODE_COLUMNS.start + TIME_TEXT_SUFFIX,\n NODE_COLUMNS.end + TIME_TEXT_SUFFIX,\n NODE_COLUMNS.timestamp + TIME_TEXT_SUFFIX,\n]);\n\n/**\n * Every reserved edge column name, including the temporal companions.\n * @category Plugin helpers\n */\nexport const RESERVED_EDGE_NAMES: ReadonlySet<string> = new Set([\n ...Object.values(EDGE_COLUMNS),\n EDGE_COLUMNS.start + TIME_TEXT_SUFFIX,\n EDGE_COLUMNS.end + TIME_TEXT_SUFFIX,\n EDGE_COLUMNS.timestamp + TIME_TEXT_SUFFIX,\n]);\n\n/**\n * The declarations of the XML-derived node columns, keyed as NODE_COLUMNS.\n * @category Plugin helpers\n */\nexport const NODE_DECLS: Readonly<Record<keyof typeof NODE_COLUMNS, ColumnDecl>> = {\n label: { name: NODE_COLUMNS.label, dtype: \"string\", role: \"label\", nullable: true, origin: XML_ORIGIN },\n parent: {\n name: NODE_COLUMNS.parent,\n dtype: \"u32\",\n role: \"parent\",\n refersTo: \"node\",\n nullable: true,\n origin: XML_ORIGIN,\n },\n parents: {\n name: NODE_COLUMNS.parents,\n dtype: \"list\",\n itemDtype: \"u32\",\n role: \"parents\",\n refersTo: \"node\",\n nullable: true,\n origin: XML_ORIGIN,\n },\n start: { name: NODE_COLUMNS.start, dtype: \"f64\", role: \"start\", nullable: true, origin: XML_ORIGIN },\n end: { name: NODE_COLUMNS.end, dtype: \"f64\", role: \"end\", nullable: true, origin: XML_ORIGIN },\n timestamp: { name: NODE_COLUMNS.timestamp, dtype: \"f64\", role: \"timestamp\", nullable: true, origin: XML_ORIGIN },\n spells: {\n name: NODE_COLUMNS.spells,\n dtype: \"list\",\n itemDtype: \"f64\",\n itemComponents: 2,\n role: \"spells\",\n nullable: true,\n origin: XML_ORIGIN,\n },\n timestamps: {\n name: NODE_COLUMNS.timestamps,\n dtype: \"list\",\n itemDtype: \"f64\",\n role: \"timestamps\",\n nullable: true,\n origin: XML_ORIGIN,\n },\n open: { name: NODE_COLUMNS.open, dtype: \"u8\", role: \"open\", nullable: true, origin: XML_ORIGIN },\n spellsOpen: {\n name: NODE_COLUMNS.spellsOpen,\n dtype: \"list\",\n itemDtype: \"u8\",\n role: \"spellsOpen\",\n nullable: true,\n origin: XML_ORIGIN,\n },\n position: {\n name: NODE_COLUMNS.position,\n dtype: \"f64\",\n components: 3,\n role: \"position\",\n mutable: true,\n nullable: true,\n origin: VIZ_ORIGIN,\n extra: { units: \"file\" },\n },\n color: {\n name: NODE_COLUMNS.color,\n dtype: \"f32\",\n components: 4,\n role: \"color\",\n nullable: true,\n origin: VIZ_ORIGIN,\n },\n size: { name: NODE_COLUMNS.size, dtype: \"f32\", role: \"size\", nullable: true, origin: VIZ_ORIGIN },\n shape: { name: NODE_COLUMNS.shape, dtype: \"dict\", role: \"shape\", nullable: true, origin: VIZ_ORIGIN },\n shapeUri: { name: NODE_COLUMNS.shapeUri, dtype: \"string\", nullable: true, origin: VIZ_ORIGIN },\n};\n\n/**\n * The declarations of the XML-derived edge columns, keyed as EDGE_COLUMNS.\n * @category Plugin helpers\n */\nexport const EDGE_DECLS: Readonly<Record<keyof typeof EDGE_COLUMNS, ColumnDecl>> = {\n id: { name: EDGE_COLUMNS.id, dtype: \"string\", role: \"id\", unique: true, nullable: true, origin: XML_ORIGIN },\n label: { name: EDGE_COLUMNS.label, dtype: \"string\", role: \"label\", nullable: true, origin: XML_ORIGIN },\n kind: { name: EDGE_COLUMNS.kind, dtype: \"dict\", role: \"kind\", nullable: true, origin: XML_ORIGIN },\n start: { name: EDGE_COLUMNS.start, dtype: \"f64\", role: \"start\", nullable: true, origin: XML_ORIGIN },\n end: { name: EDGE_COLUMNS.end, dtype: \"f64\", role: \"end\", nullable: true, origin: XML_ORIGIN },\n timestamp: { name: EDGE_COLUMNS.timestamp, dtype: \"f64\", role: \"timestamp\", nullable: true, origin: XML_ORIGIN },\n spells: {\n name: EDGE_COLUMNS.spells,\n dtype: \"list\",\n itemDtype: \"f64\",\n itemComponents: 2,\n role: \"spells\",\n nullable: true,\n origin: XML_ORIGIN,\n },\n timestamps: {\n name: EDGE_COLUMNS.timestamps,\n dtype: \"list\",\n itemDtype: \"f64\",\n role: \"timestamps\",\n nullable: true,\n origin: XML_ORIGIN,\n },\n open: { name: EDGE_COLUMNS.open, dtype: \"u8\", role: \"open\", nullable: true, origin: XML_ORIGIN },\n spellsOpen: {\n name: EDGE_COLUMNS.spellsOpen,\n dtype: \"list\",\n itemDtype: \"u8\",\n role: \"spellsOpen\",\n nullable: true,\n origin: XML_ORIGIN,\n },\n color: {\n name: EDGE_COLUMNS.color,\n dtype: \"f32\",\n components: 4,\n role: \"color\",\n nullable: true,\n origin: VIZ_ORIGIN,\n },\n thickness: { name: EDGE_COLUMNS.thickness, dtype: \"f32\", role: \"thickness\", nullable: true, origin: VIZ_ORIGIN },\n shape: { name: EDGE_COLUMNS.shape, dtype: \"dict\", role: \"shape\", nullable: true, origin: VIZ_ORIGIN },\n};\n\n/**\n * The bit of the `open` column marking an open start (design section 5.1).\n * @category Plugin helpers\n */\nexport const OPEN_START = 1;\n\n/**\n * The bit of the `open` column marking an open end.\n * @category Plugin helpers\n */\nexport const OPEN_END = 2;\n\n/** The prefix of a temporal extension table's name (design section 5.10). */\nconst TEMPORAL_TABLE_PREFIX = \"temporal:\";\n\n/**\n * The column names of a temporal extension table (design section 5.10).\n * @category Plugin helpers\n */\nexport const TEMPORAL_COLUMNS = Object.freeze({\n element: \"element\",\n start: \"start\",\n end: \"end\",\n value: \"value\",\n open: \"open\",\n startText: `start${TIME_TEXT_SUFFIX}`,\n endText: `end${TIME_TEXT_SUFFIX}`,\n valueText: `value${TIME_TEXT_SUFFIX}`,\n});\n\n/**\n * The name of the temporal extension table of a dynamic attribute.\n * @param domain - node or edge\n * @param column - the static column's name\n * @returns `temporal:<domain>:<column>`\n * @category Plugin helpers\n */\nexport function temporalTableName(domain: \"node\" | \"edge\", column: string): string {\n return `${TEMPORAL_TABLE_PREFIX}${domain}:${column}`;\n}\n\n/**\n * Split a temporal table name into its domain and column.\n * @param name - the table name\n * @returns the parts, or null when the name is not a temporal table's\n * @category Plugin helpers\n */\nexport function parseTemporalTableName(name: string): { domain: \"node\" | \"edge\"; column: string } | null {\n if (!name.startsWith(TEMPORAL_TABLE_PREFIX)) {\n return null;\n }\n const rest = name.slice(TEMPORAL_TABLE_PREFIX.length);\n const colon = rest.indexOf(\":\");\n if (colon < 0) {\n return null;\n }\n const domain = rest.slice(0, colon);\n if (domain !== \"node\" && domain !== \"edge\") {\n return null;\n }\n return { domain, column: rest.slice(colon + 1) };\n}\n\n/**\n * The column declarations of a temporal extension table (design section 5.10): the element index,\n * the interval, the value in the attribute's dtype, the interval's text companions, an open-bounds\n * byte and, for a temporal-typed attribute, the value's text companion.\n * @param domain - the domain the element column refers to\n * @param value - the value column's declaration fields (dtype, itemDtype, options...)\n * @param temporalValue - whether the value is itself a temporal type needing a text companion\n * @returns the declarations in table order\n * @category Plugin helpers\n */\nexport function temporalTableDecls(\n domain: \"node\" | \"edge\",\n value: Pick<ColumnDecl, \"dtype\" | \"itemDtype\" | \"options\" | \"origin\">,\n temporalValue: boolean,\n): ColumnDecl[] {\n const decls: ColumnDecl[] = [\n { name: TEMPORAL_COLUMNS.element, dtype: \"u32\", refersTo: domain, nullable: false },\n { name: TEMPORAL_COLUMNS.start, dtype: \"f64\", role: \"start\", nullable: true },\n { name: TEMPORAL_COLUMNS.end, dtype: \"f64\", role: \"end\", nullable: true },\n { name: TEMPORAL_COLUMNS.value, ...value, nullable: true },\n {\n name: TEMPORAL_COLUMNS.startText,\n dtype: \"string\",\n role: TIME_TEXT_ROLE,\n nullable: true,\n extra: { for: TEMPORAL_COLUMNS.start },\n },\n { name: TEMPORAL_COLUMNS.endText, dtype: \"string\", nullable: true, extra: { for: TEMPORAL_COLUMNS.end } },\n { name: TEMPORAL_COLUMNS.open, dtype: \"u8\", role: \"open\", nullable: true },\n ];\n if (temporalValue) {\n decls.push({\n name: TEMPORAL_COLUMNS.valueText,\n dtype: \"string\",\n nullable: true,\n extra: { for: TEMPORAL_COLUMNS.value },\n });\n }\n return decls;\n}\n\n/** The scalar type names GEXF 1.2 declares. */\nconst TYPES_1_2: ReadonlySet<string> = new Set([\"integer\", \"long\", \"double\", \"float\", \"boolean\", \"string\", \"anyURI\"]);\n\n/** The scalar type names GEXF 1.3 declares (the list variants are derived). */\nconst TYPES_1_3: ReadonlySet<string> = new Set([\n ...TYPES_1_2,\n \"bigdecimal\",\n \"biginteger\",\n \"byte\",\n \"char\",\n \"short\",\n \"date\",\n \"dateTime\",\n]);\n\n/**\n * Whether a declared type text is a scalar type of a version (case-sensitive, as the schema spells\n * them).\n * @param type - the type text\n * @param version - the target version\n * @returns true when the version declares it\n * @category Plugin helpers\n */\nexport function isScalarType(type: string, version: GexfVersion): boolean {\n return (version === \"1.2\" ? TYPES_1_2 : TYPES_1_3).has(type);\n}\n\n/**\n * Whether a declared type text is a list type of a version: `liststring` in 1.2, `list<scalar>` in 1.3.\n * @param type - the type text\n * @param version - the target version\n * @returns true when the version declares it\n * @category Plugin helpers\n */\nexport function isListType(type: string, version: GexfVersion): boolean {\n if (version === \"1.2\") {\n return type === \"liststring\";\n }\n return type.startsWith(\"list\") && type.length > 4 && isScalarType(type.slice(4), \"1.3\");\n}\n\n/**\n * The canonical GEXF scalar type of a column dtype (design section 5.1 reversed).\n * @param dtype - a scalar dtype\n * @returns the type text; u32 becomes `long` (its range exceeds `integer`), u8 `integer`, json `string`\n * @category Plugin helpers\n */\nexport function canonicalScalarType(dtype: Dtype): string {\n switch (dtype) {\n case \"bool\":\n return \"boolean\";\n case \"i32\":\n case \"u8\":\n return \"integer\";\n case \"u32\":\n return \"long\";\n case \"f32\":\n return \"float\";\n case \"f64\":\n return \"double\";\n case \"dict\":\n case \"string\":\n case \"json\":\n case \"list\":\n return \"string\";\n default: {\n const name: string = dtype;\n return name;\n }\n }\n}\n","/**\n * GEXF styles: reading the viz module (`viz:color`, `viz:size`, `viz:shape`, `viz:thickness`) into the neutral\n * style vocabulary with Gephi's defaults, and writing a graph's styles back into the viz module, with graphty's\n * `graphty.styles` block in `<meta>` (in graphty's own XML namespace, which graph-io, NetworkX's `read_gexf` and\n * Gephi's GEXF importer all skip) and the per-element style values the block reads as ordinary attributes.\n */\n\nimport type { GraphSnapshot } from \"@graphty/graph-format\";\n\nimport { explicitWeights } from \"../../common/weights.js\";\nimport { canonColor } from \"../../styles/canon/color.js\";\nimport { canonEnum } from \"../../styles/canon/enums.js\";\nimport { canonNumber } from \"../../styles/canon/number.js\";\nimport type { CanonSite } from \"../../styles/canon/site.js\";\nimport { canonText } from \"../../styles/canon/text.js\";\nimport { StyleApproximations } from \"../../styles/io/approximations.js\";\nimport { blockStyles, parseStyleBlock, STYLE_BLOCK_NAME } from \"../../styles/io/block.js\";\nimport type { ExporterStyleInput } from \"../../styles/io/writer.js\";\nimport { StyleNotes } from \"../../styles/notes.js\";\nimport { styleFingerprint } from \"../../styles/plan/features.js\";\nimport { plainCell, resolveStyles } from \"../../styles/plan/resolve.js\";\nimport type {\n ImporterStyles,\n StyleColumn,\n StyleReadContext,\n StyleRule,\n StyleTarget,\n StyleValue,\n StyleWriteCapabilities,\n} from \"../../styles/types.js\";\nimport type { LossNote } from \"../../types.js\";\nimport { NODE_COLUMNS, VIZ_NAMESPACE } from \"./schema.js\";\n\n/** The column of a node's `label` attribute. */\nconst LABEL_COLUMN = NODE_COLUMNS.label;\n\n/**\n * The XML namespace of graphty's own elements in a GEXF file (the `graphty.styles` block inside `<meta>`).\n * @category Built-in formats\n */\nexport const GRAPHTY_XML_NAMESPACE = \"https://graphty.app/ns/gexf\";\n\n/**\n * What the GEXF writer holds natively: a node's `label` attribute, the viz module's color (with its alpha), size, shape and\n * thickness, and the edge line shape. The block goes into `<meta>`.\n * @category Built-in formats\n */\nexport const GEXF_STYLE_CAPABILITIES: StyleWriteCapabilities = Object.freeze({\n node: Object.freeze([\"label\", \"fill\", \"fillOpacity\", \"width\", \"height\", \"shape\", \"image\"] as const),\n edge: Object.freeze([\"color\", \"opacity\", \"width\", \"lineStyle\"] as const),\n block: \"native\",\n});\n\n/** Gephi's node fill when a node has no `viz:color` (graphstore NodeImpl), which its edges then take. */\nconst GEPHI_NODE_FILL = \"#000000\";\n\n/** The style column marking directed edges, which Gephi draws with an arrow at the target. */\nconst DIRECTED_KEY = \"directed\";\n\n/** The style column holding the source node's color of each edge without a color of its own. */\nconst SOURCE_COLOR_KEY = \"source-color\";\n/** The style column of the width Gephi draws an edge with from its weight. */\nconst WEIGHT_WIDTH_KEY = \"weight-width\";\n\n/** GEXF's node shapes, by the neutral shape each writes exactly. */\nconst NODE_SHAPES: ReadonlyMap<string, string> = new Map([\n [\"ellipse\", \"disc\"],\n [\"rectangle\", \"square\"],\n [\"triangle\", \"triangle\"],\n [\"diamond\", \"diamond\"],\n]);\n\n/** The nearest GEXF node shape of the neutral shapes GEXF does not have; anything else is a disc. */\nconst NEAREST_NODE_SHAPES: ReadonlyMap<string, string> = new Map([\n [\"round-rectangle\", \"square\"],\n [\"vee\", \"triangle\"],\n]);\n\n/** GEXF's edge shapes; a dash pattern GEXF does not have is dashed, anything else solid. */\nconst EDGE_SHAPES: ReadonlySet<string> = new Set([\"solid\", \"dotted\", \"dashed\", \"double\"]);\n\n/**\n * The GEXF node shape written for a neutral shape.\n * @param shape - the neutral shape\n * @returns the GEXF shape and whether it is exact\n */\nfunction gexfNodeShape(shape: string): { readonly value: string; readonly exact: boolean } {\n const exact = NODE_SHAPES.get(shape);\n return exact === undefined\n ? { value: NEAREST_NODE_SHAPES.get(shape) ?? \"disc\", exact: false }\n : { value: exact, exact: true };\n}\n\n/**\n * The GEXF edge shape written for a neutral line style.\n * @param line - the neutral line style\n * @returns the GEXF shape and whether it is exact\n */\nfunction gexfEdgeShape(line: string): { readonly value: string; readonly exact: boolean } {\n if (EDGE_SHAPES.has(line)) {\n return { value: line, exact: true };\n }\n return { value: line === \"dash-dot\" || line === \"long-dash\" ? \"dashed\" : \"solid\", exact: false };\n}\n\n/** The viz-derived columns the reader reads; `shape.uri` is the image of an `image` shape. */\nconst VIZ_COLUMNS: Readonly<Record<StyleTarget, readonly string[]>> = {\n node: [\"color\", \"size\", \"shape\", \"shape.uri\"],\n edge: [\"color\", \"thickness\", \"shape\"],\n};\n\n/**\n * A `viz:color` `hex` value as channels: r, g and b 0..255 and an alpha 0..1. Reads `#rgb`, `#rgba`, `#rrggbb` and\n * `#rrggbbaa` (alpha last), with or without the `#`.\n * @param hex - the attribute's value\n * @returns `[r, g, b, a]`, or null when it is not a hex color\n */\nexport function canonVizColor(hex: string): [number, number, number, number] | null {\n const text = hex.trim();\n if (!/^#?([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(text)) {\n return null;\n }\n const c = canonColor(text.startsWith(\"#\") ? text : `#${text}`, \"css\", {\n notes: new StyleNotes(),\n target: \"node\",\n property: \"fill\",\n });\n if (c === null) {\n return null;\n }\n const n = Number.parseInt(c.color.slice(1), 16);\n return [(n >> 16) & 255, (n >> 8) & 255, n & 255, c.alpha];\n}\n\n/**\n * A viz column of the snapshot, or null when the column is absent or not viz-derived.\n * @param snapshot - the graph\n * @param target - nodes or edges\n * @param name - the column's fixed name\n * @returns the column's name, or null\n */\nfunction vizColumn(snapshot: GraphSnapshot, target: StyleTarget, name: string): string | null {\n const col = (target === \"node\" ? snapshot.nodes : snapshot.edges).get(name);\n return col !== null && col.meta.origin?.namespace === VIZ_NAMESPACE ? name : null;\n}\n\n/** What the per-element readers of vizValues() share. */\ninterface VizRead {\n readonly table: GraphSnapshot[\"nodes\"];\n readonly target: StyleTarget;\n /** The values of a property, created on first use. */\n readonly column: (property: string) => (StyleValue | null)[];\n /** Where a value of an element was read. */\n readonly site: (i: number, property: string) => CanonSite;\n}\n\n/**\n * One target's canonical values from its viz columns and, on a node, its `label` attribute, which Gephi draws.\n * @param snapshot - the graph\n * @param target - nodes or edges\n * @param notes - where problems are noted\n * @param context - the work budget\n * @returns the values per property\n */\nfunction vizValues(\n snapshot: GraphSnapshot,\n target: StyleTarget,\n notes: StyleNotes,\n context: StyleReadContext,\n): Record<string, (StyleValue | null)[]> {\n const table = target === \"node\" ? snapshot.nodes : snapshot.edges;\n const n = target === \"node\" ? snapshot.nodeCount : snapshot.edgeCount;\n const out: Record<string, (StyleValue | null)[]> = {};\n const viz: VizRead = {\n table,\n target,\n column: (p) => (out[p] ??= new Array<StyleValue | null>(n).fill(null)),\n site: (i, property) => ({ notes, target, property, element: i, budget: context.budget }),\n };\n const color = vizColumn(snapshot, target, \"color\");\n const size = vizColumn(snapshot, target, target === \"node\" ? \"size\" : \"thickness\");\n const shape = vizColumn(snapshot, target, \"shape\");\n const uri = target === \"node\" ? vizColumn(snapshot, target, \"shape.uri\") : null;\n // Gephi draws the labels of nodes; an edge's label it does not draw\n const label = target === \"node\" ? table.byRole(\"label\") : null;\n for (let i = 0; i < n; i++) {\n if (label !== null) {\n readLabel(viz, label, i);\n }\n if (color !== null) {\n readVizColor(viz, color, i);\n }\n if (size !== null) {\n readVizSize(viz, size, i);\n }\n // GEXF gives a shape a uri only to name the picture of an `image` shape\n if (shape !== null && readVizShape(viz, shape, i) && uri !== null) {\n readVizImage(viz, uri, i);\n }\n }\n return out;\n}\n\n/**\n * Reads one node's label, which Gephi draws.\n * @param viz - the target's reading\n * @param label - the label column\n * @param i - the element\n */\nfunction readLabel(viz: VizRead, label: NonNullable<ReturnType<GraphSnapshot[\"nodes\"][\"byRole\"]>>, i: number): void {\n const text = canonText(plainCell(label.value(i)), viz.site(i, \"label\"));\n if (text !== null) {\n viz.column(\"label\")[i] = text;\n }\n}\n\n/**\n * Reads the picture of one node whose viz shape is `image`.\n * @param viz - the target's reading\n * @param uri - the viz shape uri column\n * @param i - the element\n */\nfunction readVizImage(viz: VizRead, uri: string, i: number): void {\n const v = plainCell(viz.table.value(uri, i));\n if (typeof v === \"string\" && v.length > 0) {\n viz.column(\"image\")[i] = v;\n }\n}\n\n/**\n * Reads one element's viz color: a fill on a node, a color on an edge, with its alpha as an opacity.\n * @param viz - the target's reading\n * @param color - the viz color column\n * @param i - the element\n */\nfunction readVizColor(viz: VizRead, color: string, i: number): void {\n const v = plainCell(viz.table.value(color, i));\n if (!Array.isArray(v)) {\n return;\n }\n const [fill, opacity] = viz.target === \"node\" ? [\"fill\", \"fillOpacity\"] : [\"color\", \"opacity\"];\n const [r, g, b, a = 1] = v as number[];\n const c = canonColor({ r: r * 255, g: g * 255, b: b * 255, a }, \"gexf\", viz.site(i, fill));\n if (c !== null) {\n viz.column(fill)[i] = c.color;\n if (c.alpha < 1) {\n viz.column(opacity)[i] = c.alpha;\n }\n }\n}\n\n/**\n * Reads one element's viz size (a node's width and height) or thickness (an edge's width).\n * @param viz - the target's reading\n * @param size - the viz size or thickness column\n * @param i - the element\n */\nfunction readVizSize(viz: VizRead, size: string, i: number): void {\n const v = canonNumber(plainCell(viz.table.value(size, i)), viz.site(i, \"width\"));\n if (v !== null) {\n viz.column(\"width\")[i] = v;\n if (viz.target === \"node\") {\n viz.column(\"height\")[i] = v;\n }\n }\n}\n\n/**\n * Reads one element's viz shape: a node's shape, an edge's line style.\n * @param viz - the target's reading\n * @param shape - the viz shape column\n * @param i - the element\n * @returns whether it is an `image` shape\n */\nfunction readVizShape(viz: VizRead, shape: string, i: number): boolean {\n const raw = plainCell(viz.table.value(shape, i));\n if (raw === null) {\n return false;\n }\n const kind = viz.target === \"node\" ? \"shape\" : \"lineStyle\";\n viz.column(kind)[i] = canonEnum(kind, raw, \"gexf\", viz.site(i, kind));\n return typeof raw === \"string\" && raw.toLowerCase() === \"image\";\n}\n\n/**\n * Whether each edge is directed.\n * @param snapshot - the graph\n * @returns one flag per edge\n */\nfunction directedEdges(snapshot: GraphSnapshot): boolean[] {\n const out = new Array<boolean>(snapshot.edgeCount).fill(snapshot.directed);\n const col = snapshot.directed ? snapshot.edges.byRole(\"directed\") : null;\n if (col !== null) {\n for (let e = 0; e < snapshot.edgeCount; e++) {\n out[e] = plainCell(col.value(e)) !== false;\n }\n }\n return out;\n}\n\n/**\n * The rules Gephi's defaults make per element: an arrow at the target of every directed edge, the source node's\n * color on every edge without a color of its own, and the edge's weight as the thickness of every edge without a\n * thickness of its own (Gephi draws GEXF and its GraphML export the same way).\n * @param snapshot - the graph\n * @param nodeFill - each node's fill, or undefined when no node has one\n * @param edgeColor - each edge's own color, or undefined when no edge has one\n * @param budget - the work budget\n * @param edgeWidth - each edge's own width, or undefined when no edge has one\n * @returns the edge rules and the style columns they read\n */\nexport function gephiRules(\n snapshot: GraphSnapshot,\n nodeFill: readonly (StyleValue | null)[] | undefined,\n edgeColor: readonly (StyleValue | null)[] | undefined,\n budget: StyleReadContext[\"budget\"],\n edgeWidth?: readonly (StyleValue | null)[],\n): { readonly rules: StyleRule[]; readonly columns: Map<string, StyleColumn> } {\n const rules: StyleRule[] = [];\n const columns = new Map<string, StyleColumn>();\n const directed = directedEdges(snapshot);\n if (directed.some(Boolean)) {\n columns.set(\n DIRECTED_KEY,\n directed.map((d) => (d ? true : null)),\n );\n rules.push({\n id: \"edge.tool.arrow\",\n target: \"edge\",\n role: \"group\",\n origin: \"tool\",\n where: { has: { style: DIRECTED_KEY } },\n set: { targetArrow: \"triangle\" },\n });\n }\n // Gephi draws an edge without a color in its source node's color. graphty-element cannot bind an edge's color\n // to its source node's drawn color yet, so the color is frozen here; replace this column with that binding once\n // the element has it (tracking issue \"graphty-element: bind an edge's color to its source node's drawn color\").\n // An undirected edge in a directed graph is one edge in the file and two halves here: Gephi draws it once, in\n // the color of the source the file names, so the second half takes the first half's source.\n const first = firstHalf(snapshot);\n const sourceColor = withoutOwn(\n edgeColor,\n snapshot.edgeCount,\n (e) => nodeFill?.[snapshot.edgeSource(first(e))] ?? GEPHI_NODE_FILL,\n );\n const uncolored = sourceColor.filter((v) => v !== null).length;\n budget.spend(\"edge\", snapshot.edgeCount);\n // Gephi draws an edge as thick as its weight (1 for an edge with none); a width of its own is the file's\n // The weights come from the snapshot's own weights (the role column exists only when some edge has none), read\n // as the shortest decimal of their dtype. A weight of 0 or below is drawn 1 wide, so the edge stays visible.\n const weights = explicitWeights(snapshot);\n const weightWidth = withoutOwn(edgeWidth, snapshot.edgeCount, (e) => {\n const w = Number(weights.text(first(e)) ?? 1);\n return Number.isFinite(w) && w > 0 ? w : 1;\n });\n const unsized = weightWidth.filter((v) => v !== null).length;\n if (unsized > 0) {\n columns.set(WEIGHT_WIDTH_KEY, weightWidth);\n rules.push({\n id: \"edge.tool.weight-width\",\n target: \"edge\",\n role: \"passthrough\",\n origin: \"tool\",\n where: { has: { style: WEIGHT_WIDTH_KEY } },\n map: { width: { kind: \"passthrough\", by: { style: WEIGHT_WIDTH_KEY } } },\n facts: { elements: unsized, reason: \"EDGE_WEIGHT\" },\n });\n }\n if (uncolored > 0) {\n columns.set(SOURCE_COLOR_KEY, sourceColor);\n rules.push({\n id: \"edge.tool.source-color\",\n target: \"edge\",\n role: \"passthrough\",\n origin: \"tool\",\n where: { has: { style: SOURCE_COLOR_KEY } },\n map: { color: { kind: \"passthrough\", by: { style: SOURCE_COLOR_KEY } } },\n facts: { elements: uncolored, reason: \"SOURCE_NODE_COLOR\" },\n });\n }\n return { rules, columns };\n}\n\n/**\n * The edge whose source Gephi draws for each edge: an undirected edge in a directed graph is one edge in the file\n * and two halves here, and the second half takes the first half's.\n * @param snapshot - the graph\n * @returns the first half of each edge\n */\nfunction firstHalf(snapshot: GraphSnapshot): (e: number) => number {\n const pair = snapshot.edges.byRole(\"pair\");\n return (e) => (pair?.isSet(e) === true ? Math.min(e, pair.value(e) as number) : e);\n}\n\n/**\n * A default value for every edge without a value of its own.\n * @param own - each edge's own value, or undefined when no edge has one\n * @param count - the edge count\n * @param value - the default of an edge\n * @returns the defaults, null where an edge has its own\n */\nfunction withoutOwn(\n own: readonly (StyleValue | null)[] | undefined,\n count: number,\n value: (e: number) => StyleValue,\n): (StyleValue | null)[] {\n const out = new Array<StyleValue | null>(count).fill(null);\n for (let e = 0; e < count; e++) {\n if (own?.[e] === null || own === undefined) {\n out[e] = value(e);\n }\n }\n return out;\n}\n\n/**\n * The styles of a GEXF file: each node's label and each element's viz values as Gephi draws them, Gephi's defaults beneath\n * (black size-10 discs), an arrow at the target of every directed edge, and the source node's color on every edge\n * without a color of its own; plus a `graphty.styles` block the file holds in `<meta>`.\n * @param snapshot - the graph the import built\n * @param context - the work budget and the block text the import kept\n * @returns the styles\n */\nexport function gexfStyles(snapshot: GraphSnapshot, context: StyleReadContext): ImporterStyles {\n const notes = new StyleNotes();\n const node = vizValues(snapshot, \"node\", notes, context);\n const edge = vizValues(snapshot, \"edge\", notes, context);\n const block = typeof context.kept === \"string\" ? context.kept : null;\n if (block !== null) {\n exactFromBlock(snapshot, block, node, edge);\n }\n const { rules, columns } = gephiRules(snapshot, node.fill, edge.color, context.budget, edge.width);\n return {\n canonical: true,\n dialect: \"gexf\",\n tool: \"gephi\",\n units: \"relative\",\n node: { values: node },\n edge: { values: edge, rules, columns },\n notes: notes.list(),\n opacityInColor: true,\n block,\n readFrom: {\n node: VIZ_COLUMNS.node.filter((name) => vizColumn(snapshot, \"node\", name) !== null),\n edge: VIZ_COLUMNS.edge.filter((name) => vizColumn(snapshot, \"edge\", name) !== null),\n },\n };\n}\n\n/**\n * For a file graphty wrote: where a viz value is the nearest GEXF value of what the `graphty.styles` block gives (a\n * hexagon written as a disc, a width and height written as one size), the block's exact value is the truth, so a\n * re-import gives the same rules. A value that differs from what graphty wrote (another program edited it) stays\n * the truth.\n * @param snapshot - the graph\n * @param text - the block's text\n * @param node - the node values, changed in place\n * @param edge - the edge values, changed in place\n */\nfunction exactFromBlock(\n snapshot: GraphSnapshot,\n text: string,\n node: Record<string, (StyleValue | null)[]>,\n edge: Record<string, (StyleValue | null)[]>,\n): void {\n const parsed = parseStyleBlock(text, styleFingerprint(snapshot));\n const ex = parsed.ok ? blockStyles(parsed.block, snapshot, \"gexf\") : null;\n if (ex === null) {\n return;\n }\n const exact = (\n values: Record<string, (StyleValue | null)[]>,\n target: StyleTarget,\n property: string,\n written: (v: StyleValue, i: number) => StyleValue | null,\n ): void => {\n const native = values[property];\n if (native === undefined) {\n return;\n }\n const want = resolveStyles(ex, target, property as never, snapshot);\n for (let i = 0; i < native.length; i++) {\n const w = want[i];\n // a size is written from the width and the height together: one the block leaves unset reads back too\n const writable = w !== null || property === \"width\" || property === \"height\";\n if (writable && native[i] !== w && native[i] !== null && native[i] === written(w as StyleValue, i)) {\n native[i] = w;\n }\n }\n };\n const width = resolveStyles(ex, \"node\", \"width\", snapshot);\n const height = resolveStyles(ex, \"node\", \"height\", snapshot);\n const size = (i: number): StyleValue | null => {\n const w = width[i];\n const h = height[i];\n return typeof w === \"number\" && typeof h === \"number\" ? Math.max(w, h) : (w ?? h);\n };\n const read = new Map([\n [\"disc\", \"ellipse\"],\n [\"square\", \"rectangle\"],\n ]);\n exact(node, \"node\", \"shape\", (v) => {\n const written = gexfNodeShape(String(v)).value;\n return read.get(written) ?? written;\n });\n exact(edge, \"edge\", \"lineStyle\", (v) => gexfEdgeShape(String(v)).value);\n exact(node, \"node\", \"width\", (_v, i) => size(i));\n exact(node, \"node\", \"height\", (_v, i) => size(i));\n}\n\n// ============================================================ writing\n\n/** A GEXF export with styles worked out. */\nexport interface GexfStyledExport {\n /** The graph to write: the viz-derived columns the styles replace removed, the tagged style values added. */\n readonly snapshot: GraphSnapshot;\n /** The `<meta>` child holding the block. */\n readonly blockElement: string;\n /** The viz elements of one node from the styles. */\n node(row: number, indent: string): string;\n /** The viz elements of one edge from the styles. */\n edge(row: number, indent: string): string;\n /** W_STYLE_APPROXIMATED for every value written as the nearest one GEXF has. */\n readonly notes: readonly LossNote[];\n}\n\n/**\n * The dtype a tagged column is written with: numbers, booleans or text (a mixed column as text).\n * @param col - the values\n * @returns the dtype\n */\nfunction tagDtype(col: StyleColumn): \"f64\" | \"bool\" | \"string\" {\n const kinds = new Set(col.filter((v) => v !== null).map((v) => typeof v));\n if (kinds.size === 1 && kinds.has(\"number\")) {\n return \"f64\";\n }\n return kinds.size === 1 && kinds.has(\"boolean\") ? \"bool\" : \"string\";\n}\n\n/**\n * Works out a GEXF export with styles: the snapshot to write, the viz elements of each element from what graphty\n * draws, the block element and the approximations.\n * @param snapshot - the graph handed to the exporter\n * @param input - the styles, or undefined when none are written\n * @returns the styled export, or null without styles\n */\nexport function gexfStyledExport(\n snapshot: GraphSnapshot,\n input: ExporterStyleInput | undefined,\n): GexfStyledExport | null {\n if (input === undefined) {\n return null;\n }\n const p = (target: StyleTarget, property: string): readonly (StyleValue | null)[] =>\n input.picture(target, property as never);\n const fill = p(\"node\", \"fill\");\n const fillOpacity = p(\"node\", \"fillOpacity\");\n const image = p(\"node\", \"image\");\n const color = p(\"edge\", \"color\");\n const opacity = p(\"edge\", \"opacity\");\n const thickness = p(\"edge\", \"width\");\n const height = p(\"node\", \"height\");\n // the approximations are counted once, up front, so check() reports them before anything is written\n const approximated = new StyleApproximations();\n const nodeShapes = p(\"node\", \"shape\").map((s, i) => gexfShapeOf(s, typeof image[i] === \"string\", approximated));\n const nodeSizes = p(\"node\", \"width\").map((w, i) => gexfSizeOf(w, height[i], approximated));\n const edgeShapes = p(\"edge\", \"lineStyle\").map((s) => gexfLineOf(s, approximated));\n return {\n snapshot: withTagColumns(snapshot, input),\n blockElement: `<graphty:styles xmlns:graphty=\"${GRAPHTY_XML_NAMESPACE}\" name=\"${STYLE_BLOCK_NAME}\">${escapeXml(input.block)}</graphty:styles>`,\n notes: approximated.notes(\"GEXF\"),\n node(i, indent) {\n const size = nodeSizes[i];\n const s = nodeShapes[i];\n return (\n colorElement(fill[i], fillOpacity[i], indent) +\n (size === null ? \"\" : `${indent}<viz:size value=\"${String(size)}\"/>\\n`) +\n shapeElement(s, s === \"image\" ? String(image[i]) : null, indent)\n );\n },\n edge(e, indent) {\n const w = thickness[e];\n return (\n colorElement(color[e], opacity[e], indent) +\n (typeof w === \"number\" ? `${indent}<viz:thickness value=\"${String(w)}\"/>\\n` : \"\") +\n shapeElement(edgeShapes[e], null, indent)\n );\n },\n };\n}\n\n/**\n * The snapshot to write: the viz columns the styles replace removed, the tagged style values and the drawn labels\n * added.\n * @param snapshot - the graph handed to the exporter\n * @param input - the styles\n * @returns the snapshot\n */\nfunction withTagColumns(snapshot: GraphSnapshot, input: ExporterStyleInput): GraphSnapshot {\n const out = snapshot.withColumns();\n for (const target of [\"node\", \"edge\"] as const) {\n const table = target === \"node\" ? out.nodes : out.edges;\n for (const name of VIZ_COLUMNS[target]) {\n if (table.get(name)?.meta.origin?.namespace === VIZ_NAMESPACE) {\n table.remove(name);\n }\n }\n for (const [name, col] of input.tags[target]) {\n const dtype = tagDtype(col);\n table.set(name, dtype === \"string\" ? col.map((v) => (v === null ? null : String(v))) : col, { dtype });\n }\n }\n // a node's label attribute is the label Gephi draws\n const label = input.picture(\"node\", \"label\").map((v) => (typeof v === \"string\" ? v : null));\n out.nodes.set(LABEL_COLUMN, label, { dtype: \"string\", role: \"label\" }, { replaceRole: true });\n return out;\n}\n\n/**\n * A node's GEXF shape. A node with a picture is an `image` shape, the only shape GEXF gives a uri: another shape is\n * not written.\n * @param s - the node's shape\n * @param pictured - whether the node has a picture\n * @param approximated - where approximations are counted\n * @returns the shape, or null for none\n */\nfunction gexfShapeOf(s: StyleValue | null, pictured: boolean, approximated: StyleApproximations): string | null {\n if (pictured) {\n if (typeof s === \"string\" && s !== \"other:image\") {\n approximated.add(\"node\", \"shape\", s);\n }\n return \"image\";\n }\n if (typeof s !== \"string\") {\n return null;\n }\n const g = gexfNodeShape(s);\n if (!g.exact) {\n approximated.add(\"node\", \"shape\", s);\n }\n return g.value;\n}\n\n/**\n * An edge's GEXF shape.\n * @param s - the edge's line style\n * @param approximated - where approximations are counted\n * @returns the shape, or null for none\n */\nfunction gexfLineOf(s: StyleValue | null, approximated: StyleApproximations): string | null {\n if (typeof s !== \"string\") {\n return null;\n }\n const g = gexfEdgeShape(s);\n if (!g.exact) {\n approximated.add(\"edge\", \"lineStyle\", s);\n }\n return g.value;\n}\n\n/**\n * A node's GEXF size: one value, the larger of a width and height that differ.\n * @param w - the node's width\n * @param h - its height\n * @param approximated - where approximations are counted\n * @returns the size, or null for none\n */\nfunction gexfSizeOf(w: StyleValue | null, h: StyleValue | null, approximated: StyleApproximations): number | null {\n if (typeof w === \"number\" && typeof h === \"number\" && w !== h) {\n approximated.add(\"node\", w > h ? \"height\" : \"width\", `${String(w)} x ${String(h)}`);\n return Math.max(w, h);\n }\n if (typeof w === \"number\") {\n return w;\n }\n return typeof h === \"number\" ? h : null;\n}\n\n/**\n * A `<viz:color>` element.\n * @param hex - the color, `#rrggbb`\n * @param alpha - its opacity\n * @param indent - the indentation\n * @returns the element, \"\" without a color\n */\nfunction colorElement(hex: StyleValue | null, alpha: StyleValue | null, indent: string): string {\n if (typeof hex !== \"string\") {\n return \"\";\n }\n const n = Number.parseInt(hex.slice(1), 16);\n const a = typeof alpha === \"number\" && alpha !== 1 ? ` a=\"${String(alpha)}\"` : \"\";\n return `${indent}<viz:color r=\"${String((n >> 16) & 255)}\" g=\"${String((n >> 8) & 255)}\" b=\"${String(n & 255)}\"${a}/>\\n`;\n}\n\n/**\n * A `<viz:shape>` element.\n * @param shape - the GEXF shape, or null\n * @param uri - the picture of an `image` shape, or null\n * @param indent - the indentation\n * @returns the element, \"\" without a shape\n */\nfunction shapeElement(shape: string | null, uri: string | null, indent: string): string {\n if (shape === null) {\n return \"\";\n }\n return uri === null\n ? `${indent}<viz:shape value=\"${shape}\"/>\\n`\n : `${indent}<viz:shape value=\"${shape}\" uri=\"${escapeXml(uri)}\"/>\\n`;\n}\n\n/**\n * Text as XML character data or an attribute value.\n * @param text - the text\n * @returns the escaped text\n */\nfunction escapeXml(text: string): string {\n return text.replaceAll(\"&\", \"&amp;\").replaceAll(\"<\", \"&lt;\").replaceAll(\">\", \"&gt;\").replaceAll('\"', \"&quot;\");\n}\n"],"names":[],"mappings":"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"}