@graphty/graph-io 0.3.47 → 0.3.49
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/dist/chunks/{approximations-wWjCRzKj.js → approximations-Bzn3L-je.js} +2 -2
- package/dist/chunks/{approximations-wWjCRzKj.js.map → approximations-Bzn3L-je.js.map} +1 -1
- package/dist/chunks/bends-BGXjv_U4.js +129 -0
- package/dist/chunks/bends-BGXjv_U4.js.map +1 -0
- package/dist/chunks/{block-DiGq58c3.js → block-iptrlMBb.js} +947 -134
- package/dist/chunks/block-iptrlMBb.js.map +1 -0
- package/dist/chunks/choose-CczZJaX_.js +717 -0
- package/dist/chunks/choose-CczZJaX_.js.map +1 -0
- package/dist/chunks/codes-BE2xir2k.js +157 -0
- package/dist/chunks/codes-BE2xir2k.js.map +1 -0
- package/dist/chunks/{constants-BKwqelYD.js → constants-CKkYLPtt.js} +2 -2
- package/dist/chunks/{constants-BKwqelYD.js.map → constants-CKkYLPtt.js.map} +1 -1
- package/dist/chunks/context-C3p0RQxR.js +664 -0
- package/dist/chunks/context-C3p0RQxR.js.map +1 -0
- package/dist/chunks/{convert-BcQ8_jMo.js → convert-Ct2zelbQ.js} +7 -2
- package/dist/chunks/convert-Ct2zelbQ.js.map +1 -0
- package/dist/chunks/credentials-DXHx7nwR.js +349 -0
- package/dist/chunks/credentials-DXHx7nwR.js.map +1 -0
- package/dist/chunks/cx-export-Bt6NoqTQ.js +259 -0
- package/dist/chunks/cx-export-Bt6NoqTQ.js.map +1 -0
- package/dist/chunks/descriptor-B28U25x4.js +60 -0
- package/dist/chunks/descriptor-B28U25x4.js.map +1 -0
- package/dist/chunks/descriptor-C-YDhtsn.js +48 -0
- package/dist/chunks/descriptor-C-YDhtsn.js.map +1 -0
- package/dist/chunks/descriptor-DLA5kINx.js +142 -0
- package/dist/chunks/descriptor-DLA5kINx.js.map +1 -0
- package/dist/chunks/{emit-CwU8cUmG.js → emit-BwHQkZle.js} +1690 -103
- package/dist/chunks/emit-BwHQkZle.js.map +1 -0
- package/dist/chunks/{escape-CgzxiYPg.js → escape-CuCIzNMB.js} +12 -12
- package/dist/chunks/{escape-CgzxiYPg.js.map → escape-CuCIzNMB.js.map} +1 -1
- package/dist/chunks/{export-BvqAXCKh.js → export-Cha4dRFz.js} +48 -1780
- package/dist/chunks/export-Cha4dRFz.js.map +1 -0
- package/dist/chunks/{exporter--Mk9gXCJ.js → exporter-BP6otMO6.js} +6 -4
- package/dist/chunks/{exporter--Mk9gXCJ.js.map → exporter-BP6otMO6.js.map} +1 -1
- package/dist/chunks/{exporter-CrDWIyiq.js → exporter-D2CETOMK.js} +1222 -154
- package/dist/chunks/exporter-D2CETOMK.js.map +1 -0
- package/dist/chunks/{exporter-DndFlGSa.js → exporter-D9yMtocA.js} +7 -6
- package/dist/chunks/{exporter-DndFlGSa.js.map → exporter-D9yMtocA.js.map} +1 -1
- package/dist/chunks/exporter-_jrBTnos.js +1009 -0
- package/dist/chunks/exporter-_jrBTnos.js.map +1 -0
- package/dist/chunks/{exporter-CJgfhF-l.js → exporter-nDfxIK5D.js} +9 -7
- package/dist/chunks/{exporter-CJgfhF-l.js.map → exporter-nDfxIK5D.js.map} +1 -1
- package/dist/chunks/format-BXiAb-1h.js +408 -0
- package/dist/chunks/format-BXiAb-1h.js.map +1 -0
- package/dist/chunks/{generic-Dq1ntt9q.js → generic-ymWCETAJ.js} +387 -31
- package/dist/chunks/generic-ymWCETAJ.js.map +1 -0
- package/dist/chunks/{importer-CMmeMWlC.js → importer-B92x1xY5.js} +15 -263
- package/dist/chunks/importer-B92x1xY5.js.map +1 -0
- package/dist/chunks/{importer-DiZRmOQG.js → importer-CT9mJ1nn.js} +328 -90
- package/dist/chunks/importer-CT9mJ1nn.js.map +1 -0
- package/dist/chunks/{importer-COTK9Tsl.js → importer-DaLTjbds.js} +116 -1099
- package/dist/chunks/importer-DaLTjbds.js.map +1 -0
- package/dist/chunks/{importer-iFYPEKaJ.js → importer-GREKMdIf.js} +28 -16
- package/dist/chunks/importer-GREKMdIf.js.map +1 -0
- package/dist/chunks/{importer-BSvfrX_h.js → importer-PqaaKKnY.js} +23 -1016
- package/dist/chunks/importer-PqaaKKnY.js.map +1 -0
- package/dist/chunks/{importer-yh_aBCU6.js → importer-Vn5QvmmJ.js} +66 -12
- package/dist/chunks/importer-Vn5QvmmJ.js.map +1 -0
- package/dist/chunks/{importer-e6LGpqHB.js → importer-vRq4h3j5.js} +1470 -354
- package/dist/chunks/importer-vRq4h3j5.js.map +1 -0
- package/dist/chunks/input-CAxt_aV-.js +1397 -0
- package/dist/chunks/input-CAxt_aV-.js.map +1 -0
- package/dist/chunks/{json-elements-DJZRZ6jd.js → json-elements-Cq76WjnZ.js} +4 -4
- package/dist/chunks/{json-elements-DJZRZ6jd.js.map → json-elements-Cq76WjnZ.js.map} +1 -1
- package/dist/chunks/{lexicon-CT69Kd87.js → lexicon-Clf4QIyl.js} +299 -77
- package/dist/chunks/lexicon-Clf4QIyl.js.map +1 -0
- package/dist/chunks/{ontology-export-G4MqRdux.js → ontology-export-OMo91mb0.js} +4 -3
- package/dist/chunks/{ontology-export-G4MqRdux.js.map → ontology-export-OMo91mb0.js.map} +1 -1
- package/dist/chunks/{records-CiaWZrFH.js → records-NJiYvekn.js} +2 -2
- package/dist/chunks/{records-CiaWZrFH.js.map → records-NJiYvekn.js.map} +1 -1
- package/dist/chunks/{format-BpQBx8MZ.js → report-CwMfYa9J.js} +70 -127
- package/dist/chunks/report-CwMfYa9J.js.map +1 -0
- package/dist/chunks/round-trip-Zm3_ivgq.js +79 -0
- package/dist/chunks/round-trip-Zm3_ivgq.js.map +1 -0
- package/dist/chunks/sigv4-EokFic1V.js +247 -0
- package/dist/chunks/sigv4-EokFic1V.js.map +1 -0
- package/dist/chunks/{styles-BQnsga7p.js → styles-CCs214_3.js} +1300 -168
- package/dist/chunks/styles-CCs214_3.js.map +1 -0
- package/dist/chunks/styles-Cm62yyQX.js +2812 -0
- package/dist/chunks/styles-Cm62yyQX.js.map +1 -0
- package/dist/chunks/styles-DPQQIig4.js +1928 -0
- package/dist/chunks/styles-DPQQIig4.js.map +1 -0
- package/dist/chunks/styles-yed-UMFdNqze.js +1213 -0
- package/dist/chunks/styles-yed-UMFdNqze.js.map +1 -0
- package/dist/chunks/{text-CzJNFOS9.js → text-ystE2bYi.js} +2 -2
- package/dist/chunks/{text-CzJNFOS9.js.map → text-ystE2bYi.js.map} +1 -1
- package/dist/csv.js +7 -5
- package/dist/csv.js.map +1 -1
- package/dist/cx.js +5 -4
- package/dist/cx.js.map +1 -1
- package/dist/cx2.js +2 -2
- package/dist/cys.js +1 -1
- package/dist/dot.js +5 -4
- package/dist/dot.js.map +1 -1
- package/dist/gexf.js +42 -10
- package/dist/gexf.js.map +1 -1
- package/dist/gml.js +850 -193
- package/dist/gml.js.map +1 -1
- package/dist/graph-io.js +1189 -220
- package/dist/graph-io.js.map +1 -1
- package/dist/graphml.js +3 -3
- package/dist/json.js +3 -2
- package/dist/neo4j.js +6 -4
- package/dist/neo4j.js.map +1 -1
- package/dist/obo.js +1 -1
- package/dist/pajek.js +1 -1
- package/dist/positions.js +45 -3
- package/dist/positions.js.map +1 -1
- package/dist/sources-cypher.d.ts +1 -0
- package/dist/sources-cypher.js +1351 -0
- package/dist/sources-cypher.js.map +1 -0
- package/dist/sources-ndex.d.ts +1 -0
- package/dist/sources-ndex.js +278 -0
- package/dist/sources-ndex.js.map +1 -0
- package/dist/sources-rest.d.ts +1 -0
- package/dist/sources-rest.js +1377 -0
- package/dist/sources-rest.js.map +1 -0
- package/dist/sources-sparql.d.ts +1 -0
- package/dist/sources-sparql.js +405 -0
- package/dist/sources-sparql.js.map +1 -0
- package/dist/src/common/report.d.ts +6 -3
- package/dist/src/common/report.d.ts.map +1 -1
- package/dist/src/common/report.js +15 -9
- package/dist/src/common/report.js.map +1 -1
- package/dist/src/formats/cx/importer.d.ts.map +1 -1
- package/dist/src/formats/cx/importer.js +5 -1
- package/dist/src/formats/cx/importer.js.map +1 -1
- package/dist/src/formats/cx/styles.d.ts +24 -1
- package/dist/src/formats/cx/styles.d.ts.map +1 -1
- package/dist/src/formats/cx/styles.js +118 -11
- package/dist/src/formats/cx/styles.js.map +1 -1
- package/dist/src/formats/cx2/importer.d.ts.map +1 -1
- package/dist/src/formats/cx2/importer.js +1 -0
- package/dist/src/formats/cx2/importer.js.map +1 -1
- package/dist/src/formats/cx2/styles.d.ts.map +1 -1
- package/dist/src/formats/cx2/styles.js +3 -1
- package/dist/src/formats/cx2/styles.js.map +1 -1
- package/dist/src/formats/cys/importer.d.ts.map +1 -1
- package/dist/src/formats/cys/importer.js +1 -0
- package/dist/src/formats/cys/importer.js.map +1 -1
- package/dist/src/formats/cys/styles.d.ts +2 -0
- package/dist/src/formats/cys/styles.d.ts.map +1 -1
- package/dist/src/formats/cys/styles.js +15 -7
- package/dist/src/formats/cys/styles.js.map +1 -1
- package/dist/src/formats/dot/drawing.d.ts +98 -0
- package/dist/src/formats/dot/drawing.d.ts.map +1 -0
- package/dist/src/formats/dot/drawing.js +734 -0
- package/dist/src/formats/dot/drawing.js.map +1 -0
- package/dist/src/formats/dot/importer.d.ts.map +1 -1
- package/dist/src/formats/dot/importer.js +108 -31
- package/dist/src/formats/dot/importer.js.map +1 -1
- package/dist/src/formats/dot/label-places.d.ts +34 -0
- package/dist/src/formats/dot/label-places.d.ts.map +1 -0
- package/dist/src/formats/dot/label-places.js +179 -0
- package/dist/src/formats/dot/label-places.js.map +1 -0
- package/dist/src/formats/dot/record.d.ts +50 -0
- package/dist/src/formats/dot/record.d.ts.map +1 -0
- package/dist/src/formats/dot/record.js +275 -0
- package/dist/src/formats/dot/record.js.map +1 -0
- package/dist/src/formats/dot/styles.d.ts +62 -2
- package/dist/src/formats/dot/styles.d.ts.map +1 -1
- package/dist/src/formats/dot/styles.js +1457 -120
- package/dist/src/formats/dot/styles.js.map +1 -1
- package/dist/src/formats/gexf/dialog-metrics.d.ts +15 -0
- package/dist/src/formats/gexf/dialog-metrics.d.ts.map +1 -0
- package/dist/src/formats/gexf/dialog-metrics.js +59 -0
- package/dist/src/formats/gexf/dialog-metrics.js.map +1 -0
- package/dist/src/formats/gexf/importer.d.ts +7 -0
- package/dist/src/formats/gexf/importer.d.ts.map +1 -1
- package/dist/src/formats/gexf/importer.js +41 -5
- package/dist/src/formats/gexf/importer.js.map +1 -1
- package/dist/src/formats/gexf/preview.d.ts +77 -0
- package/dist/src/formats/gexf/preview.d.ts.map +1 -0
- package/dist/src/formats/gexf/preview.js +191 -0
- package/dist/src/formats/gexf/preview.js.map +1 -0
- package/dist/src/formats/gexf/schema.d.ts.map +1 -1
- package/dist/src/formats/gexf/schema.js +2 -1
- package/dist/src/formats/gexf/schema.js.map +1 -1
- package/dist/src/formats/gexf/styles.d.ts +60 -16
- package/dist/src/formats/gexf/styles.d.ts.map +1 -1
- package/dist/src/formats/gexf/styles.js +883 -131
- package/dist/src/formats/gexf/styles.js.map +1 -1
- package/dist/src/formats/gml/importer.d.ts +5 -2
- package/dist/src/formats/gml/importer.d.ts.map +1 -1
- package/dist/src/formats/gml/importer.js +258 -71
- package/dist/src/formats/gml/importer.js.map +1 -1
- package/dist/src/formats/gml/index.d.ts +1 -1
- package/dist/src/formats/gml/index.d.ts.map +1 -1
- package/dist/src/formats/gml/index.js +1 -1
- package/dist/src/formats/gml/index.js.map +1 -1
- package/dist/src/formats/gml/positions.d.ts +7 -0
- package/dist/src/formats/gml/positions.d.ts.map +1 -1
- package/dist/src/formats/gml/positions.js +29 -7
- package/dist/src/formats/gml/positions.js.map +1 -1
- package/dist/src/formats/gml/styles.d.ts.map +1 -1
- package/dist/src/formats/gml/styles.js +756 -103
- package/dist/src/formats/gml/styles.js.map +1 -1
- package/dist/src/formats/graphml/styles-plain.d.ts.map +1 -1
- package/dist/src/formats/graphml/styles-plain.js +8 -12
- package/dist/src/formats/graphml/styles-plain.js.map +1 -1
- package/dist/src/formats/graphml/styles-yed.d.ts +21 -15
- package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -1
- package/dist/src/formats/graphml/styles-yed.js +749 -148
- package/dist/src/formats/graphml/styles-yed.js.map +1 -1
- package/dist/src/formats/graphml/styles-yfiles3.d.ts +1 -1
- package/dist/src/formats/graphml/styles-yfiles3.d.ts.map +1 -1
- package/dist/src/formats/graphml/styles-yfiles3.js +429 -64
- package/dist/src/formats/graphml/styles-yfiles3.js.map +1 -1
- package/dist/src/formats/graphml/yfiles.d.ts +3 -3
- package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
- package/dist/src/formats/graphml/yfiles.js +16 -6
- package/dist/src/formats/graphml/yfiles.js.map +1 -1
- package/dist/src/formats/json/dialect.d.ts +3 -2
- package/dist/src/formats/json/dialect.d.ts.map +1 -1
- package/dist/src/formats/json/dialect.js +39 -5
- package/dist/src/formats/json/dialect.js.map +1 -1
- package/dist/src/formats/json/importer.d.ts +13 -2
- package/dist/src/formats/json/importer.d.ts.map +1 -1
- package/dist/src/formats/json/importer.js +42 -6
- package/dist/src/formats/json/importer.js.map +1 -1
- package/dist/src/formats/json/index.d.ts +1 -1
- package/dist/src/formats/json/index.d.ts.map +1 -1
- package/dist/src/formats/json/index.js +1 -1
- package/dist/src/formats/json/index.js.map +1 -1
- package/dist/src/formats/json/positions.d.ts +5 -2
- package/dist/src/formats/json/positions.d.ts.map +1 -1
- package/dist/src/formats/json/positions.js +20 -4
- package/dist/src/formats/json/positions.js.map +1 -1
- package/dist/src/formats/json/styles.d.ts +12 -1
- package/dist/src/formats/json/styles.d.ts.map +1 -1
- package/dist/src/formats/json/styles.js +1755 -136
- package/dist/src/formats/json/styles.js.map +1 -1
- package/dist/src/formats/pajek/draw.d.ts +96 -0
- package/dist/src/formats/pajek/draw.d.ts.map +1 -0
- package/dist/src/formats/pajek/draw.js +372 -0
- package/dist/src/formats/pajek/draw.js.map +1 -0
- package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
- package/dist/src/formats/pajek/exporter.js +70 -51
- package/dist/src/formats/pajek/exporter.js.map +1 -1
- package/dist/src/formats/pajek/importer.d.ts +9 -0
- package/dist/src/formats/pajek/importer.d.ts.map +1 -1
- package/dist/src/formats/pajek/importer.js +233 -102
- package/dist/src/formats/pajek/importer.js.map +1 -1
- package/dist/src/formats/pajek/index.d.ts +1 -0
- package/dist/src/formats/pajek/index.d.ts.map +1 -1
- package/dist/src/formats/pajek/index.js.map +1 -1
- package/dist/src/formats/pajek/styles.d.ts +15 -7
- package/dist/src/formats/pajek/styles.d.ts.map +1 -1
- package/dist/src/formats/pajek/styles.js +1279 -114
- package/dist/src/formats/pajek/styles.js.map +1 -1
- package/dist/src/formats/pajek/syntax.d.ts +10 -1
- package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
- package/dist/src/formats/pajek/syntax.js +26 -2
- package/dist/src/formats/pajek/syntax.js.map +1 -1
- package/dist/src/formats/xgmml/emit.d.ts +1 -0
- package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
- package/dist/src/formats/xgmml/emit.js +65 -5
- package/dist/src/formats/xgmml/emit.js.map +1 -1
- package/dist/src/formats/xgmml/styles.d.ts +23 -3
- package/dist/src/formats/xgmml/styles.d.ts.map +1 -1
- package/dist/src/formats/xgmml/styles.js +278 -60
- package/dist/src/formats/xgmml/styles.js.map +1 -1
- package/dist/src/index.d.ts +10 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +11 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/positions/convert.d.ts.map +1 -1
- package/dist/src/positions/convert.js +11 -1
- package/dist/src/positions/convert.js.map +1 -1
- package/dist/src/positions/extract.d.ts.map +1 -1
- package/dist/src/positions/extract.js +53 -1
- package/dist/src/positions/extract.js.map +1 -1
- package/dist/src/positions/index.d.ts +1 -1
- package/dist/src/positions/index.d.ts.map +1 -1
- package/dist/src/positions/types.d.ts +59 -0
- package/dist/src/positions/types.d.ts.map +1 -1
- package/dist/src/registry.d.ts +173 -1
- package/dist/src/registry.d.ts.map +1 -1
- package/dist/src/registry.js +196 -1
- package/dist/src/registry.js.map +1 -1
- package/dist/src/sources/builtins.d.ts +11 -0
- package/dist/src/sources/builtins.d.ts.map +1 -0
- package/dist/src/sources/builtins.js +53 -0
- package/dist/src/sources/builtins.js.map +1 -0
- package/dist/src/sources/codes.d.ts +230 -0
- package/dist/src/sources/codes.d.ts.map +1 -0
- package/dist/src/sources/codes.js +58 -0
- package/dist/src/sources/codes.js.map +1 -0
- package/dist/src/sources/context.d.ts +112 -0
- package/dist/src/sources/context.d.ts.map +1 -0
- package/dist/src/sources/context.js +740 -0
- package/dist/src/sources/context.js.map +1 -0
- package/dist/src/sources/credentials.d.ts +179 -0
- package/dist/src/sources/credentials.d.ts.map +1 -0
- package/dist/src/sources/credentials.js +301 -0
- package/dist/src/sources/credentials.js.map +1 -0
- package/dist/src/sources/cypher/descriptor.d.ts +21 -0
- package/dist/src/sources/cypher/descriptor.d.ts.map +1 -0
- package/dist/src/sources/cypher/descriptor.js +124 -0
- package/dist/src/sources/cypher/descriptor.js.map +1 -0
- package/dist/src/sources/cypher/flatten.d.ts +72 -0
- package/dist/src/sources/cypher/flatten.d.ts.map +1 -0
- package/dist/src/sources/cypher/flatten.js +279 -0
- package/dist/src/sources/cypher/flatten.js.map +1 -0
- package/dist/src/sources/cypher/index.d.ts +33 -0
- package/dist/src/sources/cypher/index.d.ts.map +1 -0
- package/dist/src/sources/cypher/index.js +511 -0
- package/dist/src/sources/cypher/index.js.map +1 -0
- package/dist/src/sources/cypher/params.d.ts +40 -0
- package/dist/src/sources/cypher/params.d.ts.map +1 -0
- package/dist/src/sources/cypher/params.js +6 -0
- package/dist/src/sources/cypher/params.js.map +1 -0
- package/dist/src/sources/cypher/profiles.d.ts +44 -0
- package/dist/src/sources/cypher/profiles.d.ts.map +1 -0
- package/dist/src/sources/cypher/profiles.js +61 -0
- package/dist/src/sources/cypher/profiles.js.map +1 -0
- package/dist/src/sources/cypher/query-builder.d.ts +123 -0
- package/dist/src/sources/cypher/query-builder.d.ts.map +1 -0
- package/dist/src/sources/cypher/query-builder.js +267 -0
- package/dist/src/sources/cypher/query-builder.js.map +1 -0
- package/dist/src/sources/cypher/transports/bolt.d.ts +21 -0
- package/dist/src/sources/cypher/transports/bolt.d.ts.map +1 -0
- package/dist/src/sources/cypher/transports/bolt.js +185 -0
- package/dist/src/sources/cypher/transports/bolt.js.map +1 -0
- package/dist/src/sources/cypher/transports/neptune-analytics.d.ts +15 -0
- package/dist/src/sources/cypher/transports/neptune-analytics.d.ts.map +1 -0
- package/dist/src/sources/cypher/transports/neptune-analytics.js +38 -0
- package/dist/src/sources/cypher/transports/neptune-analytics.js.map +1 -0
- package/dist/src/sources/cypher/transports/neptune-https.d.ts +31 -0
- package/dist/src/sources/cypher/transports/neptune-https.d.ts.map +1 -0
- package/dist/src/sources/cypher/transports/neptune-https.js +104 -0
- package/dist/src/sources/cypher/transports/neptune-https.js.map +1 -0
- package/dist/src/sources/cypher/transports/query-api.d.ts +14 -0
- package/dist/src/sources/cypher/transports/query-api.d.ts.map +1 -0
- package/dist/src/sources/cypher/transports/query-api.js +80 -0
- package/dist/src/sources/cypher/transports/query-api.js.map +1 -0
- package/dist/src/sources/cypher/transports/transport.d.ts +78 -0
- package/dist/src/sources/cypher/transports/transport.d.ts.map +1 -0
- package/dist/src/sources/cypher/transports/transport.js +77 -0
- package/dist/src/sources/cypher/transports/transport.js.map +1 -0
- package/dist/src/sources/cypher/types-map.d.ts +91 -0
- package/dist/src/sources/cypher/types-map.d.ts.map +1 -0
- package/dist/src/sources/cypher/types-map.js +306 -0
- package/dist/src/sources/cypher/types-map.js.map +1 -0
- package/dist/src/sources/define.d.ts +47 -0
- package/dist/src/sources/define.d.ts.map +1 -0
- package/dist/src/sources/define.js +173 -0
- package/dist/src/sources/define.js.map +1 -0
- package/dist/src/sources/fail.d.ts +33 -0
- package/dist/src/sources/fail.d.ts.map +1 -0
- package/dist/src/sources/fail.js +49 -0
- package/dist/src/sources/fail.js.map +1 -0
- package/dist/src/sources/ids.d.ts +69 -0
- package/dist/src/sources/ids.d.ts.map +1 -0
- package/dist/src/sources/ids.js +69 -0
- package/dist/src/sources/ids.js.map +1 -0
- package/dist/src/sources/ndex/client.d.ts +31 -0
- package/dist/src/sources/ndex/client.d.ts.map +1 -0
- package/dist/src/sources/ndex/client.js +90 -0
- package/dist/src/sources/ndex/client.js.map +1 -0
- package/dist/src/sources/ndex/descriptor.d.ts +10 -0
- package/dist/src/sources/ndex/descriptor.d.ts.map +1 -0
- package/dist/src/sources/ndex/descriptor.js +55 -0
- package/dist/src/sources/ndex/descriptor.js.map +1 -0
- package/dist/src/sources/ndex/expand.d.ts +20 -0
- package/dist/src/sources/ndex/expand.d.ts.map +1 -0
- package/dist/src/sources/ndex/expand.js +87 -0
- package/dist/src/sources/ndex/expand.js.map +1 -0
- package/dist/src/sources/ndex/index.d.ts +25 -0
- package/dist/src/sources/ndex/index.d.ts.map +1 -0
- package/dist/src/sources/ndex/index.js +191 -0
- package/dist/src/sources/ndex/index.js.map +1 -0
- package/dist/src/sources/ndex/params.d.ts +17 -0
- package/dist/src/sources/ndex/params.d.ts.map +1 -0
- package/dist/src/sources/ndex/params.js +6 -0
- package/dist/src/sources/ndex/params.js.map +1 -0
- package/dist/src/sources/ndex/share-url.d.ts +40 -0
- package/dist/src/sources/ndex/share-url.d.ts.map +1 -0
- package/dist/src/sources/ndex/share-url.js +64 -0
- package/dist/src/sources/ndex/share-url.js.map +1 -0
- package/dist/src/sources/params.d.ts +31 -0
- package/dist/src/sources/params.d.ts.map +1 -0
- package/dist/src/sources/params.js +6 -0
- package/dist/src/sources/params.js.map +1 -0
- package/dist/src/sources/registry.d.ts +118 -0
- package/dist/src/sources/registry.d.ts.map +1 -0
- package/dist/src/sources/registry.js +193 -0
- package/dist/src/sources/registry.js.map +1 -0
- package/dist/src/sources/rest/descriptor.d.ts +16 -0
- package/dist/src/sources/rest/descriptor.d.ts.map +1 -0
- package/dist/src/sources/rest/descriptor.js +76 -0
- package/dist/src/sources/rest/descriptor.js.map +1 -0
- package/dist/src/sources/rest/index.d.ts +14 -0
- package/dist/src/sources/rest/index.d.ts.map +1 -0
- package/dist/src/sources/rest/index.js +13 -0
- package/dist/src/sources/rest/index.js.map +1 -0
- package/dist/src/sources/rest/mapping.d.ts +30 -0
- package/dist/src/sources/rest/mapping.d.ts.map +1 -0
- package/dist/src/sources/rest/mapping.js +362 -0
- package/dist/src/sources/rest/mapping.js.map +1 -0
- package/dist/src/sources/rest/openalex.d.ts +27 -0
- package/dist/src/sources/rest/openalex.d.ts.map +1 -0
- package/dist/src/sources/rest/openalex.js +269 -0
- package/dist/src/sources/rest/openalex.js.map +1 -0
- package/dist/src/sources/rest/paging.d.ts +53 -0
- package/dist/src/sources/rest/paging.d.ts.map +1 -0
- package/dist/src/sources/rest/paging.js +138 -0
- package/dist/src/sources/rest/paging.js.map +1 -0
- package/dist/src/sources/rest/params.d.ts +216 -0
- package/dist/src/sources/rest/params.d.ts.map +1 -0
- package/dist/src/sources/rest/params.js +7 -0
- package/dist/src/sources/rest/params.js.map +1 -0
- package/dist/src/sources/rest/records.d.ts +41 -0
- package/dist/src/sources/rest/records.d.ts.map +1 -0
- package/dist/src/sources/rest/records.js +240 -0
- package/dist/src/sources/rest/records.js.map +1 -0
- package/dist/src/sources/rest/samples/deps-dev.d.ts +10 -0
- package/dist/src/sources/rest/samples/deps-dev.d.ts.map +1 -0
- package/dist/src/sources/rest/samples/deps-dev.js +47 -0
- package/dist/src/sources/rest/samples/deps-dev.js.map +1 -0
- package/dist/src/sources/rest/samples/string.d.ts +9 -0
- package/dist/src/sources/rest/samples/string.d.ts.map +1 -0
- package/dist/src/sources/rest/samples/string.js +42 -0
- package/dist/src/sources/rest/samples/string.js.map +1 -0
- package/dist/src/sources/rest/selectors.d.ts +41 -0
- package/dist/src/sources/rest/selectors.d.ts.map +1 -0
- package/dist/src/sources/rest/selectors.js +81 -0
- package/dist/src/sources/rest/selectors.js.map +1 -0
- package/dist/src/sources/rest/source.d.ts +67 -0
- package/dist/src/sources/rest/source.d.ts.map +1 -0
- package/dist/src/sources/rest/source.js +650 -0
- package/dist/src/sources/rest/source.js.map +1 -0
- package/dist/src/sources/rest/templates.d.ts +38 -0
- package/dist/src/sources/rest/templates.d.ts.map +1 -0
- package/dist/src/sources/rest/templates.js +125 -0
- package/dist/src/sources/rest/templates.js.map +1 -0
- package/dist/src/sources/run.d.ts +93 -0
- package/dist/src/sources/run.d.ts.map +1 -0
- package/dist/src/sources/run.js +673 -0
- package/dist/src/sources/run.js.map +1 -0
- package/dist/src/sources/sha256.d.ts +12 -0
- package/dist/src/sources/sha256.d.ts.map +1 -0
- package/dist/src/sources/sha256.js +95 -0
- package/dist/src/sources/sha256.js.map +1 -0
- package/dist/src/sources/sigv4.d.ts +26 -0
- package/dist/src/sources/sigv4.d.ts.map +1 -0
- package/dist/src/sources/sigv4.js +184 -0
- package/dist/src/sources/sigv4.js.map +1 -0
- package/dist/src/sources/sparql/descriptor.d.ts +10 -0
- package/dist/src/sources/sparql/descriptor.d.ts.map +1 -0
- package/dist/src/sources/sparql/descriptor.js +64 -0
- package/dist/src/sources/sparql/descriptor.js.map +1 -0
- package/dist/src/sources/sparql/index.d.ts +28 -0
- package/dist/src/sources/sparql/index.d.ts.map +1 -0
- package/dist/src/sources/sparql/index.js +314 -0
- package/dist/src/sources/sparql/index.js.map +1 -0
- package/dist/src/sources/sparql/ntriples.d.ts +69 -0
- package/dist/src/sources/sparql/ntriples.d.ts.map +1 -0
- package/dist/src/sources/sparql/ntriples.js +180 -0
- package/dist/src/sources/sparql/ntriples.js.map +1 -0
- package/dist/src/sources/sparql/params.d.ts +27 -0
- package/dist/src/sources/sparql/params.d.ts.map +1 -0
- package/dist/src/sources/sparql/params.js +5 -0
- package/dist/src/sources/sparql/params.js.map +1 -0
- package/dist/src/sources/sparql/query.d.ts +72 -0
- package/dist/src/sources/sparql/query.d.ts.map +1 -0
- package/dist/src/sources/sparql/query.js +113 -0
- package/dist/src/sources/sparql/query.js.map +1 -0
- package/dist/src/sources/testing.d.ts +96 -0
- package/dist/src/sources/testing.d.ts.map +1 -0
- package/dist/src/sources/testing.js +138 -0
- package/dist/src/sources/testing.js.map +1 -0
- package/dist/src/sources/types.d.ts +696 -0
- package/dist/src/sources/types.d.ts.map +1 -0
- package/dist/src/sources/types.js +10 -0
- package/dist/src/sources/types.js.map +1 -0
- package/dist/src/styles/annotations.d.ts +61 -5
- package/dist/src/styles/annotations.d.ts.map +1 -1
- package/dist/src/styles/annotations.js +130 -22
- package/dist/src/styles/annotations.js.map +1 -1
- package/dist/src/styles/canon/bends.d.ts +46 -0
- package/dist/src/styles/canon/bends.d.ts.map +1 -1
- package/dist/src/styles/canon/bends.js +123 -0
- package/dist/src/styles/canon/bends.js.map +1 -1
- package/dist/src/styles/canon/color-tables.d.ts +6 -1
- package/dist/src/styles/canon/color-tables.d.ts.map +1 -1
- package/dist/src/styles/canon/color-tables.js +10 -4
- package/dist/src/styles/canon/color-tables.js.map +1 -1
- package/dist/src/styles/canon/color.d.ts +3 -1
- package/dist/src/styles/canon/color.d.ts.map +1 -1
- package/dist/src/styles/canon/color.js +103 -3
- package/dist/src/styles/canon/color.js.map +1 -1
- package/dist/src/styles/canon/enums.d.ts +2 -2
- package/dist/src/styles/canon/enums.d.ts.map +1 -1
- package/dist/src/styles/canon/enums.js +82 -7
- package/dist/src/styles/canon/enums.js.map +1 -1
- package/dist/src/styles/canon/graphviz.d.ts +12 -3
- package/dist/src/styles/canon/graphviz.d.ts.map +1 -1
- package/dist/src/styles/canon/graphviz.js +57 -9
- package/dist/src/styles/canon/graphviz.js.map +1 -1
- package/dist/src/styles/canon/number.d.ts +8 -0
- package/dist/src/styles/canon/number.d.ts.map +1 -1
- package/dist/src/styles/canon/number.js +18 -0
- package/dist/src/styles/canon/number.js.map +1 -1
- package/dist/src/styles/canon/text.d.ts +29 -2
- package/dist/src/styles/canon/text.d.ts.map +1 -1
- package/dist/src/styles/canon/text.js +156 -16
- package/dist/src/styles/canon/text.js.map +1 -1
- package/dist/src/styles/codes.d.ts +2 -0
- package/dist/src/styles/codes.d.ts.map +1 -1
- package/dist/src/styles/codes.js +2 -0
- package/dist/src/styles/codes.js.map +1 -1
- package/dist/src/styles/cyjs/cascade.d.ts.map +1 -1
- package/dist/src/styles/cyjs/cascade.js +1037 -35
- package/dist/src/styles/cyjs/cascade.js.map +1 -1
- package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -1
- package/dist/src/styles/cyjs/defaults-table.js +5 -0
- package/dist/src/styles/cyjs/defaults-table.js.map +1 -1
- package/dist/src/styles/cyjs/emit.d.ts.map +1 -1
- package/dist/src/styles/cyjs/emit.js +216 -12
- package/dist/src/styles/cyjs/emit.js.map +1 -1
- package/dist/src/styles/cyjs/face.d.ts +20 -0
- package/dist/src/styles/cyjs/face.d.ts.map +1 -0
- package/dist/src/styles/cyjs/face.js +332 -0
- package/dist/src/styles/cyjs/face.js.map +1 -0
- package/dist/src/styles/cyjs/mappers.d.ts +48 -2
- package/dist/src/styles/cyjs/mappers.d.ts.map +1 -1
- package/dist/src/styles/cyjs/mappers.js +463 -26
- package/dist/src/styles/cyjs/mappers.js.map +1 -1
- package/dist/src/styles/cyjs/routes.d.ts +53 -0
- package/dist/src/styles/cyjs/routes.d.ts.map +1 -0
- package/dist/src/styles/cyjs/routes.js +360 -0
- package/dist/src/styles/cyjs/routes.js.map +1 -0
- package/dist/src/styles/cytoscape/charts.d.ts +23 -0
- package/dist/src/styles/cytoscape/charts.d.ts.map +1 -0
- package/dist/src/styles/cytoscape/charts.js +560 -0
- package/dist/src/styles/cytoscape/charts.js.map +1 -0
- package/dist/src/styles/cytoscape/emit.d.ts.map +1 -1
- package/dist/src/styles/cytoscape/emit.js +204 -44
- package/dist/src/styles/cytoscape/emit.js.map +1 -1
- package/dist/src/styles/cytoscape/lexicon.d.ts +97 -3
- package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -1
- package/dist/src/styles/cytoscape/lexicon.js +413 -79
- package/dist/src/styles/cytoscape/lexicon.js.map +1 -1
- package/dist/src/styles/cytoscape/mappings.d.ts +30 -0
- package/dist/src/styles/cytoscape/mappings.d.ts.map +1 -1
- package/dist/src/styles/cytoscape/mappings.js +92 -0
- package/dist/src/styles/cytoscape/mappings.js.map +1 -1
- package/dist/src/styles/cytoscape/resolve.d.ts +46 -3
- package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -1
- package/dist/src/styles/cytoscape/resolve.js +632 -22
- package/dist/src/styles/cytoscape/resolve.js.map +1 -1
- package/dist/src/styles/cytoscape/translate.d.ts.map +1 -1
- package/dist/src/styles/cytoscape/translate.js +10 -10
- package/dist/src/styles/cytoscape/translate.js.map +1 -1
- package/dist/src/styles/defaults.d.ts +50 -0
- package/dist/src/styles/defaults.d.ts.map +1 -1
- package/dist/src/styles/defaults.js +315 -37
- package/dist/src/styles/defaults.js.map +1 -1
- package/dist/src/styles/index.d.ts +4 -3
- package/dist/src/styles/index.d.ts.map +1 -1
- package/dist/src/styles/index.js +3 -2
- package/dist/src/styles/index.js.map +1 -1
- package/dist/src/styles/internal.d.ts +1 -0
- package/dist/src/styles/internal.d.ts.map +1 -1
- package/dist/src/styles/internal.js +1 -0
- package/dist/src/styles/internal.js.map +1 -1
- package/dist/src/styles/io/block.d.ts.map +1 -1
- package/dist/src/styles/io/block.js +9 -0
- package/dist/src/styles/io/block.js.map +1 -1
- package/dist/src/styles/io/generic.d.ts.map +1 -1
- package/dist/src/styles/io/generic.js +56 -16
- package/dist/src/styles/io/generic.js.map +1 -1
- package/dist/src/styles/io/round-trip.d.ts +56 -0
- package/dist/src/styles/io/round-trip.d.ts.map +1 -0
- package/dist/src/styles/io/round-trip.js +138 -0
- package/dist/src/styles/io/round-trip.js.map +1 -0
- package/dist/src/styles/io/writer.d.ts.map +1 -1
- package/dist/src/styles/io/writer.js +13 -4
- package/dist/src/styles/io/writer.js.map +1 -1
- package/dist/src/styles/notes.d.ts.map +1 -1
- package/dist/src/styles/notes.js +1 -0
- package/dist/src/styles/notes.js.map +1 -1
- package/dist/src/styles/plan/features.d.ts +1 -1
- package/dist/src/styles/plan/features.d.ts.map +1 -1
- package/dist/src/styles/plan/features.js +22 -2
- package/dist/src/styles/plan/features.js.map +1 -1
- package/dist/src/styles/plan/index.d.ts +1 -1
- package/dist/src/styles/plan/index.d.ts.map +1 -1
- package/dist/src/styles/plan/index.js +1 -1
- package/dist/src/styles/plan/index.js.map +1 -1
- package/dist/src/styles/plan/plan.d.ts.map +1 -1
- package/dist/src/styles/plan/plan.js +61 -4
- package/dist/src/styles/plan/plan.js.map +1 -1
- package/dist/src/styles/plan/resolve.d.ts +13 -1
- package/dist/src/styles/plan/resolve.d.ts.map +1 -1
- package/dist/src/styles/plan/resolve.js +53 -6
- package/dist/src/styles/plan/resolve.js.map +1 -1
- package/dist/src/styles/slots.d.ts +14 -0
- package/dist/src/styles/slots.d.ts.map +1 -0
- package/dist/src/styles/slots.js +20 -0
- package/dist/src/styles/slots.js.map +1 -0
- package/dist/src/styles/types.d.ts +638 -5
- package/dist/src/styles/types.d.ts.map +1 -1
- package/dist/src/styles/vocabulary.d.ts +3 -2
- package/dist/src/styles/vocabulary.d.ts.map +1 -1
- package/dist/src/styles/vocabulary.js +218 -1
- package/dist/src/styles/vocabulary.js.map +1 -1
- package/dist/src/types.d.ts +19 -5
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/styles.js +29 -238
- package/dist/styles.js.map +1 -1
- package/dist/xgmml.js +3 -3
- package/docs/samples/people.json +6 -0
- package/package.json +53 -8
- package/src/common/report.ts +27 -7
- package/src/formats/cx/importer.ts +6 -1
- package/src/formats/cx/styles.ts +144 -9
- package/src/formats/cx2/importer.ts +1 -0
- package/src/formats/cx2/styles.ts +3 -1
- package/src/formats/cys/importer.ts +1 -0
- package/src/formats/cys/styles.ts +27 -5
- package/src/formats/dot/drawing.ts +799 -0
- package/src/formats/dot/importer.ts +120 -35
- package/src/formats/dot/label-places.ts +228 -0
- package/src/formats/dot/record.ts +336 -0
- package/src/formats/dot/styles.ts +1657 -154
- package/src/formats/gexf/dialog-metrics.ts +61 -0
- package/src/formats/gexf/importer.ts +50 -5
- package/src/formats/gexf/preview.ts +217 -0
- package/src/formats/gexf/schema.ts +2 -1
- package/src/formats/gexf/styles.ts +1144 -142
- package/src/formats/gml/importer.ts +291 -76
- package/src/formats/gml/index.ts +1 -1
- package/src/formats/gml/positions.ts +29 -7
- package/src/formats/gml/styles.ts +854 -111
- package/src/formats/graphml/styles-plain.ts +8 -23
- package/src/formats/graphml/styles-yed.ts +821 -159
- package/src/formats/graphml/styles-yfiles3.ts +485 -63
- package/src/formats/graphml/yfiles.ts +19 -6
- package/src/formats/json/dialect.ts +41 -5
- package/src/formats/json/importer.ts +59 -7
- package/src/formats/json/index.ts +1 -0
- package/src/formats/json/positions.ts +22 -5
- package/src/formats/json/styles.ts +2041 -185
- package/src/formats/pajek/draw.ts +458 -0
- package/src/formats/pajek/exporter.ts +81 -49
- package/src/formats/pajek/importer.ts +278 -103
- package/src/formats/pajek/index.ts +1 -0
- package/src/formats/pajek/styles.ts +1382 -133
- package/src/formats/pajek/syntax.ts +27 -2
- package/src/formats/xgmml/emit.ts +73 -5
- package/src/formats/xgmml/styles.ts +331 -71
- package/src/index.ts +94 -0
- package/src/positions/convert.ts +12 -1
- package/src/positions/extract.ts +55 -1
- package/src/positions/index.ts +1 -0
- package/src/positions/types.ts +60 -0
- package/src/registry.ts +326 -1
- package/src/sources/builtins.ts +63 -0
- package/src/sources/codes.ts +235 -0
- package/src/sources/context.ts +894 -0
- package/src/sources/credentials.ts +409 -0
- package/src/sources/cypher/descriptor.ts +131 -0
- package/src/sources/cypher/flatten.ts +323 -0
- package/src/sources/cypher/index.ts +628 -0
- package/src/sources/cypher/params.ts +41 -0
- package/src/sources/cypher/profiles.ts +78 -0
- package/src/sources/cypher/query-builder.ts +327 -0
- package/src/sources/cypher/transports/bolt.ts +228 -0
- package/src/sources/cypher/transports/neptune-analytics.ts +41 -0
- package/src/sources/cypher/transports/neptune-https.ts +122 -0
- package/src/sources/cypher/transports/query-api.ts +100 -0
- package/src/sources/cypher/transports/transport.ts +139 -0
- package/src/sources/cypher/types-map.ts +418 -0
- package/src/sources/define.ts +195 -0
- package/src/sources/fail.ts +70 -0
- package/src/sources/ids.ts +80 -0
- package/src/sources/ndex/client.ts +102 -0
- package/src/sources/ndex/descriptor.ts +64 -0
- package/src/sources/ndex/expand.ts +100 -0
- package/src/sources/ndex/index.ts +235 -0
- package/src/sources/ndex/params.ts +17 -0
- package/src/sources/ndex/share-url.ts +84 -0
- package/src/sources/params.ts +32 -0
- package/src/sources/registry.ts +325 -0
- package/src/sources/rest/descriptor.ts +79 -0
- package/src/sources/rest/index.ts +22 -0
- package/src/sources/rest/mapping.ts +401 -0
- package/src/sources/rest/openalex.ts +288 -0
- package/src/sources/rest/paging.ts +180 -0
- package/src/sources/rest/params.ts +243 -0
- package/src/sources/rest/records.ts +289 -0
- package/src/sources/rest/samples/deps-dev.ts +49 -0
- package/src/sources/rest/samples/string.ts +44 -0
- package/src/sources/rest/selectors.ts +91 -0
- package/src/sources/rest/source.ts +776 -0
- package/src/sources/rest/templates.ts +151 -0
- package/src/sources/run.ts +793 -0
- package/src/sources/sha256.ts +99 -0
- package/src/sources/sigv4.ts +209 -0
- package/src/sources/sparql/descriptor.ts +67 -0
- package/src/sources/sparql/index.ts +356 -0
- package/src/sources/sparql/ntriples.ts +219 -0
- package/src/sources/sparql/params.ts +28 -0
- package/src/sources/sparql/query.ts +162 -0
- package/src/sources/testing.ts +210 -0
- package/src/sources/types.ts +776 -0
- package/src/styles/annotations.ts +201 -27
- package/src/styles/canon/bends.ts +137 -0
- package/src/styles/canon/color-tables.ts +10 -4
- package/src/styles/canon/color.ts +105 -3
- package/src/styles/canon/enums.ts +99 -8
- package/src/styles/canon/graphviz.ts +71 -10
- package/src/styles/canon/number.ts +19 -0
- package/src/styles/canon/text.ts +187 -16
- package/src/styles/codes.ts +2 -0
- package/src/styles/cyjs/cascade.ts +1193 -38
- package/src/styles/cyjs/defaults-table.ts +5 -0
- package/src/styles/cyjs/emit.ts +247 -16
- package/src/styles/cyjs/face.ts +372 -0
- package/src/styles/cyjs/mappers.ts +498 -28
- package/src/styles/cyjs/routes.ts +432 -0
- package/src/styles/cytoscape/charts.ts +684 -0
- package/src/styles/cytoscape/emit.ts +220 -44
- package/src/styles/cytoscape/lexicon.ts +459 -80
- package/src/styles/cytoscape/mappings.ts +108 -0
- package/src/styles/cytoscape/resolve.ts +763 -23
- package/src/styles/cytoscape/translate.ts +11 -11
- package/src/styles/defaults.ts +436 -38
- package/src/styles/index.ts +5 -0
- package/src/styles/internal.ts +1 -0
- package/src/styles/io/block.ts +10 -0
- package/src/styles/io/generic.ts +79 -23
- package/src/styles/io/round-trip.ts +202 -0
- package/src/styles/io/writer.ts +14 -4
- package/src/styles/notes.ts +1 -0
- package/src/styles/plan/features.ts +23 -2
- package/src/styles/plan/index.ts +1 -1
- package/src/styles/plan/plan.ts +69 -5
- package/src/styles/plan/resolve.ts +61 -6
- package/src/styles/slots.ts +25 -0
- package/src/styles/types.ts +658 -4
- package/src/styles/vocabulary.ts +226 -3
- package/src/types.ts +19 -5
- package/dist/chunks/block-DiGq58c3.js.map +0 -1
- package/dist/chunks/choose--jM0yYCo.js +0 -57
- package/dist/chunks/choose--jM0yYCo.js.map +0 -1
- package/dist/chunks/convert-BcQ8_jMo.js.map +0 -1
- package/dist/chunks/emit-CwU8cUmG.js.map +0 -1
- package/dist/chunks/export-BvqAXCKh.js.map +0 -1
- package/dist/chunks/exporter-CrDWIyiq.js.map +0 -1
- package/dist/chunks/format-BpQBx8MZ.js.map +0 -1
- package/dist/chunks/generic-Dq1ntt9q.js.map +0 -1
- package/dist/chunks/importer-BSvfrX_h.js.map +0 -1
- package/dist/chunks/importer-CMmeMWlC.js.map +0 -1
- package/dist/chunks/importer-COTK9Tsl.js.map +0 -1
- package/dist/chunks/importer-DiZRmOQG.js.map +0 -1
- package/dist/chunks/importer-e6LGpqHB.js.map +0 -1
- package/dist/chunks/importer-iFYPEKaJ.js.map +0 -1
- package/dist/chunks/importer-yh_aBCU6.js.map +0 -1
- package/dist/chunks/lexicon-CT69Kd87.js.map +0 -1
- package/dist/chunks/styles-BQnsga7p.js.map +0 -1
- package/dist/chunks/styles-D3fRphrO.js +0 -690
- package/dist/chunks/styles-D3fRphrO.js.map +0 -1
- package/dist/chunks/styles-yed-BF5x3_Y5.js +0 -842
- package/dist/chunks/styles-yed-BF5x3_Y5.js.map +0 -1
- package/dist/chunks/writer-DMKvthQE.js +0 -448
- package/dist/chunks/writer-DMKvthQE.js.map +0 -1
|
@@ -0,0 +1,1397 @@
|
|
|
1
|
+
import { GraphFormatError } from "@graphty/graph-format";
|
|
2
|
+
import { O as OPTION_IGNORED_CODE, a6 as CONTROL_CHARACTER_CODE, E as EMPTY_INPUT_CODE, u as INVALID_ENCODING_CODE, s as UNKNOWN_ENCODING_CODE, r as ENCODING_CONFLICT_CODE, v as INVALID_UTF8_CODE, t as ENCODING_FALLBACK_CODE, a7 as FOREIGN_FORMAT_CODE, V as TOO_LARGE_CODE } from "./report-CwMfYa9J.js";
|
|
3
|
+
const HEAD_BYTES = 1024;
|
|
4
|
+
const BOM_BYTES = 4;
|
|
5
|
+
function canonicalEncoding(label) {
|
|
6
|
+
try {
|
|
7
|
+
return new TextDecoder(label.trim()).encoding;
|
|
8
|
+
} catch {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function bomEncoding(head) {
|
|
13
|
+
if (startsWithBytes(head, [255, 254, 0, 0])) {
|
|
14
|
+
return "utf-32le";
|
|
15
|
+
}
|
|
16
|
+
if (startsWithBytes(head, [0, 0, 254, 255])) {
|
|
17
|
+
return "utf-32be";
|
|
18
|
+
}
|
|
19
|
+
if (startsWithBytes(head, [239, 187, 191])) {
|
|
20
|
+
return "utf-8";
|
|
21
|
+
}
|
|
22
|
+
if (startsWithBytes(head, [255, 254])) {
|
|
23
|
+
return "utf-16le";
|
|
24
|
+
}
|
|
25
|
+
if (startsWithBytes(head, [254, 255])) {
|
|
26
|
+
return "utf-16be";
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
function startsWithBytes(bytes, signature) {
|
|
31
|
+
return bytes.byteLength >= signature.length && signature.every((b, i) => bytes[i] === b);
|
|
32
|
+
}
|
|
33
|
+
function bomlessUtf16(head) {
|
|
34
|
+
const pairs = Math.min(head.byteLength >> 1, 512);
|
|
35
|
+
if (pairs < 2) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
let le = 0;
|
|
39
|
+
let be = 0;
|
|
40
|
+
for (let i = 0; i < pairs; i++) {
|
|
41
|
+
const even = head[2 * i];
|
|
42
|
+
const odd = head[2 * i + 1];
|
|
43
|
+
if (even !== 0 && odd === 0) {
|
|
44
|
+
le++;
|
|
45
|
+
} else if (even === 0 && odd !== 0) {
|
|
46
|
+
be++;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (le >= pairs * 0.9) {
|
|
50
|
+
return "utf-16le";
|
|
51
|
+
}
|
|
52
|
+
return be >= pairs * 0.9 ? "utf-16be" : null;
|
|
53
|
+
}
|
|
54
|
+
function xmlDeclarationUtf16(head) {
|
|
55
|
+
if (startsWithBytes(head, [60, 0, 63, 0])) {
|
|
56
|
+
return "utf-16le";
|
|
57
|
+
}
|
|
58
|
+
return startsWithBytes(head, [0, 60, 0, 63]) ? "utf-16be" : null;
|
|
59
|
+
}
|
|
60
|
+
function foreignKind(head) {
|
|
61
|
+
if (typeof head !== "string") {
|
|
62
|
+
if (startsWithBytes(head, [31, 139])) {
|
|
63
|
+
return "gzip-compressed data (decompress it first)";
|
|
64
|
+
}
|
|
65
|
+
if (startsWithBytes(head, [80, 75, 3, 4]) || startsWithBytes(head, [80, 75, 5, 6])) {
|
|
66
|
+
return "a zip archive (a Cytoscape session (.cys) is read by the cys importer; extract any other graph file from it first)";
|
|
67
|
+
}
|
|
68
|
+
if (startsWithBytes(head, [137, 80, 78, 71])) {
|
|
69
|
+
return "a PNG image";
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const text = typeof head === "string" ? head.slice(0, 64) : String.fromCodePoint(...head.subarray(0, 64));
|
|
73
|
+
const utf8Bom = String.fromCodePoint(239, 187, 191);
|
|
74
|
+
let body = text.startsWith(utf8Bom) ? text.slice(3) : text;
|
|
75
|
+
body = body.startsWith(BOM) ? body.slice(1) : body;
|
|
76
|
+
if (body.startsWith("%PDF-")) {
|
|
77
|
+
return "a PDF document";
|
|
78
|
+
}
|
|
79
|
+
if (/^\s*(<!doctype\s+html[\s>]|<html[\s>])/i.test(body)) {
|
|
80
|
+
return "an HTML document (likely an error page saved in place of the file)";
|
|
81
|
+
}
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
function refuseForeign(head, report, options) {
|
|
85
|
+
const foreign = foreignKind(head);
|
|
86
|
+
if (foreign !== null && !(options.xml === true && foreign.startsWith("an HTML"))) {
|
|
87
|
+
report.fail(FOREIGN_FORMAT_CODE, `the input is ${foreign}, not ${report.format} text`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function sameFamily(a, b) {
|
|
91
|
+
return a === b || a.startsWith("utf-16") && b.startsWith("utf-16");
|
|
92
|
+
}
|
|
93
|
+
class ByteDecoder {
|
|
94
|
+
/**
|
|
95
|
+
* Create the decoder of one import.
|
|
96
|
+
* @param report - where warnings and the fatal decode error go
|
|
97
|
+
* @param options - the encoding option and the format's declaration reader
|
|
98
|
+
*/
|
|
99
|
+
constructor(report, options) {
|
|
100
|
+
this.report = report;
|
|
101
|
+
this.options = options;
|
|
102
|
+
this.decoder = null;
|
|
103
|
+
this.encoding = "utf-8";
|
|
104
|
+
this.mayFallBack = false;
|
|
105
|
+
this.asciiSoFar = true;
|
|
106
|
+
this.carry = new Uint8Array(0);
|
|
107
|
+
this.offset = 0;
|
|
108
|
+
this.fellBack = false;
|
|
109
|
+
this.control = null;
|
|
110
|
+
this.subAt = -1;
|
|
111
|
+
this.textFollows = false;
|
|
112
|
+
this.declaredUtf8 = false;
|
|
113
|
+
this.mixedPending = false;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Whether start() ran.
|
|
117
|
+
* @returns true once the encoding is chosen
|
|
118
|
+
*/
|
|
119
|
+
get started() {
|
|
120
|
+
return this.decoder !== null;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Choose the encoding from the first bytes of the input: a BOM, else the option, else the
|
|
124
|
+
* declaration, else UTF-8 (see the module comment), warning where two of them disagree.
|
|
125
|
+
* @param head - the first bytes (up to the declaration size; fewer when the input is shorter)
|
|
126
|
+
*/
|
|
127
|
+
start(head) {
|
|
128
|
+
refuseForeign(head, this.report, this.options);
|
|
129
|
+
const explicit = this.options.encoding ?? null;
|
|
130
|
+
const bom = bomEncoding(head);
|
|
131
|
+
if (bom === "utf-32le" || bom === "utf-32be") {
|
|
132
|
+
this.report.fail(
|
|
133
|
+
INVALID_ENCODING_CODE,
|
|
134
|
+
`the input starts with a ${bom.toUpperCase()} byte order mark; UTF-32 is not supported (convert the file to UTF-8)`,
|
|
135
|
+
void 0,
|
|
136
|
+
{ byteOffset: 0 }
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
if (bom !== null) {
|
|
140
|
+
const option = explicit === null ? null : canonicalEncoding(explicit);
|
|
141
|
+
if (option !== null && option !== bom) {
|
|
142
|
+
this.conflict(`the encoding option says ${option} but the byte order mark says ${bom}; read as ${bom}`);
|
|
143
|
+
}
|
|
144
|
+
this.checkDeclaration(head, bom, "its byte order mark says");
|
|
145
|
+
this.use(bom, false);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (explicit !== null) {
|
|
149
|
+
this.use(explicit, false);
|
|
150
|
+
this.checkDeclaration(head, this.encoding, "the encoding option says");
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const xmlUtf16 = xmlDeclarationUtf16(head);
|
|
154
|
+
if (xmlUtf16 !== null) {
|
|
155
|
+
this.checkDeclaration(head, xmlUtf16, "its XML declaration's byte pattern says");
|
|
156
|
+
this.use(xmlUtf16, false);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const utf16 = bomlessUtf16(head);
|
|
160
|
+
if (utf16 !== null && this.options.bomlessUtf16 === true) {
|
|
161
|
+
this.use(utf16, false);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
if (utf16 !== null) {
|
|
165
|
+
this.report.fail(
|
|
166
|
+
INVALID_ENCODING_CODE,
|
|
167
|
+
`the input looks like ${utf16} text without a byte order mark (every other byte is 0); pass the encoding option ${JSON.stringify(utf16)} to read it`,
|
|
168
|
+
void 0,
|
|
169
|
+
{ byteOffset: 0 }
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
const declared = this.declared(head, "windows-1252");
|
|
173
|
+
if (declared !== null) {
|
|
174
|
+
const canonical = canonicalEncoding(declared);
|
|
175
|
+
if (canonical === null) {
|
|
176
|
+
this.report.warning(
|
|
177
|
+
"unsupported",
|
|
178
|
+
UNKNOWN_ENCODING_CODE,
|
|
179
|
+
`the input declares the encoding ${JSON.stringify(declared)}, which this platform cannot decode; reading it as UTF-8`,
|
|
180
|
+
{ element: declared }
|
|
181
|
+
);
|
|
182
|
+
} else if (canonical.startsWith("utf-16")) {
|
|
183
|
+
this.conflict(
|
|
184
|
+
`the input declares ${JSON.stringify(declared)} but has no byte order mark and its bytes are not UTF-16; read as UTF-8`
|
|
185
|
+
);
|
|
186
|
+
} else if (canonical === "utf-8") {
|
|
187
|
+
this.declaredUtf8 = true;
|
|
188
|
+
} else {
|
|
189
|
+
this.use(canonical, false);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
this.use("utf-8", true);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* The encoding the head declares, read through the format's declaration reader.
|
|
197
|
+
* @param head - the first bytes
|
|
198
|
+
* @param encoding - the encoding to read the head in for the reader
|
|
199
|
+
* @returns the declared label, or null (also for a format without declarations)
|
|
200
|
+
*/
|
|
201
|
+
declared(head, encoding) {
|
|
202
|
+
const reader = this.options.declaredEncoding;
|
|
203
|
+
return reader === void 0 ? null : reader(new TextDecoder(encoding).decode(head));
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Warn when the file declares an encoding other than the one a BOM or the option chose.
|
|
207
|
+
* @param head - the first bytes
|
|
208
|
+
* @param chosen - the encoding the input is read in
|
|
209
|
+
* @param why - what chose it, for the message
|
|
210
|
+
*/
|
|
211
|
+
checkDeclaration(head, chosen, why) {
|
|
212
|
+
const declared = this.declared(head, chosen);
|
|
213
|
+
const canonical = declared === null ? null : canonicalEncoding(declared);
|
|
214
|
+
if (canonical !== null && !sameFamily(canonical, chosen)) {
|
|
215
|
+
this.conflict(
|
|
216
|
+
`the input declares the encoding ${JSON.stringify(declared)} but ${why} ${chosen}; read as ${chosen}`
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Record a W_ENCODING_CONFLICT warning.
|
|
222
|
+
* @param message - which sources disagree and which applies
|
|
223
|
+
*/
|
|
224
|
+
conflict(message) {
|
|
225
|
+
this.report.warning("coercion", ENCODING_CONFLICT_CODE, message);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Decode the next bytes.
|
|
229
|
+
* @param input - the bytes
|
|
230
|
+
* @param stream - whether more bytes follow
|
|
231
|
+
* @returns the text
|
|
232
|
+
*/
|
|
233
|
+
decode(input, stream) {
|
|
234
|
+
const bytes = typeof SharedArrayBuffer === "function" && input.buffer instanceof SharedArrayBuffer ? input.slice() : input;
|
|
235
|
+
const decoder = this.decoder;
|
|
236
|
+
if (this.fellBack || this.mayFallBack && this.asciiSoFar) {
|
|
237
|
+
this.watch(bytes, !stream);
|
|
238
|
+
if (this.fellBack && this.control !== null) {
|
|
239
|
+
this.binary(this.control);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
const text = this.decodeOrRecover(decoder, bytes, stream);
|
|
243
|
+
if (this.mixedPending) {
|
|
244
|
+
this.reportUtf8After(bytes, this.offset);
|
|
245
|
+
}
|
|
246
|
+
if (this.asciiSoFar && this.mayFallBack) {
|
|
247
|
+
this.trackAscii(bytes, text);
|
|
248
|
+
}
|
|
249
|
+
if (this.mayFallBack && this.options.nulIsBinary === true && text.includes("\0")) {
|
|
250
|
+
this.binary({ at: this.offset + bytes.indexOf(0), byte: 0 });
|
|
251
|
+
}
|
|
252
|
+
this.offset += bytes.byteLength;
|
|
253
|
+
return text;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Decode bytes, recovering from bytes that are not valid in the encoding.
|
|
257
|
+
* @param decoder - the decoder
|
|
258
|
+
* @param bytes - the bytes
|
|
259
|
+
* @param stream - whether more bytes follow
|
|
260
|
+
* @returns the text
|
|
261
|
+
*/
|
|
262
|
+
decodeOrRecover(decoder, bytes, stream) {
|
|
263
|
+
try {
|
|
264
|
+
return decoder.decode(bytes, { stream });
|
|
265
|
+
} catch (err) {
|
|
266
|
+
if (!(err instanceof TypeError)) {
|
|
267
|
+
throw err;
|
|
268
|
+
}
|
|
269
|
+
return this.recover(bytes, stream);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Track whether the input is ASCII so far. While it is, every character is one byte, so the
|
|
274
|
+
* bytes not yet emitted are held back for a fallback.
|
|
275
|
+
* @param bytes - the bytes just decoded
|
|
276
|
+
* @param text - their text
|
|
277
|
+
*/
|
|
278
|
+
trackAscii(bytes, text) {
|
|
279
|
+
if (/[\u0080-\uffff]/.test(text)) {
|
|
280
|
+
this.asciiSoFar = false;
|
|
281
|
+
this.carry = new Uint8Array(0);
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
const all = this.carry.byteLength === 0 ? bytes : concatBytes([this.carry, bytes]);
|
|
285
|
+
this.carry = all.slice(text.length);
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Flush the bytes held back because a text chunk follows (the input switches from bytes to
|
|
289
|
+
* strings): a multi-byte sequence cut there is invalid UTF-8, never windows-1252 text.
|
|
290
|
+
* @param flush - the flush to run (the decoder's own, or the head's)
|
|
291
|
+
* @returns the text of the held-back bytes
|
|
292
|
+
*/
|
|
293
|
+
flushBeforeText(flush) {
|
|
294
|
+
this.textFollows = true;
|
|
295
|
+
try {
|
|
296
|
+
return flush();
|
|
297
|
+
} finally {
|
|
298
|
+
this.textFollows = false;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* A decode failed: switch to windows-1252 when allowed, else fail the import with the position
|
|
303
|
+
* of the first byte that is not valid.
|
|
304
|
+
* @param bytes - the bytes that failed
|
|
305
|
+
* @param stream - whether more bytes follow
|
|
306
|
+
* @returns the bytes decoded as windows-1252
|
|
307
|
+
*/
|
|
308
|
+
recover(bytes, stream) {
|
|
309
|
+
const all = this.carry.byteLength === 0 ? bytes : concatBytes([this.carry, bytes]);
|
|
310
|
+
const base = this.offset - this.carry.byteLength;
|
|
311
|
+
const bad = this.encoding === "utf-8" ? invalidUtf8(all) : null;
|
|
312
|
+
const at = base + (bad === null ? 0 : bad.index);
|
|
313
|
+
if (this.mayFallBack && this.asciiSoFar) {
|
|
314
|
+
const text = this.fallBack(all, bad, at, base, stream);
|
|
315
|
+
if (text !== null) {
|
|
316
|
+
return text;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return this.failDecode(bytes, at, base, stream);
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Undeclared input that was ASCII so far failed to decode: fail on binary data or a cut
|
|
323
|
+
* sequence, else switch to windows-1252 with a warning unless the bytes start with valid
|
|
324
|
+
* non-ASCII UTF-8.
|
|
325
|
+
* @param all - the held-back bytes followed by the bytes that failed
|
|
326
|
+
* @param bad - the first invalid UTF-8 sequence, or null when the encoding is not UTF-8
|
|
327
|
+
* @param at - the byte offset of the first invalid byte
|
|
328
|
+
* @param base - the byte offset of `all`
|
|
329
|
+
* @param stream - whether more bytes follow
|
|
330
|
+
* @returns the bytes decoded as windows-1252, or null when they do not fall back
|
|
331
|
+
*/
|
|
332
|
+
fallBack(all, bad, at, base, stream) {
|
|
333
|
+
if (this.control !== null) {
|
|
334
|
+
return this.binary(this.control);
|
|
335
|
+
}
|
|
336
|
+
if (this.textFollows && bad?.cut === true) {
|
|
337
|
+
return this.report.fail(
|
|
338
|
+
INVALID_UTF8_CODE,
|
|
339
|
+
`invalid UTF-8 at byte ${at}: a byte chunk ends inside a multi-byte sequence and a text chunk follows`,
|
|
340
|
+
void 0,
|
|
341
|
+
{ byteOffset: at }
|
|
342
|
+
);
|
|
343
|
+
}
|
|
344
|
+
if (!stream && bad?.truncated === true) {
|
|
345
|
+
return this.report.fail(
|
|
346
|
+
INVALID_UTF8_CODE,
|
|
347
|
+
`the input ends in the middle of a UTF-8 sequence at byte ${at} (it may be truncated)`,
|
|
348
|
+
void 0,
|
|
349
|
+
{ byteOffset: at }
|
|
350
|
+
);
|
|
351
|
+
}
|
|
352
|
+
if (startsWithUtf8(all)) {
|
|
353
|
+
return null;
|
|
354
|
+
}
|
|
355
|
+
const cutNote = !stream && bad?.cut === true ? ": it ends inside a multi-byte UTF-8 sequence, so it may be truncated" : "";
|
|
356
|
+
this.report.warning(
|
|
357
|
+
"coercion",
|
|
358
|
+
ENCODING_FALLBACK_CODE,
|
|
359
|
+
this.declaredUtf8 ? `the input declares UTF-8 but is not valid UTF-8 (at byte ${at}); everything before was ASCII, so it is read as windows-1252 (pass the encoding option to choose another)` : `the input is not valid UTF-8 (at byte ${at}${cutNote}) and declares no encoding; read as windows-1252 (pass the encoding option to choose another)`
|
|
360
|
+
);
|
|
361
|
+
this.use("windows-1252", false);
|
|
362
|
+
this.fellBack = true;
|
|
363
|
+
this.mixedPending = true;
|
|
364
|
+
this.reportUtf8After(all, base);
|
|
365
|
+
return this.decoder.decode(all, { stream });
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Fail the import on bytes that are not valid in the encoding.
|
|
369
|
+
* @param bytes - the bytes that failed
|
|
370
|
+
* @param at - the byte offset of the first invalid UTF-8 byte
|
|
371
|
+
* @param base - the byte offset of the held-back bytes and these
|
|
372
|
+
* @param stream - whether more bytes follow
|
|
373
|
+
* @returns never: it throws
|
|
374
|
+
*/
|
|
375
|
+
failDecode(bytes, at, base, stream) {
|
|
376
|
+
if (this.encoding === "utf-8") {
|
|
377
|
+
const after = this.mayFallBack ? " after valid non-ASCII UTF-8 text; pass the encoding option" : "";
|
|
378
|
+
return this.report.fail(INVALID_UTF8_CODE, `invalid UTF-8 at byte ${at}${after}`, void 0, {
|
|
379
|
+
byteOffset: at
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
const end = this.offset + bytes.byteLength;
|
|
383
|
+
const odd = !stream && this.encoding.startsWith("utf-16") && end % 2 === 1;
|
|
384
|
+
return this.report.fail(
|
|
385
|
+
INVALID_ENCODING_CODE,
|
|
386
|
+
odd ? `the input ends with half a ${this.encoding} code unit at byte ${end - 1} (it may be truncated)` : `the bytes near byte ${base} are not valid ${this.encoding}`,
|
|
387
|
+
void 0,
|
|
388
|
+
{ byteOffset: odd ? end - 1 : base }
|
|
389
|
+
);
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* After the windows-1252 fallback, report once that later bytes hold a valid multi-byte UTF-8
|
|
393
|
+
* sequence: the input mixes encodings, and those characters are read as two or three
|
|
394
|
+
* windows-1252 characters each.
|
|
395
|
+
* @param bytes - bytes being decoded as windows-1252
|
|
396
|
+
* @param start - the byte offset of the first of them
|
|
397
|
+
*/
|
|
398
|
+
reportUtf8After(bytes, start) {
|
|
399
|
+
const at = utf8SequenceIndex(bytes);
|
|
400
|
+
if (at < 0) {
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
this.mixedPending = false;
|
|
404
|
+
this.report.warning(
|
|
405
|
+
"coercion",
|
|
406
|
+
ENCODING_FALLBACK_CODE,
|
|
407
|
+
`bytes read as windows-1252 hold valid UTF-8 (at byte ${start + at}): the input mixes encodings, and its UTF-8 characters are read as windows-1252 (pass the encoding option to choose one)`
|
|
408
|
+
);
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Note the first control byte of the next bytes (see `control`).
|
|
412
|
+
* @param bytes - the bytes, starting at `offset`
|
|
413
|
+
* @param final - whether they end the input
|
|
414
|
+
*/
|
|
415
|
+
watch(bytes, final) {
|
|
416
|
+
if (this.control !== null || bytes.byteLength === 0) {
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
if (this.subAt >= 0) {
|
|
420
|
+
this.control = { at: this.subAt, byte: 26 };
|
|
421
|
+
return;
|
|
422
|
+
}
|
|
423
|
+
const index = controlByte(bytes, true);
|
|
424
|
+
if (index >= 0) {
|
|
425
|
+
this.control = { at: this.offset + index, byte: bytes[index] };
|
|
426
|
+
} else if (!final && bytes[bytes.byteLength - 1] === 26) {
|
|
427
|
+
this.subAt = this.offset + bytes.byteLength - 1;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Fail the import as binary data.
|
|
432
|
+
* @param control - the control byte that shows it
|
|
433
|
+
* @param control.at - its offset
|
|
434
|
+
* @param control.byte - its value
|
|
435
|
+
* @returns never
|
|
436
|
+
*/
|
|
437
|
+
binary(control) {
|
|
438
|
+
const hex = control.byte.toString(16).padStart(2, "0");
|
|
439
|
+
return this.report.fail(
|
|
440
|
+
INVALID_UTF8_CODE,
|
|
441
|
+
`the input is binary data, not text: control byte 0x${hex} at byte ${control.at}`,
|
|
442
|
+
void 0,
|
|
443
|
+
{ byteOffset: control.at }
|
|
444
|
+
);
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* Switch to an encoding.
|
|
448
|
+
* @param label - the encoding label
|
|
449
|
+
* @param mayFallBack - whether a UTF-8 failure may switch to windows-1252
|
|
450
|
+
*/
|
|
451
|
+
use(label, mayFallBack) {
|
|
452
|
+
this.decoder = new TextDecoder(label, { fatal: true, ignoreBOM: true });
|
|
453
|
+
this.encoding = this.decoder.encoding;
|
|
454
|
+
this.mayFallBack = mayFallBack;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
function utf8SequenceIndex(bytes) {
|
|
458
|
+
for (let i = 0; i < bytes.byteLength; i++) {
|
|
459
|
+
if (bytes[i] >= 194 && isUtf8SequenceAt(bytes, i)) {
|
|
460
|
+
return i;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
return -1;
|
|
464
|
+
}
|
|
465
|
+
function startsWithUtf8(bytes) {
|
|
466
|
+
const i = bytes.findIndex((b) => b >= 128);
|
|
467
|
+
return i >= 0 && isUtf8SequenceAt(bytes, i);
|
|
468
|
+
}
|
|
469
|
+
const STRICT_UTF8 = new TextDecoder("utf-8", { fatal: true });
|
|
470
|
+
function isUtf8SequenceAt(bytes, i) {
|
|
471
|
+
const lead = bytes[i];
|
|
472
|
+
let length = 0;
|
|
473
|
+
if (lead >= 194 && lead <= 223) {
|
|
474
|
+
length = 2;
|
|
475
|
+
} else if (lead >= 224 && lead <= 239) {
|
|
476
|
+
length = 3;
|
|
477
|
+
} else if (lead >= 240 && lead <= 244) {
|
|
478
|
+
length = 4;
|
|
479
|
+
}
|
|
480
|
+
if (length === 0 || i + length > bytes.byteLength) {
|
|
481
|
+
return false;
|
|
482
|
+
}
|
|
483
|
+
try {
|
|
484
|
+
STRICT_UTF8.decode(bytes.subarray(i, i + length));
|
|
485
|
+
return true;
|
|
486
|
+
} catch {
|
|
487
|
+
return false;
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
const CP437_HIGH = [
|
|
491
|
+
199,
|
|
492
|
+
252,
|
|
493
|
+
233,
|
|
494
|
+
226,
|
|
495
|
+
228,
|
|
496
|
+
224,
|
|
497
|
+
229,
|
|
498
|
+
231,
|
|
499
|
+
234,
|
|
500
|
+
235,
|
|
501
|
+
232,
|
|
502
|
+
239,
|
|
503
|
+
238,
|
|
504
|
+
236,
|
|
505
|
+
196,
|
|
506
|
+
197,
|
|
507
|
+
201,
|
|
508
|
+
230,
|
|
509
|
+
198,
|
|
510
|
+
244,
|
|
511
|
+
246,
|
|
512
|
+
242,
|
|
513
|
+
251,
|
|
514
|
+
249,
|
|
515
|
+
255,
|
|
516
|
+
214,
|
|
517
|
+
220,
|
|
518
|
+
162,
|
|
519
|
+
163,
|
|
520
|
+
165,
|
|
521
|
+
8359,
|
|
522
|
+
402,
|
|
523
|
+
225,
|
|
524
|
+
237,
|
|
525
|
+
243,
|
|
526
|
+
250,
|
|
527
|
+
241,
|
|
528
|
+
209,
|
|
529
|
+
170,
|
|
530
|
+
186,
|
|
531
|
+
191,
|
|
532
|
+
8976,
|
|
533
|
+
172,
|
|
534
|
+
189,
|
|
535
|
+
188,
|
|
536
|
+
161,
|
|
537
|
+
171,
|
|
538
|
+
187,
|
|
539
|
+
9617,
|
|
540
|
+
9618,
|
|
541
|
+
9619,
|
|
542
|
+
9474,
|
|
543
|
+
9508,
|
|
544
|
+
9569,
|
|
545
|
+
9570,
|
|
546
|
+
9558,
|
|
547
|
+
9557,
|
|
548
|
+
9571,
|
|
549
|
+
9553,
|
|
550
|
+
9559,
|
|
551
|
+
9565,
|
|
552
|
+
9564,
|
|
553
|
+
9563,
|
|
554
|
+
9488,
|
|
555
|
+
9492,
|
|
556
|
+
9524,
|
|
557
|
+
9516,
|
|
558
|
+
9500,
|
|
559
|
+
9472,
|
|
560
|
+
9532,
|
|
561
|
+
9566,
|
|
562
|
+
9567,
|
|
563
|
+
9562,
|
|
564
|
+
9556,
|
|
565
|
+
9577,
|
|
566
|
+
9574,
|
|
567
|
+
9568,
|
|
568
|
+
9552,
|
|
569
|
+
9580,
|
|
570
|
+
9575,
|
|
571
|
+
9576,
|
|
572
|
+
9572,
|
|
573
|
+
9573,
|
|
574
|
+
9561,
|
|
575
|
+
9560,
|
|
576
|
+
9554,
|
|
577
|
+
9555,
|
|
578
|
+
9579,
|
|
579
|
+
9578,
|
|
580
|
+
9496,
|
|
581
|
+
9484,
|
|
582
|
+
9608,
|
|
583
|
+
9604,
|
|
584
|
+
9612,
|
|
585
|
+
9616,
|
|
586
|
+
9600,
|
|
587
|
+
945,
|
|
588
|
+
223,
|
|
589
|
+
915,
|
|
590
|
+
960,
|
|
591
|
+
931,
|
|
592
|
+
963,
|
|
593
|
+
181,
|
|
594
|
+
964,
|
|
595
|
+
934,
|
|
596
|
+
920,
|
|
597
|
+
937,
|
|
598
|
+
948,
|
|
599
|
+
8734,
|
|
600
|
+
966,
|
|
601
|
+
949,
|
|
602
|
+
8745,
|
|
603
|
+
8801,
|
|
604
|
+
177,
|
|
605
|
+
8805,
|
|
606
|
+
8804,
|
|
607
|
+
8992,
|
|
608
|
+
8993,
|
|
609
|
+
247,
|
|
610
|
+
8776,
|
|
611
|
+
176,
|
|
612
|
+
8729,
|
|
613
|
+
183,
|
|
614
|
+
8730,
|
|
615
|
+
8319,
|
|
616
|
+
178,
|
|
617
|
+
9632,
|
|
618
|
+
160
|
|
619
|
+
];
|
|
620
|
+
function invalidUtf8(bytes) {
|
|
621
|
+
let i = 0;
|
|
622
|
+
while (i < bytes.byteLength) {
|
|
623
|
+
const lead = bytes[i];
|
|
624
|
+
const sequence = lead < 128 ? ASCII_SEQUENCE : utf8Sequence(lead);
|
|
625
|
+
if (sequence === null) {
|
|
626
|
+
return { index: i, truncated: false, cut: false };
|
|
627
|
+
}
|
|
628
|
+
const problem = checkContinuation(bytes, i, sequence);
|
|
629
|
+
if (problem !== null) {
|
|
630
|
+
return problem;
|
|
631
|
+
}
|
|
632
|
+
i += sequence.need + 1;
|
|
633
|
+
}
|
|
634
|
+
return { index: 0, truncated: false, cut: false };
|
|
635
|
+
}
|
|
636
|
+
const ASCII_SEQUENCE = { need: 0, low: 128, high: 191 };
|
|
637
|
+
function utf8Sequence(lead) {
|
|
638
|
+
if (lead >= 194 && lead <= 223) {
|
|
639
|
+
return { need: 1, low: 128, high: 191 };
|
|
640
|
+
}
|
|
641
|
+
if (lead >= 224 && lead <= 239) {
|
|
642
|
+
return { need: 2, low: lead === 224 ? 160 : 128, high: lead === 237 ? 159 : 191 };
|
|
643
|
+
}
|
|
644
|
+
if (lead >= 240 && lead <= 244) {
|
|
645
|
+
return { need: 3, low: lead === 240 ? 144 : 128, high: lead === 244 ? 143 : 191 };
|
|
646
|
+
}
|
|
647
|
+
return null;
|
|
648
|
+
}
|
|
649
|
+
function checkContinuation(bytes, i, sequence) {
|
|
650
|
+
for (let k = 1; k <= sequence.need; k++) {
|
|
651
|
+
if (i + k >= bytes.byteLength) {
|
|
652
|
+
return { index: i, truncated: k > 1, cut: true };
|
|
653
|
+
}
|
|
654
|
+
const next = bytes[i + k];
|
|
655
|
+
const low = k === 1 ? sequence.low : 128;
|
|
656
|
+
const high = k === 1 ? sequence.high : 191;
|
|
657
|
+
if (next < low || next > high) {
|
|
658
|
+
return { index: i, truncated: false, cut: false };
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
return null;
|
|
662
|
+
}
|
|
663
|
+
function controlByte(bytes, final) {
|
|
664
|
+
const last = bytes.byteLength - 1;
|
|
665
|
+
for (let i = 0; i <= last; i++) {
|
|
666
|
+
const b = bytes[i];
|
|
667
|
+
if (b < 32 && b !== 9 && b !== 10 && b !== 12 && b !== 13 && !(b === 26 && final && i === last)) {
|
|
668
|
+
return i;
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
return -1;
|
|
672
|
+
}
|
|
673
|
+
function decodeEntryName(bytes, cp437 = false) {
|
|
674
|
+
try {
|
|
675
|
+
return new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }).decode(bytes);
|
|
676
|
+
} catch {
|
|
677
|
+
if (!cp437) {
|
|
678
|
+
return new TextDecoder("windows-1252").decode(bytes);
|
|
679
|
+
}
|
|
680
|
+
let out = "";
|
|
681
|
+
for (const byte of bytes) {
|
|
682
|
+
out += String.fromCodePoint(byte < 128 ? byte : CP437_HIGH[byte - 128]);
|
|
683
|
+
}
|
|
684
|
+
return out;
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
function concatBytes(chunks) {
|
|
688
|
+
if (chunks.length === 1) {
|
|
689
|
+
return chunks[0];
|
|
690
|
+
}
|
|
691
|
+
const out = new Uint8Array(chunks.reduce((sum, c) => sum + c.byteLength, 0));
|
|
692
|
+
let offset = 0;
|
|
693
|
+
for (const chunk of chunks) {
|
|
694
|
+
out.set(chunk, offset);
|
|
695
|
+
offset += chunk.byteLength;
|
|
696
|
+
}
|
|
697
|
+
return out;
|
|
698
|
+
}
|
|
699
|
+
const DECODE_SLICE = 256 * 1024;
|
|
700
|
+
const BOM = String.fromCharCode(65279);
|
|
701
|
+
const SUB = String.fromCodePoint(26);
|
|
702
|
+
const MAX_TEXT_LENGTH = 2 ** 29 - 24;
|
|
703
|
+
const CONTROL_CHARACTER = new RegExp(
|
|
704
|
+
`[${String.fromCodePoint(0)}-${String.fromCodePoint(8, 11, 14)}-${String.fromCodePoint(31, 127)}-${String.fromCodePoint(159)}${BOM}]`
|
|
705
|
+
);
|
|
706
|
+
function isImportInput(input) {
|
|
707
|
+
if (typeof input === "string" || asBytes(input) !== null) {
|
|
708
|
+
return true;
|
|
709
|
+
}
|
|
710
|
+
if (typeof input !== "object" || input === null) {
|
|
711
|
+
return false;
|
|
712
|
+
}
|
|
713
|
+
return typeof input.getReader === "function" || Symbol.asyncIterator in input;
|
|
714
|
+
}
|
|
715
|
+
function asBytes(value) {
|
|
716
|
+
if (value instanceof Uint8Array) {
|
|
717
|
+
return value;
|
|
718
|
+
}
|
|
719
|
+
if (ArrayBuffer.isView(value) && Object.prototype.toString.call(value) === "[object Uint8Array]") {
|
|
720
|
+
return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
|
|
721
|
+
}
|
|
722
|
+
return null;
|
|
723
|
+
}
|
|
724
|
+
function normalizeInput(input) {
|
|
725
|
+
if (typeof input === "string") {
|
|
726
|
+
return input;
|
|
727
|
+
}
|
|
728
|
+
const bytes = asBytes(input);
|
|
729
|
+
if (bytes !== null) {
|
|
730
|
+
return bytes;
|
|
731
|
+
}
|
|
732
|
+
if (isImportInput(input)) {
|
|
733
|
+
return input;
|
|
734
|
+
}
|
|
735
|
+
const tag = Object.prototype.toString.call(input).slice(8, -1);
|
|
736
|
+
let found = input === null ? "null" : typeof input;
|
|
737
|
+
let fix = "";
|
|
738
|
+
if (tag === "ArrayBuffer" || tag === "SharedArrayBuffer") {
|
|
739
|
+
found = `an ${tag}`;
|
|
740
|
+
fix = "; wrap it as new Uint8Array(buffer)";
|
|
741
|
+
} else if (ArrayBuffer.isView(input)) {
|
|
742
|
+
found = `a ${tag}`;
|
|
743
|
+
fix = "; pass new Uint8Array(view.buffer, view.byteOffset, view.byteLength)";
|
|
744
|
+
} else if (typeof input === "object" && input !== null) {
|
|
745
|
+
const object = input;
|
|
746
|
+
if (typeof object.stream === "function" && typeof object.size === "number") {
|
|
747
|
+
found = "a Blob or File";
|
|
748
|
+
fix = "; pass blob.stream()";
|
|
749
|
+
} else if ("body" in object && typeof object.arrayBuffer === "function") {
|
|
750
|
+
found = "a fetch Response";
|
|
751
|
+
fix = "; pass response.body";
|
|
752
|
+
} else {
|
|
753
|
+
found = `an object (${tag})`;
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
throw new GraphFormatError(
|
|
757
|
+
"E_UNSUPPORTED",
|
|
758
|
+
`the input is ${found}; an importer reads a string, a Uint8Array, a ReadableStream or an async iterable of strings and Uint8Arrays${fix}`,
|
|
759
|
+
{ reason: "input type", found }
|
|
760
|
+
);
|
|
761
|
+
}
|
|
762
|
+
function inputLength(input) {
|
|
763
|
+
if (typeof input === "string") {
|
|
764
|
+
return input.length;
|
|
765
|
+
}
|
|
766
|
+
if (input instanceof Uint8Array) {
|
|
767
|
+
return input.byteLength;
|
|
768
|
+
}
|
|
769
|
+
return null;
|
|
770
|
+
}
|
|
771
|
+
function utf8Length(text) {
|
|
772
|
+
let bytes = 0;
|
|
773
|
+
let i = 0;
|
|
774
|
+
while (i < text.length) {
|
|
775
|
+
const c = text.charCodeAt(i);
|
|
776
|
+
const pair = c >= 55296 && c <= 56319 && (text.charCodeAt(i + 1) & 64512) === 56320;
|
|
777
|
+
if (c < 128) {
|
|
778
|
+
bytes++;
|
|
779
|
+
} else if (c < 2048) {
|
|
780
|
+
bytes += 2;
|
|
781
|
+
} else {
|
|
782
|
+
bytes += pair ? 4 : 3;
|
|
783
|
+
}
|
|
784
|
+
i += pair ? 2 : 1;
|
|
785
|
+
}
|
|
786
|
+
return bytes;
|
|
787
|
+
}
|
|
788
|
+
function throwIfAborted(signal) {
|
|
789
|
+
if (!signal?.aborted) {
|
|
790
|
+
return;
|
|
791
|
+
}
|
|
792
|
+
const { reason } = signal;
|
|
793
|
+
if (reason === void 0) {
|
|
794
|
+
throw abortError();
|
|
795
|
+
}
|
|
796
|
+
throw reason;
|
|
797
|
+
}
|
|
798
|
+
function abortError() {
|
|
799
|
+
const message = "The import was aborted";
|
|
800
|
+
if (typeof DOMException === "function") {
|
|
801
|
+
return new DOMException(message, "AbortError");
|
|
802
|
+
}
|
|
803
|
+
const err = new Error(message);
|
|
804
|
+
err.name = "AbortError";
|
|
805
|
+
return err;
|
|
806
|
+
}
|
|
807
|
+
function abortable(promise, signal) {
|
|
808
|
+
if (signal === null || typeof signal.addEventListener !== "function") {
|
|
809
|
+
return promise;
|
|
810
|
+
}
|
|
811
|
+
return new Promise((resolve, reject) => {
|
|
812
|
+
const onAbort = () => {
|
|
813
|
+
try {
|
|
814
|
+
throwIfAborted(signal);
|
|
815
|
+
} catch (err) {
|
|
816
|
+
reject(err);
|
|
817
|
+
}
|
|
818
|
+
};
|
|
819
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
820
|
+
promise.then(
|
|
821
|
+
(value) => {
|
|
822
|
+
signal.removeEventListener("abort", onAbort);
|
|
823
|
+
resolve(value);
|
|
824
|
+
},
|
|
825
|
+
(err) => {
|
|
826
|
+
signal.removeEventListener("abort", onAbort);
|
|
827
|
+
reject(err);
|
|
828
|
+
}
|
|
829
|
+
);
|
|
830
|
+
});
|
|
831
|
+
}
|
|
832
|
+
function lockReader(stream) {
|
|
833
|
+
if (stream.locked) {
|
|
834
|
+
throw new GraphFormatError(
|
|
835
|
+
"E_UNSUPPORTED",
|
|
836
|
+
"the input ReadableStream is locked: another reader holds it (release it, or pass a fresh stream)",
|
|
837
|
+
{ reason: "stream locked" }
|
|
838
|
+
);
|
|
839
|
+
}
|
|
840
|
+
return stream.getReader();
|
|
841
|
+
}
|
|
842
|
+
class TextFilter {
|
|
843
|
+
/**
|
|
844
|
+
* Create the filter of one import.
|
|
845
|
+
* @param report - where the warnings and the fatal errors go
|
|
846
|
+
* @param options - whether an empty input is valid, whether the format is XML
|
|
847
|
+
*/
|
|
848
|
+
constructor(report, options) {
|
|
849
|
+
this.report = report;
|
|
850
|
+
this.options = options;
|
|
851
|
+
this.first = true;
|
|
852
|
+
this.content = false;
|
|
853
|
+
this.heldSub = false;
|
|
854
|
+
this.warned = false;
|
|
855
|
+
this.strayBom = false;
|
|
856
|
+
}
|
|
857
|
+
/**
|
|
858
|
+
* Filter the next decoded text.
|
|
859
|
+
* @param chunk - the text
|
|
860
|
+
* @returns the text to hand on
|
|
861
|
+
*/
|
|
862
|
+
push(chunk) {
|
|
863
|
+
let text = this.heldSub ? SUB + chunk : chunk;
|
|
864
|
+
this.heldSub = false;
|
|
865
|
+
if (text.length === 0) {
|
|
866
|
+
return text;
|
|
867
|
+
}
|
|
868
|
+
if (this.first) {
|
|
869
|
+
text = this.skipByteOrderMarks(text);
|
|
870
|
+
if (text.length === 0) {
|
|
871
|
+
return text;
|
|
872
|
+
}
|
|
873
|
+
this.first = false;
|
|
874
|
+
refuseForeign(text, this.report, this.options);
|
|
875
|
+
}
|
|
876
|
+
if (text.endsWith(SUB)) {
|
|
877
|
+
this.heldSub = true;
|
|
878
|
+
text = text.slice(0, -1);
|
|
879
|
+
}
|
|
880
|
+
if (!this.content && /\S/.test(text)) {
|
|
881
|
+
this.content = true;
|
|
882
|
+
}
|
|
883
|
+
if (!this.warned) {
|
|
884
|
+
this.warnControl(text);
|
|
885
|
+
}
|
|
886
|
+
return text;
|
|
887
|
+
}
|
|
888
|
+
/**
|
|
889
|
+
* Drop the byte order marks the input starts with, warning when there is more than one.
|
|
890
|
+
* @param text - the first text
|
|
891
|
+
* @returns the text without them
|
|
892
|
+
*/
|
|
893
|
+
skipByteOrderMarks(text) {
|
|
894
|
+
let start = 0;
|
|
895
|
+
while (text.codePointAt(start) === 65279) {
|
|
896
|
+
start++;
|
|
897
|
+
}
|
|
898
|
+
if (start > 1 && !this.strayBom) {
|
|
899
|
+
this.strayBom = true;
|
|
900
|
+
this.report.warning(
|
|
901
|
+
"validation-error",
|
|
902
|
+
CONTROL_CHARACTER_CODE,
|
|
903
|
+
`the input starts with ${start} byte order marks (U+FEFF); the extra ones were ignored`,
|
|
904
|
+
{ element: "U+FEFF" }
|
|
905
|
+
);
|
|
906
|
+
}
|
|
907
|
+
return text.slice(start);
|
|
908
|
+
}
|
|
909
|
+
/**
|
|
910
|
+
* Warn, once, about the first control character the text holds.
|
|
911
|
+
* @param text - the text
|
|
912
|
+
*/
|
|
913
|
+
warnControl(text) {
|
|
914
|
+
const match = CONTROL_CHARACTER.exec(text);
|
|
915
|
+
if (match === null) {
|
|
916
|
+
return;
|
|
917
|
+
}
|
|
918
|
+
this.warned = true;
|
|
919
|
+
const code = (match[0].codePointAt(0) ?? 0).toString(16).toUpperCase().padStart(4, "0");
|
|
920
|
+
const around = JSON.stringify(text.slice(Math.max(0, match.index - 20), match.index + 20));
|
|
921
|
+
this.report.warning(
|
|
922
|
+
"validation-error",
|
|
923
|
+
CONTROL_CHARACTER_CODE,
|
|
924
|
+
`the input holds the control character U+${code} (in ${around}); it is kept in the id or value it is part of`,
|
|
925
|
+
{ element: `U+${code}` }
|
|
926
|
+
);
|
|
927
|
+
}
|
|
928
|
+
/** The input ended: drop a held Ctrl-Z with a warning, and refuse an input without content. */
|
|
929
|
+
end() {
|
|
930
|
+
if (this.heldSub) {
|
|
931
|
+
this.report.warning(
|
|
932
|
+
"validation-error",
|
|
933
|
+
CONTROL_CHARACTER_CODE,
|
|
934
|
+
"the input ends with a Ctrl-Z (0x1A), the DOS end-of-file marker; it was ignored",
|
|
935
|
+
{ element: "U+001A" }
|
|
936
|
+
);
|
|
937
|
+
}
|
|
938
|
+
if (!this.content && this.options.allowEmpty !== true) {
|
|
939
|
+
this.report.fail(EMPTY_INPUT_CODE, this.first ? "the input is empty" : "the input holds only whitespace");
|
|
940
|
+
}
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
function reportTextEncoding(report, encoding) {
|
|
944
|
+
if (encoding !== null && encoding !== void 0) {
|
|
945
|
+
report.warning(
|
|
946
|
+
"unsupported",
|
|
947
|
+
OPTION_IGNORED_CODE,
|
|
948
|
+
"option encoding has no effect on text input, which is already decoded",
|
|
949
|
+
{ element: "encoding" }
|
|
950
|
+
);
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
async function* textChunks(rawInput, report, options = {}) {
|
|
954
|
+
const input = normalizeInput(rawInput);
|
|
955
|
+
const signal = options.signal ?? null;
|
|
956
|
+
const filter = new TextFilter(report, options);
|
|
957
|
+
throwIfAborted(signal);
|
|
958
|
+
if (typeof input === "string") {
|
|
959
|
+
reportTextEncoding(report, options.encoding);
|
|
960
|
+
yield* stringTextChunks(input, filter, options);
|
|
961
|
+
return;
|
|
962
|
+
}
|
|
963
|
+
const decoder = new ByteDecoder(report, options);
|
|
964
|
+
if (input instanceof Uint8Array) {
|
|
965
|
+
yield* byteTextChunks(input, filter, decoder, options);
|
|
966
|
+
return;
|
|
967
|
+
}
|
|
968
|
+
const stream = new StreamText(filter, decoder, options);
|
|
969
|
+
for await (const chunk of isReadableStream(input) ? streamChunks(input, signal) : input) {
|
|
970
|
+
throwIfAborted(signal);
|
|
971
|
+
const text = stream.push(chunk);
|
|
972
|
+
if (text.length > 0) {
|
|
973
|
+
yield text;
|
|
974
|
+
}
|
|
975
|
+
options.onProgress?.(stream.done);
|
|
976
|
+
}
|
|
977
|
+
const tail = stream.end();
|
|
978
|
+
if (tail.length > 0) {
|
|
979
|
+
yield tail;
|
|
980
|
+
}
|
|
981
|
+
filter.end();
|
|
982
|
+
options.onProgress?.(stream.done, stream.done);
|
|
983
|
+
}
|
|
984
|
+
function stringSliceEnd(input, start) {
|
|
985
|
+
const end = Math.min(start + DECODE_SLICE, input.length);
|
|
986
|
+
const highSurrogate = (input.charCodeAt(end - 1) & 64512) === 55296;
|
|
987
|
+
return end < input.length && highSurrogate ? end + 1 : end;
|
|
988
|
+
}
|
|
989
|
+
function* stringTextChunks(input, filter, options) {
|
|
990
|
+
const signal = options.signal ?? null;
|
|
991
|
+
const onProgress = options.onProgress ?? null;
|
|
992
|
+
const total = onProgress === null ? 0 : utf8Length(input);
|
|
993
|
+
let done = 0;
|
|
994
|
+
let start = 0;
|
|
995
|
+
while (start < input.length) {
|
|
996
|
+
throwIfAborted(signal);
|
|
997
|
+
const end = stringSliceEnd(input, start);
|
|
998
|
+
const piece = start === 0 && end === input.length ? input : input.slice(start, end);
|
|
999
|
+
start = end;
|
|
1000
|
+
const text = filter.push(piece);
|
|
1001
|
+
if (text.length > 0) {
|
|
1002
|
+
yield text;
|
|
1003
|
+
}
|
|
1004
|
+
if (onProgress !== null) {
|
|
1005
|
+
done += utf8Length(piece);
|
|
1006
|
+
onProgress(done, total);
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
if (input.length === 0) {
|
|
1010
|
+
onProgress?.(0, 0);
|
|
1011
|
+
}
|
|
1012
|
+
filter.end();
|
|
1013
|
+
}
|
|
1014
|
+
function* byteTextChunks(input, filter, decoder, options) {
|
|
1015
|
+
const signal = options.signal ?? null;
|
|
1016
|
+
const length = input.byteLength;
|
|
1017
|
+
decoder.start(input.subarray(0, headByteCount(options)));
|
|
1018
|
+
for (let offset = 0; offset < length; offset += DECODE_SLICE) {
|
|
1019
|
+
throwIfAborted(signal);
|
|
1020
|
+
if (input.byteLength !== length) {
|
|
1021
|
+
throw new GraphFormatError(
|
|
1022
|
+
"E_UNSUPPORTED",
|
|
1023
|
+
"the input's buffer was detached (transferred) or resized during the import",
|
|
1024
|
+
{ reason: "detached" }
|
|
1025
|
+
);
|
|
1026
|
+
}
|
|
1027
|
+
const slice = input.subarray(offset, Math.min(offset + DECODE_SLICE, length));
|
|
1028
|
+
const text = filter.push(decoder.decode(slice, offset + DECODE_SLICE < length));
|
|
1029
|
+
if (text.length > 0) {
|
|
1030
|
+
yield text;
|
|
1031
|
+
}
|
|
1032
|
+
options.onProgress?.(Math.min(offset + DECODE_SLICE, length), length);
|
|
1033
|
+
}
|
|
1034
|
+
if (length === 0) {
|
|
1035
|
+
options.onProgress?.(0, 0);
|
|
1036
|
+
}
|
|
1037
|
+
filter.end();
|
|
1038
|
+
}
|
|
1039
|
+
function headByteCount(options) {
|
|
1040
|
+
return Math.max(options.declarationBytes ?? HEAD_BYTES, BOM_BYTES);
|
|
1041
|
+
}
|
|
1042
|
+
class StreamText {
|
|
1043
|
+
/**
|
|
1044
|
+
* Create the reader of one stream input.
|
|
1045
|
+
* @param filter - the text checks
|
|
1046
|
+
* @param decoder - the byte decoder
|
|
1047
|
+
* @param options - progress, the declaration reader and its size
|
|
1048
|
+
*/
|
|
1049
|
+
constructor(filter, decoder, options) {
|
|
1050
|
+
this.filter = filter;
|
|
1051
|
+
this.decoder = decoder;
|
|
1052
|
+
this.done = 0;
|
|
1053
|
+
this.head = [];
|
|
1054
|
+
this.headLength = 0;
|
|
1055
|
+
this.headBytes = headByteCount(options);
|
|
1056
|
+
this.needed = options.declaredEncoding === void 0 ? BOM_BYTES : this.headBytes;
|
|
1057
|
+
this.counting = (options.onProgress ?? null) !== null;
|
|
1058
|
+
}
|
|
1059
|
+
/**
|
|
1060
|
+
* Read the next chunk.
|
|
1061
|
+
* @param chunk - a string or a Uint8Array (anything else is E_UNSUPPORTED)
|
|
1062
|
+
* @returns its filtered text; empty while bytes are held back
|
|
1063
|
+
*/
|
|
1064
|
+
push(chunk) {
|
|
1065
|
+
if (typeof chunk === "string") {
|
|
1066
|
+
this.done += this.counting ? utf8Length(chunk) : 0;
|
|
1067
|
+
return this.filter.push(this.beforeText() + chunk);
|
|
1068
|
+
}
|
|
1069
|
+
const bytes = asBytes(chunk);
|
|
1070
|
+
if (bytes === null) {
|
|
1071
|
+
throw new GraphFormatError("E_UNSUPPORTED", "an input chunk must be a string or a Uint8Array", {
|
|
1072
|
+
reason: "chunk type",
|
|
1073
|
+
found: typeof chunk
|
|
1074
|
+
});
|
|
1075
|
+
}
|
|
1076
|
+
this.done += bytes.byteLength;
|
|
1077
|
+
if (this.decoder.started) {
|
|
1078
|
+
return this.filter.push(this.decoder.decode(bytes, true));
|
|
1079
|
+
}
|
|
1080
|
+
this.head.push(bytes);
|
|
1081
|
+
this.headLength += bytes.byteLength;
|
|
1082
|
+
return this.headLength >= this.needed ? this.filter.push(this.flushHead(true)) : "";
|
|
1083
|
+
}
|
|
1084
|
+
/**
|
|
1085
|
+
* The input ended: the filtered text of whatever is still held or pending.
|
|
1086
|
+
* @returns the text
|
|
1087
|
+
*/
|
|
1088
|
+
end() {
|
|
1089
|
+
let tail = "";
|
|
1090
|
+
if (this.headLength > 0) {
|
|
1091
|
+
tail = this.flushHead(false);
|
|
1092
|
+
} else if (this.decoder.started) {
|
|
1093
|
+
tail = this.decoder.decode(new Uint8Array(0), false);
|
|
1094
|
+
}
|
|
1095
|
+
return this.filter.push(tail);
|
|
1096
|
+
}
|
|
1097
|
+
/**
|
|
1098
|
+
* Start the decoder on the held bytes and decode them.
|
|
1099
|
+
* @param stream - whether more bytes follow
|
|
1100
|
+
* @returns their text
|
|
1101
|
+
*/
|
|
1102
|
+
flushHead(stream) {
|
|
1103
|
+
const bytes = concatBytes(this.head);
|
|
1104
|
+
this.head = [];
|
|
1105
|
+
this.headLength = 0;
|
|
1106
|
+
this.decoder.start(bytes.subarray(0, this.headBytes));
|
|
1107
|
+
return this.decoder.decode(bytes, stream);
|
|
1108
|
+
}
|
|
1109
|
+
/**
|
|
1110
|
+
* A text chunk follows: finish any byte sequence still pending in the decoder before switching
|
|
1111
|
+
* to text. The BOM and declaration checks apply to the start of the input only, so bytes after
|
|
1112
|
+
* text are never taken for a BOM.
|
|
1113
|
+
* @returns the text of the pending bytes
|
|
1114
|
+
*/
|
|
1115
|
+
beforeText() {
|
|
1116
|
+
if (this.headLength > 0) {
|
|
1117
|
+
return this.decoder.flushBeforeText(() => this.flushHead(false));
|
|
1118
|
+
}
|
|
1119
|
+
if (this.decoder.started) {
|
|
1120
|
+
return this.decoder.flushBeforeText(() => this.decoder.decode(new Uint8Array(0), false));
|
|
1121
|
+
}
|
|
1122
|
+
this.decoder.start(new Uint8Array(0));
|
|
1123
|
+
return "";
|
|
1124
|
+
}
|
|
1125
|
+
}
|
|
1126
|
+
function isReadableStream(input) {
|
|
1127
|
+
return typeof input.getReader === "function";
|
|
1128
|
+
}
|
|
1129
|
+
async function* streamChunks(stream, signal) {
|
|
1130
|
+
const reader = lockReader(stream);
|
|
1131
|
+
let finished = false;
|
|
1132
|
+
try {
|
|
1133
|
+
for (; ; ) {
|
|
1134
|
+
throwIfAborted(signal);
|
|
1135
|
+
const { done, value } = await abortable(reader.read(), signal);
|
|
1136
|
+
if (done) {
|
|
1137
|
+
finished = true;
|
|
1138
|
+
return;
|
|
1139
|
+
}
|
|
1140
|
+
yield value;
|
|
1141
|
+
}
|
|
1142
|
+
} finally {
|
|
1143
|
+
if (!finished) {
|
|
1144
|
+
await reader.cancel(signal?.reason).catch(() => void 0);
|
|
1145
|
+
}
|
|
1146
|
+
reader.releaseLock();
|
|
1147
|
+
}
|
|
1148
|
+
}
|
|
1149
|
+
async function readBytes(rawInput, options = {}) {
|
|
1150
|
+
const input = normalizeInput(rawInput);
|
|
1151
|
+
const signal = options.signal ?? null;
|
|
1152
|
+
throwIfAborted(signal);
|
|
1153
|
+
if (typeof input === "string") {
|
|
1154
|
+
return null;
|
|
1155
|
+
}
|
|
1156
|
+
if (input instanceof Uint8Array) {
|
|
1157
|
+
options.onProgress?.(input.byteLength, input.byteLength);
|
|
1158
|
+
return input;
|
|
1159
|
+
}
|
|
1160
|
+
const parts = [];
|
|
1161
|
+
let done = 0;
|
|
1162
|
+
for await (const chunk of isReadableStream(input) ? streamChunks(input, signal) : input) {
|
|
1163
|
+
throwIfAborted(signal);
|
|
1164
|
+
if (typeof chunk === "string") {
|
|
1165
|
+
return null;
|
|
1166
|
+
}
|
|
1167
|
+
const bytes = asBytes(chunk);
|
|
1168
|
+
if (bytes === null) {
|
|
1169
|
+
throw new GraphFormatError("E_UNSUPPORTED", "an input chunk must be a string or a Uint8Array", {
|
|
1170
|
+
reason: "chunk type",
|
|
1171
|
+
found: typeof chunk
|
|
1172
|
+
});
|
|
1173
|
+
}
|
|
1174
|
+
parts.push(bytes);
|
|
1175
|
+
done += bytes.byteLength;
|
|
1176
|
+
options.onProgress?.(done);
|
|
1177
|
+
}
|
|
1178
|
+
options.onProgress?.(done, done);
|
|
1179
|
+
return parts.length === 0 ? new Uint8Array(0) : concatBytes(parts);
|
|
1180
|
+
}
|
|
1181
|
+
function tooLarge(report, message, line) {
|
|
1182
|
+
report.failWith("unsupported", TOO_LARGE_CODE, message, line === void 0 ? void 0 : { line });
|
|
1183
|
+
}
|
|
1184
|
+
async function readText(rawInput, report, options = {}) {
|
|
1185
|
+
const input = normalizeInput(rawInput);
|
|
1186
|
+
if (typeof input === "string") {
|
|
1187
|
+
throwIfAborted(options.signal);
|
|
1188
|
+
reportTextEncoding(report, options.encoding);
|
|
1189
|
+
const filter = new TextFilter(report, options);
|
|
1190
|
+
const text = filter.push(input);
|
|
1191
|
+
filter.end();
|
|
1192
|
+
if (options.onProgress !== null && options.onProgress !== void 0) {
|
|
1193
|
+
const total = utf8Length(input);
|
|
1194
|
+
options.onProgress(total, total);
|
|
1195
|
+
}
|
|
1196
|
+
return text;
|
|
1197
|
+
}
|
|
1198
|
+
const parts = [];
|
|
1199
|
+
let length = 0;
|
|
1200
|
+
for await (const chunk of textChunks(input, report, options)) {
|
|
1201
|
+
length += chunk.length;
|
|
1202
|
+
if (length > MAX_TEXT_LENGTH) {
|
|
1203
|
+
tooLarge(
|
|
1204
|
+
report,
|
|
1205
|
+
`the document is longer than ${MAX_TEXT_LENGTH} characters, the most one JavaScript string holds`
|
|
1206
|
+
);
|
|
1207
|
+
}
|
|
1208
|
+
parts.push(chunk);
|
|
1209
|
+
}
|
|
1210
|
+
return parts.length === 1 ? parts[0] : parts.join("");
|
|
1211
|
+
}
|
|
1212
|
+
class LineReader {
|
|
1213
|
+
/**
|
|
1214
|
+
* Create a reader over an input; nothing is read until iteration starts.
|
|
1215
|
+
* @param input - the input
|
|
1216
|
+
* @param report - the report decode errors are recorded in
|
|
1217
|
+
* @param options - cancellation and progress
|
|
1218
|
+
*/
|
|
1219
|
+
constructor(input, report, options = {}) {
|
|
1220
|
+
this.lineNumber = 0;
|
|
1221
|
+
this.input = input;
|
|
1222
|
+
this.report = report;
|
|
1223
|
+
this.options = options;
|
|
1224
|
+
}
|
|
1225
|
+
/**
|
|
1226
|
+
* The 1-based number of the line most recently yielded.
|
|
1227
|
+
* @returns the line number; 0 before the first line
|
|
1228
|
+
*/
|
|
1229
|
+
get line() {
|
|
1230
|
+
return this.lineNumber;
|
|
1231
|
+
}
|
|
1232
|
+
/**
|
|
1233
|
+
* The E_TOO_LARGE message of a line longer than one string.
|
|
1234
|
+
* @returns the message
|
|
1235
|
+
*/
|
|
1236
|
+
lineTooLong() {
|
|
1237
|
+
return `a line is longer than ${MAX_TEXT_LENGTH} characters, the most one JavaScript string holds`;
|
|
1238
|
+
}
|
|
1239
|
+
/**
|
|
1240
|
+
* Iterate the lines.
|
|
1241
|
+
* @yields one line at a time, terminator removed
|
|
1242
|
+
* @returns nothing
|
|
1243
|
+
*/
|
|
1244
|
+
async *[Symbol.asyncIterator]() {
|
|
1245
|
+
const pending = new PendingLine((line) => tooLarge(this.report, this.lineTooLong(), line));
|
|
1246
|
+
let trailingCr = false;
|
|
1247
|
+
for await (const chunk of textChunks(this.input, this.report, this.options)) {
|
|
1248
|
+
let start = 0;
|
|
1249
|
+
if (trailingCr) {
|
|
1250
|
+
trailingCr = false;
|
|
1251
|
+
this.lineNumber++;
|
|
1252
|
+
yield pending.take().slice(0, -1);
|
|
1253
|
+
if (chunk.charCodeAt(0) === 10) {
|
|
1254
|
+
start = 1;
|
|
1255
|
+
}
|
|
1256
|
+
}
|
|
1257
|
+
const breaks = new LineBreaks(chunk, start);
|
|
1258
|
+
while (breaks.advance()) {
|
|
1259
|
+
this.lineNumber++;
|
|
1260
|
+
yield pending.finish(chunk.slice(start, breaks.cut), this.lineNumber);
|
|
1261
|
+
start = breaks.next;
|
|
1262
|
+
}
|
|
1263
|
+
if (start < chunk.length) {
|
|
1264
|
+
pending.appendRest(chunk, start, this.lineNumber + 1);
|
|
1265
|
+
trailingCr = chunk.codePointAt(chunk.length - 1) === 13;
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
if (!pending.empty) {
|
|
1269
|
+
this.lineNumber++;
|
|
1270
|
+
const joined = pending.take();
|
|
1271
|
+
yield joined.endsWith("\r") ? joined.slice(0, -1) : joined;
|
|
1272
|
+
}
|
|
1273
|
+
}
|
|
1274
|
+
}
|
|
1275
|
+
class PendingLine {
|
|
1276
|
+
/**
|
|
1277
|
+
* Start an empty line.
|
|
1278
|
+
* @param tooLong - fails the import when the line grows longer than one string can hold
|
|
1279
|
+
*/
|
|
1280
|
+
constructor(tooLong) {
|
|
1281
|
+
this.pieces = [];
|
|
1282
|
+
this.length = 0;
|
|
1283
|
+
this.tooLong = tooLong;
|
|
1284
|
+
}
|
|
1285
|
+
/**
|
|
1286
|
+
* Whether no piece is held.
|
|
1287
|
+
* @returns true when the line in progress is empty
|
|
1288
|
+
*/
|
|
1289
|
+
get empty() {
|
|
1290
|
+
return this.pieces.length === 0;
|
|
1291
|
+
}
|
|
1292
|
+
/**
|
|
1293
|
+
* Hold the rest of a chunk from `start`: the line goes on in the next chunk.
|
|
1294
|
+
* @param chunk - the chunk
|
|
1295
|
+
* @param start - where the unfinished line starts in it
|
|
1296
|
+
* @param line - the 1-based number of the line, for the too-long error
|
|
1297
|
+
*/
|
|
1298
|
+
appendRest(chunk, start, line) {
|
|
1299
|
+
this.append(start === 0 ? chunk : chunk.slice(start), line);
|
|
1300
|
+
}
|
|
1301
|
+
/**
|
|
1302
|
+
* End the line with its last piece.
|
|
1303
|
+
* @param piece - the text from the start of the chunk (or the last break) to the line break
|
|
1304
|
+
* @param line - the 1-based number of the line, for the too-long error
|
|
1305
|
+
* @returns the whole line
|
|
1306
|
+
*/
|
|
1307
|
+
finish(piece, line) {
|
|
1308
|
+
if (this.pieces.length === 0) {
|
|
1309
|
+
return piece;
|
|
1310
|
+
}
|
|
1311
|
+
this.append(piece, line);
|
|
1312
|
+
return this.take();
|
|
1313
|
+
}
|
|
1314
|
+
/**
|
|
1315
|
+
* Join the held pieces and start a new line.
|
|
1316
|
+
* @returns the joined text
|
|
1317
|
+
*/
|
|
1318
|
+
take() {
|
|
1319
|
+
const joined = this.pieces.join("");
|
|
1320
|
+
this.pieces.length = 0;
|
|
1321
|
+
this.length = 0;
|
|
1322
|
+
return joined;
|
|
1323
|
+
}
|
|
1324
|
+
/**
|
|
1325
|
+
* Hold one more piece.
|
|
1326
|
+
* @param piece - the piece
|
|
1327
|
+
* @param line - the 1-based number of the line, for the too-long error
|
|
1328
|
+
*/
|
|
1329
|
+
append(piece, line) {
|
|
1330
|
+
this.length += piece.length;
|
|
1331
|
+
if (this.length > MAX_TEXT_LENGTH) {
|
|
1332
|
+
this.tooLong(line);
|
|
1333
|
+
}
|
|
1334
|
+
this.pieces.push(piece);
|
|
1335
|
+
}
|
|
1336
|
+
}
|
|
1337
|
+
class LineBreaks {
|
|
1338
|
+
/**
|
|
1339
|
+
* Scan a chunk from a position.
|
|
1340
|
+
* @param chunk - the chunk
|
|
1341
|
+
* @param start - where scanning starts
|
|
1342
|
+
*/
|
|
1343
|
+
constructor(chunk, start) {
|
|
1344
|
+
this.cut = 0;
|
|
1345
|
+
this.chunk = chunk;
|
|
1346
|
+
this.next = start;
|
|
1347
|
+
this.nl = chunk.indexOf("\n", start);
|
|
1348
|
+
this.cr = chunk.indexOf("\r", start);
|
|
1349
|
+
}
|
|
1350
|
+
/**
|
|
1351
|
+
* Find the next line break.
|
|
1352
|
+
* @returns false when none is left, or the only one left is a trailing `\r` (it may be the first
|
|
1353
|
+
* half of a `\r\n` split across chunks)
|
|
1354
|
+
*/
|
|
1355
|
+
advance() {
|
|
1356
|
+
const { chunk, next } = this;
|
|
1357
|
+
if (this.nl >= 0 && this.nl < next) {
|
|
1358
|
+
this.nl = chunk.indexOf("\n", next);
|
|
1359
|
+
}
|
|
1360
|
+
if (this.cr >= 0 && this.cr < next) {
|
|
1361
|
+
this.cr = chunk.indexOf("\r", next);
|
|
1362
|
+
}
|
|
1363
|
+
const { nl, cr } = this;
|
|
1364
|
+
if (cr >= 0 && (nl < 0 || cr < nl)) {
|
|
1365
|
+
if (cr === chunk.length - 1) {
|
|
1366
|
+
return false;
|
|
1367
|
+
}
|
|
1368
|
+
this.cut = cr;
|
|
1369
|
+
this.next = chunk.codePointAt(cr + 1) === 10 ? cr + 2 : cr + 1;
|
|
1370
|
+
return true;
|
|
1371
|
+
}
|
|
1372
|
+
if (nl < 0) {
|
|
1373
|
+
return false;
|
|
1374
|
+
}
|
|
1375
|
+
this.cut = nl;
|
|
1376
|
+
this.next = nl + 1;
|
|
1377
|
+
return true;
|
|
1378
|
+
}
|
|
1379
|
+
}
|
|
1380
|
+
export {
|
|
1381
|
+
LineReader as L,
|
|
1382
|
+
MAX_TEXT_LENGTH as M,
|
|
1383
|
+
tooLarge as a,
|
|
1384
|
+
throwIfAborted as b,
|
|
1385
|
+
canonicalEncoding as c,
|
|
1386
|
+
inputLength as d,
|
|
1387
|
+
decodeEntryName as e,
|
|
1388
|
+
readBytes as f,
|
|
1389
|
+
foreignKind as g,
|
|
1390
|
+
abortable as h,
|
|
1391
|
+
isImportInput as i,
|
|
1392
|
+
lockReader as l,
|
|
1393
|
+
normalizeInput as n,
|
|
1394
|
+
readText as r,
|
|
1395
|
+
textChunks as t
|
|
1396
|
+
};
|
|
1397
|
+
//# sourceMappingURL=input-CAxt_aV-.js.map
|