@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
package/src/formats/gml/index.ts
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The `@graphty/graph-io/gml` subpath
|
|
2
|
+
* The `@graphty/graph-io/gml` subpath: the GML importer and exporter, their
|
|
3
3
|
* option types, and their issue and loss-note codes grouped in two tables.
|
|
4
|
+
* @module @graphty/graph-io/gml
|
|
4
5
|
*/
|
|
5
6
|
|
|
6
7
|
import {
|
|
8
|
+
AMBIGUOUS_GRAPH_NAME_CODE,
|
|
7
9
|
COLUMN_RENAMED_CODE,
|
|
8
10
|
DIRECTION_FORCED_CODE,
|
|
9
11
|
DIRECTION_REFUSED_CODE,
|
|
12
|
+
ELEMENT_ISSUE,
|
|
10
13
|
ENCODING_FALLBACK_CODE,
|
|
14
|
+
GRAPH_NOT_FOUND_CODE,
|
|
11
15
|
ID_MERGED_CODE,
|
|
16
|
+
INPUT_ISSUE,
|
|
12
17
|
INVALID_ENCODING_CODE,
|
|
13
18
|
INVALID_UTF8_CODE,
|
|
14
19
|
MIXED_DIRECTION_CODE,
|
|
@@ -35,11 +40,14 @@ import {
|
|
|
35
40
|
ELEMENT_TYPE_CODE,
|
|
36
41
|
FLAG_TYPE_CODE,
|
|
37
42
|
FLAG_VALUE_CODE,
|
|
43
|
+
GRAPHICS_CODE,
|
|
44
|
+
GROUPS_CODE,
|
|
38
45
|
ID_DROPPED_CODE,
|
|
39
46
|
ID_TYPE_CODE,
|
|
40
47
|
MISSING_ENDPOINT_CODE,
|
|
41
48
|
MISSING_ID_CODE,
|
|
42
49
|
MISSING_LABEL_CODE,
|
|
50
|
+
NESTED_ELEMENT_CODE,
|
|
43
51
|
NO_GRAPH_CODE,
|
|
44
52
|
PRECISION_CODE,
|
|
45
53
|
REPEATED_KEY_CODE,
|
|
@@ -47,31 +55,45 @@ import {
|
|
|
47
55
|
SECOND_GRAPH_CODE,
|
|
48
56
|
STRING_ID_CODE,
|
|
49
57
|
UNKNOWN_ENTITY_CODE,
|
|
58
|
+
WIDENED_CODE,
|
|
50
59
|
} from "./importer.js";
|
|
51
60
|
|
|
52
61
|
export { gmlExporter, type GmlExportOptions } from "./exporter.js";
|
|
53
62
|
export { gmlImporter, type GmlImportOptions } from "./importer.js";
|
|
54
63
|
|
|
55
64
|
/**
|
|
56
|
-
* The issue codes the GML importer records
|
|
57
|
-
* the other importers
|
|
65
|
+
* The issue codes the GML importer records, by name: the codes shared with
|
|
66
|
+
* the other importers and the GML-specific ones. A key is the code without
|
|
58
67
|
* its severity and format prefixes.
|
|
68
|
+
* @category Built-in formats
|
|
59
69
|
*/
|
|
60
70
|
export const GML_ISSUE = Object.freeze({
|
|
61
|
-
|
|
71
|
+
...INPUT_ISSUE,
|
|
72
|
+
...ELEMENT_ISSUE,
|
|
73
|
+
/**
|
|
74
|
+
* The text breaks GML's syntax: a word that is not a key or a value, an unclosed string or `[`, a stray `]`, or a
|
|
75
|
+
* key without a value. The import stops.
|
|
76
|
+
*/
|
|
62
77
|
SYNTAX: SYNTAX_CODE,
|
|
63
|
-
/** The input
|
|
78
|
+
/** The input is not valid UTF-8. The import stops. */
|
|
64
79
|
INVALID_UTF8: INVALID_UTF8_CODE,
|
|
65
|
-
/**
|
|
80
|
+
/**
|
|
81
|
+
* Some bytes are not valid in the encoding that was chosen (by a byte order mark, the file's declaration or the
|
|
82
|
+
* `encoding` option). The import stops.
|
|
83
|
+
*/
|
|
66
84
|
INVALID_ENCODING: INVALID_ENCODING_CODE,
|
|
67
85
|
/** Bytes that are not UTF-8 and declare no encoding were read as windows-1252. */
|
|
68
86
|
ENCODING_FALLBACK: ENCODING_FALLBACK_CODE,
|
|
69
87
|
/** A declared encoding the platform cannot decode was ignored. */
|
|
70
88
|
UNKNOWN_ENCODING: UNKNOWN_ENCODING_CODE,
|
|
71
|
-
/**
|
|
89
|
+
/** There is no `graph [` block. The import stops. */
|
|
72
90
|
NO_GRAPH: NO_GRAPH_CODE,
|
|
73
|
-
/**
|
|
91
|
+
/** The file holds more than one `graph` block and only the first was read. It is not added when `graphIndex` or `graphName` chose the graph. */
|
|
74
92
|
MULTIPLE_GRAPHS: SECOND_GRAPH_CODE,
|
|
93
|
+
/** `graphIndex` or `graphName` names no graph of the file; the message lists the graphs it holds. The import stops. */
|
|
94
|
+
GRAPH_NOT_FOUND: GRAPH_NOT_FOUND_CODE,
|
|
95
|
+
/** `graphName` matches more than one graph; pass `graphIndex`. The import stops. */
|
|
96
|
+
AMBIGUOUS_GRAPH_NAME: AMBIGUOUS_GRAPH_NAME_CODE,
|
|
75
97
|
/** A node without an `id`. */
|
|
76
98
|
MISSING_ID: MISSING_ID_CODE,
|
|
77
99
|
/** A node without a `label` under nodeIdFrom "label". */
|
|
@@ -80,7 +102,10 @@ export const GML_ISSUE = Object.freeze({
|
|
|
80
102
|
MISSING_ENDPOINT: MISSING_ENDPOINT_CODE,
|
|
81
103
|
/** A node id, source or target that is neither an integer nor a string. */
|
|
82
104
|
ID_TYPE: ID_TYPE_CODE,
|
|
83
|
-
/**
|
|
105
|
+
/**
|
|
106
|
+
* Node ids, sources or targets are text, where GML expects integers. They are read under the `ids` option.
|
|
107
|
+
* Reported once per file.
|
|
108
|
+
*/
|
|
84
109
|
STRING_ID: STRING_ID_CODE,
|
|
85
110
|
/** A node id declared twice (later keys overwrite). */
|
|
86
111
|
DUPLICATE_NODE: DUPLICATE_NODE_CODE,
|
|
@@ -92,43 +117,79 @@ export const GML_ISSUE = Object.freeze({
|
|
|
92
117
|
FLAG_TYPE: FLAG_TYPE_CODE,
|
|
93
118
|
/** A `directed` / `multigraph` flag outside 0 / 1, or repeated. */
|
|
94
119
|
FLAG_VALUE: FLAG_VALUE_CODE,
|
|
95
|
-
/** A named entity
|
|
120
|
+
/** A named entity no table decodes, or a numeric reference beyond U+10FFFF; kept as written. */
|
|
96
121
|
UNKNOWN_ENTITY: UNKNOWN_ENTITY_CODE,
|
|
97
|
-
/** An integer beyond 2^53
|
|
122
|
+
/** An integer beyond 2^53 was stored as the nearest 64-bit float; pass `long: "string"` to keep every digit. */
|
|
98
123
|
PRECISION: PRECISION_CODE,
|
|
99
|
-
/** A
|
|
124
|
+
/** A node's graphics value that cannot give a position as written; kept in the graphics json column. */
|
|
125
|
+
GRAPHICS: GRAPHICS_CODE,
|
|
126
|
+
/** A graph, node or edge record nested in a node or edge; kept as json, not read as structure. */
|
|
127
|
+
NESTED_ELEMENT: NESTED_ELEMENT_CODE,
|
|
128
|
+
/** YEd's isGroup / gid keys, kept as plain columns; the hierarchy is not read as containment. */
|
|
129
|
+
GROUPS: GROUPS_CODE,
|
|
130
|
+
/**
|
|
131
|
+
* An attribute's type was widened because a later value did not fit: an integer above 2^31 in an integer column,
|
|
132
|
+
* or two declared types for one attribute.
|
|
133
|
+
*/
|
|
134
|
+
WIDENED: WIDENED_CODE,
|
|
135
|
+
/**
|
|
136
|
+
* An attribute was renamed `<name>#<suffix>` because another attribute already has its name, for example
|
|
137
|
+
* two attributes declared with the same name.
|
|
138
|
+
*/
|
|
100
139
|
COLUMN_RENAMED: COLUMN_RENAMED_CODE,
|
|
101
|
-
/**
|
|
140
|
+
/**
|
|
141
|
+
* You read into a graph builder that already has an id, label or position attribute, so this file's one is kept as
|
|
142
|
+
* a plain attribute.
|
|
143
|
+
*/
|
|
102
144
|
ROLE_TAKEN: ROLE_TAKEN_CODE,
|
|
103
|
-
/** Two id texts
|
|
145
|
+
/** Two different id texts became the same number because `ids` is "number", so their nodes were merged. */
|
|
104
146
|
ID_MERGED: ID_MERGED_CODE,
|
|
105
|
-
/**
|
|
147
|
+
/** You set an option this format does not use; it had no effect. The message names the option. */
|
|
106
148
|
OPTION_IGNORED: OPTION_IGNORED_CODE,
|
|
107
|
-
/**
|
|
149
|
+
/**
|
|
150
|
+
* You read into your own graph builder, which was created with a different `addMissingNodes`, `duplicateEdges`,
|
|
151
|
+
* `selfLoops` or `weightDtype` than the option you passed; the builder's setting applies.
|
|
152
|
+
*/
|
|
108
153
|
SINK_OPTION: SINK_OPTION_CODE,
|
|
109
|
-
/**
|
|
154
|
+
/**
|
|
155
|
+
* You read into a graph builder whose direction is already set, or which already holds edges, so the file is read
|
|
156
|
+
* with the builder's direction instead of its own.
|
|
157
|
+
*/
|
|
110
158
|
DIRECTION_REFUSED: DIRECTION_REFUSED_CODE,
|
|
111
|
-
/** Edges
|
|
159
|
+
/** Edges of the other direction were read with the direction `onMixedDirection` chose. */
|
|
112
160
|
DIRECTION_FORCED: DIRECTION_FORCED_CODE,
|
|
113
|
-
/**
|
|
161
|
+
/**
|
|
162
|
+
* The graph has both directed and undirected edges and `onMixedDirection` is "error". An import stops; a save to a
|
|
163
|
+
* format that holds one direction per file fails with E_DIRECTED. Pass "directed" or "undirected" to read or write
|
|
164
|
+
* it anyway.
|
|
165
|
+
*/
|
|
114
166
|
MIXED_DIRECTION: MIXED_DIRECTION_CODE,
|
|
115
|
-
/**
|
|
167
|
+
/**
|
|
168
|
+
* Under `nodeIdFrom: "label"` or `"index"` the file's integer ids are not kept. It is listed in `report.lossy`, not
|
|
169
|
+
* in `report.issues`.
|
|
170
|
+
*/
|
|
116
171
|
ID_DROPPED: ID_DROPPED_CODE,
|
|
117
172
|
});
|
|
118
173
|
|
|
119
|
-
/**
|
|
174
|
+
/**
|
|
175
|
+
* The loss-note codes the GML exporter's check() reports beyond the shared LOSS table, by name.
|
|
176
|
+
* @category Built-in formats
|
|
177
|
+
*/
|
|
120
178
|
export const GML_LOSS = Object.freeze({
|
|
121
|
-
/** A json column holds numbers; GML records cannot keep int versus real
|
|
179
|
+
/** A json column holds numbers; GML records cannot keep int versus real. */
|
|
122
180
|
RECORD_NUMBER_TYPE: RECORD_NUMBER_TYPE_CODE,
|
|
123
181
|
/** A json column holds booleans, written 1 / 0. */
|
|
124
182
|
RECORD_BOOLEAN: RECORD_BOOLEAN_CODE,
|
|
125
183
|
/** A json column holds nulls, omitted. */
|
|
126
184
|
RECORD_NULL: RECORD_NULL_CODE,
|
|
127
|
-
/** An array inside an array;
|
|
185
|
+
/** An attribute holds an array inside an array, which GML cannot write; the save fails. */
|
|
128
186
|
NESTED_ARRAY: NESTED_ARRAY_CODE,
|
|
129
187
|
/** A json row that is an array, written as repeated keys. */
|
|
130
188
|
JSON_ARRAY: JSON_ARRAY_CODE,
|
|
131
|
-
/**
|
|
189
|
+
/**
|
|
190
|
+
* An attribute name GML cannot use as a key (keys are letters and digits, starting with a letter). The save fails
|
|
191
|
+
* unless `sanitizeKeys` is "mangle".
|
|
192
|
+
*/
|
|
132
193
|
INVALID_KEY: INVALID_KEY_CODE,
|
|
133
194
|
/** A column named like a structural key. */
|
|
134
195
|
RESERVED_KEY: RESERVED_KEY_CODE,
|
|
@@ -12,46 +12,86 @@
|
|
|
12
12
|
|
|
13
13
|
import { SYNTAX_CODE } from "../../common/codes.js";
|
|
14
14
|
import { decodeGmlString } from "../../common/escape.js";
|
|
15
|
+
import { plural } from "../../common/plural.js";
|
|
15
16
|
|
|
16
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* A bare word: a key, or `INF` / `NAN` at a value position.
|
|
19
|
+
* @category Plugin helpers
|
|
20
|
+
*/
|
|
17
21
|
export const TOKEN_WORD = 0;
|
|
18
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* An integer literal.
|
|
24
|
+
* @category Plugin helpers
|
|
25
|
+
*/
|
|
19
26
|
export const TOKEN_INT = 1;
|
|
20
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* A real literal, including the non-finite spellings.
|
|
29
|
+
* @category Plugin helpers
|
|
30
|
+
*/
|
|
21
31
|
export const TOKEN_REAL = 2;
|
|
22
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* A double-quoted string; start / end delimit the body between the quotes.
|
|
34
|
+
* @category Plugin helpers
|
|
35
|
+
*/
|
|
23
36
|
export const TOKEN_STRING = 3;
|
|
24
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* `[`.
|
|
39
|
+
* @category Plugin helpers
|
|
40
|
+
*/
|
|
25
41
|
export const TOKEN_OPEN = 4;
|
|
26
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* `]`.
|
|
44
|
+
* @category Plugin helpers
|
|
45
|
+
*/
|
|
27
46
|
export const TOKEN_CLOSE = 5;
|
|
28
47
|
|
|
29
48
|
/** The kind of one token. */
|
|
30
49
|
type TokenKind = 0 | 1 | 2 | 3 | 4 | 5;
|
|
31
50
|
|
|
32
|
-
/**
|
|
51
|
+
/**
|
|
52
|
+
* The NetworkX marker that starts a one-element list written as repeated keys.
|
|
53
|
+
* @category Plugin helpers
|
|
54
|
+
*/
|
|
33
55
|
export const LIST_START_MARKER = "_networkx_list_start";
|
|
34
56
|
|
|
35
|
-
/**
|
|
57
|
+
/**
|
|
58
|
+
* The string NetworkX writes for an empty list.
|
|
59
|
+
* @category Plugin helpers
|
|
60
|
+
*/
|
|
36
61
|
export const EMPTY_LIST_TEXT = "[]";
|
|
37
62
|
|
|
38
|
-
/**
|
|
63
|
+
/**
|
|
64
|
+
* The string NetworkX writes for an empty tuple, read as an empty list too.
|
|
65
|
+
* @category Plugin helpers
|
|
66
|
+
*/
|
|
39
67
|
export const EMPTY_TUPLE_TEXT = "()";
|
|
40
68
|
|
|
41
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* The node key the exporter writes a mangled node's original id into (design section 8.5).
|
|
71
|
+
* @category Plugin helpers
|
|
72
|
+
*/
|
|
42
73
|
export const ORIGINAL_ID_KEY = "graphty_originalId";
|
|
43
74
|
|
|
44
75
|
/**
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
76
|
+
* The text breaks the format's syntax: a word that is not a key or a number, an unclosed string or `[`, a `]` with no
|
|
77
|
+
* open `[`, or a key without a value. The message says where. The import stops.
|
|
78
|
+
* @category Issue and loss codes
|
|
48
79
|
*/
|
|
49
80
|
export const SYNTAX_STRUCTURE_CODE = SYNTAX_CODE;
|
|
50
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* The code of an untokenizable bare token (E_SYNTAX).
|
|
83
|
+
* @category Issue and loss codes
|
|
84
|
+
*/
|
|
51
85
|
export const SYNTAX_TOKEN_CODE = SYNTAX_CODE;
|
|
52
|
-
/**
|
|
86
|
+
/**
|
|
87
|
+
* The code of an unclosed string (E_SYNTAX).
|
|
88
|
+
* @category Issue and loss codes
|
|
89
|
+
*/
|
|
53
90
|
export const SYNTAX_STRING_CODE = SYNTAX_CODE;
|
|
54
|
-
/**
|
|
91
|
+
/**
|
|
92
|
+
* The code of an unclosed `[` (E_SYNTAX).
|
|
93
|
+
* @category Issue and loss codes
|
|
94
|
+
*/
|
|
55
95
|
export const SYNTAX_BRACKET_CODE = SYNTAX_CODE;
|
|
56
96
|
|
|
57
97
|
const KEY_TEXT = /^[A-Za-z_][0-9A-Za-z_]*$/;
|
|
@@ -64,6 +104,7 @@ const NON_FINITE_WORD = /^(?:inf|infinity|nan)$/i;
|
|
|
64
104
|
/**
|
|
65
105
|
* A lexical or structural error of a GML text, with the 1-based line it was found on. The importer
|
|
66
106
|
* turns it into a fatal parse-error issue.
|
|
107
|
+
* @category Plugin helpers
|
|
67
108
|
*/
|
|
68
109
|
export class GmlSyntaxError extends Error {
|
|
69
110
|
/** The issue code. */
|
|
@@ -89,6 +130,7 @@ export class GmlSyntaxError extends Error {
|
|
|
89
130
|
/**
|
|
90
131
|
* The tokens of one GML text, structurally validated: every `[` has its matching `]` recorded and
|
|
91
132
|
* every key is followed by a value, so walkers need no error paths.
|
|
133
|
+
* @category Plugin helpers
|
|
92
134
|
*/
|
|
93
135
|
export class GmlTokens {
|
|
94
136
|
/** The source text the offsets index into. */
|
|
@@ -162,12 +204,23 @@ export class GmlTokens {
|
|
|
162
204
|
* @returns the body with character references decoded
|
|
163
205
|
*/
|
|
164
206
|
stringOf(i: number): string {
|
|
165
|
-
|
|
207
|
+
let text = this.textOf(i);
|
|
208
|
+
if (text.includes("\r")) {
|
|
209
|
+
// a line break inside a string is part of it, as LF whatever the file's line ends
|
|
210
|
+
text = text.replaceAll(/\r\n?/g, "\n");
|
|
211
|
+
}
|
|
166
212
|
if (text.indexOf("&") < 0) {
|
|
167
213
|
return text;
|
|
168
214
|
}
|
|
169
215
|
const report = this.onUnknownEntity;
|
|
170
|
-
return decodeGmlString(
|
|
216
|
+
return decodeGmlString(
|
|
217
|
+
text,
|
|
218
|
+
report === null
|
|
219
|
+
? undefined
|
|
220
|
+
: (entity) => {
|
|
221
|
+
report(entity, this.line[i]);
|
|
222
|
+
},
|
|
223
|
+
);
|
|
171
224
|
}
|
|
172
225
|
|
|
173
226
|
/**
|
|
@@ -211,8 +264,9 @@ export class GmlTokens {
|
|
|
211
264
|
* Lex and structurally validate a whole GML text.
|
|
212
265
|
*
|
|
213
266
|
* Lexical rules (NetworkX): whitespace separates tokens; `#` outside a string starts a comment
|
|
214
|
-
* that runs to the end of the line; a string is delimited by double quotes and
|
|
215
|
-
* line
|
|
267
|
+
* that runs to the end of the line; a string is delimited by double quotes and may span lines (a
|
|
268
|
+
* line break inside is part of it, GML draft 3.2.5; there is no escape mechanism; `&#NN;`
|
|
269
|
+
* references are decoded later); a U+FEFF between tokens is whitespace; `[` and `]` are
|
|
216
270
|
* single-character tokens; every other run of characters is a key (`[A-Za-z_][0-9A-Za-z_]*`),
|
|
217
271
|
* an integer (`[+-]?[0-9]+`), a real (with a decimal point or an exponent, or `INF` / `NAN` in
|
|
218
272
|
* any case with an optional sign) or an error.
|
|
@@ -221,12 +275,15 @@ export class GmlTokens {
|
|
|
221
275
|
* string, `INF` / `NAN`, or a bracketed sequence of pairs; every `[` has a `]`.
|
|
222
276
|
* @param text - the GML text
|
|
223
277
|
* @returns the validated tokens; GmlSyntaxError with the line of the first problem
|
|
278
|
+
* @category Plugin helpers
|
|
224
279
|
*/
|
|
225
280
|
export function tokenizeGml(text: string): GmlTokens {
|
|
226
281
|
const tokens = new GmlTokens(text, Math.max(1024, text.length >>> 3));
|
|
227
282
|
const n = text.length;
|
|
228
283
|
let i = 0;
|
|
229
284
|
let line = 1;
|
|
285
|
+
// the opening line of the first string that spans lines: where a missing quote most likely is
|
|
286
|
+
let spanningLine = 0;
|
|
230
287
|
while (i < n) {
|
|
231
288
|
const c = text.charCodeAt(i);
|
|
232
289
|
if (c === 10) {
|
|
@@ -240,6 +297,9 @@ export function tokenizeGml(text: string): GmlTokens {
|
|
|
240
297
|
}
|
|
241
298
|
} else if (c === 32 || c === 9 || c === 11 || c === 12) {
|
|
242
299
|
i++;
|
|
300
|
+
} else if (c === 0xfeff) {
|
|
301
|
+
// a BOM left inside by concatenated files is whitespace; the shared text check reports it
|
|
302
|
+
i++;
|
|
243
303
|
} else if (c === 35) {
|
|
244
304
|
i = endOfLine(text, i);
|
|
245
305
|
} else if (c === 91) {
|
|
@@ -250,11 +310,24 @@ export function tokenizeGml(text: string): GmlTokens {
|
|
|
250
310
|
i++;
|
|
251
311
|
} else if (c === 34) {
|
|
252
312
|
const close = text.indexOf('"', i + 1);
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
313
|
+
if (close < 0) {
|
|
314
|
+
const hint =
|
|
315
|
+
spanningLine === 0
|
|
316
|
+
? ""
|
|
317
|
+
: `; the string opened at line ${spanningLine} spans lines, so a quote may be missing there`;
|
|
318
|
+
throw new GmlSyntaxError(SYNTAX_STRING_CODE, `unclosed string opened at line ${line}${hint}`, line);
|
|
256
319
|
}
|
|
257
320
|
tokens.push(TOKEN_STRING, i + 1, close, line);
|
|
321
|
+
const opened = line;
|
|
322
|
+
for (let k = i + 1; k < close; k++) {
|
|
323
|
+
const d = text.codePointAt(k);
|
|
324
|
+
if (d === 10 || (d === 13 && text.codePointAt(k + 1) !== 10)) {
|
|
325
|
+
line++;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
if (line !== opened && spanningLine === 0) {
|
|
329
|
+
spanningLine = opened;
|
|
330
|
+
}
|
|
258
331
|
i = close + 1;
|
|
259
332
|
} else {
|
|
260
333
|
let j = i + 1;
|
|
@@ -325,8 +398,14 @@ function classifyBare(text: string, start: number, end: number, line: number): T
|
|
|
325
398
|
if (REAL_TEXT.test(token) || NON_FINITE_TEXT.test(token)) {
|
|
326
399
|
return TOKEN_REAL;
|
|
327
400
|
}
|
|
328
|
-
|
|
329
|
-
|
|
401
|
+
// the message is ASCII: a character outside it is shown as \uXXXX and named, since it may look
|
|
402
|
+
// like something else (a no-break space pasted from a web page looks like a space)
|
|
403
|
+
const hex = (c: string): string => (c.codePointAt(0) ?? 0).toString(16).toUpperCase().padStart(4, "0");
|
|
404
|
+
const head = token.length > 20 ? `${token.slice(0, 20)}...` : token;
|
|
405
|
+
const shown = head.replaceAll(/[^\x20-\x7e]/gu, (c) => String.raw`\u` + hex(c));
|
|
406
|
+
const odd = /[^\x21-\x7e]/u.exec(token);
|
|
407
|
+
const note = odd === null ? "" : ` (it holds U+${hex(odd[0])}, which GML allows only inside a string)`;
|
|
408
|
+
throw new GmlSyntaxError(SYNTAX_TOKEN_CODE, `cannot tokenize "${shown}" at line ${line}${note}`, line);
|
|
330
409
|
}
|
|
331
410
|
|
|
332
411
|
/**
|
|
@@ -384,7 +463,7 @@ function validateStructure(tokens: GmlTokens): void {
|
|
|
384
463
|
const open = stack[stack.length - 1];
|
|
385
464
|
throw new GmlSyntaxError(
|
|
386
465
|
SYNTAX_BRACKET_CODE,
|
|
387
|
-
`unexpected end of input: ${stack.length} bracket(
|
|
466
|
+
`unexpected end of input: ${stack.length} bracket${plural(stack.length)} still open, the last opened at line ${tokens.line[open]}`,
|
|
388
467
|
tokens.line[open],
|
|
389
468
|
);
|
|
390
469
|
}
|
|
@@ -414,6 +493,7 @@ function describeToken(tokens: GmlTokens, i: number): string {
|
|
|
414
493
|
* The numeric value of an INT or REAL token (or a WORD that is `INF` / `NAN` at a value position).
|
|
415
494
|
* @param text - the token text
|
|
416
495
|
* @returns the number; Infinity / -Infinity / NaN for the non-finite spellings
|
|
496
|
+
* @category Plugin helpers
|
|
417
497
|
*/
|
|
418
498
|
export function numberOfText(text: string): number {
|
|
419
499
|
if (NON_FINITE_TEXT.test(text)) {
|
|
@@ -431,6 +511,7 @@ export function numberOfText(text: string): number {
|
|
|
431
511
|
* @param tokens - the tokens
|
|
432
512
|
* @param i - the value token index
|
|
433
513
|
* @returns true when the word is a real
|
|
514
|
+
* @category Plugin helpers
|
|
434
515
|
*/
|
|
435
516
|
export function isNonFiniteWord(tokens: GmlTokens, i: number): boolean {
|
|
436
517
|
return tokens.kind[i] === TOKEN_WORD && NON_FINITE_WORD.test(tokens.textOf(i));
|
|
@@ -441,6 +522,7 @@ export function isNonFiniteWord(tokens: GmlTokens, i: number): boolean {
|
|
|
441
522
|
* writes and reads).
|
|
442
523
|
* @param text - the candidate key
|
|
443
524
|
* @returns true when it can be written as a key
|
|
525
|
+
* @category Plugin helpers
|
|
444
526
|
*/
|
|
445
527
|
export function isGmlKey(text: string): boolean {
|
|
446
528
|
return STRICT_KEY_TEXT.test(text);
|
|
@@ -451,6 +533,7 @@ export function isGmlKey(text: string): boolean {
|
|
|
451
533
|
* non-letter is prefixed with `x` (the exporter's `sanitizeKeys: "mangle"`).
|
|
452
534
|
* @param text - the text
|
|
453
535
|
* @returns a valid key
|
|
536
|
+
* @category Plugin helpers
|
|
454
537
|
*/
|
|
455
538
|
export function mangleGmlKey(text: string): string {
|
|
456
539
|
const body = text.replace(/[^0-9A-Za-z_]/g, "_");
|
|
@@ -479,6 +562,7 @@ interface RecordFrame {
|
|
|
479
562
|
* @param tokens - the validated tokens
|
|
480
563
|
* @param open - the index of the record's `[`
|
|
481
564
|
* @returns a null-prototype object
|
|
565
|
+
* @category Plugin helpers
|
|
482
566
|
*/
|
|
483
567
|
export function parseRecord(tokens: GmlTokens, open: number): Record<string, unknown> {
|
|
484
568
|
const root = Object.create(null) as Record<string, unknown>;
|
|
@@ -547,6 +631,7 @@ function storeValue(frame: RecordFrame, key: string, value: unknown): void {
|
|
|
547
631
|
* @param tokens - the tokens
|
|
548
632
|
* @param v - the value token index (INT, REAL, non-finite WORD or OPEN)
|
|
549
633
|
* @returns the value
|
|
634
|
+
* @category Plugin helpers
|
|
550
635
|
*/
|
|
551
636
|
export function scalarOrRecord(tokens: GmlTokens, v: number): unknown {
|
|
552
637
|
return tokens.kind[v] === TOKEN_OPEN ? parseRecord(tokens, v) : numberOfText(tokens.textOf(v));
|