@graphty/graph-io 0.3.25 → 0.3.27
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/README.md +49 -414
- package/dist/chunks/children-CL3Cy0ez.js.map +1 -1
- package/dist/chunks/choose-DrXtu_96.js +56 -0
- package/dist/chunks/choose-DrXtu_96.js.map +1 -0
- package/dist/chunks/constants-ikG85dT8.js +231 -0
- package/dist/chunks/constants-ikG85dT8.js.map +1 -0
- package/dist/chunks/{escape-B-tkk_Cl.js → escape-D1HPTUrP.js} +390 -99
- package/dist/chunks/escape-D1HPTUrP.js.map +1 -0
- package/dist/chunks/export-CHd4tQE2.js +4333 -0
- package/dist/chunks/export-CHd4tQE2.js.map +1 -0
- package/dist/chunks/{importer-eUREhBGj.js → exporter-D23CKNqF.js} +4969 -3201
- package/dist/chunks/exporter-D23CKNqF.js.map +1 -0
- package/dist/chunks/{exporter-DIeGJXAZ.js → exporter-DfWTgrti.js} +23 -21
- package/dist/chunks/exporter-DfWTgrti.js.map +1 -0
- package/dist/chunks/exporter-DhtW6FxK.js +3465 -0
- package/dist/chunks/exporter-DhtW6FxK.js.map +1 -0
- package/dist/chunks/{exporter-BGrsWamJ.js → exporter-IHv4nkCm.js} +38 -229
- package/dist/chunks/exporter-IHv4nkCm.js.map +1 -0
- package/dist/chunks/{importer-BWY2FFc5.js → importer-B1wmPQjr.js} +255 -77
- package/dist/chunks/importer-B1wmPQjr.js.map +1 -0
- package/dist/chunks/{importer-D_e7e7LX.js → importer-B2W_58pz.js} +399 -146
- package/dist/chunks/importer-B2W_58pz.js.map +1 -0
- package/dist/chunks/importer-BSALvkui.js +2811 -0
- package/dist/chunks/importer-BSALvkui.js.map +1 -0
- package/dist/chunks/{importer-vi3bSdtw.js → importer-BVRE--Un.js} +510 -77
- package/dist/chunks/importer-BVRE--Un.js.map +1 -0
- package/dist/chunks/{importer-DET1tg6s.js → importer-CIAzt-wo.js} +1689 -312
- package/dist/chunks/importer-CIAzt-wo.js.map +1 -0
- package/dist/chunks/{importer-DIrbbnAf.js → importer-DpEW5zeG.js} +585 -226
- package/dist/chunks/importer-DpEW5zeG.js.map +1 -0
- package/dist/chunks/{importer-zGLo8Dg_.js → importer-z_FL4VMb.js} +488 -161
- package/dist/chunks/importer-z_FL4VMb.js.map +1 -0
- package/dist/chunks/json-elements-BAmNBZok.js +1225 -0
- package/dist/chunks/json-elements-BAmNBZok.js.map +1 -0
- package/dist/chunks/ontology-export-Bab4eUA8.js +357 -0
- package/dist/chunks/ontology-export-Bab4eUA8.js.map +1 -0
- package/dist/chunks/{records-dbRkxwaq.js → records-CdlvL4RO.js} +298 -114
- package/dist/chunks/records-CdlvL4RO.js.map +1 -0
- package/dist/chunks/{text-Dr0Ifpag.js → text-DzXjAiTl.js} +29 -11
- package/dist/chunks/text-DzXjAiTl.js.map +1 -0
- package/dist/chunks/{writer-C7flM-Ih.js → writer-DxjgHwSe.js} +19 -1
- package/dist/chunks/writer-DxjgHwSe.js.map +1 -0
- package/dist/csv.js +952 -262
- package/dist/csv.js.map +1 -1
- package/dist/cx.js +6 -3
- package/dist/cx2.js +2 -2
- package/dist/cys.js +6 -3
- package/dist/dot.js +1 -1
- package/dist/gexf.js +554 -122
- package/dist/gexf.js.map +1 -1
- package/dist/gml.js +344 -87
- package/dist/gml.js.map +1 -1
- package/dist/graph-io.js +1105 -213
- package/dist/graph-io.js.map +1 -1
- package/dist/graphml.js +3 -2
- package/dist/graphml.js.map +1 -1
- package/dist/json.js +3 -2
- package/dist/neo4j.js +565 -158
- package/dist/neo4j.js.map +1 -1
- package/dist/obo.js +6 -3
- package/dist/pajek.js +1 -1
- package/dist/src/children.d.ts +18 -6
- package/dist/src/children.d.ts.map +1 -1
- package/dist/src/children.js +6 -3
- package/dist/src/children.js.map +1 -1
- package/dist/src/common/attributes.d.ts +29 -11
- package/dist/src/common/attributes.d.ts.map +1 -1
- package/dist/src/common/attributes.js +25 -7
- package/dist/src/common/attributes.js.map +1 -1
- package/dist/src/common/cell-budget.d.ts +9 -2
- package/dist/src/common/cell-budget.d.ts.map +1 -1
- package/dist/src/common/cell-budget.js +11 -3
- package/dist/src/common/cell-budget.js.map +1 -1
- package/dist/src/common/choose.d.ts +19 -0
- package/dist/src/common/choose.d.ts.map +1 -0
- package/dist/src/common/choose.js +72 -0
- package/dist/src/common/choose.js.map +1 -0
- package/dist/src/common/codes.d.ts +456 -66
- package/dist/src/common/codes.d.ts.map +1 -1
- package/dist/src/common/codes.js +458 -66
- package/dist/src/common/codes.js.map +1 -1
- package/dist/src/common/compare.d.ts +81 -0
- package/dist/src/common/compare.d.ts.map +1 -0
- package/dist/src/common/compare.js +394 -0
- package/dist/src/common/compare.js.map +1 -0
- package/dist/src/common/cx-export.d.ts +123 -0
- package/dist/src/common/cx-export.d.ts.map +1 -0
- package/dist/src/common/cx-export.js +334 -0
- package/dist/src/common/cx-export.js.map +1 -0
- package/dist/src/common/declared-types.d.ts +22 -2
- package/dist/src/common/declared-types.d.ts.map +1 -1
- package/dist/src/common/declared-types.js +21 -3
- package/dist/src/common/declared-types.js.map +1 -1
- package/dist/src/common/direction.d.ts +74 -50
- package/dist/src/common/direction.d.ts.map +1 -1
- package/dist/src/common/direction.js +47 -27
- package/dist/src/common/direction.js.map +1 -1
- package/dist/src/common/escape.d.ts +21 -9
- package/dist/src/common/escape.d.ts.map +1 -1
- package/dist/src/common/escape.js +39 -22
- package/dist/src/common/escape.js.map +1 -1
- package/dist/src/common/export.d.ts +144 -32
- package/dist/src/common/export.d.ts.map +1 -1
- package/dist/src/common/export.js +216 -42
- package/dist/src/common/export.js.map +1 -1
- package/dist/src/common/format.d.ts +23 -1
- package/dist/src/common/format.d.ts.map +1 -1
- package/dist/src/common/format.js +26 -1
- package/dist/src/common/format.js.map +1 -1
- package/dist/src/common/ids.d.ts +9 -2
- package/dist/src/common/ids.d.ts.map +1 -1
- package/dist/src/common/ids.js +6 -2
- package/dist/src/common/ids.js.map +1 -1
- package/dist/src/common/input.d.ts +122 -28
- package/dist/src/common/input.d.ts.map +1 -1
- package/dist/src/common/input.js +890 -124
- package/dist/src/common/input.js.map +1 -1
- package/dist/src/common/json-elements.d.ts +144 -20
- package/dist/src/common/json-elements.d.ts.map +1 -1
- package/dist/src/common/json-elements.js +869 -189
- package/dist/src/common/json-elements.js.map +1 -1
- package/dist/src/common/line-format.d.ts +90 -0
- package/dist/src/common/line-format.d.ts.map +1 -0
- package/dist/src/common/line-format.js +185 -0
- package/dist/src/common/line-format.js.map +1 -0
- package/dist/src/common/lists.d.ts +6 -1
- package/dist/src/common/lists.d.ts.map +1 -1
- package/dist/src/common/lists.js +3 -1
- package/dist/src/common/lists.js.map +1 -1
- package/dist/src/common/ontology-export.d.ts +167 -0
- package/dist/src/common/ontology-export.d.ts.map +1 -0
- package/dist/src/common/ontology-export.js +359 -0
- package/dist/src/common/ontology-export.js.map +1 -0
- package/dist/src/common/ontology.d.ts +25 -3
- package/dist/src/common/ontology.d.ts.map +1 -1
- package/dist/src/common/ontology.js +30 -9
- package/dist/src/common/ontology.js.map +1 -1
- package/dist/src/common/options.d.ts +62 -12
- package/dist/src/common/options.d.ts.map +1 -1
- package/dist/src/common/options.js +89 -11
- package/dist/src/common/options.js.map +1 -1
- package/dist/src/common/plural.d.ts +31 -0
- package/dist/src/common/plural.d.ts.map +1 -0
- package/dist/src/common/plural.js +46 -0
- package/dist/src/common/plural.js.map +1 -0
- package/dist/src/common/report.d.ts +72 -14
- package/dist/src/common/report.d.ts.map +1 -1
- package/dist/src/common/report.js +146 -22
- package/dist/src/common/report.js.map +1 -1
- package/dist/src/common/temporal.d.ts +22 -5
- package/dist/src/common/temporal.d.ts.map +1 -1
- package/dist/src/common/temporal.js +13 -2
- package/dist/src/common/temporal.js.map +1 -1
- package/dist/src/common/text.d.ts +39 -23
- package/dist/src/common/text.d.ts.map +1 -1
- package/dist/src/common/text.js +51 -21
- package/dist/src/common/text.js.map +1 -1
- package/dist/src/common/weights.d.ts +37 -4
- package/dist/src/common/weights.d.ts.map +1 -1
- package/dist/src/common/weights.js +61 -2
- package/dist/src/common/weights.js.map +1 -1
- package/dist/src/common/writer.d.ts +19 -3
- package/dist/src/common/writer.d.ts.map +1 -1
- package/dist/src/common/writer.js +30 -2
- package/dist/src/common/writer.js.map +1 -1
- package/dist/src/common/xml.d.ts +125 -9
- package/dist/src/common/xml.d.ts.map +1 -1
- package/dist/src/common/xml.js +402 -85
- package/dist/src/common/xml.js.map +1 -1
- package/dist/src/common/zip.d.ts +44 -4
- package/dist/src/common/zip.d.ts.map +1 -1
- package/dist/src/common/zip.js +134 -5
- package/dist/src/common/zip.js.map +1 -1
- package/dist/src/formats/csv/exporter.d.ts +80 -24
- package/dist/src/formats/csv/exporter.d.ts.map +1 -1
- package/dist/src/formats/csv/exporter.js +146 -33
- package/dist/src/formats/csv/exporter.js.map +1 -1
- package/dist/src/formats/csv/header.d.ts +38 -9
- package/dist/src/formats/csv/header.d.ts.map +1 -1
- package/dist/src/formats/csv/header.js +46 -10
- package/dist/src/formats/csv/header.js.map +1 -1
- package/dist/src/formats/csv/importer.d.ts +187 -37
- package/dist/src/formats/csv/importer.d.ts.map +1 -1
- package/dist/src/formats/csv/importer.js +835 -204
- package/dist/src/formats/csv/importer.js.map +1 -1
- package/dist/src/formats/csv/index.d.ts +100 -19
- package/dist/src/formats/csv/index.d.ts.map +1 -1
- package/dist/src/formats/csv/index.js +94 -21
- package/dist/src/formats/csv/index.js.map +1 -1
- package/dist/src/formats/csv/records.d.ts +95 -10
- package/dist/src/formats/csv/records.d.ts.map +1 -1
- package/dist/src/formats/csv/records.js +333 -122
- package/dist/src/formats/csv/records.js.map +1 -1
- package/dist/src/formats/csv/values.d.ts +1 -0
- package/dist/src/formats/csv/values.d.ts.map +1 -1
- package/dist/src/formats/csv/values.js +1 -0
- package/dist/src/formats/csv/values.js.map +1 -1
- package/dist/src/formats/cx/exporter.d.ts +102 -0
- package/dist/src/formats/cx/exporter.d.ts.map +1 -0
- package/dist/src/formats/cx/exporter.js +1217 -0
- package/dist/src/formats/cx/exporter.js.map +1 -0
- package/dist/src/formats/cx/importer.d.ts +79 -32
- package/dist/src/formats/cx/importer.d.ts.map +1 -1
- package/dist/src/formats/cx/importer.js +682 -287
- package/dist/src/formats/cx/importer.js.map +1 -1
- package/dist/src/formats/cx/index.d.ts +4 -3
- package/dist/src/formats/cx/index.d.ts.map +1 -1
- package/dist/src/formats/cx/index.js +4 -3
- package/dist/src/formats/cx/index.js.map +1 -1
- package/dist/src/formats/cx2/exporter.d.ts +29 -11
- package/dist/src/formats/cx2/exporter.d.ts.map +1 -1
- package/dist/src/formats/cx2/exporter.js +39 -268
- package/dist/src/formats/cx2/exporter.js.map +1 -1
- package/dist/src/formats/cx2/importer.d.ts +78 -28
- package/dist/src/formats/cx2/importer.d.ts.map +1 -1
- package/dist/src/formats/cx2/importer.js +227 -80
- package/dist/src/formats/cx2/importer.js.map +1 -1
- package/dist/src/formats/cx2/index.d.ts +2 -1
- package/dist/src/formats/cx2/index.d.ts.map +1 -1
- package/dist/src/formats/cx2/index.js +2 -1
- package/dist/src/formats/cx2/index.js.map +1 -1
- package/dist/src/formats/cys/constants.d.ts +66 -17
- package/dist/src/formats/cys/constants.d.ts.map +1 -1
- package/dist/src/formats/cys/constants.js +59 -18
- package/dist/src/formats/cys/constants.js.map +1 -1
- package/dist/src/formats/cys/exporter.d.ts +118 -0
- package/dist/src/formats/cys/exporter.d.ts.map +1 -0
- package/dist/src/formats/cys/exporter.js +1072 -0
- package/dist/src/formats/cys/exporter.js.map +1 -0
- package/dist/src/formats/cys/importer.d.ts +22 -8
- package/dist/src/formats/cys/importer.d.ts.map +1 -1
- package/dist/src/formats/cys/importer.js +510 -149
- package/dist/src/formats/cys/importer.js.map +1 -1
- package/dist/src/formats/cys/index.d.ts +4 -2
- package/dist/src/formats/cys/index.d.ts.map +1 -1
- package/dist/src/formats/cys/index.js +4 -2
- package/dist/src/formats/cys/index.js.map +1 -1
- package/dist/src/formats/cys/session.d.ts +46 -7
- package/dist/src/formats/cys/session.d.ts.map +1 -1
- package/dist/src/formats/cys/session.js +101 -27
- package/dist/src/formats/cys/session.js.map +1 -1
- package/dist/src/formats/cys/tables.d.ts +9 -2
- package/dist/src/formats/cys/tables.d.ts.map +1 -1
- package/dist/src/formats/cys/tables.js +29 -7
- package/dist/src/formats/cys/tables.js.map +1 -1
- package/dist/src/formats/dot/exporter.d.ts +42 -14
- package/dist/src/formats/dot/exporter.d.ts.map +1 -1
- package/dist/src/formats/dot/exporter.js +56 -29
- package/dist/src/formats/dot/exporter.js.map +1 -1
- package/dist/src/formats/dot/importer.d.ts +91 -29
- package/dist/src/formats/dot/importer.d.ts.map +1 -1
- package/dist/src/formats/dot/importer.js +190 -39
- package/dist/src/formats/dot/importer.js.map +1 -1
- package/dist/src/formats/dot/index.d.ts +2 -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/names.d.ts +44 -11
- package/dist/src/formats/dot/names.d.ts.map +1 -1
- package/dist/src/formats/dot/names.js +44 -11
- package/dist/src/formats/dot/names.js.map +1 -1
- package/dist/src/formats/dot/tokenizer.d.ts +9 -2
- package/dist/src/formats/dot/tokenizer.d.ts.map +1 -1
- package/dist/src/formats/dot/tokenizer.js +20 -5
- package/dist/src/formats/dot/tokenizer.js.map +1 -1
- package/dist/src/formats/gexf/exporter.d.ts +46 -15
- package/dist/src/formats/gexf/exporter.d.ts.map +1 -1
- package/dist/src/formats/gexf/exporter.js +45 -15
- package/dist/src/formats/gexf/exporter.js.map +1 -1
- package/dist/src/formats/gexf/importer.d.ts +87 -23
- package/dist/src/formats/gexf/importer.d.ts.map +1 -1
- package/dist/src/formats/gexf/importer.js +471 -90
- package/dist/src/formats/gexf/importer.js.map +1 -1
- package/dist/src/formats/gexf/index.d.ts +84 -21
- package/dist/src/formats/gexf/index.d.ts.map +1 -1
- package/dist/src/formats/gexf/index.js +80 -23
- package/dist/src/formats/gexf/index.js.map +1 -1
- package/dist/src/formats/gexf/schema.d.ts +67 -15
- package/dist/src/formats/gexf/schema.d.ts.map +1 -1
- package/dist/src/formats/gexf/schema.js +59 -13
- package/dist/src/formats/gexf/schema.js.map +1 -1
- package/dist/src/formats/gml/exporter.d.ts +69 -21
- package/dist/src/formats/gml/exporter.d.ts.map +1 -1
- package/dist/src/formats/gml/exporter.js +74 -29
- package/dist/src/formats/gml/exporter.js.map +1 -1
- package/dist/src/formats/gml/importer.d.ts +116 -25
- package/dist/src/formats/gml/importer.d.ts.map +1 -1
- package/dist/src/formats/gml/importer.js +290 -61
- package/dist/src/formats/gml/importer.js.map +1 -1
- package/dist/src/formats/gml/index.d.ts +87 -24
- package/dist/src/formats/gml/index.d.ts.map +1 -1
- package/dist/src/formats/gml/index.js +79 -26
- package/dist/src/formats/gml/index.js.map +1 -1
- package/dist/src/formats/gml/syntax.d.ts +67 -18
- package/dist/src/formats/gml/syntax.d.ts.map +1 -1
- package/dist/src/formats/gml/syntax.js +110 -28
- package/dist/src/formats/gml/syntax.js.map +1 -1
- package/dist/src/formats/graphml/constants.d.ts +174 -44
- package/dist/src/formats/graphml/constants.d.ts.map +1 -1
- package/dist/src/formats/graphml/constants.js +165 -44
- package/dist/src/formats/graphml/constants.js.map +1 -1
- package/dist/src/formats/graphml/exporter.d.ts +17 -9
- package/dist/src/formats/graphml/exporter.d.ts.map +1 -1
- package/dist/src/formats/graphml/exporter.js +33 -12
- package/dist/src/formats/graphml/exporter.js.map +1 -1
- package/dist/src/formats/graphml/importer.d.ts +19 -7
- package/dist/src/formats/graphml/importer.d.ts.map +1 -1
- package/dist/src/formats/graphml/importer.js +466 -39
- package/dist/src/formats/graphml/importer.js.map +1 -1
- package/dist/src/formats/graphml/index.d.ts +2 -1
- package/dist/src/formats/graphml/index.d.ts.map +1 -1
- package/dist/src/formats/graphml/index.js +2 -1
- package/dist/src/formats/graphml/index.js.map +1 -1
- package/dist/src/formats/graphml/tree.d.ts +6 -2
- package/dist/src/formats/graphml/tree.d.ts.map +1 -1
- package/dist/src/formats/graphml/tree.js +6 -2
- package/dist/src/formats/graphml/tree.js.map +1 -1
- package/dist/src/formats/graphml/yfiles.d.ts +8 -3
- package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
- package/dist/src/formats/graphml/yfiles.js +36 -15
- package/dist/src/formats/graphml/yfiles.js.map +1 -1
- package/dist/src/formats/json/dialect.d.ts +88 -24
- package/dist/src/formats/json/dialect.d.ts.map +1 -1
- package/dist/src/formats/json/dialect.js +109 -19
- package/dist/src/formats/json/dialect.js.map +1 -1
- package/dist/src/formats/json/exporter.d.ts +134 -22
- package/dist/src/formats/json/exporter.d.ts.map +1 -1
- package/dist/src/formats/json/exporter.js +135 -54
- package/dist/src/formats/json/exporter.js.map +1 -1
- package/dist/src/formats/json/importer.d.ts +173 -52
- package/dist/src/formats/json/importer.d.ts.map +1 -1
- package/dist/src/formats/json/importer.js +899 -220
- package/dist/src/formats/json/importer.js.map +1 -1
- package/dist/src/formats/json/index.d.ts +3 -2
- package/dist/src/formats/json/index.d.ts.map +1 -1
- package/dist/src/formats/json/index.js +3 -2
- package/dist/src/formats/json/index.js.map +1 -1
- package/dist/src/formats/json/obographs-export.d.ts +68 -0
- package/dist/src/formats/json/obographs-export.d.ts.map +1 -0
- package/dist/src/formats/json/obographs-export.js +941 -0
- package/dist/src/formats/json/obographs-export.js.map +1 -0
- package/dist/src/formats/json/obographs.d.ts +26 -0
- package/dist/src/formats/json/obographs.d.ts.map +1 -1
- package/dist/src/formats/json/obographs.js +297 -80
- package/dist/src/formats/json/obographs.js.map +1 -1
- package/dist/src/formats/neo4j/exporter.d.ts +109 -21
- package/dist/src/formats/neo4j/exporter.d.ts.map +1 -1
- package/dist/src/formats/neo4j/exporter.js +239 -86
- package/dist/src/formats/neo4j/exporter.js.map +1 -1
- package/dist/src/formats/neo4j/header.d.ts +17 -4
- package/dist/src/formats/neo4j/header.d.ts.map +1 -1
- package/dist/src/formats/neo4j/header.js +36 -4
- package/dist/src/formats/neo4j/header.js.map +1 -1
- package/dist/src/formats/neo4j/importer.d.ts +107 -27
- package/dist/src/formats/neo4j/importer.d.ts.map +1 -1
- package/dist/src/formats/neo4j/importer.js +415 -63
- package/dist/src/formats/neo4j/importer.js.map +1 -1
- package/dist/src/formats/neo4j/index.d.ts +73 -23
- package/dist/src/formats/neo4j/index.d.ts.map +1 -1
- package/dist/src/formats/neo4j/index.js +65 -25
- package/dist/src/formats/neo4j/index.js.map +1 -1
- package/dist/src/formats/obo/exporter.d.ts +150 -0
- package/dist/src/formats/obo/exporter.d.ts.map +1 -0
- package/dist/src/formats/obo/exporter.js +1736 -0
- package/dist/src/formats/obo/exporter.js.map +1 -0
- package/dist/src/formats/obo/importer.d.ts +95 -19
- package/dist/src/formats/obo/importer.d.ts.map +1 -1
- package/dist/src/formats/obo/importer.js +475 -104
- package/dist/src/formats/obo/importer.js.map +1 -1
- package/dist/src/formats/obo/index.d.ts +6 -3
- package/dist/src/formats/obo/index.d.ts.map +1 -1
- package/dist/src/formats/obo/index.js +6 -3
- package/dist/src/formats/obo/index.js.map +1 -1
- package/dist/src/formats/obo/syntax.d.ts +108 -4
- package/dist/src/formats/obo/syntax.d.ts.map +1 -1
- package/dist/src/formats/obo/syntax.js +211 -34
- package/dist/src/formats/obo/syntax.js.map +1 -1
- package/dist/src/formats/pajek/exporter.d.ts +54 -16
- package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
- package/dist/src/formats/pajek/exporter.js +67 -35
- package/dist/src/formats/pajek/exporter.js.map +1 -1
- package/dist/src/formats/pajek/importer.d.ts +84 -22
- package/dist/src/formats/pajek/importer.d.ts.map +1 -1
- package/dist/src/formats/pajek/importer.js +303 -83
- package/dist/src/formats/pajek/importer.js.map +1 -1
- package/dist/src/formats/pajek/index.d.ts +2 -1
- package/dist/src/formats/pajek/index.d.ts.map +1 -1
- package/dist/src/formats/pajek/index.js +2 -1
- package/dist/src/formats/pajek/index.js.map +1 -1
- package/dist/src/formats/pajek/syntax.d.ts +77 -14
- package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
- package/dist/src/formats/pajek/syntax.js +186 -54
- package/dist/src/formats/pajek/syntax.js.map +1 -1
- package/dist/src/formats/xgmml/columns.d.ts +1 -0
- package/dist/src/formats/xgmml/columns.d.ts.map +1 -1
- package/dist/src/formats/xgmml/columns.js +4 -0
- package/dist/src/formats/xgmml/columns.js.map +1 -1
- package/dist/src/formats/xgmml/constants.d.ts +186 -56
- package/dist/src/formats/xgmml/constants.d.ts.map +1 -1
- package/dist/src/formats/xgmml/constants.js +181 -57
- package/dist/src/formats/xgmml/constants.js.map +1 -1
- package/dist/src/formats/xgmml/document.d.ts +65 -11
- package/dist/src/formats/xgmml/document.d.ts.map +1 -1
- package/dist/src/formats/xgmml/document.js +157 -28
- package/dist/src/formats/xgmml/document.js.map +1 -1
- package/dist/src/formats/xgmml/emit.d.ts +61 -3
- package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
- package/dist/src/formats/xgmml/emit.js +129 -26
- package/dist/src/formats/xgmml/emit.js.map +1 -1
- package/dist/src/formats/xgmml/exporter.d.ts +13 -6
- package/dist/src/formats/xgmml/exporter.d.ts.map +1 -1
- package/dist/src/formats/xgmml/exporter.js +21 -22
- package/dist/src/formats/xgmml/exporter.js.map +1 -1
- package/dist/src/formats/xgmml/importer.d.ts +33 -12
- package/dist/src/formats/xgmml/importer.d.ts.map +1 -1
- package/dist/src/formats/xgmml/importer.js +35 -72
- package/dist/src/formats/xgmml/importer.js.map +1 -1
- package/dist/src/formats/xgmml/index.d.ts +1 -0
- package/dist/src/formats/xgmml/index.d.ts.map +1 -1
- package/dist/src/formats/xgmml/index.js +1 -0
- package/dist/src/formats/xgmml/index.js.map +1 -1
- package/dist/src/formats/xgmml/values.d.ts +8 -1
- package/dist/src/formats/xgmml/values.d.ts.map +1 -1
- package/dist/src/formats/xgmml/values.js +8 -3
- package/dist/src/formats/xgmml/values.js.map +1 -1
- package/dist/src/index.d.ts +23 -18
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +28 -16
- package/dist/src/index.js.map +1 -1
- package/dist/src/registry.d.ts +478 -92
- package/dist/src/registry.d.ts.map +1 -1
- package/dist/src/registry.js +807 -88
- package/dist/src/registry.js.map +1 -1
- package/dist/src/sniff.d.ts +61 -19
- package/dist/src/sniff.d.ts.map +1 -1
- package/dist/src/sniff.js +121 -29
- package/dist/src/sniff.js.map +1 -1
- package/dist/src/types.d.ts +362 -112
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +28 -7
- package/dist/src/types.js.map +1 -1
- package/dist/xgmml.js +2 -2
- package/docs/samples/README.md +25 -0
- package/docs/samples/got-edges.csv +353 -0
- package/docs/samples/got-network.graphml +1384 -0
- package/docs/samples/got-nodes.csv +108 -0
- package/docs/samples/got.cx +930 -0
- package/docs/samples/got.cx2 +465 -0
- package/docs/samples/got.gexf +471 -0
- package/docs/samples/got.gml +2650 -0
- package/docs/samples/got.json +2546 -0
- package/docs/samples/got.net +461 -0
- package/docs/samples/movies-nodes.csv +9 -0
- package/docs/samples/movies-rels.csv +8 -0
- package/docs/samples/networks.cys +0 -0
- package/docs/samples/proteins.xgmml +9 -0
- package/docs/samples/teams.gv +24 -0
- package/docs/samples/vehicles.obo +25 -0
- package/package.json +9 -4
- package/src/children.ts +18 -6
- package/src/common/attributes.ts +29 -11
- package/src/common/cell-budget.ts +11 -3
- package/src/common/choose.ts +89 -0
- package/src/common/codes.ts +490 -66
- package/src/common/compare.ts +472 -0
- package/src/common/cx-export.ts +432 -0
- package/src/common/declared-types.ts +40 -6
- package/src/common/direction.ts +78 -51
- package/src/common/escape.ts +39 -22
- package/src/common/export.ts +284 -47
- package/src/common/format.ts +30 -1
- package/src/common/ids.ts +14 -3
- package/src/common/input.ts +1057 -134
- package/src/common/json-elements.ts +1035 -199
- package/src/common/line-format.ts +249 -0
- package/src/common/lists.ts +7 -2
- package/src/common/ontology-export.ts +461 -0
- package/src/common/ontology.ts +31 -9
- package/src/common/options.ts +110 -15
- package/src/common/plural.ts +49 -0
- package/src/common/report.ts +168 -25
- package/src/common/temporal.ts +22 -5
- package/src/common/text.ts +62 -23
- package/src/common/weights.ts +74 -4
- package/src/common/writer.ts +37 -3
- package/src/common/xml.ts +479 -90
- package/src/common/zip.ts +169 -7
- package/src/formats/csv/exporter.ts +202 -47
- package/src/formats/csv/header.ts +50 -11
- package/src/formats/csv/importer.ts +1133 -245
- package/src/formats/csv/index.ts +106 -19
- package/src/formats/csv/records.ts +396 -122
- package/src/formats/csv/values.ts +1 -0
- package/src/formats/cx/exporter.ts +1483 -0
- package/src/formats/cx/importer.ts +890 -302
- package/src/formats/cx/index.ts +4 -3
- package/src/formats/cx2/exporter.ts +62 -339
- package/src/formats/cx2/importer.ts +318 -87
- package/src/formats/cx2/index.ts +2 -1
- package/src/formats/cys/constants.ts +62 -17
- package/src/formats/cys/exporter.ts +1368 -0
- package/src/formats/cys/importer.ts +659 -157
- package/src/formats/cys/index.ts +4 -2
- package/src/formats/cys/session.ts +142 -34
- package/src/formats/cys/tables.ts +47 -9
- package/src/formats/dot/exporter.ts +83 -37
- package/src/formats/dot/importer.ts +248 -54
- package/src/formats/dot/index.ts +2 -1
- package/src/formats/dot/names.ts +44 -11
- package/src/formats/dot/tokenizer.ts +25 -6
- package/src/formats/gexf/exporter.ts +57 -18
- package/src/formats/gexf/importer.ts +636 -105
- package/src/formats/gexf/index.ts +90 -21
- package/src/formats/gexf/schema.ts +67 -15
- package/src/formats/gml/exporter.ts +90 -36
- package/src/formats/gml/importer.ts +388 -67
- package/src/formats/gml/index.ts +85 -24
- package/src/formats/gml/syntax.ts +113 -28
- package/src/formats/graphml/constants.ts +178 -44
- package/src/formats/graphml/exporter.ts +52 -18
- package/src/formats/graphml/importer.ts +640 -60
- package/src/formats/graphml/index.ts +2 -1
- package/src/formats/graphml/tree.ts +6 -2
- package/src/formats/graphml/yfiles.ts +37 -15
- package/src/formats/json/dialect.ts +128 -29
- package/src/formats/json/exporter.ts +205 -68
- package/src/formats/json/importer.ts +1163 -253
- package/src/formats/json/index.ts +3 -1
- package/src/formats/json/obographs-export.ts +1197 -0
- package/src/formats/json/obographs.ts +353 -92
- package/src/formats/neo4j/exporter.ts +321 -102
- package/src/formats/neo4j/header.ts +44 -6
- package/src/formats/neo4j/importer.ts +512 -73
- package/src/formats/neo4j/index.ts +75 -23
- package/src/formats/obo/exporter.ts +2210 -0
- package/src/formats/obo/importer.ts +622 -109
- package/src/formats/obo/index.ts +6 -3
- package/src/formats/obo/syntax.ts +232 -37
- package/src/formats/pajek/exporter.ts +90 -42
- package/src/formats/pajek/importer.ts +407 -93
- package/src/formats/pajek/index.ts +2 -1
- package/src/formats/pajek/syntax.ts +216 -55
- package/src/formats/xgmml/columns.ts +10 -0
- package/src/formats/xgmml/constants.ts +183 -56
- package/src/formats/xgmml/document.ts +212 -34
- package/src/formats/xgmml/emit.ts +175 -34
- package/src/formats/xgmml/exporter.ts +36 -28
- package/src/formats/xgmml/importer.ts +64 -86
- package/src/formats/xgmml/index.ts +1 -0
- package/src/formats/xgmml/values.ts +12 -4
- package/src/index.ts +81 -11
- package/src/registry.ts +1121 -135
- package/src/sniff.ts +163 -32
- package/src/types.ts +385 -114
- package/dist/chunks/escape-B-tkk_Cl.js.map +0 -1
- package/dist/chunks/export-Bh60Dv-n.js +0 -582
- package/dist/chunks/export-Bh60Dv-n.js.map +0 -1
- package/dist/chunks/exporter-BGrsWamJ.js.map +0 -1
- package/dist/chunks/exporter-DIeGJXAZ.js.map +0 -1
- package/dist/chunks/importer-BWY2FFc5.js.map +0 -1
- package/dist/chunks/importer-DD-xv9_Y.js +0 -1471
- package/dist/chunks/importer-DD-xv9_Y.js.map +0 -1
- package/dist/chunks/importer-DET1tg6s.js.map +0 -1
- package/dist/chunks/importer-DEcKhsmQ.js +0 -1614
- package/dist/chunks/importer-DEcKhsmQ.js.map +0 -1
- package/dist/chunks/importer-DIrbbnAf.js.map +0 -1
- package/dist/chunks/importer-D_e7e7LX.js.map +0 -1
- package/dist/chunks/importer-eUREhBGj.js.map +0 -1
- package/dist/chunks/importer-vi3bSdtw.js.map +0 -1
- package/dist/chunks/importer-zGLo8Dg_.js.map +0 -1
- package/dist/chunks/json-elements-DDS8N2Dd.js +0 -779
- package/dist/chunks/json-elements-DDS8N2Dd.js.map +0 -1
- package/dist/chunks/ontology-BnrJ4I98.js +0 -113
- package/dist/chunks/ontology-BnrJ4I98.js.map +0 -1
- package/dist/chunks/records-dbRkxwaq.js.map +0 -1
- package/dist/chunks/report-B1z4WT9e.js +0 -2372
- package/dist/chunks/report-B1z4WT9e.js.map +0 -1
- package/dist/chunks/text-Dr0Ifpag.js.map +0 -1
- package/dist/chunks/weights-Dzba96G3.js +0 -176
- package/dist/chunks/weights-Dzba96G3.js.map +0 -1
- package/dist/chunks/writer-C7flM-Ih.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The JSON exporter (design section 8.5): one GraphExporter with a `dialect` option writing
|
|
3
3
|
* NetworkX node-link (the default), d3 (`links`, optional index endpoints), JSON Graph Format v2,
|
|
4
|
-
* Cytoscape.js elements, graphology
|
|
4
|
+
* Cytoscape.js elements, graphology serialization or vis.js. The dialect defaults to the one the
|
|
5
5
|
* importer recorded under `meta.extra.json` so a JSON file re-exported as JSON keeps its shape,
|
|
6
6
|
* and to node-link for a snapshot from any other source.
|
|
7
7
|
*
|
|
@@ -20,18 +20,21 @@
|
|
|
20
20
|
|
|
21
21
|
import { type Column, GraphFormatError, type GraphSnapshot, INVALID_INDEX, type NodeId } from "@graphty/graph-format";
|
|
22
22
|
|
|
23
|
+
import { DIRECTION_DROPPED_CODE, NODE_ORDER_CODE, NONFINITE_AS_NULL_CODE } from "../../common/codes.js";
|
|
23
24
|
import { type PairFolding, pairFolding } from "../../common/direction.js";
|
|
24
25
|
import { checkCapabilities, countMixedEdges, LOSS } from "../../common/export.js";
|
|
25
26
|
import { formatF32, formatF64 } from "../../common/format.js";
|
|
26
27
|
import { flipY } from "../../common/json-elements.js";
|
|
27
|
-
import { type ResolvedExportOptions, resolveExportOptions } from "../../common/options.js";
|
|
28
|
+
import { otherFormatDialect, type ResolvedExportOptions, resolveExportOptions } from "../../common/options.js";
|
|
29
|
+
import { agree, plural } from "../../common/plural.js";
|
|
28
30
|
import { explicitWeights } from "../../common/weights.js";
|
|
29
|
-
import { encodeChunks, joinText } from "../../common/writer.js";
|
|
31
|
+
import { encodeChunks, indentUnit, joinText } from "../../common/writer.js";
|
|
30
32
|
import { type CommonExportOptions, type ExportCapabilities, type GraphExporter, type LossNote } from "../../types.js";
|
|
31
33
|
import {
|
|
32
34
|
CYTOSCAPE_ELEMENT_KEYS,
|
|
33
35
|
DIALECT_DEFAULT_DIRECTED,
|
|
34
36
|
dialectCapabilities,
|
|
37
|
+
exponentIfUnsafe,
|
|
35
38
|
isJsonDialect,
|
|
36
39
|
JSON_DIALECTS,
|
|
37
40
|
type JsonDialect,
|
|
@@ -39,48 +42,114 @@ import {
|
|
|
39
42
|
shapeMetaOf,
|
|
40
43
|
SUFFIX,
|
|
41
44
|
} from "./dialect.js";
|
|
45
|
+
import { OBOGRAPHS_LOSS, OBOGRAPHS_SHARED_LOSS, planObographs } from "./obographs-export.js";
|
|
42
46
|
|
|
43
|
-
/**
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
/**
|
|
48
|
+
* The format-specific options of the JSON exporter.
|
|
49
|
+
* @category Built-in formats
|
|
50
|
+
*/
|
|
51
|
+
export interface JsonExportOptions extends CommonExportOptions {
|
|
52
|
+
/**
|
|
53
|
+
* The dialect to write. The default is the dialect a JSON import read, else "node-link".
|
|
54
|
+
* Attributes are written under their own names; vis.js shows the `label` attribute, so rename
|
|
55
|
+
* the attribute you want shown to `label` first (`snapshot.nodes.rename("name", "label")`). A CSV
|
|
56
|
+
* dialect name ("gephi", "generic"), from an options object shared with CSV saves, is ignored.
|
|
57
|
+
* @defaultValue as read, else "node-link"
|
|
58
|
+
*/
|
|
46
59
|
dialect?: JsonDialect | undefined;
|
|
47
|
-
/**
|
|
48
|
-
|
|
49
|
-
|
|
60
|
+
/**
|
|
61
|
+
* The indentation of one level: a number of spaces, or the text itself (spaces or tabs, such as
|
|
62
|
+
* "\t"). 0 or "" writes compact JSON on one line.
|
|
63
|
+
* @defaultValue 0
|
|
64
|
+
*/
|
|
65
|
+
indent?: number | string | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* node-link and d3: the key of the edge array. The default is the key a JSON import read, else
|
|
68
|
+
* "edges" ("links" for d3).
|
|
69
|
+
* @defaultValue as read, else "edges"
|
|
70
|
+
*/
|
|
50
71
|
edgesKey?: string | undefined;
|
|
51
|
-
/**
|
|
72
|
+
/**
|
|
73
|
+
* node-link, d3 and vis: the node id key. The default is the key a JSON import read, else "id".
|
|
74
|
+
* @defaultValue as read, else "id"
|
|
75
|
+
*/
|
|
52
76
|
nodeIdKey?: string | undefined;
|
|
53
|
-
/**
|
|
77
|
+
/**
|
|
78
|
+
* node-link and d3: write edge ends as positions in the node array instead of ids. The default
|
|
79
|
+
* is what a JSON import read, else false.
|
|
80
|
+
* @defaultValue as read, else false
|
|
81
|
+
*/
|
|
54
82
|
indexLinks?: boolean | undefined;
|
|
55
|
-
/**
|
|
83
|
+
/**
|
|
84
|
+
* node-link, d3 and vis: the source key. The default is the key a JSON import read, else
|
|
85
|
+
* "source" ("from" for vis). graph-io finds "source", "src" and "from" by itself; for another
|
|
86
|
+
* key, read the file back with the same `sourceKey` import option. Without it every edge is an
|
|
87
|
+
* `E_MISSING_ENDPOINT` error and is skipped, and a file with more edges than `errorLimit` (100 by
|
|
88
|
+
* default) fails to load with an `ImportError`. `checkExport()` does not warn about this.
|
|
89
|
+
* @defaultValue as read, else "source"
|
|
90
|
+
*/
|
|
56
91
|
sourceKey?: string | undefined;
|
|
57
|
-
/**
|
|
92
|
+
/**
|
|
93
|
+
* node-link, d3 and vis: the target key. The default is the key a JSON import read, else
|
|
94
|
+
* "target" ("to" for vis). graph-io finds "target", "dst" and "to" by itself; for another key,
|
|
95
|
+
* read the file back with the same `targetKey` import option, as for `sourceKey`.
|
|
96
|
+
* @defaultValue as read, else "target"
|
|
97
|
+
*/
|
|
58
98
|
targetKey?: string | undefined;
|
|
59
|
-
/**
|
|
99
|
+
/**
|
|
100
|
+
* The key the weight is written under, in every dialect but OBO Graphs, which always writes the
|
|
101
|
+
* weight as "weight" in each edge's `meta` (checkExport() then returns W_OBOGRAPHS_EDGE_COLUMN_AS_META).
|
|
102
|
+
* The default is the key a JSON import read the weights from, else "weight". For another key,
|
|
103
|
+
* read the file back with `weightFrom` set to it, or the weights come back as a plain edge
|
|
104
|
+
* attribute.
|
|
105
|
+
* @defaultValue as read, else "weight"
|
|
106
|
+
*/
|
|
60
107
|
weightKey?: string | undefined;
|
|
108
|
+
/**
|
|
109
|
+
* OBO Graphs: the graph id written when the graph has none. A graph read from an OBO Graphs
|
|
110
|
+
* document keeps its own graph id, which this option does not change. Node ids are written in
|
|
111
|
+
* the form graph-io reads back as the same id: an IRI as it is, a prefixed id such as
|
|
112
|
+
* `GO:0008150` as its OBO address, and an id without a prefix (`a`) under the default OBO
|
|
113
|
+
* address (`http://purl.obolibrary.org/obo/graph.owl#a`), or as it is when you pass another IRI
|
|
114
|
+
* here. The default is `http://purl.obolibrary.org/obo/<ontology>.owl`.
|
|
115
|
+
* @defaultValue the ontology's OBO address
|
|
116
|
+
*/
|
|
117
|
+
ontologyIri?: string | undefined;
|
|
61
118
|
}
|
|
62
119
|
|
|
63
120
|
/**
|
|
64
121
|
* The LossNote codes of the JSON exporter's check(): the dialect-specific ones and, aliased, the
|
|
65
122
|
* shared ones it records (`LOSS` holds the rest of the generic pre-flight's codes). A key is the
|
|
66
123
|
* code without its severity prefix.
|
|
124
|
+
* @category Built-in formats
|
|
67
125
|
*/
|
|
68
126
|
export const JSON_LOSS = Object.freeze({
|
|
69
127
|
/** Non-finite numbers (columns, weights) are written as null. */
|
|
70
|
-
NONFINITE_AS_NULL:
|
|
71
|
-
/**
|
|
72
|
-
|
|
128
|
+
NONFINITE_AS_NULL: NONFINITE_AS_NULL_CODE,
|
|
129
|
+
/**
|
|
130
|
+
* The file cannot record direction: an undirected graph's edges read back as directed, or the whole graph reads
|
|
131
|
+
* back with the importer's default direction.
|
|
132
|
+
*/
|
|
133
|
+
DIRECTION_DROPPED: DIRECTION_DROPPED_CODE,
|
|
73
134
|
/** GEXF mutual pairs are written as two directed edges. */
|
|
74
135
|
MUTUAL_EXPANDED: LOSS.MUTUAL_EXPANDED,
|
|
75
|
-
/**
|
|
136
|
+
/**
|
|
137
|
+
* JGF keys its nodes by text, so number ids read back as text, unless you read the file with `ids: "canonical"`.
|
|
138
|
+
*/
|
|
76
139
|
NUMERIC_IDS_STRINGIFIED: "W_NUMERIC_IDS_STRINGIFIED",
|
|
77
|
-
/**
|
|
140
|
+
/**
|
|
141
|
+
* Two node ids would be written as the same text (the number 5 and the text "5"); the save fails with
|
|
142
|
+
* E_INVALID_ID.
|
|
143
|
+
*/
|
|
78
144
|
ID_TEXT_COLLISION: LOSS.ID_TEXT_COLLISION,
|
|
79
|
-
/**
|
|
80
|
-
NODE_ORDER:
|
|
145
|
+
/** The nodes read back in a different order. */
|
|
146
|
+
NODE_ORDER: NODE_ORDER_CODE,
|
|
81
147
|
/** A column named like a reserved key of the dialect (id, source, target, ...) is skipped. */
|
|
82
148
|
RESERVED_KEY: "W_RESERVED_KEY",
|
|
83
|
-
/**
|
|
149
|
+
/**
|
|
150
|
+
* An attribute without the weight role is named like the key weights are written under; it reads back as the edge
|
|
151
|
+
* weight, or is not written when the graph has weights of its own.
|
|
152
|
+
*/
|
|
84
153
|
WEIGHT_KEY_CLASH: LOSS.WEIGHT_KEY_CLASH,
|
|
85
154
|
/** A position column without a slot (every dialect but Cytoscape) is a plain array attribute; the role is lost. */
|
|
86
155
|
POSITIONS_DROPPED: LOSS.POSITIONS,
|
|
@@ -88,14 +157,59 @@ export const JSON_LOSS = Object.freeze({
|
|
|
88
157
|
POSITION_Z_DROPPED: "W_POSITION_Z_DROPPED",
|
|
89
158
|
/** Cytoscape has a single parent; a `parents` list column cannot be written. */
|
|
90
159
|
PARENTS_DROPPED: LOSS.PARENTS,
|
|
91
|
-
/**
|
|
160
|
+
/** Node-link / d3 have no edge id slot; the id column is written as a plain attribute. */
|
|
92
161
|
EDGE_IDS_DROPPED: LOSS.EDGE_IDS_DROPPED,
|
|
93
|
-
/**
|
|
162
|
+
/**
|
|
163
|
+
* A number attribute whose values are all whole numbers reads back as integers, because the format does not record
|
|
164
|
+
* the type.
|
|
165
|
+
*/
|
|
94
166
|
INTEGRAL_F64_AS_I32: LOSS.INTEGRAL_F64,
|
|
95
|
-
/**
|
|
167
|
+
/** An attribute with a role the format has no place for is written as a plain attribute; the role is lost. */
|
|
96
168
|
ROLE_DROPPED: LOSS.ROLE,
|
|
97
169
|
/** A column without a set cell is not written (JSON declares no columns). */
|
|
98
170
|
EMPTY_COLUMN_DROPPED: LOSS.EMPTY_COLUMN,
|
|
171
|
+
/**
|
|
172
|
+
* Obographs: an edge column (or the explicit weights) is written into each edge's meta and reads back inside the
|
|
173
|
+
* meta column.
|
|
174
|
+
*/
|
|
175
|
+
OBOGRAPHS_EDGE_COLUMN_AS_META: OBOGRAPHS_LOSS.EDGE_COLUMN_AS_META,
|
|
176
|
+
/**
|
|
177
|
+
* Obographs: a node id or relation is written as an IRI the importer's default oboIds "curie" reads back as
|
|
178
|
+
* another id.
|
|
179
|
+
*/
|
|
180
|
+
OBOGRAPHS_ID_CHANGED: OBOGRAPHS_LOSS.ID_CHANGED,
|
|
181
|
+
/** Obographs: a property_value's xsd datatype has no place in basicPropertyValues and reads back unset. */
|
|
182
|
+
OBOGRAPHS_DATATYPE_DROPPED: OBOGRAPHS_LOSS.DATATYPE_DROPPED,
|
|
183
|
+
/** Obographs: a node column outside the OBO vocabulary reads back inside the property_value column. */
|
|
184
|
+
COLUMN_AS_PROPERTY_VALUE: OBOGRAPHS_SHARED_LOSS.COLUMN_AS_PROPERTY_VALUE,
|
|
185
|
+
/** Obographs: an edge without a relation is written with the pred is_a. */
|
|
186
|
+
RELATION_ASSUMED: OBOGRAPHS_SHARED_LOSS.RELATION_ASSUMED,
|
|
187
|
+
/**
|
|
188
|
+
* Obographs: Typedef nodes are written as PROPERTY nodes, which read back as nodes only under typedefs: "nodes".
|
|
189
|
+
*/
|
|
190
|
+
TYPEDEF_NODES: OBOGRAPHS_SHARED_LOSS.TYPEDEF_NODES,
|
|
191
|
+
/**
|
|
192
|
+
* OBO Graphs: a graph attribute is written into the graph's `meta` and reads back in
|
|
193
|
+
* `snapshot.meta.extra.obographs`.
|
|
194
|
+
*/
|
|
195
|
+
GRAPH_COLUMN_AS_METADATA: OBOGRAPHS_SHARED_LOSS.GRAPH_COLUMN_AS_METADATA,
|
|
196
|
+
/** Obographs: numeric node ids are written as text and read back as strings. */
|
|
197
|
+
ID_TEXT_TYPE: LOSS.ID_TEXT_TYPE,
|
|
198
|
+
/**
|
|
199
|
+
* An attribute without a role is written where the format keeps a role (for example, a `name` column as the label), and
|
|
200
|
+
* reads back with that role.
|
|
201
|
+
*/
|
|
202
|
+
ROLE_ASSUMED: LOSS.ROLE_ASSUMED,
|
|
203
|
+
/**
|
|
204
|
+
* An attribute with a role (for example, the label) is written where the format keeps that role, and reads back under the
|
|
205
|
+
* name the format's importer gives it.
|
|
206
|
+
*/
|
|
207
|
+
COLUMN_NAME_CHANGED: LOSS.COLUMN_NAME_CHANGED,
|
|
208
|
+
/**
|
|
209
|
+
* OBO Graphs: an OBO attribute stored as text where graph-io uses a dictionary (or the other way round); it reads
|
|
210
|
+
* back with graph-io's usual type. The values are the same.
|
|
211
|
+
*/
|
|
212
|
+
DTYPE_UNSUPPORTED: LOSS.DTYPE,
|
|
99
213
|
});
|
|
100
214
|
|
|
101
215
|
/** The roles each dialect has a slot for (every other role column is a plain attribute, reported by checkCapabilities()). */
|
|
@@ -106,6 +220,7 @@ const SLOT_ROLES: Readonly<Record<JsonDialect, ReadonlySet<string>>> = Object.fr
|
|
|
106
220
|
cytoscape: new Set(["classes"]),
|
|
107
221
|
graphology: new Set<string>(),
|
|
108
222
|
vis: new Set<string>(),
|
|
223
|
+
obographs: new Set(["label", "kind"]),
|
|
109
224
|
});
|
|
110
225
|
|
|
111
226
|
/** The element domains. */
|
|
@@ -158,7 +273,7 @@ interface ColumnPlan {
|
|
|
158
273
|
interface Resolved {
|
|
159
274
|
readonly common: ResolvedExportOptions;
|
|
160
275
|
readonly dialect: JsonDialect;
|
|
161
|
-
readonly indent:
|
|
276
|
+
readonly indent: string;
|
|
162
277
|
readonly edgesKey: string;
|
|
163
278
|
readonly nodeIdKey: string | null;
|
|
164
279
|
readonly indexLinks: boolean;
|
|
@@ -166,6 +281,7 @@ interface Resolved {
|
|
|
166
281
|
readonly targetKey: string;
|
|
167
282
|
readonly weightKey: string;
|
|
168
283
|
readonly shape: JsonShapeMeta;
|
|
284
|
+
readonly ontologyIri: string | null;
|
|
169
285
|
}
|
|
170
286
|
|
|
171
287
|
/** Everything write() needs, computed once by plan(). */
|
|
@@ -198,17 +314,15 @@ function resolve(snapshot: GraphSnapshot, options: (JsonExportOptions & CommonEx
|
|
|
198
314
|
const common = resolveExportOptions(options);
|
|
199
315
|
const shape = shapeMetaOf(snapshot.meta);
|
|
200
316
|
let dialect: JsonDialect;
|
|
201
|
-
if (o.dialect === undefined) {
|
|
317
|
+
if (o.dialect === undefined || otherFormatDialect("json", o.dialect)) {
|
|
318
|
+
// no dialect, or another format's (a CSV "generic" in a shared options object)
|
|
202
319
|
dialect = shape.dialect ?? "node-link";
|
|
203
320
|
} else if (isJsonDialect(o.dialect)) {
|
|
204
321
|
({ dialect } = o);
|
|
205
322
|
} else {
|
|
206
323
|
throw unsupported("dialect", o.dialect, JSON_DIALECTS);
|
|
207
324
|
}
|
|
208
|
-
const indent = o.indent
|
|
209
|
-
if (!Number.isInteger(indent) || indent < 0 || indent > 16) {
|
|
210
|
-
throw unsupported("indent", indent, ["an integer 0..16"]);
|
|
211
|
-
}
|
|
325
|
+
const indent = indentUnit(o.indent, "");
|
|
212
326
|
const sameDialect = shape.dialect === dialect;
|
|
213
327
|
const recorded = <T>(value: T | undefined, fallback: T): T =>
|
|
214
328
|
sameDialect && value !== undefined ? value : fallback;
|
|
@@ -240,7 +354,20 @@ function resolve(snapshot: GraphSnapshot, options: (JsonExportOptions & CommonEx
|
|
|
240
354
|
(weightOrigin !== null && weightOrigin.format === "json" && weightOrigin.id !== null
|
|
241
355
|
? weightOrigin.id
|
|
242
356
|
: "weight");
|
|
243
|
-
|
|
357
|
+
const ontologyIri = keyOption("ontologyIri", o.ontologyIri);
|
|
358
|
+
return {
|
|
359
|
+
common,
|
|
360
|
+
dialect,
|
|
361
|
+
indent,
|
|
362
|
+
edgesKey,
|
|
363
|
+
nodeIdKey,
|
|
364
|
+
indexLinks,
|
|
365
|
+
sourceKey,
|
|
366
|
+
targetKey,
|
|
367
|
+
weightKey,
|
|
368
|
+
shape,
|
|
369
|
+
ontologyIri,
|
|
370
|
+
};
|
|
244
371
|
}
|
|
245
372
|
|
|
246
373
|
/**
|
|
@@ -293,24 +420,6 @@ function numberText(value: number, f32: boolean, nonfinite: Counter): string {
|
|
|
293
420
|
return exponentIfUnsafe(f32 ? formatF32(value) : formatF64(value));
|
|
294
421
|
}
|
|
295
422
|
|
|
296
|
-
/**
|
|
297
|
-
* An integer text beyond 2^53 in exponent form (`100000000000000000000` -> `1e+20`, the same
|
|
298
|
-
* digits): the importer reads an integer literal that large as its exact digits (a string), so
|
|
299
|
-
* a number must not be written as one.
|
|
300
|
-
* @param text - the shortest decimal text of a finite number
|
|
301
|
-
* @returns the text, or its exponent form for an integer literal of 16 or more digits
|
|
302
|
-
*/
|
|
303
|
-
function exponentIfUnsafe(text: string): string {
|
|
304
|
-
const match = /^(-?)([0-9]{16,})$/.exec(text);
|
|
305
|
-
if (match === null || Number.isSafeInteger(Number(text))) {
|
|
306
|
-
return text;
|
|
307
|
-
}
|
|
308
|
-
const [, sign, digits] = match;
|
|
309
|
-
const mantissa = digits.replace(/0+$/, "");
|
|
310
|
-
const fraction = mantissa.length > 1 ? `.${mantissa.slice(1)}` : "";
|
|
311
|
-
return `${sign}${mantissa[0]}${fraction}e+${digits.length - 1}`;
|
|
312
|
-
}
|
|
313
|
-
|
|
314
423
|
/**
|
|
315
424
|
* The JSON text of any cell value: a number per its dtype, a boolean, a string, an array (a
|
|
316
425
|
* multi-component subarray or a list row), or a json value.
|
|
@@ -416,13 +525,13 @@ class JsonWriter {
|
|
|
416
525
|
|
|
417
526
|
private readonly firstAtDepth: boolean[] = [];
|
|
418
527
|
|
|
419
|
-
private readonly indent:
|
|
528
|
+
private readonly indent: string;
|
|
420
529
|
|
|
421
530
|
/**
|
|
422
531
|
* Create a writer.
|
|
423
|
-
* @param indent -
|
|
532
|
+
* @param indent - the text of one level; "" for compact output
|
|
424
533
|
*/
|
|
425
|
-
constructor(indent:
|
|
534
|
+
constructor(indent: string) {
|
|
426
535
|
this.indent = indent;
|
|
427
536
|
}
|
|
428
537
|
|
|
@@ -455,7 +564,7 @@ class JsonWriter {
|
|
|
455
564
|
*/
|
|
456
565
|
key(name: string): void {
|
|
457
566
|
this.separator();
|
|
458
|
-
this.parts.push(JSON.stringify(name), this.indent
|
|
567
|
+
this.parts.push(JSON.stringify(name), this.indent !== "" ? ": " : ":");
|
|
459
568
|
}
|
|
460
569
|
|
|
461
570
|
/** Start an array element: the separator only. */
|
|
@@ -507,7 +616,7 @@ class JsonWriter {
|
|
|
507
616
|
* @returns the text
|
|
508
617
|
*/
|
|
509
618
|
private newline(): string {
|
|
510
|
-
return this.indent
|
|
619
|
+
return this.indent !== "" ? `\n${this.indent.repeat(this.depth)}` : "";
|
|
511
620
|
}
|
|
512
621
|
}
|
|
513
622
|
|
|
@@ -562,7 +671,7 @@ function plan(snapshot: GraphSnapshot, resolved: Resolved): Plan {
|
|
|
562
671
|
if (ctx.nonfinite.count > 0) {
|
|
563
672
|
note(
|
|
564
673
|
JSON_LOSS.NONFINITE_AS_NULL,
|
|
565
|
-
`${ctx.nonfinite.count} non-finite number(
|
|
674
|
+
`${ctx.nonfinite.count} non-finite number${plural(ctx.nonfinite.count)} ${agree(ctx.nonfinite.count, "is", "are")} written as null`,
|
|
566
675
|
null,
|
|
567
676
|
ctx.nonfinite.count,
|
|
568
677
|
);
|
|
@@ -576,7 +685,7 @@ function plan(snapshot: GraphSnapshot, resolved: Resolved): Plan {
|
|
|
576
685
|
if (dialect === "cytoscape" && edgeIds !== null && edgeIds.nullCount > 0) {
|
|
577
686
|
note(
|
|
578
687
|
LOSS.EDGE_IDS_GENERATED,
|
|
579
|
-
`${edgeIds.nullCount} edge(
|
|
688
|
+
`${edgeIds.nullCount} edge${plural(edgeIds.nullCount)} ${agree(edgeIds.nullCount, "has", "have")} no id; canonical e<index> ids are generated for them`,
|
|
580
689
|
edgeIds.meta.name,
|
|
581
690
|
edgeIds.nullCount,
|
|
582
691
|
);
|
|
@@ -755,7 +864,7 @@ function planSlot(ctx: PlanContext, column: Column, domain: Domain): ColumnPlan
|
|
|
755
864
|
if (z > 0) {
|
|
756
865
|
note(
|
|
757
866
|
JSON_LOSS.POSITION_Z_DROPPED,
|
|
758
|
-
`${z} position(
|
|
867
|
+
`${z} position${plural(z)} ${agree(z, "has", "have")} a non-zero z; Cytoscape positions are 2D`,
|
|
759
868
|
meta.name,
|
|
760
869
|
z,
|
|
761
870
|
);
|
|
@@ -849,7 +958,7 @@ function planWeights(ctx: PlanContext, edges: readonly ColumnPlan[]): (e: number
|
|
|
849
958
|
if (clash !== undefined) {
|
|
850
959
|
ctx.note(
|
|
851
960
|
LOSS.WEIGHT_KEY_CLASH,
|
|
852
|
-
`edge column "${clash.column.meta.name}" is written under "${clash.key}", the key the importer reads
|
|
961
|
+
`edge column "${clash.column.meta.name}" is written under "${clash.key}", the key the importer reads edge weights from; it reads back as the weight, not as a column`,
|
|
853
962
|
clash.column.meta.name,
|
|
854
963
|
clash.column.length - clash.column.nullCount,
|
|
855
964
|
);
|
|
@@ -883,7 +992,7 @@ function planDirection(ctx: PlanContext): { readonly folding: PairFolding; reado
|
|
|
883
992
|
if (folding.mutualCount > 0) {
|
|
884
993
|
note(
|
|
885
994
|
LOSS.MUTUAL_EXPANDED,
|
|
886
|
-
`${folding.mutualCount} mutual pair(
|
|
995
|
+
`${folding.mutualCount} mutual pair${plural(folding.mutualCount)} ${agree(folding.mutualCount, "is", "are")} written as two directed edges; the mutual mark is lost`,
|
|
887
996
|
null,
|
|
888
997
|
folding.mutualCount,
|
|
889
998
|
);
|
|
@@ -969,7 +1078,7 @@ function jgfIdNotes(
|
|
|
969
1078
|
if (numeric > 0) {
|
|
970
1079
|
note(
|
|
971
1080
|
JSON_LOSS.NUMERIC_IDS_STRINGIFIED,
|
|
972
|
-
`${numeric} numeric node id(
|
|
1081
|
+
`${numeric} numeric node id${plural(numeric)} ${agree(numeric, "becomes", "become")} JGF object keys (strings); pass ids: "canonical" on re-import`,
|
|
973
1082
|
null,
|
|
974
1083
|
numeric,
|
|
975
1084
|
);
|
|
@@ -977,7 +1086,7 @@ function jgfIdNotes(
|
|
|
977
1086
|
if (collisions > 0) {
|
|
978
1087
|
note(
|
|
979
1088
|
JSON_LOSS.ID_TEXT_COLLISION,
|
|
980
|
-
`${collisions} node id(
|
|
1089
|
+
`${collisions} node id${plural(collisions)} ${agree(collisions, "shares", "share")} their text with another id; the save fails`,
|
|
981
1090
|
null,
|
|
982
1091
|
collisions,
|
|
983
1092
|
);
|
|
@@ -985,7 +1094,7 @@ function jgfIdNotes(
|
|
|
985
1094
|
if (!ordered) {
|
|
986
1095
|
note(
|
|
987
1096
|
JSON_LOSS.NODE_ORDER,
|
|
988
|
-
`${indexLike} integer-like node id(
|
|
1097
|
+
`${indexLike} integer-like node id${plural(indexLike)} ${agree(indexLike, "is", "are")} enumerated first and ascending by JSON parsers; node order changes on re-import`,
|
|
989
1098
|
null,
|
|
990
1099
|
indexLike,
|
|
991
1100
|
);
|
|
@@ -1310,7 +1419,7 @@ function* writeVis(snapshot: GraphSnapshot, p: Plan): Generator<string, void, un
|
|
|
1310
1419
|
}
|
|
1311
1420
|
|
|
1312
1421
|
/**
|
|
1313
|
-
* Write a graphology
|
|
1422
|
+
* Write a graphology serialization.
|
|
1314
1423
|
* @param snapshot - the snapshot
|
|
1315
1424
|
* @param p - the plan
|
|
1316
1425
|
* @yields the parts
|
|
@@ -1608,11 +1717,35 @@ function edgeIdGenerator(snapshot: GraphSnapshot, p: Plan): (e: number) => strin
|
|
|
1608
1717
|
// ============================================================ the plugin
|
|
1609
1718
|
|
|
1610
1719
|
/**
|
|
1611
|
-
* The
|
|
1720
|
+
* The text parts of the document in the resolved dialect.
|
|
1721
|
+
* @param snapshot - the snapshot
|
|
1722
|
+
* @param resolved - the resolved options
|
|
1723
|
+
* @returns the parts
|
|
1724
|
+
*/
|
|
1725
|
+
function parts(snapshot: GraphSnapshot, resolved: Resolved): Generator<string, void, undefined> {
|
|
1726
|
+
return resolved.dialect === "obographs"
|
|
1727
|
+
? planObographs(snapshot, resolved).write()
|
|
1728
|
+
: write(snapshot, plan(snapshot, resolved));
|
|
1729
|
+
}
|
|
1730
|
+
|
|
1731
|
+
/**
|
|
1732
|
+
* The JSON exporter plugin. `capabilities` is the node-link table (the
|
|
1612
1733
|
* default dialect); check() applies the table of the dialect actually selected.
|
|
1734
|
+
* @category Built-in formats
|
|
1613
1735
|
*/
|
|
1614
1736
|
export const jsonExporter: GraphExporter<JsonExportOptions> = Object.freeze({
|
|
1615
1737
|
format: "json",
|
|
1738
|
+
options: Object.freeze([
|
|
1739
|
+
"dialect",
|
|
1740
|
+
"edgesKey",
|
|
1741
|
+
"indent",
|
|
1742
|
+
"indexLinks",
|
|
1743
|
+
"nodeIdKey",
|
|
1744
|
+
"ontologyIri",
|
|
1745
|
+
"sourceKey",
|
|
1746
|
+
"targetKey",
|
|
1747
|
+
"weightKey",
|
|
1748
|
+
]),
|
|
1616
1749
|
capabilities: dialectCapabilities("node-link"),
|
|
1617
1750
|
|
|
1618
1751
|
/**
|
|
@@ -1622,7 +1755,10 @@ export const jsonExporter: GraphExporter<JsonExportOptions> = Object.freeze({
|
|
|
1622
1755
|
* @returns the notes, empty when the export is exact
|
|
1623
1756
|
*/
|
|
1624
1757
|
check(snapshot: GraphSnapshot, options?: JsonExportOptions & CommonExportOptions): readonly LossNote[] {
|
|
1625
|
-
|
|
1758
|
+
const resolved = resolve(snapshot, options);
|
|
1759
|
+
const notes =
|
|
1760
|
+
resolved.dialect === "obographs" ? planObographs(snapshot, resolved).notes : plan(snapshot, resolved).notes;
|
|
1761
|
+
return Object.freeze([...notes]);
|
|
1626
1762
|
},
|
|
1627
1763
|
|
|
1628
1764
|
/**
|
|
@@ -1632,7 +1768,7 @@ export const jsonExporter: GraphExporter<JsonExportOptions> = Object.freeze({
|
|
|
1632
1768
|
* @returns the chunks
|
|
1633
1769
|
*/
|
|
1634
1770
|
export(snapshot: GraphSnapshot, options?: JsonExportOptions & CommonExportOptions): AsyncIterable<Uint8Array> {
|
|
1635
|
-
return encodeChunks(
|
|
1771
|
+
return encodeChunks(parts(snapshot, resolve(snapshot, options)));
|
|
1636
1772
|
},
|
|
1637
1773
|
|
|
1638
1774
|
/**
|
|
@@ -1642,7 +1778,7 @@ export const jsonExporter: GraphExporter<JsonExportOptions> = Object.freeze({
|
|
|
1642
1778
|
* @returns the document
|
|
1643
1779
|
*/
|
|
1644
1780
|
exportToString(snapshot: GraphSnapshot, options?: JsonExportOptions & CommonExportOptions): Promise<string> {
|
|
1645
|
-
return joinText(
|
|
1781
|
+
return joinText(parts(snapshot, resolve(snapshot, options)));
|
|
1646
1782
|
},
|
|
1647
1783
|
});
|
|
1648
1784
|
|
|
@@ -1650,6 +1786,7 @@ export const jsonExporter: GraphExporter<JsonExportOptions> = Object.freeze({
|
|
|
1650
1786
|
* The capability table of one dialect, for callers that pick a dialect before check().
|
|
1651
1787
|
* @param dialect - the dialect
|
|
1652
1788
|
* @returns the frozen table
|
|
1789
|
+
* @category Built-in formats
|
|
1653
1790
|
*/
|
|
1654
1791
|
export function jsonCapabilities(dialect: JsonDialect): ExportCapabilities {
|
|
1655
1792
|
return dialectCapabilities(dialect);
|