@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,418 @@
1
+ /**
2
+ * The one type mapper of the Cypher source (design section 10): every transport's wire values --
3
+ * Neo4j's typed JSON, neo4j-driver's objects, Neptune's plain JSON -- become the same plain values,
4
+ * and every node, relationship and path becomes a GraphNode, a GraphRel or an array of them.
5
+ *
6
+ * - Integers: a number while it is exact; past 2^53 the `long` parameter picks a rounded number
7
+ * (W_PRECISION, once per column) or the exact digits as a string.
8
+ * - Floats, booleans, strings: as they are. Dates and instants: epoch milliseconds. Local times,
9
+ * times and durations: their ISO text. Points: `{ srid, x, y, z? }`. Lists and maps: arrays and
10
+ * objects of mapped values. Bytes: dropped (W_SOURCE_VALUE).
11
+ */
12
+
13
+ import { PRECISION_CODE } from "../../common/codes.js";
14
+ import { type ImportReportBuilder } from "../../common/report.js";
15
+ import { warnOn } from "../fail.js";
16
+
17
+ /** A node a query returned. */
18
+ export class GraphNode {
19
+ /**
20
+ * Create one.
21
+ * @param id - the server's element id
22
+ * @param labels - its labels
23
+ * @param properties - its mapped properties
24
+ */
25
+ constructor(
26
+ readonly id: string,
27
+ readonly labels: readonly string[],
28
+ readonly properties: Readonly<Record<string, unknown>>,
29
+ ) {}
30
+ }
31
+
32
+ /** A relationship a query returned. */
33
+ export class GraphRel {
34
+ /**
35
+ * Create one.
36
+ * @param id - the server's element id
37
+ * @param start - the start node's element id
38
+ * @param end - the end node's element id
39
+ * @param type - its type
40
+ * @param properties - its mapped properties
41
+ */
42
+ constructor(
43
+ readonly id: string,
44
+ readonly start: string,
45
+ readonly end: string,
46
+ readonly type: string,
47
+ readonly properties: Readonly<Record<string, unknown>>,
48
+ ) {}
49
+ }
50
+
51
+ /** What the mapper needs: the `long` choice and the report its warnings go to. */
52
+ export interface MapContext {
53
+ /** Integers past 2^53: "f64" (rounded, W_PRECISION) or "string". */
54
+ readonly long: "f64" | "string";
55
+ /** The load's report. */
56
+ readonly report: ImportReportBuilder;
57
+ }
58
+
59
+ /** Values past this need a 64-bit integer. */
60
+ const SAFE = BigInt(Number.MAX_SAFE_INTEGER);
61
+
62
+ /**
63
+ * An integer from its exact decimal digits.
64
+ * @param digits - the digits
65
+ * @param column - the column it belongs to, for the warning
66
+ * @param m - the map context
67
+ * @returns a number, or a string past 2^53 under `long: "string"`
68
+ */
69
+ function integer(digits: string, column: string, m: MapContext): number | string {
70
+ let big: bigint;
71
+ try {
72
+ big = BigInt(digits);
73
+ } catch {
74
+ return Number(digits);
75
+ }
76
+ if (big <= SAFE && big >= -SAFE) {
77
+ return Number(big);
78
+ }
79
+ if (m.long === "string") {
80
+ return big.toString();
81
+ }
82
+ m.report.warnOnce(
83
+ "precision",
84
+ PRECISION_CODE,
85
+ `column ${column}: an integer beyond 2^53 was stored as the nearest 64-bit float; pass long: "string" to keep every digit`,
86
+ undefined,
87
+ `${PRECISION_CODE}:${column}`,
88
+ );
89
+ return Number(big);
90
+ }
91
+
92
+ /**
93
+ * Epoch milliseconds of an ISO instant, the zone name in brackets ignored; the text itself when it
94
+ * does not parse.
95
+ * @param text - the ISO text
96
+ * @param type - the server's type name
97
+ * @param column - the column
98
+ * @param m - the map context
99
+ * @returns milliseconds, or the text
100
+ */
101
+ function epoch(text: string, type: string, column: string, m: MapContext): number | string {
102
+ const ms = Date.parse(withoutZoneName(text));
103
+ if (Number.isNaN(ms)) {
104
+ warnOn(m.report, "W_SOURCE_VALUE", `column ${column}: a ${type} kept as text`, { type, column, as: "string" });
105
+ return text;
106
+ }
107
+ return ms;
108
+ }
109
+
110
+ /**
111
+ * Warn that a value with no dtype was dropped; the caller leaves the property out.
112
+ * @param type - the server's type name
113
+ * @param column - the column
114
+ * @param m - the map context
115
+ */
116
+ function dropped(type: string, column: string, m: MapContext): void {
117
+ warnOn(m.report, "W_SOURCE_VALUE", `column ${column}: a ${type} value was dropped`, {
118
+ type,
119
+ column,
120
+ as: "dropped",
121
+ });
122
+ }
123
+
124
+ /**
125
+ * Map every property of a map, leaving out dropped values.
126
+ * @param value - the map
127
+ * @param each - maps one value, given its key
128
+ * @returns the mapped map
129
+ */
130
+ function mapEntries(
131
+ value: Readonly<Record<string, unknown>>,
132
+ each: (v: unknown, key: string) => unknown,
133
+ ): Record<string, unknown> {
134
+ const out: Record<string, unknown> = {};
135
+ for (const [k, v] of Object.entries(value)) {
136
+ const mapped = each(v, k);
137
+ if (mapped !== undefined) {
138
+ out[k] = mapped;
139
+ }
140
+ }
141
+ return out;
142
+ }
143
+
144
+ /**
145
+ * A WKT point as Neo4j's typed JSON spells it ("SRID=7203;POINT (1.0 2.0)").
146
+ * @param text - the text
147
+ * @returns `{ srid, x, y, z? }`, or the text when it does not parse
148
+ */
149
+ function wktPoint(text: string): unknown {
150
+ const match = /^SRID=(\d+);POINT(?: Z)? ?\(([^)]*)\)$/i.exec(text.trim());
151
+ if (match === null) {
152
+ return text;
153
+ }
154
+ const [x = 0, y = 0, z] = match[2].trim().split(/\s+/).map(Number);
155
+ return z === undefined ? { srid: Number(match[1]), x, y } : { srid: Number(match[1]), x, y, z };
156
+ }
157
+
158
+ /** One typed JSON value: `{ "$type": "Integer", "_value": "42" }`. */
159
+ interface Typed {
160
+ readonly $type: string;
161
+ readonly _value: unknown;
162
+ }
163
+
164
+ /** The shape of a typed JSON node's value. */
165
+ interface TypedNode {
166
+ readonly _element_id: string;
167
+ readonly _labels: readonly string[];
168
+ readonly _properties: Readonly<Record<string, unknown>>;
169
+ }
170
+
171
+ /** The shape of a typed JSON relationship's value. */
172
+ interface TypedRel {
173
+ readonly _element_id: string;
174
+ readonly _start_node_element_id: string;
175
+ readonly _end_node_element_id: string;
176
+ readonly _type: string;
177
+ readonly _properties: Readonly<Record<string, unknown>>;
178
+ }
179
+
180
+ /**
181
+ * Map a value of Neo4j's typed JSON (the Query API's `application/vnd.neo4j.query.v1.1`).
182
+ * @param v - the wire value
183
+ * @param column - the result column or property key it belongs to
184
+ * @param m - the map context
185
+ * @returns the plain value, a GraphNode, a GraphRel or an array; undefined when dropped
186
+ */
187
+ export function fromTypedJson(v: unknown, column: string, m: MapContext): unknown {
188
+ if (v === null || typeof v !== "object" || !("$type" in v)) {
189
+ return v ?? null;
190
+ }
191
+ const { $type: type, _value: value } = v as Typed;
192
+ switch (type) {
193
+ case "Null":
194
+ return null;
195
+ case "Boolean":
196
+ case "String":
197
+ return value;
198
+ case "Integer":
199
+ return integer(String(value), column, m);
200
+ case "Float":
201
+ return Number(value);
202
+ case "Date":
203
+ return epoch(`${String(value)}T00:00:00Z`, type, column, m);
204
+ case "OffsetDateTime":
205
+ case "ZonedDateTime":
206
+ return epoch(String(value), type, column, m);
207
+ case "LocalDateTime":
208
+ case "LocalTime":
209
+ case "Time":
210
+ case "Duration":
211
+ return String(value);
212
+ case "Point":
213
+ return wktPoint(String(value));
214
+ case "Base64":
215
+ dropped(type, column, m);
216
+ return undefined;
217
+ case "List":
218
+ return (value as readonly unknown[]).map((x) => fromTypedJson(x, column, m));
219
+ case "Map":
220
+ return mapEntries(value as Record<string, unknown>, (x) => fromTypedJson(x, column, m));
221
+ case "Node": {
222
+ const n = value as TypedNode;
223
+ return new GraphNode(
224
+ n._element_id,
225
+ n._labels,
226
+ mapEntries(n._properties, (x, k) => fromTypedJson(x, k, m)),
227
+ );
228
+ }
229
+ case "Relationship": {
230
+ const r = value as TypedRel;
231
+ return new GraphRel(
232
+ r._element_id,
233
+ r._start_node_element_id,
234
+ r._end_node_element_id,
235
+ r._type,
236
+ mapEntries(r._properties, (x, k) => fromTypedJson(x, k, m)),
237
+ );
238
+ }
239
+ case "Path":
240
+ return (value as readonly unknown[]).map((x) => fromTypedJson(x, column, m));
241
+ default:
242
+ warnOn(m.report, "W_SOURCE_VALUE", `column ${column}: a ${type} kept as text`, {
243
+ type,
244
+ column,
245
+ as: "string",
246
+ });
247
+ return typeof value === "string" ? value : JSON.stringify(value);
248
+ }
249
+ }
250
+
251
+ /** The parts of neo4j-driver the mapper uses: its type checks. */
252
+ export interface DriverTypes {
253
+ isInt(v: unknown): boolean;
254
+ isNode(v: unknown): boolean;
255
+ isRelationship(v: unknown): boolean;
256
+ isPath(v: unknown): boolean;
257
+ isPoint(v: unknown): boolean;
258
+ isDate(v: unknown): boolean;
259
+ isDateTime(v: unknown): boolean;
260
+ isLocalDateTime(v: unknown): boolean;
261
+ isLocalTime(v: unknown): boolean;
262
+ isTime(v: unknown): boolean;
263
+ isDuration(v: unknown): boolean;
264
+ }
265
+
266
+ /** A driver node or relationship, as far as the mapper reads it. */
267
+ interface DriverEntity {
268
+ readonly identity: unknown;
269
+ readonly elementId?: string;
270
+ readonly labels?: readonly string[];
271
+ readonly type?: string;
272
+ readonly start?: unknown;
273
+ readonly end?: unknown;
274
+ readonly startNodeElementId?: string;
275
+ readonly endNodeElementId?: string;
276
+ readonly properties: Readonly<Record<string, unknown>>;
277
+ }
278
+
279
+ /** A driver path. */
280
+ interface DriverPath {
281
+ readonly start: unknown;
282
+ readonly segments: readonly { readonly relationship: unknown; readonly end: unknown }[];
283
+ }
284
+
285
+ /** A driver point. */
286
+ interface DriverPoint {
287
+ readonly srid: unknown;
288
+ readonly x: number;
289
+ readonly y: number;
290
+ readonly z?: number;
291
+ }
292
+
293
+ /**
294
+ * The text without a trailing bracketed zone name (`...+01:00[Europe/Paris]`).
295
+ * @param text - the ISO text
296
+ * @returns the text without the zone name
297
+ */
298
+ function withoutZoneName(text: string): string {
299
+ const end = text.length - 1;
300
+ if (text[end] !== "]") {
301
+ return text;
302
+ }
303
+ const open = text.indexOf("[", text.lastIndexOf("]", end - 1) + 1);
304
+ return open === -1 || open >= end ? text : text.slice(0, open);
305
+ }
306
+
307
+ /**
308
+ * Map a driver node or relationship.
309
+ * @param e - the driver entity
310
+ * @param node - whether it is a node
311
+ * @param m - the map context
312
+ * @param t - the driver's type checks
313
+ * @returns a GraphNode or a GraphRel
314
+ */
315
+ function fromEntity(e: DriverEntity, node: boolean, m: MapContext, t: DriverTypes): GraphNode | GraphRel {
316
+ const props = mapEntries(e.properties, (x, k) => fromDriver(x, k, m, t));
317
+ const id = e.elementId ?? String(e.identity);
318
+ return node
319
+ ? new GraphNode(id, [...(e.labels ?? [])], props)
320
+ : new GraphRel(
321
+ id,
322
+ e.startNodeElementId ?? String(e.start),
323
+ e.endNodeElementId ?? String(e.end),
324
+ e.type ?? "",
325
+ props,
326
+ );
327
+ }
328
+
329
+ /**
330
+ * Map a driver point.
331
+ * @param p - the point
332
+ * @returns srid, x, y and z when it has one
333
+ */
334
+ function fromPoint(p: DriverPoint): { srid: number; x: number; y: number; z?: number } {
335
+ const srid = Number(String(p.srid));
336
+ return p.z === undefined ? { srid, x: p.x, y: p.y } : { srid, x: p.x, y: p.y, z: p.z };
337
+ }
338
+
339
+ /**
340
+ * Map a value neo4j-driver returned. Its lossless Integer keeps every digit, so `long` decides.
341
+ * @param v - the driver value
342
+ * @param column - the result column or property key
343
+ * @param m - the map context
344
+ * @param t - the driver's type checks
345
+ * @returns the plain value, a GraphNode, a GraphRel or an array; undefined when dropped
346
+ */
347
+ export function fromDriver(v: unknown, column: string, m: MapContext, t: DriverTypes): unknown {
348
+ if (v === null || v === undefined) {
349
+ return null;
350
+ }
351
+ if (typeof v !== "object") {
352
+ return typeof v === "bigint" ? integer(v.toString(), column, m) : v;
353
+ }
354
+ // driver values (Integer, the temporal types) spell themselves exactly through toString()
355
+ const text = (): string => (v as { toString(): string }).toString();
356
+ if (t.isInt(v)) {
357
+ return integer(text(), column, m);
358
+ }
359
+ if (t.isNode(v) || t.isRelationship(v)) {
360
+ return fromEntity(v as DriverEntity, t.isNode(v), m, t);
361
+ }
362
+ if (t.isPath(v)) {
363
+ const p = v as DriverPath;
364
+ return [p.start, ...p.segments.flatMap((s) => [s.relationship, s.end])].map((x) => fromDriver(x, column, m, t));
365
+ }
366
+ if (t.isDate(v)) {
367
+ return epoch(`${text()}T00:00:00Z`, "Date", column, m);
368
+ }
369
+ if (t.isDateTime(v)) {
370
+ return epoch(text(), "DateTime", column, m);
371
+ }
372
+ if (t.isLocalDateTime(v) || t.isLocalTime(v) || t.isTime(v) || t.isDuration(v)) {
373
+ return text();
374
+ }
375
+ if (t.isPoint(v)) {
376
+ return fromPoint(v as DriverPoint);
377
+ }
378
+ if (v instanceof Uint8Array || v instanceof ArrayBuffer) {
379
+ dropped("ByteArray", column, m);
380
+ return undefined;
381
+ }
382
+ if (Array.isArray(v)) {
383
+ return v.map((x: unknown) => fromDriver(x, column, m, t));
384
+ }
385
+ return mapEntries(v as Record<string, unknown>, (x) => fromDriver(x, column, m, t));
386
+ }
387
+
388
+ /**
389
+ * Map a value of Neptune's openCypher JSON: nodes `{ "~id", "~entityType": "node", "~labels",
390
+ * "~properties" }`, relationships adding `~start`, `~end`, `~type`. Its numbers are plain JSON, so
391
+ * an integer past 2^53 was already rounded on the wire (W_PRECISION).
392
+ * @param v - the wire value
393
+ * @param column - the result column or property key
394
+ * @param m - the map context
395
+ * @returns the plain value, a GraphNode, a GraphRel or an array
396
+ */
397
+ export function fromNeptune(v: unknown, column: string, m: MapContext): unknown {
398
+ if (typeof v === "number" && Number.isInteger(v) && !Number.isSafeInteger(v)) {
399
+ return integer(BigInt(v).toString(), column, m);
400
+ }
401
+ if (v === null || typeof v !== "object") {
402
+ return v ?? null;
403
+ }
404
+ if (Array.isArray(v)) {
405
+ return v.map((x: unknown) => fromNeptune(x, column, m));
406
+ }
407
+ const o = v as Record<string, unknown>;
408
+ const props = (): Record<string, unknown> =>
409
+ mapEntries((o["~properties"] ?? {}) as Record<string, unknown>, (x, k) => fromNeptune(x, k, m));
410
+ switch (o["~entityType"]) {
411
+ case "node":
412
+ return new GraphNode(String(o["~id"]), (o["~labels"] ?? []) as string[], props());
413
+ case "relationship":
414
+ return new GraphRel(String(o["~id"]), String(o["~start"]), String(o["~end"]), String(o["~type"]), props());
415
+ default:
416
+ return mapEntries(o, (x) => fromNeptune(x, column, m));
417
+ }
418
+ }
@@ -0,0 +1,195 @@
1
+ /**
2
+ * `defineSource` and the registration checks (design section 2): the id form, exactly one read
3
+ * method, and the declared features against the methods present. Also the parameter checks every
4
+ * load runs against the descriptor before any request.
5
+ */
6
+
7
+ import { type ImportReportBuilder } from "../common/report.js";
8
+ import { failAlone, failOn } from "./fail.js";
9
+ import {
10
+ type GraphSource,
11
+ type LazySource,
12
+ type SourceDescriptor,
13
+ type SourceFeature,
14
+ type SourceParamDescriptor,
15
+ } from "./types.js";
16
+
17
+ /** Lowercase letters, digits and single dashes between them. */
18
+ const ID_FORM = /^[a-z0-9]+(-[a-z0-9]+)*$/;
19
+
20
+ /** The optional methods and the feature each one is. */
21
+ const FEATURE_METHODS: readonly (readonly [SourceFeature, "expand" | "probe" | "list" | "validate"])[] = [
22
+ ["expand", "expand"],
23
+ ["probe", "probe"],
24
+ ["list", "list"],
25
+ ["validate", "validate"],
26
+ ];
27
+
28
+ /**
29
+ * Refuse a malformed source.
30
+ * @param id - the source id
31
+ * @param reason - why
32
+ * @param message - for logs
33
+ */
34
+ function invalid(id: string, reason: string, message: string): never {
35
+ failAlone("E_SOURCE_INVALID", message, { id, reason });
36
+ }
37
+
38
+ /**
39
+ * Check a source id.
40
+ * @param id - the id
41
+ */
42
+ function checkSourceId(id: unknown): asserts id is string {
43
+ if (typeof id !== "string" || !ID_FORM.test(id)) {
44
+ invalid(String(id), "id", `source id ${JSON.stringify(id)} must be lowercase letters, digits and dashes`);
45
+ }
46
+ }
47
+
48
+ /**
49
+ * The features a loaded source has, from its methods.
50
+ * @param source - the source
51
+ * @returns the features
52
+ */
53
+ function featuresOf(source: GraphSource<never>): readonly SourceFeature[] {
54
+ return FEATURE_METHODS.filter(([, method]) => typeof source[method] === "function").map(([f]) => f);
55
+ }
56
+
57
+ /**
58
+ * Check a loaded source: its id, exactly one read method, and its declared features.
59
+ * @param source - the source
60
+ * @param declared - features a lazy registration declared, if any
61
+ */
62
+ export function checkSource(source: GraphSource<never>, declared?: SourceDescriptor): void {
63
+ checkSourceId((source as { id?: unknown }).id);
64
+ const reads = (["records", "file", "import"] as const).filter((m) => typeof source[m] === "function");
65
+ if (reads.length !== 1) {
66
+ invalid(source.id, "read-methods", `source ${source.id} must have exactly one of records, file and import`);
67
+ }
68
+ const features = (declared ?? source.descriptor)?.features;
69
+ if (features !== undefined) {
70
+ const has = new Set(featuresOf(source));
71
+ for (const f of features) {
72
+ if (f !== "page" && !has.has(f)) {
73
+ invalid(source.id, "features", `source ${source.id} declares ${f} but has no ${f} method`);
74
+ }
75
+ }
76
+ }
77
+ }
78
+
79
+ /**
80
+ * Check a lazy registration before its code is loaded.
81
+ * @param source - the lazy source
82
+ */
83
+ export function checkLazySource(source: LazySource): void {
84
+ checkSourceId(source.id);
85
+ if (typeof source.load !== "function" || typeof source.descriptor !== "object") {
86
+ invalid(source.id, "lazy", `lazy source ${source.id} needs a descriptor and a load function`);
87
+ }
88
+ }
89
+
90
+ /**
91
+ * Define a network source: returns it unchanged, with its parameter type inferred, after the
92
+ * registration checks (an id of lowercase letters, digits and dashes; exactly one of `records`,
93
+ * `file` and `import`; declared features backed by methods). A malformed source throws an
94
+ * ImportError whose `issue.code` is E_SOURCE_INVALID. Experimental.
95
+ * @param source - the source
96
+ * @returns the same source
97
+ * @example
98
+ * ```ts
99
+ * const people = defineSource({
100
+ * id: "people",
101
+ * async records(params: { team: string }, ctx) {
102
+ * const rows = await ctx.fetchJson<{ id: string; name: string }[]>(`/api/people?team=${params.team}`);
103
+ * return { nodes: rows };
104
+ * },
105
+ * });
106
+ * ```
107
+ * @category Network sources
108
+ */
109
+ export function defineSource<P>(source: GraphSource<P>): GraphSource<P> {
110
+ checkSource(source);
111
+ return source;
112
+ }
113
+
114
+ /**
115
+ * Why a number or integer param is wrong, if it is.
116
+ * @param p - the param's descriptor
117
+ * @param value - the value given
118
+ * @returns the reason, or null when it is fine
119
+ */
120
+ function numberProblem(p: SourceParamDescriptor, value: unknown): string | null {
121
+ if (typeof value !== "number" || Number.isNaN(value) || (p.type === "integer" && !Number.isInteger(value))) {
122
+ return "type";
123
+ }
124
+ if ((p.min !== undefined && value < p.min) || (p.max !== undefined && value > p.max)) {
125
+ return "range";
126
+ }
127
+ return null;
128
+ }
129
+
130
+ /**
131
+ * Why a URL param is wrong, if it is.
132
+ * @param value - the value given
133
+ * @returns the reason, or null when it is fine
134
+ */
135
+ function urlProblem(value: unknown): string | null {
136
+ let url: URL;
137
+ try {
138
+ url = new URL(typeof value === "string" ? value : "");
139
+ } catch {
140
+ return "type";
141
+ }
142
+ return url.username !== "" || url.password !== "" ? "credentials-in-url" : null;
143
+ }
144
+
145
+ /**
146
+ * Why a present param value is wrong for its descriptor, if it is.
147
+ * @param p - the param's descriptor
148
+ * @param value - the value given (not undefined or null)
149
+ * @returns the reason, or null when it is fine
150
+ */
151
+ function paramProblem(p: SourceParamDescriptor, value: unknown): string | null {
152
+ switch (p.type) {
153
+ case "integer":
154
+ case "number":
155
+ return numberProblem(p, value);
156
+ case "boolean":
157
+ return typeof value === "boolean" ? null : "type";
158
+ case "enum":
159
+ return p.values !== undefined && !p.values.some((v) => v.value === value) ? "enum" : null;
160
+ case "url":
161
+ return urlProblem(value);
162
+ default:
163
+ return null;
164
+ }
165
+ }
166
+
167
+ /**
168
+ * Check params against a descriptor before any request: required ones present, numbers and
169
+ * integers in range, booleans, enums, URLs (never with a user name or password in them).
170
+ * @param params - the caller's params
171
+ * @param descriptor - the source's descriptor
172
+ * @param report - the load's report
173
+ */
174
+ export function checkParams(
175
+ params: Readonly<Record<string, unknown>>,
176
+ descriptor: SourceDescriptor | undefined,
177
+ report: ImportReportBuilder,
178
+ ): void {
179
+ if (typeof params !== "object" || (params as unknown) === null) {
180
+ failOn(report, "E_SOURCE_PARAM", "params must be an object", { name: "params", reason: "type" });
181
+ }
182
+ for (const p of descriptor?.params ?? []) {
183
+ const value = params[p.name];
184
+ const missing = value === undefined || value === null;
185
+ let reason: string | null = null;
186
+ if (!missing) {
187
+ reason = paramProblem(p, value);
188
+ } else if (p.required === true && p.default === undefined) {
189
+ reason = "required";
190
+ }
191
+ if (reason !== null) {
192
+ failOn(report, "E_SOURCE_PARAM", `parameter ${p.name}: ${reason}`, { name: p.name, reason });
193
+ }
194
+ }
195
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Raising a network source issue: one place that turns a code and its params into an ImportError
3
+ * whose `issue.params` and `details` both carry the params, so callers branch on
4
+ * `err.issue.code` and read `err.issue.params` as with every other graph-io failure.
5
+ */
6
+
7
+ import { ImportReportBuilder } from "../common/report.js";
8
+ import { type IssueCategory } from "../types.js";
9
+ import { type SourceIssueCode } from "./codes.js";
10
+
11
+ /** The category each code is filed under. */
12
+ const CATEGORY: Readonly<Partial<Record<SourceIssueCode, IssueCategory>>> = {
13
+ E_SOURCE_PARAM: "validation-error",
14
+ E_SOURCE_INVALID: "validation-error",
15
+ E_SOURCE_RESPONSE: "parse-error",
16
+ E_SOURCE_NOT_A_GRAPH: "parse-error",
17
+ E_SOURCE_NOT_FOUND: "missing-value",
18
+ E_SOURCE_UNKNOWN: "missing-value",
19
+ };
20
+
21
+ /**
22
+ * Abort a load with a source error, carrying the load's report so far plus the error.
23
+ * @param report - the load's report
24
+ * @param code - the code
25
+ * @param message - a plain-ASCII message, for logs
26
+ * @param params - the issue's values
27
+ * @returns never; it throws the ImportError
28
+ */
29
+ export function failOn(
30
+ report: ImportReportBuilder,
31
+ code: SourceIssueCode,
32
+ message: string,
33
+ params: Readonly<Record<string, unknown>>,
34
+ ): never {
35
+ // a fork, so a failure the runner turns into a warning (a later page's 401, a cap) leaves no
36
+ // error in the load's own report; the ImportError carries everything recorded so far
37
+ return report.fork().failWith(CATEGORY[code] ?? "unsupported", code, message, undefined, params, params);
38
+ }
39
+
40
+ /**
41
+ * Raise a source error outside a load (registration, a credential factory).
42
+ * @param code - the code
43
+ * @param message - a plain-ASCII message, for logs
44
+ * @param params - the issue's values
45
+ * @param format - the report's format name
46
+ */
47
+ export function failAlone(
48
+ code: SourceIssueCode,
49
+ message: string,
50
+ params: Readonly<Record<string, unknown>>,
51
+ format = "source",
52
+ ): never {
53
+ failOn(new ImportReportBuilder(format, 0), code, message, params);
54
+ }
55
+
56
+ /**
57
+ * Record a source warning on a report.
58
+ * @param report - the report
59
+ * @param code - the code
60
+ * @param message - a plain-ASCII message, for logs
61
+ * @param params - the issue's values
62
+ */
63
+ export function warnOn(
64
+ report: ImportReportBuilder,
65
+ code: SourceIssueCode,
66
+ message: string,
67
+ params: Readonly<Record<string, unknown>>,
68
+ ): void {
69
+ report.warning("unsupported", code, message, undefined, params);
70
+ }