@graphty/graph-io 0.3.48 → 0.3.50
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-C2riR4NT.js → approximations-BRXsll0T.js} +2 -2
- package/dist/chunks/{approximations-C2riR4NT.js.map → approximations-BRXsll0T.js.map} +1 -1
- package/dist/chunks/bends-BGXjv_U4.js +129 -0
- package/dist/chunks/bends-BGXjv_U4.js.map +1 -0
- package/dist/chunks/{block-Cu22ewuS.js → block-yl0f_qLO.js} +931 -164
- package/dist/chunks/block-yl0f_qLO.js.map +1 -0
- package/dist/chunks/choose-CczZJaX_.js +717 -0
- package/dist/chunks/choose-CczZJaX_.js.map +1 -0
- package/dist/chunks/{codes-CV_Bhcyi.js → codes-BE2xir2k.js} +6 -2
- package/dist/chunks/codes-BE2xir2k.js.map +1 -0
- package/dist/chunks/{constants-D0LqcsLJ.js → constants-CKkYLPtt.js} +2 -2
- package/dist/chunks/{constants-D0LqcsLJ.js.map → constants-CKkYLPtt.js.map} +1 -1
- package/dist/chunks/{context-cgmmOxZ2.js → context-DizmppHy.js} +5 -4
- package/dist/chunks/{context-cgmmOxZ2.js.map → context-DizmppHy.js.map} +1 -1
- package/dist/chunks/{convert-BcQ8_jMo.js → convert-Ct2zelbQ.js} +7 -2
- package/dist/chunks/convert-Ct2zelbQ.js.map +1 -0
- package/dist/chunks/{credentials-BiQsnMTb.js → credentials-CmvJXYeH.js} +67 -16
- package/dist/chunks/credentials-CmvJXYeH.js.map +1 -0
- package/dist/chunks/{cx-export-BEeF6ymo.js → cx-export-Bt6NoqTQ.js} +3 -3
- package/dist/chunks/{cx-export-BEeF6ymo.js.map → cx-export-Bt6NoqTQ.js.map} +1 -1
- package/dist/chunks/descriptor-B28U25x4.js +60 -0
- package/dist/chunks/descriptor-B28U25x4.js.map +1 -0
- package/dist/chunks/{descriptor-BJ-W0Jd-.js → descriptor-Dhez_Cew.js} +11 -2
- package/dist/chunks/descriptor-Dhez_Cew.js.map +1 -0
- package/dist/chunks/{emit-CD8xnY8s.js → emit-7Jkpg0yd.js} +1788 -133
- package/dist/chunks/emit-7Jkpg0yd.js.map +1 -0
- package/dist/chunks/{escape-DH2Egt-l.js → escape-CuCIzNMB.js} +8 -8
- package/dist/chunks/{escape-DH2Egt-l.js.map → escape-CuCIzNMB.js.map} +1 -1
- package/dist/chunks/{export-CZ7VRm4I.js → export-Cha4dRFz.js} +45 -387
- package/dist/chunks/export-Cha4dRFz.js.map +1 -0
- package/dist/chunks/{exporter-ChjL5fmP.js → exporter-1Ajud15J.js} +9 -8
- package/dist/chunks/{exporter-ChjL5fmP.js.map → exporter-1Ajud15J.js.map} +1 -1
- package/dist/chunks/{exporter-BIdaoIgh.js → exporter-B6yvL3wy.js} +7 -7
- package/dist/chunks/{exporter-BIdaoIgh.js.map → exporter-B6yvL3wy.js.map} +1 -1
- package/dist/chunks/{exporter-Dcw7Ldtq.js → exporter-BP6otMO6.js} +6 -6
- package/dist/chunks/{exporter-Dcw7Ldtq.js.map → exporter-BP6otMO6.js.map} +1 -1
- package/dist/chunks/{exporter-DtVU80Fa.js → exporter-CA5q8ROP.js} +9 -8
- package/dist/chunks/{exporter-DtVU80Fa.js.map → exporter-CA5q8ROP.js.map} +1 -1
- package/dist/chunks/{exporter-bxxjOrDZ.js → exporter-CQQZFJ2v.js} +1284 -156
- package/dist/chunks/exporter-CQQZFJ2v.js.map +1 -0
- package/dist/chunks/format-BXiAb-1h.js +408 -0
- package/dist/chunks/format-BXiAb-1h.js.map +1 -0
- package/dist/chunks/{generic-CP6YD34u.js → generic-Dc21MAdg.js} +387 -31
- package/dist/chunks/generic-Dc21MAdg.js.map +1 -0
- package/dist/chunks/{importer-B87_fmVx.js → importer-C6NVpCXp.js} +327 -84
- package/dist/chunks/importer-C6NVpCXp.js.map +1 -0
- package/dist/chunks/{importer-DPZDN40-.js → importer-CKFe4q54.js} +25 -17
- package/dist/chunks/importer-CKFe4q54.js.map +1 -0
- package/dist/chunks/{importer-Bji2MeWr.js → importer-CKbUbsJA.js} +13 -10
- package/dist/chunks/{importer-Bji2MeWr.js.map → importer-CKbUbsJA.js.map} +1 -1
- package/dist/chunks/{importer-CB_zV5_L.js → importer-ClCsdgTJ.js} +208 -1104
- package/dist/chunks/importer-ClCsdgTJ.js.map +1 -0
- package/dist/chunks/{importer-e3huMZbm.js → importer-CyVZTrf0.js} +14 -10
- package/dist/chunks/importer-CyVZTrf0.js.map +1 -0
- package/dist/chunks/{importer-CVT-JyDE.js → importer-DgG4v1Ms.js} +1537 -355
- package/dist/chunks/importer-DgG4v1Ms.js.map +1 -0
- package/dist/chunks/{importer-Cyy6UseH.js → importer-asFUrIsj.js} +66 -13
- package/dist/chunks/importer-asFUrIsj.js.map +1 -0
- package/dist/chunks/{input-Ccg9I22A.js → input-CAxt_aV-.js} +4 -4
- package/dist/chunks/{input-Ccg9I22A.js.map → input-CAxt_aV-.js.map} +1 -1
- package/dist/chunks/{json-elements-By172SVq.js → json-elements-Cq76WjnZ.js} +4 -4
- package/dist/chunks/{json-elements-By172SVq.js.map → json-elements-Cq76WjnZ.js.map} +1 -1
- package/dist/chunks/{lexicon-u2SI5xcx.js → lexicon-IVRq2Uoo.js} +282 -74
- package/dist/chunks/lexicon-IVRq2Uoo.js.map +1 -0
- package/dist/chunks/{ontology-export-BwgMyuF0.js → ontology-export-OMo91mb0.js} +4 -4
- package/dist/chunks/{ontology-export-BwgMyuF0.js.map → ontology-export-OMo91mb0.js.map} +1 -1
- package/dist/chunks/{records-Cgvxz-Vx.js → records-NJiYvekn.js} +2 -2
- package/dist/chunks/{records-Cgvxz-Vx.js.map → records-NJiYvekn.js.map} +1 -1
- package/dist/chunks/{report-CgdsL9Hb.js → report-CwMfYa9J.js} +23 -23
- package/dist/chunks/{report-CgdsL9Hb.js.map → report-CwMfYa9J.js.map} +1 -1
- package/dist/chunks/round-trip-Cy3_SHRZ.js +79 -0
- package/dist/chunks/round-trip-Cy3_SHRZ.js.map +1 -0
- package/dist/chunks/{sigv4-LkAzsLAu.js → sigv4-BXwVbza3.js} +5 -5
- package/dist/chunks/sigv4-BXwVbza3.js.map +1 -0
- package/dist/chunks/{styles-CaABMoO1.js → styles-CAVmBLgp.js} +1237 -138
- package/dist/chunks/styles-CAVmBLgp.js.map +1 -0
- package/dist/chunks/styles-CPczw1Jz.js +1928 -0
- package/dist/chunks/styles-CPczw1Jz.js.map +1 -0
- package/dist/chunks/styles-boK6Ln54.js +2847 -0
- package/dist/chunks/styles-boK6Ln54.js.map +1 -0
- package/dist/chunks/{styles-yed-Cs1nmrjn.js → styles-yed-XeFBQ6VS.js} +506 -175
- package/dist/chunks/styles-yed-XeFBQ6VS.js.map +1 -0
- package/dist/chunks/{text-BuKQVMz2.js → text-ystE2bYi.js} +2 -2
- package/dist/chunks/{text-BuKQVMz2.js.map → text-ystE2bYi.js.map} +1 -1
- package/dist/csv.js +7 -7
- package/dist/cx.js +2 -2
- package/dist/cx2.js +2 -2
- package/dist/cys.js +1 -1
- package/dist/dot.js +8 -4
- package/dist/dot.js.map +1 -1
- package/dist/gexf.js +42 -12
- package/dist/gexf.js.map +1 -1
- package/dist/gml.js +848 -194
- package/dist/gml.js.map +1 -1
- package/dist/graph-io.js +230 -193
- package/dist/graph-io.js.map +1 -1
- package/dist/graphml.js +3 -3
- package/dist/json.js +3 -2
- package/dist/neo4j.js +6 -6
- package/dist/obo.js +1 -1
- package/dist/pajek.js +1 -1
- package/dist/positions.js +45 -3
- package/dist/positions.js.map +1 -1
- package/dist/sources-cypher.js +141 -23
- package/dist/sources-cypher.js.map +1 -1
- package/dist/sources-ndex.js +2 -2
- package/dist/sources-rest.js +32 -6
- package/dist/sources-rest.js.map +1 -1
- package/dist/sources-sparql.d.ts +1 -0
- package/dist/sources-sparql.js +439 -0
- package/dist/sources-sparql.js.map +1 -0
- package/dist/src/formats/cx/importer.d.ts.map +1 -1
- package/dist/src/formats/cx/importer.js +5 -1
- package/dist/src/formats/cx/importer.js.map +1 -1
- package/dist/src/formats/cx/styles.d.ts +24 -1
- package/dist/src/formats/cx/styles.d.ts.map +1 -1
- package/dist/src/formats/cx/styles.js +117 -11
- package/dist/src/formats/cx/styles.js.map +1 -1
- package/dist/src/formats/cx2/importer.d.ts.map +1 -1
- package/dist/src/formats/cx2/importer.js +1 -0
- package/dist/src/formats/cx2/importer.js.map +1 -1
- package/dist/src/formats/cx2/styles.d.ts.map +1 -1
- package/dist/src/formats/cx2/styles.js +3 -1
- package/dist/src/formats/cx2/styles.js.map +1 -1
- package/dist/src/formats/cys/importer.d.ts.map +1 -1
- package/dist/src/formats/cys/importer.js +1 -0
- package/dist/src/formats/cys/importer.js.map +1 -1
- package/dist/src/formats/cys/styles.d.ts +2 -0
- package/dist/src/formats/cys/styles.d.ts.map +1 -1
- package/dist/src/formats/cys/styles.js +15 -7
- package/dist/src/formats/cys/styles.js.map +1 -1
- package/dist/src/formats/dot/drawing.d.ts +98 -0
- package/dist/src/formats/dot/drawing.d.ts.map +1 -0
- package/dist/src/formats/dot/drawing.js +734 -0
- package/dist/src/formats/dot/drawing.js.map +1 -0
- package/dist/src/formats/dot/exporter.d.ts.map +1 -1
- package/dist/src/formats/dot/exporter.js +34 -2
- package/dist/src/formats/dot/exporter.js.map +1 -1
- package/dist/src/formats/dot/importer.d.ts +6 -1
- package/dist/src/formats/dot/importer.d.ts.map +1 -1
- package/dist/src/formats/dot/importer.js +170 -33
- package/dist/src/formats/dot/importer.js.map +1 -1
- package/dist/src/formats/dot/index.d.ts +3 -1
- package/dist/src/formats/dot/index.d.ts.map +1 -1
- package/dist/src/formats/dot/index.js +2 -1
- package/dist/src/formats/dot/index.js.map +1 -1
- package/dist/src/formats/dot/label-places.d.ts +41 -0
- package/dist/src/formats/dot/label-places.d.ts.map +1 -0
- package/dist/src/formats/dot/label-places.js +185 -0
- package/dist/src/formats/dot/label-places.js.map +1 -0
- package/dist/src/formats/dot/names.d.ts +13 -0
- package/dist/src/formats/dot/names.d.ts.map +1 -1
- package/dist/src/formats/dot/names.js +13 -0
- package/dist/src/formats/dot/names.js.map +1 -1
- package/dist/src/formats/dot/record.d.ts +50 -0
- package/dist/src/formats/dot/record.d.ts.map +1 -0
- package/dist/src/formats/dot/record.js +275 -0
- package/dist/src/formats/dot/record.js.map +1 -0
- package/dist/src/formats/dot/styles.d.ts +72 -2
- package/dist/src/formats/dot/styles.d.ts.map +1 -1
- package/dist/src/formats/dot/styles.js +1500 -119
- package/dist/src/formats/dot/styles.js.map +1 -1
- package/dist/src/formats/gexf/dialog-metrics.d.ts +15 -0
- package/dist/src/formats/gexf/dialog-metrics.d.ts.map +1 -0
- package/dist/src/formats/gexf/dialog-metrics.js +59 -0
- package/dist/src/formats/gexf/dialog-metrics.js.map +1 -0
- package/dist/src/formats/gexf/importer.d.ts +7 -0
- package/dist/src/formats/gexf/importer.d.ts.map +1 -1
- package/dist/src/formats/gexf/importer.js +41 -5
- package/dist/src/formats/gexf/importer.js.map +1 -1
- package/dist/src/formats/gexf/preview.d.ts +77 -0
- package/dist/src/formats/gexf/preview.d.ts.map +1 -0
- package/dist/src/formats/gexf/preview.js +191 -0
- package/dist/src/formats/gexf/preview.js.map +1 -0
- package/dist/src/formats/gexf/schema.d.ts.map +1 -1
- package/dist/src/formats/gexf/schema.js +2 -1
- package/dist/src/formats/gexf/schema.js.map +1 -1
- package/dist/src/formats/gexf/styles.d.ts +58 -31
- package/dist/src/formats/gexf/styles.d.ts.map +1 -1
- package/dist/src/formats/gexf/styles.js +848 -225
- package/dist/src/formats/gexf/styles.js.map +1 -1
- package/dist/src/formats/gml/importer.d.ts +5 -2
- package/dist/src/formats/gml/importer.d.ts.map +1 -1
- package/dist/src/formats/gml/importer.js +258 -71
- package/dist/src/formats/gml/importer.js.map +1 -1
- package/dist/src/formats/gml/index.d.ts +1 -1
- package/dist/src/formats/gml/index.d.ts.map +1 -1
- package/dist/src/formats/gml/index.js +1 -1
- package/dist/src/formats/gml/index.js.map +1 -1
- package/dist/src/formats/gml/positions.d.ts +7 -0
- package/dist/src/formats/gml/positions.d.ts.map +1 -1
- package/dist/src/formats/gml/positions.js +29 -7
- package/dist/src/formats/gml/positions.js.map +1 -1
- package/dist/src/formats/gml/styles.d.ts.map +1 -1
- package/dist/src/formats/gml/styles.js +754 -102
- package/dist/src/formats/gml/styles.js.map +1 -1
- package/dist/src/formats/graphml/styles-plain.d.ts.map +1 -1
- package/dist/src/formats/graphml/styles-plain.js +6 -10
- package/dist/src/formats/graphml/styles-plain.js.map +1 -1
- package/dist/src/formats/graphml/styles-yed.d.ts +21 -15
- package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -1
- package/dist/src/formats/graphml/styles-yed.js +695 -164
- package/dist/src/formats/graphml/styles-yed.js.map +1 -1
- package/dist/src/formats/graphml/styles-yfiles3.d.ts +1 -1
- package/dist/src/formats/graphml/styles-yfiles3.d.ts.map +1 -1
- package/dist/src/formats/graphml/styles-yfiles3.js +431 -64
- package/dist/src/formats/graphml/styles-yfiles3.js.map +1 -1
- package/dist/src/formats/graphml/yfiles.d.ts +3 -3
- package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
- package/dist/src/formats/graphml/yfiles.js +16 -6
- package/dist/src/formats/graphml/yfiles.js.map +1 -1
- package/dist/src/formats/json/dialect.d.ts +3 -2
- package/dist/src/formats/json/dialect.d.ts.map +1 -1
- package/dist/src/formats/json/dialect.js +39 -5
- package/dist/src/formats/json/dialect.js.map +1 -1
- package/dist/src/formats/json/importer.d.ts +13 -2
- package/dist/src/formats/json/importer.d.ts.map +1 -1
- package/dist/src/formats/json/importer.js +42 -6
- package/dist/src/formats/json/importer.js.map +1 -1
- package/dist/src/formats/json/index.d.ts +1 -1
- package/dist/src/formats/json/index.d.ts.map +1 -1
- package/dist/src/formats/json/index.js +1 -1
- package/dist/src/formats/json/index.js.map +1 -1
- package/dist/src/formats/json/positions.d.ts +5 -2
- package/dist/src/formats/json/positions.d.ts.map +1 -1
- package/dist/src/formats/json/positions.js +20 -4
- package/dist/src/formats/json/positions.js.map +1 -1
- package/dist/src/formats/json/styles.d.ts +12 -1
- package/dist/src/formats/json/styles.d.ts.map +1 -1
- package/dist/src/formats/json/styles.js +1843 -136
- package/dist/src/formats/json/styles.js.map +1 -1
- package/dist/src/formats/pajek/draw.d.ts +104 -0
- package/dist/src/formats/pajek/draw.d.ts.map +1 -0
- package/dist/src/formats/pajek/draw.js +382 -0
- package/dist/src/formats/pajek/draw.js.map +1 -0
- package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
- package/dist/src/formats/pajek/exporter.js +70 -51
- package/dist/src/formats/pajek/exporter.js.map +1 -1
- package/dist/src/formats/pajek/importer.d.ts +9 -0
- package/dist/src/formats/pajek/importer.d.ts.map +1 -1
- package/dist/src/formats/pajek/importer.js +233 -102
- package/dist/src/formats/pajek/importer.js.map +1 -1
- package/dist/src/formats/pajek/index.d.ts +1 -0
- package/dist/src/formats/pajek/index.d.ts.map +1 -1
- package/dist/src/formats/pajek/index.js.map +1 -1
- package/dist/src/formats/pajek/styles.d.ts +15 -7
- package/dist/src/formats/pajek/styles.d.ts.map +1 -1
- package/dist/src/formats/pajek/styles.js +1395 -114
- package/dist/src/formats/pajek/styles.js.map +1 -1
- package/dist/src/formats/pajek/syntax.d.ts +10 -1
- package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
- package/dist/src/formats/pajek/syntax.js +26 -2
- package/dist/src/formats/pajek/syntax.js.map +1 -1
- package/dist/src/formats/xgmml/emit.d.ts +1 -0
- package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
- package/dist/src/formats/xgmml/emit.js +65 -5
- package/dist/src/formats/xgmml/emit.js.map +1 -1
- package/dist/src/formats/xgmml/styles.d.ts +23 -3
- package/dist/src/formats/xgmml/styles.d.ts.map +1 -1
- package/dist/src/formats/xgmml/styles.js +277 -60
- package/dist/src/formats/xgmml/styles.js.map +1 -1
- package/dist/src/index.d.ts +6 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/positions/convert.d.ts.map +1 -1
- package/dist/src/positions/convert.js +11 -1
- package/dist/src/positions/convert.js.map +1 -1
- package/dist/src/positions/extract.d.ts.map +1 -1
- package/dist/src/positions/extract.js +53 -1
- package/dist/src/positions/extract.js.map +1 -1
- package/dist/src/positions/index.d.ts +1 -1
- package/dist/src/positions/index.d.ts.map +1 -1
- package/dist/src/positions/types.d.ts +59 -0
- package/dist/src/positions/types.d.ts.map +1 -1
- package/dist/src/sources/builtins.d.ts +1 -1
- package/dist/src/sources/builtins.d.ts.map +1 -1
- package/dist/src/sources/builtins.js +8 -2
- package/dist/src/sources/builtins.js.map +1 -1
- package/dist/src/sources/context.d.ts.map +1 -1
- package/dist/src/sources/context.js +1 -0
- package/dist/src/sources/context.js.map +1 -1
- package/dist/src/sources/credentials.d.ts +50 -1
- package/dist/src/sources/credentials.d.ts.map +1 -1
- package/dist/src/sources/credentials.js +69 -0
- package/dist/src/sources/credentials.js.map +1 -1
- package/dist/src/sources/cypher/descriptor.d.ts.map +1 -1
- package/dist/src/sources/cypher/descriptor.js +5 -0
- package/dist/src/sources/cypher/descriptor.js.map +1 -1
- package/dist/src/sources/cypher/index.d.ts.map +1 -1
- package/dist/src/sources/cypher/index.js +125 -18
- package/dist/src/sources/cypher/index.js.map +1 -1
- package/dist/src/sources/cypher/params.d.ts +1 -1
- package/dist/src/sources/cypher/params.d.ts.map +1 -1
- package/dist/src/sources/cypher/query-builder.d.ts +17 -0
- package/dist/src/sources/cypher/query-builder.d.ts.map +1 -1
- package/dist/src/sources/cypher/query-builder.js +31 -0
- package/dist/src/sources/cypher/query-builder.js.map +1 -1
- package/dist/src/sources/ids.d.ts +5 -0
- package/dist/src/sources/ids.d.ts.map +1 -1
- package/dist/src/sources/ids.js +5 -0
- package/dist/src/sources/ids.js.map +1 -1
- package/dist/src/sources/params.d.ts +3 -0
- package/dist/src/sources/params.d.ts.map +1 -1
- package/dist/src/sources/rest/descriptor.d.ts.map +1 -1
- package/dist/src/sources/rest/descriptor.js +9 -0
- package/dist/src/sources/rest/descriptor.js.map +1 -1
- package/dist/src/sources/rest/openalex.d.ts +4 -2
- package/dist/src/sources/rest/openalex.d.ts.map +1 -1
- package/dist/src/sources/rest/openalex.js +4 -2
- package/dist/src/sources/rest/openalex.js.map +1 -1
- package/dist/src/sources/rest/source.d.ts.map +1 -1
- package/dist/src/sources/rest/source.js +38 -0
- package/dist/src/sources/rest/source.js.map +1 -1
- package/dist/src/sources/run.d.ts +2 -0
- package/dist/src/sources/run.d.ts.map +1 -1
- package/dist/src/sources/run.js +30 -3
- package/dist/src/sources/run.js.map +1 -1
- package/dist/src/sources/sigv4.d.ts +5 -3
- package/dist/src/sources/sigv4.d.ts.map +1 -1
- package/dist/src/sources/sigv4.js +6 -4
- package/dist/src/sources/sigv4.js.map +1 -1
- package/dist/src/sources/sparql/descriptor.d.ts +10 -0
- package/dist/src/sources/sparql/descriptor.d.ts.map +1 -0
- package/dist/src/sources/sparql/descriptor.js +64 -0
- package/dist/src/sources/sparql/descriptor.js.map +1 -0
- package/dist/src/sources/sparql/index.d.ts +28 -0
- package/dist/src/sources/sparql/index.d.ts.map +1 -0
- package/dist/src/sources/sparql/index.js +327 -0
- package/dist/src/sources/sparql/index.js.map +1 -0
- package/dist/src/sources/sparql/ntriples.d.ts +69 -0
- package/dist/src/sources/sparql/ntriples.d.ts.map +1 -0
- package/dist/src/sources/sparql/ntriples.js +180 -0
- package/dist/src/sources/sparql/ntriples.js.map +1 -0
- package/dist/src/sources/sparql/params.d.ts +27 -0
- package/dist/src/sources/sparql/params.d.ts.map +1 -0
- package/dist/src/sources/sparql/params.js +5 -0
- package/dist/src/sources/sparql/params.js.map +1 -0
- package/dist/src/sources/sparql/query.d.ts +73 -0
- package/dist/src/sources/sparql/query.d.ts.map +1 -0
- package/dist/src/sources/sparql/query.js +164 -0
- package/dist/src/sources/sparql/query.js.map +1 -0
- package/dist/src/sources/types.d.ts +60 -0
- package/dist/src/sources/types.d.ts.map +1 -1
- package/dist/src/styles/annotations.d.ts +61 -5
- package/dist/src/styles/annotations.d.ts.map +1 -1
- package/dist/src/styles/annotations.js +130 -22
- package/dist/src/styles/annotations.js.map +1 -1
- package/dist/src/styles/canon/bends.d.ts +46 -0
- package/dist/src/styles/canon/bends.d.ts.map +1 -1
- package/dist/src/styles/canon/bends.js +123 -0
- package/dist/src/styles/canon/bends.js.map +1 -1
- package/dist/src/styles/canon/color-tables.d.ts +6 -1
- package/dist/src/styles/canon/color-tables.d.ts.map +1 -1
- package/dist/src/styles/canon/color-tables.js +10 -4
- package/dist/src/styles/canon/color-tables.js.map +1 -1
- package/dist/src/styles/canon/color.d.ts +3 -1
- package/dist/src/styles/canon/color.d.ts.map +1 -1
- package/dist/src/styles/canon/color.js +103 -3
- package/dist/src/styles/canon/color.js.map +1 -1
- package/dist/src/styles/canon/enums.d.ts +2 -2
- package/dist/src/styles/canon/enums.d.ts.map +1 -1
- package/dist/src/styles/canon/enums.js +89 -7
- package/dist/src/styles/canon/enums.js.map +1 -1
- package/dist/src/styles/canon/graphviz.d.ts +12 -3
- package/dist/src/styles/canon/graphviz.d.ts.map +1 -1
- package/dist/src/styles/canon/graphviz.js +57 -9
- package/dist/src/styles/canon/graphviz.js.map +1 -1
- package/dist/src/styles/canon/number.d.ts +8 -0
- package/dist/src/styles/canon/number.d.ts.map +1 -1
- package/dist/src/styles/canon/number.js +18 -0
- package/dist/src/styles/canon/number.js.map +1 -1
- package/dist/src/styles/canon/text.d.ts +29 -2
- package/dist/src/styles/canon/text.d.ts.map +1 -1
- package/dist/src/styles/canon/text.js +156 -16
- package/dist/src/styles/canon/text.js.map +1 -1
- package/dist/src/styles/codes.d.ts +2 -0
- package/dist/src/styles/codes.d.ts.map +1 -1
- package/dist/src/styles/codes.js +2 -0
- package/dist/src/styles/codes.js.map +1 -1
- package/dist/src/styles/cyjs/cascade.d.ts.map +1 -1
- package/dist/src/styles/cyjs/cascade.js +1139 -79
- package/dist/src/styles/cyjs/cascade.js.map +1 -1
- package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -1
- package/dist/src/styles/cyjs/defaults-table.js +4 -0
- package/dist/src/styles/cyjs/defaults-table.js.map +1 -1
- package/dist/src/styles/cyjs/emit.d.ts.map +1 -1
- package/dist/src/styles/cyjs/emit.js +232 -10
- package/dist/src/styles/cyjs/emit.js.map +1 -1
- package/dist/src/styles/cyjs/face.d.ts +20 -0
- package/dist/src/styles/cyjs/face.d.ts.map +1 -0
- package/dist/src/styles/cyjs/face.js +332 -0
- package/dist/src/styles/cyjs/face.js.map +1 -0
- package/dist/src/styles/cyjs/mappers.d.ts +44 -1
- package/dist/src/styles/cyjs/mappers.d.ts.map +1 -1
- package/dist/src/styles/cyjs/mappers.js +475 -26
- package/dist/src/styles/cyjs/mappers.js.map +1 -1
- package/dist/src/styles/cyjs/routes.d.ts +53 -0
- package/dist/src/styles/cyjs/routes.d.ts.map +1 -0
- package/dist/src/styles/cyjs/routes.js +360 -0
- package/dist/src/styles/cyjs/routes.js.map +1 -0
- package/dist/src/styles/cytoscape/charts.d.ts +23 -0
- package/dist/src/styles/cytoscape/charts.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/charts.js +560 -0
- package/dist/src/styles/cytoscape/charts.js.map +1 -0
- package/dist/src/styles/cytoscape/emit.d.ts.map +1 -1
- package/dist/src/styles/cytoscape/emit.js +156 -48
- package/dist/src/styles/cytoscape/emit.js.map +1 -1
- package/dist/src/styles/cytoscape/lexicon.d.ts +91 -3
- package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -1
- package/dist/src/styles/cytoscape/lexicon.js +387 -77
- package/dist/src/styles/cytoscape/lexicon.js.map +1 -1
- package/dist/src/styles/cytoscape/mappings.d.ts +30 -0
- package/dist/src/styles/cytoscape/mappings.d.ts.map +1 -1
- package/dist/src/styles/cytoscape/mappings.js +92 -0
- package/dist/src/styles/cytoscape/mappings.js.map +1 -1
- package/dist/src/styles/cytoscape/resolve.d.ts +42 -2
- package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -1
- package/dist/src/styles/cytoscape/resolve.js +623 -17
- package/dist/src/styles/cytoscape/resolve.js.map +1 -1
- package/dist/src/styles/defaults.d.ts +46 -26
- package/dist/src/styles/defaults.d.ts.map +1 -1
- package/dist/src/styles/defaults.js +308 -71
- package/dist/src/styles/defaults.js.map +1 -1
- package/dist/src/styles/index.d.ts +4 -3
- package/dist/src/styles/index.d.ts.map +1 -1
- package/dist/src/styles/index.js +3 -2
- package/dist/src/styles/index.js.map +1 -1
- package/dist/src/styles/internal.d.ts +1 -0
- package/dist/src/styles/internal.d.ts.map +1 -1
- package/dist/src/styles/internal.js +1 -0
- package/dist/src/styles/internal.js.map +1 -1
- package/dist/src/styles/io/generic.d.ts.map +1 -1
- package/dist/src/styles/io/generic.js +56 -16
- package/dist/src/styles/io/generic.js.map +1 -1
- package/dist/src/styles/io/round-trip.d.ts +56 -0
- package/dist/src/styles/io/round-trip.d.ts.map +1 -0
- package/dist/src/styles/io/round-trip.js +138 -0
- package/dist/src/styles/io/round-trip.js.map +1 -0
- package/dist/src/styles/io/writer.d.ts.map +1 -1
- package/dist/src/styles/io/writer.js +6 -1
- package/dist/src/styles/io/writer.js.map +1 -1
- package/dist/src/styles/notes.d.ts.map +1 -1
- package/dist/src/styles/notes.js +1 -0
- package/dist/src/styles/notes.js.map +1 -1
- package/dist/src/styles/plan/features.d.ts +1 -1
- package/dist/src/styles/plan/features.d.ts.map +1 -1
- package/dist/src/styles/plan/features.js +22 -2
- package/dist/src/styles/plan/features.js.map +1 -1
- package/dist/src/styles/plan/index.d.ts +1 -1
- package/dist/src/styles/plan/index.d.ts.map +1 -1
- package/dist/src/styles/plan/index.js +1 -1
- package/dist/src/styles/plan/index.js.map +1 -1
- package/dist/src/styles/plan/plan.d.ts.map +1 -1
- package/dist/src/styles/plan/plan.js +61 -4
- package/dist/src/styles/plan/plan.js.map +1 -1
- package/dist/src/styles/plan/resolve.d.ts +11 -0
- package/dist/src/styles/plan/resolve.d.ts.map +1 -1
- package/dist/src/styles/plan/resolve.js +40 -4
- package/dist/src/styles/plan/resolve.js.map +1 -1
- package/dist/src/styles/slots.d.ts +14 -0
- package/dist/src/styles/slots.d.ts.map +1 -0
- package/dist/src/styles/slots.js +20 -0
- package/dist/src/styles/slots.js.map +1 -0
- package/dist/src/styles/types.d.ts +687 -6
- package/dist/src/styles/types.d.ts.map +1 -1
- package/dist/src/styles/vocabulary.d.ts +3 -2
- package/dist/src/styles/vocabulary.d.ts.map +1 -1
- package/dist/src/styles/vocabulary.js +224 -0
- package/dist/src/styles/vocabulary.js.map +1 -1
- package/dist/styles.js +30 -239
- package/dist/styles.js.map +1 -1
- package/dist/xgmml.js +3 -3
- package/package.json +27 -7
- package/src/formats/cx/importer.ts +6 -1
- package/src/formats/cx/styles.ts +143 -9
- package/src/formats/cx2/importer.ts +1 -0
- package/src/formats/cx2/styles.ts +3 -1
- package/src/formats/cys/importer.ts +1 -0
- package/src/formats/cys/styles.ts +27 -5
- package/src/formats/dot/drawing.ts +799 -0
- package/src/formats/dot/exporter.ts +37 -1
- package/src/formats/dot/importer.ts +192 -36
- package/src/formats/dot/index.ts +3 -1
- package/src/formats/dot/label-places.ts +241 -0
- package/src/formats/dot/names.ts +15 -0
- package/src/formats/dot/record.ts +336 -0
- package/src/formats/dot/styles.ts +1702 -149
- package/src/formats/gexf/dialog-metrics.ts +61 -0
- package/src/formats/gexf/importer.ts +50 -5
- package/src/formats/gexf/preview.ts +217 -0
- package/src/formats/gexf/schema.ts +2 -1
- package/src/formats/gexf/styles.ts +1099 -245
- package/src/formats/gml/importer.ts +291 -76
- package/src/formats/gml/index.ts +1 -1
- package/src/formats/gml/positions.ts +29 -7
- package/src/formats/gml/styles.ts +852 -110
- package/src/formats/graphml/styles-plain.ts +6 -15
- package/src/formats/graphml/styles-yed.ts +765 -176
- package/src/formats/graphml/styles-yfiles3.ts +487 -63
- package/src/formats/graphml/yfiles.ts +19 -6
- package/src/formats/json/dialect.ts +41 -5
- package/src/formats/json/importer.ts +59 -7
- package/src/formats/json/index.ts +1 -0
- package/src/formats/json/positions.ts +22 -5
- package/src/formats/json/styles.ts +2123 -171
- package/src/formats/pajek/draw.ts +469 -0
- package/src/formats/pajek/exporter.ts +81 -49
- package/src/formats/pajek/importer.ts +278 -103
- package/src/formats/pajek/index.ts +1 -0
- package/src/formats/pajek/styles.ts +1506 -133
- package/src/formats/pajek/syntax.ts +27 -2
- package/src/formats/xgmml/emit.ts +73 -5
- package/src/formats/xgmml/styles.ts +330 -71
- package/src/index.ts +12 -1
- package/src/positions/convert.ts +12 -1
- package/src/positions/extract.ts +55 -1
- package/src/positions/index.ts +1 -0
- package/src/positions/types.ts +60 -0
- package/src/sources/builtins.ts +8 -1
- package/src/sources/context.ts +1 -0
- package/src/sources/credentials.ts +90 -1
- package/src/sources/cypher/descriptor.ts +7 -1
- package/src/sources/cypher/index.ts +149 -18
- package/src/sources/cypher/params.ts +1 -1
- package/src/sources/cypher/query-builder.ts +33 -0
- package/src/sources/ids.ts +6 -0
- package/src/sources/params.ts +3 -0
- package/src/sources/rest/descriptor.ts +9 -0
- package/src/sources/rest/openalex.ts +4 -2
- package/src/sources/rest/source.ts +41 -0
- package/src/sources/run.ts +35 -3
- package/src/sources/sigv4.ts +6 -4
- package/src/sources/sparql/descriptor.ts +67 -0
- package/src/sources/sparql/index.ts +371 -0
- package/src/sources/sparql/ntriples.ts +219 -0
- package/src/sources/sparql/params.ts +28 -0
- package/src/sources/sparql/query.ts +216 -0
- package/src/sources/types.ts +68 -0
- package/src/styles/annotations.ts +201 -27
- package/src/styles/canon/bends.ts +137 -0
- package/src/styles/canon/color-tables.ts +10 -4
- package/src/styles/canon/color.ts +105 -3
- package/src/styles/canon/enums.ts +107 -8
- package/src/styles/canon/graphviz.ts +71 -10
- package/src/styles/canon/number.ts +19 -0
- package/src/styles/canon/text.ts +187 -16
- package/src/styles/codes.ts +2 -0
- package/src/styles/cyjs/cascade.ts +1303 -84
- package/src/styles/cyjs/defaults-table.ts +4 -0
- package/src/styles/cyjs/emit.ts +268 -14
- package/src/styles/cyjs/face.ts +372 -0
- package/src/styles/cyjs/mappers.ts +506 -27
- package/src/styles/cyjs/routes.ts +432 -0
- package/src/styles/cytoscape/charts.ts +684 -0
- package/src/styles/cytoscape/emit.ts +170 -48
- package/src/styles/cytoscape/lexicon.ts +431 -78
- package/src/styles/cytoscape/mappings.ts +108 -0
- package/src/styles/cytoscape/resolve.ts +741 -17
- package/src/styles/defaults.ts +417 -108
- package/src/styles/index.ts +5 -0
- package/src/styles/internal.ts +1 -0
- package/src/styles/io/generic.ts +79 -23
- package/src/styles/io/round-trip.ts +202 -0
- package/src/styles/io/writer.ts +6 -1
- package/src/styles/notes.ts +1 -0
- package/src/styles/plan/features.ts +23 -2
- package/src/styles/plan/index.ts +1 -1
- package/src/styles/plan/plan.ts +69 -5
- package/src/styles/plan/resolve.ts +47 -4
- package/src/styles/slots.ts +25 -0
- package/src/styles/types.ts +698 -5
- package/src/styles/vocabulary.ts +232 -2
- package/dist/chunks/block-Cu22ewuS.js.map +0 -1
- package/dist/chunks/choose-Cdx6Enl2.js +0 -57
- package/dist/chunks/choose-Cdx6Enl2.js.map +0 -1
- package/dist/chunks/codes-CV_Bhcyi.js.map +0 -1
- package/dist/chunks/convert-BcQ8_jMo.js.map +0 -1
- package/dist/chunks/credentials-BiQsnMTb.js.map +0 -1
- package/dist/chunks/descriptor-BJ-W0Jd-.js.map +0 -1
- package/dist/chunks/emit-CD8xnY8s.js.map +0 -1
- package/dist/chunks/export-CZ7VRm4I.js.map +0 -1
- package/dist/chunks/exporter-bxxjOrDZ.js.map +0 -1
- package/dist/chunks/format-BMS-1Nxb.js +0 -64
- package/dist/chunks/format-BMS-1Nxb.js.map +0 -1
- package/dist/chunks/generic-CP6YD34u.js.map +0 -1
- package/dist/chunks/importer-B87_fmVx.js.map +0 -1
- package/dist/chunks/importer-CB_zV5_L.js.map +0 -1
- package/dist/chunks/importer-CVT-JyDE.js.map +0 -1
- package/dist/chunks/importer-Cyy6UseH.js.map +0 -1
- package/dist/chunks/importer-DPZDN40-.js.map +0 -1
- package/dist/chunks/importer-e3huMZbm.js.map +0 -1
- package/dist/chunks/lexicon-u2SI5xcx.js.map +0 -1
- package/dist/chunks/sigv4-LkAzsLAu.js.map +0 -1
- package/dist/chunks/styles-CaABMoO1.js.map +0 -1
- package/dist/chunks/styles-P_gmFAOi.js +0 -770
- package/dist/chunks/styles-P_gmFAOi.js.map +0 -1
- package/dist/chunks/styles-yed-Cs1nmrjn.js.map +0 -1
- package/dist/chunks/writer-DvHTl36J.js +0 -449
- package/dist/chunks/writer-DvHTl36J.js.map +0 -1
package/src/formats/cx/styles.ts
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
import type { GraphSnapshot } from "@graphty/graph-format";
|
|
11
11
|
|
|
12
|
+
import { type ExplicitWeights, explicitWeights } from "../../common/weights.js";
|
|
12
13
|
import { STYLE_ISSUE } from "../../styles/codes.js";
|
|
13
14
|
import {
|
|
14
15
|
type CytoscapeDialect,
|
|
@@ -16,11 +17,18 @@ import {
|
|
|
16
17
|
cytoscapeWritableProperties,
|
|
17
18
|
emitCytoscapeStyle,
|
|
18
19
|
} from "../../styles/cytoscape/emit.js";
|
|
19
|
-
import {
|
|
20
|
+
import {
|
|
21
|
+
type CytoscapeStyle,
|
|
22
|
+
cytoscapeStyleFromCx,
|
|
23
|
+
dropMismatchedKeys,
|
|
24
|
+
sharedColumnFallback,
|
|
25
|
+
weightColumnFallback,
|
|
26
|
+
} from "../../styles/cytoscape/mappings.js";
|
|
20
27
|
import {
|
|
21
28
|
cytoscapeBackground,
|
|
22
29
|
type CytoscapeBypass,
|
|
23
30
|
type CytoscapeElements,
|
|
31
|
+
edgeEnds,
|
|
24
32
|
resolveCytoscape,
|
|
25
33
|
} from "../../styles/cytoscape/resolve.js";
|
|
26
34
|
import { cytoscapeRules } from "../../styles/cytoscape/translate.js";
|
|
@@ -86,6 +94,10 @@ export interface CxStyleSource {
|
|
|
86
94
|
readonly entries: readonly unknown[];
|
|
87
95
|
/** How many other views the file styles, whose entries were left out. */
|
|
88
96
|
readonly otherViews?: number;
|
|
97
|
+
/** The edge attribute the import read as the weight (its `weightFrom`), or null. */
|
|
98
|
+
readonly weightFrom?: string | null;
|
|
99
|
+
/** Whether the file is a collection (it has `cySubNetworks`), whose elements desktop creates in list order. */
|
|
100
|
+
readonly collection?: boolean;
|
|
89
101
|
}
|
|
90
102
|
|
|
91
103
|
/** What a CX2 import keeps for its styles. */
|
|
@@ -94,6 +106,8 @@ export interface Cx2StyleSource {
|
|
|
94
106
|
readonly visualProperties: unknown;
|
|
95
107
|
/** The `visualEditorProperties` aspect. */
|
|
96
108
|
readonly visualEditorProperties: unknown;
|
|
109
|
+
/** The edge attribute the import read as the weight (its `weightFrom`), or null. */
|
|
110
|
+
readonly weightFrom?: string | null;
|
|
97
111
|
}
|
|
98
112
|
|
|
99
113
|
/**
|
|
@@ -121,6 +135,111 @@ function bypassesOf(table: Table, n: number, namespace: string): { maps: Cytosca
|
|
|
121
135
|
return { maps, names: columns.map((c) => c.meta.name) };
|
|
122
136
|
}
|
|
123
137
|
|
|
138
|
+
/**
|
|
139
|
+
* Points a target's mappings at the columns the import keeps them in (a shared column's plain one, the edge weight
|
|
140
|
+
* column), empties the CX version 1 mappings whose key type the column cannot match, and notes a mapping over a
|
|
141
|
+
* column the graph does not have.
|
|
142
|
+
* @param style - the style, changed in place
|
|
143
|
+
* @param target - nodes or edges
|
|
144
|
+
* @param table - the target's table
|
|
145
|
+
* @param read - where problems are noted, the dialect, and the attribute the import read as the edge weight
|
|
146
|
+
* @param read.notes - where problems are noted
|
|
147
|
+
* @param read.dialect - the Cytoscape dialect the file is written in
|
|
148
|
+
* @param read.weightFrom - the edge attribute the import read as the weight, or null
|
|
149
|
+
* @param read.weights - the weights a mapping over that attribute reads when no column holds them, or null
|
|
150
|
+
*/
|
|
151
|
+
function fitMappingsToColumns(
|
|
152
|
+
style: CytoscapeStyle,
|
|
153
|
+
target: StyleTarget,
|
|
154
|
+
table: Table,
|
|
155
|
+
read: {
|
|
156
|
+
readonly notes: StyleNotes;
|
|
157
|
+
readonly dialect: CytoscapeDialect;
|
|
158
|
+
readonly weightFrom: string | null;
|
|
159
|
+
readonly weights: ExplicitWeights | null;
|
|
160
|
+
},
|
|
161
|
+
): void {
|
|
162
|
+
const { notes } = read;
|
|
163
|
+
sharedColumnFallback(style[target], (column) => table.has(column));
|
|
164
|
+
if (target === "edge") {
|
|
165
|
+
weightColumnFallback(style.edge, read.weightFrom, table);
|
|
166
|
+
}
|
|
167
|
+
// CX2's reader types a mapping's keys by the column; CX version 1 keeps the mapping's own type
|
|
168
|
+
if (read.dialect !== "cx2") {
|
|
169
|
+
dropMismatchedKeys(style[target], (column) => table.get(column)?.meta.origin?.type ?? null, notes, target);
|
|
170
|
+
}
|
|
171
|
+
for (const m of style[target].mappings.values()) {
|
|
172
|
+
if (!table.has(m.column) && !(target === "edge" && read.weights !== null && m.column === read.weightFrom)) {
|
|
173
|
+
notes.add(STYLE_ISSUE.MAPPING_COLUMN_MISSING, target, m.column, { sample: m.kind });
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* The edge weights a mapping over the attribute read as the weight reads, when the import kept them as the graph's
|
|
180
|
+
* weights only: no column of that name and no weight column (a CX2 file's integer `weight`). Null otherwise, when
|
|
181
|
+
* the mapping reads a column.
|
|
182
|
+
* @param snapshot - the graph
|
|
183
|
+
* @param weightFrom - the attribute read as the weight, or null
|
|
184
|
+
* @returns the weights, or null
|
|
185
|
+
*/
|
|
186
|
+
function keptWeights(snapshot: GraphSnapshot, weightFrom: string | null): ExplicitWeights | null {
|
|
187
|
+
if (weightFrom === null || snapshot.edges.has(weightFrom) || snapshot.edges.byRole("weight") !== null) {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
const weights = explicitWeights(snapshot);
|
|
191
|
+
return weights.weighted ? weights : null;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Where a Java `HashMap<Long, ...>` holding these keys (inserted in this order) iterates each, first at 0: its
|
|
196
|
+
* buckets in order (the key's `Long.hashCode` spread by `HashMap.hash`, masked by a capacity grown from 16 until the
|
|
197
|
+
* keys fill at most three quarters of it), each bucket in insertion order. Null when a key is not a non-negative
|
|
198
|
+
* integer (or its digits).
|
|
199
|
+
* @param ids - the keys, in insertion order
|
|
200
|
+
* @returns each key's rank, by insertion index, or null
|
|
201
|
+
*/
|
|
202
|
+
function javaHashOrder(ids: readonly unknown[]): number[] | null {
|
|
203
|
+
// an id read as text under the `ids` option is still the file's integer
|
|
204
|
+
const keys = ids.map((k) => (typeof k === "string" && /^\d{1,15}$/.test(k) ? Number(k) : k));
|
|
205
|
+
if (!keys.every((k) => typeof k === "number" && Number.isSafeInteger(k) && k >= 0)) {
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
let capacity = 16;
|
|
209
|
+
while (keys.length > 0.75 * capacity) {
|
|
210
|
+
capacity *= 2;
|
|
211
|
+
}
|
|
212
|
+
const bucket = (k: number): number => {
|
|
213
|
+
// (int) (v ^ (v >>> 32)), then h ^ (h >>> 16)
|
|
214
|
+
const h = ((k % 2 ** 32) ^ Math.floor(k / 2 ** 32)) >>> 0;
|
|
215
|
+
return (h ^ (h >>> 16)) & (capacity - 1);
|
|
216
|
+
};
|
|
217
|
+
const order = keys.map((_, i) => i).sort((a, b) => bucket(keys[a] as number) - bucket(keys[b] as number) || a - b);
|
|
218
|
+
const rank = new Array<number>(keys.length);
|
|
219
|
+
order.forEach((i, r) => {
|
|
220
|
+
rank[i] = r;
|
|
221
|
+
});
|
|
222
|
+
return rank;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* The order Cytoscape desktop creates a CX graph's nodes and edges in when it creates them in hash order: its CX
|
|
227
|
+
* reader files them in `HashMap`s keyed by their ids and creates them as those iterate (`NiceCyRootNetwork.handleNodes`,
|
|
228
|
+
* `addElements`, cx-support 2.8.4), which decides the side it fans parallel edges to. Null when an id is not an
|
|
229
|
+
* integer or an edge has no id.
|
|
230
|
+
* @param snapshot - the graph
|
|
231
|
+
* @returns each node's and edge's rank, or null
|
|
232
|
+
*/
|
|
233
|
+
export function hashCreationOrder(snapshot: GraphSnapshot): NonNullable<CytoscapeElements["ends"]>["created"] | null {
|
|
234
|
+
const ids = snapshot.edges.byRole("id");
|
|
235
|
+
if (ids === null) {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
const node = javaHashOrder(Array.from({ length: snapshot.nodeCount }, (_, i) => snapshot.ids.idOf(i)));
|
|
239
|
+
const edge = javaHashOrder(Array.from({ length: snapshot.edgeCount }, (_, i) => ids.value(i)));
|
|
240
|
+
return node === null || edge === null ? null : { node, edge };
|
|
241
|
+
}
|
|
242
|
+
|
|
124
243
|
/**
|
|
125
244
|
* The styles of a graph from its Cytoscape style and its bypass columns.
|
|
126
245
|
* @param snapshot - the graph
|
|
@@ -129,6 +248,10 @@ function bypassesOf(table: Table, n: number, namespace: string): { maps: Cytosca
|
|
|
129
248
|
* @param namespace - the importer's bypass namespace
|
|
130
249
|
* @param notes - where problems are noted
|
|
131
250
|
* @param dialect - the Cytoscape dialect the file is written in
|
|
251
|
+
* @param read - what the import read: the edge attribute it read as the weight (`weightFrom`, or null), and whether
|
|
252
|
+
* Cytoscape desktop creates the file's elements in hash order (`hashOrder`: a CX version 1 file without subnetworks)
|
|
253
|
+
* @param read.weightFrom - the weight attribute, or null
|
|
254
|
+
* @param read.hashOrder - whether desktop creates the elements in hash order
|
|
132
255
|
* @returns the styles
|
|
133
256
|
*/
|
|
134
257
|
export function readDeclaredStyles(
|
|
@@ -138,28 +261,36 @@ export function readDeclaredStyles(
|
|
|
138
261
|
namespace: string,
|
|
139
262
|
notes: StyleNotes,
|
|
140
263
|
dialect: CytoscapeDialect = "desktop",
|
|
264
|
+
read: { readonly weightFrom?: string | null; readonly hashOrder?: boolean } = {},
|
|
141
265
|
): ImporterStyles {
|
|
266
|
+
const weightFrom = read.weightFrom ?? null;
|
|
267
|
+
const created = read.hashOrder === true ? (hashCreationOrder(snapshot) ?? undefined) : undefined;
|
|
142
268
|
const out: Record<StyleTarget, ReaderOutput> = { node: { values: {} }, edge: { values: {} } };
|
|
143
269
|
const readFrom: Record<StyleTarget, string[]> = { node: [], edge: [] };
|
|
144
270
|
for (const target of ["node", "edge"] as const) {
|
|
145
271
|
context.signal?.throwIfAborted();
|
|
146
272
|
const table = target === "node" ? snapshot.nodes : snapshot.edges;
|
|
147
273
|
const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
notes.add(STYLE_ISSUE.MAPPING_COLUMN_MISSING, target, m.column, { sample: m.kind });
|
|
151
|
-
}
|
|
152
|
-
}
|
|
274
|
+
const weights = target === "edge" ? keptWeights(snapshot, weightFrom) : null;
|
|
275
|
+
fitMappingsToColumns(style, target, table, { notes, dialect, weightFrom, weights });
|
|
153
276
|
const { maps, names } = bypassesOf(table, n, namespace);
|
|
154
277
|
readFrom[target] = names;
|
|
155
278
|
const elements: CytoscapeElements = {
|
|
156
279
|
count: n,
|
|
157
|
-
value: (column, i) =>
|
|
280
|
+
value: (column, i) => {
|
|
281
|
+
if (weights !== null && column === weightFrom) {
|
|
282
|
+
return weights.isExplicit(i) ? weights.value(i) : null;
|
|
283
|
+
}
|
|
284
|
+
return table.has(column) ? plainCell(table.value(column, i)) : null;
|
|
285
|
+
},
|
|
158
286
|
bypasses: maps,
|
|
287
|
+
...(target === "edge"
|
|
288
|
+
? { ends: { ...edgeEnds(snapshot, out.node.values), ...(created === undefined ? {} : { created }) } }
|
|
289
|
+
: {}),
|
|
159
290
|
};
|
|
160
291
|
const values = resolveCytoscape(target, style, elements, { notes, budget: context.budget });
|
|
161
292
|
// a file graphty wrote: a value its style writes as the nearest Cytoscape value is the block's
|
|
162
|
-
exactFromBlock(snapshot, target, values, dialect);
|
|
293
|
+
exactFromBlock(snapshot, target, values, dialect, created);
|
|
163
294
|
const { rules, columns } = cytoscapeRules(target, style, elements, { notes, budget: context.budget });
|
|
164
295
|
out[target] = { values: nonEmpty(values), rules, columns };
|
|
165
296
|
}
|
|
@@ -195,7 +326,10 @@ export function readCxStyles(snapshot: GraphSnapshot, context: StyleReadContext)
|
|
|
195
326
|
count: otherViews,
|
|
196
327
|
});
|
|
197
328
|
}
|
|
198
|
-
return readDeclaredStyles(snapshot, context, style, "cx.bypass", notes
|
|
329
|
+
return readDeclaredStyles(snapshot, context, style, "cx.bypass", notes, "desktop", {
|
|
330
|
+
weightFrom: kept?.weightFrom ?? null,
|
|
331
|
+
hashOrder: kept?.collection !== true,
|
|
332
|
+
});
|
|
199
333
|
}
|
|
200
334
|
|
|
201
335
|
/**
|
|
@@ -2451,6 +2451,7 @@ export const cx2Importer: GraphImporter<Cx2ImportOptions> = Object.freeze({
|
|
|
2451
2451
|
const kept: Cx2StyleSource = {
|
|
2452
2452
|
visualProperties: doc.opaque.get("visualProperties"),
|
|
2453
2453
|
visualEditorProperties: doc.opaque.get("visualEditorProperties"),
|
|
2454
|
+
weightFrom: resolved.weightFrom,
|
|
2454
2455
|
};
|
|
2455
2456
|
report.keepForStyles(kept);
|
|
2456
2457
|
throwIfAborted(resolved.signal);
|
|
@@ -25,5 +25,7 @@ export function readCx2Styles(snapshot: GraphSnapshot, context: StyleReadContext
|
|
|
25
25
|
const notes = new StyleNotes();
|
|
26
26
|
const kept = context.kept as Cx2StyleSource | undefined;
|
|
27
27
|
const style = cytoscapeStyleFromCx2(kept?.visualProperties, kept?.visualEditorProperties, notes);
|
|
28
|
-
return readDeclaredStyles(snapshot, context, style, "cx2.bypass", notes, "cx2"
|
|
28
|
+
return readDeclaredStyles(snapshot, context, style, "cx2.bypass", notes, "cx2", {
|
|
29
|
+
weightFrom: kept?.weightFrom ?? null,
|
|
30
|
+
});
|
|
29
31
|
}
|
|
@@ -1524,6 +1524,7 @@ async function keepStyleSource(prepared: Prepared, index: number, visualStyle: s
|
|
|
1524
1524
|
problem,
|
|
1525
1525
|
visualStyle,
|
|
1526
1526
|
network: { index, name: prepared.choices[index].name },
|
|
1527
|
+
weightFrom: prepared.inner.weightFrom,
|
|
1527
1528
|
};
|
|
1528
1529
|
prepared.report.keepForStyles(source);
|
|
1529
1530
|
}
|
|
@@ -13,15 +13,26 @@ import { STYLE_ISSUE } from "../../styles/codes.js";
|
|
|
13
13
|
import {
|
|
14
14
|
type CytoscapeMapping,
|
|
15
15
|
type CytoscapeStyle,
|
|
16
|
+
dropMismatchedKeys,
|
|
16
17
|
emptyCytoscapeStyle,
|
|
18
|
+
sharedColumnFallback,
|
|
17
19
|
typedKey,
|
|
20
|
+
weightColumnFallback,
|
|
18
21
|
} from "../../styles/cytoscape/mappings.js";
|
|
19
|
-
import {
|
|
22
|
+
import { type CytoscapeElements, edgeEnds, resolveCytoscape } from "../../styles/cytoscape/resolve.js";
|
|
20
23
|
import { cytoscapeRules } from "../../styles/cytoscape/translate.js";
|
|
21
24
|
import { StyleNotes } from "../../styles/notes.js";
|
|
22
25
|
import { dataCell } from "../../styles/plan/resolve.js";
|
|
23
26
|
import type { ImporterStyles, ReaderOutput, StyleReadContext, StyleTarget } from "../../styles/types.js";
|
|
24
|
-
import {
|
|
27
|
+
import {
|
|
28
|
+
exactFromBlock,
|
|
29
|
+
graphicsBypasses,
|
|
30
|
+
graphStyleOf,
|
|
31
|
+
hiddenToVisible,
|
|
32
|
+
hideWhatCytoscapeHides,
|
|
33
|
+
nonEmpty,
|
|
34
|
+
readXgmmlStyles,
|
|
35
|
+
} from "../xgmml/styles.js";
|
|
25
36
|
import { HIDDEN_COLUMN } from "./constants.js";
|
|
26
37
|
import type { XmlNode } from "./session.js";
|
|
27
38
|
|
|
@@ -40,6 +51,8 @@ export interface SessionStyleSource {
|
|
|
40
51
|
readonly visualStyle: string | null;
|
|
41
52
|
/** The network the import read: its index among the session's networks, and its name. */
|
|
42
53
|
readonly network: { readonly index: number; readonly name: string | null };
|
|
54
|
+
/** The edge attribute the import read as the weight (its `weightFrom`), or null. */
|
|
55
|
+
readonly weightFrom?: string | null;
|
|
43
56
|
}
|
|
44
57
|
|
|
45
58
|
/**
|
|
@@ -58,9 +71,11 @@ export function readSessionStyles(snapshot: GraphSnapshot, context: StyleReadCon
|
|
|
58
71
|
const out: Record<StyleTarget, ReaderOutput> = { node: { values: {} }, edge: { values: {} } };
|
|
59
72
|
for (const target of ["node", "edge"] as const) {
|
|
60
73
|
context.signal?.throwIfAborted();
|
|
61
|
-
|
|
74
|
+
if (target === "edge") {
|
|
75
|
+
weightColumnFallback(style.edge, kept?.weightFrom ?? null, snapshot.edges);
|
|
76
|
+
}
|
|
77
|
+
out[target] = sessionTargetStyles(snapshot, target, style, { notes, budget: context.budget }, out.node.values);
|
|
62
78
|
}
|
|
63
|
-
const background = cytoscapeBackground(style, notes);
|
|
64
79
|
return {
|
|
65
80
|
canonical: true,
|
|
66
81
|
dialect: "cytoscape",
|
|
@@ -68,7 +83,8 @@ export function readSessionStyles(snapshot: GraphSnapshot, context: StyleReadCon
|
|
|
68
83
|
units: "px",
|
|
69
84
|
node: out.node,
|
|
70
85
|
edge: out.edge,
|
|
71
|
-
|
|
86
|
+
// the view's own background (a bypass) over the style's
|
|
87
|
+
graph: graphStyleOf(snapshot, notes, style),
|
|
72
88
|
notes: notes.list(),
|
|
73
89
|
};
|
|
74
90
|
}
|
|
@@ -98,6 +114,7 @@ function sessionStyle(kept: SessionStyleSource | undefined, notes: StyleNotes):
|
|
|
98
114
|
* @param work - where problems are noted, and the work budget
|
|
99
115
|
* @param work.notes - where problems are noted
|
|
100
116
|
* @param work.budget - the work budget
|
|
117
|
+
* @param nodes - the nodes' values, when reading the edges
|
|
101
118
|
* @returns the reader output for the target
|
|
102
119
|
*/
|
|
103
120
|
function sessionTargetStyles(
|
|
@@ -105,10 +122,13 @@ function sessionTargetStyles(
|
|
|
105
122
|
target: StyleTarget,
|
|
106
123
|
style: CytoscapeStyle,
|
|
107
124
|
work: { readonly notes: StyleNotes; readonly budget: StyleReadContext["budget"] },
|
|
125
|
+
nodes: ReaderOutput["values"],
|
|
108
126
|
): ReaderOutput {
|
|
109
127
|
const { notes } = work;
|
|
110
128
|
const table = target === "node" ? snapshot.nodes : snapshot.edges;
|
|
111
129
|
const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
|
|
130
|
+
sharedColumnFallback(style[target], (column) => table.has(column));
|
|
131
|
+
dropMismatchedKeys(style[target], (column) => table.get(column)?.meta.origin?.type ?? null, notes, target);
|
|
112
132
|
for (const m of style[target].mappings.values()) {
|
|
113
133
|
if (!table.has(m.column)) {
|
|
114
134
|
notes.add(STYLE_ISSUE.MAPPING_COLUMN_MISSING, target, m.column, { sample: m.kind });
|
|
@@ -118,9 +138,11 @@ function sessionTargetStyles(
|
|
|
118
138
|
count: n,
|
|
119
139
|
value: (column, i) => (table.has(column) ? dataCell(table, column, i) : null),
|
|
120
140
|
bypasses: graphicsBypasses(table, target, n, notes),
|
|
141
|
+
...(target === "edge" ? { ends: edgeEnds(snapshot, nodes) } : {}),
|
|
121
142
|
};
|
|
122
143
|
const values = resolveCytoscape(target, style, elements, work);
|
|
123
144
|
hiddenToVisible(table, HIDDEN_COLUMN, n, values);
|
|
145
|
+
hideWhatCytoscapeHides(snapshot, target, nodes, values);
|
|
124
146
|
// a session graphty wrote: a value its style writes as the nearest Cytoscape value is the block's
|
|
125
147
|
exactFromBlock(snapshot, target, values);
|
|
126
148
|
const { rules, columns } = cytoscapeRules(target, style, elements, work);
|