@thomasfosterau/effect-rdf 0.0.0 → 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 +2250 -1
  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 +187 -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,771 @@
1
+ /**
2
+ * Incremental parsing of SPARQL results documents: solutions are emitted as
3
+ * soon as they have been received, without buffering the whole response.
4
+ *
5
+ * - JSON (`application/sparql-results+json`): an incremental scanner finds
6
+ * the `head`, `boolean` and each element of `results.bindings`, decoded
7
+ * with `Results.JsonTermSchema`;
8
+ * - XML (`application/sparql-results+xml`): complete `<result>` elements are
9
+ * cut from the input and parsed with `Results.Xml.parse`;
10
+ * - TSV (`text/tab-separated-values`): line by line with
11
+ * `Results.parseTerm`;
12
+ * - CSV (`text/csv`): complete records (whose quoted cells may span lines)
13
+ * are parsed with `Results.Csv.parse` as they arrive.
14
+ *
15
+ * @since 0.1.0
16
+ */
17
+ import * as Match from 'effect/Match';
18
+ import * as Arr from 'effect/Array';
19
+ import * as Effect from 'effect/Effect';
20
+ import * as Iterable from 'effect/Iterable';
21
+ import * as Option from 'effect/Option';
22
+ import * as Predicate from 'effect/Predicate';
23
+ import * as Record from 'effect/Record';
24
+ import * as Result from 'effect/Result';
25
+ import * as Schema from 'effect/Schema';
26
+ import * as Stream from 'effect/Stream';
27
+ import type * as Term from '../Term.ts';
28
+ import * as B from './Bindings.ts';
29
+ import * as Json from './internal/json.ts';
30
+ import * as Results from './Results.ts';
31
+
32
+ /**
33
+ * An event of a results document.
34
+ *
35
+ * @since 0.1.0
36
+ * @category models
37
+ */
38
+ export type ResultEvent =
39
+ | { readonly _tag: 'Variables'; readonly variables: ReadonlyArray<string> }
40
+ | { readonly _tag: 'Solution'; readonly bindings: B.Bindings }
41
+ | { readonly _tag: 'Boolean'; readonly value: boolean };
42
+
43
+ /**
44
+ * An incremental parser: `push` consumes a chunk of text and returns the
45
+ * events it completes; `end` flushes the remaining input. Both throw
46
+ * `Results.ResultsParseError` on malformed input.
47
+ *
48
+ * @since 0.1.0
49
+ * @category models
50
+ */
51
+ export interface Incremental {
52
+ readonly push: (chunk: string) => ReadonlyArray<ResultEvent>;
53
+ readonly end: () => ReadonlyArray<ResultEvent>;
54
+ }
55
+
56
+ const fail: (format: string, message: string) => never = (format, message) => {
57
+ throw new Results.ResultsParseError({ format, message });
58
+ };
59
+
60
+ const variablesEvent = (variables: ReadonlyArray<string>): ResultEvent => ({
61
+ _tag: 'Variables',
62
+ variables,
63
+ });
64
+
65
+ const isBooleanResult = Predicate.isTagged('Boolean');
66
+
67
+ const fromParsed = (parsed: Results.ParsedResult): Array<ResultEvent> =>
68
+ isBooleanResult(parsed)
69
+ ? [{ _tag: 'Boolean', value: parsed.value }]
70
+ : [
71
+ variablesEvent(parsed.variables),
72
+ ...parsed.bindings.map((bindings) => ({ _tag: 'Solution', bindings }) as const),
73
+ ];
74
+
75
+ /** Appends a solution event per row of a parsed result set (none for a boolean). */
76
+ const pushSolutions = (parsed: Results.ParsedResult, out: Array<ResultEvent>): void => {
77
+ if (isBooleanResult(parsed)) return;
78
+ parsed.bindings.forEach((bindings) => {
79
+ out.push({ _tag: 'Solution', bindings });
80
+ });
81
+ };
82
+
83
+ const runSyncParse = (
84
+ effect: Effect.Effect<Results.ParsedResult, Results.ResultsParseError>,
85
+ ): Results.ParsedResult => {
86
+ const result = Effect.runSync(Effect.result(effect));
87
+ if (Result.isFailure(result)) throw result.failure;
88
+ return result.success;
89
+ };
90
+
91
+ // -----------------------------------------------------------------------------
92
+ // JSON
93
+ // -----------------------------------------------------------------------------
94
+
95
+ const decodeJsonString = Schema.decodeUnknownResult(Schema.fromJsonString(Schema.String));
96
+ const decodeRow = Schema.decodeUnknownResult(Schema.Record(Schema.String, Results.JsonTermSchema));
97
+ const decodeHead = Schema.decodeUnknownResult(
98
+ Schema.Struct({ vars: Schema.optional(Schema.Array(Schema.String)) }),
99
+ );
100
+
101
+ interface Frame {
102
+ readonly type: 'object' | 'array';
103
+ /** The last key read in an object (`''` before the first). */
104
+ key: string;
105
+ expectKey: boolean;
106
+ }
107
+
108
+ type CaptureKind = 'head' | 'boolean' | 'binding';
109
+
110
+ /**
111
+ * One token of JSON outside a string, as capture groups: (1) a run of
112
+ * whitespace, (2) an opening and (3) a closing bracket, (4) `:` or `,`, (5)
113
+ * the body of a string that starts here, followed by (6) its closing quote or
114
+ * (7) a lone backslash at the end of the chunk (neither: the chunk ends inside
115
+ * the string); no group: a run of primitive (number, literal) characters.
116
+ */
117
+ const JSON_TOKEN =
118
+ /([ \t\n\r]+)|([{[])|([}\]])|([:,])|"([^"\\]*(?:\\[^][^"\\]*)*)(?:(")|(\\))?|[^ \t\n\r{}[\]:,"]+/g;
119
+
120
+ /** The rest of a string a chunk starts inside: up to its closing quote, a lone final backslash or the end. */
121
+ const STRING_REST = /[^"\\]*(?:\\[^][^"\\]*)*/y;
122
+
123
+ /**
124
+ * An incremental parser for SPARQL JSON results.
125
+ *
126
+ * @since 0.1.0
127
+ * @category parsers
128
+ */
129
+ export const json = (): Incremental => {
130
+ const stack: Array<Frame> = [];
131
+ let inString = false;
132
+ let escape = false;
133
+ let stringIsKey = false;
134
+ let keyRaw = '';
135
+ let primitive = false;
136
+ let capturing = false;
137
+ let capture: CaptureKind = 'head';
138
+ let captureDepth = 0;
139
+ let captureBuf = '';
140
+ let captureStart = -1;
141
+ let done = false;
142
+ let sawHead = false;
143
+ let sawBody = false;
144
+ // The chunk being scanned and the events it completes.
145
+ let chunk = '';
146
+ let out: Array<ResultEvent> = [];
147
+
148
+ /** Whether a value starting here is one to capture, and which. */
149
+ const interesting = (): Option.Option<CaptureKind> => {
150
+ const top = stack[stack.length - 1];
151
+ if (top === undefined) return Option.none();
152
+ if (stack.length === 1 && top.type === 'object') {
153
+ if (top.key === 'head') return Option.some('head');
154
+ if (top.key === 'boolean') return Option.some('boolean');
155
+ return Option.none();
156
+ }
157
+ if (
158
+ stack.length === 3 &&
159
+ top.type === 'array' &&
160
+ stack[0]?.key === 'results' &&
161
+ stack[1]?.type === 'object' &&
162
+ stack[1].key === 'bindings'
163
+ ) {
164
+ return Option.some('binding');
165
+ }
166
+ return Option.none();
167
+ };
168
+
169
+ const emit = (kind: CaptureKind, text: string) => {
170
+ const parsed = Json.parse(text);
171
+ if (Result.isFailure(parsed)) fail('json', `Invalid JSON: ${parsed.failure}`);
172
+ const value = parsed.success;
173
+ if (kind === 'head') {
174
+ const head = decodeHead(value);
175
+ if (Result.isFailure(head)) fail('json', `Invalid head: ${head.failure.message}`);
176
+ sawHead = true;
177
+ out.push(variablesEvent(head.success.vars ?? []));
178
+ } else if (kind === 'boolean') {
179
+ if (!Predicate.isBoolean(value)) fail('json', '"boolean" must be true or false');
180
+ sawBody = true;
181
+ out.push({ _tag: 'Boolean', value });
182
+ } else {
183
+ const row = decodeRow(value);
184
+ if (Result.isFailure(row)) fail('json', `Invalid binding: ${row.failure.message}`);
185
+ sawBody = true;
186
+ out.push({
187
+ _tag: 'Solution',
188
+ bindings: B.fromEntries(
189
+ Arr.map(Record.toEntries(row.success), ([k, v]) => [k, Results.termFromJson(v)] as const),
190
+ ),
191
+ });
192
+ }
193
+ };
194
+
195
+ /** Emits the captured value if it ends (exclusively) at `end` of the chunk. */
196
+ const finish = (end: number) => {
197
+ if (!capturing || stack.length !== captureDepth) return;
198
+ const text = captureBuf + chunk.slice(captureStart, end);
199
+ capturing = false;
200
+ captureBuf = '';
201
+ captureStart = -1;
202
+ emit(capture, text);
203
+ };
204
+ const valueStart = (i: number) => {
205
+ if (capturing) return;
206
+ const kind = interesting();
207
+ if (Option.isSome(kind)) {
208
+ capturing = true;
209
+ capture = kind.value;
210
+ captureDepth = stack.length;
211
+ captureStart = i;
212
+ captureBuf = '';
213
+ }
214
+ };
215
+ const endPrimitive = (i: number) => {
216
+ if (!primitive) return;
217
+ primitive = false;
218
+ finish(i);
219
+ };
220
+ /** Ends the current string at its closing quote, `quote`. */
221
+ const endString = (quote: number) => {
222
+ inString = false;
223
+ if (stringIsKey) {
224
+ const key = decodeJsonString(`"${keyRaw}"`);
225
+ if (Result.isFailure(key)) fail('json', 'Invalid object key');
226
+ const top = stack[stack.length - 1];
227
+ if (top !== undefined) {
228
+ top.key = key.success;
229
+ top.expectKey = false;
230
+ }
231
+ } else {
232
+ finish(quote + 1);
233
+ }
234
+ };
235
+ /** Continues a string that the previous chunk ended inside; returns where it stops. */
236
+ const continueString = (): number => {
237
+ let start = 0;
238
+ if (escape) {
239
+ escape = false;
240
+ if (stringIsKey) keyRaw += chunk[0];
241
+ start = 1;
242
+ }
243
+ STRING_REST.lastIndex = start;
244
+ const body = STRING_REST.exec(chunk)?.[0] ?? '';
245
+ const end = start + body.length;
246
+ if (stringIsKey) keyRaw += body;
247
+ if (end >= chunk.length) return end;
248
+ if (chunk.charCodeAt(end) === 34 /* " */) {
249
+ endString(end);
250
+ return end + 1;
251
+ }
252
+ // A lone backslash ends the chunk: the next one starts with the escaped character.
253
+ escape = true;
254
+ if (stringIsKey) keyRaw += '\\';
255
+ return chunk.length;
256
+ };
257
+
258
+ /** Scans one token at `i` of the chunk (the groups are `JSON_TOKEN`'s, absent when unmatched). */
259
+ const token = (
260
+ i: number,
261
+ ws?: string,
262
+ open?: string,
263
+ close?: string,
264
+ punct?: string,
265
+ body?: string,
266
+ quote?: string,
267
+ backslash?: string,
268
+ ): void => {
269
+ if (done) {
270
+ if (ws === undefined) fail('json', 'Trailing data');
271
+ return;
272
+ }
273
+ if (ws !== undefined) {
274
+ endPrimitive(i);
275
+ } else if (open !== undefined) {
276
+ endPrimitive(i);
277
+ valueStart(i);
278
+ const isObject = open === '{';
279
+ stack.push({ type: isObject ? 'object' : 'array', key: '', expectKey: isObject });
280
+ } else if (close !== undefined) {
281
+ endPrimitive(i);
282
+ const frame = stack.pop();
283
+ if (frame === undefined || frame.type !== (close === '}' ? 'object' : 'array')) {
284
+ fail('json', 'Unbalanced brackets');
285
+ }
286
+ finish(i + 1);
287
+ if (Arr.isReadonlyArrayEmpty(stack)) done = true;
288
+ } else if (punct !== undefined) {
289
+ endPrimitive(i);
290
+ const top = stack[stack.length - 1];
291
+ if (punct === ',' && top !== undefined && top.type === 'object') top.expectKey = true;
292
+ } else if (body !== undefined) {
293
+ endPrimitive(i);
294
+ const top = stack[stack.length - 1];
295
+ inString = true;
296
+ if (top !== undefined && top.type === 'object' && top.expectKey) {
297
+ stringIsKey = true;
298
+ keyRaw = body;
299
+ } else {
300
+ stringIsKey = false;
301
+ valueStart(i);
302
+ }
303
+ if (quote !== undefined) {
304
+ endString(i + 1 + body.length);
305
+ } else if (backslash !== undefined) {
306
+ escape = true;
307
+ if (stringIsKey) keyRaw += '\\';
308
+ }
309
+ } else {
310
+ if (Arr.isReadonlyArrayEmpty(stack)) fail('json', 'Expected a JSON object');
311
+ if (!primitive) {
312
+ primitive = true;
313
+ valueStart(i);
314
+ }
315
+ }
316
+ };
317
+
318
+ const push = (text: string): ReadonlyArray<ResultEvent> => {
319
+ out = [];
320
+ chunk = text;
321
+ if (capturing) captureStart = 0;
322
+ const from = inString && chunk !== '' ? continueString() : 0;
323
+ if (from < chunk.length) {
324
+ // `replace` drives the scan: one callback per token, nothing is kept.
325
+ (from === 0 ? chunk : chunk.slice(from)).replace(
326
+ JSON_TOKEN,
327
+ (_m, ws, open, close, punct, body, quote, backslash, offset: number) => {
328
+ token(from + offset, ws, open, close, punct, body, quote, backslash);
329
+ return '';
330
+ },
331
+ );
332
+ }
333
+ if (capturing) {
334
+ captureBuf += chunk.slice(captureStart);
335
+ captureStart = 0;
336
+ }
337
+ chunk = '';
338
+ return out;
339
+ };
340
+
341
+ return {
342
+ push,
343
+ end: () => {
344
+ if (!done || inString) fail('json', 'Unexpected end of document');
345
+ if (!sawHead && !sawBody) fail('json', 'Missing "head"');
346
+ return [];
347
+ },
348
+ };
349
+ };
350
+
351
+ // -----------------------------------------------------------------------------
352
+ // TSV
353
+ // -----------------------------------------------------------------------------
354
+
355
+ /**
356
+ * An incremental parser for SPARQL TSV results.
357
+ *
358
+ * @since 0.1.0
359
+ * @category parsers
360
+ */
361
+ export const tsv = (): Incremental => {
362
+ let buffer = '';
363
+ /** Whether the first line (the variables, or a boolean) has been read. */
364
+ let started = false;
365
+ let variables: ReadonlyArray<string> = [];
366
+ let boolean = false;
367
+ const line = (raw: string, out: Array<ResultEvent>) => {
368
+ const text = raw.endsWith('\r') ? raw.slice(0, -1) : raw;
369
+ if (!started) {
370
+ started = true;
371
+ const first = text.trim();
372
+ if (first === 'true' || first === 'false') {
373
+ boolean = true;
374
+ out.push({ _tag: 'Boolean', value: first === 'true' });
375
+ return;
376
+ }
377
+ variables = text === '' ? [] : text.split('\t').map((v) => v.trim().replace(/^[?$]/, ''));
378
+ out.push(variablesEvent(variables));
379
+ return;
380
+ }
381
+ if (boolean) {
382
+ if (text.trim() !== '') fail('tsv', 'Unexpected data after a boolean result');
383
+ return;
384
+ }
385
+ const cells = text.split('\t');
386
+ const entries: Array<readonly [string, Term.GroundTerm]> = [];
387
+ variables.forEach((variable, i) => {
388
+ const cell = (cells[i] ?? '').trim();
389
+ if (cell === '') return;
390
+ const term = Results.parseTerm(cell);
391
+ if (Option.isNone(term)) fail('tsv', `Invalid term: ${cell}`);
392
+ entries.push([variable, term.value]);
393
+ });
394
+ out.push({ _tag: 'Solution', bindings: B.fromEntries(entries) });
395
+ };
396
+ return {
397
+ push: (chunk) => {
398
+ const out: Array<ResultEvent> = [];
399
+ buffer += chunk;
400
+ const nl = buffer.lastIndexOf('\n');
401
+ if (nl >= 0) {
402
+ const complete = buffer.slice(0, nl);
403
+ buffer = buffer.slice(nl + 1);
404
+ complete.split('\n').forEach((l) => line(l, out));
405
+ }
406
+ return out;
407
+ },
408
+ end: () => {
409
+ const out: Array<ResultEvent> = [];
410
+ if (buffer !== '') line(buffer, out);
411
+ buffer = '';
412
+ if (!started) fail('tsv', 'Empty document');
413
+ return out;
414
+ },
415
+ };
416
+ };
417
+
418
+ // -----------------------------------------------------------------------------
419
+ // XML
420
+ // -----------------------------------------------------------------------------
421
+
422
+ const ROOT = /<([A-Za-z_][\w.-]*:)?sparql\b[^>]*>/;
423
+ const HEAD_END = /<\/head\s*>|<head\b[^>]*\/>/;
424
+ const RESULTS_START = /<results\b[^>]*?(\/?)>/;
425
+ const RESULT_END = /<result\b[^>]*\/>|<\/result\s*>/g;
426
+
427
+ const parseXmlResults = (doc: string) => runSyncParse(Results.Xml.parse(doc));
428
+
429
+ /**
430
+ * An incremental parser for SPARQL XML results.
431
+ *
432
+ * @since 0.1.0
433
+ * @category parsers
434
+ */
435
+ export const xml = (): Incremental => {
436
+ let buffer = '';
437
+ let phase: 'root' | 'head' | 'body' | 'results' | 'whole' | 'done' = 'root';
438
+ let root = '';
439
+ let head = '';
440
+ const step = (out: Array<ResultEvent>): boolean => {
441
+ return Match.value(phase).pipe(
442
+ Match.when('root', () => {
443
+ const m = ROOT.exec(buffer);
444
+ if (m === null) return false;
445
+ if (m[1] !== undefined || m[0].endsWith('/>')) {
446
+ phase = 'whole';
447
+ return false;
448
+ }
449
+ root = buffer.slice(0, m.index + m[0].length);
450
+ buffer = buffer.slice(m.index + m[0].length);
451
+ phase = 'head';
452
+ return true;
453
+ }),
454
+ Match.when('head', () => {
455
+ const m = HEAD_END.exec(buffer);
456
+ if (m === null) return false;
457
+ head = buffer.slice(0, m.index + m[0].length);
458
+ buffer = buffer.slice(m.index + m[0].length);
459
+ const parsed = parseXmlResults(`${root}${head}</sparql>`);
460
+ out.push(variablesEvent(isBooleanResult(parsed) ? [] : parsed.variables));
461
+ phase = 'body';
462
+ return true;
463
+ }),
464
+ Match.when('body', () => {
465
+ const results = RESULTS_START.exec(buffer);
466
+ const boolean = buffer.indexOf('<boolean');
467
+ if (boolean >= 0 && (results === null || boolean < results.index)) {
468
+ const end = buffer.indexOf('</boolean>');
469
+ if (end < 0) return false;
470
+ const parsed = parseXmlResults(
471
+ `${root}<head/>${buffer.slice(boolean, end + 10)}</sparql>`,
472
+ );
473
+ if (isBooleanResult(parsed)) out.push({ _tag: 'Boolean', value: parsed.value });
474
+ buffer = '';
475
+ phase = 'done';
476
+ return false;
477
+ }
478
+ if (results === null) return false;
479
+ buffer = buffer.slice(results.index + results[0].length);
480
+ phase = results[1] === '/' ? 'done' : 'results';
481
+ return true;
482
+ }),
483
+ Match.when('results', () => {
484
+ // The end of the last complete `<result>` element.
485
+ const last = Iterable.reduce(
486
+ buffer.matchAll(RESULT_END),
487
+ -1,
488
+ (_, m) => m.index + m[0].length,
489
+ );
490
+ if (last < 0) return false;
491
+ pushSolutions(
492
+ parseXmlResults(`${root}<head/><results>${buffer.slice(0, last)}</results></sparql>`),
493
+ out,
494
+ );
495
+ buffer = buffer.slice(last);
496
+ return false;
497
+ }),
498
+ Match.orElse(() => false),
499
+ );
500
+ };
501
+ /** Steps until a phase waits for more input (each `true` is a phase change). */
502
+ const drain = (out: Array<ResultEvent>): void => {
503
+ if (step(out)) drain(out);
504
+ };
505
+ /** Read through a function: `drain` may move `phase` to `whole`, which TypeScript cannot see. */
506
+ const isWhole = (): boolean => phase === 'whole';
507
+ let whole = '';
508
+ return {
509
+ push: (chunk) => {
510
+ const out: Array<ResultEvent> = [];
511
+ if (phase === 'whole') {
512
+ whole += chunk;
513
+ return out;
514
+ }
515
+ if (phase === 'done') return out;
516
+ buffer += chunk;
517
+ drain(out);
518
+ if (isWhole()) {
519
+ whole = buffer;
520
+ buffer = '';
521
+ }
522
+ return out;
523
+ },
524
+ end: () => {
525
+ if (phase === 'whole' || phase === 'root') {
526
+ return fromParsed(parseXmlResults(whole + buffer));
527
+ }
528
+ if (phase === 'head' || phase === 'body') {
529
+ // No <results> or <boolean>: let the full parser report the problem.
530
+ if (phase === 'head') fail('xml', 'Unexpected end of document');
531
+ const parsed = parseXmlResults(`${root}${head}${buffer}`);
532
+ return isBooleanResult(parsed) ? [{ _tag: 'Boolean', value: parsed.value }] : [];
533
+ }
534
+ if (phase === 'results' && !/<\/results\s*>/.test(buffer)) {
535
+ fail('xml', 'Unexpected end of document');
536
+ }
537
+ return [];
538
+ },
539
+ };
540
+ };
541
+
542
+ // -----------------------------------------------------------------------------
543
+ // CSV and buffering
544
+ // -----------------------------------------------------------------------------
545
+
546
+ /** Where a scan of CSV text found line breaks outside quotes, and the quote state at its end. */
547
+ interface RecordScan {
548
+ quoted: boolean;
549
+ /** The first and last line break outside quotes (`-1`: none). */
550
+ first: number;
551
+ last: number;
552
+ }
553
+
554
+ const QUOTE_OR_LINE_BREAK = /["\n]/g;
555
+
556
+ /** Scans `text` from `from`, starting inside quotes or not, for the line breaks that end records. */
557
+ const scanRecords = (text: string, from: number, quoted: boolean): RecordScan => {
558
+ const scan: RecordScan = { quoted, first: -1, last: -1 };
559
+ // `replace` drives the scan: one callback per quote or line break, nothing is kept.
560
+ (from === 0 ? text : text.slice(from)).replace(QUOTE_OR_LINE_BREAK, (c, offset: number) => {
561
+ if (c === '"') {
562
+ scan.quoted = !scan.quoted;
563
+ } else if (!scan.quoted) {
564
+ if (scan.first < 0) scan.first = from + offset;
565
+ scan.last = from + offset;
566
+ }
567
+ return '';
568
+ });
569
+ return scan;
570
+ };
571
+
572
+ /**
573
+ * An incremental parser for SPARQL CSV results: records are parsed (with the
574
+ * header, by `Results.Csv.parse`) once they are complete, that is, once a line
575
+ * break outside quotes has arrived.
576
+ *
577
+ * @since 0.1.0
578
+ * @category parsers
579
+ */
580
+ export const csv = (): Incremental => {
581
+ let buffer = '';
582
+ /** How far `buffer` has been scanned for record ends, and whether that is inside quotes. */
583
+ let scanned = 0;
584
+ let quoted = false;
585
+ let header: Option.Option<string> = Option.none();
586
+ let boolean = false;
587
+ /** The lines of the header, and of the records parsed so far (header included). */
588
+ let headerLines = 0;
589
+ let lines = 0;
590
+ const parse = (records: string): Results.ParsedResult => {
591
+ const parsed = Result.try(() =>
592
+ runSyncParse(
593
+ Results.Csv.parse(
594
+ Option.match(header, { onNone: () => records, onSome: (h) => h + records }),
595
+ ),
596
+ ),
597
+ );
598
+ if (Result.isSuccess(parsed)) return parsed.success;
599
+ const e = parsed.failure;
600
+ // Report lines of the whole document, not of the records parsed
601
+ if (e instanceof Results.ResultsParseError && e.line !== undefined && Option.isSome(header)) {
602
+ const line = e.line - headerLines + lines;
603
+ throw e.column === undefined
604
+ ? new Results.ResultsParseError({ format: e.format, message: e.message, line })
605
+ : new Results.ResultsParseError({
606
+ format: e.format,
607
+ message: e.message,
608
+ line,
609
+ column: e.column,
610
+ });
611
+ }
612
+ throw e;
613
+ };
614
+ const records = (input: string, out: Array<ResultEvent>) => {
615
+ if (boolean || input === '') return;
616
+ let text = input;
617
+ if (Option.isNone(header)) {
618
+ // The first record is the header (or a boolean)
619
+ const end = recordEnd(text);
620
+ const first = text.slice(0, end);
621
+ const parsed = parse(first);
622
+ if (isBooleanResult(parsed)) {
623
+ boolean = true;
624
+ out.push({ _tag: 'Boolean', value: parsed.value });
625
+ return;
626
+ }
627
+ out.push(variablesEvent(parsed.variables));
628
+ header = Option.some(first);
629
+ headerLines = countLines(first);
630
+ lines = headerLines;
631
+ text = text.slice(end);
632
+ if (text === '') return;
633
+ }
634
+ pushSolutions(parse(text), out);
635
+ lines += countLines(text);
636
+ };
637
+ return {
638
+ push: (chunk) => {
639
+ const out: Array<ResultEvent> = [];
640
+ buffer += chunk;
641
+ const scan = scanRecords(buffer, scanned, quoted);
642
+ quoted = scan.quoted;
643
+ scanned = buffer.length;
644
+ if (scan.last >= 0) {
645
+ records(buffer.slice(0, scan.last + 1), out);
646
+ buffer = buffer.slice(scan.last + 1);
647
+ scanned = buffer.length;
648
+ }
649
+ return out;
650
+ },
651
+ end: () => {
652
+ const out: Array<ResultEvent> = [];
653
+ if (Option.isNone(header) && !boolean) return fromParsed(parse(buffer));
654
+ records(buffer, out);
655
+ buffer = '';
656
+ return out;
657
+ },
658
+ };
659
+ };
660
+
661
+ /** The end of the first record of complete records (after its line break). */
662
+ const recordEnd = (text: string): number => {
663
+ const { first } = scanRecords(text, 0, false);
664
+ return first < 0 ? text.length : first + 1;
665
+ };
666
+
667
+ const countLines = (text: string): number => text.split('\n').length - 1;
668
+
669
+ /**
670
+ * A parser that buffers the whole document and parses it with a complete
671
+ * results codec (used for CSV).
672
+ *
673
+ * @since 0.1.0
674
+ * @category parsers
675
+ */
676
+ export const buffered = (codec: Results.ResultsCodec): Incremental => {
677
+ let buffer = '';
678
+ return {
679
+ push: (chunk) => {
680
+ buffer += chunk;
681
+ return [];
682
+ },
683
+ end: () => fromParsed(runSyncParse(codec.parse(buffer))),
684
+ };
685
+ };
686
+
687
+ // -----------------------------------------------------------------------------
688
+ // Streams
689
+ // -----------------------------------------------------------------------------
690
+
691
+ /**
692
+ * Runs an incremental parser over a stream of text chunks.
693
+ *
694
+ * @since 0.1.0
695
+ * @category streams
696
+ */
697
+ export const run = <E, R>(
698
+ input: Stream.Stream<string, E, R>,
699
+ make: () => Incremental,
700
+ format: string,
701
+ ): Stream.Stream<ResultEvent, E | Results.ResultsParseError, R> => {
702
+ const step = (f: () => ReadonlyArray<ResultEvent>) =>
703
+ Effect.try({
704
+ try: f,
705
+ catch: (e) =>
706
+ e instanceof Results.ResultsParseError
707
+ ? e
708
+ : new Results.ResultsParseError({
709
+ format,
710
+ message:
711
+ Predicate.hasProperty(e, 'message') && Predicate.isString(e.message)
712
+ ? e.message
713
+ : String(e),
714
+ }),
715
+ });
716
+ return Stream.suspend(() => {
717
+ const parser = make();
718
+ return Stream.concat(
719
+ Stream.flattenIterable(Stream.mapEffect(input, (chunk) => step(() => parser.push(chunk)))),
720
+ Stream.flattenIterable(Stream.fromEffect(step(() => parser.end()))),
721
+ );
722
+ });
723
+ };
724
+
725
+ /**
726
+ * Finds the incremental parser for a results media type.
727
+ *
728
+ * @since 0.1.0
729
+ * @category streams
730
+ */
731
+ export const parserFor = (
732
+ mediaType: string,
733
+ ): Option.Option<{ readonly make: () => Incremental; readonly format: string }> => {
734
+ const codec = Results.codecFor(mediaType);
735
+ if (Option.isNone(codec)) return Option.none();
736
+ return Match.value(codec).pipe(
737
+ Match.when(
738
+ ({ value }) => value === Results.Json,
739
+ () => Option.some({ make: json, format: 'json' }),
740
+ ),
741
+ Match.when(
742
+ ({ value }) => value === Results.Xml,
743
+ () => Option.some({ make: xml, format: 'xml' }),
744
+ ),
745
+ Match.when(
746
+ ({ value }) => value === Results.Tsv,
747
+ () => Option.some({ make: tsv, format: 'tsv' }),
748
+ ),
749
+ Match.when(
750
+ ({ value }) => value === Results.Csv,
751
+ () => Option.some({ make: csv, format: 'csv' }),
752
+ ),
753
+ Match.orElse((found) => {
754
+ const c = found.value;
755
+ return Option.some({ make: () => buffered(c), format: c.format.extensions[0] ?? 'csv' });
756
+ }),
757
+ );
758
+ };
759
+
760
+ /**
761
+ * Parses a results document of the given media type incrementally.
762
+ * Returns `None` for unsupported media types.
763
+ *
764
+ * @since 0.1.0
765
+ * @category streams
766
+ */
767
+ export const parse = <E, R>(
768
+ mediaType: string,
769
+ input: Stream.Stream<string, E, R>,
770
+ ): Option.Option<Stream.Stream<ResultEvent, E | Results.ResultsParseError, R>> =>
771
+ Option.map(parserFor(mediaType), ({ make, format }) => run(input, make, format));