@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
package/src/Term.ts ADDED
@@ -0,0 +1,1300 @@
1
+ /**
2
+ * The RDF 1.2 term model.
3
+ *
4
+ * Terms are immutable values that implement Effect's `Equal` and `Hash`
5
+ * protocols, so they can be used directly as keys of `HashMap`/`HashSet` and
6
+ * compared with `Equal.equals`. Every term carries a canonical `key` — its
7
+ * N-Triples / N-Quads serialisation — which is also what `toString()` returns.
8
+ *
9
+ * The model supports RDF 1.2 (and RDF-star) triple terms, directional
10
+ * language-tagged strings, and SPARQL variables (used only in patterns).
11
+ *
12
+ * @since 0.1.0
13
+ */
14
+ import * as Effect from 'effect/Effect';
15
+ import * as Equal from 'effect/Equal';
16
+ import * as equivalence from 'effect/Equivalence';
17
+ import * as Hash from 'effect/Hash';
18
+ import { NodeInspectSymbol } from 'effect/Inspectable';
19
+ import * as Match from 'effect/Match';
20
+ import * as order from 'effect/Order';
21
+ import { pipeArguments, type Pipeable } from 'effect/Pipeable';
22
+ import { hasProperty, isString, isTagged } from 'effect/Predicate';
23
+ import * as Schema from 'effect/Schema';
24
+ import * as SchemaIssue from 'effect/SchemaIssue';
25
+ import * as SchemaTransformation from 'effect/SchemaTransformation';
26
+ import type * as SchemaAST from 'effect/SchemaAST';
27
+ import * as TermJson from './TermJson.ts';
28
+ import { representations as Generate } from './internal/arbitrary.ts';
29
+
30
+ const RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
31
+ const XSD = 'http://www.w3.org/2001/XMLSchema#';
32
+
33
+ /**
34
+ * @since 0.1.0
35
+ * @category symbols
36
+ */
37
+ export const TypeId: unique symbol = Symbol.for('@thomasfosterau/effect-rdf/Term');
38
+
39
+ /**
40
+ * @since 0.1.0
41
+ * @category symbols
42
+ */
43
+ export type TypeId = typeof TypeId;
44
+
45
+ /**
46
+ * The base direction of a directional language-tagged string.
47
+ *
48
+ * @since 0.1.0
49
+ * @category models
50
+ */
51
+ export type Direction = 'ltr' | 'rtl';
52
+
53
+ /** `isTerm` for a value already known to be an object. */
54
+ const hasTermTypeId = (u: Equal.Equal): u is Term => TypeId in u;
55
+
56
+ /** Mixed into the hashes of blank nodes and variables, so that `_:a` and `?a` differ from `<a>`. */
57
+ const BLANK_SALT = 0x5f3a;
58
+ const VARIABLE_SALT = 0x3f;
59
+
60
+ abstract class TermBase implements Equal.Equal, Pipeable {
61
+ readonly [TypeId]: TypeId = TypeId;
62
+ abstract readonly _tag: string;
63
+ // Computed on first use. `''` stands for "not yet": only the default graph has the empty key,
64
+ // and computing it again is free. (A flag rather than a `NaN` hash, which would be a boxed
65
+ // number in every term.)
66
+ #key = '';
67
+ #hash = 0;
68
+ #hashed = false;
69
+
70
+ /** The canonical N-Triples serialisation of this term. */
71
+ get key(): string {
72
+ if (this.#key === '') this.#key = this.computeKey();
73
+ return this.#key;
74
+ }
75
+
76
+ protected abstract computeKey(): string;
77
+
78
+ /** RDF/JS compatible alias of `_tag`. */
79
+ get termType(): this['_tag'] {
80
+ return this._tag;
81
+ }
82
+
83
+ /** RDF/JS compatible equality. */
84
+ equals(that: unknown): boolean {
85
+ return isTerm(that) && that.key === this.key;
86
+ }
87
+
88
+ [Equal.symbol](that: Equal.Equal): boolean {
89
+ return hasTermTypeId(that) && that.key === this.key;
90
+ }
91
+
92
+ [Hash.symbol](): number {
93
+ if (!this.#hashed) {
94
+ this.#hash = this.computeHash();
95
+ this.#hashed = true;
96
+ }
97
+ return this.#hash;
98
+ }
99
+
100
+ /**
101
+ * The hash, consistent with `key` (terms with equal keys have equal
102
+ * hashes). IRIs, blank nodes, variables and literals hash their parts, so
103
+ * that hashing one builds no key.
104
+ */
105
+ protected computeHash(): number {
106
+ return Hash.string(this.key);
107
+ }
108
+
109
+ pipe() {
110
+ return pipeArguments(this, arguments);
111
+ }
112
+
113
+ toString(): string {
114
+ return this.key;
115
+ }
116
+
117
+ toJSON() {
118
+ return { _tag: this._tag, value: this.key };
119
+ }
120
+
121
+ [NodeInspectSymbol](): string {
122
+ return `${this._tag}(${this.key})`;
123
+ }
124
+ }
125
+
126
+ /**
127
+ * An IRI.
128
+ *
129
+ * @since 0.1.0
130
+ * @category models
131
+ */
132
+ export class NamedNode<out Iri extends string = string> extends TermBase {
133
+ readonly _tag = 'NamedNode' as const;
134
+ readonly value: Iri;
135
+ constructor(value: Iri) {
136
+ super();
137
+ this.value = value;
138
+ }
139
+ protected computeKey(): string {
140
+ return `<${escapeIri(this.value)}>`;
141
+ }
142
+ protected override computeHash(): number {
143
+ return Hash.string(this.value);
144
+ }
145
+ }
146
+
147
+ /**
148
+ * A blank node. Labels are scoped to the dataset or document that contains
149
+ * them.
150
+ *
151
+ * @since 0.1.0
152
+ * @category models
153
+ */
154
+ export class BlankNode extends TermBase {
155
+ readonly _tag = 'BlankNode' as const;
156
+ readonly value: string;
157
+ constructor(value: string) {
158
+ super();
159
+ this.value = value;
160
+ }
161
+ protected computeKey(): string {
162
+ return `_:${this.value}`;
163
+ }
164
+ protected override computeHash(): number {
165
+ return Hash.combine(Hash.string(this.value), BLANK_SALT);
166
+ }
167
+ }
168
+
169
+ /**
170
+ * A literal. Language-tagged strings have datatype `rdf:langString`, and
171
+ * directional language-tagged strings (RDF 1.2) have datatype
172
+ * `rdf:dirLangString`.
173
+ *
174
+ * @since 0.1.0
175
+ * @category models
176
+ */
177
+ export class Literal extends TermBase {
178
+ readonly _tag = 'Literal' as const;
179
+ readonly value: string;
180
+ readonly datatype: NamedNode;
181
+ readonly language: string;
182
+ readonly direction: Direction | undefined;
183
+ constructor(value: string, datatype: NamedNode, language: string = '', direction?: Direction) {
184
+ super();
185
+ this.value = value;
186
+ this.datatype = datatype;
187
+ this.language = language;
188
+ this.direction = direction;
189
+ }
190
+ protected computeKey(): string {
191
+ const lexical = `"${escapeString(this.value)}"`;
192
+ if (this.language !== '') {
193
+ return this.direction === undefined
194
+ ? `${lexical}@${this.language}`
195
+ : `${lexical}@${this.language}--${this.direction}`;
196
+ }
197
+ if (this.datatype.value === XSD_STRING) return lexical;
198
+ return `${lexical}^^${this.datatype.key}`;
199
+ }
200
+ protected override computeHash(): number {
201
+ const h = Hash.combine(Hash.string(this.value), this.datatype[Hash.symbol]());
202
+ return this.language === '' ? h : Hash.combine(h, Hash.string(this.language));
203
+ }
204
+ }
205
+
206
+ /**
207
+ * A SPARQL query variable. Variables never appear in RDF data; they are used
208
+ * in quad patterns.
209
+ *
210
+ * @since 0.1.0
211
+ * @category models
212
+ */
213
+ export class Variable<out Name extends string = string> extends TermBase {
214
+ readonly _tag = 'Variable' as const;
215
+ readonly value: Name;
216
+ constructor(value: Name) {
217
+ super();
218
+ this.value = value;
219
+ }
220
+ protected computeKey(): string {
221
+ return `?${this.value}`;
222
+ }
223
+ protected override computeHash(): number {
224
+ return Hash.combine(Hash.string(this.value), VARIABLE_SALT);
225
+ }
226
+ }
227
+
228
+ /**
229
+ * The default graph of a dataset.
230
+ *
231
+ * @since 0.1.0
232
+ * @category models
233
+ */
234
+ export class DefaultGraph extends TermBase {
235
+ readonly _tag = 'DefaultGraph' as const;
236
+ readonly value = '' as const;
237
+ protected computeKey(): string {
238
+ return '';
239
+ }
240
+ }
241
+
242
+ /**
243
+ * An RDF triple. Triples are also terms (RDF 1.2 "triple terms", RDF-star
244
+ * "quoted triples") and may appear in the subject or object position of
245
+ * other triples.
246
+ *
247
+ * @since 0.1.0
248
+ * @category models
249
+ */
250
+ export class Triple<
251
+ out S extends Subject = Subject,
252
+ out P extends Predicate = Predicate,
253
+ out O extends Object = Object,
254
+ > extends TermBase {
255
+ readonly _tag = 'Triple' as const;
256
+ readonly subject: S;
257
+ readonly predicate: P;
258
+ readonly object: O;
259
+ constructor(subject: S, predicate: P, object: O) {
260
+ super();
261
+ this.subject = subject;
262
+ this.predicate = predicate;
263
+ this.object = object;
264
+ }
265
+ protected computeKey(): string {
266
+ return `<<( ${this.subject.key} ${this.predicate.key} ${this.object.key} )>>`;
267
+ }
268
+ /** Always the default graph: a triple term carries no graph name. */
269
+ get graph(): DefaultGraph {
270
+ return defaultGraph;
271
+ }
272
+ }
273
+
274
+ /**
275
+ * An RDF quad: a triple together with the graph that contains it.
276
+ *
277
+ * `Quad` is a statement, not a term; use `Triple` for triple terms.
278
+ *
279
+ * @since 0.1.0
280
+ * @category models
281
+ */
282
+ export class Quad<
283
+ out S extends Subject = Subject,
284
+ out P extends Predicate = Predicate,
285
+ out O extends Object = Object,
286
+ out G extends Graph = Graph,
287
+ >
288
+ implements Equal.Equal, Pipeable
289
+ {
290
+ readonly _tag = 'Quad' as const;
291
+ // Computed on first use; `''` stands for "not yet" (no statement has an empty key).
292
+ #key = '';
293
+ #hash = 0;
294
+ #hashed = false;
295
+ readonly subject: S;
296
+ readonly predicate: P;
297
+ readonly object: O;
298
+ readonly graph: G;
299
+ constructor(subject: S, predicate: P, object: O, graph: G) {
300
+ this.subject = subject;
301
+ this.predicate = predicate;
302
+ this.object = object;
303
+ this.graph = graph;
304
+ }
305
+
306
+ /** The canonical N-Quads statement (without the trailing ` .`). */
307
+ get key(): string {
308
+ if (this.#key === '') {
309
+ const triple = `${this.subject.key} ${this.predicate.key} ${this.object.key}`;
310
+ this.#key = this.graph._tag === 'DefaultGraph' ? triple : `${triple} ${this.graph.key}`;
311
+ }
312
+ return this.#key;
313
+ }
314
+
315
+ /** The triple of this quad, without its graph. */
316
+ get triple(): Triple<S, P, O> {
317
+ return new Triple(this.subject, this.predicate, this.object);
318
+ }
319
+
320
+ equals(that: unknown): boolean {
321
+ return isQuad(that) && that.key === this.key;
322
+ }
323
+
324
+ [Equal.symbol](that: Equal.Equal): boolean {
325
+ return that instanceof Quad && that.key === this.key;
326
+ }
327
+
328
+ [Hash.symbol](): number {
329
+ if (!this.#hashed) {
330
+ this.#hash = Hash.string(this.key);
331
+ this.#hashed = true;
332
+ }
333
+ return this.#hash;
334
+ }
335
+
336
+ pipe() {
337
+ return pipeArguments(this, arguments);
338
+ }
339
+
340
+ toString(): string {
341
+ return `${this.key} .`;
342
+ }
343
+
344
+ toJSON() {
345
+ return { _tag: 'Quad' as const, value: this.toString() };
346
+ }
347
+
348
+ [NodeInspectSymbol](): string {
349
+ return `Quad(${this.key})`;
350
+ }
351
+ }
352
+
353
+ // -----------------------------------------------------------------------------
354
+ // Unions
355
+ // -----------------------------------------------------------------------------
356
+
357
+ /**
358
+ * Any RDF term.
359
+ *
360
+ * @since 0.1.0
361
+ * @category models
362
+ */
363
+ export type Term = NamedNode | BlankNode | Literal | Variable | DefaultGraph | Triple;
364
+
365
+ /**
366
+ * Terms allowed in the subject position of RDF data.
367
+ *
368
+ * @since 0.1.0
369
+ * @category models
370
+ */
371
+ export type Subject = NamedNode | BlankNode | Triple;
372
+
373
+ /**
374
+ * Terms allowed in the predicate position of RDF data.
375
+ *
376
+ * @since 0.1.0
377
+ * @category models
378
+ */
379
+ export type Predicate = NamedNode;
380
+
381
+ /**
382
+ * Terms allowed in the object position of RDF data.
383
+ *
384
+ * @since 0.1.0
385
+ * @category models
386
+ */
387
+ export type Object = NamedNode | BlankNode | Literal | Triple;
388
+
389
+ /**
390
+ * Terms allowed as graph names.
391
+ *
392
+ * @since 0.1.0
393
+ * @category models
394
+ */
395
+ export type Graph = NamedNode | BlankNode | DefaultGraph;
396
+
397
+ /**
398
+ * Ground terms: terms that may appear in RDF data (everything except
399
+ * variables and the default graph marker).
400
+ *
401
+ * @since 0.1.0
402
+ * @category models
403
+ */
404
+ export type GroundTerm = NamedNode | BlankNode | Literal | Triple;
405
+
406
+ /**
407
+ * IRIs and blank nodes.
408
+ *
409
+ * @since 0.1.0
410
+ * @category models
411
+ */
412
+ export type Resource = NamedNode | BlankNode;
413
+
414
+ /**
415
+ * A term or variable in a quad pattern.
416
+ *
417
+ * @since 0.1.0
418
+ * @category models
419
+ */
420
+ export type PatternTerm<T extends Term> = T | Variable;
421
+
422
+ // -----------------------------------------------------------------------------
423
+ // Constructors
424
+ // -----------------------------------------------------------------------------
425
+
426
+ /**
427
+ * The singleton default graph.
428
+ *
429
+ * @since 0.1.0
430
+ * @category constructors
431
+ */
432
+ export const defaultGraph: DefaultGraph = new DefaultGraph();
433
+
434
+ /**
435
+ * @since 0.1.0
436
+ * @category constructors
437
+ */
438
+ export const namedNode = <const Iri extends string>(iri: Iri): NamedNode<Iri> => new NamedNode(iri);
439
+
440
+ let blankNodeCounter = 0;
441
+
442
+ /**
443
+ * Creates a blank node. When no label is given a fresh, process-unique label
444
+ * is generated.
445
+ *
446
+ * @since 0.1.0
447
+ * @category constructors
448
+ */
449
+ export const blankNode = (label?: string): BlankNode =>
450
+ new BlankNode(label ?? `b${(blankNodeCounter++).toString(36)}`);
451
+
452
+ /**
453
+ * @since 0.1.0
454
+ * @category constructors
455
+ */
456
+ export const variable = <const Name extends string>(name: Name): Variable<Name> =>
457
+ new Variable(name);
458
+
459
+ /** @internal */
460
+ export const XSD_STRING = `${XSD}string`;
461
+ /** @internal */
462
+ export const RDF_LANG_STRING = `${RDF}langString`;
463
+ /** @internal */
464
+ export const RDF_DIR_LANG_STRING = `${RDF}dirLangString`;
465
+
466
+ const xsdString = new NamedNode(XSD_STRING);
467
+ const rdfLangString = new NamedNode(RDF_LANG_STRING);
468
+ const rdfDirLangString = new NamedNode(RDF_DIR_LANG_STRING);
469
+
470
+ /**
471
+ * Creates a literal.
472
+ *
473
+ * - `literal("x")` is an `xsd:string`
474
+ * - `literal("x", "en")` is a language-tagged string
475
+ * - `literal("x", { language: "ar", direction: "rtl" })` is a directional
476
+ * language-tagged string
477
+ * - `literal("1", xsd.integer)` is a typed literal
478
+ *
479
+ * Language tags are normalised to lower case.
480
+ *
481
+ * @since 0.1.0
482
+ * @category constructors
483
+ */
484
+ export const literal = (
485
+ value: string,
486
+ languageOrDatatype?:
487
+ | string
488
+ | NamedNode
489
+ | { readonly language: string; readonly direction?: Direction | undefined },
490
+ ): Literal => {
491
+ if (languageOrDatatype === undefined) return new Literal(value, xsdString);
492
+ if (isString(languageOrDatatype)) {
493
+ return new Literal(value, rdfLangString, languageOrDatatype.toLowerCase());
494
+ }
495
+ if ('language' in languageOrDatatype) {
496
+ const language = languageOrDatatype.language.toLowerCase();
497
+ return languageOrDatatype.direction === undefined
498
+ ? new Literal(value, rdfLangString, language)
499
+ : new Literal(value, rdfDirLangString, language, languageOrDatatype.direction);
500
+ }
501
+ if (
502
+ languageOrDatatype.value === RDF_LANG_STRING ||
503
+ languageOrDatatype.value === RDF_DIR_LANG_STRING
504
+ ) {
505
+ // A language-tagged datatype without a language tag is invalid; keep the
506
+ // lexical form but fall back to a plain string.
507
+ return new Literal(value, xsdString);
508
+ }
509
+ return new Literal(value, languageOrDatatype);
510
+ };
511
+
512
+ /**
513
+ * Creates a triple (and triple term).
514
+ *
515
+ * @since 0.1.0
516
+ * @category constructors
517
+ */
518
+ export const triple = <S extends Subject, P extends Predicate, O extends Object>(
519
+ subject: S,
520
+ predicate: P,
521
+ object: O,
522
+ ): Triple<S, P, O> => new Triple(subject, predicate, object);
523
+
524
+ /**
525
+ * Creates a quad. The graph defaults to the default graph.
526
+ *
527
+ * @since 0.1.0
528
+ * @category constructors
529
+ */
530
+ export function quad<S extends Subject, P extends Predicate, O extends Object>(
531
+ subject: S,
532
+ predicate: P,
533
+ object: O,
534
+ ): Quad<S, P, O, DefaultGraph>;
535
+ export function quad<S extends Subject, P extends Predicate, O extends Object, G extends Graph>(
536
+ subject: S,
537
+ predicate: P,
538
+ object: O,
539
+ graph: G,
540
+ ): Quad<S, P, O, G>;
541
+ export function quad(
542
+ subject: Subject,
543
+ predicate: Predicate,
544
+ object: Object,
545
+ graph: Graph = defaultGraph,
546
+ ): Quad {
547
+ return new Quad(subject, predicate, object, graph);
548
+ }
549
+
550
+ /**
551
+ * Converts a triple to a quad in the given graph (default graph when omitted).
552
+ *
553
+ * @since 0.1.0
554
+ * @category constructors
555
+ */
556
+ export const toQuad = <
557
+ S extends Subject,
558
+ P extends Predicate,
559
+ O extends Object,
560
+ G extends Graph = DefaultGraph,
561
+ >(
562
+ self: Triple<S, P, O>,
563
+ graph?: G,
564
+ ): Quad<S, P, O, G> =>
565
+ // SAFETY: `G` defaults to the default graph type when no graph is given.
566
+ new Quad(self.subject, self.predicate, self.object, (graph ?? defaultGraph) as G);
567
+
568
+ // -----------------------------------------------------------------------------
569
+ // Guards
570
+ // -----------------------------------------------------------------------------
571
+
572
+ /**
573
+ * @since 0.1.0
574
+ * @category guards
575
+ */
576
+ export const isTerm = (u: unknown): u is Term => hasProperty(u, TypeId);
577
+
578
+ /**
579
+ * @since 0.1.0
580
+ * @category guards
581
+ */
582
+ export const isNamedNode = (u: unknown): u is NamedNode => isTerm(u) && isTagged(u, 'NamedNode');
583
+
584
+ /**
585
+ * @since 0.1.0
586
+ * @category guards
587
+ */
588
+ export const isBlankNode = (u: unknown): u is BlankNode => isTerm(u) && isTagged(u, 'BlankNode');
589
+
590
+ /**
591
+ * @since 0.1.0
592
+ * @category guards
593
+ */
594
+ export const isLiteral = (u: unknown): u is Literal => isTerm(u) && isTagged(u, 'Literal');
595
+
596
+ /**
597
+ * @since 0.1.0
598
+ * @category guards
599
+ */
600
+ export const isVariable = (u: unknown): u is Variable => isTerm(u) && isTagged(u, 'Variable');
601
+
602
+ /**
603
+ * @since 0.1.0
604
+ * @category guards
605
+ */
606
+ export const isDefaultGraph = (u: unknown): u is DefaultGraph =>
607
+ isTerm(u) && isTagged(u, 'DefaultGraph');
608
+
609
+ /**
610
+ * @since 0.1.0
611
+ * @category guards
612
+ */
613
+ export const isTriple = (u: unknown): u is Triple => isTerm(u) && isTagged(u, 'Triple');
614
+
615
+ /**
616
+ * @since 0.1.0
617
+ * @category guards
618
+ */
619
+ export const isQuad = (u: unknown): u is Quad => u instanceof Quad;
620
+
621
+ /**
622
+ * @since 0.1.0
623
+ * @category guards
624
+ */
625
+ export const isResource = (u: unknown): u is Resource => isNamedNode(u) || isBlankNode(u);
626
+
627
+ /**
628
+ * @since 0.1.0
629
+ * @category guards
630
+ */
631
+ export const isSubject = (u: unknown): u is Subject =>
632
+ isNamedNode(u) || isBlankNode(u) || isTriple(u);
633
+
634
+ /**
635
+ * @since 0.1.0
636
+ * @category guards
637
+ */
638
+ export const isObject = (u: unknown): u is Object =>
639
+ isNamedNode(u) || isBlankNode(u) || isLiteral(u) || isTriple(u);
640
+
641
+ /**
642
+ * @since 0.1.0
643
+ * @category guards
644
+ */
645
+ export const isGraph = (u: unknown): u is Graph =>
646
+ isNamedNode(u) || isBlankNode(u) || isDefaultGraph(u);
647
+
648
+ /**
649
+ * @since 0.1.0
650
+ * @category guards
651
+ */
652
+ export const isGroundTerm = (u: unknown): u is GroundTerm =>
653
+ isNamedNode(u) || isBlankNode(u) || isLiteral(u) || isTriple(u);
654
+
655
+ /**
656
+ * Whether a literal is a (possibly directional) language-tagged string.
657
+ *
658
+ * @since 0.1.0
659
+ * @category guards
660
+ */
661
+ export const isLanguageTagged = (self: Literal): boolean => self.language !== '';
662
+
663
+ // Built once: `hasBlankNodes` runs for every term of every quad a dataset or comparison visits.
664
+ const blankNodesIn: (self: Term | Quad) => boolean = Match.type<Term | Quad>().pipe(
665
+ Match.tag('BlankNode', () => true),
666
+ Match.tag('Triple', (self) => hasBlankNodes(self.subject) || hasBlankNodes(self.object)),
667
+ Match.tag(
668
+ 'Quad',
669
+ (self) =>
670
+ hasBlankNodes(self.subject) || hasBlankNodes(self.object) || hasBlankNodes(self.graph),
671
+ ),
672
+ Match.orElse(() => false),
673
+ );
674
+
675
+ /**
676
+ * Whether a triple or quad mentions a blank node anywhere, including inside
677
+ * nested triple terms.
678
+ *
679
+ * @since 0.1.0
680
+ * @category predicates
681
+ */
682
+ export const hasBlankNodes = (self: Term | Quad): boolean => blankNodesIn(self);
683
+
684
+ // Built once: `isGround` runs for every term of every pattern or quad it checks.
685
+ const groundCheck: (self: Term | Quad) => boolean = Match.type<Term | Quad>().pipe(
686
+ Match.tag('Variable', () => false),
687
+ Match.tag(
688
+ 'Triple',
689
+ (self) => isGround(self.subject) && isGround(self.predicate) && isGround(self.object),
690
+ ),
691
+ Match.tag(
692
+ 'Quad',
693
+ (self) =>
694
+ isGround(self.subject) &&
695
+ isGround(self.predicate) &&
696
+ isGround(self.object) &&
697
+ isGround(self.graph),
698
+ ),
699
+ Match.orElse(() => true),
700
+ );
701
+
702
+ /**
703
+ * Whether a term or quad is free of variables.
704
+ *
705
+ * @since 0.1.0
706
+ * @category predicates
707
+ */
708
+ export const isGround = (self: Term | Quad): boolean => groundCheck(self);
709
+
710
+ // -----------------------------------------------------------------------------
711
+ // Utilities
712
+ // -----------------------------------------------------------------------------
713
+
714
+ /**
715
+ * Applies `f` to every term in a quad or triple term (recursively through
716
+ * nested triple terms). `f` maps each term to one of the same kind; a
717
+ * result that cannot stand in its position (a literal for a subject, say)
718
+ * leaves the original term there.
719
+ *
720
+ * @since 0.1.0
721
+ * @category combinators
722
+ */
723
+ export function mapTerms<T extends Quad | Triple>(
724
+ self: T,
725
+ f: (term: NamedNode | BlankNode | Literal | DefaultGraph) => Term,
726
+ ): T;
727
+ export function mapTerms(
728
+ self: Quad | Triple,
729
+ f: (term: NamedNode | BlankNode | Literal | DefaultGraph) => Term,
730
+ ): Quad | Triple {
731
+ // `f` is to map each leaf to a term of the same kind; a result that cannot stand in its
732
+ // position leaves the term there as it was. A statement whose terms all map to themselves is
733
+ // returned as it is (with its key, if computed).
734
+ const go = (term: Subject | Predicate | Object | Graph): Term =>
735
+ isTripleTerm(term) ? goTriple(term) : f(term);
736
+ const goTriple = (term: Triple): Triple => {
737
+ const s = subjectOr(go(term.subject), term.subject);
738
+ const p = predicateOr(go(term.predicate), term.predicate);
739
+ const o = objectOr(go(term.object), term.object);
740
+ return s === term.subject && p === term.predicate && o === term.object
741
+ ? term
742
+ : new Triple(s, p, o);
743
+ };
744
+ if (isTripleTerm(self)) return goTriple(self);
745
+ const s = subjectOr(go(self.subject), self.subject);
746
+ const p = predicateOr(go(self.predicate), self.predicate);
747
+ const o = objectOr(go(self.object), self.object);
748
+ const g = graphOr(go(self.graph), self.graph);
749
+ return s === self.subject && p === self.predicate && o === self.object && g === self.graph
750
+ ? self
751
+ : new Quad(s, p, o, g);
752
+ }
753
+
754
+ const isTripleTerm = (t: Term | Quad): t is Triple => isTagged(t, 'Triple');
755
+ const isResourceTerm = (t: Term): t is Resource =>
756
+ isTagged(t, 'NamedNode') || isTagged(t, 'BlankNode');
757
+ const subjectOr = (t: Term, fallback: Subject): Subject =>
758
+ isResourceTerm(t) || isTripleTerm(t) ? t : fallback;
759
+ const predicateOr = (t: Term, fallback: Predicate): Predicate =>
760
+ isTagged(t, 'NamedNode') ? t : fallback;
761
+ const objectOr = (t: Term, fallback: Object): Object =>
762
+ isResourceTerm(t) || isTripleTerm(t) || isTagged(t, 'Literal') ? t : fallback;
763
+ const graphOr = (t: Term, fallback: Graph): Graph =>
764
+ isResourceTerm(t) || isTagged(t, 'DefaultGraph') ? t : fallback;
765
+
766
+ /**
767
+ * A total ordering of terms suitable for deterministic serialisation:
768
+ * default graph < blank nodes < IRIs < literals < triple terms < variables,
769
+ * then by canonical key.
770
+ *
771
+ * @since 0.1.0
772
+ * @category ordering
773
+ */
774
+ export const compare = (a: Term, b: Term): -1 | 0 | 1 => {
775
+ const ra = rank[a._tag];
776
+ const rb = rank[b._tag];
777
+ if (ra !== rb) return ra < rb ? -1 : 1;
778
+ return a.key < b.key ? -1 : a.key > b.key ? 1 : 0;
779
+ };
780
+
781
+ const rank: Record<Term['_tag'], number> = {
782
+ DefaultGraph: 0,
783
+ BlankNode: 1,
784
+ NamedNode: 2,
785
+ Literal: 3,
786
+ Triple: 4,
787
+ Variable: 5,
788
+ };
789
+
790
+ /**
791
+ * Orders quads by graph, subject, predicate, object.
792
+ *
793
+ * @since 0.1.0
794
+ * @category ordering
795
+ */
796
+ export const compareQuads = (a: Quad, b: Quad): -1 | 0 | 1 =>
797
+ compare(a.graph, b.graph) ||
798
+ compare(a.subject, b.subject) ||
799
+ compare(a.predicate, b.predicate) ||
800
+ compare(a.object, b.object);
801
+
802
+ /**
803
+ * The `compare` ordering of terms as an Effect `Order`, for `Array.sort`,
804
+ * `Order.mapInput` and the other `Order` combinators.
805
+ *
806
+ * @since 0.1.0
807
+ * @category ordering
808
+ */
809
+ export const Order: order.Order<Term> = order.make(compare);
810
+
811
+ /**
812
+ * The `compareQuads` ordering (graph, subject, predicate, object) as an
813
+ * Effect `Order`.
814
+ *
815
+ * @since 0.1.0
816
+ * @category ordering
817
+ */
818
+ export const QuadOrder: order.Order<Quad> = order.make(compareQuads);
819
+
820
+ /**
821
+ * Term equality as an Effect `Equivalence`: the same as `Equal.equals`
822
+ * (equal canonical keys).
823
+ *
824
+ * @since 0.1.0
825
+ * @category equivalence
826
+ */
827
+ export const Equivalence: equivalence.Equivalence<Term> = equivalence.make(
828
+ (a, b) => a.key === b.key,
829
+ );
830
+
831
+ /**
832
+ * Quad equality as an Effect `Equivalence`: the same as `Equal.equals`.
833
+ *
834
+ * @since 0.1.0
835
+ * @category equivalence
836
+ */
837
+ export const QuadEquivalence: equivalence.Equivalence<Quad> = equivalence.make(
838
+ (a, b) => a.key === b.key,
839
+ );
840
+
841
+ // -----------------------------------------------------------------------------
842
+ // Escaping
843
+ // -----------------------------------------------------------------------------
844
+
845
+ // Built once: `escapeString` runs it for every character of a string that needs escaping.
846
+ const escapeChar: (ch: string) => string = Match.type<string>().pipe(
847
+ Match.when('"', () => '\\"'),
848
+ Match.when('\\', () => '\\\\'),
849
+ Match.when('\n', () => '\\n'),
850
+ Match.when('\r', () => '\\r'),
851
+ Match.when('\t', () => '\\t'),
852
+ Match.when('\b', () => '\\b'),
853
+ Match.when('\f', () => '\\f'),
854
+ Match.orElse((ch) => {
855
+ const code = ch.codePointAt(0) ?? 0;
856
+ return code < 0x20 || code === 0x7f || code === 0xfffe || code === 0xffff
857
+ ? `\\u${code.toString(16).toUpperCase().padStart(4, '0')}`
858
+ : ch;
859
+ }),
860
+ );
861
+
862
+ /**
863
+ * Escapes a string for use inside a double-quoted N-Triples / Turtle string
864
+ * literal, using the canonical N-Triples escapes.
865
+ *
866
+ * @since 0.1.0
867
+ * @category formatting
868
+ */
869
+ export const escapeString = (value: string): string => {
870
+ // eslint-disable-next-line no-control-regex
871
+ if (!/["\\\u0000-\u001f\u007f\ufffe\uffff]/.test(value)) return value;
872
+ // By code point, as `for … of` iterates a string
873
+ return value.replace(/[\s\S]/gu, (ch) => escapeChar(ch));
874
+ };
875
+
876
+ // The characters an IRIREF cannot contain unescaped, hoisted so the hot
877
+ // `NamedNode.key` path does not build a regex per call. `replace` resets the
878
+ // global one's `lastIndex`, and `test` on the non-global one keeps no state.
879
+ // eslint-disable-next-line no-control-regex
880
+ const IRI_UNSAFE = /[\u0000- <>"{}|^`\\]/;
881
+ // eslint-disable-next-line no-control-regex
882
+ const IRI_UNSAFE_ALL = /[\u0000- <>"{}|^`\\]/g;
883
+
884
+ /**
885
+ * Escapes characters that are not allowed inside `<...>` IRI references.
886
+ *
887
+ * @since 0.1.0
888
+ * @category formatting
889
+ */
890
+ export const escapeIri = (value: string): string =>
891
+ IRI_UNSAFE.test(value)
892
+ ? value.replace(
893
+ IRI_UNSAFE_ALL,
894
+ (ch) => `\\u${ch.charCodeAt(0).toString(16).toUpperCase().padStart(4, '0')}`,
895
+ )
896
+ : value;
897
+
898
+ // -----------------------------------------------------------------------------
899
+ // JSON
900
+ // -----------------------------------------------------------------------------
901
+
902
+ const namedNodeToJson = (n: NamedNode): TermJson.NamedNode => ({ type: 'uri', value: n.value });
903
+
904
+ const blankNodeToJson = (b: BlankNode): TermJson.BlankNode => ({ type: 'bnode', value: b.value });
905
+
906
+ const resourceToJson: (r: Resource) => TermJson.NamedNode | TermJson.BlankNode =
907
+ Match.type<Resource>().pipe(
908
+ Match.tag('NamedNode', namedNodeToJson),
909
+ Match.tag('BlankNode', blankNodeToJson),
910
+ Match.exhaustive,
911
+ );
912
+
913
+ const literalToJson = (l: Literal): TermJson.Literal => {
914
+ if (l.language !== '') {
915
+ return l.direction === undefined
916
+ ? { type: 'literal', value: l.value, 'xml:lang': l.language }
917
+ : { type: 'literal', value: l.value, 'xml:lang': l.language, 'its:dir': l.direction };
918
+ }
919
+ return l.datatype.value === XSD_STRING
920
+ ? { type: 'literal', value: l.value }
921
+ : { type: 'literal', value: l.value, datatype: l.datatype.value };
922
+ };
923
+
924
+ const tripleToJson = (x: Triple): TermJson.Triple => ({
925
+ type: 'triple',
926
+ value: {
927
+ subject: toJson(x.subject),
928
+ predicate: namedNodeToJson(x.predicate),
929
+ object: toJson(x.object),
930
+ },
931
+ });
932
+
933
+ const variableToJson = (v: Variable): TermJson.Variable => ({ type: 'variable', value: v.value });
934
+
935
+ const defaultGraphToJson = (): TermJson.DefaultGraph => ({ type: 'default-graph' });
936
+
937
+ // Built once: `toJson` runs for every term a JSON codec or SPARQL results writer encodes.
938
+ const groundToJson: (self: GroundTerm) => TermJson.GroundTerm = Match.type<GroundTerm>().pipe(
939
+ Match.tag('NamedNode', namedNodeToJson),
940
+ Match.tag('BlankNode', blankNodeToJson),
941
+ Match.tag('Literal', literalToJson),
942
+ Match.tag('Triple', tripleToJson),
943
+ Match.exhaustive,
944
+ );
945
+
946
+ const termToJson: (self: Term) => TermJson.Term = Match.type<Term>().pipe(
947
+ Match.tag('Variable', variableToJson),
948
+ Match.tag('DefaultGraph', defaultGraphToJson),
949
+ Match.orElse(groundToJson),
950
+ );
951
+
952
+ /**
953
+ * Encodes a term as JSON: the SPARQL 1.2 JSON results term for a ground term,
954
+ * plus the `variable` and `default-graph` extensions (see `TermJson`).
955
+ *
956
+ * @since 0.1.0
957
+ * @category json
958
+ */
959
+ export function toJson(self: GroundTerm): TermJson.GroundTerm;
960
+ export function toJson(self: Term): TermJson.Term;
961
+ export function toJson(self: Term): TermJson.Term {
962
+ return termToJson(self);
963
+ }
964
+
965
+ const literalFromJson = (l: TermJson.Literal): Literal => {
966
+ const lang = l['xml:lang'];
967
+ if (lang !== undefined && lang !== '') {
968
+ const dir = l['its:dir'];
969
+ return dir === 'ltr' || dir === 'rtl'
970
+ ? literal(l.value, { language: lang, direction: dir })
971
+ : literal(l.value, lang);
972
+ }
973
+ return l.datatype === undefined ? literal(l.value) : literal(l.value, namedNode(l.datatype));
974
+ };
975
+
976
+ const tripleFromJson = (x: TermJson.Triple): Triple =>
977
+ // SAFETY: unchecked, as in SPARQL JSON results; `isWellFormed` (and the JSON codecs) check
978
+ // that the positions hold a subject, an IRI predicate and an object.
979
+ new Triple(
980
+ fromJson(x.value.subject) as Subject,
981
+ fromJson(x.value.predicate) as Predicate,
982
+ fromJson(x.value.object),
983
+ );
984
+
985
+ const groundFromJson: (json: TermJson.GroundTerm) => GroundTerm =
986
+ Match.type<TermJson.GroundTerm>().pipe(
987
+ Match.when({ type: 'uri' }, (u): GroundTerm => namedNode(u.value)),
988
+ Match.when({ type: 'bnode' }, (b): GroundTerm => blankNode(b.value)),
989
+ Match.when({ type: Match.is('literal', 'typed-literal') }, literalFromJson),
990
+ Match.when({ type: 'triple' }, tripleFromJson),
991
+ Match.exhaustive,
992
+ );
993
+
994
+ // Built once: `fromJson` runs for every term of every JSON row it decodes.
995
+ const termFromJson: (json: TermJson.Term) => Term = Match.type<TermJson.Term>().pipe(
996
+ Match.when({ type: 'variable' }, (v): Term => variable(v.value)),
997
+ Match.when({ type: 'default-graph' }, (): Term => defaultGraph),
998
+ Match.orElse(groundFromJson),
999
+ );
1000
+
1001
+ /**
1002
+ * Decodes a JSON term (see `TermJson`). Like a SPARQL JSON results reader,
1003
+ * it trusts the positions of a triple term; use `isWellFormed`, or decode
1004
+ * through `Schema.toCodecJson(TermSchema)`, to check them.
1005
+ *
1006
+ * @since 0.1.0
1007
+ * @category json
1008
+ */
1009
+ export function fromJson(json: TermJson.GroundTerm): GroundTerm;
1010
+ export function fromJson(json: TermJson.Term): Term;
1011
+ export function fromJson(json: TermJson.Term): Term {
1012
+ return termFromJson(json);
1013
+ }
1014
+
1015
+ const subjectToJson: (s: Subject) => TermJson.Quad['subject'] = Match.type<Subject>().pipe(
1016
+ Match.tag('Triple', tripleToJson),
1017
+ Match.orElse(resourceToJson),
1018
+ );
1019
+
1020
+ /**
1021
+ * Encodes a quad as JSON; `graph` is omitted for the default graph.
1022
+ *
1023
+ * @since 0.1.0
1024
+ * @category json
1025
+ */
1026
+ export const quadToJson = (self: Quad): TermJson.Quad => {
1027
+ const subject = subjectToJson(self.subject);
1028
+ const predicate = namedNodeToJson(self.predicate);
1029
+ const object = groundToJson(self.object);
1030
+ return Match.value(self.graph).pipe(
1031
+ Match.tag('DefaultGraph', (): TermJson.Quad => ({ subject, predicate, object })),
1032
+ Match.orElse((graph): TermJson.Quad => ({
1033
+ subject,
1034
+ predicate,
1035
+ object,
1036
+ graph: resourceToJson(graph),
1037
+ })),
1038
+ );
1039
+ };
1040
+
1041
+ const resourceFromJson = (json: TermJson.NamedNode | TermJson.BlankNode): Resource =>
1042
+ json.type === 'uri' ? namedNode(json.value) : blankNode(json.value);
1043
+
1044
+ /**
1045
+ * Decodes a JSON quad; a missing `graph` is the default graph. Triple terms
1046
+ * are trusted as in `fromJson`.
1047
+ *
1048
+ * @since 0.1.0
1049
+ * @category json
1050
+ */
1051
+ export const quadFromJson = (json: TermJson.Quad): Quad =>
1052
+ new Quad(
1053
+ json.subject.type === 'triple' ? tripleFromJson(json.subject) : resourceFromJson(json.subject),
1054
+ namedNode(json.predicate.value),
1055
+ groundFromJson(json.object),
1056
+ json.graph === undefined ? defaultGraph : resourceFromJson(json.graph),
1057
+ );
1058
+
1059
+ /**
1060
+ * Whether every triple term inside a term or quad, at any depth, has a
1061
+ * subject (IRI, blank node or triple term), an IRI predicate and an object
1062
+ * (anything but a variable or the default graph) — always true for terms
1063
+ * built with `triple` and `quad`.
1064
+ *
1065
+ * @since 0.1.0
1066
+ * @category predicates
1067
+ */
1068
+ export const isWellFormed = (self: Term | Quad): boolean => wellFormedCheck(self);
1069
+
1070
+ // Built once: the JSON codecs run it on every term and quad they decode.
1071
+ const wellFormedCheck: (self: Term | Quad) => boolean = Match.type<Term | Quad>().pipe(
1072
+ Match.tag('Quad', (q) => isWellFormed(q.subject) && isWellFormed(q.object)),
1073
+ Match.tag(
1074
+ 'Triple',
1075
+ (x) =>
1076
+ isSubject(x.subject) &&
1077
+ isNamedNode(x.predicate) &&
1078
+ isObject(x.object) &&
1079
+ isWellFormed(x.subject) &&
1080
+ isWellFormed(x.object),
1081
+ ),
1082
+ Match.orElse(() => true),
1083
+ );
1084
+
1085
+ /**
1086
+ * The `toCodecJson` (and `toCodecArbitrary`) link of a term declaration, to a
1087
+ * `TermJson`-shaped schema: decodes through `fromJson` and fails unless the
1088
+ * result is the declared kind and well formed.
1089
+ */
1090
+ const jsonLink =
1091
+ <T extends Term, J extends TermJson.Term>(
1092
+ json: Schema.Codec<J>,
1093
+ is: (term: Term) => term is T,
1094
+ encode: (term: T) => J,
1095
+ expected: string,
1096
+ ) =>
1097
+ (): SchemaAST.Link =>
1098
+ Schema.link<T>()(
1099
+ json,
1100
+ SchemaTransformation.transformEffect<T, J>({
1101
+ decode: (j, options) => {
1102
+ const term = fromJson(j);
1103
+ return is(term) && isWellFormed(term)
1104
+ ? Effect.succeed(term)
1105
+ : Effect.fail(new SchemaIssue.InvalidValue({ expected }, j, options));
1106
+ },
1107
+ encode: (term) => Effect.succeed(encode(term)),
1108
+ }),
1109
+ );
1110
+
1111
+ /** The `toCodecJson` / `toCodecArbitrary` link of `QuadSchema`. */
1112
+ const quadLink = (json: Schema.Codec<TermJson.Quad>) => (): SchemaAST.Link =>
1113
+ Schema.link<Quad>()(
1114
+ json,
1115
+ SchemaTransformation.transformEffect<Quad, TermJson.Quad>({
1116
+ decode: (j, options) => {
1117
+ const q = quadFromJson(j);
1118
+ return isWellFormed(q)
1119
+ ? Effect.succeed(q)
1120
+ : Effect.fail(
1121
+ new SchemaIssue.InvalidValue({ expected: 'a well-formed quad' }, j, options),
1122
+ );
1123
+ },
1124
+ encode: (q) => Effect.succeed(quadToJson(q)),
1125
+ }),
1126
+ );
1127
+
1128
+ // -----------------------------------------------------------------------------
1129
+ // Schemas
1130
+ // -----------------------------------------------------------------------------
1131
+
1132
+ /**
1133
+ * Schema of an IRI term; its JSON codec is `TermJson.NamedNode`.
1134
+ *
1135
+ * @since 0.1.0
1136
+ * @category schemas
1137
+ */
1138
+ export const NamedNodeSchema: Schema.declare<NamedNode> = Schema.declare(isNamedNode, {
1139
+ identifier: 'NamedNode',
1140
+ toCodecJson: jsonLink(TermJson.NamedNodeSchema, isNamedNode, namedNodeToJson, 'an IRI'),
1141
+ toCodecArbitrary: jsonLink(Generate.NamedNode, isNamedNode, namedNodeToJson, 'an IRI'),
1142
+ });
1143
+
1144
+ /**
1145
+ * The type `NamedNodeSchema` decodes to.
1146
+ *
1147
+ * @since 0.1.0
1148
+ * @category schemas
1149
+ */
1150
+ export type NamedNodeSchema = typeof NamedNodeSchema.Type;
1151
+
1152
+ /**
1153
+ * Schema of a blank node; its JSON codec is `TermJson.BlankNode`.
1154
+ *
1155
+ * @since 0.1.0
1156
+ * @category schemas
1157
+ */
1158
+ export const BlankNodeSchema: Schema.declare<BlankNode> = Schema.declare(isBlankNode, {
1159
+ identifier: 'BlankNode',
1160
+ toCodecJson: jsonLink(TermJson.BlankNodeSchema, isBlankNode, blankNodeToJson, 'a blank node'),
1161
+ toCodecArbitrary: jsonLink(Generate.BlankNode, isBlankNode, blankNodeToJson, 'a blank node'),
1162
+ });
1163
+
1164
+ /**
1165
+ * The type `BlankNodeSchema` decodes to.
1166
+ *
1167
+ * @since 0.1.0
1168
+ * @category schemas
1169
+ */
1170
+ export type BlankNodeSchema = typeof BlankNodeSchema.Type;
1171
+
1172
+ /**
1173
+ * Schema of a literal; its JSON codec is `TermJson.Literal`.
1174
+ *
1175
+ * @since 0.1.0
1176
+ * @category schemas
1177
+ */
1178
+ export const LiteralSchema: Schema.declare<Literal> = Schema.declare(isLiteral, {
1179
+ identifier: 'Literal',
1180
+ toCodecJson: jsonLink(TermJson.LiteralSchema, isLiteral, literalToJson, 'a literal'),
1181
+ toCodecArbitrary: jsonLink(Generate.Literal, isLiteral, literalToJson, 'a literal'),
1182
+ });
1183
+
1184
+ /**
1185
+ * The type `LiteralSchema` decodes to.
1186
+ *
1187
+ * @since 0.1.0
1188
+ * @category schemas
1189
+ */
1190
+ export type LiteralSchema = typeof LiteralSchema.Type;
1191
+
1192
+ /**
1193
+ * Schema of a variable; its JSON codec is `TermJson.Variable`.
1194
+ *
1195
+ * @since 0.1.0
1196
+ * @category schemas
1197
+ */
1198
+ export const VariableSchema: Schema.declare<Variable> = Schema.declare(isVariable, {
1199
+ identifier: 'Variable',
1200
+ toCodecJson: jsonLink(TermJson.VariableSchema, isVariable, variableToJson, 'a variable'),
1201
+ toCodecArbitrary: jsonLink(Generate.Variable, isVariable, variableToJson, 'a variable'),
1202
+ });
1203
+
1204
+ /**
1205
+ * The type `VariableSchema` decodes to.
1206
+ *
1207
+ * @since 0.1.0
1208
+ * @category schemas
1209
+ */
1210
+ export type VariableSchema = typeof VariableSchema.Type;
1211
+
1212
+ /**
1213
+ * Schema of a triple term; its JSON codec is `TermJson.Triple`, and decoding rejects positions that don't fit RDF.
1214
+ *
1215
+ * @since 0.1.0
1216
+ * @category schemas
1217
+ */
1218
+ export const TripleSchema: Schema.declare<Triple> = Schema.declare(isTriple, {
1219
+ identifier: 'Triple',
1220
+ toCodecJson: jsonLink(TermJson.TripleSchema, isTriple, tripleToJson, 'a well-formed triple term'),
1221
+ toCodecArbitrary: jsonLink(Generate.Triple, isTriple, tripleToJson, 'a well-formed triple term'),
1222
+ });
1223
+
1224
+ /**
1225
+ * The type `TripleSchema` decodes to.
1226
+ *
1227
+ * @since 0.1.0
1228
+ * @category schemas
1229
+ */
1230
+ export type TripleSchema = typeof TripleSchema.Type;
1231
+
1232
+ /**
1233
+ * Schema of a quad; its JSON codec is `TermJson.Quad`, with `graph` omitted for the default graph.
1234
+ *
1235
+ * @since 0.1.0
1236
+ * @category schemas
1237
+ */
1238
+ export const QuadSchema: Schema.declare<Quad> = Schema.declare(isQuad, {
1239
+ identifier: 'Quad',
1240
+ toCodecJson: quadLink(TermJson.QuadSchema),
1241
+ toCodecArbitrary: quadLink(Generate.Quad),
1242
+ });
1243
+
1244
+ /**
1245
+ * The type `QuadSchema` decodes to.
1246
+ *
1247
+ * @since 0.1.0
1248
+ * @category schemas
1249
+ */
1250
+ export type QuadSchema = typeof QuadSchema.Type;
1251
+
1252
+ /**
1253
+ * Schema of any term; its JSON codec is `TermJson.Term`.
1254
+ *
1255
+ * @since 0.1.0
1256
+ * @category schemas
1257
+ */
1258
+ export const TermSchema: Schema.declare<Term> = Schema.declare(isTerm, {
1259
+ identifier: 'Term',
1260
+ toCodecJson: jsonLink(TermJson.TermSchema, isTerm, termToJson, 'a well-formed term'),
1261
+ toCodecArbitrary: jsonLink(Generate.Term, isTerm, termToJson, 'a well-formed term'),
1262
+ });
1263
+
1264
+ /**
1265
+ * The type `TermSchema` decodes to.
1266
+ *
1267
+ * @since 0.1.0
1268
+ * @category schemas
1269
+ */
1270
+ export type TermSchema = typeof TermSchema.Type;
1271
+
1272
+ /**
1273
+ * Schema of a ground term (no variables or default graph); its JSON codec is `TermJson.GroundTerm`.
1274
+ *
1275
+ * @since 0.1.0
1276
+ * @category schemas
1277
+ */
1278
+ export const GroundTermSchema: Schema.declare<GroundTerm> = Schema.declare(isGroundTerm, {
1279
+ identifier: 'GroundTerm',
1280
+ toCodecJson: jsonLink(
1281
+ TermJson.GroundTermSchema,
1282
+ isGroundTerm,
1283
+ groundToJson,
1284
+ 'a well-formed ground term',
1285
+ ),
1286
+ toCodecArbitrary: jsonLink(
1287
+ Generate.GroundTerm,
1288
+ isGroundTerm,
1289
+ groundToJson,
1290
+ 'a well-formed ground term',
1291
+ ),
1292
+ });
1293
+
1294
+ /**
1295
+ * The type `GroundTermSchema` decodes to.
1296
+ *
1297
+ * @since 0.1.0
1298
+ * @category schemas
1299
+ */
1300
+ export type GroundTermSchema = typeof GroundTermSchema.Type;