@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
|
@@ -13,8 +13,12 @@
|
|
|
13
13
|
* - `views/<subnetwork>-<view>-<name>.xgmml`, the node coordinates (y negated back to screen
|
|
14
14
|
* coordinates), only when the snapshot has positions: graph-io computes no layout.
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
16
|
+
* Given styles (`exportGraph(..., { styles })`), the session also holds `session_vizmap.xml` with one style named
|
|
17
|
+
* for the network, which the view names, the view's per-element bypasses, and the `graphty.styles` block as an
|
|
18
|
+
* archive entry of its own (Cytoscape ignores it), with the style values its rules read inside it: a CyCSV text
|
|
19
|
+
* cell cannot be unset, so a table column would read an element without a value back as "". Without styles the
|
|
20
|
+
* view names Cytoscape's default style. The network list, properties and thumbnails are not written. Entries are
|
|
21
|
+
* stored, not compressed. Every SUID comes from one counter, above
|
|
18
22
|
* the node ids that are kept as SUIDs; Cytoscape renumbers them all on load.
|
|
19
23
|
*/
|
|
20
24
|
|
|
@@ -30,7 +34,13 @@ import { agree, plural } from "../../common/plural.js";
|
|
|
30
34
|
import { type ExplicitWeights, explicitWeights } from "../../common/weights.js";
|
|
31
35
|
import { hasIllegalXmlChar } from "../../common/xml.js";
|
|
32
36
|
import { writeZip, type ZipWriteEntry } from "../../common/zip.js";
|
|
37
|
+
import { type CytoscapeEmitted, cytoscapeVizmapXml, emitCytoscapeStyle } from "../../styles/cytoscape/emit.js";
|
|
38
|
+
import { STYLE_BLOCK_NAME, styleBlockLosses, writeStyleBlock } from "../../styles/io/block.js";
|
|
39
|
+
import type { ExporterStyleOptions } from "../../styles/io/writer.js";
|
|
40
|
+
import { StyleNotes } from "../../styles/notes.js";
|
|
41
|
+
import type { StyleValue, StyleWriteCapabilities } from "../../styles/types.js";
|
|
33
42
|
import { type CommonExportOptions, type ExportCapabilities, type GraphExporter, type LossNote } from "../../types.js";
|
|
43
|
+
import { lossOf, snapshotBlock } from "../cx/styles.js";
|
|
34
44
|
import { ORIGINAL_ID_ATTRIBUTE } from "../graphml/constants.js";
|
|
35
45
|
import {
|
|
36
46
|
CY_NAMESPACE,
|
|
@@ -44,10 +54,12 @@ import {
|
|
|
44
54
|
POSITION_COLUMN,
|
|
45
55
|
SUBGRAPH_COLUMN,
|
|
46
56
|
XGMML_NAMESPACE,
|
|
57
|
+
XGMML_ORIGIN_NAMESPACE,
|
|
47
58
|
XLINK_NAMESPACE,
|
|
48
59
|
Z_COLUMN,
|
|
49
60
|
} from "../xgmml/constants.js";
|
|
50
|
-
import {
|
|
61
|
+
import { XGMML_STYLE_CAPABILITIES } from "../xgmml/styles.js";
|
|
62
|
+
import { FORMAT, STYLE_COLUMN_PREFIX } from "./constants.js";
|
|
51
63
|
|
|
52
64
|
/**
|
|
53
65
|
* The options of the Cytoscape session exporter: the common export options; it has none of its own. The
|
|
@@ -233,6 +245,12 @@ const LONG = "java.lang.Long";
|
|
|
233
245
|
const BOOLEAN = "java.lang.Boolean";
|
|
234
246
|
const I32_MAX = 2147483647;
|
|
235
247
|
|
|
248
|
+
/**
|
|
249
|
+
* What the session writer holds of a graph's styles: every visual property Cytoscape keeps, as a named style and
|
|
250
|
+
* view bypasses, and the graph's background; the block, with the style values its rules read, in an entry of its own.
|
|
251
|
+
*/
|
|
252
|
+
const CYS_STYLE_CAPABILITIES: StyleWriteCapabilities = Object.freeze({ ...XGMML_STYLE_CAPABILITIES, block: "native" });
|
|
253
|
+
|
|
236
254
|
/** The folder every entry lives under (Cytoscape needs one; the name is free). */
|
|
237
255
|
const ROOT_FOLDER = "CytoscapeSession/";
|
|
238
256
|
|
|
@@ -289,6 +307,12 @@ interface Plan {
|
|
|
289
307
|
readonly z: Column | null;
|
|
290
308
|
/** Whether a position's own z is written as the view's z (no z column). */
|
|
291
309
|
readonly positionZ: boolean;
|
|
310
|
+
/** The styles as a Cytoscape style, its bypasses and the columns its mappings add, or null without styles. */
|
|
311
|
+
readonly styled: CytoscapeEmitted | null;
|
|
312
|
+
/** Every style value written approximately or flattened into bypasses, as loss notes. */
|
|
313
|
+
readonly styleNotes: readonly LossNote[];
|
|
314
|
+
/** The `graphty.styles` block, written as its own entry: the styles being written, else the one the snapshot carries as a graph attribute; or null. */
|
|
315
|
+
readonly block: string | null;
|
|
292
316
|
}
|
|
293
317
|
|
|
294
318
|
// ============================================================ ids
|
|
@@ -947,7 +971,50 @@ function networkCandidates(snapshot: GraphSnapshot, name: string): Candidate[] {
|
|
|
947
971
|
out.push({ name: "description", source: null, javaClass: STRING, cell: () => description });
|
|
948
972
|
}
|
|
949
973
|
for (const column of snapshot.graph) {
|
|
950
|
-
|
|
974
|
+
// the graphty.styles block goes into an archive entry of its own, not the network table
|
|
975
|
+
if (column.meta.name !== STYLE_BLOCK_NAME) {
|
|
976
|
+
out.push(candidateOf(column, column.meta.name));
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
return out;
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
/**
|
|
983
|
+
* The columns a Cytoscape style's mappings read that the graph does not hold (a computed degree), as table
|
|
984
|
+
* candidates.
|
|
985
|
+
* @param table - the node or edge table
|
|
986
|
+
* @param added - the columns by name, each element's value
|
|
987
|
+
* @returns the candidates
|
|
988
|
+
*/
|
|
989
|
+
function addedCandidates(
|
|
990
|
+
table: GraphSnapshot["nodes"],
|
|
991
|
+
added: ReadonlyMap<string, readonly (StyleValue | null)[]>,
|
|
992
|
+
): Candidate[] {
|
|
993
|
+
const out: Candidate[] = [];
|
|
994
|
+
for (const [name, values] of added) {
|
|
995
|
+
if (table.has(name)) {
|
|
996
|
+
continue;
|
|
997
|
+
}
|
|
998
|
+
const kinds = new Set(values.filter((v) => v !== null).map((v) => typeof v));
|
|
999
|
+
const [kind] = kinds;
|
|
1000
|
+
let javaClass = STRING;
|
|
1001
|
+
if (kinds.size === 1 && kind === "number") {
|
|
1002
|
+
javaClass = DOUBLE;
|
|
1003
|
+
} else if (kinds.size === 1 && kind === "boolean") {
|
|
1004
|
+
javaClass = BOOLEAN;
|
|
1005
|
+
}
|
|
1006
|
+
out.push({
|
|
1007
|
+
name,
|
|
1008
|
+
source: null,
|
|
1009
|
+
javaClass,
|
|
1010
|
+
cell: (row) => {
|
|
1011
|
+
const v = values[row] ?? null;
|
|
1012
|
+
if (v === null) {
|
|
1013
|
+
return null;
|
|
1014
|
+
}
|
|
1015
|
+
return typeof v === "number" ? formatDecimal(v) : String(v);
|
|
1016
|
+
},
|
|
1017
|
+
});
|
|
951
1018
|
}
|
|
952
1019
|
return out;
|
|
953
1020
|
}
|
|
@@ -956,23 +1023,21 @@ function networkCandidates(snapshot: GraphSnapshot, name: string): Candidate[] {
|
|
|
956
1023
|
* Plan an export: the notes, the fatal condition, the SUIDs and the tables.
|
|
957
1024
|
* @param snapshot - the snapshot
|
|
958
1025
|
* @param common - the resolved common options
|
|
1026
|
+
* @param styles - the styles being written, or undefined
|
|
959
1027
|
* @returns the plan
|
|
960
1028
|
*/
|
|
961
|
-
function plan(snapshot: GraphSnapshot, common: ResolvedExportOptions): Plan {
|
|
1029
|
+
function plan(snapshot: GraphSnapshot, common: ResolvedExportOptions, styles?: ExporterStyleOptions["styles"]): Plan {
|
|
962
1030
|
const notes: LossNote[] = [];
|
|
963
1031
|
const note: NoteFn = (code, message, column = null, count = null) => {
|
|
964
1032
|
notes.push(Object.freeze({ code, message, column, count }));
|
|
965
1033
|
};
|
|
966
|
-
|
|
1034
|
+
const generic = checkCapabilities(snapshot, CYS_CAPABILITIES, common, {
|
|
967
1035
|
roles: SLOT_ROLES,
|
|
968
1036
|
roleNames: ROLE_NAMES,
|
|
969
1037
|
positionDtype: "f64",
|
|
970
|
-
})
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
notes.push(gen);
|
|
974
|
-
}
|
|
975
|
-
}
|
|
1038
|
+
});
|
|
1039
|
+
// json is reported per column below; ids by the SUID rule (positive integers)
|
|
1040
|
+
notes.push(...generic.filter((gen) => !SESSION_OWN_CODES.has(gen.code)));
|
|
976
1041
|
|
|
977
1042
|
const ids = planIds(snapshot, common, note);
|
|
978
1043
|
const { nodeSuids, edgeSuids, mangled, fatal } = ids;
|
|
@@ -982,14 +1047,7 @@ function plan(snapshot: GraphSnapshot, common: ResolvedExportOptions): Plan {
|
|
|
982
1047
|
|
|
983
1048
|
// direction
|
|
984
1049
|
const folding = pairFolding(snapshot);
|
|
985
|
-
|
|
986
|
-
note(
|
|
987
|
-
LOSS.MUTUAL_EXPANDED,
|
|
988
|
-
`${folding.mutualCount} mutual pair${plural(folding.mutualCount)} ${agree(folding.mutualCount, "is", "are")} written as two directed edges; the mutual mark is lost`,
|
|
989
|
-
null,
|
|
990
|
-
folding.mutualCount,
|
|
991
|
-
);
|
|
992
|
-
}
|
|
1050
|
+
noteMutualPairs(folding.mutualCount, note);
|
|
993
1051
|
|
|
994
1052
|
// positions
|
|
995
1053
|
const position = snapshot.nodes.byRole("position");
|
|
@@ -998,50 +1056,39 @@ function plan(snapshot: GraphSnapshot, common: ResolvedExportOptions): Plan {
|
|
|
998
1056
|
if (position !== null) {
|
|
999
1057
|
positionNotes(position, z, note);
|
|
1000
1058
|
}
|
|
1001
|
-
const placed =
|
|
1002
|
-
|
|
1003
|
-
const
|
|
1059
|
+
const placed = holdsValues(position) || holdsValues(z);
|
|
1060
|
+
const emitNotes = new StyleNotes();
|
|
1061
|
+
const styled =
|
|
1062
|
+
styles === undefined
|
|
1063
|
+
? null
|
|
1064
|
+
: emitCytoscapeStyle(styles.rules, snapshot, { dialect: "desktop", notes: emitNotes });
|
|
1065
|
+
// written with styles, the graphics an XGMML or session import kept are the view's to say, from the styles
|
|
1066
|
+
const superseded = (c: Column): boolean => styled !== null && isKeptGraphics(c);
|
|
1067
|
+
// a styled session always has a view: the view names the style and holds the bypasses
|
|
1068
|
+
const viewSuid = placed || styled !== null ? next++ : null;
|
|
1004
1069
|
const viewNodeBase = next;
|
|
1005
1070
|
|
|
1006
1071
|
// node table
|
|
1007
|
-
const nodeOwn
|
|
1008
|
-
? [
|
|
1009
|
-
{
|
|
1010
|
-
name: ORIGINAL_ID_ATTRIBUTE,
|
|
1011
|
-
source: null,
|
|
1012
|
-
javaClass: STRING,
|
|
1013
|
-
// every node carries its original, so an empty id ("") is told apart from an unset cell
|
|
1014
|
-
cell: (row) => String(snapshot.ids.idOf(row)),
|
|
1015
|
-
},
|
|
1016
|
-
]
|
|
1017
|
-
: [];
|
|
1072
|
+
const nodeOwn = mangled ? [originalIdCandidate(snapshot)] : [];
|
|
1018
1073
|
const nodeTable = planTable(
|
|
1019
1074
|
"node",
|
|
1020
|
-
|
|
1075
|
+
[
|
|
1076
|
+
...elementCandidates(snapshot, "node", nodeOwn, (c) => (placed && c === z) || superseded(c), note),
|
|
1077
|
+
...(styled === null ? [] : addedCandidates(snapshot.nodes, styled.columns.node)),
|
|
1078
|
+
],
|
|
1021
1079
|
snapshot.nodeCount,
|
|
1022
1080
|
note,
|
|
1023
1081
|
);
|
|
1024
1082
|
|
|
1025
1083
|
// edge table
|
|
1026
|
-
const
|
|
1027
|
-
const plainWeight = snapshot.edges.get("weight");
|
|
1028
|
-
if (plainWeight !== null && plainWeight.meta.role === null && !weights.weighted) {
|
|
1029
|
-
note(LOSS.WEIGHT_KEY_CLASH, `edge column "weight" reads back as the edge weight`, "weight", null);
|
|
1030
|
-
}
|
|
1031
|
-
const edgeOwn: Candidate[] = weights.weighted
|
|
1032
|
-
? [
|
|
1033
|
-
{
|
|
1034
|
-
name: "weight",
|
|
1035
|
-
source: null,
|
|
1036
|
-
javaClass: DOUBLE,
|
|
1037
|
-
cell: (e) => (weights.isExplicit(e) ? formatDecimal(weights.value(e)) : null),
|
|
1038
|
-
},
|
|
1039
|
-
]
|
|
1040
|
-
: [];
|
|
1084
|
+
const edgeOwn = weightCandidates(snapshot, note);
|
|
1041
1085
|
const edgeRows = snapshot.edgeCount;
|
|
1042
1086
|
const edgeTable = planTable(
|
|
1043
1087
|
"edge",
|
|
1044
|
-
|
|
1088
|
+
[
|
|
1089
|
+
...elementCandidates(snapshot, "edge", edgeOwn, superseded, note),
|
|
1090
|
+
...(styled === null ? [] : addedCandidates(snapshot.edges, styled.columns.edge)),
|
|
1091
|
+
],
|
|
1045
1092
|
edgeRows,
|
|
1046
1093
|
note,
|
|
1047
1094
|
);
|
|
@@ -1049,6 +1096,9 @@ function plan(snapshot: GraphSnapshot, common: ResolvedExportOptions): Plan {
|
|
|
1049
1096
|
const name = snapshot.meta.name ?? DEFAULT_NAME;
|
|
1050
1097
|
const networkTable = planTable("network", networkCandidates(snapshot, name), 1, note);
|
|
1051
1098
|
const rootTable: TableColumn[] = [{ name: "name", javaClass: STRING, cell: () => name }];
|
|
1099
|
+
const inlineBlock = styles === undefined ? null : writeStyleBlock(styles.rules, { inlineColumns: true, snapshot });
|
|
1100
|
+
const blockNotes =
|
|
1101
|
+
inlineBlock === null ? [] : styleBlockLosses(inlineBlock, styles?.rules.styles.rules.length ?? 0, "size");
|
|
1052
1102
|
return {
|
|
1053
1103
|
notes,
|
|
1054
1104
|
fatal,
|
|
@@ -1067,9 +1117,91 @@ function plan(snapshot: GraphSnapshot, common: ResolvedExportOptions): Plan {
|
|
|
1067
1117
|
position,
|
|
1068
1118
|
z: placed ? z : null,
|
|
1069
1119
|
positionZ,
|
|
1120
|
+
styled,
|
|
1121
|
+
styleNotes: [...emitNotes.list().map(lossOf), ...blockNotes],
|
|
1122
|
+
block: styles === undefined ? snapshotBlock(snapshot) : inlineBlock,
|
|
1123
|
+
};
|
|
1124
|
+
}
|
|
1125
|
+
|
|
1126
|
+
/** The generic notes a session export reports itself: json per column, ids by the SUID rule (positive integers). */
|
|
1127
|
+
const SESSION_OWN_CODES: ReadonlySet<string> = new Set([LOSS.JSON, LOSS.ID_CHARSET, LOSS.ID_MANGLED]);
|
|
1128
|
+
|
|
1129
|
+
/**
|
|
1130
|
+
* MUTUAL_EXPANDED for the mutual pairs written as two directed edges.
|
|
1131
|
+
* @param mutualCount - how many mutual pairs
|
|
1132
|
+
* @param note - the recorder
|
|
1133
|
+
*/
|
|
1134
|
+
function noteMutualPairs(mutualCount: number, note: NoteFn): void {
|
|
1135
|
+
if (mutualCount > 0) {
|
|
1136
|
+
note(
|
|
1137
|
+
LOSS.MUTUAL_EXPANDED,
|
|
1138
|
+
`${mutualCount} mutual pair${plural(mutualCount)} ${agree(mutualCount, "is", "are")} written as two directed edges; the mutual mark is lost`,
|
|
1139
|
+
null,
|
|
1140
|
+
mutualCount,
|
|
1141
|
+
);
|
|
1142
|
+
}
|
|
1143
|
+
}
|
|
1144
|
+
|
|
1145
|
+
/**
|
|
1146
|
+
* Whether a column holds any value.
|
|
1147
|
+
* @param column - the column, or null
|
|
1148
|
+
* @returns false for null or an empty column
|
|
1149
|
+
*/
|
|
1150
|
+
function holdsValues(column: Column | null): boolean {
|
|
1151
|
+
return column !== null && column.nullCount < column.length;
|
|
1152
|
+
}
|
|
1153
|
+
|
|
1154
|
+
/**
|
|
1155
|
+
* Whether a column is the graphics an XGMML or session import kept.
|
|
1156
|
+
* @param c - the column
|
|
1157
|
+
* @returns true for kept graphics
|
|
1158
|
+
*/
|
|
1159
|
+
function isKeptGraphics(c: Column): boolean {
|
|
1160
|
+
return (
|
|
1161
|
+
c.dtype === "json" && c.meta.origin?.type === "graphics" && c.meta.origin.namespace === XGMML_ORIGIN_NAMESPACE
|
|
1162
|
+
);
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1165
|
+
/**
|
|
1166
|
+
* The node column of original ids, for ids written as SUIDs.
|
|
1167
|
+
* @param snapshot - the snapshot
|
|
1168
|
+
* @returns the candidate
|
|
1169
|
+
*/
|
|
1170
|
+
function originalIdCandidate(snapshot: GraphSnapshot): Candidate {
|
|
1171
|
+
return {
|
|
1172
|
+
name: ORIGINAL_ID_ATTRIBUTE,
|
|
1173
|
+
source: null,
|
|
1174
|
+
javaClass: STRING,
|
|
1175
|
+
// every node carries its original, so an empty id ("") is told apart from an unset cell
|
|
1176
|
+
cell: (row) => String(snapshot.ids.idOf(row)),
|
|
1070
1177
|
};
|
|
1071
1178
|
}
|
|
1072
1179
|
|
|
1180
|
+
/**
|
|
1181
|
+
* The edge weight column, when the graph is weighted, and WEIGHT_KEY_CLASH for a plain column named weight.
|
|
1182
|
+
* @param snapshot - the snapshot
|
|
1183
|
+
* @param note - the recorder
|
|
1184
|
+
* @returns the candidates
|
|
1185
|
+
*/
|
|
1186
|
+
function weightCandidates(snapshot: GraphSnapshot, note: NoteFn): Candidate[] {
|
|
1187
|
+
const weights: ExplicitWeights = explicitWeights(snapshot);
|
|
1188
|
+
const plainWeight = snapshot.edges.get("weight");
|
|
1189
|
+
if (plainWeight !== null && plainWeight.meta.role === null && !weights.weighted) {
|
|
1190
|
+
note(LOSS.WEIGHT_KEY_CLASH, `edge column "weight" reads back as the edge weight`, "weight", null);
|
|
1191
|
+
}
|
|
1192
|
+
if (!weights.weighted) {
|
|
1193
|
+
return [];
|
|
1194
|
+
}
|
|
1195
|
+
return [
|
|
1196
|
+
{
|
|
1197
|
+
name: "weight",
|
|
1198
|
+
source: null,
|
|
1199
|
+
javaClass: DOUBLE,
|
|
1200
|
+
cell: (e) => (weights.isExplicit(e) ? formatDecimal(weights.value(e)) : null),
|
|
1201
|
+
},
|
|
1202
|
+
];
|
|
1203
|
+
}
|
|
1204
|
+
|
|
1073
1205
|
/**
|
|
1074
1206
|
* The notes of the position column: its shape, non-finite coordinates, and a z that reads back
|
|
1075
1207
|
* in the z column.
|
|
@@ -1150,14 +1282,20 @@ function* cyTable(
|
|
|
1150
1282
|
columns: readonly TableColumn[],
|
|
1151
1283
|
rows: Iterable<readonly [number, number]>,
|
|
1152
1284
|
): Generator<string, void, undefined> {
|
|
1153
|
-
|
|
1285
|
+
// null is an unquoted empty cell: no value, where `""` is the empty string
|
|
1286
|
+
const line = (cells: readonly (string | null)[]): string =>
|
|
1287
|
+
`${cells.map((c) => (c === null ? "" : quoteCsvCell(c))).join(",")}\n`;
|
|
1154
1288
|
yield line(["CyCSV-Version", "1"]);
|
|
1155
1289
|
yield line(["SUID", ...columns.map((c) => c.name)]);
|
|
1156
1290
|
yield line([LONG, ...columns.map((c) => c.javaClass)]);
|
|
1157
1291
|
yield line(["", ...columns.map(() => "mutable")]);
|
|
1158
1292
|
yield line([title, ""]);
|
|
1159
1293
|
for (const [suid, row] of rows) {
|
|
1160
|
-
|
|
1294
|
+
// a graphty style column tells an element without a value from one whose value is the empty string
|
|
1295
|
+
yield line([
|
|
1296
|
+
String(suid),
|
|
1297
|
+
...columns.map((c) => c.cell(row) ?? (c.name.startsWith(STYLE_COLUMN_PREFIX) ? null : "")),
|
|
1298
|
+
]);
|
|
1161
1299
|
}
|
|
1162
1300
|
}
|
|
1163
1301
|
|
|
@@ -1202,18 +1340,50 @@ function* networkFile(snapshot: GraphSnapshot, p: Plan): Generator<string, void,
|
|
|
1202
1340
|
* @returns nothing
|
|
1203
1341
|
*/
|
|
1204
1342
|
function* viewFile(snapshot: GraphSnapshot, p: Plan, viewSuid: number): Generator<string, void, undefined> {
|
|
1343
|
+
const style = p.styled === null ? "default" : p.name;
|
|
1205
1344
|
yield XML_DECLARATION;
|
|
1206
|
-
yield `<graph id="${viewSuid}" label="${viewSuid}" cy:view="1" cy:networkId="${p.subSuid}" cy:visualStyle="
|
|
1345
|
+
yield `<graph id="${viewSuid}" label="${viewSuid}" cy:view="1" cy:networkId="${p.subSuid}" cy:visualStyle="${escapeXmlAttribute(style)}" cy:rendererId="org.cytoscape.ding" cy:documentVersion="3.0" ${NAMESPACES}>\n`;
|
|
1207
1346
|
let view = p.viewNodeBase;
|
|
1208
1347
|
for (let i = 0; i < snapshot.nodeCount; i++) {
|
|
1209
1348
|
const coords = viewCoords(p, i);
|
|
1210
|
-
|
|
1211
|
-
|
|
1349
|
+
const locked = p.styled?.bypasses.node[i] ?? null;
|
|
1350
|
+
if (coords.length > 0 || locked !== null) {
|
|
1351
|
+
yield ` <node id="${view++}" cy:nodeId="${p.nodeSuids[i]}">\n`;
|
|
1352
|
+
yield* viewGraphics(coords, locked);
|
|
1353
|
+
yield " </node>\n";
|
|
1354
|
+
}
|
|
1355
|
+
}
|
|
1356
|
+
for (let e = 0; e < snapshot.edgeCount; e++) {
|
|
1357
|
+
const locked = p.styled?.bypasses.edge[e] ?? null;
|
|
1358
|
+
if (locked !== null && !p.folding.folded(e)) {
|
|
1359
|
+
yield ` <edge id="${view++}" cy:edgeId="${p.edgeSuids[e]}">\n`;
|
|
1360
|
+
yield* viewGraphics([], locked);
|
|
1361
|
+
yield " </edge>\n";
|
|
1212
1362
|
}
|
|
1213
1363
|
}
|
|
1214
1364
|
yield "</graph>\n";
|
|
1215
1365
|
}
|
|
1216
1366
|
|
|
1367
|
+
/**
|
|
1368
|
+
* One view element's graphics: its coordinates, and its bypasses as `lockedVisualProperties`.
|
|
1369
|
+
* @param coords - the coordinate attributes
|
|
1370
|
+
* @param locked - the bypasses, or null
|
|
1371
|
+
* @yields the graphics element
|
|
1372
|
+
* @returns nothing
|
|
1373
|
+
*/
|
|
1374
|
+
function* viewGraphics(coords: readonly string[], locked: ReadonlyMap<string, unknown> | null): Generator<string> {
|
|
1375
|
+
const head = coords.length === 0 ? " <graphics" : ` <graphics ${coords.join(" ")}`;
|
|
1376
|
+
if (locked === null) {
|
|
1377
|
+
yield `${head}/>\n`;
|
|
1378
|
+
return;
|
|
1379
|
+
}
|
|
1380
|
+
yield `${head}>\n <att name="lockedVisualProperties">\n`;
|
|
1381
|
+
for (const [vp, value] of locked) {
|
|
1382
|
+
yield ` <att name="${escapeXmlAttribute(vp)}" value="${escapeXmlAttribute(String(value))}" type="string" cy:type="String"/>\n`;
|
|
1383
|
+
}
|
|
1384
|
+
yield " </att>\n </graphics>\n";
|
|
1385
|
+
}
|
|
1386
|
+
|
|
1217
1387
|
/**
|
|
1218
1388
|
* The graphics attributes of one node's view: x and y (y down, as Cytoscape draws), and z.
|
|
1219
1389
|
* @param p - the plan
|
|
@@ -1306,6 +1476,20 @@ function* entries(snapshot: GraphSnapshot, p: Plan): Generator<ZipWriteEntry, vo
|
|
|
1306
1476
|
data: encode(viewFile(snapshot, p, p.viewSuid)),
|
|
1307
1477
|
};
|
|
1308
1478
|
}
|
|
1479
|
+
if (p.styled !== null) {
|
|
1480
|
+
yield {
|
|
1481
|
+
name: `${ROOT_FOLDER}session_vizmap.xml`,
|
|
1482
|
+
data: encode([
|
|
1483
|
+
XML_DECLARATION,
|
|
1484
|
+
'<vizmap documentVersion="3.0" id="VizMap-graphty">\n',
|
|
1485
|
+
cytoscapeVizmapXml(p.styled.style, p.name),
|
|
1486
|
+
"\n</vizmap>\n",
|
|
1487
|
+
]),
|
|
1488
|
+
};
|
|
1489
|
+
}
|
|
1490
|
+
if (p.block !== null) {
|
|
1491
|
+
yield { name: `${ROOT_FOLDER}${STYLE_BLOCK_NAME}`, data: new TextEncoder().encode(p.block) };
|
|
1492
|
+
}
|
|
1309
1493
|
}
|
|
1310
1494
|
|
|
1311
1495
|
/**
|
|
@@ -1317,9 +1501,9 @@ function* entries(snapshot: GraphSnapshot, p: Plan): Generator<ZipWriteEntry, vo
|
|
|
1317
1501
|
*/
|
|
1318
1502
|
async function* write(
|
|
1319
1503
|
snapshot: GraphSnapshot,
|
|
1320
|
-
options: CysExportOptions | undefined,
|
|
1504
|
+
options: (CysExportOptions & ExporterStyleOptions) | undefined,
|
|
1321
1505
|
): AsyncGenerator<Uint8Array, void, undefined> {
|
|
1322
|
-
const p = plan(snapshot, resolveExportOptions(options));
|
|
1506
|
+
const p = plan(snapshot, resolveExportOptions(options), options?.styles);
|
|
1323
1507
|
await Promise.resolve();
|
|
1324
1508
|
yield* writeZip(entries(snapshot, p));
|
|
1325
1509
|
}
|
|
@@ -1332,6 +1516,7 @@ export const cysExporter: GraphExporter<CysExportOptions> = Object.freeze({
|
|
|
1332
1516
|
format: FORMAT,
|
|
1333
1517
|
options: Object.freeze([]),
|
|
1334
1518
|
capabilities: CYS_CAPABILITIES,
|
|
1519
|
+
styles: Object.freeze({ capabilities: CYS_STYLE_CAPABILITIES }),
|
|
1335
1520
|
|
|
1336
1521
|
/**
|
|
1337
1522
|
* Pre-flight: what export() would lose, without writing anything.
|
|
@@ -1339,8 +1524,9 @@ export const cysExporter: GraphExporter<CysExportOptions> = Object.freeze({
|
|
|
1339
1524
|
* @param options - the common options
|
|
1340
1525
|
* @returns the notes, empty when the export is exact
|
|
1341
1526
|
*/
|
|
1342
|
-
check(snapshot: GraphSnapshot, options?: CysExportOptions): readonly LossNote[] {
|
|
1343
|
-
|
|
1527
|
+
check(snapshot: GraphSnapshot, options?: CysExportOptions & ExporterStyleOptions): readonly LossNote[] {
|
|
1528
|
+
const p = plan(snapshot, resolveExportOptions(options), options?.styles);
|
|
1529
|
+
return Object.freeze([...p.notes, ...p.styleNotes]);
|
|
1344
1530
|
},
|
|
1345
1531
|
|
|
1346
1532
|
/**
|