@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,759 @@
1
+ /**
2
+ * The annotated tabular data model (Tabular Data Model §Tabular Data Models):
3
+ * an already-parsed table (`Source`, rows of cell strings in file order) is
4
+ * read with its dialect's row-level flags (skipped rows, header rows, comment
5
+ * rows, blank rows, skipped columns, trimming), its embedded metadata is
6
+ * extracted and checked against the metadata, and every cell is parsed with
7
+ * its column's datatype into an annotated table, with the cell, primary-key
8
+ * and foreign-key errors in a validation report.
9
+ *
10
+ * @since 0.1.0
11
+ */
12
+ import * as Arr from 'effect/Array';
13
+ import * as Data from 'effect/Data';
14
+ import * as HashMap from 'effect/HashMap';
15
+ import * as Option from 'effect/Option';
16
+ import * as Record from 'effect/Record';
17
+ import * as Result from 'effect/Result';
18
+ import type * as Schema from 'effect/Schema';
19
+ import * as Datatype from './Datatype.ts';
20
+ import * as Metadata from './Metadata.ts';
21
+ import * as Report from './Report.ts';
22
+ import * as UriTemplate from './internal/uriTemplate.ts';
23
+ import * as Url from './internal/url.ts';
24
+ import * as Vocab from './internal/vocab.ts';
25
+
26
+ // -----------------------------------------------------------------------------
27
+ // Input
28
+ // -----------------------------------------------------------------------------
29
+
30
+ /**
31
+ * An already-parsed tabular data file: its URL and its records, in file
32
+ * order, as cell strings — every record, including skipped, header, comment
33
+ * and blank ones, with quotes and escapes already removed. Trimming, comment
34
+ * prefixes, skipped rows and columns and header rows are applied from the
35
+ * table's dialect.
36
+ *
37
+ * @since 0.1.0
38
+ * @category models
39
+ */
40
+ export interface Source {
41
+ readonly url: string;
42
+ readonly rows: ReadonlyArray<ReadonlyArray<string>>;
43
+ }
44
+
45
+ // -----------------------------------------------------------------------------
46
+ // Annotated model
47
+ // -----------------------------------------------------------------------------
48
+
49
+ /**
50
+ * An annotated column, with every inherited property resolved.
51
+ *
52
+ * @since 0.1.0
53
+ * @category models
54
+ */
55
+ export interface Column {
56
+ /** Position among the table's columns, from 1. */
57
+ readonly number: number;
58
+ /** Position in the source file, from 1 (`None` for a virtual column). */
59
+ readonly sourceNumber: Option.Option<number>;
60
+ readonly id: Option.Option<string>;
61
+ /** The column name (percent-encoded when derived from a title). */
62
+ readonly name: string;
63
+ readonly titles: Metadata.LanguageMap;
64
+ readonly isVirtual: boolean;
65
+ readonly isSuppressed: boolean;
66
+ readonly datatype: Datatype.Datatype;
67
+ readonly default: string;
68
+ readonly lang: string;
69
+ readonly null: ReadonlyArray<string>;
70
+ readonly ordered: boolean;
71
+ readonly required: boolean;
72
+ readonly separator: Option.Option<string>;
73
+ readonly textDirection: 'ltr' | 'rtl' | 'auto';
74
+ readonly aboutUrl: Option.Option<string>;
75
+ readonly propertyUrl: Option.Option<string>;
76
+ readonly valueUrl: Option.Option<string>;
77
+ readonly common: Metadata.CommonProperties;
78
+ }
79
+
80
+ /**
81
+ * The value of a cell: null, a single value, or a list of values (a column
82
+ * with a `separator`).
83
+ *
84
+ * @since 0.1.0
85
+ * @category models
86
+ */
87
+ export type CellValue = Data.TaggedEnum<{
88
+ /** No value (a variant without fields). */
89
+ Null: { readonly value?: never };
90
+ Single: { readonly value: Datatype.Value };
91
+ List: { readonly values: ReadonlyArray<Datatype.Value> };
92
+ }>;
93
+
94
+ /**
95
+ * Constructors and matchers for `CellValue`.
96
+ *
97
+ * @since 0.1.0
98
+ * @category models
99
+ */
100
+ export const CellValue = Data.taggedEnum<CellValue>();
101
+
102
+ const nullValue: CellValue = CellValue.Null({});
103
+
104
+ /**
105
+ * An annotated cell.
106
+ *
107
+ * @since 0.1.0
108
+ * @category models
109
+ */
110
+ export interface Cell {
111
+ /** Index of the cell's column in `Table.columns`. */
112
+ readonly column: number;
113
+ readonly stringValue: string;
114
+ readonly value: CellValue;
115
+ readonly errors: ReadonlyArray<string>;
116
+ readonly aboutUrl: Option.Option<string>;
117
+ readonly propertyUrl: Option.Option<string>;
118
+ readonly valueUrl: Option.Option<string>;
119
+ readonly ordered: boolean;
120
+ readonly textDirection: 'ltr' | 'rtl' | 'auto';
121
+ }
122
+
123
+ /**
124
+ * An annotated row.
125
+ *
126
+ * @since 0.1.0
127
+ * @category models
128
+ */
129
+ export interface Row {
130
+ /** Position among the table's rows, from 1. */
131
+ readonly number: number;
132
+ /** Position in the source file, from 1. */
133
+ readonly sourceNumber: number;
134
+ readonly cells: ReadonlyArray<Cell>;
135
+ /** The row titles (from the schema's `rowTitles` columns). */
136
+ readonly titles: ReadonlyArray<Datatype.Value>;
137
+ }
138
+
139
+ /**
140
+ * An annotated table.
141
+ *
142
+ * @since 0.1.0
143
+ * @category models
144
+ */
145
+ export interface Table {
146
+ readonly url: string;
147
+ readonly id: Option.Option<string>;
148
+ readonly schemaId: Option.Option<string>;
149
+ readonly isSuppressed: boolean;
150
+ readonly tableDirection: Metadata.TableDirection;
151
+ readonly dialect: Metadata.Dialect;
152
+ readonly notes: ReadonlyArray<Schema.Json>;
153
+ /** Non-core annotations: the table description's common properties. */
154
+ readonly common: Metadata.CommonProperties;
155
+ readonly columns: ReadonlyArray<Column>;
156
+ readonly rows: ReadonlyArray<Row>;
157
+ readonly primaryKey: ReadonlyArray<string>;
158
+ readonly foreignKeys: ReadonlyArray<Metadata.ForeignKey>;
159
+ readonly transformations: ReadonlyArray<Metadata.Transformation>;
160
+ }
161
+
162
+ /**
163
+ * An annotated group of tables.
164
+ *
165
+ * @since 0.1.0
166
+ * @category models
167
+ */
168
+ export interface TableGroup {
169
+ readonly id: Option.Option<string>;
170
+ readonly notes: ReadonlyArray<Schema.Json>;
171
+ readonly common: Metadata.CommonProperties;
172
+ readonly tables: ReadonlyArray<Table>;
173
+ }
174
+
175
+ // -----------------------------------------------------------------------------
176
+ // Reading rows and embedded metadata
177
+ // -----------------------------------------------------------------------------
178
+
179
+ /**
180
+ * A data row as read from a source: its source row number and its cells
181
+ * (after skipped columns, trimmed).
182
+ *
183
+ * @since 0.1.0
184
+ * @category models
185
+ */
186
+ export interface SourceRow {
187
+ readonly sourceNumber: number;
188
+ readonly cells: ReadonlyArray<string>;
189
+ }
190
+
191
+ /**
192
+ * What reading a source with a dialect yields: the embedded metadata (column
193
+ * titles from the header rows, comment rows) and the data rows.
194
+ *
195
+ * @since 0.1.0
196
+ * @category models
197
+ */
198
+ export interface Embedded {
199
+ readonly columns: ReadonlyArray<Metadata.Column>;
200
+ readonly comments: ReadonlyArray<string>;
201
+ readonly rows: ReadonlyArray<SourceRow>;
202
+ }
203
+
204
+ interface Reading {
205
+ readonly headers: Array<ReadonlyArray<string>>;
206
+ readonly comments: Array<string>;
207
+ readonly rows: Array<SourceRow>;
208
+ }
209
+
210
+ const trimCell = (value: string, trim: Metadata.Trim): string =>
211
+ trim === 'true'
212
+ ? value.trim()
213
+ : trim === 'start'
214
+ ? value.trimStart()
215
+ : trim === 'end'
216
+ ? value.trimEnd()
217
+ : value;
218
+
219
+ const emptyColumn = (titles: Metadata.LanguageMap): Metadata.Column => ({
220
+ ...Option.match(Option.flatMap(Arr.head(Record.values(titles)), Arr.head), {
221
+ onNone: () => ({}),
222
+ onSome: (titleName) => ({ titleName }),
223
+ }),
224
+ titles,
225
+ isVirtual: false,
226
+ isSuppressed: false,
227
+ inherited: {},
228
+ common: {},
229
+ });
230
+
231
+ /**
232
+ * Reads a source with a dialect (Tabular Data Model §Parsing Tabular Data,
233
+ * from the point a row's cells are known): skipped rows and comment rows
234
+ * become comments, header rows become column titles in `lang`, and the
235
+ * remaining rows (less blank ones when `skipBlankRows`) are the data.
236
+ *
237
+ * @since 0.1.0
238
+ * @category reading
239
+ */
240
+ export const read = (source: Source, dialect: Metadata.Dialect, lang: string): Embedded => {
241
+ const prefix = Option.fromNullishOr(dialect.commentPrefix);
242
+ const content = (cells: ReadonlyArray<string>) => Arr.join(cells, dialect.delimiter);
243
+ const comment = (cells: ReadonlyArray<string>): Option.Option<string> =>
244
+ Option.flatMap(prefix, (p) => {
245
+ const c = content(cells);
246
+ return c.startsWith(p) ? Option.some(c.slice(p.length).trim()) : Option.none();
247
+ });
248
+ const cellsOf = (cells: ReadonlyArray<string>) =>
249
+ Arr.map(Arr.drop(cells, dialect.skipColumns), (c) => trimCell(c, dialect.trim));
250
+ const numbered = Arr.map(source.rows, (cells, i) => ({ cells, sourceNumber: i + 1 }));
251
+ const [skipped, rest] = Arr.splitAt(numbered, dialect.skipRows);
252
+ const skippedComments = Arr.flatMap(skipped, ({ cells }) =>
253
+ Option.match(comment(cells), {
254
+ onSome: (c) => [c],
255
+ onNone: () => {
256
+ const c = content(cells).trim();
257
+ return c === '' ? [] : [c];
258
+ },
259
+ }),
260
+ );
261
+ // Header rows are the first `headerRowCount` rows that are not comments.
262
+ const initial: Reading = { headers: [], comments: [], rows: [] };
263
+ const state = Arr.reduce(rest, initial, (acc, { cells, sourceNumber }) => {
264
+ const c = comment(cells);
265
+ if (Option.isSome(c)) {
266
+ acc.comments.push(c.value);
267
+ return acc;
268
+ }
269
+ if (Arr.length(acc.headers) < dialect.headerRowCount) {
270
+ acc.headers.push(cellsOf(cells));
271
+ return acc;
272
+ }
273
+ const data = cellsOf(cells);
274
+ if (dialect.shouldSkipBlankRows && Arr.every(data, (v) => v === '')) return acc;
275
+ acc.rows.push({ sourceNumber, cells: data });
276
+ return acc;
277
+ });
278
+ const width = Math.max(
279
+ 0,
280
+ ...Arr.map(state.headers, Arr.length),
281
+ ...Arr.map(Arr.take(state.rows, 1), (r) => Arr.length(r.cells)),
282
+ );
283
+ const columns = Arr.makeBy(width, (i) => {
284
+ const titles = Arr.filter(
285
+ Arr.map(state.headers, (h) => ((h[i] ?? '').trim() === '' ? '' : (h[i] ?? ''))),
286
+ (t) => t !== '',
287
+ );
288
+ return emptyColumn(Arr.isReadonlyArrayNonEmpty(titles) ? { [lang]: titles } : {});
289
+ });
290
+ return {
291
+ columns: dialect.headerRowCount === 0 ? Arr.map(columns, () => emptyColumn({})) : columns,
292
+ comments: Arr.appendAll(skippedComments, state.comments),
293
+ rows: state.rows,
294
+ };
295
+ };
296
+
297
+ // -----------------------------------------------------------------------------
298
+ // Columns
299
+ // -----------------------------------------------------------------------------
300
+
301
+ const nameOf = (column: Metadata.Column, number: number): string =>
302
+ column.name ??
303
+ (column.titleName === undefined ? `_col.${number}` : Url.encodeName(column.titleName));
304
+
305
+ const annotateColumn = (
306
+ column: Metadata.Column,
307
+ number: number,
308
+ sourceNumber: Option.Option<number>,
309
+ inherited: ReadonlyArray<Metadata.Inherited>,
310
+ tableDirection: Metadata.TableDirection,
311
+ ): Column => {
312
+ const p = Metadata.inherit(column.inherited, ...inherited);
313
+ const direction = p.textDirection ?? 'inherit';
314
+ return {
315
+ number,
316
+ sourceNumber,
317
+ id: Option.fromNullishOr(column.id),
318
+ name: nameOf(column, number),
319
+ titles: column.titles,
320
+ isVirtual: column.isVirtual,
321
+ isSuppressed: column.isSuppressed,
322
+ datatype: p.datatype ?? Datatype.string,
323
+ default: p.default ?? '',
324
+ lang: p.lang ?? 'und',
325
+ null: p.null ?? [''],
326
+ ordered: p.ordered ?? false,
327
+ required: p.required ?? false,
328
+ separator: Option.fromNullishOr(p.separator),
329
+ textDirection: direction === 'inherit' ? tableDirection : direction,
330
+ aboutUrl: Option.fromNullishOr(p.aboutUrl),
331
+ propertyUrl: Option.fromNullishOr(p.propertyUrl),
332
+ valueUrl: Option.fromNullishOr(p.valueUrl),
333
+ common: column.common,
334
+ };
335
+ };
336
+
337
+ // -----------------------------------------------------------------------------
338
+ // Cells
339
+ // -----------------------------------------------------------------------------
340
+
341
+ const keepsWhitespace = (base: string): boolean =>
342
+ Arr.contains(['string', 'json', 'xml', 'html', 'anyAtomicType'], Datatype.canonicalName(base));
343
+
344
+ const normalizeWhitespace = (value: string, base: string): string => {
345
+ if (keepsWhitespace(base)) return value;
346
+ const spaced = value.replace(/[\r\n\t]/g, ' ');
347
+ return Datatype.canonicalName(base) === 'normalizedString'
348
+ ? spaced
349
+ : spaced.trim().replace(/ {2,}/g, ' ');
350
+ };
351
+
352
+ interface Parsed {
353
+ readonly value: CellValue;
354
+ readonly errors: ReadonlyArray<string>;
355
+ }
356
+
357
+ interface ParsedItem {
358
+ readonly value: Option.Option<Datatype.Value>;
359
+ readonly errors: ReadonlyArray<string>;
360
+ }
361
+
362
+ const parseItem = (text: string, column: Column): ParsedItem => {
363
+ const s = text === '' ? column.default : text;
364
+ if (Arr.contains(column.null, s)) return { value: Option.none(), errors: [] };
365
+ const language = Option.some(column.lang);
366
+ return Result.match(Datatype.parse(s, column.datatype, language), {
367
+ onSuccess: (value) => ({ value: Option.some(value), errors: [] }),
368
+ onFailure: (errors) => ({
369
+ value: Option.some(
370
+ Datatype.stringValue(
371
+ s,
372
+ Datatype.canonicalName(column.datatype.base) === 'string' ? language : Option.none(),
373
+ ),
374
+ ),
375
+ errors,
376
+ }),
377
+ });
378
+ };
379
+
380
+ /**
381
+ * Parses a cell's string value with its column (Tabular Data Model §Parsing
382
+ * Cells): whitespace normalization, `default`, `null`, `separator` lists,
383
+ * the datatype and its constraints, and `required`.
384
+ *
385
+ * @since 0.1.0
386
+ * @category parsing
387
+ */
388
+ export const parseCell = (stringValue: string, column: Column): Parsed => {
389
+ const base = column.datatype.base;
390
+ const normalized = normalizeWhitespace(stringValue, base);
391
+ const s = normalized === '' ? column.default : normalized;
392
+ const required = (value: CellValue, errors: ReadonlyArray<string>): Parsed => ({
393
+ value,
394
+ errors:
395
+ column.required && CellValue.$is('Null')(value)
396
+ ? Arr.append(errors, 'a required cell is null')
397
+ : errors,
398
+ });
399
+ return Option.match(column.separator, {
400
+ onNone: () => {
401
+ const item = parseItem(s, column);
402
+ return required(
403
+ Option.match(item.value, {
404
+ onNone: () => nullValue,
405
+ onSome: (value) => CellValue.Single({ value }),
406
+ }),
407
+ item.errors,
408
+ );
409
+ },
410
+ onSome: (separator) => {
411
+ if (s === '')
412
+ return {
413
+ value: CellValue.List({ values: [] }),
414
+ errors: column.required ? ['a required cell is empty'] : [],
415
+ };
416
+ if (Arr.contains(column.null, s)) return required(nullValue, []);
417
+ const strip = !Arr.contains(['string', 'anyAtomicType'], Datatype.canonicalName(base));
418
+ const items = Arr.map(s.split(separator), (part) =>
419
+ parseItem(strip ? part.trim() : part, column),
420
+ );
421
+ return {
422
+ value: CellValue.List({ values: Arr.getSomes(Arr.map(items, (i) => i.value)) }),
423
+ errors: Arr.flatMap(items, (i) => i.errors),
424
+ };
425
+ },
426
+ });
427
+ };
428
+
429
+ const templateValue = (value: CellValue): Option.Option<UriTemplate.Value> =>
430
+ CellValue.$match(value, {
431
+ Null: () => Option.none(),
432
+ Single: ({ value: v }) => Option.some(v.lexical),
433
+ List: ({ values }) => Option.some(Arr.map(values, (v) => v.lexical)),
434
+ });
435
+
436
+ const expandTemplate = (
437
+ template: string,
438
+ variables: Readonly<Record<string, UriTemplate.Value>>,
439
+ tableUrl: string,
440
+ ): string => {
441
+ const expanded = UriTemplate.expand(template, variables);
442
+ return Url.resolve(
443
+ Option.getOrElse(Vocab.expandPrefixed(expanded), () => expanded),
444
+ tableUrl,
445
+ );
446
+ };
447
+
448
+ // -----------------------------------------------------------------------------
449
+ // Annotating a table
450
+ // -----------------------------------------------------------------------------
451
+
452
+ /**
453
+ * Options for annotating tables.
454
+ *
455
+ * @since 0.1.0
456
+ * @category models
457
+ */
458
+ export interface Options {
459
+ /**
460
+ * Validate (default `false`): metadata incompatible with the data and
461
+ * invalid cells are errors rather than warnings, and primary and foreign
462
+ * keys are checked.
463
+ */
464
+ readonly validate?: boolean | undefined;
465
+ }
466
+
467
+ /**
468
+ * An annotated table and the issues raised while annotating it.
469
+ *
470
+ * @since 0.1.0
471
+ * @category models
472
+ */
473
+ export interface Annotated {
474
+ readonly table: Table;
475
+ readonly issues: ReadonlyArray<Report.Issue>;
476
+ }
477
+
478
+ /**
479
+ * Annotates one table of a group from its source: reads it with the table's
480
+ * dialect, checks the metadata against the embedded metadata, and parses
481
+ * every cell. Returns the annotated table and its issues.
482
+ *
483
+ * @since 0.1.0
484
+ * @category annotating
485
+ */
486
+ export const annotate = (
487
+ group: Metadata.TableGroup,
488
+ table: Metadata.Table,
489
+ source: Source,
490
+ options: Options = {},
491
+ ): Annotated => {
492
+ const validate = options.validate ?? false;
493
+ const level = validate ? Report.error : Report.warning;
494
+ const schema = Metadata.schemaOfTable(group, table);
495
+ const dialect = Metadata.dialectOfTable(group, table);
496
+ const tableInherited = Metadata.inherit(table.inherited, group.inherited);
497
+ const schemaInherited = Option.match(schema, { onNone: () => ({}), onSome: (s) => s.inherited });
498
+ const lang = Metadata.inherit(schemaInherited, tableInherited).lang ?? 'und';
499
+ const embedded = read(source, dialect, lang);
500
+ const tableDirection = table.tableDirection ?? group.tableDirection ?? 'auto';
501
+ const compatibility = Option.flatMap(schema, (s) =>
502
+ Metadata.checkCompatible(s.columns, embedded.columns, validate),
503
+ );
504
+ const described = Option.match(schema, {
505
+ onNone: () => embedded.columns,
506
+ onSome: (s) => s.columns,
507
+ });
508
+ const real = Arr.filter(described, (c) => !c.isVirtual);
509
+ const virtual = Arr.filter(described, (c) => c.isVirtual);
510
+ const width = Math.max(Arr.length(real), Arr.length(embedded.columns));
511
+ const inherited = [schemaInherited, table.inherited, group.inherited];
512
+ const realColumns = Arr.makeBy(width, (i) =>
513
+ annotateColumn(
514
+ real[i] ?? emptyColumn({}),
515
+ i + 1,
516
+ Option.some(dialect.skipColumns + i + 1),
517
+ inherited,
518
+ tableDirection,
519
+ ),
520
+ );
521
+ const columns = Arr.appendAll(
522
+ realColumns,
523
+ Arr.map(virtual, (c, i) =>
524
+ annotateColumn(c, width + i + 1, Option.none(), inherited, tableDirection),
525
+ ),
526
+ );
527
+ const rowTitles = Option.getOrElse(
528
+ Option.flatMap(schema, (s) => Option.fromNullishOr(s.rowTitles)),
529
+ () => [],
530
+ );
531
+ const issues: Array<Report.Issue> = Arr.fromOption(
532
+ Option.map(compatibility, (message) => level(message, { table: table.url })),
533
+ );
534
+ const rows = Arr.map(embedded.rows, ({ sourceNumber, cells }, index): Row => {
535
+ const parsed = Arr.map(columns, (column, i) =>
536
+ parseCell(column.isVirtual ? '' : (cells[i] ?? ''), column),
537
+ );
538
+ const variables: Record<string, UriTemplate.Value> = Record.fromEntries(
539
+ Arr.flatMap(columns, (c, i) =>
540
+ Arr.fromOption(
541
+ Option.map(templateValue(parsed[i]?.value ?? nullValue), (v) => [c.name, v] as const),
542
+ ),
543
+ ),
544
+ );
545
+ const annotated = Arr.map(columns, (column, i): Cell => {
546
+ const p = parsed[i] ?? { value: nullValue, errors: [] };
547
+ const vars = {
548
+ ...variables,
549
+ _column: String(column.number),
550
+ _sourceColumn: String(Option.getOrElse(column.sourceNumber, () => column.number)),
551
+ _row: String(index + 1),
552
+ _sourceRow: String(sourceNumber),
553
+ _name: Url.decodeName(column.name),
554
+ };
555
+ const expand = (t: Option.Option<string>) =>
556
+ Option.map(t, (template) => expandTemplate(template, vars, table.url));
557
+ Arr.forEach(p.errors, (message) =>
558
+ issues.push(
559
+ level(`${column.name}: ${message}`, {
560
+ table: table.url,
561
+ row: sourceNumber,
562
+ column: Option.getOrElse(column.sourceNumber, () => column.number),
563
+ }),
564
+ ),
565
+ );
566
+ return {
567
+ column: i,
568
+ stringValue: column.isVirtual ? '' : (cells[i] ?? ''),
569
+ value: p.value,
570
+ errors: p.errors,
571
+ aboutUrl: expand(column.aboutUrl),
572
+ propertyUrl: expand(column.propertyUrl),
573
+ valueUrl:
574
+ CellValue.$is('Null')(p.value) && !column.isVirtual
575
+ ? Option.none()
576
+ : expand(column.valueUrl),
577
+ ordered: column.ordered,
578
+ textDirection: column.textDirection,
579
+ };
580
+ });
581
+ const titles = Arr.flatMap(rowTitles, (name) =>
582
+ Option.match(
583
+ Arr.findFirstIndex(columns, (c) => c.name === name),
584
+ {
585
+ onNone: () => [],
586
+ onSome: (i) =>
587
+ CellValue.$match(annotated[i]?.value ?? nullValue, {
588
+ Null: () => [],
589
+ Single: ({ value }) => [value],
590
+ List: ({ values }) => values,
591
+ }),
592
+ },
593
+ ),
594
+ );
595
+ return { number: index + 1, sourceNumber, cells: annotated, titles };
596
+ });
597
+ const common = Arr.isReadonlyArrayNonEmpty(embedded.comments)
598
+ ? {
599
+ ...table.common,
600
+ 'rdfs:comment': Arr.appendAll(
601
+ Arr.ensure(table.common['rdfs:comment'] ?? []),
602
+ Arr.map(embedded.comments, (c): Schema.Json => ({ '@value': c })),
603
+ ),
604
+ }
605
+ : table.common;
606
+ return {
607
+ table: {
608
+ url: table.url,
609
+ id: Option.fromNullishOr(table.id),
610
+ schemaId: Option.flatMap(schema, (s) => Option.fromNullishOr(s.id)),
611
+ isSuppressed: table.isSuppressed,
612
+ tableDirection,
613
+ dialect,
614
+ notes: table.notes,
615
+ common,
616
+ columns,
617
+ rows,
618
+ primaryKey: Option.getOrElse(
619
+ Option.flatMap(schema, (s) => Option.fromNullishOr(s.primaryKey)),
620
+ () => [],
621
+ ),
622
+ foreignKeys: Option.match(schema, { onNone: () => [], onSome: (s) => s.foreignKeys }),
623
+ transformations: Arr.appendAll(table.transformations, group.transformations),
624
+ },
625
+ issues,
626
+ };
627
+ };
628
+
629
+ // -----------------------------------------------------------------------------
630
+ // Keys
631
+ // -----------------------------------------------------------------------------
632
+
633
+ const keyOf = (row: Row, indexes: ReadonlyArray<number>): string =>
634
+ Arr.join(
635
+ Arr.map(indexes, (i) =>
636
+ CellValue.$match(row.cells[i]?.value ?? nullValue, {
637
+ Null: () => '\u0000',
638
+ Single: ({ value }) => value.lexical,
639
+ List: ({ values }) =>
640
+ Arr.join(
641
+ Arr.map(values, (v) => v.lexical),
642
+ '\u0001',
643
+ ),
644
+ }),
645
+ ),
646
+ '\u0002',
647
+ );
648
+
649
+ const indexesOf = (
650
+ table: Table,
651
+ names: ReadonlyArray<string>,
652
+ ): Option.Option<ReadonlyArray<number>> =>
653
+ Option.all(Arr.map(names, (n) => Arr.findFirstIndex(table.columns, (c) => c.name === n)));
654
+
655
+ const countKeys = (table: Table, indexes: ReadonlyArray<number>): HashMap.HashMap<string, number> =>
656
+ Arr.reduce(table.rows, HashMap.empty<string, number>(), (map, row) => {
657
+ const key = keyOf(row, indexes);
658
+ return HashMap.set(map, key, Option.getOrElse(HashMap.get(map, key), () => 0) + 1);
659
+ });
660
+
661
+ /**
662
+ * Finds the table a foreign key references: by `resource` URL or by
663
+ * `schemaReference` (exactly one table must use that schema).
664
+ *
665
+ * @since 0.1.0
666
+ * @category keys
667
+ */
668
+ export const referencedTable = (
669
+ tables: ReadonlyArray<Table>,
670
+ reference: Metadata.Reference,
671
+ ): Option.Option<Table> => {
672
+ if (reference.resource !== undefined) {
673
+ const url = Url.normalize(reference.resource);
674
+ return Arr.findFirst(tables, (t) => Url.normalize(t.url) === url);
675
+ }
676
+ const schema = reference.schemaReference;
677
+ const matching = Arr.filter(tables, (t) => Option.exists(t.schemaId, (id) => id === schema));
678
+ return Arr.length(matching) === 1 ? Arr.head(matching) : Option.none();
679
+ };
680
+
681
+ /**
682
+ * Checks that every foreign key of a group references an existing table and
683
+ * columns, returning the errors (these stop processing).
684
+ *
685
+ * @since 0.1.0
686
+ * @category keys
687
+ */
688
+ export const checkForeignKeyTargets = (tables: ReadonlyArray<Table>): ReadonlyArray<string> =>
689
+ Arr.flatMap(tables, (table) =>
690
+ Arr.flatMap(table.foreignKeys, (fk) =>
691
+ Option.match(referencedTable(tables, fk.reference), {
692
+ onNone: () => [`${table.url}: a foreign key references a table that is not in the group`],
693
+ onSome: (target) =>
694
+ Option.isSome(indexesOf(target, fk.reference.columnReference))
695
+ ? []
696
+ : [`${table.url}: a foreign key references a column that is not in ${target.url}`],
697
+ }),
698
+ ),
699
+ );
700
+
701
+ /**
702
+ * Validates the primary keys and foreign keys of a group's tables: each row's
703
+ * primary key is unique, and each row's foreign keys reference exactly one
704
+ * row.
705
+ *
706
+ * @since 0.1.0
707
+ * @category keys
708
+ */
709
+ export const validateKeys = (tables: ReadonlyArray<Table>): ReadonlyArray<Report.Issue> => {
710
+ const primary = Arr.flatMap(tables, (table) =>
711
+ Option.match(indexesOf(table, table.primaryKey), {
712
+ onNone: () => [],
713
+ onSome: (indexes) => {
714
+ if (!Arr.isReadonlyArrayNonEmpty(indexes)) return [];
715
+ const counts = countKeys(table, indexes);
716
+ return Arr.flatMap(table.rows, (row) =>
717
+ Option.getOrElse(HashMap.get(counts, keyOf(row, indexes)), () => 0) > 1
718
+ ? [Report.error('duplicate primary key', { table: table.url, row: row.sourceNumber })]
719
+ : [],
720
+ );
721
+ },
722
+ }),
723
+ );
724
+ const foreign = Arr.flatMap(tables, (table) =>
725
+ Arr.flatMap(table.foreignKeys, (fk) =>
726
+ Option.match(
727
+ Option.all([
728
+ indexesOf(table, fk.columnReference),
729
+ Option.flatMap(referencedTable(tables, fk.reference), (target) =>
730
+ Option.map(
731
+ indexesOf(target, fk.reference.columnReference),
732
+ (ix) => [target, ix] as const,
733
+ ),
734
+ ),
735
+ ]),
736
+ {
737
+ onNone: () => [],
738
+ onSome: ([indexes, [target, targetIndexes]]) => {
739
+ const counts = countKeys(target, targetIndexes);
740
+ return Arr.flatMap(table.rows, (row) => {
741
+ const n = Option.getOrElse(HashMap.get(counts, keyOf(row, indexes)), () => 0);
742
+ return n === 1
743
+ ? []
744
+ : [
745
+ Report.error(
746
+ n === 0
747
+ ? `foreign key references no row of ${target.url}`
748
+ : `foreign key references ${n} rows of ${target.url}`,
749
+ { table: table.url, row: row.sourceNumber },
750
+ ),
751
+ ];
752
+ });
753
+ },
754
+ },
755
+ ),
756
+ ),
757
+ );
758
+ return Arr.appendAll(primary, foreign);
759
+ };