@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.
Files changed (460) hide show
  1. package/dist/chunks/{approximations-wWjCRzKj.js → approximations-C2riR4NT.js} +2 -2
  2. package/dist/chunks/{approximations-wWjCRzKj.js.map → approximations-C2riR4NT.js.map} +1 -1
  3. package/dist/chunks/{block-DiGq58c3.js → block-Cu22ewuS.js} +92 -21
  4. package/dist/chunks/block-Cu22ewuS.js.map +1 -0
  5. package/dist/chunks/{choose--jM0yYCo.js → choose-Cdx6Enl2.js} +3 -3
  6. package/dist/chunks/{choose--jM0yYCo.js.map → choose-Cdx6Enl2.js.map} +1 -1
  7. package/dist/chunks/codes-CV_Bhcyi.js +153 -0
  8. package/dist/chunks/codes-CV_Bhcyi.js.map +1 -0
  9. package/dist/chunks/{constants-BKwqelYD.js → constants-D0LqcsLJ.js} +2 -2
  10. package/dist/chunks/{constants-BKwqelYD.js.map → constants-D0LqcsLJ.js.map} +1 -1
  11. package/dist/chunks/context-cgmmOxZ2.js +663 -0
  12. package/dist/chunks/context-cgmmOxZ2.js.map +1 -0
  13. package/dist/chunks/credentials-BiQsnMTb.js +347 -0
  14. package/dist/chunks/credentials-BiQsnMTb.js.map +1 -0
  15. package/dist/chunks/cx-export-BEeF6ymo.js +259 -0
  16. package/dist/chunks/cx-export-BEeF6ymo.js.map +1 -0
  17. package/dist/chunks/descriptor-BJ-W0Jd-.js +137 -0
  18. package/dist/chunks/descriptor-BJ-W0Jd-.js.map +1 -0
  19. package/dist/chunks/descriptor-C-YDhtsn.js +48 -0
  20. package/dist/chunks/descriptor-C-YDhtsn.js.map +1 -0
  21. package/dist/chunks/{emit-CwU8cUmG.js → emit-CD8xnY8s.js} +70 -10
  22. package/dist/chunks/emit-CD8xnY8s.js.map +1 -0
  23. package/dist/chunks/{escape-CgzxiYPg.js → escape-DH2Egt-l.js} +12 -12
  24. package/dist/chunks/{escape-CgzxiYPg.js.map → escape-DH2Egt-l.js.map} +1 -1
  25. package/dist/chunks/{export-BvqAXCKh.js → export-CZ7VRm4I.js} +53 -1443
  26. package/dist/chunks/export-CZ7VRm4I.js.map +1 -0
  27. package/dist/chunks/{exporter-DndFlGSa.js → exporter-BIdaoIgh.js} +7 -6
  28. package/dist/chunks/{exporter-DndFlGSa.js.map → exporter-BIdaoIgh.js.map} +1 -1
  29. package/dist/chunks/{exporter-CJgfhF-l.js → exporter-ChjL5fmP.js} +8 -7
  30. package/dist/chunks/{exporter-CJgfhF-l.js.map → exporter-ChjL5fmP.js.map} +1 -1
  31. package/dist/chunks/{exporter--Mk9gXCJ.js → exporter-Dcw7Ldtq.js} +6 -4
  32. package/dist/chunks/{exporter--Mk9gXCJ.js.map → exporter-Dcw7Ldtq.js.map} +1 -1
  33. package/dist/chunks/exporter-DtVU80Fa.js +1008 -0
  34. package/dist/chunks/exporter-DtVU80Fa.js.map +1 -0
  35. package/dist/chunks/{exporter-CrDWIyiq.js → exporter-bxxjOrDZ.js} +11 -9
  36. package/dist/chunks/{exporter-CrDWIyiq.js.map → exporter-bxxjOrDZ.js.map} +1 -1
  37. package/dist/chunks/format-BMS-1Nxb.js +64 -0
  38. package/dist/chunks/format-BMS-1Nxb.js.map +1 -0
  39. package/dist/chunks/{generic-Dq1ntt9q.js → generic-CP6YD34u.js} +4 -4
  40. package/dist/chunks/{generic-Dq1ntt9q.js.map → generic-CP6YD34u.js.map} +1 -1
  41. package/dist/chunks/{importer-DiZRmOQG.js → importer-B87_fmVx.js} +13 -17
  42. package/dist/chunks/importer-B87_fmVx.js.map +1 -0
  43. package/dist/chunks/{importer-BSvfrX_h.js → importer-Bji2MeWr.js} +18 -1014
  44. package/dist/chunks/importer-Bji2MeWr.js.map +1 -0
  45. package/dist/chunks/{importer-COTK9Tsl.js → importer-CB_zV5_L.js} +14 -11
  46. package/dist/chunks/importer-CB_zV5_L.js.map +1 -0
  47. package/dist/chunks/{importer-e6LGpqHB.js → importer-CVT-JyDE.js} +12 -9
  48. package/dist/chunks/importer-CVT-JyDE.js.map +1 -0
  49. package/dist/chunks/{importer-yh_aBCU6.js → importer-Cyy6UseH.js} +7 -6
  50. package/dist/chunks/{importer-yh_aBCU6.js.map → importer-Cyy6UseH.js.map} +1 -1
  51. package/dist/chunks/{importer-iFYPEKaJ.js → importer-DPZDN40-.js} +14 -10
  52. package/dist/chunks/{importer-iFYPEKaJ.js.map → importer-DPZDN40-.js.map} +1 -1
  53. package/dist/chunks/{importer-CMmeMWlC.js → importer-e3huMZbm.js} +8 -260
  54. package/dist/chunks/importer-e3huMZbm.js.map +1 -0
  55. package/dist/chunks/input-Ccg9I22A.js +1397 -0
  56. package/dist/chunks/input-Ccg9I22A.js.map +1 -0
  57. package/dist/chunks/{json-elements-DJZRZ6jd.js → json-elements-By172SVq.js} +4 -4
  58. package/dist/chunks/{json-elements-DJZRZ6jd.js.map → json-elements-By172SVq.js.map} +1 -1
  59. package/dist/chunks/{lexicon-CT69Kd87.js → lexicon-u2SI5xcx.js} +19 -5
  60. package/dist/chunks/lexicon-u2SI5xcx.js.map +1 -0
  61. package/dist/chunks/{ontology-export-G4MqRdux.js → ontology-export-BwgMyuF0.js} +4 -3
  62. package/dist/chunks/{ontology-export-G4MqRdux.js.map → ontology-export-BwgMyuF0.js.map} +1 -1
  63. package/dist/chunks/{records-CiaWZrFH.js → records-Cgvxz-Vx.js} +2 -2
  64. package/dist/chunks/{records-CiaWZrFH.js.map → records-Cgvxz-Vx.js.map} +1 -1
  65. package/dist/chunks/{format-BpQBx8MZ.js → report-CgdsL9Hb.js} +72 -129
  66. package/dist/chunks/report-CgdsL9Hb.js.map +1 -0
  67. package/dist/chunks/sigv4-LkAzsLAu.js +247 -0
  68. package/dist/chunks/sigv4-LkAzsLAu.js.map +1 -0
  69. package/dist/chunks/{styles-BQnsga7p.js → styles-CaABMoO1.js} +76 -43
  70. package/dist/chunks/styles-CaABMoO1.js.map +1 -0
  71. package/dist/chunks/{styles-D3fRphrO.js → styles-P_gmFAOi.js} +101 -21
  72. package/dist/chunks/styles-P_gmFAOi.js.map +1 -0
  73. package/dist/chunks/{styles-yed-BF5x3_Y5.js → styles-yed-Cs1nmrjn.js} +60 -20
  74. package/dist/chunks/styles-yed-Cs1nmrjn.js.map +1 -0
  75. package/dist/chunks/{text-CzJNFOS9.js → text-BuKQVMz2.js} +2 -2
  76. package/dist/chunks/{text-CzJNFOS9.js.map → text-BuKQVMz2.js.map} +1 -1
  77. package/dist/chunks/{writer-DMKvthQE.js → writer-DvHTl36J.js} +5 -4
  78. package/dist/chunks/writer-DvHTl36J.js.map +1 -0
  79. package/dist/csv.js +7 -5
  80. package/dist/csv.js.map +1 -1
  81. package/dist/cx.js +5 -4
  82. package/dist/cx.js.map +1 -1
  83. package/dist/cx2.js +2 -2
  84. package/dist/cys.js +1 -1
  85. package/dist/dot.js +2 -2
  86. package/dist/gexf.js +7 -5
  87. package/dist/gexf.js.map +1 -1
  88. package/dist/gml.js +16 -13
  89. package/dist/gml.js.map +1 -1
  90. package/dist/graph-io.js +1181 -224
  91. package/dist/graph-io.js.map +1 -1
  92. package/dist/graphml.js +3 -3
  93. package/dist/json.js +1 -1
  94. package/dist/neo4j.js +6 -4
  95. package/dist/neo4j.js.map +1 -1
  96. package/dist/obo.js +1 -1
  97. package/dist/pajek.js +1 -1
  98. package/dist/sources-cypher.d.ts +1 -0
  99. package/dist/sources-cypher.js +1236 -0
  100. package/dist/sources-cypher.js.map +1 -0
  101. package/dist/sources-ndex.d.ts +1 -0
  102. package/dist/sources-ndex.js +278 -0
  103. package/dist/sources-ndex.js.map +1 -0
  104. package/dist/sources-rest.d.ts +1 -0
  105. package/dist/sources-rest.js +1367 -0
  106. package/dist/sources-rest.js.map +1 -0
  107. package/dist/src/common/report.d.ts +6 -3
  108. package/dist/src/common/report.d.ts.map +1 -1
  109. package/dist/src/common/report.js +15 -9
  110. package/dist/src/common/report.js.map +1 -1
  111. package/dist/src/formats/cx/styles.d.ts.map +1 -1
  112. package/dist/src/formats/cx/styles.js +1 -0
  113. package/dist/src/formats/cx/styles.js.map +1 -1
  114. package/dist/src/formats/dot/styles.d.ts.map +1 -1
  115. package/dist/src/formats/dot/styles.js +3 -1
  116. package/dist/src/formats/dot/styles.js.map +1 -1
  117. package/dist/src/formats/gexf/styles.d.ts +29 -12
  118. package/dist/src/formats/gexf/styles.d.ts.map +1 -1
  119. package/dist/src/formats/gexf/styles.js +160 -31
  120. package/dist/src/formats/gexf/styles.js.map +1 -1
  121. package/dist/src/formats/gml/styles.d.ts.map +1 -1
  122. package/dist/src/formats/gml/styles.js +5 -4
  123. package/dist/src/formats/gml/styles.js.map +1 -1
  124. package/dist/src/formats/graphml/styles-plain.d.ts.map +1 -1
  125. package/dist/src/formats/graphml/styles-plain.js +3 -3
  126. package/dist/src/formats/graphml/styles-plain.js.map +1 -1
  127. package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -1
  128. package/dist/src/formats/graphml/styles-yed.js +89 -19
  129. package/dist/src/formats/graphml/styles-yed.js.map +1 -1
  130. package/dist/src/formats/pajek/styles.d.ts.map +1 -1
  131. package/dist/src/formats/pajek/styles.js +1 -0
  132. package/dist/src/formats/pajek/styles.js.map +1 -1
  133. package/dist/src/formats/xgmml/styles.d.ts.map +1 -1
  134. package/dist/src/formats/xgmml/styles.js +1 -0
  135. package/dist/src/formats/xgmml/styles.js.map +1 -1
  136. package/dist/src/index.d.ts +8 -1
  137. package/dist/src/index.d.ts.map +1 -1
  138. package/dist/src/index.js +9 -1
  139. package/dist/src/index.js.map +1 -1
  140. package/dist/src/registry.d.ts +173 -1
  141. package/dist/src/registry.d.ts.map +1 -1
  142. package/dist/src/registry.js +196 -1
  143. package/dist/src/registry.js.map +1 -1
  144. package/dist/src/sources/builtins.d.ts +11 -0
  145. package/dist/src/sources/builtins.d.ts.map +1 -0
  146. package/dist/src/sources/builtins.js +47 -0
  147. package/dist/src/sources/builtins.js.map +1 -0
  148. package/dist/src/sources/codes.d.ts +230 -0
  149. package/dist/src/sources/codes.d.ts.map +1 -0
  150. package/dist/src/sources/codes.js +58 -0
  151. package/dist/src/sources/codes.js.map +1 -0
  152. package/dist/src/sources/context.d.ts +112 -0
  153. package/dist/src/sources/context.d.ts.map +1 -0
  154. package/dist/src/sources/context.js +739 -0
  155. package/dist/src/sources/context.js.map +1 -0
  156. package/dist/src/sources/credentials.d.ts +179 -0
  157. package/dist/src/sources/credentials.d.ts.map +1 -0
  158. package/dist/src/sources/credentials.js +301 -0
  159. package/dist/src/sources/credentials.js.map +1 -0
  160. package/dist/src/sources/cypher/descriptor.d.ts +21 -0
  161. package/dist/src/sources/cypher/descriptor.d.ts.map +1 -0
  162. package/dist/src/sources/cypher/descriptor.js +119 -0
  163. package/dist/src/sources/cypher/descriptor.js.map +1 -0
  164. package/dist/src/sources/cypher/flatten.d.ts +72 -0
  165. package/dist/src/sources/cypher/flatten.d.ts.map +1 -0
  166. package/dist/src/sources/cypher/flatten.js +279 -0
  167. package/dist/src/sources/cypher/flatten.js.map +1 -0
  168. package/dist/src/sources/cypher/index.d.ts +33 -0
  169. package/dist/src/sources/cypher/index.d.ts.map +1 -0
  170. package/dist/src/sources/cypher/index.js +405 -0
  171. package/dist/src/sources/cypher/index.js.map +1 -0
  172. package/dist/src/sources/cypher/params.d.ts +40 -0
  173. package/dist/src/sources/cypher/params.d.ts.map +1 -0
  174. package/dist/src/sources/cypher/params.js +6 -0
  175. package/dist/src/sources/cypher/params.js.map +1 -0
  176. package/dist/src/sources/cypher/profiles.d.ts +44 -0
  177. package/dist/src/sources/cypher/profiles.d.ts.map +1 -0
  178. package/dist/src/sources/cypher/profiles.js +61 -0
  179. package/dist/src/sources/cypher/profiles.js.map +1 -0
  180. package/dist/src/sources/cypher/query-builder.d.ts +106 -0
  181. package/dist/src/sources/cypher/query-builder.d.ts.map +1 -0
  182. package/dist/src/sources/cypher/query-builder.js +236 -0
  183. package/dist/src/sources/cypher/query-builder.js.map +1 -0
  184. package/dist/src/sources/cypher/transports/bolt.d.ts +21 -0
  185. package/dist/src/sources/cypher/transports/bolt.d.ts.map +1 -0
  186. package/dist/src/sources/cypher/transports/bolt.js +185 -0
  187. package/dist/src/sources/cypher/transports/bolt.js.map +1 -0
  188. package/dist/src/sources/cypher/transports/neptune-analytics.d.ts +15 -0
  189. package/dist/src/sources/cypher/transports/neptune-analytics.d.ts.map +1 -0
  190. package/dist/src/sources/cypher/transports/neptune-analytics.js +38 -0
  191. package/dist/src/sources/cypher/transports/neptune-analytics.js.map +1 -0
  192. package/dist/src/sources/cypher/transports/neptune-https.d.ts +31 -0
  193. package/dist/src/sources/cypher/transports/neptune-https.d.ts.map +1 -0
  194. package/dist/src/sources/cypher/transports/neptune-https.js +104 -0
  195. package/dist/src/sources/cypher/transports/neptune-https.js.map +1 -0
  196. package/dist/src/sources/cypher/transports/query-api.d.ts +14 -0
  197. package/dist/src/sources/cypher/transports/query-api.d.ts.map +1 -0
  198. package/dist/src/sources/cypher/transports/query-api.js +80 -0
  199. package/dist/src/sources/cypher/transports/query-api.js.map +1 -0
  200. package/dist/src/sources/cypher/transports/transport.d.ts +78 -0
  201. package/dist/src/sources/cypher/transports/transport.d.ts.map +1 -0
  202. package/dist/src/sources/cypher/transports/transport.js +77 -0
  203. package/dist/src/sources/cypher/transports/transport.js.map +1 -0
  204. package/dist/src/sources/cypher/types-map.d.ts +91 -0
  205. package/dist/src/sources/cypher/types-map.d.ts.map +1 -0
  206. package/dist/src/sources/cypher/types-map.js +306 -0
  207. package/dist/src/sources/cypher/types-map.js.map +1 -0
  208. package/dist/src/sources/define.d.ts +47 -0
  209. package/dist/src/sources/define.d.ts.map +1 -0
  210. package/dist/src/sources/define.js +173 -0
  211. package/dist/src/sources/define.js.map +1 -0
  212. package/dist/src/sources/fail.d.ts +33 -0
  213. package/dist/src/sources/fail.d.ts.map +1 -0
  214. package/dist/src/sources/fail.js +49 -0
  215. package/dist/src/sources/fail.js.map +1 -0
  216. package/dist/src/sources/ids.d.ts +64 -0
  217. package/dist/src/sources/ids.d.ts.map +1 -0
  218. package/dist/src/sources/ids.js +64 -0
  219. package/dist/src/sources/ids.js.map +1 -0
  220. package/dist/src/sources/ndex/client.d.ts +31 -0
  221. package/dist/src/sources/ndex/client.d.ts.map +1 -0
  222. package/dist/src/sources/ndex/client.js +90 -0
  223. package/dist/src/sources/ndex/client.js.map +1 -0
  224. package/dist/src/sources/ndex/descriptor.d.ts +10 -0
  225. package/dist/src/sources/ndex/descriptor.d.ts.map +1 -0
  226. package/dist/src/sources/ndex/descriptor.js +55 -0
  227. package/dist/src/sources/ndex/descriptor.js.map +1 -0
  228. package/dist/src/sources/ndex/expand.d.ts +20 -0
  229. package/dist/src/sources/ndex/expand.d.ts.map +1 -0
  230. package/dist/src/sources/ndex/expand.js +87 -0
  231. package/dist/src/sources/ndex/expand.js.map +1 -0
  232. package/dist/src/sources/ndex/index.d.ts +25 -0
  233. package/dist/src/sources/ndex/index.d.ts.map +1 -0
  234. package/dist/src/sources/ndex/index.js +191 -0
  235. package/dist/src/sources/ndex/index.js.map +1 -0
  236. package/dist/src/sources/ndex/params.d.ts +17 -0
  237. package/dist/src/sources/ndex/params.d.ts.map +1 -0
  238. package/dist/src/sources/ndex/params.js +6 -0
  239. package/dist/src/sources/ndex/params.js.map +1 -0
  240. package/dist/src/sources/ndex/share-url.d.ts +40 -0
  241. package/dist/src/sources/ndex/share-url.d.ts.map +1 -0
  242. package/dist/src/sources/ndex/share-url.js +64 -0
  243. package/dist/src/sources/ndex/share-url.js.map +1 -0
  244. package/dist/src/sources/params.d.ts +28 -0
  245. package/dist/src/sources/params.d.ts.map +1 -0
  246. package/dist/src/sources/params.js +6 -0
  247. package/dist/src/sources/params.js.map +1 -0
  248. package/dist/src/sources/registry.d.ts +118 -0
  249. package/dist/src/sources/registry.d.ts.map +1 -0
  250. package/dist/src/sources/registry.js +193 -0
  251. package/dist/src/sources/registry.js.map +1 -0
  252. package/dist/src/sources/rest/descriptor.d.ts +16 -0
  253. package/dist/src/sources/rest/descriptor.d.ts.map +1 -0
  254. package/dist/src/sources/rest/descriptor.js +71 -0
  255. package/dist/src/sources/rest/descriptor.js.map +1 -0
  256. package/dist/src/sources/rest/index.d.ts +14 -0
  257. package/dist/src/sources/rest/index.d.ts.map +1 -0
  258. package/dist/src/sources/rest/index.js +13 -0
  259. package/dist/src/sources/rest/index.js.map +1 -0
  260. package/dist/src/sources/rest/mapping.d.ts +30 -0
  261. package/dist/src/sources/rest/mapping.d.ts.map +1 -0
  262. package/dist/src/sources/rest/mapping.js +362 -0
  263. package/dist/src/sources/rest/mapping.js.map +1 -0
  264. package/dist/src/sources/rest/openalex.d.ts +27 -0
  265. package/dist/src/sources/rest/openalex.d.ts.map +1 -0
  266. package/dist/src/sources/rest/openalex.js +269 -0
  267. package/dist/src/sources/rest/openalex.js.map +1 -0
  268. package/dist/src/sources/rest/paging.d.ts +53 -0
  269. package/dist/src/sources/rest/paging.d.ts.map +1 -0
  270. package/dist/src/sources/rest/paging.js +138 -0
  271. package/dist/src/sources/rest/paging.js.map +1 -0
  272. package/dist/src/sources/rest/params.d.ts +216 -0
  273. package/dist/src/sources/rest/params.d.ts.map +1 -0
  274. package/dist/src/sources/rest/params.js +7 -0
  275. package/dist/src/sources/rest/params.js.map +1 -0
  276. package/dist/src/sources/rest/records.d.ts +41 -0
  277. package/dist/src/sources/rest/records.d.ts.map +1 -0
  278. package/dist/src/sources/rest/records.js +240 -0
  279. package/dist/src/sources/rest/records.js.map +1 -0
  280. package/dist/src/sources/rest/samples/deps-dev.d.ts +10 -0
  281. package/dist/src/sources/rest/samples/deps-dev.d.ts.map +1 -0
  282. package/dist/src/sources/rest/samples/deps-dev.js +47 -0
  283. package/dist/src/sources/rest/samples/deps-dev.js.map +1 -0
  284. package/dist/src/sources/rest/samples/string.d.ts +9 -0
  285. package/dist/src/sources/rest/samples/string.d.ts.map +1 -0
  286. package/dist/src/sources/rest/samples/string.js +42 -0
  287. package/dist/src/sources/rest/samples/string.js.map +1 -0
  288. package/dist/src/sources/rest/selectors.d.ts +41 -0
  289. package/dist/src/sources/rest/selectors.d.ts.map +1 -0
  290. package/dist/src/sources/rest/selectors.js +81 -0
  291. package/dist/src/sources/rest/selectors.js.map +1 -0
  292. package/dist/src/sources/rest/source.d.ts +67 -0
  293. package/dist/src/sources/rest/source.d.ts.map +1 -0
  294. package/dist/src/sources/rest/source.js +635 -0
  295. package/dist/src/sources/rest/source.js.map +1 -0
  296. package/dist/src/sources/rest/templates.d.ts +38 -0
  297. package/dist/src/sources/rest/templates.d.ts.map +1 -0
  298. package/dist/src/sources/rest/templates.js +125 -0
  299. package/dist/src/sources/rest/templates.js.map +1 -0
  300. package/dist/src/sources/run.d.ts +93 -0
  301. package/dist/src/sources/run.d.ts.map +1 -0
  302. package/dist/src/sources/run.js +673 -0
  303. package/dist/src/sources/run.js.map +1 -0
  304. package/dist/src/sources/sha256.d.ts +12 -0
  305. package/dist/src/sources/sha256.d.ts.map +1 -0
  306. package/dist/src/sources/sha256.js +95 -0
  307. package/dist/src/sources/sha256.js.map +1 -0
  308. package/dist/src/sources/sigv4.d.ts +24 -0
  309. package/dist/src/sources/sigv4.d.ts.map +1 -0
  310. package/dist/src/sources/sigv4.js +182 -0
  311. package/dist/src/sources/sigv4.js.map +1 -0
  312. package/dist/src/sources/testing.d.ts +96 -0
  313. package/dist/src/sources/testing.d.ts.map +1 -0
  314. package/dist/src/sources/testing.js +138 -0
  315. package/dist/src/sources/testing.js.map +1 -0
  316. package/dist/src/sources/types.d.ts +665 -0
  317. package/dist/src/sources/types.d.ts.map +1 -0
  318. package/dist/src/sources/types.js +10 -0
  319. package/dist/src/sources/types.js.map +1 -0
  320. package/dist/src/styles/canon/enums.d.ts.map +1 -1
  321. package/dist/src/styles/canon/enums.js +1 -0
  322. package/dist/src/styles/canon/enums.js.map +1 -1
  323. package/dist/src/styles/cyjs/cascade.d.ts.map +1 -1
  324. package/dist/src/styles/cyjs/cascade.js +68 -2
  325. package/dist/src/styles/cyjs/cascade.js.map +1 -1
  326. package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -1
  327. package/dist/src/styles/cyjs/defaults-table.js +2 -0
  328. package/dist/src/styles/cyjs/defaults-table.js.map +1 -1
  329. package/dist/src/styles/cyjs/emit.d.ts.map +1 -1
  330. package/dist/src/styles/cyjs/emit.js +18 -7
  331. package/dist/src/styles/cyjs/emit.js.map +1 -1
  332. package/dist/src/styles/cyjs/mappers.d.ts +4 -1
  333. package/dist/src/styles/cyjs/mappers.d.ts.map +1 -1
  334. package/dist/src/styles/cyjs/mappers.js +2 -0
  335. package/dist/src/styles/cyjs/mappers.js.map +1 -1
  336. package/dist/src/styles/cytoscape/emit.d.ts.map +1 -1
  337. package/dist/src/styles/cytoscape/emit.js +59 -7
  338. package/dist/src/styles/cytoscape/emit.js.map +1 -1
  339. package/dist/src/styles/cytoscape/lexicon.d.ts +6 -0
  340. package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -1
  341. package/dist/src/styles/cytoscape/lexicon.js +26 -2
  342. package/dist/src/styles/cytoscape/lexicon.js.map +1 -1
  343. package/dist/src/styles/cytoscape/resolve.d.ts +4 -1
  344. package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -1
  345. package/dist/src/styles/cytoscape/resolve.js +10 -6
  346. package/dist/src/styles/cytoscape/resolve.js.map +1 -1
  347. package/dist/src/styles/cytoscape/translate.d.ts.map +1 -1
  348. package/dist/src/styles/cytoscape/translate.js +10 -10
  349. package/dist/src/styles/cytoscape/translate.js.map +1 -1
  350. package/dist/src/styles/defaults.d.ts +30 -0
  351. package/dist/src/styles/defaults.d.ts.map +1 -1
  352. package/dist/src/styles/defaults.js +45 -4
  353. package/dist/src/styles/defaults.js.map +1 -1
  354. package/dist/src/styles/io/block.d.ts.map +1 -1
  355. package/dist/src/styles/io/block.js +9 -0
  356. package/dist/src/styles/io/block.js.map +1 -1
  357. package/dist/src/styles/io/writer.d.ts.map +1 -1
  358. package/dist/src/styles/io/writer.js +7 -3
  359. package/dist/src/styles/io/writer.js.map +1 -1
  360. package/dist/src/styles/plan/resolve.d.ts +2 -1
  361. package/dist/src/styles/plan/resolve.d.ts.map +1 -1
  362. package/dist/src/styles/plan/resolve.js +13 -2
  363. package/dist/src/styles/plan/resolve.js.map +1 -1
  364. package/dist/src/styles/types.d.ts +19 -2
  365. package/dist/src/styles/types.d.ts.map +1 -1
  366. package/dist/src/styles/vocabulary.d.ts.map +1 -1
  367. package/dist/src/styles/vocabulary.js +15 -1
  368. package/dist/src/styles/vocabulary.js.map +1 -1
  369. package/dist/src/types.d.ts +19 -5
  370. package/dist/src/types.d.ts.map +1 -1
  371. package/dist/src/types.js.map +1 -1
  372. package/dist/styles.js +11 -11
  373. package/dist/xgmml.js +3 -3
  374. package/docs/samples/people.json +6 -0
  375. package/package.json +29 -4
  376. package/src/common/report.ts +27 -7
  377. package/src/formats/cx/styles.ts +1 -0
  378. package/src/formats/dot/styles.ts +3 -1
  379. package/src/formats/gexf/styles.ts +185 -37
  380. package/src/formats/gml/styles.ts +5 -4
  381. package/src/formats/graphml/styles-plain.ts +3 -9
  382. package/src/formats/graphml/styles-yed.ts +93 -20
  383. package/src/formats/pajek/styles.ts +1 -0
  384. package/src/formats/xgmml/styles.ts +1 -0
  385. package/src/index.ts +90 -0
  386. package/src/registry.ts +326 -1
  387. package/src/sources/builtins.ts +56 -0
  388. package/src/sources/codes.ts +235 -0
  389. package/src/sources/context.ts +893 -0
  390. package/src/sources/credentials.ts +409 -0
  391. package/src/sources/cypher/descriptor.ts +125 -0
  392. package/src/sources/cypher/flatten.ts +323 -0
  393. package/src/sources/cypher/index.ts +498 -0
  394. package/src/sources/cypher/params.ts +41 -0
  395. package/src/sources/cypher/profiles.ts +78 -0
  396. package/src/sources/cypher/query-builder.ts +294 -0
  397. package/src/sources/cypher/transports/bolt.ts +228 -0
  398. package/src/sources/cypher/transports/neptune-analytics.ts +41 -0
  399. package/src/sources/cypher/transports/neptune-https.ts +122 -0
  400. package/src/sources/cypher/transports/query-api.ts +100 -0
  401. package/src/sources/cypher/transports/transport.ts +139 -0
  402. package/src/sources/cypher/types-map.ts +418 -0
  403. package/src/sources/define.ts +195 -0
  404. package/src/sources/fail.ts +70 -0
  405. package/src/sources/ids.ts +74 -0
  406. package/src/sources/ndex/client.ts +102 -0
  407. package/src/sources/ndex/descriptor.ts +64 -0
  408. package/src/sources/ndex/expand.ts +100 -0
  409. package/src/sources/ndex/index.ts +235 -0
  410. package/src/sources/ndex/params.ts +17 -0
  411. package/src/sources/ndex/share-url.ts +84 -0
  412. package/src/sources/params.ts +29 -0
  413. package/src/sources/registry.ts +325 -0
  414. package/src/sources/rest/descriptor.ts +74 -0
  415. package/src/sources/rest/index.ts +22 -0
  416. package/src/sources/rest/mapping.ts +401 -0
  417. package/src/sources/rest/openalex.ts +288 -0
  418. package/src/sources/rest/paging.ts +180 -0
  419. package/src/sources/rest/params.ts +243 -0
  420. package/src/sources/rest/records.ts +289 -0
  421. package/src/sources/rest/samples/deps-dev.ts +49 -0
  422. package/src/sources/rest/samples/string.ts +44 -0
  423. package/src/sources/rest/selectors.ts +91 -0
  424. package/src/sources/rest/source.ts +760 -0
  425. package/src/sources/rest/templates.ts +151 -0
  426. package/src/sources/run.ts +793 -0
  427. package/src/sources/sha256.ts +99 -0
  428. package/src/sources/sigv4.ts +207 -0
  429. package/src/sources/testing.ts +210 -0
  430. package/src/sources/types.ts +741 -0
  431. package/src/styles/canon/enums.ts +1 -0
  432. package/src/styles/cyjs/cascade.ts +81 -2
  433. package/src/styles/cyjs/defaults-table.ts +2 -0
  434. package/src/styles/cyjs/emit.ts +18 -7
  435. package/src/styles/cyjs/mappers.ts +6 -1
  436. package/src/styles/cytoscape/emit.ts +61 -7
  437. package/src/styles/cytoscape/lexicon.ts +28 -2
  438. package/src/styles/cytoscape/resolve.ts +22 -6
  439. package/src/styles/cytoscape/translate.ts +11 -11
  440. package/src/styles/defaults.ts +93 -4
  441. package/src/styles/io/block.ts +10 -0
  442. package/src/styles/io/writer.ts +8 -3
  443. package/src/styles/plan/resolve.ts +14 -2
  444. package/src/styles/types.ts +28 -2
  445. package/src/styles/vocabulary.ts +15 -1
  446. package/src/types.ts +19 -5
  447. package/dist/chunks/block-DiGq58c3.js.map +0 -1
  448. package/dist/chunks/emit-CwU8cUmG.js.map +0 -1
  449. package/dist/chunks/export-BvqAXCKh.js.map +0 -1
  450. package/dist/chunks/format-BpQBx8MZ.js.map +0 -1
  451. package/dist/chunks/importer-BSvfrX_h.js.map +0 -1
  452. package/dist/chunks/importer-CMmeMWlC.js.map +0 -1
  453. package/dist/chunks/importer-COTK9Tsl.js.map +0 -1
  454. package/dist/chunks/importer-DiZRmOQG.js.map +0 -1
  455. package/dist/chunks/importer-e6LGpqHB.js.map +0 -1
  456. package/dist/chunks/lexicon-CT69Kd87.js.map +0 -1
  457. package/dist/chunks/styles-BQnsga7p.js.map +0 -1
  458. package/dist/chunks/styles-D3fRphrO.js.map +0 -1
  459. package/dist/chunks/styles-yed-BF5x3_Y5.js.map +0 -1
  460. 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