@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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { GraphFormatError } from "@graphty/graph-format";
|
|
2
|
-
import {
|
|
2
|
+
import { a4 as textChunks, a5 as MAX_TEXT_LENGTH, a6 as tooLarge } from "./export-BTI4yQgy.js";
|
|
3
3
|
const UNCLOSED_QUOTE_CODE = "E_CSV_UNCLOSED_QUOTE";
|
|
4
4
|
const BAD_QUOTE_CODE = "E_CSV_QUOTE";
|
|
5
5
|
const DELIMITER_CANDIDATES = Object.freeze([",", " ", ";", "|", " "]);
|
|
@@ -7,6 +7,9 @@ const PREVIEW_ROWS = 10;
|
|
|
7
7
|
const PREVIEW_CHARS = 64 * 1024;
|
|
8
8
|
const LF = 10;
|
|
9
9
|
const CR = 13;
|
|
10
|
+
const TAB = 9;
|
|
11
|
+
const SPACE = 32;
|
|
12
|
+
const SEP_DIRECTIVE = /^sep=([^\r\n])(?:\r\n|\n|\r|$)/i;
|
|
10
13
|
const START = 0;
|
|
11
14
|
const UNQUOTED = 1;
|
|
12
15
|
const QUOTED = 2;
|
|
@@ -40,108 +43,181 @@ function checkRecordSyntax(syntax) {
|
|
|
40
43
|
function sniffNewline(text) {
|
|
41
44
|
return !text.includes("\n") && text.includes("\r") ? "\r" : "\n";
|
|
42
45
|
}
|
|
43
|
-
function splitRecords(text, delimiter, quote, maxRows, strictQuotes = false) {
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const n = text.length;
|
|
52
|
-
for (let i = 0; i < n && rows.length < maxRows; i++) {
|
|
53
|
-
const c = text.charCodeAt(i);
|
|
54
|
-
if (state === QUOTED) {
|
|
55
|
-
if (c === quoteCode) {
|
|
56
|
-
field += text.slice(segment, i);
|
|
57
|
-
state = CLOSING;
|
|
58
|
-
}
|
|
59
|
-
continue;
|
|
46
|
+
function splitRecords(text, delimiter, quote, maxRows, strictQuotes = false, collapse = false) {
|
|
47
|
+
const delimiterCode = delimiter.codePointAt(0);
|
|
48
|
+
const splitter = new RecordSplitter(text, quote, delimiterCode, collapse && delimiterCode === SPACE, strictQuotes);
|
|
49
|
+
let i = 0;
|
|
50
|
+
while (i < text.length && splitter.rows.length < maxRows) {
|
|
51
|
+
i = splitter.step(i);
|
|
52
|
+
if (i < 0) {
|
|
53
|
+
return null;
|
|
60
54
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
55
|
+
}
|
|
56
|
+
if (splitter.rows.length < maxRows) {
|
|
57
|
+
splitter.finish();
|
|
58
|
+
}
|
|
59
|
+
return splitter.rows;
|
|
60
|
+
}
|
|
61
|
+
class RecordSplitter {
|
|
62
|
+
/**
|
|
63
|
+
* Create a splitter.
|
|
64
|
+
* @param text - the text
|
|
65
|
+
* @param quote - the quote character
|
|
66
|
+
* @param delimiterCode - the delimiter's code
|
|
67
|
+
* @param whitespace - whether runs of spaces and tabs are one separator
|
|
68
|
+
* @param strictQuotes - whether text after a closing quote gives up
|
|
69
|
+
*/
|
|
70
|
+
constructor(text, quote, delimiterCode, whitespace, strictQuotes) {
|
|
71
|
+
this.text = text;
|
|
72
|
+
this.quote = quote;
|
|
73
|
+
this.delimiterCode = delimiterCode;
|
|
74
|
+
this.whitespace = whitespace;
|
|
75
|
+
this.strictQuotes = strictQuotes;
|
|
76
|
+
this.rows = [];
|
|
77
|
+
this.cells = [];
|
|
78
|
+
this.state = START;
|
|
79
|
+
this.segment = 0;
|
|
80
|
+
this.field = "";
|
|
81
|
+
this.quoteCode = quote.codePointAt(0);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Read one character.
|
|
85
|
+
* @param i - its index
|
|
86
|
+
* @returns the index of the next character to read, or -1 to give up (strictQuotes)
|
|
87
|
+
*/
|
|
88
|
+
step(i) {
|
|
89
|
+
const c = this.text.codePointAt(i);
|
|
90
|
+
if (this.state === QUOTED) {
|
|
91
|
+
if (c === this.quoteCode) {
|
|
92
|
+
this.field += this.text.slice(this.segment, i);
|
|
93
|
+
this.state = CLOSING;
|
|
70
94
|
}
|
|
71
|
-
|
|
72
|
-
segment = i;
|
|
95
|
+
return i + 1;
|
|
73
96
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
97
|
+
const isDelimiter = c === this.delimiterCode || this.whitespace && c === TAB;
|
|
98
|
+
if (this.state === CLOSING) {
|
|
99
|
+
const next = this.afterQuote(i, c, isDelimiter || c === LF || c === CR);
|
|
100
|
+
if (next !== null) {
|
|
101
|
+
return next;
|
|
77
102
|
}
|
|
78
|
-
if (c === delimiterCode) {
|
|
79
|
-
cells.push(field);
|
|
80
|
-
field = "";
|
|
81
|
-
state = START;
|
|
82
|
-
} else {
|
|
83
|
-
if (state !== START || cells.length > 0) {
|
|
84
|
-
cells.push(field);
|
|
85
|
-
rows.push(cells);
|
|
86
|
-
cells = [];
|
|
87
|
-
field = "";
|
|
88
|
-
}
|
|
89
|
-
state = START;
|
|
90
|
-
if (c === CR && text.charCodeAt(i + 1) === LF) {
|
|
91
|
-
i++;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
segment = i + 1;
|
|
95
|
-
continue;
|
|
96
103
|
}
|
|
97
|
-
if (
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
+
if (isDelimiter || c === LF || c === CR) {
|
|
105
|
+
return this.separator(i, isDelimiter);
|
|
106
|
+
}
|
|
107
|
+
if (this.state === START) {
|
|
108
|
+
const quoted = c === this.quoteCode;
|
|
109
|
+
this.state = quoted ? QUOTED : UNQUOTED;
|
|
110
|
+
this.segment = quoted ? i + 1 : i;
|
|
111
|
+
}
|
|
112
|
+
return i + 1;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Read the character after a quote that may close a quoted field: a second quote is a quote
|
|
116
|
+
* character in the field; anything else closes it.
|
|
117
|
+
* @param i - its index
|
|
118
|
+
* @param c - its code
|
|
119
|
+
* @param separates - whether it is a delimiter or a line break
|
|
120
|
+
* @returns the index of the next character to read, -1 to give up (strictQuotes), or null to
|
|
121
|
+
* read this character as the one after the field
|
|
122
|
+
*/
|
|
123
|
+
afterQuote(i, c, separates) {
|
|
124
|
+
if (c === this.quoteCode) {
|
|
125
|
+
this.field += this.quote;
|
|
126
|
+
this.segment = i + 1;
|
|
127
|
+
this.state = QUOTED;
|
|
128
|
+
return i + 1;
|
|
129
|
+
}
|
|
130
|
+
if (this.strictQuotes && !separates) {
|
|
131
|
+
return -1;
|
|
132
|
+
}
|
|
133
|
+
this.state = AFTER_QUOTED;
|
|
134
|
+
this.segment = i;
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Read a delimiter or a line break: end the field, and at a line break the row.
|
|
139
|
+
* @param i - its index
|
|
140
|
+
* @param isDelimiter - whether it is a delimiter
|
|
141
|
+
* @returns the index of the next character to read
|
|
142
|
+
*/
|
|
143
|
+
separator(i, isDelimiter) {
|
|
144
|
+
if (this.state === UNQUOTED || this.state === AFTER_QUOTED) {
|
|
145
|
+
this.field += this.text.slice(this.segment, i);
|
|
146
|
+
}
|
|
147
|
+
let next = i + 1;
|
|
148
|
+
if (isDelimiter && this.whitespace && this.state === START) ;
|
|
149
|
+
else if (isDelimiter) {
|
|
150
|
+
this.cells.push(this.field);
|
|
151
|
+
this.field = "";
|
|
152
|
+
this.state = START;
|
|
153
|
+
} else {
|
|
154
|
+
this.endRow();
|
|
155
|
+
this.state = START;
|
|
156
|
+
if (this.text.codePointAt(i) === CR && this.text.codePointAt(i + 1) === LF) {
|
|
157
|
+
next = i + 2;
|
|
104
158
|
}
|
|
105
159
|
}
|
|
160
|
+
this.segment = next;
|
|
161
|
+
return next;
|
|
106
162
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
163
|
+
/** End the row at a line break; a blank line is no row. */
|
|
164
|
+
endRow() {
|
|
165
|
+
if (this.state === START && this.cells.length === 0) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
if (!(this.whitespace && this.state === START)) {
|
|
169
|
+
this.cells.push(this.field);
|
|
110
170
|
}
|
|
111
|
-
|
|
112
|
-
|
|
171
|
+
this.rows.push(this.cells);
|
|
172
|
+
this.cells = [];
|
|
173
|
+
this.field = "";
|
|
174
|
+
}
|
|
175
|
+
/** End the text: the last row, when it has no line break after it. */
|
|
176
|
+
finish() {
|
|
177
|
+
if (this.state === START && this.cells.length === 0) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (this.state === UNQUOTED || this.state === AFTER_QUOTED || this.state === QUOTED) {
|
|
181
|
+
this.field += this.text.slice(this.segment);
|
|
182
|
+
}
|
|
183
|
+
if (!(this.whitespace && this.state === START)) {
|
|
184
|
+
this.cells.push(this.field);
|
|
185
|
+
}
|
|
186
|
+
this.rows.push(this.cells);
|
|
113
187
|
}
|
|
114
|
-
return rows;
|
|
115
188
|
}
|
|
116
189
|
function stripLeadingComments(text, comments) {
|
|
117
190
|
if (comments.length === 0) {
|
|
118
191
|
return text;
|
|
119
192
|
}
|
|
120
193
|
let at = 0;
|
|
121
|
-
while (at < text.length
|
|
194
|
+
while (at < text.length) {
|
|
195
|
+
if (text[at] === "\n" || text[at] === "\r") {
|
|
196
|
+
at++;
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
if (!comments.includes(text[at])) {
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
122
202
|
const lf = text.indexOf("\n", at);
|
|
123
203
|
const cr = text.indexOf("\r", at);
|
|
124
204
|
const end = Math.min(lf < 0 ? Infinity : lf, cr < 0 ? Infinity : cr);
|
|
125
205
|
if (end === Infinity) {
|
|
126
206
|
return "";
|
|
127
207
|
}
|
|
128
|
-
at = end
|
|
129
|
-
if (text[at - 1] === "\r" && text[at] === "\n") {
|
|
130
|
-
at++;
|
|
131
|
-
}
|
|
208
|
+
at = end;
|
|
132
209
|
}
|
|
133
210
|
return at === 0 ? text : text.slice(at);
|
|
134
211
|
}
|
|
135
|
-
function sniffDelimiter(text, newline = "\n", candidates = DELIMITER_CANDIDATES, quote = '"', skipQuoteErrors = false) {
|
|
212
|
+
function sniffDelimiter(text, newline = "\n", candidates = DELIMITER_CANDIDATES, quote = '"', skipQuoteErrors = false, collapse = false) {
|
|
136
213
|
let best = null;
|
|
137
214
|
let bestDelta = Infinity;
|
|
138
|
-
let bestAverage = 0;
|
|
139
215
|
const terminated = text.endsWith("\n") || text.endsWith("\r");
|
|
140
216
|
for (const delimiter of candidates) {
|
|
141
217
|
if (delimiter === quote || delimiter === newline) {
|
|
142
218
|
continue;
|
|
143
219
|
}
|
|
144
|
-
const split = splitRecords(text, delimiter, quote, PREVIEW_ROWS, skipQuoteErrors);
|
|
220
|
+
const split = splitRecords(text, delimiter, quote, PREVIEW_ROWS, skipQuoteErrors, collapse);
|
|
145
221
|
if (split === null) {
|
|
146
222
|
continue;
|
|
147
223
|
}
|
|
@@ -162,10 +238,9 @@ function sniffDelimiter(text, newline = "\n", candidates = DELIMITER_CANDIDATES,
|
|
|
162
238
|
}
|
|
163
239
|
}
|
|
164
240
|
const average = total / rows.length;
|
|
165
|
-
if (average > 1.99 &&
|
|
241
|
+
if (average > 1.99 && delta < bestDelta) {
|
|
166
242
|
best = delimiter;
|
|
167
243
|
bestDelta = delta;
|
|
168
|
-
bestAverage = average;
|
|
169
244
|
}
|
|
170
245
|
}
|
|
171
246
|
return best;
|
|
@@ -185,6 +260,9 @@ class RecordReader {
|
|
|
185
260
|
this.cells = [];
|
|
186
261
|
this.quoted = [];
|
|
187
262
|
this.leadingComments = [];
|
|
263
|
+
this.leadingCommentLines = [];
|
|
264
|
+
this.strayQuoteLine = 0;
|
|
265
|
+
this.sepDirective = false;
|
|
188
266
|
this.recordLine = 0;
|
|
189
267
|
this.input = input;
|
|
190
268
|
this.report = report;
|
|
@@ -235,12 +313,15 @@ class RecordReader {
|
|
|
235
313
|
/**
|
|
236
314
|
* Record a text-after-quote error (fatal).
|
|
237
315
|
* @param line - the line the field started on
|
|
316
|
+
* @param field - the 1-based position of the field in its record
|
|
238
317
|
* @returns never
|
|
239
318
|
*/
|
|
240
|
-
badQuote(line) {
|
|
241
|
-
return this.report.fail(
|
|
242
|
-
|
|
243
|
-
|
|
319
|
+
badQuote(line, field) {
|
|
320
|
+
return this.report.fail(
|
|
321
|
+
BAD_QUOTE_CODE,
|
|
322
|
+
`text after the closing quote of quoted field ${field} (a quote inside a quoted field is written as two quotes)`,
|
|
323
|
+
{ line }
|
|
324
|
+
);
|
|
244
325
|
}
|
|
245
326
|
/**
|
|
246
327
|
* Record an unclosed-quote error (fatal).
|
|
@@ -270,6 +351,10 @@ class RecordReader {
|
|
|
270
351
|
let breaks = 0;
|
|
271
352
|
let lastWasCr = false;
|
|
272
353
|
let sniffed = false;
|
|
354
|
+
const commentCodes = (this.syntax.comments ?? []).map((c) => c.codePointAt(0));
|
|
355
|
+
let leading = commentCodes.length > 0;
|
|
356
|
+
let lineStart = true;
|
|
357
|
+
let inComment = false;
|
|
273
358
|
for await (const chunk of source) {
|
|
274
359
|
if (sniffed) {
|
|
275
360
|
yield chunk;
|
|
@@ -279,12 +364,18 @@ class RecordReader {
|
|
|
279
364
|
length += chunk.length;
|
|
280
365
|
for (let i = 0; i < chunk.length && breaks < PREVIEW_ROWS; i++) {
|
|
281
366
|
const c = chunk.charCodeAt(i);
|
|
282
|
-
if (c === LF) {
|
|
283
|
-
if (!lastWasCr) {
|
|
367
|
+
if (c === LF || c === CR) {
|
|
368
|
+
if (!(c === LF && lastWasCr) && !inComment) {
|
|
284
369
|
breaks++;
|
|
285
370
|
}
|
|
286
|
-
|
|
287
|
-
|
|
371
|
+
inComment = false;
|
|
372
|
+
lineStart = true;
|
|
373
|
+
} else {
|
|
374
|
+
if (lineStart && leading) {
|
|
375
|
+
inComment = commentCodes.includes(c);
|
|
376
|
+
leading = inComment;
|
|
377
|
+
}
|
|
378
|
+
lineStart = false;
|
|
288
379
|
}
|
|
289
380
|
lastWasCr = c === CR;
|
|
290
381
|
}
|
|
@@ -310,9 +401,27 @@ class RecordReader {
|
|
|
310
401
|
* @param text - the preview
|
|
311
402
|
*/
|
|
312
403
|
sniff(text) {
|
|
404
|
+
const preview = text.slice(0, PREVIEW_CHARS);
|
|
405
|
+
const body = stripLeadingComments(preview, this.syntax.comments ?? []);
|
|
406
|
+
if (this.syntax.inspect !== void 0) {
|
|
407
|
+
const skipped = preview.slice(0, preview.length - body.length).match(/\r\n|\r|\n/g)?.length ?? 0;
|
|
408
|
+
this.syntax.inspect(body, skipped + 1);
|
|
409
|
+
}
|
|
410
|
+
const directive = this.syntax.sepDirective === true ? SEP_DIRECTIVE.exec(text) : null;
|
|
411
|
+
if (directive !== null && directive[1] !== this.syntax.quote) {
|
|
412
|
+
this.delimiterText = directive[1];
|
|
413
|
+
this.sepDirective = true;
|
|
414
|
+
return;
|
|
415
|
+
}
|
|
313
416
|
const candidates = this.syntax.candidates ?? DELIMITER_CANDIDATES;
|
|
314
|
-
|
|
315
|
-
|
|
417
|
+
this.delimiterText = sniffDelimiter(
|
|
418
|
+
body,
|
|
419
|
+
sniffNewline(body),
|
|
420
|
+
candidates,
|
|
421
|
+
this.syntax.quote,
|
|
422
|
+
this.syntax.skipQuoteErrors,
|
|
423
|
+
this.syntax.collapseSpaces
|
|
424
|
+
) ?? candidates[0];
|
|
316
425
|
}
|
|
317
426
|
}
|
|
318
427
|
class RecordScanner {
|
|
@@ -326,6 +435,7 @@ class RecordScanner {
|
|
|
326
435
|
this.recordLine = 1;
|
|
327
436
|
this.startLine = 1;
|
|
328
437
|
this.delimiterCode = -1;
|
|
438
|
+
this.collapse = false;
|
|
329
439
|
this.state = START;
|
|
330
440
|
this.field = "";
|
|
331
441
|
this.fieldQuoted = false;
|
|
@@ -346,6 +456,7 @@ class RecordScanner {
|
|
|
346
456
|
setDelimiter(code) {
|
|
347
457
|
if (this.delimiterCode < 0) {
|
|
348
458
|
this.delimiterCode = code;
|
|
459
|
+
this.collapse = code === SPACE && this.reader.syntax.collapseSpaces === true;
|
|
349
460
|
}
|
|
350
461
|
}
|
|
351
462
|
/**
|
|
@@ -363,8 +474,9 @@ class RecordScanner {
|
|
|
363
474
|
const c = chunk.charCodeAt(i);
|
|
364
475
|
if (this.state === COMMENT) {
|
|
365
476
|
if (c === LF || c === CR) {
|
|
366
|
-
this.comment
|
|
477
|
+
this.comment = this.grow(this.comment, chunk.slice(this.segment, i));
|
|
367
478
|
this.reader.leadingComments.push(this.comment);
|
|
479
|
+
this.reader.leadingCommentLines.push(this.line);
|
|
368
480
|
this.comment = "";
|
|
369
481
|
this.state = START;
|
|
370
482
|
this.endLine(c);
|
|
@@ -383,28 +495,29 @@ class RecordScanner {
|
|
|
383
495
|
i = n;
|
|
384
496
|
break;
|
|
385
497
|
}
|
|
386
|
-
this.field
|
|
498
|
+
this.field = this.grow(this.field, chunk.slice(this.segment, q));
|
|
387
499
|
this.state = CLOSING;
|
|
388
500
|
this.lastWasCr = false;
|
|
389
501
|
i = q + 1;
|
|
390
502
|
continue;
|
|
391
503
|
}
|
|
504
|
+
const isDelimiter = c === delimiterCode || this.collapse && c === TAB;
|
|
392
505
|
if (this.state === CLOSING) {
|
|
393
506
|
if (c === quoteCode) {
|
|
394
|
-
this.field
|
|
507
|
+
this.field = this.grow(this.field, this.quoteText);
|
|
395
508
|
this.segment = i + 1;
|
|
396
509
|
this.state = QUOTED;
|
|
397
510
|
this.lastWasCr = false;
|
|
398
511
|
i++;
|
|
399
512
|
continue;
|
|
400
513
|
}
|
|
401
|
-
if (
|
|
402
|
-
this.reader.badQuote(this.startLine);
|
|
514
|
+
if (!isDelimiter && c !== LF && c !== CR) {
|
|
515
|
+
this.reader.badQuote(this.startLine, this.count + 1);
|
|
403
516
|
}
|
|
404
517
|
this.state = AFTER_QUOTED;
|
|
405
518
|
this.segment = i;
|
|
406
519
|
}
|
|
407
|
-
if (
|
|
520
|
+
if (isDelimiter || c === LF || c === CR) {
|
|
408
521
|
if (c === LF && this.lastWasCr) {
|
|
409
522
|
this.lastWasCr = false;
|
|
410
523
|
this.segment = i + 1;
|
|
@@ -412,9 +525,15 @@ class RecordScanner {
|
|
|
412
525
|
continue;
|
|
413
526
|
}
|
|
414
527
|
if (this.state === UNQUOTED) {
|
|
415
|
-
this.field
|
|
528
|
+
this.field = this.grow(this.field, chunk.slice(this.segment, i));
|
|
416
529
|
}
|
|
417
|
-
if (
|
|
530
|
+
if (isDelimiter && this.collapse && this.state === START) {
|
|
531
|
+
this.lastWasCr = false;
|
|
532
|
+
this.segment = i + 1;
|
|
533
|
+
i++;
|
|
534
|
+
continue;
|
|
535
|
+
}
|
|
536
|
+
if (isDelimiter) {
|
|
418
537
|
this.push();
|
|
419
538
|
this.state = START;
|
|
420
539
|
this.lastWasCr = false;
|
|
@@ -422,9 +541,10 @@ class RecordScanner {
|
|
|
422
541
|
i++;
|
|
423
542
|
continue;
|
|
424
543
|
}
|
|
425
|
-
|
|
426
|
-
if (!blank) {
|
|
544
|
+
if (!(this.state === START && (this.count === 0 || this.collapse))) {
|
|
427
545
|
this.push();
|
|
546
|
+
}
|
|
547
|
+
if (this.count > 0) {
|
|
428
548
|
this.ready = true;
|
|
429
549
|
this.recordLine = this.startLine;
|
|
430
550
|
}
|
|
@@ -454,6 +574,8 @@ class RecordScanner {
|
|
|
454
574
|
this.state = UNQUOTED;
|
|
455
575
|
this.segment = i;
|
|
456
576
|
}
|
|
577
|
+
} else if (c === quoteCode && this.state === UNQUOTED && this.reader.strayQuoteLine === 0) {
|
|
578
|
+
this.reader.strayQuoteLine = this.startLine;
|
|
457
579
|
}
|
|
458
580
|
i++;
|
|
459
581
|
}
|
|
@@ -469,9 +591,9 @@ class RecordScanner {
|
|
|
469
591
|
return;
|
|
470
592
|
}
|
|
471
593
|
if (this.state === COMMENT) {
|
|
472
|
-
this.comment
|
|
594
|
+
this.comment = this.grow(this.comment, chunk.slice(this.segment, n));
|
|
473
595
|
} else if (this.state === QUOTED || this.state === UNQUOTED) {
|
|
474
|
-
this.field
|
|
596
|
+
this.field = this.grow(this.field, chunk.slice(this.segment, n));
|
|
475
597
|
}
|
|
476
598
|
this.segment = n;
|
|
477
599
|
}
|
|
@@ -484,13 +606,16 @@ class RecordScanner {
|
|
|
484
606
|
const { state } = this;
|
|
485
607
|
if (state === COMMENT) {
|
|
486
608
|
this.reader.leadingComments.push(this.comment);
|
|
609
|
+
this.reader.leadingCommentLines.push(this.line);
|
|
487
610
|
return false;
|
|
488
611
|
}
|
|
489
612
|
if (state === QUOTED) {
|
|
490
613
|
this.reader.unclosedQuote(this.startLine);
|
|
491
614
|
}
|
|
492
615
|
if (state !== START || this.count > 0) {
|
|
493
|
-
this.
|
|
616
|
+
if (!(state === START && this.collapse)) {
|
|
617
|
+
this.push();
|
|
618
|
+
}
|
|
494
619
|
this.recordLine = this.startLine;
|
|
495
620
|
return true;
|
|
496
621
|
}
|
|
@@ -503,23 +628,42 @@ class RecordScanner {
|
|
|
503
628
|
* @param to - the index after the run
|
|
504
629
|
*/
|
|
505
630
|
countLineBreaks(chunk, from, to) {
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
lastWasCr = false;
|
|
514
|
-
} else if (c === CR) {
|
|
631
|
+
const run = chunk.slice(from, to);
|
|
632
|
+
let { line } = this;
|
|
633
|
+
let lastCr = this.lastWasCr ? -1 : -2;
|
|
634
|
+
let lf = run.indexOf("\n");
|
|
635
|
+
let cr = run.indexOf("\r");
|
|
636
|
+
while (lf >= 0 || cr >= 0) {
|
|
637
|
+
if (lf < 0 || cr >= 0 && cr < lf) {
|
|
515
638
|
line++;
|
|
516
|
-
|
|
639
|
+
lastCr = cr;
|
|
640
|
+
cr = run.indexOf("\r", cr + 1);
|
|
517
641
|
} else {
|
|
518
|
-
|
|
642
|
+
if (lf !== lastCr + 1) {
|
|
643
|
+
line++;
|
|
644
|
+
}
|
|
645
|
+
lf = run.indexOf("\n", lf + 1);
|
|
519
646
|
}
|
|
520
647
|
}
|
|
521
648
|
this.line = line;
|
|
522
|
-
this.lastWasCr =
|
|
649
|
+
this.lastWasCr = lastCr === run.length - 1;
|
|
650
|
+
}
|
|
651
|
+
/**
|
|
652
|
+
* Append to the field or comment in progress, failing with E_TOO_LARGE instead of a RangeError
|
|
653
|
+
* when the result would be longer than one JavaScript string can hold.
|
|
654
|
+
* @param text - the text so far
|
|
655
|
+
* @param piece - the text to append
|
|
656
|
+
* @returns the joined text
|
|
657
|
+
*/
|
|
658
|
+
grow(text, piece) {
|
|
659
|
+
if (text.length + piece.length > MAX_TEXT_LENGTH) {
|
|
660
|
+
tooLarge(
|
|
661
|
+
this.reader.report,
|
|
662
|
+
`a cell is longer than ${MAX_TEXT_LENGTH} characters, the most one JavaScript string holds`,
|
|
663
|
+
this.startLine
|
|
664
|
+
);
|
|
665
|
+
}
|
|
666
|
+
return text + piece;
|
|
523
667
|
}
|
|
524
668
|
/** Store the field in progress as the next cell. */
|
|
525
669
|
push() {
|
|
@@ -557,9 +701,18 @@ class CsvRecordReader {
|
|
|
557
701
|
delimiter: options.delimiter ?? null,
|
|
558
702
|
quote: '"',
|
|
559
703
|
comments: options.comments,
|
|
560
|
-
skipQuoteErrors: options.skipQuoteErrors
|
|
704
|
+
skipQuoteErrors: options.skipQuoteErrors,
|
|
705
|
+
collapseSpaces: true,
|
|
706
|
+
sepDirective: true,
|
|
707
|
+
inspect: options.inspect
|
|
561
708
|
},
|
|
562
|
-
{
|
|
709
|
+
{
|
|
710
|
+
signal: options.signal,
|
|
711
|
+
onProgress: options.onProgress,
|
|
712
|
+
encoding: options.encoding,
|
|
713
|
+
allowEmpty: options.allowEmpty,
|
|
714
|
+
nulIsBinary: true
|
|
715
|
+
}
|
|
563
716
|
);
|
|
564
717
|
}
|
|
565
718
|
/**
|
|
@@ -569,6 +722,13 @@ class CsvRecordReader {
|
|
|
569
722
|
get leadingComments() {
|
|
570
723
|
return this.inner.leadingComments;
|
|
571
724
|
}
|
|
725
|
+
/**
|
|
726
|
+
* The 1-based line of each leading comment, parallel to `leadingComments`.
|
|
727
|
+
* @returns the lines
|
|
728
|
+
*/
|
|
729
|
+
get leadingCommentLines() {
|
|
730
|
+
return this.inner.leadingCommentLines;
|
|
731
|
+
}
|
|
572
732
|
/**
|
|
573
733
|
* The 1-based line the most recently yielded row starts on.
|
|
574
734
|
* @returns the line; 0 before the first row
|
|
@@ -590,6 +750,20 @@ class CsvRecordReader {
|
|
|
590
750
|
get quoted() {
|
|
591
751
|
return this.inner.quoted;
|
|
592
752
|
}
|
|
753
|
+
/**
|
|
754
|
+
* The line of the first quote inside an unquoted field.
|
|
755
|
+
* @returns the line, or 0 when there was none
|
|
756
|
+
*/
|
|
757
|
+
get strayQuoteLine() {
|
|
758
|
+
return this.inner.strayQuoteLine;
|
|
759
|
+
}
|
|
760
|
+
/**
|
|
761
|
+
* Whether the first record is an Excel `sep=X` line the delimiter was taken from.
|
|
762
|
+
* @returns true when it is
|
|
763
|
+
*/
|
|
764
|
+
get sepDirective() {
|
|
765
|
+
return this.inner.sepDirective;
|
|
766
|
+
}
|
|
593
767
|
/**
|
|
594
768
|
* Iterate the rows.
|
|
595
769
|
* @yields one row at a time as its cell texts
|
|
@@ -598,21 +772,31 @@ class CsvRecordReader {
|
|
|
598
772
|
async *[Symbol.asyncIterator]() {
|
|
599
773
|
const { inner } = this;
|
|
600
774
|
for await (const count of inner) {
|
|
601
|
-
if (
|
|
775
|
+
if (isBlankRecord(inner.cells, inner.quoted, count)) {
|
|
602
776
|
continue;
|
|
603
777
|
}
|
|
604
778
|
yield inner.cells.slice(0, count);
|
|
605
779
|
}
|
|
606
780
|
}
|
|
607
781
|
}
|
|
782
|
+
function isBlankRecord(cells, quoted, count) {
|
|
783
|
+
for (let k = 0; k < count; k++) {
|
|
784
|
+
if (quoted[k] || cells[k].trim().length > 0) {
|
|
785
|
+
return false;
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
return true;
|
|
789
|
+
}
|
|
608
790
|
export {
|
|
609
791
|
BAD_QUOTE_CODE as B,
|
|
610
792
|
CsvRecordReader as C,
|
|
611
793
|
DELIMITER_CANDIDATES as D,
|
|
612
794
|
RecordReader as R,
|
|
613
795
|
UNCLOSED_QUOTE_CODE as U,
|
|
614
|
-
|
|
796
|
+
sniffNewline as a,
|
|
797
|
+
sniffDelimiter as b,
|
|
615
798
|
checkRecordSyntax as c,
|
|
616
|
-
|
|
799
|
+
splitRecords as d,
|
|
800
|
+
stripLeadingComments as s
|
|
617
801
|
};
|
|
618
|
-
//# sourceMappingURL=records-
|
|
802
|
+
//# sourceMappingURL=records-CQXT__mY.js.map
|