@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
package/src/registry.ts
CHANGED
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
GraphBuilder,
|
|
14
14
|
type GraphBuilderOptions,
|
|
15
15
|
GraphFormatError,
|
|
16
|
+
type GraphSink,
|
|
16
17
|
type GraphSnapshot,
|
|
17
18
|
} from "@graphty/graph-format";
|
|
18
19
|
|
|
@@ -46,6 +47,21 @@ import { oboExporter, oboImporter } from "./formats/obo/index.js";
|
|
|
46
47
|
import { pajekExporter, pajekImporter } from "./formats/pajek/index.js";
|
|
47
48
|
import { xgmmlExporter, xgmmlImporter } from "./formats/xgmml/index.js";
|
|
48
49
|
import { type FormatName, rankFormats, SNIFF_HEAD_BYTES, type SniffHints, type SniffResult } from "./sniff.js";
|
|
50
|
+
import { builtinSources } from "./sources/builtins.js";
|
|
51
|
+
import { type SourceParamsMap } from "./sources/params.js";
|
|
52
|
+
import { SourceRegistry } from "./sources/registry.js";
|
|
53
|
+
import {
|
|
54
|
+
type ExpandRequest,
|
|
55
|
+
type GraphSource,
|
|
56
|
+
type LazySource,
|
|
57
|
+
type LoadFromSourceOptions,
|
|
58
|
+
type SourceFreshness,
|
|
59
|
+
type SourceInfo,
|
|
60
|
+
type SourceListing,
|
|
61
|
+
type SourceListQuery,
|
|
62
|
+
type SourceProbe,
|
|
63
|
+
type SourceValidators,
|
|
64
|
+
} from "./sources/types.js";
|
|
49
65
|
import { extractStyles, type StyleImportOptions } from "./styles/io/generic.js";
|
|
50
66
|
import { isKeptGraphtyProperty, prepareStyleExport } from "./styles/io/writer.js";
|
|
51
67
|
import type { ExtractedStyles } from "./styles/types.js";
|
|
@@ -323,6 +339,150 @@ export class FormatRegistry {
|
|
|
323
339
|
|
|
324
340
|
private readonly exporterMap = new Map<string, GraphExporter>();
|
|
325
341
|
|
|
342
|
+
private readonly sources = new SourceRegistry(this, {
|
|
343
|
+
newBuilder: (options, format) => seededBuilder(options as ImportGraphOptions, format),
|
|
344
|
+
freeze: (format, builder, report, options) =>
|
|
345
|
+
result(
|
|
346
|
+
{ importer: { format } as GraphImporter, sniff: null, source: "", peeked: null, warnings: [] },
|
|
347
|
+
builder,
|
|
348
|
+
report,
|
|
349
|
+
options as ImportGraphOptions,
|
|
350
|
+
),
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* Register a network source, or a lazy one whose code loads on first use. Source ids are their
|
|
355
|
+
* own name space, apart from format names. Throws an ImportError with E_SOURCE_INVALID for a
|
|
356
|
+
* malformed source or an id already taken. Experimental.
|
|
357
|
+
* @param source - the source
|
|
358
|
+
* @returns this registry
|
|
359
|
+
*/
|
|
360
|
+
registerSource<P>(source: GraphSource<P> | LazySource): this {
|
|
361
|
+
this.sources.register(source);
|
|
362
|
+
return this;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* A registered source by id, its code loaded. Rejects with E_SOURCE_UNKNOWN for an id no
|
|
367
|
+
* source has. Experimental.
|
|
368
|
+
* @param id - the source id
|
|
369
|
+
* @returns the source
|
|
370
|
+
*/
|
|
371
|
+
source(id: string): Promise<GraphSource<never>> {
|
|
372
|
+
return this.sources.resolve(id);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* Whether a source id is registered. Experimental.
|
|
377
|
+
* @param id - the source id
|
|
378
|
+
* @returns true when registered
|
|
379
|
+
*/
|
|
380
|
+
hasSource(id: string): boolean {
|
|
381
|
+
return this.sources.has(id);
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* Every registered source with its descriptor, loading no source code. Experimental.
|
|
386
|
+
* @returns one entry per source
|
|
387
|
+
*/
|
|
388
|
+
listSources(): readonly SourceInfo[] {
|
|
389
|
+
return this.sources.list();
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Load a graph from a network source; see the top-level loadFromSource(). Experimental.
|
|
394
|
+
* @param source - the source id or the source
|
|
395
|
+
* @param params - its params
|
|
396
|
+
* @param options - endpoint, credential, cursor, caps and import options
|
|
397
|
+
* @returns the graph and the report
|
|
398
|
+
*/
|
|
399
|
+
loadFromSource(
|
|
400
|
+
source: string | GraphSource<never>,
|
|
401
|
+
params: Readonly<Record<string, unknown>>,
|
|
402
|
+
options?: LoadFromSourceOptions,
|
|
403
|
+
): Promise<ImportGraphResult> {
|
|
404
|
+
return this.sources.load(source, params, options);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Load from a network source into a sink you own. Experimental.
|
|
409
|
+
* @param source - the source id or the source
|
|
410
|
+
* @param params - its params
|
|
411
|
+
* @param sink - where to write
|
|
412
|
+
* @param options - the options
|
|
413
|
+
* @returns the report
|
|
414
|
+
*/
|
|
415
|
+
importFromSource(
|
|
416
|
+
source: string | GraphSource<never>,
|
|
417
|
+
params: Readonly<Record<string, unknown>>,
|
|
418
|
+
sink: GraphSink,
|
|
419
|
+
options?: LoadFromSourceOptions,
|
|
420
|
+
): Promise<ImportReport> {
|
|
421
|
+
return this.sources.import(source, params, sink, options);
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* Fetch the neighborhood of some nodes from a network source. Experimental.
|
|
426
|
+
* @param source - the source id or the source
|
|
427
|
+
* @param request - the seeds and how far to go
|
|
428
|
+
* @param options - the options
|
|
429
|
+
* @returns a graph of only what was fetched
|
|
430
|
+
*/
|
|
431
|
+
expandFromSource(
|
|
432
|
+
source: string | GraphSource<never>,
|
|
433
|
+
request: ExpandRequest<Readonly<Record<string, unknown>>>,
|
|
434
|
+
options?: LoadFromSourceOptions,
|
|
435
|
+
): Promise<ImportGraphResult> {
|
|
436
|
+
return this.sources.expand(source, request, options);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Check a source's params and credential without loading. Experimental.
|
|
441
|
+
* @param source - the source id or the source
|
|
442
|
+
* @param params - its params
|
|
443
|
+
* @param options - the options
|
|
444
|
+
* @returns what the service said
|
|
445
|
+
*/
|
|
446
|
+
probeSource(
|
|
447
|
+
source: string | GraphSource<never>,
|
|
448
|
+
params: Readonly<Record<string, unknown>>,
|
|
449
|
+
options?: LoadFromSourceOptions,
|
|
450
|
+
): Promise<SourceProbe> {
|
|
451
|
+
return this.sources.probe(source, params, options);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
/**
|
|
455
|
+
* Search what a source holds. Experimental.
|
|
456
|
+
* @param source - the source id or the source
|
|
457
|
+
* @param query - the search
|
|
458
|
+
* @param options - the options
|
|
459
|
+
* @returns one page of results
|
|
460
|
+
*/
|
|
461
|
+
listFromSource(
|
|
462
|
+
source: string | GraphSource<never>,
|
|
463
|
+
query: SourceListQuery<Readonly<Record<string, unknown>>>,
|
|
464
|
+
options?: LoadFromSourceOptions,
|
|
465
|
+
): Promise<SourceListing> {
|
|
466
|
+
return this.sources.search(source, query, options);
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
/**
|
|
470
|
+
* Tell whether data loaded from a source changed. Experimental.
|
|
471
|
+
* @param source - the source id or the source
|
|
472
|
+
* @param params - the params it was loaded with
|
|
473
|
+
* @param seen - the validators recorded then (`report.source.validators`)
|
|
474
|
+
* @param options - the options
|
|
475
|
+
* @returns whether it changed
|
|
476
|
+
*/
|
|
477
|
+
validateSource(
|
|
478
|
+
source: string | GraphSource<never>,
|
|
479
|
+
params: Readonly<Record<string, unknown>>,
|
|
480
|
+
seen: SourceValidators,
|
|
481
|
+
options?: LoadFromSourceOptions,
|
|
482
|
+
): Promise<SourceFreshness> {
|
|
483
|
+
return this.sources.validate(source, params, seen, options);
|
|
484
|
+
}
|
|
485
|
+
|
|
326
486
|
/**
|
|
327
487
|
* Register an importer under its format name, replacing one of the same name in place (the
|
|
328
488
|
* original registration order is kept).
|
|
@@ -947,7 +1107,7 @@ export class FormatRegistry {
|
|
|
947
1107
|
* @category Formats and detection
|
|
948
1108
|
*/
|
|
949
1109
|
export function createRegistry(): FormatRegistry {
|
|
950
|
-
|
|
1110
|
+
const formats = new FormatRegistry()
|
|
951
1111
|
.registerImporter(jsonImporter)
|
|
952
1112
|
.registerExporter(jsonExporter)
|
|
953
1113
|
.registerImporter(graphmlImporter)
|
|
@@ -974,6 +1134,10 @@ export function createRegistry(): FormatRegistry {
|
|
|
974
1134
|
.registerExporter(oboExporter)
|
|
975
1135
|
.registerImporter(cysImporter)
|
|
976
1136
|
.registerExporter(cysExporter);
|
|
1137
|
+
for (const source of builtinSources()) {
|
|
1138
|
+
formats.registerSource(source);
|
|
1139
|
+
}
|
|
1140
|
+
return formats;
|
|
977
1141
|
}
|
|
978
1142
|
|
|
979
1143
|
/**
|
|
@@ -1928,3 +2092,164 @@ function readerIterator(stream: ReadableStream<Uint8Array>, signal: AbortSignal
|
|
|
1928
2092
|
},
|
|
1929
2093
|
};
|
|
1930
2094
|
}
|
|
2095
|
+
|
|
2096
|
+
// ============================================================ network sources (experimental)
|
|
2097
|
+
|
|
2098
|
+
/**
|
|
2099
|
+
* Load a graph from a network source: a built-in one by id ("ndex", "neo4j", "openalex", ...),
|
|
2100
|
+
* one you registered with registerSource(), or a source object. The source fetches through a
|
|
2101
|
+
* guarded fetch that sends the credential only to the endpoint's origin, never over plain http
|
|
2102
|
+
* (except to this machine), never across a redirect, and retries what is safe to retry. Every
|
|
2103
|
+
* failure is an ImportError whose `issue.code` is one of SOURCE_ISSUE and whose `issue.params`
|
|
2104
|
+
* holds its values. A capped load warns W_SOURCE_LIMIT and gives `report.source.next`, which you
|
|
2105
|
+
* pass as `cursor` to continue. `result.format` is "source:<id>", or the format a file source
|
|
2106
|
+
* was read as. Experimental.
|
|
2107
|
+
* @param source - the source id
|
|
2108
|
+
* @param params - its params, typed by SourceParamsMap
|
|
2109
|
+
* @param options - endpoint, credential, cursor, caps, retries and the import options
|
|
2110
|
+
* @returns the graph, the format and the report
|
|
2111
|
+
* @example
|
|
2112
|
+
* ```ts
|
|
2113
|
+
* const { snapshot } = await loadFromSource("people", { team: "core" }, { endpoint: "https://example.com" });
|
|
2114
|
+
* ```
|
|
2115
|
+
* @category Network sources
|
|
2116
|
+
*/
|
|
2117
|
+
export function loadFromSource<K extends keyof SourceParamsMap>(
|
|
2118
|
+
source: K,
|
|
2119
|
+
params: SourceParamsMap[K],
|
|
2120
|
+
options?: LoadFromSourceOptions,
|
|
2121
|
+
): Promise<ImportGraphResult>;
|
|
2122
|
+
/**
|
|
2123
|
+
* Load a graph from a network source by id or as an object. Experimental.
|
|
2124
|
+
* @param source - the source id or the source
|
|
2125
|
+
* @param params - its params
|
|
2126
|
+
* @param options - endpoint, credential, cursor, caps, retries and the import options
|
|
2127
|
+
* @returns the graph, the format and the report
|
|
2128
|
+
* @category Network sources
|
|
2129
|
+
*/
|
|
2130
|
+
export function loadFromSource<P>(
|
|
2131
|
+
source: string | GraphSource<P>,
|
|
2132
|
+
params: P,
|
|
2133
|
+
options?: LoadFromSourceOptions,
|
|
2134
|
+
): Promise<ImportGraphResult>;
|
|
2135
|
+
/**
|
|
2136
|
+
* The implementation of both loadFromSource() signatures.
|
|
2137
|
+
* @param source - the source id or the source
|
|
2138
|
+
* @param params - its params
|
|
2139
|
+
* @param options - the options
|
|
2140
|
+
* @returns the graph, the format and the report
|
|
2141
|
+
*/
|
|
2142
|
+
export function loadFromSource(
|
|
2143
|
+
source: string | GraphSource<never>,
|
|
2144
|
+
params: unknown,
|
|
2145
|
+
options?: LoadFromSourceOptions,
|
|
2146
|
+
): Promise<ImportGraphResult> {
|
|
2147
|
+
return registry.loadFromSource(source, params as Readonly<Record<string, unknown>>, options);
|
|
2148
|
+
}
|
|
2149
|
+
|
|
2150
|
+
/**
|
|
2151
|
+
* Load from a network source into a sink you own (a GraphBuilder you keep filling). Experimental.
|
|
2152
|
+
* @param source - the source id or the source
|
|
2153
|
+
* @param params - its params
|
|
2154
|
+
* @param sink - where to write
|
|
2155
|
+
* @param options - the options of loadFromSource()
|
|
2156
|
+
* @returns the report
|
|
2157
|
+
* @category Network sources
|
|
2158
|
+
*/
|
|
2159
|
+
export function importFromSource<P>(
|
|
2160
|
+
source: string | GraphSource<P>,
|
|
2161
|
+
params: P,
|
|
2162
|
+
sink: GraphSink,
|
|
2163
|
+
options?: LoadFromSourceOptions,
|
|
2164
|
+
): Promise<ImportReport> {
|
|
2165
|
+
return registry.importFromSource(source, params as Readonly<Record<string, unknown>>, sink, options);
|
|
2166
|
+
}
|
|
2167
|
+
|
|
2168
|
+
/**
|
|
2169
|
+
* Fetch the neighborhood of some nodes from a source that can expand: a graph of only what was
|
|
2170
|
+
* fetched (the seeds, their neighbors and the edges between them), to merge into the graph you
|
|
2171
|
+
* hold. A source without `expand` rejects with E_SOURCE_UNSUPPORTED. Experimental.
|
|
2172
|
+
* @param source - the source id or the source
|
|
2173
|
+
* @param request - the params, seeds, depth, direction and limit
|
|
2174
|
+
* @param options - the options of loadFromSource()
|
|
2175
|
+
* @returns the fetched part, the format and the report
|
|
2176
|
+
* @category Network sources
|
|
2177
|
+
*/
|
|
2178
|
+
export function expandFromSource<P>(
|
|
2179
|
+
source: string | GraphSource<P>,
|
|
2180
|
+
request: ExpandRequest<P>,
|
|
2181
|
+
options?: LoadFromSourceOptions,
|
|
2182
|
+
): Promise<ImportGraphResult> {
|
|
2183
|
+
return registry.expandFromSource(source, request as ExpandRequest<Readonly<Record<string, unknown>>>, options);
|
|
2184
|
+
}
|
|
2185
|
+
|
|
2186
|
+
/**
|
|
2187
|
+
* Check a source's params and credential without loading the graph. Experimental.
|
|
2188
|
+
* @param source - the source id or the source
|
|
2189
|
+
* @param params - its params
|
|
2190
|
+
* @param options - the options of loadFromSource()
|
|
2191
|
+
* @returns what the service said
|
|
2192
|
+
* @category Network sources
|
|
2193
|
+
*/
|
|
2194
|
+
export function probeSource<P>(
|
|
2195
|
+
source: string | GraphSource<P>,
|
|
2196
|
+
params: P,
|
|
2197
|
+
options?: LoadFromSourceOptions,
|
|
2198
|
+
): Promise<SourceProbe> {
|
|
2199
|
+
return registry.probeSource(source, params as Readonly<Record<string, unknown>>, options);
|
|
2200
|
+
}
|
|
2201
|
+
|
|
2202
|
+
/**
|
|
2203
|
+
* Search what a source holds (NDEx networks, ...). Experimental.
|
|
2204
|
+
* @param source - the source id or the source
|
|
2205
|
+
* @param query - params narrowing the search, the search text, cursor and page size
|
|
2206
|
+
* @param options - the options of loadFromSource()
|
|
2207
|
+
* @returns one page of results
|
|
2208
|
+
* @category Network sources
|
|
2209
|
+
*/
|
|
2210
|
+
export function listFromSource<P>(
|
|
2211
|
+
source: string | GraphSource<P>,
|
|
2212
|
+
query: SourceListQuery<P>,
|
|
2213
|
+
options?: LoadFromSourceOptions,
|
|
2214
|
+
): Promise<SourceListing> {
|
|
2215
|
+
return registry.listFromSource(source, query, options);
|
|
2216
|
+
}
|
|
2217
|
+
|
|
2218
|
+
/**
|
|
2219
|
+
* Tell whether data loaded from a source earlier changed. Experimental.
|
|
2220
|
+
* @param source - the source id or the source
|
|
2221
|
+
* @param params - the params it was loaded with
|
|
2222
|
+
* @param seen - the validators recorded then (`report.source.validators`)
|
|
2223
|
+
* @param options - the options of loadFromSource()
|
|
2224
|
+
* @returns current, changed or unverifiable
|
|
2225
|
+
* @category Network sources
|
|
2226
|
+
*/
|
|
2227
|
+
export function validateSource<P>(
|
|
2228
|
+
source: string | GraphSource<P>,
|
|
2229
|
+
params: P,
|
|
2230
|
+
seen: SourceValidators,
|
|
2231
|
+
options?: LoadFromSourceOptions,
|
|
2232
|
+
): Promise<SourceFreshness> {
|
|
2233
|
+
return registry.validateSource(source, params as Readonly<Record<string, unknown>>, seen, options);
|
|
2234
|
+
}
|
|
2235
|
+
|
|
2236
|
+
/**
|
|
2237
|
+
* Register a network source in the default registry, so loadFromSource() and graphty-element
|
|
2238
|
+
* find it by id. Throws an ImportError with E_SOURCE_INVALID for a malformed source or an id
|
|
2239
|
+
* already taken. Experimental.
|
|
2240
|
+
* @param source - the source, or a lazy source that loads its code on first use
|
|
2241
|
+
* @category Network sources
|
|
2242
|
+
*/
|
|
2243
|
+
export function registerSource<P>(source: GraphSource<P> | LazySource): void {
|
|
2244
|
+
registry.registerSource(source);
|
|
2245
|
+
}
|
|
2246
|
+
|
|
2247
|
+
/**
|
|
2248
|
+
* Every source in the default registry with its descriptor (what a form asks for), loading no
|
|
2249
|
+
* source code. Experimental.
|
|
2250
|
+
* @returns one entry per source: id, descriptor, whether its code is loaded
|
|
2251
|
+
* @category Network sources
|
|
2252
|
+
*/
|
|
2253
|
+
export function listSources(): readonly SourceInfo[] {
|
|
2254
|
+
return registry.listSources();
|
|
2255
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The built-in sources, registered as lazy sources: their descriptors are here, their code loads
|
|
3
|
+
* on first use through a dynamic import of the source's subpath.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { CYPHER_DESCRIPTOR, NEO4J_DESCRIPTOR, NEPTUNE_DESCRIPTOR } from "./cypher/descriptor.js";
|
|
7
|
+
import {
|
|
8
|
+
CYPHER_SOURCE_ID,
|
|
9
|
+
NDEX_SOURCE_ID,
|
|
10
|
+
NEO4J_SOURCE_ID,
|
|
11
|
+
NEPTUNE_SOURCE_ID,
|
|
12
|
+
OPENALEX_SOURCE_ID,
|
|
13
|
+
REST_SOURCE_ID,
|
|
14
|
+
} from "./ids.js";
|
|
15
|
+
import { NDEX_DESCRIPTOR } from "./ndex/descriptor.js";
|
|
16
|
+
import { OPENALEX_DESCRIPTOR, REST_DESCRIPTOR } from "./rest/descriptor.js";
|
|
17
|
+
import { type LazySource } from "./types.js";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The six built-in sources, each loading its subpath on first use.
|
|
21
|
+
* @returns the lazy sources, in catalog order
|
|
22
|
+
*/
|
|
23
|
+
export function builtinSources(): readonly LazySource[] {
|
|
24
|
+
return [
|
|
25
|
+
{
|
|
26
|
+
id: NDEX_SOURCE_ID,
|
|
27
|
+
descriptor: NDEX_DESCRIPTOR,
|
|
28
|
+
load: async () => (await import("./ndex/index.js")).ndexSource,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
id: CYPHER_SOURCE_ID,
|
|
32
|
+
descriptor: CYPHER_DESCRIPTOR,
|
|
33
|
+
load: async () => (await import("./cypher/index.js")).cypherSource,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
id: NEO4J_SOURCE_ID,
|
|
37
|
+
descriptor: NEO4J_DESCRIPTOR,
|
|
38
|
+
load: async () => (await import("./cypher/index.js")).neo4jSource,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: NEPTUNE_SOURCE_ID,
|
|
42
|
+
descriptor: NEPTUNE_DESCRIPTOR,
|
|
43
|
+
load: async () => (await import("./cypher/index.js")).neptuneSource,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
id: REST_SOURCE_ID,
|
|
47
|
+
descriptor: REST_DESCRIPTOR,
|
|
48
|
+
load: async () => (await import("./rest/index.js")).restMappingSource,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: OPENALEX_SOURCE_ID,
|
|
52
|
+
descriptor: OPENALEX_DESCRIPTOR,
|
|
53
|
+
load: async () => (await import("./rest/index.js")).openalexSource,
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The issue codes of network sources (design section 8). Every failure a source or the framework
|
|
3
|
+
* raises is an ImportIssue with one of these codes and machine-readable `params`; graph-io writes
|
|
4
|
+
* no reader-facing sentence. The English `message` is for logs.
|
|
5
|
+
*
|
|
6
|
+
* Experimental, with the source contract.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { FETCH_CODE } from "../common/codes.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Every issue code a network source can report, keyed by itself, so `SOURCE_ISSUE.E_SOURCE_AUTH`
|
|
13
|
+
* autocompletes and `keyof typeof SOURCE_ISSUE` is the code union. Experimental.
|
|
14
|
+
* @category Network sources
|
|
15
|
+
*/
|
|
16
|
+
export const SOURCE_ISSUE = Object.freeze({
|
|
17
|
+
/** Another HTTP status, or an unreachable host (Node). Params: `url`, `status`. */
|
|
18
|
+
E_FETCH: FETCH_CODE,
|
|
19
|
+
/** The browser refused the request and hid why. Params: `url`, `cause`. */
|
|
20
|
+
E_SOURCE_BLOCKED: "E_SOURCE_BLOCKED",
|
|
21
|
+
/** 401 or a database login failure. Params: `origin`, `status`, `scheme`, `serverCode`. */
|
|
22
|
+
E_SOURCE_AUTH: "E_SOURCE_AUTH",
|
|
23
|
+
/** 403 or a database authorization failure. Params: `status`, `serverCode`. */
|
|
24
|
+
E_SOURCE_FORBIDDEN: "E_SOURCE_FORBIDDEN",
|
|
25
|
+
/** The named item does not exist. Params: `what`, `value`. */
|
|
26
|
+
E_SOURCE_NOT_FOUND: "E_SOURCE_NOT_FOUND",
|
|
27
|
+
/** 429 after the retries. Params: `retryAfterMs`. */
|
|
28
|
+
E_SOURCE_QUOTA: "E_SOURCE_QUOTA",
|
|
29
|
+
/** `timeoutMs` passed, or the server's own timeout. Params: `timeoutMs`, `serverSide`. */
|
|
30
|
+
E_SOURCE_TIMEOUT: "E_SOURCE_TIMEOUT",
|
|
31
|
+
/** The server rejected the query. Params: `serverCode`, `line`, `column`, `serverMessage`. */
|
|
32
|
+
E_SOURCE_QUERY: "E_SOURCE_QUERY",
|
|
33
|
+
/** The result holds no node, relationship or path. Params: `columns`. */
|
|
34
|
+
E_SOURCE_NOT_A_GRAPH: "E_SOURCE_NOT_A_GRAPH",
|
|
35
|
+
/** A response body of the wrong shape. Params: `expected`, `contentType`. */
|
|
36
|
+
E_SOURCE_RESPONSE: "E_SOURCE_RESPONSE",
|
|
37
|
+
/** A redirect, or a changed origin, while a credential was attached. Params: `from`, `to`. */
|
|
38
|
+
E_SOURCE_REDIRECT: "E_SOURCE_REDIRECT",
|
|
39
|
+
/** The source cannot run in this runtime. Params: `runtime`, `reason`, `package`. */
|
|
40
|
+
E_SOURCE_RUNTIME: "E_SOURCE_RUNTIME",
|
|
41
|
+
/** A parameter or option is invalid. Params: `name`, `reason`. */
|
|
42
|
+
E_SOURCE_PARAM: "E_SOURCE_PARAM",
|
|
43
|
+
/** A cap was reached under `onLimit: "error"`. Params: `limit`, `value`. */
|
|
44
|
+
E_SOURCE_LIMIT: "E_SOURCE_LIMIT",
|
|
45
|
+
/** No source has that id. Params: `id`, `known`. */
|
|
46
|
+
E_SOURCE_UNKNOWN: "E_SOURCE_UNKNOWN",
|
|
47
|
+
/** The source lacks the feature. Params: `feature`, `needs`. */
|
|
48
|
+
E_SOURCE_UNSUPPORTED: "E_SOURCE_UNSUPPORTED",
|
|
49
|
+
/** A malformed source at registration. Params: `id`, `reason`. */
|
|
50
|
+
E_SOURCE_INVALID: "E_SOURCE_INVALID",
|
|
51
|
+
/** A cap stopped the load; what came first is kept. Params: `limit`, `value`. */
|
|
52
|
+
W_SOURCE_LIMIT: "W_SOURCE_LIMIT",
|
|
53
|
+
/** A later page needs a credential; the pages before it are kept. Params: `origin`, `status`. */
|
|
54
|
+
W_SOURCE_AUTH: "W_SOURCE_AUTH",
|
|
55
|
+
/** The request succeeded after retries. Params: `attempts`, `statuses`. */
|
|
56
|
+
W_SOURCE_RETRIED: "W_SOURCE_RETRIED",
|
|
57
|
+
/** A server value with no dtype. Params: `type`, `column`, `as`. */
|
|
58
|
+
W_SOURCE_VALUE: "W_SOURCE_VALUE",
|
|
59
|
+
} as const);
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* A network source issue code. Experimental.
|
|
63
|
+
* @category Network sources
|
|
64
|
+
*/
|
|
65
|
+
export type SourceIssueCode = keyof typeof SOURCE_ISSUE;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Why `E_SOURCE_BLOCKED` was raised, as far as a page can tell. Open: handle unknown values.
|
|
69
|
+
* @category Network sources
|
|
70
|
+
*/
|
|
71
|
+
export type SourceBlockedCause = "cors" | "unreachable" | "local-network" | "unknown" | (string & {}); // NOSONAR(S4335): open string union, keeps the known names autocompleting
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* The `params` of each source issue code. Every URL is origin and path only. Experimental.
|
|
75
|
+
* @category Network sources
|
|
76
|
+
*/
|
|
77
|
+
export interface SourceIssueParams {
|
|
78
|
+
/** Another status, or an unreachable host. */
|
|
79
|
+
readonly E_FETCH: {
|
|
80
|
+
/** The address, origin and path only. */
|
|
81
|
+
readonly url: string;
|
|
82
|
+
/** The HTTP status, or null when there was none. */
|
|
83
|
+
readonly status: number | null;
|
|
84
|
+
};
|
|
85
|
+
/** Refused by the browser. */
|
|
86
|
+
readonly E_SOURCE_BLOCKED: {
|
|
87
|
+
/** The address, origin and path only. */
|
|
88
|
+
readonly url: string;
|
|
89
|
+
/** Why, as far as the page can tell. */
|
|
90
|
+
readonly cause: SourceBlockedCause;
|
|
91
|
+
};
|
|
92
|
+
/** A credential is needed or was refused. */
|
|
93
|
+
readonly E_SOURCE_AUTH: {
|
|
94
|
+
/** The origin that asked for a credential. */
|
|
95
|
+
readonly origin: string;
|
|
96
|
+
/** The HTTP status, or null when there was none. */
|
|
97
|
+
readonly status: number | null;
|
|
98
|
+
/** The authentication scheme the server named, or null. */
|
|
99
|
+
readonly scheme: string | null;
|
|
100
|
+
/** The service's own code, passed through, or null. */
|
|
101
|
+
readonly serverCode: string | null;
|
|
102
|
+
/** Set by graphty-element when the credential came from its store. */
|
|
103
|
+
readonly stored?: boolean;
|
|
104
|
+
};
|
|
105
|
+
/** Not allowed. */
|
|
106
|
+
readonly E_SOURCE_FORBIDDEN: {
|
|
107
|
+
/** The HTTP status, or null when there was none. */
|
|
108
|
+
readonly status: number | null;
|
|
109
|
+
/** The service's own code, passed through, or null. */
|
|
110
|
+
readonly serverCode: string | null;
|
|
111
|
+
};
|
|
112
|
+
/** No such item. */
|
|
113
|
+
readonly E_SOURCE_NOT_FOUND: {
|
|
114
|
+
/** What was looked up (`url`, `network`, `node`). */
|
|
115
|
+
readonly what: string;
|
|
116
|
+
/** The value that reached the cap, or what was looked up. */
|
|
117
|
+
readonly value: string;
|
|
118
|
+
};
|
|
119
|
+
/** Out of quota. */
|
|
120
|
+
readonly E_SOURCE_QUOTA: {
|
|
121
|
+
/** How long the service asked to wait, when readable. */
|
|
122
|
+
readonly retryAfterMs: number | null;
|
|
123
|
+
};
|
|
124
|
+
/** Took too long. */
|
|
125
|
+
readonly E_SOURCE_TIMEOUT: {
|
|
126
|
+
/** The time limit, or null for the server's own. */
|
|
127
|
+
readonly timeoutMs: number | null;
|
|
128
|
+
/** Whether the server timed the query out. */
|
|
129
|
+
readonly serverSide: boolean;
|
|
130
|
+
};
|
|
131
|
+
/** The query was refused. */
|
|
132
|
+
readonly E_SOURCE_QUERY: {
|
|
133
|
+
/** The service's own code, passed through, or null. */
|
|
134
|
+
readonly serverCode: string | null;
|
|
135
|
+
/** The query line the server named, or null. */
|
|
136
|
+
readonly line: number | null;
|
|
137
|
+
/** The query column the server named, or null. */
|
|
138
|
+
readonly column: number | null;
|
|
139
|
+
/** The server's message from a JSON 4xx body, at most 500 characters, or null. */
|
|
140
|
+
readonly serverMessage: string | null;
|
|
141
|
+
};
|
|
142
|
+
/** Scalars only. */
|
|
143
|
+
readonly E_SOURCE_NOT_A_GRAPH: {
|
|
144
|
+
/** The result's column names. */
|
|
145
|
+
readonly columns: readonly string[];
|
|
146
|
+
};
|
|
147
|
+
/** Wrong body. */
|
|
148
|
+
readonly E_SOURCE_RESPONSE: {
|
|
149
|
+
/** What shape was expected (`json`, `graph-file`, `link-header`). */
|
|
150
|
+
readonly expected: string;
|
|
151
|
+
/** The response's Content-Type, or null. */
|
|
152
|
+
readonly contentType: string | null;
|
|
153
|
+
};
|
|
154
|
+
/** A redirect with a credential; `to` is null in a browser, which hides it. */
|
|
155
|
+
readonly E_SOURCE_REDIRECT: {
|
|
156
|
+
/** Where the request was going, origin and path. */
|
|
157
|
+
readonly from: string;
|
|
158
|
+
/** Where it was sent instead, or null when the browser hides it. */
|
|
159
|
+
readonly to: string | null;
|
|
160
|
+
};
|
|
161
|
+
/** Cannot run here. */
|
|
162
|
+
readonly E_SOURCE_RUNTIME: {
|
|
163
|
+
/** The runtime it ran in. */
|
|
164
|
+
readonly runtime: string;
|
|
165
|
+
/** Why, as a code. */
|
|
166
|
+
readonly reason: string;
|
|
167
|
+
/** The optional package that is missing. */
|
|
168
|
+
readonly package?: string;
|
|
169
|
+
};
|
|
170
|
+
/** A bad parameter or option. */
|
|
171
|
+
readonly E_SOURCE_PARAM: {
|
|
172
|
+
/** The parameter or option's name. */
|
|
173
|
+
readonly name: string;
|
|
174
|
+
/** Why, as a code. */
|
|
175
|
+
readonly reason: string;
|
|
176
|
+
};
|
|
177
|
+
/** A cap under onLimit "error". */
|
|
178
|
+
readonly E_SOURCE_LIMIT: {
|
|
179
|
+
/** The cap's option name (`maxNodes`, `maxBytes`, ...). */
|
|
180
|
+
readonly limit: string;
|
|
181
|
+
/** The value that reached the cap, or what was looked up. */
|
|
182
|
+
readonly value: number;
|
|
183
|
+
};
|
|
184
|
+
/** No such source. */
|
|
185
|
+
readonly E_SOURCE_UNKNOWN: {
|
|
186
|
+
/** The source id. */
|
|
187
|
+
readonly id: string;
|
|
188
|
+
/** The ids that are registered. */
|
|
189
|
+
readonly known: readonly string[];
|
|
190
|
+
};
|
|
191
|
+
/** The source lacks the feature. */
|
|
192
|
+
readonly E_SOURCE_UNSUPPORTED: {
|
|
193
|
+
/** The feature asked for. */
|
|
194
|
+
readonly feature: string;
|
|
195
|
+
/** What it needs, when known. */
|
|
196
|
+
readonly needs?: string;
|
|
197
|
+
};
|
|
198
|
+
/** A malformed source. */
|
|
199
|
+
readonly E_SOURCE_INVALID: {
|
|
200
|
+
/** The source id. */
|
|
201
|
+
readonly id: string;
|
|
202
|
+
/** Why, as a code. */
|
|
203
|
+
readonly reason: string;
|
|
204
|
+
};
|
|
205
|
+
/** A cap stopped the load. */
|
|
206
|
+
readonly W_SOURCE_LIMIT: {
|
|
207
|
+
/** The cap's option name (`maxNodes`, `maxBytes`, ...). */
|
|
208
|
+
readonly limit: string;
|
|
209
|
+
/** The value that reached the cap, or what was looked up. */
|
|
210
|
+
readonly value: number;
|
|
211
|
+
};
|
|
212
|
+
/** A later page needs a credential. */
|
|
213
|
+
readonly W_SOURCE_AUTH: {
|
|
214
|
+
/** The origin that asked for a credential. */
|
|
215
|
+
readonly origin: string;
|
|
216
|
+
/** The HTTP status, or null when there was none. */
|
|
217
|
+
readonly status: number | null;
|
|
218
|
+
};
|
|
219
|
+
/** Retried. */
|
|
220
|
+
readonly W_SOURCE_RETRIED: {
|
|
221
|
+
/** How many attempts were made. */
|
|
222
|
+
readonly attempts: number;
|
|
223
|
+
/** The status of each failed attempt, null for a network failure. */
|
|
224
|
+
readonly statuses: readonly (number | null)[];
|
|
225
|
+
};
|
|
226
|
+
/** A value with no dtype. */
|
|
227
|
+
readonly W_SOURCE_VALUE: {
|
|
228
|
+
/** The server's value type. */
|
|
229
|
+
readonly type: string;
|
|
230
|
+
/** The column (of the query, or of the graph) involved. */
|
|
231
|
+
readonly column: string;
|
|
232
|
+
/** What the value was kept as. */
|
|
233
|
+
readonly as: string;
|
|
234
|
+
};
|
|
235
|
+
}
|