@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
@@ -11,7 +11,9 @@ export {
11
11
  type ArrowAnnotation,
12
12
  type FileAnnotations,
13
13
  type GraphAnnotation,
14
+ type ImageAnnotation,
14
15
  readAnnotations,
16
+ readImageAnnotations,
15
17
  type ShapeAnnotation,
16
18
  type TextAnnotation,
17
19
  } from "./annotations.js";
@@ -29,6 +31,7 @@ export {
29
31
  } from "./cyjs/index.js";
30
32
  export {
31
33
  TOOL_DEFAULTS,
34
+ type ToolArrowhead,
32
35
  type ToolDefaults,
33
36
  toolDefaults,
34
37
  type ToolDefaultValue,
@@ -46,6 +49,7 @@ export {
46
49
  } from "./io/index.js";
47
50
  export {
48
51
  featuresOf,
52
+ matchPredicate,
49
53
  MAX_STYLE_RULES,
50
54
  type PlanOptions,
51
55
  planStyles,
@@ -53,5 +57,6 @@ export {
53
57
  styleFingerprint,
54
58
  type StyleValues,
55
59
  } from "./plan/index.js";
60
+ export { isStyleSlotColumn } from "./slots.js";
56
61
  export type * from "./types.js";
57
62
  export { isStyleValue, STYLE_ENUMS, STYLE_PROPERTIES, type StyleValueKind } from "./vocabulary.js";
@@ -13,5 +13,6 @@ export * from "./defaults.js";
13
13
  export * from "./io/index.js";
14
14
  export * from "./notes.js";
15
15
  export * from "./plan/index.js";
16
+ export * from "./slots.js";
16
17
  export type * from "./types.js";
17
18
  export * from "./vocabulary.js";
@@ -727,6 +727,15 @@ function predicate(v: unknown): Predicate {
727
727
  return o as Predicate;
728
728
  }
729
729
 
730
+ /**
731
+ * A positive finite number.
732
+ * @param v - the parsed value
733
+ * @returns the number
734
+ */
735
+ function positive(v: unknown): number {
736
+ return typeof v === "number" && Number.isFinite(v) && v > 0 ? v : invalid();
737
+ }
738
+
730
739
  /**
731
740
  * A mapping. A mapping of a kind this version does not know is kept and gives no value.
732
741
  * @param v - the parsed mapping
@@ -760,6 +769,7 @@ function mapping(v: unknown): Mapping {
760
769
  above: scalar(q.above),
761
770
  };
762
771
  }),
772
+ ...(o.step === undefined ? {} : { step: positive(o.step) }),
763
773
  };
764
774
  default:
765
775
  return { ...o, kind: name(o.kind), by } as unknown as Mapping;
@@ -9,10 +9,18 @@ import type { GraphSnapshot } from "@graphty/graph-format";
9
9
 
10
10
  import { keptForStyles } from "../../common/report.js";
11
11
  import type { GraphImporter, ImportReport } from "../../types.js";
12
+ import { readAnnotations, readImageAnnotations } from "../annotations.js";
12
13
  import { StyleBudget } from "../budget.js";
13
14
  import { canonColor, colorOpacity } from "../canon/color.js";
14
15
  import { canonEnum, type StyleEnumKind } from "../canon/enums.js";
15
- import { canonBoolean, canonNumber, canonOpacity, DOT_POINTS_PER_INCH, styleLengthUnit } from "../canon/number.js";
16
+ import {
17
+ canonBoolean,
18
+ canonNumber,
19
+ canonOpacity,
20
+ canonSigned,
21
+ DOT_POINTS_PER_INCH,
22
+ styleLengthUnit,
23
+ } from "../canon/number.js";
16
24
  import type { CanonSite } from "../canon/site.js";
17
25
  import { canonText } from "../canon/text.js";
18
26
  import { STYLE_ISSUE } from "../codes.js";
@@ -27,6 +35,7 @@ import type {
27
35
  ReaderOutput,
28
36
  StyleColumn,
29
37
  StyleDialect,
38
+ StyleFingerprint,
30
39
  StyleNote,
31
40
  StyleProperty,
32
41
  StyleTarget,
@@ -64,7 +73,17 @@ export interface ExtractStylesOptions extends StyleImportOptions {
64
73
  }
65
74
 
66
75
  const TARGETS: readonly StyleTarget[] = ["node", "edge"];
67
- const ENUM_KINDS: ReadonlySet<string> = new Set(["shape", "borderStyle", "lineStyle", "arrow", "weight", "position"]);
76
+ const ENUM_KINDS: ReadonlySet<string> = new Set([
77
+ "shape",
78
+ "borderStyle",
79
+ "lineStyle",
80
+ "arrow",
81
+ "arrowSide",
82
+ "weight",
83
+ "position",
84
+ "labelFit",
85
+ "borderPosition",
86
+ ]);
68
87
 
69
88
  /** What the readers here produce before planning: canonical values and the data columns they came from. */
70
89
  interface StyleTruth {
@@ -104,29 +123,18 @@ export function extractStyles(
104
123
  const signal = options.signal ?? undefined;
105
124
  const notes = new StyleNotes();
106
125
  const budget = options.budget ?? new StyleBudget();
126
+ // pictures are read by readImageAnnotations()
127
+ const pictures = readImageAnnotations(snapshot).length > 0;
128
+ for (const kind of readAnnotations(snapshot).skipped) {
129
+ if (!(pictures && kind === "ImageAnnotation")) {
130
+ notes.add(STYLE_ISSUE.ANNOTATION_SKIPPED, "graph", "annotations", { sample: kind });
131
+ }
132
+ }
107
133
  const canonical = readStyleValues(importer, snapshot, report, { notes, budget, signal });
108
134
  const fingerprint = styleFingerprint(snapshot);
109
- const blockText = canonical?.block ?? graphValue(snapshot, STYLE_BLOCK_NAME);
110
- if (blockText !== undefined) {
111
- const parsed = parseStyleBlock(blockText, fingerprint);
112
- if (parsed.ok) {
113
- const truth = canonical === null ? {} : { node: canonical.node.values, edge: canonical.edge.values };
114
- const fromBlock = blockStyles(
115
- parsed.block,
116
- snapshot,
117
- importer.format,
118
- truth,
119
- canonical?.notes ?? [],
120
- canonical?.tool ?? null,
121
- canonical?.opacityInColor === true,
122
- );
123
- if (fromBlock !== null) {
124
- return fromBlock;
125
- }
126
- notes.add(STYLE_ISSUE.BLOCK_IGNORED, null, null, { sample: "INVALID" });
127
- } else {
128
- notes.add(STYLE_ISSUE.BLOCK_IGNORED, null, null, { sample: parsed.reason });
129
- }
135
+ const fromBlock = stylesFromBlock(importer, snapshot, canonical, notes, fingerprint);
136
+ if (fromBlock !== null) {
137
+ return fromBlock;
130
138
  }
131
139
  if (canonical === null) {
132
140
  const list = notes.list();
@@ -163,6 +171,52 @@ export function extractStyles(
163
171
  return { ...planned, styles: { ...planned.styles, notes: [...canonical.notes, ...planned.styles.notes] } };
164
172
  }
165
173
 
174
+ /**
175
+ * The styles a file's `graphty.styles` block gives, with the importer's values as the truth; a block that does not
176
+ * parse or describes another graph is noted as ignored.
177
+ * @param importer - the importer that read the file
178
+ * @param snapshot - the graph it built
179
+ * @param canonical - what the importer read, or null
180
+ * @param notes - the notes so far; an ignored block is noted here
181
+ * @param fingerprint - the graph's style fingerprint
182
+ * @returns the styles, or null when the file has no usable block
183
+ */
184
+ function stylesFromBlock(
185
+ importer: GraphImporter,
186
+ snapshot: GraphSnapshot,
187
+ canonical: ReturnType<typeof readStyleValues>,
188
+ notes: StyleNotes,
189
+ fingerprint: StyleFingerprint,
190
+ ): ExtractedStyles | null {
191
+ const blockText = canonical?.block ?? graphValue(snapshot, STYLE_BLOCK_NAME);
192
+ if (blockText === undefined) {
193
+ return null;
194
+ }
195
+ const parsed = parseStyleBlock(blockText, fingerprint);
196
+ if (!parsed.ok) {
197
+ notes.add(STYLE_ISSUE.BLOCK_IGNORED, null, null, { sample: parsed.reason });
198
+ return null;
199
+ }
200
+ const truth = canonical === null ? {} : { node: canonical.node.values, edge: canonical.edge.values };
201
+ const fromBlock = blockStyles(
202
+ parsed.block,
203
+ snapshot,
204
+ importer.format,
205
+ truth,
206
+ canonical?.notes ?? [],
207
+ canonical?.tool ?? null,
208
+ canonical?.opacityInColor === true,
209
+ );
210
+ if (fromBlock === null) {
211
+ notes.add(STYLE_ISSUE.BLOCK_IGNORED, null, null, { sample: "INVALID" });
212
+ return null;
213
+ }
214
+ const skipped = notes.list();
215
+ return skipped.length === 0
216
+ ? fromBlock
217
+ : { ...fromBlock, styles: { ...fromBlock.styles, notes: [...fromBlock.styles.notes, ...skipped] } };
218
+ }
219
+
166
220
  /**
167
221
  * What a file's styles are before planning: each element's canonical value per property, as the importer's own
168
222
  * `styles()` gives them (the simple path canonicalized) or, for an importer without one, as the generic reader reads
@@ -553,6 +607,8 @@ function canonValue(
553
607
  site,
554
608
  dialect === "graphviz" && (property === "width" || property === "height") ? DOT_POINTS_PER_INCH : 1,
555
609
  );
610
+ case "signed":
611
+ return canonSigned(raw, site);
556
612
  case "opacity":
557
613
  return canonOpacity(raw, dialect, site);
558
614
  case "boolean":
@@ -0,0 +1,202 @@
1
+ /**
2
+ * The round-trip repair every styled format shares: for a file graphty wrote, a value read from the format's own
3
+ * drawing keys that is only what graphty's writer writes for the `graphty.styles` block's exact value (a pentagon
4
+ * written as a hexagon, an opacity rounded to 255 steps) is read as the block's value, so a re-import gives back the
5
+ * same rules. A value another program changed since stays the truth. Each format passes what its writer writes for an
6
+ * element, read back the way its reader reads it.
7
+ */
8
+
9
+ import type { GraphSnapshot } from "@graphty/graph-format";
10
+
11
+ import { styleFingerprint } from "../plan/features.js";
12
+ import { resolveStyles } from "../plan/resolve.js";
13
+ import type { ExtractedStyles, StyleColumn, StyleProperty, StyleTarget, StyleValue } from "../types.js";
14
+ import { blockStyles, parseStyleBlock } from "./block.js";
15
+
16
+ /** One element's value of a property, null when it has none. */
17
+ export type ElementValues = (property: string) => StyleValue | null;
18
+
19
+ /** The block's values of a property, one per element. */
20
+ type BlockValues = (target: StyleTarget, property: string) => readonly (StyleValue | null)[];
21
+
22
+ /**
23
+ * The values a `graphty.styles` block gives every element, worked out once per property.
24
+ * @param snapshot - the graph
25
+ * @param ex - the block's styles
26
+ * @returns the block's values
27
+ */
28
+ function blockValues(snapshot: GraphSnapshot, ex: ExtractedStyles): BlockValues {
29
+ const cache = new Map<string, readonly (StyleValue | null)[]>();
30
+ return (target, property) => {
31
+ const key = `${target} ${property}`;
32
+ let held = cache.get(key);
33
+ if (held === undefined) {
34
+ held = resolveStyles(ex, target, property as StyleProperty, snapshot);
35
+ cache.set(key, held);
36
+ }
37
+ return held;
38
+ };
39
+ }
40
+
41
+ /**
42
+ * Each element's values of the properties a writer writes, as a getter per element; any other property reads as null.
43
+ * @param picture - each element's value of a property
44
+ * @param target - nodes or edges
45
+ * @param properties - the properties the writer writes
46
+ * @returns the getter
47
+ */
48
+ export function elementValues(
49
+ picture: BlockValues,
50
+ target: StyleTarget,
51
+ properties: readonly string[],
52
+ ): (i: number) => ElementValues {
53
+ const columns = new Map<string, readonly (StyleValue | null)[]>();
54
+ for (const p of properties) {
55
+ columns.set(p, picture(target, p));
56
+ }
57
+ return (i) => (property) => columns.get(property)?.[i] ?? null;
58
+ }
59
+
60
+ /** One target's round trip, as a format describes it. */
61
+ interface RoundTrip {
62
+ /** The values the reader read, per property; a property whose values change gets a new array. */
63
+ readonly values: Partial<Record<string, StyleColumn>>;
64
+ /** The properties compared with the block's. */
65
+ readonly properties: Iterable<string>;
66
+ /** The properties the writer is given the block's values of; any other reads as null. Default: every one. */
67
+ readonly writes?: readonly string[];
68
+ /**
69
+ * An element's block values written the way the writer writes them and read back the way the reader reads them.
70
+ * @param i - the element
71
+ * @param want - the element's block values
72
+ * @returns the values read back, or null when the element is not compared
73
+ */
74
+ readBack(i: number, want: ElementValues): ElementValues | null;
75
+ /**
76
+ * Whether a property's value of an element may be taken from the block at all (before comparing). Default: always.
77
+ * @param property - the property
78
+ * @param wanted - the block's value
79
+ * @param native - the value read
80
+ */
81
+ take?(property: string, wanted: StyleValue | null, native: StyleValue | null): boolean;
82
+ }
83
+
84
+ /**
85
+ * Wherever a value read is not the block's but is what the writer writes for the block's value, takes the block's.
86
+ * @param target - nodes or edges
87
+ * @param n - the element count
88
+ * @param block - the block's values
89
+ * @param trip - the target's round trip; its values change in place
90
+ */
91
+ function takeBlockValues(target: StyleTarget, n: number, block: BlockValues, trip: RoundTrip): void {
92
+ const { values } = trip;
93
+ const get = blockGetter(target, block, trip.writes);
94
+ const properties = [...trip.properties];
95
+ const changed = new Map<string, (StyleValue | null)[]>();
96
+ for (let i = 0; i < n; i++) {
97
+ const want = get(i);
98
+ const back = trip.readBack(i, want);
99
+ if (back === null) {
100
+ continue;
101
+ }
102
+ for (const property of properties) {
103
+ const w = want(property);
104
+ if (takes(trip, property, w, values[property]?.[i] ?? null, back)) {
105
+ columnOf(changed, values, property, n)[i] = w;
106
+ }
107
+ }
108
+ }
109
+ for (const [property, column] of changed) {
110
+ values[property] = column;
111
+ }
112
+ }
113
+
114
+ /**
115
+ * Each element's block values, limited to the properties the writer is given when it is given only some.
116
+ * @param target - nodes or edges
117
+ * @param block - the block's values
118
+ * @param writes - the properties the writer is given, or undefined for every one
119
+ * @returns the element's values, by element
120
+ */
121
+ function blockGetter(
122
+ target: StyleTarget,
123
+ block: BlockValues,
124
+ writes: readonly string[] | undefined,
125
+ ): (i: number) => ElementValues {
126
+ if (writes !== undefined) {
127
+ return elementValues(block, target, writes);
128
+ }
129
+ return (i) => (p) => block(target, p)[i] ?? null;
130
+ }
131
+
132
+ /**
133
+ * Whether the block's value replaces the value read: the format allows it, they differ, and the value read is what the
134
+ * writer writes for the block's value.
135
+ * @param trip - the target's round trip
136
+ * @param property - the property
137
+ * @param wanted - the block's value
138
+ * @param native - the value read
139
+ * @param back - the element's block values written and read back
140
+ * @returns whether to take the block's value
141
+ */
142
+ function takes(
143
+ trip: RoundTrip,
144
+ property: string,
145
+ wanted: StyleValue | null,
146
+ native: StyleValue | null,
147
+ back: ElementValues,
148
+ ): boolean {
149
+ return trip.take?.(property, wanted, native) !== false && native !== wanted && native === (back(property) ?? null);
150
+ }
151
+
152
+ /**
153
+ * The changed copy of a property's values, made on first use.
154
+ * @param changed - the changed copies so far
155
+ * @param values - the values read
156
+ * @param property - the property
157
+ * @param n - the element count
158
+ * @returns the property's changed copy
159
+ */
160
+ function columnOf(
161
+ changed: Map<string, (StyleValue | null)[]>,
162
+ values: Partial<Record<string, StyleColumn>>,
163
+ property: string,
164
+ n: number,
165
+ ): (StyleValue | null)[] {
166
+ let column = changed.get(property);
167
+ if (column === undefined) {
168
+ const own = values[property];
169
+ column = own === undefined ? new Array<StyleValue | null>(n).fill(null) : [...own];
170
+ changed.set(property, column);
171
+ }
172
+ return column;
173
+ }
174
+
175
+ /**
176
+ * For a file graphty wrote: wherever a value read from the format's own keys is not the `graphty.styles` block's
177
+ * value but is what graphty's writer writes for it, takes the block's value, so a re-import gives back the same rules.
178
+ * A block that does not parse or describes another graph changes nothing.
179
+ * @param snapshot - the graph
180
+ * @param text - the block's text, or null when the file has none
181
+ * @param format - the format the block was read from
182
+ * @param trip - each target's round trip, given the block's values and its styles; null leaves the target as read
183
+ */
184
+ export function takeFromBlock(
185
+ snapshot: GraphSnapshot,
186
+ text: string | null,
187
+ format: string,
188
+ trip: (target: StyleTarget, block: BlockValues, styles: ExtractedStyles) => RoundTrip | null,
189
+ ): void {
190
+ const parsed = text === null ? null : parseStyleBlock(text, styleFingerprint(snapshot));
191
+ const ex = parsed?.ok === true ? blockStyles(parsed.block, snapshot, format) : null;
192
+ if (ex === null) {
193
+ return;
194
+ }
195
+ const block = blockValues(snapshot, ex);
196
+ for (const target of ["node", "edge"] as const) {
197
+ const t = trip(target, block, ex);
198
+ if (t !== null) {
199
+ takeBlockValues(target, target === "node" ? snapshot.nodeCount : snapshot.edgeCount, block, t);
200
+ }
201
+ }
202
+ }
@@ -9,6 +9,7 @@ import type { GraphSnapshot } from "@graphty/graph-format";
9
9
  import { agree, plural } from "../../common/plural.js";
10
10
  import type { GraphExporter, LossNote } from "../../types.js";
11
11
  import { STYLE_ISSUE } from "../codes.js";
12
+ import { toolDefaults } from "../defaults.js";
12
13
  import { styleFingerprint } from "../plan/features.js";
13
14
  import { canonicalFor, dataCell, degreeValues, plainCell, resolveStyles } from "../plan/resolve.js";
14
15
  import type {
@@ -469,6 +470,7 @@ export function isKeptGraphtyProperty(note: LossNote, exporter: GraphExporter):
469
470
 
470
471
  /**
471
472
  * The losses of an export with styles: W_STYLE_NOT_WRITTEN for every property the format does not write natively
473
+ * that at least one element carries a value of
472
474
  * (all of them for an exporter without a `styles` member), and W_STYLE_RULES_NOT_KEPT when the block is not kept.
473
475
  * @param extracted - the styles
474
476
  * @param exporter - the exporter
@@ -495,7 +497,11 @@ function lossNotes(
495
497
  notes.push(...pairNotes(snapshot, exporter, property, picture("edge", property as StyleProperty)));
496
498
  }
497
499
  } else {
498
- notes.push(notWrittenNote(target, property, exporter, picture));
500
+ // a rule whose property no element ends up carrying loses nothing
501
+ const note = notWrittenNote(target, property, exporter, picture);
502
+ if (note.count !== 0) {
503
+ notes.push(note);
504
+ }
499
505
  }
500
506
  }
501
507
  }
@@ -516,7 +522,8 @@ function lossNotes(
516
522
  }
517
523
 
518
524
  /**
519
- * W_STYLE_NOT_WRITTEN for every graph property the format does not write.
525
+ * W_STYLE_NOT_WRITTEN for every graph property the format does not write, except one whose value is what the program
526
+ * the format is written for draws anyway (a white background for yEd): nothing is lost there.
520
527
  * @param extracted - the styles
521
528
  * @param exporter - the exporter
522
529
  * @param caps - its style capabilities, or null
@@ -528,8 +535,11 @@ function graphLossNotes(
528
535
  caps: StyleWriteCapabilities | null,
529
536
  ): LossNote[] {
530
537
  const graphWritten = new Set<string>(caps?.graph ?? []);
531
- return Object.keys(extracted.styles.graph)
532
- .filter((property) => !graphWritten.has(property))
538
+ const drawn: Readonly<Record<string, { readonly value: unknown } | undefined>> =
539
+ (caps?.tool === undefined ? null : toolDefaults(caps.tool))?.graph ?? {};
540
+ return Object.entries(extracted.styles.graph)
541
+ .filter(([property, value]) => !graphWritten.has(property) && drawn[property]?.value !== value)
542
+ .map(([property]) => property)
533
543
  .map((property) =>
534
544
  Object.freeze({
535
545
  code: STYLE_ISSUE.NOT_WRITTEN,
@@ -27,6 +27,7 @@ const PHRASES: ReadonlyMap<StyleNoteCode, string> = new Map<StyleNoteCode, strin
27
27
  ["W_STYLE_EXTRA_LABELS", "elements have more than one label; the first was kept"],
28
28
  ["W_STYLE_INHERIT_COLOR", "inherited colors cannot be expressed"],
29
29
  ["W_STYLE_NOT_CARRIED", "style properties have no counterpart and were not carried"],
30
+ ["W_STYLE_ANNOTATION_SKIPPED", "annotations of a kind graph-io does not read were skipped"],
30
31
  ["W_STYLE_BAD_MAPPING", "mappings cannot be read"],
31
32
  ["W_STYLE_MAPPING_COLUMN_MISSING", "mappings read a column the file does not have"],
32
33
  ["W_STYLE_REFERENCE_CYCLE", "style references are circular or too deep"],
@@ -5,6 +5,7 @@
5
5
 
6
6
  import type { GraphSnapshot } from "@graphty/graph-format";
7
7
 
8
+ import { pairFolding } from "../../common/direction.js";
8
9
  import type { ColumnRef, Scalar, StyleFeature, StyleFingerprint, StyleTarget } from "../types.js";
9
10
  import { dataCell, degreeValues } from "./resolve.js";
10
11
 
@@ -17,11 +18,29 @@ const PARENT_COLUMN = "graphty.parent";
17
18
  /** An integer column of at least this many values that fills a whole range is an index, not a quantity. */
18
19
  const MIN_INDEX = 8;
19
20
 
21
+ /**
22
+ * Whether the snapshot stores some undirected edge as a pair of directed rows.
23
+ * @param snapshot - the graph
24
+ * @returns true when an edge row folds into its mate
25
+ */
26
+ function hasFoldedPairs(snapshot: GraphSnapshot): boolean {
27
+ const folding = pairFolding(snapshot);
28
+ if (!folding.expanded) {
29
+ return false;
30
+ }
31
+ for (let e = 0; e < snapshot.edgeCount; e++) {
32
+ if (folding.folded(e)) {
33
+ return true;
34
+ }
35
+ }
36
+ return false;
37
+ }
38
+
20
39
  /**
21
40
  * The candidate explaining columns of one target: every scalar attribute (the reserved `graphty.*` columns,
22
41
  * coordinates and Cytoscape's selection state excepted), the group a node sits in as the style column `group`, and
23
42
  * for nodes the degree (and the in- and out-degree of a directed graph) as `{ computed }` references, which follow
24
- * later edits of the graph.
43
+ * later edits of the graph; no degree where an undirected edge is stored as a directed pair.
25
44
  * @param snapshot - the graph
26
45
  * @param target - nodes or edges
27
46
  * @returns the features, in column order with the degrees last
@@ -46,7 +65,9 @@ export function featuresOf(snapshot: GraphSnapshot, target: StyleTarget): StyleF
46
65
  out.push({ ref: { style: "group" }, values: group });
47
66
  }
48
67
  }
49
- if (target === "node" && n > 0) {
68
+ // An undirected edge stored as two directed rows (a mixed file's `*Edges`, a GEXF undirected edge in a directed
69
+ // graph) counts at both ends here and once in a reader that folds the pair, which no explanation may depend on.
70
+ if (target === "node" && n > 0 && !hasFoldedPairs(snapshot)) {
50
71
  const kinds: ("degree" | "indegree" | "outdegree")[] = snapshot.directed
51
72
  ? ["degree", "indegree", "outdegree"]
52
73
  : ["degree"];
@@ -4,4 +4,4 @@
4
4
 
5
5
  export { featuresOf, styleFingerprint } from "./features.js";
6
6
  export { MAX_STYLE_RULES, type PlanOptions, planStyles, type StyleValues } from "./plan.js";
7
- export { resolveStyles } from "./resolve.js";
7
+ export { matchPredicate, resolveStyles } from "./resolve.js";
@@ -8,7 +8,7 @@
8
8
 
9
9
  import { StyleBudget } from "../budget.js";
10
10
  import { STYLE_ISSUE } from "../codes.js";
11
- import { toolDefaults } from "../defaults.js";
11
+ import { toolDefaults, type ToolDerivedDefault } from "../defaults.js";
12
12
  import { StyleNotes } from "../notes.js";
13
13
  import type {
14
14
  ExtractedStyles,
@@ -52,7 +52,19 @@ export const MAX_STYLE_RULES = 16;
52
52
  /** The most candidate features tested per target, fewest distinct values first. */
53
53
  const MAX_FEATURES = 64;
54
54
  /** Lengths a tool states in its own unit; they are left out when the file's unit differs. */
55
- const LENGTHS: ReadonlySet<string> = new Set(["width", "height", "borderWidth", "labelSize"]);
55
+ const LENGTHS: ReadonlySet<string> = new Set([
56
+ "width",
57
+ "height",
58
+ "borderWidth",
59
+ "labelSize",
60
+ "labelWrapWidth",
61
+ "labelPaddingX",
62
+ "labelPaddingY",
63
+ "labelOffsetX",
64
+ "labelOffsetY",
65
+ "fanSpacing",
66
+ "nodeGap",
67
+ ]);
56
68
 
57
69
  /**
58
70
  * What the planner is given: the canonical per-element values a style reader produced, the rules the file declares,
@@ -172,7 +184,7 @@ export function planStyles(values: StyleValues, features: StyleFeatures, options
172
184
  out,
173
185
  allFeatures[target],
174
186
  new Set(options.rawColumns?.[target] ?? []),
175
- toolSet,
187
+ { set: toolSet, derived: defaults?.derived ?? [] },
176
188
  options.signal,
177
189
  ),
178
190
  );
@@ -506,7 +518,9 @@ function passCandidate(
506
518
  * @param out - the reader's output
507
519
  * @param features - the candidate features
508
520
  * @param rawNames - the data columns the values were read from
509
- * @param toolSet - the tool's default values, or null
521
+ * @param tool - the tool's default values (or null) and its defaults that are rules
522
+ * @param tool.set - the tool's default values, or null
523
+ * @param tool.derived - the tool's defaults that are rules
510
524
  * @param signal - cancels the planning
511
525
  * @returns the target's rules, bottom to top
512
526
  */
@@ -515,10 +529,11 @@ function planTarget(
515
529
  out: ReaderOutput | undefined,
516
530
  features: readonly StyleFeature[],
517
531
  rawNames: ReadonlySet<string>,
518
- toolSet: Record<string, StyleValue> | null,
532
+ tool: { readonly set: Record<string, StyleValue> | null; readonly derived: readonly ToolDerivedDefault[] },
519
533
  signal: AbortSignal | undefined,
520
534
  ): StyleRule[] {
521
535
  const { target, n } = plan;
536
+ const toolSet = tool.set;
522
537
  for (const [k, v] of out?.columns ?? []) {
523
538
  plan.columns.set(k, v);
524
539
  }
@@ -536,6 +551,7 @@ function planTarget(
536
551
  set: toolSet,
537
552
  },
538
553
  ];
554
+ toolRule.push(...derivedRules(plan, tool.derived, features, out?.rules ?? [], truth));
539
555
  const declared = prepareDeclared(plan, out?.rules ?? [], features);
540
556
  const declaredProps = new Set(declared.flatMap(writes));
541
557
 
@@ -631,6 +647,50 @@ function planTarget(
631
647
  return drafts.map(finish);
632
648
  }
633
649
 
650
+ /**
651
+ * The tool's defaults that are rules, for those the planner can state over the graph's own columns: a label from a
652
+ * column (Cytoscape's `name`, sigma's and vis-network's `label`) on every node that has a value there, when the reader
653
+ * gives no node a label. A default a reader already states with a tool rule of its own (Graphviz's `\N`, Gephi's
654
+ * source color), or a property the reader gives values for, is the reader's.
655
+ * @param plan - the target's state
656
+ * @param derived - the tool's defaults that are rules
657
+ * @param features - the candidate features, which hold the data columns' values
658
+ * @param given - the reader's rules
659
+ * @param truth - the reader's values per property
660
+ * @returns the rules, bottom to top
661
+ */
662
+ function derivedRules(
663
+ plan: TargetPlan,
664
+ derived: readonly ToolDerivedDefault[],
665
+ features: readonly StyleFeature[],
666
+ given: readonly StyleRule[],
667
+ truth: ReadonlyMap<string, unknown>,
668
+ ): Draft[] {
669
+ const stated = new Set([...given.filter((r) => r.origin === "tool").flatMap(writes), ...truth.keys()]);
670
+ const out: Draft[] = [];
671
+ for (const d of derived) {
672
+ if (plan.target !== "node" || d.kind !== "labelFromColumn" || stated.has("label")) {
673
+ continue;
674
+ }
675
+ const { column } = d;
676
+ const feature = features.find((f) => "data" in f.ref && f.ref.data === column);
677
+ if (feature?.values.some((v) => v !== null && v !== "") !== true) {
678
+ continue;
679
+ }
680
+ stated.add("label");
681
+ out.push({
682
+ id: uniqueId(plan, "node.tool.label"),
683
+ target: "node",
684
+ role: "passthrough",
685
+ origin: "tool",
686
+ where: { has: { data: column } },
687
+ map: { label: { kind: "passthrough", by: { data: column } } },
688
+ facts: { reason: "NODE_NAME" },
689
+ });
690
+ }
691
+ return out;
692
+ }
693
+
634
694
  /**
635
695
  * The inferred defaults: each property non-null and equal on every element; the others are left to explain. A
636
696
  * property a declared rule writes is the declared rule's.
@@ -1009,12 +1069,16 @@ function enforceCap(
1009
1069
  if (cands.length === 0) {
1010
1070
  break;
1011
1071
  }
1072
+ // the tool's defaults (its rule over every element) go last of the tool's rules: the copy holds only the
1073
+ // file's own values, so folding them would leave every element the file does not style with no value at all
1074
+ const everyone = (r: Draft): number => (r.origin === "tool" && "all" in r.where ? 1 : 0);
1012
1075
  cands.sort((a, b) => {
1013
1076
  const pa = a.role === "passthrough" ? 1 : 0;
1014
1077
  const pb = b.role === "passthrough" ? 1 : 0;
1015
1078
  return (
1016
1079
  pa - pb ||
1017
1080
  (FOLD_ORDER[a.origin] ?? 1) - (FOLD_ORDER[b.origin] ?? 1) ||
1081
+ everyone(a) - everyone(b) ||
1018
1082
  ruleSize(b) - ruleSize(a) ||
1019
1083
  drafts.indexOf(b) - drafts.indexOf(a)
1020
1084
  );