@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,873 @@
1
+ /**
2
+ * Typed records over the resources of a `Dataset`: annotate a `Schema.Struct`
3
+ * with the predicate behind each field, then decode a subject's properties
4
+ * into the struct's type and encode a value back to quads.
5
+ *
6
+ * ```ts
7
+ * const Person = Schema.Struct({
8
+ * name: Resource.property(foaf('name'), TermCodec.string),
9
+ * nick: Schema.optional(Resource.property(foaf('nick'), TermCodec.string)),
10
+ * knows: Resource.property(foaf('knows'), Schema.Array(TermCodec.namedNode)),
11
+ * }).pipe(Resource.describe({ type: foaf('Person') }))
12
+ *
13
+ * Resource.decode(Person)(dataset, alice) // Effect<{ name: string; nick?: string; … }, SchemaError>
14
+ * Resource.encode(Person)(alice, value) // Effect<ReadonlyArray<Quad>, SchemaError>
15
+ * ```
16
+ *
17
+ * A field's cardinality comes from its schema: a plain codec reads exactly
18
+ * one object, `Schema.optional` / `Schema.optionalKey` at most one,
19
+ * `Schema.Array` any number (in `Term.Order`) and `list` an RDF collection.
20
+ * A field whose codec is a struct is a nested resource, decoded from the
21
+ * object's own properties. Each value decodes through its field's codec (see
22
+ * `TermCodec`), and failures are ordinary schema issues at the field's path.
23
+ *
24
+ * @since 0.1.0
25
+ */
26
+ import * as Arr from 'effect/Array';
27
+ import * as Effect from 'effect/Effect';
28
+ import * as Equal from 'effect/Equal';
29
+ import * as Option from 'effect/Option';
30
+ import * as Predicate from 'effect/Predicate';
31
+ import * as Record from 'effect/Record';
32
+ import * as Schema from 'effect/Schema';
33
+ import * as SchemaAST from 'effect/SchemaAST';
34
+ import * as SchemaIssue from 'effect/SchemaIssue';
35
+ import * as SchemaParser from 'effect/SchemaParser';
36
+ import * as SchemaTransformation from 'effect/SchemaTransformation';
37
+ import * as Dataset from './Dataset.ts';
38
+ import * as LanguageTag from './LanguageTag.ts';
39
+ import * as Term from './Term.ts';
40
+ import { rdf } from './Vocab.ts';
41
+
42
+ // -----------------------------------------------------------------------------
43
+ // Annotations
44
+ // -----------------------------------------------------------------------------
45
+
46
+ /**
47
+ * The annotation key `property` stores a field's `Property` under.
48
+ *
49
+ * @since 0.1.0
50
+ * @category annotations
51
+ */
52
+ export const PropertyKey = '@thomasfosterau/effect-rdf/Resource/property';
53
+
54
+ /**
55
+ * The annotation key `describe` stores a struct's `Description` under.
56
+ *
57
+ * @since 0.1.0
58
+ * @category annotations
59
+ */
60
+ export const DescriptionKey = '@thomasfosterau/effect-rdf/Resource/description';
61
+
62
+ /**
63
+ * The annotation key `list` marks an array schema as an RDF collection with.
64
+ *
65
+ * @since 0.1.0
66
+ * @category annotations
67
+ */
68
+ export const ListKey = '@thomasfosterau/effect-rdf/Resource/list';
69
+
70
+ /**
71
+ * How a field reads its values: the direction of its predicate and, for
72
+ * literals, the language tags it prefers.
73
+ *
74
+ * @since 0.1.0
75
+ * @category models
76
+ */
77
+ export interface PropertyOptions {
78
+ /**
79
+ * Read the subjects of `?x predicate resource` instead of the objects of
80
+ * `resource predicate ?x` (and write such quads).
81
+ */
82
+ readonly inverse?: boolean | undefined;
83
+ /**
84
+ * Language tags in order of preference, `''` for an untagged value. A
85
+ * single-valued field takes the first value whose tag matches, trying the
86
+ * tags in order; a multi-valued field keeps the values whose tag is listed.
87
+ * Tags compare case-insensitively. Overrides `DecodeOptions.languages`.
88
+ */
89
+ readonly languages?: ReadonlyArray<string> | undefined;
90
+ }
91
+
92
+ /**
93
+ * The predicate a field maps to, with its `PropertyOptions`: the value of the
94
+ * `PropertyKey` annotation.
95
+ *
96
+ * @since 0.1.0
97
+ * @category models
98
+ */
99
+ export interface Property extends PropertyOptions {
100
+ readonly predicate: Term.NamedNode;
101
+ }
102
+
103
+ /**
104
+ * What `describe` records about a struct: the `rdf:type` its resources carry
105
+ * and the field holding the resource itself.
106
+ *
107
+ * @since 0.1.0
108
+ * @category models
109
+ */
110
+ export interface Description {
111
+ /**
112
+ * The class every resource of this shape is an instance of: decoding
113
+ * requires `resource rdf:type type`, encoding writes it, and `decodeAll`
114
+ * finds the resources by it.
115
+ */
116
+ readonly type?: Term.NamedNode | undefined;
117
+ /**
118
+ * The name of a field that holds the resource term itself (decoded through
119
+ * that field's codec, e.g. `TermCodec.namedNode` or `TermCodec.iri`). A
120
+ * nested value with an id encodes under it; one without becomes a fresh
121
+ * blank node.
122
+ */
123
+ readonly id?: string | undefined;
124
+ }
125
+
126
+ /**
127
+ * Maps a struct field to a predicate: annotates `codec` with the predicate
128
+ * (and `options`) without changing its type, so it composes with
129
+ * `Schema.optional`, `Schema.Array` and `list` on either side.
130
+ *
131
+ * @since 0.1.0
132
+ * @category constructors
133
+ */
134
+ export const property = <S extends Schema.Top>(
135
+ predicate: Term.NamedNode,
136
+ codec: S,
137
+ options?: PropertyOptions,
138
+ ): S['Rebuild'] => {
139
+ const value: Property = { ...options, predicate };
140
+ return codec.annotate({ [PropertyKey]: value });
141
+ };
142
+
143
+ /**
144
+ * Describes a struct as an RDF resource: the `rdf:type` it requires and
145
+ * writes, and the field (if any) holding the resource term.
146
+ *
147
+ * @since 0.1.0
148
+ * @category constructors
149
+ */
150
+ export const describe =
151
+ (description: Description) =>
152
+ <S extends Schema.Top>(self: S): S['Rebuild'] =>
153
+ self.annotate({ [DescriptionKey]: description });
154
+
155
+ /**
156
+ * An array read from and written to an RDF collection (an `rdf:first` /
157
+ * `rdf:rest` list ending in `rdf:nil`) instead of repeated objects.
158
+ *
159
+ * @since 0.1.0
160
+ * @category constructors
161
+ */
162
+ export const list = <S extends Schema.Top>(item: S): Schema.$Array<S> =>
163
+ Schema.Array(item).annotate({ [ListKey]: true });
164
+
165
+ // -----------------------------------------------------------------------------
166
+ // Options
167
+ // -----------------------------------------------------------------------------
168
+
169
+ /**
170
+ * Options for `decode`, `decodeAll` and `schema`.
171
+ *
172
+ * @since 0.1.0
173
+ * @category models
174
+ */
175
+ export interface DecodeOptions {
176
+ /** The graph to read (every graph when omitted). */
177
+ readonly graph?: Term.Graph | undefined;
178
+ /** The default `PropertyOptions.languages` of every field. */
179
+ readonly languages?: ReadonlyArray<string> | undefined;
180
+ /** Passed to the struct's decoder (e.g. `{ errors: 'all' }`). */
181
+ readonly parseOptions?: SchemaAST.ParseOptions | undefined;
182
+ }
183
+
184
+ /**
185
+ * Options for `encode` and `schema`.
186
+ *
187
+ * @since 0.1.0
188
+ * @category models
189
+ */
190
+ export interface EncodeOptions {
191
+ /** The graph to write the quads into (the default graph when omitted). */
192
+ readonly graph?: Term.Graph | undefined;
193
+ /** Passed to the struct's encoder. */
194
+ readonly parseOptions?: SchemaAST.ParseOptions | undefined;
195
+ }
196
+
197
+ /**
198
+ * One resource `decodeAll` found and decoded.
199
+ *
200
+ * @since 0.1.0
201
+ * @category models
202
+ */
203
+ export interface Decoded<A> {
204
+ readonly subject: Term.Subject;
205
+ readonly value: A;
206
+ }
207
+
208
+ // -----------------------------------------------------------------------------
209
+ // Field plans
210
+ // -----------------------------------------------------------------------------
211
+
212
+ type Cardinality = 'one' | 'many' | 'list';
213
+
214
+ // A struct field's name; numeric keys are not fields of a resource.
215
+ type Key = string | symbol;
216
+
217
+ const keyOf = (signature: SchemaAST.PropertySignature): Option.Option<Key> =>
218
+ Predicate.isNumber(signature.name) ? Option.none() : Option.some(signature.name);
219
+
220
+ interface Field {
221
+ readonly name: Key;
222
+ readonly property: Property;
223
+ readonly cardinality: Cardinality;
224
+ /** The key may be absent: `Schema.optional` / `Schema.optionalKey`. */
225
+ readonly optional: boolean;
226
+ /** The schema of one value. */
227
+ readonly item: SchemaAST.AST;
228
+ }
229
+
230
+ const propertyOf = SchemaAST.resolveAt<Property>(PropertyKey);
231
+ const descriptionOf = SchemaAST.resolveAt<Description>(DescriptionKey);
232
+ const isList = (ast: SchemaAST.AST): boolean => SchemaAST.resolveAt<boolean>(ListKey)(ast) === true;
233
+
234
+ const resolveSuspend = (ast: SchemaAST.AST): SchemaAST.AST =>
235
+ SchemaAST.isSuspend(ast) ? resolveSuspend(ast.thunk()) : ast;
236
+
237
+ // `T | undefined` (what `Schema.optional` wraps a field in) without the `undefined`.
238
+ const withoutUndefined = (ast: SchemaAST.AST): SchemaAST.AST => {
239
+ if (!SchemaAST.isUnion(ast)) return ast;
240
+ const defined = Arr.filter(ast.types, (t) => !SchemaAST.isUndefined(t));
241
+ return defined.length === 1 && defined.length < ast.types.length
242
+ ? Option.getOrElse(Arr.head(defined), () => ast)
243
+ : ast;
244
+ };
245
+
246
+ // An array of encoded values (`Schema.Array(codec)`), as opposed to a codec whose type is an array.
247
+ const arrayItem = (ast: SchemaAST.AST): Option.Option<SchemaAST.AST> =>
248
+ SchemaAST.isArrays(ast) && ast.encoding === undefined && Arr.isReadonlyArrayEmpty(ast.elements)
249
+ ? Arr.head(ast.rest)
250
+ : Option.none();
251
+
252
+ // A nested resource: a struct whose encoded side is itself a record of terms.
253
+ const nestedStruct = (ast: SchemaAST.AST): Option.Option<SchemaAST.Objects> => {
254
+ const resolved = resolveSuspend(ast);
255
+ return SchemaAST.isObjects(resolved) && resolved.encoding === undefined
256
+ ? Option.some(resolved)
257
+ : Option.none();
258
+ };
259
+
260
+ const fieldOf = (signature: SchemaAST.PropertySignature): Option.Option<Field> =>
261
+ Option.flatMap(keyOf(signature), (name) => fieldNamed(name, signature));
262
+
263
+ const fieldNamed = (name: Key, signature: SchemaAST.PropertySignature): Option.Option<Field> => {
264
+ const declared = signature.type;
265
+ const optional = SchemaAST.isOptional(declared);
266
+ const inner = withoutUndefined(declared);
267
+ const element = arrayItem(inner);
268
+ const annotated = Arr.getSomes([
269
+ Option.fromUndefinedOr(propertyOf(declared)),
270
+ Option.fromUndefinedOr(propertyOf(inner)),
271
+ Option.flatMap(element, (e) => Option.fromUndefinedOr(propertyOf(e))),
272
+ ]);
273
+ return Option.map(Arr.head(annotated), (found) =>
274
+ Option.match(element, {
275
+ onNone: () => ({
276
+ name,
277
+ property: found,
278
+ cardinality: 'one' as const,
279
+ optional,
280
+ item: inner,
281
+ }),
282
+ onSome: (item) => ({
283
+ name,
284
+ property: found,
285
+ cardinality: isList(inner) ? ('list' as const) : ('many' as const),
286
+ optional,
287
+ item,
288
+ }),
289
+ }),
290
+ );
291
+ };
292
+
293
+ const expectStruct = (ast: SchemaAST.AST): Effect.Effect<SchemaAST.Objects, SchemaIssue.Issue> =>
294
+ Effect.mapError(
295
+ Effect.fromOption(nestedStruct(ast)),
296
+ () =>
297
+ new SchemaIssue.InvalidValue({
298
+ message: 'Expected a struct schema (Schema.Struct) to map a resource to',
299
+ }),
300
+ );
301
+
302
+ const describedType = (ast: SchemaAST.AST): Option.Option<Term.NamedNode> =>
303
+ Option.fromUndefinedOr(descriptionOf(ast)?.type);
304
+
305
+ const describedId = (ast: SchemaAST.AST): Option.Option<string> =>
306
+ Option.fromUndefinedOr(descriptionOf(ast)?.id);
307
+
308
+ // -----------------------------------------------------------------------------
309
+ // Decoding
310
+ // -----------------------------------------------------------------------------
311
+
312
+ interface DecodeContext {
313
+ readonly dataset: Dataset.Dataset;
314
+ readonly options: DecodeOptions;
315
+ }
316
+
317
+ type Visit = readonly [SchemaAST.AST, Term.Subject];
318
+
319
+ const languageOf = (term: Term.Term): string =>
320
+ Term.isLiteral(term) ? LanguageTag.normalize(term.language) : '';
321
+
322
+ const hasLanguage =
323
+ (tag: string) =>
324
+ (term: Term.Term): boolean =>
325
+ languageOf(term) === LanguageTag.normalize(tag);
326
+
327
+ // The values of a field, before cardinality: sorted for determinism, then narrowed by language.
328
+ const valuesOf = (
329
+ context: DecodeContext,
330
+ subject: Term.Subject,
331
+ field: Field,
332
+ ): ReadonlyArray<Term.Object> => {
333
+ const { predicate, inverse } = field.property;
334
+ const terms: ReadonlyArray<Term.Object> =
335
+ inverse === true
336
+ ? Dataset.subjectsOf(context.dataset, predicate, subject, context.options.graph)
337
+ : Dataset.objectsOf(context.dataset, subject, predicate, context.options.graph);
338
+ const sorted = Arr.sort(terms, Term.Order);
339
+ const languages = field.property.languages ?? context.options.languages;
340
+ if (languages === undefined) return sorted;
341
+ if (field.cardinality === 'one') {
342
+ return Arr.fromOption(
343
+ Arr.findFirst(languages, (tag) => Arr.findFirst(sorted, hasLanguage(tag))),
344
+ );
345
+ }
346
+ return Arr.dedupe(Arr.flatMap(languages, (tag) => Arr.filter(sorted, hasLanguage(tag))));
347
+ };
348
+
349
+ const describePredicate = (field: Field): string =>
350
+ field.property.inverse === true
351
+ ? `^${field.property.predicate.toString()}`
352
+ : field.property.predicate.toString();
353
+
354
+ const atField =
355
+ (field: Field, ...path: ReadonlyArray<PropertyKey>) =>
356
+ (issue: SchemaIssue.Issue): SchemaIssue.Issue =>
357
+ new SchemaIssue.Pointer([field.name, ...path], issue);
358
+
359
+ const missing = (field: Field): SchemaIssue.Issue =>
360
+ atField(field)(
361
+ new SchemaIssue.MissingKey({
362
+ messageMissingKey: `Missing value for ${describePredicate(field)}`,
363
+ predicate: field.property.predicate.value,
364
+ }),
365
+ );
366
+
367
+ const tooMany = (field: Field, values: ReadonlyArray<Term.Object>): SchemaIssue.Issue =>
368
+ atField(field)(
369
+ new SchemaIssue.InvalidValue(
370
+ {
371
+ message: `Expected ${field.optional ? 'at most' : 'exactly'} one value for ${describePredicate(field)}, got ${values.length}`,
372
+ predicate: field.property.predicate.value,
373
+ },
374
+ values,
375
+ ),
376
+ );
377
+
378
+ const isSubjectTerm = (term: Term.Term): term is Term.Subject => Term.isSubject(term);
379
+
380
+ // The encoded value of one field value: the term, or a nested resource's record.
381
+ const encodedValue = (
382
+ context: DecodeContext,
383
+ item: SchemaAST.AST,
384
+ term: Term.Object,
385
+ visits: ReadonlyArray<Visit>,
386
+ ): Effect.Effect<unknown, SchemaIssue.Issue> =>
387
+ Option.match(nestedStruct(item), {
388
+ onNone: () => Effect.succeed(term),
389
+ onSome: () =>
390
+ isSubjectTerm(term)
391
+ ? gather(context, item, term, visits)
392
+ : Effect.fail(
393
+ new SchemaIssue.InvalidValue(
394
+ { message: `Expected an IRI or blank node, got ${term.toString()}` },
395
+ term,
396
+ ),
397
+ ),
398
+ });
399
+
400
+ const encodedValues = (
401
+ context: DecodeContext,
402
+ field: Field,
403
+ terms: ReadonlyArray<Term.Object>,
404
+ visits: ReadonlyArray<Visit>,
405
+ ): Effect.Effect<ReadonlyArray<unknown>, SchemaIssue.Issue> =>
406
+ Effect.forEach(
407
+ terms,
408
+ (term, index) =>
409
+ Effect.mapError(encodedValue(context, field.item, term, visits), atField(field, index)),
410
+ { concurrency: 1 },
411
+ );
412
+
413
+ const listItems = (
414
+ context: DecodeContext,
415
+ field: Field,
416
+ head: Term.Object,
417
+ ): Effect.Effect<ReadonlyArray<Term.Object>, SchemaIssue.Issue> =>
418
+ Effect.mapError(
419
+ Effect.fromOption(Dataset.list(context.dataset, head, context.options.graph)),
420
+ () =>
421
+ atField(field)(
422
+ new SchemaIssue.InvalidValue(
423
+ {
424
+ message: `Expected an RDF list for ${describePredicate(field)}, got ${head.toString()}`,
425
+ predicate: field.property.predicate.value,
426
+ },
427
+ head,
428
+ ),
429
+ ),
430
+ );
431
+
432
+ // The encoded value of a field (`None` leaves the key out), checking its cardinality.
433
+ const encodedField = (
434
+ context: DecodeContext,
435
+ subject: Term.Subject,
436
+ field: Field,
437
+ visits: ReadonlyArray<Visit>,
438
+ ): Effect.Effect<Option.Option<unknown>, SchemaIssue.Issue> => {
439
+ const values = valuesOf(context, subject, field);
440
+ if (field.cardinality === 'many') {
441
+ return Arr.isReadonlyArrayEmpty(values) && field.optional
442
+ ? Effect.succeedNone
443
+ : Effect.asSome(encodedValues(context, field, values, visits));
444
+ }
445
+ return Arr.match(values, {
446
+ onEmpty: () => (field.optional ? Effect.succeedNone : Effect.fail(missing(field))),
447
+ onNonEmpty: ([first, ...rest]) => {
448
+ if (Arr.isArrayNonEmpty(rest)) return Effect.fail(tooMany(field, values));
449
+ return field.cardinality === 'list'
450
+ ? Effect.asSome(
451
+ Effect.flatMap(listItems(context, field, first), (items) =>
452
+ encodedValues(context, field, items, visits),
453
+ ),
454
+ )
455
+ : Effect.asSome(
456
+ Effect.mapError(encodedValue(context, field.item, first, visits), atField(field)),
457
+ );
458
+ },
459
+ });
460
+ };
461
+
462
+ const hasType = (
463
+ context: DecodeContext,
464
+ subject: Term.Subject,
465
+ type: Term.NamedNode,
466
+ ): Effect.Effect<void, SchemaIssue.Issue> =>
467
+ Arr.isReadonlyArrayNonEmpty(
468
+ Dataset.match(context.dataset, {
469
+ subject,
470
+ predicate: rdf.type,
471
+ object: type,
472
+ graph: context.options.graph,
473
+ }),
474
+ )
475
+ ? Effect.void
476
+ : Effect.fail(
477
+ new SchemaIssue.InvalidValue(
478
+ {
479
+ message: `Expected ${subject.toString()} to have rdf:type ${type.toString()}`,
480
+ predicate: rdf.type.value,
481
+ },
482
+ subject,
483
+ ),
484
+ );
485
+
486
+ // The encoded record of a resource: every mapped field's terms (or nested records), so the
487
+ // struct's own decoder turns it into the struct's type.
488
+ const gather = (
489
+ context: DecodeContext,
490
+ ast: SchemaAST.AST,
491
+ subject: Term.Subject,
492
+ visits: ReadonlyArray<Visit>,
493
+ ): Effect.Effect<Record.ReadonlyRecord<Key, unknown>, SchemaIssue.Issue> =>
494
+ Effect.gen(function* () {
495
+ const struct = yield* expectStruct(ast);
496
+ if (Arr.some(visits, ([seen, at]) => seen === struct && Equal.equals(at, subject))) {
497
+ return yield* Effect.fail(
498
+ new SchemaIssue.InvalidValue(
499
+ { message: `Cycle: ${subject.toString()} is already being decoded as this resource` },
500
+ subject,
501
+ ),
502
+ );
503
+ }
504
+ yield* Option.match(describedType(struct), {
505
+ onNone: () => Effect.void,
506
+ onSome: (type) => hasType(context, subject, type),
507
+ });
508
+ const id = describedId(struct);
509
+ const inner: ReadonlyArray<Visit> = [...visits, [struct, subject]];
510
+ const entries = yield* Effect.forEach(
511
+ struct.propertySignatures,
512
+ (signature): Effect.Effect<Option.Option<readonly [Key, unknown]>, SchemaIssue.Issue> =>
513
+ Option.match(keyOf(signature), {
514
+ onNone: () => Effect.succeedNone,
515
+ onSome: (name) =>
516
+ Option.contains(id, name)
517
+ ? Effect.succeedSome([name, subject])
518
+ : Option.match(fieldNamed(name, signature), {
519
+ onNone: () => Effect.succeedNone,
520
+ onSome: (field) =>
521
+ Effect.map(
522
+ encodedField(context, subject, field, inner),
523
+ Option.map((value) => [name, value]),
524
+ ),
525
+ }),
526
+ }),
527
+ { concurrency: 1 },
528
+ );
529
+ return Record.fromEntries(Arr.getSomes(entries));
530
+ });
531
+
532
+ const contextOf = (dataset: Dataset.Dataset, options: DecodeOptions): DecodeContext => ({
533
+ dataset,
534
+ options,
535
+ });
536
+
537
+ const decodeIssue = <S extends Schema.Constraint>(
538
+ schema: S,
539
+ dataset: Dataset.Dataset,
540
+ subject: Term.Subject,
541
+ options: DecodeOptions,
542
+ parseOptions?: SchemaAST.ParseOptions,
543
+ ): Effect.Effect<S['Type'], SchemaIssue.Issue, S['DecodingServices']> =>
544
+ Effect.flatMap(gather(contextOf(dataset, options), schema.ast, subject, []), (record) =>
545
+ SchemaParser.decodeEffect(schema)(record, parseOptions ?? options.parseOptions),
546
+ );
547
+
548
+ const toSchemaError = (issue: SchemaIssue.Issue): Schema.SchemaError =>
549
+ new Schema.SchemaError(issue);
550
+
551
+ /**
552
+ * Decodes the resource `subject` of `dataset` with a struct of `property`
553
+ * fields: reads each field's values, checks their number against the field's
554
+ * cardinality, decodes nested resources recursively and runs the struct's
555
+ * decoder over the result.
556
+ *
557
+ * @since 0.1.0
558
+ * @category decoding
559
+ */
560
+ export const decode =
561
+ <S extends Schema.Constraint>(schema: S) =>
562
+ (
563
+ dataset: Dataset.Dataset,
564
+ subject: Term.Subject,
565
+ options?: DecodeOptions,
566
+ ): Effect.Effect<S['Type'], Schema.SchemaError, S['DecodingServices']> =>
567
+ Effect.mapError(decodeIssue(schema, dataset, subject, options ?? {}), toSchemaError);
568
+
569
+ /**
570
+ * Decodes every resource whose `rdf:type` is the struct's described `type`
571
+ * (in `Term.Order` of the subjects). Fails on the first resource that does
572
+ * not decode, with the subject at the head of the issue's path; fails when
573
+ * the struct has no described `type`.
574
+ *
575
+ * @since 0.1.0
576
+ * @category decoding
577
+ */
578
+ export const decodeAll =
579
+ <S extends Schema.Constraint>(schema: S) =>
580
+ (
581
+ dataset: Dataset.Dataset,
582
+ options?: DecodeOptions,
583
+ ): Effect.Effect<ReadonlyArray<Decoded<S['Type']>>, Schema.SchemaError, S['DecodingServices']> =>
584
+ Option.match(describedType(schema.ast), {
585
+ onNone: () =>
586
+ Effect.fail(
587
+ toSchemaError(
588
+ new SchemaIssue.InvalidValue({
589
+ message: 'Resource.decodeAll needs a struct described with a type',
590
+ }),
591
+ ),
592
+ ),
593
+ onSome: (type) =>
594
+ Effect.forEach(
595
+ Arr.sort(Dataset.subjectsOf(dataset, rdf.type, type, options?.graph), Term.Order),
596
+ (subject) =>
597
+ Effect.mapBoth(decodeIssue(schema, dataset, subject, options ?? {}), {
598
+ onFailure: (issue) => toSchemaError(new SchemaIssue.Pointer([subject.key], issue)),
599
+ onSuccess: (value): Decoded<S['Type']> => ({ subject, value }),
600
+ }),
601
+ { concurrency: 1 },
602
+ ),
603
+ });
604
+
605
+ // -----------------------------------------------------------------------------
606
+ // Encoding
607
+ // -----------------------------------------------------------------------------
608
+
609
+ interface Emitted {
610
+ readonly subject: Term.Subject;
611
+ readonly quads: ReadonlyArray<Term.Quad>;
612
+ }
613
+
614
+ // What a struct encodes to: one entry per field.
615
+ type EncodedRecord = Record.ReadonlyRecord<Key, unknown>;
616
+
617
+ const isEncodedRecord = (u: unknown): u is EncodedRecord =>
618
+ Predicate.isObject(u) && !Term.isTerm(u);
619
+
620
+ const read = (record: EncodedRecord, key: Key): Option.Option<unknown> =>
621
+ Option.filter(Record.get(record, key), Predicate.isNotUndefined);
622
+
623
+ const unexpected = (expected: string): SchemaIssue.Issue =>
624
+ new SchemaIssue.InvalidValue({ message: `Expected the codec to encode to ${expected}` });
625
+
626
+ const statement = (
627
+ field: Field,
628
+ subject: Term.Subject,
629
+ value: Term.Object,
630
+ graph: Term.Graph,
631
+ ): Effect.Effect<Term.Quad, SchemaIssue.Issue> => {
632
+ const predicate = field.property.predicate;
633
+ if (field.property.inverse !== true) {
634
+ return Effect.succeed(new Term.Quad(subject, predicate, value, graph));
635
+ }
636
+ return isSubjectTerm(value)
637
+ ? Effect.succeed(new Term.Quad(value, predicate, subject, graph))
638
+ : Effect.fail(
639
+ atField(field)(
640
+ new SchemaIssue.InvalidValue(
641
+ {
642
+ message: `Expected an IRI or blank node for ${describePredicate(field)}, got ${value.toString()}`,
643
+ predicate: predicate.value,
644
+ },
645
+ value,
646
+ ),
647
+ ),
648
+ );
649
+ };
650
+
651
+ // An RDF collection of `items`: its head and the `rdf:first` / `rdf:rest` quads.
652
+ const collection = (
653
+ items: ReadonlyArray<Term.Object>,
654
+ graph: Term.Graph,
655
+ ): readonly [Term.Object, ReadonlyArray<Term.Quad>] => {
656
+ const nodes = Arr.map(items, () => Term.blankNode());
657
+ const rests: ReadonlyArray<Term.Object> = [...Arr.drop(nodes, 1), rdf.nil];
658
+ const quads = Arr.flatMap(Arr.zip(nodes, Arr.zip(items, rests)), ([node, [item, rest]]) => [
659
+ new Term.Quad(node, rdf.first, item, graph),
660
+ new Term.Quad(node, rdf.rest, rest, graph),
661
+ ]);
662
+ return [Option.getOrElse(Arr.head(nodes), (): Term.Object => rdf.nil), quads];
663
+ };
664
+
665
+ // The term for one encoded value of a field, with the quads of a nested resource.
666
+ type Emittable = readonly [Term.Object, ReadonlyArray<Term.Quad>];
667
+
668
+ // The statements of one field of `record`, with the quads of its nested resources.
669
+ const emitField = (
670
+ field: Field,
671
+ subject: Term.Subject,
672
+ record: EncodedRecord,
673
+ graph: Term.Graph,
674
+ ): Effect.Effect<ReadonlyArray<Term.Quad>, SchemaIssue.Issue> =>
675
+ Effect.gen(function* () {
676
+ const items: ReadonlyArray<unknown> = Option.match(read(record, field.name), {
677
+ onNone: () => [],
678
+ onSome: (v) => (field.cardinality !== 'one' && Arr.isArray(v) ? v : [v]),
679
+ });
680
+ const nested = nestedStruct(field.item);
681
+ const emitted = yield* Effect.forEach(
682
+ items,
683
+ (item, index): Effect.Effect<Emittable, SchemaIssue.Issue> => {
684
+ const at = field.cardinality === 'one' ? atField(field) : atField(field, index);
685
+ return Option.match(nested, {
686
+ onNone: () =>
687
+ Term.isObject(item)
688
+ ? Effect.succeed([item, []])
689
+ : Effect.fail(at(unexpected('an RDF term'))),
690
+ onSome: (struct) =>
691
+ isEncodedRecord(item)
692
+ ? Effect.mapBoth(emit(struct, Option.none(), item, graph), {
693
+ onFailure: at,
694
+ onSuccess: (out): Emittable => [out.subject, out.quads],
695
+ })
696
+ : Effect.fail(at(unexpected('a record'))),
697
+ });
698
+ },
699
+ { concurrency: 1 },
700
+ );
701
+ const inner = Arr.flatMap(emitted, ([, quads]) => quads);
702
+ const terms = Arr.map(emitted, ([term]) => term);
703
+ if (field.cardinality === 'list' && Option.isSome(read(record, field.name))) {
704
+ const [head, links] = collection(terms, graph);
705
+ const link = yield* statement(field, subject, head, graph);
706
+ return [link, ...links, ...inner];
707
+ }
708
+ const links = yield* Effect.forEach(terms, (term) => statement(field, subject, term, graph), {
709
+ concurrency: 1,
710
+ });
711
+ return [...links, ...inner];
712
+ });
713
+
714
+ // The quads of an encoded record: its type, each mapped field's statements and nested resources.
715
+ const emit = (
716
+ struct: SchemaAST.Objects,
717
+ given: Option.Option<Term.Subject>,
718
+ record: EncodedRecord,
719
+ graph: Term.Graph,
720
+ ): Effect.Effect<Emitted, SchemaIssue.Issue> =>
721
+ Effect.gen(function* () {
722
+ const id = describedId(struct);
723
+ const subject = Option.getOrElse(
724
+ Option.orElse(given, () =>
725
+ Option.filter(
726
+ Option.flatMap(id, (key) => read(record, key)),
727
+ (term): term is Term.Subject => Term.isSubject(term),
728
+ ),
729
+ ),
730
+ (): Term.Subject => Term.blankNode(),
731
+ );
732
+ const typed = Arr.map(
733
+ Arr.fromOption(describedType(struct)),
734
+ (type) => new Term.Quad(subject, rdf.type, type, graph),
735
+ );
736
+ const fields = Arr.filter(
737
+ Arr.getSomes(Arr.map(struct.propertySignatures, fieldOf)),
738
+ (field) => !Option.contains(id, field.name),
739
+ );
740
+ const quads = yield* Effect.forEach(
741
+ fields,
742
+ (field) => emitField(field, subject, record, graph),
743
+ { concurrency: 1 },
744
+ );
745
+ return { subject, quads: [...typed, ...Arr.flatten(quads)] };
746
+ });
747
+
748
+ const encodeIssue = <S extends Schema.Constraint>(
749
+ schema: S,
750
+ subject: Option.Option<Term.Subject>,
751
+ value: S['Type'],
752
+ options: EncodeOptions,
753
+ parseOptions?: SchemaAST.ParseOptions,
754
+ ): Effect.Effect<Emitted, SchemaIssue.Issue, S['EncodingServices']> =>
755
+ Effect.gen(function* () {
756
+ const struct = yield* expectStruct(schema.ast);
757
+ const record = yield* SchemaParser.encodeEffect(schema)(
758
+ value,
759
+ parseOptions ?? options.parseOptions,
760
+ );
761
+ return isEncodedRecord(record)
762
+ ? yield* emit(struct, subject, record, options.graph ?? Term.defaultGraph)
763
+ : yield* Effect.fail(unexpected('a record'));
764
+ });
765
+
766
+ /**
767
+ * Encodes `value` as the resource `subject`: the struct's encoder turns each
768
+ * field into terms, written as `subject predicate term` quads (or
769
+ * `term predicate subject` for an `inverse` field), with an `rdf:type` quad
770
+ * for a described type, RDF collections for `list` fields and the quads of
771
+ * nested resources.
772
+ *
773
+ * @since 0.1.0
774
+ * @category encoding
775
+ */
776
+ export const encode =
777
+ <S extends Schema.Constraint>(schema: S) =>
778
+ (
779
+ subject: Term.Subject,
780
+ value: S['Type'],
781
+ options?: EncodeOptions,
782
+ ): Effect.Effect<ReadonlyArray<Term.Quad>, Schema.SchemaError, S['EncodingServices']> =>
783
+ Effect.mapBoth(encodeIssue(schema, Option.some(subject), value, options ?? {}), {
784
+ onFailure: toSchemaError,
785
+ onSuccess: (out) => out.quads,
786
+ });
787
+
788
+ // -----------------------------------------------------------------------------
789
+ // Schema form
790
+ // -----------------------------------------------------------------------------
791
+
792
+ /**
793
+ * A subject term: an IRI, blank node or triple term.
794
+ *
795
+ * @since 0.1.0
796
+ * @category schemas
797
+ */
798
+ export const SubjectSchema: Schema.Union<
799
+ readonly [
800
+ Schema.declare<Term.NamedNode>,
801
+ Schema.declare<Term.BlankNode>,
802
+ Schema.declare<Term.Triple>,
803
+ ]
804
+ > = Schema.Union([Term.NamedNodeSchema, Term.BlankNodeSchema, Term.TripleSchema]);
805
+
806
+ /**
807
+ * The type `SubjectSchema` decodes to: `Term.Subject`.
808
+ *
809
+ * @since 0.1.0
810
+ * @category schemas
811
+ */
812
+ export type SubjectSchema = typeof SubjectSchema.Type;
813
+
814
+ /**
815
+ * The encoded side of `schema`: a dataset and the resource in it.
816
+ *
817
+ * @since 0.1.0
818
+ * @category schemas
819
+ */
820
+ export const InputSchema: Schema.Struct<{
821
+ readonly dataset: Schema.declare<Dataset.Dataset>;
822
+ readonly subject: typeof SubjectSchema;
823
+ }> = Schema.Struct({ dataset: Dataset.DatasetSchema, subject: SubjectSchema });
824
+
825
+ /**
826
+ * The type `InputSchema` decodes to: `{ dataset, subject }`.
827
+ *
828
+ * @since 0.1.0
829
+ * @category schemas
830
+ */
831
+ export type InputSchema = typeof InputSchema.Type;
832
+
833
+ /**
834
+ * The `Schema` form of `decode` / `encode`: decodes `{ dataset, subject }`
835
+ * to the struct's type, and encodes a value to the dataset of its quads with
836
+ * the resource as `subject` (its `describe`d id, or a fresh blank node). It
837
+ * composes with `Schema.decodeTo`, `Schema.decodeUnknownEffect` and the rest
838
+ * of the `Schema` API.
839
+ *
840
+ * @since 0.1.0
841
+ * @category schemas
842
+ */
843
+ export const schema = <S extends Schema.Top>(
844
+ self: S,
845
+ options?: DecodeOptions & EncodeOptions,
846
+ ): Schema.decodeTo<
847
+ Schema.toType<S>,
848
+ typeof InputSchema,
849
+ S['DecodingServices'],
850
+ S['EncodingServices']
851
+ > =>
852
+ InputSchema.pipe(
853
+ Schema.decodeTo(
854
+ Schema.toType(self),
855
+ SchemaTransformation.transformEffect<
856
+ S['Type'],
857
+ InputSchema,
858
+ S['DecodingServices'],
859
+ S['EncodingServices']
860
+ >({
861
+ decode: (input, parseOptions) =>
862
+ decodeIssue(self, input.dataset, input.subject, options ?? {}, parseOptions),
863
+ encode: (value, parseOptions) =>
864
+ Effect.map(
865
+ encodeIssue(self, Option.none(), value, options ?? {}, parseOptions),
866
+ (out): InputSchema => ({
867
+ dataset: Dataset.fromIterable(out.quads),
868
+ subject: out.subject,
869
+ }),
870
+ ),
871
+ }),
872
+ ),
873
+ );