@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/common/attributes.ts
CHANGED
|
@@ -41,8 +41,8 @@ import { parseTemporal, type TemporalValue, timeTextCompanion } from "./temporal
|
|
|
41
41
|
|
|
42
42
|
/**
|
|
43
43
|
* What an importer knows about a declared attribute.
|
|
44
|
-
* Consumed by the per-format importers and exporters under src/formats.
|
|
45
44
|
* @public
|
|
45
|
+
* @category Plugin helpers
|
|
46
46
|
*/
|
|
47
47
|
export interface AttributeDeclarationInput {
|
|
48
48
|
/** The declaring format. */
|
|
@@ -73,8 +73,8 @@ export interface AttributeDeclarationInput {
|
|
|
73
73
|
|
|
74
74
|
/**
|
|
75
75
|
* A non-fatal problem with a declaration, for the importer to record as a warning.
|
|
76
|
-
* Consumed by the per-format importers and exporters under src/formats.
|
|
77
76
|
* @public
|
|
77
|
+
* @category Plugin helpers
|
|
78
78
|
*/
|
|
79
79
|
export interface DeclarationIssue {
|
|
80
80
|
/** The issue category. */
|
|
@@ -87,8 +87,8 @@ export interface DeclarationIssue {
|
|
|
87
87
|
|
|
88
88
|
/**
|
|
89
89
|
* A declared attribute: the ColumnDecl to push, the spec to parse values with, and what to report.
|
|
90
|
-
* Consumed by the per-format importers and exporters under src/formats.
|
|
91
90
|
* @public
|
|
91
|
+
* @category Plugin helpers
|
|
92
92
|
*/
|
|
93
93
|
export interface DeclaredAttribute {
|
|
94
94
|
/** The declaration for declareNodeColumn / declareEdgeColumn. */
|
|
@@ -105,20 +105,30 @@ export interface DeclaredAttribute {
|
|
|
105
105
|
readonly issues: readonly DeclarationIssue[];
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
/**
|
|
108
|
+
/**
|
|
109
|
+
* The declared type is not one the format defines; the column is kept as string.
|
|
110
|
+
* @category Issue and loss codes
|
|
111
|
+
*/
|
|
109
112
|
export const UNKNOWN_TYPE_CODE = UNKNOWN_ATTR_TYPE_CODE;
|
|
110
|
-
/**
|
|
113
|
+
/**
|
|
114
|
+
* The column was renamed `<name>#<id>` because the name was taken.
|
|
115
|
+
* @category Issue and loss codes
|
|
116
|
+
*/
|
|
111
117
|
export const RENAMED_CODE = COLUMN_RENAMED_CODE;
|
|
112
118
|
|
|
113
119
|
export { BAD_DEFAULT_CODE, BAD_OPTIONS_CODE, PRECISION_CODE, ROLE_TAKEN_CODE };
|
|
114
120
|
|
|
115
|
-
/**
|
|
121
|
+
/**
|
|
122
|
+
* Rows sampled before the dict heuristic decides (design section 5.4).
|
|
123
|
+
* @category Plugin helpers
|
|
124
|
+
*/
|
|
116
125
|
export const DICT_SAMPLE_ROWS = 1024;
|
|
117
126
|
|
|
118
127
|
/**
|
|
119
128
|
* Build the column declaration of a declared attribute.
|
|
120
129
|
* @param input - what the file declares
|
|
121
130
|
* @returns the declaration, the value spec and any warnings to record
|
|
131
|
+
* @category Plugin helpers
|
|
122
132
|
*/
|
|
123
133
|
export function declareAttribute(input: AttributeDeclarationInput): DeclaredAttribute {
|
|
124
134
|
const issues: DeclarationIssue[] = [];
|
|
@@ -208,6 +218,7 @@ export function declareAttribute(input: AttributeDeclarationInput): DeclaredAttr
|
|
|
208
218
|
* @param spec - the declared type
|
|
209
219
|
* @param listSyntax - the list syntax
|
|
210
220
|
* @returns the value to push (a boolean, a number, a string, a JSON value or an array)
|
|
221
|
+
* @category Plugin helpers
|
|
211
222
|
*/
|
|
212
223
|
export function parseDeclaredValue(text: string, spec: DeclaredTypeSpec, listSyntax: ListSyntax): unknown {
|
|
213
224
|
if (spec.list) {
|
|
@@ -222,6 +233,7 @@ export function parseDeclaredValue(text: string, spec: DeclaredTypeSpec, listSyn
|
|
|
222
233
|
* @param text - the value text
|
|
223
234
|
* @param spec - a scalar temporal spec
|
|
224
235
|
* @returns the value and the text to keep, or null text
|
|
236
|
+
* @category Plugin helpers
|
|
225
237
|
*/
|
|
226
238
|
export function parseDeclaredTemporal(text: string, spec: DeclaredTypeSpec): TemporalValue {
|
|
227
239
|
if (spec.temporal === null || spec.list) {
|
|
@@ -241,6 +253,7 @@ const INTEGER_TEXT = /^[+-]?[0-9]+$/;
|
|
|
241
253
|
* @param spec - the declared type
|
|
242
254
|
* @param text - the value text (trimmed or not)
|
|
243
255
|
* @returns true when the importer should record a `precision` issue
|
|
256
|
+
* @category Plugin helpers
|
|
244
257
|
*/
|
|
245
258
|
export function losesPrecision(spec: DeclaredTypeSpec, text: string): boolean {
|
|
246
259
|
if (!spec.precision) {
|
|
@@ -260,6 +273,7 @@ export function losesPrecision(spec: DeclaredTypeSpec, text: string): boolean {
|
|
|
260
273
|
* @param domain - node or edge
|
|
261
274
|
* @param decl - the declaration
|
|
262
275
|
* @returns the column handle
|
|
276
|
+
* @category Plugin helpers
|
|
263
277
|
*/
|
|
264
278
|
export function declareOn(sink: GraphSink, domain: "node" | "edge", decl: ColumnDecl): ColumnHandle {
|
|
265
279
|
return domain === "node" ? sink.declareNodeColumn(decl) : sink.declareEdgeColumn(decl);
|
|
@@ -267,8 +281,8 @@ export function declareOn(sink: GraphSink, domain: "node" | "edge", decl: Column
|
|
|
267
281
|
|
|
268
282
|
/**
|
|
269
283
|
* The outcome of declareResolved(): the handle and the declaration as it was applied.
|
|
270
|
-
* Consumed by the per-format importers under src/formats.
|
|
271
284
|
* @public
|
|
285
|
+
* @category Plugin helpers
|
|
272
286
|
*/
|
|
273
287
|
export interface ResolvedDeclaration {
|
|
274
288
|
/** The column handle. */
|
|
@@ -282,11 +296,10 @@ export interface ResolvedDeclaration {
|
|
|
282
296
|
}
|
|
283
297
|
|
|
284
298
|
/**
|
|
285
|
-
* The
|
|
299
|
+
* The column naming rule in one place, so every importer agrees: declare a column on
|
|
286
300
|
* the sink and, when the sink already holds the name with another shape (an earlier import, a
|
|
287
301
|
* caller's column), rename it `<name>#<origin.id>` (a counter when the source has no id) and
|
|
288
|
-
* record W_COLUMN_RENAMED (coercion); when the table already holds the role
|
|
289
|
-
* at most one column per role), declare without the role and record W_ROLE_TAKEN (coercion). The
|
|
302
|
+
* record W_COLUMN_RENAMED (coercion); when the table already holds the role, declare without the role and record W_ROLE_TAKEN (coercion). The
|
|
290
303
|
* same shape under the same name returns the existing handle, as the sink does.
|
|
291
304
|
* @param sink - the sink
|
|
292
305
|
* @param domain - node or edge
|
|
@@ -294,6 +307,7 @@ export interface ResolvedDeclaration {
|
|
|
294
307
|
* @param report - the report the coercion issues are recorded in
|
|
295
308
|
* @param where - the line and element, when known
|
|
296
309
|
* @returns the handle and the declaration as applied
|
|
310
|
+
* @category Plugin helpers
|
|
297
311
|
*/
|
|
298
312
|
export function declareResolved(
|
|
299
313
|
sink: GraphSink,
|
|
@@ -345,7 +359,7 @@ export function declareResolved(
|
|
|
345
359
|
}
|
|
346
360
|
|
|
347
361
|
/**
|
|
348
|
-
* Declare the companion text column of a temporal column
|
|
362
|
+
* Declare the companion text column of a temporal column. A table holds at
|
|
349
363
|
* most one column per role, so when another companion already carries `timeText` this one is
|
|
350
364
|
* declared without the role (reported once per table); exporters find every companion through
|
|
351
365
|
* `extra.for`.
|
|
@@ -354,6 +368,7 @@ export function declareResolved(
|
|
|
354
368
|
* @param companion - the declaration from declareAttribute()
|
|
355
369
|
* @param report - the report the role loss is recorded in; when omitted the loss is silent
|
|
356
370
|
* @returns the column handle
|
|
371
|
+
* @category Plugin helpers
|
|
357
372
|
*/
|
|
358
373
|
export function declareCompanion(
|
|
359
374
|
sink: GraphSink,
|
|
@@ -383,6 +398,7 @@ export function declareCompanion(
|
|
|
383
398
|
* @param sink - the sink
|
|
384
399
|
* @param domain - node or edge
|
|
385
400
|
* @returns a predicate over column names
|
|
401
|
+
* @category Plugin helpers
|
|
386
402
|
*/
|
|
387
403
|
export function takenIn(sink: GraphSink, domain: "node" | "edge"): (name: string) => boolean {
|
|
388
404
|
return (name: string): boolean =>
|
|
@@ -396,6 +412,7 @@ export function takenIn(sink: GraphSink, domain: "node" | "edge"): (name: string
|
|
|
396
412
|
* @param id - the source id (the attribute id or key id); null falls back to a counter
|
|
397
413
|
* @param taken - whether a name is already used in the table
|
|
398
414
|
* @returns a free name
|
|
415
|
+
* @category Plugin helpers
|
|
399
416
|
*/
|
|
400
417
|
export function uniqueColumnName(name: string, id: string | null, taken: (name: string) => boolean): string {
|
|
401
418
|
if (!taken(name)) {
|
|
@@ -417,6 +434,7 @@ export function uniqueColumnName(name: string, id: string | null, taken: (name:
|
|
|
417
434
|
* The dict heuristic of design section 5.4 for an untyped string column: observe values until the
|
|
418
435
|
* sample is full; the column is a dict when the distinct count stays below half the rows, a string
|
|
419
436
|
* otherwise. The importer buffers the sampled values and declares the column on the decision.
|
|
437
|
+
* @category Plugin helpers
|
|
420
438
|
*/
|
|
421
439
|
export class DictHeuristic {
|
|
422
440
|
private readonly distinct = new Set<string>();
|
|
@@ -17,9 +17,13 @@ import {
|
|
|
17
17
|
} from "@graphty/graph-format";
|
|
18
18
|
|
|
19
19
|
import { describe } from "./options.js";
|
|
20
|
+
import { plural } from "./plural.js";
|
|
20
21
|
import { ImportReportBuilder } from "./report.js";
|
|
21
22
|
|
|
22
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Import stopped for allocating too many empty attribute slots.
|
|
25
|
+
* @category Issue and loss codes
|
|
26
|
+
*/
|
|
23
27
|
export const TOO_MANY_EMPTY_CELLS_CODE = "E_TOO_MANY_EMPTY_CELLS";
|
|
24
28
|
|
|
25
29
|
/** The default limit: 2^24 empty slots, about 130 MB of f64 columns. */
|
|
@@ -30,6 +34,7 @@ const DEFAULT_MAX_EMPTY_CELLS = 2 ** 24;
|
|
|
30
34
|
* @param value - the caller's value
|
|
31
35
|
* @returns a non-negative integer or Infinity
|
|
32
36
|
* @throws GraphFormatError E_UNSUPPORTED for anything else
|
|
37
|
+
* @category Plugin helpers
|
|
33
38
|
*/
|
|
34
39
|
export function maxEmptyCellsOption(value: unknown): number {
|
|
35
40
|
if (value === undefined) {
|
|
@@ -45,7 +50,10 @@ export function maxEmptyCellsOption(value: unknown): number {
|
|
|
45
50
|
);
|
|
46
51
|
}
|
|
47
52
|
|
|
48
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* A GraphBuilder that throws an ImportError once its attribute columns hold too many empty slots.
|
|
55
|
+
* @category Plugin helpers
|
|
56
|
+
*/
|
|
49
57
|
export class CellBudgetBuilder extends GraphBuilder {
|
|
50
58
|
private readonly nodeColumns = new Set<number>();
|
|
51
59
|
private readonly edgeColumns = new Set<number>();
|
|
@@ -159,7 +167,7 @@ export class CellBudgetBuilder extends GraphBuilder {
|
|
|
159
167
|
new ImportReportBuilder(this.format, Infinity).fail(
|
|
160
168
|
TOO_MANY_EMPTY_CELLS_CODE,
|
|
161
169
|
`the attributes are too sparse: ${this.nodeColumns.size} node and ${this.edgeColumns.size} edge ` +
|
|
162
|
-
`attribute
|
|
170
|
+
`attribute columns over ${this.nodeBound} node${plural(this.nodeBound)} and ${this.edgeBound} edge${plural(this.edgeBound)} would ` +
|
|
163
171
|
`allocate more than ${this.maxEmptyCells} slots that hold no value; pass a larger ` +
|
|
164
172
|
`maxEmptyCells (or Infinity) to read the file anyway`,
|
|
165
173
|
undefined,
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The graph choice of an importer that can read every graph of a file (importAll) but has no cheap
|
|
3
|
+
* listing: `graphIndex` / `graphName` passed to its import() directly, as the registry would honor
|
|
4
|
+
* them, so a caller with its own builder is not silently given the first graph.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { GraphBuilder, type GraphSink } from "@graphty/graph-format";
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
type CommonImportOptions,
|
|
11
|
+
type GraphChoiceOptions,
|
|
12
|
+
type GraphImporter,
|
|
13
|
+
type ImportInput,
|
|
14
|
+
type ImportReport,
|
|
15
|
+
} from "../types.js";
|
|
16
|
+
import { chooseGraph } from "./options.js";
|
|
17
|
+
import { ImportReportBuilder } from "./report.js";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Read the graph `graphIndex` or `graphName` chooses into the sink: every graph is read once into a
|
|
21
|
+
* scratch builder to learn the names (E_GRAPH_NOT_FOUND lists them), then the input again with the
|
|
22
|
+
* chosen graph going to the sink.
|
|
23
|
+
* @param importer - the importer, which has importAll()
|
|
24
|
+
* @param input - the input
|
|
25
|
+
* @param sink - the caller's sink
|
|
26
|
+
* @param options - the import options, with the choice
|
|
27
|
+
* @returns the chosen graph's report
|
|
28
|
+
*/
|
|
29
|
+
export async function importChosenGraph<O>(
|
|
30
|
+
importer: GraphImporter<O>,
|
|
31
|
+
input: ImportInput,
|
|
32
|
+
sink: GraphSink,
|
|
33
|
+
options: (O & CommonImportOptions & GraphChoiceOptions) | undefined,
|
|
34
|
+
): Promise<ImportReport> {
|
|
35
|
+
const importAll = importer.importAll?.bind(importer);
|
|
36
|
+
if (importAll === undefined) {
|
|
37
|
+
return importer.import(input, sink, options);
|
|
38
|
+
}
|
|
39
|
+
const replay = await replayable(input);
|
|
40
|
+
const scratch: GraphBuilder[] = [];
|
|
41
|
+
await importAll(replay, (i) => (scratch[i] = new GraphBuilder({ directed: false })), {
|
|
42
|
+
...options,
|
|
43
|
+
onProgress: undefined,
|
|
44
|
+
} as O & CommonImportOptions);
|
|
45
|
+
const names = scratch.map((b) => {
|
|
46
|
+
try {
|
|
47
|
+
return b.freeze().meta.name;
|
|
48
|
+
} catch {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
const chosen = chooseGraph(names, options, new ImportReportBuilder(importer.format, 0));
|
|
53
|
+
const reports = await importAll(
|
|
54
|
+
replay,
|
|
55
|
+
(i) => (i === chosen ? sink : new GraphBuilder({ directed: false })),
|
|
56
|
+
options,
|
|
57
|
+
);
|
|
58
|
+
return reports[chosen];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The input as a string or bytes that can be read twice.
|
|
63
|
+
* @param input - the input
|
|
64
|
+
* @returns the same text or bytes, or the stream's bytes
|
|
65
|
+
*/
|
|
66
|
+
async function replayable(input: ImportInput): Promise<string | Uint8Array> {
|
|
67
|
+
if (typeof input === "string" || input instanceof Uint8Array) {
|
|
68
|
+
return input;
|
|
69
|
+
}
|
|
70
|
+
const parts: Uint8Array[] = [];
|
|
71
|
+
const encoder = new TextEncoder();
|
|
72
|
+
if (typeof (input as ReadableStream<Uint8Array>).getReader === "function") {
|
|
73
|
+
const reader = (input as ReadableStream<Uint8Array>).getReader();
|
|
74
|
+
for (let r = await reader.read(); !r.done; r = await reader.read()) {
|
|
75
|
+
parts.push(r.value);
|
|
76
|
+
}
|
|
77
|
+
} else {
|
|
78
|
+
for await (const chunk of input as AsyncIterable<string | Uint8Array>) {
|
|
79
|
+
parts.push(typeof chunk === "string" ? encoder.encode(chunk) : chunk);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const out = new Uint8Array(parts.reduce((n, p) => n + p.byteLength, 0));
|
|
83
|
+
let offset = 0;
|
|
84
|
+
for (const part of parts) {
|
|
85
|
+
out.set(part, offset);
|
|
86
|
+
offset += part.byteLength;
|
|
87
|
+
}
|
|
88
|
+
return out;
|
|
89
|
+
}
|