@graphty/graph-io 0.3.46 → 0.3.48
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-C2riR4NT.js} +2 -2
- package/dist/chunks/{approximations-wWjCRzKj.js.map → approximations-C2riR4NT.js.map} +1 -1
- package/dist/chunks/{block-DiGq58c3.js → block-Cu22ewuS.js} +92 -21
- package/dist/chunks/block-Cu22ewuS.js.map +1 -0
- package/dist/chunks/{choose--jM0yYCo.js → choose-Cdx6Enl2.js} +3 -3
- package/dist/chunks/{choose--jM0yYCo.js.map → choose-Cdx6Enl2.js.map} +1 -1
- package/dist/chunks/codes-CV_Bhcyi.js +153 -0
- package/dist/chunks/codes-CV_Bhcyi.js.map +1 -0
- package/dist/chunks/{constants-BKwqelYD.js → constants-D0LqcsLJ.js} +2 -2
- package/dist/chunks/{constants-BKwqelYD.js.map → constants-D0LqcsLJ.js.map} +1 -1
- package/dist/chunks/context-cgmmOxZ2.js +663 -0
- package/dist/chunks/context-cgmmOxZ2.js.map +1 -0
- package/dist/chunks/credentials-BiQsnMTb.js +347 -0
- package/dist/chunks/credentials-BiQsnMTb.js.map +1 -0
- package/dist/chunks/cx-export-BEeF6ymo.js +259 -0
- package/dist/chunks/cx-export-BEeF6ymo.js.map +1 -0
- package/dist/chunks/descriptor-BJ-W0Jd-.js +137 -0
- package/dist/chunks/descriptor-BJ-W0Jd-.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/{emit-CwU8cUmG.js → emit-CD8xnY8s.js} +70 -10
- package/dist/chunks/emit-CD8xnY8s.js.map +1 -0
- package/dist/chunks/{escape-CgzxiYPg.js → escape-DH2Egt-l.js} +12 -12
- package/dist/chunks/{escape-CgzxiYPg.js.map → escape-DH2Egt-l.js.map} +1 -1
- package/dist/chunks/{export-BvqAXCKh.js → export-CZ7VRm4I.js} +53 -1443
- package/dist/chunks/export-CZ7VRm4I.js.map +1 -0
- package/dist/chunks/{exporter-DndFlGSa.js → exporter-BIdaoIgh.js} +7 -6
- package/dist/chunks/{exporter-DndFlGSa.js.map → exporter-BIdaoIgh.js.map} +1 -1
- package/dist/chunks/{exporter-CJgfhF-l.js → exporter-ChjL5fmP.js} +8 -7
- package/dist/chunks/{exporter-CJgfhF-l.js.map → exporter-ChjL5fmP.js.map} +1 -1
- package/dist/chunks/{exporter--Mk9gXCJ.js → exporter-Dcw7Ldtq.js} +6 -4
- package/dist/chunks/{exporter--Mk9gXCJ.js.map → exporter-Dcw7Ldtq.js.map} +1 -1
- package/dist/chunks/exporter-DtVU80Fa.js +1008 -0
- package/dist/chunks/exporter-DtVU80Fa.js.map +1 -0
- package/dist/chunks/{exporter-CrDWIyiq.js → exporter-bxxjOrDZ.js} +11 -9
- package/dist/chunks/{exporter-CrDWIyiq.js.map → exporter-bxxjOrDZ.js.map} +1 -1
- package/dist/chunks/format-BMS-1Nxb.js +64 -0
- package/dist/chunks/format-BMS-1Nxb.js.map +1 -0
- package/dist/chunks/{generic-Dq1ntt9q.js → generic-CP6YD34u.js} +4 -4
- package/dist/chunks/{generic-Dq1ntt9q.js.map → generic-CP6YD34u.js.map} +1 -1
- package/dist/chunks/{importer-DiZRmOQG.js → importer-B87_fmVx.js} +13 -17
- package/dist/chunks/importer-B87_fmVx.js.map +1 -0
- package/dist/chunks/{importer-BSvfrX_h.js → importer-Bji2MeWr.js} +18 -1014
- package/dist/chunks/importer-Bji2MeWr.js.map +1 -0
- package/dist/chunks/{importer-COTK9Tsl.js → importer-CB_zV5_L.js} +14 -11
- package/dist/chunks/importer-CB_zV5_L.js.map +1 -0
- package/dist/chunks/{importer-e6LGpqHB.js → importer-CVT-JyDE.js} +12 -9
- package/dist/chunks/importer-CVT-JyDE.js.map +1 -0
- package/dist/chunks/{importer-yh_aBCU6.js → importer-Cyy6UseH.js} +7 -6
- package/dist/chunks/{importer-yh_aBCU6.js.map → importer-Cyy6UseH.js.map} +1 -1
- package/dist/chunks/{importer-iFYPEKaJ.js → importer-DPZDN40-.js} +14 -10
- package/dist/chunks/{importer-iFYPEKaJ.js.map → importer-DPZDN40-.js.map} +1 -1
- package/dist/chunks/{importer-CMmeMWlC.js → importer-e3huMZbm.js} +8 -260
- package/dist/chunks/importer-e3huMZbm.js.map +1 -0
- package/dist/chunks/input-Ccg9I22A.js +1397 -0
- package/dist/chunks/input-Ccg9I22A.js.map +1 -0
- package/dist/chunks/{json-elements-DJZRZ6jd.js → json-elements-By172SVq.js} +4 -4
- package/dist/chunks/{json-elements-DJZRZ6jd.js.map → json-elements-By172SVq.js.map} +1 -1
- package/dist/chunks/{lexicon-CT69Kd87.js → lexicon-u2SI5xcx.js} +19 -5
- package/dist/chunks/lexicon-u2SI5xcx.js.map +1 -0
- package/dist/chunks/{ontology-export-G4MqRdux.js → ontology-export-BwgMyuF0.js} +4 -3
- package/dist/chunks/{ontology-export-G4MqRdux.js.map → ontology-export-BwgMyuF0.js.map} +1 -1
- package/dist/chunks/{records-CiaWZrFH.js → records-Cgvxz-Vx.js} +2 -2
- package/dist/chunks/{records-CiaWZrFH.js.map → records-Cgvxz-Vx.js.map} +1 -1
- package/dist/chunks/{format-BpQBx8MZ.js → report-CgdsL9Hb.js} +72 -129
- package/dist/chunks/report-CgdsL9Hb.js.map +1 -0
- package/dist/chunks/sigv4-LkAzsLAu.js +247 -0
- package/dist/chunks/sigv4-LkAzsLAu.js.map +1 -0
- package/dist/chunks/{styles-BQnsga7p.js → styles-CaABMoO1.js} +76 -43
- package/dist/chunks/styles-CaABMoO1.js.map +1 -0
- package/dist/chunks/{styles-D3fRphrO.js → styles-P_gmFAOi.js} +101 -21
- package/dist/chunks/styles-P_gmFAOi.js.map +1 -0
- package/dist/chunks/{styles-yed-BF5x3_Y5.js → styles-yed-Cs1nmrjn.js} +60 -20
- package/dist/chunks/styles-yed-Cs1nmrjn.js.map +1 -0
- package/dist/chunks/{text-CzJNFOS9.js → text-BuKQVMz2.js} +2 -2
- package/dist/chunks/{text-CzJNFOS9.js.map → text-BuKQVMz2.js.map} +1 -1
- package/dist/chunks/{writer-DMKvthQE.js → writer-DvHTl36J.js} +5 -4
- package/dist/chunks/writer-DvHTl36J.js.map +1 -0
- 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 +2 -2
- package/dist/gexf.js +7 -5
- package/dist/gexf.js.map +1 -1
- package/dist/gml.js +16 -13
- package/dist/gml.js.map +1 -1
- package/dist/graph-io.js +1181 -224
- package/dist/graph-io.js.map +1 -1
- package/dist/graphml.js +3 -3
- package/dist/json.js +1 -1
- 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/sources-cypher.d.ts +1 -0
- package/dist/sources-cypher.js +1236 -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 +1367 -0
- package/dist/sources-rest.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/styles.d.ts.map +1 -1
- package/dist/src/formats/cx/styles.js +1 -0
- package/dist/src/formats/cx/styles.js.map +1 -1
- package/dist/src/formats/dot/styles.d.ts.map +1 -1
- package/dist/src/formats/dot/styles.js +3 -1
- package/dist/src/formats/dot/styles.js.map +1 -1
- package/dist/src/formats/gexf/styles.d.ts +29 -12
- package/dist/src/formats/gexf/styles.d.ts.map +1 -1
- package/dist/src/formats/gexf/styles.js +160 -31
- package/dist/src/formats/gexf/styles.js.map +1 -1
- package/dist/src/formats/gml/styles.d.ts.map +1 -1
- package/dist/src/formats/gml/styles.js +5 -4
- 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 +3 -3
- package/dist/src/formats/graphml/styles-plain.js.map +1 -1
- package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -1
- package/dist/src/formats/graphml/styles-yed.js +89 -19
- package/dist/src/formats/graphml/styles-yed.js.map +1 -1
- package/dist/src/formats/pajek/styles.d.ts.map +1 -1
- package/dist/src/formats/pajek/styles.js +1 -0
- package/dist/src/formats/pajek/styles.js.map +1 -1
- package/dist/src/formats/xgmml/styles.d.ts.map +1 -1
- package/dist/src/formats/xgmml/styles.js +1 -0
- package/dist/src/formats/xgmml/styles.js.map +1 -1
- package/dist/src/index.d.ts +8 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -1
- package/dist/src/index.js.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 +47 -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 +739 -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 +119 -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 +405 -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 +106 -0
- package/dist/src/sources/cypher/query-builder.d.ts.map +1 -0
- package/dist/src/sources/cypher/query-builder.js +236 -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 +64 -0
- package/dist/src/sources/ids.d.ts.map +1 -0
- package/dist/src/sources/ids.js +64 -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 +28 -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 +71 -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 +635 -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 +24 -0
- package/dist/src/sources/sigv4.d.ts.map +1 -0
- package/dist/src/sources/sigv4.js +182 -0
- package/dist/src/sources/sigv4.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 +665 -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/canon/enums.d.ts.map +1 -1
- package/dist/src/styles/canon/enums.js +1 -0
- package/dist/src/styles/canon/enums.js.map +1 -1
- package/dist/src/styles/cyjs/cascade.d.ts.map +1 -1
- package/dist/src/styles/cyjs/cascade.js +68 -2
- 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 +2 -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 +18 -7
- package/dist/src/styles/cyjs/emit.js.map +1 -1
- package/dist/src/styles/cyjs/mappers.d.ts +4 -1
- package/dist/src/styles/cyjs/mappers.d.ts.map +1 -1
- package/dist/src/styles/cyjs/mappers.js +2 -0
- package/dist/src/styles/cyjs/mappers.js.map +1 -1
- package/dist/src/styles/cytoscape/emit.d.ts.map +1 -1
- package/dist/src/styles/cytoscape/emit.js +59 -7
- package/dist/src/styles/cytoscape/emit.js.map +1 -1
- package/dist/src/styles/cytoscape/lexicon.d.ts +6 -0
- package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -1
- package/dist/src/styles/cytoscape/lexicon.js +26 -2
- package/dist/src/styles/cytoscape/lexicon.js.map +1 -1
- package/dist/src/styles/cytoscape/resolve.d.ts +4 -1
- package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -1
- package/dist/src/styles/cytoscape/resolve.js +10 -6
- 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 +30 -0
- package/dist/src/styles/defaults.d.ts.map +1 -1
- package/dist/src/styles/defaults.js +45 -4
- package/dist/src/styles/defaults.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/writer.d.ts.map +1 -1
- package/dist/src/styles/io/writer.js +7 -3
- package/dist/src/styles/io/writer.js.map +1 -1
- package/dist/src/styles/plan/resolve.d.ts +2 -1
- package/dist/src/styles/plan/resolve.d.ts.map +1 -1
- package/dist/src/styles/plan/resolve.js +13 -2
- package/dist/src/styles/plan/resolve.js.map +1 -1
- package/dist/src/styles/types.d.ts +19 -2
- package/dist/src/styles/types.d.ts.map +1 -1
- package/dist/src/styles/vocabulary.d.ts.map +1 -1
- package/dist/src/styles/vocabulary.js +15 -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 +11 -11
- package/dist/xgmml.js +3 -3
- package/docs/samples/people.json +6 -0
- package/package.json +29 -4
- package/src/common/report.ts +27 -7
- package/src/formats/cx/styles.ts +1 -0
- package/src/formats/dot/styles.ts +3 -1
- package/src/formats/gexf/styles.ts +185 -37
- package/src/formats/gml/styles.ts +5 -4
- package/src/formats/graphml/styles-plain.ts +3 -9
- package/src/formats/graphml/styles-yed.ts +93 -20
- package/src/formats/pajek/styles.ts +1 -0
- package/src/formats/xgmml/styles.ts +1 -0
- package/src/index.ts +90 -0
- package/src/registry.ts +326 -1
- package/src/sources/builtins.ts +56 -0
- package/src/sources/codes.ts +235 -0
- package/src/sources/context.ts +893 -0
- package/src/sources/credentials.ts +409 -0
- package/src/sources/cypher/descriptor.ts +125 -0
- package/src/sources/cypher/flatten.ts +323 -0
- package/src/sources/cypher/index.ts +498 -0
- package/src/sources/cypher/params.ts +41 -0
- package/src/sources/cypher/profiles.ts +78 -0
- package/src/sources/cypher/query-builder.ts +294 -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 +74 -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 +29 -0
- package/src/sources/registry.ts +325 -0
- package/src/sources/rest/descriptor.ts +74 -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 +760 -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 +207 -0
- package/src/sources/testing.ts +210 -0
- package/src/sources/types.ts +741 -0
- package/src/styles/canon/enums.ts +1 -0
- package/src/styles/cyjs/cascade.ts +81 -2
- package/src/styles/cyjs/defaults-table.ts +2 -0
- package/src/styles/cyjs/emit.ts +18 -7
- package/src/styles/cyjs/mappers.ts +6 -1
- package/src/styles/cytoscape/emit.ts +61 -7
- package/src/styles/cytoscape/lexicon.ts +28 -2
- package/src/styles/cytoscape/resolve.ts +22 -6
- package/src/styles/cytoscape/translate.ts +11 -11
- package/src/styles/defaults.ts +93 -4
- package/src/styles/io/block.ts +10 -0
- package/src/styles/io/writer.ts +8 -3
- package/src/styles/plan/resolve.ts +14 -2
- package/src/styles/types.ts +28 -2
- package/src/styles/vocabulary.ts +15 -1
- package/src/types.ts +19 -5
- package/dist/chunks/block-DiGq58c3.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/format-BpQBx8MZ.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/lexicon-CT69Kd87.js.map +0 -1
- package/dist/chunks/styles-BQnsga7p.js.map +0 -1
- package/dist/chunks/styles-D3fRphrO.js.map +0 -1
- package/dist/chunks/styles-yed-BF5x3_Y5.js.map +0 -1
- package/dist/chunks/writer-DMKvthQE.js.map +0 -1
|
@@ -0,0 +1,663 @@
|
|
|
1
|
+
import { b as throwIfAborted } from "./input-Ccg9I22A.js";
|
|
2
|
+
import { f as failOn, w as warnOn, o as originOf, a as applyCredential } from "./credentials-BiQsnMTb.js";
|
|
3
|
+
const RETRY_STATUSES = /* @__PURE__ */ new Set([429, 502, 503, 504]);
|
|
4
|
+
const NULL_BODY_STATUSES = /* @__PURE__ */ new Set([101, 204, 205, 304]);
|
|
5
|
+
const REDIRECT_STATUSES = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);
|
|
6
|
+
const MAX_REDIRECTS = 5;
|
|
7
|
+
class LimitStop extends Error {
|
|
8
|
+
/**
|
|
9
|
+
* Create one.
|
|
10
|
+
* @param limit - the cap's option name
|
|
11
|
+
* @param value - the value that reached it
|
|
12
|
+
*/
|
|
13
|
+
constructor(limit, value) {
|
|
14
|
+
super(`${limit} reached at ${String(value)}`);
|
|
15
|
+
this.limit = limit;
|
|
16
|
+
this.value = value;
|
|
17
|
+
this.name = "LimitStop";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function detectRuntime() {
|
|
21
|
+
const g = globalThis;
|
|
22
|
+
if (typeof g.process?.versions?.node === "string") {
|
|
23
|
+
return "node";
|
|
24
|
+
}
|
|
25
|
+
if (typeof g.importScripts === "function") {
|
|
26
|
+
return "worker";
|
|
27
|
+
}
|
|
28
|
+
return g.window !== void 0 && g.document !== void 0 ? "browser" : "other";
|
|
29
|
+
}
|
|
30
|
+
function originPath(url) {
|
|
31
|
+
return `${originOf(url)}${url.pathname}`;
|
|
32
|
+
}
|
|
33
|
+
function isLoopback(hostname) {
|
|
34
|
+
const host = hostname.replaceAll(/(?:^\[)|(?:\]$)/g, "").toLowerCase();
|
|
35
|
+
return host === "localhost" || host.endsWith(".localhost") || /^127(\.\d{1,3}){3}$/.test(host) || host === "::1";
|
|
36
|
+
}
|
|
37
|
+
function isLocalNetwork(hostname) {
|
|
38
|
+
const host = hostname.replaceAll(/(?:^\[)|(?:\]$)/g, "").toLowerCase();
|
|
39
|
+
return isLoopback(host) || host.endsWith(".local") || /^10(\.\d{1,3}){3}$/.test(host) || /^192\.168(\.\d{1,3}){2}$/.test(host) || /^169\.254(\.\d{1,3}){2}$/.test(host) || /^172\.(1[6-9]|2\d|3[01])(\.\d{1,3}){2}$/.test(host) || /^f[cd][0-9a-f]{2}:/.test(host) || host.startsWith("fe80:");
|
|
40
|
+
}
|
|
41
|
+
const PACERS = /* @__PURE__ */ new Map();
|
|
42
|
+
function sleep(ms, signal) {
|
|
43
|
+
return new Promise((resolve, reject) => {
|
|
44
|
+
if (signal.aborted) {
|
|
45
|
+
reject(signal.reason);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const onAbort = () => {
|
|
49
|
+
clearTimeout(timer);
|
|
50
|
+
reject(signal.reason);
|
|
51
|
+
};
|
|
52
|
+
const timer = setTimeout(() => {
|
|
53
|
+
signal.removeEventListener("abort", onAbort);
|
|
54
|
+
resolve();
|
|
55
|
+
}, ms);
|
|
56
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function retryAfterMs(response) {
|
|
60
|
+
const value = response.headers.get("retry-after");
|
|
61
|
+
if (value === null) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
const seconds = Number(value);
|
|
65
|
+
if (Number.isFinite(seconds)) {
|
|
66
|
+
return Math.max(0, seconds * 1e3);
|
|
67
|
+
}
|
|
68
|
+
const date = Date.parse(value);
|
|
69
|
+
return Number.isNaN(date) ? null : Math.max(0, date - Date.now());
|
|
70
|
+
}
|
|
71
|
+
function boundOrigins(credential, endpoint) {
|
|
72
|
+
if (credential === void 0) {
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
75
|
+
if (credential.origins.length > 0) {
|
|
76
|
+
return credential.origins;
|
|
77
|
+
}
|
|
78
|
+
return endpoint === null ? [] : [originOf(endpoint)];
|
|
79
|
+
}
|
|
80
|
+
class SourceFetcher {
|
|
81
|
+
/**
|
|
82
|
+
* Set up one call.
|
|
83
|
+
* @param input - the source, options, report and counters
|
|
84
|
+
*/
|
|
85
|
+
constructor(input) {
|
|
86
|
+
this.input = input;
|
|
87
|
+
this.state = { requests: 0, bytes: 0, finish: null };
|
|
88
|
+
this.controller = new AbortController();
|
|
89
|
+
this.warnedLimits = /* @__PURE__ */ new Set();
|
|
90
|
+
this.onCallerAbort = () => {
|
|
91
|
+
this.controller.abort(this.input.options.signal?.reason);
|
|
92
|
+
};
|
|
93
|
+
const { options, endpoint } = input;
|
|
94
|
+
this.runtime = input.runtime ?? detectRuntime();
|
|
95
|
+
this.fetchImpl = options.fetch ?? ((...args) => globalThis.fetch(...args));
|
|
96
|
+
this.limitOptions = options.limits ?? {};
|
|
97
|
+
const retry = options.retry === false ? { retries: 0 } : options.retry ?? {};
|
|
98
|
+
this.retry = {
|
|
99
|
+
retries: retry.retries ?? 3,
|
|
100
|
+
baseDelayMs: retry.baseDelayMs ?? 500,
|
|
101
|
+
maxDelayMs: retry.maxDelayMs ?? 3e4
|
|
102
|
+
};
|
|
103
|
+
this.credentialOrigins = boundOrigins(options.credential, endpoint);
|
|
104
|
+
const callerSignal = options.signal;
|
|
105
|
+
if (callerSignal?.aborted === true) {
|
|
106
|
+
this.controller.abort(callerSignal.reason);
|
|
107
|
+
} else {
|
|
108
|
+
callerSignal?.addEventListener("abort", this.onCallerAbort, { once: true });
|
|
109
|
+
}
|
|
110
|
+
const { timeoutMs } = this.limitOptions;
|
|
111
|
+
this.timer = timeoutMs === void 0 ? void 0 : setTimeout(() => {
|
|
112
|
+
this.timeOut(timeoutMs);
|
|
113
|
+
}, timeoutMs);
|
|
114
|
+
this.signal = this.controller.signal;
|
|
115
|
+
}
|
|
116
|
+
/** Clear the timeout and detach from the caller's signal. */
|
|
117
|
+
dispose() {
|
|
118
|
+
clearTimeout(this.timer);
|
|
119
|
+
this.input.options.signal?.removeEventListener("abort", this.onCallerAbort);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Abort the load with E_SOURCE_TIMEOUT as the reason.
|
|
123
|
+
* @param timeoutMs - the limit that passed
|
|
124
|
+
*/
|
|
125
|
+
timeOut(timeoutMs) {
|
|
126
|
+
try {
|
|
127
|
+
failOn(this.input.report, "E_SOURCE_TIMEOUT", `the load ran longer than ${String(timeoutMs)} ms`, {
|
|
128
|
+
timeoutMs,
|
|
129
|
+
serverSide: false
|
|
130
|
+
});
|
|
131
|
+
} catch (err) {
|
|
132
|
+
this.controller.abort(err);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* A cap was reached: fail under "error", else warn once and stop.
|
|
137
|
+
* @param limit - the option name
|
|
138
|
+
* @param value - the value reached
|
|
139
|
+
*/
|
|
140
|
+
limitHit(limit, value) {
|
|
141
|
+
const { report } = this.input;
|
|
142
|
+
if ((this.limitOptions.onLimit ?? "stop") === "error") {
|
|
143
|
+
failOn(report, "E_SOURCE_LIMIT", `${limit} of ${String(value)} reached`, { limit, value });
|
|
144
|
+
}
|
|
145
|
+
if (!this.warnedLimits.has(limit)) {
|
|
146
|
+
this.warnedLimits.add(limit);
|
|
147
|
+
warnOn(report, "W_SOURCE_LIMIT", `${limit} reached at ${String(value)}; what came first is kept`, {
|
|
148
|
+
limit,
|
|
149
|
+
value
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
throw new LimitStop(limit, value);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Whether a cap is reached; warns once under "stop", throws under "error".
|
|
156
|
+
* @returns true when the source should stop
|
|
157
|
+
*/
|
|
158
|
+
reached() {
|
|
159
|
+
const { nodes, edges } = this.input.counts();
|
|
160
|
+
const caps = [
|
|
161
|
+
["maxNodes", nodes, this.limitOptions.maxNodes],
|
|
162
|
+
["maxEdges", edges, this.limitOptions.maxEdges],
|
|
163
|
+
["maxBytes", this.state.bytes, this.limitOptions.maxBytes],
|
|
164
|
+
["maxRequests", this.state.requests, this.limitOptions.maxRequests]
|
|
165
|
+
];
|
|
166
|
+
const hit = caps.find(([, value, cap]) => cap !== void 0 && value >= cap);
|
|
167
|
+
if (hit === void 0) {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
171
|
+
this.limitHit(hit[0], hit[1]);
|
|
172
|
+
} catch (err) {
|
|
173
|
+
if (!(err instanceof LimitStop)) {
|
|
174
|
+
throw err;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Report progress.
|
|
181
|
+
* @param done - how much is done
|
|
182
|
+
* @param total - the total, when known
|
|
183
|
+
* @param unit - what is counted
|
|
184
|
+
*/
|
|
185
|
+
progress(done, total, unit = "items") {
|
|
186
|
+
if (unit === "bytes") {
|
|
187
|
+
this.byteTotal = total;
|
|
188
|
+
}
|
|
189
|
+
this.input.options.onProgress?.(done, total, unit);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Resolve a request URL against the endpoint and refuse what must never be sent.
|
|
193
|
+
* @param target - the source's URL
|
|
194
|
+
* @returns the absolute URL
|
|
195
|
+
*/
|
|
196
|
+
resolve(target) {
|
|
197
|
+
const { report, endpoint } = this.input;
|
|
198
|
+
let url;
|
|
199
|
+
try {
|
|
200
|
+
url = endpoint === null ? new URL(target) : new URL(target, endpoint);
|
|
201
|
+
} catch {
|
|
202
|
+
return failOn(report, "E_SOURCE_PARAM", "a relative URL needs an endpoint", {
|
|
203
|
+
name: "endpoint",
|
|
204
|
+
reason: "missing"
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
if (url.username !== "" || url.password !== "") {
|
|
208
|
+
failOn(report, "E_SOURCE_PARAM", "a URL may not carry a user name or password", {
|
|
209
|
+
name: "endpoint",
|
|
210
|
+
reason: "credentials-in-url"
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
const page = globalThis.location;
|
|
214
|
+
const plain = url.protocol === "http:" || url.protocol === "ws:";
|
|
215
|
+
if (this.runtime === "browser" && page?.protocol === "https:" && plain && !isLoopback(url.hostname)) {
|
|
216
|
+
failOn(report, "E_SOURCE_RUNTIME", "an https page cannot reach a plain http endpoint", {
|
|
217
|
+
runtime: this.runtime,
|
|
218
|
+
reason: "insecure-endpoint"
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
return url;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Wait for a slot under the descriptor's rate limit.
|
|
225
|
+
* @param url - the request URL
|
|
226
|
+
* @returns a release function
|
|
227
|
+
*/
|
|
228
|
+
async pace(url) {
|
|
229
|
+
const rate = this.input.descriptor?.rateLimit;
|
|
230
|
+
if (rate === void 0) {
|
|
231
|
+
return () => void 0;
|
|
232
|
+
}
|
|
233
|
+
const key = `${this.input.id} ${originOf(url)}`;
|
|
234
|
+
const p = PACERS.get(key) ?? { active: 0, times: [], waiters: [] };
|
|
235
|
+
PACERS.set(key, p);
|
|
236
|
+
for (; ; ) {
|
|
237
|
+
const now = Date.now();
|
|
238
|
+
p.times = p.times.filter((t) => now - t < rate.perMs);
|
|
239
|
+
if (rate.concurrent !== void 0 && p.active >= rate.concurrent) {
|
|
240
|
+
await new Promise((r) => p.waiters.push(r));
|
|
241
|
+
} else if (p.times.length >= rate.requests) {
|
|
242
|
+
await sleep(Math.max(1, rate.perMs - (now - p.times[0])), this.signal);
|
|
243
|
+
} else {
|
|
244
|
+
p.times.push(now);
|
|
245
|
+
p.active++;
|
|
246
|
+
return () => {
|
|
247
|
+
p.active--;
|
|
248
|
+
p.waiters.shift()?.();
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Count the decoded bytes of a body as it is read, against `maxBytes`.
|
|
255
|
+
* @param response - the response
|
|
256
|
+
* @returns the response, with a counted body
|
|
257
|
+
*/
|
|
258
|
+
counted(response) {
|
|
259
|
+
if (response.body === null || NULL_BODY_STATUSES.has(response.status)) {
|
|
260
|
+
return response;
|
|
261
|
+
}
|
|
262
|
+
const counter = new TransformStream({
|
|
263
|
+
transform: (chunk, ctrl) => {
|
|
264
|
+
this.state.bytes += chunk.byteLength;
|
|
265
|
+
const cap = this.limitOptions.maxBytes;
|
|
266
|
+
if (cap !== void 0 && this.state.bytes > cap) {
|
|
267
|
+
this.limitHit("maxBytes", this.state.bytes);
|
|
268
|
+
}
|
|
269
|
+
if (this.input.unit === "bytes") {
|
|
270
|
+
this.input.options.onProgress?.(this.state.bytes, this.byteTotal, "bytes");
|
|
271
|
+
}
|
|
272
|
+
ctrl.enqueue(chunk);
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
return new Response(response.body.pipeThrough(counter), {
|
|
276
|
+
status: response.status,
|
|
277
|
+
statusText: response.statusText,
|
|
278
|
+
headers: response.headers
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Raise the coded issue of a status outside 200 to 299.
|
|
283
|
+
* @param response - the response
|
|
284
|
+
* @param url - the request URL
|
|
285
|
+
* @returns never; it throws
|
|
286
|
+
*/
|
|
287
|
+
async statusFailure(response, url) {
|
|
288
|
+
await response.body?.cancel().catch(() => void 0);
|
|
289
|
+
const { report } = this.input;
|
|
290
|
+
const { status } = response;
|
|
291
|
+
const where = originPath(url);
|
|
292
|
+
switch (status) {
|
|
293
|
+
case 401:
|
|
294
|
+
return failOn(report, "E_SOURCE_AUTH", `${where} answered 401`, {
|
|
295
|
+
origin: originOf(url),
|
|
296
|
+
status,
|
|
297
|
+
scheme: response.headers.get("www-authenticate")?.split(/\s/)[0] ?? null,
|
|
298
|
+
serverCode: null
|
|
299
|
+
});
|
|
300
|
+
case 403:
|
|
301
|
+
return failOn(report, "E_SOURCE_FORBIDDEN", `${where} answered 403`, { status, serverCode: null });
|
|
302
|
+
case 404:
|
|
303
|
+
return failOn(report, "E_SOURCE_NOT_FOUND", `${where} answered 404`, { what: "url", value: where });
|
|
304
|
+
case 429:
|
|
305
|
+
return failOn(report, "E_SOURCE_QUOTA", `${where} answered 429`, {
|
|
306
|
+
retryAfterMs: retryAfterMs(response)
|
|
307
|
+
});
|
|
308
|
+
default:
|
|
309
|
+
return failOn(report, "E_FETCH", `${where} answered ${String(status)}`, { url: where, status });
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Build one request, with the credential when the URL's origin is bound.
|
|
314
|
+
* @param url - the request URL
|
|
315
|
+
* @param init - the source's init
|
|
316
|
+
* @param attach - whether the credential goes with it
|
|
317
|
+
* @returns the request
|
|
318
|
+
*/
|
|
319
|
+
async request(url, init, attach) {
|
|
320
|
+
const { options, report } = this.input;
|
|
321
|
+
const headers = new Headers(init.headers);
|
|
322
|
+
if (options.userAgent !== void 0 && this.runtime === "node") {
|
|
323
|
+
headers.set("User-Agent", options.userAgent);
|
|
324
|
+
}
|
|
325
|
+
const { retry: _retry, idempotent: _idempotent, allowStatus: _allowStatus, ...requestInit } = init;
|
|
326
|
+
const guarded = {
|
|
327
|
+
cache: "no-store",
|
|
328
|
+
credentials: "omit",
|
|
329
|
+
redirect: this.runtime === "browser" ? "error" : "manual"
|
|
330
|
+
};
|
|
331
|
+
const request = new Request(url, { ...requestInit, headers, signal: this.signal, ...attach ? guarded : {} });
|
|
332
|
+
if (!attach || options.credential === void 0) {
|
|
333
|
+
return request;
|
|
334
|
+
}
|
|
335
|
+
const signed = await applyCredential(options.credential, request);
|
|
336
|
+
const after = new URL(signed.url);
|
|
337
|
+
if (originOf(after) !== originOf(url)) {
|
|
338
|
+
failOn(report, "E_SOURCE_REDIRECT", "the credential changed the request's origin", {
|
|
339
|
+
from: originPath(url),
|
|
340
|
+
to: originPath(after)
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
return signed;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Send one request, following same-origin redirects by hand while a credential is attached.
|
|
347
|
+
* @param url - the request URL
|
|
348
|
+
* @param init - the source's init
|
|
349
|
+
* @param hops - redirects followed so far
|
|
350
|
+
* @returns the response
|
|
351
|
+
*/
|
|
352
|
+
async send(url, init, hops) {
|
|
353
|
+
const { options, report } = this.input;
|
|
354
|
+
const attach = options.credential !== void 0 && this.credentialOrigins.includes(originOf(url));
|
|
355
|
+
const plain = url.protocol === "http:" || url.protocol === "ws:";
|
|
356
|
+
if (attach && plain && !isLoopback(url.hostname) && options.allowInsecure !== true) {
|
|
357
|
+
failOn(report, "E_SOURCE_PARAM", "a credential is never sent without TLS", {
|
|
358
|
+
name: "endpoint",
|
|
359
|
+
reason: "insecure-endpoint"
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
const request = await this.request(url, init, attach);
|
|
363
|
+
this.state.requests++;
|
|
364
|
+
const response = await this.fetchImpl(request);
|
|
365
|
+
if (!attach || !REDIRECT_STATUSES.has(response.status)) {
|
|
366
|
+
return response;
|
|
367
|
+
}
|
|
368
|
+
const location = response.headers.get("location");
|
|
369
|
+
await response.body?.cancel().catch(() => void 0);
|
|
370
|
+
const to = location === null ? null : new URL(location, url);
|
|
371
|
+
if (to === null || originOf(to) !== originOf(url) || hops >= MAX_REDIRECTS) {
|
|
372
|
+
return failOn(report, "E_SOURCE_REDIRECT", "a redirect while a credential was attached", {
|
|
373
|
+
from: originPath(url),
|
|
374
|
+
to: to === null ? null : originPath(to)
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
return this.send(to, response.status === 303 ? { ...init, method: "GET", body: null } : init, hops + 1);
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Whether a browser refused a credentialed request because it was redirected (sent with
|
|
381
|
+
* `redirect: "error"`, which fails like a CORS refusal): the same URL once more, WITHOUT the
|
|
382
|
+
* credential, under `redirect: "manual"`, whose answer to a redirect is an opaque redirect.
|
|
383
|
+
* @param url - the refused URL
|
|
384
|
+
* @returns true when the URL answers with a redirect
|
|
385
|
+
*/
|
|
386
|
+
async redirects(url) {
|
|
387
|
+
if (this.input.options.retry === false) {
|
|
388
|
+
return false;
|
|
389
|
+
}
|
|
390
|
+
try {
|
|
391
|
+
const response = await this.fetchImpl(url, {
|
|
392
|
+
method: "GET",
|
|
393
|
+
redirect: "manual",
|
|
394
|
+
credentials: "omit",
|
|
395
|
+
cache: "no-store",
|
|
396
|
+
signal: this.signal
|
|
397
|
+
});
|
|
398
|
+
await response.body?.cancel().catch(() => void 0);
|
|
399
|
+
return response.type === "opaqueredirect";
|
|
400
|
+
} catch {
|
|
401
|
+
throwIfAborted(this.signal);
|
|
402
|
+
return false;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Why the browser refused a request: one bodyless no-cors GET of the origin's root.
|
|
407
|
+
* @param url - the refused URL
|
|
408
|
+
* @returns the cause
|
|
409
|
+
*/
|
|
410
|
+
async diagnose(url) {
|
|
411
|
+
const page = globalThis.location;
|
|
412
|
+
if (page?.hostname !== void 0 && !isLocalNetwork(page.hostname) && isLocalNetwork(url.hostname)) {
|
|
413
|
+
return "local-network";
|
|
414
|
+
}
|
|
415
|
+
if (this.input.options.retry === false) {
|
|
416
|
+
return "unknown";
|
|
417
|
+
}
|
|
418
|
+
try {
|
|
419
|
+
await this.fetchImpl(`${originOf(url)}/`, {
|
|
420
|
+
mode: "no-cors",
|
|
421
|
+
method: "GET",
|
|
422
|
+
credentials: "omit",
|
|
423
|
+
cache: "no-store",
|
|
424
|
+
signal: this.signal
|
|
425
|
+
});
|
|
426
|
+
return "cors";
|
|
427
|
+
} catch {
|
|
428
|
+
throwIfAborted(this.signal);
|
|
429
|
+
return "unreachable";
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* A full-jitter backoff delay.
|
|
434
|
+
* @param attempt - the attempt that failed, from 0
|
|
435
|
+
* @returns milliseconds
|
|
436
|
+
*/
|
|
437
|
+
backoff(attempt) {
|
|
438
|
+
const jitter = Math.random();
|
|
439
|
+
return jitter * Math.min(this.retry.maxDelayMs, this.retry.baseDelayMs * 2 ** attempt);
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* What a network failure becomes: a retry (true), or the coded issue.
|
|
443
|
+
* @param err - what fetch threw
|
|
444
|
+
* @param url - the request URL
|
|
445
|
+
* @param attempt - the attempt, from 0
|
|
446
|
+
* @param tries - the retries allowed
|
|
447
|
+
* @param statuses - the statuses seen so far
|
|
448
|
+
* @param probeRedirect - whether a refused redirect may explain it (a credentialed GET or HEAD)
|
|
449
|
+
* @returns true to retry
|
|
450
|
+
*/
|
|
451
|
+
async networkFailure(err, url, attempt, tries, statuses, probeRedirect) {
|
|
452
|
+
throwIfAborted(this.signal);
|
|
453
|
+
if (!(err instanceof TypeError)) {
|
|
454
|
+
throw err;
|
|
455
|
+
}
|
|
456
|
+
const { report } = this.input;
|
|
457
|
+
statuses.push(null);
|
|
458
|
+
if (this.runtime === "browser") {
|
|
459
|
+
if (probeRedirect && await this.redirects(url)) {
|
|
460
|
+
return failOn(report, "E_SOURCE_REDIRECT", "a redirect while a credential was attached", {
|
|
461
|
+
from: originPath(url),
|
|
462
|
+
to: null
|
|
463
|
+
});
|
|
464
|
+
}
|
|
465
|
+
const cause = await this.diagnose(url);
|
|
466
|
+
if (cause === "cors" && attempt === 0 && tries > 0) {
|
|
467
|
+
await sleep(this.backoff(0), this.signal);
|
|
468
|
+
return true;
|
|
469
|
+
}
|
|
470
|
+
return failOn(report, "E_SOURCE_BLOCKED", `the browser refused ${originPath(url)}`, {
|
|
471
|
+
url: originPath(url),
|
|
472
|
+
cause
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
if (attempt < tries) {
|
|
476
|
+
await sleep(this.backoff(attempt), this.signal);
|
|
477
|
+
return true;
|
|
478
|
+
}
|
|
479
|
+
return failOn(report, "E_FETCH", `${originPath(url)} could not be reached`, {
|
|
480
|
+
url: originPath(url),
|
|
481
|
+
status: null
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* Send one attempt under the request cap and the rate limit.
|
|
486
|
+
* @param url - the request URL
|
|
487
|
+
* @param init - the source's init
|
|
488
|
+
* @param attempt - the attempt, from 0
|
|
489
|
+
* @param tries - the retries allowed
|
|
490
|
+
* @param statuses - the statuses seen so far
|
|
491
|
+
* @returns the response, or null to try again
|
|
492
|
+
*/
|
|
493
|
+
async attempt(url, init, attempt, tries, statuses) {
|
|
494
|
+
const cap = this.limitOptions.maxRequests;
|
|
495
|
+
if (cap !== void 0 && this.state.requests >= cap) {
|
|
496
|
+
this.limitHit("maxRequests", this.state.requests);
|
|
497
|
+
}
|
|
498
|
+
const release = await this.pace(url);
|
|
499
|
+
try {
|
|
500
|
+
return await this.send(url, init, 0);
|
|
501
|
+
} catch (err) {
|
|
502
|
+
const method = (init.method ?? "GET").toUpperCase();
|
|
503
|
+
const credentialed = this.input.options.credential !== void 0 && this.credentialOrigins.includes(originOf(url));
|
|
504
|
+
await this.networkFailure(
|
|
505
|
+
err,
|
|
506
|
+
url,
|
|
507
|
+
attempt,
|
|
508
|
+
tries,
|
|
509
|
+
statuses,
|
|
510
|
+
credentialed && (method === "GET" || method === "HEAD")
|
|
511
|
+
);
|
|
512
|
+
return null;
|
|
513
|
+
} finally {
|
|
514
|
+
release();
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
/**
|
|
518
|
+
* The guarded fetch handed to sources.
|
|
519
|
+
* @param target - the URL, relative to the endpoint or absolute
|
|
520
|
+
* @param init - fetch's init and the source options
|
|
521
|
+
* @returns the response
|
|
522
|
+
*/
|
|
523
|
+
async fetch(target, init = {}) {
|
|
524
|
+
throwIfAborted(this.signal);
|
|
525
|
+
const url = this.resolve(target);
|
|
526
|
+
const method = (init.method ?? "GET").toUpperCase();
|
|
527
|
+
const idempotent = method === "GET" || method === "HEAD" || init.idempotent === true;
|
|
528
|
+
const tries = init.retry === false || !idempotent ? 0 : this.retry.retries;
|
|
529
|
+
const statuses = [];
|
|
530
|
+
for (let attempt = 0; ; attempt++) {
|
|
531
|
+
const response = await this.attempt(url, init, attempt, tries, statuses);
|
|
532
|
+
if (response === null) {
|
|
533
|
+
continue;
|
|
534
|
+
}
|
|
535
|
+
if (!RETRY_STATUSES.has(response.status) || attempt >= tries) {
|
|
536
|
+
return this.settle(response, url, init, attempt, statuses);
|
|
537
|
+
}
|
|
538
|
+
statuses.push(response.status);
|
|
539
|
+
const asked = retryAfterMs(response);
|
|
540
|
+
await response.body?.cancel().catch(() => void 0);
|
|
541
|
+
await sleep(asked === null ? this.backoff(attempt) : Math.min(asked, this.retry.maxDelayMs), this.signal);
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
/**
|
|
545
|
+
* What a fetch returns: a retried success warned, a failing status raised, the body counted.
|
|
546
|
+
* @param response - the response
|
|
547
|
+
* @param url - the request URL
|
|
548
|
+
* @param init - the source's init
|
|
549
|
+
* @param attempt - the attempt, from 0
|
|
550
|
+
* @param statuses - the statuses retried before it
|
|
551
|
+
* @returns the counted response
|
|
552
|
+
*/
|
|
553
|
+
settle(response, url, init, attempt, statuses) {
|
|
554
|
+
if (statuses.length > 0 && response.ok) {
|
|
555
|
+
const attempts = attempt + 1;
|
|
556
|
+
warnOn(
|
|
557
|
+
this.input.report,
|
|
558
|
+
"W_SOURCE_RETRIED",
|
|
559
|
+
`${originPath(url)} answered after ${String(attempts)} attempts`,
|
|
560
|
+
{
|
|
561
|
+
attempts,
|
|
562
|
+
statuses
|
|
563
|
+
}
|
|
564
|
+
);
|
|
565
|
+
}
|
|
566
|
+
if (!response.ok && response.status !== 304 && !(init.allowStatus ?? []).includes(response.status)) {
|
|
567
|
+
return this.statusFailure(response, url);
|
|
568
|
+
}
|
|
569
|
+
return this.counted(response);
|
|
570
|
+
}
|
|
571
|
+
/**
|
|
572
|
+
* Fetch and parse JSON.
|
|
573
|
+
* @param target - the URL
|
|
574
|
+
* @param init - the request init
|
|
575
|
+
* @returns the parsed body
|
|
576
|
+
*/
|
|
577
|
+
async fetchJson(target, init = {}) {
|
|
578
|
+
const headers = new Headers(init.headers);
|
|
579
|
+
if (!headers.has("accept")) {
|
|
580
|
+
headers.set("Accept", "application/json");
|
|
581
|
+
}
|
|
582
|
+
const response = await this.fetch(target, { ...init, headers });
|
|
583
|
+
let text;
|
|
584
|
+
try {
|
|
585
|
+
text = await response.text();
|
|
586
|
+
} catch (err) {
|
|
587
|
+
throwIfAborted(this.signal);
|
|
588
|
+
throw err;
|
|
589
|
+
}
|
|
590
|
+
try {
|
|
591
|
+
return JSON.parse(text);
|
|
592
|
+
} catch {
|
|
593
|
+
return failOn(this.input.report, "E_SOURCE_RESPONSE", "the response is not JSON", {
|
|
594
|
+
expected: "json",
|
|
595
|
+
contentType: response.headers.get("content-type")
|
|
596
|
+
});
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
/**
|
|
600
|
+
* The report's `source` member as it stands.
|
|
601
|
+
* @param next - where to resume
|
|
602
|
+
* @returns the info
|
|
603
|
+
*/
|
|
604
|
+
info(next) {
|
|
605
|
+
const { finish } = this.state;
|
|
606
|
+
const { id, descriptor, endpoint } = this.input;
|
|
607
|
+
return Object.freeze({
|
|
608
|
+
id,
|
|
609
|
+
version: descriptor?.version ?? 1,
|
|
610
|
+
endpoint: endpoint === null ? null : originPath(endpoint),
|
|
611
|
+
requests: this.state.requests,
|
|
612
|
+
bytes: this.state.bytes,
|
|
613
|
+
next,
|
|
614
|
+
...finish?.server === void 0 ? {} : { server: finish.server },
|
|
615
|
+
...finish?.budget === void 0 ? {} : { budget: finish.budget },
|
|
616
|
+
...finish?.validators === void 0 ? {} : { validators: finish.validators }
|
|
617
|
+
});
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
const CONTEXT_OPTIONS = /* @__PURE__ */ new WeakMap();
|
|
621
|
+
function transportOptions(ctx) {
|
|
622
|
+
const options = CONTEXT_OPTIONS.get(ctx) ?? {};
|
|
623
|
+
return { credential: options.credential, allowInsecure: options.allowInsecure, userAgent: options.userAgent };
|
|
624
|
+
}
|
|
625
|
+
function createSourceContext(input) {
|
|
626
|
+
const f = new SourceFetcher(input);
|
|
627
|
+
const limits = Object.freeze({ ...input.options.limits, reached: () => f.reached() });
|
|
628
|
+
const ctx = Object.freeze({
|
|
629
|
+
fetch: (target, init) => f.fetch(target, init),
|
|
630
|
+
fetchJson: (target, init) => f.fetchJson(target, init),
|
|
631
|
+
endpoint: input.endpoint,
|
|
632
|
+
signal: f.signal,
|
|
633
|
+
report: input.report,
|
|
634
|
+
limits,
|
|
635
|
+
cursor: input.cursor,
|
|
636
|
+
runtime: f.runtime,
|
|
637
|
+
progress: (done, total, unit) => {
|
|
638
|
+
f.progress(done, total, unit);
|
|
639
|
+
},
|
|
640
|
+
finish: (result) => {
|
|
641
|
+
f.state.finish = result ?? {};
|
|
642
|
+
return Object.freeze({ ...input.report.finish(), source: f.info(result?.next ?? null) });
|
|
643
|
+
}
|
|
644
|
+
});
|
|
645
|
+
CONTEXT_OPTIONS.set(ctx, input.options);
|
|
646
|
+
return {
|
|
647
|
+
ctx,
|
|
648
|
+
state: f.state,
|
|
649
|
+
info: (next) => f.info(next),
|
|
650
|
+
dispose: () => {
|
|
651
|
+
f.dispose();
|
|
652
|
+
}
|
|
653
|
+
};
|
|
654
|
+
}
|
|
655
|
+
export {
|
|
656
|
+
LimitStop as L,
|
|
657
|
+
createSourceContext as c,
|
|
658
|
+
detectRuntime as d,
|
|
659
|
+
isLoopback as i,
|
|
660
|
+
sleep as s,
|
|
661
|
+
transportOptions as t
|
|
662
|
+
};
|
|
663
|
+
//# sourceMappingURL=context-cgmmOxZ2.js.map
|