@graphty/graph-io 0.3.42 → 0.3.44
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.
- package/dist/chunks/approximations-3Q4TsdTh.js +40 -0
- package/dist/chunks/approximations-3Q4TsdTh.js.map +1 -0
- package/dist/chunks/block-JQiwViEt.js +2777 -0
- package/dist/chunks/block-JQiwViEt.js.map +1 -0
- package/dist/chunks/{choose-DvpbdRuz.js → choose-BemygfH8.js} +3 -2
- package/dist/chunks/{choose-DvpbdRuz.js.map → choose-BemygfH8.js.map} +1 -1
- package/dist/chunks/{constants-fT3E8JYY.js → constants-BFUR_CtU.js} +6 -2
- package/dist/chunks/constants-BFUR_CtU.js.map +1 -0
- package/dist/chunks/convert-BcQ8_jMo.js +59 -0
- package/dist/chunks/convert-BcQ8_jMo.js.map +1 -0
- package/dist/chunks/emit-DCwFLts5.js +3456 -0
- package/dist/chunks/emit-DCwFLts5.js.map +1 -0
- package/dist/chunks/{escape-B62ZGM_a.js → escape-B1rMftd9.js} +43 -20
- package/dist/chunks/escape-B1rMftd9.js.map +1 -0
- package/dist/chunks/{export-rKLeGQMo.js → export-D7IGzTG4.js} +196 -792
- package/dist/chunks/export-D7IGzTG4.js.map +1 -0
- package/dist/chunks/{exporter-BWwEuOPT.js → exporter-BtnqYuuj.js} +22 -12
- package/dist/chunks/exporter-BtnqYuuj.js.map +1 -0
- package/dist/chunks/{exporter-yLxKBvLE.js → exporter-ChPyhBOv.js} +4 -3
- package/dist/chunks/{exporter-yLxKBvLE.js.map → exporter-ChPyhBOv.js.map} +1 -1
- package/dist/chunks/{exporter-8hLNemFk.js → exporter-KEPxYUXD.js} +133 -74
- package/dist/chunks/exporter-KEPxYUXD.js.map +1 -0
- package/dist/chunks/{exporter-CpRyHZ3H.js → exporter-quPUCBiC.js} +1807 -288
- package/dist/chunks/exporter-quPUCBiC.js.map +1 -0
- package/dist/chunks/format-GDmO6m6Q.js +676 -0
- package/dist/chunks/format-GDmO6m6Q.js.map +1 -0
- package/dist/chunks/generic-BL06jrJf.js +1347 -0
- package/dist/chunks/generic-BL06jrJf.js.map +1 -0
- package/dist/chunks/{importer-WrGRZb0N.js → importer-B7r2owVf.js} +449 -102
- package/dist/chunks/importer-B7r2owVf.js.map +1 -0
- package/dist/chunks/{importer-Ht7LNg8L.js → importer-BFmOP96W.js} +116 -296
- package/dist/chunks/importer-BFmOP96W.js.map +1 -0
- package/dist/chunks/{importer-BbNb7eNg.js → importer-C2nzGhdV.js} +1390 -129
- package/dist/chunks/importer-C2nzGhdV.js.map +1 -0
- package/dist/chunks/{importer-Dz7tI8Sa.js → importer-CbX2_rNF.js} +617 -115
- package/dist/chunks/importer-CbX2_rNF.js.map +1 -0
- package/dist/chunks/{importer-D794XUTe.js → importer-CdzeN6X4.js} +31 -8
- package/dist/chunks/importer-CdzeN6X4.js.map +1 -0
- package/dist/chunks/{importer-xZ-3suY1.js → importer-ChKNC_GN.js} +791 -135
- package/dist/chunks/importer-ChKNC_GN.js.map +1 -0
- package/dist/chunks/{importer-C98dpSH4.js → importer-dwoYpSqb.js} +141 -82
- package/dist/chunks/importer-dwoYpSqb.js.map +1 -0
- package/dist/chunks/index-B9fdNpTA.js +4310 -0
- package/dist/chunks/index-B9fdNpTA.js.map +1 -0
- package/dist/chunks/{json-elements-DKSqpNW1.js → json-elements-C4FwgnH5.js} +123 -32
- package/dist/chunks/json-elements-C4FwgnH5.js.map +1 -0
- package/dist/chunks/lexicon-B-knUi-l.js +508 -0
- package/dist/chunks/lexicon-B-knUi-l.js.map +1 -0
- package/dist/chunks/{ontology-export-CtRXjg_i.js → ontology-export-BSpbY5FL.js} +3 -2
- package/dist/chunks/{ontology-export-CtRXjg_i.js.map → ontology-export-BSpbY5FL.js.map} +1 -1
- package/dist/chunks/{records-Cu4bxYOm.js → records-Nwz_rbNt.js} +2 -2
- package/dist/chunks/{records-Cu4bxYOm.js.map → records-Nwz_rbNt.js.map} +1 -1
- package/dist/chunks/styles-Brt9JMfs.js +690 -0
- package/dist/chunks/styles-Brt9JMfs.js.map +1 -0
- package/dist/chunks/styles-_N-C8S-U.js +2102 -0
- package/dist/chunks/styles-_N-C8S-U.js.map +1 -0
- package/dist/chunks/styles-yed-DAfcIkf7.js +842 -0
- package/dist/chunks/styles-yed-DAfcIkf7.js.map +1 -0
- package/dist/chunks/{text-DHOJXnED.js → text-CgzMqHQb.js} +2 -2
- package/dist/chunks/{text-DHOJXnED.js.map → text-CgzMqHQb.js.map} +1 -1
- package/dist/chunks/units-XMZFIFe1.js +19 -0
- package/dist/chunks/units-XMZFIFe1.js.map +1 -0
- package/dist/csv.js +5 -4
- package/dist/csv.js.map +1 -1
- package/dist/cx.js +1 -1
- package/dist/cx2.js +2 -2
- package/dist/cys.js +1 -1
- package/dist/dot.js +5 -2
- package/dist/dot.js.map +1 -1
- package/dist/gexf.js +295 -414
- package/dist/gexf.js.map +1 -1
- package/dist/gml.js +8 -3031
- package/dist/gml.js.map +1 -1
- package/dist/graph-io.js +354 -240
- package/dist/graph-io.js.map +1 -1
- package/dist/graphml.js +4 -2
- package/dist/graphml.js.map +1 -1
- package/dist/json.js +1 -1
- package/dist/neo4j.js +4 -3
- package/dist/neo4j.js.map +1 -1
- package/dist/obo.js +1 -1
- package/dist/pajek.js +4 -2
- package/dist/positions.d.ts +1 -0
- package/dist/positions.js +427 -0
- package/dist/positions.js.map +1 -0
- package/dist/src/common/codes.d.ts +6 -0
- package/dist/src/common/codes.d.ts.map +1 -1
- package/dist/src/common/codes.js +6 -0
- package/dist/src/common/codes.js.map +1 -1
- package/dist/src/common/escape.d.ts.map +1 -1
- package/dist/src/common/escape.js +4 -2
- package/dist/src/common/escape.js.map +1 -1
- package/dist/src/common/export.d.ts +10 -0
- package/dist/src/common/export.d.ts.map +1 -1
- package/dist/src/common/export.js +123 -100
- package/dist/src/common/export.js.map +1 -1
- package/dist/src/common/input.d.ts.map +1 -1
- package/dist/src/common/input.js +8 -1
- package/dist/src/common/input.js.map +1 -1
- package/dist/src/common/json-elements.d.ts +12 -9
- package/dist/src/common/json-elements.d.ts.map +1 -1
- package/dist/src/common/json-elements.js +160 -37
- package/dist/src/common/json-elements.js.map +1 -1
- package/dist/src/common/notes.d.ts +42 -0
- package/dist/src/common/notes.d.ts.map +1 -0
- package/dist/src/common/notes.js +72 -0
- package/dist/src/common/notes.js.map +1 -0
- package/dist/src/common/report.d.ts +18 -0
- package/dist/src/common/report.d.ts.map +1 -1
- package/dist/src/common/report.js +36 -1
- package/dist/src/common/report.js.map +1 -1
- package/dist/src/common/units.d.ts +24 -0
- package/dist/src/common/units.d.ts.map +1 -0
- package/dist/src/common/units.js +26 -0
- package/dist/src/common/units.js.map +1 -0
- package/dist/src/common/xml.d.ts +18 -0
- package/dist/src/common/xml.d.ts.map +1 -1
- package/dist/src/common/xml.js +42 -5
- package/dist/src/common/xml.js.map +1 -1
- package/dist/src/formats/cx/exporter.d.ts +6 -0
- package/dist/src/formats/cx/exporter.d.ts.map +1 -1
- package/dist/src/formats/cx/exporter.js +71 -8
- package/dist/src/formats/cx/exporter.js.map +1 -1
- package/dist/src/formats/cx/importer.d.ts +5 -2
- package/dist/src/formats/cx/importer.d.ts.map +1 -1
- package/dist/src/formats/cx/importer.js +102 -72
- package/dist/src/formats/cx/importer.js.map +1 -1
- package/dist/src/formats/cx/styles.d.ts +102 -0
- package/dist/src/formats/cx/styles.d.ts.map +1 -0
- package/dist/src/formats/cx/styles.js +225 -0
- package/dist/src/formats/cx/styles.js.map +1 -0
- package/dist/src/formats/cx2/exporter.d.ts +5 -0
- package/dist/src/formats/cx2/exporter.d.ts.map +1 -1
- package/dist/src/formats/cx2/exporter.js +181 -71
- package/dist/src/formats/cx2/exporter.js.map +1 -1
- package/dist/src/formats/cx2/importer.d.ts +4 -1
- package/dist/src/formats/cx2/importer.d.ts.map +1 -1
- package/dist/src/formats/cx2/importer.js +19 -1
- package/dist/src/formats/cx2/importer.js.map +1 -1
- package/dist/src/formats/cx2/styles.d.ts +18 -0
- package/dist/src/formats/cx2/styles.d.ts.map +1 -0
- package/dist/src/formats/cx2/styles.js +24 -0
- package/dist/src/formats/cx2/styles.js.map +1 -0
- package/dist/src/formats/cys/constants.d.ts +2 -0
- package/dist/src/formats/cys/constants.d.ts.map +1 -1
- package/dist/src/formats/cys/constants.js +2 -0
- package/dist/src/formats/cys/constants.js.map +1 -1
- package/dist/src/formats/cys/exporter.d.ts +6 -2
- package/dist/src/formats/cys/exporter.d.ts.map +1 -1
- package/dist/src/formats/cys/exporter.js +215 -53
- package/dist/src/formats/cys/exporter.js.map +1 -1
- package/dist/src/formats/cys/importer.d.ts +2 -1
- package/dist/src/formats/cys/importer.d.ts.map +1 -1
- package/dist/src/formats/cys/importer.js +119 -6
- package/dist/src/formats/cys/importer.js.map +1 -1
- package/dist/src/formats/cys/session.d.ts +2 -0
- package/dist/src/formats/cys/session.d.ts.map +1 -1
- package/dist/src/formats/cys/session.js +5 -0
- package/dist/src/formats/cys/session.js.map +1 -1
- package/dist/src/formats/cys/styles.d.ts +38 -0
- package/dist/src/formats/cys/styles.d.ts.map +1 -0
- package/dist/src/formats/cys/styles.js +213 -0
- package/dist/src/formats/cys/styles.js.map +1 -0
- package/dist/src/formats/cys/tables.d.ts +8 -3
- package/dist/src/formats/cys/tables.d.ts.map +1 -1
- package/dist/src/formats/cys/tables.js +88 -34
- package/dist/src/formats/cys/tables.js.map +1 -1
- package/dist/src/formats/dot/exporter.d.ts +2 -0
- package/dist/src/formats/dot/exporter.d.ts.map +1 -1
- package/dist/src/formats/dot/exporter.js +195 -81
- package/dist/src/formats/dot/exporter.js.map +1 -1
- package/dist/src/formats/dot/importer.d.ts.map +1 -1
- package/dist/src/formats/dot/importer.js +100 -20
- package/dist/src/formats/dot/importer.js.map +1 -1
- package/dist/src/formats/dot/index.d.ts +1 -0
- package/dist/src/formats/dot/index.d.ts.map +1 -1
- package/dist/src/formats/dot/index.js +1 -0
- package/dist/src/formats/dot/index.js.map +1 -1
- package/dist/src/formats/dot/positions.d.ts +14 -0
- package/dist/src/formats/dot/positions.d.ts.map +1 -0
- package/dist/src/formats/dot/positions.js +70 -0
- package/dist/src/formats/dot/positions.js.map +1 -0
- package/dist/src/formats/dot/styles.d.ts +82 -0
- package/dist/src/formats/dot/styles.d.ts.map +1 -0
- package/dist/src/formats/dot/styles.js +1484 -0
- package/dist/src/formats/dot/styles.js.map +1 -0
- package/dist/src/formats/gexf/exporter.d.ts.map +1 -1
- package/dist/src/formats/gexf/exporter.js +23 -7
- package/dist/src/formats/gexf/exporter.js.map +1 -1
- package/dist/src/formats/gexf/importer.d.ts +8 -1
- package/dist/src/formats/gexf/importer.d.ts.map +1 -1
- package/dist/src/formats/gexf/importer.js +251 -131
- package/dist/src/formats/gexf/importer.js.map +1 -1
- package/dist/src/formats/gexf/index.d.ts +8 -0
- package/dist/src/formats/gexf/index.d.ts.map +1 -1
- package/dist/src/formats/gexf/index.js +10 -2
- package/dist/src/formats/gexf/index.js.map +1 -1
- package/dist/src/formats/gexf/schema.d.ts +5 -0
- package/dist/src/formats/gexf/schema.d.ts.map +1 -1
- package/dist/src/formats/gexf/schema.js +5 -0
- package/dist/src/formats/gexf/schema.js.map +1 -1
- package/dist/src/formats/gexf/styles.d.ts +74 -0
- package/dist/src/formats/gexf/styles.d.ts.map +1 -0
- package/dist/src/formats/gexf/styles.js +604 -0
- package/dist/src/formats/gexf/styles.js.map +1 -0
- package/dist/src/formats/gml/exporter.d.ts +1 -5
- package/dist/src/formats/gml/exporter.d.ts.map +1 -1
- package/dist/src/formats/gml/exporter.js +19 -8
- package/dist/src/formats/gml/exporter.js.map +1 -1
- package/dist/src/formats/gml/importer.d.ts.map +1 -1
- package/dist/src/formats/gml/importer.js +4 -0
- package/dist/src/formats/gml/importer.js.map +1 -1
- package/dist/src/formats/gml/index.d.ts +2 -1
- package/dist/src/formats/gml/index.d.ts.map +1 -1
- package/dist/src/formats/gml/index.js +2 -1
- package/dist/src/formats/gml/index.js.map +1 -1
- package/dist/src/formats/gml/positions.d.ts +14 -0
- package/dist/src/formats/gml/positions.d.ts.map +1 -0
- package/dist/src/formats/gml/positions.js +46 -0
- package/dist/src/formats/gml/positions.js.map +1 -0
- package/dist/src/formats/gml/styles.d.ts +59 -0
- package/dist/src/formats/gml/styles.d.ts.map +1 -0
- package/dist/src/formats/gml/styles.js +1056 -0
- package/dist/src/formats/gml/styles.js.map +1 -0
- package/dist/src/formats/gml/syntax.d.ts +11 -0
- package/dist/src/formats/gml/syntax.d.ts.map +1 -1
- package/dist/src/formats/gml/syntax.js +151 -62
- package/dist/src/formats/gml/syntax.js.map +1 -1
- package/dist/src/formats/graphml/constants.d.ts +4 -0
- package/dist/src/formats/graphml/constants.d.ts.map +1 -1
- package/dist/src/formats/graphml/constants.js +5 -1
- package/dist/src/formats/graphml/constants.js.map +1 -1
- package/dist/src/formats/graphml/exporter.d.ts.map +1 -1
- package/dist/src/formats/graphml/exporter.js +133 -65
- package/dist/src/formats/graphml/exporter.js.map +1 -1
- package/dist/src/formats/graphml/importer.d.ts +4 -1
- package/dist/src/formats/graphml/importer.d.ts.map +1 -1
- package/dist/src/formats/graphml/importer.js +100 -44
- package/dist/src/formats/graphml/importer.js.map +1 -1
- package/dist/src/formats/graphml/index.d.ts +1 -0
- package/dist/src/formats/graphml/index.d.ts.map +1 -1
- package/dist/src/formats/graphml/index.js +1 -0
- package/dist/src/formats/graphml/index.js.map +1 -1
- package/dist/src/formats/graphml/styles-plain.d.ts +19 -0
- package/dist/src/formats/graphml/styles-plain.d.ts.map +1 -0
- package/dist/src/formats/graphml/styles-plain.js +187 -0
- package/dist/src/formats/graphml/styles-plain.js.map +1 -0
- package/dist/src/formats/graphml/styles-yed.d.ts +179 -0
- package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -0
- package/dist/src/formats/graphml/styles-yed.js +1086 -0
- package/dist/src/formats/graphml/styles-yed.js.map +1 -0
- package/dist/src/formats/graphml/styles-yfiles3.d.ts +19 -0
- package/dist/src/formats/graphml/styles-yfiles3.d.ts.map +1 -0
- package/dist/src/formats/graphml/styles-yfiles3.js +508 -0
- package/dist/src/formats/graphml/styles-yfiles3.js.map +1 -0
- package/dist/src/formats/graphml/tree.d.ts.map +1 -1
- package/dist/src/formats/graphml/tree.js +34 -19
- package/dist/src/formats/graphml/tree.js.map +1 -1
- package/dist/src/formats/graphml/yfiles.d.ts +16 -2
- package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
- package/dist/src/formats/graphml/yfiles.js +83 -12
- package/dist/src/formats/graphml/yfiles.js.map +1 -1
- package/dist/src/formats/json/exporter.d.ts +5 -0
- package/dist/src/formats/json/exporter.d.ts.map +1 -1
- package/dist/src/formats/json/exporter.js +68 -25
- package/dist/src/formats/json/exporter.js.map +1 -1
- package/dist/src/formats/json/importer.d.ts +22 -3
- package/dist/src/formats/json/importer.d.ts.map +1 -1
- package/dist/src/formats/json/importer.js +441 -265
- package/dist/src/formats/json/importer.js.map +1 -1
- package/dist/src/formats/json/positions.d.ts +16 -0
- package/dist/src/formats/json/positions.d.ts.map +1 -0
- package/dist/src/formats/json/positions.js +44 -0
- package/dist/src/formats/json/positions.js.map +1 -0
- package/dist/src/formats/json/styles.d.ts +102 -0
- package/dist/src/formats/json/styles.d.ts.map +1 -0
- package/dist/src/formats/json/styles.js +1753 -0
- package/dist/src/formats/json/styles.js.map +1 -0
- package/dist/src/formats/neo4j/exporter.d.ts.map +1 -1
- package/dist/src/formats/neo4j/exporter.js +2 -1
- package/dist/src/formats/neo4j/exporter.js.map +1 -1
- package/dist/src/formats/pajek/exporter.d.ts +2 -0
- package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
- package/dist/src/formats/pajek/exporter.js +142 -76
- package/dist/src/formats/pajek/exporter.js.map +1 -1
- package/dist/src/formats/pajek/importer.d.ts +4 -0
- package/dist/src/formats/pajek/importer.d.ts.map +1 -1
- package/dist/src/formats/pajek/importer.js +60 -6
- package/dist/src/formats/pajek/importer.js.map +1 -1
- package/dist/src/formats/pajek/index.d.ts +2 -0
- package/dist/src/formats/pajek/index.d.ts.map +1 -1
- package/dist/src/formats/pajek/index.js +2 -0
- package/dist/src/formats/pajek/index.js.map +1 -1
- package/dist/src/formats/pajek/styles.d.ts +50 -0
- package/dist/src/formats/pajek/styles.d.ts.map +1 -0
- package/dist/src/formats/pajek/styles.js +569 -0
- package/dist/src/formats/pajek/styles.js.map +1 -0
- package/dist/src/formats/pajek/syntax.d.ts +6 -0
- package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
- package/dist/src/formats/pajek/syntax.js +6 -0
- package/dist/src/formats/pajek/syntax.js.map +1 -1
- package/dist/src/formats/xgmml/columns.d.ts.map +1 -1
- package/dist/src/formats/xgmml/columns.js +34 -9
- package/dist/src/formats/xgmml/columns.js.map +1 -1
- package/dist/src/formats/xgmml/constants.d.ts +2 -0
- package/dist/src/formats/xgmml/constants.d.ts.map +1 -1
- package/dist/src/formats/xgmml/constants.js +3 -1
- package/dist/src/formats/xgmml/constants.js.map +1 -1
- package/dist/src/formats/xgmml/document.d.ts +12 -8
- package/dist/src/formats/xgmml/document.d.ts.map +1 -1
- package/dist/src/formats/xgmml/document.js +56 -13
- package/dist/src/formats/xgmml/document.js.map +1 -1
- package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
- package/dist/src/formats/xgmml/emit.js +12 -6
- package/dist/src/formats/xgmml/emit.js.map +1 -1
- package/dist/src/formats/xgmml/exporter.d.ts +3 -1
- package/dist/src/formats/xgmml/exporter.d.ts.map +1 -1
- package/dist/src/formats/xgmml/exporter.js +22 -9
- package/dist/src/formats/xgmml/exporter.js.map +1 -1
- package/dist/src/formats/xgmml/importer.d.ts +2 -1
- package/dist/src/formats/xgmml/importer.d.ts.map +1 -1
- package/dist/src/formats/xgmml/importer.js +31 -24
- package/dist/src/formats/xgmml/importer.js.map +1 -1
- package/dist/src/formats/xgmml/styles.d.ts +104 -0
- package/dist/src/formats/xgmml/styles.d.ts.map +1 -0
- package/dist/src/formats/xgmml/styles.js +310 -0
- package/dist/src/formats/xgmml/styles.js.map +1 -0
- package/dist/src/index.d.ts +9 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -7
- package/dist/src/index.js.map +1 -1
- package/dist/src/positions/codes.d.ts +31 -0
- package/dist/src/positions/codes.d.ts.map +1 -0
- package/dist/src/positions/codes.js +26 -0
- package/dist/src/positions/codes.js.map +1 -0
- package/dist/src/positions/convert.d.ts +58 -0
- package/dist/src/positions/convert.d.ts.map +1 -0
- package/dist/src/positions/convert.js +107 -0
- package/dist/src/positions/convert.js.map +1 -0
- package/dist/src/positions/extract.d.ts +27 -0
- package/dist/src/positions/extract.d.ts.map +1 -0
- package/dist/src/positions/extract.js +526 -0
- package/dist/src/positions/extract.js.map +1 -0
- package/dist/src/positions/index.d.ts +10 -0
- package/dist/src/positions/index.d.ts.map +1 -0
- package/dist/src/positions/index.js +9 -0
- package/dist/src/positions/index.js.map +1 -0
- package/dist/src/positions/types.d.ts +208 -0
- package/dist/src/positions/types.d.ts.map +1 -0
- package/dist/src/positions/types.js +10 -0
- package/dist/src/positions/types.js.map +1 -0
- package/dist/src/registry.d.ts +30 -0
- package/dist/src/registry.d.ts.map +1 -1
- package/dist/src/registry.js +130 -9
- package/dist/src/registry.js.map +1 -1
- package/dist/src/styles/annotations.d.ts +132 -0
- package/dist/src/styles/annotations.d.ts.map +1 -0
- package/dist/src/styles/annotations.js +320 -0
- package/dist/src/styles/annotations.js.map +1 -0
- package/dist/src/styles/budget.d.ts +45 -0
- package/dist/src/styles/budget.d.ts.map +1 -0
- package/dist/src/styles/budget.js +58 -0
- package/dist/src/styles/budget.js.map +1 -0
- package/dist/src/styles/canon/bends.d.ts +32 -0
- package/dist/src/styles/canon/bends.d.ts.map +1 -0
- package/dist/src/styles/canon/bends.js +74 -0
- package/dist/src/styles/canon/bends.js.map +1 -0
- package/dist/src/styles/canon/color-tables.d.ts +22 -0
- package/dist/src/styles/canon/color-tables.d.ts.map +1 -0
- package/dist/src/styles/canon/color-tables.js +369 -0
- package/dist/src/styles/canon/color-tables.js.map +1 -0
- package/dist/src/styles/canon/color.d.ts +66 -0
- package/dist/src/styles/canon/color.d.ts.map +1 -0
- package/dist/src/styles/canon/color.js +548 -0
- package/dist/src/styles/canon/color.js.map +1 -0
- package/dist/src/styles/canon/enums.d.ts +25 -0
- package/dist/src/styles/canon/enums.d.ts.map +1 -0
- package/dist/src/styles/canon/enums.js +187 -0
- package/dist/src/styles/canon/enums.js.map +1 -0
- package/dist/src/styles/canon/graphviz.d.ts +48 -0
- package/dist/src/styles/canon/graphviz.d.ts.map +1 -0
- package/dist/src/styles/canon/graphviz.js +160 -0
- package/dist/src/styles/canon/graphviz.js.map +1 -0
- package/dist/src/styles/canon/index.d.ts +13 -0
- package/dist/src/styles/canon/index.d.ts.map +1 -0
- package/dist/src/styles/canon/index.js +13 -0
- package/dist/src/styles/canon/index.js.map +1 -0
- package/dist/src/styles/canon/number.d.ts +59 -0
- package/dist/src/styles/canon/number.d.ts.map +1 -0
- package/dist/src/styles/canon/number.js +142 -0
- package/dist/src/styles/canon/number.js.map +1 -0
- package/dist/src/styles/canon/site.d.ts +51 -0
- package/dist/src/styles/canon/site.d.ts.map +1 -0
- package/dist/src/styles/canon/site.js +63 -0
- package/dist/src/styles/canon/site.js.map +1 -0
- package/dist/src/styles/canon/text.d.ts +61 -0
- package/dist/src/styles/canon/text.d.ts.map +1 -0
- package/dist/src/styles/canon/text.js +199 -0
- package/dist/src/styles/canon/text.js.map +1 -0
- package/dist/src/styles/codes.d.ts +95 -0
- package/dist/src/styles/codes.d.ts.map +1 -0
- package/dist/src/styles/codes.js +97 -0
- package/dist/src/styles/codes.js.map +1 -0
- package/dist/src/styles/cyjs/cascade.d.ts +134 -0
- package/dist/src/styles/cyjs/cascade.d.ts.map +1 -0
- package/dist/src/styles/cyjs/cascade.js +2252 -0
- package/dist/src/styles/cyjs/cascade.js.map +1 -0
- package/dist/src/styles/cyjs/defaults-table.d.ts +25 -0
- package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -0
- package/dist/src/styles/cyjs/defaults-table.js +76 -0
- package/dist/src/styles/cyjs/defaults-table.js.map +1 -0
- package/dist/src/styles/cyjs/emit.d.ts +82 -0
- package/dist/src/styles/cyjs/emit.d.ts.map +1 -0
- package/dist/src/styles/cyjs/emit.js +790 -0
- package/dist/src/styles/cyjs/emit.js.map +1 -0
- package/dist/src/styles/cyjs/index.d.ts +13 -0
- package/dist/src/styles/cyjs/index.d.ts.map +1 -0
- package/dist/src/styles/cyjs/index.js +13 -0
- package/dist/src/styles/cyjs/index.js.map +1 -0
- package/dist/src/styles/cyjs/live.d.ts +46 -0
- package/dist/src/styles/cyjs/live.d.ts.map +1 -0
- package/dist/src/styles/cyjs/live.js +108 -0
- package/dist/src/styles/cyjs/live.js.map +1 -0
- package/dist/src/styles/cyjs/mappers.d.ts +147 -0
- package/dist/src/styles/cyjs/mappers.d.ts.map +1 -0
- package/dist/src/styles/cyjs/mappers.js +744 -0
- package/dist/src/styles/cyjs/mappers.js.map +1 -0
- package/dist/src/styles/cyjs/selector.d.ts +113 -0
- package/dist/src/styles/cyjs/selector.d.ts.map +1 -0
- package/dist/src/styles/cyjs/selector.js +611 -0
- package/dist/src/styles/cyjs/selector.js.map +1 -0
- package/dist/src/styles/cyjs/stylesheet-text.d.ts +37 -0
- package/dist/src/styles/cyjs/stylesheet-text.d.ts.map +1 -0
- package/dist/src/styles/cyjs/stylesheet-text.js +181 -0
- package/dist/src/styles/cyjs/stylesheet-text.js.map +1 -0
- package/dist/src/styles/cytoscape/emit.d.ts +125 -0
- package/dist/src/styles/cytoscape/emit.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/emit.js +1025 -0
- package/dist/src/styles/cytoscape/emit.js.map +1 -0
- package/dist/src/styles/cytoscape/index.d.ts +10 -0
- package/dist/src/styles/cytoscape/index.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/index.js +10 -0
- package/dist/src/styles/cytoscape/index.js.map +1 -0
- package/dist/src/styles/cytoscape/lexicon.d.ts +49 -0
- package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/lexicon.js +603 -0
- package/dist/src/styles/cytoscape/lexicon.js.map +1 -0
- package/dist/src/styles/cytoscape/mappings.d.ts +171 -0
- package/dist/src/styles/cytoscape/mappings.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/mappings.js +460 -0
- package/dist/src/styles/cytoscape/mappings.js.map +1 -0
- package/dist/src/styles/cytoscape/resolve.d.ts +137 -0
- package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/resolve.js +381 -0
- package/dist/src/styles/cytoscape/resolve.js.map +1 -0
- package/dist/src/styles/cytoscape/translate.d.ts +50 -0
- package/dist/src/styles/cytoscape/translate.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/translate.js +156 -0
- package/dist/src/styles/cytoscape/translate.js.map +1 -0
- package/dist/src/styles/defaults.d.ts +90 -0
- package/dist/src/styles/defaults.d.ts.map +1 -0
- package/dist/src/styles/defaults.js +414 -0
- package/dist/src/styles/defaults.js.map +1 -0
- package/dist/src/styles/index.d.ts +15 -0
- package/dist/src/styles/index.d.ts.map +1 -0
- package/dist/src/styles/index.js +14 -0
- package/dist/src/styles/index.js.map +1 -0
- package/dist/src/styles/internal.d.ts +17 -0
- package/dist/src/styles/internal.d.ts.map +1 -0
- package/dist/src/styles/internal.js +16 -0
- package/dist/src/styles/internal.js.map +1 -0
- package/dist/src/styles/io/approximations.d.ts +24 -0
- package/dist/src/styles/io/approximations.d.ts.map +1 -0
- package/dist/src/styles/io/approximations.js +51 -0
- package/dist/src/styles/io/approximations.js.map +1 -0
- package/dist/src/styles/io/block.d.ts +166 -0
- package/dist/src/styles/io/block.d.ts.map +1 -0
- package/dist/src/styles/io/block.js +930 -0
- package/dist/src/styles/io/block.js.map +1 -0
- package/dist/src/styles/io/generic.d.ts +88 -0
- package/dist/src/styles/io/generic.d.ts.map +1 -0
- package/dist/src/styles/io/generic.js +516 -0
- package/dist/src/styles/io/generic.js.map +1 -0
- package/dist/src/styles/io/index.d.ts +8 -0
- package/dist/src/styles/io/index.d.ts.map +1 -0
- package/dist/src/styles/io/index.js +7 -0
- package/dist/src/styles/io/index.js.map +1 -0
- package/dist/src/styles/io/writer.d.ts +80 -0
- package/dist/src/styles/io/writer.d.ts.map +1 -0
- package/dist/src/styles/io/writer.js +596 -0
- package/dist/src/styles/io/writer.js.map +1 -0
- package/dist/src/styles/notes.d.ts +47 -0
- package/dist/src/styles/notes.d.ts.map +1 -0
- package/dist/src/styles/notes.js +140 -0
- package/dist/src/styles/notes.js.map +1 -0
- package/dist/src/styles/plan/classes.d.ts +31 -0
- package/dist/src/styles/plan/classes.d.ts.map +1 -0
- package/dist/src/styles/plan/classes.js +139 -0
- package/dist/src/styles/plan/classes.js.map +1 -0
- package/dist/src/styles/plan/continuous.d.ts +32 -0
- package/dist/src/styles/plan/continuous.d.ts.map +1 -0
- package/dist/src/styles/plan/continuous.js +165 -0
- package/dist/src/styles/plan/continuous.js.map +1 -0
- package/dist/src/styles/plan/discrete.d.ts +39 -0
- package/dist/src/styles/plan/discrete.d.ts.map +1 -0
- package/dist/src/styles/plan/discrete.js +127 -0
- package/dist/src/styles/plan/discrete.js.map +1 -0
- package/dist/src/styles/plan/families.d.ts +31 -0
- package/dist/src/styles/plan/families.d.ts.map +1 -0
- package/dist/src/styles/plan/families.js +95 -0
- package/dist/src/styles/plan/families.js.map +1 -0
- package/dist/src/styles/plan/features.d.ts +58 -0
- package/dist/src/styles/plan/features.d.ts.map +1 -0
- package/dist/src/styles/plan/features.js +185 -0
- package/dist/src/styles/plan/features.js.map +1 -0
- package/dist/src/styles/plan/index.d.ts +7 -0
- package/dist/src/styles/plan/index.d.ts.map +1 -0
- package/dist/src/styles/plan/index.js +7 -0
- package/dist/src/styles/plan/index.js.map +1 -0
- package/dist/src/styles/plan/plan.d.ts +71 -0
- package/dist/src/styles/plan/plan.d.ts.map +1 -0
- package/dist/src/styles/plan/plan.js +893 -0
- package/dist/src/styles/plan/plan.js.map +1 -0
- package/dist/src/styles/plan/resolve.d.ts +137 -0
- package/dist/src/styles/plan/resolve.d.ts.map +1 -0
- package/dist/src/styles/plan/resolve.js +587 -0
- package/dist/src/styles/plan/resolve.js.map +1 -0
- package/dist/src/styles/types.d.ts +702 -0
- package/dist/src/styles/types.d.ts.map +1 -0
- package/dist/src/styles/types.js +10 -0
- package/dist/src/styles/types.js.map +1 -0
- package/dist/src/styles/vocabulary.d.ts +41 -0
- package/dist/src/styles/vocabulary.d.ts.map +1 -0
- package/dist/src/styles/vocabulary.js +140 -0
- package/dist/src/styles/vocabulary.js.map +1 -0
- package/dist/src/types.d.ts +64 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/styles.d.ts +1 -0
- package/dist/styles.js +322 -0
- package/dist/styles.js.map +1 -0
- package/dist/xgmml.js +5 -4
- package/dist/xgmml.js.map +1 -1
- package/package.json +13 -2
- package/src/common/codes.ts +7 -0
- package/src/common/escape.ts +5 -2
- package/src/common/export.ts +179 -140
- package/src/common/input.ts +8 -4
- package/src/common/json-elements.ts +169 -38
- package/src/common/notes.ts +94 -0
- package/src/common/report.ts +41 -1
- package/src/common/units.ts +42 -0
- package/src/common/xml.ts +45 -5
- package/src/formats/cx/exporter.ts +95 -11
- package/src/formats/cx/importer.ts +126 -90
- package/src/formats/cx/styles.ts +304 -0
- package/src/formats/cx2/exporter.ts +234 -77
- package/src/formats/cx2/importer.ts +19 -1
- package/src/formats/cx2/styles.ts +29 -0
- package/src/formats/cys/constants.ts +3 -0
- package/src/formats/cys/exporter.ts +246 -60
- package/src/formats/cys/importer.ts +125 -9
- package/src/formats/cys/session.ts +6 -0
- package/src/formats/cys/styles.ts +254 -0
- package/src/formats/cys/tables.ts +117 -48
- package/src/formats/dot/exporter.ts +262 -126
- package/src/formats/dot/importer.ts +111 -20
- package/src/formats/dot/index.ts +1 -0
- package/src/formats/dot/positions.ts +77 -0
- package/src/formats/dot/styles.ts +1741 -0
- package/src/formats/gexf/exporter.ts +30 -13
- package/src/formats/gexf/importer.ts +308 -158
- package/src/formats/gexf/index.ts +10 -0
- package/src/formats/gexf/schema.ts +5 -0
- package/src/formats/gexf/styles.ts +719 -0
- package/src/formats/gml/exporter.ts +33 -14
- package/src/formats/gml/importer.ts +4 -0
- package/src/formats/gml/index.ts +2 -1
- package/src/formats/gml/positions.ts +52 -0
- package/src/formats/gml/styles.ts +1248 -0
- package/src/formats/gml/syntax.ts +173 -62
- package/src/formats/graphml/constants.ts +5 -0
- package/src/formats/graphml/exporter.ts +163 -71
- package/src/formats/graphml/importer.ts +119 -45
- package/src/formats/graphml/index.ts +1 -0
- package/src/formats/graphml/styles-plain.ts +236 -0
- package/src/formats/graphml/styles-yed.ts +1221 -0
- package/src/formats/graphml/styles-yfiles3.ts +573 -0
- package/src/formats/graphml/tree.ts +36 -20
- package/src/formats/graphml/yfiles.ts +89 -13
- package/src/formats/json/exporter.ts +76 -26
- package/src/formats/json/importer.ts +543 -323
- package/src/formats/json/positions.ts +50 -0
- package/src/formats/json/styles.ts +2082 -0
- package/src/formats/neo4j/exporter.ts +2 -1
- package/src/formats/pajek/exporter.ts +195 -106
- package/src/formats/pajek/importer.ts +78 -9
- package/src/formats/pajek/index.ts +2 -0
- package/src/formats/pajek/styles.ts +685 -0
- package/src/formats/pajek/syntax.ts +7 -0
- package/src/formats/xgmml/columns.ts +39 -9
- package/src/formats/xgmml/constants.ts +3 -0
- package/src/formats/xgmml/document.ts +54 -12
- package/src/formats/xgmml/emit.ts +11 -6
- package/src/formats/xgmml/exporter.ts +32 -13
- package/src/formats/xgmml/importer.ts +43 -29
- package/src/formats/xgmml/styles.ts +400 -0
- package/src/index.ts +16 -0
- package/src/positions/codes.ts +32 -0
- package/src/positions/convert.ts +123 -0
- package/src/positions/extract.ts +619 -0
- package/src/positions/index.ts +23 -0
- package/src/positions/types.ts +221 -0
- package/src/registry.ts +179 -8
- package/src/styles/annotations.ts +478 -0
- package/src/styles/budget.ts +60 -0
- package/src/styles/canon/bends.ts +84 -0
- package/src/styles/canon/color-tables.ts +386 -0
- package/src/styles/canon/color.ts +624 -0
- package/src/styles/canon/enums.ts +211 -0
- package/src/styles/canon/graphviz.ts +189 -0
- package/src/styles/canon/index.ts +13 -0
- package/src/styles/canon/number.ts +152 -0
- package/src/styles/canon/site.ts +87 -0
- package/src/styles/canon/text.ts +221 -0
- package/src/styles/codes.ts +104 -0
- package/src/styles/cyjs/cascade.ts +2670 -0
- package/src/styles/cyjs/defaults-table.ts +82 -0
- package/src/styles/cyjs/emit.ts +951 -0
- package/src/styles/cyjs/index.ts +37 -0
- package/src/styles/cyjs/live.ts +147 -0
- package/src/styles/cyjs/mappers.ts +879 -0
- package/src/styles/cyjs/selector.ts +778 -0
- package/src/styles/cyjs/stylesheet-text.ts +214 -0
- package/src/styles/cytoscape/emit.ts +1264 -0
- package/src/styles/cytoscape/index.ts +40 -0
- package/src/styles/cytoscape/lexicon.ts +656 -0
- package/src/styles/cytoscape/mappings.ts +603 -0
- package/src/styles/cytoscape/resolve.ts +521 -0
- package/src/styles/cytoscape/translate.ts +237 -0
- package/src/styles/defaults.ts +504 -0
- package/src/styles/index.ts +57 -0
- package/src/styles/internal.ts +17 -0
- package/src/styles/io/approximations.ts +47 -0
- package/src/styles/io/block.ts +1138 -0
- package/src/styles/io/generic.ts +687 -0
- package/src/styles/io/index.ts +18 -0
- package/src/styles/io/writer.ts +745 -0
- package/src/styles/notes.ts +165 -0
- package/src/styles/plan/classes.ts +166 -0
- package/src/styles/plan/continuous.ts +218 -0
- package/src/styles/plan/discrete.ts +165 -0
- package/src/styles/plan/families.ts +115 -0
- package/src/styles/plan/features.ts +234 -0
- package/src/styles/plan/index.ts +7 -0
- package/src/styles/plan/plan.ts +1129 -0
- package/src/styles/plan/resolve.ts +685 -0
- package/src/styles/types.ts +814 -0
- package/src/styles/vocabulary.ts +172 -0
- package/src/types.ts +76 -1
- package/dist/chunks/constants-fT3E8JYY.js.map +0 -1
- package/dist/chunks/escape-B62ZGM_a.js.map +0 -1
- package/dist/chunks/export-rKLeGQMo.js.map +0 -1
- package/dist/chunks/exporter-8hLNemFk.js.map +0 -1
- package/dist/chunks/exporter-BWwEuOPT.js.map +0 -1
- package/dist/chunks/exporter-CpRyHZ3H.js.map +0 -1
- package/dist/chunks/importer-BbNb7eNg.js.map +0 -1
- package/dist/chunks/importer-C98dpSH4.js.map +0 -1
- package/dist/chunks/importer-D794XUTe.js.map +0 -1
- package/dist/chunks/importer-Dz7tI8Sa.js.map +0 -1
- package/dist/chunks/importer-Ht7LNg8L.js.map +0 -1
- package/dist/chunks/importer-WrGRZb0N.js.map +0 -1
- package/dist/chunks/importer-xZ-3suY1.js.map +0 -1
- package/dist/chunks/json-elements-DKSqpNW1.js.map +0 -1
|
@@ -26,6 +26,7 @@ import { agree, plural } from "../../common/plural.js";
|
|
|
26
26
|
import { inferTextDtype } from "../../common/text.js";
|
|
27
27
|
import { type ExplicitWeights, explicitWeights } from "../../common/weights.js";
|
|
28
28
|
import { encodeChunks, indentUnit, joinText } from "../../common/writer.js";
|
|
29
|
+
import type { ExporterStyleOptions } from "../../styles/io/writer.js";
|
|
29
30
|
import { type CommonExportOptions, type ExportCapabilities, type GraphExporter, type LossNote } from "../../types.js";
|
|
30
31
|
import {
|
|
31
32
|
CLUSTER_COLUMN,
|
|
@@ -38,6 +39,10 @@ import {
|
|
|
38
39
|
SOURCE_PORT_COLUMN,
|
|
39
40
|
TARGET_PORT_COLUMN,
|
|
40
41
|
} from "./names.js";
|
|
42
|
+
import { DOT_ATTRIBUTE_CLASH_CODE, DOT_STYLE_CAPABILITIES, dotStyledExport, isHtmlString } from "./styles.js";
|
|
43
|
+
|
|
44
|
+
/** What the writer takes: the format's options, the common ones and the styles. */
|
|
45
|
+
type DotWriteOptions = DotExportOptions & CommonExportOptions & ExporterStyleOptions;
|
|
41
46
|
|
|
42
47
|
/**
|
|
43
48
|
* The DOT exporter's format-specific options.
|
|
@@ -82,7 +87,7 @@ export const DOT_LOSS = Object.freeze({
|
|
|
82
87
|
*/
|
|
83
88
|
TEXT_INFERRED: LOSS.TEXT_INFERRED,
|
|
84
89
|
/** A plain column named like an attribute the exporter writes for a role (weight, key, pos) is not written. */
|
|
85
|
-
ATTRIBUTE_CLASH:
|
|
90
|
+
ATTRIBUTE_CLASH: DOT_ATTRIBUTE_CLASH_CODE,
|
|
86
91
|
/** A mutual pair is written as two directed edges. */
|
|
87
92
|
MUTUAL_EXPANDED: LOSS.MUTUAL_EXPANDED,
|
|
88
93
|
/** A parents (multi-parent) column cannot be written; DOT clusters nest. */
|
|
@@ -100,8 +105,42 @@ export const DOT_LOSS = Object.freeze({
|
|
|
100
105
|
ROLE_ASSUMED: LOSS.ROLE_ASSUMED,
|
|
101
106
|
/** A parent that is a plain node is written as a node and a cluster of one name; it reads back marked as a cluster. */
|
|
102
107
|
CLUSTER_MARKED: "W_DOT_CLUSTER_MARKED",
|
|
108
|
+
/** The file is written in UTF-8, so a graph `charset` naming another encoding is written as `UTF-8`. */
|
|
109
|
+
CHARSET_REWRITTEN: "W_DOT_CHARSET_REWRITTEN",
|
|
103
110
|
});
|
|
104
111
|
|
|
112
|
+
/** A graph `charset` that names the encoding the exporter writes (Graphviz accepts both spellings). */
|
|
113
|
+
const UTF8_CHARSET = /^utf-?8$/i;
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* W_DOT_CHARSET_REWRITTEN for a graph `charset` naming another encoding than the UTF-8 the file is written in.
|
|
117
|
+
* @param column - a graph column
|
|
118
|
+
* @returns the note, or none
|
|
119
|
+
*/
|
|
120
|
+
function charsetNotes(column: Column): LossNote[] {
|
|
121
|
+
const declared = isCharset(column) && column.isSet(0) ? cellText(column, 0) : null;
|
|
122
|
+
if (declared === null || UTF8_CHARSET.test(declared)) {
|
|
123
|
+
return [];
|
|
124
|
+
}
|
|
125
|
+
return [
|
|
126
|
+
Object.freeze({
|
|
127
|
+
code: DOT_LOSS.CHARSET_REWRITTEN,
|
|
128
|
+
message: `graph attribute charset ${JSON.stringify(declared)} is written as "UTF-8", the encoding the file is written in`,
|
|
129
|
+
column: column.meta.name,
|
|
130
|
+
count: 1,
|
|
131
|
+
}),
|
|
132
|
+
];
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Whether a graph column is the `charset` attribute, which must name the encoding the file is written in.
|
|
137
|
+
* @param column - the column
|
|
138
|
+
* @returns true for the charset column
|
|
139
|
+
*/
|
|
140
|
+
function isCharset(column: Column): boolean {
|
|
141
|
+
return column.meta.name.toLowerCase() === "charset";
|
|
142
|
+
}
|
|
143
|
+
|
|
105
144
|
/** The roles DOT has a slot for (the label attribute, key, ports, clusters); every other role is reported. */
|
|
106
145
|
const KEPT_ROLES: ReadonlySet<string> = new Set(["label", "id", "sourcePort", "targetPort", "parent"]);
|
|
107
146
|
|
|
@@ -196,22 +235,21 @@ export const dotExporter: GraphExporter<DotExportOptions> = Object.freeze({
|
|
|
196
235
|
format: DOT_FORMAT,
|
|
197
236
|
options: Object.freeze(["indent", "name", "strict"]),
|
|
198
237
|
capabilities: CAPABILITIES,
|
|
238
|
+
styles: Object.freeze({ capabilities: DOT_STYLE_CAPABILITIES }),
|
|
199
239
|
|
|
200
240
|
/**
|
|
201
|
-
* Pre-flight: every loss the DOT text would incur, without writing anything
|
|
241
|
+
* Pre-flight: every loss the DOT text would incur, without writing anything; with styles, also the values
|
|
242
|
+
* written as the nearest ones Graphviz has.
|
|
202
243
|
* @param snapshot - the snapshot to check
|
|
203
244
|
* @param options - format-specific and common options
|
|
204
245
|
* @returns the notes, empty when the export is exact
|
|
205
246
|
*/
|
|
206
|
-
check(snapshot: GraphSnapshot, options?:
|
|
207
|
-
const
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
});
|
|
213
|
-
const plan = new ExportPlan(snapshot, resolved, options);
|
|
214
|
-
return [...notes, ...plan.notes()];
|
|
247
|
+
check(snapshot: GraphSnapshot, options?: DotWriteOptions): readonly LossNote[] {
|
|
248
|
+
const styled = dotStyledExport(snapshot, options?.styles, options?.onMixedDirection);
|
|
249
|
+
if (styled === null) {
|
|
250
|
+
return checkPlain(snapshot, options);
|
|
251
|
+
}
|
|
252
|
+
return Object.freeze([...checkPlain(styled.snapshot, options), ...styled.notes]);
|
|
215
253
|
},
|
|
216
254
|
|
|
217
255
|
/**
|
|
@@ -220,8 +258,13 @@ export const dotExporter: GraphExporter<DotExportOptions> = Object.freeze({
|
|
|
220
258
|
* @param options - format-specific and common options
|
|
221
259
|
* @returns the encoded chunks
|
|
222
260
|
*/
|
|
223
|
-
export(snapshot: GraphSnapshot, options?:
|
|
224
|
-
return encodeChunks(
|
|
261
|
+
export(snapshot: GraphSnapshot, options?: DotWriteOptions): AsyncIterable<Uint8Array> {
|
|
262
|
+
return encodeChunks(
|
|
263
|
+
writeDot(
|
|
264
|
+
dotStyledExport(snapshot, options?.styles, options?.onMixedDirection)?.snapshot ?? snapshot,
|
|
265
|
+
options,
|
|
266
|
+
),
|
|
267
|
+
);
|
|
225
268
|
},
|
|
226
269
|
|
|
227
270
|
/**
|
|
@@ -230,11 +273,33 @@ export const dotExporter: GraphExporter<DotExportOptions> = Object.freeze({
|
|
|
230
273
|
* @param options - format-specific and common options
|
|
231
274
|
* @returns the whole document
|
|
232
275
|
*/
|
|
233
|
-
exportToString(snapshot: GraphSnapshot, options?:
|
|
234
|
-
return joinText(
|
|
276
|
+
exportToString(snapshot: GraphSnapshot, options?: DotWriteOptions): Promise<string> {
|
|
277
|
+
return joinText(
|
|
278
|
+
writeDot(
|
|
279
|
+
dotStyledExport(snapshot, options?.styles, options?.onMixedDirection)?.snapshot ?? snapshot,
|
|
280
|
+
options,
|
|
281
|
+
),
|
|
282
|
+
);
|
|
235
283
|
},
|
|
236
284
|
});
|
|
237
285
|
|
|
286
|
+
/**
|
|
287
|
+
* Every loss the DOT text of a snapshot would incur.
|
|
288
|
+
* @param snapshot - the snapshot to check
|
|
289
|
+
* @param options - format-specific and common options
|
|
290
|
+
* @returns the notes
|
|
291
|
+
*/
|
|
292
|
+
function checkPlain(snapshot: GraphSnapshot, options?: DotExportOptions & CommonExportOptions): LossNote[] {
|
|
293
|
+
const resolved = resolveExportOptions(options);
|
|
294
|
+
const notes = checkCapabilities(snapshot, CAPABILITIES, resolved, {
|
|
295
|
+
positionDtype: "f64",
|
|
296
|
+
roles: KEPT_ROLES,
|
|
297
|
+
roleNames: ROLE_NAMES,
|
|
298
|
+
});
|
|
299
|
+
const plan = new ExportPlan(snapshot, resolved, options);
|
|
300
|
+
return [...notes, ...plan.notes()];
|
|
301
|
+
}
|
|
302
|
+
|
|
238
303
|
/**
|
|
239
304
|
* The text parts of a DOT document.
|
|
240
305
|
* @param snapshot - the snapshot
|
|
@@ -259,31 +324,6 @@ function endsWithBackslash(text: string): boolean {
|
|
|
259
324
|
return !isWritableDotText(text);
|
|
260
325
|
}
|
|
261
326
|
|
|
262
|
-
/**
|
|
263
|
-
* Whether a text is an HTML string (balanced angle brackets around the whole text), which DOT
|
|
264
|
-
* writes bare as `<...>`.
|
|
265
|
-
* @param text - the text
|
|
266
|
-
* @returns true for an HTML string
|
|
267
|
-
*/
|
|
268
|
-
function isHtmlString(text: string): boolean {
|
|
269
|
-
if (text.length < 2 || !text.startsWith("<") || !text.endsWith(">")) {
|
|
270
|
-
return false;
|
|
271
|
-
}
|
|
272
|
-
let depth = 0;
|
|
273
|
-
for (let i = 0; i < text.length; i++) {
|
|
274
|
-
const c = text.charCodeAt(i);
|
|
275
|
-
if (c === 0x3c) {
|
|
276
|
-
depth++;
|
|
277
|
-
} else if (c === 0x3e) {
|
|
278
|
-
depth--;
|
|
279
|
-
if (depth === 0 && i !== text.length - 1) {
|
|
280
|
-
return false;
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
return depth === 0;
|
|
285
|
-
}
|
|
286
|
-
|
|
287
327
|
/**
|
|
288
328
|
* Write a text as a DOT ID: an HTML string bare, everything else through quoteDotId.
|
|
289
329
|
* @param text - the text
|
|
@@ -338,6 +378,89 @@ function badOption(option: string, found: unknown, expected: string): GraphForma
|
|
|
338
378
|
* write(): the output direction, the columns written per table, the cluster structure, and the
|
|
339
379
|
* format-specific loss notes.
|
|
340
380
|
*/
|
|
381
|
+
|
|
382
|
+
/** A note-recording callback. */
|
|
383
|
+
type DotNote = (code: string, message: string, column?: string | null, count?: number | null) => void;
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* The notes of one node, edge or graph column: dropped when empty, read back with the label role, non-finite
|
|
387
|
+
* numbers and text that reads back typed.
|
|
388
|
+
* @param label - node, edge or graph
|
|
389
|
+
* @param column - the column
|
|
390
|
+
* @param note - the recorder
|
|
391
|
+
*/
|
|
392
|
+
function columnNotes(label: "node" | "edge" | "graph", column: Column, note: DotNote): void {
|
|
393
|
+
const { name, role } = column.meta;
|
|
394
|
+
const text = column.dtype === "string" || column.dtype === "dict";
|
|
395
|
+
if (label !== "graph" && column.nullCount === column.length) {
|
|
396
|
+
note(
|
|
397
|
+
DOT_LOSS.EMPTY_COLUMN_DROPPED,
|
|
398
|
+
`${label} column "${name}" has no set cell and is not written: DOT writes cells, never declarations`,
|
|
399
|
+
name,
|
|
400
|
+
0,
|
|
401
|
+
);
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
if (label !== "graph" && role === null && name === LABEL_ATTRIBUTE && text) {
|
|
405
|
+
note(
|
|
406
|
+
DOT_LOSS.ROLE_ASSUMED,
|
|
407
|
+
`${label} column "${name}" reads back with the label role`,
|
|
408
|
+
name,
|
|
409
|
+
column.length - column.nullCount,
|
|
410
|
+
);
|
|
411
|
+
}
|
|
412
|
+
const bad = column.dtype === "f32" || column.dtype === "f64" ? countNonFinite(column) : 0;
|
|
413
|
+
if (bad > 0) {
|
|
414
|
+
note(
|
|
415
|
+
DOT_LOSS.NON_FINITE,
|
|
416
|
+
`${label} column "${name}" holds ${bad} non-finite value${plural(bad)} with no numeric DOT spelling; they read back as text`,
|
|
417
|
+
name,
|
|
418
|
+
bad,
|
|
419
|
+
);
|
|
420
|
+
}
|
|
421
|
+
const typed = text && (role === null || !TEXT_ROLES.has(role)) ? countTypedLookingText(column) : 0;
|
|
422
|
+
if (typed > 0) {
|
|
423
|
+
note(
|
|
424
|
+
DOT_LOSS.TEXT_INFERRED,
|
|
425
|
+
`${label} column "${name}" holds ${typed} text value${plural(typed)} that look like numbers or booleans; DOT values are untyped and they read back as such`,
|
|
426
|
+
name,
|
|
427
|
+
typed,
|
|
428
|
+
);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* The notes of position columns DOT cannot write: a node position of other than 2 or 3 components, and any edge or
|
|
434
|
+
* graph position.
|
|
435
|
+
* @param snapshot - the snapshot
|
|
436
|
+
* @param position - the node position column, or null
|
|
437
|
+
* @param note - the recorder
|
|
438
|
+
*/
|
|
439
|
+
function positionNotes(snapshot: GraphSnapshot, position: Column | null, note: DotNote): void {
|
|
440
|
+
if (position !== null && position.meta.components !== 2 && position.meta.components !== 3) {
|
|
441
|
+
note(
|
|
442
|
+
DOT_LOSS.POSITION_SHAPE,
|
|
443
|
+
`node column "${position.meta.name}" (position) has ${position.meta.components} components and is not written; pos takes 2 or 3`,
|
|
444
|
+
position.meta.name,
|
|
445
|
+
position.length - position.nullCount,
|
|
446
|
+
);
|
|
447
|
+
}
|
|
448
|
+
for (const [label, table] of [
|
|
449
|
+
["edge", snapshot.edges],
|
|
450
|
+
["graph", snapshot.graph],
|
|
451
|
+
] as const) {
|
|
452
|
+
const column = table.byRole("position");
|
|
453
|
+
if (column !== null) {
|
|
454
|
+
note(
|
|
455
|
+
DOT_LOSS.POSITION_SHAPE,
|
|
456
|
+
`${label} column "${column.meta.name}" (position) is not written; only node positions map to pos`,
|
|
457
|
+
column.meta.name,
|
|
458
|
+
column.length - column.nullCount,
|
|
459
|
+
);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
|
|
341
464
|
class ExportPlan {
|
|
342
465
|
private readonly snapshot: GraphSnapshot;
|
|
343
466
|
|
|
@@ -432,6 +555,53 @@ class ExportPlan {
|
|
|
432
555
|
this.children = childrenCsr(snapshot, {
|
|
433
556
|
column: this.parent !== null && this.parent.dtype === "u32" ? this.parent : null,
|
|
434
557
|
});
|
|
558
|
+
// in the order a reader first meets them, which is the order it gives the columns: the file read and written
|
|
559
|
+
// again is the same, whichever node or edge first held a column
|
|
560
|
+
this.nodeColumns = firstSeenOrder(this.nodeColumns, this.nodeTextOrder());
|
|
561
|
+
const edgeRows: number[] = [];
|
|
562
|
+
for (let e = 0; e < snapshot.edgeCount; e++) {
|
|
563
|
+
if (!this.folding.folded(e)) {
|
|
564
|
+
edgeRows.push(e);
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
this.edgeColumns = firstSeenOrder(this.edgeColumns, edgeRows);
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
/**
|
|
571
|
+
* The nodes in the order a reader of the document takes their attributes: a node's statement before the members
|
|
572
|
+
* of its cluster, and a cluster's own `graph [...]` attributes when its subgraph closes, after its members.
|
|
573
|
+
* @returns the node indices
|
|
574
|
+
*/
|
|
575
|
+
private nodeTextOrder(): number[] {
|
|
576
|
+
const order: number[] = [];
|
|
577
|
+
const seen = new Uint8Array(this.snapshot.nodeCount);
|
|
578
|
+
// a negative entry -(i + 1) is cluster i's own attributes, taken once its members are
|
|
579
|
+
const stack: number[] = [];
|
|
580
|
+
for (let root = this.snapshot.nodeCount - 1; root >= 0; root--) {
|
|
581
|
+
stack.push(root);
|
|
582
|
+
}
|
|
583
|
+
while (stack.length > 0) {
|
|
584
|
+
const i = stack.pop() as number;
|
|
585
|
+
if (i < 0) {
|
|
586
|
+
order.push(-i - 1);
|
|
587
|
+
continue;
|
|
588
|
+
}
|
|
589
|
+
if (seen[i] === 1) {
|
|
590
|
+
continue;
|
|
591
|
+
}
|
|
592
|
+
seen[i] = 1;
|
|
593
|
+
const marked = this.cluster !== null && this.cluster.isSet(i) && this.cluster.value(i) === true;
|
|
594
|
+
if (marked) {
|
|
595
|
+
stack.push(-i - 1);
|
|
596
|
+
} else {
|
|
597
|
+
order.push(i);
|
|
598
|
+
}
|
|
599
|
+
const kids = this.children.childrenOf(i);
|
|
600
|
+
for (let k = kids.length - 1; k >= 0; k--) {
|
|
601
|
+
stack.push(kids[k]);
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
return order;
|
|
435
605
|
}
|
|
436
606
|
|
|
437
607
|
/**
|
|
@@ -517,12 +687,7 @@ class ExportPlan {
|
|
|
517
687
|
*/
|
|
518
688
|
notes(): LossNote[] {
|
|
519
689
|
const notes: LossNote[] = [...this.extraNotes];
|
|
520
|
-
const note = (
|
|
521
|
-
code: string,
|
|
522
|
-
message: string,
|
|
523
|
-
column: string | null = null,
|
|
524
|
-
count: number | null = null,
|
|
525
|
-
): void => {
|
|
690
|
+
const note: DotNote = (code, message, column = null, count = null) => {
|
|
526
691
|
notes.push(Object.freeze({ code, message, column, count }));
|
|
527
692
|
};
|
|
528
693
|
const { snapshot } = this;
|
|
@@ -541,58 +706,35 @@ class ExportPlan {
|
|
|
541
706
|
["graph", this.graphColumns],
|
|
542
707
|
] as const) {
|
|
543
708
|
for (const column of columns) {
|
|
544
|
-
if (label
|
|
545
|
-
|
|
546
|
-
DOT_LOSS.EMPTY_COLUMN_DROPPED,
|
|
547
|
-
`${label} column "${column.meta.name}" has no set cell and is not written: DOT writes cells, never declarations`,
|
|
548
|
-
column.meta.name,
|
|
549
|
-
0,
|
|
550
|
-
);
|
|
551
|
-
continue;
|
|
552
|
-
}
|
|
553
|
-
if (
|
|
554
|
-
label !== "graph" &&
|
|
555
|
-
column.meta.role === null &&
|
|
556
|
-
column.meta.name === LABEL_ATTRIBUTE &&
|
|
557
|
-
(column.dtype === "string" || column.dtype === "dict")
|
|
558
|
-
) {
|
|
559
|
-
note(
|
|
560
|
-
DOT_LOSS.ROLE_ASSUMED,
|
|
561
|
-
`${label} column "${column.meta.name}" reads back with the label role`,
|
|
562
|
-
column.meta.name,
|
|
563
|
-
column.length - column.nullCount,
|
|
564
|
-
);
|
|
565
|
-
}
|
|
566
|
-
if (column.dtype === "f32" || column.dtype === "f64") {
|
|
567
|
-
const bad = countNonFinite(column);
|
|
568
|
-
if (bad > 0) {
|
|
569
|
-
note(
|
|
570
|
-
DOT_LOSS.NON_FINITE,
|
|
571
|
-
`${label} column "${column.meta.name}" holds ${bad} non-finite value${plural(bad)} with no numeric DOT spelling; they read back as text`,
|
|
572
|
-
column.meta.name,
|
|
573
|
-
bad,
|
|
574
|
-
);
|
|
575
|
-
}
|
|
576
|
-
}
|
|
577
|
-
if (
|
|
578
|
-
(column.dtype === "string" || column.dtype === "dict") &&
|
|
579
|
-
(column.meta.role === null || !TEXT_ROLES.has(column.meta.role))
|
|
580
|
-
) {
|
|
581
|
-
const typed = countTypedLookingText(column);
|
|
582
|
-
if (typed > 0) {
|
|
583
|
-
note(
|
|
584
|
-
DOT_LOSS.TEXT_INFERRED,
|
|
585
|
-
`${label} column "${column.meta.name}" holds ${typed} text value${plural(typed)} that look like numbers or booleans; DOT values are untyped and they read back as such`,
|
|
586
|
-
column.meta.name,
|
|
587
|
-
typed,
|
|
588
|
-
);
|
|
589
|
-
}
|
|
709
|
+
if (label === "graph") {
|
|
710
|
+
notes.push(...charsetNotes(column));
|
|
590
711
|
}
|
|
712
|
+
columnNotes(label, column, note);
|
|
591
713
|
}
|
|
592
714
|
}
|
|
715
|
+
this.structureNotes(note);
|
|
716
|
+
positionNotes(snapshot, this.position, note);
|
|
717
|
+
const textIds = countTextIds(snapshot);
|
|
718
|
+
if (textIds > 0) {
|
|
719
|
+
note(
|
|
720
|
+
DOT_LOSS.ID_TEXT_TYPE,
|
|
721
|
+
`${textIds} node id${plural(textIds)} ${agree(textIds, "reads", "read")} back as the other type under ids: "canonical" (a string "1" becomes 1, a number 1.5 becomes "1.5")`,
|
|
722
|
+
null,
|
|
723
|
+
textIds,
|
|
724
|
+
);
|
|
725
|
+
}
|
|
726
|
+
return notes;
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
/**
|
|
730
|
+
* The notes of the graph's structure DOT changes: parents written as clusters, mutual pairs and parents lists.
|
|
731
|
+
* @param note - the recorder
|
|
732
|
+
*/
|
|
733
|
+
private structureNotes(note: DotNote): void {
|
|
734
|
+
const { snapshot } = this;
|
|
593
735
|
let unmarked = 0;
|
|
594
736
|
for (let i = 0; i < snapshot.nodeCount; i++) {
|
|
595
|
-
const marked = this.cluster
|
|
737
|
+
const marked = this.cluster?.isSet(i) === true && this.cluster.value(i) === true;
|
|
596
738
|
if (!marked && this.children.childrenOf(i).length > 0) {
|
|
597
739
|
unmarked++;
|
|
598
740
|
}
|
|
@@ -623,38 +765,6 @@ class ExportPlan {
|
|
|
623
765
|
parents.length - parents.nullCount,
|
|
624
766
|
);
|
|
625
767
|
}
|
|
626
|
-
if (this.position !== null && this.position.meta.components !== 2 && this.position.meta.components !== 3) {
|
|
627
|
-
note(
|
|
628
|
-
DOT_LOSS.POSITION_SHAPE,
|
|
629
|
-
`node column "${this.position.meta.name}" (position) has ${this.position.meta.components} components and is not written; pos takes 2 or 3`,
|
|
630
|
-
this.position.meta.name,
|
|
631
|
-
this.position.length - this.position.nullCount,
|
|
632
|
-
);
|
|
633
|
-
}
|
|
634
|
-
for (const [label, table] of [
|
|
635
|
-
["edge", snapshot.edges],
|
|
636
|
-
["graph", snapshot.graph],
|
|
637
|
-
] as const) {
|
|
638
|
-
const column = table.byRole("position");
|
|
639
|
-
if (column !== null) {
|
|
640
|
-
note(
|
|
641
|
-
DOT_LOSS.POSITION_SHAPE,
|
|
642
|
-
`${label} column "${column.meta.name}" (position) is not written; only node positions map to pos`,
|
|
643
|
-
column.meta.name,
|
|
644
|
-
column.length - column.nullCount,
|
|
645
|
-
);
|
|
646
|
-
}
|
|
647
|
-
}
|
|
648
|
-
const textIds = countTextIds(snapshot);
|
|
649
|
-
if (textIds > 0) {
|
|
650
|
-
note(
|
|
651
|
-
DOT_LOSS.ID_TEXT_TYPE,
|
|
652
|
-
`${textIds} node id${plural(textIds)} ${agree(textIds, "reads", "read")} back as the other type under ids: "canonical" (a string "1" becomes 1, a number 1.5 becomes "1.5")`,
|
|
653
|
-
null,
|
|
654
|
-
textIds,
|
|
655
|
-
);
|
|
656
|
-
}
|
|
657
|
-
return notes;
|
|
658
768
|
}
|
|
659
769
|
|
|
660
770
|
/**
|
|
@@ -889,7 +999,10 @@ class ExportPlan {
|
|
|
889
999
|
if (!column.isSet(row)) {
|
|
890
1000
|
continue;
|
|
891
1001
|
}
|
|
892
|
-
|
|
1002
|
+
let text = cellText(column, row);
|
|
1003
|
+
if (text !== null && columns === this.graphColumns && isCharset(column) && !UTF8_CHARSET.test(text)) {
|
|
1004
|
+
text = "UTF-8";
|
|
1005
|
+
}
|
|
893
1006
|
if (text !== null) {
|
|
894
1007
|
out.push(`${quoteDotId(this.attributeName(column))}=${writeId(text)}`);
|
|
895
1008
|
}
|
|
@@ -993,6 +1106,29 @@ function positionDims(column: Column | null): 2 | 3 {
|
|
|
993
1106
|
return column.meta.components === 2 ? 2 : 3;
|
|
994
1107
|
}
|
|
995
1108
|
|
|
1109
|
+
/**
|
|
1110
|
+
* Columns in the order the rows first hold a written value of each; a column no row writes keeps its place at the end.
|
|
1111
|
+
* @param columns - the columns, in the snapshot's order
|
|
1112
|
+
* @param rows - the rows in the order the document writes them
|
|
1113
|
+
* @returns the columns
|
|
1114
|
+
*/
|
|
1115
|
+
function firstSeenOrder(columns: readonly Column[], rows: Iterable<number>): Column[] {
|
|
1116
|
+
const left = new Set(columns);
|
|
1117
|
+
const out: Column[] = [];
|
|
1118
|
+
for (const row of rows) {
|
|
1119
|
+
if (left.size === 0) {
|
|
1120
|
+
break;
|
|
1121
|
+
}
|
|
1122
|
+
for (const column of columns) {
|
|
1123
|
+
if (left.has(column) && column.isSet(row) && cellText(column, row) !== null) {
|
|
1124
|
+
out.push(column);
|
|
1125
|
+
left.delete(column);
|
|
1126
|
+
}
|
|
1127
|
+
}
|
|
1128
|
+
}
|
|
1129
|
+
return [...out, ...left];
|
|
1130
|
+
}
|
|
1131
|
+
|
|
996
1132
|
/**
|
|
997
1133
|
* The attribute text of one set cell, or null for a dtype the format cannot write.
|
|
998
1134
|
* @param column - the column
|