@graphty/graph-io 0.3.47 → 0.3.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (770) hide show
  1. package/dist/chunks/{approximations-wWjCRzKj.js → approximations-Bzn3L-je.js} +2 -2
  2. package/dist/chunks/{approximations-wWjCRzKj.js.map → approximations-Bzn3L-je.js.map} +1 -1
  3. package/dist/chunks/bends-BGXjv_U4.js +129 -0
  4. package/dist/chunks/bends-BGXjv_U4.js.map +1 -0
  5. package/dist/chunks/{block-DiGq58c3.js → block-iptrlMBb.js} +947 -134
  6. package/dist/chunks/block-iptrlMBb.js.map +1 -0
  7. package/dist/chunks/choose-CczZJaX_.js +717 -0
  8. package/dist/chunks/choose-CczZJaX_.js.map +1 -0
  9. package/dist/chunks/codes-BE2xir2k.js +157 -0
  10. package/dist/chunks/codes-BE2xir2k.js.map +1 -0
  11. package/dist/chunks/{constants-BKwqelYD.js → constants-CKkYLPtt.js} +2 -2
  12. package/dist/chunks/{constants-BKwqelYD.js.map → constants-CKkYLPtt.js.map} +1 -1
  13. package/dist/chunks/context-C3p0RQxR.js +664 -0
  14. package/dist/chunks/context-C3p0RQxR.js.map +1 -0
  15. package/dist/chunks/{convert-BcQ8_jMo.js → convert-Ct2zelbQ.js} +7 -2
  16. package/dist/chunks/convert-Ct2zelbQ.js.map +1 -0
  17. package/dist/chunks/credentials-DXHx7nwR.js +349 -0
  18. package/dist/chunks/credentials-DXHx7nwR.js.map +1 -0
  19. package/dist/chunks/cx-export-Bt6NoqTQ.js +259 -0
  20. package/dist/chunks/cx-export-Bt6NoqTQ.js.map +1 -0
  21. package/dist/chunks/descriptor-B28U25x4.js +60 -0
  22. package/dist/chunks/descriptor-B28U25x4.js.map +1 -0
  23. package/dist/chunks/descriptor-C-YDhtsn.js +48 -0
  24. package/dist/chunks/descriptor-C-YDhtsn.js.map +1 -0
  25. package/dist/chunks/descriptor-DLA5kINx.js +142 -0
  26. package/dist/chunks/descriptor-DLA5kINx.js.map +1 -0
  27. package/dist/chunks/{emit-CwU8cUmG.js → emit-BwHQkZle.js} +1690 -103
  28. package/dist/chunks/emit-BwHQkZle.js.map +1 -0
  29. package/dist/chunks/{escape-CgzxiYPg.js → escape-CuCIzNMB.js} +12 -12
  30. package/dist/chunks/{escape-CgzxiYPg.js.map → escape-CuCIzNMB.js.map} +1 -1
  31. package/dist/chunks/{export-BvqAXCKh.js → export-Cha4dRFz.js} +48 -1780
  32. package/dist/chunks/export-Cha4dRFz.js.map +1 -0
  33. package/dist/chunks/{exporter--Mk9gXCJ.js → exporter-BP6otMO6.js} +6 -4
  34. package/dist/chunks/{exporter--Mk9gXCJ.js.map → exporter-BP6otMO6.js.map} +1 -1
  35. package/dist/chunks/{exporter-CrDWIyiq.js → exporter-D2CETOMK.js} +1222 -154
  36. package/dist/chunks/exporter-D2CETOMK.js.map +1 -0
  37. package/dist/chunks/{exporter-DndFlGSa.js → exporter-D9yMtocA.js} +7 -6
  38. package/dist/chunks/{exporter-DndFlGSa.js.map → exporter-D9yMtocA.js.map} +1 -1
  39. package/dist/chunks/exporter-_jrBTnos.js +1009 -0
  40. package/dist/chunks/exporter-_jrBTnos.js.map +1 -0
  41. package/dist/chunks/{exporter-CJgfhF-l.js → exporter-nDfxIK5D.js} +9 -7
  42. package/dist/chunks/{exporter-CJgfhF-l.js.map → exporter-nDfxIK5D.js.map} +1 -1
  43. package/dist/chunks/format-BXiAb-1h.js +408 -0
  44. package/dist/chunks/format-BXiAb-1h.js.map +1 -0
  45. package/dist/chunks/{generic-Dq1ntt9q.js → generic-ymWCETAJ.js} +387 -31
  46. package/dist/chunks/generic-ymWCETAJ.js.map +1 -0
  47. package/dist/chunks/{importer-CMmeMWlC.js → importer-B92x1xY5.js} +15 -263
  48. package/dist/chunks/importer-B92x1xY5.js.map +1 -0
  49. package/dist/chunks/{importer-DiZRmOQG.js → importer-CT9mJ1nn.js} +328 -90
  50. package/dist/chunks/importer-CT9mJ1nn.js.map +1 -0
  51. package/dist/chunks/{importer-COTK9Tsl.js → importer-DaLTjbds.js} +116 -1099
  52. package/dist/chunks/importer-DaLTjbds.js.map +1 -0
  53. package/dist/chunks/{importer-iFYPEKaJ.js → importer-GREKMdIf.js} +28 -16
  54. package/dist/chunks/importer-GREKMdIf.js.map +1 -0
  55. package/dist/chunks/{importer-BSvfrX_h.js → importer-PqaaKKnY.js} +23 -1016
  56. package/dist/chunks/importer-PqaaKKnY.js.map +1 -0
  57. package/dist/chunks/{importer-yh_aBCU6.js → importer-Vn5QvmmJ.js} +66 -12
  58. package/dist/chunks/importer-Vn5QvmmJ.js.map +1 -0
  59. package/dist/chunks/{importer-e6LGpqHB.js → importer-vRq4h3j5.js} +1470 -354
  60. package/dist/chunks/importer-vRq4h3j5.js.map +1 -0
  61. package/dist/chunks/input-CAxt_aV-.js +1397 -0
  62. package/dist/chunks/input-CAxt_aV-.js.map +1 -0
  63. package/dist/chunks/{json-elements-DJZRZ6jd.js → json-elements-Cq76WjnZ.js} +4 -4
  64. package/dist/chunks/{json-elements-DJZRZ6jd.js.map → json-elements-Cq76WjnZ.js.map} +1 -1
  65. package/dist/chunks/{lexicon-CT69Kd87.js → lexicon-Clf4QIyl.js} +299 -77
  66. package/dist/chunks/lexicon-Clf4QIyl.js.map +1 -0
  67. package/dist/chunks/{ontology-export-G4MqRdux.js → ontology-export-OMo91mb0.js} +4 -3
  68. package/dist/chunks/{ontology-export-G4MqRdux.js.map → ontology-export-OMo91mb0.js.map} +1 -1
  69. package/dist/chunks/{records-CiaWZrFH.js → records-NJiYvekn.js} +2 -2
  70. package/dist/chunks/{records-CiaWZrFH.js.map → records-NJiYvekn.js.map} +1 -1
  71. package/dist/chunks/{format-BpQBx8MZ.js → report-CwMfYa9J.js} +70 -127
  72. package/dist/chunks/report-CwMfYa9J.js.map +1 -0
  73. package/dist/chunks/round-trip-Zm3_ivgq.js +79 -0
  74. package/dist/chunks/round-trip-Zm3_ivgq.js.map +1 -0
  75. package/dist/chunks/sigv4-EokFic1V.js +247 -0
  76. package/dist/chunks/sigv4-EokFic1V.js.map +1 -0
  77. package/dist/chunks/{styles-BQnsga7p.js → styles-CCs214_3.js} +1300 -168
  78. package/dist/chunks/styles-CCs214_3.js.map +1 -0
  79. package/dist/chunks/styles-Cm62yyQX.js +2812 -0
  80. package/dist/chunks/styles-Cm62yyQX.js.map +1 -0
  81. package/dist/chunks/styles-DPQQIig4.js +1928 -0
  82. package/dist/chunks/styles-DPQQIig4.js.map +1 -0
  83. package/dist/chunks/styles-yed-UMFdNqze.js +1213 -0
  84. package/dist/chunks/styles-yed-UMFdNqze.js.map +1 -0
  85. package/dist/chunks/{text-CzJNFOS9.js → text-ystE2bYi.js} +2 -2
  86. package/dist/chunks/{text-CzJNFOS9.js.map → text-ystE2bYi.js.map} +1 -1
  87. package/dist/csv.js +7 -5
  88. package/dist/csv.js.map +1 -1
  89. package/dist/cx.js +5 -4
  90. package/dist/cx.js.map +1 -1
  91. package/dist/cx2.js +2 -2
  92. package/dist/cys.js +1 -1
  93. package/dist/dot.js +5 -4
  94. package/dist/dot.js.map +1 -1
  95. package/dist/gexf.js +42 -10
  96. package/dist/gexf.js.map +1 -1
  97. package/dist/gml.js +850 -193
  98. package/dist/gml.js.map +1 -1
  99. package/dist/graph-io.js +1189 -220
  100. package/dist/graph-io.js.map +1 -1
  101. package/dist/graphml.js +3 -3
  102. package/dist/json.js +3 -2
  103. package/dist/neo4j.js +6 -4
  104. package/dist/neo4j.js.map +1 -1
  105. package/dist/obo.js +1 -1
  106. package/dist/pajek.js +1 -1
  107. package/dist/positions.js +45 -3
  108. package/dist/positions.js.map +1 -1
  109. package/dist/sources-cypher.d.ts +1 -0
  110. package/dist/sources-cypher.js +1351 -0
  111. package/dist/sources-cypher.js.map +1 -0
  112. package/dist/sources-ndex.d.ts +1 -0
  113. package/dist/sources-ndex.js +278 -0
  114. package/dist/sources-ndex.js.map +1 -0
  115. package/dist/sources-rest.d.ts +1 -0
  116. package/dist/sources-rest.js +1377 -0
  117. package/dist/sources-rest.js.map +1 -0
  118. package/dist/sources-sparql.d.ts +1 -0
  119. package/dist/sources-sparql.js +405 -0
  120. package/dist/sources-sparql.js.map +1 -0
  121. package/dist/src/common/report.d.ts +6 -3
  122. package/dist/src/common/report.d.ts.map +1 -1
  123. package/dist/src/common/report.js +15 -9
  124. package/dist/src/common/report.js.map +1 -1
  125. package/dist/src/formats/cx/importer.d.ts.map +1 -1
  126. package/dist/src/formats/cx/importer.js +5 -1
  127. package/dist/src/formats/cx/importer.js.map +1 -1
  128. package/dist/src/formats/cx/styles.d.ts +24 -1
  129. package/dist/src/formats/cx/styles.d.ts.map +1 -1
  130. package/dist/src/formats/cx/styles.js +118 -11
  131. package/dist/src/formats/cx/styles.js.map +1 -1
  132. package/dist/src/formats/cx2/importer.d.ts.map +1 -1
  133. package/dist/src/formats/cx2/importer.js +1 -0
  134. package/dist/src/formats/cx2/importer.js.map +1 -1
  135. package/dist/src/formats/cx2/styles.d.ts.map +1 -1
  136. package/dist/src/formats/cx2/styles.js +3 -1
  137. package/dist/src/formats/cx2/styles.js.map +1 -1
  138. package/dist/src/formats/cys/importer.d.ts.map +1 -1
  139. package/dist/src/formats/cys/importer.js +1 -0
  140. package/dist/src/formats/cys/importer.js.map +1 -1
  141. package/dist/src/formats/cys/styles.d.ts +2 -0
  142. package/dist/src/formats/cys/styles.d.ts.map +1 -1
  143. package/dist/src/formats/cys/styles.js +15 -7
  144. package/dist/src/formats/cys/styles.js.map +1 -1
  145. package/dist/src/formats/dot/drawing.d.ts +98 -0
  146. package/dist/src/formats/dot/drawing.d.ts.map +1 -0
  147. package/dist/src/formats/dot/drawing.js +734 -0
  148. package/dist/src/formats/dot/drawing.js.map +1 -0
  149. package/dist/src/formats/dot/importer.d.ts.map +1 -1
  150. package/dist/src/formats/dot/importer.js +108 -31
  151. package/dist/src/formats/dot/importer.js.map +1 -1
  152. package/dist/src/formats/dot/label-places.d.ts +34 -0
  153. package/dist/src/formats/dot/label-places.d.ts.map +1 -0
  154. package/dist/src/formats/dot/label-places.js +179 -0
  155. package/dist/src/formats/dot/label-places.js.map +1 -0
  156. package/dist/src/formats/dot/record.d.ts +50 -0
  157. package/dist/src/formats/dot/record.d.ts.map +1 -0
  158. package/dist/src/formats/dot/record.js +275 -0
  159. package/dist/src/formats/dot/record.js.map +1 -0
  160. package/dist/src/formats/dot/styles.d.ts +62 -2
  161. package/dist/src/formats/dot/styles.d.ts.map +1 -1
  162. package/dist/src/formats/dot/styles.js +1457 -120
  163. package/dist/src/formats/dot/styles.js.map +1 -1
  164. package/dist/src/formats/gexf/dialog-metrics.d.ts +15 -0
  165. package/dist/src/formats/gexf/dialog-metrics.d.ts.map +1 -0
  166. package/dist/src/formats/gexf/dialog-metrics.js +59 -0
  167. package/dist/src/formats/gexf/dialog-metrics.js.map +1 -0
  168. package/dist/src/formats/gexf/importer.d.ts +7 -0
  169. package/dist/src/formats/gexf/importer.d.ts.map +1 -1
  170. package/dist/src/formats/gexf/importer.js +41 -5
  171. package/dist/src/formats/gexf/importer.js.map +1 -1
  172. package/dist/src/formats/gexf/preview.d.ts +77 -0
  173. package/dist/src/formats/gexf/preview.d.ts.map +1 -0
  174. package/dist/src/formats/gexf/preview.js +191 -0
  175. package/dist/src/formats/gexf/preview.js.map +1 -0
  176. package/dist/src/formats/gexf/schema.d.ts.map +1 -1
  177. package/dist/src/formats/gexf/schema.js +2 -1
  178. package/dist/src/formats/gexf/schema.js.map +1 -1
  179. package/dist/src/formats/gexf/styles.d.ts +60 -16
  180. package/dist/src/formats/gexf/styles.d.ts.map +1 -1
  181. package/dist/src/formats/gexf/styles.js +883 -131
  182. package/dist/src/formats/gexf/styles.js.map +1 -1
  183. package/dist/src/formats/gml/importer.d.ts +5 -2
  184. package/dist/src/formats/gml/importer.d.ts.map +1 -1
  185. package/dist/src/formats/gml/importer.js +258 -71
  186. package/dist/src/formats/gml/importer.js.map +1 -1
  187. package/dist/src/formats/gml/index.d.ts +1 -1
  188. package/dist/src/formats/gml/index.d.ts.map +1 -1
  189. package/dist/src/formats/gml/index.js +1 -1
  190. package/dist/src/formats/gml/index.js.map +1 -1
  191. package/dist/src/formats/gml/positions.d.ts +7 -0
  192. package/dist/src/formats/gml/positions.d.ts.map +1 -1
  193. package/dist/src/formats/gml/positions.js +29 -7
  194. package/dist/src/formats/gml/positions.js.map +1 -1
  195. package/dist/src/formats/gml/styles.d.ts.map +1 -1
  196. package/dist/src/formats/gml/styles.js +756 -103
  197. package/dist/src/formats/gml/styles.js.map +1 -1
  198. package/dist/src/formats/graphml/styles-plain.d.ts.map +1 -1
  199. package/dist/src/formats/graphml/styles-plain.js +8 -12
  200. package/dist/src/formats/graphml/styles-plain.js.map +1 -1
  201. package/dist/src/formats/graphml/styles-yed.d.ts +21 -15
  202. package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -1
  203. package/dist/src/formats/graphml/styles-yed.js +749 -148
  204. package/dist/src/formats/graphml/styles-yed.js.map +1 -1
  205. package/dist/src/formats/graphml/styles-yfiles3.d.ts +1 -1
  206. package/dist/src/formats/graphml/styles-yfiles3.d.ts.map +1 -1
  207. package/dist/src/formats/graphml/styles-yfiles3.js +429 -64
  208. package/dist/src/formats/graphml/styles-yfiles3.js.map +1 -1
  209. package/dist/src/formats/graphml/yfiles.d.ts +3 -3
  210. package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
  211. package/dist/src/formats/graphml/yfiles.js +16 -6
  212. package/dist/src/formats/graphml/yfiles.js.map +1 -1
  213. package/dist/src/formats/json/dialect.d.ts +3 -2
  214. package/dist/src/formats/json/dialect.d.ts.map +1 -1
  215. package/dist/src/formats/json/dialect.js +39 -5
  216. package/dist/src/formats/json/dialect.js.map +1 -1
  217. package/dist/src/formats/json/importer.d.ts +13 -2
  218. package/dist/src/formats/json/importer.d.ts.map +1 -1
  219. package/dist/src/formats/json/importer.js +42 -6
  220. package/dist/src/formats/json/importer.js.map +1 -1
  221. package/dist/src/formats/json/index.d.ts +1 -1
  222. package/dist/src/formats/json/index.d.ts.map +1 -1
  223. package/dist/src/formats/json/index.js +1 -1
  224. package/dist/src/formats/json/index.js.map +1 -1
  225. package/dist/src/formats/json/positions.d.ts +5 -2
  226. package/dist/src/formats/json/positions.d.ts.map +1 -1
  227. package/dist/src/formats/json/positions.js +20 -4
  228. package/dist/src/formats/json/positions.js.map +1 -1
  229. package/dist/src/formats/json/styles.d.ts +12 -1
  230. package/dist/src/formats/json/styles.d.ts.map +1 -1
  231. package/dist/src/formats/json/styles.js +1755 -136
  232. package/dist/src/formats/json/styles.js.map +1 -1
  233. package/dist/src/formats/pajek/draw.d.ts +96 -0
  234. package/dist/src/formats/pajek/draw.d.ts.map +1 -0
  235. package/dist/src/formats/pajek/draw.js +372 -0
  236. package/dist/src/formats/pajek/draw.js.map +1 -0
  237. package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
  238. package/dist/src/formats/pajek/exporter.js +70 -51
  239. package/dist/src/formats/pajek/exporter.js.map +1 -1
  240. package/dist/src/formats/pajek/importer.d.ts +9 -0
  241. package/dist/src/formats/pajek/importer.d.ts.map +1 -1
  242. package/dist/src/formats/pajek/importer.js +233 -102
  243. package/dist/src/formats/pajek/importer.js.map +1 -1
  244. package/dist/src/formats/pajek/index.d.ts +1 -0
  245. package/dist/src/formats/pajek/index.d.ts.map +1 -1
  246. package/dist/src/formats/pajek/index.js.map +1 -1
  247. package/dist/src/formats/pajek/styles.d.ts +15 -7
  248. package/dist/src/formats/pajek/styles.d.ts.map +1 -1
  249. package/dist/src/formats/pajek/styles.js +1279 -114
  250. package/dist/src/formats/pajek/styles.js.map +1 -1
  251. package/dist/src/formats/pajek/syntax.d.ts +10 -1
  252. package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
  253. package/dist/src/formats/pajek/syntax.js +26 -2
  254. package/dist/src/formats/pajek/syntax.js.map +1 -1
  255. package/dist/src/formats/xgmml/emit.d.ts +1 -0
  256. package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
  257. package/dist/src/formats/xgmml/emit.js +65 -5
  258. package/dist/src/formats/xgmml/emit.js.map +1 -1
  259. package/dist/src/formats/xgmml/styles.d.ts +23 -3
  260. package/dist/src/formats/xgmml/styles.d.ts.map +1 -1
  261. package/dist/src/formats/xgmml/styles.js +278 -60
  262. package/dist/src/formats/xgmml/styles.js.map +1 -1
  263. package/dist/src/index.d.ts +10 -2
  264. package/dist/src/index.d.ts.map +1 -1
  265. package/dist/src/index.js +11 -2
  266. package/dist/src/index.js.map +1 -1
  267. package/dist/src/positions/convert.d.ts.map +1 -1
  268. package/dist/src/positions/convert.js +11 -1
  269. package/dist/src/positions/convert.js.map +1 -1
  270. package/dist/src/positions/extract.d.ts.map +1 -1
  271. package/dist/src/positions/extract.js +53 -1
  272. package/dist/src/positions/extract.js.map +1 -1
  273. package/dist/src/positions/index.d.ts +1 -1
  274. package/dist/src/positions/index.d.ts.map +1 -1
  275. package/dist/src/positions/types.d.ts +59 -0
  276. package/dist/src/positions/types.d.ts.map +1 -1
  277. package/dist/src/registry.d.ts +173 -1
  278. package/dist/src/registry.d.ts.map +1 -1
  279. package/dist/src/registry.js +196 -1
  280. package/dist/src/registry.js.map +1 -1
  281. package/dist/src/sources/builtins.d.ts +11 -0
  282. package/dist/src/sources/builtins.d.ts.map +1 -0
  283. package/dist/src/sources/builtins.js +53 -0
  284. package/dist/src/sources/builtins.js.map +1 -0
  285. package/dist/src/sources/codes.d.ts +230 -0
  286. package/dist/src/sources/codes.d.ts.map +1 -0
  287. package/dist/src/sources/codes.js +58 -0
  288. package/dist/src/sources/codes.js.map +1 -0
  289. package/dist/src/sources/context.d.ts +112 -0
  290. package/dist/src/sources/context.d.ts.map +1 -0
  291. package/dist/src/sources/context.js +740 -0
  292. package/dist/src/sources/context.js.map +1 -0
  293. package/dist/src/sources/credentials.d.ts +179 -0
  294. package/dist/src/sources/credentials.d.ts.map +1 -0
  295. package/dist/src/sources/credentials.js +301 -0
  296. package/dist/src/sources/credentials.js.map +1 -0
  297. package/dist/src/sources/cypher/descriptor.d.ts +21 -0
  298. package/dist/src/sources/cypher/descriptor.d.ts.map +1 -0
  299. package/dist/src/sources/cypher/descriptor.js +124 -0
  300. package/dist/src/sources/cypher/descriptor.js.map +1 -0
  301. package/dist/src/sources/cypher/flatten.d.ts +72 -0
  302. package/dist/src/sources/cypher/flatten.d.ts.map +1 -0
  303. package/dist/src/sources/cypher/flatten.js +279 -0
  304. package/dist/src/sources/cypher/flatten.js.map +1 -0
  305. package/dist/src/sources/cypher/index.d.ts +33 -0
  306. package/dist/src/sources/cypher/index.d.ts.map +1 -0
  307. package/dist/src/sources/cypher/index.js +511 -0
  308. package/dist/src/sources/cypher/index.js.map +1 -0
  309. package/dist/src/sources/cypher/params.d.ts +40 -0
  310. package/dist/src/sources/cypher/params.d.ts.map +1 -0
  311. package/dist/src/sources/cypher/params.js +6 -0
  312. package/dist/src/sources/cypher/params.js.map +1 -0
  313. package/dist/src/sources/cypher/profiles.d.ts +44 -0
  314. package/dist/src/sources/cypher/profiles.d.ts.map +1 -0
  315. package/dist/src/sources/cypher/profiles.js +61 -0
  316. package/dist/src/sources/cypher/profiles.js.map +1 -0
  317. package/dist/src/sources/cypher/query-builder.d.ts +123 -0
  318. package/dist/src/sources/cypher/query-builder.d.ts.map +1 -0
  319. package/dist/src/sources/cypher/query-builder.js +267 -0
  320. package/dist/src/sources/cypher/query-builder.js.map +1 -0
  321. package/dist/src/sources/cypher/transports/bolt.d.ts +21 -0
  322. package/dist/src/sources/cypher/transports/bolt.d.ts.map +1 -0
  323. package/dist/src/sources/cypher/transports/bolt.js +185 -0
  324. package/dist/src/sources/cypher/transports/bolt.js.map +1 -0
  325. package/dist/src/sources/cypher/transports/neptune-analytics.d.ts +15 -0
  326. package/dist/src/sources/cypher/transports/neptune-analytics.d.ts.map +1 -0
  327. package/dist/src/sources/cypher/transports/neptune-analytics.js +38 -0
  328. package/dist/src/sources/cypher/transports/neptune-analytics.js.map +1 -0
  329. package/dist/src/sources/cypher/transports/neptune-https.d.ts +31 -0
  330. package/dist/src/sources/cypher/transports/neptune-https.d.ts.map +1 -0
  331. package/dist/src/sources/cypher/transports/neptune-https.js +104 -0
  332. package/dist/src/sources/cypher/transports/neptune-https.js.map +1 -0
  333. package/dist/src/sources/cypher/transports/query-api.d.ts +14 -0
  334. package/dist/src/sources/cypher/transports/query-api.d.ts.map +1 -0
  335. package/dist/src/sources/cypher/transports/query-api.js +80 -0
  336. package/dist/src/sources/cypher/transports/query-api.js.map +1 -0
  337. package/dist/src/sources/cypher/transports/transport.d.ts +78 -0
  338. package/dist/src/sources/cypher/transports/transport.d.ts.map +1 -0
  339. package/dist/src/sources/cypher/transports/transport.js +77 -0
  340. package/dist/src/sources/cypher/transports/transport.js.map +1 -0
  341. package/dist/src/sources/cypher/types-map.d.ts +91 -0
  342. package/dist/src/sources/cypher/types-map.d.ts.map +1 -0
  343. package/dist/src/sources/cypher/types-map.js +306 -0
  344. package/dist/src/sources/cypher/types-map.js.map +1 -0
  345. package/dist/src/sources/define.d.ts +47 -0
  346. package/dist/src/sources/define.d.ts.map +1 -0
  347. package/dist/src/sources/define.js +173 -0
  348. package/dist/src/sources/define.js.map +1 -0
  349. package/dist/src/sources/fail.d.ts +33 -0
  350. package/dist/src/sources/fail.d.ts.map +1 -0
  351. package/dist/src/sources/fail.js +49 -0
  352. package/dist/src/sources/fail.js.map +1 -0
  353. package/dist/src/sources/ids.d.ts +69 -0
  354. package/dist/src/sources/ids.d.ts.map +1 -0
  355. package/dist/src/sources/ids.js +69 -0
  356. package/dist/src/sources/ids.js.map +1 -0
  357. package/dist/src/sources/ndex/client.d.ts +31 -0
  358. package/dist/src/sources/ndex/client.d.ts.map +1 -0
  359. package/dist/src/sources/ndex/client.js +90 -0
  360. package/dist/src/sources/ndex/client.js.map +1 -0
  361. package/dist/src/sources/ndex/descriptor.d.ts +10 -0
  362. package/dist/src/sources/ndex/descriptor.d.ts.map +1 -0
  363. package/dist/src/sources/ndex/descriptor.js +55 -0
  364. package/dist/src/sources/ndex/descriptor.js.map +1 -0
  365. package/dist/src/sources/ndex/expand.d.ts +20 -0
  366. package/dist/src/sources/ndex/expand.d.ts.map +1 -0
  367. package/dist/src/sources/ndex/expand.js +87 -0
  368. package/dist/src/sources/ndex/expand.js.map +1 -0
  369. package/dist/src/sources/ndex/index.d.ts +25 -0
  370. package/dist/src/sources/ndex/index.d.ts.map +1 -0
  371. package/dist/src/sources/ndex/index.js +191 -0
  372. package/dist/src/sources/ndex/index.js.map +1 -0
  373. package/dist/src/sources/ndex/params.d.ts +17 -0
  374. package/dist/src/sources/ndex/params.d.ts.map +1 -0
  375. package/dist/src/sources/ndex/params.js +6 -0
  376. package/dist/src/sources/ndex/params.js.map +1 -0
  377. package/dist/src/sources/ndex/share-url.d.ts +40 -0
  378. package/dist/src/sources/ndex/share-url.d.ts.map +1 -0
  379. package/dist/src/sources/ndex/share-url.js +64 -0
  380. package/dist/src/sources/ndex/share-url.js.map +1 -0
  381. package/dist/src/sources/params.d.ts +31 -0
  382. package/dist/src/sources/params.d.ts.map +1 -0
  383. package/dist/src/sources/params.js +6 -0
  384. package/dist/src/sources/params.js.map +1 -0
  385. package/dist/src/sources/registry.d.ts +118 -0
  386. package/dist/src/sources/registry.d.ts.map +1 -0
  387. package/dist/src/sources/registry.js +193 -0
  388. package/dist/src/sources/registry.js.map +1 -0
  389. package/dist/src/sources/rest/descriptor.d.ts +16 -0
  390. package/dist/src/sources/rest/descriptor.d.ts.map +1 -0
  391. package/dist/src/sources/rest/descriptor.js +76 -0
  392. package/dist/src/sources/rest/descriptor.js.map +1 -0
  393. package/dist/src/sources/rest/index.d.ts +14 -0
  394. package/dist/src/sources/rest/index.d.ts.map +1 -0
  395. package/dist/src/sources/rest/index.js +13 -0
  396. package/dist/src/sources/rest/index.js.map +1 -0
  397. package/dist/src/sources/rest/mapping.d.ts +30 -0
  398. package/dist/src/sources/rest/mapping.d.ts.map +1 -0
  399. package/dist/src/sources/rest/mapping.js +362 -0
  400. package/dist/src/sources/rest/mapping.js.map +1 -0
  401. package/dist/src/sources/rest/openalex.d.ts +27 -0
  402. package/dist/src/sources/rest/openalex.d.ts.map +1 -0
  403. package/dist/src/sources/rest/openalex.js +269 -0
  404. package/dist/src/sources/rest/openalex.js.map +1 -0
  405. package/dist/src/sources/rest/paging.d.ts +53 -0
  406. package/dist/src/sources/rest/paging.d.ts.map +1 -0
  407. package/dist/src/sources/rest/paging.js +138 -0
  408. package/dist/src/sources/rest/paging.js.map +1 -0
  409. package/dist/src/sources/rest/params.d.ts +216 -0
  410. package/dist/src/sources/rest/params.d.ts.map +1 -0
  411. package/dist/src/sources/rest/params.js +7 -0
  412. package/dist/src/sources/rest/params.js.map +1 -0
  413. package/dist/src/sources/rest/records.d.ts +41 -0
  414. package/dist/src/sources/rest/records.d.ts.map +1 -0
  415. package/dist/src/sources/rest/records.js +240 -0
  416. package/dist/src/sources/rest/records.js.map +1 -0
  417. package/dist/src/sources/rest/samples/deps-dev.d.ts +10 -0
  418. package/dist/src/sources/rest/samples/deps-dev.d.ts.map +1 -0
  419. package/dist/src/sources/rest/samples/deps-dev.js +47 -0
  420. package/dist/src/sources/rest/samples/deps-dev.js.map +1 -0
  421. package/dist/src/sources/rest/samples/string.d.ts +9 -0
  422. package/dist/src/sources/rest/samples/string.d.ts.map +1 -0
  423. package/dist/src/sources/rest/samples/string.js +42 -0
  424. package/dist/src/sources/rest/samples/string.js.map +1 -0
  425. package/dist/src/sources/rest/selectors.d.ts +41 -0
  426. package/dist/src/sources/rest/selectors.d.ts.map +1 -0
  427. package/dist/src/sources/rest/selectors.js +81 -0
  428. package/dist/src/sources/rest/selectors.js.map +1 -0
  429. package/dist/src/sources/rest/source.d.ts +67 -0
  430. package/dist/src/sources/rest/source.d.ts.map +1 -0
  431. package/dist/src/sources/rest/source.js +650 -0
  432. package/dist/src/sources/rest/source.js.map +1 -0
  433. package/dist/src/sources/rest/templates.d.ts +38 -0
  434. package/dist/src/sources/rest/templates.d.ts.map +1 -0
  435. package/dist/src/sources/rest/templates.js +125 -0
  436. package/dist/src/sources/rest/templates.js.map +1 -0
  437. package/dist/src/sources/run.d.ts +93 -0
  438. package/dist/src/sources/run.d.ts.map +1 -0
  439. package/dist/src/sources/run.js +673 -0
  440. package/dist/src/sources/run.js.map +1 -0
  441. package/dist/src/sources/sha256.d.ts +12 -0
  442. package/dist/src/sources/sha256.d.ts.map +1 -0
  443. package/dist/src/sources/sha256.js +95 -0
  444. package/dist/src/sources/sha256.js.map +1 -0
  445. package/dist/src/sources/sigv4.d.ts +26 -0
  446. package/dist/src/sources/sigv4.d.ts.map +1 -0
  447. package/dist/src/sources/sigv4.js +184 -0
  448. package/dist/src/sources/sigv4.js.map +1 -0
  449. package/dist/src/sources/sparql/descriptor.d.ts +10 -0
  450. package/dist/src/sources/sparql/descriptor.d.ts.map +1 -0
  451. package/dist/src/sources/sparql/descriptor.js +64 -0
  452. package/dist/src/sources/sparql/descriptor.js.map +1 -0
  453. package/dist/src/sources/sparql/index.d.ts +28 -0
  454. package/dist/src/sources/sparql/index.d.ts.map +1 -0
  455. package/dist/src/sources/sparql/index.js +314 -0
  456. package/dist/src/sources/sparql/index.js.map +1 -0
  457. package/dist/src/sources/sparql/ntriples.d.ts +69 -0
  458. package/dist/src/sources/sparql/ntriples.d.ts.map +1 -0
  459. package/dist/src/sources/sparql/ntriples.js +180 -0
  460. package/dist/src/sources/sparql/ntriples.js.map +1 -0
  461. package/dist/src/sources/sparql/params.d.ts +27 -0
  462. package/dist/src/sources/sparql/params.d.ts.map +1 -0
  463. package/dist/src/sources/sparql/params.js +5 -0
  464. package/dist/src/sources/sparql/params.js.map +1 -0
  465. package/dist/src/sources/sparql/query.d.ts +72 -0
  466. package/dist/src/sources/sparql/query.d.ts.map +1 -0
  467. package/dist/src/sources/sparql/query.js +113 -0
  468. package/dist/src/sources/sparql/query.js.map +1 -0
  469. package/dist/src/sources/testing.d.ts +96 -0
  470. package/dist/src/sources/testing.d.ts.map +1 -0
  471. package/dist/src/sources/testing.js +138 -0
  472. package/dist/src/sources/testing.js.map +1 -0
  473. package/dist/src/sources/types.d.ts +696 -0
  474. package/dist/src/sources/types.d.ts.map +1 -0
  475. package/dist/src/sources/types.js +10 -0
  476. package/dist/src/sources/types.js.map +1 -0
  477. package/dist/src/styles/annotations.d.ts +61 -5
  478. package/dist/src/styles/annotations.d.ts.map +1 -1
  479. package/dist/src/styles/annotations.js +130 -22
  480. package/dist/src/styles/annotations.js.map +1 -1
  481. package/dist/src/styles/canon/bends.d.ts +46 -0
  482. package/dist/src/styles/canon/bends.d.ts.map +1 -1
  483. package/dist/src/styles/canon/bends.js +123 -0
  484. package/dist/src/styles/canon/bends.js.map +1 -1
  485. package/dist/src/styles/canon/color-tables.d.ts +6 -1
  486. package/dist/src/styles/canon/color-tables.d.ts.map +1 -1
  487. package/dist/src/styles/canon/color-tables.js +10 -4
  488. package/dist/src/styles/canon/color-tables.js.map +1 -1
  489. package/dist/src/styles/canon/color.d.ts +3 -1
  490. package/dist/src/styles/canon/color.d.ts.map +1 -1
  491. package/dist/src/styles/canon/color.js +103 -3
  492. package/dist/src/styles/canon/color.js.map +1 -1
  493. package/dist/src/styles/canon/enums.d.ts +2 -2
  494. package/dist/src/styles/canon/enums.d.ts.map +1 -1
  495. package/dist/src/styles/canon/enums.js +82 -7
  496. package/dist/src/styles/canon/enums.js.map +1 -1
  497. package/dist/src/styles/canon/graphviz.d.ts +12 -3
  498. package/dist/src/styles/canon/graphviz.d.ts.map +1 -1
  499. package/dist/src/styles/canon/graphviz.js +57 -9
  500. package/dist/src/styles/canon/graphviz.js.map +1 -1
  501. package/dist/src/styles/canon/number.d.ts +8 -0
  502. package/dist/src/styles/canon/number.d.ts.map +1 -1
  503. package/dist/src/styles/canon/number.js +18 -0
  504. package/dist/src/styles/canon/number.js.map +1 -1
  505. package/dist/src/styles/canon/text.d.ts +29 -2
  506. package/dist/src/styles/canon/text.d.ts.map +1 -1
  507. package/dist/src/styles/canon/text.js +156 -16
  508. package/dist/src/styles/canon/text.js.map +1 -1
  509. package/dist/src/styles/codes.d.ts +2 -0
  510. package/dist/src/styles/codes.d.ts.map +1 -1
  511. package/dist/src/styles/codes.js +2 -0
  512. package/dist/src/styles/codes.js.map +1 -1
  513. package/dist/src/styles/cyjs/cascade.d.ts.map +1 -1
  514. package/dist/src/styles/cyjs/cascade.js +1037 -35
  515. package/dist/src/styles/cyjs/cascade.js.map +1 -1
  516. package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -1
  517. package/dist/src/styles/cyjs/defaults-table.js +5 -0
  518. package/dist/src/styles/cyjs/defaults-table.js.map +1 -1
  519. package/dist/src/styles/cyjs/emit.d.ts.map +1 -1
  520. package/dist/src/styles/cyjs/emit.js +216 -12
  521. package/dist/src/styles/cyjs/emit.js.map +1 -1
  522. package/dist/src/styles/cyjs/face.d.ts +20 -0
  523. package/dist/src/styles/cyjs/face.d.ts.map +1 -0
  524. package/dist/src/styles/cyjs/face.js +332 -0
  525. package/dist/src/styles/cyjs/face.js.map +1 -0
  526. package/dist/src/styles/cyjs/mappers.d.ts +48 -2
  527. package/dist/src/styles/cyjs/mappers.d.ts.map +1 -1
  528. package/dist/src/styles/cyjs/mappers.js +463 -26
  529. package/dist/src/styles/cyjs/mappers.js.map +1 -1
  530. package/dist/src/styles/cyjs/routes.d.ts +53 -0
  531. package/dist/src/styles/cyjs/routes.d.ts.map +1 -0
  532. package/dist/src/styles/cyjs/routes.js +360 -0
  533. package/dist/src/styles/cyjs/routes.js.map +1 -0
  534. package/dist/src/styles/cytoscape/charts.d.ts +23 -0
  535. package/dist/src/styles/cytoscape/charts.d.ts.map +1 -0
  536. package/dist/src/styles/cytoscape/charts.js +560 -0
  537. package/dist/src/styles/cytoscape/charts.js.map +1 -0
  538. package/dist/src/styles/cytoscape/emit.d.ts.map +1 -1
  539. package/dist/src/styles/cytoscape/emit.js +204 -44
  540. package/dist/src/styles/cytoscape/emit.js.map +1 -1
  541. package/dist/src/styles/cytoscape/lexicon.d.ts +97 -3
  542. package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -1
  543. package/dist/src/styles/cytoscape/lexicon.js +413 -79
  544. package/dist/src/styles/cytoscape/lexicon.js.map +1 -1
  545. package/dist/src/styles/cytoscape/mappings.d.ts +30 -0
  546. package/dist/src/styles/cytoscape/mappings.d.ts.map +1 -1
  547. package/dist/src/styles/cytoscape/mappings.js +92 -0
  548. package/dist/src/styles/cytoscape/mappings.js.map +1 -1
  549. package/dist/src/styles/cytoscape/resolve.d.ts +46 -3
  550. package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -1
  551. package/dist/src/styles/cytoscape/resolve.js +632 -22
  552. package/dist/src/styles/cytoscape/resolve.js.map +1 -1
  553. package/dist/src/styles/cytoscape/translate.d.ts.map +1 -1
  554. package/dist/src/styles/cytoscape/translate.js +10 -10
  555. package/dist/src/styles/cytoscape/translate.js.map +1 -1
  556. package/dist/src/styles/defaults.d.ts +50 -0
  557. package/dist/src/styles/defaults.d.ts.map +1 -1
  558. package/dist/src/styles/defaults.js +315 -37
  559. package/dist/src/styles/defaults.js.map +1 -1
  560. package/dist/src/styles/index.d.ts +4 -3
  561. package/dist/src/styles/index.d.ts.map +1 -1
  562. package/dist/src/styles/index.js +3 -2
  563. package/dist/src/styles/index.js.map +1 -1
  564. package/dist/src/styles/internal.d.ts +1 -0
  565. package/dist/src/styles/internal.d.ts.map +1 -1
  566. package/dist/src/styles/internal.js +1 -0
  567. package/dist/src/styles/internal.js.map +1 -1
  568. package/dist/src/styles/io/block.d.ts.map +1 -1
  569. package/dist/src/styles/io/block.js +9 -0
  570. package/dist/src/styles/io/block.js.map +1 -1
  571. package/dist/src/styles/io/generic.d.ts.map +1 -1
  572. package/dist/src/styles/io/generic.js +56 -16
  573. package/dist/src/styles/io/generic.js.map +1 -1
  574. package/dist/src/styles/io/round-trip.d.ts +56 -0
  575. package/dist/src/styles/io/round-trip.d.ts.map +1 -0
  576. package/dist/src/styles/io/round-trip.js +138 -0
  577. package/dist/src/styles/io/round-trip.js.map +1 -0
  578. package/dist/src/styles/io/writer.d.ts.map +1 -1
  579. package/dist/src/styles/io/writer.js +13 -4
  580. package/dist/src/styles/io/writer.js.map +1 -1
  581. package/dist/src/styles/notes.d.ts.map +1 -1
  582. package/dist/src/styles/notes.js +1 -0
  583. package/dist/src/styles/notes.js.map +1 -1
  584. package/dist/src/styles/plan/features.d.ts +1 -1
  585. package/dist/src/styles/plan/features.d.ts.map +1 -1
  586. package/dist/src/styles/plan/features.js +22 -2
  587. package/dist/src/styles/plan/features.js.map +1 -1
  588. package/dist/src/styles/plan/index.d.ts +1 -1
  589. package/dist/src/styles/plan/index.d.ts.map +1 -1
  590. package/dist/src/styles/plan/index.js +1 -1
  591. package/dist/src/styles/plan/index.js.map +1 -1
  592. package/dist/src/styles/plan/plan.d.ts.map +1 -1
  593. package/dist/src/styles/plan/plan.js +61 -4
  594. package/dist/src/styles/plan/plan.js.map +1 -1
  595. package/dist/src/styles/plan/resolve.d.ts +13 -1
  596. package/dist/src/styles/plan/resolve.d.ts.map +1 -1
  597. package/dist/src/styles/plan/resolve.js +53 -6
  598. package/dist/src/styles/plan/resolve.js.map +1 -1
  599. package/dist/src/styles/slots.d.ts +14 -0
  600. package/dist/src/styles/slots.d.ts.map +1 -0
  601. package/dist/src/styles/slots.js +20 -0
  602. package/dist/src/styles/slots.js.map +1 -0
  603. package/dist/src/styles/types.d.ts +638 -5
  604. package/dist/src/styles/types.d.ts.map +1 -1
  605. package/dist/src/styles/vocabulary.d.ts +3 -2
  606. package/dist/src/styles/vocabulary.d.ts.map +1 -1
  607. package/dist/src/styles/vocabulary.js +218 -1
  608. package/dist/src/styles/vocabulary.js.map +1 -1
  609. package/dist/src/types.d.ts +19 -5
  610. package/dist/src/types.d.ts.map +1 -1
  611. package/dist/src/types.js.map +1 -1
  612. package/dist/styles.js +29 -238
  613. package/dist/styles.js.map +1 -1
  614. package/dist/xgmml.js +3 -3
  615. package/docs/samples/people.json +6 -0
  616. package/package.json +53 -8
  617. package/src/common/report.ts +27 -7
  618. package/src/formats/cx/importer.ts +6 -1
  619. package/src/formats/cx/styles.ts +144 -9
  620. package/src/formats/cx2/importer.ts +1 -0
  621. package/src/formats/cx2/styles.ts +3 -1
  622. package/src/formats/cys/importer.ts +1 -0
  623. package/src/formats/cys/styles.ts +27 -5
  624. package/src/formats/dot/drawing.ts +799 -0
  625. package/src/formats/dot/importer.ts +120 -35
  626. package/src/formats/dot/label-places.ts +228 -0
  627. package/src/formats/dot/record.ts +336 -0
  628. package/src/formats/dot/styles.ts +1657 -154
  629. package/src/formats/gexf/dialog-metrics.ts +61 -0
  630. package/src/formats/gexf/importer.ts +50 -5
  631. package/src/formats/gexf/preview.ts +217 -0
  632. package/src/formats/gexf/schema.ts +2 -1
  633. package/src/formats/gexf/styles.ts +1144 -142
  634. package/src/formats/gml/importer.ts +291 -76
  635. package/src/formats/gml/index.ts +1 -1
  636. package/src/formats/gml/positions.ts +29 -7
  637. package/src/formats/gml/styles.ts +854 -111
  638. package/src/formats/graphml/styles-plain.ts +8 -23
  639. package/src/formats/graphml/styles-yed.ts +821 -159
  640. package/src/formats/graphml/styles-yfiles3.ts +485 -63
  641. package/src/formats/graphml/yfiles.ts +19 -6
  642. package/src/formats/json/dialect.ts +41 -5
  643. package/src/formats/json/importer.ts +59 -7
  644. package/src/formats/json/index.ts +1 -0
  645. package/src/formats/json/positions.ts +22 -5
  646. package/src/formats/json/styles.ts +2041 -185
  647. package/src/formats/pajek/draw.ts +458 -0
  648. package/src/formats/pajek/exporter.ts +81 -49
  649. package/src/formats/pajek/importer.ts +278 -103
  650. package/src/formats/pajek/index.ts +1 -0
  651. package/src/formats/pajek/styles.ts +1382 -133
  652. package/src/formats/pajek/syntax.ts +27 -2
  653. package/src/formats/xgmml/emit.ts +73 -5
  654. package/src/formats/xgmml/styles.ts +331 -71
  655. package/src/index.ts +94 -0
  656. package/src/positions/convert.ts +12 -1
  657. package/src/positions/extract.ts +55 -1
  658. package/src/positions/index.ts +1 -0
  659. package/src/positions/types.ts +60 -0
  660. package/src/registry.ts +326 -1
  661. package/src/sources/builtins.ts +63 -0
  662. package/src/sources/codes.ts +235 -0
  663. package/src/sources/context.ts +894 -0
  664. package/src/sources/credentials.ts +409 -0
  665. package/src/sources/cypher/descriptor.ts +131 -0
  666. package/src/sources/cypher/flatten.ts +323 -0
  667. package/src/sources/cypher/index.ts +628 -0
  668. package/src/sources/cypher/params.ts +41 -0
  669. package/src/sources/cypher/profiles.ts +78 -0
  670. package/src/sources/cypher/query-builder.ts +327 -0
  671. package/src/sources/cypher/transports/bolt.ts +228 -0
  672. package/src/sources/cypher/transports/neptune-analytics.ts +41 -0
  673. package/src/sources/cypher/transports/neptune-https.ts +122 -0
  674. package/src/sources/cypher/transports/query-api.ts +100 -0
  675. package/src/sources/cypher/transports/transport.ts +139 -0
  676. package/src/sources/cypher/types-map.ts +418 -0
  677. package/src/sources/define.ts +195 -0
  678. package/src/sources/fail.ts +70 -0
  679. package/src/sources/ids.ts +80 -0
  680. package/src/sources/ndex/client.ts +102 -0
  681. package/src/sources/ndex/descriptor.ts +64 -0
  682. package/src/sources/ndex/expand.ts +100 -0
  683. package/src/sources/ndex/index.ts +235 -0
  684. package/src/sources/ndex/params.ts +17 -0
  685. package/src/sources/ndex/share-url.ts +84 -0
  686. package/src/sources/params.ts +32 -0
  687. package/src/sources/registry.ts +325 -0
  688. package/src/sources/rest/descriptor.ts +79 -0
  689. package/src/sources/rest/index.ts +22 -0
  690. package/src/sources/rest/mapping.ts +401 -0
  691. package/src/sources/rest/openalex.ts +288 -0
  692. package/src/sources/rest/paging.ts +180 -0
  693. package/src/sources/rest/params.ts +243 -0
  694. package/src/sources/rest/records.ts +289 -0
  695. package/src/sources/rest/samples/deps-dev.ts +49 -0
  696. package/src/sources/rest/samples/string.ts +44 -0
  697. package/src/sources/rest/selectors.ts +91 -0
  698. package/src/sources/rest/source.ts +776 -0
  699. package/src/sources/rest/templates.ts +151 -0
  700. package/src/sources/run.ts +793 -0
  701. package/src/sources/sha256.ts +99 -0
  702. package/src/sources/sigv4.ts +209 -0
  703. package/src/sources/sparql/descriptor.ts +67 -0
  704. package/src/sources/sparql/index.ts +356 -0
  705. package/src/sources/sparql/ntriples.ts +219 -0
  706. package/src/sources/sparql/params.ts +28 -0
  707. package/src/sources/sparql/query.ts +162 -0
  708. package/src/sources/testing.ts +210 -0
  709. package/src/sources/types.ts +776 -0
  710. package/src/styles/annotations.ts +201 -27
  711. package/src/styles/canon/bends.ts +137 -0
  712. package/src/styles/canon/color-tables.ts +10 -4
  713. package/src/styles/canon/color.ts +105 -3
  714. package/src/styles/canon/enums.ts +99 -8
  715. package/src/styles/canon/graphviz.ts +71 -10
  716. package/src/styles/canon/number.ts +19 -0
  717. package/src/styles/canon/text.ts +187 -16
  718. package/src/styles/codes.ts +2 -0
  719. package/src/styles/cyjs/cascade.ts +1193 -38
  720. package/src/styles/cyjs/defaults-table.ts +5 -0
  721. package/src/styles/cyjs/emit.ts +247 -16
  722. package/src/styles/cyjs/face.ts +372 -0
  723. package/src/styles/cyjs/mappers.ts +498 -28
  724. package/src/styles/cyjs/routes.ts +432 -0
  725. package/src/styles/cytoscape/charts.ts +684 -0
  726. package/src/styles/cytoscape/emit.ts +220 -44
  727. package/src/styles/cytoscape/lexicon.ts +459 -80
  728. package/src/styles/cytoscape/mappings.ts +108 -0
  729. package/src/styles/cytoscape/resolve.ts +763 -23
  730. package/src/styles/cytoscape/translate.ts +11 -11
  731. package/src/styles/defaults.ts +436 -38
  732. package/src/styles/index.ts +5 -0
  733. package/src/styles/internal.ts +1 -0
  734. package/src/styles/io/block.ts +10 -0
  735. package/src/styles/io/generic.ts +79 -23
  736. package/src/styles/io/round-trip.ts +202 -0
  737. package/src/styles/io/writer.ts +14 -4
  738. package/src/styles/notes.ts +1 -0
  739. package/src/styles/plan/features.ts +23 -2
  740. package/src/styles/plan/index.ts +1 -1
  741. package/src/styles/plan/plan.ts +69 -5
  742. package/src/styles/plan/resolve.ts +61 -6
  743. package/src/styles/slots.ts +25 -0
  744. package/src/styles/types.ts +658 -4
  745. package/src/styles/vocabulary.ts +226 -3
  746. package/src/types.ts +19 -5
  747. package/dist/chunks/block-DiGq58c3.js.map +0 -1
  748. package/dist/chunks/choose--jM0yYCo.js +0 -57
  749. package/dist/chunks/choose--jM0yYCo.js.map +0 -1
  750. package/dist/chunks/convert-BcQ8_jMo.js.map +0 -1
  751. package/dist/chunks/emit-CwU8cUmG.js.map +0 -1
  752. package/dist/chunks/export-BvqAXCKh.js.map +0 -1
  753. package/dist/chunks/exporter-CrDWIyiq.js.map +0 -1
  754. package/dist/chunks/format-BpQBx8MZ.js.map +0 -1
  755. package/dist/chunks/generic-Dq1ntt9q.js.map +0 -1
  756. package/dist/chunks/importer-BSvfrX_h.js.map +0 -1
  757. package/dist/chunks/importer-CMmeMWlC.js.map +0 -1
  758. package/dist/chunks/importer-COTK9Tsl.js.map +0 -1
  759. package/dist/chunks/importer-DiZRmOQG.js.map +0 -1
  760. package/dist/chunks/importer-e6LGpqHB.js.map +0 -1
  761. package/dist/chunks/importer-iFYPEKaJ.js.map +0 -1
  762. package/dist/chunks/importer-yh_aBCU6.js.map +0 -1
  763. package/dist/chunks/lexicon-CT69Kd87.js.map +0 -1
  764. package/dist/chunks/styles-BQnsga7p.js.map +0 -1
  765. package/dist/chunks/styles-D3fRphrO.js +0 -690
  766. package/dist/chunks/styles-D3fRphrO.js.map +0 -1
  767. package/dist/chunks/styles-yed-BF5x3_Y5.js +0 -842
  768. package/dist/chunks/styles-yed-BF5x3_Y5.js.map +0 -1
  769. package/dist/chunks/writer-DMKvthQE.js +0 -448
  770. package/dist/chunks/writer-DMKvthQE.js.map +0 -1
@@ -0,0 +1,650 @@
1
+ /**
2
+ * Running a REST mapping (design section 13.2): `restSource(mapping, info)` turns one into a
3
+ * `records` source with `expand` (breadth-first, batched `{ids}`, depth 0 hydrates), `probe` and
4
+ * `validate`; the generic `rest` source takes the mapping as a parameter. Every request goes through
5
+ * `ctx.fetch`, so the credential, retries, caps and coded errors are the framework's.
6
+ */
7
+ import { throwIfAborted } from "../../common/input.js";
8
+ import { ImportError } from "../../types.js";
9
+ import { sleep } from "../context.js";
10
+ import { originOf } from "../credentials.js";
11
+ import { defineSource } from "../define.js";
12
+ import { failAlone, failOn, warnOn } from "../fail.js";
13
+ import { REST_SOURCE_ID } from "../ids.js";
14
+ import { REST_DESCRIPTOR } from "./descriptor.js";
15
+ import { checkRestMapping } from "./mapping.js";
16
+ import { firstPageUrl, nextPosition, pageUrl } from "./paging.js";
17
+ import { newState, toRecords } from "./records.js";
18
+ import { selectRecords } from "./selectors.js";
19
+ import { buildRequest } from "./templates.js";
20
+ /** Auth failures a later page may answer with, keeping the pages before it. */
21
+ const AUTH_CODES = new Set(["E_SOURCE_AUTH", "E_SOURCE_FORBIDDEN"]);
22
+ /**
23
+ * How long until a budget resets.
24
+ * @param reset - the reset header's number: past 1e9 an epoch in seconds, otherwise seconds from now
25
+ * @returns milliseconds from now, never negative
26
+ */
27
+ function resetDelayMs(reset) {
28
+ return Math.max(0, reset > 1e9 ? reset * 1000 - Date.now() : reset * 1000);
29
+ }
30
+ /** One call's running state. */
31
+ class RestRun {
32
+ /**
33
+ * Create one.
34
+ * @param plan - the mapping and values
35
+ * @param ctx - the context
36
+ * @param paced - whether this run paces itself (the generic source, whose descriptor cannot)
37
+ */
38
+ constructor(plan, ctx, paced) {
39
+ this.plan = plan;
40
+ this.ctx = ctx;
41
+ this.paced = paced;
42
+ this.facts = {};
43
+ this.last = 0;
44
+ this.endpoint = new URL(plan.mapping.endpoint);
45
+ if (ctx.endpoint !== null && originOf(ctx.endpoint) !== this.endpoint.origin) {
46
+ failOn(ctx.report, "E_SOURCE_PARAM", "the endpoint is not the mapping's", {
47
+ name: "endpoint",
48
+ reason: "origin",
49
+ });
50
+ }
51
+ }
52
+ /** Wait out the mapping's own rate limit (the generic source only). */
53
+ async pace() {
54
+ const rate = this.plan.mapping.rateLimit;
55
+ if (!this.paced || rate === undefined) {
56
+ return;
57
+ }
58
+ // ponytail: even spacing, one request at a time; a burst window is the descriptor's pacer
59
+ const wait = this.last + rate.perMs / rate.requests - Date.now();
60
+ if (wait > 0) {
61
+ await sleep(wait, this.ctx.signal);
62
+ }
63
+ this.last = Date.now();
64
+ }
65
+ /**
66
+ * Record the budget headers of a response.
67
+ * @param headers - the response headers
68
+ */
69
+ noteBudget(headers) {
70
+ const names = this.plan.mapping.budgetHeaders;
71
+ const remaining = names === undefined ? null : headers.get(names.remaining);
72
+ if (names === undefined || remaining === null || !Number.isFinite(Number(remaining))) {
73
+ return;
74
+ }
75
+ const reset = names.reset === undefined ? null : Number(headers.get(names.reset) ?? Number.NaN);
76
+ const resetMs = reset === null || !Number.isFinite(reset) ? undefined : resetDelayMs(reset);
77
+ this.facts.budget = { remaining: Number(remaining), ...(resetMs === undefined ? {} : { resetMs }) };
78
+ }
79
+ /**
80
+ * Read one page of a request.
81
+ * @param name - the request name
82
+ * @param values - the template values
83
+ * @param position - the page's position, or undefined for the first page
84
+ * @param headers - extra request headers (validation)
85
+ * @returns the page
86
+ */
87
+ async read(name, values, position, headers) {
88
+ const request = this.plan.mapping.requests[name];
89
+ const { report } = this.ctx;
90
+ const built = buildRequest(this.endpoint, request, values, report);
91
+ const url = position === undefined
92
+ ? firstPageUrl(built.url, request.paging, this.endpoint, report)
93
+ : pageUrl(built.url, request.paging, position, this.endpoint, report);
94
+ await this.pace();
95
+ const response = await this.ctx.fetch(url, {
96
+ ...built.init,
97
+ headers: { accept: "application/json", ...built.init.headers, ...headers },
98
+ allowStatus: [304],
99
+ });
100
+ this.noteBudget(response.headers);
101
+ if (response.status === 304) {
102
+ return { records: [], next: null, headers: response.headers, status: 304 };
103
+ }
104
+ const text = await response.text();
105
+ let body;
106
+ try {
107
+ body = JSON.parse(text);
108
+ }
109
+ catch {
110
+ failOn(report, "E_SOURCE_RESPONSE", "the response is not JSON", {
111
+ expected: "json",
112
+ contentType: response.headers.get("content-type"),
113
+ });
114
+ }
115
+ const records = selectRecords(body, request.records);
116
+ const here = position ?? null;
117
+ const next = nextPosition(request.paging, position ?? (request.paging?.style === "offset" ? (request.paging.base ?? 0) : here), { body, headers: response.headers, url, records: records.length, runtime: this.ctx.runtime }, this.endpoint, report);
118
+ return { records, next, headers: response.headers, status: response.status };
119
+ }
120
+ /**
121
+ * Record what the facts say so far, so the report carries them even when a later page fails.
122
+ * @param state - the load's record state
123
+ * @param next - where to resume, for an expansion
124
+ * @returns the report so far
125
+ */
126
+ finish(state, next = null) {
127
+ if (state?.modified !== null && state?.modified !== undefined) {
128
+ this.facts.validators = { ...this.facts.validators, modified: state.modified };
129
+ }
130
+ return this.ctx.finish({ ...this.facts, next });
131
+ }
132
+ /**
133
+ * Note the HTTP validators of a load's first response.
134
+ * @param headers - its headers
135
+ */
136
+ noteValidators(headers) {
137
+ const etag = headers.get("etag");
138
+ const lastModified = headers.get("last-modified");
139
+ this.facts.validators = {
140
+ ...this.facts.validators,
141
+ ...(etag === null ? {} : { etag }),
142
+ ...(lastModified === null ? {} : { lastModified }),
143
+ };
144
+ }
145
+ /**
146
+ * The graph facts of a first page.
147
+ * @returns the meta
148
+ */
149
+ meta() {
150
+ const { directed } = this.plan.mapping;
151
+ return directed === undefined ? undefined : { directed };
152
+ }
153
+ }
154
+ /**
155
+ * The template values of params: every string, number and boolean, as text.
156
+ * @param params - the params
157
+ * @param skip - a key to leave out
158
+ * @returns the values
159
+ */
160
+ function stringValues(params, skip) {
161
+ const out = {};
162
+ for (const [k, v] of Object.entries(params)) {
163
+ if (k !== skip && (typeof v === "string" || typeof v === "number" || typeof v === "boolean")) {
164
+ out[k] = String(v);
165
+ }
166
+ }
167
+ return out;
168
+ }
169
+ /**
170
+ * The load: the seed request once, then the load request page by page.
171
+ * @param run - the call
172
+ * @yields one page of nodes and edges
173
+ */
174
+ async function* loadPages(run) {
175
+ const { mapping, values } = run.plan;
176
+ const { cursor } = run.ctx;
177
+ if (cursor !== null && cursor.r !== mapping.load) {
178
+ failOn(run.ctx.report, "E_SOURCE_PARAM", "the cursor is not this mapping's", {
179
+ name: "cursor",
180
+ reason: "stale-cursor",
181
+ });
182
+ }
183
+ const state = newState();
184
+ const groups = [];
185
+ if (cursor === null && mapping.seed !== undefined) {
186
+ const seed = await run.read(mapping.seed, values, undefined);
187
+ groups.push({ records: seed.records, entity: mapping.requests[mapping.seed].entity });
188
+ }
189
+ const { entity } = mapping.requests[mapping.load];
190
+ let position = cursor === null ? undefined : cursor.at;
191
+ let first = true;
192
+ for (;;) {
193
+ const page = await run.read(mapping.load, values, position);
194
+ if (first && cursor === null) {
195
+ run.noteValidators(page.headers);
196
+ }
197
+ const out = toRecords(mapping, [...groups.splice(0), { records: page.records, entity }], state);
198
+ run.finish(state);
199
+ const next = page.next === null ? null : { r: mapping.load, at: page.next };
200
+ yield { nodes: out.nodes, edges: out.edges, next, meta: first ? run.meta() : undefined };
201
+ if (page.next === null) {
202
+ return;
203
+ }
204
+ first = false;
205
+ position = page.next;
206
+ }
207
+ }
208
+ /**
209
+ * Write one page into a sink.
210
+ * @param out - the page
211
+ * @param sink - the sink
212
+ * @param ctx - the context
213
+ * @param types - the relationship types to keep, if any
214
+ */
215
+ function writePage(out, sink, ctx, types) {
216
+ const { report } = ctx;
217
+ let n = 0;
218
+ for (const { id, ...attrs } of out.nodes) {
219
+ if (n++ % 64 === 0) {
220
+ throwIfAborted(ctx.signal);
221
+ }
222
+ try {
223
+ sink.addNodeRecord(id, attrs);
224
+ report.counts.nodes++;
225
+ }
226
+ catch (err) {
227
+ report.recordError(err, { element: String(id) });
228
+ report.counts.skippedNodes++;
229
+ }
230
+ }
231
+ for (const { source, target, ...attrs } of out.edges) {
232
+ if (n++ % 64 === 0) {
233
+ throwIfAborted(ctx.signal);
234
+ }
235
+ if (types !== undefined && !types.has(String(attrs.type))) {
236
+ continue;
237
+ }
238
+ try {
239
+ sink.addEdgeRecord(source, target, attrs);
240
+ report.counts.edges++;
241
+ }
242
+ catch (err) {
243
+ report.recordError(err, { element: `${String(source)} -> ${String(target)}` });
244
+ report.counts.skippedEdges++;
245
+ }
246
+ }
247
+ }
248
+ /**
249
+ * The requests an expansion runs for a direction; depth 0 hydrates.
250
+ * @param mapping - the mapping
251
+ * @param request - the expansion
252
+ * @returns the request names
253
+ */
254
+ function expandRequests(mapping, request) {
255
+ if (request.depth === 0) {
256
+ return mapping.hydrate === undefined ? [] : [mapping.hydrate];
257
+ }
258
+ const { expand } = mapping;
259
+ if (typeof expand === "string" || expand === undefined) {
260
+ return expand === undefined ? [] : [expand];
261
+ }
262
+ const direction = request.direction ?? "both";
263
+ const names = [direction !== "out" ? expand.in : undefined, direction !== "in" ? expand.out : undefined];
264
+ return [...new Set(names.filter((n) => n !== undefined))];
265
+ }
266
+ /**
267
+ * Split ids into a request's batches.
268
+ * @param ids - the ids
269
+ * @param max - the batch size
270
+ * @returns the batches
271
+ */
272
+ function batches(ids, max) {
273
+ const out = [];
274
+ for (let i = 0; i < ids.length; i += max) {
275
+ out.push(ids.slice(i, i + max));
276
+ }
277
+ return out;
278
+ }
279
+ /**
280
+ * Breadth-first expansion: each hop runs the direction's requests with the frontier's ids in
281
+ * `{ids}` batches; the nodes it adds are the next frontier. A capped first hop records where it
282
+ * stopped, so expanding again continues from there.
283
+ * @param run - the call
284
+ * @param request - the seeds and how far to go
285
+ * @param sink - where to write
286
+ * @returns the report
287
+ */
288
+ async function expandInto(run, request, sink) {
289
+ return new Expansion(run, request, sink).expand();
290
+ }
291
+ /** One expansion's running state. */
292
+ class Expansion {
293
+ /**
294
+ * Check the expansion and set the sink's direction.
295
+ * @param run - the call
296
+ * @param request - the seeds and how far to go
297
+ * @param sink - where to write
298
+ */
299
+ constructor(run, request, sink) {
300
+ this.run = run;
301
+ this.request = request;
302
+ this.sink = sink;
303
+ this.added = 0;
304
+ this.wrote = false;
305
+ const { ctx } = run;
306
+ this.mapping = run.plan.mapping;
307
+ this.names = expandRequests(this.mapping, request);
308
+ if (this.names.length === 0) {
309
+ failOn(ctx.report, "E_SOURCE_UNSUPPORTED", "the mapping has no request for this expansion", {
310
+ feature: request.depth === 0 ? "hydrate" : "expand",
311
+ });
312
+ }
313
+ if (request.ids.length === 0) {
314
+ failOn(ctx.report, "E_SOURCE_PARAM", "an expansion needs seed ids", { name: "ids", reason: "required" });
315
+ }
316
+ this.state = newState([...request.ids.map(String), ...(request.exclude ?? []).map(String)]);
317
+ this.types = request.relationshipTypes === undefined ? undefined : new Set(request.relationshipTypes);
318
+ if (this.mapping.directed !== undefined && sink.edgeCount === 0) {
319
+ sink.setDirected(this.mapping.directed);
320
+ }
321
+ }
322
+ /**
323
+ * Run every hop.
324
+ * @returns the report
325
+ */
326
+ async expand() {
327
+ let frontier = this.request.ids.map(String);
328
+ const depth = Math.max(1, this.request.depth ?? 1);
329
+ for (let hop = 1; hop <= depth && frontier.length > 0; hop++) {
330
+ const reached = [];
331
+ const stop = await this.hop(hop, frontier, reached);
332
+ if (stop !== null) {
333
+ return stop;
334
+ }
335
+ frontier = [...new Set(reached)];
336
+ }
337
+ return this.run.finish(this.state, null);
338
+ }
339
+ /**
340
+ * Run one hop: every request over every batch of the frontier.
341
+ * @param hop - the hop, from 1
342
+ * @param frontier - the ids this hop starts from
343
+ * @param reached - collects the ids this hop adds
344
+ * @returns the report when the expansion stopped, else null
345
+ */
346
+ async hop(hop, frontier, reached) {
347
+ for (const [x, name] of this.names.entries()) {
348
+ const max = this.mapping.requests[name].batch?.max ?? 1;
349
+ for (const [b, batch] of batches(frontier, max).entries()) {
350
+ if (this.skipped({ hop, x, b })) {
351
+ continue;
352
+ }
353
+ const stop = await this.readBatch({ hop, x, b }, name, batch, frontier, reached);
354
+ if (stop !== null) {
355
+ return stop;
356
+ }
357
+ }
358
+ }
359
+ return null;
360
+ }
361
+ /**
362
+ * Whether a resumed first hop already read this batch.
363
+ * @param at - the batch
364
+ * @returns true to skip it
365
+ */
366
+ skipped(at) {
367
+ const { hop, x, b } = at;
368
+ const resume = this.run.ctx.cursor;
369
+ if (hop !== 1 || resume === null) {
370
+ return false;
371
+ }
372
+ const rx = Number(resume.x);
373
+ return x < rx || (x === rx && b < Number(resume.b));
374
+ }
375
+ /**
376
+ * Where a batch starts: the recorded position for the batch a first hop stopped in.
377
+ * @param at - the batch
378
+ * @returns the position, or undefined for the first page
379
+ */
380
+ startPosition(at) {
381
+ const { hop, x, b } = at;
382
+ const resume = this.run.ctx.cursor;
383
+ return hop === 1 && resume !== null && x === Number(resume.x) && b === Number(resume.b)
384
+ ? (resume.at ?? undefined)
385
+ : undefined;
386
+ }
387
+ /**
388
+ * Read one batch page by page.
389
+ * @param at - the batch
390
+ * @param name - the request
391
+ * @param batch - its ids
392
+ * @param frontier - the hop's ids
393
+ * @param reached - collects the ids it adds
394
+ * @returns the report when the expansion stopped, else null
395
+ */
396
+ async readBatch(at, name, batch, frontier, reached) {
397
+ const r = this.mapping.requests[name];
398
+ const own = { ...this.run.plan.values, id: batch[0], ids: batch.join(r.batch?.join ?? ",") };
399
+ let position = this.startPosition(at);
400
+ for (;;) {
401
+ let page;
402
+ try {
403
+ page = await this.run.read(name, own, position);
404
+ }
405
+ catch (err) {
406
+ return this.authStop(err, at.hop === 1 ? { x: at.x, b: at.b, at: position ?? null } : null);
407
+ }
408
+ this.writeNew(page, r.entity, reached);
409
+ const stop = this.capStop(at, page, frontier);
410
+ if (stop !== null || page.next === null) {
411
+ return stop;
412
+ }
413
+ position = page.next;
414
+ }
415
+ }
416
+ /**
417
+ * Keep what was written when a later page needs a credential; rethrow anything else.
418
+ * @param err - what the page threw
419
+ * @param cursor - where to resume
420
+ * @returns the report
421
+ */
422
+ authStop(err, cursor) {
423
+ if (!this.wrote || !(err instanceof ImportError) || !AUTH_CODES.has(String(err.issue?.code))) {
424
+ throw err;
425
+ }
426
+ const p = err.issue?.params ?? {};
427
+ warnOn(this.run.ctx.report, "W_SOURCE_AUTH", "a later page needs a credential; the pages before it are kept", {
428
+ origin: typeof p.origin === "string" ? p.origin : this.run.endpoint.origin,
429
+ status: typeof p.status === "number" ? p.status : null,
430
+ });
431
+ return this.run.finish(this.state, cursor);
432
+ }
433
+ /**
434
+ * Write a page and collect the nodes it added.
435
+ * @param page - the page
436
+ * @param entity - its records' entity
437
+ * @param reached - collects the ids it adds
438
+ */
439
+ writeNew(page, entity, reached) {
440
+ const { state } = this;
441
+ const before = new Set([...state.full, ...state.stubs]);
442
+ const out = toRecords(this.mapping, [{ records: page.records, entity }], state);
443
+ writePage(out, this.sink, this.run.ctx, this.types);
444
+ this.wrote = true;
445
+ for (const node of out.nodes) {
446
+ const id = String(node.id);
447
+ if (!before.has(id) && !state.known.has(id)) {
448
+ reached.push(id);
449
+ this.added++;
450
+ }
451
+ }
452
+ }
453
+ /**
454
+ * Stop at the expansion's limit or the load's caps.
455
+ * @param at - the batch
456
+ * @param page - the page just written
457
+ * @param frontier - the hop's ids
458
+ * @returns the report when a cap was reached, else null
459
+ */
460
+ capStop(at, page, frontier) {
461
+ const { hop, x, b } = at;
462
+ const { ctx } = this.run;
463
+ const limited = this.request.limit !== undefined && this.added >= this.request.limit;
464
+ if (limited) {
465
+ warnOn(ctx.report, "W_SOURCE_LIMIT", "the expansion reached its limit", {
466
+ limit: "limit",
467
+ value: this.added,
468
+ });
469
+ }
470
+ if (!limited && !ctx.limits.reached()) {
471
+ return null;
472
+ }
473
+ const more = page.next === null ? null : { x, b, at: page.next };
474
+ // ponytail: only a capped first hop can resume; a deeper hop's frontier is not recorded
475
+ return this.run.finish(this.state, hop === 1 ? (more ?? nextBatch(x, b, this.names, frontier, this.mapping)) : null);
476
+ }
477
+ }
478
+ /**
479
+ * Where a first hop continues after a batch that ended on a cap.
480
+ * @param x - the request index
481
+ * @param b - the batch index
482
+ * @param names - the requests
483
+ * @param frontier - the seeds
484
+ * @param mapping - the mapping
485
+ * @returns the cursor, or null when nothing is left
486
+ */
487
+ function nextBatch(x, b, names, frontier, mapping) {
488
+ const count = Math.ceil(frontier.length / (mapping.requests[names[x]].batch?.max ?? 1));
489
+ if (b + 1 < count) {
490
+ return { x, b: b + 1, at: null };
491
+ }
492
+ return x + 1 < names.length ? { x: x + 1, b: 0, at: null } : null;
493
+ }
494
+ /**
495
+ * Whether data loaded earlier changed: the load's first page (with the seed), sent with the
496
+ * recorded HTTP validators; a 304 or an equal ETag is current, else the newest modification time
497
+ * is compared.
498
+ * @param run - the call
499
+ * @param seen - the validators recorded then
500
+ * @returns the freshness
501
+ */
502
+ async function validateRun(run, seen) {
503
+ const { mapping, values } = run.plan;
504
+ const headers = {};
505
+ if (seen.etag !== undefined) {
506
+ headers["if-none-match"] = seen.etag;
507
+ }
508
+ if (seen.lastModified !== undefined) {
509
+ headers["if-modified-since"] = seen.lastModified;
510
+ }
511
+ const state = newState();
512
+ const groups = [];
513
+ if (mapping.seed !== undefined) {
514
+ const seed = await run.read(mapping.seed, values, undefined);
515
+ groups.push({ records: seed.records, entity: mapping.requests[mapping.seed].entity });
516
+ }
517
+ const page = await run.read(mapping.load, values, undefined, headers);
518
+ if (page.status === 304) {
519
+ return { status: "current", via: seen.etag === undefined ? "modified" : "etag", validators: seen };
520
+ }
521
+ toRecords(mapping, [...groups, { records: page.records, entity: mapping.requests[mapping.load].entity }], state);
522
+ run.noteValidators(page.headers);
523
+ const now = {
524
+ ...run.facts.validators,
525
+ ...(state.modified === null ? {} : { modified: state.modified }),
526
+ };
527
+ if (seen.etag !== undefined && now.etag !== undefined) {
528
+ return { status: seen.etag === now.etag ? "current" : "changed", via: "etag", validators: now };
529
+ }
530
+ if (seen.modified !== undefined && now.modified !== undefined) {
531
+ return now.modified > seen.modified
532
+ ? { status: "changed", via: "modified", changedAt: now.modified, validators: now }
533
+ : { status: "current", via: "modified", validators: now };
534
+ }
535
+ return { status: "unverifiable", validators: now };
536
+ }
537
+ /**
538
+ * The methods of a source that runs plans.
539
+ * @param plan - turns params into the plan
540
+ * @param paced - whether the run paces itself
541
+ * @returns records, expand, probe and validate
542
+ */
543
+ export function restMethods(plan, paced) {
544
+ return {
545
+ records: (params, ctx) => loadPages(new RestRun(plan(params, ctx, "load"), ctx, paced)),
546
+ expand: (request, sink, ctx) => expandInto(new RestRun(plan(request.params, ctx, "expand"), ctx, paced), request, sink),
547
+ async probe(params, ctx) {
548
+ const run = new RestRun(plan(params, ctx, "probe"), ctx, paced);
549
+ const page = await run.read(run.plan.mapping.load, run.plan.values, undefined);
550
+ if (page.records.length === 0 && page.status !== 304) {
551
+ failOn(ctx.report, "E_SOURCE_NOT_FOUND", "the load request found no records", {
552
+ what: "records",
553
+ value: run.plan.mapping.load,
554
+ });
555
+ }
556
+ return { ok: true };
557
+ },
558
+ validate: (params, seen, ctx) => validateRun(new RestRun(plan(params, ctx, "validate"), ctx, paced), seen),
559
+ };
560
+ }
561
+ /**
562
+ * The plan of a mapping given as data, after it is checked.
563
+ * @param mapping - the mapping
564
+ * @param ctx - the context
565
+ * @returns the mapping, checked
566
+ */
567
+ function checkedMapping(mapping, ctx) {
568
+ const [issue] = checkRestMapping(mapping);
569
+ if (issue !== undefined) {
570
+ failOn(ctx.report, "E_SOURCE_PARAM", `the mapping is invalid at ${issue.at}`, {
571
+ name: "mapping",
572
+ reason: issue.code,
573
+ at: issue.at,
574
+ });
575
+ }
576
+ return mapping;
577
+ }
578
+ /**
579
+ * Where a mapping's API key goes, as a descriptor says it.
580
+ * @param auth - the mapping's auth
581
+ * @returns `{ apiKey }`, or nothing when the mapping takes no key or does not say where
582
+ */
583
+ function apiKeyOf(auth) {
584
+ if (auth?.kind !== "api-key") {
585
+ return {};
586
+ }
587
+ if (auth.header !== undefined) {
588
+ return { apiKey: { header: auth.header } };
589
+ }
590
+ return auth.query === undefined ? {} : { apiKey: { query: auth.query } };
591
+ }
592
+ /**
593
+ * Turn a REST mapping into a source: a `records` source that loads the mapping's `load` request
594
+ * page by page, with `expand` (breadth-first over the `expand` requests, `{ids}` batched; depth 0
595
+ * fetches the seeds' own records through `hydrate`), `probe` and `validate`. The descriptor is
596
+ * derived from the mapping (its endpoint, params, auth and rate limit), and `info` may set any of
597
+ * its fields. A mapping with a problem is refused: E_SOURCE_INVALID with `reason: "mapping"`.
598
+ * Experimental.
599
+ * @param mapping - the mapping
600
+ * @param info - the id and descriptor fields
601
+ * @returns the source
602
+ * @example
603
+ * ```ts
604
+ * const people = restSource(mapping, { id: "people", plainName: "People" });
605
+ * registerSource(people);
606
+ * const { snapshot } = await loadFromSource("people", { team: "core" });
607
+ * ```
608
+ * @category Network sources
609
+ */
610
+ export function restSource(mapping, info) {
611
+ const [issue] = checkRestMapping(mapping);
612
+ if (issue !== undefined) {
613
+ failAlone("E_SOURCE_INVALID", `the mapping of ${info.id} is invalid at ${issue.at}`, {
614
+ id: info.id,
615
+ reason: "mapping",
616
+ at: issue.at,
617
+ });
618
+ }
619
+ const { id, ...fields } = info;
620
+ const auth = mapping.auth === undefined ? [] : [mapping.auth.kind];
621
+ const descriptor = Object.freeze({
622
+ plainName: id,
623
+ kind: "rest",
624
+ params: mapping.params ?? [],
625
+ defaultEndpoint: mapping.endpoint,
626
+ auth,
627
+ authRequired: auth.length === 0 ? "none" : "optional",
628
+ ...apiKeyOf(mapping.auth),
629
+ ...(mapping.rateLimit === undefined ? {} : { rateLimit: mapping.rateLimit }),
630
+ ...fields,
631
+ });
632
+ return defineSource({
633
+ id,
634
+ descriptor,
635
+ ...restMethods((params) => ({ mapping, values: stringValues(params) }), false),
636
+ });
637
+ }
638
+ /**
639
+ * The generic REST mapping source: `params.mapping` says how to read the API, and the other params
640
+ * fill its templates. The mapping is checked before any request (E_SOURCE_PARAM, `name:
641
+ * "mapping"`, `reason` the problem's code, `at` where it is). With a credential, pass the mapping's
642
+ * endpoint as `endpoint`, so the credential is bound to it. Experimental.
643
+ * @category Network sources
644
+ */
645
+ export const restMappingSource = defineSource({
646
+ id: REST_SOURCE_ID,
647
+ descriptor: REST_DESCRIPTOR,
648
+ ...restMethods((params, ctx) => ({ mapping: checkedMapping(params.mapping, ctx), values: stringValues(params, "mapping") }), true),
649
+ });
650
+ //# sourceMappingURL=source.js.map