@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.
- package/LICENSE +21 -0
- package/README.md +2250 -1
- package/dist/Algebra-CGG4oae3.mjs +433 -0
- package/dist/Algebra-CGG4oae3.mjs.map +1 -0
- package/dist/Algebra-uGsIEOUA.d.mts +446 -0
- package/dist/Ast-CPRZmBvk.mjs +552 -0
- package/dist/Ast-CPRZmBvk.mjs.map +1 -0
- package/dist/Ast-vcw2W-lf.d.mts +827 -0
- package/dist/Bindings-Ck3m7JRC.mjs +249 -0
- package/dist/Bindings-Ck3m7JRC.mjs.map +1 -0
- package/dist/Bindings-DiKpBd7f.d.mts +153 -0
- package/dist/ClientErrors-CpXdFX5u.mjs +128 -0
- package/dist/ClientErrors-CpXdFX5u.mjs.map +1 -0
- package/dist/ClientErrors-D4IZHUM-.d.mts +101 -0
- package/dist/ClientFormats-CXomkXLV.mjs +73 -0
- package/dist/ClientFormats-CXomkXLV.mjs.map +1 -0
- package/dist/ClientFormats-Dm57ZPwR.d.mts +36 -0
- package/dist/Csv2Json-DynEcwCh.mjs +194 -0
- package/dist/Csv2Json-DynEcwCh.mjs.map +1 -0
- package/dist/Csv2Json-aXNVDoXQ.d.mts +40 -0
- package/dist/Csv2Rdf-8maXP6mt.d.mts +41 -0
- package/dist/Csv2Rdf-DuSEkaKE.mjs +161 -0
- package/dist/Csv2Rdf-DuSEkaKE.mjs.map +1 -0
- package/dist/Dataset-BlmlcI7J.mjs +782 -0
- package/dist/Dataset-BlmlcI7J.mjs.map +1 -0
- package/dist/Dataset-DS3ESOcO.d.mts +426 -0
- package/dist/Dataset.d.mts +2 -0
- package/dist/Dataset.mjs +1 -0
- package/dist/Datatype-CxMpamHC.d.mts +212 -0
- package/dist/Datatype-DQvkNkiH.mjs +1001 -0
- package/dist/Datatype-DQvkNkiH.mjs.map +1 -0
- package/dist/Dialect-8ChFj5EX.d.mts +113 -0
- package/dist/Dialect-CzVH38uo.mjs +165 -0
- package/dist/Dialect-CzVH38uo.mjs.map +1 -0
- package/dist/DocumentLoader-D3lZREnB.mjs +346 -0
- package/dist/DocumentLoader-D3lZREnB.mjs.map +1 -0
- package/dist/DocumentLoader-ZUCEVrW5.d.mts +178 -0
- package/dist/DublinCore-AnwqxRx6.mjs +137 -0
- package/dist/DublinCore-AnwqxRx6.mjs.map +1 -0
- package/dist/DublinCore-Dq-tVA5d.d.mts +119 -0
- package/dist/Engine-CYPB3g4h.d.mts +144 -0
- package/dist/Engine-DF8PN7g-.mjs +872 -0
- package/dist/Engine-DF8PN7g-.mjs.map +1 -0
- package/dist/Errors-CMdV1RhU.mjs +37 -0
- package/dist/Errors-CMdV1RhU.mjs.map +1 -0
- package/dist/Errors-u2bDjUeM.d.mts +30 -0
- package/dist/Evaluator-DEsU4d1o.d.mts +50 -0
- package/dist/Evaluator-DOY2-guC.mjs +281 -0
- package/dist/Evaluator-DOY2-guC.mjs.map +1 -0
- package/dist/Exif-CpqniYQd.d.mts +78 -0
- package/dist/Exif-DjkCfEB-.mjs +89 -0
- package/dist/Exif-DjkCfEB-.mjs.map +1 -0
- package/dist/Expression-BIMMvduQ.mjs +230 -0
- package/dist/Expression-BIMMvduQ.mjs.map +1 -0
- package/dist/Expression-W8A9cyX7.d.mts +89 -0
- package/dist/Extract-Bop85jES.mjs +220 -0
- package/dist/Extract-Bop85jES.mjs.map +1 -0
- package/dist/Extract-C_pCvuTC.d.mts +88 -0
- package/dist/Federation-BcNrozc1.d.mts +52 -0
- package/dist/Federation-CHScBkaK.mjs +130 -0
- package/dist/Federation-CHScBkaK.mjs.map +1 -0
- package/dist/Functions-AvjNcId_.mjs +1346 -0
- package/dist/Functions-AvjNcId_.mjs.map +1 -0
- package/dist/Functions-OQJZP-F6.d.mts +111 -0
- package/dist/Generator-C52mmq01.d.mts +50 -0
- package/dist/Generator-D3utCJC7.mjs +205 -0
- package/dist/Generator-D3utCJC7.mjs.map +1 -0
- package/dist/Grammar-CPlSxGH6.mjs +200 -0
- package/dist/Grammar-CPlSxGH6.mjs.map +1 -0
- package/dist/Grammar-CRhnRoCu.d.mts +148 -0
- package/dist/Grammar-D6jZdJQ3.d.mts +169 -0
- package/dist/Grammar-mQ8CgE1M.mjs +258 -0
- package/dist/Grammar-mQ8CgE1M.mjs.map +1 -0
- package/dist/GraphStore-DhUa4nFO.d.mts +45 -0
- package/dist/GraphStore-DvbqwKy1.mjs +212 -0
- package/dist/GraphStore-DvbqwKy1.mjs.map +1 -0
- package/dist/Iri-BB8Ks-BF.d.mts +84 -0
- package/dist/Iri-Cr92gsQV.mjs +232 -0
- package/dist/Iri-Cr92gsQV.mjs.map +1 -0
- package/dist/Iri.d.mts +2 -0
- package/dist/Iri.mjs +1 -0
- package/dist/Isomorphism-B6qTY-xy.d.mts +28 -0
- package/dist/Isomorphism-BmqxhKyJ.mjs +232 -0
- package/dist/Isomorphism-BmqxhKyJ.mjs.map +1 -0
- package/dist/Isomorphism-DInKnWIy.mjs +390 -0
- package/dist/Isomorphism-DInKnWIy.mjs.map +1 -0
- package/dist/Isomorphism-DvSfZXLR.d.mts +37 -0
- package/dist/Isomorphism.d.mts +2 -0
- package/dist/Isomorphism.mjs +1 -0
- package/dist/JsonLd-DOwS2FHg.mjs +2836 -0
- package/dist/JsonLd-DOwS2FHg.mjs.map +1 -0
- package/dist/JsonLd-DobFrQNa.d.mts +242 -0
- package/dist/JsonLdError-C9J-BxfG.mjs +106 -0
- package/dist/JsonLdError-C9J-BxfG.mjs.map +1 -0
- package/dist/JsonLdError-DSOfHkOy.d.mts +43 -0
- package/dist/LanguageTag-BCu8rcmX.d.mts +38 -0
- package/dist/LanguageTag-BcOpMGZ4.mjs +89 -0
- package/dist/LanguageTag-BcOpMGZ4.mjs.map +1 -0
- package/dist/LanguageTag.d.mts +2 -0
- package/dist/LanguageTag.mjs +1 -0
- package/dist/Lexical-Cg0JHrf6.mjs +243 -0
- package/dist/Lexical-Cg0JHrf6.mjs.map +1 -0
- package/dist/Lexical-D3zySYVS.d.mts +163 -0
- package/dist/Manifest-B6xf6mUc.mjs +148 -0
- package/dist/Manifest-B6xf6mUc.mjs.map +1 -0
- package/dist/Manifest-DQUMRBFr.d.mts +98 -0
- package/dist/Mapping-BgG74x3U.d.mts +63 -0
- package/dist/Mapping-Dc1ZGirk.mjs +259 -0
- package/dist/Mapping-Dc1ZGirk.mjs.map +1 -0
- package/dist/Mcp-1DwTTKOK.mjs +48 -0
- package/dist/Mcp-1DwTTKOK.mjs.map +1 -0
- package/dist/Mcp-d-pX9erx.d.mts +25 -0
- package/dist/Message-CK_DGQuu.mjs +95 -0
- package/dist/Message-CK_DGQuu.mjs.map +1 -0
- package/dist/Message-fIvTJSXM.d.mts +49 -0
- package/dist/Metadata-BbffwGDZ.mjs +445 -0
- package/dist/Metadata-BbffwGDZ.mjs.map +1 -0
- package/dist/Metadata-CEt3yc1-.d.mts +901 -0
- package/dist/Metadata-D4HsQNXr.mjs +1273 -0
- package/dist/Metadata-D4HsQNXr.mjs.map +1 -0
- package/dist/Metadata-nzS7QKRj.d.mts +350 -0
- package/dist/Model-DaMmxurZ.d.mts +293 -0
- package/dist/Model-DlPzRYhF.mjs +528 -0
- package/dist/Model-DlPzRYhF.mjs.map +1 -0
- package/dist/N3-BzyV-KIH.mjs +974 -0
- package/dist/N3-BzyV-KIH.mjs.map +1 -0
- package/dist/N3-DSLnonDn.d.mts +100 -0
- package/dist/NQuads-C1VBOJ3-.mjs +117 -0
- package/dist/NQuads-C1VBOJ3-.mjs.map +1 -0
- package/dist/NQuads-FjFZikFg.d.mts +76 -0
- package/dist/NTriples-D-kLSEAf.mjs +120 -0
- package/dist/NTriples-D-kLSEAf.mjs.map +1 -0
- package/dist/NTriples-D34OspfW.d.mts +76 -0
- package/dist/Namespace-ClTUO_ya.d.mts +42 -0
- package/dist/Namespace-DHFIsORd.mjs +75 -0
- package/dist/Namespace-DHFIsORd.mjs.map +1 -0
- package/dist/Namespace.d.mts +2 -0
- package/dist/Namespace.mjs +1 -0
- package/dist/Namespaces-Bz85vpjW.mjs +235 -0
- package/dist/Namespaces-Bz85vpjW.mjs.map +1 -0
- package/dist/Namespaces-C1jW6EDo.d.mts +178 -0
- package/dist/Optimizer-BWWQRQPY.mjs +168 -0
- package/dist/Optimizer-BWWQRQPY.mjs.map +1 -0
- package/dist/Optimizer-DUpUow6k.d.mts +26 -0
- package/dist/Options-BLBGL4HE.mjs +72 -0
- package/dist/Options-BLBGL4HE.mjs.map +1 -0
- package/dist/Options-BommQwP9.d.mts +127 -0
- package/dist/Packet-CA76wVX3.mjs +197 -0
- package/dist/Packet-CA76wVX3.mjs.map +1 -0
- package/dist/Packet-Cy5g6XuW.d.mts +130 -0
- package/dist/Parser-p1Gyr0QN.d.mts +85 -0
- package/dist/Parser-xARsOWXk.mjs +1317 -0
- package/dist/Parser-xARsOWXk.mjs.map +1 -0
- package/dist/Path-B20Yp8KE.mjs +284 -0
- package/dist/Path-B20Yp8KE.mjs.map +1 -0
- package/dist/Path-DRB8e-Zn.d.mts +181 -0
- package/dist/Pdf-B9RZn--8.d.mts +77 -0
- package/dist/Pdf-CKK6dkZn.mjs +89 -0
- package/dist/Pdf-CKK6dkZn.mjs.map +1 -0
- package/dist/PdfA-CUjSuntT.d.mts +109 -0
- package/dist/PdfA-CleOhuL6.mjs +124 -0
- package/dist/PdfA-CleOhuL6.mjs.map +1 -0
- package/dist/Photoshop-CiHo80qV.mjs +233 -0
- package/dist/Photoshop-CiHo80qV.mjs.map +1 -0
- package/dist/Photoshop-udKZ0I3N.d.mts +204 -0
- package/dist/PrefixMap-BHFPDLO-.mjs +103 -0
- package/dist/PrefixMap-BHFPDLO-.mjs.map +1 -0
- package/dist/PrefixMap-BMlXrWNd.d.mts +64 -0
- package/dist/PrefixMap.d.mts +2 -0
- package/dist/PrefixMap.mjs +1 -0
- package/dist/Processor-CMmecFsb.mjs +198 -0
- package/dist/Processor-CMmecFsb.mjs.map +1 -0
- package/dist/Processor-FJPvO0CB.d.mts +435 -0
- package/dist/Protocol-BA7OkNgp.mjs +202 -0
- package/dist/Protocol-BA7OkNgp.mjs.map +1 -0
- package/dist/Protocol-DlSoiIKB.d.mts +108 -0
- package/dist/ProtocolErrors-Ckfejnl6.d.mts +84 -0
- package/dist/ProtocolErrors-czDPVcX5.mjs +129 -0
- package/dist/ProtocolErrors-czDPVcX5.mjs.map +1 -0
- package/dist/Query-D9A6LOpP.mjs +364 -0
- package/dist/Query-D9A6LOpP.mjs.map +1 -0
- package/dist/Query-KqSkTYyG.d.mts +96 -0
- package/dist/QueryBuilder-BLK9Vfbz.mjs +674 -0
- package/dist/QueryBuilder-BLK9Vfbz.mjs.map +1 -0
- package/dist/QueryBuilder-DUqh4ECe.d.mts +529 -0
- package/dist/RdfJs-D6-49XB5.mjs +86 -0
- package/dist/RdfJs-D6-49XB5.mjs.map +1 -0
- package/dist/RdfJs-DXFqdWrd.d.mts +76 -0
- package/dist/RdfJs.d.mts +2 -0
- package/dist/RdfJs.mjs +1 -0
- package/dist/RdfJson-5aKPDlPS.d.mts +297 -0
- package/dist/RdfJson-BNocgW4f.mjs +548 -0
- package/dist/RdfJson-BNocgW4f.mjs.map +1 -0
- package/dist/RdfXml-DJ9G4gOq.mjs +1014 -0
- package/dist/RdfXml-DJ9G4gOq.mjs.map +1 -0
- package/dist/RdfXml-_N7yxWEp.d.mts +149 -0
- package/dist/Rdfs-BRVPsAjc.d.mts +84 -0
- package/dist/Rdfs-CyY2wVHI.mjs +167 -0
- package/dist/Rdfs-CyY2wVHI.mjs.map +1 -0
- package/dist/Rdfs.d.mts +2 -0
- package/dist/Rdfs.mjs +1 -0
- package/dist/Reasoner-BxYhx9s7.d.mts +94 -0
- package/dist/Reasoner-Cw90zrjv.mjs +798 -0
- package/dist/Reasoner-Cw90zrjv.mjs.map +1 -0
- package/dist/Reification-BmN4EfnM.d.mts +40 -0
- package/dist/Reification-dpqQvjDE.mjs +82 -0
- package/dist/Reification-dpqQvjDE.mjs.map +1 -0
- package/dist/Reification.d.mts +2 -0
- package/dist/Reification.mjs +1 -0
- package/dist/Report-XHs8htzK.mjs +121 -0
- package/dist/Report-XHs8htzK.mjs.map +1 -0
- package/dist/Report-hcXsc_19.d.mts +115 -0
- package/dist/Resource-B1cI8FyJ.d.mts +218 -0
- package/dist/Resource-sIEeNh15.mjs +374 -0
- package/dist/Resource-sIEeNh15.mjs.map +1 -0
- package/dist/Resource.d.mts +2 -0
- package/dist/Resource.mjs +1 -0
- package/dist/Results-BVNEC-Wt.d.mts +277 -0
- package/dist/Results-peJjGA2V.mjs +621 -0
- package/dist/Results-peJjGA2V.mjs.map +1 -0
- package/dist/ResultsStream-BhF0OcNn.mjs +639 -0
- package/dist/ResultsStream-BhF0OcNn.mjs.map +1 -0
- package/dist/ResultsStream-toYMXrOe.d.mts +100 -0
- package/dist/SemAct-CDchtk49.d.mts +96 -0
- package/dist/SemAct-CmyT4yI8.mjs +118 -0
- package/dist/SemAct-CmyT4yI8.mjs.map +1 -0
- package/dist/Serialization-DP9H5bYQ.mjs +514 -0
- package/dist/Serialization-DP9H5bYQ.mjs.map +1 -0
- package/dist/Serialization-Df8iVauT.d.mts +392 -0
- package/dist/Serialization.d.mts +2 -0
- package/dist/Serialization.mjs +1 -0
- package/dist/ServerFormats-CrRnjjf6.mjs +64 -0
- package/dist/ServerFormats-CrRnjjf6.mjs.map +1 -0
- package/dist/ServerFormats-DjC9NsO_.d.mts +36 -0
- package/dist/ServiceDescription-BERsvg-k.d.mts +54 -0
- package/dist/ServiceDescription-Dq5hxeGy.mjs +97 -0
- package/dist/ServiceDescription-Dq5hxeGy.mjs.map +1 -0
- package/dist/ShExC-Ctf-06CL.d.mts +67 -0
- package/dist/ShExC-DJbB19i3.mjs +1181 -0
- package/dist/ShExC-DJbB19i3.mjs.map +1 -0
- package/dist/ShExError-BeYFD9rv.d.mts +61 -0
- package/dist/ShExError-CVtq2NnM.mjs +64 -0
- package/dist/ShExError-CVtq2NnM.mjs.map +1 -0
- package/dist/ShExJ-C1u_wgyD.d.mts +531 -0
- package/dist/ShExJ-COiPd9Xw.mjs +532 -0
- package/dist/ShExJ-COiPd9Xw.mjs.map +1 -0
- package/dist/ShExR-ByR4mCh-.mjs +480 -0
- package/dist/ShExR-ByR4mCh-.mjs.map +1 -0
- package/dist/ShExR-CqONNNBz.d.mts +40 -0
- package/dist/ShapeMap-C422pxKl.d.mts +140 -0
- package/dist/ShapeMap-CsgKxB2G.mjs +181 -0
- package/dist/ShapeMap-CsgKxB2G.mjs.map +1 -0
- package/dist/Shapes-18GjfyBV.mjs +597 -0
- package/dist/Shapes-18GjfyBV.mjs.map +1 -0
- package/dist/Shapes-BQFDFc4Q.d.mts +306 -0
- package/dist/Sparql-BiYFMSpl.mjs +29 -0
- package/dist/Sparql-BiYFMSpl.mjs.map +1 -0
- package/dist/Sparql-DecpWTPh.d.mts +97 -0
- package/dist/SparqlClient-C_CjXbwj.mjs +333 -0
- package/dist/SparqlClient-C_CjXbwj.mjs.map +1 -0
- package/dist/SparqlClient-UPc88SHy.d.mts +290 -0
- package/dist/SparqlServer-CbUW-pVj.d.mts +71 -0
- package/dist/SparqlServer-Db7w7Cll.mjs +308 -0
- package/dist/SparqlServer-Db7w7Cll.mjs.map +1 -0
- package/dist/SqlStore-BBqFx-Wl.mjs +684 -0
- package/dist/SqlStore-BBqFx-Wl.mjs.map +1 -0
- package/dist/SqlStore-CCJo5I-e.d.mts +117 -0
- package/dist/Store-D0jmVfb3.d.mts +166 -0
- package/dist/Store-DH3Ow1GO.mjs +162 -0
- package/dist/Store-DH3Ow1GO.mjs.map +1 -0
- package/dist/Structure-BjMo4Bkc.mjs +334 -0
- package/dist/Structure-BjMo4Bkc.mjs.map +1 -0
- package/dist/Structure-n4CmDiab.d.mts +63 -0
- package/dist/Table-BGgm9nbM.mjs +538 -0
- package/dist/Table-BGgm9nbM.mjs.map +1 -0
- package/dist/Table-C3reiVrb.d.mts +261 -0
- package/dist/Term-B_4ezyXq.d.mts +619 -0
- package/dist/Term-CFLG1qu4.mjs +991 -0
- package/dist/Term-CFLG1qu4.mjs.map +1 -0
- package/dist/Term.d.mts +2 -0
- package/dist/Term.mjs +1 -0
- package/dist/TermCodec-CDZiEztW.mjs +397 -0
- package/dist/TermCodec-CDZiEztW.mjs.map +1 -0
- package/dist/TermCodec-_03bDXr0.d.mts +209 -0
- package/dist/TermCodec.d.mts +2 -0
- package/dist/TermCodec.mjs +1 -0
- package/dist/TermJson-BOPe0yve.d.mts +232 -0
- package/dist/TermJson-FAg3lvjl.mjs +142 -0
- package/dist/TermJson-FAg3lvjl.mjs.map +1 -0
- package/dist/TermJson.d.mts +2 -0
- package/dist/TermJson.mjs +1 -0
- package/dist/TermSchema-Bn9CoaYA.mjs +30 -0
- package/dist/TermSchema-Bn9CoaYA.mjs.map +1 -0
- package/dist/TermSchema-DBO6MroX.d.mts +6 -0
- package/dist/Testing-B-aPCpmu.mjs +63 -0
- package/dist/Testing-B-aPCpmu.mjs.map +1 -0
- package/dist/Testing-CF6s8P3O.d.mts +53 -0
- package/dist/Tiff-CR-2QeSI.d.mts +148 -0
- package/dist/Tiff-DlsOlZPM.mjs +169 -0
- package/dist/Tiff-DlsOlZPM.mjs.map +1 -0
- package/dist/Tools-7MdRKccr.d.mts +583 -0
- package/dist/Tools-ryxphZbI.mjs +329 -0
- package/dist/Tools-ryxphZbI.mjs.map +1 -0
- package/dist/Translate-B0YKKANS.d.mts +37 -0
- package/dist/Translate-gzWPq0Ia.mjs +308 -0
- package/dist/Translate-gzWPq0Ia.mjs.map +1 -0
- package/dist/Translation-DC9rLm2y.mjs +1535 -0
- package/dist/Translation-DC9rLm2y.mjs.map +1 -0
- package/dist/Translation-K4L9XBqX.d.mts +103 -0
- package/dist/TriG-BkqtqZ6Y.mjs +125 -0
- package/dist/TriG-BkqtqZ6Y.mjs.map +1 -0
- package/dist/TriG-xDjdDatp.d.mts +86 -0
- package/dist/Turtle-Bv1_bisW.d.mts +85 -0
- package/dist/Turtle-CZVUOtwl.mjs +133 -0
- package/dist/Turtle-CZVUOtwl.mjs.map +1 -0
- package/dist/ValidationReport-DBdJshW5.mjs +285 -0
- package/dist/ValidationReport-DBdJshW5.mjs.map +1 -0
- package/dist/ValidationReport-Dx3WxY0h.d.mts +192 -0
- package/dist/Validator-227ff9Rn.d.mts +179 -0
- package/dist/Validator-BzXMKDeJ.mjs +1162 -0
- package/dist/Validator-BzXMKDeJ.mjs.map +1 -0
- package/dist/Validator-Dl8cih5V.d.mts +207 -0
- package/dist/Validator-DmUfMbpL.mjs +568 -0
- package/dist/Validator-DmUfMbpL.mjs.map +1 -0
- package/dist/Vocab-DceKywpq.mjs +168 -0
- package/dist/Vocab-DceKywpq.mjs.map +1 -0
- package/dist/Vocab-Df-L-IwZ.d.mts +46 -0
- package/dist/Vocab-Do56UgBX.d.mts +81 -0
- package/dist/Vocab-TfpWG1Ne.mjs +118 -0
- package/dist/Vocab-TfpWG1Ne.mjs.map +1 -0
- package/dist/Vocab.d.mts +2 -0
- package/dist/Vocab.mjs +1 -0
- package/dist/Vocabulary-C6-GPOy4.d.mts +22 -0
- package/dist/Vocabulary-CnQl-_Z4.mjs +179 -0
- package/dist/Vocabulary-CnQl-_Z4.mjs.map +1 -0
- package/dist/Xml-B7iihYCS.mjs +976 -0
- package/dist/Xml-B7iihYCS.mjs.map +1 -0
- package/dist/Xml-CmfHS7SW.d.mts +267 -0
- package/dist/Xmp-D7CKA7MZ.d.mts +111 -0
- package/dist/Xmp-DCGN9pOD.mjs +307 -0
- package/dist/Xmp-DCGN9pOD.mjs.map +1 -0
- package/dist/XmpBasic-CP38jpR_.mjs +73 -0
- package/dist/XmpBasic-CP38jpR_.mjs.map +1 -0
- package/dist/XmpBasic-Cmbe53rQ.d.mts +64 -0
- package/dist/XmpMM-BfL_TgJF.mjs +73 -0
- package/dist/XmpMM-BfL_TgJF.mjs.map +1 -0
- package/dist/XmpMM-Dqm3IX8p.d.mts +63 -0
- package/dist/XmpRights-BKPtoI5L.mjs +73 -0
- package/dist/XmpRights-BKPtoI5L.mjs.map +1 -0
- package/dist/XmpRights-CaALZQz2.d.mts +63 -0
- package/dist/Xsd-Cdgx5zRB.mjs +405 -0
- package/dist/Xsd-Cdgx5zRB.mjs.map +1 -0
- package/dist/Xsd-D2elNhSm.d.mts +187 -0
- package/dist/Xsd.d.mts +2 -0
- package/dist/Xsd.mjs +1 -0
- package/dist/accessors-CEjaojuQ.mjs +28 -0
- package/dist/accessors-CEjaojuQ.mjs.map +1 -0
- package/dist/codec-Lb2T96rv.d.mts +20 -0
- package/dist/codec-QNo7IdJF.mjs +389 -0
- package/dist/codec-QNo7IdJF.mjs.map +1 -0
- package/dist/csvw/Csv2Json.d.mts +2 -0
- package/dist/csvw/Csv2Json.mjs +1 -0
- package/dist/csvw/Csv2Rdf.d.mts +2 -0
- package/dist/csvw/Csv2Rdf.mjs +1 -0
- package/dist/csvw/Datatype.d.mts +2 -0
- package/dist/csvw/Datatype.mjs +1 -0
- package/dist/csvw/Metadata.d.mts +2 -0
- package/dist/csvw/Metadata.mjs +1 -0
- package/dist/csvw/Processor.d.mts +2 -0
- package/dist/csvw/Processor.mjs +1 -0
- package/dist/csvw/Report.d.mts +2 -0
- package/dist/csvw/Report.mjs +1 -0
- package/dist/csvw/Table.d.mts +2 -0
- package/dist/csvw/Table.mjs +1 -0
- package/dist/csvw/index.d.mts +8 -0
- package/dist/csvw/index.mjs +8 -0
- package/dist/index-Cms2TYfC.d.mts +16 -0
- package/dist/index-Ct8xFmRs.d.mts +7 -0
- package/dist/index-D4QFwOjm.d.mts +28 -0
- package/dist/index.d.mts +18 -0
- package/dist/index.mjs +17 -0
- package/dist/jsonld/DocumentLoader.d.mts +2 -0
- package/dist/jsonld/DocumentLoader.mjs +1 -0
- package/dist/jsonld/JsonLd.d.mts +2 -0
- package/dist/jsonld/JsonLd.mjs +1 -0
- package/dist/jsonld/JsonLdError.d.mts +2 -0
- package/dist/jsonld/JsonLdError.mjs +1 -0
- package/dist/jsonld/index.d.mts +4 -0
- package/dist/jsonld/index.mjs +4 -0
- package/dist/lists-D-OpQ0Ir.mjs +77 -0
- package/dist/lists-D-OpQ0Ir.mjs.map +1 -0
- package/dist/loop-D5-gNx9K.mjs +21 -0
- package/dist/loop-D5-gNx9K.mjs.map +1 -0
- package/dist/loop-DZ2hXlr_.mjs +21 -0
- package/dist/loop-DZ2hXlr_.mjs.map +1 -0
- package/dist/n3/Isomorphism.d.mts +2 -0
- package/dist/n3/Isomorphism.mjs +1 -0
- package/dist/n3/Mapping.d.mts +2 -0
- package/dist/n3/Mapping.mjs +1 -0
- package/dist/n3/Model.d.mts +2 -0
- package/dist/n3/Model.mjs +1 -0
- package/dist/n3/N3.d.mts +2 -0
- package/dist/n3/N3.mjs +1 -0
- package/dist/n3/Reasoner.d.mts +2 -0
- package/dist/n3/Reasoner.mjs +2 -0
- package/dist/n3/Vocab.d.mts +2 -0
- package/dist/n3/Vocab.mjs +1 -0
- package/dist/n3/index.d.mts +7 -0
- package/dist/n3/index.mjs +7 -0
- package/dist/ntriples/Grammar.d.mts +2 -0
- package/dist/ntriples/Grammar.mjs +1 -0
- package/dist/ntriples/Lexical.d.mts +2 -0
- package/dist/ntriples/Lexical.mjs +1 -0
- package/dist/ntriples/NQuads.d.mts +2 -0
- package/dist/ntriples/NQuads.mjs +1 -0
- package/dist/ntriples/NTriples.d.mts +2 -0
- package/dist/ntriples/NTriples.mjs +1 -0
- package/dist/ntriples/index.d.mts +5 -0
- package/dist/ntriples/index.mjs +5 -0
- package/dist/rdfjson/RdfJson.d.mts +2 -0
- package/dist/rdfjson/RdfJson.mjs +1 -0
- package/dist/rdfjson/index.d.mts +2 -0
- package/dist/rdfjson/index.mjs +1 -0
- package/dist/rdfxml/RdfXml.d.mts +2 -0
- package/dist/rdfxml/RdfXml.mjs +1 -0
- package/dist/rdfxml/Xml.d.mts +2 -0
- package/dist/rdfxml/Xml.mjs +1 -0
- package/dist/rdfxml/index.d.mts +3 -0
- package/dist/rdfxml/index.mjs +3 -0
- package/dist/rolldown-runtime-D8jQpDG7.mjs +12 -0
- package/dist/serialize-96KBvKaf.mjs +1463 -0
- package/dist/serialize-96KBvKaf.mjs.map +1 -0
- package/dist/serialize-DsoXdM6n.d.mts +37 -0
- package/dist/shacl/Message.d.mts +2 -0
- package/dist/shacl/Message.mjs +1 -0
- package/dist/shacl/Path.d.mts +2 -0
- package/dist/shacl/Path.mjs +1 -0
- package/dist/shacl/Shapes.d.mts +2 -0
- package/dist/shacl/Shapes.mjs +1 -0
- package/dist/shacl/Sparql.d.mts +2 -0
- package/dist/shacl/Sparql.mjs +1 -0
- package/dist/shacl/ValidationReport.d.mts +2 -0
- package/dist/shacl/ValidationReport.mjs +1 -0
- package/dist/shacl/Validator.d.mts +2 -0
- package/dist/shacl/Validator.mjs +1 -0
- package/dist/shacl/Vocabulary.d.mts +2 -0
- package/dist/shacl/Vocabulary.mjs +1 -0
- package/dist/shacl/index.d.mts +9 -0
- package/dist/shacl/index.mjs +8 -0
- package/dist/shex/SemAct.d.mts +2 -0
- package/dist/shex/SemAct.mjs +1 -0
- package/dist/shex/ShExC.d.mts +2 -0
- package/dist/shex/ShExC.mjs +1 -0
- package/dist/shex/ShExError.d.mts +2 -0
- package/dist/shex/ShExError.mjs +1 -0
- package/dist/shex/ShExJ.d.mts +2 -0
- package/dist/shex/ShExJ.mjs +2 -0
- package/dist/shex/ShExR.d.mts +2 -0
- package/dist/shex/ShExR.mjs +1 -0
- package/dist/shex/ShapeMap.d.mts +2 -0
- package/dist/shex/ShapeMap.mjs +1 -0
- package/dist/shex/Structure.d.mts +2 -0
- package/dist/shex/Structure.mjs +2 -0
- package/dist/shex/Validator.d.mts +2 -0
- package/dist/shex/Validator.mjs +4 -0
- package/dist/shex/index.d.mts +9 -0
- package/dist/shex/index.mjs +9 -0
- package/dist/sparql/Algebra.d.mts +2 -0
- package/dist/sparql/Algebra.mjs +1 -0
- package/dist/sparql/Ast.d.mts +2 -0
- package/dist/sparql/Ast.mjs +1 -0
- package/dist/sparql/Bindings.d.mts +2 -0
- package/dist/sparql/Bindings.mjs +1 -0
- package/dist/sparql/ClientErrors.d.mts +2 -0
- package/dist/sparql/ClientErrors.mjs +1 -0
- package/dist/sparql/ClientFormats.d.mts +2 -0
- package/dist/sparql/ClientFormats.mjs +1 -0
- package/dist/sparql/Engine.d.mts +2 -0
- package/dist/sparql/Engine.mjs +1 -0
- package/dist/sparql/Errors.d.mts +2 -0
- package/dist/sparql/Errors.mjs +1 -0
- package/dist/sparql/Expression.d.mts +2 -0
- package/dist/sparql/Expression.mjs +1 -0
- package/dist/sparql/Federation.d.mts +2 -0
- package/dist/sparql/Federation.mjs +1 -0
- package/dist/sparql/Functions.d.mts +2 -0
- package/dist/sparql/Functions.mjs +1 -0
- package/dist/sparql/Generator.d.mts +2 -0
- package/dist/sparql/Generator.mjs +1 -0
- package/dist/sparql/GraphStore.d.mts +2 -0
- package/dist/sparql/GraphStore.mjs +1 -0
- package/dist/sparql/Optimizer.d.mts +2 -0
- package/dist/sparql/Optimizer.mjs +1 -0
- package/dist/sparql/Options.d.mts +2 -0
- package/dist/sparql/Options.mjs +1 -0
- package/dist/sparql/Parser.d.mts +2 -0
- package/dist/sparql/Parser.mjs +1 -0
- package/dist/sparql/Protocol.d.mts +2 -0
- package/dist/sparql/Protocol.mjs +1 -0
- package/dist/sparql/ProtocolErrors.d.mts +2 -0
- package/dist/sparql/ProtocolErrors.mjs +1 -0
- package/dist/sparql/QueryBuilder.d.mts +2 -0
- package/dist/sparql/QueryBuilder.mjs +1 -0
- package/dist/sparql/Results.d.mts +2 -0
- package/dist/sparql/Results.mjs +1 -0
- package/dist/sparql/ResultsStream.d.mts +2 -0
- package/dist/sparql/ResultsStream.mjs +1 -0
- package/dist/sparql/ServerFormats.d.mts +2 -0
- package/dist/sparql/ServerFormats.mjs +1 -0
- package/dist/sparql/ServiceDescription.d.mts +2 -0
- package/dist/sparql/ServiceDescription.mjs +1 -0
- package/dist/sparql/SparqlClient.d.mts +2 -0
- package/dist/sparql/SparqlClient.mjs +1 -0
- package/dist/sparql/SparqlServer.d.mts +2 -0
- package/dist/sparql/SparqlServer.mjs +1 -0
- package/dist/sparql/Store.d.mts +2 -0
- package/dist/sparql/Store.mjs +1 -0
- package/dist/sparql/TermSchema.d.mts +3 -0
- package/dist/sparql/TermSchema.mjs +2 -0
- package/dist/sparql/Testing.d.mts +2 -0
- package/dist/sparql/Testing.mjs +1 -0
- package/dist/sparql/Translate.d.mts +2 -0
- package/dist/sparql/Translate.mjs +1 -0
- package/dist/sparql/ai/Mcp.d.mts +2 -0
- package/dist/sparql/ai/Mcp.mjs +1 -0
- package/dist/sparql/ai/Tools.d.mts +2 -0
- package/dist/sparql/ai/Tools.mjs +1 -0
- package/dist/sparql/ai/index.d.mts +3 -0
- package/dist/sparql/ai/index.mjs +3 -0
- package/dist/sparql/index.d.mts +30 -0
- package/dist/sparql/index.mjs +29 -0
- package/dist/sparql/shacl/Evaluator.d.mts +2 -0
- package/dist/sparql/shacl/Evaluator.mjs +1 -0
- package/dist/sparql/shacl/Query.d.mts +2 -0
- package/dist/sparql/shacl/Query.mjs +1 -0
- package/dist/sparql/shacl/index.d.mts +3 -0
- package/dist/sparql/shacl/index.mjs +3 -0
- package/dist/sparql/sql/Dialect.d.mts +2 -0
- package/dist/sparql/sql/Dialect.mjs +1 -0
- package/dist/sparql/sql/SqlStore.d.mts +2 -0
- package/dist/sparql/sql/SqlStore.mjs +1 -0
- package/dist/sparql/sql/Translation.d.mts +2 -0
- package/dist/sparql/sql/Translation.mjs +1 -0
- package/dist/sparql/sql/index.d.mts +4 -0
- package/dist/sparql/sql/index.mjs +4 -0
- package/dist/stringMap-D5YIpYtR.mjs +38 -0
- package/dist/stringMap-D5YIpYtR.mjs.map +1 -0
- package/dist/tokens-C6BzeodQ.mjs +24 -0
- package/dist/tokens-C6BzeodQ.mjs.map +1 -0
- package/dist/turtle/Grammar.d.mts +3 -0
- package/dist/turtle/Grammar.mjs +3 -0
- package/dist/turtle/Manifest.d.mts +2 -0
- package/dist/turtle/Manifest.mjs +1 -0
- package/dist/turtle/TriG.d.mts +2 -0
- package/dist/turtle/TriG.mjs +1 -0
- package/dist/turtle/Turtle.d.mts +2 -0
- package/dist/turtle/Turtle.mjs +1 -0
- package/dist/turtle/index.d.mts +5 -0
- package/dist/turtle/index.mjs +5 -0
- package/dist/xmp/DublinCore.d.mts +2 -0
- package/dist/xmp/DublinCore.mjs +1 -0
- package/dist/xmp/Exif.d.mts +2 -0
- package/dist/xmp/Exif.mjs +1 -0
- package/dist/xmp/Extract.d.mts +2 -0
- package/dist/xmp/Extract.mjs +1 -0
- package/dist/xmp/Metadata.d.mts +2 -0
- package/dist/xmp/Metadata.mjs +1 -0
- package/dist/xmp/Namespaces.d.mts +2 -0
- package/dist/xmp/Namespaces.mjs +1 -0
- package/dist/xmp/Packet.d.mts +2 -0
- package/dist/xmp/Packet.mjs +1 -0
- package/dist/xmp/Pdf.d.mts +2 -0
- package/dist/xmp/Pdf.mjs +1 -0
- package/dist/xmp/PdfA.d.mts +2 -0
- package/dist/xmp/PdfA.mjs +1 -0
- package/dist/xmp/Photoshop.d.mts +2 -0
- package/dist/xmp/Photoshop.mjs +1 -0
- package/dist/xmp/Tiff.d.mts +2 -0
- package/dist/xmp/Tiff.mjs +1 -0
- package/dist/xmp/Xmp.d.mts +2 -0
- package/dist/xmp/Xmp.mjs +3 -0
- package/dist/xmp/XmpBasic.d.mts +2 -0
- package/dist/xmp/XmpBasic.mjs +1 -0
- package/dist/xmp/XmpMM.d.mts +2 -0
- package/dist/xmp/XmpMM.mjs +1 -0
- package/dist/xmp/XmpRights.d.mts +2 -0
- package/dist/xmp/XmpRights.mjs +1 -0
- package/dist/xmp/index.d.mts +15 -0
- package/dist/xmp/index.mjs +15 -0
- package/package.json +187 -3
- package/src/Dataset.ts +1085 -0
- package/src/Iri.ts +322 -0
- package/src/Isomorphism.ts +319 -0
- package/src/LanguageTag.ts +98 -0
- package/src/Namespace.ts +100 -0
- package/src/PrefixMap.ts +117 -0
- package/src/RdfJs.ts +146 -0
- package/src/Rdfs.ts +241 -0
- package/src/Reification.ts +103 -0
- package/src/Resource.ts +873 -0
- package/src/Serialization.ts +775 -0
- package/src/Term.ts +1300 -0
- package/src/TermCodec.ts +505 -0
- package/src/TermJson.ts +313 -0
- package/src/Vocab.ts +161 -0
- package/src/Xsd.ts +573 -0
- package/src/csvw/Csv2Json.ts +265 -0
- package/src/csvw/Csv2Rdf.ts +268 -0
- package/src/csvw/Datatype.ts +589 -0
- package/src/csvw/Metadata.ts +1523 -0
- package/src/csvw/Processor.ts +276 -0
- package/src/csvw/Report.ts +135 -0
- package/src/csvw/Table.ts +759 -0
- package/src/csvw/index.ts +22 -0
- package/src/csvw/internal/dateFormat.ts +202 -0
- package/src/csvw/internal/json.ts +104 -0
- package/src/csvw/internal/numberFormat.ts +369 -0
- package/src/csvw/internal/object.ts +23 -0
- package/src/csvw/internal/uriTemplate.ts +130 -0
- package/src/csvw/internal/url.ts +93 -0
- package/src/csvw/internal/vocab.ts +282 -0
- package/src/index.ts +40 -0
- package/src/internal/arbitrary.ts +148 -0
- package/src/internal/loop.ts +24 -0
- package/src/internal/pending.ts +20 -0
- package/src/internal/textDecoder.ts +183 -0
- package/src/jsonld/DocumentLoader.ts +512 -0
- package/src/jsonld/JsonLd.ts +847 -0
- package/src/jsonld/JsonLdError.ts +105 -0
- package/src/jsonld/index.ts +13 -0
- package/src/jsonld/internal/compact.ts +852 -0
- package/src/jsonld/internal/context.ts +781 -0
- package/src/jsonld/internal/expand.ts +614 -0
- package/src/jsonld/internal/flatten.ts +243 -0
- package/src/jsonld/internal/frame.ts +559 -0
- package/src/jsonld/internal/iri.ts +52 -0
- package/src/jsonld/internal/json.ts +19 -0
- package/src/jsonld/internal/linkHeader.ts +60 -0
- package/src/jsonld/internal/rdf.ts +481 -0
- package/src/jsonld/internal/util.ts +367 -0
- package/src/n3/Isomorphism.ts +476 -0
- package/src/n3/Mapping.ts +332 -0
- package/src/n3/Model.ts +696 -0
- package/src/n3/N3.ts +237 -0
- package/src/n3/Reasoner.ts +568 -0
- package/src/n3/Vocab.ts +111 -0
- package/src/n3/index.ts +21 -0
- package/src/n3/internal/builtins.ts +668 -0
- package/src/n3/internal/guards.ts +23 -0
- package/src/n3/internal/lists.ts +106 -0
- package/src/n3/internal/loop.ts +28 -0
- package/src/n3/internal/parser.ts +1032 -0
- package/src/n3/internal/writer.ts +344 -0
- package/src/ntriples/Grammar.ts +317 -0
- package/src/ntriples/Lexical.ts +321 -0
- package/src/ntriples/NQuads.ts +140 -0
- package/src/ntriples/NTriples.ts +143 -0
- package/src/ntriples/index.ts +14 -0
- package/src/ntriples/internal/codec.ts +229 -0
- package/src/ntriples/internal/lineParser.ts +326 -0
- package/src/ntriples/internal/loop.ts +14 -0
- package/src/rdfjson/RdfJson.ts +806 -0
- package/src/rdfjson/index.ts +9 -0
- package/src/rdfjson/internal/json.ts +19 -0
- package/src/rdfxml/RdfXml.ts +1408 -0
- package/src/rdfxml/Xml.ts +419 -0
- package/src/rdfxml/index.ts +11 -0
- package/src/rdfxml/internal/chars.ts +73 -0
- package/src/rdfxml/internal/loop.ts +24 -0
- package/src/rdfxml/internal/parser.ts +1265 -0
- package/src/shacl/Message.ts +102 -0
- package/src/shacl/Path.ts +483 -0
- package/src/shacl/Shapes.ts +913 -0
- package/src/shacl/Sparql.ts +128 -0
- package/src/shacl/ValidationReport.ts +438 -0
- package/src/shacl/Validator.ts +1156 -0
- package/src/shacl/Vocabulary.ts +180 -0
- package/src/shacl/index.ts +22 -0
- package/src/shacl/internal/compare.ts +128 -0
- package/src/shacl/internal/regex.ts +56 -0
- package/src/shex/SemAct.ts +197 -0
- package/src/shex/ShExC.ts +415 -0
- package/src/shex/ShExError.ts +71 -0
- package/src/shex/ShExJ.ts +893 -0
- package/src/shex/ShExR.ts +640 -0
- package/src/shex/ShapeMap.ts +385 -0
- package/src/shex/Structure.ts +467 -0
- package/src/shex/Validator.ts +395 -0
- package/src/shex/index.ts +24 -0
- package/src/shex/internal/engine.ts +682 -0
- package/src/shex/internal/iterate.ts +14 -0
- package/src/shex/internal/json.ts +12 -0
- package/src/shex/internal/lexer.ts +56 -0
- package/src/shex/internal/nodeConstraint.ts +368 -0
- package/src/shex/internal/shexcLexer.ts +387 -0
- package/src/shex/internal/shexcParser.ts +1312 -0
- package/src/shex/internal/tokens.ts +41 -0
- package/src/shex/internal/xpathRegex.ts +290 -0
- package/src/sparql/Algebra.ts +914 -0
- package/src/sparql/Ast.ts +1344 -0
- package/src/sparql/Bindings.ts +272 -0
- package/src/sparql/ClientErrors.ts +156 -0
- package/src/sparql/ClientFormats.ts +70 -0
- package/src/sparql/Engine.ts +699 -0
- package/src/sparql/Errors.ts +30 -0
- package/src/sparql/Expression.ts +360 -0
- package/src/sparql/Federation.ts +187 -0
- package/src/sparql/Functions.ts +689 -0
- package/src/sparql/Generator.ts +426 -0
- package/src/sparql/GraphStore.ts +341 -0
- package/src/sparql/Optimizer.ts +230 -0
- package/src/sparql/Options.ts +191 -0
- package/src/sparql/Parser.ts +173 -0
- package/src/sparql/Protocol.ts +342 -0
- package/src/sparql/ProtocolErrors.ts +113 -0
- package/src/sparql/QueryBuilder.ts +953 -0
- package/src/sparql/Results.ts +844 -0
- package/src/sparql/ResultsStream.ts +771 -0
- package/src/sparql/ServerFormats.ts +75 -0
- package/src/sparql/ServiceDescription.ts +130 -0
- package/src/sparql/SparqlClient.ts +947 -0
- package/src/sparql/SparqlServer.ts +528 -0
- package/src/sparql/Store.ts +311 -0
- package/src/sparql/TermSchema.ts +20 -0
- package/src/sparql/Testing.ts +114 -0
- package/src/sparql/Translate.ts +407 -0
- package/src/sparql/ai/Mcp.ts +43 -0
- package/src/sparql/ai/Tools.ts +481 -0
- package/src/sparql/ai/index.ts +11 -0
- package/src/sparql/index.ts +64 -0
- package/src/sparql/internal/evaluator.ts +947 -0
- package/src/sparql/internal/hash.ts +418 -0
- package/src/sparql/internal/json.ts +12 -0
- package/src/sparql/internal/lexer.ts +488 -0
- package/src/sparql/internal/loop.ts +24 -0
- package/src/sparql/internal/parser.ts +2215 -0
- package/src/sparql/internal/prefetch.ts +46 -0
- package/src/sparql/internal/stringMap.ts +39 -0
- package/src/sparql/internal/textResults.ts +226 -0
- package/src/sparql/internal/values.ts +550 -0
- package/src/sparql/shacl/Evaluator.ts +478 -0
- package/src/sparql/shacl/Query.ts +574 -0
- package/src/sparql/shacl/index.ts +12 -0
- package/src/sparql/sql/Dialect.ts +246 -0
- package/src/sparql/sql/SqlStore.ts +1080 -0
- package/src/sparql/sql/Translation.ts +1898 -0
- package/src/sparql/sql/index.ts +17 -0
- package/src/sparql/sql/internal/encoding.ts +313 -0
- package/src/turtle/Grammar.ts +286 -0
- package/src/turtle/Manifest.ts +215 -0
- package/src/turtle/TriG.ts +158 -0
- package/src/turtle/Turtle.ts +166 -0
- package/src/turtle/index.ts +14 -0
- package/src/turtle/internal/loop.ts +23 -0
- package/src/turtle/internal/parse.ts +112 -0
- package/src/turtle/internal/parser.ts +1303 -0
- package/src/turtle/internal/serialize.ts +79 -0
- package/src/turtle/internal/streamWriter.ts +128 -0
- package/src/turtle/internal/writer.ts +898 -0
- package/src/xmp/DublinCore.ts +147 -0
- package/src/xmp/Exif.ts +109 -0
- package/src/xmp/Extract.ts +351 -0
- package/src/xmp/Metadata.ts +703 -0
- package/src/xmp/Namespaces.ts +228 -0
- package/src/xmp/Packet.ts +297 -0
- package/src/xmp/Pdf.ts +99 -0
- package/src/xmp/PdfA.ts +280 -0
- package/src/xmp/Photoshop.ts +275 -0
- package/src/xmp/Tiff.ts +196 -0
- package/src/xmp/Xmp.ts +430 -0
- package/src/xmp/XmpBasic.ts +90 -0
- package/src/xmp/XmpMM.ts +82 -0
- package/src/xmp/XmpRights.ts +83 -0
- package/src/xmp/index.ts +36 -0
- package/src/xmp/internal/accessors.ts +72 -0
- package/src/xmp/internal/xml.ts +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Parser-xARsOWXk.mjs","names":["TurtleGrammar.hex","iri","TurtleGrammar.iriExcluded","TurtleGrammar.pnCharsU","TurtleGrammar.digit","variable","string","TurtleGrammar.exponent","TurtleGrammar.alpha","TurtleGrammar.alphanumeric","unexpected","TurtleGrammar.skip","Iri.resolve","Term.namedNode","StringMap.setOf","StringMap.empty","Term.blankNode","Term.variable","Term.literal","Term.NamedNode","Term.triple","values","Ast.values","Ast.isPath","Ast.pathPattern","Ast.triplePattern","triple","Ast.negated","Ast.link","Ast.zeroOrOne","Ast.zeroOrMore","Ast.oneOrMore","Ast.inverse","Ast.sequence","Ast.alternative","Ast.isBuiltInName","Ast.aggregate","Ast.builtInArity","Ast.operation","Ast.exists","Ast.functionCall","Ast.union","Ast.optional","Ast.minus","Ast.graph","Ast.service","Ast.filter","Ast.bind","Ast.bgp","Ast.inScopeVariables","Ast.group","Ast.subSelect","Term.isVariable","Ast.containsAggregate","Ast.expressionVariables","Ast.quadPattern","Term.defaultGraph","Term.Quad","Ast.update","parseQuery","parseUpdate","Internal.parseQuery","Internal.parseUpdate"],"sources":["../src/sparql/internal/lexer.ts","../src/sparql/internal/parser.ts","../src/sparql/Parser.ts"],"sourcesContent":["/**\n * The SPARQL lexer, written with `@thomasfosterau/effect-parse`: a compiled\n * grammar turning a query or update into tokens, built on the Turtle\n * grammar's terminals (`/turtle`'s `Grammar`), which SPARQL shares,\n * plus SPARQL's own (variables, keywords, punctuation). A pass then resolves\n * IRIs in document order, as `BASE` and `PREFIX` declarations are met, so\n * that the parser works on resolved tokens and needs no per-query state for\n * names.\n *\n * Where no token can be read, the tokens end with an `ERROR` token, which the\n * parser reports if it gets that far (as a lazy lexer would).\n *\n * @internal\n */\nimport * as Compiler from '@thomasfosterau/effect-parse/Compiler';\nimport * as Parser from '@thomasfosterau/effect-parse/Parser';\nimport * as Token from '@thomasfosterau/effect-parse/Token';\nimport * as Iri from '../../Iri.ts';\nimport * as TurtleGrammar from '../../turtle/Grammar.ts';\nimport * as Option from 'effect/Option';\nimport * as Result from 'effect/Result';\nimport { loop } from './loop.ts';\n\n/** The kinds of SPARQL tokens. */\nexport type TokenType =\n | 'IRI'\n | 'PNAME'\n | 'BNODE'\n | 'VAR'\n | 'STRING'\n | 'LANGTAG'\n | 'INTEGER'\n | 'DECIMAL'\n | 'DOUBLE'\n | 'WORD'\n | 'PUNCT'\n | 'ERROR'\n | 'END';\n\n/** A SPARQL token. Every token has every field, so that all have the same shape. */\nexport interface Tok {\n readonly type: TokenType;\n /**\n * The decoded value: the IRI (resolved by `resolve`), the local name, the\n * label, the variable name, the string value, the word, the punctuation,\n * the number's lexical form; for ERROR, why no token could be read.\n * END is never lexed: it is what the parser's hooks see past the last\n * token.\n */\n value: string;\n /** PNAME: the prefix; STRING: `long` for a long string. */\n readonly extra: string;\n /**\n * What the parser dispatches on: the punctuation, the upper-cased word\n * (`a` stays `a`), else the type.\n */\n readonly kind: string;\n readonly start: number;\n readonly end: number;\n /** PNAME: why the name could not be expanded (an undefined prefix). */\n error: Option.Option<string>;\n}\n\ninterface Partial {\n readonly type: TokenType;\n readonly value: string;\n readonly extra?: string;\n /** ERROR: where the error is, if not at the start of the token. */\n readonly at?: number;\n}\n\nconst make = (t: Partial, start: number, end: number): Tok => ({\n type: t.type,\n value: t.value,\n extra: t.extra ?? '',\n kind:\n t.type === 'PUNCT'\n ? t.value\n : t.type === 'WORD'\n ? t.value === 'a'\n ? 'a'\n : t.value.toUpperCase()\n : t.type,\n start: t.at ?? start,\n end,\n error: Option.none(),\n});\n\n/** A token that ends the stream, with the reason. */\nconst errorToken = (value: string, at?: number): Partial =>\n at === undefined ? { type: 'ERROR', value } : { type: 'ERROR', value, at };\n\n// -----------------------------------------------------------------------------\n// Terminals\n// -----------------------------------------------------------------------------\n\nconst hex4 = Token.takeWhile(TurtleGrammar.hex, 4);\nconst hex8 = Token.takeWhile(TurtleGrammar.hex, 8);\n\n/** Decodes a `UCHAR`, rejecting surrogates and code points beyond U+10FFFF. */\nconst decodeUchar = (hex: string): Option.Option<string> => {\n const code = parseInt(hex, 16);\n return (code >= 0xd800 && code <= 0xdfff) || code > 0x10ffff\n ? Option.none()\n : Option.some(String.fromCodePoint(code));\n};\n\n// eslint-disable-next-line no-control-regex\nconst forbiddenInIri = /[<>\"{}|^`\\\\\\u0000- ]/;\n\n/** `IRIREF`, decoding its `UCHAR`s (an escape may not produce a disallowed character). */\nconst iri: Parser.Parser<Partial> = Parser.delimited(\n Token.literal('<'),\n Parser.taken(\n Parser.repeat(\n Parser.alt(\n Token.takeTill([TurtleGrammar.iriExcluded, '\\\\'], { min: 1 }),\n Parser.seq(Token.literal('\\\\u'), hex4),\n Parser.seq(Token.literal('\\\\U'), hex8),\n ),\n ),\n ),\n Token.literal('>'),\n).pipe(\n Parser.map((raw): Partial => {\n if (raw.indexOf('\\\\') === -1) return { type: 'IRI', value: raw };\n let bad = Option.none<string>();\n const value = raw.replace(/\\\\u([0-9A-Fa-f]{4})|\\\\U([0-9A-Fa-f]{8})/g, (_, a, b) => {\n const hex = a ?? b;\n const c = decodeUchar(hex);\n if (Option.isNone(c)) {\n if (Option.isNone(bad)) bad = Option.some(`Invalid code point escape \\\\u${hex}`);\n return '';\n }\n return c.value;\n });\n if (Option.isSome(bad)) return errorToken(bad.value);\n return forbiddenInIri.test(value)\n ? errorToken('Invalid character in IRI')\n : { type: 'IRI', value };\n }),\n);\n\nconst varChars: Token.StringTokenSet = [\n TurtleGrammar.pnCharsU,\n TurtleGrammar.digit,\n '·',\n Token.range('̀', 'ͯ'),\n Token.range('‿', '⁀'),\n];\n\n/** `VAR1` / `VAR2` */\nconst variable: Parser.Parser<Partial> = Parser.preceded(\n Token.oneOf('?$'),\n Parser.taken(\n Parser.seq(\n Token.oneOf([TurtleGrammar.pnCharsU, TurtleGrammar.digit]),\n Token.takeWhile(varChars),\n ),\n ),\n).pipe(Parser.map((value): Partial => ({ type: 'VAR', value })));\n\n/** Escape letters (the `t` of `\\t`, …) and the characters they denote. */\ninterface EscapeTable {\n readonly [letter: string]: string;\n}\n\nconst ECHAR: EscapeTable = {\n t: '\\t',\n b: '\\b',\n n: '\\n',\n r: '\\r',\n f: '\\f',\n '\"': '\"',\n \"'\": \"'\",\n '\\\\': '\\\\',\n};\n\nconst HEX = /^[0-9A-Fa-f]+$/;\n\n/**\n * The runs of characters a string takes as they are: all but its quote and\n * `\\` (and, in a short string, line breaks).\n */\nconst SHORT_RUN_DOUBLE = /[^\"\\\\\\n\\r]*/y;\nconst SHORT_RUN_SINGLE = /[^'\\\\\\n\\r]*/y;\nconst LONG_RUN_DOUBLE = /[^\"\\\\]*/y;\nconst LONG_RUN_SINGLE = /[^'\\\\]*/y;\n/** Up to two quotes before a long string's closing delimiter. */\nconst EXTRA_DOUBLE = /\"{0,2}/y;\nconst EXTRA_SINGLE = /'{0,2}/y;\n\n/** The end of the run `re` matches at `pos`. */\nconst runEnd = (re: RegExp, input: string, pos: number): number => {\n re.lastIndex = pos;\n re.test(input);\n return re.lastIndex;\n};\n\n/**\n * A string literal. Long strings may end with up to two quotes before the\n * closing delimiter (`\"\"\"a\"\"\"\"` is `a\"`). Written as plain code: it is a\n * leaf, and its error reporting follows the reference lexer.\n */\nconst string: Parser.Parser<Partial> = Parser.make<Partial>((state) => {\n // SAFETY: the lexer runs on string input (`Parser.run` over a `string`), never bytes.\n const input = state.input;\n const start = state.pos;\n const quote = input.charAt(start);\n const long = input.startsWith(quote.repeat(3), start);\n const double = quote === '\"';\n const run = long\n ? double\n ? LONG_RUN_DOUBLE\n : LONG_RUN_SINGLE\n : double\n ? SHORT_RUN_DOUBLE\n : SHORT_RUN_SINGLE;\n let i = start + (long ? 3 : 1);\n let out = '';\n let token: Partial = errorToken('Unterminated string literal');\n const error = (message: string, at?: number): false => {\n state.pos = input.length;\n token = errorToken(message, at);\n return false;\n };\n /** Reads the next run and the character after it; `false` once the literal ends. */\n const step = (): boolean => {\n const runTo = runEnd(run, input, i);\n out += input.slice(i, runTo);\n i = runTo;\n if (i >= input.length) return error('Unterminated string literal');\n const c = input.charAt(i);\n if (c === '\\\\') {\n const e = input.charAt(i + 1);\n if (e === 'u' || e === 'U') {\n const len = e === 'u' ? 4 : 8;\n const hex = input.slice(i + 2, i + 2 + len);\n if (hex.length !== len || !HEX.test(hex)) return error('Invalid \\\\u escape', i);\n const decoded = decodeUchar(hex);\n if (Option.isNone(decoded)) return error(`Invalid code point escape \\\\u${hex}`, i);\n out += decoded.value;\n i += 2 + len;\n return true;\n }\n const decoded = e === '' ? undefined : ECHAR[e];\n if (decoded === undefined) return error('Invalid escape sequence in string', i);\n out += decoded;\n i += 2;\n return true;\n }\n if (long) {\n if (input.startsWith(quote.repeat(3), i)) {\n const j = runEnd(double ? EXTRA_DOUBLE : EXTRA_SINGLE, input, i + 3) - 3;\n out += input.slice(i, j);\n state.pos = j + 3;\n token = { type: 'STRING', value: out, extra: 'long' };\n return false;\n }\n // A quote that does not close the string.\n out += c;\n i++;\n return true;\n }\n if (c === quote) {\n state.pos = i + 1;\n token = { type: 'STRING', value: out };\n return false;\n }\n // A line break (the run stops only at the quote, `\\` and line breaks).\n return error('Newline in string literal', i);\n };\n loop(step);\n return token;\n});\n\nconst digits0 = Token.takeWhile(TurtleGrammar.digit);\nconst digits1 = Token.takeWhile(TurtleGrammar.digit, { min: 1 });\n\n/** An unsigned number (the sign is a separate token in SPARQL). */\nconst number: Parser.Parser<Partial> = Parser.alt(\n Parser.taken(\n Parser.alt(\n Parser.seq(\n digits1,\n Parser.opt(Parser.seq(Token.literal('.'), digits0)),\n TurtleGrammar.exponent,\n ),\n Parser.seq(Token.literal('.'), digits1, TurtleGrammar.exponent),\n ),\n ).pipe(Parser.map((value): Partial => ({ type: 'DOUBLE', value }))),\n Parser.taken(Parser.seq(digits0, Token.literal('.'), digits1)).pipe(\n Parser.map((value): Partial => ({ type: 'DECIMAL', value })),\n ),\n digits1.pipe(Parser.map((value): Partial => ({ type: 'INTEGER', value }))),\n);\n\n/** `LANG_DIR`: a language tag with an optional `--direction` (checked by the parser). */\nconst langTag: Parser.Parser<Partial> = Parser.alt(\n Parser.preceded(\n Token.literal('@'),\n Parser.taken(\n Parser.seq(\n Token.takeWhile(TurtleGrammar.alpha, { min: 1 }),\n Parser.repeat(\n Parser.preceded(\n Token.literal('-'),\n Token.takeWhile(TurtleGrammar.alphanumeric, { min: 1 }),\n ),\n ),\n Parser.opt(\n Parser.preceded(Token.literal('--'), Token.takeWhile(TurtleGrammar.alpha, { min: 1 })),\n ),\n ),\n ),\n ).pipe(Parser.map((value): Partial => ({ type: 'LANGTAG', value }))),\n Parser.preceded(Token.literal('@'), Parser.succeed(errorToken('Invalid language tag'))),\n);\n\nconst blankNode: Parser.Parser<Partial> = Parser.alt(\n TurtleGrammar.blankNodeLabel.pipe(Parser.map((value): Partial => ({ type: 'BNODE', value }))),\n Parser.preceded(Token.literal('_:'), Parser.succeed(errorToken('Invalid blank node label'))),\n);\n\nconst pname: Parser.Parser<Partial> = TurtleGrammar.prefixedName.pipe(\n Parser.map(({ prefix, local }): Partial => ({ type: 'PNAME', value: local, extra: prefix })),\n);\n\nconst word: Parser.Parser<Partial> = Parser.taken(\n Parser.seq(Token.oneOf(TurtleGrammar.alpha), Token.takeWhile([TurtleGrammar.alphanumeric, '_'])),\n).pipe(Parser.map((value): Partial => ({ type: 'WORD', value })));\n\nconst PUNCTUATION = [\n '<<(',\n ')>>',\n '{|',\n '|}',\n '<<',\n '>>',\n '^^',\n '&&',\n '||',\n '!=',\n '<=',\n '>=',\n ...'{}()[].,;=<>!+-*/^|?~'.split(''),\n];\n\nconst punctuation: Parser.Parser<Partial> = Parser.alt(\n ...PUNCTUATION.map((p) => Token.literal(p)),\n).pipe(Parser.map((value): Partial => ({ type: 'PUNCT', value })));\n\nconst unexpected: Parser.Parser<Partial> = Token.any.pipe(\n Parser.map((c) => errorToken(`Unexpected character '${c}'`)),\n);\n\n/** One token, in the order of preference of the reference lexer. */\nconst token: Parser.Parser<Partial> = Parser.alt(\n Parser.preceded(Parser.peek(Token.literal('<')), Parser.backtrack(iri)),\n Parser.preceded(Parser.peek(Token.oneOf('?$')), variable),\n Parser.preceded(Token.literal('$'), Parser.succeed(errorToken('Invalid variable'))),\n Parser.preceded(Parser.peek(Token.oneOf('\"\\'')), string),\n Parser.preceded(\n Parser.peek(\n Parser.alt(\n Token.oneOf(TurtleGrammar.digit),\n Parser.seq(Token.literal('.'), Token.oneOf(TurtleGrammar.digit)),\n ),\n ),\n number,\n ),\n Parser.preceded(Parser.peek(Token.literal('@')), langTag),\n Parser.preceded(Parser.peek(Token.literal('_:')), blankNode),\n pname,\n word,\n punctuation,\n unexpected,\n);\n\nconst lexer = Compiler.jit(\n Parser.seq(\n Parser.repeat(\n Parser.preceded(\n Parser.seq(TurtleGrammar.skip, Parser.not(Parser.eof)),\n Parser.withSpan(token).pipe(Parser.map(([t, { start, end }]) => make(t, start, end))),\n ),\n ),\n Parser.preceded(TurtleGrammar.skip, Parser.location),\n ),\n);\n\n/** Splits a query or update into tokens (ending at the first `ERROR` token, if any). */\nexport const tokenize = (input: string): Array<Tok> => {\n // The lexer is total (where no token can be read it emits an ERROR token),\n // so the failure branch is unreachable; it still ends in an ERROR token.\n const tokens = Result.match(Parser.parsePeek(lexer, input), {\n onSuccess: ([, [lexed]]) => lexed,\n onFailure: (): Array<Tok> => [make(errorToken('No token could be read'), 0, 0)],\n });\n const error = tokens.findIndex((t) => t.type === 'ERROR');\n if (error !== -1) tokens.length = error + 1;\n return tokens;\n};\n\n// -----------------------------------------------------------------------------\n// Names\n// -----------------------------------------------------------------------------\n\n/** Prefix labels and the namespace IRIs they expand to. */\ninterface PrefixTable {\n [prefix: string]: string;\n}\n\n/** The base IRI and prefixes after resolving the tokens. */\nexport interface Resolved {\n readonly base: Option.Option<string>;\n readonly prefixes: Record<string, string>;\n}\n\n/**\n * Resolves the IRIs of `tokens` in place, in document order: IRI references\n * against the base and prefixed names against the prefixes, as `BASE` and\n * `PREFIX` declarations set them. The name a `PREFIX` declares is left\n * alone; a prefixed name with an undefined prefix gets an `error`.\n */\nexport const resolve = (\n tokens: Array<Tok>,\n baseIri: Option.Option<string>,\n initialPrefixes: Readonly<Record<string, string>>,\n): Resolved => {\n const state: ResolveState = { base: baseIri, prefixes: { ...initialPrefixes } };\n let i = 0;\n loop(() => {\n const t = tokens[i];\n if (t === undefined) return false;\n // Skips the tokens a directive consumed.\n i += resolveToken(t, tokens, i, state) + 1;\n return true;\n });\n return { base: state.base, prefixes: state.prefixes };\n};\n\n/** The base and prefixes in effect at a point of the token stream. */\ninterface ResolveState {\n base: Option.Option<string>;\n readonly prefixes: PrefixTable;\n}\n\nconst resolveIri = (state: ResolveState, ref: string) =>\n Option.match(state.base, { onNone: () => ref, onSome: (base) => Iri.resolve(ref, base) });\n\n/** Resolves a `BASE` or `PREFIX` directive's IRI; how many tokens it consumed. */\nconst resolveDirective = (t: Tok, tokens: Array<Tok>, i: number, state: ResolveState): number => {\n const next = tokens[i + 1];\n if (t.kind === 'BASE' && next?.type === 'IRI') {\n next.value = resolveIri(state, next.value);\n state.base = Option.some(next.value);\n return 1;\n }\n if (t.kind === 'PREFIX' && next?.type === 'PNAME' && next.value === '') {\n const value = tokens[i + 2];\n if (value?.type === 'IRI') {\n value.value = resolveIri(state, value.value);\n state.prefixes[next.extra] = value.value;\n return 2;\n }\n }\n return 0;\n};\n\n/**\n * Resolves one token in place and returns how many of the following tokens\n * it consumed (a `BASE` or `PREFIX` directive's IRI and name). A plain\n * branch per type: it runs once per token.\n */\nconst resolveToken = (t: Tok, tokens: Array<Tok>, i: number, state: ResolveState): number => {\n if (t.type === 'IRI') {\n t.value = resolveIri(state, t.value);\n return 0;\n }\n if (t.type === 'PNAME') {\n const ns = state.prefixes[t.extra];\n if (ns === undefined) t.error = Option.some(`Undefined prefix '${t.extra}:'`);\n else t.value = ns + t.value;\n return 0;\n }\n return t.type === 'WORD' ? resolveDirective(t, tokens, i, state) : 0;\n};\n","/**\n * The SPARQL 1.1 / 1.2 query and update grammar, written with\n * `@thomasfosterau/effect-parse` as a compiled LL(1) grammar over the tokens\n * of `lexer.ts` (whose names are already resolved). It builds the AST\n * directly, expanding every abbreviation and enforcing the static rules of\n * the specification.\n *\n * Three things depend on the order in which the input is read: the labels of\n * generated blank nodes, the scopes of blank node labels, and where\n * aggregates are allowed. They live in a per-parse context, which small\n * hooks (`Parser.make`) update at the points where the reference parser does,\n * and which is reset at the start of every run of the grammar.\n *\n * @internal\n */\nimport * as Compiler from '@thomasfosterau/effect-parse/Compiler';\nimport * as ParseError from '@thomasfosterau/effect-parse/ParseError';\nimport * as Parser from '@thomasfosterau/effect-parse/Parser';\nimport * as Token from '@thomasfosterau/effect-parse/Token';\nimport * as Term from '../../Term.ts';\nimport * as Arr from 'effect/Array';\nimport * as Match from 'effect/Match';\nimport * as MutableHashSet from 'effect/MutableHashSet';\nimport * as Option from 'effect/Option';\nimport * as Predicate from 'effect/Predicate';\nimport * as Record from 'effect/Record';\nimport * as Result from 'effect/Result';\nimport * as Ast from '../Ast.ts';\nimport { resolve, type Tok, tokenize } from './lexer.ts';\nimport { loop } from './loop.ts';\nimport * as StringMap from './stringMap.ts';\n\nconst RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';\nconst XSD = 'http://www.w3.org/2001/XMLSchema#';\nconst rdfType = Term.namedNode(`${RDF}type`);\nconst rdfFirst = Term.namedNode(`${RDF}first`);\nconst rdfRest = Term.namedNode(`${RDF}rest`);\nconst rdfNil = Term.namedNode(`${RDF}nil`);\nconst rdfReifies = Term.namedNode(`${RDF}reifies`);\nconst xsdInteger = Term.namedNode(`${XSD}integer`);\nconst xsdDecimal = Term.namedNode(`${XSD}decimal`);\nconst xsdDouble = Term.namedNode(`${XSD}double`);\nconst xsdBoolean = Term.namedNode(`${XSD}boolean`);\n\n/** A syntax or static error, at a character offset. */\nexport class Failure {\n readonly message: string;\n readonly offset: number;\n constructor(message: string, offset: number) {\n this.message = message;\n this.offset = offset;\n }\n}\n\nconst fail = (message: string, offset: number): never => {\n throw new Failure(message, offset);\n};\n\ntype P<A> = Parser.Parser<A, Failure, never, ReadonlyArray<Tok>>;\ntype Triples = Array<Ast.TriplePattern | Ast.PathPattern>;\n\n/**\n * What a hook sees past the last token: a token no grammar rule matches (its\n * kind is no keyword or punctuation), at the end of the input.\n */\nconst END: Tok = {\n type: 'END',\n value: '',\n extra: '',\n kind: '',\n start: -1,\n end: -1,\n error: Option.none(),\n};\n\n/** The token at `pos`, or `END` past the last one. */\nconst tokenAt = (tokens: ReadonlyArray<Tok>, pos: number): Tok => tokens[pos] ?? END;\n\n/**\n * A set of token kinds, read through its backing `Map` by the token\n * predicates (one lookup per token, without an `Option` per lookup).\n */\nconst kindSet = (kinds: Iterable<string>): ReadonlyMap<string, true> => StringMap.setOf(kinds);\n\n/** Whether a triple-shaped item is a triple pattern (not a path pattern). */\nconst isTriplePattern = (t: Ast.TriplePattern | Ast.PathPattern): t is Ast.TriplePattern =>\n Predicate.isTagged(t, 'TriplePattern');\n\n// -----------------------------------------------------------------------------\n// Per-parse context\n// -----------------------------------------------------------------------------\n\ninterface TripleContext {\n /** Whether variables are allowed (false for INSERT/DELETE DATA). */\n readonly variables: boolean;\n /** Whether blank nodes are allowed (false for DELETE templates / data). */\n readonly blankNodes: boolean;\n /** Scope identifier for blank node label checks. */\n readonly scope: number;\n /** Label map to check against. */\n readonly labels: Map<string, number>;\n}\n\n/** The context outside every pattern (never read: the grammar sets one first). */\nconst noContext: TripleContext = {\n variables: true,\n blankNodes: true,\n scope: 0,\n labels: StringMap.empty(),\n};\n\nclass Context {\n readonly input: string;\n readonly usedLabels: ReadonlyMap<string, true>;\n bnodeCounter = 0;\n scopeCounter = 0;\n opIndex = 0;\n readonly patternLabels = StringMap.empty<number>();\n readonly templateLabels = StringMap.empty<number>();\n aggregatesAllowed = false;\n inAggregate = false;\n /** The aggregate flags saved by `withFlags`, in pairs. */\n readonly flags: Array<boolean> = [];\n /** The triple contexts in force, innermost last. */\n readonly triples: Array<TripleContext> = [];\n /** The last `VERSION` declared. */\n version = Option.none<string>();\n /** Whether the verbs being read are simple predicates, innermost last. */\n readonly verbs: Array<boolean> = [];\n /** The first token of the subject being read. */\n subjectStart: Tok = END;\n\n constructor(input: string) {\n this.input = input;\n this.usedLabels = StringMap.setOf(\n Array.from(input.matchAll(/_:([^\\s.;,(){}[\\]]+)/g), (m) => m[1] ?? ''),\n );\n }\n\n get tc(): TripleContext {\n return this.triples[this.triples.length - 1] ?? noContext;\n }\n\n patternContext(): TripleContext {\n return {\n variables: true,\n blankNodes: true,\n scope: ++this.scopeCounter,\n labels: this.patternLabels,\n };\n }\n\n freshBlankNode(): Term.BlankNode {\n let label = `g${this.bnodeCounter++}`;\n // Skips the labels the input uses.\n loop(() => {\n if (!this.usedLabels.has(label)) return false;\n label = `g${this.bnodeCounter++}`;\n return true;\n });\n return Term.blankNode(label);\n }\n}\n\nlet ctx: Context = new Context('');\nlet fresh: () => Context = () => new Context('');\n\n/** Starts a run of the grammar with a new context (the compiled run and any re-run). */\nconst start: P<void> = Parser.make<void, Failure, never, ReadonlyArray<Tok>>(() => {\n ctx = fresh();\n return undefined;\n});\n\nconst offsetOf = (t: Tok): number => (t === END ? ctx.input.length : t.start);\n\n/**\n * Runs `f`, returning a thrown `Failure` (a syntax error found while\n * building) as the failure; any other exception is a defect and propagates.\n */\nconst catchFailure = <A>(f: () => A): Result.Result<A, Failure> =>\n Result.try({\n try: f,\n catch: (cause) => {\n if (cause instanceof Failure) return cause;\n throw cause;\n },\n });\n\n/**\n * A hook: runs `f` on the current token (without consuming it). A `Failure`\n * thrown by `f` is an unrecoverable error.\n */\nconst hook = <A>(f: (t: Tok) => A): P<A> =>\n Parser.make<A, Failure, never, ReadonlyArray<Tok>>((state) => {\n try {\n return f(tokenAt(state.input, state.pos));\n } catch (e) {\n if (e instanceof Failure) return state.failCause('Cut', 'Verify', e);\n throw e;\n }\n });\n\n/**\n * A token parser written as a hook: `f` returns the value for the current\n * token (consumed), or `None` to fail without consuming it.\n */\nconst take = <A>(label: string, f: (t: Tok, next: Tok) => Option.Option<A>): P<A> => {\n const expected = [label];\n return Parser.make<A, Failure, never, ReadonlyArray<Tok>>((state) => {\n const t = state.input[state.pos];\n if (t === undefined || t.type === 'ERROR') return state.backtrack('Token', expected);\n try {\n const a = f(t, tokenAt(state.input, state.pos + 1));\n if (Option.isNone(a)) return state.backtrack('Token', expected);\n state.pos++;\n return a.value;\n } catch (e) {\n if (e instanceof Failure) return state.failCause('Cut', 'Verify', e);\n throw e;\n }\n });\n};\n\n/** A `take` result: the token is taken. */\nconst taken = Option.some(true);\nconst notTaken = Option.none();\n\n/**\n * Runs `p` with the aggregate flags set (`inAggregate` left alone when\n * `None`), restoring them afterwards.\n */\nconst withFlags = <A>(\n aggregatesAllowed: boolean,\n inAggregate: Option.Option<boolean>,\n p: P<A>,\n): P<A> =>\n Parser.delimited(\n hook(() => {\n ctx.flags.push(ctx.aggregatesAllowed, ctx.inAggregate);\n ctx.aggregatesAllowed = aggregatesAllowed;\n if (Option.isSome(inAggregate)) ctx.inAggregate = inAggregate.value;\n }),\n p,\n hook(() => {\n // The flags were pushed in pairs just above.\n ctx.inAggregate = ctx.flags.pop() ?? false;\n ctx.aggregatesAllowed = ctx.flags.pop() ?? false;\n }),\n );\n\n/** Runs `p` in a triple context, restoring the enclosing one afterwards. */\nconst inContext = <A>(make: () => TripleContext, p: P<A>): P<A> =>\n Parser.delimited(\n hook(() => {\n ctx.triples.push(make());\n }),\n p,\n hook(() => {\n ctx.triples.pop();\n }),\n );\n\n// -----------------------------------------------------------------------------\n// Token parsers\n// -----------------------------------------------------------------------------\n\nconst describe = (t: Tok): string =>\n t === END\n ? 'end of input'\n : t.type === 'STRING'\n ? 'string literal'\n : `'${ctx.input.slice(t.start, t.end)}'`;\n\nconst unexpected = (t: Tok, expected?: string): never =>\n fail(\n `Unexpected ${describe(t)}${expected !== undefined ? `, expected ${expected}` : ''}`,\n offsetOf(t),\n );\n\n/** The reference parser's \"Unexpected …\" error at `t` (or the lexer's, at an error token). */\nconst unexpectedAt = (t: Tok, expected?: string): never =>\n t.type === 'ERROR' ? fail(t.value, t.start) : unexpected(t, expected);\n\n/** Fails with the reference parser's \"Unexpected …\" message at the current token. */\nconst unexpectedHere = <A = never>(expected?: string): P<A> =>\n hook((t): A => unexpectedAt(t, expected));\n\n/**\n * A token of the given kind (see `Tok.kind`). A token set rather than a\n * `Parser.make` hook, so the compiler inlines the match instead of calling\n * back into an interpreted step.\n */\nconst tok = (kind: string): P<Tok> =>\n Token.oneOf<ReadonlyArray<Tok>>((t) => t.kind === kind).pipe(Parser.expected(`'${kind}'`));\n\n/** `kind`, or the \"Unexpected …, expected …\" error. */\nconst expect = (\n kind: string,\n label = kind === kind.toUpperCase() && /^[A-Z]/.test(kind) ? kind : `'${kind}'`,\n): P<Tok> => Parser.alt(tok(kind), unexpectedHere<Tok>(label));\n\n/** Whether the next token is of kind `kind` (consumed if so). */\nconst eat = (kind: string): P<boolean> => Parser.opt(tok(kind)).pipe(Parser.map(Option.isSome));\n\n/**\n * Whether the next token's kind is one of `kinds` (not consumed). A peeked\n * token set, like `tok`, so the compiler inlines it.\n */\nconst peekKind = (kinds: ReadonlyArray<string>): P<void> => {\n const set = kindSet(kinds);\n return Parser.peek(Token.oneOf<ReadonlyArray<Tok>>((t) => set.has(t.kind))).pipe(\n Parser.asVoid,\n Parser.expected(kinds.map((k) => `'${k}'`).join(' or ')),\n );\n};\n\n/** Any token but a lexer error token (consumed). A token set, like `tok`. */\nconst anyToken: P<Tok> = Token.oneOf<ReadonlyArray<Tok>>((t) => t.type !== 'ERROR').pipe(\n Parser.expected('a token'),\n);\n\n/**\n * Chooses a parser by the kind of the next token; when no case matches,\n * `otherwise` (or a failure that consumes nothing).\n */\nconst select = <A, B = A>(\n cases: ReadonlyArray<readonly [ReadonlyArray<string>, P<A>]>,\n otherwise?: P<B>,\n): P<A | B> => {\n // Guarded alternatives rather than `Parser.dispatch`, whose cases the JIT\n // leaves to the (slower) closure backend.\n const seen = MutableHashSet.empty<string>();\n const branches: Array<P<A | B>> = Arr.filterMap(cases, ([kinds, p]) => {\n const own = Arr.dedupe(kinds.filter((k) => !MutableHashSet.has(seen, k)));\n own.forEach((k) => MutableHashSet.add(seen, k));\n return Arr.isArrayNonEmpty(own)\n ? Result.succeed(Parser.preceded(peekKind(own), p))\n : Result.failVoid;\n });\n if (otherwise !== undefined) branches.push(otherwise);\n return Parser.alt(...branches);\n};\n\n/** Whether the next tokens are `a` then `b` (not consumed). */\nconst peek2 = (a: string, b: string): P<unknown> => Parser.peek(Parser.seq(tok(a), tok(b)));\n\nconst nil: P<unknown> = peek2('(', ')');\nconst anon: P<unknown> = peek2('[', ']');\n\nconst iri: P<Term.NamedNode> = take('an IRI', (t) => {\n if (t.type === 'IRI') return Option.some(Term.namedNode(t.value));\n if (t.type === 'PNAME')\n return Option.isSome(t.error)\n ? fail(t.error.value, t.start)\n : Option.some(Term.namedNode(t.value));\n return notTaken;\n});\n\nconst iriOrError: P<Term.NamedNode> = Parser.alt(iri, unexpectedHere<Term.NamedNode>('an IRI'));\n\nconst variable: P<Term.Variable> = take('a variable', (t) =>\n t.type === 'VAR' ? Option.some(Term.variable(t.value)) : notTaken,\n);\n\nconst variableOrError: P<Term.Variable> = Parser.alt(\n variable,\n unexpectedHere<Term.Variable>('a variable'),\n);\n\n/** A variable in a pattern (checked against the triple context). */\nconst patternVariable: P<Term.Variable> = take('a variable', (t) => {\n if (t.type !== 'VAR') return notTaken;\n if (!ctx.tc.variables) fail('Variables are not allowed here', t.start);\n return Option.some(Term.variable(t.value));\n});\n\nconst isIri = (t: Tok): boolean => t.type === 'IRI' || t.type === 'PNAME';\nconst isNumber = (t: Tok): boolean =>\n t.type === 'INTEGER' || t.type === 'DECIMAL' || t.type === 'DOUBLE';\n\nconst blankNodeLabel: P<Term.BlankNode> = take('a blank node', (t) => {\n if (t.type !== 'BNODE') return notTaken;\n const tc = ctx.tc;\n if (!tc.blankNodes) fail('Blank nodes are not allowed here', t.start);\n const existing = tc.labels.get(t.value);\n if (existing !== undefined && existing !== tc.scope) {\n fail(`Blank node label _:${t.value} is used in more than one scope`, t.start);\n }\n tc.labels.set(t.value, tc.scope);\n return Option.some(Term.blankNode(t.value));\n});\n\n/** A generated blank node in a pattern (checked against the triple context). */\nconst freshPatternBlankNode: P<Term.BlankNode> = hook((t) => {\n if (!ctx.tc.blankNodes) fail('Blank nodes are not allowed here', offsetOf(t));\n return ctx.freshBlankNode();\n});\n\nconst string: P<Tok> = take('a string', (t) => (t.type === 'STRING' ? Option.some(t) : notTaken));\n\nconst isDirection = (direction: string): direction is Term.Direction =>\n direction === 'ltr' || direction === 'rtl';\n\n/** A literal's `@tag` suffix, with its `--direction` if any. */\ninterface LanguageSuffix {\n readonly tag: string;\n readonly direction: Option.Option<Term.Direction>;\n}\n\nconst rdfLiteral: P<Term.Literal> = Parser.seq(\n string,\n Parser.alt(\n take('a language tag', (t, next): Option.Option<LanguageSuffix> => {\n if (t.type !== 'LANGTAG') return notTaken;\n const tag = t.value;\n const i = tag.indexOf('--');\n if (i === -1) return Option.some({ tag, direction: Option.none() });\n const direction = tag.slice(i + 2).toLowerCase();\n return isDirection(direction)\n ? Option.some({ tag: tag.slice(0, i), direction: Option.some(direction) })\n : fail(`Invalid base direction '${direction}'`, offsetOf(next));\n }),\n Parser.preceded(tok('^^'), iriOrError),\n Parser.succeed(undefined),\n ),\n).pipe(\n Parser.map(([s, suffix]): Term.Literal => {\n if (suffix === undefined) return Term.literal(s.value);\n if (suffix instanceof Term.NamedNode) return Term.literal(s.value, suffix);\n return Option.isSome(suffix.direction)\n ? Term.literal(s.value, { language: suffix.tag, direction: suffix.direction.value })\n : Term.literal(s.value, suffix.tag);\n }),\n);\n\nconst numberLiteral = (t: Tok, sign: string): Term.Literal =>\n Term.literal(\n sign + t.value,\n t.type === 'INTEGER' ? xsdInteger : t.type === 'DECIMAL' ? xsdDecimal : xsdDouble,\n );\n\nconst numericLiteral: P<Term.Literal> = take('a number', (t) =>\n isNumber(t) ? Option.some(numberLiteral(t, '')) : notTaken,\n);\n\n/** `+` or `-` immediately followed by a number. */\nconst signedNumber: P<Term.Literal> = Parser.make<Term.Literal, Failure, never, ReadonlyArray<Tok>>(\n (state) => {\n const t = state.input[state.pos];\n const n = state.input[state.pos + 1];\n if (\n t !== undefined &&\n (t.kind === '+' || t.kind === '-') &&\n n !== undefined &&\n n.start === t.end &&\n isNumber(n)\n ) {\n state.pos += 2;\n return numberLiteral(n, t.value);\n }\n return state.backtrack('Token', ['a number']);\n },\n);\n\nconst booleanLiteral: P<Term.Literal> = take('a boolean', (t) =>\n t.kind === 'TRUE' || t.kind === 'FALSE'\n ? Option.some(Term.literal(t.value.toLowerCase(), xsdBoolean))\n : notTaken,\n);\n\n/** `a`, or an IRI. */\nconst aOrIri: P<Term.NamedNode> = Parser.alt(tok('a').pipe(Parser.as(rdfType)), iriOrError);\n\n// -----------------------------------------------------------------------------\n// Data terms\n// -----------------------------------------------------------------------------\n\n/** iri | RDFLiteral | NumericLiteral | BooleanLiteral */\nconst dataTerm: P<Term.NamedNode | Term.Literal> = Parser.alt(\n iri,\n rdfLiteral,\n numericLiteral,\n signedNumber,\n booleanLiteral,\n unexpectedHere<Term.Literal>('an RDF term'),\n);\n\nconst tripleTermData: P<Term.Triple> = Parser.preceded(\n tok('<<('),\n Parser.seq(\n iriOrError,\n aOrIri,\n Parser.alt(\n Parser.suspend(() => tripleTermData),\n dataTerm,\n ),\n expect(')>>'),\n ),\n).pipe(Parser.map(([s, p, o]) => Term.triple(s, p, o)));\n\n/** A data block value; `None` for `UNDEF`. */\nconst dataBlockValue: P<Option.Option<Term.GroundTerm>> = Parser.alt(\n tok('UNDEF').pipe(Parser.as(Option.none())),\n Parser.alt(tripleTermData, dataTerm).pipe(Parser.map(Option.some)),\n);\n\nconst dataBlock: P<Ast.ValuesPattern> = Parser.alt(\n Parser.seq(\n variable,\n Parser.preceded(\n expect('{'),\n Parser.terminated(\n Parser.repeat(Parser.preceded(Parser.not(tok('}')), dataBlockValue)),\n tok('}'),\n ),\n ),\n ).pipe(\n Parser.map(([v, values]) =>\n Ast.values(\n [v],\n values.map((x) => [Option.getOrUndefined(x)]),\n ),\n ),\n ),\n Parser.seq(\n Parser.preceded(\n expect('('),\n Parser.repeat(\n Parser.seq(\n variable,\n hook((t) => t),\n ),\n ).pipe(\n Parser.tryMap((vars) =>\n Option.match(\n // The first variable that an earlier one repeats.\n Arr.findFirst(vars, ([v], i) => vars.findIndex(([x]) => x.value === v.value) < i),\n {\n onNone: () => Result.succeed(vars.map(([v]) => v)),\n onSome: ([v, next]) =>\n Result.fail(\n new Failure(`Duplicate variable ?${v.value} in VALUES`, offsetOf(next)),\n ),\n },\n ),\n ),\n Parser.cut,\n ),\n ),\n Parser.preceded(\n Parser.seq(expect(')'), expect('{')),\n Parser.terminated(\n Parser.repeat(\n Parser.preceded(\n Parser.not(tok('}')),\n Parser.seq(\n hook((t) => offsetOf(t)),\n Parser.preceded(\n expect('('),\n Parser.terminated(\n Parser.repeat(Parser.preceded(Parser.not(tok(')')), dataBlockValue)),\n anyToken,\n ),\n ),\n ),\n ),\n ),\n expect('}'),\n ),\n ),\n ).pipe(\n Parser.tryMap(([variables, rows]) =>\n Option.match(\n Arr.findFirst(rows, ([, row]) => row.length !== variables.length),\n {\n onNone: () =>\n Result.succeed(\n Ast.values(\n variables,\n rows.map(([, row]) => row.map(Option.getOrUndefined)),\n ),\n ),\n onSome: ([at, row]) =>\n Result.fail(\n new Failure(\n `VALUES row has ${row.length} values but ${variables.length} variables`,\n at,\n ),\n ),\n },\n ),\n ),\n Parser.cut,\n ),\n);\n\n// -----------------------------------------------------------------------------\n// Triples\n// -----------------------------------------------------------------------------\n\ninterface Node {\n readonly term: Ast.TermPattern;\n /** The triples the node expands to, in the order the reference parser emits them. */\n readonly triples: Triples;\n}\n\nconst node = (term: Ast.TermPattern, triples: Triples = []): Node => ({ term, triples });\n\ninterface Verb {\n readonly predicate: Ast.VarOrIri | Ast.Path;\n readonly simple: boolean;\n}\n\n/** `~ r` (and its `{| … |}`), or a `{| … |}` with a generated reifier. */\ninterface Annotation {\n readonly reifier: Ast.TermPattern;\n readonly block: Option.Option<PropertyList>;\n}\n\ninterface Obj {\n readonly node: Node;\n readonly annotation: ReadonlyArray<Annotation>;\n}\n\n/** A property list as read; `build` expands it once its subject is known. */\ntype PropertyList = ReadonlyArray<readonly [Verb, ReadonlyArray<Obj>]>;\n\n/** The triples of a property list, in the order the reference parser emits them. */\nconst build = (subject: Ast.TermPattern, pl: PropertyList, out: Triples = []): Triples => {\n pl.forEach(([v, objects]) => {\n const predicate = v.predicate;\n objects.forEach(({ node: o, annotation }) => {\n o.triples.forEach((t) => out.push(t));\n if (Ast.isPath(predicate)) {\n out.push(Ast.pathPattern(subject, predicate, o.term));\n return;\n }\n out.push(Ast.triplePattern(subject, predicate, o.term));\n if (Arr.isReadonlyArrayEmpty(annotation)) return;\n const triple = Term.triple<any, any, any>(subject, predicate, o.term);\n annotation.forEach((a) => {\n out.push(Ast.triplePattern(a.reifier, rdfReifies, triple));\n if (Option.isSome(a.block)) build(a.reifier, a.block.value, out);\n });\n });\n });\n return out;\n};\n\n/** The token types that start a triples block on their own. */\nconst TRIPLES_START = kindSet([\n 'VAR',\n 'IRI',\n 'PNAME',\n 'BNODE',\n 'STRING',\n 'INTEGER',\n 'DECIMAL',\n 'DOUBLE',\n]);\n\n/** Whether a token can start a triples block. A plain branch per type: it runs once per peek. */\nconst startsTriplesToken = (t: Tok, next: Tok): boolean => {\n if (TRIPLES_START.has(t.type)) return true;\n if (t.type === 'WORD') return t.kind === 'TRUE' || t.kind === 'FALSE';\n if (t.type !== 'PUNCT') return false;\n const v = t.value;\n return (\n v === '(' ||\n v === '[' ||\n v === '<<' ||\n v === '<<(' ||\n ((v === '+' || v === '-') && isNumber(next))\n );\n};\n\nconst startsTriples: P<unknown> = Parser.peek(\n take('triples', (t, next) => (startsTriplesToken(t, next) ? taken : notTaken)),\n);\n\n/** The triples productions, with or without property paths. */\ninterface TriplesGrammar {\n readonly triplesSameSubject: P<Triples>;\n readonly triplesBlock: P<readonly [Triples, boolean]>;\n readonly triplesTemplate: P<Triples>;\n}\n\nconst path: P<Ast.Path> = Parser.suspend(() => pathDef);\n\nconst triplesGrammar = (paths: boolean): TriplesGrammar => {\n const graphNode: P<Node> = Parser.suspend(() => graphNodeDef);\n const propertyList: P<PropertyList> = Parser.suspend(() => propertyListDef);\n\n const varOrTerm = (allowNil: boolean): P<Ast.TermPattern> =>\n Parser.alt(\n patternVariable,\n iri,\n blankNodeLabel,\n rdfLiteral,\n numericLiteral,\n booleanLiteral,\n signedNumber,\n ...(allowNil\n ? [Parser.preceded(Parser.seq(nil, anyToken, anyToken), Parser.succeed(rdfNil))]\n : []),\n Parser.preceded(Parser.seq(anon, anyToken, anyToken), freshPatternBlankNode),\n Parser.suspend(() => tripleTerm),\n unexpectedHere<Ast.TermPattern>('an RDF term or variable'),\n );\n\n const patternPredicate: P<Ast.VarOrIri> = Parser.alt(patternVariable, aOrIri);\n\n const tripleTermComponent: P<Ast.TermPattern> = Parser.alt(\n Parser.suspend(() => tripleTerm),\n Parser.preceded(\n Parser.peek(Parser.alt(tok('('), tok('<<'), Parser.preceded(Parser.not(anon), tok('[')))),\n unexpectedHere<Ast.TermPattern>(),\n ),\n varOrTerm(false),\n );\n\n const tripleTerm: P<Ast.TermPattern> = Parser.preceded(\n tok('<<('),\n Parser.seq(tripleTermComponent, patternPredicate, tripleTermComponent, expect(')>>')),\n ).pipe(Parser.map(([s, p, o]) => Term.triple<any, any, any>(s, p, o)));\n\n const reifier: P<Ast.TermPattern> = Parser.preceded(\n tok('~'),\n Parser.alt(\n patternVariable,\n iri,\n blankNodeLabel,\n Parser.preceded(Parser.seq(anon, anyToken, anyToken), freshPatternBlankNode),\n freshPatternBlankNode,\n ),\n );\n\n const reifiedTriple: P<Node> = Parser.suspend(() => reifiedTripleDef);\n\n const reifiedTripleComponent: P<Node> = Parser.alt(\n reifiedTriple,\n Parser.suspend(() => tripleTerm).pipe(Parser.map((t) => node(t))),\n Parser.preceded(\n Parser.peek(Parser.alt(tok('('), Parser.preceded(Parser.not(anon), tok('[')))),\n unexpectedHere<Node>(),\n ),\n varOrTerm(false).pipe(Parser.map((t) => node(t))),\n );\n\n const reifiedTripleDef: P<Node> = Parser.preceded(\n tok('<<'),\n Parser.seq(\n reifiedTripleComponent,\n patternPredicate,\n reifiedTripleComponent,\n Parser.alt(reifier, freshPatternBlankNode),\n expect('>>'),\n ),\n ).pipe(\n Parser.map(([s, p, o, r]) =>\n node(r, [\n ...s.triples,\n ...o.triples,\n Ast.triplePattern(r, rdfReifies, Term.triple<any, any, any>(s.term, p, o.term)),\n ]),\n ),\n );\n\n const triplesNode: P<Node> = Parser.alt(\n Parser.preceded(\n tok('['),\n Parser.seq(freshPatternBlankNode, Parser.terminated(propertyList, expect(']'))),\n ).pipe(Parser.map(([b, pl]) => node(b, build(b, pl)))),\n Parser.preceded(\n tok('('),\n Parser.seq(\n Parser.terminated(\n Parser.repeat(Parser.preceded(Parser.not(tok(')')), graphNode)),\n anyToken,\n ),\n hook((t) => t),\n ),\n ).pipe(\n Parser.map(([items, t]) => {\n if (!Arr.isArrayNonEmpty(items)) return node(rdfNil);\n if (!ctx.tc.blankNodes) fail('Blank nodes are not allowed here', offsetOf(t));\n // Each item with the blank node of its list cell.\n const cells = Arr.map(items, (item) => [ctx.freshBlankNode(), item] as const);\n const triples: Triples = [];\n items.forEach((item) => item.triples.forEach((x) => triples.push(x)));\n cells.forEach(([cell, item], i) => {\n triples.push(Ast.triplePattern(cell, rdfFirst, item.term));\n triples.push(Ast.triplePattern(cell, rdfRest, cells[i + 1]?.[0] ?? rdfNil));\n });\n return node(cells[0][0], triples);\n }),\n ),\n );\n\n /** GraphNode / GraphNodePath */\n const graphNodeDef: P<Node> = Parser.alt(\n reifiedTriple,\n Parser.preceded(\n Parser.alt(\n Parser.seq(Parser.not(nil), Parser.peek(tok('('))),\n Parser.seq(Parser.not(anon), Parser.peek(tok('['))),\n ),\n triplesNode,\n ),\n varOrTerm(true).pipe(Parser.map((t) => node(t))),\n );\n\n const startsVerb: P<unknown> = Parser.peek(\n take('a verb', (t) =>\n t.type === 'VAR' ||\n isIri(t) ||\n t.kind === 'a' ||\n (paths && (t.kind === '^' || t.kind === '!' || t.kind === '('))\n ? taken\n : notTaken,\n ),\n );\n\n /** A verb; whether it is simple is pushed on `ctx.verbs` until its objects are read. */\n const verb: P<Verb> = Parser.alt(\n Parser.seq(\n patternVariable,\n paths\n ? Parser.preceded(Parser.peek(Parser.alt(tok('/'), tok('|'))), unexpectedHere<void>()).pipe(\n Parser.opt,\n )\n : Parser.succeed(undefined),\n ).pipe(Parser.map(([v]): Verb => ({ predicate: v, simple: true }))),\n paths\n ? path.pipe(\n Parser.map((p): Verb =>\n Predicate.isTagged(p, 'PathLink')\n ? { predicate: p.iri, simple: true }\n : { predicate: p, simple: false },\n ),\n )\n : aOrIri.pipe(Parser.map((predicate): Verb => ({ predicate, simple: true }))),\n ).pipe(\n Parser.map((v) => {\n ctx.verbs.push(v.simple);\n return v;\n }),\n );\n\n const annotationBlock: P<PropertyList> = Parser.terminated(propertyList, expect('|}'));\n\n // `~ r` names a reifier and `{| … |}` annotates it (a fresh one if none was named).\n const annotationItem: P<Annotation> = Parser.alt(\n Parser.seq(reifier, Parser.opt(Parser.preceded(tok('{|'), annotationBlock))).pipe(\n Parser.map(([r, block]): Annotation => ({ reifier: r, block })),\n ),\n Parser.preceded(tok('{|'), Parser.seq(freshPatternBlankNode, annotationBlock)).pipe(\n Parser.map(([r, block]): Annotation => ({ reifier: r, block: Option.some(block) })),\n ),\n );\n\n const annotation: P<ReadonlyArray<Annotation>> = Parser.alt(\n Parser.preceded(\n Parser.seq(\n Parser.peek(Parser.alt(tok('~'), tok('{|'))),\n hook((t) => {\n if (!ctx.verbs[ctx.verbs.length - 1]) {\n fail('Reifiers and annotations require a simple predicate', offsetOf(t));\n }\n }),\n ),\n Parser.repeat(annotationItem, { min: 1 }),\n ),\n Parser.succeed([]),\n );\n\n const objectList: P<ReadonlyArray<Obj>> = Parser.separated(\n Parser.seq(graphNode, annotation).pipe(\n Parser.map(([n, a]): Obj => ({ node: n, annotation: a })),\n ),\n tok(','),\n { min: 1 },\n );\n\n const verbObjects: P<readonly [Verb, ReadonlyArray<Obj>]> = Parser.seq(\n verb,\n Parser.terminated(\n objectList,\n hook(() => {\n ctx.verbs.pop();\n }),\n ),\n );\n\n const propertyListDef: P<PropertyList> = Parser.seq(\n verbObjects,\n Parser.repeat(\n Parser.preceded(\n Parser.repeat(tok(';'), { min: 1 }),\n Parser.preceded(startsVerb, verbObjects),\n ),\n ),\n Parser.opt(Parser.repeat(tok(';'), { min: 1 })),\n ).pipe(Parser.map(([first, rest]) => [first, ...rest]));\n\n const withProperties = (subject: P<Node>): P<Triples> =>\n Parser.seq(subject, Parser.opt(Parser.preceded(startsVerb, propertyList))).pipe(\n Parser.map(([s, pl]) =>\n Option.isSome(pl) ? build(s.term, pl.value, [...s.triples]) : s.triples,\n ),\n );\n\n const triplesSameSubject: P<Triples> = Parser.alt(\n withProperties(reifiedTriple),\n Parser.preceded(\n Parser.alt(\n Parser.seq(Parser.not(nil), Parser.peek(tok('('))),\n Parser.seq(Parser.not(anon), Parser.peek(tok('['))),\n ),\n withProperties(triplesNode),\n ),\n Parser.seq(\n hook((t) => {\n ctx.subjectStart = t;\n }),\n varOrTerm(true),\n Parser.alt(\n Parser.preceded(startsVerb, propertyList),\n hook((t): PropertyList =>\n unexpectedAt(t, `a predicate after ${describe(ctx.subjectStart)}`),\n ),\n ),\n ).pipe(Parser.map(([, subject, pl]) => build(subject, pl))),\n );\n\n /** TriplesBlock: the triples, and whether it ended with a '.' */\n const triplesBlock: P<readonly [Triples, boolean]> = Parser.seq(\n triplesSameSubject,\n Parser.repeat(Parser.preceded(Parser.seq(tok('.'), startsTriples), triplesSameSubject)),\n eat('.'),\n ).pipe(Parser.map(([first, rest, dot]) => [[...first, ...rest.flat()], dot] as const));\n\n /** TriplesTemplate / ConstructTriples (no paths); stops before `}`. */\n const triplesTemplate: P<Triples> = Parser.opt(\n Parser.preceded(\n Parser.seq(Parser.not(tok('}')), startsTriples),\n Parser.seq(\n triplesSameSubject,\n Parser.repeat(\n Parser.preceded(\n Parser.seq(tok('.'), Parser.not(tok('}')), startsTriples),\n triplesSameSubject,\n ),\n ),\n eat('.'),\n ),\n ),\n ).pipe(Parser.map((o) => (Option.isNone(o) ? [] : [...o.value[0], ...o.value[1].flat()])));\n\n return { triplesSameSubject, triplesBlock, triplesTemplate };\n};\n\n// -----------------------------------------------------------------------------\n// Property paths\n// -----------------------------------------------------------------------------\n\nconst negatedOne: P<readonly [boolean, Term.NamedNode]> = Parser.seq(eat('^'), aOrIri);\n\nconst negated: P<Ast.Path> = Parser.alt(\n Parser.preceded(\n tok('('),\n Parser.terminated(Parser.opt(Parser.separated(negatedOne, tok('|'), { min: 1 })), expect(')')),\n ).pipe(Parser.map((o) => Option.getOrElse(o, () => []))),\n negatedOne.pipe(Parser.map((one) => [one])),\n).pipe(\n Parser.map((ones) =>\n Ast.negated(\n ones.filter(([inv]) => !inv).map(([, i]) => i),\n ones.filter(([inv]) => inv).map(([, i]) => i),\n ),\n ),\n);\n\nconst pathPrimary: P<Ast.Path> = Parser.alt(\n tok('a').pipe(Parser.as(Ast.link(rdfType))),\n iri.pipe(Parser.map((i) => Ast.link(i))),\n Parser.preceded(tok('!'), negated),\n Parser.delimited(tok('('), path, expect(')')),\n unexpectedHere<Ast.Path>('a property path'),\n);\n\nconst pathElt: P<Ast.Path> = Parser.seq(\n pathPrimary,\n Parser.opt(Parser.alt(tok('?'), tok('*'), tok('+'))),\n).pipe(\n Parser.map(([primary, mod]) =>\n Option.isNone(mod)\n ? primary\n : mod.value.kind === '?'\n ? Ast.zeroOrOne(primary)\n : mod.value.kind === '*'\n ? Ast.zeroOrMore(primary)\n : Ast.oneOrMore(primary),\n ),\n);\n\nconst pathEltOrInverse: P<Ast.Path> = Parser.alt(\n Parser.preceded(tok('^'), pathElt).pipe(Parser.map((p) => Ast.inverse(p))),\n pathElt,\n);\n\nconst pathSequence: P<Ast.Path> = Parser.separated(pathEltOrInverse, tok('/'), { min: 1 }).pipe(\n Parser.map((ps) => (ps.length === 1 ? ps[0] : Ast.sequence(...ps))),\n);\n\nconst pathDef: P<Ast.Path> = Parser.separated(pathSequence, tok('|'), { min: 1 }).pipe(\n Parser.map((ps) => (ps.length === 1 ? ps[0] : Ast.alternative(...ps))),\n);\n\n// -----------------------------------------------------------------------------\n// Expressions\n// -----------------------------------------------------------------------------\n\nconst expression: P<Ast.Expression> = Parser.suspend(() => expressionDef);\nconst groupGraphPattern: P<Ast.GroupPattern> = Parser.suspend(() => groupGraphPatternDef);\n\nconst AGGREGATES: ReadonlyArray<Ast.AggregateName> = [\n 'COUNT',\n 'SUM',\n 'MIN',\n 'MAX',\n 'AVG',\n 'SAMPLE',\n 'GROUP_CONCAT',\n];\nconst AGGREGATE_KINDS = kindSet(AGGREGATES);\n\nconst isBuiltInStart = (t: Tok): boolean =>\n t.type === 'WORD' &&\n (Ast.isBuiltInName(t.kind) ||\n AGGREGATE_KINDS.has(t.kind) ||\n t.kind === 'EXISTS' ||\n t.kind === 'NOT');\n\nconst startsBuiltIn: P<unknown> = Parser.peek(\n take('a function', (t) => (isBuiltInStart(t) ? taken : notTaken)),\n);\n\nconst brackettedExpression: P<Ast.Expression> = Parser.delimited(\n expect('('),\n expression,\n expect(')'),\n);\n\nconst expressionList: P<Array<Ast.Expression>> = Parser.preceded(\n expect('('),\n Parser.alt(\n tok(')').pipe(Parser.as([])),\n Parser.terminated(Parser.separated(expression, tok(','), { min: 1 }), expect(')')),\n ),\n);\n\n/** The arguments of a function call, and whether they are DISTINCT. */\nconst functionArgs: P<readonly [ReadonlyArray<Ast.Expression>, boolean]> = Parser.alt(\n Parser.preceded(Parser.seq(nil, anyToken, anyToken), Parser.succeed([[], false] as const)),\n Parser.preceded(\n expect('('),\n Parser.seq(\n Parser.opt(\n take('DISTINCT', (t) => {\n if (t.kind !== 'DISTINCT') return notTaken;\n if (!ctx.aggregatesAllowed || ctx.inAggregate) {\n fail('DISTINCT is only allowed in aggregate function calls', t.start);\n }\n return taken;\n }),\n ),\n Parser.separated(expression, tok(','), { min: 1 }),\n expect(')'),\n ),\n ).pipe(Parser.map(([distinct, args]) => [args, Option.isSome(distinct)] as const)),\n);\n\nconst groupGraphPatternInExpression: P<Ast.GroupPattern> = withFlags(\n false,\n Option.some(false),\n groupGraphPattern,\n);\n\n/** An aggregate, from its name. */\nconst aggregate = (name: Ast.AggregateName): P<Ast.Expression> =>\n Parser.preceded(\n hook((t) => {\n if (!ctx.aggregatesAllowed) fail(`Aggregate ${name} is not allowed here`, offsetOf(t));\n if (ctx.inAggregate) fail('Aggregates cannot be nested', offsetOf(t));\n }),\n Parser.seq(\n Parser.preceded(Parser.seq(anyToken, expect('(')), eat('DISTINCT')),\n Parser.preceded(\n hook(() => {\n ctx.inAggregate = true;\n }),\n Parser.alt(\n ...(name === 'COUNT'\n ? [Parser.preceded(tok('*'), expect(')')).pipe(Parser.as<'*'>('*'))]\n : []),\n Parser.seq(\n expression,\n name === 'GROUP_CONCAT'\n ? Parser.opt(\n Parser.preceded(\n Parser.seq(tok(';'), expect('SEPARATOR'), expect('=')),\n Parser.alt(string, unexpectedHere<Tok>('a string')),\n ),\n )\n : Parser.succeed(Option.none<Tok>()),\n expect(')'),\n ),\n ),\n ),\n hook(() => {\n ctx.inAggregate = false;\n }),\n ),\n ).pipe(\n Parser.map(([distinct, body]) => {\n if (body === '*') return Ast.aggregate('COUNT', '*', { distinct });\n const [e, sep] = body;\n return Option.isSome(sep)\n ? Ast.aggregate(name, e, { distinct, separator: sep.value.value })\n : Ast.aggregate(name, e, { distinct });\n }),\n );\n\nconst BUILT_INS = Record.keys(Ast.builtInArity);\n\n/** The built-in a token names (`peekKind(BUILT_INS)` lets only those through). */\nconst builtInName = (t: Tok): Ast.BuiltInName =>\n Ast.isBuiltInName(t.kind) ? t.kind : unexpected(t, 'a function');\n\nconst builtInCall: P<Ast.Expression> = Parser.alt(\n // Built-ins with arguments: the arity is checked against the name.\n Parser.preceded(\n peekKind(BUILT_INS.filter((n) => n !== 'BOUND' && Ast.builtInArity[n][1] > 0)),\n Parser.seq(anyToken, expressionList),\n ).pipe(\n Parser.map(([t, args]) => {\n const name = builtInName(t);\n const [min, max] = Ast.builtInArity[name];\n return args.length < min || args.length > max\n ? fail(`${name} expects ${min === max ? min : `${min} to ${max}`} arguments`, t.start)\n : Ast.operation(name, ...args);\n }),\n ),\n Parser.preceded(\n peekKind(BUILT_INS.filter((n) => Ast.builtInArity[n][1] === 0)),\n Parser.seq(\n anyToken,\n Parser.alt(Parser.seq(nil, anyToken, anyToken), unexpectedHere<void>(\"'()'\")),\n ),\n ).pipe(Parser.map(([t]) => Ast.operation(builtInName(t)))),\n Parser.preceded(\n Parser.seq(tok('BOUND'), expect('(')),\n Parser.terminated(variableOrError, expect(')')),\n ).pipe(Parser.map((v) => Ast.operation('BOUND', v))),\n Parser.preceded(tok('EXISTS'), groupGraphPatternInExpression).pipe(\n Parser.map((g) => Ast.exists(g, false)),\n ),\n Parser.preceded(Parser.seq(tok('NOT'), expect('EXISTS')), groupGraphPatternInExpression).pipe(\n Parser.map((g) => Ast.exists(g, true)),\n ),\n ...AGGREGATES.map((name) => Parser.preceded(peekKind([name]), aggregate(name))),\n);\n\nconst exprTripleTerm: P<Ast.Expression> = Parser.preceded(\n tok('<<('),\n Parser.seq(\n Parser.alt(variable, iriOrError),\n Parser.alt(tok('a').pipe(Parser.as(rdfType)), variable, iriOrError),\n Parser.alt(\n Parser.suspend(() => exprTripleTerm),\n variable,\n dataTerm,\n ),\n expect(')>>'),\n ),\n).pipe(Parser.map(([s, p, o]) => Term.triple<any, any, any>(s, p, o)));\n\nconst primary: P<Ast.Expression> = Parser.alt(\n variable,\n Parser.seq(iri, Parser.opt(Parser.preceded(Parser.peek(tok('(')), functionArgs))).pipe(\n Parser.map(([i, args]): Ast.Expression =>\n Option.isSome(args) ? Ast.functionCall(i, args.value[0], args.value[1]) : i,\n ),\n ),\n rdfLiteral,\n numericLiteral,\n booleanLiteral,\n Parser.preceded(startsBuiltIn, builtInCall),\n Parser.preceded(Parser.peek(tok('(')), brackettedExpression),\n exprTripleTerm,\n unexpectedHere<Ast.Expression>('an expression'),\n);\n\nconst unary: P<Ast.Expression> = Parser.alt(\n Parser.preceded(\n tok('!'),\n Parser.suspend(() => unary),\n ).pipe(Parser.map((e) => Ast.operation('!', e))),\n signedNumber,\n Parser.seq(Parser.alt(tok('+'), tok('-')), primary).pipe(\n Parser.map(([op, e]) => Ast.operation(op.kind === '+' ? 'UPLUS' : 'UMINUS', e)),\n ),\n primary,\n);\n\n/** Matches the token of an operator, typed as that operator. */\nconst operator = <O extends Ast.Operator>(o: O): P<O> => tok(o).pipe(Parser.map(() => o));\n\nconst leftAssoc = (\n operand: P<Ast.Expression>,\n ops: ReadonlyArray<Ast.Operator>,\n): P<Ast.Expression> =>\n Parser.seq(operand, Parser.repeat(Parser.seq(Parser.alt(...ops.map(operator)), operand))).pipe(\n Parser.map(([first, rest]) =>\n rest.reduce((left, [op, right]) => Ast.operation(op, left, right), first),\n ),\n );\n\nconst multiplicative = leftAssoc(unary, ['*', '/']);\nconst additive = leftAssoc(multiplicative, ['+', '-']);\n\nconst relational: P<Ast.Expression> = Parser.seq(\n additive,\n Parser.opt(\n Parser.alt(\n Parser.seq(\n Parser.alt(...(['=', '!=', '<', '>', '<=', '>='] as const).map(operator)),\n additive,\n ).pipe(\n Parser.map(\n ([op, right]) =>\n (left: Ast.Expression) =>\n Ast.operation(op, left, right),\n ),\n ),\n Parser.preceded(tok('IN'), expressionList).pipe(\n Parser.map((list) => (left: Ast.Expression) => Ast.operation('IN', left, ...list)),\n ),\n Parser.preceded(Parser.seq(tok('NOT'), tok('IN')), expressionList).pipe(\n Parser.map((list) => (left: Ast.Expression) => Ast.operation('NOT IN', left, ...list)),\n ),\n ),\n ),\n).pipe(Parser.map(([left, rest]) => (Option.isSome(rest) ? rest.value(left) : left)));\n\nconst conditionalAnd = leftAssoc(relational, ['&&']);\nconst expressionDef = leftAssoc(conditionalAnd, ['||']);\n\nconst constraint: P<Ast.Expression> = Parser.alt(\n Parser.preceded(Parser.peek(tok('(')), brackettedExpression),\n Parser.preceded(startsBuiltIn, builtInCall),\n Parser.seq(\n iri,\n Parser.alt(\n Parser.preceded(Parser.peek(tok('(')), functionArgs),\n unexpectedHere<readonly [ReadonlyArray<Ast.Expression>, boolean]>(\"'('\"),\n ),\n ).pipe(Parser.map(([i, [args, distinct]]) => Ast.functionCall(i, args, distinct))),\n unexpectedHere<Ast.Expression>('a constraint'),\n);\n\n/** Whether a constraint (`(`, a built-in, an IRI) starts here. */\nconst startsConstraint: P<unknown> = Parser.peek(\n take('a constraint', (t) => (t.kind === '(' || isBuiltInStart(t) || isIri(t) ? taken : notTaken)),\n);\n\n// -----------------------------------------------------------------------------\n// Graph patterns\n// -----------------------------------------------------------------------------\n\nconst patternTriples = triplesGrammar(true);\nconst templateTriples = triplesGrammar(false);\n\nconst varOrIri: P<Ast.VarOrIri> = Parser.alt(variable, iriOrError);\n\nconst GPNT = kindSet(['OPTIONAL', 'MINUS', 'GRAPH', 'SERVICE', 'FILTER', 'BIND', 'VALUES']);\n\nconst graphPatternNotTriples: P<Ast.Pattern> = select<Ast.Pattern>([\n [\n ['{'],\n Parser.seq(\n groupGraphPattern,\n Parser.repeat(Parser.preceded(tok('UNION'), groupGraphPattern)),\n ).pipe(\n Parser.map(([first, rest]) =>\n Arr.isReadonlyArrayEmpty(rest) ? first : Ast.union([first, ...rest]),\n ),\n ),\n ],\n [\n ['OPTIONAL'],\n Parser.preceded(anyToken, groupGraphPattern).pipe(Parser.map((g) => Ast.optional(g))),\n ],\n [['MINUS'], Parser.preceded(anyToken, groupGraphPattern).pipe(Parser.map((g) => Ast.minus(g)))],\n [\n ['GRAPH'],\n Parser.preceded(anyToken, Parser.seq(varOrIri, groupGraphPattern)).pipe(\n Parser.map(([name, g]) => Ast.graph(name, g)),\n ),\n ],\n [\n ['SERVICE'],\n Parser.preceded(anyToken, Parser.seq(eat('SILENT'), varOrIri, groupGraphPattern)).pipe(\n Parser.map(([silent, name, g]) => Ast.service(name, g, silent)),\n ),\n ],\n [['FILTER'], Parser.preceded(anyToken, constraint).pipe(Parser.map((e) => Ast.filter(e)))],\n [\n ['BIND'],\n Parser.preceded(\n Parser.seq(anyToken, expect('(')),\n Parser.seq(expression, Parser.preceded(expect('AS'), variableOrError), expect(')')),\n ).pipe(Parser.map(([e, v]) => Ast.bind(e, v))),\n ],\n [['VALUES'], Parser.preceded(anyToken, dataBlock)],\n]);\n\nconst startsGPNT: P<unknown> = Parser.peek(\n take('a graph pattern', (t) =>\n t.kind === '{' || (t.type === 'WORD' && GPNT.has(t.kind)) ? taken : notTaken,\n ),\n);\n\ntype GroupItem =\n | { readonly _tag: 'Pattern'; readonly pattern: Ast.Pattern; readonly at: number }\n | { readonly _tag: 'Triples'; readonly triples: Triples };\n\nconst gpntItem: P<GroupItem> = Parser.preceded(\n startsGPNT,\n Parser.seq(\n hook((t) => offsetOf(t)),\n graphPatternNotTriples,\n eat('.'),\n ),\n).pipe(\n Parser.map(([at, pattern]): GroupItem => {\n // After anything but a FILTER, the following triples are in a new BGP scope.\n if (!Predicate.isTagged(pattern, 'Filter')) {\n ctx.triples[ctx.triples.length - 1] = ctx.patternContext();\n }\n return { _tag: 'Pattern', pattern, at };\n }),\n);\n\nconst isGPNTStart = (t: Tok): boolean =>\n t.type !== 'ERROR' && (t.kind === '{' || (t.type === 'WORD' && GPNT.has(t.kind)));\n\n/** A triples block; one not ended by `.` must be followed by a pattern or `}`. */\nconst triplesItem: P<GroupItem> = Parser.preceded(\n startsTriples,\n Parser.seq(\n patternTriples.triplesBlock,\n hook((t) => t),\n ),\n).pipe(\n Parser.map(([[triples, dot], t]): GroupItem => {\n if (!dot && t.kind !== '}' && !isGPNTStart(t)) unexpectedAt(t, \"'.' or '}'\");\n return { _tag: 'Triples', triples };\n }),\n);\n\n/** The elements of a group, up to its `}` (not consumed). */\nconst groupItems: P<Array<GroupItem>> = Parser.repeat(\n Parser.preceded(\n Parser.not(tok('}')),\n Parser.alt(gpntItem, triplesItem, unexpectedHere<GroupItem>()),\n ),\n);\n\n/**\n * Adds a group item to the patterns read so far; the failure if it is a\n * `BIND` of a variable already in scope.\n */\nconst addGroupItem = (patterns: Array<Ast.Pattern>, item: GroupItem): Option.Option<Failure> => {\n if (Predicate.isTagged(item, 'Triples')) {\n const last = patterns[patterns.length - 1];\n if (Predicate.isTagged(last, 'Bgp')) {\n patterns[patterns.length - 1] = Ast.bgp([...last.triples, ...item.triples]);\n } else patterns.push(Ast.bgp(item.triples));\n return Option.none();\n }\n const p = item.pattern;\n if (Predicate.isTagged(p, 'Bind')) {\n const name = p.variable.value;\n if (patterns.some((q) => Ast.inScopeVariables(q).includes(name))) {\n return Option.some(new Failure(`BIND variable ?${name} is already in scope`, item.at));\n }\n }\n patterns.push(p);\n return Option.none();\n};\n\nconst assembleGroup = (\n items: ReadonlyArray<GroupItem>,\n): Result.Result<Ast.GroupPattern, Failure> => {\n const patterns: Array<Ast.Pattern> = [];\n return Option.match(\n Arr.findFirst(items, (item) => addGroupItem(patterns, item)),\n { onNone: () => Result.succeed(Ast.group(patterns)), onSome: Result.fail },\n );\n};\n\nconst subSelect: P<Ast.GroupPattern> = Parser.suspend(() => subSelectDef);\n\nconst groupGraphPatternDef: P<Ast.GroupPattern> = Parser.preceded(\n expect('{'),\n Parser.alt(\n Parser.preceded(Parser.peek(tok('SELECT')), subSelect),\n inContext(() => ctx.patternContext(), Parser.terminated(groupItems, expect('}'))).pipe(\n Parser.tryMap(assembleGroup),\n Parser.cut,\n ),\n ),\n);\n\n// -----------------------------------------------------------------------------\n// Queries\n// -----------------------------------------------------------------------------\n\ninterface Prologue {\n readonly value: () => Ast.Prologue;\n}\n\nlet prologue: Prologue = { value: () => ({ prefixes: {} }) };\n\n/** Skips the prologue (names are resolved by the lexer), recording `VERSION`. */\nconst prologueDecls: P<void> = Parser.asVoid(\n Parser.repeat(\n select<unknown>([\n [\n ['BASE'],\n Parser.preceded(\n anyToken,\n Parser.alt(\n take('an IRI', (t) => (t.type === 'IRI' ? Option.some(t) : notTaken)),\n unexpectedHere('an IRI'),\n ),\n ),\n ],\n [\n ['PREFIX'],\n Parser.preceded(\n anyToken,\n Parser.seq(\n Parser.alt(\n take('a prefix name', (t) =>\n t.type === 'PNAME' && t.value === '' ? Option.some(t) : notTaken,\n ),\n unexpectedHere('a prefix name'),\n ),\n Parser.alt(\n take('an IRI', (t) => (t.type === 'IRI' ? Option.some(t) : notTaken)),\n unexpectedHere('an IRI'),\n ),\n ),\n ),\n ],\n [\n ['VERSION'],\n Parser.preceded(\n anyToken,\n Parser.alt(\n take('a version string', (t) => {\n if (t.type !== 'STRING' || t.extra === 'long') return notTaken;\n ctx.version = Option.some(t.value);\n return Option.some(t);\n }),\n unexpectedHere('a version string'),\n ),\n ),\n ],\n ]),\n ),\n);\n\ntype Modifiers = Pick<Ast.QueryBase, 'groupBy' | 'having' | 'orderBy' | 'limit' | 'offset'>;\n\n/** `query` with its dataset clause; an absent clause leaves the member absent. */\nconst withDataset = <Q extends Ast.QueryBase>(\n query: Q,\n dataset: Option.Option<Ast.DatasetClause>,\n): Q => (Option.isNone(dataset) ? query : { ...query, dataset: dataset.value });\n\nconst withAggregates = <A>(p: P<A>): P<A> => withFlags(true, Option.none(), p);\n\nconst groupCondition: P<Ast.GroupCondition> = Parser.alt(\n variable.pipe(Parser.map((v): Ast.GroupCondition => ({ expression: v }))),\n Parser.preceded(\n tok('('),\n Parser.seq(expression, Parser.opt(Parser.preceded(tok('AS'), variableOrError)), expect(')')),\n ).pipe(\n Parser.map(([e, v]): Ast.GroupCondition =>\n Option.isSome(v) ? { expression: e, variable: v.value } : { expression: e },\n ),\n ),\n Parser.preceded(\n Parser.peek(take('a constraint', (t) => (isBuiltInStart(t) || isIri(t) ? taken : notTaken))),\n constraint,\n ).pipe(Parser.map((e): Ast.GroupCondition => ({ expression: e }))),\n);\n\nconst orderCondition: P<Ast.OrderCondition> = Parser.alt(\n Parser.seq(\n Parser.alt(tok('ASC'), tok('DESC')),\n Parser.alt(\n Parser.preceded(Parser.peek(tok('(')), brackettedExpression),\n unexpectedHere<Ast.Expression>(\"'('\"),\n ),\n ).pipe(\n Parser.map(([d, e]): Ast.OrderCondition => ({\n expression: e,\n descending: d.kind === 'DESC',\n })),\n ),\n variable.pipe(Parser.map((v): Ast.OrderCondition => ({ expression: v, descending: false }))),\n Parser.preceded(startsConstraint, constraint).pipe(\n Parser.map((e): Ast.OrderCondition => ({ expression: e, descending: false })),\n ),\n);\n\nconst atLeastOne = <A>(p: P<A>, label: string): P<Array<A>> =>\n Parser.seq(\n Parser.repeat(p),\n hook((t) => t),\n ).pipe(\n Parser.tryMap(([items, t]) =>\n Arr.isReadonlyArrayEmpty(items)\n ? Result.fail(\n new Failure(\n t.type === 'ERROR' ? t.value : `Unexpected ${describe(t)}, expected ${label}`,\n offsetOf(t),\n ),\n )\n : Result.succeed(items),\n ),\n Parser.cut,\n );\n\nconst integer: P<number> = Parser.alt(\n take('an integer', (t) => (t.type === 'INTEGER' ? Option.some(Number(t.value)) : notTaken)),\n unexpectedHere<number>('an integer'),\n);\n\nconst solutionModifiers: P<Modifiers> = Parser.seq(\n Parser.opt(\n Parser.preceded(\n Parser.seq(tok('GROUP'), expect('BY')),\n atLeastOne(groupCondition, 'a grouping condition'),\n ),\n ),\n Parser.opt(\n Parser.preceded(\n tok('HAVING'),\n Parser.seq(\n withAggregates(Parser.repeat(Parser.preceded(startsConstraint, constraint))),\n hook((t) => t),\n ),\n ).pipe(\n Parser.map(([having, t]) =>\n Arr.isReadonlyArrayNonEmpty(having) ? having : unexpectedAt(t, 'a HAVING condition'),\n ),\n ),\n ),\n Parser.opt(\n Parser.preceded(\n Parser.seq(tok('ORDER'), expect('BY')),\n Parser.seq(\n withAggregates(Parser.repeat(orderCondition)),\n hook((t) => t),\n ),\n ).pipe(\n Parser.map(([orderBy, t]) =>\n Arr.isReadonlyArrayNonEmpty(orderBy) ? orderBy : unexpectedAt(t, 'an ORDER BY condition'),\n ),\n ),\n ),\n Parser.alt(\n Parser.seq(\n Parser.preceded(tok('LIMIT'), integer).pipe(Parser.map(Option.some)),\n Parser.opt(Parser.preceded(tok('OFFSET'), integer)),\n ),\n Parser.seq(\n Parser.preceded(tok('OFFSET'), integer).pipe(Parser.map(Option.some)),\n Parser.opt(Parser.preceded(tok('LIMIT'), integer)),\n ).pipe(Parser.map(([offset, limit]) => [limit, offset] as const)),\n Parser.succeed([Option.none<number>(), Option.none<number>()] as const),\n ),\n).pipe(\n Parser.map(([groupBy, having, orderBy, [limit, offset]]): Modifiers => {\n const modifiers: Modifiers = {\n groupBy: Option.getOrElse(groupBy, () => []),\n having: Option.getOrElse(having, () => []),\n orderBy: Option.getOrElse(orderBy, () => []),\n };\n const limited = Option.isNone(limit) ? modifiers : { ...modifiers, limit: limit.value };\n return Option.isNone(offset) ? limited : { ...limited, offset: offset.value };\n }),\n);\n\nconst datasetClauses: P<Option.Option<Ast.DatasetClause>> = Parser.repeat(\n Parser.preceded(tok('FROM'), Parser.seq(eat('NAMED'), iriOrError)),\n).pipe(\n Parser.map((clauses) =>\n Arr.isReadonlyArrayEmpty(clauses)\n ? Option.none()\n : Option.some({\n default: clauses.filter(([named]) => !named).map(([, i]) => i),\n named: clauses.filter(([named]) => named).map(([, i]) => i),\n }),\n ),\n);\n\nconst valuesClause: P<Option.Option<Ast.ValuesPattern>> = Parser.opt(\n Parser.preceded(tok('VALUES'), dataBlock),\n);\n\nconst projectionItem: P<Term.Variable | Ast.Projection> = Parser.alt(\n variable,\n Parser.preceded(\n tok('('),\n Parser.seq(\n withAggregates(expression),\n Parser.preceded(expect('AS'), variableOrError),\n expect(')'),\n ),\n ).pipe(\n Parser.map(([e, v]): Ast.Projection => ({\n _tag: 'Projection',\n expression: e,\n variable: v,\n })),\n ),\n);\n\nconst selectQuery = (sub: boolean): P<Ast.SelectQuery> =>\n Parser.preceded(\n expect('SELECT'),\n Parser.seq(\n Parser.alt(\n tok('DISTINCT').pipe(Parser.as([true, false] as const)),\n tok('REDUCED').pipe(Parser.as([false, true] as const)),\n Parser.succeed([false, false] as const),\n ),\n Parser.alt(\n tok('*').pipe(Parser.as<'*'>('*')),\n atLeastOne(projectionItem, 'a variable, expression or *'),\n ),\n sub ? Parser.succeed(Option.none<Ast.DatasetClause>()) : datasetClauses,\n Parser.preceded(eat('WHERE'), groupGraphPattern),\n solutionModifiers,\n ),\n ).pipe(\n Parser.map(([[distinct, reduced], projection, dataset, where, modifiers]): Ast.SelectQuery =>\n withDataset(\n {\n _tag: 'Select',\n prologue: prologue.value(),\n distinct,\n reduced,\n projection,\n where,\n ...modifiers,\n },\n dataset,\n ),\n ),\n );\n\n// `templateTriples` parses no property paths, so a template's items are all triple patterns.\nconst constructTemplate: P<Array<Ast.TriplePattern>> = Parser.delimited(\n tok('{'),\n Parser.cut(\n inContext(\n () => ({\n variables: true,\n blankNodes: true,\n scope: ++ctx.scopeCounter,\n labels: ctx.templateLabels,\n }),\n templateTriples.triplesTemplate,\n ),\n ),\n expect('}'),\n).pipe(Parser.map((t) => t.filter(isTriplePattern)));\n\nconst constructQuery: P<Ast.ConstructQuery> = Parser.preceded(\n tok('CONSTRUCT'),\n Parser.alt(\n Parser.seq(\n constructTemplate,\n datasetClauses,\n Parser.preceded(eat('WHERE'), groupGraphPattern),\n solutionModifiers,\n ).pipe(\n Parser.map(([template, dataset, where, modifiers]): Ast.ConstructQuery =>\n withDataset(\n { _tag: 'Construct', prologue: prologue.value(), template, where, ...modifiers },\n dataset,\n ),\n ),\n ),\n Parser.seq(\n datasetClauses,\n Parser.delimited(\n Parser.seq(expect('WHERE'), expect('{')),\n inContext(() => ctx.patternContext(), templateTriples.triplesTemplate),\n expect('}'),\n ),\n solutionModifiers,\n ).pipe(\n Parser.map(([dataset, triples, modifiers]): Ast.ConstructQuery => {\n // `templateTriples` parses no property paths, so the short-form template's items are all\n // triple patterns.\n const template = triples.filter(isTriplePattern);\n return withDataset(\n {\n _tag: 'Construct',\n prologue: prologue.value(),\n template,\n where: Ast.group(Arr.isReadonlyArrayNonEmpty(template) ? [Ast.bgp(template)] : []),\n short: true,\n ...modifiers,\n },\n dataset,\n );\n }),\n ),\n ),\n);\n\nconst describeQuery: P<Ast.DescribeQuery> = Parser.preceded(\n tok('DESCRIBE'),\n Parser.seq(\n Parser.alt(\n tok('*').pipe(Parser.as<'*'>('*')),\n atLeastOne(Parser.alt(variable, iri), 'a variable, IRI or *'),\n ),\n datasetClauses,\n Parser.alt(\n Parser.preceded(\n Parser.peek(Parser.alt(tok('WHERE'), tok('{'))),\n Parser.preceded(eat('WHERE'), groupGraphPattern),\n ),\n Parser.succeed(Ast.group([])),\n ),\n solutionModifiers,\n ),\n).pipe(\n Parser.map(([terms, dataset, where, modifiers]): Ast.DescribeQuery =>\n withDataset(\n { _tag: 'Describe', prologue: prologue.value(), terms, where, ...modifiers },\n dataset,\n ),\n ),\n);\n\nconst askQuery: P<Ast.AskQuery> = Parser.preceded(\n tok('ASK'),\n Parser.seq(datasetClauses, Parser.preceded(eat('WHERE'), groupGraphPattern), solutionModifiers),\n).pipe(\n Parser.map(([dataset, where, modifiers]): Ast.AskQuery =>\n withDataset({ _tag: 'Ask', prologue: prologue.value(), where, ...modifiers }, dataset),\n ),\n);\n\nconst subSelectDef: P<Ast.GroupPattern> = Parser.seq(\n withFlags(false, Option.none(), Parser.seq(selectQuery(true), valuesClause)),\n Parser.preceded(\n expect('}'),\n hook((t) => offsetOf(t)),\n ),\n).pipe(\n Parser.map(([[query, values], at]) => {\n const sub = Option.isSome(values) ? { ...query, values: values.value } : query;\n validateSelect(sub, at);\n return Ast.group([Ast.subSelect(sub)]);\n }),\n);\n\n// -----------------------------------------------------------------------------\n// Static checks\n// -----------------------------------------------------------------------------\n\n/** The variable a `GROUP BY` condition binds: its `AS` variable, or the variable it is. */\nconst groupKey = (g: Ast.GroupCondition): Option.Option<string> =>\n g.variable !== undefined\n ? Option.some(g.variable.value)\n : Term.isVariable(g.expression)\n ? Option.some(g.expression.value)\n : Option.none();\n\nconst validateSelect = (query: Ast.SelectQuery, offset: number): void => {\n // Variables introduced by AS must not already be in scope.\n const projection = query.projection;\n if (projection !== '*') {\n const grouped =\n Arr.isReadonlyArrayNonEmpty(query.groupBy) ||\n projection.some((p) => !Term.isVariable(p) && Ast.containsAggregate(p.expression));\n // With grouping only the group keys are in scope; otherwise the\n // pattern's variables are.\n const inScope = MutableHashSet.fromIterable(grouped ? [] : Ast.inScopeVariables(query.where));\n Arr.forEach(Arr.getSomes(query.groupBy.map(groupKey)), (v) => MutableHashSet.add(inScope, v));\n // Variables of a trailing VALUES clause are joined before projection.\n (query.values?.variables ?? []).forEach((v) => MutableHashSet.add(inScope, v.value));\n const seen = MutableHashSet.empty<string>();\n projection.forEach((item) => {\n if (Term.isVariable(item)) {\n MutableHashSet.add(seen, item.value);\n return;\n }\n const name = item.variable.value;\n if (MutableHashSet.has(inScope, name) || MutableHashSet.has(seen, name)) {\n fail(`Variable ?${name} is already in scope`, offset);\n }\n MutableHashSet.add(seen, name);\n });\n }\n validateGrouping(query, offset);\n};\n\nconst validateGrouping = (query: Ast.Query, offset: number): void => {\n const projectionExprs =\n Predicate.isTagged(query, 'Select') && query.projection !== '*'\n ? query.projection.flatMap((p) => (Term.isVariable(p) ? [] : [p.expression]))\n : [];\n const grouped =\n Arr.isReadonlyArrayNonEmpty(query.groupBy) ||\n projectionExprs.some(Ast.containsAggregate) ||\n query.having.some(Ast.containsAggregate) ||\n query.orderBy.some((o) => Ast.containsAggregate(o.expression));\n query.groupBy.forEach((g) => {\n if (Ast.containsAggregate(g.expression)) fail('Aggregates are not allowed in GROUP BY', offset);\n });\n if (!grouped || !Predicate.isTagged(query, 'Select')) return;\n const projection = query.projection;\n if (projection === '*') {\n return fail('SELECT * is not allowed with GROUP BY or aggregates', offset);\n }\n const allowed = MutableHashSet.fromIterable(query.values?.variables.map((v) => v.value) ?? []);\n Arr.forEach(Arr.getSomes(query.groupBy.map(groupKey)), (v) => MutableHashSet.add(allowed, v));\n const checkVariable = (v: string): void => {\n if (!MutableHashSet.has(allowed, v)) fail(`Variable ?${v} is not grouped`, offset);\n };\n const checkExpr = (e: Ast.Expression): void => {\n Match.value(e).pipe(\n Match.tag('Variable', (v) => checkVariable(v.value)),\n Match.tag('Operation', 'FunctionCall', (call) => call.args.forEach(checkExpr)),\n Match.tag('Triple', (x) => Ast.expressionVariables(x).forEach(checkVariable)),\n Match.orElse(() => undefined),\n );\n };\n projection.forEach((item) => {\n if (Term.isVariable(item)) checkVariable(item.value);\n else {\n checkExpr(item.expression);\n MutableHashSet.add(allowed, item.variable.value);\n }\n });\n};\n\nconst checked =\n <A>(f: (a: A) => void) =>\n (a: A): Result.Result<A, Failure> =>\n catchFailure(() => {\n f(a);\n return a;\n });\n\nconst queryUnit = Compiler.jit(\n Parser.preceded(\n Parser.seq(start, prologueDecls),\n Parser.seq(\n select<Ast.Query>(\n [\n [['SELECT'], selectQuery(false)],\n [['CONSTRUCT'], constructQuery],\n [['DESCRIBE'], describeQuery],\n [['ASK'], askQuery],\n ],\n unexpectedHere<Ast.Query>('SELECT, CONSTRUCT, DESCRIBE or ASK'),\n ),\n valuesClause,\n Parser.alt(Parser.eof, unexpectedHere<void>()),\n ).pipe(\n Parser.map(([query, values]): Ast.Query =>\n Option.isSome(values) ? { ...query, values: values.value } : query,\n ),\n Parser.tryMap(\n checked((query: Ast.Query) => {\n if (Predicate.isTagged(query, 'Select')) validateSelect(query, 0);\n else validateGrouping(query, 0);\n }),\n ),\n Parser.cut,\n ),\n ),\n);\n\n// -----------------------------------------------------------------------------\n// Updates\n// -----------------------------------------------------------------------------\n\nconst quadPattern: P<Array<Ast.QuadPattern>> = Parser.delimited(\n expect('{'),\n Parser.repeat(\n Parser.preceded(\n Parser.not(tok('}')),\n Parser.alt(\n Parser.preceded(\n tok('GRAPH'),\n Parser.seq(\n Parser.preceded(\n hook((t) => {\n if (t.type === 'VAR' && !ctx.tc.variables)\n fail('Variables are not allowed here', t.start);\n }),\n varOrIri,\n ),\n Parser.delimited(expect('{'), templateTriples.triplesTemplate, expect('}')),\n eat('.'),\n ),\n ).pipe(\n // `templateTriples` parses no property paths, so every quad-data item is a triple\n // pattern.\n Parser.map(([g, triples]) =>\n triples\n .filter(isTriplePattern)\n .map((tp) => Ast.quadPattern(tp.subject, tp.predicate, tp.object, g)),\n ),\n ),\n Parser.terminated(\n Parser.preceded(\n Parser.alt(startsTriples, unexpectedHere<void>()),\n templateTriples.triplesTemplate,\n ),\n Parser.alt(\n Parser.peek(Parser.alt(tok('}'), tok('GRAPH'))),\n unexpectedHere<void>(\"'.' or '}'\"),\n ),\n ).pipe(\n Parser.map((triples) =>\n triples\n .filter(isTriplePattern)\n .map((tp) => Ast.quadPattern(tp.subject, tp.predicate, tp.object, Term.defaultGraph)),\n ),\n ),\n ),\n ),\n ),\n expect('}'),\n).pipe(Parser.map((lists) => lists.flat()));\n\nconst templateContext = (blankNodes: boolean) => (): TripleContext => ({\n variables: true,\n blankNodes,\n scope: ctx.opIndex,\n labels: StringMap.empty(),\n});\n\nconst quadData = (blankNodes: boolean): P<Array<Term.Quad>> =>\n inContext(\n () => ({ variables: false, blankNodes, scope: ctx.opIndex, labels: ctx.templateLabels }),\n quadPattern,\n ).pipe(\n Parser.map((quads) =>\n quads.map(\n (q) => new Term.Quad<any, any, any, any>(q.subject, q.predicate, q.object, q.graph),\n ),\n ),\n );\n\nconst usingClauses = Parser.repeat(\n Parser.preceded(tok('USING'), Parser.seq(eat('NAMED'), iriOrError)),\n);\n\nconst modify = (deleteFirst: boolean): P<Ast.ModifyOperation> =>\n Parser.seq(\n deleteFirst\n ? Parser.seq(\n inContext(templateContext(false), quadPattern),\n Parser.opt(Parser.preceded(tok('INSERT'), inContext(templateContext(true), quadPattern))),\n ).pipe(Parser.map(([del, ins]) => [del, Option.getOrElse(ins, () => [])] as const))\n : inContext(templateContext(true), quadPattern).pipe(Parser.map((ins) => [[], ins] as const)),\n usingClauses,\n Parser.preceded(expect('WHERE'), groupGraphPattern),\n ).pipe(\n Parser.map(([[del, ins], using, where]): Ast.ModifyOperation => {\n const op: Ast.ModifyOperation = { _tag: 'Modify', delete: del, insert: ins, where };\n return Arr.isReadonlyArrayEmpty(using)\n ? op\n : {\n ...op,\n using: {\n default: using.filter(([named]) => !named).map(([, i]) => i),\n named: using.filter(([named]) => named).map(([, i]) => i),\n },\n };\n }),\n );\n\nconst graphRefAll: P<Ast.GraphTarget> = Parser.alt(\n tok('DEFAULT').pipe(Parser.as<Ast.GraphTarget>({ _tag: 'Default' })),\n tok('NAMED').pipe(Parser.as<Ast.GraphTarget>({ _tag: 'Named' })),\n tok('ALL').pipe(Parser.as<Ast.GraphTarget>({ _tag: 'All' })),\n Parser.preceded(expect('GRAPH'), iriOrError),\n);\n\nconst graphOrDefault: P<Ast.GraphOrDefault> = Parser.alt(\n tok('DEFAULT').pipe(Parser.as<Ast.GraphOrDefault>(Term.defaultGraph)),\n Parser.preceded(eat('GRAPH'), iriOrError),\n);\n\nconst update1: P<Ast.UpdateOperation> = select<Ast.UpdateOperation>(\n [\n [\n ['LOAD'],\n Parser.preceded(\n anyToken,\n Parser.seq(\n eat('SILENT'),\n iriOrError,\n Parser.opt(Parser.preceded(Parser.seq(tok('INTO'), expect('GRAPH')), iriOrError)),\n ),\n ).pipe(\n Parser.map(([silent, source, dest]): Ast.UpdateOperation =>\n Option.isSome(dest)\n ? { _tag: 'Load', silent, source, destination: dest.value }\n : { _tag: 'Load', silent, source },\n ),\n ),\n ],\n [\n ['CLEAR', 'DROP'],\n Parser.seq(anyToken, eat('SILENT'), graphRefAll).pipe(\n Parser.map(([t, silent, target]): Ast.UpdateOperation => ({\n _tag: t.kind === 'CLEAR' ? 'Clear' : 'Drop',\n silent,\n target,\n })),\n ),\n ],\n [\n ['CREATE'],\n Parser.preceded(\n anyToken,\n Parser.seq(eat('SILENT'), Parser.preceded(expect('GRAPH'), iriOrError)),\n ).pipe(\n Parser.map(([silent, graph]): Ast.UpdateOperation => ({ _tag: 'Create', silent, graph })),\n ),\n ],\n [\n ['ADD', 'MOVE', 'COPY'],\n Parser.seq(\n anyToken,\n eat('SILENT'),\n graphOrDefault,\n Parser.preceded(expect('TO'), graphOrDefault),\n ).pipe(\n Parser.map(([t, silent, source, destination]): Ast.UpdateOperation => ({\n _tag: t.kind === 'ADD' ? 'Add' : t.kind === 'MOVE' ? 'Move' : 'Copy',\n silent,\n source,\n destination,\n })),\n ),\n ],\n [\n ['INSERT'],\n Parser.preceded(\n anyToken,\n Parser.alt(\n Parser.preceded(tok('DATA'), quadData(true)).pipe(\n Parser.map((quads): Ast.UpdateOperation => ({ _tag: 'InsertData', quads })),\n ),\n modify(false),\n ),\n ),\n ],\n [\n ['DELETE'],\n Parser.preceded(\n anyToken,\n Parser.alt(\n Parser.preceded(tok('DATA'), quadData(false)).pipe(\n Parser.map((quads): Ast.UpdateOperation => ({ _tag: 'DeleteData', quads })),\n ),\n Parser.preceded(\n tok('WHERE'),\n inContext(\n () => ({\n variables: true,\n blankNodes: false,\n scope: ++ctx.scopeCounter,\n labels: ctx.patternLabels,\n }),\n quadPattern,\n ),\n ).pipe(\n Parser.map((patterns): Ast.UpdateOperation => ({ _tag: 'DeleteWhere', patterns })),\n ),\n modify(true),\n ),\n ),\n ],\n [\n ['WITH'],\n Parser.seq(\n Parser.preceded(anyToken, iriOrError),\n Parser.alt(\n Parser.preceded(tok('DELETE'), modify(true)),\n Parser.preceded(expect('INSERT'), modify(false)),\n ),\n ).pipe(\n Parser.map(([i, { _tag, ...rest }]): Ast.UpdateOperation => ({ _tag, with: i, ...rest })),\n ),\n ],\n ],\n unexpectedHere<Ast.UpdateOperation>('an update operation'),\n);\n\nconst update1Indexed: P<Ast.UpdateOperation> = Parser.terminated(\n update1,\n hook(() => {\n ctx.opIndex++;\n }),\n);\n\nconst updateUnit = Compiler.jit(\n Parser.preceded(\n Parser.seq(start, prologueDecls),\n Parser.terminated(\n Parser.opt(\n Parser.preceded(\n Parser.not(Parser.eof),\n Parser.separated(\n update1Indexed,\n Parser.seq(tok(';'), prologueDecls, Parser.not(Parser.eof)),\n { min: 1 },\n ),\n ),\n ),\n Parser.seq(\n Parser.opt(Parser.seq(tok(';'), prologueDecls)),\n Parser.alt(Parser.eof, unexpectedHere<void>(\"';'\")),\n ),\n ),\n ).pipe(\n Parser.map((ops) =>\n Ast.update(\n Option.getOrElse(ops, () => []),\n prologue.value(),\n ),\n ),\n ),\n);\n\n// -----------------------------------------------------------------------------\n// Entry points\n// -----------------------------------------------------------------------------\n\nconst run = <A>(\n grammar: P<A>,\n input: string,\n baseIri: Option.Option<string>,\n prefixes: Readonly<Record<string, string>>,\n): Result.Result<A, Failure> => {\n const tokens = tokenize(input);\n const resolved = resolve(tokens, baseIri, prefixes);\n fresh = () => new Context(input);\n ctx = fresh();\n prologue = {\n value: () => {\n const declared: Ast.Prologue = { prefixes: { ...resolved.prefixes } };\n const based = Option.isNone(resolved.base)\n ? declared\n : { ...declared, base: resolved.base.value };\n return Option.isNone(ctx.version) ? based : { ...based, version: ctx.version.value };\n },\n };\n // A `Failure` thrown by the maps that check what they build ends the parse.\n const parsed = catchFailure(() => Parser.parse(grammar, tokens));\n if (Result.isFailure(parsed)) return Result.fail(parsed.failure);\n const result: Result.Result<A, ParseError.ParseError<Failure>> = parsed.success;\n if (Result.isSuccess(result)) return Result.succeed(result.success);\n const error: ParseError.ParseError<Failure> = result.failure;\n if (error.cause !== undefined) return Result.fail(error.cause);\n const t = tokenAt(tokens, error.offset);\n if (t.type === 'ERROR') return Result.fail(new Failure(t.value, t.start));\n return Result.fail(new Failure(`Unexpected ${describe(t)}`, offsetOf(t)));\n};\n\n/** Parses a query against a base IRI (if any) and initial prefixes. */\nexport const parseQuery = (\n input: string,\n baseIri: Option.Option<string>,\n prefixes: Readonly<Record<string, string>>,\n): Result.Result<Ast.Query, Failure> => run(queryUnit, input, baseIri, prefixes);\n\n/** Parses an update request against a base IRI (if any) and initial prefixes. */\nexport const parseUpdate = (\n input: string,\n baseIri: Option.Option<string>,\n prefixes: Readonly<Record<string, string>>,\n): Result.Result<Ast.Update, Failure> => run(updateUnit, input, baseIri, prefixes);\n","/**\n * A complete parser for SPARQL 1.1 Query and Update, written with\n * `@thomasfosterau/effect-parse` (see `internal/parser.ts`), including the SPARQL 1.2 additions (triple terms, reified triples,\n * annotations, `VERSION`, directional language tags and the new built-in\n * functions).\n *\n * The parser expands all abbreviations (prefixed names, relative IRIs,\n * `a`, blank node property lists, collections, reifiers and annotations)\n * and enforces the static constraints of the specification (blank node\n * label scoping, grouping rules, `BIND`/`AS` scoping, `VALUES` arity,\n * variable-free `INSERT DATA`, blank-node-free `DELETE` templates, …).\n *\n * @since 0.1.0\n */\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\nimport * as Result from 'effect/Result';\nimport * as Schema from 'effect/Schema';\nimport type * as Ast from './Ast.ts';\nimport * as Internal from './internal/parser.ts';\n\n// -----------------------------------------------------------------------------\n// Errors and options\n// -----------------------------------------------------------------------------\n\n/**\n * A syntax (or static semantic) error in a SPARQL query or update.\n *\n * @since 0.1.0\n * @category errors\n */\nexport class SparqlParseError extends Schema.TaggedError<SparqlParseError>()('SparqlParseError', {\n message: Schema.String,\n /** 1-based line of the error. */\n line: Schema.Number,\n /** 1-based column of the error. */\n column: Schema.Number,\n /** 0-based character offset of the error. */\n offset: Schema.Number,\n}) {}\n\n/**\n * @since 0.1.0\n * @category models\n */\nexport interface ParseOptions {\n /** The base IRI used to resolve relative IRIs (unless overridden by `BASE`). */\n readonly baseIri?: string | undefined;\n /** Prefixes available without declaration. */\n readonly prefixes?: Readonly<Record<string, string>> | undefined;\n}\n\n// -----------------------------------------------------------------------------\n// Entry points\n// -----------------------------------------------------------------------------\n\nconst position = (input: string, offset: number) => {\n const before = input.slice(0, Math.max(0, Math.min(offset, input.length)));\n const lineStart = before.lastIndexOf('\\n') + 1;\n return { line: before.split('\\n').length, column: offset - lineStart + 1 };\n};\n\n/** The base IRI and prefixes of `options`, as the internal parser takes them. */\nconst internalOptions = (\n options?: ParseOptions,\n): readonly [Option.Option<string>, Readonly<Record<string, string>>] => [\n Option.fromUndefinedOr(options?.baseIri),\n options?.prefixes ?? {},\n];\n\nconst toError =\n (input: string) =>\n (e: Internal.Failure): SparqlParseError => {\n const { line, column } = position(input, e.offset);\n return new SparqlParseError({\n message: `${e.message} (line ${line}, column ${column})`,\n line,\n column,\n offset: e.offset,\n });\n };\n\n/**\n * Parses a SPARQL query, returning a `Result`.\n *\n * @since 0.1.0\n * @category parsing\n */\nexport const parseQueryResult = (\n input: string,\n options?: ParseOptions,\n): Result.Result<Ast.Query, SparqlParseError> =>\n Result.mapError(Internal.parseQuery(input, ...internalOptions(options)), toError(input));\n\n/**\n * Parses a SPARQL update request, returning a `Result`.\n *\n * @since 0.1.0\n * @category parsing\n */\nexport const parseUpdateResult = (\n input: string,\n options?: ParseOptions,\n): Result.Result<Ast.Update, SparqlParseError> =>\n Result.mapError(Internal.parseUpdate(input, ...internalOptions(options)), toError(input));\n\n/**\n * Parses a SPARQL query.\n *\n * @since 0.1.0\n * @category parsing\n */\nexport const parseQuery = (\n input: string,\n options?: ParseOptions,\n): Effect.Effect<Ast.Query, SparqlParseError> =>\n Effect.suspend(() => Effect.fromResult(parseQueryResult(input, options)));\n\n/**\n * Parses a SPARQL update request.\n *\n * @since 0.1.0\n * @category parsing\n */\nexport const parseUpdate = (\n input: string,\n options?: ParseOptions,\n): Effect.Effect<Ast.Update, SparqlParseError> =>\n Effect.suspend(() => Effect.fromResult(parseUpdateResult(input, options)));\n\n/**\n * Parses either a query or an update request: the text is parsed as a query\n * first and, if that fails, as an update.\n *\n * @since 0.1.0\n * @category parsing\n */\nexport const parse = (\n input: string,\n options?: ParseOptions,\n): Effect.Effect<Ast.Query | Ast.Update, SparqlParseError> =>\n Effect.suspend((): Effect.Effect<Ast.Query | Ast.Update, SparqlParseError> => {\n const q = parseQueryResult(input, options);\n if (Result.isSuccess(q)) return Effect.succeed(q.success);\n const u = parseUpdateResult(input, options);\n if (Result.isSuccess(u)) return Effect.succeed(u.success);\n // Report the error of the parse that got further.\n return Effect.fail(q.failure.offset >= u.failure.offset ? q.failure : u.failure);\n });\n\n/**\n * Parses a SPARQL query, throwing a `SparqlParseError` on failure.\n *\n * @since 0.1.0\n * @category parsing\n */\nexport const parseQueryUnsafe = (input: string, options?: ParseOptions): Ast.Query => {\n const r = parseQueryResult(input, options);\n if (Result.isFailure(r)) throw r.failure;\n return r.success;\n};\n\n/**\n * Parses a SPARQL update request, throwing a `SparqlParseError` on failure.\n *\n * @since 0.1.0\n * @category parsing\n */\nexport const parseUpdateUnsafe = (input: string, options?: ParseOptions): Ast.Update => {\n const r = parseUpdateResult(input, options);\n if (Result.isFailure(r)) throw r.failure;\n return r.success;\n};\n"],"mappings":"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"}
|