@graphty/graph-io 0.3.25 → 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
|
@@ -17,12 +17,14 @@ import { GraphFormatError, type GraphSink } from "@graphty/graph-format";
|
|
|
17
17
|
import { textChunks, throwIfAborted } from "../../common/input.js";
|
|
18
18
|
import {
|
|
19
19
|
chooseGraph,
|
|
20
|
+
graphChosen,
|
|
20
21
|
type ImportFormatDefaults,
|
|
21
22
|
reportSinkOptions,
|
|
22
23
|
reportUnusedOptions,
|
|
23
24
|
type ResolvedImportOptions,
|
|
24
25
|
resolveImportOptions,
|
|
25
26
|
} from "../../common/options.js";
|
|
27
|
+
import { agree, elementCount } from "../../common/plural.js";
|
|
26
28
|
import { ImportReportBuilder } from "../../common/report.js";
|
|
27
29
|
import { isWhitespace, tokenizeXml, xmlDeclaredEncoding, type XmlRepairs, XmlSyntaxError } from "../../common/xml.js";
|
|
28
30
|
import {
|
|
@@ -45,24 +47,41 @@ import {
|
|
|
45
47
|
type XgmmlSettings,
|
|
46
48
|
} from "./emit.js";
|
|
47
49
|
|
|
48
|
-
/**
|
|
49
|
-
|
|
50
|
+
/**
|
|
51
|
+
* The format-specific options of the XGMML importer.
|
|
52
|
+
* @category Built-in formats
|
|
53
|
+
*/
|
|
54
|
+
export interface XgmmlImportOptions extends GraphChoiceOptions, CommonImportOptions {
|
|
50
55
|
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
56
|
+
* Find an edge end that is missing, or names no node, from Cytoscape's `"source (interaction)
|
|
57
|
+
* target"` edge label, and fill a missing interaction from it. The default is on for files that
|
|
58
|
+
* use Cytoscape's (`cy`) namespace, off for others.
|
|
59
|
+
* @defaultValue on for Cytoscape files
|
|
54
60
|
*/
|
|
55
61
|
labelAliases?: boolean | undefined;
|
|
56
62
|
/**
|
|
57
|
-
* Decode Cytoscape's two-character `\n` and `\t` escapes in
|
|
58
|
-
* files that use
|
|
63
|
+
* Decode Cytoscape's two-character `\n` and `\t` escapes in text values. The default is on for
|
|
64
|
+
* files that use Cytoscape's namespace, off for others.
|
|
65
|
+
* @defaultValue on for Cytoscape files
|
|
59
66
|
*/
|
|
60
67
|
cytoscapeEscapes?: boolean | undefined;
|
|
61
|
-
/**
|
|
68
|
+
/**
|
|
69
|
+
* Read an `&` that is not followed by `;` within 7 characters as `&`, with a warning for
|
|
70
|
+
* each, instead of failing on the invalid XML.
|
|
71
|
+
* @defaultValue false
|
|
72
|
+
*/
|
|
62
73
|
repairBareAmpersands?: boolean | undefined;
|
|
63
|
-
/**
|
|
74
|
+
/**
|
|
75
|
+
* Join two character references that each hold half of a character (`��`) into
|
|
76
|
+
* that character, with a warning for each pair, instead of failing.
|
|
77
|
+
* @defaultValue false
|
|
78
|
+
*/
|
|
64
79
|
pairSurrogateReferences?: boolean | undefined;
|
|
65
|
-
/**
|
|
80
|
+
/**
|
|
81
|
+
* Where Cytoscape's `z` value (a drawing order, not a depth) goes: "column" keeps it as a node
|
|
82
|
+
* attribute named `z`; "position" makes it the third coordinate of the position.
|
|
83
|
+
* @defaultValue "column"
|
|
84
|
+
*/
|
|
66
85
|
zAs?: "column" | "position" | undefined;
|
|
67
86
|
}
|
|
68
87
|
|
|
@@ -91,12 +110,6 @@ const USED_OPTIONS: ReadonlySet<keyof CommonImportOptions> = new Set<keyof Commo
|
|
|
91
110
|
"encoding",
|
|
92
111
|
]);
|
|
93
112
|
|
|
94
|
-
/** Bytes inspected by sniff(). */
|
|
95
|
-
const SNIFF_BYTES = 4096;
|
|
96
|
-
|
|
97
|
-
/** The head of the document kept for the DOCTYPE check. */
|
|
98
|
-
const HEAD_CHARS = 2048;
|
|
99
|
-
|
|
100
113
|
/** An XGMML DOCTYPE (Cytoscape's file filter tests the same). */
|
|
101
114
|
const XGMML_DOCTYPE = /<!DOCTYPE\s+graph\s[^<>]*xgmml\.dtd/i;
|
|
102
115
|
|
|
@@ -105,6 +118,7 @@ const XGMML_DOCTYPE = /<!DOCTYPE\s+graph\s[^<>]*xgmml\.dtd/i;
|
|
|
105
118
|
* @param options - the caller's options
|
|
106
119
|
* @param cytoscape - whether the document uses the Cytoscape namespace
|
|
107
120
|
* @returns the settings; E_UNSUPPORTED for a value of the wrong type
|
|
121
|
+
* @category Plugin helpers
|
|
108
122
|
*/
|
|
109
123
|
export function resolveSettings(options: XgmmlImportOptions | undefined, cytoscape: boolean): XgmmlSettings {
|
|
110
124
|
const zAs = options?.zAs ?? "column";
|
|
@@ -178,10 +192,10 @@ export async function parseXgmml(
|
|
|
178
192
|
: undefined,
|
|
179
193
|
};
|
|
180
194
|
const parser = new XgmmlParser(report);
|
|
181
|
-
const seen = {
|
|
195
|
+
const seen = { content: false };
|
|
182
196
|
try {
|
|
183
197
|
await tokenizeXml(
|
|
184
|
-
watch(textChunks(input, report, { ...common, declaredEncoding: xmlDeclaredEncoding }), seen),
|
|
198
|
+
watch(textChunks(input, report, { ...common, declaredEncoding: xmlDeclaredEncoding, xml: true }), seen),
|
|
185
199
|
parser,
|
|
186
200
|
repairs,
|
|
187
201
|
);
|
|
@@ -195,7 +209,7 @@ export async function parseXgmml(
|
|
|
195
209
|
throw err;
|
|
196
210
|
}
|
|
197
211
|
const doc = parser.document();
|
|
198
|
-
if (!doc.xgmmlNamespace && !XGMML_DOCTYPE.test(
|
|
212
|
+
if (!doc.xgmmlNamespace && !XGMML_DOCTYPE.test(doc.doctype ?? "")) {
|
|
199
213
|
report.warning(
|
|
200
214
|
"validation-error",
|
|
201
215
|
XGMML_ISSUE.NO_NAMESPACE,
|
|
@@ -207,22 +221,18 @@ export async function parseXgmml(
|
|
|
207
221
|
}
|
|
208
222
|
|
|
209
223
|
/**
|
|
210
|
-
* Pass text chunks through while
|
|
224
|
+
* Pass text chunks through while noting non-whitespace content.
|
|
211
225
|
* @param chunks - the chunks
|
|
212
|
-
* @param seen - where the
|
|
213
|
-
* @param seen.head - the first characters of the document
|
|
226
|
+
* @param seen - where the content flag is kept
|
|
214
227
|
* @param seen.content - whether non-whitespace text was seen
|
|
215
228
|
* @yields the chunks unchanged
|
|
216
229
|
* @returns nothing
|
|
217
230
|
*/
|
|
218
231
|
async function* watch(
|
|
219
232
|
chunks: AsyncIterable<string>,
|
|
220
|
-
seen: {
|
|
233
|
+
seen: { content: boolean },
|
|
221
234
|
): AsyncGenerator<string, void, undefined> {
|
|
222
235
|
for await (const chunk of chunks) {
|
|
223
|
-
if (seen.head.length < HEAD_CHARS) {
|
|
224
|
-
seen.head += chunk.slice(0, HEAD_CHARS - seen.head.length);
|
|
225
|
-
}
|
|
226
236
|
seen.content ||= !isWhitespace(chunk);
|
|
227
237
|
yield chunk;
|
|
228
238
|
}
|
|
@@ -313,7 +323,7 @@ function reportRootOnly(prepared: Prepared): void {
|
|
|
313
323
|
prepared.report.warning(
|
|
314
324
|
"unsupported",
|
|
315
325
|
XGMML_ISSUE.ROOT_ONLY_ELEMENTS,
|
|
316
|
-
`${nodes}
|
|
326
|
+
`${elementCount(nodes, edges)} ${agree(nodes + edges, "belongs", "belong")} to none of the file's networks (group meta-edges or collapsed group members) and ${agree(nodes + edges, "was", "were")} not read`,
|
|
317
327
|
);
|
|
318
328
|
}
|
|
319
329
|
}
|
|
@@ -336,11 +346,11 @@ async function importXgmml(
|
|
|
336
346
|
options,
|
|
337
347
|
prepared.report,
|
|
338
348
|
);
|
|
339
|
-
if (prepared.graphs.length > 1) {
|
|
349
|
+
if (prepared.graphs.length > 1 && !graphChosen(options)) {
|
|
340
350
|
prepared.report.warning(
|
|
341
351
|
"unsupported",
|
|
342
352
|
XGMML_ISSUE.MULTIPLE_GRAPHS,
|
|
343
|
-
`the session network document holds ${prepared.graphs.length} registered networks;
|
|
353
|
+
`the session network document holds ${prepared.graphs.length} registered networks; only the first is read (importAllGraphs() reads every one; graphIndex or graphName chooses one)`,
|
|
344
354
|
);
|
|
345
355
|
}
|
|
346
356
|
return emitOne(prepared, prepared.graphs[index], sink);
|
|
@@ -359,12 +369,13 @@ async function importAllXgmml(
|
|
|
359
369
|
sinkFor: (index: number) => GraphSink,
|
|
360
370
|
options?: XgmmlImportOptions & CommonImportOptions,
|
|
361
371
|
): Promise<ImportReport[]> {
|
|
362
|
-
const
|
|
363
|
-
|
|
372
|
+
const first = await prepare(input, null, options);
|
|
373
|
+
// the document is read once; every graph's report starts from what reading it recorded
|
|
374
|
+
const parsed = first.report.fork();
|
|
364
375
|
const reports: ImportReport[] = [];
|
|
365
376
|
for (let i = 0; i < first.graphs.length; i++) {
|
|
366
377
|
const sink = sinkFor(i);
|
|
367
|
-
const prepared = i === 0 ? first :
|
|
378
|
+
const prepared = i === 0 ? first : { ...first, report: parsed.fork() };
|
|
368
379
|
reportSinkOptions(sink, options, prepared.report, true);
|
|
369
380
|
reportUnusedOptions(options, prepared.report, USED_OPTIONS);
|
|
370
381
|
reports.push(emitOne(prepared, prepared.graphs[i], sink));
|
|
@@ -404,57 +415,6 @@ function graphName(graph: GraphRec, doc: XgmmlDocument): string | null {
|
|
|
404
415
|
return graph.label ?? (graph === doc.root ? (doc.rdf.title ?? null) : null) ?? graph.id ?? null;
|
|
405
416
|
}
|
|
406
417
|
|
|
407
|
-
/**
|
|
408
|
-
* The input in a form that can be read more than once (a stream is read into bytes).
|
|
409
|
-
* @param input - the input
|
|
410
|
-
* @returns the same input when it is a string or bytes, else the collected bytes
|
|
411
|
-
*/
|
|
412
|
-
async function reread(input: ImportInput): Promise<string | Uint8Array> {
|
|
413
|
-
if (typeof input === "string" || input instanceof Uint8Array) {
|
|
414
|
-
return input;
|
|
415
|
-
}
|
|
416
|
-
const parts: (string | Uint8Array)[] = [];
|
|
417
|
-
const iterable: AsyncIterable<string | Uint8Array> =
|
|
418
|
-
typeof (input as { getReader?: unknown }).getReader === "function"
|
|
419
|
-
? streamIterable(input as ReadableStream<Uint8Array>)
|
|
420
|
-
: (input as AsyncIterable<string | Uint8Array>);
|
|
421
|
-
for await (const chunk of iterable) {
|
|
422
|
-
parts.push(chunk);
|
|
423
|
-
}
|
|
424
|
-
if (parts.every((p) => typeof p === "string")) {
|
|
425
|
-
return parts.join("");
|
|
426
|
-
}
|
|
427
|
-
const bytes = parts.map((p) => (typeof p === "string" ? new TextEncoder().encode(p) : p));
|
|
428
|
-
const out = new Uint8Array(bytes.reduce((n, b) => n + b.byteLength, 0));
|
|
429
|
-
let at = 0;
|
|
430
|
-
for (const b of bytes) {
|
|
431
|
-
out.set(b, at);
|
|
432
|
-
at += b.byteLength;
|
|
433
|
-
}
|
|
434
|
-
return out;
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
/**
|
|
438
|
-
* A ReadableStream as an async iterable.
|
|
439
|
-
* @param stream - the stream
|
|
440
|
-
* @yields its chunks
|
|
441
|
-
* @returns nothing
|
|
442
|
-
*/
|
|
443
|
-
async function* streamIterable(stream: ReadableStream<Uint8Array>): AsyncGenerator<Uint8Array, void, undefined> {
|
|
444
|
-
const reader = stream.getReader();
|
|
445
|
-
try {
|
|
446
|
-
for (;;) {
|
|
447
|
-
const { done, value } = await reader.read();
|
|
448
|
-
if (done) {
|
|
449
|
-
return;
|
|
450
|
-
}
|
|
451
|
-
yield value;
|
|
452
|
-
}
|
|
453
|
-
} finally {
|
|
454
|
-
reader.releaseLock();
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
|
|
458
418
|
/**
|
|
459
419
|
* Confidence that a head of bytes is XGMML: 0.95 for a root `graph` in the XGMML namespace or an
|
|
460
420
|
* XGMML DOCTYPE (Cytoscape's file filter tests the same two things, and a session view file still
|
|
@@ -463,14 +423,22 @@ async function* streamIterable(stream: ReadableStream<Uint8Array>): AsyncGenerat
|
|
|
463
423
|
* @returns the confidence
|
|
464
424
|
*/
|
|
465
425
|
function sniffXgmml(head: Uint8Array): number {
|
|
466
|
-
|
|
426
|
+
let encoding = "utf-8";
|
|
427
|
+
if ((head[0] === 0xff && head[1] === 0xfe) || (head[0] === 0x3c && head[1] === 0 && head[2] === 0x3f)) {
|
|
428
|
+
encoding = "utf-16le";
|
|
429
|
+
} else if ((head[0] === 0xfe && head[1] === 0xff) || (head[0] === 0 && head[1] === 0x3c && head[2] === 0)) {
|
|
430
|
+
encoding = "utf-16be";
|
|
431
|
+
}
|
|
432
|
+
const text = new TextDecoder(encoding, { fatal: false }).decode(head);
|
|
467
433
|
if (!/^\uFEFF?\s*</.test(text)) {
|
|
468
434
|
return 0;
|
|
469
435
|
}
|
|
470
436
|
if (XGMML_DOCTYPE.test(text)) {
|
|
471
437
|
return 0.95;
|
|
472
438
|
}
|
|
473
|
-
const root = /<(
|
|
439
|
+
const root = /<(?![?!])([A-Za-z_][\w.-]*:)?([A-Za-z_][\w.-]*)[\s/>]/.exec(
|
|
440
|
+
text.replaceAll(/<!--[\s\S]*?(-->|$)/g, ""),
|
|
441
|
+
);
|
|
474
442
|
if (root === null || root[2] !== "graph") {
|
|
475
443
|
return 0;
|
|
476
444
|
}
|
|
@@ -479,9 +447,19 @@ function sniffXgmml(head: Uint8Array): number {
|
|
|
479
447
|
return tag.includes("http://www.cs.rpi.edu/XGMML") ? 0.95 : 0.5;
|
|
480
448
|
}
|
|
481
449
|
|
|
482
|
-
/**
|
|
450
|
+
/**
|
|
451
|
+
* The XGMML importer.
|
|
452
|
+
* @category Built-in formats
|
|
453
|
+
*/
|
|
483
454
|
export const xgmmlImporter: GraphImporter<XgmmlImportOptions> = Object.freeze({
|
|
484
455
|
format: FORMAT,
|
|
456
|
+
options: Object.freeze([
|
|
457
|
+
"cytoscapeEscapes",
|
|
458
|
+
"labelAliases",
|
|
459
|
+
"pairSurrogateReferences",
|
|
460
|
+
"repairBareAmpersands",
|
|
461
|
+
"zAs",
|
|
462
|
+
]),
|
|
485
463
|
extensions: EXTENSIONS,
|
|
486
464
|
mimeTypes: MIME_TYPES,
|
|
487
465
|
sniff: sniffXgmml,
|
|
@@ -7,7 +7,10 @@
|
|
|
7
7
|
|
|
8
8
|
import { type AttRec } from "./document.js";
|
|
9
9
|
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* The scalar kinds of a column, in widening order (string beats everything).
|
|
12
|
+
* @category Plugin helpers
|
|
13
|
+
*/
|
|
11
14
|
export type ScalarKind = "bool" | "int" | "long" | "real" | "string";
|
|
12
15
|
|
|
13
16
|
/** What one att declares. */
|
|
@@ -49,6 +52,7 @@ const XGMML_TYPES: Readonly<Record<string, DeclaredKind>> = {
|
|
|
49
52
|
* whose name ends in `.SUID` is a long (Cytoscape keeps SUID references as Long).
|
|
50
53
|
* @param att - the att
|
|
51
54
|
* @returns the declared kind
|
|
55
|
+
* @category Plugin helpers
|
|
52
56
|
*/
|
|
53
57
|
export function attType(att: AttRec): AttType {
|
|
54
58
|
let kind: DeclaredKind | undefined;
|
|
@@ -77,6 +81,7 @@ export function attType(att: AttRec): AttType {
|
|
|
77
81
|
* The scalar kind a list element type names (`cy:elementType`), or null when it names none.
|
|
78
82
|
* @param text - the element type text
|
|
79
83
|
* @returns the kind, or null
|
|
84
|
+
* @category Plugin helpers
|
|
80
85
|
*/
|
|
81
86
|
export function elementKind(text: string | null): ScalarKind | null {
|
|
82
87
|
if (text === null) {
|
|
@@ -92,6 +97,7 @@ export function elementKind(text: string | null): ScalarKind | null {
|
|
|
92
97
|
* @param a - one kind
|
|
93
98
|
* @param b - the other
|
|
94
99
|
* @returns the kind both fit
|
|
100
|
+
* @category Plugin helpers
|
|
95
101
|
*/
|
|
96
102
|
export function widenScalar(a: ScalarKind, b: ScalarKind): ScalarKind {
|
|
97
103
|
if (a === b) {
|
|
@@ -109,7 +115,8 @@ export function widenScalar(a: ScalarKind, b: ScalarKind): ScalarKind {
|
|
|
109
115
|
const INTEGER_TEXT = /^[+-]?[0-9]+$/;
|
|
110
116
|
|
|
111
117
|
/** Java's Double.valueOf forms that Cytoscape writes: no hex, no `d` / `f` suffix. */
|
|
112
|
-
const REAL_TEXT = /^[+-]?(
|
|
118
|
+
const REAL_TEXT = /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/;
|
|
119
|
+
const NON_FINITE_TEXT = /^[+-]?(?:NaN|Infinity)$/;
|
|
113
120
|
|
|
114
121
|
const I32_MIN = -2147483648;
|
|
115
122
|
const I32_MAX = 2147483647;
|
|
@@ -129,6 +136,7 @@ interface ParsedScalar {
|
|
|
129
136
|
* @param kind - the declared kind
|
|
130
137
|
* @param unescape - decode Cytoscape's two-character `\n` and `\t` in strings
|
|
131
138
|
* @returns the value, or null when the text does not parse as the kind
|
|
139
|
+
* @category Plugin helpers
|
|
132
140
|
*/
|
|
133
141
|
export function parseScalar(text: string, kind: ScalarKind, unescape: boolean): ParsedScalar | null {
|
|
134
142
|
switch (kind) {
|
|
@@ -158,7 +166,7 @@ export function parseScalar(text: string, kind: ScalarKind, unescape: boolean):
|
|
|
158
166
|
}
|
|
159
167
|
case "real": {
|
|
160
168
|
const t = text.trim();
|
|
161
|
-
if (!REAL_TEXT.test(t)) {
|
|
169
|
+
if (!REAL_TEXT.test(t) && !NON_FINITE_TEXT.test(t)) {
|
|
162
170
|
return null;
|
|
163
171
|
}
|
|
164
172
|
const n = Number(t);
|
package/src/index.ts
CHANGED
|
@@ -1,13 +1,35 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
2
|
+
* Read and write graph files as `@graphty/graph-format` snapshots.
|
|
3
|
+
*
|
|
4
|
+
* Most programs need eight functions: `loadFromUrl()`, `loadFromFile()` and `importGraph()` to read
|
|
5
|
+
* a graph; `exportGraphToBytes()`, `exportGraphToString()`, `exportGraphToBlob()` and
|
|
6
|
+
* `downloadGraph()` to write one; and `checkExport()` to see what a format would not keep. They are
|
|
7
|
+
* under Loading and Saving. Each format's importer, exporter, options and codes are in its own
|
|
8
|
+
* module, `@graphty/graph-io/<format>`, and are also exported here. Writing a format and Plugin
|
|
9
|
+
* helpers are for adding a format of your own. The guide is at https://graphty.app/docs/graph-io/.
|
|
10
|
+
* @module @graphty/graph-io
|
|
9
11
|
*/
|
|
10
12
|
|
|
13
|
+
// ============================================================ graph-format re-exports
|
|
14
|
+
// The error class every deliberate graph-io failure extends, the graph type every function takes
|
|
15
|
+
// or returns, the column type its attribute tables hold, the builder that copies or combines graphs,
|
|
16
|
+
// the graph an importer fills, and the "no such index" value a plugin compares with, so a caller
|
|
17
|
+
// needs no second import.
|
|
18
|
+
export {
|
|
19
|
+
type Column,
|
|
20
|
+
GraphBuilder,
|
|
21
|
+
GraphFormatError,
|
|
22
|
+
type GraphSink,
|
|
23
|
+
type GraphSnapshot,
|
|
24
|
+
INVALID_INDEX,
|
|
25
|
+
} from "@graphty/graph-format";
|
|
26
|
+
|
|
27
|
+
// ============================================================ a line format in one function
|
|
28
|
+
export { defineLineFormat, type LineAttributes, type LineFormat, type LineGraph } from "./common/line-format.js";
|
|
29
|
+
|
|
30
|
+
// ============================================================ testing a plugin
|
|
31
|
+
export { type CompareOptions, compareSnapshots, describeDiffs, type SnapshotDiff } from "./common/compare.js";
|
|
32
|
+
|
|
11
33
|
// ============================================================ io contract types (12.4)
|
|
12
34
|
export {
|
|
13
35
|
type CommonExportOptions,
|
|
@@ -38,21 +60,32 @@ export {
|
|
|
38
60
|
type BuilderSeed,
|
|
39
61
|
checkExport,
|
|
40
62
|
createRegistry,
|
|
63
|
+
downloadGraph,
|
|
64
|
+
type DownloadGraphOptions,
|
|
41
65
|
exportGraph,
|
|
42
66
|
type ExportGraphOptions,
|
|
67
|
+
exportGraphToBlob,
|
|
68
|
+
exportGraphToBytes,
|
|
43
69
|
exportGraphToString,
|
|
70
|
+
type FormatInfo,
|
|
44
71
|
FormatRegistry,
|
|
45
72
|
importAllGraphs,
|
|
46
73
|
importGraph,
|
|
47
74
|
type ImportGraphOptions,
|
|
48
75
|
type ImportGraphResult,
|
|
76
|
+
listFormats,
|
|
49
77
|
listGraphs,
|
|
78
|
+
loadFromFile,
|
|
79
|
+
loadFromUrl,
|
|
80
|
+
type LoadFromUrlOptions,
|
|
50
81
|
registry,
|
|
51
82
|
sniff,
|
|
83
|
+
SNIFF_FAILED_CODE,
|
|
52
84
|
UNKNOWN_FORMAT_CODE,
|
|
53
85
|
} from "./registry.js";
|
|
54
86
|
export {
|
|
55
87
|
extensionOf,
|
|
88
|
+
type FormatName,
|
|
56
89
|
GRAPH_FORMATS,
|
|
57
90
|
type GraphFormatName,
|
|
58
91
|
headBytes,
|
|
@@ -76,7 +109,15 @@ export {
|
|
|
76
109
|
csvImporter,
|
|
77
110
|
type CsvImportOptions,
|
|
78
111
|
} from "./formats/csv/index.js";
|
|
79
|
-
export {
|
|
112
|
+
export {
|
|
113
|
+
CX_CAPABILITIES,
|
|
114
|
+
CX_ISSUE,
|
|
115
|
+
CX_LOSS,
|
|
116
|
+
cxExporter,
|
|
117
|
+
type CxExportOptions,
|
|
118
|
+
cxImporter,
|
|
119
|
+
type CxImportOptions,
|
|
120
|
+
} from "./formats/cx/index.js";
|
|
80
121
|
export {
|
|
81
122
|
CX2_CAPABILITIES,
|
|
82
123
|
CX2_ISSUE,
|
|
@@ -86,7 +127,15 @@ export {
|
|
|
86
127
|
cx2Importer,
|
|
87
128
|
type Cx2ImportOptions,
|
|
88
129
|
} from "./formats/cx2/index.js";
|
|
89
|
-
export {
|
|
130
|
+
export {
|
|
131
|
+
CYS_CAPABILITIES,
|
|
132
|
+
CYS_ISSUE,
|
|
133
|
+
CYS_LOSS,
|
|
134
|
+
cysExporter,
|
|
135
|
+
type CysExportOptions,
|
|
136
|
+
cysImporter,
|
|
137
|
+
type CysImportOptions,
|
|
138
|
+
} from "./formats/cys/index.js";
|
|
90
139
|
export {
|
|
91
140
|
DOT_ISSUE,
|
|
92
141
|
DOT_LOSS,
|
|
@@ -134,8 +183,10 @@ export {
|
|
|
134
183
|
jsonImporter,
|
|
135
184
|
type JsonImportOptions,
|
|
136
185
|
type JsonShapeMeta,
|
|
186
|
+
jsonShapeOf,
|
|
137
187
|
} from "./formats/json/index.js";
|
|
138
188
|
export {
|
|
189
|
+
exportNeo4jFiles,
|
|
139
190
|
ID_SPACE_COLUMN,
|
|
140
191
|
LABELS_COLUMN,
|
|
141
192
|
NEO4J_CAPABILITIES,
|
|
@@ -143,12 +194,21 @@ export {
|
|
|
143
194
|
NEO4J_LOSS,
|
|
144
195
|
neo4jExporter,
|
|
145
196
|
type Neo4jExportOptions,
|
|
197
|
+
type Neo4jFile,
|
|
146
198
|
neo4jImporter,
|
|
147
199
|
type Neo4jImportOptions,
|
|
148
200
|
ORIGINAL_ID_COLUMN,
|
|
149
201
|
TYPE_COLUMN,
|
|
150
202
|
} from "./formats/neo4j/index.js";
|
|
151
|
-
export {
|
|
203
|
+
export {
|
|
204
|
+
OBO_CAPABILITIES,
|
|
205
|
+
OBO_ISSUE,
|
|
206
|
+
OBO_LOSS,
|
|
207
|
+
oboExporter,
|
|
208
|
+
type OboExportOptions,
|
|
209
|
+
oboImporter,
|
|
210
|
+
type OboImportOptions,
|
|
211
|
+
} from "./formats/obo/index.js";
|
|
152
212
|
export {
|
|
153
213
|
PAJEK_ISSUE,
|
|
154
214
|
PAJEK_LOSS,
|
|
@@ -202,6 +262,7 @@ export {
|
|
|
202
262
|
LOSS,
|
|
203
263
|
mangleNmtoken,
|
|
204
264
|
NO_CAPABILITIES,
|
|
265
|
+
refusedSave,
|
|
205
266
|
type SanitizedIds,
|
|
206
267
|
sanitizeIds,
|
|
207
268
|
} from "./common/export.js";
|
|
@@ -228,6 +289,8 @@ export {
|
|
|
228
289
|
export {
|
|
229
290
|
chooseGraph,
|
|
230
291
|
DEFAULT_ERROR_LIMIT,
|
|
292
|
+
forDecodedText,
|
|
293
|
+
graphChosen,
|
|
231
294
|
type ImportFormatDefaults,
|
|
232
295
|
reportSinkOptions,
|
|
233
296
|
reportUnusedOptions,
|
|
@@ -252,7 +315,13 @@ export {
|
|
|
252
315
|
type TextDtype,
|
|
253
316
|
WIDENING_UNSUPPORTED_CODE,
|
|
254
317
|
} from "./common/text.js";
|
|
255
|
-
export {
|
|
318
|
+
export {
|
|
319
|
+
edgeWeights,
|
|
320
|
+
type ExplicitWeights,
|
|
321
|
+
explicitWeights,
|
|
322
|
+
isWeightField,
|
|
323
|
+
parseWeightText,
|
|
324
|
+
} from "./common/weights.js";
|
|
256
325
|
export {
|
|
257
326
|
collectBytes,
|
|
258
327
|
decodeChunks,
|
|
@@ -267,6 +336,7 @@ export {
|
|
|
267
336
|
tokenizeXml,
|
|
268
337
|
type XmlHandler,
|
|
269
338
|
xmlIllegalTextNotes,
|
|
339
|
+
type XmlRepairs,
|
|
270
340
|
XmlSyntaxError,
|
|
271
341
|
XmlTokenizer,
|
|
272
342
|
} from "./common/xml.js";
|