@graphty/graph-io 0.3.24 → 0.3.26
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-BbJI55dx.js +56 -0
- package/dist/chunks/choose-BbJI55dx.js.map +1 -0
- package/dist/chunks/constants-BCsFsMj4.js +231 -0
- package/dist/chunks/constants-BCsFsMj4.js.map +1 -0
- package/dist/chunks/{escape-B-tkk_Cl.js → escape-D0g6NNUy.js} +382 -92
- package/dist/chunks/escape-D0g6NNUy.js.map +1 -0
- package/dist/chunks/export-BTI4yQgy.js +4333 -0
- package/dist/chunks/export-BTI4yQgy.js.map +1 -0
- package/dist/chunks/exporter-BMqk5oxW.js +3465 -0
- package/dist/chunks/exporter-BMqk5oxW.js.map +1 -0
- package/dist/chunks/{importer-eUREhBGj.js → exporter-Cra2GYcN.js} +4969 -3201
- package/dist/chunks/exporter-Cra2GYcN.js.map +1 -0
- package/dist/chunks/{exporter-BGrsWamJ.js → exporter-Dxh231ZF.js} +38 -229
- package/dist/chunks/exporter-Dxh231ZF.js.map +1 -0
- package/dist/chunks/{exporter-DIeGJXAZ.js → exporter-tne475KK.js} +22 -20
- package/dist/chunks/exporter-tne475KK.js.map +1 -0
- package/dist/chunks/importer-90YWhJoF.js +2811 -0
- package/dist/chunks/importer-90YWhJoF.js.map +1 -0
- package/dist/chunks/{importer-D_e7e7LX.js → importer-Bcl1d4xH.js} +398 -145
- package/dist/chunks/importer-Bcl1d4xH.js.map +1 -0
- package/dist/chunks/{importer-BWY2FFc5.js → importer-BfIsp1f9.js} +255 -77
- package/dist/chunks/importer-BfIsp1f9.js.map +1 -0
- package/dist/chunks/{importer-zGLo8Dg_.js → importer-C_TEA1zJ.js} +484 -157
- package/dist/chunks/importer-C_TEA1zJ.js.map +1 -0
- package/dist/chunks/{importer-DET1tg6s.js → importer-DCjOvO7U.js} +1687 -310
- package/dist/chunks/importer-DCjOvO7U.js.map +1 -0
- package/dist/chunks/{importer-vi3bSdtw.js → importer-DfVu6j59.js} +509 -76
- package/dist/chunks/importer-DfVu6j59.js.map +1 -0
- package/dist/chunks/{importer-DIrbbnAf.js → importer-Dku_VAIY.js} +585 -226
- package/dist/chunks/importer-Dku_VAIY.js.map +1 -0
- package/dist/chunks/json-elements-3tnyt5uZ.js +1225 -0
- package/dist/chunks/json-elements-3tnyt5uZ.js.map +1 -0
- package/dist/chunks/ontology-export-B9Tcf37D.js +357 -0
- package/dist/chunks/ontology-export-B9Tcf37D.js.map +1 -0
- package/dist/chunks/{records-dbRkxwaq.js → records-CQXT__mY.js} +298 -114
- package/dist/chunks/records-CQXT__mY.js.map +1 -0
- package/dist/chunks/{text-Dr0Ifpag.js → text-DmcUs5_Q.js} +29 -11
- package/dist/chunks/text-DmcUs5_Q.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 +951 -261
- 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 +342 -85
- 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 +564 -157
- 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 +19 -1
- 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 +33 -17
- 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 +868 -188
- 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 +2 -0
- 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 +400 -83
- 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 +145 -32
- 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 +680 -285
- 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 +226 -79
- 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 +98 -24
- 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 +108 -26
- 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 +238 -85
- 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 +66 -34
- 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 +183 -51
- 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 +20 -21
- 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 +7 -2
- 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 +38 -4
- package/src/common/direction.ts +78 -51
- package/src/common/escape.ts +33 -17
- 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 +1034 -198
- package/src/common/line-format.ts +249 -0
- package/src/common/lists.ts +6 -1
- 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 +477 -88
- package/src/common/zip.ts +169 -7
- package/src/formats/csv/exporter.ts +201 -46
- 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 +888 -300
- package/src/formats/cx/index.ts +4 -3
- package/src/formats/cx2/exporter.ts +61 -338
- package/src/formats/cx2/importer.ts +317 -86
- 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 +139 -31
- 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 +111 -26
- 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 +320 -101
- 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 +89 -41
- package/src/formats/pajek/importer.ts +407 -93
- package/src/formats/pajek/index.ts +2 -1
- package/src/formats/pajek/syntax.ts +213 -52
- 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 +35 -27
- package/src/formats/xgmml/importer.ts +64 -86
- package/src/formats/xgmml/index.ts +1 -0
- package/src/formats/xgmml/values.ts +11 -3
- 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,22 +1,30 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* What the GraphML importer and exporter share: the namespace, the format facts, the reserved
|
|
3
|
-
* column names of the XML-attribute-derived columns
|
|
3
|
+
* column names of the XML-attribute-derived columns, the `meta.extra`
|
|
4
4
|
* keys the importer records for the exporter, and the issue and loss codes.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import {
|
|
8
8
|
BAD_DEFAULT_CODE,
|
|
9
9
|
COLUMN_RENAMED_CODE,
|
|
10
|
+
COLUMN_TYPE_CODE,
|
|
10
11
|
COUNT_HINT_CODE,
|
|
12
|
+
COUNT_MISMATCH_CODE,
|
|
13
|
+
DANGLING_REFERENCE_CODE,
|
|
11
14
|
DIRECTION_FORCED_CODE,
|
|
12
15
|
DIRECTION_REFUSED_CODE,
|
|
16
|
+
DUPLICATE_ATTRIBUTE_CODE,
|
|
13
17
|
DUPLICATE_EDGE_ID_CODE,
|
|
14
18
|
DUPLICATE_KEY_CODE,
|
|
15
19
|
DUPLICATE_NODE_CODE,
|
|
20
|
+
ELEMENT_ISSUE,
|
|
21
|
+
EMPTY_INPUT_CODE,
|
|
22
|
+
ENCODING_CONFLICT_CODE,
|
|
16
23
|
ENCODING_FALLBACK_CODE,
|
|
17
24
|
HYPEREDGE_CODE,
|
|
18
25
|
ID_MERGED_CODE,
|
|
19
26
|
ID_TEXT_TYPE_CODE,
|
|
27
|
+
INPUT_ISSUE,
|
|
20
28
|
INVALID_ENCODING_CODE,
|
|
21
29
|
INVALID_UTF8_CODE,
|
|
22
30
|
MISSING_ENDPOINT_CODE,
|
|
@@ -35,69 +43,128 @@ import {
|
|
|
35
43
|
UNKNOWN_ATTR_TYPE_CODE,
|
|
36
44
|
UNKNOWN_ELEMENT_CODE,
|
|
37
45
|
UNKNOWN_ENCODING_CODE,
|
|
46
|
+
UNKNOWN_PARENT_CODE,
|
|
47
|
+
UNKNOWN_XML_ATTRIBUTE_CODE,
|
|
38
48
|
XML_SYNTAX_CODE,
|
|
39
49
|
} from "../../common/codes.js";
|
|
40
50
|
|
|
41
|
-
/**
|
|
51
|
+
/**
|
|
52
|
+
* The GraphML namespace.
|
|
53
|
+
* @category Plugin helpers
|
|
54
|
+
*/
|
|
42
55
|
export const GRAPHML_NAMESPACE = "http://graphml.graphdrawing.org/xmlns";
|
|
43
56
|
|
|
44
|
-
/**
|
|
57
|
+
/**
|
|
58
|
+
* The yFiles extension namespace, declared as `xmlns:y` when a yfiles column is written.
|
|
59
|
+
* @category Plugin helpers
|
|
60
|
+
*/
|
|
45
61
|
export const YFILES_NAMESPACE = "http://www.yworks.com/xml/graphml";
|
|
46
62
|
|
|
47
|
-
/**
|
|
63
|
+
/**
|
|
64
|
+
* The XML Schema instance namespace and the schema location the exporter writes.
|
|
65
|
+
* @category Plugin helpers
|
|
66
|
+
*/
|
|
48
67
|
export const XSI_NAMESPACE = "http://www.w3.org/2001/XMLSchema-instance";
|
|
49
68
|
|
|
50
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* The GraphML schema location written by the exporter.
|
|
71
|
+
* @category Plugin helpers
|
|
72
|
+
*/
|
|
51
73
|
export const SCHEMA_LOCATION =
|
|
52
74
|
"http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd";
|
|
53
75
|
|
|
54
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* The format name.
|
|
78
|
+
* @category Plugin helpers
|
|
79
|
+
*/
|
|
55
80
|
export const FORMAT = "graphml";
|
|
56
81
|
|
|
57
|
-
/**
|
|
82
|
+
/**
|
|
83
|
+
* File extensions.
|
|
84
|
+
* @category Plugin helpers
|
|
85
|
+
*/
|
|
58
86
|
export const EXTENSIONS: readonly string[] = Object.freeze([".graphml", ".xml"]);
|
|
59
87
|
|
|
60
|
-
/**
|
|
88
|
+
/**
|
|
89
|
+
* MIME types.
|
|
90
|
+
* @category Plugin helpers
|
|
91
|
+
*/
|
|
61
92
|
export const MIME_TYPES: readonly string[] = Object.freeze(["application/graphml+xml", "application/xml", "text/xml"]);
|
|
62
93
|
|
|
63
|
-
/**
|
|
94
|
+
/**
|
|
95
|
+
* The `attr.name` of the node key that carries ids rewritten by `sanitizeIds: "mangle"`.
|
|
96
|
+
* @category Plugin helpers
|
|
97
|
+
*/
|
|
64
98
|
export const ORIGINAL_ID_ATTRIBUTE = "graphty:originalId";
|
|
65
99
|
|
|
66
|
-
/**
|
|
100
|
+
/**
|
|
101
|
+
* The node column that keeps original ids when `restoreMangledIds` is off.
|
|
102
|
+
* @category Plugin helpers
|
|
103
|
+
*/
|
|
67
104
|
export const ORIGINAL_ID_COLUMN = "graphty.originalId";
|
|
68
105
|
|
|
69
|
-
/**
|
|
106
|
+
/**
|
|
107
|
+
* The edge column of the `id` XML attribute (role id, unique).
|
|
108
|
+
* @category Plugin helpers
|
|
109
|
+
*/
|
|
70
110
|
export const EDGE_ID_COLUMN = "id";
|
|
71
111
|
|
|
72
|
-
/**
|
|
112
|
+
/**
|
|
113
|
+
* The edge columns of the `sourceport` / `targetport` XML attributes (roles sourcePort / targetPort).
|
|
114
|
+
* @category Plugin helpers
|
|
115
|
+
*/
|
|
73
116
|
export const SOURCE_PORT_COLUMN = "sourceport";
|
|
74
117
|
|
|
75
|
-
/**
|
|
118
|
+
/**
|
|
119
|
+
* The edge column of the `targetport` XML attribute.
|
|
120
|
+
* @category Plugin helpers
|
|
121
|
+
*/
|
|
76
122
|
export const TARGET_PORT_COLUMN = "targetport";
|
|
77
123
|
|
|
78
|
-
/**
|
|
124
|
+
/**
|
|
125
|
+
* The node column of the containing node of a nested graph (u32, role parent, refersTo node).
|
|
126
|
+
* @category Plugin helpers
|
|
127
|
+
*/
|
|
79
128
|
export const PARENT_COLUMN = "parent";
|
|
80
129
|
|
|
81
|
-
/**
|
|
130
|
+
/**
|
|
131
|
+
* The bool node column marking the hub nodes synthesized for hyperedges under `hyperedges: "star"`.
|
|
132
|
+
* @category Plugin helpers
|
|
133
|
+
*/
|
|
82
134
|
export const HYPEREDGE_HUB_COLUMN = "graphty.hyperedge";
|
|
83
135
|
|
|
84
|
-
/**
|
|
136
|
+
/**
|
|
137
|
+
* The column name a node key titled `label` receives the `label` role under.
|
|
138
|
+
* @category Plugin helpers
|
|
139
|
+
*/
|
|
85
140
|
export const LABEL_COLUMN = "label";
|
|
86
141
|
|
|
87
|
-
/**
|
|
142
|
+
/**
|
|
143
|
+
* Edge column names reserved for the XML-attribute-derived columns; a key titled like one is renamed `<name>#<id>`.
|
|
144
|
+
* @category Plugin helpers
|
|
145
|
+
*/
|
|
88
146
|
export const RESERVED_EDGE_NAMES: ReadonlySet<string> = new Set([
|
|
89
147
|
EDGE_ID_COLUMN,
|
|
90
148
|
SOURCE_PORT_COLUMN,
|
|
91
149
|
TARGET_PORT_COLUMN,
|
|
92
150
|
]);
|
|
93
151
|
|
|
94
|
-
/**
|
|
152
|
+
/**
|
|
153
|
+
* Node column names reserved for the XML-derived columns.
|
|
154
|
+
* @category Plugin helpers
|
|
155
|
+
*/
|
|
95
156
|
export const RESERVED_NODE_NAMES: ReadonlySet<string> = new Set([PARENT_COLUMN]);
|
|
96
157
|
|
|
97
|
-
/**
|
|
158
|
+
/**
|
|
159
|
+
* The `meta.extra` key under which the importer records what the exporter needs.
|
|
160
|
+
* @category Plugin helpers
|
|
161
|
+
*/
|
|
98
162
|
export const META_KEY = "graphml";
|
|
99
163
|
|
|
100
|
-
/**
|
|
164
|
+
/**
|
|
165
|
+
* What the importer stores under `meta.extra.graphml`.
|
|
166
|
+
* @category Plugin helpers
|
|
167
|
+
*/
|
|
101
168
|
export interface GraphmlMeta {
|
|
102
169
|
/** The top-level `<graph id>`, or null. */
|
|
103
170
|
readonly graphId: string | null;
|
|
@@ -108,24 +175,41 @@ export interface GraphmlMeta {
|
|
|
108
175
|
}
|
|
109
176
|
|
|
110
177
|
/**
|
|
111
|
-
* The issue codes the GraphML importer records
|
|
112
|
-
* with the other importers
|
|
178
|
+
* The issue codes the GraphML importer records, by name: the codes shared
|
|
179
|
+
* with the other importers and the GraphML-specific ones. A key is the code
|
|
113
180
|
* without its severity and format prefixes.
|
|
181
|
+
* @category Built-in formats
|
|
114
182
|
*/
|
|
115
183
|
export const GRAPHML_ISSUE = Object.freeze({
|
|
116
|
-
|
|
184
|
+
...INPUT_ISSUE,
|
|
185
|
+
...ELEMENT_ISSUE,
|
|
186
|
+
/**
|
|
187
|
+
* A value that does not parse as the type its attribute declares ("x" in an integer attribute). The value is
|
|
188
|
+
* left unset; the node or edge is kept.
|
|
189
|
+
*/
|
|
190
|
+
COLUMN_TYPE: COLUMN_TYPE_CODE,
|
|
191
|
+
/** The input is not well-formed XML. The import stops. */
|
|
117
192
|
XML_SYNTAX: XML_SYNTAX_CODE,
|
|
118
|
-
/**
|
|
193
|
+
/** The input is not valid UTF-8. The import stops. */
|
|
119
194
|
INVALID_UTF8: INVALID_UTF8_CODE,
|
|
120
|
-
/**
|
|
195
|
+
/**
|
|
196
|
+
* Some bytes are not valid in the encoding that was chosen (by a byte order mark, the file's declaration or the
|
|
197
|
+
* `encoding` option). The import stops.
|
|
198
|
+
*/
|
|
121
199
|
INVALID_ENCODING: INVALID_ENCODING_CODE,
|
|
122
200
|
/** Bytes that are not UTF-8 and declare no encoding were read as windows-1252. */
|
|
123
201
|
ENCODING_FALLBACK: ENCODING_FALLBACK_CODE,
|
|
124
202
|
/** A declared encoding the platform cannot decode was ignored. */
|
|
125
203
|
UNKNOWN_ENCODING: UNKNOWN_ENCODING_CODE,
|
|
126
|
-
/**
|
|
204
|
+
/** A declared encoding the byte order mark contradicts (the mark wins). */
|
|
205
|
+
ENCODING_CONFLICT: ENCODING_CONFLICT_CODE,
|
|
206
|
+
/** The input holds no XML at all: it is empty, whitespace or a byte order mark only. The import stops. */
|
|
207
|
+
EMPTY_INPUT: EMPTY_INPUT_CODE,
|
|
208
|
+
/** The root element is not `<graphml>`. The import stops. */
|
|
127
209
|
NOT_GRAPHML: "E_NOT_GRAPHML",
|
|
128
|
-
/**
|
|
210
|
+
/** The `<graphml>` root is in a namespace other than GraphML's; it is read as GraphML. */
|
|
211
|
+
NAMESPACE: "W_GRAPHML_NAMESPACE",
|
|
212
|
+
/** The document has no `<graph>`. The import stops. */
|
|
129
213
|
NO_GRAPH: NO_GRAPH_CODE,
|
|
130
214
|
/** A `<key>` without an id. */
|
|
131
215
|
KEY_MISSING_ID: "E_GRAPHML_KEY_MISSING_ID",
|
|
@@ -137,8 +221,18 @@ export const GRAPHML_ISSUE = Object.freeze({
|
|
|
137
221
|
MISSING_ID: MISSING_ID_CODE,
|
|
138
222
|
/** An `<edge>` without a source or a target. */
|
|
139
223
|
MISSING_ENDPOINT: MISSING_ENDPOINT_CODE,
|
|
224
|
+
/** An edge endpoint that names no declared node under `addMissingNodes: false`; the edge is skipped. */
|
|
225
|
+
UNKNOWN_NODE: "E_UNKNOWN_NODE",
|
|
226
|
+
/** An edge endpoint that names a nested `<graph>`, not a node; a node of that id is created. */
|
|
227
|
+
GRAPH_ENDPOINT: "W_GRAPHML_GRAPH_ENDPOINT",
|
|
228
|
+
/** The nodes of a nested graph whose container node was skipped lose their parent. */
|
|
229
|
+
UNKNOWN_PARENT: UNKNOWN_PARENT_CODE,
|
|
230
|
+
/** Two `<data>` of one key on one element, two `<default>` in one key, or two weight keys; one is kept. */
|
|
231
|
+
DUPLICATE_ATTRIBUTE: DUPLICATE_ATTRIBUTE_CODE,
|
|
140
232
|
/** A `<data>` whose key was never declared. */
|
|
141
233
|
UNKNOWN_KEY: "E_GRAPHML_UNKNOWN_KEY",
|
|
234
|
+
/** A `<key>` declared after `<data>` that used it; those values were already reported and dropped. */
|
|
235
|
+
KEY_DECLARED_LATE: "W_GRAPHML_KEY_DECLARED_LATE",
|
|
142
236
|
/** A `<data>` whose key is declared for another domain. */
|
|
143
237
|
KEY_DOMAIN: "W_GRAPHML_KEY_DOMAIN",
|
|
144
238
|
/** A `<data>` without a key attribute. */
|
|
@@ -161,10 +255,20 @@ export const GRAPHML_ISSUE = Object.freeze({
|
|
|
161
255
|
INVALID_EDGEDEFAULT: "E_GRAPHML_INVALID_EDGEDEFAULT",
|
|
162
256
|
/** A `<graph>` without edgedefault; the `defaultDirected` option applies. */
|
|
163
257
|
EDGEDEFAULT_MISSING: "W_GRAPHML_EDGEDEFAULT_MISSING",
|
|
164
|
-
/**
|
|
258
|
+
/**
|
|
259
|
+
* The file holds more than one top-level `<graph>`; their nodes and edges are merged into one graph.
|
|
260
|
+
* `importAllGraphs()` reads every one.
|
|
261
|
+
*/
|
|
165
262
|
MULTIPLE_GRAPHS: MULTIPLE_GRAPHS_CODE,
|
|
166
|
-
/**
|
|
263
|
+
/**
|
|
264
|
+
* A node or edge count the file announces is too large to reserve room for; it is ignored and the elements are
|
|
265
|
+
* read as they come.
|
|
266
|
+
*/
|
|
167
267
|
COUNT_HINT: COUNT_HINT_CODE,
|
|
268
|
+
/**
|
|
269
|
+
* A `parse.nodes` or `parse.edges` count disagrees with what the graph holds. The elements are read as they are.
|
|
270
|
+
*/
|
|
271
|
+
COUNT_MISMATCH: COUNT_MISMATCH_CODE,
|
|
168
272
|
/** A hyperedge under `hyperedges: "error"`. */
|
|
169
273
|
HYPEREDGE: HYPEREDGE_CODE,
|
|
170
274
|
/** Hyperedges skipped under `hyperedges: "skip"`. */
|
|
@@ -173,10 +277,23 @@ export const GRAPHML_ISSUE = Object.freeze({
|
|
|
173
277
|
HYPEREDGE_ENDPOINT: "E_GRAPHML_HYPEREDGE_ENDPOINT",
|
|
174
278
|
/** `<port>` declarations (and their data) are not kept; sourceport / targetport edge attributes are. */
|
|
175
279
|
PORT_DECLARATION: "W_GRAPHML_PORT_DECLARATION",
|
|
176
|
-
/** A
|
|
280
|
+
/** A `sourceport` / `targetport` naming a port its node does not declare (once, with the count). */
|
|
281
|
+
DANGLING_REFERENCE: DANGLING_REFERENCE_CODE,
|
|
282
|
+
/** A `<graph>` inside an `<edge>` (legal GraphML): it and the nodes and edges it holds are dropped. */
|
|
283
|
+
EDGE_GRAPH_DROPPED: "W_GRAPHML_EDGE_GRAPH_DROPPED",
|
|
284
|
+
/** A `<node>` whose id is that of a hub `hyperedges: "star"` created; the node is merged into the hub. */
|
|
285
|
+
HUB_ID_CLASH: "W_GRAPHML_HUB_ID_CLASH",
|
|
286
|
+
/** A `graphty:originalId` value that is not text, or arrives after the node was added (after its nested graph). */
|
|
287
|
+
ORIGINAL_ID_IGNORED: "W_GRAPHML_ORIGINAL_ID_IGNORED",
|
|
288
|
+
/** A yFiles graphics value (a geometry coordinate, a width) that is not a number; it is not mapped. */
|
|
289
|
+
YFILES_VALUE: "W_GRAPHML_YFILES_VALUE",
|
|
290
|
+
/**
|
|
291
|
+
* A GraphML `parse.*` attribute (`parse.nodeids`, `parse.order`, ...) that graph-io does not act on; the file is
|
|
292
|
+
* read normally.
|
|
293
|
+
*/
|
|
177
294
|
PARSE_HINT_IGNORED: "W_GRAPHML_PARSE_HINT_IGNORED",
|
|
178
|
-
/** An XML attribute GraphML does not define
|
|
179
|
-
UNKNOWN_XML_ATTRIBUTE:
|
|
295
|
+
/** An XML attribute GraphML does not define (or the importer does not keep) on an element; it is not kept. */
|
|
296
|
+
UNKNOWN_XML_ATTRIBUTE: UNKNOWN_XML_ATTRIBUTE_CODE,
|
|
180
297
|
/** A `<locator>` element. */
|
|
181
298
|
LOCATOR_DROPPED: "W_GRAPHML_LOCATOR_DROPPED",
|
|
182
299
|
/** A `<desc>` of a node, an edge or a hyperedge. */
|
|
@@ -187,27 +304,43 @@ export const GRAPHML_ISSUE = Object.freeze({
|
|
|
187
304
|
STRAY_TEXT: STRAY_TEXT_CODE,
|
|
188
305
|
/** Two distinct id texts merged into one number under `ids: "number"`. */
|
|
189
306
|
ID_MERGED: ID_MERGED_CODE,
|
|
190
|
-
/**
|
|
307
|
+
/** You set an option this format does not use; it had no effect. The message names the option. */
|
|
191
308
|
OPTION_IGNORED: OPTION_IGNORED_CODE,
|
|
192
309
|
/** A yFiles key under `yfiles: "skip"`. */
|
|
193
310
|
YFILES_SKIPPED: "W_GRAPHML_YFILES_SKIPPED",
|
|
194
|
-
/**
|
|
311
|
+
/**
|
|
312
|
+
* An attribute was renamed `<name>#<suffix>` because another attribute already has its name, for example
|
|
313
|
+
* two attributes declared with the same name.
|
|
314
|
+
*/
|
|
195
315
|
COLUMN_RENAMED: COLUMN_RENAMED_CODE,
|
|
196
|
-
/**
|
|
316
|
+
/**
|
|
317
|
+
* You read into a graph builder that already has an id, label or position attribute, so this file's one is kept as
|
|
318
|
+
* a plain attribute.
|
|
319
|
+
*/
|
|
197
320
|
ROLE_TAKEN: ROLE_TAKEN_CODE,
|
|
198
321
|
/** A declared type the format does not define (kept as string). */
|
|
199
322
|
UNKNOWN_ATTR_TYPE: UNKNOWN_ATTR_TYPE_CODE,
|
|
200
323
|
/** A default that does not parse as the declared type. */
|
|
201
324
|
BAD_DEFAULT: BAD_DEFAULT_CODE,
|
|
202
|
-
/**
|
|
325
|
+
/** An integer beyond 2^53 was stored as the nearest 64-bit float; pass `long: "string"` to keep every digit. */
|
|
203
326
|
PRECISION: PRECISION_CODE,
|
|
204
|
-
/**
|
|
327
|
+
/**
|
|
328
|
+
* You read into your own graph builder, which was created with a different `addMissingNodes`, `duplicateEdges`,
|
|
329
|
+
* `selfLoops` or `weightDtype` than the option you passed; the builder's setting applies.
|
|
330
|
+
*/
|
|
205
331
|
SINK_OPTION: SINK_OPTION_CODE,
|
|
206
|
-
/**
|
|
332
|
+
/**
|
|
333
|
+
* You read into a graph builder whose direction is already set, or which already holds edges, so the file is read
|
|
334
|
+
* with the builder's direction instead of its own.
|
|
335
|
+
*/
|
|
207
336
|
DIRECTION_REFUSED: DIRECTION_REFUSED_CODE,
|
|
208
|
-
/** Edges
|
|
337
|
+
/** Edges of the other direction were read with the direction `onMixedDirection` chose. */
|
|
209
338
|
DIRECTION_FORCED: DIRECTION_FORCED_CODE,
|
|
210
|
-
/**
|
|
339
|
+
/**
|
|
340
|
+
* The graph has both directed and undirected edges and `onMixedDirection` is "error". An import stops; a save to a
|
|
341
|
+
* format that holds one direction per file fails with E_DIRECTED. Pass "directed" or "undirected" to read or write
|
|
342
|
+
* it anyway.
|
|
343
|
+
*/
|
|
211
344
|
MIXED_DIRECTION: MIXED_DIRECTION_CODE,
|
|
212
345
|
});
|
|
213
346
|
|
|
@@ -215,26 +348,27 @@ export const GRAPHML_ISSUE = Object.freeze({
|
|
|
215
348
|
* Loss note codes of the GraphML importer (report.lossy) and exporter (check()): the GraphML
|
|
216
349
|
* ones; the generic ones (dtypes, lists, json text, positions, visual and temporal roles,
|
|
217
350
|
* extension tables, id charsets, the weight key clash, name changes) are those of `LOSS`.
|
|
351
|
+
* @category Built-in formats
|
|
218
352
|
*/
|
|
219
353
|
export const GRAPHML_LOSS = Object.freeze({
|
|
220
|
-
/**
|
|
354
|
+
/** YFiles nested XML kept as a JSON tree: structure preserved, not byte-exact. */
|
|
221
355
|
YFILES_JSON: "W_GRAPHML_YFILES_JSON",
|
|
222
356
|
/** A mutual pair written as one undirected edge; the mark is lost. */
|
|
223
357
|
MUTUAL_AS_UNDIRECTED: MUTUAL_AS_UNDIRECTED_CODE,
|
|
224
358
|
/** A `parents` (multi-parent) column cannot be written as nested graphs. */
|
|
225
359
|
PARENTS_DROPPED: PARENTS_DROPPED_CODE,
|
|
226
|
-
/**
|
|
360
|
+
/** An attribute with a role the format has no place for is written as a plain attribute; the role is lost. */
|
|
227
361
|
ROLE_DROPPED: ROLE_DROPPED_CODE,
|
|
228
362
|
/** Containment order differs from index order; node indices change after a round trip. */
|
|
229
363
|
HIERARCHY_REORDERED: "W_GRAPHML_HIERARCHY_REORDERED",
|
|
230
364
|
/** Nodes whose parent chain never reaches a root are written at the top level. */
|
|
231
365
|
PARENT_CYCLE: "W_GRAPHML_PARENT_CYCLE",
|
|
232
|
-
/** Node ids that
|
|
366
|
+
/** Node ids that read back as a different type, such as the text "7" as the number 7. */
|
|
233
367
|
ID_TEXT_TYPE: ID_TEXT_TYPE_CODE,
|
|
234
368
|
/** A numeric edge id column reads back as string. */
|
|
235
369
|
EDGE_ID_TEXT: "W_GRAPHML_EDGE_ID_TEXT",
|
|
236
370
|
/** A `yfiles.*` graphics column that no longer matches its yFiles tree: only the tree is written. */
|
|
237
371
|
YFILES_GRAPHICS_STALE: "W_GRAPHML_YFILES_GRAPHICS_STALE",
|
|
238
|
-
/** A
|
|
372
|
+
/** A yEd graphics value that is not valid XML; the save fails with E_COLUMN_TYPE. */
|
|
239
373
|
YFILES_TREE: "E_GRAPHML_YFILES_TREE",
|
|
240
374
|
});
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* temporal roles, extension tables) plus the GraphML-specific ones (mutual edges written as
|
|
14
14
|
* undirected, json columns without a yfiles origin written as JSON text, multi-parent columns,
|
|
15
15
|
* containment order, ids that change type under the canonical rule, edge ids that read back as
|
|
16
|
-
* strings, roles GraphML cannot express, yfiles values that are not
|
|
16
|
+
* strings, roles GraphML cannot express, yfiles values that are not serializable trees).
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
import { type Column, GraphFormatError, type GraphSnapshot, INVALID_INDEX } from "@graphty/graph-format";
|
|
@@ -33,6 +33,7 @@ import {
|
|
|
33
33
|
import { formatF32, formatF64, formatInteger } from "../../common/format.js";
|
|
34
34
|
import { isCanonicalIntegerText } from "../../common/ids.js";
|
|
35
35
|
import { type ResolvedExportOptions, resolveExportOptions } from "../../common/options.js";
|
|
36
|
+
import { agree, plural } from "../../common/plural.js";
|
|
36
37
|
import { type ExplicitWeights, explicitWeights } from "../../common/weights.js";
|
|
37
38
|
import { encodeChunks, joinText } from "../../common/writer.js";
|
|
38
39
|
import { xmlIllegalTextNotes } from "../../common/xml.js";
|
|
@@ -58,14 +59,21 @@ import {
|
|
|
58
59
|
import { treeProblem, writeXmlTree } from "./tree.js";
|
|
59
60
|
import { isGraphicsColumn, staleGraphicsRows } from "./yfiles.js";
|
|
60
61
|
|
|
61
|
-
/**
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
/**
|
|
63
|
+
* The format-specific options of the GraphML exporter.
|
|
64
|
+
* @category Built-in formats
|
|
65
|
+
*/
|
|
66
|
+
export interface GraphmlExportOptions extends CommonExportOptions {
|
|
67
|
+
/**
|
|
68
|
+
* Indent nested elements; false writes one element per line without indentation.
|
|
69
|
+
* @defaultValue true
|
|
70
|
+
*/
|
|
64
71
|
pretty?: boolean | undefined;
|
|
65
72
|
/**
|
|
66
|
-
* The
|
|
67
|
-
*
|
|
68
|
-
*
|
|
73
|
+
* The `edgedefault` of the graph element. The default is the one a GraphML import read, so a
|
|
74
|
+
* file with both directions reads back with the same edges marked, else the graph's direction
|
|
75
|
+
* (for a graph with both, the direction most edges have).
|
|
76
|
+
* @defaultValue as read
|
|
69
77
|
*/
|
|
70
78
|
edgedefault?: "directed" | "undirected" | undefined;
|
|
71
79
|
}
|
|
@@ -326,7 +334,7 @@ function planExport(snapshot: GraphSnapshot, options: ResolvedExportOptions, for
|
|
|
326
334
|
if (idTypeChanges > 0) {
|
|
327
335
|
note(
|
|
328
336
|
GRAPHML_LOSS.ID_TEXT_TYPE,
|
|
329
|
-
`${idTypeChanges} node id(
|
|
337
|
+
`${idTypeChanges} node id${plural(idTypeChanges)} ${agree(idTypeChanges, "changes", "change")} type when read back under ids: "canonical" (string ids that are integer text, non-integer numbers)`,
|
|
330
338
|
null,
|
|
331
339
|
idTypeChanges,
|
|
332
340
|
);
|
|
@@ -344,7 +352,7 @@ function planExport(snapshot: GraphSnapshot, options: ResolvedExportOptions, for
|
|
|
344
352
|
if (folding.mutualCount > 0) {
|
|
345
353
|
note(
|
|
346
354
|
GRAPHML_LOSS.MUTUAL_AS_UNDIRECTED,
|
|
347
|
-
`${folding.mutualCount} mutual pair(
|
|
355
|
+
`${folding.mutualCount} mutual pair${plural(folding.mutualCount)} ${agree(folding.mutualCount, "is", "are")} written as undirected edges; the mutual mark is lost`,
|
|
348
356
|
null,
|
|
349
357
|
folding.mutualCount,
|
|
350
358
|
);
|
|
@@ -363,7 +371,7 @@ function planExport(snapshot: GraphSnapshot, options: ResolvedExportOptions, for
|
|
|
363
371
|
if (hierarchy.unreachable > 0) {
|
|
364
372
|
note(
|
|
365
373
|
GRAPHML_LOSS.PARENT_CYCLE,
|
|
366
|
-
`${hierarchy.unreachable} node(
|
|
374
|
+
`${hierarchy.unreachable} node${plural(hierarchy.unreachable)} whose parent chain never reaches a root ${agree(hierarchy.unreachable, "is", "are")} written at the top level`,
|
|
367
375
|
hierarchy.parent?.meta.name ?? null,
|
|
368
376
|
hierarchy.unreachable,
|
|
369
377
|
);
|
|
@@ -520,7 +528,7 @@ function planWeight(
|
|
|
520
528
|
if (plan.attrName === attrName) {
|
|
521
529
|
note(
|
|
522
530
|
LOSS.WEIGHT_KEY_CLASH,
|
|
523
|
-
`edge column "${plan.column.meta.name}" is written as a key titled "${attrName}", which the importer reads as
|
|
531
|
+
`edge column "${plan.column.meta.name}" is written as a key titled "${attrName}", which the importer reads as the edge weight (weightFrom); it reads back as the weight, not as a column`,
|
|
524
532
|
plan.column.meta.name,
|
|
525
533
|
plan.column.length - plan.column.nullCount,
|
|
526
534
|
);
|
|
@@ -567,11 +575,16 @@ function planEdgeIds(snapshot: GraphSnapshot, column: Column, options: ResolvedE
|
|
|
567
575
|
return;
|
|
568
576
|
}
|
|
569
577
|
if (options.sanitizeIds === "mangle") {
|
|
570
|
-
note(
|
|
578
|
+
note(
|
|
579
|
+
LOSS.ID_MANGLED,
|
|
580
|
+
`${bad} edge id${plural(bad)} outside the nmtoken charset ${agree(bad, "is", "are")} rewritten`,
|
|
581
|
+
column.meta.name,
|
|
582
|
+
bad,
|
|
583
|
+
);
|
|
571
584
|
} else {
|
|
572
585
|
note(
|
|
573
586
|
LOSS.ID_CHARSET,
|
|
574
|
-
`${bad} edge id(
|
|
587
|
+
`${bad} edge id${plural(bad)} outside the nmtoken charset; the save fails unless sanitizeIds is "mangle"`,
|
|
575
588
|
column.meta.name,
|
|
576
589
|
bad,
|
|
577
590
|
);
|
|
@@ -661,7 +674,7 @@ function planTable(table: Iterable<Column>, domain: Domain, notes: LossNote[], n
|
|
|
661
674
|
if (stale > 0) {
|
|
662
675
|
note(
|
|
663
676
|
GRAPHML_LOSS.YFILES_GRAPHICS_STALE,
|
|
664
|
-
`${stale} value(
|
|
677
|
+
`${stale} value${plural(stale)} of ${domain} column "${name}" differ from the yFiles tree it was read from; only the tree is written, so they are lost`,
|
|
665
678
|
name,
|
|
666
679
|
stale,
|
|
667
680
|
);
|
|
@@ -707,7 +720,7 @@ function planTable(table: Iterable<Column>, domain: Domain, notes: LossNote[], n
|
|
|
707
720
|
if (bad > 0) {
|
|
708
721
|
note(
|
|
709
722
|
GRAPHML_LOSS.YFILES_TREE,
|
|
710
|
-
`${bad} value(
|
|
723
|
+
`${bad} value${plural(bad)} of yfiles column "${name}" ${agree(bad, "is", "are")} not XML trees; the save fails with E_COLUMN_TYPE`,
|
|
711
724
|
name,
|
|
712
725
|
bad,
|
|
713
726
|
);
|
|
@@ -819,6 +832,10 @@ function attrTypeFor(column: Column): string {
|
|
|
819
832
|
case "u32":
|
|
820
833
|
return columnMax(column) <= I32_MAX ? "int" : "long";
|
|
821
834
|
case "string":
|
|
835
|
+
if (declared !== null && declared.trim().toLowerCase() === "long" && columnIntegerText(column)) {
|
|
836
|
+
// a long column read with long: "string" keeps its declared type, for other readers
|
|
837
|
+
return "long";
|
|
838
|
+
}
|
|
822
839
|
if (declared !== null && TYPE_DTYPES[declared.trim().toLowerCase()] === undefined) {
|
|
823
840
|
// an unknown declared type kept as text (W_UNKNOWN_ATTR_TYPE on import) is restored as declared
|
|
824
841
|
return declared;
|
|
@@ -835,6 +852,21 @@ function attrTypeFor(column: Column): string {
|
|
|
835
852
|
}
|
|
836
853
|
}
|
|
837
854
|
|
|
855
|
+
/**
|
|
856
|
+
* Whether every set value of a string column is integer text, as a long column read with
|
|
857
|
+
* `long: "string"` holds.
|
|
858
|
+
* @param column - a string column
|
|
859
|
+
* @returns true when all set values are integer text
|
|
860
|
+
*/
|
|
861
|
+
function columnIntegerText(column: Column): boolean {
|
|
862
|
+
for (let r = 0; r < column.length; r++) {
|
|
863
|
+
if (column.isSet(r) && !/^[+-]?\d+$/.test(String(column.value(r)))) {
|
|
864
|
+
return false;
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
return true;
|
|
868
|
+
}
|
|
869
|
+
|
|
838
870
|
/**
|
|
839
871
|
* Whether every set value of a numeric column is an integer.
|
|
840
872
|
* @param column - an f64 column
|
|
@@ -888,7 +920,7 @@ function weightsIntegral(snapshot: GraphSnapshot, weights: ExplicitWeights): boo
|
|
|
888
920
|
}
|
|
889
921
|
|
|
890
922
|
/**
|
|
891
|
-
* How many values of a yfiles column are not
|
|
923
|
+
* How many values of a yfiles column are not serializable trees.
|
|
892
924
|
* @param column - a json column
|
|
893
925
|
* @returns the count
|
|
894
926
|
*/
|
|
@@ -1199,7 +1231,7 @@ function sanitizeEdgeIds(column: Column | null, mode: "error" | "mangle", edgeCo
|
|
|
1199
1231
|
if (bad.length > 0 && mode === "error") {
|
|
1200
1232
|
throw new GraphFormatError(
|
|
1201
1233
|
"E_INVALID_ID",
|
|
1202
|
-
`${bad.length} edge id(
|
|
1234
|
+
`${bad.length} edge id${plural(bad.length)} ${agree(bad.length, "is", "are")} not XML name tokens (first: ${JSON.stringify(edgeIdText(column, bad[0]))} at edge ${bad[0]}); pass sanitizeIds: "mangle" to rewrite them`,
|
|
1203
1235
|
{ reason: "charset", charset: "nmtoken", count: bad.length, edge: bad[0] },
|
|
1204
1236
|
);
|
|
1205
1237
|
}
|
|
@@ -1439,10 +1471,12 @@ function* writeNodeSubtree(
|
|
|
1439
1471
|
}
|
|
1440
1472
|
|
|
1441
1473
|
/**
|
|
1442
|
-
* The GraphML exporter
|
|
1474
|
+
* The GraphML exporter.
|
|
1475
|
+
* @category Built-in formats
|
|
1443
1476
|
*/
|
|
1444
1477
|
export const graphmlExporter: GraphExporter<GraphmlExportOptions> = Object.freeze({
|
|
1445
1478
|
format: FORMAT,
|
|
1479
|
+
options: Object.freeze(["edgedefault", "pretty"]),
|
|
1446
1480
|
capabilities: CAPABILITIES,
|
|
1447
1481
|
/**
|
|
1448
1482
|
* Pre-flight: every loss the export would incur.
|