@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,1181 @@
1
+ import { t as __exportAll } from "./rolldown-runtime-D8jQpDG7.mjs";
2
+ import { i as isAbsolute, l as resolve$1, s as relativize } from "./Iri-Cr92gsQV.mjs";
3
+ import { i as empty$1, l as set, o as get, r as compact, s as make$1 } from "./PrefixMap-BHFPDLO-.mjs";
4
+ import { n as RdfParseError } from "./Serialization-DP9H5bYQ.mjs";
5
+ import { a as digit, d as iriRef, i as blankNodeLabel, l as hex, n as alpha, p as langTag$1 } from "./Grammar-mQ8CgE1M.mjs";
6
+ import { c as numericLiteral, f as prefixedName, m as stringLiteral } from "./Grammar-CPlSxGH6.mjs";
7
+ import { r as skip$1 } from "./tokens-C6BzeodQ.mjs";
8
+ import * as Arr from "effect/Array";
9
+ import * as MutableHashSet from "effect/MutableHashSet";
10
+ import * as Option from "effect/Option";
11
+ import * as Predicate from "effect/Predicate";
12
+ import * as Schema from "effect/Schema";
13
+ import * as Effect from "effect/Effect";
14
+ import * as Match from "effect/Match";
15
+ import * as Record from "effect/Record";
16
+ import * as Result from "effect/Result";
17
+ import * as Compiler from "@thomasfosterau/effect-parse/Compiler";
18
+ import * as Parser from "@thomasfosterau/effect-parse/Parser";
19
+ import * as Token from "@thomasfosterau/effect-parse/Token";
20
+ import * as ParseError from "@thomasfosterau/effect-parse/ParseError";
21
+ // src/shex/internal/lexer.ts
22
+ /**
23
+ * Lexical helpers shared by the ShExC lexer and the error reporting: the
24
+ * unescaping of `REGEXP` and `CODE` bodies, and offset-to-position
25
+ * conversion. The terminals are Turtle's (`../../turtle/Grammar.ts`) and `tokens.ts`.
26
+ *
27
+ * @internal
28
+ */
29
+ /**
30
+ * Replaces one escape: a numeric escape (`\uXXXX`, `\UXXXXXXXX`, the only
31
+ * ones longer than two characters) by its code point, any other by `keep`
32
+ * applied to the escaped character.
33
+ */
34
+ const unescapeOne = (keep) => (all) => all.length > 2 ? String.fromCodePoint(parseInt(all.slice(2), 16)) : keep(all.slice(1), all);
35
+ /**
36
+ * Unescapes a ShExC `REGEXP` body: `\/` becomes `/` and numeric escapes are
37
+ * replaced by their code points; every other escape is kept verbatim.
38
+ */
39
+ const unescapeRegexp = (s) => s.replace(/\\u([0-9A-Fa-f]{4})|\\U([0-9A-Fa-f]{8})|\\(.)/gs, unescapeOne((c, all) => c === "/" ? "/" : all));
40
+ /** Unescapes a semantic action `CODE` body (`\%`, `\\` and UCHAR). */
41
+ const unescapeCode = (s) => s.replace(/\\u([0-9A-Fa-f]{4})|\\U([0-9A-Fa-f]{8})|\\([%\\])/g, unescapeOne((c) => c));
42
+ /** Converts a string offset to a 1-based line and column. */
43
+ const lineColumn = (input, pos) => {
44
+ const before = input.slice(0, Math.max(pos, 0));
45
+ return {
46
+ line: before.split("\n").length,
47
+ column: pos - (before.lastIndexOf("\n") + 1) + 1
48
+ };
49
+ };
50
+ const encodeJsonString = Schema.encodeSync(Schema.fromJsonString(Schema.String));
51
+ /** Quotes a string as a JSON string literal, for error messages. */
52
+ const quote = (s) => encodeJsonString(s);
53
+ // src/shex/internal/shexcLexer.ts
54
+ /**
55
+ * The ShExC lexer, written with `@thomasfosterau/effect-parse`: a compiled
56
+ * grammar turning a document into tokens, followed by a pass that resolves
57
+ * IRIs (relative IRI references against the base, prefixed names against
58
+ * the prefixes) in document order, as `BASE` and `PREFIX` directives are
59
+ * met. The parser then works on resolved tokens, so neither grammar depends
60
+ * on per-document state and both can be compiled.
61
+ *
62
+ * @internal
63
+ */
64
+ /** A token, with every field present so that all tokens have the same shape. */
65
+ const make = (t, start, end) => ({
66
+ type: t.type,
67
+ text: t.text,
68
+ kind: t.type === "KEYWORD" || t.type === "PUNCT" ? t.text : t.type,
69
+ start,
70
+ end,
71
+ iri: t.iri ?? "",
72
+ error: Option.none(),
73
+ suffix: t.suffix ?? "",
74
+ min: t.min ?? 0,
75
+ max: t.max ?? 0
76
+ });
77
+ const KEYWORDS = MutableHashSet.fromIterable([
78
+ "BASE",
79
+ "PREFIX",
80
+ "IMPORT",
81
+ "START",
82
+ "EXTERNAL",
83
+ "ABSTRACT",
84
+ "RESTRICTS",
85
+ "EXTENDS",
86
+ "CLOSED",
87
+ "EXTRA",
88
+ "LITERAL",
89
+ "BNODE",
90
+ "IRI",
91
+ "NONLITERAL",
92
+ "AND",
93
+ "OR",
94
+ "NOT",
95
+ "MININCLUSIVE",
96
+ "MINEXCLUSIVE",
97
+ "MAXINCLUSIVE",
98
+ "MAXEXCLUSIVE",
99
+ "LENGTH",
100
+ "MINLENGTH",
101
+ "MAXLENGTH",
102
+ "TOTALDIGITS",
103
+ "FRACTIONDIGITS"
104
+ ]);
105
+ const pname = (type) => Parser.map(prefixedName, ({ prefix, local }) => ({
106
+ type,
107
+ text: prefix,
108
+ iri: local
109
+ }));
110
+ const numeric = Parser.map(numericLiteral, ([text, type]) => ({
111
+ type: type === "integer" ? "INTEGER" : type === "decimal" ? "DECIMAL" : "DOUBLE",
112
+ text
113
+ }));
114
+ const string = Parser.map(Parser.seq(stringLiteral, Parser.opt(langTag$1)), ([text, lang]) => Option.isSome(lang) ? {
115
+ type: "LANG_STRING",
116
+ text,
117
+ suffix: lang.value
118
+ } : {
119
+ type: "STRING",
120
+ text
121
+ });
122
+ const regexp = Parser.preceded(Token.literal("/"), Parser.seq(Parser.taken(Parser.repeat(Parser.alt(Token.takeTill("/\\\n\r", { min: 1 }), Parser.seq(Token.literal("\\"), Token.oneOf("nrt\\|.?*+(){}$-[]^/")), Parser.seq(Token.literal("\\u"), Token.takeWhile(hex, 4)), Parser.seq(Token.literal("\\U"), Token.takeWhile(hex, 8))), { min: 1 })), Parser.preceded(Token.literal("/"), Token.takeWhile("smix")))).pipe(Parser.map(([body, flags]) => ({
123
+ type: "REGEXP",
124
+ text: unescapeRegexp(body),
125
+ suffix: flags
126
+ })));
127
+ const code = Parser.delimited(Token.literal("{"), Parser.taken(Parser.repeat(Parser.alt(Token.takeTill("%\\", { min: 1 }), Parser.seq(Token.literal("\\"), Token.oneOf("%\\")), Parser.seq(Token.literal("\\u"), Token.takeWhile(hex, 4)), Parser.seq(Token.literal("\\U"), Token.takeWhile(hex, 8))))), Token.literal("%}")).pipe(Parser.map((body) => ({
128
+ type: "CODE",
129
+ text: unescapeCode(body)
130
+ })));
131
+ const bound = Parser.preceded(Parser.opt(Token.oneOf("+-")), Token.takeWhile(digit, { min: 1 }));
132
+ const repeatRange = Parser.delimited(Token.literal("{"), Parser.seq(bound, Parser.opt(Parser.preceded(Token.literal(","), Parser.opt(Parser.alt(bound, Token.literal("*")))))), Token.literal("}")).pipe(Parser.map(([min, rest]) => {
133
+ const lo = parseInt(min, 10);
134
+ return {
135
+ type: "REPEAT_RANGE",
136
+ text: "",
137
+ min: lo,
138
+ max: Option.match(rest, {
139
+ onNone: () => lo,
140
+ onSome: (upper) => Option.match(upper, {
141
+ onNone: () => -1,
142
+ onSome: (u) => u === "*" ? -1 : parseInt(u, 10)
143
+ })
144
+ })
145
+ };
146
+ }));
147
+ const word = Token.takeWhile(alpha, { min: 1 }).pipe(Parser.filterMap((w) => {
148
+ if (w === "a" || w === "true" || w === "false") return Option.some({
149
+ type: "PUNCT",
150
+ text: w
151
+ });
152
+ const upper = w.toUpperCase();
153
+ return MutableHashSet.has(KEYWORDS, upper) ? Option.some({
154
+ type: "KEYWORD",
155
+ text: upper
156
+ }) : Option.none();
157
+ }));
158
+ /** One token, in the order of preference of the ShEx 2 lexer. */
159
+ const punctuation = (...ps) => Parser.alt(...ps.map((p) => Token.literal(p))).pipe(Parser.map((text) => ({
160
+ type: "PUNCT",
161
+ text
162
+ })));
163
+ const prefixedOrWord = Parser.alt(pname("PNAME"), word);
164
+ const numericOr = (p) => Parser.alt(numeric, punctuation(p));
165
+ /**
166
+ * One token. The first character selects the candidates, which are tried in
167
+ * the order of preference of the ShEx 2 lexer.
168
+ */
169
+ const token = Parser.dispatch(Parser.peek(Token.any), {
170
+ "@": Parser.alt(Parser.preceded(Token.literal("@"), pname("ATPNAME")), langTag$1.pipe(Parser.map((text) => ({
171
+ type: "LANGTAG",
172
+ text
173
+ }))), punctuation("@")),
174
+ "<": iriRef.pipe(Parser.map((iri) => ({
175
+ type: "IRIREF",
176
+ text: "",
177
+ iri
178
+ }))),
179
+ "/": Parser.alt(punctuation("//"), regexp),
180
+ _: blankNodeLabel.pipe(Parser.map((label) => ({
181
+ type: "BLANK_NODE_LABEL",
182
+ text: `_:${label}`
183
+ }))),
184
+ "\"": string,
185
+ "'": string,
186
+ "{": Parser.alt(repeatRange, code, punctuation("{")),
187
+ "^": punctuation("^^", "^"),
188
+ "|": punctuation("||", "|"),
189
+ ".": numericOr("."),
190
+ "+": numericOr("+"),
191
+ "-": numericOr("-"),
192
+ ...Record.fromEntries(Arr.map("0123456789".split(""), (d) => [d, numeric])),
193
+ ...Record.fromEntries(Arr.map("=}&,()[]$!~;*?%".split(""), (p) => [p, punctuation(p)]))
194
+ }, prefixedOrWord);
195
+ const lexer = Compiler.jit(Parser.seq(Parser.repeat(Parser.preceded(skip$1, Parser.withSpan(Parser.backtrack(token)).pipe(Parser.map(([t, { start, end }]) => make(t, start, end))))), Parser.preceded(skip$1, Parser.location)));
196
+ /** Why no token could be read at `offset` (the messages of the ShEx 2 lexer). */
197
+ const describe = (input, offset) => {
198
+ const c = input.charAt(offset);
199
+ if (c === "<") return "invalid IRI reference";
200
+ if (c === "/") return "invalid regular expression";
201
+ if (c === "\"" || c === "'") return "invalid string literal";
202
+ const w = /^[A-Za-z]+/.exec(input.slice(offset, offset + 64));
203
+ if (w !== null) return `unexpected word "${w[0]}"`;
204
+ return `invalid character ${quote(String.fromCodePoint(input.codePointAt(offset) ?? 0))}`;
205
+ };
206
+ /**
207
+ * Splits a document into tokens. Where no token can be read, the tokens end
208
+ * with an `ERROR` token whose text says why; no grammar rule accepts it, so
209
+ * the parser reports it if it gets that far, as a lazy lexer would.
210
+ */
211
+ const tokenize = (input) => {
212
+ const peeked = Parser.parsePeek(lexer, input);
213
+ if (Result.isFailure(peeked)) throw peeked.failure;
214
+ const [, [tokens, end]] = peeked.success;
215
+ if (end < input.length) tokens.push(make({
216
+ type: "ERROR",
217
+ text: describe(input, end)
218
+ }, end, end));
219
+ return tokens;
220
+ };
221
+ const skip = () => 0;
222
+ /**
223
+ * Resolves the IRIs of `tokens` in place, in document order: IRI references
224
+ * against the base, and prefixed names against the prefixes, both as set by
225
+ * the `BASE` and `PREFIX` directives met so far. The prefix name declared by
226
+ * a `PREFIX` directive is left alone. A prefixed name with an unknown prefix
227
+ * gets an `error`, which the parser reports when it reads the name.
228
+ */
229
+ const resolve = (tokens, baseIri, initialPrefixes) => {
230
+ let base = baseIri;
231
+ let prefixes = initialPrefixes;
232
+ const resolveRef = (iri) => Option.isNone(base) || isAbsolute(iri) ? iri : resolve$1(iri, base.value);
233
+ const expand = (t) => {
234
+ const ns = get(prefixes, t.text);
235
+ if (Option.isNone(ns)) {
236
+ t.error = Option.some(`unknown prefix "${t.text}:"`);
237
+ return false;
238
+ }
239
+ t.iri = ns.value + t.iri;
240
+ return true;
241
+ };
242
+ const resolveIri = (t) => {
243
+ t.iri = resolveRef(t.iri);
244
+ return 0;
245
+ };
246
+ const expandName = (t) => {
247
+ expand(t);
248
+ return 0;
249
+ };
250
+ const directive = (t, i) => {
251
+ const next = tokens[i + 1];
252
+ if (t.text === "BASE" && next?.type === "IRIREF") {
253
+ next.iri = resolveRef(next.iri);
254
+ base = Option.some(next.iri);
255
+ return 1;
256
+ }
257
+ if (t.text === "PREFIX" && next?.type === "PNAME" && next.iri === "") {
258
+ const value = tokens[i + 2];
259
+ if (value?.type === "IRIREF") value.iri = resolveRef(value.iri);
260
+ else if (value?.type !== "PNAME" || !expand(value)) return 0;
261
+ prefixes = set(prefixes, next.text, value.iri);
262
+ return 2;
263
+ }
264
+ return 0;
265
+ };
266
+ const stepOf = Match.type().pipe(Match.withReturnType(), Match.when("IRIREF", () => resolveIri), Match.when(Match.is("PNAME", "ATPNAME"), () => expandName), Match.when("KEYWORD", () => directive), Match.orElse(() => skip));
267
+ const steps = {};
268
+ Arr.reduce(tokens, 0, (consumed, t, i) => consumed > 0 ? consumed - 1 : (steps[t.type] ??= stepOf(t.type))(t, i));
269
+ return {
270
+ baseIri: base,
271
+ prefixes
272
+ };
273
+ };
274
+ // src/shex/internal/shexcParser.ts
275
+ /**
276
+ * The ShEx compact syntax (ShExC) parser, producing ShExJ. It is written
277
+ * with `@thomasfosterau/effect-parse` as a compiled grammar over the tokens
278
+ * of `shexcLexer.ts` (whose IRIs are already resolved), followed by a pass
279
+ * over the declarations in document order for the checks that depend on
280
+ * what was declared before (duplicate labels, shape and triple expression
281
+ * labels). The construction of ShExJ objects mirrors the reference grammar
282
+ * (shex.js `ShExJison.jison`) so that the output matches the ShExJ
283
+ * representations of the shexTest suite.
284
+ *
285
+ * Like the reference grammar, the parser is LL(1): every choice is made by
286
+ * dispatching on the kind of the next token (and committing to it), never by
287
+ * trying alternatives in turn.
288
+ *
289
+ * @internal
290
+ */
291
+ const RDF_TYPE$1 = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type";
292
+ const XSD$1 = "http://www.w3.org/2001/XMLSchema#";
293
+ const XSD_INTEGER = `${XSD$1}integer`;
294
+ const XSD_DECIMAL = `${XSD$1}decimal`;
295
+ const XSD_DOUBLE = `${XSD$1}double`;
296
+ const XSD_FLOAT = `${XSD$1}float`;
297
+ const XSD_BOOLEAN = `${XSD$1}boolean`;
298
+ const numericDatatypes = MutableHashSet.fromIterable([
299
+ "integer",
300
+ "decimal",
301
+ "float",
302
+ "double",
303
+ "string",
304
+ "boolean",
305
+ "dateTime",
306
+ "nonPositiveInteger",
307
+ "negativeInteger",
308
+ "long",
309
+ "int",
310
+ "short",
311
+ "byte",
312
+ "nonNegativeInteger",
313
+ "unsignedLong",
314
+ "unsignedInt",
315
+ "unsignedShort",
316
+ "unsignedByte",
317
+ "positiveInteger"
318
+ ].map((l) => XSD$1 + l));
319
+ const numericFacetNames = [
320
+ "mininclusive",
321
+ "minexclusive",
322
+ "maxinclusive",
323
+ "maxexclusive"
324
+ ];
325
+ /** A placeholder for the empty shape `.` / `{ }` (omitted as a value expression). */
326
+ const EMPTY = { type: "Shape" };
327
+ /** A token of the given kind (see `Tok.kind`). */
328
+ const tok = (kind, label = `'${kind}'`) => Token.oneOf((t) => t.kind === kind).pipe(Parser.expected(label));
329
+ const anyToken = Token.oneOf(() => true);
330
+ const nextKind = Parser.peek(anyToken).pipe(Parser.map((t) => t.kind));
331
+ /**
332
+ * Chooses a parser by the kind of the next token, failing (without consuming
333
+ * input) when no case matches and there is no `otherwise`.
334
+ */
335
+ const select = (label, cases, otherwise) => {
336
+ const record = Record.fromEntries(Arr.flatMap(Arr.reverse(cases), ([kinds, p]) => Arr.map(kinds, (k) => [k, p])));
337
+ return (otherwise === void 0 ? Parser.dispatch(nextKind, record) : Parser.dispatch(nextKind, record, otherwise)).pipe(Parser.expected(label));
338
+ };
339
+ /** Fails with a semantic error at token index `at`. */
340
+ const failAt = (message, at) => Result.fail({
341
+ message,
342
+ at
343
+ });
344
+ /** Whether the next token is of one of `kinds` (consumed if so). */
345
+ const accept = (...kinds) => Parser.opt(Token.oneOf((t) => kinds.includes(t.kind))).pipe(Parser.map(Option.isSome));
346
+ const IRI_KINDS = ["IRIREF", "PNAME"];
347
+ /** The IRI of a resolved token (at token index `at`), or its resolution error. */
348
+ const tokenIri = (t, at) => Option.isNone(t.error) ? Result.succeed(t.iri) : failAt(t.error.value, at);
349
+ /** The IRI of an IRIREF or PNAME token, or the token's resolution error. */
350
+ const iri = Parser.seq(Parser.location, Token.oneOf((t) => t.kind === "IRIREF" || t.kind === "PNAME")).pipe(Parser.tryMap(([at, t]) => tokenIri(t, at)), Parser.cut, Parser.expected("an IRI"));
351
+ const blankNode = tok("BLANK_NODE_LABEL", "a blank node").pipe(Parser.map((t) => t.text));
352
+ /** shapeExprLabel / tripleExprLabel: iri | blankNode */
353
+ const label = select("an IRI or a blank node", [[IRI_KINDS, iri], [["BLANK_NODE_LABEL"], blankNode]]);
354
+ const predicate = select("a predicate", [[["a"], anyToken.pipe(Parser.as(RDF_TYPE$1))], [IRI_KINDS, iri]]);
355
+ const LITERAL_KINDS = [
356
+ "STRING",
357
+ "LANG_STRING",
358
+ "INTEGER",
359
+ "DECIMAL",
360
+ "DOUBLE",
361
+ "true",
362
+ "false"
363
+ ];
364
+ const literal = select("a literal", [
365
+ [["INTEGER"], anyToken.pipe(Parser.map((t) => ({
366
+ value: t.text,
367
+ type: XSD_INTEGER
368
+ })))],
369
+ [["DECIMAL"], anyToken.pipe(Parser.map((t) => ({
370
+ value: t.text,
371
+ type: XSD_DECIMAL
372
+ })))],
373
+ [["DOUBLE"], anyToken.pipe(Parser.map((t) => ({
374
+ value: t.text,
375
+ type: XSD_DOUBLE
376
+ })))],
377
+ [["LANG_STRING"], anyToken.pipe(Parser.map((t) => ({
378
+ value: t.text,
379
+ language: t.suffix.toLowerCase()
380
+ })))],
381
+ [["STRING"], Parser.seq(anyToken, Parser.opt(Parser.preceded(tok("^^"), Parser.cut(iri)))).pipe(Parser.map(([t, datatype]) => Option.isSome(datatype) ? {
382
+ value: t.text,
383
+ type: datatype.value
384
+ } : { value: t.text }))],
385
+ [["true", "false"], anyToken.pipe(Parser.map((t) => ({
386
+ value: t.text,
387
+ type: XSD_BOOLEAN
388
+ })))]
389
+ ]);
390
+ const plain = (e) => ({
391
+ e,
392
+ nested: false
393
+ });
394
+ const isJunction = (e) => !Predicate.isString(e) && (e.type === "ShapeAnd" || e.type === "ShapeOr");
395
+ const junction = (type, atom, juncts) => {
396
+ if (Arr.isReadonlyArrayEmpty(juncts)) return atom.e;
397
+ const e = atom.e;
398
+ if (isJunction(e) && e.type === type && !atom.nested) return {
399
+ ...e,
400
+ shapeExprs: e.shapeExprs.concat(juncts)
401
+ };
402
+ return {
403
+ type,
404
+ shapeExprs: [e, ...juncts]
405
+ };
406
+ };
407
+ const isAndRest = Predicate.isTagged("And");
408
+ const prepend = (rest, atoms) => {
409
+ if (!isAndRest(rest)) return {
410
+ type: "ShapeOr",
411
+ shapeExprs: [...atoms, ...rest.ors]
412
+ };
413
+ const and = {
414
+ type: "ShapeAnd",
415
+ shapeExprs: [...atoms, ...rest.ands]
416
+ };
417
+ return Arr.isReadonlyArrayNonEmpty(rest.ors) ? {
418
+ type: "ShapeOr",
419
+ shapeExprs: [and, ...rest.ors]
420
+ } : and;
421
+ };
422
+ const prependAtom = (atom, rest) => Option.match(rest, {
423
+ onNone: () => atom.e,
424
+ onSome: (r) => {
425
+ const e = atom.e;
426
+ return !Predicate.isString(e) && e.type === "ShapeAnd" && isAndRest(r) && Arr.isReadonlyArrayEmpty(r.ors) && !atom.nested ? prepend(r, e.shapeExprs) : prepend(r, [e]);
427
+ }
428
+ });
429
+ const annotations = Parser.repeat(Parser.preceded(tok("//"), Parser.cut(Parser.seq(predicate, select("an IRI or a literal", [[IRI_KINDS, iri]], literal)).pipe(Parser.map(([pred, object]) => ({
430
+ type: "Annotation",
431
+ predicate: pred,
432
+ object
433
+ }))))));
434
+ const codeDecls = Parser.repeat(Parser.preceded(tok("%"), Parser.cut(Parser.seq(iri, select("code or %", [[["CODE"], anyToken.pipe(Parser.map((t) => Option.some(t.text)))], [["%"], anyToken.pipe(Parser.as(Option.none()))]])).pipe(Parser.map(([name, code]) => Option.match(code, {
435
+ onNone: () => ({
436
+ type: "SemAct",
437
+ name
438
+ }),
439
+ onSome: (c) => ({
440
+ type: "SemAct",
441
+ name,
442
+ code: c
443
+ })
444
+ }))))), { min: 1 });
445
+ const semanticActions = Parser.opt(codeDecls);
446
+ const cardinality = Parser.opt(select("a cardinality", [
447
+ [["*"], anyToken.pipe(Parser.as({
448
+ min: 0,
449
+ max: -1
450
+ }))],
451
+ [["+"], anyToken.pipe(Parser.as({
452
+ min: 1,
453
+ max: -1
454
+ }))],
455
+ [["?"], anyToken.pipe(Parser.as({
456
+ min: 0,
457
+ max: 1
458
+ }))],
459
+ [["REPEAT_RANGE"], anyToken.pipe(Parser.map((t) => ({
460
+ min: t.min,
461
+ max: t.max
462
+ })))]
463
+ ]));
464
+ const integer = Parser.cut(tok("INTEGER", "an integer")).pipe(Parser.map((t) => parseInt(t.text, 10)));
465
+ const rawNumeric = select("a numeric literal", [
466
+ [["INTEGER"], anyToken.pipe(Parser.map((t) => parseInt(t.text, 10)))],
467
+ [["DECIMAL", "DOUBLE"], anyToken.pipe(Parser.map((t) => parseFloat(t.text)))],
468
+ [["STRING"], Parser.seq(anyToken, Parser.cut(Parser.preceded(tok("^^"), Parser.seq(Parser.location, iri)))).pipe(Parser.tryMap(([t, [at, dt]]) => {
469
+ const value = t.text;
470
+ if (dt === XSD_DECIMAL || dt === XSD_FLOAT || dt === XSD_DOUBLE) return Result.succeed(parseFloat(value));
471
+ if (MutableHashSet.has(numericDatatypes, dt)) return Result.succeed(parseInt(value, 10));
472
+ return failAt(`numeric range facet expected numeric datatype instead of ${dt}`, at);
473
+ }), Parser.cut)]
474
+ ]);
475
+ const LENGTH_FACETS = [
476
+ "LENGTH",
477
+ "MINLENGTH",
478
+ "MAXLENGTH"
479
+ ];
480
+ const DIGITS_FACETS = ["TOTALDIGITS", "FRACTIONDIGITS"];
481
+ const RANGE_FACETS = [
482
+ "MININCLUSIVE",
483
+ "MINEXCLUSIVE",
484
+ "MAXINCLUSIVE",
485
+ "MAXEXCLUSIVE"
486
+ ];
487
+ const NUMERIC_FACETS = [...DIGITS_FACETS, ...RANGE_FACETS];
488
+ const integerFacet = Parser.seq(Parser.location, anyToken, integer).pipe(Parser.map(([at, t, n]) => [
489
+ t.text.toLowerCase(),
490
+ n,
491
+ at
492
+ ]));
493
+ const stringFacetCases = [[["REGEXP"], Parser.seq(Parser.location, anyToken).pipe(Parser.map(([at, t]) => [
494
+ "pattern",
495
+ t.text,
496
+ at,
497
+ t.suffix
498
+ ]))], [LENGTH_FACETS, integerFacet]];
499
+ const numericFacetCases = [[DIGITS_FACETS, integerFacet], [RANGE_FACETS, Parser.seq(Parser.location, anyToken, Parser.cut(rawNumeric)).pipe(Parser.map(([at, t, n]) => [
500
+ t.text.toLowerCase(),
501
+ n,
502
+ at
503
+ ]))]];
504
+ const noFacets = () => Result.succeed({});
505
+ const facets = (strings, numerics) => Parser.repeat(select("a facet", [...strings ? stringFacetCases : [], ...numerics ? numericFacetCases : []])).pipe(Parser.tryMap((list) => Arr.reduce(list, noFacets(), (acc, [key, value, at, flags]) => Result.flatMap(acc, (out) => {
506
+ if (key in out) return failAt(`facet ${key} defined multiple times`, at);
507
+ out[key] = value;
508
+ if (flags !== void 0 && flags !== "") out["flags"] = flags;
509
+ return Result.succeed(out);
510
+ }))), Parser.cut);
511
+ const tilde = accept("~");
512
+ const exclusion = (p) => Parser.preceded(tok("-"), Parser.cut(p));
513
+ const iriExclusion = exclusion(Parser.seq(iri, tilde).pipe(Parser.map(([base, stem]) => stem ? {
514
+ type: "IriStem",
515
+ stem: base
516
+ } : base)));
517
+ const literalExclusion = exclusion(Parser.seq(literal, tilde).pipe(Parser.map(([lit, stem]) => stem ? {
518
+ type: "LiteralStem",
519
+ stem: lit.value
520
+ } : lit.value)));
521
+ const langTag = tok("LANGTAG", "a language tag").pipe(Parser.map((t) => t.text));
522
+ const languageExclusion = exclusion(Parser.seq(langTag, tilde).pipe(Parser.map(([tag, stem]) => stem ? {
523
+ type: "LanguageStem",
524
+ stem: tag
525
+ } : tag)));
526
+ const stemmed = (head, exclude, build) => Parser.seq(head, Parser.opt(Parser.preceded(tok("~"), Parser.repeat(exclude)))).pipe(Parser.map(([h, exclusions]) => build(h, Option.isSome(exclusions), Option.getOrElse(exclusions, () => []))));
527
+ /** The exclusions after a `.` wildcard: their kind is chosen by the first one. */
528
+ const wildcardExclusions = Parser.preceded(Parser.peek(tok("-")), Parser.dispatch(Parser.peek(Parser.preceded(anyToken, anyToken)).pipe(Parser.map((t) => t.kind)), {
529
+ LANGTAG: Parser.repeat(languageExclusion).pipe(Parser.map((exclusions) => ({
530
+ type: "LanguageStemRange",
531
+ stem: { type: "Wildcard" },
532
+ exclusions
533
+ }))),
534
+ ...Record.fromEntries(Arr.map(IRI_KINDS, (k) => [k, Parser.repeat(iriExclusion).pipe(Parser.map((exclusions) => ({
535
+ type: "IriStemRange",
536
+ stem: { type: "Wildcard" },
537
+ exclusions
538
+ })))]))
539
+ }, Parser.repeat(literalExclusion).pipe(Parser.map((exclusions) => ({
540
+ type: "LiteralStemRange",
541
+ stem: { type: "Wildcard" },
542
+ exclusions
543
+ }))))).pipe(Parser.expected("'-'"));
544
+ const valueSetValue = select("a value set value", [
545
+ [IRI_KINDS, Parser.cut(stemmed(iri, iriExclusion, (stem, isStem, exclusions) => !isStem ? stem : Arr.isReadonlyArrayNonEmpty(exclusions) ? {
546
+ type: "IriStemRange",
547
+ stem,
548
+ exclusions
549
+ } : {
550
+ type: "IriStem",
551
+ stem
552
+ }))],
553
+ [LITERAL_KINDS, Parser.cut(stemmed(literal, literalExclusion, (lit, isStem, exclusions) => !isStem ? lit : Arr.isReadonlyArrayNonEmpty(exclusions) ? {
554
+ type: "LiteralStemRange",
555
+ stem: lit.value,
556
+ exclusions
557
+ } : {
558
+ type: "LiteralStem",
559
+ stem: lit.value
560
+ }))],
561
+ [["LANGTAG"], Parser.cut(stemmed(langTag, languageExclusion, (tag, isStem, exclusions) => !isStem ? {
562
+ type: "Language",
563
+ languageTag: tag
564
+ } : Arr.isReadonlyArrayNonEmpty(exclusions) ? {
565
+ type: "LanguageStemRange",
566
+ stem: tag,
567
+ exclusions
568
+ } : {
569
+ type: "LanguageStem",
570
+ stem: tag
571
+ }))],
572
+ [["@"], Parser.preceded(anyToken, Parser.cut(Parser.preceded(tok("~"), Parser.repeat(languageExclusion)))).pipe(Parser.map((exclusions) => Arr.isReadonlyArrayNonEmpty(exclusions) ? {
573
+ type: "LanguageStemRange",
574
+ stem: "",
575
+ exclusions
576
+ } : {
577
+ type: "LanguageStem",
578
+ stem: ""
579
+ }))],
580
+ [["."], Parser.preceded(anyToken, Parser.cut(wildcardExclusions))]
581
+ ]);
582
+ const valueSet = Parser.delimited(tok("["), Parser.cut(Parser.repeat(valueSetValue)), Parser.cut(tok("]")));
583
+ const litInlineNodeConstraint = select("a node constraint", [
584
+ [["LITERAL"], Parser.preceded(anyToken, facets(true, true)).pipe(Parser.map((f) => ({
585
+ type: "NodeConstraint",
586
+ nodeKind: "literal",
587
+ ...f
588
+ })))],
589
+ [IRI_KINDS, Parser.seq(Parser.location, iri, facets(true, true)).pipe(Parser.tryMap(([at, datatype, f]) => Option.match(MutableHashSet.has(numericDatatypes, datatype) ? Option.none() : Arr.findFirst(numericFacetNames, (name) => name in f), {
590
+ onNone: () => Result.succeed({
591
+ type: "NodeConstraint",
592
+ datatype,
593
+ ...f
594
+ }),
595
+ onSome: (name) => failAt(`facet ${name} not allowed for unknown datatype ${datatype}`, at)
596
+ })), Parser.cut)],
597
+ [["["], Parser.terminated(valueSet, facets(true, true)).pipe(Parser.map((values) => ({
598
+ type: "NodeConstraint",
599
+ values
600
+ })))],
601
+ [NUMERIC_FACETS, facets(false, true).pipe(Parser.map((f) => ({
602
+ type: "NodeConstraint",
603
+ ...f
604
+ })))]
605
+ ]);
606
+ const NODE_KINDS = [
607
+ "IRI",
608
+ "BNODE",
609
+ "NONLITERAL"
610
+ ];
611
+ const NON_LIT_KINDS = [
612
+ ...NODE_KINDS,
613
+ "LENGTH",
614
+ "MINLENGTH",
615
+ "MAXLENGTH",
616
+ "REGEXP"
617
+ ];
618
+ const LIT_KINDS = [
619
+ "LITERAL",
620
+ ...NUMERIC_FACETS,
621
+ ...IRI_KINDS,
622
+ "["
623
+ ];
624
+ const nodeKindOf = (kind) => kind === "IRI" ? "iri" : kind === "BNODE" ? "bnode" : "nonliteral";
625
+ const nonLitInlineNodeConstraint = Parser.seq(Parser.opt(select("a node kind", [[NODE_KINDS, anyToken.pipe(Parser.map((t) => t.text))]])), facets(true, false)).pipe(Parser.map(([kind, f]) => Option.isSome(kind) ? {
626
+ type: "NodeConstraint",
627
+ nodeKind: nodeKindOf(kind.value),
628
+ ...f
629
+ } : {
630
+ type: "NodeConstraint",
631
+ ...f
632
+ }));
633
+ /** A non-literal node constraint, if one starts here. */
634
+ const nonLitNodeConstraintOpt = Parser.opt(select("a node constraint", [[NON_LIT_KINDS, Parser.cut(nonLitInlineNodeConstraint)]]));
635
+ const withAnnotations = (nc) => Parser.seq(nc, annotations, semanticActions).pipe(Parser.map(([constraint, annots, semActs]) => {
636
+ if (Arr.isReadonlyArrayEmpty(annots) && Option.isNone(semActs)) return constraint;
637
+ const out = constraint;
638
+ if (Arr.isReadonlyArrayNonEmpty(annots)) out.annotations = annots;
639
+ if (Option.isSome(semActs)) out.semActs = semActs.value;
640
+ return out;
641
+ }));
642
+ /** A non-literal node constraint with its annotations, if one starts here. */
643
+ const annotatedNonLitNodeConstraintOpt = Parser.opt(select("a node constraint", [[NON_LIT_KINDS, Parser.cut(withAnnotations(nonLitInlineNodeConstraint))]]));
644
+ const REF_KINDS = ["ATPNAME", "@"];
645
+ const SHAPE_DEF_KINDS = [
646
+ "{",
647
+ "&",
648
+ "EXTENDS",
649
+ "EXTRA",
650
+ "CLOSED"
651
+ ];
652
+ const shapeRef = select("a shape reference", [[["ATPNAME"], Parser.seq(Parser.location, anyToken).pipe(Parser.tryMap(([at, t]) => tokenIri(t, at)), Parser.cut)], [["@"], Parser.preceded(anyToken, Parser.cut(label))]]);
653
+ const shapeExpressionBody = Parser.suspend(() => shapeExpressionBodyDef);
654
+ const tripleExpression = Parser.suspend(() => tripleExpressionDef);
655
+ const extendsShapeOr = Parser.suspend(() => extendsShapeOrDef);
656
+ const inlineShapeExpression = Parser.suspend(() => inlineShapeExpressionDef);
657
+ const parenthesised = Parser.delimited(anyToken, Parser.cut(shapeExpressionBody), Parser.cut(tok(")"))).pipe(Parser.map((e) => ({
658
+ e,
659
+ nested: true
660
+ })));
661
+ const empty = anyToken.pipe(Parser.as(plain(EMPTY)));
662
+ const inlineShapeDefinition = Parser.seq(Parser.repeat(select("a shape qualifier", [
663
+ [["EXTENDS", "&"], Parser.preceded(anyToken, Parser.cut(extendsShapeOr)).pipe(Parser.map((e) => ({
664
+ _tag: "Extends",
665
+ e
666
+ })))],
667
+ [["EXTRA"], Parser.preceded(anyToken, Parser.cut(Parser.repeat(predicate, { min: 1 }))).pipe(Parser.map((predicates) => ({
668
+ _tag: "Extra",
669
+ predicates
670
+ })))],
671
+ [["CLOSED"], anyToken.pipe(Parser.as({ _tag: "Closed" }))]
672
+ ])), Parser.delimited(Parser.cut(tok("{")), select("a triple expression", [[["}"], Parser.succeed(Option.none())]], Parser.cut(tripleExpression).pipe(Parser.map(Option.some))), Parser.cut(tok("}")))).pipe(Parser.map(([qualifiers, expression]) => {
673
+ if (Option.isNone(expression) && Arr.isReadonlyArrayEmpty(qualifiers)) return EMPTY;
674
+ const extendsList = Arr.filterMap(qualifiers, (q) => Predicate.isTagged(q, "Extends") ? Result.succeed(q.e) : Result.failVoid);
675
+ const extra = Arr.flatMap(qualifiers, (q) => Predicate.isTagged(q, "Extra") ? q.predicates : []);
676
+ const shape = { type: "Shape" };
677
+ if (Option.isSome(expression)) shape.expression = expression.value;
678
+ if (Arr.isReadonlyArrayNonEmpty(extendsList)) shape.extends = extendsList;
679
+ if (Arr.some(qualifiers, (q) => Predicate.isTagged(q, "Extra"))) shape.extra = extra;
680
+ if (Arr.some(qualifiers, (q) => Predicate.isTagged(q, "Closed"))) shape.closed = true;
681
+ return shape;
682
+ }));
683
+ const shapeDefinition = Parser.seq(inlineShapeDefinition, annotations, semanticActions).pipe(Parser.map(([def, annots, semActs]) => {
684
+ const out = def === EMPTY ? { type: "Shape" } : def;
685
+ if (Arr.isReadonlyArrayNonEmpty(annots)) out.annotations = annots;
686
+ if (Option.isSome(semActs)) out.semActs = semActs.value;
687
+ return out;
688
+ }));
689
+ const shapeOrRef = select("a shape definition or reference", [[REF_KINDS, shapeRef]], shapeDefinition);
690
+ const inlineShapeOrRef = select("a shape definition or reference", [[REF_KINDS, shapeRef]], inlineShapeDefinition);
691
+ /** A shape definition or reference, if one starts here. */
692
+ const shapeOrRefOpt = (p) => Parser.opt(select("a shape definition or reference", [[[...SHAPE_DEF_KINDS, ...REF_KINDS], Parser.cut(p)]]));
693
+ /** A node constraint, conjoined with the shape definition or reference after it if any. */
694
+ const andRef = (nc, ref) => Option.isSome(ref) ? {
695
+ type: "ShapeAnd",
696
+ shapeExprs: [{ ...nc }, ref.value]
697
+ } : nc;
698
+ /** shapeAtom (with `allowRef`) and shapeAtomNoRef. */
699
+ const shapeAtom = (allowRef) => select("a shape expression", [
700
+ [NON_LIT_KINDS, Parser.cut(Parser.seq(withAnnotations(nonLitInlineNodeConstraint), shapeOrRefOpt(shapeOrRef)).pipe(Parser.map(([nc, ref]) => plain(andRef(nc, ref)))))],
701
+ [LIT_KINDS, Parser.cut(withAnnotations(litInlineNodeConstraint)).pipe(Parser.map(plain))],
702
+ [allowRef ? [...SHAPE_DEF_KINDS, ...REF_KINDS] : SHAPE_DEF_KINDS, Parser.cut(Parser.seq(shapeOrRef, annotatedNonLitNodeConstraintOpt).pipe(Parser.map(([sor, nc]) => plain(Option.match(nc, {
703
+ onNone: () => sor,
704
+ onSome: (c) => junction("ShapeAnd", plain(sor), [c])
705
+ })))))],
706
+ [["("], parenthesised],
707
+ [["."], empty]
708
+ ]);
709
+ const shapeNot = select("a shape expression", [[["NOT"], Parser.preceded(anyToken, Parser.cut(shapeAtom(true))).pipe(Parser.map((a) => plain({
710
+ type: "ShapeNot",
711
+ shapeExpr: a.e
712
+ })))]], shapeAtom(true));
713
+ const shapeAnd = Parser.seq(shapeNot, Parser.repeat(Parser.preceded(tok("AND"), Parser.cut(shapeNot)))).pipe(Parser.map(([first, rest]) => junction("ShapeAnd", first, rest.map((a) => a.e))));
714
+ const ors = Parser.repeat(Parser.preceded(tok("OR"), Parser.cut(shapeAnd)));
715
+ const shapeOrRest = select("'AND' or 'OR'", [[["OR"], ors.pipe(Parser.map((operands) => ({
716
+ _tag: "Or",
717
+ ors: operands
718
+ })))], [["AND"], Parser.seq(Parser.repeat(Parser.preceded(tok("AND"), Parser.cut(shapeNot))), ors).pipe(Parser.map(([conjuncts, operands]) => ({
719
+ _tag: "And",
720
+ ands: Arr.flatMap(conjuncts, (c) => !Predicate.isString(c.e) && c.e.type === "ShapeAnd" && !c.nested ? c.e.shapeExprs : [c.e]),
721
+ ors: operands
722
+ })))]]);
723
+ /**
724
+ * shapeExpression ::= NOT? shapeAtomNoRef shapeOr? | NOT shapeRef shapeOr? | shapeRef shapeOr
725
+ */
726
+ const shapeExpressionBodyDef = select("a shape expression", [[["NOT"], Parser.preceded(anyToken, Parser.cut(select("a shape expression", [[REF_KINDS, Parser.seq(shapeRef, Parser.opt(shapeOrRest)).pipe(Parser.map(([ref, rest]) => prependAtom(plain({
727
+ type: "ShapeNot",
728
+ shapeExpr: ref
729
+ }), rest)))]], Parser.seq(shapeAtom(false), Parser.opt(shapeOrRest)).pipe(Parser.map(([a, rest]) => prependAtom(plain({
730
+ type: "ShapeNot",
731
+ shapeExpr: a.e
732
+ }), rest))))))], [REF_KINDS, Parser.seq(shapeRef, Parser.cut(shapeOrRest)).pipe(Parser.map(([ref, rest]) => prepend(rest, [ref])))]], Parser.seq(shapeAtom(false), Parser.opt(shapeOrRest)).pipe(Parser.map(([a, rest]) => prependAtom(a, rest))));
733
+ /** The atoms of inline and EXTENDS shape expressions, which differ in one case. */
734
+ const inlineAtom = (extendsAtom) => select("a shape expression", [
735
+ [NON_LIT_KINDS, Parser.cut(extendsAtom ? Parser.seq(nonLitInlineNodeConstraint, inlineShapeOrRef).pipe(Parser.map(([nc, ref]) => plain({
736
+ type: "ShapeAnd",
737
+ shapeExprs: [{ ...nc }, ref]
738
+ }))) : Parser.seq(nonLitInlineNodeConstraint, shapeOrRefOpt(inlineShapeOrRef)).pipe(Parser.map(([nc, ref]) => plain(andRef(nc, ref)))))],
739
+ [LIT_KINDS, Parser.cut(litInlineNodeConstraint).pipe(Parser.map(plain))],
740
+ [[...SHAPE_DEF_KINDS, ...REF_KINDS], Parser.cut(Parser.seq(inlineShapeOrRef, nonLitNodeConstraintOpt).pipe(Parser.map(([sor, nc]) => plain(Option.match(nc, {
741
+ onNone: () => sor,
742
+ onSome: (c) => ({
743
+ type: "ShapeAnd",
744
+ shapeExprs: [sor, c]
745
+ })
746
+ })))))],
747
+ [["("], parenthesised],
748
+ [["."], empty]
749
+ ]);
750
+ const junctions = (atom) => {
751
+ const not = select("a shape expression", [[["NOT"], Parser.preceded(anyToken, Parser.cut(atom)).pipe(Parser.map((a) => plain({
752
+ type: "ShapeNot",
753
+ shapeExpr: a.e
754
+ })))]], atom);
755
+ const and = Parser.seq(not, Parser.repeat(Parser.preceded(tok("AND"), Parser.cut(not)))).pipe(Parser.map(([first, rest]) => junction("ShapeAnd", first, rest.map((a) => a.e))));
756
+ return Parser.seq(and, Parser.repeat(Parser.preceded(tok("OR"), Parser.cut(and)))).pipe(Parser.map(([first, rest]) => junction("ShapeOr", plain(first), rest)));
757
+ };
758
+ const inlineShapeExpressionDef = junctions(inlineAtom(false));
759
+ const extendsShapeOrDef = junctions(inlineAtom(true));
760
+ /** The token index of the label of each labelled triple expression. */
761
+ const labelAt = /* @__PURE__ */ new WeakMap();
762
+ const tripleConstraint = Parser.seq(accept("^"), predicate, inlineShapeExpression, cardinality, annotations, semanticActions).pipe(Parser.map(([inverse, pred, valueExpr, card, annots, semActs]) => {
763
+ const tc = inverse ? {
764
+ type: "TripleConstraint",
765
+ inverse: true,
766
+ predicate: pred
767
+ } : {
768
+ type: "TripleConstraint",
769
+ predicate: pred
770
+ };
771
+ if (valueExpr !== EMPTY) tc.valueExpr = valueExpr;
772
+ if (Option.isSome(card)) {
773
+ tc.min = card.value.min;
774
+ tc.max = card.value.max;
775
+ }
776
+ if (Option.isSome(semActs)) tc.semActs = semActs.value;
777
+ if (Arr.isReadonlyArrayNonEmpty(annots)) tc.annotations = annots;
778
+ return tc;
779
+ }));
780
+ const bracketedOrConstraint = select("a triple expression", [[["("], Parser.seq(Parser.location, Parser.delimited(anyToken, Parser.cut(tripleExpression), Parser.cut(tok(")"))), cardinality, annotations, semanticActions).pipe(Parser.tryMap(([at, expr, card, annots, semActs]) => {
781
+ if (Option.isNone(card) && Arr.isReadonlyArrayEmpty(annots) && Option.isNone(semActs)) return Result.succeed(expr);
782
+ if (Predicate.isString(expr)) return failAt(`a group containing only the inclusion &<${expr}> can't take a cardinality, an annotation or a semantic action`, at);
783
+ const out = Option.isSome(card) && expr.type === "TripleConstraint" && (expr.min !== void 0 || expr.max !== void 0) ? {
784
+ type: "EachOf",
785
+ expressions: [expr]
786
+ } : expr;
787
+ if (Option.isSome(card)) {
788
+ out.min = card.value.min;
789
+ out.max = card.value.max;
790
+ }
791
+ if (Arr.isReadonlyArrayNonEmpty(annots)) out.annotations = annots;
792
+ if (Option.isSome(semActs)) out.semActs = [...out.semActs ?? [], ...semActs.value];
793
+ return Result.succeed(out);
794
+ }), Parser.cut)]], tripleConstraint);
795
+ const UNARY_KINDS = [
796
+ "$",
797
+ "&",
798
+ "(",
799
+ "^",
800
+ "a",
801
+ ...IRI_KINDS
802
+ ];
803
+ const unaryTripleExpr = select("a triple expression", [
804
+ [["&"], Parser.preceded(anyToken, Parser.cut(label))],
805
+ [["$"], Parser.seq(Parser.preceded(anyToken, Parser.cut(Parser.seq(Parser.location, label))), Parser.cut(bracketedOrConstraint)).pipe(Parser.tryMap(([[at, id], expr]) => {
806
+ if (Predicate.isString(expr)) return failAt(`a group containing only the inclusion &<${expr}> can't take a label`, at);
807
+ const labelled = {
808
+ id,
809
+ ...expr
810
+ };
811
+ labelAt.set(labelled, at);
812
+ return Result.succeed(labelled);
813
+ }), Parser.cut)],
814
+ [[
815
+ "(",
816
+ "^",
817
+ "a",
818
+ ...IRI_KINDS
819
+ ], Parser.cut(bracketedOrConstraint)]
820
+ ]);
821
+ const separator = select("; or ,", [[[";", ","], anyToken]]);
822
+ const groupTripleExpr = Parser.terminated(Parser.seq(unaryTripleExpr, Parser.repeat(Parser.preceded(separator, select("a triple expression", [[UNARY_KINDS, unaryTripleExpr]])))), Parser.opt(separator)).pipe(Parser.map(([first, rest]) => Arr.isReadonlyArrayEmpty(rest) ? first : {
823
+ type: "EachOf",
824
+ expressions: [first, ...rest]
825
+ }));
826
+ const tripleExpressionDef = Parser.seq(groupTripleExpr, Parser.repeat(Parser.preceded(tok("|"), Parser.cut(groupTripleExpr)))).pipe(Parser.map(([first, rest]) => Arr.isReadonlyArrayEmpty(rest) ? first : {
827
+ type: "OneOf",
828
+ expressions: [first, ...rest]
829
+ }));
830
+ const noStatement = Option.none();
831
+ const directiveCases = [
832
+ [["BASE"], Parser.preceded(anyToken, Parser.cut(tok("IRIREF", "an IRI reference"))).pipe(Parser.as(noStatement))],
833
+ [["PREFIX"], Parser.preceded(anyToken, Parser.cut(Parser.seq(Token.oneOf((t) => t.type === "PNAME" && t.iri === "").pipe(Parser.expected("a prefix name")), iri))).pipe(Parser.as(noStatement))],
834
+ [["IMPORT"], Parser.preceded(anyToken, Parser.cut(iri)).pipe(Parser.map((base) => Option.some({
835
+ _tag: "Import",
836
+ iri: base
837
+ })))]
838
+ ];
839
+ const directive = select("a directive", directiveCases);
840
+ const startDecl = Parser.seq(Parser.location, Parser.preceded(anyToken, Parser.cut(Parser.preceded(tok("="), Parser.seq(shapeAnd, ors))))).pipe(Parser.map(([at, [first, rest]]) => ({
841
+ _tag: "Start",
842
+ expr: junction("ShapeOr", plain(first), rest),
843
+ at
844
+ })));
845
+ const shapeExprDecl = Parser.seq(accept("ABSTRACT"), Parser.location, label, Parser.repeat(Parser.preceded(select("'RESTRICTS' or '-'", [[["RESTRICTS", "-"], anyToken]]), Parser.cut(shapeOrRef))), select("a shape expression", [[["EXTERNAL"], anyToken.pipe(Parser.as({ type: "ShapeExternal" }))], [REF_KINDS, Parser.seq(shapeRef, Parser.opt(shapeOrRest)).pipe(Parser.map(([ref, rest]) => Option.match(rest, {
846
+ onNone: () => ref,
847
+ onSome: (r) => prepend(r, [ref])
848
+ })))]], shapeExpressionBody)).pipe(Parser.map(([abstract, at, name, restricts, body]) => {
849
+ const decl = {
850
+ type: "ShapeDecl",
851
+ id: name,
852
+ shapeExpr: body === EMPTY ? { type: "Shape" } : body
853
+ };
854
+ if (abstract) decl.abstract = true;
855
+ if (Arr.isReadonlyArrayNonEmpty(restricts)) decl.restricts = restricts;
856
+ return {
857
+ _tag: "Decl",
858
+ decl,
859
+ at
860
+ };
861
+ }));
862
+ const statement = select("a directive or shape declaration", [
863
+ ...directiveCases,
864
+ [["START"], startDecl.pipe(Parser.map(Option.some))],
865
+ [[
866
+ "ABSTRACT",
867
+ "BLANK_NODE_LABEL",
868
+ ...IRI_KINDS
869
+ ], Parser.cut(shapeExprDecl).pipe(Parser.map(Option.some))]
870
+ ]);
871
+ const document = Compiler.jit(Parser.terminated(Parser.seq(Parser.repeat(directive), Parser.opt(codeDecls), Parser.repeat(statement)), Parser.eof));
872
+ const labelledShape = (s, f) => {
873
+ if (!Predicate.isString(s)) labelledShapeExpr(s, f);
874
+ };
875
+ const labelledTriple = (t, f) => {
876
+ if (Predicate.isString(t)) return;
877
+ if (t.type === "TripleConstraint") {
878
+ if (t.valueExpr !== void 0) labelledShape(t.valueExpr, f);
879
+ } else t.expressions.forEach((e) => labelledTriple(e, f));
880
+ if (t.id !== void 0) f(t, t.id);
881
+ };
882
+ const labelledShapeExpr = Match.fn((s, _f) => s).pipe(Match.when({ type: Match.is("ShapeOr", "ShapeAnd") }, (s, _s, f) => s.shapeExprs.forEach((e) => labelledShape(e, f))), Match.when({ type: "ShapeNot" }, (s, _s, f) => labelledShape(s.shapeExpr, f)), Match.when({ type: "Shape" }, (s, _s, f) => {
883
+ s.extends?.forEach((e) => labelledShape(e, f));
884
+ if (s.expression !== void 0) labelledTriple(s.expression, f);
885
+ }), Match.orElse(() => void 0));
886
+ /**
887
+ * Calls `f` on each labelled triple expression of a shape expression, in
888
+ * document order (each after the labelled expressions it contains).
889
+ */
890
+ const eachLabelled = (e, f) => labelledShape(e, f);
891
+ const assemble = (statements, startActs) => {
892
+ const imports = [];
893
+ const shapes = [];
894
+ const shapeIds = MutableHashSet.empty();
895
+ const productions = MutableHashSet.empty();
896
+ let error = Option.none();
897
+ const production = (t, id) => {
898
+ if (Option.isSome(error)) return;
899
+ const at = labelAt.get(t) ?? 0;
900
+ if (MutableHashSet.has(shapeIds, id)) error = Option.some({
901
+ message: `${id} is a shape expression`,
902
+ at
903
+ });
904
+ else if (MutableHashSet.has(productions, id)) error = Option.some({
905
+ message: `${id} already defined`,
906
+ at
907
+ });
908
+ else MutableHashSet.add(productions, id);
909
+ };
910
+ const step = (start, s) => {
911
+ if (Predicate.isTagged(s, "Import")) {
912
+ imports.push(s.iri);
913
+ return Result.succeed(start);
914
+ }
915
+ if (Predicate.isTagged(s, "Start")) {
916
+ if (Option.isSome(start)) return failAt("start already defined", s.at);
917
+ eachLabelled(s.expr, production);
918
+ return Option.isSome(error) ? Result.fail(error.value) : Result.succeed(Option.some(s.expr));
919
+ }
920
+ const { decl, at } = s;
921
+ decl.restricts?.forEach((r) => eachLabelled(r, production));
922
+ eachLabelled(decl.shapeExpr, production);
923
+ if (Option.isSome(error)) return Result.fail(error.value);
924
+ if (MutableHashSet.has(productions, decl.id)) return failAt(`${decl.id} is a triple expression`, at);
925
+ if (MutableHashSet.has(shapeIds, decl.id)) return failAt(`${decl.id} already defined`, at);
926
+ MutableHashSet.add(shapeIds, decl.id);
927
+ shapes.push(decl);
928
+ return Result.succeed(start);
929
+ };
930
+ const noStart = Result.succeed(Option.none());
931
+ return Arr.reduce(statements, noStart, (acc, s) => Result.flatMap(acc, (start) => step(start, s))).pipe(Result.map((start) => {
932
+ const schema = { type: "Schema" };
933
+ if (Arr.isReadonlyArrayNonEmpty(imports)) schema.imports = imports;
934
+ if (Option.isSome(startActs)) schema.startActs = startActs.value;
935
+ if (Option.isSome(start)) schema.start = start.value;
936
+ if (Arr.isReadonlyArrayNonEmpty(shapes)) schema.shapes = shapes;
937
+ return schema;
938
+ }));
939
+ };
940
+ const offsetOf = (tokens, input, at) => tokens[at]?.start ?? input.length;
941
+ const grammarError = (input, tokens, error) => {
942
+ if (error.cause !== void 0) return {
943
+ message: error.cause.message,
944
+ offset: offsetOf(tokens, input, error.cause.at)
945
+ };
946
+ const t = tokens[error.offset];
947
+ if (t?.type === "ERROR") return {
948
+ message: t.text,
949
+ offset: t.start
950
+ };
951
+ const found = t === void 0 ? "end of input" : quote(input.slice(t.start, t.end));
952
+ const expected = ParseError.formatExpected(error.expected);
953
+ return {
954
+ message: expected === "" ? `unexpected ${found}` : `expected ${expected}, found ${found}`,
955
+ offset: offsetOf(tokens, input, error.offset)
956
+ };
957
+ };
958
+ /** Parses a ShExC document. Errors carry the character offset. */
959
+ const parseShExC = (input, options) => {
960
+ const tokens = tokenize(input);
961
+ const resolved = resolve(tokens, options.baseIri, options.prefixes);
962
+ const parsed = Parser.parse(document, tokens);
963
+ if (Result.isFailure(parsed)) return Result.fail(grammarError(input, tokens, parsed.failure));
964
+ const [directives, startActs, statements] = parsed.success;
965
+ const schema = assemble(Arr.getSomes([...directives, ...statements]), startActs);
966
+ if (Result.isFailure(schema)) return Result.fail({
967
+ message: schema.failure.message,
968
+ offset: offsetOf(tokens, input, schema.failure.at)
969
+ });
970
+ return Result.succeed({
971
+ schema: schema.success,
972
+ prefixes: resolved.prefixes,
973
+ baseIri: resolved.baseIri
974
+ });
975
+ };
976
+ // src/shex/ShExC.ts
977
+ /**
978
+ * The ShEx compact syntax (ShExC): a hand-written parser producing ShExJ and
979
+ * a printer from ShExJ back to ShExC.
980
+ *
981
+ * @since 0.1.0
982
+ */
983
+ var ShExC_exports = /* @__PURE__ */ __exportAll({
984
+ parse: () => parse,
985
+ parseWithMetadata: () => parseWithMetadata,
986
+ print: () => print
987
+ });
988
+ const isPrefixMap = (prefixes) => "prefixes" in prefixes && prefixes.prefixes instanceof Map;
989
+ const toPrefixMap = (prefixes) => prefixes === void 0 ? empty$1 : isPrefixMap(prefixes) ? prefixes : make$1(prefixes);
990
+ /**
991
+ * Parses a ShExC document, returning the schema together with its prefixes
992
+ * and final base IRI.
993
+ *
994
+ * @since 0.1.0
995
+ * @category parsing
996
+ */
997
+ const parseWithMetadata = (input, options = {}) => Effect.suspend(() => {
998
+ const result = parseShExC(input, {
999
+ baseIri: Option.fromUndefinedOr(options.baseIri),
1000
+ prefixes: toPrefixMap(options.prefixes)
1001
+ });
1002
+ if (Result.isFailure(result)) {
1003
+ const { line, column } = lineColumn(input, result.failure.offset);
1004
+ return Effect.fail(new RdfParseError({
1005
+ format: "ShExC",
1006
+ message: result.failure.message,
1007
+ line,
1008
+ column
1009
+ }));
1010
+ }
1011
+ return Effect.succeed({
1012
+ schema: result.success.schema,
1013
+ prefixes: result.success.prefixes,
1014
+ baseIri: Option.getOrUndefined(result.success.baseIri)
1015
+ });
1016
+ });
1017
+ /**
1018
+ * Parses a ShExC document to a ShExJ schema.
1019
+ *
1020
+ * @since 0.1.0
1021
+ * @category parsing
1022
+ */
1023
+ const parse = (input, options = {}) => Effect.map(parseWithMetadata(input, options), (r) => r.schema);
1024
+ const XSD = "http://www.w3.org/2001/XMLSchema#";
1025
+ const RDF_TYPE = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type";
1026
+ const escapeIri = (iri) => iri.replace(/[\u0000- <>"{}|^`\\]/g, (c) => `\\u${c.charCodeAt(0).toString(16).padStart(4, "0")}`);
1027
+ const escapeString = (s) => s.replace(/["\\\n\r\t\b\f]/g, (c) => c === "\"" ? "\\\"" : c === "\\" ? "\\\\" : c === "\n" ? "\\n" : c === "\r" ? "\\r" : c === " " ? "\\t" : c === "\b" ? "\\b" : "\\f");
1028
+ const escapeRegexp = (s) => s.replace(/\//g, "\\/").replace(/\n/g, "\\n").replace(/\r/g, "\\r");
1029
+ const escapeCode = (s) => s.replace(/\\/g, "\\\\").replace(/%/g, "\\%");
1030
+ const quoteLiteral = (s) => `"${escapeString(s)}"`;
1031
+ /** A value without a string `type`, or with a `value`, is an object literal in ShExJ. */
1032
+ const isObjectLiteral = (v) => !Predicate.isString(v.type) || "value" in v;
1033
+ var Printer = class {
1034
+ prefixes;
1035
+ base;
1036
+ unit;
1037
+ constructor(options) {
1038
+ this.prefixes = options.prefixes ?? empty$1;
1039
+ this.base = Option.fromUndefinedOr(options.baseIri);
1040
+ this.unit = options.indent ?? " ";
1041
+ }
1042
+ iri(iri) {
1043
+ return Option.match(compact(this.prefixes, iri), {
1044
+ onSome: ([prefix, local]) => `${prefix}:${local}`,
1045
+ onNone: () => `<${escapeIri(Option.getOrElse(Option.flatMap(this.base, (base) => relativize(iri, base)), () => iri))}>`
1046
+ });
1047
+ }
1048
+ label(label) {
1049
+ return label.startsWith("_:") ? label : this.iri(label);
1050
+ }
1051
+ predicate(p) {
1052
+ return p === RDF_TYPE ? "a" : this.iri(p);
1053
+ }
1054
+ literal(l) {
1055
+ const quoted = `"${escapeString(l.value)}"`;
1056
+ if (l.language !== void 0) return `${quoted}@${l.language}`;
1057
+ if (l.type === void 0 || l.type === `${XSD}string`) return quoted;
1058
+ if (l.type === `${XSD}integer` && /^[+-]?\d+$/.test(l.value)) return l.value;
1059
+ if (l.type === `${XSD}decimal` && /^[+-]?\d*\.\d+$/.test(l.value)) return l.value;
1060
+ if (l.type === `${XSD}double` && /^[+-]?(\d+\.\d*|\.?\d+)[eE][+-]?\d+$/.test(l.value)) return l.value;
1061
+ if (l.type === `${XSD}boolean` && (l.value === "true" || l.value === "false")) return l.value;
1062
+ return `${quoted}^^${this.iri(l.type)}`;
1063
+ }
1064
+ objectValue(v) {
1065
+ return Predicate.isString(v) ? this.iri(v) : this.literal(v);
1066
+ }
1067
+ semActs(acts = []) {
1068
+ return acts.map((a) => ` %${this.iri(a.name)}${a.code === void 0 ? "%" : `{${escapeCode(a.code)}%}`}`).join("");
1069
+ }
1070
+ annotations(annots = []) {
1071
+ return annots.map((a) => ` // ${this.predicate(a.predicate)} ${this.objectValue(a.object)}`).join("");
1072
+ }
1073
+ cardinality(c) {
1074
+ const min = c.min ?? 1;
1075
+ const max = c.max ?? 1;
1076
+ if (c.min === void 0 && c.max === void 0) return "";
1077
+ if (min === 0 && max === -1) return "*";
1078
+ if (min === 1 && max === -1) return "+";
1079
+ if (min === 0 && max === 1) return "?";
1080
+ if (max === -1) return `{${min},}`;
1081
+ if (min === max) return `{${min}}`;
1082
+ return `{${min},${max}}`;
1083
+ }
1084
+ valueSetValue(v) {
1085
+ if (Predicate.isString(v)) return this.iri(v);
1086
+ if (isObjectLiteral(v)) return this.literal(v);
1087
+ return Match.value(v).pipe(Match.withReturnType(), Match.discriminator("type")("IriStem", (member) => `${this.iri(member.stem)}~`), Match.discriminator("type")("LiteralStem", (member) => `${quoteLiteral(member.stem)}~`), Match.discriminator("type")("Language", (member) => `@${member.languageTag}`), Match.discriminator("type")("LanguageStem", (member) => member.stem === "" ? "@~" : `@${member.stem}~`), Match.discriminator("type")("IriStemRange", (member) => `${Predicate.isString(member.stem) ? `${this.iri(member.stem)}~` : "."}${member.exclusions.map((e) => ` - ${Predicate.isString(e) ? this.iri(e) : `${this.iri(e.stem)}~`}`).join("")}`), Match.discriminator("type")("LiteralStemRange", (member) => `${Predicate.isString(member.stem) ? `${quoteLiteral(member.stem)}~` : "."}${member.exclusions.map((e) => ` - ${Predicate.isString(e) ? quoteLiteral(e) : `${quoteLiteral(e.stem)}~`}`).join("")}`), Match.discriminator("type")("LanguageStemRange", (member) => `${Predicate.isString(member.stem) ? member.stem === "" ? "@~" : `@${member.stem}~` : "."}${member.exclusions.map((e) => ` - @${Predicate.isString(e) ? e : `${e.stem}~`}`).join("")}`), Match.orElse(() => ""));
1088
+ }
1089
+ nodeConstraint(nc) {
1090
+ const parts = [];
1091
+ if (nc.nodeKind !== void 0) parts.push(nc.nodeKind.toUpperCase());
1092
+ if (nc.datatype !== void 0) parts.push(this.iri(nc.datatype));
1093
+ if (nc.values !== void 0) parts.push(`[${nc.values.map((v) => this.valueSetValue(v)).join(" ")}]`);
1094
+ if (nc.length !== void 0) parts.push(`LENGTH ${nc.length}`);
1095
+ if (nc.minlength !== void 0) parts.push(`MINLENGTH ${nc.minlength}`);
1096
+ if (nc.maxlength !== void 0) parts.push(`MAXLENGTH ${nc.maxlength}`);
1097
+ if (nc.pattern !== void 0) parts.push(`/${escapeRegexp(nc.pattern)}/${nc.flags ?? ""}`);
1098
+ if (nc.mininclusive !== void 0) parts.push(`MININCLUSIVE ${nc.mininclusive}`);
1099
+ if (nc.minexclusive !== void 0) parts.push(`MINEXCLUSIVE ${nc.minexclusive}`);
1100
+ if (nc.maxinclusive !== void 0) parts.push(`MAXINCLUSIVE ${nc.maxinclusive}`);
1101
+ if (nc.maxexclusive !== void 0) parts.push(`MAXEXCLUSIVE ${nc.maxexclusive}`);
1102
+ if (nc.totaldigits !== void 0) parts.push(`TOTALDIGITS ${nc.totaldigits}`);
1103
+ if (nc.fractiondigits !== void 0) parts.push(`FRACTIONDIGITS ${nc.fractiondigits}`);
1104
+ if (Arr.isReadonlyArrayEmpty(parts)) parts.push(".");
1105
+ return parts.join(" ") + this.annotations(nc.annotations) + this.semActs(nc.semActs);
1106
+ }
1107
+ /**
1108
+ * Prints a shape expression. `inline` forbids annotations and semantic
1109
+ * actions at the top level, which are then wrapped in parentheses.
1110
+ */
1111
+ shapeExpr(e, indent, inline) {
1112
+ if (Predicate.isString(e)) return `@${this.label(e)}`;
1113
+ return Match.value(e).pipe(Match.withReturnType(), Match.discriminator("type")("ShapeOr", (expr) => expr.shapeExprs.map((s) => this.junct(s, indent, "ShapeOr")).join(" OR ")), Match.discriminator("type")("ShapeAnd", (expr) => expr.shapeExprs.map((s) => this.junct(s, indent, "ShapeAnd")).join(" AND ")), Match.discriminator("type")("ShapeNot", (expr) => `NOT ${this.junct(expr.shapeExpr, indent, "ShapeNot")}`), Match.discriminator("type")("NodeConstraint", (expr) => {
1114
+ const s = this.nodeConstraint(expr);
1115
+ return inline && (expr.annotations !== void 0 || expr.semActs !== void 0) ? `(${s})` : s;
1116
+ }), Match.discriminator("type")("Shape", (expr) => {
1117
+ const s = this.shape(expr, indent);
1118
+ return inline && (expr.annotations !== void 0 || expr.semActs !== void 0) ? `(${s})` : s;
1119
+ }), Match.discriminator("type")("ShapeExternal", () => "EXTERNAL"), Match.exhaustive);
1120
+ }
1121
+ junct(e, indent, parent) {
1122
+ if (Predicate.isString(e)) return `@${this.label(e)}`;
1123
+ const needsParens = e.type === "ShapeOr" || e.type === "ShapeAnd" && parent !== "ShapeOr" || e.type === "ShapeNot" && parent === "ShapeNot" || e.type === "ShapeExternal";
1124
+ const s = this.shapeExpr(e, indent, false);
1125
+ return needsParens ? `(${s})` : s;
1126
+ }
1127
+ shape(s, indent) {
1128
+ const head = [
1129
+ ...Arr.map(s.extends ?? [], (ext) => `EXTENDS ${this.junct(ext, indent, "ShapeNot")}`),
1130
+ ...s.extra === void 0 ? [] : [`EXTRA ${s.extra.map((p) => this.predicate(p)).join(" ")}`],
1131
+ ...s.closed === true ? ["CLOSED"] : []
1132
+ ];
1133
+ const inner = indent + this.unit;
1134
+ const body = s.expression === void 0 ? "{ }" : `{\n${inner}${this.tripleExpr(s.expression, inner, false)}\n${indent}}`;
1135
+ return [...head, body].join(" ") + this.annotations(s.annotations) + this.semActs(s.semActs);
1136
+ }
1137
+ tripleExpr(t, indent, nested) {
1138
+ if (Predicate.isString(t)) return `&${this.label(t)}`;
1139
+ const id = t.id !== void 0 ? `$${this.label(t.id)} ` : "";
1140
+ return Match.value(t).pipe(Match.withReturnType(), Match.discriminator("type")("TripleConstraint", (expr) => {
1141
+ const value = expr.valueExpr === void 0 ? "." : this.shapeExpr(expr.valueExpr, indent, true);
1142
+ return `${id}${expr.inverse === true ? "^" : ""}${this.predicate(expr.predicate)} ${value}${this.cardinality(expr)}${this.annotations(expr.annotations)}${this.semActs(expr.semActs)}`;
1143
+ }), Match.discriminator("type")("EachOf", "OneOf", (expr) => {
1144
+ const sep = expr.type === "EachOf" ? ` ;\n${indent}` : `\n${indent}| `;
1145
+ const inner = indent + this.unit;
1146
+ const items = expr.expressions.map((e) => this.tripleExpr(e, inner, !Predicate.isString(e) && e.type !== "TripleConstraint"));
1147
+ const decorated = id !== "" || this.cardinality(expr) !== "" || expr.annotations !== void 0 || expr.semActs !== void 0;
1148
+ if (!decorated && !nested) return items.join(sep);
1149
+ if (!decorated && expr.type === "EachOf" && nested) return `(${items.join(sep)})`;
1150
+ return `${id}(${items.join(sep)})${this.cardinality(expr)}${this.annotations(expr.annotations)}${this.semActs(expr.semActs)}`;
1151
+ }), Match.exhaustive);
1152
+ }
1153
+ schema(schema) {
1154
+ const header = [
1155
+ ...Arr.fromOption(Option.map(this.base, (base) => `BASE <${escapeIri(base)}>`)),
1156
+ ...Arr.map(Arr.fromIterable(this.prefixes.prefixes), ([p, ns]) => `PREFIX ${p}: <${escapeIri(ns)}>`),
1157
+ ...Arr.map(schema.imports ?? [], (imp) => `IMPORT ${this.iri(imp)}`)
1158
+ ];
1159
+ return `${[
1160
+ ...header,
1161
+ ...Arr.isReadonlyArrayNonEmpty(header) ? [""] : [],
1162
+ ...schema.startActs === void 0 ? [] : [this.semActs(schema.startActs).trim()],
1163
+ ...schema.start === void 0 ? [] : [`start = ${this.shapeExpr(schema.start, "", false)}`],
1164
+ ...Arr.map(schema.shapes ?? [], (decl) => this.decl(decl))
1165
+ ].join("\n")}\n`;
1166
+ }
1167
+ decl(decl) {
1168
+ return `${`${decl.abstract === true ? "ABSTRACT " : ""}${this.label(decl.id)}`}${(decl.restricts ?? []).map((r) => ` RESTRICTS ${this.junct(r, "", "ShapeNot")}`).join("")} ${!Predicate.isString(decl.shapeExpr) && decl.shapeExpr.type === "ShapeExternal" ? "EXTERNAL" : Predicate.isString(decl.shapeExpr) ? `@${this.label(decl.shapeExpr)}` : this.shapeExpr(decl.shapeExpr, "", false)}`;
1169
+ }
1170
+ };
1171
+ /**
1172
+ * Prints a ShExJ schema as ShExC. Parsing the output yields an equivalent
1173
+ * schema.
1174
+ *
1175
+ * @since 0.1.0
1176
+ * @category printing
1177
+ */
1178
+ const print = (schema, options = {}) => new Printer(options).schema(schema);
1179
+ export { print as i, parse as n, parseWithMetadata as r, ShExC_exports as t };
1180
+
1181
+ //# sourceMappingURL=ShExC-DJbB19i3.mjs.map