@thomasfosterau/effect-rdf 0.0.0-stage → 0.1.0

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 (776) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2251 -2
  3. package/dist/Algebra-CGG4oae3.mjs +433 -0
  4. package/dist/Algebra-CGG4oae3.mjs.map +1 -0
  5. package/dist/Algebra-uGsIEOUA.d.mts +446 -0
  6. package/dist/Ast-CPRZmBvk.mjs +552 -0
  7. package/dist/Ast-CPRZmBvk.mjs.map +1 -0
  8. package/dist/Ast-vcw2W-lf.d.mts +827 -0
  9. package/dist/Bindings-Ck3m7JRC.mjs +249 -0
  10. package/dist/Bindings-Ck3m7JRC.mjs.map +1 -0
  11. package/dist/Bindings-DiKpBd7f.d.mts +153 -0
  12. package/dist/ClientErrors-CpXdFX5u.mjs +128 -0
  13. package/dist/ClientErrors-CpXdFX5u.mjs.map +1 -0
  14. package/dist/ClientErrors-D4IZHUM-.d.mts +101 -0
  15. package/dist/ClientFormats-CXomkXLV.mjs +73 -0
  16. package/dist/ClientFormats-CXomkXLV.mjs.map +1 -0
  17. package/dist/ClientFormats-Dm57ZPwR.d.mts +36 -0
  18. package/dist/Csv2Json-DynEcwCh.mjs +194 -0
  19. package/dist/Csv2Json-DynEcwCh.mjs.map +1 -0
  20. package/dist/Csv2Json-aXNVDoXQ.d.mts +40 -0
  21. package/dist/Csv2Rdf-8maXP6mt.d.mts +41 -0
  22. package/dist/Csv2Rdf-DuSEkaKE.mjs +161 -0
  23. package/dist/Csv2Rdf-DuSEkaKE.mjs.map +1 -0
  24. package/dist/Dataset-BlmlcI7J.mjs +782 -0
  25. package/dist/Dataset-BlmlcI7J.mjs.map +1 -0
  26. package/dist/Dataset-DS3ESOcO.d.mts +426 -0
  27. package/dist/Dataset.d.mts +2 -0
  28. package/dist/Dataset.mjs +1 -0
  29. package/dist/Datatype-CxMpamHC.d.mts +212 -0
  30. package/dist/Datatype-DQvkNkiH.mjs +1001 -0
  31. package/dist/Datatype-DQvkNkiH.mjs.map +1 -0
  32. package/dist/Dialect-8ChFj5EX.d.mts +113 -0
  33. package/dist/Dialect-CzVH38uo.mjs +165 -0
  34. package/dist/Dialect-CzVH38uo.mjs.map +1 -0
  35. package/dist/DocumentLoader-D3lZREnB.mjs +346 -0
  36. package/dist/DocumentLoader-D3lZREnB.mjs.map +1 -0
  37. package/dist/DocumentLoader-ZUCEVrW5.d.mts +178 -0
  38. package/dist/DublinCore-AnwqxRx6.mjs +137 -0
  39. package/dist/DublinCore-AnwqxRx6.mjs.map +1 -0
  40. package/dist/DublinCore-Dq-tVA5d.d.mts +119 -0
  41. package/dist/Engine-CYPB3g4h.d.mts +144 -0
  42. package/dist/Engine-DF8PN7g-.mjs +872 -0
  43. package/dist/Engine-DF8PN7g-.mjs.map +1 -0
  44. package/dist/Errors-CMdV1RhU.mjs +37 -0
  45. package/dist/Errors-CMdV1RhU.mjs.map +1 -0
  46. package/dist/Errors-u2bDjUeM.d.mts +30 -0
  47. package/dist/Evaluator-DEsU4d1o.d.mts +50 -0
  48. package/dist/Evaluator-DOY2-guC.mjs +281 -0
  49. package/dist/Evaluator-DOY2-guC.mjs.map +1 -0
  50. package/dist/Exif-CpqniYQd.d.mts +78 -0
  51. package/dist/Exif-DjkCfEB-.mjs +89 -0
  52. package/dist/Exif-DjkCfEB-.mjs.map +1 -0
  53. package/dist/Expression-BIMMvduQ.mjs +230 -0
  54. package/dist/Expression-BIMMvduQ.mjs.map +1 -0
  55. package/dist/Expression-W8A9cyX7.d.mts +89 -0
  56. package/dist/Extract-Bop85jES.mjs +220 -0
  57. package/dist/Extract-Bop85jES.mjs.map +1 -0
  58. package/dist/Extract-C_pCvuTC.d.mts +88 -0
  59. package/dist/Federation-BcNrozc1.d.mts +52 -0
  60. package/dist/Federation-CHScBkaK.mjs +130 -0
  61. package/dist/Federation-CHScBkaK.mjs.map +1 -0
  62. package/dist/Functions-AvjNcId_.mjs +1346 -0
  63. package/dist/Functions-AvjNcId_.mjs.map +1 -0
  64. package/dist/Functions-OQJZP-F6.d.mts +111 -0
  65. package/dist/Generator-C52mmq01.d.mts +50 -0
  66. package/dist/Generator-D3utCJC7.mjs +205 -0
  67. package/dist/Generator-D3utCJC7.mjs.map +1 -0
  68. package/dist/Grammar-CPlSxGH6.mjs +200 -0
  69. package/dist/Grammar-CPlSxGH6.mjs.map +1 -0
  70. package/dist/Grammar-CRhnRoCu.d.mts +148 -0
  71. package/dist/Grammar-D6jZdJQ3.d.mts +169 -0
  72. package/dist/Grammar-mQ8CgE1M.mjs +258 -0
  73. package/dist/Grammar-mQ8CgE1M.mjs.map +1 -0
  74. package/dist/GraphStore-DhUa4nFO.d.mts +45 -0
  75. package/dist/GraphStore-DvbqwKy1.mjs +212 -0
  76. package/dist/GraphStore-DvbqwKy1.mjs.map +1 -0
  77. package/dist/Iri-BB8Ks-BF.d.mts +84 -0
  78. package/dist/Iri-Cr92gsQV.mjs +232 -0
  79. package/dist/Iri-Cr92gsQV.mjs.map +1 -0
  80. package/dist/Iri.d.mts +2 -0
  81. package/dist/Iri.mjs +1 -0
  82. package/dist/Isomorphism-B6qTY-xy.d.mts +28 -0
  83. package/dist/Isomorphism-BmqxhKyJ.mjs +232 -0
  84. package/dist/Isomorphism-BmqxhKyJ.mjs.map +1 -0
  85. package/dist/Isomorphism-DInKnWIy.mjs +390 -0
  86. package/dist/Isomorphism-DInKnWIy.mjs.map +1 -0
  87. package/dist/Isomorphism-DvSfZXLR.d.mts +37 -0
  88. package/dist/Isomorphism.d.mts +2 -0
  89. package/dist/Isomorphism.mjs +1 -0
  90. package/dist/JsonLd-DOwS2FHg.mjs +2836 -0
  91. package/dist/JsonLd-DOwS2FHg.mjs.map +1 -0
  92. package/dist/JsonLd-DobFrQNa.d.mts +242 -0
  93. package/dist/JsonLdError-C9J-BxfG.mjs +106 -0
  94. package/dist/JsonLdError-C9J-BxfG.mjs.map +1 -0
  95. package/dist/JsonLdError-DSOfHkOy.d.mts +43 -0
  96. package/dist/LanguageTag-BCu8rcmX.d.mts +38 -0
  97. package/dist/LanguageTag-BcOpMGZ4.mjs +89 -0
  98. package/dist/LanguageTag-BcOpMGZ4.mjs.map +1 -0
  99. package/dist/LanguageTag.d.mts +2 -0
  100. package/dist/LanguageTag.mjs +1 -0
  101. package/dist/Lexical-Cg0JHrf6.mjs +243 -0
  102. package/dist/Lexical-Cg0JHrf6.mjs.map +1 -0
  103. package/dist/Lexical-D3zySYVS.d.mts +163 -0
  104. package/dist/Manifest-B6xf6mUc.mjs +148 -0
  105. package/dist/Manifest-B6xf6mUc.mjs.map +1 -0
  106. package/dist/Manifest-DQUMRBFr.d.mts +98 -0
  107. package/dist/Mapping-BgG74x3U.d.mts +63 -0
  108. package/dist/Mapping-Dc1ZGirk.mjs +259 -0
  109. package/dist/Mapping-Dc1ZGirk.mjs.map +1 -0
  110. package/dist/Mcp-1DwTTKOK.mjs +48 -0
  111. package/dist/Mcp-1DwTTKOK.mjs.map +1 -0
  112. package/dist/Mcp-d-pX9erx.d.mts +25 -0
  113. package/dist/Message-CK_DGQuu.mjs +95 -0
  114. package/dist/Message-CK_DGQuu.mjs.map +1 -0
  115. package/dist/Message-fIvTJSXM.d.mts +49 -0
  116. package/dist/Metadata-BbffwGDZ.mjs +445 -0
  117. package/dist/Metadata-BbffwGDZ.mjs.map +1 -0
  118. package/dist/Metadata-CEt3yc1-.d.mts +901 -0
  119. package/dist/Metadata-D4HsQNXr.mjs +1273 -0
  120. package/dist/Metadata-D4HsQNXr.mjs.map +1 -0
  121. package/dist/Metadata-nzS7QKRj.d.mts +350 -0
  122. package/dist/Model-DaMmxurZ.d.mts +293 -0
  123. package/dist/Model-DlPzRYhF.mjs +528 -0
  124. package/dist/Model-DlPzRYhF.mjs.map +1 -0
  125. package/dist/N3-BzyV-KIH.mjs +974 -0
  126. package/dist/N3-BzyV-KIH.mjs.map +1 -0
  127. package/dist/N3-DSLnonDn.d.mts +100 -0
  128. package/dist/NQuads-C1VBOJ3-.mjs +117 -0
  129. package/dist/NQuads-C1VBOJ3-.mjs.map +1 -0
  130. package/dist/NQuads-FjFZikFg.d.mts +76 -0
  131. package/dist/NTriples-D-kLSEAf.mjs +120 -0
  132. package/dist/NTriples-D-kLSEAf.mjs.map +1 -0
  133. package/dist/NTriples-D34OspfW.d.mts +76 -0
  134. package/dist/Namespace-ClTUO_ya.d.mts +42 -0
  135. package/dist/Namespace-DHFIsORd.mjs +75 -0
  136. package/dist/Namespace-DHFIsORd.mjs.map +1 -0
  137. package/dist/Namespace.d.mts +2 -0
  138. package/dist/Namespace.mjs +1 -0
  139. package/dist/Namespaces-Bz85vpjW.mjs +235 -0
  140. package/dist/Namespaces-Bz85vpjW.mjs.map +1 -0
  141. package/dist/Namespaces-C1jW6EDo.d.mts +178 -0
  142. package/dist/Optimizer-BWWQRQPY.mjs +168 -0
  143. package/dist/Optimizer-BWWQRQPY.mjs.map +1 -0
  144. package/dist/Optimizer-DUpUow6k.d.mts +26 -0
  145. package/dist/Options-BLBGL4HE.mjs +72 -0
  146. package/dist/Options-BLBGL4HE.mjs.map +1 -0
  147. package/dist/Options-BommQwP9.d.mts +127 -0
  148. package/dist/Packet-CA76wVX3.mjs +197 -0
  149. package/dist/Packet-CA76wVX3.mjs.map +1 -0
  150. package/dist/Packet-Cy5g6XuW.d.mts +130 -0
  151. package/dist/Parser-p1Gyr0QN.d.mts +85 -0
  152. package/dist/Parser-xARsOWXk.mjs +1317 -0
  153. package/dist/Parser-xARsOWXk.mjs.map +1 -0
  154. package/dist/Path-B20Yp8KE.mjs +284 -0
  155. package/dist/Path-B20Yp8KE.mjs.map +1 -0
  156. package/dist/Path-DRB8e-Zn.d.mts +181 -0
  157. package/dist/Pdf-B9RZn--8.d.mts +77 -0
  158. package/dist/Pdf-CKK6dkZn.mjs +89 -0
  159. package/dist/Pdf-CKK6dkZn.mjs.map +1 -0
  160. package/dist/PdfA-CUjSuntT.d.mts +109 -0
  161. package/dist/PdfA-CleOhuL6.mjs +124 -0
  162. package/dist/PdfA-CleOhuL6.mjs.map +1 -0
  163. package/dist/Photoshop-CiHo80qV.mjs +233 -0
  164. package/dist/Photoshop-CiHo80qV.mjs.map +1 -0
  165. package/dist/Photoshop-udKZ0I3N.d.mts +204 -0
  166. package/dist/PrefixMap-BHFPDLO-.mjs +103 -0
  167. package/dist/PrefixMap-BHFPDLO-.mjs.map +1 -0
  168. package/dist/PrefixMap-BMlXrWNd.d.mts +64 -0
  169. package/dist/PrefixMap.d.mts +2 -0
  170. package/dist/PrefixMap.mjs +1 -0
  171. package/dist/Processor-CMmecFsb.mjs +198 -0
  172. package/dist/Processor-CMmecFsb.mjs.map +1 -0
  173. package/dist/Processor-FJPvO0CB.d.mts +435 -0
  174. package/dist/Protocol-BA7OkNgp.mjs +202 -0
  175. package/dist/Protocol-BA7OkNgp.mjs.map +1 -0
  176. package/dist/Protocol-DlSoiIKB.d.mts +108 -0
  177. package/dist/ProtocolErrors-Ckfejnl6.d.mts +84 -0
  178. package/dist/ProtocolErrors-czDPVcX5.mjs +129 -0
  179. package/dist/ProtocolErrors-czDPVcX5.mjs.map +1 -0
  180. package/dist/Query-D9A6LOpP.mjs +364 -0
  181. package/dist/Query-D9A6LOpP.mjs.map +1 -0
  182. package/dist/Query-KqSkTYyG.d.mts +96 -0
  183. package/dist/QueryBuilder-BLK9Vfbz.mjs +674 -0
  184. package/dist/QueryBuilder-BLK9Vfbz.mjs.map +1 -0
  185. package/dist/QueryBuilder-DUqh4ECe.d.mts +529 -0
  186. package/dist/RdfJs-D6-49XB5.mjs +86 -0
  187. package/dist/RdfJs-D6-49XB5.mjs.map +1 -0
  188. package/dist/RdfJs-DXFqdWrd.d.mts +76 -0
  189. package/dist/RdfJs.d.mts +2 -0
  190. package/dist/RdfJs.mjs +1 -0
  191. package/dist/RdfJson-5aKPDlPS.d.mts +297 -0
  192. package/dist/RdfJson-BNocgW4f.mjs +548 -0
  193. package/dist/RdfJson-BNocgW4f.mjs.map +1 -0
  194. package/dist/RdfXml-DJ9G4gOq.mjs +1014 -0
  195. package/dist/RdfXml-DJ9G4gOq.mjs.map +1 -0
  196. package/dist/RdfXml-_N7yxWEp.d.mts +149 -0
  197. package/dist/Rdfs-BRVPsAjc.d.mts +84 -0
  198. package/dist/Rdfs-CyY2wVHI.mjs +167 -0
  199. package/dist/Rdfs-CyY2wVHI.mjs.map +1 -0
  200. package/dist/Rdfs.d.mts +2 -0
  201. package/dist/Rdfs.mjs +1 -0
  202. package/dist/Reasoner-BxYhx9s7.d.mts +94 -0
  203. package/dist/Reasoner-Cw90zrjv.mjs +798 -0
  204. package/dist/Reasoner-Cw90zrjv.mjs.map +1 -0
  205. package/dist/Reification-BmN4EfnM.d.mts +40 -0
  206. package/dist/Reification-dpqQvjDE.mjs +82 -0
  207. package/dist/Reification-dpqQvjDE.mjs.map +1 -0
  208. package/dist/Reification.d.mts +2 -0
  209. package/dist/Reification.mjs +1 -0
  210. package/dist/Report-XHs8htzK.mjs +121 -0
  211. package/dist/Report-XHs8htzK.mjs.map +1 -0
  212. package/dist/Report-hcXsc_19.d.mts +115 -0
  213. package/dist/Resource-B1cI8FyJ.d.mts +218 -0
  214. package/dist/Resource-sIEeNh15.mjs +374 -0
  215. package/dist/Resource-sIEeNh15.mjs.map +1 -0
  216. package/dist/Resource.d.mts +2 -0
  217. package/dist/Resource.mjs +1 -0
  218. package/dist/Results-BVNEC-Wt.d.mts +277 -0
  219. package/dist/Results-peJjGA2V.mjs +621 -0
  220. package/dist/Results-peJjGA2V.mjs.map +1 -0
  221. package/dist/ResultsStream-BhF0OcNn.mjs +639 -0
  222. package/dist/ResultsStream-BhF0OcNn.mjs.map +1 -0
  223. package/dist/ResultsStream-toYMXrOe.d.mts +100 -0
  224. package/dist/SemAct-CDchtk49.d.mts +96 -0
  225. package/dist/SemAct-CmyT4yI8.mjs +118 -0
  226. package/dist/SemAct-CmyT4yI8.mjs.map +1 -0
  227. package/dist/Serialization-DP9H5bYQ.mjs +514 -0
  228. package/dist/Serialization-DP9H5bYQ.mjs.map +1 -0
  229. package/dist/Serialization-Df8iVauT.d.mts +392 -0
  230. package/dist/Serialization.d.mts +2 -0
  231. package/dist/Serialization.mjs +1 -0
  232. package/dist/ServerFormats-CrRnjjf6.mjs +64 -0
  233. package/dist/ServerFormats-CrRnjjf6.mjs.map +1 -0
  234. package/dist/ServerFormats-DjC9NsO_.d.mts +36 -0
  235. package/dist/ServiceDescription-BERsvg-k.d.mts +54 -0
  236. package/dist/ServiceDescription-Dq5hxeGy.mjs +97 -0
  237. package/dist/ServiceDescription-Dq5hxeGy.mjs.map +1 -0
  238. package/dist/ShExC-Ctf-06CL.d.mts +67 -0
  239. package/dist/ShExC-DJbB19i3.mjs +1181 -0
  240. package/dist/ShExC-DJbB19i3.mjs.map +1 -0
  241. package/dist/ShExError-BeYFD9rv.d.mts +61 -0
  242. package/dist/ShExError-CVtq2NnM.mjs +64 -0
  243. package/dist/ShExError-CVtq2NnM.mjs.map +1 -0
  244. package/dist/ShExJ-C1u_wgyD.d.mts +531 -0
  245. package/dist/ShExJ-COiPd9Xw.mjs +532 -0
  246. package/dist/ShExJ-COiPd9Xw.mjs.map +1 -0
  247. package/dist/ShExR-ByR4mCh-.mjs +480 -0
  248. package/dist/ShExR-ByR4mCh-.mjs.map +1 -0
  249. package/dist/ShExR-CqONNNBz.d.mts +40 -0
  250. package/dist/ShapeMap-C422pxKl.d.mts +140 -0
  251. package/dist/ShapeMap-CsgKxB2G.mjs +181 -0
  252. package/dist/ShapeMap-CsgKxB2G.mjs.map +1 -0
  253. package/dist/Shapes-18GjfyBV.mjs +597 -0
  254. package/dist/Shapes-18GjfyBV.mjs.map +1 -0
  255. package/dist/Shapes-BQFDFc4Q.d.mts +306 -0
  256. package/dist/Sparql-BiYFMSpl.mjs +29 -0
  257. package/dist/Sparql-BiYFMSpl.mjs.map +1 -0
  258. package/dist/Sparql-DecpWTPh.d.mts +97 -0
  259. package/dist/SparqlClient-C_CjXbwj.mjs +333 -0
  260. package/dist/SparqlClient-C_CjXbwj.mjs.map +1 -0
  261. package/dist/SparqlClient-UPc88SHy.d.mts +290 -0
  262. package/dist/SparqlServer-CbUW-pVj.d.mts +71 -0
  263. package/dist/SparqlServer-Db7w7Cll.mjs +308 -0
  264. package/dist/SparqlServer-Db7w7Cll.mjs.map +1 -0
  265. package/dist/SqlStore-BBqFx-Wl.mjs +684 -0
  266. package/dist/SqlStore-BBqFx-Wl.mjs.map +1 -0
  267. package/dist/SqlStore-CCJo5I-e.d.mts +117 -0
  268. package/dist/Store-D0jmVfb3.d.mts +166 -0
  269. package/dist/Store-DH3Ow1GO.mjs +162 -0
  270. package/dist/Store-DH3Ow1GO.mjs.map +1 -0
  271. package/dist/Structure-BjMo4Bkc.mjs +334 -0
  272. package/dist/Structure-BjMo4Bkc.mjs.map +1 -0
  273. package/dist/Structure-n4CmDiab.d.mts +63 -0
  274. package/dist/Table-BGgm9nbM.mjs +538 -0
  275. package/dist/Table-BGgm9nbM.mjs.map +1 -0
  276. package/dist/Table-C3reiVrb.d.mts +261 -0
  277. package/dist/Term-B_4ezyXq.d.mts +619 -0
  278. package/dist/Term-CFLG1qu4.mjs +991 -0
  279. package/dist/Term-CFLG1qu4.mjs.map +1 -0
  280. package/dist/Term.d.mts +2 -0
  281. package/dist/Term.mjs +1 -0
  282. package/dist/TermCodec-CDZiEztW.mjs +397 -0
  283. package/dist/TermCodec-CDZiEztW.mjs.map +1 -0
  284. package/dist/TermCodec-_03bDXr0.d.mts +209 -0
  285. package/dist/TermCodec.d.mts +2 -0
  286. package/dist/TermCodec.mjs +1 -0
  287. package/dist/TermJson-BOPe0yve.d.mts +232 -0
  288. package/dist/TermJson-FAg3lvjl.mjs +142 -0
  289. package/dist/TermJson-FAg3lvjl.mjs.map +1 -0
  290. package/dist/TermJson.d.mts +2 -0
  291. package/dist/TermJson.mjs +1 -0
  292. package/dist/TermSchema-Bn9CoaYA.mjs +30 -0
  293. package/dist/TermSchema-Bn9CoaYA.mjs.map +1 -0
  294. package/dist/TermSchema-DBO6MroX.d.mts +6 -0
  295. package/dist/Testing-B-aPCpmu.mjs +63 -0
  296. package/dist/Testing-B-aPCpmu.mjs.map +1 -0
  297. package/dist/Testing-CF6s8P3O.d.mts +53 -0
  298. package/dist/Tiff-CR-2QeSI.d.mts +148 -0
  299. package/dist/Tiff-DlsOlZPM.mjs +169 -0
  300. package/dist/Tiff-DlsOlZPM.mjs.map +1 -0
  301. package/dist/Tools-7MdRKccr.d.mts +583 -0
  302. package/dist/Tools-ryxphZbI.mjs +329 -0
  303. package/dist/Tools-ryxphZbI.mjs.map +1 -0
  304. package/dist/Translate-B0YKKANS.d.mts +37 -0
  305. package/dist/Translate-gzWPq0Ia.mjs +308 -0
  306. package/dist/Translate-gzWPq0Ia.mjs.map +1 -0
  307. package/dist/Translation-DC9rLm2y.mjs +1535 -0
  308. package/dist/Translation-DC9rLm2y.mjs.map +1 -0
  309. package/dist/Translation-K4L9XBqX.d.mts +103 -0
  310. package/dist/TriG-BkqtqZ6Y.mjs +125 -0
  311. package/dist/TriG-BkqtqZ6Y.mjs.map +1 -0
  312. package/dist/TriG-xDjdDatp.d.mts +86 -0
  313. package/dist/Turtle-Bv1_bisW.d.mts +85 -0
  314. package/dist/Turtle-CZVUOtwl.mjs +133 -0
  315. package/dist/Turtle-CZVUOtwl.mjs.map +1 -0
  316. package/dist/ValidationReport-DBdJshW5.mjs +285 -0
  317. package/dist/ValidationReport-DBdJshW5.mjs.map +1 -0
  318. package/dist/ValidationReport-Dx3WxY0h.d.mts +192 -0
  319. package/dist/Validator-227ff9Rn.d.mts +179 -0
  320. package/dist/Validator-BzXMKDeJ.mjs +1162 -0
  321. package/dist/Validator-BzXMKDeJ.mjs.map +1 -0
  322. package/dist/Validator-Dl8cih5V.d.mts +207 -0
  323. package/dist/Validator-DmUfMbpL.mjs +568 -0
  324. package/dist/Validator-DmUfMbpL.mjs.map +1 -0
  325. package/dist/Vocab-DceKywpq.mjs +168 -0
  326. package/dist/Vocab-DceKywpq.mjs.map +1 -0
  327. package/dist/Vocab-Df-L-IwZ.d.mts +46 -0
  328. package/dist/Vocab-Do56UgBX.d.mts +81 -0
  329. package/dist/Vocab-TfpWG1Ne.mjs +118 -0
  330. package/dist/Vocab-TfpWG1Ne.mjs.map +1 -0
  331. package/dist/Vocab.d.mts +2 -0
  332. package/dist/Vocab.mjs +1 -0
  333. package/dist/Vocabulary-C6-GPOy4.d.mts +22 -0
  334. package/dist/Vocabulary-CnQl-_Z4.mjs +179 -0
  335. package/dist/Vocabulary-CnQl-_Z4.mjs.map +1 -0
  336. package/dist/Xml-B7iihYCS.mjs +976 -0
  337. package/dist/Xml-B7iihYCS.mjs.map +1 -0
  338. package/dist/Xml-CmfHS7SW.d.mts +267 -0
  339. package/dist/Xmp-D7CKA7MZ.d.mts +111 -0
  340. package/dist/Xmp-DCGN9pOD.mjs +307 -0
  341. package/dist/Xmp-DCGN9pOD.mjs.map +1 -0
  342. package/dist/XmpBasic-CP38jpR_.mjs +73 -0
  343. package/dist/XmpBasic-CP38jpR_.mjs.map +1 -0
  344. package/dist/XmpBasic-Cmbe53rQ.d.mts +64 -0
  345. package/dist/XmpMM-BfL_TgJF.mjs +73 -0
  346. package/dist/XmpMM-BfL_TgJF.mjs.map +1 -0
  347. package/dist/XmpMM-Dqm3IX8p.d.mts +63 -0
  348. package/dist/XmpRights-BKPtoI5L.mjs +73 -0
  349. package/dist/XmpRights-BKPtoI5L.mjs.map +1 -0
  350. package/dist/XmpRights-CaALZQz2.d.mts +63 -0
  351. package/dist/Xsd-Cdgx5zRB.mjs +405 -0
  352. package/dist/Xsd-Cdgx5zRB.mjs.map +1 -0
  353. package/dist/Xsd-D2elNhSm.d.mts +187 -0
  354. package/dist/Xsd.d.mts +2 -0
  355. package/dist/Xsd.mjs +1 -0
  356. package/dist/accessors-CEjaojuQ.mjs +28 -0
  357. package/dist/accessors-CEjaojuQ.mjs.map +1 -0
  358. package/dist/codec-Lb2T96rv.d.mts +20 -0
  359. package/dist/codec-QNo7IdJF.mjs +389 -0
  360. package/dist/codec-QNo7IdJF.mjs.map +1 -0
  361. package/dist/csvw/Csv2Json.d.mts +2 -0
  362. package/dist/csvw/Csv2Json.mjs +1 -0
  363. package/dist/csvw/Csv2Rdf.d.mts +2 -0
  364. package/dist/csvw/Csv2Rdf.mjs +1 -0
  365. package/dist/csvw/Datatype.d.mts +2 -0
  366. package/dist/csvw/Datatype.mjs +1 -0
  367. package/dist/csvw/Metadata.d.mts +2 -0
  368. package/dist/csvw/Metadata.mjs +1 -0
  369. package/dist/csvw/Processor.d.mts +2 -0
  370. package/dist/csvw/Processor.mjs +1 -0
  371. package/dist/csvw/Report.d.mts +2 -0
  372. package/dist/csvw/Report.mjs +1 -0
  373. package/dist/csvw/Table.d.mts +2 -0
  374. package/dist/csvw/Table.mjs +1 -0
  375. package/dist/csvw/index.d.mts +8 -0
  376. package/dist/csvw/index.mjs +8 -0
  377. package/dist/index-Cms2TYfC.d.mts +16 -0
  378. package/dist/index-Ct8xFmRs.d.mts +7 -0
  379. package/dist/index-D4QFwOjm.d.mts +28 -0
  380. package/dist/index.d.mts +18 -0
  381. package/dist/index.mjs +17 -0
  382. package/dist/jsonld/DocumentLoader.d.mts +2 -0
  383. package/dist/jsonld/DocumentLoader.mjs +1 -0
  384. package/dist/jsonld/JsonLd.d.mts +2 -0
  385. package/dist/jsonld/JsonLd.mjs +1 -0
  386. package/dist/jsonld/JsonLdError.d.mts +2 -0
  387. package/dist/jsonld/JsonLdError.mjs +1 -0
  388. package/dist/jsonld/index.d.mts +4 -0
  389. package/dist/jsonld/index.mjs +4 -0
  390. package/dist/lists-D-OpQ0Ir.mjs +77 -0
  391. package/dist/lists-D-OpQ0Ir.mjs.map +1 -0
  392. package/dist/loop-D5-gNx9K.mjs +21 -0
  393. package/dist/loop-D5-gNx9K.mjs.map +1 -0
  394. package/dist/loop-DZ2hXlr_.mjs +21 -0
  395. package/dist/loop-DZ2hXlr_.mjs.map +1 -0
  396. package/dist/n3/Isomorphism.d.mts +2 -0
  397. package/dist/n3/Isomorphism.mjs +1 -0
  398. package/dist/n3/Mapping.d.mts +2 -0
  399. package/dist/n3/Mapping.mjs +1 -0
  400. package/dist/n3/Model.d.mts +2 -0
  401. package/dist/n3/Model.mjs +1 -0
  402. package/dist/n3/N3.d.mts +2 -0
  403. package/dist/n3/N3.mjs +1 -0
  404. package/dist/n3/Reasoner.d.mts +2 -0
  405. package/dist/n3/Reasoner.mjs +2 -0
  406. package/dist/n3/Vocab.d.mts +2 -0
  407. package/dist/n3/Vocab.mjs +1 -0
  408. package/dist/n3/index.d.mts +7 -0
  409. package/dist/n3/index.mjs +7 -0
  410. package/dist/ntriples/Grammar.d.mts +2 -0
  411. package/dist/ntriples/Grammar.mjs +1 -0
  412. package/dist/ntriples/Lexical.d.mts +2 -0
  413. package/dist/ntriples/Lexical.mjs +1 -0
  414. package/dist/ntriples/NQuads.d.mts +2 -0
  415. package/dist/ntriples/NQuads.mjs +1 -0
  416. package/dist/ntriples/NTriples.d.mts +2 -0
  417. package/dist/ntriples/NTriples.mjs +1 -0
  418. package/dist/ntriples/index.d.mts +5 -0
  419. package/dist/ntriples/index.mjs +5 -0
  420. package/dist/rdfjson/RdfJson.d.mts +2 -0
  421. package/dist/rdfjson/RdfJson.mjs +1 -0
  422. package/dist/rdfjson/index.d.mts +2 -0
  423. package/dist/rdfjson/index.mjs +1 -0
  424. package/dist/rdfxml/RdfXml.d.mts +2 -0
  425. package/dist/rdfxml/RdfXml.mjs +1 -0
  426. package/dist/rdfxml/Xml.d.mts +2 -0
  427. package/dist/rdfxml/Xml.mjs +1 -0
  428. package/dist/rdfxml/index.d.mts +3 -0
  429. package/dist/rdfxml/index.mjs +3 -0
  430. package/dist/rolldown-runtime-D8jQpDG7.mjs +12 -0
  431. package/dist/serialize-96KBvKaf.mjs +1463 -0
  432. package/dist/serialize-96KBvKaf.mjs.map +1 -0
  433. package/dist/serialize-DsoXdM6n.d.mts +37 -0
  434. package/dist/shacl/Message.d.mts +2 -0
  435. package/dist/shacl/Message.mjs +1 -0
  436. package/dist/shacl/Path.d.mts +2 -0
  437. package/dist/shacl/Path.mjs +1 -0
  438. package/dist/shacl/Shapes.d.mts +2 -0
  439. package/dist/shacl/Shapes.mjs +1 -0
  440. package/dist/shacl/Sparql.d.mts +2 -0
  441. package/dist/shacl/Sparql.mjs +1 -0
  442. package/dist/shacl/ValidationReport.d.mts +2 -0
  443. package/dist/shacl/ValidationReport.mjs +1 -0
  444. package/dist/shacl/Validator.d.mts +2 -0
  445. package/dist/shacl/Validator.mjs +1 -0
  446. package/dist/shacl/Vocabulary.d.mts +2 -0
  447. package/dist/shacl/Vocabulary.mjs +1 -0
  448. package/dist/shacl/index.d.mts +9 -0
  449. package/dist/shacl/index.mjs +8 -0
  450. package/dist/shex/SemAct.d.mts +2 -0
  451. package/dist/shex/SemAct.mjs +1 -0
  452. package/dist/shex/ShExC.d.mts +2 -0
  453. package/dist/shex/ShExC.mjs +1 -0
  454. package/dist/shex/ShExError.d.mts +2 -0
  455. package/dist/shex/ShExError.mjs +1 -0
  456. package/dist/shex/ShExJ.d.mts +2 -0
  457. package/dist/shex/ShExJ.mjs +2 -0
  458. package/dist/shex/ShExR.d.mts +2 -0
  459. package/dist/shex/ShExR.mjs +1 -0
  460. package/dist/shex/ShapeMap.d.mts +2 -0
  461. package/dist/shex/ShapeMap.mjs +1 -0
  462. package/dist/shex/Structure.d.mts +2 -0
  463. package/dist/shex/Structure.mjs +2 -0
  464. package/dist/shex/Validator.d.mts +2 -0
  465. package/dist/shex/Validator.mjs +4 -0
  466. package/dist/shex/index.d.mts +9 -0
  467. package/dist/shex/index.mjs +9 -0
  468. package/dist/sparql/Algebra.d.mts +2 -0
  469. package/dist/sparql/Algebra.mjs +1 -0
  470. package/dist/sparql/Ast.d.mts +2 -0
  471. package/dist/sparql/Ast.mjs +1 -0
  472. package/dist/sparql/Bindings.d.mts +2 -0
  473. package/dist/sparql/Bindings.mjs +1 -0
  474. package/dist/sparql/ClientErrors.d.mts +2 -0
  475. package/dist/sparql/ClientErrors.mjs +1 -0
  476. package/dist/sparql/ClientFormats.d.mts +2 -0
  477. package/dist/sparql/ClientFormats.mjs +1 -0
  478. package/dist/sparql/Engine.d.mts +2 -0
  479. package/dist/sparql/Engine.mjs +1 -0
  480. package/dist/sparql/Errors.d.mts +2 -0
  481. package/dist/sparql/Errors.mjs +1 -0
  482. package/dist/sparql/Expression.d.mts +2 -0
  483. package/dist/sparql/Expression.mjs +1 -0
  484. package/dist/sparql/Federation.d.mts +2 -0
  485. package/dist/sparql/Federation.mjs +1 -0
  486. package/dist/sparql/Functions.d.mts +2 -0
  487. package/dist/sparql/Functions.mjs +1 -0
  488. package/dist/sparql/Generator.d.mts +2 -0
  489. package/dist/sparql/Generator.mjs +1 -0
  490. package/dist/sparql/GraphStore.d.mts +2 -0
  491. package/dist/sparql/GraphStore.mjs +1 -0
  492. package/dist/sparql/Optimizer.d.mts +2 -0
  493. package/dist/sparql/Optimizer.mjs +1 -0
  494. package/dist/sparql/Options.d.mts +2 -0
  495. package/dist/sparql/Options.mjs +1 -0
  496. package/dist/sparql/Parser.d.mts +2 -0
  497. package/dist/sparql/Parser.mjs +1 -0
  498. package/dist/sparql/Protocol.d.mts +2 -0
  499. package/dist/sparql/Protocol.mjs +1 -0
  500. package/dist/sparql/ProtocolErrors.d.mts +2 -0
  501. package/dist/sparql/ProtocolErrors.mjs +1 -0
  502. package/dist/sparql/QueryBuilder.d.mts +2 -0
  503. package/dist/sparql/QueryBuilder.mjs +1 -0
  504. package/dist/sparql/Results.d.mts +2 -0
  505. package/dist/sparql/Results.mjs +1 -0
  506. package/dist/sparql/ResultsStream.d.mts +2 -0
  507. package/dist/sparql/ResultsStream.mjs +1 -0
  508. package/dist/sparql/ServerFormats.d.mts +2 -0
  509. package/dist/sparql/ServerFormats.mjs +1 -0
  510. package/dist/sparql/ServiceDescription.d.mts +2 -0
  511. package/dist/sparql/ServiceDescription.mjs +1 -0
  512. package/dist/sparql/SparqlClient.d.mts +2 -0
  513. package/dist/sparql/SparqlClient.mjs +1 -0
  514. package/dist/sparql/SparqlServer.d.mts +2 -0
  515. package/dist/sparql/SparqlServer.mjs +1 -0
  516. package/dist/sparql/Store.d.mts +2 -0
  517. package/dist/sparql/Store.mjs +1 -0
  518. package/dist/sparql/TermSchema.d.mts +3 -0
  519. package/dist/sparql/TermSchema.mjs +2 -0
  520. package/dist/sparql/Testing.d.mts +2 -0
  521. package/dist/sparql/Testing.mjs +1 -0
  522. package/dist/sparql/Translate.d.mts +2 -0
  523. package/dist/sparql/Translate.mjs +1 -0
  524. package/dist/sparql/ai/Mcp.d.mts +2 -0
  525. package/dist/sparql/ai/Mcp.mjs +1 -0
  526. package/dist/sparql/ai/Tools.d.mts +2 -0
  527. package/dist/sparql/ai/Tools.mjs +1 -0
  528. package/dist/sparql/ai/index.d.mts +3 -0
  529. package/dist/sparql/ai/index.mjs +3 -0
  530. package/dist/sparql/index.d.mts +30 -0
  531. package/dist/sparql/index.mjs +29 -0
  532. package/dist/sparql/shacl/Evaluator.d.mts +2 -0
  533. package/dist/sparql/shacl/Evaluator.mjs +1 -0
  534. package/dist/sparql/shacl/Query.d.mts +2 -0
  535. package/dist/sparql/shacl/Query.mjs +1 -0
  536. package/dist/sparql/shacl/index.d.mts +3 -0
  537. package/dist/sparql/shacl/index.mjs +3 -0
  538. package/dist/sparql/sql/Dialect.d.mts +2 -0
  539. package/dist/sparql/sql/Dialect.mjs +1 -0
  540. package/dist/sparql/sql/SqlStore.d.mts +2 -0
  541. package/dist/sparql/sql/SqlStore.mjs +1 -0
  542. package/dist/sparql/sql/Translation.d.mts +2 -0
  543. package/dist/sparql/sql/Translation.mjs +1 -0
  544. package/dist/sparql/sql/index.d.mts +4 -0
  545. package/dist/sparql/sql/index.mjs +4 -0
  546. package/dist/stringMap-D5YIpYtR.mjs +38 -0
  547. package/dist/stringMap-D5YIpYtR.mjs.map +1 -0
  548. package/dist/tokens-C6BzeodQ.mjs +24 -0
  549. package/dist/tokens-C6BzeodQ.mjs.map +1 -0
  550. package/dist/turtle/Grammar.d.mts +3 -0
  551. package/dist/turtle/Grammar.mjs +3 -0
  552. package/dist/turtle/Manifest.d.mts +2 -0
  553. package/dist/turtle/Manifest.mjs +1 -0
  554. package/dist/turtle/TriG.d.mts +2 -0
  555. package/dist/turtle/TriG.mjs +1 -0
  556. package/dist/turtle/Turtle.d.mts +2 -0
  557. package/dist/turtle/Turtle.mjs +1 -0
  558. package/dist/turtle/index.d.mts +5 -0
  559. package/dist/turtle/index.mjs +5 -0
  560. package/dist/xmp/DublinCore.d.mts +2 -0
  561. package/dist/xmp/DublinCore.mjs +1 -0
  562. package/dist/xmp/Exif.d.mts +2 -0
  563. package/dist/xmp/Exif.mjs +1 -0
  564. package/dist/xmp/Extract.d.mts +2 -0
  565. package/dist/xmp/Extract.mjs +1 -0
  566. package/dist/xmp/Metadata.d.mts +2 -0
  567. package/dist/xmp/Metadata.mjs +1 -0
  568. package/dist/xmp/Namespaces.d.mts +2 -0
  569. package/dist/xmp/Namespaces.mjs +1 -0
  570. package/dist/xmp/Packet.d.mts +2 -0
  571. package/dist/xmp/Packet.mjs +1 -0
  572. package/dist/xmp/Pdf.d.mts +2 -0
  573. package/dist/xmp/Pdf.mjs +1 -0
  574. package/dist/xmp/PdfA.d.mts +2 -0
  575. package/dist/xmp/PdfA.mjs +1 -0
  576. package/dist/xmp/Photoshop.d.mts +2 -0
  577. package/dist/xmp/Photoshop.mjs +1 -0
  578. package/dist/xmp/Tiff.d.mts +2 -0
  579. package/dist/xmp/Tiff.mjs +1 -0
  580. package/dist/xmp/Xmp.d.mts +2 -0
  581. package/dist/xmp/Xmp.mjs +3 -0
  582. package/dist/xmp/XmpBasic.d.mts +2 -0
  583. package/dist/xmp/XmpBasic.mjs +1 -0
  584. package/dist/xmp/XmpMM.d.mts +2 -0
  585. package/dist/xmp/XmpMM.mjs +1 -0
  586. package/dist/xmp/XmpRights.d.mts +2 -0
  587. package/dist/xmp/XmpRights.mjs +1 -0
  588. package/dist/xmp/index.d.mts +15 -0
  589. package/dist/xmp/index.mjs +15 -0
  590. package/package.json +195 -3
  591. package/src/Dataset.ts +1085 -0
  592. package/src/Iri.ts +322 -0
  593. package/src/Isomorphism.ts +319 -0
  594. package/src/LanguageTag.ts +98 -0
  595. package/src/Namespace.ts +100 -0
  596. package/src/PrefixMap.ts +117 -0
  597. package/src/RdfJs.ts +146 -0
  598. package/src/Rdfs.ts +241 -0
  599. package/src/Reification.ts +103 -0
  600. package/src/Resource.ts +873 -0
  601. package/src/Serialization.ts +775 -0
  602. package/src/Term.ts +1300 -0
  603. package/src/TermCodec.ts +505 -0
  604. package/src/TermJson.ts +313 -0
  605. package/src/Vocab.ts +161 -0
  606. package/src/Xsd.ts +573 -0
  607. package/src/csvw/Csv2Json.ts +265 -0
  608. package/src/csvw/Csv2Rdf.ts +268 -0
  609. package/src/csvw/Datatype.ts +589 -0
  610. package/src/csvw/Metadata.ts +1523 -0
  611. package/src/csvw/Processor.ts +276 -0
  612. package/src/csvw/Report.ts +135 -0
  613. package/src/csvw/Table.ts +759 -0
  614. package/src/csvw/index.ts +22 -0
  615. package/src/csvw/internal/dateFormat.ts +202 -0
  616. package/src/csvw/internal/json.ts +104 -0
  617. package/src/csvw/internal/numberFormat.ts +369 -0
  618. package/src/csvw/internal/object.ts +23 -0
  619. package/src/csvw/internal/uriTemplate.ts +130 -0
  620. package/src/csvw/internal/url.ts +93 -0
  621. package/src/csvw/internal/vocab.ts +282 -0
  622. package/src/index.ts +40 -0
  623. package/src/internal/arbitrary.ts +148 -0
  624. package/src/internal/loop.ts +24 -0
  625. package/src/internal/pending.ts +20 -0
  626. package/src/internal/textDecoder.ts +183 -0
  627. package/src/jsonld/DocumentLoader.ts +512 -0
  628. package/src/jsonld/JsonLd.ts +847 -0
  629. package/src/jsonld/JsonLdError.ts +105 -0
  630. package/src/jsonld/index.ts +13 -0
  631. package/src/jsonld/internal/compact.ts +852 -0
  632. package/src/jsonld/internal/context.ts +781 -0
  633. package/src/jsonld/internal/expand.ts +614 -0
  634. package/src/jsonld/internal/flatten.ts +243 -0
  635. package/src/jsonld/internal/frame.ts +559 -0
  636. package/src/jsonld/internal/iri.ts +52 -0
  637. package/src/jsonld/internal/json.ts +19 -0
  638. package/src/jsonld/internal/linkHeader.ts +60 -0
  639. package/src/jsonld/internal/rdf.ts +481 -0
  640. package/src/jsonld/internal/util.ts +367 -0
  641. package/src/n3/Isomorphism.ts +476 -0
  642. package/src/n3/Mapping.ts +332 -0
  643. package/src/n3/Model.ts +696 -0
  644. package/src/n3/N3.ts +237 -0
  645. package/src/n3/Reasoner.ts +568 -0
  646. package/src/n3/Vocab.ts +111 -0
  647. package/src/n3/index.ts +21 -0
  648. package/src/n3/internal/builtins.ts +668 -0
  649. package/src/n3/internal/guards.ts +23 -0
  650. package/src/n3/internal/lists.ts +106 -0
  651. package/src/n3/internal/loop.ts +28 -0
  652. package/src/n3/internal/parser.ts +1032 -0
  653. package/src/n3/internal/writer.ts +344 -0
  654. package/src/ntriples/Grammar.ts +317 -0
  655. package/src/ntriples/Lexical.ts +321 -0
  656. package/src/ntriples/NQuads.ts +140 -0
  657. package/src/ntriples/NTriples.ts +143 -0
  658. package/src/ntriples/index.ts +14 -0
  659. package/src/ntriples/internal/codec.ts +229 -0
  660. package/src/ntriples/internal/lineParser.ts +326 -0
  661. package/src/ntriples/internal/loop.ts +14 -0
  662. package/src/rdfjson/RdfJson.ts +806 -0
  663. package/src/rdfjson/index.ts +9 -0
  664. package/src/rdfjson/internal/json.ts +19 -0
  665. package/src/rdfxml/RdfXml.ts +1408 -0
  666. package/src/rdfxml/Xml.ts +419 -0
  667. package/src/rdfxml/index.ts +11 -0
  668. package/src/rdfxml/internal/chars.ts +73 -0
  669. package/src/rdfxml/internal/loop.ts +24 -0
  670. package/src/rdfxml/internal/parser.ts +1265 -0
  671. package/src/shacl/Message.ts +102 -0
  672. package/src/shacl/Path.ts +483 -0
  673. package/src/shacl/Shapes.ts +913 -0
  674. package/src/shacl/Sparql.ts +128 -0
  675. package/src/shacl/ValidationReport.ts +438 -0
  676. package/src/shacl/Validator.ts +1156 -0
  677. package/src/shacl/Vocabulary.ts +180 -0
  678. package/src/shacl/index.ts +22 -0
  679. package/src/shacl/internal/compare.ts +128 -0
  680. package/src/shacl/internal/regex.ts +56 -0
  681. package/src/shex/SemAct.ts +197 -0
  682. package/src/shex/ShExC.ts +415 -0
  683. package/src/shex/ShExError.ts +71 -0
  684. package/src/shex/ShExJ.ts +893 -0
  685. package/src/shex/ShExR.ts +640 -0
  686. package/src/shex/ShapeMap.ts +385 -0
  687. package/src/shex/Structure.ts +467 -0
  688. package/src/shex/Validator.ts +395 -0
  689. package/src/shex/index.ts +24 -0
  690. package/src/shex/internal/engine.ts +682 -0
  691. package/src/shex/internal/iterate.ts +14 -0
  692. package/src/shex/internal/json.ts +12 -0
  693. package/src/shex/internal/lexer.ts +56 -0
  694. package/src/shex/internal/nodeConstraint.ts +368 -0
  695. package/src/shex/internal/shexcLexer.ts +387 -0
  696. package/src/shex/internal/shexcParser.ts +1312 -0
  697. package/src/shex/internal/tokens.ts +41 -0
  698. package/src/shex/internal/xpathRegex.ts +290 -0
  699. package/src/sparql/Algebra.ts +914 -0
  700. package/src/sparql/Ast.ts +1344 -0
  701. package/src/sparql/Bindings.ts +272 -0
  702. package/src/sparql/ClientErrors.ts +156 -0
  703. package/src/sparql/ClientFormats.ts +70 -0
  704. package/src/sparql/Engine.ts +699 -0
  705. package/src/sparql/Errors.ts +30 -0
  706. package/src/sparql/Expression.ts +360 -0
  707. package/src/sparql/Federation.ts +187 -0
  708. package/src/sparql/Functions.ts +689 -0
  709. package/src/sparql/Generator.ts +426 -0
  710. package/src/sparql/GraphStore.ts +341 -0
  711. package/src/sparql/Optimizer.ts +230 -0
  712. package/src/sparql/Options.ts +191 -0
  713. package/src/sparql/Parser.ts +173 -0
  714. package/src/sparql/Protocol.ts +342 -0
  715. package/src/sparql/ProtocolErrors.ts +113 -0
  716. package/src/sparql/QueryBuilder.ts +953 -0
  717. package/src/sparql/Results.ts +844 -0
  718. package/src/sparql/ResultsStream.ts +771 -0
  719. package/src/sparql/ServerFormats.ts +75 -0
  720. package/src/sparql/ServiceDescription.ts +130 -0
  721. package/src/sparql/SparqlClient.ts +947 -0
  722. package/src/sparql/SparqlServer.ts +528 -0
  723. package/src/sparql/Store.ts +311 -0
  724. package/src/sparql/TermSchema.ts +20 -0
  725. package/src/sparql/Testing.ts +114 -0
  726. package/src/sparql/Translate.ts +407 -0
  727. package/src/sparql/ai/Mcp.ts +43 -0
  728. package/src/sparql/ai/Tools.ts +481 -0
  729. package/src/sparql/ai/index.ts +11 -0
  730. package/src/sparql/index.ts +64 -0
  731. package/src/sparql/internal/evaluator.ts +947 -0
  732. package/src/sparql/internal/hash.ts +418 -0
  733. package/src/sparql/internal/json.ts +12 -0
  734. package/src/sparql/internal/lexer.ts +488 -0
  735. package/src/sparql/internal/loop.ts +24 -0
  736. package/src/sparql/internal/parser.ts +2215 -0
  737. package/src/sparql/internal/prefetch.ts +46 -0
  738. package/src/sparql/internal/stringMap.ts +39 -0
  739. package/src/sparql/internal/textResults.ts +226 -0
  740. package/src/sparql/internal/values.ts +550 -0
  741. package/src/sparql/shacl/Evaluator.ts +478 -0
  742. package/src/sparql/shacl/Query.ts +574 -0
  743. package/src/sparql/shacl/index.ts +12 -0
  744. package/src/sparql/sql/Dialect.ts +246 -0
  745. package/src/sparql/sql/SqlStore.ts +1080 -0
  746. package/src/sparql/sql/Translation.ts +1898 -0
  747. package/src/sparql/sql/index.ts +17 -0
  748. package/src/sparql/sql/internal/encoding.ts +313 -0
  749. package/src/turtle/Grammar.ts +286 -0
  750. package/src/turtle/Manifest.ts +215 -0
  751. package/src/turtle/TriG.ts +158 -0
  752. package/src/turtle/Turtle.ts +166 -0
  753. package/src/turtle/index.ts +14 -0
  754. package/src/turtle/internal/loop.ts +23 -0
  755. package/src/turtle/internal/parse.ts +112 -0
  756. package/src/turtle/internal/parser.ts +1303 -0
  757. package/src/turtle/internal/serialize.ts +79 -0
  758. package/src/turtle/internal/streamWriter.ts +128 -0
  759. package/src/turtle/internal/writer.ts +898 -0
  760. package/src/xmp/DublinCore.ts +147 -0
  761. package/src/xmp/Exif.ts +109 -0
  762. package/src/xmp/Extract.ts +351 -0
  763. package/src/xmp/Metadata.ts +703 -0
  764. package/src/xmp/Namespaces.ts +228 -0
  765. package/src/xmp/Packet.ts +297 -0
  766. package/src/xmp/Pdf.ts +99 -0
  767. package/src/xmp/PdfA.ts +280 -0
  768. package/src/xmp/Photoshop.ts +275 -0
  769. package/src/xmp/Tiff.ts +196 -0
  770. package/src/xmp/Xmp.ts +430 -0
  771. package/src/xmp/XmpBasic.ts +90 -0
  772. package/src/xmp/XmpMM.ts +82 -0
  773. package/src/xmp/XmpRights.ts +83 -0
  774. package/src/xmp/index.ts +36 -0
  775. package/src/xmp/internal/accessors.ts +72 -0
  776. package/src/xmp/internal/xml.ts +63 -0
@@ -0,0 +1,947 @@
1
+ /**
2
+ * A strongly-typed SPARQL 1.1 Protocol and Graph Store HTTP Protocol client
3
+ * built on the `effect/http` `HttpClient`.
4
+ *
5
+ * Queries can be strings, `Ast` values or `QueryBuilder` builders; the typed
6
+ * rows of a `QueryBuilder.select(…)` flow through to `select`. `SELECT`
7
+ * results are parsed incrementally (JSON, XML, TSV) and streamed;
8
+ * `CONSTRUCT` / `DESCRIBE` results are parsed with the `Serialization.Formats`
9
+ * parser for the response's media type (N-Triples is preferred and parsed
10
+ * incrementally).
11
+ *
12
+ * @since 0.1.0
13
+ */
14
+ import * as Arr from 'effect/Array';
15
+ import * as Match from 'effect/Match';
16
+ import * as Context from 'effect/Context';
17
+ import * as Duration from 'effect/Duration';
18
+ import * as Effect from 'effect/Effect';
19
+ import * as Layer from 'effect/Layer';
20
+ import * as Option from 'effect/Option';
21
+ import type * as Schedule from 'effect/Schedule';
22
+ import * as Schema from 'effect/Schema';
23
+ import * as Stream from 'effect/Stream';
24
+ import * as HttpClient from 'effect/http/HttpClient';
25
+ import type * as HttpClientError from 'effect/http/HttpClientError';
26
+ import * as HttpClientRequest from 'effect/http/HttpClientRequest';
27
+ import type * as HttpClientResponse from 'effect/http/HttpClientResponse';
28
+ import * as Dataset from '../Dataset.ts';
29
+ import * as Serialization from '../Serialization.ts';
30
+ import * as Term from '../Term.ts';
31
+ import type * as Ast from './Ast.ts';
32
+ import * as B from './Bindings.ts';
33
+ import * as Generator from './Generator.ts';
34
+ import * as QueryBuilder from './QueryBuilder.ts';
35
+ import type * as Results from './Results.ts';
36
+ import * as ClientErrors from './ClientErrors.ts';
37
+ import * as ClientFormats from './ClientFormats.ts';
38
+ import * as ResultsStream from './ResultsStream.ts';
39
+ import * as Predicate from 'effect/Predicate';
40
+ import * as Result from 'effect/Result';
41
+
42
+ // -----------------------------------------------------------------------------
43
+ // Models
44
+ // -----------------------------------------------------------------------------
45
+
46
+ /**
47
+ * How queries are sent: `get` (URL query string), `post`
48
+ * (`application/sparql-query` body) or `auto` (`GET` unless the URL would
49
+ * exceed `maxGetLength`).
50
+ *
51
+ * @since 0.1.0
52
+ * @category models
53
+ */
54
+ export type Method = 'auto' | 'get' | 'post';
55
+
56
+ /**
57
+ * Client configuration.
58
+ *
59
+ * @since 0.1.0
60
+ * @category models
61
+ */
62
+ export interface Config {
63
+ /** The SPARQL query endpoint URL. */
64
+ readonly endpoint: string;
65
+ /** The SPARQL update endpoint URL (default: `endpoint`). */
66
+ readonly updateEndpoint?: string | undefined;
67
+ /** The Graph Store Protocol endpoint URL (required for graph operations). */
68
+ readonly graphStoreEndpoint?: string | undefined;
69
+ /** Headers sent with every request (e.g. `authorization`). */
70
+ readonly headers?: Readonly<Record<string, string>> | undefined;
71
+ /** How queries are sent (default `auto`). */
72
+ readonly method?: Method | undefined;
73
+ /** The longest URL sent with `GET` in `auto` mode (default 2048). */
74
+ readonly maxGetLength?: number | undefined;
75
+ /** Time limit for receiving a response (headers). */
76
+ readonly timeout?: Duration.Input | undefined;
77
+ /**
78
+ * Retry policy for transient failures (transport errors, timeouts and the
79
+ * statuses 408, 429, 502, 503 and 504; see `retryWhile`).
80
+ */
81
+ readonly retry?: Schedule.Schedule<unknown, ClientErrors.SparqlClientError> | undefined;
82
+ /** Which errors are retried (default `ClientErrors.isTransient`). */
83
+ readonly retryWhile?: ((error: ClientErrors.SparqlClientError) => boolean) | undefined;
84
+ /** The `Accept` header of `SELECT` / `ASK` requests. */
85
+ readonly resultsAccept?: string | undefined;
86
+ /** The media type used to upload graphs (default `application/n-triples`). */
87
+ readonly graphMediaType?: string | undefined;
88
+ }
89
+
90
+ /**
91
+ * A query: SPARQL text, a parsed query or a `QueryBuilder` builder.
92
+ *
93
+ * @since 0.1.0
94
+ * @category models
95
+ */
96
+ export type QueryInput =
97
+ | string
98
+ | Ast.Query
99
+ | QueryBuilder.Builder<'Select', any, any>
100
+ | QueryBuilder.Builder<'Ask', any, any>
101
+ | QueryBuilder.Builder<'Construct', any, any>
102
+ | QueryBuilder.Builder<'Describe', any, any>;
103
+
104
+ /**
105
+ * An update: SPARQL text or a parsed update.
106
+ *
107
+ * @since 0.1.0
108
+ * @category models
109
+ */
110
+ export type UpdateInput = string | Ast.Update;
111
+
112
+ /**
113
+ * A graph IRI.
114
+ *
115
+ * @since 0.1.0
116
+ * @category models
117
+ */
118
+ export type GraphIri = string | Term.NamedNode;
119
+
120
+ /**
121
+ * The graph of a Graph Store operation: `'default'` or a named graph.
122
+ *
123
+ * @since 0.1.0
124
+ * @category models
125
+ */
126
+ export type GraphTarget = 'default' | Term.NamedNode;
127
+
128
+ /**
129
+ * Per-request options.
130
+ *
131
+ * @since 0.1.0
132
+ * @category models
133
+ */
134
+ export interface RequestOptions {
135
+ /** Extra headers. */
136
+ readonly headers?: Readonly<Record<string, string>> | undefined;
137
+ /** Overrides the configured timeout. */
138
+ readonly timeout?: Duration.Input | undefined;
139
+ }
140
+
141
+ /**
142
+ * Options of query requests.
143
+ *
144
+ * @since 0.1.0
145
+ * @category models
146
+ */
147
+ export interface QueryOptions extends RequestOptions {
148
+ /** `default-graph-uri` parameters. */
149
+ readonly defaultGraphs?: ReadonlyArray<GraphIri> | undefined;
150
+ /** `named-graph-uri` parameters. */
151
+ readonly namedGraphs?: ReadonlyArray<GraphIri> | undefined;
152
+ /** Overrides the configured method. */
153
+ readonly method?: Method | undefined;
154
+ }
155
+
156
+ /**
157
+ * Options of update requests.
158
+ *
159
+ * @since 0.1.0
160
+ * @category models
161
+ */
162
+ export interface UpdateOptions extends RequestOptions {
163
+ /** `using-graph-uri` parameters. */
164
+ readonly usingGraphs?: ReadonlyArray<GraphIri> | undefined;
165
+ /** `using-named-graph-uri` parameters. */
166
+ readonly usingNamedGraphs?: ReadonlyArray<GraphIri> | undefined;
167
+ }
168
+
169
+ /**
170
+ * Options of Graph Store uploads.
171
+ *
172
+ * @since 0.1.0
173
+ * @category models
174
+ */
175
+ export interface UploadOptions extends RequestOptions {
176
+ /** The media type to upload with (default: the configured one). */
177
+ readonly mediaType?: string | undefined;
178
+ }
179
+
180
+ /**
181
+ * An untyped `SELECT` row.
182
+ *
183
+ * @since 0.1.0
184
+ * @category models
185
+ */
186
+ export type Row = Readonly<Record<string, Term.GroundTerm>>;
187
+
188
+ /**
189
+ * The materialised result of any query.
190
+ *
191
+ * @since 0.1.0
192
+ * @category models
193
+ */
194
+ export type QueryResult =
195
+ | Results.ResultSet
196
+ | Results.BooleanResult
197
+ | { readonly _tag: 'Graph'; readonly dataset: Dataset.Dataset };
198
+
199
+ /**
200
+ * The client service.
201
+ *
202
+ * @since 0.1.0
203
+ * @category models
204
+ */
205
+ export interface SparqlClientShape {
206
+ readonly config: Config;
207
+ /** Streams the rows of a `SELECT` query (typed for builders). */
208
+ readonly select: {
209
+ <R extends string, O extends string>(
210
+ query: QueryBuilder.Builder<'Select', R, O>,
211
+ options?: QueryOptions,
212
+ ): Stream.Stream<QueryBuilder.Row<R, O>, ClientErrors.SparqlClientError>;
213
+ (
214
+ query: string | Ast.Query,
215
+ options?: QueryOptions,
216
+ ): Stream.Stream<Row, ClientErrors.SparqlClientError>;
217
+ };
218
+ /** Streams the solutions of a `SELECT` query. */
219
+ readonly selectBindings: (
220
+ query: QueryInput,
221
+ options?: QueryOptions,
222
+ ) => Stream.Stream<B.Bindings, ClientErrors.SparqlClientError>;
223
+ /** Streams the raw events (variables, solutions, boolean) of a results document. */
224
+ readonly results: (
225
+ query: QueryInput,
226
+ options?: QueryOptions,
227
+ ) => Stream.Stream<ResultsStream.ResultEvent, ClientErrors.SparqlClientError>;
228
+ /** Collects a `SELECT` result, with its variables. */
229
+ readonly selectAll: (
230
+ query: QueryInput,
231
+ options?: QueryOptions,
232
+ ) => Effect.Effect<Results.ResultSet, ClientErrors.SparqlClientError>;
233
+ /** Evaluates an `ASK` query. */
234
+ readonly ask: (
235
+ query: QueryInput,
236
+ options?: QueryOptions,
237
+ ) => Effect.Effect<boolean, ClientErrors.SparqlClientError>;
238
+ /** Streams the triples of a `CONSTRUCT` (or `DESCRIBE`) query. */
239
+ readonly construct: (
240
+ query: QueryInput,
241
+ options?: QueryOptions,
242
+ ) => Stream.Stream<Term.Quad, ClientErrors.SparqlClientError>;
243
+ /** Streams the triples of a `DESCRIBE` query. */
244
+ readonly describe: (
245
+ query: QueryInput,
246
+ options?: QueryOptions,
247
+ ) => Stream.Stream<Term.Quad, ClientErrors.SparqlClientError>;
248
+ /** Collects the triples of a `CONSTRUCT` / `DESCRIBE` query. */
249
+ readonly constructDataset: (
250
+ query: QueryInput,
251
+ options?: QueryOptions,
252
+ ) => Effect.Effect<Dataset.Dataset, ClientErrors.SparqlClientError>;
253
+ /** Evaluates a query of any form, dispatching on the response media type. */
254
+ readonly query: (
255
+ query: QueryInput,
256
+ options?: QueryOptions,
257
+ ) => Effect.Effect<QueryResult, ClientErrors.SparqlClientError>;
258
+ /** Executes an update request. */
259
+ readonly update: (
260
+ update: UpdateInput,
261
+ options?: UpdateOptions,
262
+ ) => Effect.Effect<void, ClientErrors.SparqlClientError>;
263
+ /** Streams the triples of a graph (Graph Store `GET`). */
264
+ readonly getGraph: (
265
+ graph: GraphTarget,
266
+ options?: RequestOptions,
267
+ ) => Stream.Stream<Term.Quad, ClientErrors.SparqlClientError>;
268
+ /** Fetches a graph as a `Dataset` (triples in the default graph). */
269
+ readonly getGraphDataset: (
270
+ graph: GraphTarget,
271
+ options?: RequestOptions,
272
+ ) => Effect.Effect<Dataset.Dataset, ClientErrors.SparqlClientError>;
273
+ /** Whether a graph exists (Graph Store `HEAD`). */
274
+ readonly hasGraph: (
275
+ graph: GraphTarget,
276
+ options?: RequestOptions,
277
+ ) => Effect.Effect<boolean, ClientErrors.SparqlClientError>;
278
+ /** Replaces a graph (Graph Store `PUT`). */
279
+ readonly putGraph: (
280
+ graph: GraphTarget,
281
+ triples: Iterable<Term.Quad>,
282
+ options?: UploadOptions,
283
+ ) => Effect.Effect<void, ClientErrors.SparqlClientError>;
284
+ /** Adds triples to a graph (Graph Store `POST`). */
285
+ readonly postGraph: (
286
+ graph: GraphTarget,
287
+ triples: Iterable<Term.Quad>,
288
+ options?: UploadOptions,
289
+ ) => Effect.Effect<void, ClientErrors.SparqlClientError>;
290
+ /** Creates a new graph in the graph store and returns its IRI. */
291
+ readonly createGraph: (
292
+ triples: Iterable<Term.Quad>,
293
+ options?: UploadOptions,
294
+ ) => Effect.Effect<Term.NamedNode, ClientErrors.SparqlClientError>;
295
+ /** Deletes a graph (Graph Store `DELETE`). */
296
+ readonly deleteGraph: (
297
+ graph: GraphTarget,
298
+ options?: RequestOptions,
299
+ ) => Effect.Effect<void, ClientErrors.SparqlClientError>;
300
+ }
301
+
302
+ /**
303
+ * The SPARQL client service.
304
+ *
305
+ * @since 0.1.0
306
+ * @category services
307
+ */
308
+ export class SparqlClient extends Context.Service<SparqlClient, SparqlClientShape>()(
309
+ '@thomasfosterau/effect-rdf/sparql/SparqlClient',
310
+ ) {}
311
+
312
+ // -----------------------------------------------------------------------------
313
+ // Helpers
314
+ // -----------------------------------------------------------------------------
315
+
316
+ /**
317
+ * The default `Accept` header of `SELECT` / `ASK` requests.
318
+ *
319
+ * @since 0.1.0
320
+ * @category constants
321
+ */
322
+ export const DEFAULT_RESULTS_ACCEPT =
323
+ 'application/sparql-results+json, application/sparql-results+xml;q=0.9, text/tab-separated-values;q=0.8, text/csv;q=0.5';
324
+
325
+ /**
326
+ * The SPARQL text of a query or update input.
327
+ *
328
+ * @since 0.1.0
329
+ * @category utils
330
+ */
331
+ export const toSparql = (input: QueryInput | UpdateInput): string =>
332
+ Predicate.isString(input)
333
+ ? input
334
+ : input instanceof QueryBuilder.Builder
335
+ ? input.toString()
336
+ : Generator.print(input);
337
+
338
+ const iriOf = (g: GraphIri): string => (Predicate.isString(g) ? g : g.value);
339
+
340
+ /** The media type of a `Content-Type` value: what precedes its parameters. */
341
+ const essence = (contentType: string): string => (contentType.split(';', 1)[0] ?? '').trim();
342
+
343
+ const mediaTypeOf = (response: HttpClientResponse.HttpClientResponse): string =>
344
+ essence(response.headers['content-type'] ?? '').toLowerCase();
345
+
346
+ const isResultsParseError = Predicate.isTagged('ResultsParseError');
347
+ const isRdfParseError = Predicate.isTagged('RdfParseError');
348
+ type EventOf<K extends ResultsStream.ResultEvent['_tag']> = Extract<
349
+ ResultsStream.ResultEvent,
350
+ { readonly _tag: K }
351
+ >;
352
+ const isVariablesEvent = (e: ResultsStream.ResultEvent): e is EventOf<'Variables'> =>
353
+ Predicate.isTagged(e, 'Variables');
354
+ const isSolutionEvent = (e: ResultsStream.ResultEvent): e is EventOf<'Solution'> =>
355
+ Predicate.isTagged(e, 'Solution');
356
+ const isBooleanEvent = (e: ResultsStream.ResultEvent): e is EventOf<'Boolean'> =>
357
+ Predicate.isTagged(e, 'Boolean');
358
+
359
+ const MAX_ERROR_BODY = 64 * 1024;
360
+
361
+ /** What `selectAll` collects from the results events. */
362
+ interface SelectAccumulator {
363
+ variables: ReadonlyArray<string>;
364
+ bindings: Array<B.Bindings>;
365
+ boolean: boolean;
366
+ }
367
+
368
+ const fromHttpClientError = (
369
+ e: HttpClientError.HttpClientError,
370
+ ): ClientErrors.SparqlClientError => {
371
+ return Match.value(e.reason._tag).pipe(
372
+ Match.when(
373
+ Match.is('DecodeError', 'EmptyBodyError'),
374
+ () => new ClientErrors.MalformedResponseError({ message: e.message, cause: e }),
375
+ ),
376
+ Match.orElse(() => new ClientErrors.TransportError({ message: e.message, cause: e })),
377
+ );
378
+ };
379
+
380
+ const bodyText = (
381
+ response: HttpClientResponse.HttpClientResponse,
382
+ ): Stream.Stream<string, ClientErrors.SparqlClientError> =>
383
+ Stream.decodeText(Stream.mapError(response.stream, fromHttpClientError));
384
+
385
+ // -----------------------------------------------------------------------------
386
+ // Constructor
387
+ // -----------------------------------------------------------------------------
388
+
389
+ const graphBase = (graph: GraphTarget, endpoint: string) =>
390
+ graph === 'default' ? endpoint : graph.value;
391
+
392
+ /**
393
+ * Builds a client from configuration, using the `HttpClient` from the context
394
+ * and the `Serialization.Formats` service when provided (the default formats
395
+ * otherwise).
396
+ *
397
+ * @since 0.1.0
398
+ * @category constructors
399
+ */
400
+ export const make = (
401
+ config: Config,
402
+ ): Effect.Effect<SparqlClientShape, never, HttpClient.HttpClient> =>
403
+ Effect.gen(function* () {
404
+ const http = yield* HttpClient.HttpClient;
405
+ const formats = Option.getOrElse(
406
+ yield* Effect.serviceOption(Serialization.Formats),
407
+ () => ClientFormats.defaults,
408
+ );
409
+ const graphAccept = ClientFormats.acceptHeader(formats);
410
+ const resultsAccept = config.resultsAccept ?? DEFAULT_RESULTS_ACCEPT;
411
+ const anyAccept = `${resultsAccept}, ${graphAccept
412
+ .split(', ')
413
+ .map((t) => (t.includes(';q=') ? t : `${t};q=0.9`))
414
+ .join(', ')}`;
415
+ const maxGetLength = config.maxGetLength ?? 2048;
416
+ const retryWhile = config.retryWhile ?? ClientErrors.isTransient;
417
+
418
+ /** Sends a request: applies headers, timeout and retries, checks the status. */
419
+ const send = (
420
+ request: HttpClientRequest.HttpClientRequest,
421
+ options?: RequestOptions,
422
+ accept: ReadonlyArray<number> = [],
423
+ ): Effect.Effect<HttpClientResponse.HttpClientResponse, ClientErrors.SparqlClientError> => {
424
+ const withHeaders = HttpClientRequest.setHeaders(request, {
425
+ ...config.headers,
426
+ ...options?.headers,
427
+ });
428
+ const timeout = options?.timeout ?? config.timeout;
429
+ const attempt = http.execute(withHeaders).pipe(
430
+ Effect.mapError(fromHttpClientError),
431
+ Effect.flatMap(
432
+ (
433
+ response,
434
+ ): Effect.Effect<
435
+ HttpClientResponse.HttpClientResponse,
436
+ ClientErrors.SparqlClientError
437
+ > => {
438
+ if (
439
+ (response.status >= 200 && response.status < 300) ||
440
+ accept.includes(response.status)
441
+ ) {
442
+ return Effect.succeed(response);
443
+ }
444
+ return response.text.pipe(
445
+ Effect.orElseSucceed(() => ''),
446
+ Effect.flatMap((body) =>
447
+ Effect.fail(
448
+ new ClientErrors.HttpStatusError({
449
+ method: withHeaders.method,
450
+ url: withHeaders.url,
451
+ status: response.status,
452
+ body: body.slice(0, MAX_ERROR_BODY),
453
+ }),
454
+ ),
455
+ ),
456
+ );
457
+ },
458
+ ),
459
+ );
460
+ const timed =
461
+ timeout === undefined
462
+ ? attempt
463
+ : Effect.timeoutOrElse(attempt, {
464
+ duration: timeout,
465
+ orElse: () =>
466
+ Effect.fail(
467
+ new ClientErrors.TimeoutError({
468
+ message: `${withHeaders.method} ${withHeaders.url} timed out after ${Duration.format(Duration.fromInputUnsafe(timeout))}`,
469
+ }),
470
+ ),
471
+ });
472
+ const retried =
473
+ config.retry === undefined
474
+ ? timed
475
+ : Effect.retry(timed, { schedule: config.retry, while: retryWhile });
476
+ return retried.pipe(
477
+ Effect.withSpan('SparqlClient.request', {
478
+ attributes: { 'http.method': withHeaders.method, 'http.url': withHeaders.url },
479
+ }),
480
+ );
481
+ };
482
+
483
+ const queryRequest = (
484
+ query: QueryInput,
485
+ accept: string,
486
+ options?: QueryOptions,
487
+ ): HttpClientRequest.HttpClientRequest => {
488
+ const text = toSparql(query);
489
+ const params: Array<[string, string]> = [
490
+ ...(options?.defaultGraphs ?? []).map((g): [string, string] => [
491
+ 'default-graph-uri',
492
+ iriOf(g),
493
+ ]),
494
+ ...(options?.namedGraphs ?? []).map((g): [string, string] => ['named-graph-uri', iriOf(g)]),
495
+ ];
496
+ const method = options?.method ?? config.method ?? 'auto';
497
+ const getUrlLength =
498
+ config.endpoint.length +
499
+ 7 +
500
+ encodeURIComponent(text).length +
501
+ params.reduce((n, [k, v]) => n + k.length + encodeURIComponent(v).length + 2, 0);
502
+ const useGet = method === 'get' || (method === 'auto' && getUrlLength <= maxGetLength);
503
+ const base = useGet
504
+ ? HttpClientRequest.get(config.endpoint).pipe(
505
+ HttpClientRequest.appendUrlParams([['query', text], ...params]),
506
+ )
507
+ : HttpClientRequest.post(config.endpoint).pipe(
508
+ HttpClientRequest.appendUrlParams(params),
509
+ HttpClientRequest.bodyText(text, 'application/sparql-query; charset=utf-8'),
510
+ );
511
+ return HttpClientRequest.setHeader(base, 'accept', accept);
512
+ };
513
+
514
+ const resultEvents = (
515
+ response: HttpClientResponse.HttpClientResponse,
516
+ ): Effect.Effect<
517
+ Stream.Stream<ResultsStream.ResultEvent, ClientErrors.SparqlClientError>,
518
+ ClientErrors.SparqlClientError
519
+ > => {
520
+ const mediaType = mediaTypeOf(response);
521
+ const parsed = ResultsStream.parse(mediaType, bodyText(response));
522
+ if (Option.isNone(parsed)) {
523
+ return Effect.fail(
524
+ new ClientErrors.UnsupportedMediaTypeError({
525
+ contentType: mediaType,
526
+ expected: resultsAccept.split(',').map(essence),
527
+ }),
528
+ );
529
+ }
530
+ return Effect.succeed(
531
+ Stream.mapError(parsed.value, (e) =>
532
+ isResultsParseError(e)
533
+ ? new ClientErrors.MalformedResponseError({
534
+ message: `Invalid ${e.format} results: ${e.message}`,
535
+ contentType: mediaType,
536
+ })
537
+ : e,
538
+ ),
539
+ );
540
+ };
541
+
542
+ const graphQuads = (
543
+ response: HttpClientResponse.HttpClientResponse,
544
+ baseIri: string,
545
+ ): Effect.Effect<
546
+ Stream.Stream<Term.Quad, ClientErrors.SparqlClientError>,
547
+ ClientErrors.SparqlClientError
548
+ > => {
549
+ const mediaType = mediaTypeOf(response);
550
+ const parser = Serialization.parserFor(formats, mediaType);
551
+ if (Option.isNone(parser)) {
552
+ return Effect.fail(
553
+ new ClientErrors.UnsupportedMediaTypeError({
554
+ contentType: mediaType,
555
+ expected: formats.parsers.map((p) => p.format.mediaType),
556
+ }),
557
+ );
558
+ }
559
+ return Effect.succeed(
560
+ parser.value.parseStream(bodyText(response), { baseIri }).pipe(
561
+ Stream.mapError((e) =>
562
+ isRdfParseError(e)
563
+ ? new ClientErrors.MalformedResponseError({
564
+ message: Serialization.formatError(e),
565
+ contentType: mediaType,
566
+ })
567
+ : e,
568
+ ),
569
+ Stream.map((q) =>
570
+ Term.isDefaultGraph(q.graph)
571
+ ? q
572
+ : new Term.Quad(q.subject, q.predicate, q.object, Term.defaultGraph),
573
+ ),
574
+ ),
575
+ );
576
+ };
577
+
578
+ const results: SparqlClientShape['results'] = (query, options) =>
579
+ Stream.unwrap(
580
+ Effect.flatMap(send(queryRequest(query, resultsAccept, options), options), resultEvents),
581
+ ).pipe(Stream.withSpan('SparqlClient.results'));
582
+
583
+ const selectBindings: SparqlClientShape['selectBindings'] = (query, options) =>
584
+ Stream.flatMap(results(query, options), (item) => {
585
+ return Match.value(item).pipe(
586
+ Match.tag('Solution', (event) => Stream.succeed(event.bindings)),
587
+ Match.tag('Variables', () => Stream.empty),
588
+ Match.tag('Boolean', () =>
589
+ Stream.fail(
590
+ new ClientErrors.MalformedResponseError({
591
+ message: 'Expected solutions but received a boolean result',
592
+ }),
593
+ ),
594
+ ),
595
+ Match.exhaustive,
596
+ );
597
+ });
598
+
599
+ // Both overloads of `select` are this one implementation over `QueryInput`.
600
+ function select<R extends string, O extends string>(
601
+ query: QueryBuilder.Builder<'Select', R, O>,
602
+ options?: QueryOptions,
603
+ ): Stream.Stream<QueryBuilder.Row<R, O>, ClientErrors.SparqlClientError>;
604
+ function select(
605
+ query: string | Ast.Query,
606
+ options?: QueryOptions,
607
+ ): Stream.Stream<Row, ClientErrors.SparqlClientError>;
608
+ function select(
609
+ query: QueryInput,
610
+ options?: QueryOptions,
611
+ ): Stream.Stream<Partial<Row>, ClientErrors.SparqlClientError> {
612
+ return Stream.map(selectBindings(query, options), B.toRecord);
613
+ }
614
+
615
+ const selectAll: SparqlClientShape['selectAll'] = (query, options) =>
616
+ Effect.map(
617
+ Stream.runFold(
618
+ results(query, options),
619
+ (): SelectAccumulator => ({ variables: [], bindings: [], boolean: false }),
620
+ (acc, event) => {
621
+ if (isVariablesEvent(event)) acc.variables = event.variables;
622
+ else if (isSolutionEvent(event)) acc.bindings.push(event.bindings);
623
+ else acc.boolean = true;
624
+ return acc;
625
+ },
626
+ ),
627
+ (acc): Results.ResultSet => ({
628
+ _tag: 'ResultSet',
629
+ variables: acc.variables,
630
+ bindings: acc.bindings,
631
+ }),
632
+ );
633
+
634
+ const ask: SparqlClientShape['ask'] = (query, options) =>
635
+ Effect.flatMap(
636
+ Stream.runHead(Stream.filter(results(query, options), isBooleanEvent)),
637
+ (event) =>
638
+ Option.isSome(event)
639
+ ? Effect.succeed(event.value.value)
640
+ : Effect.fail(
641
+ new ClientErrors.MalformedResponseError({ message: 'Expected a boolean result' }),
642
+ ),
643
+ ).pipe(Effect.withSpan('SparqlClient.ask'));
644
+
645
+ const construct: SparqlClientShape['construct'] = (query, options) =>
646
+ Stream.unwrap(
647
+ Effect.flatMap(send(queryRequest(query, graphAccept, options), options), (response) =>
648
+ graphQuads(response, config.endpoint),
649
+ ),
650
+ ).pipe(Stream.withSpan('SparqlClient.construct'));
651
+
652
+ const constructDataset: SparqlClientShape['constructDataset'] = (query, options) =>
653
+ Effect.map(Stream.runCollect(construct(query, options)), Dataset.fromIterable);
654
+
655
+ const query: SparqlClientShape['query'] = (q, options) =>
656
+ Effect.gen(function* () {
657
+ const response = yield* send(queryRequest(q, anyAccept, options), options);
658
+ const mediaType = mediaTypeOf(response);
659
+ if (Option.isSome(ResultsStream.parserFor(mediaType))) {
660
+ const events = yield* Stream.runCollect(yield* resultEvents(response));
661
+ const boolean = Arr.findFirst(events, isBooleanEvent);
662
+ if (Option.isSome(boolean)) {
663
+ return { _tag: 'Boolean', value: boolean.value.value } as const;
664
+ }
665
+ return {
666
+ _tag: 'ResultSet',
667
+ variables: Option.match(Arr.findFirst(events, isVariablesEvent), {
668
+ onNone: () => [],
669
+ onSome: (e) => e.variables,
670
+ }),
671
+ bindings: Arr.filterMap(events, (e) =>
672
+ isSolutionEvent(e) ? Result.succeed(e.bindings) : Result.failVoid,
673
+ ),
674
+ } as const;
675
+ }
676
+ const quads = yield* Stream.runCollect(yield* graphQuads(response, config.endpoint));
677
+ return { _tag: 'Graph', dataset: Dataset.fromIterable(quads) } as const;
678
+ }).pipe(Effect.withSpan('SparqlClient.query'));
679
+
680
+ const update: SparqlClientShape['update'] = (u, options) => {
681
+ const params: Array<[string, string]> = [
682
+ ...(options?.usingGraphs ?? []).map((g): [string, string] => ['using-graph-uri', iriOf(g)]),
683
+ ...(options?.usingNamedGraphs ?? []).map((g): [string, string] => [
684
+ 'using-named-graph-uri',
685
+ iriOf(g),
686
+ ]),
687
+ ];
688
+ const request = HttpClientRequest.post(config.updateEndpoint ?? config.endpoint).pipe(
689
+ HttpClientRequest.appendUrlParams(params),
690
+ HttpClientRequest.bodyText(toSparql(u), 'application/sparql-update; charset=utf-8'),
691
+ );
692
+ return Effect.flatMap(send(request, options), (response) =>
693
+ Effect.mapError(Effect.asVoid(response.arrayBuffer), fromHttpClientError),
694
+ ).pipe(Effect.withSpan('SparqlClient.update'));
695
+ };
696
+
697
+ // --- Graph Store -----------------------------------------------------------
698
+
699
+ const graphStore = Effect.suspend(() =>
700
+ config.graphStoreEndpoint === undefined
701
+ ? Effect.fail(
702
+ new ClientErrors.ConfigurationError({
703
+ message: 'Graph Store operations need a graphStoreEndpoint',
704
+ }),
705
+ )
706
+ : Effect.succeed(config.graphStoreEndpoint),
707
+ );
708
+
709
+ const graphRequest = (method: 'GET' | 'HEAD' | 'PUT' | 'POST' | 'DELETE', graph: GraphTarget) =>
710
+ Effect.map(graphStore, (endpoint) =>
711
+ HttpClientRequest.make(method)(endpoint).pipe(
712
+ HttpClientRequest.appendUrlParams(
713
+ graph === 'default' ? [['default', '']] : [['graph', graph.value]],
714
+ ),
715
+ ),
716
+ );
717
+
718
+ const getGraph: SparqlClientShape['getGraph'] = (graph, options) =>
719
+ Stream.unwrap(
720
+ Effect.gen(function* () {
721
+ const endpoint = yield* graphStore;
722
+ const request = HttpClientRequest.setHeader(
723
+ yield* graphRequest('GET', graph),
724
+ 'accept',
725
+ graphAccept,
726
+ );
727
+ const response = yield* send(request, options);
728
+ return yield* graphQuads(response, graphBase(graph, endpoint));
729
+ }),
730
+ ).pipe(Stream.withSpan('SparqlClient.getGraph'));
731
+
732
+ const getGraphDataset: SparqlClientShape['getGraphDataset'] = (graph, options) =>
733
+ Effect.map(Stream.runCollect(getGraph(graph, options)), Dataset.fromIterable);
734
+
735
+ const hasGraph: SparqlClientShape['hasGraph'] = (graph, options) =>
736
+ Effect.gen(function* () {
737
+ const request = HttpClientRequest.setHeader(
738
+ yield* graphRequest('HEAD', graph),
739
+ 'accept',
740
+ graphAccept,
741
+ );
742
+ const response = yield* send(request, options, [404]);
743
+ return response.status !== 404;
744
+ }).pipe(Effect.withSpan('SparqlClient.hasGraph'));
745
+
746
+ const serialize = (triples: Iterable<Term.Quad>, mediaType: string) =>
747
+ Effect.gen(function* () {
748
+ const serializer = Serialization.serializerFor(formats, mediaType);
749
+ if (Option.isNone(serializer)) {
750
+ return yield* new ClientErrors.ConfigurationError({
751
+ message: `No serializer for ${mediaType}`,
752
+ });
753
+ }
754
+ const quads = Array.from(triples, (q) =>
755
+ q.graph._tag === 'DefaultGraph'
756
+ ? q
757
+ : new Term.Quad(q.subject, q.predicate, q.object, Term.defaultGraph),
758
+ );
759
+ return yield* serializer.value
760
+ .serialize(quads)
761
+ .pipe(
762
+ Effect.mapError(
763
+ (e) =>
764
+ new ClientErrors.ConfigurationError({ message: `Cannot serialise: ${e.message}` }),
765
+ ),
766
+ );
767
+ });
768
+
769
+ const upload = (
770
+ method: 'PUT' | 'POST',
771
+ graph: GraphTarget,
772
+ triples: Iterable<Term.Quad>,
773
+ options?: UploadOptions,
774
+ ) =>
775
+ Effect.gen(function* () {
776
+ const mediaType = options?.mediaType ?? config.graphMediaType ?? 'application/n-triples';
777
+ const body = yield* serialize(triples, mediaType);
778
+ const request = HttpClientRequest.bodyText(
779
+ yield* graphRequest(method, graph),
780
+ body,
781
+ `${mediaType}; charset=utf-8`,
782
+ );
783
+ const response = yield* send(request, options);
784
+ yield* Effect.mapError(response.arrayBuffer, fromHttpClientError);
785
+ });
786
+
787
+ const putGraph: SparqlClientShape['putGraph'] = (graph, triples, options) =>
788
+ upload('PUT', graph, triples, options).pipe(Effect.withSpan('SparqlClient.putGraph'));
789
+
790
+ const postGraph: SparqlClientShape['postGraph'] = (graph, triples, options) =>
791
+ upload('POST', graph, triples, options).pipe(Effect.withSpan('SparqlClient.postGraph'));
792
+
793
+ const createGraph: SparqlClientShape['createGraph'] = (triples, options) =>
794
+ Effect.gen(function* () {
795
+ const endpoint = yield* graphStore;
796
+ const mediaType = options?.mediaType ?? config.graphMediaType ?? 'application/n-triples';
797
+ const body = yield* serialize(triples, mediaType);
798
+ const response = yield* send(
799
+ HttpClientRequest.post(endpoint).pipe(
800
+ HttpClientRequest.bodyText(body, `${mediaType}; charset=utf-8`),
801
+ ),
802
+ options,
803
+ );
804
+ yield* Effect.mapError(response.arrayBuffer, fromHttpClientError);
805
+ const location = response.headers['location'];
806
+ if (location === undefined) {
807
+ return yield* new ClientErrors.MalformedResponseError({
808
+ message: 'The graph store did not return a Location header',
809
+ });
810
+ }
811
+ return Term.namedNode(new URL(location, endpoint).href);
812
+ }).pipe(Effect.withSpan('SparqlClient.createGraph'));
813
+
814
+ const deleteGraph: SparqlClientShape['deleteGraph'] = (graph, options) =>
815
+ Effect.gen(function* () {
816
+ const response = yield* send(yield* graphRequest('DELETE', graph), options);
817
+ yield* Effect.mapError(response.arrayBuffer, fromHttpClientError);
818
+ }).pipe(Effect.withSpan('SparqlClient.deleteGraph'));
819
+
820
+ return SparqlClient.of({
821
+ config,
822
+ select,
823
+ selectBindings,
824
+ results,
825
+ selectAll,
826
+ ask,
827
+ construct,
828
+ describe: construct,
829
+ constructDataset,
830
+ query,
831
+ update,
832
+ getGraph,
833
+ getGraphDataset,
834
+ hasGraph,
835
+ putGraph,
836
+ postGraph,
837
+ createGraph,
838
+ deleteGraph,
839
+ });
840
+ });
841
+
842
+ /**
843
+ * A layer providing the client (requires an `HttpClient`, e.g.
844
+ * `FetchHttpClient.layer`).
845
+ *
846
+ * @since 0.1.0
847
+ * @category layers
848
+ */
849
+ export const layer = (config: Config): Layer.Layer<SparqlClient, never, HttpClient.HttpClient> =>
850
+ Layer.effect(SparqlClient, make(config));
851
+
852
+ // -----------------------------------------------------------------------------
853
+ // Accessors
854
+ // -----------------------------------------------------------------------------
855
+
856
+ /**
857
+ * The type of the {@link select} accessor: `SparqlClientShape['select']`
858
+ * with the `SparqlClient` taken from the context.
859
+ *
860
+ * @since 0.1.0
861
+ * @category accessors
862
+ */
863
+ export interface SelectAccessor {
864
+ <R extends string, O extends string>(
865
+ query: QueryBuilder.Builder<'Select', R, O>,
866
+ options?: QueryOptions,
867
+ ): Stream.Stream<QueryBuilder.Row<R, O>, ClientErrors.SparqlClientError, SparqlClient>;
868
+ (
869
+ query: string | Ast.Query,
870
+ options?: QueryOptions,
871
+ ): Stream.Stream<Row, ClientErrors.SparqlClientError, SparqlClient>;
872
+ }
873
+
874
+ /**
875
+ * Streams the rows of a `SELECT` query with the `SparqlClient` from the
876
+ * context. Builder queries produce typed rows.
877
+ *
878
+ * @since 0.1.0
879
+ * @category accessors
880
+ */
881
+ export const select: SelectAccessor = (
882
+ query: QueryBuilder.Builder<'Select', string, string> | string | Ast.Query,
883
+ options?: QueryOptions,
884
+ ) =>
885
+ Stream.unwrap(
886
+ Effect.map(Effect.service(SparqlClient), (c) =>
887
+ !(query instanceof QueryBuilder.Builder)
888
+ ? c.select(query, options)
889
+ : c.select(query, options),
890
+ ),
891
+ );
892
+
893
+ /**
894
+ * Streams the rows of a `SELECT` query decoded with a schema (whose fields
895
+ * are typically `TermSchema` codecs).
896
+ *
897
+ * @since 0.1.0
898
+ * @category accessors
899
+ */
900
+ export const decode = <A, RD>(
901
+ query: QueryInput,
902
+ schema: Schema.Decoder<A, RD>,
903
+ options?: QueryOptions,
904
+ ): Stream.Stream<A, ClientErrors.SparqlClientError | Schema.SchemaError, SparqlClient | RD> =>
905
+ Stream.mapEffect(
906
+ Stream.unwrap(
907
+ Effect.map(Effect.service(SparqlClient), (c) => c.selectBindings(query, options)),
908
+ ),
909
+ (b) => Schema.decodeUnknownEffect(schema)(B.toRecord(b)),
910
+ );
911
+
912
+ /**
913
+ * Evaluates an `ASK` query with the `SparqlClient` from the context.
914
+ *
915
+ * @since 0.1.0
916
+ * @category accessors
917
+ */
918
+ export const ask = (
919
+ query: QueryInput,
920
+ options?: QueryOptions,
921
+ ): Effect.Effect<boolean, ClientErrors.SparqlClientError, SparqlClient> =>
922
+ Effect.flatMap(Effect.service(SparqlClient), (c) => c.ask(query, options));
923
+
924
+ /**
925
+ * Streams the triples of a `CONSTRUCT` / `DESCRIBE` query with the
926
+ * `SparqlClient` from the context.
927
+ *
928
+ * @since 0.1.0
929
+ * @category accessors
930
+ */
931
+ export const construct = (
932
+ query: QueryInput,
933
+ options?: QueryOptions,
934
+ ): Stream.Stream<Term.Quad, ClientErrors.SparqlClientError, SparqlClient> =>
935
+ Stream.unwrap(Effect.map(Effect.service(SparqlClient), (c) => c.construct(query, options)));
936
+
937
+ /**
938
+ * Executes an update with the `SparqlClient` from the context.
939
+ *
940
+ * @since 0.1.0
941
+ * @category accessors
942
+ */
943
+ export const update = (
944
+ input: UpdateInput,
945
+ options?: UpdateOptions,
946
+ ): Effect.Effect<void, ClientErrors.SparqlClientError, SparqlClient> =>
947
+ Effect.flatMap(Effect.service(SparqlClient), (c) => c.update(input, options));