@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,401 @@
1
+ /**
2
+ * Checking a REST mapping before it runs (design section 13.2). A mapping is JSON data, typed into
3
+ * a form or read from a project file, so every field is checked and every problem is a coded
4
+ * issue naming where it is.
5
+ */
6
+
7
+ import { type RestEdgeRule, type RestEntity, type RestMapping, type RestRequest } from "./params.js";
8
+ import { parseSelector } from "./selectors.js";
9
+ import { templateNames } from "./templates.js";
10
+
11
+ /**
12
+ * What is wrong with one field of a mapping. Open union.
13
+ * @category Network sources
14
+ */
15
+ export type RestMappingIssueCode =
16
+ | "version" // version is not 1
17
+ | "endpoint" // not an http(s) URL, or one holding a user, query or fragment
18
+ | "missing" // a required field is absent or of the wrong type
19
+ | "unknown-request" // names a request the mapping lacks
20
+ | "unknown-entity" // names an entity the mapping lacks
21
+ | "selector" // not a selector
22
+ | "template" // malformed braces or slot names
23
+ | "paging" // an unknown paging style or a bad paging field
24
+ | "batch" // batch.max is not a positive integer, or join is not a string
25
+ | "number" // not a positive number
26
+ | (string & {}); // NOSONAR(S4335): the open-union idiom keeps the listed codes in editor completion
27
+
28
+ /**
29
+ * One problem `checkRestMapping` found. Experimental.
30
+ * @category Network sources
31
+ */
32
+ export interface RestMappingIssue {
33
+ /** What is wrong. */
34
+ readonly code: RestMappingIssueCode;
35
+ /** Where, as a dotted path into the mapping (`requests.citing.paging.next`). */
36
+ readonly at: string;
37
+ }
38
+
39
+ /** The checks' accumulator. */
40
+ type Push = (code: RestMappingIssueCode, at: string) => void;
41
+
42
+ /**
43
+ * Whether a value is a plain object.
44
+ * @param v - the value
45
+ * @returns true for an object that is not an array
46
+ */
47
+ function isObject(v: unknown): v is Record<string, unknown> {
48
+ return typeof v === "object" && v !== null && !Array.isArray(v);
49
+ }
50
+
51
+ /**
52
+ * Check a selector field.
53
+ * @param value - the field
54
+ * @param at - where it is
55
+ * @param push - the accumulator
56
+ * @param required - whether it must be present
57
+ * @param index - whether `#` (the record's position) is allowed
58
+ */
59
+ function checkSelector(value: unknown, at: string, push: Push, required: boolean, index = false): void {
60
+ if (value === undefined && !required) {
61
+ return;
62
+ }
63
+ if (typeof value !== "string") {
64
+ push("missing", at);
65
+ } else if (!(index && value === "#") && parseSelector(value) === null) {
66
+ push("selector", at);
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Check a template field.
72
+ * @param value - the field
73
+ * @param at - where it is
74
+ * @param push - the accumulator
75
+ */
76
+ function checkTemplate(value: unknown, at: string, push: Push): void {
77
+ if (typeof value !== "string") {
78
+ push("missing", at);
79
+ } else if (templateNames(value) === null) {
80
+ push("template", at);
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Check a request's query templates.
86
+ * @param query - the query field
87
+ * @param at - where the request is
88
+ * @param push - the accumulator
89
+ */
90
+ function checkQuery(query: RestRequest["query"], at: string, push: Push): void {
91
+ if (query === undefined) {
92
+ return;
93
+ }
94
+ if (!isObject(query)) {
95
+ push("missing", `${at}.query`);
96
+ return;
97
+ }
98
+ for (const [k, v] of Object.entries(query)) {
99
+ checkTemplate(v, `${at}.query.${k}`, push);
100
+ }
101
+ }
102
+
103
+ /**
104
+ * Whether a batch field is well formed: a positive integer max and a string join.
105
+ * @param batch - the batch field
106
+ * @returns true when it is
107
+ */
108
+ function isBatch(batch: RestRequest["batch"]): boolean {
109
+ return isObject(batch) && Number.isInteger(batch.max) && batch.max >= 1 && typeof batch.join === "string";
110
+ }
111
+
112
+ /**
113
+ * Check one request.
114
+ * @param r - the request
115
+ * @param at - where it is
116
+ * @param entities - the mapping's entity names
117
+ * @param push - the accumulator
118
+ */
119
+ function checkRequest(r: RestRequest, at: string, entities: ReadonlySet<string>, push: Push): void {
120
+ if (!isObject(r)) {
121
+ push("missing", at);
122
+ return;
123
+ }
124
+ if (r.method !== undefined && r.method !== "GET" && r.method !== "POST") {
125
+ push("missing", `${at}.method`);
126
+ }
127
+ checkTemplate(r.path, `${at}.path`, push);
128
+ if (typeof r.path === "string" && !r.path.startsWith("/")) {
129
+ push("template", `${at}.path`);
130
+ }
131
+ checkQuery(r.query, at, push);
132
+ checkSelector(r.records, `${at}.records`, push, true);
133
+ if (typeof r.entity !== "string") {
134
+ push("missing", `${at}.entity`);
135
+ } else if (!entities.has(r.entity)) {
136
+ push("unknown-entity", `${at}.entity`);
137
+ }
138
+ if (r.batch !== undefined && !isBatch(r.batch)) {
139
+ push("batch", `${at}.batch`);
140
+ }
141
+ if (r.paging !== undefined) {
142
+ checkPaging(r.paging, `${at}.paging`, push);
143
+ }
144
+ }
145
+
146
+ /**
147
+ * Check a paging field.
148
+ * @param p - the paging
149
+ * @param at - where it is
150
+ * @param push - the accumulator
151
+ */
152
+ function checkPaging(p: RestRequest["paging"], at: string, push: Push): void {
153
+ const paging = p as Record<string, unknown> | undefined;
154
+ if (!isObject(paging)) {
155
+ push("paging", at);
156
+ return;
157
+ }
158
+ switch (paging.style) {
159
+ case "cursor":
160
+ if (typeof paging.param !== "string" || typeof paging.first !== "string") {
161
+ push("paging", at);
162
+ }
163
+ checkSelector(paging.next, `${at}.next`, push, true);
164
+ break;
165
+ case "offset": {
166
+ const size = paging.size as Record<string, unknown> | undefined;
167
+ const ok =
168
+ typeof paging.param === "string" &&
169
+ isObject(size) &&
170
+ typeof size.param === "string" &&
171
+ Number.isInteger(size.value) &&
172
+ (size.value as number) > 0 &&
173
+ (paging.unit === undefined || paging.unit === "items" || paging.unit === "pages") &&
174
+ (paging.base === undefined || paging.base === 0 || paging.base === 1);
175
+ if (!ok) {
176
+ push("paging", at);
177
+ }
178
+ break;
179
+ }
180
+ case "link-header":
181
+ if (paging.rel !== undefined && typeof paging.rel !== "string") {
182
+ push("paging", at);
183
+ }
184
+ break;
185
+ case "next-url":
186
+ checkSelector(paging.next, `${at}.next`, push, true);
187
+ break;
188
+ default:
189
+ push("paging", `${at}.style`);
190
+ }
191
+ }
192
+
193
+ /**
194
+ * Check one edge rule.
195
+ * @param rule - the rule
196
+ * @param at - where it is
197
+ * @param entities - the mapping's entity names
198
+ * @param push - the accumulator
199
+ */
200
+ function checkEdgeRule(rule: RestEdgeRule, at: string, entities: ReadonlySet<string>, push: Push): void {
201
+ if (!isObject(rule)) {
202
+ push("missing", at);
203
+ return;
204
+ }
205
+ const r = rule as Record<string, unknown>;
206
+ if (typeof r.type !== "string") {
207
+ push("missing", `${at}.type`);
208
+ }
209
+ checkSelector(r.each, `${at}.each`, push, false);
210
+ if ("pairs" in r) {
211
+ checkSelector(r.pairs, `${at}.pairs`, push, true);
212
+ } else {
213
+ checkSelector(r.to, `${at}.to`, push, true);
214
+ checkSelector(r.from, `${at}.from`, push, false);
215
+ if (isObject(r.fields)) {
216
+ for (const [k, v] of Object.entries(r.fields)) {
217
+ checkSelector(v, `${at}.fields.${k}`, push, true);
218
+ }
219
+ } else if (r.fields !== undefined) {
220
+ push("missing", `${at}.fields`);
221
+ }
222
+ }
223
+ if (r.entity !== undefined && (typeof r.entity !== "string" || !entities.has(r.entity))) {
224
+ push("unknown-entity", `${at}.entity`);
225
+ }
226
+ }
227
+
228
+ /**
229
+ * Check one entity.
230
+ * @param e - the entity
231
+ * @param at - where it is
232
+ * @param entities - the mapping's entity names
233
+ * @param push - the accumulator
234
+ */
235
+ function checkEntity(e: RestEntity, at: string, entities: ReadonlySet<string>, push: Push): void {
236
+ if (!isObject(e)) {
237
+ push("missing", at);
238
+ return;
239
+ }
240
+ checkSelector(e.id, `${at}.id`, push, true, true);
241
+ if (e.stripPrefix !== undefined && typeof e.stripPrefix !== "string") {
242
+ push("missing", `${at}.stripPrefix`);
243
+ }
244
+ if (e.label !== undefined && typeof e.label !== "string") {
245
+ push("missing", `${at}.label`);
246
+ }
247
+ if (e.node !== undefined && e.node) {
248
+ push("missing", `${at}.node`);
249
+ }
250
+ if (isObject(e.fields)) {
251
+ for (const [k, v] of Object.entries(e.fields)) {
252
+ checkSelector(v, `${at}.fields.${k}`, push, true, true);
253
+ }
254
+ } else if (e.fields !== undefined) {
255
+ push("missing", `${at}.fields`);
256
+ }
257
+ if (Array.isArray(e.edges)) {
258
+ (e.edges as readonly RestEdgeRule[]).forEach((rule, i) => {
259
+ checkEdgeRule(rule, `${at}.edges.${String(i)}`, entities, push);
260
+ });
261
+ } else if (e.edges !== undefined) {
262
+ push("missing", `${at}.edges`);
263
+ }
264
+ if (Array.isArray(e.embedded)) {
265
+ e.embedded.forEach((em, i) => {
266
+ const where = `${at}.embedded.${String(i)}`;
267
+ if (!isObject(em)) {
268
+ push("missing", where);
269
+ return;
270
+ }
271
+ checkSelector(em.at, `${where}.at`, push, true);
272
+ if (typeof em.entity !== "string" || !entities.has(em.entity)) {
273
+ push("unknown-entity", `${where}.entity`);
274
+ }
275
+ });
276
+ } else if (e.embedded !== undefined) {
277
+ push("missing", `${at}.embedded`);
278
+ }
279
+ }
280
+
281
+ /**
282
+ * Check the mapping's top-level names of requests.
283
+ * @param m - the mapping
284
+ * @param requests - its request names
285
+ * @param push - the accumulator
286
+ */
287
+ function checkRequestNames(m: RestMapping, requests: ReadonlySet<string>, push: Push): void {
288
+ const names: [string, unknown][] = [
289
+ ["load", m.load],
290
+ ["hydrate", m.hydrate],
291
+ ["seed", m.seed],
292
+ ];
293
+ if (isObject(m.expand)) {
294
+ names.push(["expand.in", m.expand.in], ["expand.out", m.expand.out]);
295
+ } else {
296
+ names.push(["expand", m.expand]);
297
+ }
298
+ for (const [at, name] of names) {
299
+ if (name === undefined && at !== "load") {
300
+ continue;
301
+ }
302
+ if (typeof name !== "string") {
303
+ push("missing", at);
304
+ } else if (!requests.has(name)) {
305
+ push("unknown-request", at);
306
+ }
307
+ }
308
+ }
309
+
310
+ /**
311
+ * Check the endpoint.
312
+ * @param endpoint - the field
313
+ * @param push - the accumulator
314
+ */
315
+ function checkEndpoint(endpoint: unknown, push: Push): void {
316
+ let url: URL | null = null;
317
+ try {
318
+ url = new URL(typeof endpoint === "string" ? endpoint : "");
319
+ } catch {
320
+ // not a URL
321
+ }
322
+ if (
323
+ url === null ||
324
+ (url.protocol !== "https:" && url.protocol !== "http:") ||
325
+ url.username !== "" ||
326
+ url.password !== "" ||
327
+ url.search !== "" ||
328
+ url.hash !== ""
329
+ ) {
330
+ push("endpoint", "endpoint");
331
+ }
332
+ }
333
+
334
+ /**
335
+ * Check a REST mapping without running it: the version, the endpoint, every request (templates,
336
+ * selectors, paging, batching) and entity (selectors, edge rules, embedded records), and that every
337
+ * name it uses exists. Experimental.
338
+ * @param mapping - the mapping, as data from anywhere
339
+ * @returns every problem found; empty when the mapping can run
340
+ * @category Network sources
341
+ */
342
+ export function checkRestMapping(mapping: unknown): readonly RestMappingIssue[] {
343
+ const issues: RestMappingIssue[] = [];
344
+ const push: Push = (code, at) => {
345
+ issues.push(Object.freeze({ code, at }));
346
+ };
347
+ if (!isObject(mapping)) {
348
+ push("missing", "");
349
+ return issues;
350
+ }
351
+ const m = mapping as unknown as RestMapping;
352
+ if (m.version !== 1) {
353
+ push("version", "version");
354
+ }
355
+ checkEndpoint(m.endpoint, push);
356
+ const requests = isObject(m.requests) ? m.requests : {};
357
+ const entities = isObject(m.entities) ? m.entities : {};
358
+ if (!isObject(m.requests)) {
359
+ push("missing", "requests");
360
+ }
361
+ if (!isObject(m.entities)) {
362
+ push("missing", "entities");
363
+ }
364
+ const entityNames = new Set(Object.keys(entities));
365
+ for (const [name, r] of Object.entries(requests)) {
366
+ checkRequest(r, `requests.${name}`, entityNames, push);
367
+ }
368
+ for (const [name, e] of Object.entries(entities)) {
369
+ checkEntity(e, `entities.${name}`, entityNames, push);
370
+ }
371
+ checkRequestNames(m, new Set(Object.keys(requests)), push);
372
+ checkLimits(m, push);
373
+ checkSelector(m.modified, "modified", push, false);
374
+ if (m.directed !== undefined && typeof m.directed !== "boolean") {
375
+ push("missing", "directed");
376
+ }
377
+ return issues;
378
+ }
379
+
380
+ /**
381
+ * Check the rate limit and the budget headers.
382
+ * @param m - the mapping
383
+ * @param push - the accumulator
384
+ */
385
+ function checkLimits(m: RestMapping, push: Push): void {
386
+ for (const [at, value] of [
387
+ ["rateLimit.requests", m.rateLimit?.requests],
388
+ ["rateLimit.perMs", m.rateLimit?.perMs],
389
+ ] as const) {
390
+ if (m.rateLimit !== undefined && !(typeof value === "number" && value > 0)) {
391
+ push("number", at);
392
+ }
393
+ }
394
+ if (
395
+ m.budgetHeaders !== undefined &&
396
+ (typeof m.budgetHeaders.remaining !== "string" ||
397
+ (m.budgetHeaders.reset !== undefined && typeof m.budgetHeaders.reset !== "string"))
398
+ ) {
399
+ push("missing", "budgetHeaders");
400
+ }
401
+ }
@@ -0,0 +1,288 @@
1
+ /**
2
+ * The `openalex` preset of the REST mapping (design section 13.3): OpenAlex's citation graph
3
+ * around a work, or its co-authorship graph around an author, as a mapping the generic engine runs.
4
+ * The seed's own record comes first; citing works page by cursor; referenced works are stubs until
5
+ * hydrated or expanded. Freshness is the newest `updated_date`.
6
+ */
7
+
8
+ import { defineSource } from "../define.js";
9
+ import { failOn } from "../fail.js";
10
+ import { OPENALEX_SOURCE_ID } from "../ids.js";
11
+ import { type GraphSource, type SourceContext } from "../types.js";
12
+ import { OPENALEX_DESCRIPTOR } from "./descriptor.js";
13
+ import { type OpenAlexParams, type RestEntity, type RestMapping } from "./params.js";
14
+ import { restMethods, type RestPlan, type RestPurpose } from "./source.js";
15
+
16
+ /** OpenAlex ids are URLs under this prefix. */
17
+ const PREFIX = "https://openalex.org/";
18
+
19
+ /** The work fields every citation load selects. */
20
+ const WORK_FIELDS = "id,display_name,publication_year,cited_by_count,updated_date,referenced_works";
21
+
22
+ /**
23
+ * A list request over works, `{ids}` batched 50 at a time and joined by `|`.
24
+ * @param filter - the filter template
25
+ * @param perPage - the page size
26
+ * @param paged - whether it pages by cursor
27
+ * @returns the request
28
+ */
29
+ function works(filter: string, perPage: string, paged: boolean): RestMapping["requests"][string] {
30
+ return {
31
+ path: "/works",
32
+ query: { filter, "per-page": perPage, select: "{select}" },
33
+ batch: { max: 50, join: "|" },
34
+ records: "results",
35
+ entity: "work",
36
+ ...(paged ? { paging: { style: "cursor", param: "cursor", first: "*", next: "meta.next_cursor" } } : {}),
37
+ };
38
+ }
39
+
40
+ /** An entity known by its OpenAlex id and display name. */
41
+ const named: RestEntity = { id: "id", stripPrefix: PREFIX, fields: { name: "display_name" } };
42
+
43
+ /**
44
+ * OpenAlex's citation graph as a mapping: the seed work (`{ids}`), the works citing it page by page,
45
+ * each work's references as `cites` edges, and, when `{select}` asks for `authorships` and
46
+ * `topics`, the authors, their institutions and the topics as nodes. Fill `{ids}` with work ids
47
+ * and `{select}` with the fields to read. The `openalex` source chooses both from its params and
48
+ * leaves out the rules for what is not included. Experimental.
49
+ * @category Network sources
50
+ */
51
+ export const OPENALEX_MAPPING: RestMapping = Object.freeze<RestMapping>({
52
+ version: 1,
53
+ endpoint: "https://api.openalex.org",
54
+ load: "citing",
55
+ seed: "by-id",
56
+ expand: { in: "citing", out: "by-id" },
57
+ hydrate: "by-id",
58
+ directed: true,
59
+ modified: "updated_date",
60
+ auth: { kind: "api-key", query: "api_key" },
61
+ rateLimit: { requests: 10, perMs: 1000 },
62
+ budgetHeaders: { remaining: "x-ratelimit-remaining", reset: "x-ratelimit-reset" },
63
+ requests: {
64
+ citing: works("cites:{ids}", "200", true),
65
+ "by-id": works("openalex:{ids}", "50", false),
66
+ authored: works("authorships.author.id:{ids}", "200", true),
67
+ "authors-by-id": {
68
+ path: "/authors",
69
+ query: { filter: "openalex:{ids}", "per-page": "50", select: "id,display_name" },
70
+ batch: { max: 50, join: "|" },
71
+ records: "results",
72
+ entity: "author",
73
+ },
74
+ },
75
+ entities: {
76
+ work: {
77
+ id: "id",
78
+ stripPrefix: PREFIX,
79
+ fields: {
80
+ title: "display_name",
81
+ year: "publication_year",
82
+ citedBy: "cited_by_count",
83
+ updated: "updated_date",
84
+ },
85
+ edges: [
86
+ { to: "referenced_works[]", type: "cites", entity: "work" },
87
+ { to: "authorships[].author.id", type: "authored_by", entity: "author" },
88
+ {
89
+ each: "authorships[]",
90
+ from: "author.id",
91
+ to: "institutions[].id",
92
+ type: "affiliated_with",
93
+ entity: "institution",
94
+ },
95
+ { to: "topics[].id", type: "has_topic", entity: "topic" },
96
+ ],
97
+ embedded: [
98
+ { at: "authorships[].author", entity: "author" },
99
+ { at: "authorships[].institutions[]", entity: "institution" },
100
+ { at: "topics[]", entity: "topic" },
101
+ ],
102
+ },
103
+ author: named,
104
+ institution: named,
105
+ topic: named,
106
+ },
107
+ });
108
+
109
+ /** What `include` may hold. */
110
+ type Include = "authors" | "institutions" | "topics";
111
+
112
+ /**
113
+ * The included kinds, from an array or a comma-separated string.
114
+ * @param include - the param
115
+ * @returns the set
116
+ */
117
+ function includes(include: unknown): Set<Include> {
118
+ const list: unknown[] = typeof include === "string" ? include.split(",") : [];
119
+ if (Array.isArray(include)) {
120
+ list.push(...(include as unknown[]));
121
+ }
122
+ const out = new Set(list.map((v) => String(v).trim()).filter((v) => v !== "") as Include[]);
123
+ if (out.has("institutions")) {
124
+ // an institution hangs off an author, so it brings its authors
125
+ out.add("authors");
126
+ }
127
+ return out;
128
+ }
129
+
130
+ /**
131
+ * The citation mapping without the rules for what is not included.
132
+ * @param include - what is included
133
+ * @returns the mapping
134
+ */
135
+ function citationMapping(include: ReadonlySet<Include>): RestMapping {
136
+ const { work } = OPENALEX_MAPPING.entities;
137
+ const keepEdge = (type: string): boolean =>
138
+ type === "cites" ||
139
+ (type === "authored_by" && include.has("authors")) ||
140
+ (type === "affiliated_with" && include.has("institutions")) ||
141
+ (type === "has_topic" && include.has("topics"));
142
+ const keepEmbedded = (entity: string): boolean => include.has(`${entity}s` as Include);
143
+ return {
144
+ ...OPENALEX_MAPPING,
145
+ entities: {
146
+ ...OPENALEX_MAPPING.entities,
147
+ work: {
148
+ ...work,
149
+ edges: work.edges?.filter((e) => keepEdge(e.type)),
150
+ embedded: work.embedded?.filter((e) => keepEmbedded(e.entity)),
151
+ },
152
+ },
153
+ };
154
+ }
155
+
156
+ /**
157
+ * The co-authorship mapping: works are containers, every two authors of one work are joined by a
158
+ * `coauthor` edge, and an author expands through the works they wrote.
159
+ * @param include - what is included
160
+ * @param seedIsWork - whether the load starts from a work
161
+ * @returns the mapping
162
+ */
163
+ function coauthorshipMapping(include: ReadonlySet<Include>, seedIsWork: boolean): RestMapping {
164
+ const institutions = include.has("institutions");
165
+ return {
166
+ ...OPENALEX_MAPPING,
167
+ load: seedIsWork ? "by-id" : "authored",
168
+ seed: undefined,
169
+ expand: "authored",
170
+ hydrate: "authors-by-id",
171
+ directed: false,
172
+ entities: {
173
+ ...OPENALEX_MAPPING.entities,
174
+ work: {
175
+ id: "id",
176
+ // a rule's `from` is read with the record's own prefix
177
+ stripPrefix: PREFIX,
178
+ node: false,
179
+ edges: [
180
+ { pairs: "authorships[].author.id", type: "coauthor", entity: "author" },
181
+ ...(institutions
182
+ ? [
183
+ {
184
+ each: "authorships[]",
185
+ from: "author.id",
186
+ to: "institutions[].id",
187
+ type: "affiliated_with",
188
+ entity: "institution",
189
+ },
190
+ ]
191
+ : []),
192
+ ],
193
+ embedded: [
194
+ { at: "authorships[].author", entity: "author" },
195
+ ...(institutions ? [{ at: "authorships[].institutions[]", entity: "institution" }] : []),
196
+ ],
197
+ },
198
+ },
199
+ };
200
+ }
201
+
202
+ /**
203
+ * An OpenAlex id param: `W123` or its URL form, checked so a value cannot add a filter.
204
+ * @param value - the param
205
+ * @param name - its name
206
+ * @param letter - the id's kind letter
207
+ * @param ctx - the context
208
+ * @returns the bare id
209
+ */
210
+ function openalexId(value: unknown, name: string, letter: string, ctx: SourceContext): string {
211
+ const text = typeof value === "string" ? value.trim().replace(PREFIX, "") : "";
212
+ if (!new RegExp(String.raw`^${letter}\d+$`, "i").test(text)) {
213
+ failOn(ctx.report, "E_SOURCE_PARAM", `${name} is not an OpenAlex id`, { name, reason: "format" });
214
+ }
215
+ return text.toUpperCase();
216
+ }
217
+
218
+ /**
219
+ * The plan of an OpenAlex call.
220
+ * @param params - the params
221
+ * @param ctx - the context
222
+ * @param purpose - what the plan is for
223
+ * @returns the mapping and values
224
+ */
225
+ function plan(params: OpenAlexParams, ctx: SourceContext, purpose: RestPurpose): RestPlan {
226
+ const graph = params.graph ?? "citation";
227
+ const include = includes(params.include);
228
+ const hasWork = params.work !== undefined && params.work !== "";
229
+ const hasAuthor = params.author !== undefined && params.author !== "";
230
+ if (purpose !== "expand" && hasWork === hasAuthor) {
231
+ failOn(ctx.report, "E_SOURCE_PARAM", "give exactly one of work and author", {
232
+ name: "work",
233
+ reason: hasWork ? "exclusive" : "required",
234
+ });
235
+ }
236
+ let seed = "";
237
+ if (hasWork) {
238
+ seed = openalexId(params.work, "work", "W", ctx);
239
+ } else if (hasAuthor) {
240
+ seed = openalexId(params.author, "author", "A", ctx);
241
+ }
242
+ if (graph === "coauthorship") {
243
+ return {
244
+ mapping: coauthorshipMapping(include, hasWork),
245
+ values: { ids: seed, select: purpose === "validate" ? "id,updated_date" : "id,updated_date,authorships" },
246
+ };
247
+ }
248
+ let select =
249
+ WORK_FIELDS + (include.has("authors") ? ",authorships" : "") + (include.has("topics") ? ",topics" : "");
250
+ if (purpose === "validate") {
251
+ select = "id,updated_date";
252
+ }
253
+ const mapping = citationMapping(include);
254
+ return {
255
+ mapping: hasWork ? mapping : { ...mapping, load: "authored", seed: undefined },
256
+ values: { ids: seed, select },
257
+ };
258
+ }
259
+
260
+ /** OpenAlex's own ids: a kind letter and digits. */
261
+ const ANY_ID = /^[WAIT]\d+$/;
262
+
263
+ const methods = restMethods<OpenAlexParams>(plan, false);
264
+
265
+ /**
266
+ * The OpenAlex preset (https://openalex.org): `work` (the citation graph around a work, default)
267
+ * or `author` (the works they wrote), `graph: "coauthorship"` for authors joined by shared works,
268
+ * and `include` (`"authors"`, `"institutions"`, `"topics"`) for more node kinds. Without a key,
269
+ * the first page loads and a later one warns W_SOURCE_AUTH with `report.source.next`; pass
270
+ * `credentials.apiKey({ query: "api_key" }, key)` and continue with the cursor. Experimental.
271
+ * @category Network sources
272
+ */
273
+ export const openalexSource: GraphSource<OpenAlexParams> = defineSource<OpenAlexParams>({
274
+ id: OPENALEX_SOURCE_ID,
275
+ descriptor: OPENALEX_DESCRIPTOR,
276
+ ...methods,
277
+ expand(request, sink, ctx) {
278
+ for (const id of request.ids) {
279
+ if (!ANY_ID.test(String(id))) {
280
+ failOn(ctx.report, "E_SOURCE_PARAM", "an expansion seed is not an OpenAlex id", {
281
+ name: "ids",
282
+ reason: "format",
283
+ });
284
+ }
285
+ }
286
+ return methods.expand(request, sink, ctx);
287
+ },
288
+ });