@graphty/graph-io 0.3.43 → 0.3.45

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 (674) hide show
  1. package/dist/chunks/approximations-DJMHdDvv.js +40 -0
  2. package/dist/chunks/approximations-DJMHdDvv.js.map +1 -0
  3. package/dist/chunks/block-CPCHkX42.js +2777 -0
  4. package/dist/chunks/block-CPCHkX42.js.map +1 -0
  5. package/dist/chunks/{choose-DvpbdRuz.js → choose--jM0yYCo.js} +3 -2
  6. package/dist/chunks/{choose-DvpbdRuz.js.map → choose--jM0yYCo.js.map} +1 -1
  7. package/dist/chunks/{constants-fT3E8JYY.js → constants-BKwqelYD.js} +6 -2
  8. package/dist/chunks/constants-BKwqelYD.js.map +1 -0
  9. package/dist/chunks/convert-BcQ8_jMo.js +59 -0
  10. package/dist/chunks/convert-BcQ8_jMo.js.map +1 -0
  11. package/dist/chunks/emit-DZy6JgdA.js +3456 -0
  12. package/dist/chunks/emit-DZy6JgdA.js.map +1 -0
  13. package/dist/chunks/{escape-B62ZGM_a.js → escape-CgzxiYPg.js} +44 -21
  14. package/dist/chunks/escape-CgzxiYPg.js.map +1 -0
  15. package/dist/chunks/{export-rKLeGQMo.js → export-BvqAXCKh.js} +196 -792
  16. package/dist/chunks/export-BvqAXCKh.js.map +1 -0
  17. package/dist/chunks/{exporter-yLxKBvLE.js → exporter--Mk9gXCJ.js} +4 -3
  18. package/dist/chunks/{exporter-yLxKBvLE.js.map → exporter--Mk9gXCJ.js.map} +1 -1
  19. package/dist/chunks/{exporter-RVtXVetw.js → exporter-C-9cgZKa.js} +1805 -287
  20. package/dist/chunks/exporter-C-9cgZKa.js.map +1 -0
  21. package/dist/chunks/{exporter-8hLNemFk.js → exporter-DFqJhBnj.js} +133 -74
  22. package/dist/chunks/exporter-DFqJhBnj.js.map +1 -0
  23. package/dist/chunks/{exporter-BWwEuOPT.js → exporter-DteVeJki.js} +22 -12
  24. package/dist/chunks/exporter-DteVeJki.js.map +1 -0
  25. package/dist/chunks/format-BpQBx8MZ.js +676 -0
  26. package/dist/chunks/format-BpQBx8MZ.js.map +1 -0
  27. package/dist/chunks/generic-BGO71QBv.js +1347 -0
  28. package/dist/chunks/generic-BGO71QBv.js.map +1 -0
  29. package/dist/chunks/{importer-C98dpSH4.js → importer-B-9Rc1zO.js} +141 -82
  30. package/dist/chunks/importer-B-9Rc1zO.js.map +1 -0
  31. package/dist/chunks/{importer-D794XUTe.js → importer-BVVR740x.js} +31 -8
  32. package/dist/chunks/importer-BVVR740x.js.map +1 -0
  33. package/dist/chunks/{importer-WrGRZb0N.js → importer-C0AjA3Ax.js} +449 -102
  34. package/dist/chunks/importer-C0AjA3Ax.js.map +1 -0
  35. package/dist/chunks/{importer-BbNb7eNg.js → importer-C7pvJe1L.js} +1398 -129
  36. package/dist/chunks/importer-C7pvJe1L.js.map +1 -0
  37. package/dist/chunks/{importer-xZ-3suY1.js → importer-ClwoVx3O.js} +791 -135
  38. package/dist/chunks/importer-ClwoVx3O.js.map +1 -0
  39. package/dist/chunks/{importer-Ht7LNg8L.js → importer-D0sC_6bO.js} +116 -296
  40. package/dist/chunks/importer-D0sC_6bO.js.map +1 -0
  41. package/dist/chunks/{importer-Dz7tI8Sa.js → importer-EHQk1jbM.js} +617 -115
  42. package/dist/chunks/importer-EHQk1jbM.js.map +1 -0
  43. package/dist/chunks/{json-elements-DKSqpNW1.js → json-elements-DJZRZ6jd.js} +123 -32
  44. package/dist/chunks/json-elements-DJZRZ6jd.js.map +1 -0
  45. package/dist/chunks/lexicon-WMsNddyU.js +509 -0
  46. package/dist/chunks/lexicon-WMsNddyU.js.map +1 -0
  47. package/dist/chunks/{ontology-export-CtRXjg_i.js → ontology-export-G4MqRdux.js} +3 -2
  48. package/dist/chunks/{ontology-export-CtRXjg_i.js.map → ontology-export-G4MqRdux.js.map} +1 -1
  49. package/dist/chunks/{records-Cu4bxYOm.js → records-CiaWZrFH.js} +2 -2
  50. package/dist/chunks/{records-Cu4bxYOm.js.map → records-CiaWZrFH.js.map} +1 -1
  51. package/dist/chunks/styles-DvoFBKCK.js +690 -0
  52. package/dist/chunks/styles-DvoFBKCK.js.map +1 -0
  53. package/dist/chunks/styles-yed-Cz9rLBCP.js +842 -0
  54. package/dist/chunks/styles-yed-Cz9rLBCP.js.map +1 -0
  55. package/dist/chunks/styles-zNTmz5R7.js +2102 -0
  56. package/dist/chunks/styles-zNTmz5R7.js.map +1 -0
  57. package/dist/chunks/{text-DHOJXnED.js → text-CzJNFOS9.js} +2 -2
  58. package/dist/chunks/{text-DHOJXnED.js.map → text-CzJNFOS9.js.map} +1 -1
  59. package/dist/chunks/units-XMZFIFe1.js +19 -0
  60. package/dist/chunks/units-XMZFIFe1.js.map +1 -0
  61. package/dist/chunks/writer-gQ8kx99H.js +448 -0
  62. package/dist/chunks/writer-gQ8kx99H.js.map +1 -0
  63. package/dist/csv.js +5 -4
  64. package/dist/csv.js.map +1 -1
  65. package/dist/cx.js +1 -1
  66. package/dist/cx2.js +2 -2
  67. package/dist/cys.js +1 -1
  68. package/dist/dot.js +5 -2
  69. package/dist/dot.js.map +1 -1
  70. package/dist/gexf.js +292 -412
  71. package/dist/gexf.js.map +1 -1
  72. package/dist/gml.js +927 -74
  73. package/dist/gml.js.map +1 -1
  74. package/dist/graph-io.js +351 -236
  75. package/dist/graph-io.js.map +1 -1
  76. package/dist/graphml.js +4 -2
  77. package/dist/graphml.js.map +1 -1
  78. package/dist/json.js +1 -1
  79. package/dist/neo4j.js +4 -3
  80. package/dist/neo4j.js.map +1 -1
  81. package/dist/obo.js +1 -1
  82. package/dist/pajek.js +4 -2
  83. package/dist/positions.d.ts +1 -0
  84. package/dist/positions.js +427 -0
  85. package/dist/positions.js.map +1 -0
  86. package/dist/src/common/codes.d.ts +6 -0
  87. package/dist/src/common/codes.d.ts.map +1 -1
  88. package/dist/src/common/codes.js +6 -0
  89. package/dist/src/common/codes.js.map +1 -1
  90. package/dist/src/common/escape.d.ts.map +1 -1
  91. package/dist/src/common/escape.js +4 -2
  92. package/dist/src/common/escape.js.map +1 -1
  93. package/dist/src/common/export.d.ts +10 -0
  94. package/dist/src/common/export.d.ts.map +1 -1
  95. package/dist/src/common/export.js +123 -100
  96. package/dist/src/common/export.js.map +1 -1
  97. package/dist/src/common/input.d.ts.map +1 -1
  98. package/dist/src/common/input.js +8 -1
  99. package/dist/src/common/input.js.map +1 -1
  100. package/dist/src/common/json-elements.d.ts +12 -9
  101. package/dist/src/common/json-elements.d.ts.map +1 -1
  102. package/dist/src/common/json-elements.js +160 -37
  103. package/dist/src/common/json-elements.js.map +1 -1
  104. package/dist/src/common/notes.d.ts +42 -0
  105. package/dist/src/common/notes.d.ts.map +1 -0
  106. package/dist/src/common/notes.js +72 -0
  107. package/dist/src/common/notes.js.map +1 -0
  108. package/dist/src/common/report.d.ts +18 -0
  109. package/dist/src/common/report.d.ts.map +1 -1
  110. package/dist/src/common/report.js +36 -1
  111. package/dist/src/common/report.js.map +1 -1
  112. package/dist/src/common/units.d.ts +24 -0
  113. package/dist/src/common/units.d.ts.map +1 -0
  114. package/dist/src/common/units.js +26 -0
  115. package/dist/src/common/units.js.map +1 -0
  116. package/dist/src/common/xml.d.ts +18 -0
  117. package/dist/src/common/xml.d.ts.map +1 -1
  118. package/dist/src/common/xml.js +42 -5
  119. package/dist/src/common/xml.js.map +1 -1
  120. package/dist/src/formats/cx/exporter.d.ts +6 -0
  121. package/dist/src/formats/cx/exporter.d.ts.map +1 -1
  122. package/dist/src/formats/cx/exporter.js +71 -8
  123. package/dist/src/formats/cx/exporter.js.map +1 -1
  124. package/dist/src/formats/cx/importer.d.ts +5 -2
  125. package/dist/src/formats/cx/importer.d.ts.map +1 -1
  126. package/dist/src/formats/cx/importer.js +102 -72
  127. package/dist/src/formats/cx/importer.js.map +1 -1
  128. package/dist/src/formats/cx/styles.d.ts +102 -0
  129. package/dist/src/formats/cx/styles.d.ts.map +1 -0
  130. package/dist/src/formats/cx/styles.js +225 -0
  131. package/dist/src/formats/cx/styles.js.map +1 -0
  132. package/dist/src/formats/cx2/exporter.d.ts +5 -0
  133. package/dist/src/formats/cx2/exporter.d.ts.map +1 -1
  134. package/dist/src/formats/cx2/exporter.js +181 -71
  135. package/dist/src/formats/cx2/exporter.js.map +1 -1
  136. package/dist/src/formats/cx2/importer.d.ts +4 -1
  137. package/dist/src/formats/cx2/importer.d.ts.map +1 -1
  138. package/dist/src/formats/cx2/importer.js +19 -1
  139. package/dist/src/formats/cx2/importer.js.map +1 -1
  140. package/dist/src/formats/cx2/styles.d.ts +18 -0
  141. package/dist/src/formats/cx2/styles.d.ts.map +1 -0
  142. package/dist/src/formats/cx2/styles.js +24 -0
  143. package/dist/src/formats/cx2/styles.js.map +1 -0
  144. package/dist/src/formats/cys/constants.d.ts +2 -0
  145. package/dist/src/formats/cys/constants.d.ts.map +1 -1
  146. package/dist/src/formats/cys/constants.js +2 -0
  147. package/dist/src/formats/cys/constants.js.map +1 -1
  148. package/dist/src/formats/cys/exporter.d.ts +6 -2
  149. package/dist/src/formats/cys/exporter.d.ts.map +1 -1
  150. package/dist/src/formats/cys/exporter.js +215 -53
  151. package/dist/src/formats/cys/exporter.js.map +1 -1
  152. package/dist/src/formats/cys/importer.d.ts +2 -1
  153. package/dist/src/formats/cys/importer.d.ts.map +1 -1
  154. package/dist/src/formats/cys/importer.js +119 -6
  155. package/dist/src/formats/cys/importer.js.map +1 -1
  156. package/dist/src/formats/cys/session.d.ts +2 -0
  157. package/dist/src/formats/cys/session.d.ts.map +1 -1
  158. package/dist/src/formats/cys/session.js +5 -0
  159. package/dist/src/formats/cys/session.js.map +1 -1
  160. package/dist/src/formats/cys/styles.d.ts +38 -0
  161. package/dist/src/formats/cys/styles.d.ts.map +1 -0
  162. package/dist/src/formats/cys/styles.js +213 -0
  163. package/dist/src/formats/cys/styles.js.map +1 -0
  164. package/dist/src/formats/cys/tables.d.ts +8 -3
  165. package/dist/src/formats/cys/tables.d.ts.map +1 -1
  166. package/dist/src/formats/cys/tables.js +88 -34
  167. package/dist/src/formats/cys/tables.js.map +1 -1
  168. package/dist/src/formats/dot/exporter.d.ts +2 -0
  169. package/dist/src/formats/dot/exporter.d.ts.map +1 -1
  170. package/dist/src/formats/dot/exporter.js +195 -81
  171. package/dist/src/formats/dot/exporter.js.map +1 -1
  172. package/dist/src/formats/dot/importer.d.ts.map +1 -1
  173. package/dist/src/formats/dot/importer.js +100 -20
  174. package/dist/src/formats/dot/importer.js.map +1 -1
  175. package/dist/src/formats/dot/index.d.ts +1 -0
  176. package/dist/src/formats/dot/index.d.ts.map +1 -1
  177. package/dist/src/formats/dot/index.js +1 -0
  178. package/dist/src/formats/dot/index.js.map +1 -1
  179. package/dist/src/formats/dot/positions.d.ts +14 -0
  180. package/dist/src/formats/dot/positions.d.ts.map +1 -0
  181. package/dist/src/formats/dot/positions.js +70 -0
  182. package/dist/src/formats/dot/positions.js.map +1 -0
  183. package/dist/src/formats/dot/styles.d.ts +82 -0
  184. package/dist/src/formats/dot/styles.d.ts.map +1 -0
  185. package/dist/src/formats/dot/styles.js +1496 -0
  186. package/dist/src/formats/dot/styles.js.map +1 -0
  187. package/dist/src/formats/gexf/exporter.d.ts.map +1 -1
  188. package/dist/src/formats/gexf/exporter.js +20 -5
  189. package/dist/src/formats/gexf/exporter.js.map +1 -1
  190. package/dist/src/formats/gexf/importer.d.ts +8 -1
  191. package/dist/src/formats/gexf/importer.d.ts.map +1 -1
  192. package/dist/src/formats/gexf/importer.js +251 -131
  193. package/dist/src/formats/gexf/importer.js.map +1 -1
  194. package/dist/src/formats/gexf/index.d.ts +8 -0
  195. package/dist/src/formats/gexf/index.d.ts.map +1 -1
  196. package/dist/src/formats/gexf/index.js +10 -2
  197. package/dist/src/formats/gexf/index.js.map +1 -1
  198. package/dist/src/formats/gexf/schema.d.ts +5 -0
  199. package/dist/src/formats/gexf/schema.d.ts.map +1 -1
  200. package/dist/src/formats/gexf/schema.js +5 -0
  201. package/dist/src/formats/gexf/schema.js.map +1 -1
  202. package/dist/src/formats/gexf/styles.d.ts +74 -0
  203. package/dist/src/formats/gexf/styles.d.ts.map +1 -0
  204. package/dist/src/formats/gexf/styles.js +604 -0
  205. package/dist/src/formats/gexf/styles.js.map +1 -0
  206. package/dist/src/formats/gml/exporter.d.ts +1 -5
  207. package/dist/src/formats/gml/exporter.d.ts.map +1 -1
  208. package/dist/src/formats/gml/exporter.js +19 -8
  209. package/dist/src/formats/gml/exporter.js.map +1 -1
  210. package/dist/src/formats/gml/importer.d.ts.map +1 -1
  211. package/dist/src/formats/gml/importer.js +4 -0
  212. package/dist/src/formats/gml/importer.js.map +1 -1
  213. package/dist/src/formats/gml/index.d.ts +2 -1
  214. package/dist/src/formats/gml/index.d.ts.map +1 -1
  215. package/dist/src/formats/gml/index.js +2 -1
  216. package/dist/src/formats/gml/index.js.map +1 -1
  217. package/dist/src/formats/gml/positions.d.ts +14 -0
  218. package/dist/src/formats/gml/positions.d.ts.map +1 -0
  219. package/dist/src/formats/gml/positions.js +46 -0
  220. package/dist/src/formats/gml/positions.js.map +1 -0
  221. package/dist/src/formats/gml/styles.d.ts +59 -0
  222. package/dist/src/formats/gml/styles.d.ts.map +1 -0
  223. package/dist/src/formats/gml/styles.js +1056 -0
  224. package/dist/src/formats/gml/styles.js.map +1 -0
  225. package/dist/src/formats/gml/syntax.d.ts +11 -0
  226. package/dist/src/formats/gml/syntax.d.ts.map +1 -1
  227. package/dist/src/formats/gml/syntax.js +151 -62
  228. package/dist/src/formats/gml/syntax.js.map +1 -1
  229. package/dist/src/formats/graphml/constants.d.ts +4 -0
  230. package/dist/src/formats/graphml/constants.d.ts.map +1 -1
  231. package/dist/src/formats/graphml/constants.js +5 -1
  232. package/dist/src/formats/graphml/constants.js.map +1 -1
  233. package/dist/src/formats/graphml/exporter.d.ts.map +1 -1
  234. package/dist/src/formats/graphml/exporter.js +133 -65
  235. package/dist/src/formats/graphml/exporter.js.map +1 -1
  236. package/dist/src/formats/graphml/importer.d.ts +4 -1
  237. package/dist/src/formats/graphml/importer.d.ts.map +1 -1
  238. package/dist/src/formats/graphml/importer.js +100 -44
  239. package/dist/src/formats/graphml/importer.js.map +1 -1
  240. package/dist/src/formats/graphml/index.d.ts +1 -0
  241. package/dist/src/formats/graphml/index.d.ts.map +1 -1
  242. package/dist/src/formats/graphml/index.js +1 -0
  243. package/dist/src/formats/graphml/index.js.map +1 -1
  244. package/dist/src/formats/graphml/styles-plain.d.ts +19 -0
  245. package/dist/src/formats/graphml/styles-plain.d.ts.map +1 -0
  246. package/dist/src/formats/graphml/styles-plain.js +187 -0
  247. package/dist/src/formats/graphml/styles-plain.js.map +1 -0
  248. package/dist/src/formats/graphml/styles-yed.d.ts +179 -0
  249. package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -0
  250. package/dist/src/formats/graphml/styles-yed.js +1086 -0
  251. package/dist/src/formats/graphml/styles-yed.js.map +1 -0
  252. package/dist/src/formats/graphml/styles-yfiles3.d.ts +19 -0
  253. package/dist/src/formats/graphml/styles-yfiles3.d.ts.map +1 -0
  254. package/dist/src/formats/graphml/styles-yfiles3.js +508 -0
  255. package/dist/src/formats/graphml/styles-yfiles3.js.map +1 -0
  256. package/dist/src/formats/graphml/tree.d.ts.map +1 -1
  257. package/dist/src/formats/graphml/tree.js +34 -19
  258. package/dist/src/formats/graphml/tree.js.map +1 -1
  259. package/dist/src/formats/graphml/yfiles.d.ts +16 -2
  260. package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
  261. package/dist/src/formats/graphml/yfiles.js +83 -12
  262. package/dist/src/formats/graphml/yfiles.js.map +1 -1
  263. package/dist/src/formats/json/exporter.d.ts +5 -0
  264. package/dist/src/formats/json/exporter.d.ts.map +1 -1
  265. package/dist/src/formats/json/exporter.js +68 -25
  266. package/dist/src/formats/json/exporter.js.map +1 -1
  267. package/dist/src/formats/json/importer.d.ts +22 -3
  268. package/dist/src/formats/json/importer.d.ts.map +1 -1
  269. package/dist/src/formats/json/importer.js +439 -264
  270. package/dist/src/formats/json/importer.js.map +1 -1
  271. package/dist/src/formats/json/positions.d.ts +16 -0
  272. package/dist/src/formats/json/positions.d.ts.map +1 -0
  273. package/dist/src/formats/json/positions.js +44 -0
  274. package/dist/src/formats/json/positions.js.map +1 -0
  275. package/dist/src/formats/json/styles.d.ts +102 -0
  276. package/dist/src/formats/json/styles.d.ts.map +1 -0
  277. package/dist/src/formats/json/styles.js +1753 -0
  278. package/dist/src/formats/json/styles.js.map +1 -0
  279. package/dist/src/formats/neo4j/exporter.d.ts.map +1 -1
  280. package/dist/src/formats/neo4j/exporter.js +2 -1
  281. package/dist/src/formats/neo4j/exporter.js.map +1 -1
  282. package/dist/src/formats/pajek/exporter.d.ts +2 -0
  283. package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
  284. package/dist/src/formats/pajek/exporter.js +142 -76
  285. package/dist/src/formats/pajek/exporter.js.map +1 -1
  286. package/dist/src/formats/pajek/importer.d.ts +4 -0
  287. package/dist/src/formats/pajek/importer.d.ts.map +1 -1
  288. package/dist/src/formats/pajek/importer.js +60 -6
  289. package/dist/src/formats/pajek/importer.js.map +1 -1
  290. package/dist/src/formats/pajek/index.d.ts +2 -0
  291. package/dist/src/formats/pajek/index.d.ts.map +1 -1
  292. package/dist/src/formats/pajek/index.js +2 -0
  293. package/dist/src/formats/pajek/index.js.map +1 -1
  294. package/dist/src/formats/pajek/styles.d.ts +50 -0
  295. package/dist/src/formats/pajek/styles.d.ts.map +1 -0
  296. package/dist/src/formats/pajek/styles.js +569 -0
  297. package/dist/src/formats/pajek/styles.js.map +1 -0
  298. package/dist/src/formats/pajek/syntax.d.ts +6 -0
  299. package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
  300. package/dist/src/formats/pajek/syntax.js +6 -0
  301. package/dist/src/formats/pajek/syntax.js.map +1 -1
  302. package/dist/src/formats/xgmml/columns.d.ts.map +1 -1
  303. package/dist/src/formats/xgmml/columns.js +34 -9
  304. package/dist/src/formats/xgmml/columns.js.map +1 -1
  305. package/dist/src/formats/xgmml/constants.d.ts +2 -0
  306. package/dist/src/formats/xgmml/constants.d.ts.map +1 -1
  307. package/dist/src/formats/xgmml/constants.js +3 -1
  308. package/dist/src/formats/xgmml/constants.js.map +1 -1
  309. package/dist/src/formats/xgmml/document.d.ts +12 -8
  310. package/dist/src/formats/xgmml/document.d.ts.map +1 -1
  311. package/dist/src/formats/xgmml/document.js +56 -13
  312. package/dist/src/formats/xgmml/document.js.map +1 -1
  313. package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
  314. package/dist/src/formats/xgmml/emit.js +12 -6
  315. package/dist/src/formats/xgmml/emit.js.map +1 -1
  316. package/dist/src/formats/xgmml/exporter.d.ts +3 -1
  317. package/dist/src/formats/xgmml/exporter.d.ts.map +1 -1
  318. package/dist/src/formats/xgmml/exporter.js +22 -9
  319. package/dist/src/formats/xgmml/exporter.js.map +1 -1
  320. package/dist/src/formats/xgmml/importer.d.ts +2 -1
  321. package/dist/src/formats/xgmml/importer.d.ts.map +1 -1
  322. package/dist/src/formats/xgmml/importer.js +31 -24
  323. package/dist/src/formats/xgmml/importer.js.map +1 -1
  324. package/dist/src/formats/xgmml/styles.d.ts +104 -0
  325. package/dist/src/formats/xgmml/styles.d.ts.map +1 -0
  326. package/dist/src/formats/xgmml/styles.js +310 -0
  327. package/dist/src/formats/xgmml/styles.js.map +1 -0
  328. package/dist/src/index.d.ts +9 -7
  329. package/dist/src/index.d.ts.map +1 -1
  330. package/dist/src/index.js +7 -7
  331. package/dist/src/index.js.map +1 -1
  332. package/dist/src/positions/codes.d.ts +31 -0
  333. package/dist/src/positions/codes.d.ts.map +1 -0
  334. package/dist/src/positions/codes.js +26 -0
  335. package/dist/src/positions/codes.js.map +1 -0
  336. package/dist/src/positions/convert.d.ts +58 -0
  337. package/dist/src/positions/convert.d.ts.map +1 -0
  338. package/dist/src/positions/convert.js +107 -0
  339. package/dist/src/positions/convert.js.map +1 -0
  340. package/dist/src/positions/extract.d.ts +27 -0
  341. package/dist/src/positions/extract.d.ts.map +1 -0
  342. package/dist/src/positions/extract.js +526 -0
  343. package/dist/src/positions/extract.js.map +1 -0
  344. package/dist/src/positions/index.d.ts +10 -0
  345. package/dist/src/positions/index.d.ts.map +1 -0
  346. package/dist/src/positions/index.js +9 -0
  347. package/dist/src/positions/index.js.map +1 -0
  348. package/dist/src/positions/types.d.ts +208 -0
  349. package/dist/src/positions/types.d.ts.map +1 -0
  350. package/dist/src/positions/types.js +10 -0
  351. package/dist/src/positions/types.js.map +1 -0
  352. package/dist/src/registry.d.ts +30 -0
  353. package/dist/src/registry.d.ts.map +1 -1
  354. package/dist/src/registry.js +130 -9
  355. package/dist/src/registry.js.map +1 -1
  356. package/dist/src/styles/annotations.d.ts +132 -0
  357. package/dist/src/styles/annotations.d.ts.map +1 -0
  358. package/dist/src/styles/annotations.js +320 -0
  359. package/dist/src/styles/annotations.js.map +1 -0
  360. package/dist/src/styles/budget.d.ts +45 -0
  361. package/dist/src/styles/budget.d.ts.map +1 -0
  362. package/dist/src/styles/budget.js +58 -0
  363. package/dist/src/styles/budget.js.map +1 -0
  364. package/dist/src/styles/canon/bends.d.ts +32 -0
  365. package/dist/src/styles/canon/bends.d.ts.map +1 -0
  366. package/dist/src/styles/canon/bends.js +74 -0
  367. package/dist/src/styles/canon/bends.js.map +1 -0
  368. package/dist/src/styles/canon/color-tables.d.ts +22 -0
  369. package/dist/src/styles/canon/color-tables.d.ts.map +1 -0
  370. package/dist/src/styles/canon/color-tables.js +369 -0
  371. package/dist/src/styles/canon/color-tables.js.map +1 -0
  372. package/dist/src/styles/canon/color.d.ts +66 -0
  373. package/dist/src/styles/canon/color.d.ts.map +1 -0
  374. package/dist/src/styles/canon/color.js +548 -0
  375. package/dist/src/styles/canon/color.js.map +1 -0
  376. package/dist/src/styles/canon/enums.d.ts +25 -0
  377. package/dist/src/styles/canon/enums.d.ts.map +1 -0
  378. package/dist/src/styles/canon/enums.js +187 -0
  379. package/dist/src/styles/canon/enums.js.map +1 -0
  380. package/dist/src/styles/canon/graphviz.d.ts +48 -0
  381. package/dist/src/styles/canon/graphviz.d.ts.map +1 -0
  382. package/dist/src/styles/canon/graphviz.js +160 -0
  383. package/dist/src/styles/canon/graphviz.js.map +1 -0
  384. package/dist/src/styles/canon/index.d.ts +13 -0
  385. package/dist/src/styles/canon/index.d.ts.map +1 -0
  386. package/dist/src/styles/canon/index.js +13 -0
  387. package/dist/src/styles/canon/index.js.map +1 -0
  388. package/dist/src/styles/canon/number.d.ts +59 -0
  389. package/dist/src/styles/canon/number.d.ts.map +1 -0
  390. package/dist/src/styles/canon/number.js +142 -0
  391. package/dist/src/styles/canon/number.js.map +1 -0
  392. package/dist/src/styles/canon/site.d.ts +51 -0
  393. package/dist/src/styles/canon/site.d.ts.map +1 -0
  394. package/dist/src/styles/canon/site.js +63 -0
  395. package/dist/src/styles/canon/site.js.map +1 -0
  396. package/dist/src/styles/canon/text.d.ts +61 -0
  397. package/dist/src/styles/canon/text.d.ts.map +1 -0
  398. package/dist/src/styles/canon/text.js +199 -0
  399. package/dist/src/styles/canon/text.js.map +1 -0
  400. package/dist/src/styles/codes.d.ts +95 -0
  401. package/dist/src/styles/codes.d.ts.map +1 -0
  402. package/dist/src/styles/codes.js +97 -0
  403. package/dist/src/styles/codes.js.map +1 -0
  404. package/dist/src/styles/cyjs/cascade.d.ts +134 -0
  405. package/dist/src/styles/cyjs/cascade.d.ts.map +1 -0
  406. package/dist/src/styles/cyjs/cascade.js +2252 -0
  407. package/dist/src/styles/cyjs/cascade.js.map +1 -0
  408. package/dist/src/styles/cyjs/defaults-table.d.ts +25 -0
  409. package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -0
  410. package/dist/src/styles/cyjs/defaults-table.js +76 -0
  411. package/dist/src/styles/cyjs/defaults-table.js.map +1 -0
  412. package/dist/src/styles/cyjs/emit.d.ts +82 -0
  413. package/dist/src/styles/cyjs/emit.d.ts.map +1 -0
  414. package/dist/src/styles/cyjs/emit.js +791 -0
  415. package/dist/src/styles/cyjs/emit.js.map +1 -0
  416. package/dist/src/styles/cyjs/index.d.ts +13 -0
  417. package/dist/src/styles/cyjs/index.d.ts.map +1 -0
  418. package/dist/src/styles/cyjs/index.js +13 -0
  419. package/dist/src/styles/cyjs/index.js.map +1 -0
  420. package/dist/src/styles/cyjs/live.d.ts +46 -0
  421. package/dist/src/styles/cyjs/live.d.ts.map +1 -0
  422. package/dist/src/styles/cyjs/live.js +108 -0
  423. package/dist/src/styles/cyjs/live.js.map +1 -0
  424. package/dist/src/styles/cyjs/mappers.d.ts +147 -0
  425. package/dist/src/styles/cyjs/mappers.d.ts.map +1 -0
  426. package/dist/src/styles/cyjs/mappers.js +744 -0
  427. package/dist/src/styles/cyjs/mappers.js.map +1 -0
  428. package/dist/src/styles/cyjs/selector.d.ts +113 -0
  429. package/dist/src/styles/cyjs/selector.d.ts.map +1 -0
  430. package/dist/src/styles/cyjs/selector.js +611 -0
  431. package/dist/src/styles/cyjs/selector.js.map +1 -0
  432. package/dist/src/styles/cyjs/stylesheet-text.d.ts +37 -0
  433. package/dist/src/styles/cyjs/stylesheet-text.d.ts.map +1 -0
  434. package/dist/src/styles/cyjs/stylesheet-text.js +181 -0
  435. package/dist/src/styles/cyjs/stylesheet-text.js.map +1 -0
  436. package/dist/src/styles/cytoscape/emit.d.ts +125 -0
  437. package/dist/src/styles/cytoscape/emit.d.ts.map +1 -0
  438. package/dist/src/styles/cytoscape/emit.js +1025 -0
  439. package/dist/src/styles/cytoscape/emit.js.map +1 -0
  440. package/dist/src/styles/cytoscape/index.d.ts +10 -0
  441. package/dist/src/styles/cytoscape/index.d.ts.map +1 -0
  442. package/dist/src/styles/cytoscape/index.js +10 -0
  443. package/dist/src/styles/cytoscape/index.js.map +1 -0
  444. package/dist/src/styles/cytoscape/lexicon.d.ts +49 -0
  445. package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -0
  446. package/dist/src/styles/cytoscape/lexicon.js +605 -0
  447. package/dist/src/styles/cytoscape/lexicon.js.map +1 -0
  448. package/dist/src/styles/cytoscape/mappings.d.ts +171 -0
  449. package/dist/src/styles/cytoscape/mappings.d.ts.map +1 -0
  450. package/dist/src/styles/cytoscape/mappings.js +460 -0
  451. package/dist/src/styles/cytoscape/mappings.js.map +1 -0
  452. package/dist/src/styles/cytoscape/resolve.d.ts +137 -0
  453. package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -0
  454. package/dist/src/styles/cytoscape/resolve.js +381 -0
  455. package/dist/src/styles/cytoscape/resolve.js.map +1 -0
  456. package/dist/src/styles/cytoscape/translate.d.ts +50 -0
  457. package/dist/src/styles/cytoscape/translate.d.ts.map +1 -0
  458. package/dist/src/styles/cytoscape/translate.js +156 -0
  459. package/dist/src/styles/cytoscape/translate.js.map +1 -0
  460. package/dist/src/styles/defaults.d.ts +90 -0
  461. package/dist/src/styles/defaults.d.ts.map +1 -0
  462. package/dist/src/styles/defaults.js +414 -0
  463. package/dist/src/styles/defaults.js.map +1 -0
  464. package/dist/src/styles/index.d.ts +15 -0
  465. package/dist/src/styles/index.d.ts.map +1 -0
  466. package/dist/src/styles/index.js +14 -0
  467. package/dist/src/styles/index.js.map +1 -0
  468. package/dist/src/styles/internal.d.ts +17 -0
  469. package/dist/src/styles/internal.d.ts.map +1 -0
  470. package/dist/src/styles/internal.js +16 -0
  471. package/dist/src/styles/internal.js.map +1 -0
  472. package/dist/src/styles/io/approximations.d.ts +24 -0
  473. package/dist/src/styles/io/approximations.d.ts.map +1 -0
  474. package/dist/src/styles/io/approximations.js +51 -0
  475. package/dist/src/styles/io/approximations.js.map +1 -0
  476. package/dist/src/styles/io/block.d.ts +166 -0
  477. package/dist/src/styles/io/block.d.ts.map +1 -0
  478. package/dist/src/styles/io/block.js +930 -0
  479. package/dist/src/styles/io/block.js.map +1 -0
  480. package/dist/src/styles/io/generic.d.ts +88 -0
  481. package/dist/src/styles/io/generic.d.ts.map +1 -0
  482. package/dist/src/styles/io/generic.js +516 -0
  483. package/dist/src/styles/io/generic.js.map +1 -0
  484. package/dist/src/styles/io/index.d.ts +8 -0
  485. package/dist/src/styles/io/index.d.ts.map +1 -0
  486. package/dist/src/styles/io/index.js +7 -0
  487. package/dist/src/styles/io/index.js.map +1 -0
  488. package/dist/src/styles/io/writer.d.ts +89 -0
  489. package/dist/src/styles/io/writer.d.ts.map +1 -0
  490. package/dist/src/styles/io/writer.js +626 -0
  491. package/dist/src/styles/io/writer.js.map +1 -0
  492. package/dist/src/styles/notes.d.ts +47 -0
  493. package/dist/src/styles/notes.d.ts.map +1 -0
  494. package/dist/src/styles/notes.js +140 -0
  495. package/dist/src/styles/notes.js.map +1 -0
  496. package/dist/src/styles/plan/classes.d.ts +31 -0
  497. package/dist/src/styles/plan/classes.d.ts.map +1 -0
  498. package/dist/src/styles/plan/classes.js +139 -0
  499. package/dist/src/styles/plan/classes.js.map +1 -0
  500. package/dist/src/styles/plan/continuous.d.ts +32 -0
  501. package/dist/src/styles/plan/continuous.d.ts.map +1 -0
  502. package/dist/src/styles/plan/continuous.js +165 -0
  503. package/dist/src/styles/plan/continuous.js.map +1 -0
  504. package/dist/src/styles/plan/discrete.d.ts +39 -0
  505. package/dist/src/styles/plan/discrete.d.ts.map +1 -0
  506. package/dist/src/styles/plan/discrete.js +127 -0
  507. package/dist/src/styles/plan/discrete.js.map +1 -0
  508. package/dist/src/styles/plan/families.d.ts +31 -0
  509. package/dist/src/styles/plan/families.d.ts.map +1 -0
  510. package/dist/src/styles/plan/families.js +95 -0
  511. package/dist/src/styles/plan/families.js.map +1 -0
  512. package/dist/src/styles/plan/features.d.ts +58 -0
  513. package/dist/src/styles/plan/features.d.ts.map +1 -0
  514. package/dist/src/styles/plan/features.js +185 -0
  515. package/dist/src/styles/plan/features.js.map +1 -0
  516. package/dist/src/styles/plan/index.d.ts +7 -0
  517. package/dist/src/styles/plan/index.d.ts.map +1 -0
  518. package/dist/src/styles/plan/index.js +7 -0
  519. package/dist/src/styles/plan/index.js.map +1 -0
  520. package/dist/src/styles/plan/plan.d.ts +71 -0
  521. package/dist/src/styles/plan/plan.d.ts.map +1 -0
  522. package/dist/src/styles/plan/plan.js +893 -0
  523. package/dist/src/styles/plan/plan.js.map +1 -0
  524. package/dist/src/styles/plan/resolve.d.ts +137 -0
  525. package/dist/src/styles/plan/resolve.d.ts.map +1 -0
  526. package/dist/src/styles/plan/resolve.js +587 -0
  527. package/dist/src/styles/plan/resolve.js.map +1 -0
  528. package/dist/src/styles/types.d.ts +702 -0
  529. package/dist/src/styles/types.d.ts.map +1 -0
  530. package/dist/src/styles/types.js +10 -0
  531. package/dist/src/styles/types.js.map +1 -0
  532. package/dist/src/styles/vocabulary.d.ts +41 -0
  533. package/dist/src/styles/vocabulary.d.ts.map +1 -0
  534. package/dist/src/styles/vocabulary.js +140 -0
  535. package/dist/src/styles/vocabulary.js.map +1 -0
  536. package/dist/src/types.d.ts +64 -1
  537. package/dist/src/types.d.ts.map +1 -1
  538. package/dist/src/types.js.map +1 -1
  539. package/dist/styles.d.ts +1 -0
  540. package/dist/styles.js +322 -0
  541. package/dist/styles.js.map +1 -0
  542. package/dist/xgmml.js +5 -4
  543. package/dist/xgmml.js.map +1 -1
  544. package/package.json +13 -2
  545. package/src/common/codes.ts +7 -0
  546. package/src/common/escape.ts +5 -2
  547. package/src/common/export.ts +179 -140
  548. package/src/common/input.ts +8 -4
  549. package/src/common/json-elements.ts +169 -38
  550. package/src/common/notes.ts +94 -0
  551. package/src/common/report.ts +41 -1
  552. package/src/common/units.ts +42 -0
  553. package/src/common/xml.ts +45 -5
  554. package/src/formats/cx/exporter.ts +95 -11
  555. package/src/formats/cx/importer.ts +126 -90
  556. package/src/formats/cx/styles.ts +304 -0
  557. package/src/formats/cx2/exporter.ts +234 -77
  558. package/src/formats/cx2/importer.ts +19 -1
  559. package/src/formats/cx2/styles.ts +29 -0
  560. package/src/formats/cys/constants.ts +3 -0
  561. package/src/formats/cys/exporter.ts +246 -60
  562. package/src/formats/cys/importer.ts +125 -9
  563. package/src/formats/cys/session.ts +6 -0
  564. package/src/formats/cys/styles.ts +254 -0
  565. package/src/formats/cys/tables.ts +117 -48
  566. package/src/formats/dot/exporter.ts +262 -126
  567. package/src/formats/dot/importer.ts +111 -20
  568. package/src/formats/dot/index.ts +1 -0
  569. package/src/formats/dot/positions.ts +77 -0
  570. package/src/formats/dot/styles.ts +1755 -0
  571. package/src/formats/gexf/exporter.ts +27 -11
  572. package/src/formats/gexf/importer.ts +308 -158
  573. package/src/formats/gexf/index.ts +10 -0
  574. package/src/formats/gexf/schema.ts +5 -0
  575. package/src/formats/gexf/styles.ts +719 -0
  576. package/src/formats/gml/exporter.ts +33 -14
  577. package/src/formats/gml/importer.ts +4 -0
  578. package/src/formats/gml/index.ts +2 -1
  579. package/src/formats/gml/positions.ts +52 -0
  580. package/src/formats/gml/styles.ts +1248 -0
  581. package/src/formats/gml/syntax.ts +173 -62
  582. package/src/formats/graphml/constants.ts +5 -0
  583. package/src/formats/graphml/exporter.ts +163 -71
  584. package/src/formats/graphml/importer.ts +119 -45
  585. package/src/formats/graphml/index.ts +1 -0
  586. package/src/formats/graphml/styles-plain.ts +236 -0
  587. package/src/formats/graphml/styles-yed.ts +1221 -0
  588. package/src/formats/graphml/styles-yfiles3.ts +573 -0
  589. package/src/formats/graphml/tree.ts +36 -20
  590. package/src/formats/graphml/yfiles.ts +89 -13
  591. package/src/formats/json/exporter.ts +76 -26
  592. package/src/formats/json/importer.ts +541 -322
  593. package/src/formats/json/positions.ts +50 -0
  594. package/src/formats/json/styles.ts +2082 -0
  595. package/src/formats/neo4j/exporter.ts +2 -1
  596. package/src/formats/pajek/exporter.ts +195 -106
  597. package/src/formats/pajek/importer.ts +78 -9
  598. package/src/formats/pajek/index.ts +2 -0
  599. package/src/formats/pajek/styles.ts +685 -0
  600. package/src/formats/pajek/syntax.ts +7 -0
  601. package/src/formats/xgmml/columns.ts +39 -9
  602. package/src/formats/xgmml/constants.ts +3 -0
  603. package/src/formats/xgmml/document.ts +54 -12
  604. package/src/formats/xgmml/emit.ts +11 -6
  605. package/src/formats/xgmml/exporter.ts +32 -13
  606. package/src/formats/xgmml/importer.ts +43 -29
  607. package/src/formats/xgmml/styles.ts +400 -0
  608. package/src/index.ts +16 -0
  609. package/src/positions/codes.ts +32 -0
  610. package/src/positions/convert.ts +123 -0
  611. package/src/positions/extract.ts +619 -0
  612. package/src/positions/index.ts +23 -0
  613. package/src/positions/types.ts +221 -0
  614. package/src/registry.ts +179 -8
  615. package/src/styles/annotations.ts +478 -0
  616. package/src/styles/budget.ts +60 -0
  617. package/src/styles/canon/bends.ts +84 -0
  618. package/src/styles/canon/color-tables.ts +386 -0
  619. package/src/styles/canon/color.ts +624 -0
  620. package/src/styles/canon/enums.ts +211 -0
  621. package/src/styles/canon/graphviz.ts +189 -0
  622. package/src/styles/canon/index.ts +13 -0
  623. package/src/styles/canon/number.ts +152 -0
  624. package/src/styles/canon/site.ts +87 -0
  625. package/src/styles/canon/text.ts +221 -0
  626. package/src/styles/codes.ts +104 -0
  627. package/src/styles/cyjs/cascade.ts +2670 -0
  628. package/src/styles/cyjs/defaults-table.ts +82 -0
  629. package/src/styles/cyjs/emit.ts +952 -0
  630. package/src/styles/cyjs/index.ts +37 -0
  631. package/src/styles/cyjs/live.ts +147 -0
  632. package/src/styles/cyjs/mappers.ts +879 -0
  633. package/src/styles/cyjs/selector.ts +778 -0
  634. package/src/styles/cyjs/stylesheet-text.ts +214 -0
  635. package/src/styles/cytoscape/emit.ts +1264 -0
  636. package/src/styles/cytoscape/index.ts +40 -0
  637. package/src/styles/cytoscape/lexicon.ts +658 -0
  638. package/src/styles/cytoscape/mappings.ts +603 -0
  639. package/src/styles/cytoscape/resolve.ts +521 -0
  640. package/src/styles/cytoscape/translate.ts +237 -0
  641. package/src/styles/defaults.ts +504 -0
  642. package/src/styles/index.ts +57 -0
  643. package/src/styles/internal.ts +17 -0
  644. package/src/styles/io/approximations.ts +47 -0
  645. package/src/styles/io/block.ts +1138 -0
  646. package/src/styles/io/generic.ts +687 -0
  647. package/src/styles/io/index.ts +18 -0
  648. package/src/styles/io/writer.ts +780 -0
  649. package/src/styles/notes.ts +165 -0
  650. package/src/styles/plan/classes.ts +166 -0
  651. package/src/styles/plan/continuous.ts +218 -0
  652. package/src/styles/plan/discrete.ts +165 -0
  653. package/src/styles/plan/families.ts +115 -0
  654. package/src/styles/plan/features.ts +234 -0
  655. package/src/styles/plan/index.ts +7 -0
  656. package/src/styles/plan/plan.ts +1129 -0
  657. package/src/styles/plan/resolve.ts +685 -0
  658. package/src/styles/types.ts +814 -0
  659. package/src/styles/vocabulary.ts +172 -0
  660. package/src/types.ts +76 -1
  661. package/dist/chunks/constants-fT3E8JYY.js.map +0 -1
  662. package/dist/chunks/escape-B62ZGM_a.js.map +0 -1
  663. package/dist/chunks/export-rKLeGQMo.js.map +0 -1
  664. package/dist/chunks/exporter-8hLNemFk.js.map +0 -1
  665. package/dist/chunks/exporter-BWwEuOPT.js.map +0 -1
  666. package/dist/chunks/exporter-RVtXVetw.js.map +0 -1
  667. package/dist/chunks/importer-BbNb7eNg.js.map +0 -1
  668. package/dist/chunks/importer-C98dpSH4.js.map +0 -1
  669. package/dist/chunks/importer-D794XUTe.js.map +0 -1
  670. package/dist/chunks/importer-Dz7tI8Sa.js.map +0 -1
  671. package/dist/chunks/importer-Ht7LNg8L.js.map +0 -1
  672. package/dist/chunks/importer-WrGRZb0N.js.map +0 -1
  673. package/dist/chunks/importer-xZ-3suY1.js.map +0 -1
  674. package/dist/chunks/json-elements-DKSqpNW1.js.map +0 -1
@@ -61,6 +61,7 @@ import {
61
61
  xmlDeclaredEncoding,
62
62
  XmlEmptyInputError,
63
63
  type XmlHandler,
64
+ XmlNestingError,
64
65
  XmlSyntaxError,
65
66
  } from "../../common/xml.js";
66
67
  import { type CommonImportOptions, type GraphImporter, type ImportInput, type ImportReport } from "../../types.js";
@@ -85,8 +86,37 @@ import {
85
86
  TARGET_PORT_COLUMN,
86
87
  XSI_NAMESPACE,
87
88
  } from "./constants.js";
88
- import { XmlTreeBuilder } from "./tree.js";
89
- import { graphicsDecl, graphicsValues } from "./yfiles.js";
89
+ import { graphmlStyles } from "./styles-plain.js";
90
+ import { writeXmlTree, XmlTreeBuilder } from "./tree.js";
91
+ import { graphicsDecl, graphicsValues, yfilesPositions } from "./yfiles.js";
92
+
93
+ /**
94
+ * Whether an XML attribute is not data and passes silently: a namespace declaration, an `xml:` or
95
+ * `xsi:` attribute, or a namespace URI where one is allowed.
96
+ * @param kind - the element name
97
+ * @param name - the attribute's name
98
+ * @returns true when it is never reported
99
+ */
100
+ function isPassedAttribute(kind: string, name: string): boolean {
101
+ return name === "xmlns" || /^(xmlns|xml|xsi):/.test(name) || isAttributeUri(kind, name);
102
+ }
103
+
104
+ /**
105
+ * The warning for an attribute the importer does not read.
106
+ * @param kind - the element name
107
+ * @param name - the attribute's name
108
+ * @param hint - whether it is a `parse.*` hint
109
+ * @returns the message
110
+ */
111
+ function unreadAttributeMessage(kind: string, name: string, hint: boolean): string {
112
+ if (hint) {
113
+ return `the <${kind}> parse hint ${name} is ignored`;
114
+ }
115
+ if (SCHEMA_ATTRIBUTES.has(name)) {
116
+ return `the <${kind}> attribute ${name} is not kept`;
117
+ }
118
+ return `the <${kind}> attribute ${name} is not a GraphML attribute; it is not kept`;
119
+ }
90
120
 
91
121
  /** The XML attributes the importer reads on each element; any other is reported (once per element and name). */
92
122
  const GRAPH_ATTRIBUTES: ReadonlySet<string> = new Set(["id", "edgedefault", "parse.nodes", "parse.edges"]);
@@ -106,6 +136,30 @@ const ENDPOINT_ATTRIBUTES: ReadonlySet<string> = new Set(["node", "type"]);
106
136
  const PORT_ATTRIBUTES: ReadonlySet<string> = new Set(["name"]);
107
137
  const NO_ATTRIBUTES: ReadonlySet<string> = new Set();
108
138
 
139
+ /**
140
+ * Whether a `<key>` attribute is yFiles 3's `attr.uri` (in whatever prefix the file binds to yWorks' namespace).
141
+ * @param kind - the element name
142
+ * @param name - the attribute name as written
143
+ * @returns true for `<prefix>:attr.uri` on a key
144
+ */
145
+ function isAttributeUri(kind: string, name: string): boolean {
146
+ return kind === "key" && name.endsWith(":attr.uri");
147
+ }
148
+
149
+ /**
150
+ * The `<prefix>:attr.uri` of a key, or null.
151
+ * @param attrs - the key's attributes
152
+ * @returns the URI
153
+ */
154
+ function attributeUri(attrs: ReadonlyMap<string, string>): string | null {
155
+ for (const [name, value] of attrs) {
156
+ if (isAttributeUri("key", name) && value.length > 0) {
157
+ return value;
158
+ }
159
+ }
160
+ return null;
161
+ }
162
+
109
163
  /** Attributes the GraphML schema defines that the importer does not keep: reported as not kept, not as foreign. */
110
164
  const SCHEMA_ATTRIBUTES: ReadonlySet<string> = new Set(["id", "port", "parse.order", "parse.nodeids", "parse.edgeids"]);
111
165
 
@@ -133,7 +187,10 @@ export interface GraphmlImportOptions extends CommonImportOptions {
133
187
  * `yfiles.borderWidth`, `yfiles.label` and `yfiles.shape` for nodes, and the line color, width
134
188
  * and arrows for edges. The report's `lossy` list then holds W_GRAPHML_YFILES_JSON, because the
135
189
  * XML comes back with the same structure but not byte for byte. "skip" leaves the graphics out,
136
- * with a W_GRAPHML_YFILES_SKIPPED warning per key.
190
+ * with a W_GRAPHML_YFILES_SKIPPED warning per key. The `yfiles.*` columns are deprecated and
191
+ * kept as they are, not fixed: read a file's styles with `styles: true` instead. In the next
192
+ * major version they leave the import result, together with the rule that a target arrow makes
193
+ * an edge directed and the label role of `yfiles.label`.
137
194
  * @defaultValue "json"
138
195
  */
139
196
  yfiles?: "json" | "skip" | undefined;
@@ -1127,31 +1184,40 @@ class GraphmlReader implements XmlHandler {
1127
1184
  line: number,
1128
1185
  ): void {
1129
1186
  for (const name of attrs.keys()) {
1130
- if (known.has(name) || name === "xmlns" || /^(xmlns|xml|xsi):/.test(name)) {
1131
- continue;
1132
- }
1133
- const hint = name.startsWith("parse.");
1134
- const code = hint ? GRAPHML_ISSUE.PARSE_HINT_IGNORED : GRAPHML_ISSUE.UNKNOWN_XML_ATTRIBUTE;
1135
- let names = this.unknownNames.get(kind);
1136
- if (names === undefined) {
1137
- names = new Set();
1138
- this.unknownNames.set(kind, names);
1139
- }
1140
- if (names.has(name)) {
1141
- continue;
1142
- }
1143
- if (names.size >= MAX_UNKNOWN_ATTRIBUTE_NAMES && !hint) {
1144
- this.unknownOverflow.set(kind, (this.unknownOverflow.get(kind) ?? 0) + 1);
1145
- }
1146
- names.add(name);
1147
- if (names.size > MAX_UNKNOWN_ATTRIBUTE_NAMES && !hint) {
1148
- continue;
1187
+ if (!known.has(name) && !isPassedAttribute(kind, name)) {
1188
+ this.reportUnreadAttribute(kind, name, line);
1149
1189
  }
1150
- const message = unreadAttributeMessage(kind, name, hint);
1151
- this.report.warning("unsupported", code, message, { line, element: name });
1152
1190
  }
1153
1191
  }
1154
1192
 
1193
+ /**
1194
+ * Report one attribute reportUnreadAttributes() found, unless its name was reported for this
1195
+ * element kind already or the kind is past MAX_UNKNOWN_ATTRIBUTE_NAMES names (then it is counted).
1196
+ * @param kind - the element name
1197
+ * @param name - the attribute's name
1198
+ * @param line - the line
1199
+ */
1200
+ private reportUnreadAttribute(kind: string, name: string, line: number): void {
1201
+ const hint = name.startsWith("parse.");
1202
+ let names = this.unknownNames.get(kind);
1203
+ if (names === undefined) {
1204
+ names = new Set();
1205
+ this.unknownNames.set(kind, names);
1206
+ }
1207
+ if (names.has(name)) {
1208
+ return;
1209
+ }
1210
+ if (names.size >= MAX_UNKNOWN_ATTRIBUTE_NAMES && !hint) {
1211
+ this.unknownOverflow.set(kind, (this.unknownOverflow.get(kind) ?? 0) + 1);
1212
+ }
1213
+ names.add(name);
1214
+ if (names.size > MAX_UNKNOWN_ATTRIBUTE_NAMES && !hint) {
1215
+ return;
1216
+ }
1217
+ const code = hint ? GRAPHML_ISSUE.PARSE_HINT_IGNORED : GRAPHML_ISSUE.UNKNOWN_XML_ATTRIBUTE;
1218
+ this.report.warning("unsupported", code, unreadAttributeMessage(kind, name, hint), { line, element: name });
1219
+ }
1220
+
1155
1221
  /**
1156
1222
  * Open a `<graph>`: the top-level one sets the sink's direction (rule 1 of design section
1157
1223
  * 8.4); a nested one records its container as the parent of its nodes.
@@ -1314,6 +1380,10 @@ class GraphmlReader implements XmlHandler {
1314
1380
  case "all":
1315
1381
  domains = ["graph", "node", "edge"];
1316
1382
  break;
1383
+ case "graphml":
1384
+ // data on the <graphml> root (yEd's resources, yFiles 3's shared data) is read as graph data
1385
+ domains = ["graph"];
1386
+ break;
1317
1387
  case "graph":
1318
1388
  case "node":
1319
1389
  case "edge":
@@ -1339,12 +1409,14 @@ class GraphmlReader implements XmlHandler {
1339
1409
  );
1340
1410
  domains = [];
1341
1411
  }
1412
+ // `name` / `type` without the `attr.` prefix are written by some tools; the spec's spelling wins
1413
+ const attrType = attrs.get("attr.type") ?? attrs.get("type") ?? null;
1342
1414
  this.pendingKey = {
1343
1415
  id,
1344
- // `name` / `type` without the `attr.` prefix are written by some tools; the spec's spelling wins
1345
1416
  attrName: attrs.get("attr.name") ?? attrs.get("name") ?? null,
1346
- attrType: attrs.get("attr.type") ?? attrs.get("type") ?? null,
1347
- yfilesType: attrs.get("yfiles.type") ?? null,
1417
+ attrType,
1418
+ // yFiles 3 declares its untyped keys with `y:attr.uri` instead of `yfiles.type`: their data is nested XML
1419
+ yfilesType: attrs.get("yfiles.type") ?? (attrType === null ? attributeUri(attrs) : null),
1348
1420
  domains,
1349
1421
  line,
1350
1422
  desc: "",
@@ -1878,6 +1950,19 @@ class GraphmlReader implements XmlHandler {
1878
1950
  }
1879
1951
  return value;
1880
1952
  }
1953
+ if (typeof value !== "string" && target.spec.declared === "") {
1954
+ // an untyped key states no type the elements contradict: keep them as their XML text
1955
+ this.report.warnOnce(
1956
+ "validation-error",
1957
+ GRAPHML_ISSUE.DATA_STRUCTURED,
1958
+ `<data> of the untyped attribute "${target.name}" holds elements; they are kept as XML text`,
1959
+ { line: where.line, element: target.name },
1960
+ `${GRAPHML_ISSUE.DATA_STRUCTURED}:${target.name}`,
1961
+ );
1962
+ const parts: string[] = [];
1963
+ writeXmlTree(value, "", parts);
1964
+ return parts.join("").trim();
1965
+ }
1881
1966
  if (typeof value !== "string") {
1882
1967
  this.report.error(
1883
1968
  "validation-error",
@@ -2668,7 +2753,11 @@ async function importGraphml(
2668
2753
  report.fail(GRAPHML_ISSUE.EMPTY_INPUT, "the input is empty (no markup at all)", { line: err.line });
2669
2754
  }
2670
2755
  if (err instanceof XmlSyntaxError) {
2671
- report.fail(GRAPHML_ISSUE.XML_SYNTAX, err.message, { line: err.line });
2756
+ report.fail(
2757
+ err instanceof XmlNestingError ? GRAPHML_ISSUE.XML_NESTING : GRAPHML_ISSUE.XML_SYNTAX,
2758
+ err.message,
2759
+ { line: err.line },
2760
+ );
2672
2761
  }
2673
2762
  throw err;
2674
2763
  }
@@ -2687,6 +2776,8 @@ export const graphmlImporter: GraphImporter<GraphmlImportOptions> = Object.freez
2687
2776
  extensions: EXTENSIONS,
2688
2777
  mimeTypes: MIME_TYPES,
2689
2778
  sniff: sniffGraphml,
2779
+ styles: graphmlStyles,
2780
+ positions: yfilesPositions,
2690
2781
  import: importGraphml,
2691
2782
  });
2692
2783
 
@@ -2719,20 +2810,3 @@ function unknownElementMessage(name: string): string {
2719
2810
  ? `element <${name}> is not allowed at this place in a GraphML file and was skipped`
2720
2811
  : `element <${name}> is not GraphML and was skipped`;
2721
2812
  }
2722
-
2723
- /**
2724
- * The warning text for an attribute the importer does not keep.
2725
- * @param kind - the element name
2726
- * @param name - the attribute name
2727
- * @param hint - whether the attribute is a `parse.*` hint
2728
- * @returns the message
2729
- */
2730
- function unreadAttributeMessage(kind: string, name: string, hint: boolean): string {
2731
- if (hint) {
2732
- return `the <${kind}> parse hint ${name} is ignored`;
2733
- }
2734
- if (SCHEMA_ATTRIBUTES.has(name)) {
2735
- return `the <${kind}> attribute ${name} is not kept`;
2736
- }
2737
- return `the <${kind}> attribute ${name} is not a GraphML attribute; it is not kept`;
2738
- }
@@ -7,3 +7,4 @@
7
7
  export { GRAPHML_ISSUE, GRAPHML_LOSS } from "./constants.js";
8
8
  export { graphmlExporter, type GraphmlExportOptions } from "./exporter.js";
9
9
  export { graphmlImporter, type GraphmlImportOptions } from "./importer.js";
10
+ export { GRAPHML_STYLE_CAPABILITIES } from "./styles-yed.js";
@@ -0,0 +1,236 @@
1
+ /**
2
+ * GraphML styles: which program wrote the file, and its styles read the way that program draws them. yEd and
3
+ * yFiles 3 keep their graphics in nested XML (styles-yed.ts, styles-yfiles3.ts); Gephi writes plain `r`, `g`, `b`
4
+ * and `size` keys; Cytoscape's GraphML export writes no visual properties at all and is recognized by its `SUID`
5
+ * and `shared name` keys. A GraphML file from any other writer has no styles: a key named like a style (`color`)
6
+ * stays data, and no program's defaults are added.
7
+ */
8
+
9
+ import type { GraphSnapshot } from "@graphty/graph-format";
10
+
11
+ import { canonColor } from "../../styles/canon/color.js";
12
+ import { canonNumber } from "../../styles/canon/number.js";
13
+ import { canonText } from "../../styles/canon/text.js";
14
+ import { blockStyles, parseStyleBlock, STYLE_BLOCK_NAME } from "../../styles/io/block.js";
15
+ import { StyleNotes } from "../../styles/notes.js";
16
+ import { styleFingerprint } from "../../styles/plan/features.js";
17
+ import { plainCell, resolveStyles } from "../../styles/plan/resolve.js";
18
+ import type { ImporterStyles, StyleReadContext, StyleTarget, StyleValue } from "../../styles/types.js";
19
+ import { gephiRules } from "../gexf/styles.js";
20
+ import {
21
+ exactFromBlock,
22
+ readYedStyles,
23
+ type ValueColumns,
24
+ valueColumns,
25
+ type YedRead,
26
+ yfilesColumns,
27
+ } from "./styles-yed.js";
28
+ import { readYfiles3Styles } from "./styles-yfiles3.js";
29
+
30
+ /** Gephi's color and size keys. */
31
+ const GEPHI_COLUMNS: readonly string[] = ["r", "g", "b", "size"];
32
+
33
+ /**
34
+ * Whether a table has Gephi's `r`, `g` and `b` columns.
35
+ * @param table - the node or edge table
36
+ * @returns true when all three are there
37
+ */
38
+ function hasRgb(table: GraphSnapshot["nodes"]): boolean {
39
+ return table.has("r") && table.has("g") && table.has("b");
40
+ }
41
+
42
+ /**
43
+ * Gephi's styles: `r`, `g`, `b` as the fill of a node and the color of an edge, `size` as a node's width and
44
+ * height, and `label` as the label.
45
+ * @param snapshot - the graph
46
+ * @param notes - where problems are noted
47
+ * @param context - the work budget
48
+ * @returns the values
49
+ */
50
+ function readGephi(
51
+ snapshot: GraphSnapshot,
52
+ notes: StyleNotes,
53
+ context: StyleReadContext,
54
+ ): { node: ValueColumns; edge: ValueColumns } {
55
+ const read = (target: StyleTarget): ValueColumns => {
56
+ const table = target === "node" ? snapshot.nodes : snapshot.edges;
57
+ const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
58
+ const out = valueColumns(n);
59
+ const has = { rgb: hasRgb(table), size: target === "node" && table.has("size"), label: table.has("label") };
60
+ for (let i = 0; i < n; i++) {
61
+ context.budget.spend(target, 1);
62
+ const at = (property: string): Parameters<typeof canonNumber>[1] => ({
63
+ notes,
64
+ target,
65
+ property,
66
+ element: i,
67
+ budget: context.budget,
68
+ });
69
+ readGephiRow(
70
+ table,
71
+ target,
72
+ i,
73
+ has,
74
+ (property, value) => {
75
+ out.put(i, property, value);
76
+ },
77
+ at,
78
+ );
79
+ }
80
+ return out.values;
81
+ };
82
+ return { node: read("node"), edge: read("edge") };
83
+ }
84
+
85
+ /**
86
+ * Reads one Gephi element.
87
+ * @param table - the node or edge table
88
+ * @param target - nodes or edges
89
+ * @param i - the element
90
+ * @param has - which of Gephi's columns the table has
91
+ * @param has.rgb - the `r`, `g` and `b` columns
92
+ * @param has.size - a node `size` column
93
+ * @param has.label - a `label` column
94
+ * @param put - receives the values
95
+ * @param at - the sites
96
+ */
97
+ function readGephiRow(
98
+ table: GraphSnapshot["nodes"],
99
+ target: StyleTarget,
100
+ i: number,
101
+ has: { readonly rgb: boolean; readonly size: boolean; readonly label: boolean },
102
+ put: (property: string, value: StyleValue | null) => void,
103
+ at: (property: string) => Parameters<typeof canonNumber>[1],
104
+ ): void {
105
+ if (has.rgb) {
106
+ const [r, g, b] = ["r", "g", "b"].map((c) => plainCell(table.value(c, i)));
107
+ if (r !== null && g !== null && b !== null) {
108
+ const property = target === "node" ? "fill" : "color";
109
+ put(property, canonColor({ r, g, b }, "gephi", at(property))?.color ?? null);
110
+ }
111
+ }
112
+ if (has.size) {
113
+ const v = canonNumber(plainCell(table.value("size", i)), at("width"));
114
+ put("width", v);
115
+ put("height", v);
116
+ }
117
+ if (has.label) {
118
+ put("label", canonText(plainCell(table.value("label", i)), at("label")));
119
+ }
120
+ }
121
+
122
+ /**
123
+ * For a file graphty wrote: the yEd values that are only what the writer writes for the `graphty.styles` block's own
124
+ * values read as the block's values (see exactFromBlock()). A block that does not parse or describes another graph
125
+ * changes nothing; graph-io then ignores it with a note.
126
+ * @param snapshot - the graph
127
+ * @param yed - the values read from the yEd graphics, changed in place
128
+ */
129
+ function exactFromGraphtyBlock(snapshot: GraphSnapshot, yed: YedRead): void {
130
+ const text = snapshot.graph.has(STYLE_BLOCK_NAME) ? plainCell(snapshot.graph.value(STYLE_BLOCK_NAME, 0)) : null;
131
+ if (typeof text !== "string") {
132
+ return;
133
+ }
134
+ const parsed = parseStyleBlock(text, styleFingerprint(snapshot));
135
+ const ex = parsed.ok ? blockStyles(parsed.block, snapshot, "graphml") : null;
136
+ if (ex === null) {
137
+ return;
138
+ }
139
+ exactFromBlock(
140
+ yed,
141
+ (target, property) => resolveStyles(ex, target, property as never, snapshot),
142
+ { node: snapshot.nodeCount, edge: snapshot.edgeCount },
143
+ new StyleNotes(),
144
+ );
145
+ }
146
+
147
+ /**
148
+ * The styles of a GraphML file, read the way the program that wrote it draws them, with that program's defaults
149
+ * beneath: yEd's and yFiles 3's nested graphics, Gephi's `r`, `g`, `b` and `size` keys, or, for Cytoscape's export,
150
+ * Cytoscape's default style with each node labeled by its `name`. A file from any other writer has none.
151
+ * @param snapshot - the graph the import built
152
+ * @param context - the work budget
153
+ * @returns the styles, or null when no writer with styles is recognized
154
+ */
155
+ export function graphmlStyles(snapshot: GraphSnapshot, context: StyleReadContext): ImporterStyles | null {
156
+ const notes = new StyleNotes();
157
+ const readFrom = { node: yfilesColumns(snapshot.nodes), edge: yfilesColumns(snapshot.edges) };
158
+ const yfiles3 = readYfiles3Styles(snapshot, notes, context.budget);
159
+ if (yfiles3 !== null) {
160
+ return {
161
+ canonical: true,
162
+ dialect: "yfiles3",
163
+ tool: "yfiles3",
164
+ units: "px",
165
+ node: { values: yfiles3.node },
166
+ edge: { values: yfiles3.edge },
167
+ notes: notes.list(),
168
+ readFrom,
169
+ };
170
+ }
171
+ const yed = readYedStyles(snapshot, notes, context.budget);
172
+ if (yed !== null) {
173
+ exactFromGraphtyBlock(snapshot, yed);
174
+ return {
175
+ canonical: true,
176
+ dialect: "yed",
177
+ tool: "yed",
178
+ units: "px",
179
+ node: { values: yed.node },
180
+ edge: { values: yed.edge },
181
+ notes: notes.list(),
182
+ opacityInColor: true,
183
+ readFrom,
184
+ };
185
+ }
186
+ if (hasRgb(snapshot.nodes)) {
187
+ const gephi = readGephi(snapshot, notes, context);
188
+ const { rules, columns } = gephiRules(
189
+ snapshot,
190
+ gephi.node.fill,
191
+ gephi.edge.color,
192
+ context.budget,
193
+ gephi.edge.width,
194
+ );
195
+ const used = (table: GraphSnapshot["nodes"]): string[] => GEPHI_COLUMNS.filter((c) => table.has(c));
196
+ return {
197
+ canonical: true,
198
+ dialect: "gephi",
199
+ tool: "gephi",
200
+ units: "relative",
201
+ node: { values: gephi.node },
202
+ edge: { values: gephi.edge, rules, columns },
203
+ notes: notes.list(),
204
+ readFrom: { node: used(snapshot.nodes), edge: used(snapshot.edges) },
205
+ };
206
+ }
207
+ if (snapshot.nodes.has("SUID") && snapshot.nodes.has("shared name")) {
208
+ // Cytoscape writes no visual properties into GraphML; its default style labels each node with its name
209
+ const label = valueColumns(snapshot.nodeCount);
210
+ if (snapshot.nodes.has("name")) {
211
+ for (let i = 0; i < snapshot.nodeCount; i++) {
212
+ label.put(
213
+ i,
214
+ "label",
215
+ canonText(plainCell(snapshot.nodes.value("name", i)), {
216
+ notes,
217
+ target: "node",
218
+ property: "label",
219
+ element: i,
220
+ budget: context.budget,
221
+ }),
222
+ );
223
+ }
224
+ }
225
+ return {
226
+ canonical: true,
227
+ dialect: "cytoscape",
228
+ tool: "cytoscape",
229
+ units: "px",
230
+ node: { values: label.values },
231
+ edge: { values: {} },
232
+ notes: notes.list(),
233
+ };
234
+ }
235
+ return null;
236
+ }