@thomasfosterau/effect-rdf 0.0.0-stage → 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 +2251 -2
- 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 +195 -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,953 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A strongly-typed, immutable query builder. Builders produce the SPARQL AST
|
|
3
|
+
* (`build()`), print as SPARQL text (`toString()`) and can be executed with
|
|
4
|
+
* the `SparqlEngine`, yielding rows whose type is derived from the selected
|
|
5
|
+
* variables:
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { QueryBuilder as Q } from '@thomasfosterau/effect-rdf/sparql'
|
|
9
|
+
* const v = Q.vars('person', 'name', 'email')
|
|
10
|
+
*
|
|
11
|
+
* const query = Q.select('person', 'name', Q.maybe('email'))
|
|
12
|
+
* .where(Q.triple(v.person, foaf.name, v.name))
|
|
13
|
+
* .optional(Q.triple(v.person, foaf.mbox, v.email))
|
|
14
|
+
* .orderBy(v.name)
|
|
15
|
+
* .limit(10)
|
|
16
|
+
*
|
|
17
|
+
* // Stream<{ readonly person: GroundTerm; readonly name: GroundTerm; readonly email?: GroundTerm }>
|
|
18
|
+
* const rows = Q.execute(query)
|
|
19
|
+
* // Stream<{ name: string; email?: string }>, decoded with TermSchema
|
|
20
|
+
* const people = Q.decode(query, Schema.Struct({ name: TermSchema.string, email: Schema.optional(TermSchema.iri) }))
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @since 0.1.0
|
|
24
|
+
*/
|
|
25
|
+
import * as Arr from 'effect/Array';
|
|
26
|
+
import * as Effect from 'effect/Effect';
|
|
27
|
+
import * as Match from 'effect/Match';
|
|
28
|
+
import { pipeArguments, type Pipeable } from 'effect/Pipeable';
|
|
29
|
+
import * as Record from 'effect/Record';
|
|
30
|
+
import * as Schema from 'effect/Schema';
|
|
31
|
+
import * as Stream from 'effect/Stream';
|
|
32
|
+
import type { Simplify } from 'effect/Types';
|
|
33
|
+
import * as Term from '../Term.ts';
|
|
34
|
+
import * as Xsd from '../Xsd.ts';
|
|
35
|
+
import * as Ast from './Ast.ts';
|
|
36
|
+
import * as B from './Bindings.ts';
|
|
37
|
+
import * as Engine from './Engine.ts';
|
|
38
|
+
import * as Generator from './Generator.ts';
|
|
39
|
+
import * as Predicate from 'effect/Predicate';
|
|
40
|
+
|
|
41
|
+
// -----------------------------------------------------------------------------
|
|
42
|
+
// Inputs
|
|
43
|
+
// -----------------------------------------------------------------------------
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* A JavaScript value usable as a literal.
|
|
47
|
+
*
|
|
48
|
+
* @since 0.1.0
|
|
49
|
+
* @category models
|
|
50
|
+
*/
|
|
51
|
+
export type JsValue = string | number | bigint | boolean | Date;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* An expression, or a JS value (converted to a literal).
|
|
55
|
+
*
|
|
56
|
+
* @since 0.1.0
|
|
57
|
+
* @category models
|
|
58
|
+
*/
|
|
59
|
+
export type ExpressionInput = Ast.Expression | JsValue;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* An object position input: a term pattern or a JS value (literal).
|
|
63
|
+
*
|
|
64
|
+
* @since 0.1.0
|
|
65
|
+
* @category models
|
|
66
|
+
*/
|
|
67
|
+
export type ObjectInput = Ast.TermPattern | JsValue;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Anything accepted as (part of) a group graph pattern.
|
|
71
|
+
*
|
|
72
|
+
* @since 0.1.0
|
|
73
|
+
* @category models
|
|
74
|
+
*/
|
|
75
|
+
export type PatternInput =
|
|
76
|
+
| Ast.TriplePattern
|
|
77
|
+
| Ast.PathPattern
|
|
78
|
+
| Ast.Pattern
|
|
79
|
+
| ReadonlyArray<PatternInput>;
|
|
80
|
+
|
|
81
|
+
const isJsValue = (
|
|
82
|
+
u: ExpressionInput | Alias<string, boolean> | Ast.OrderCondition,
|
|
83
|
+
): u is JsValue =>
|
|
84
|
+
Predicate.isString(u) ||
|
|
85
|
+
Predicate.isNumber(u) ||
|
|
86
|
+
Predicate.isBigInt(u) ||
|
|
87
|
+
Predicate.isBoolean(u) ||
|
|
88
|
+
Predicate.isDate(u);
|
|
89
|
+
|
|
90
|
+
const isTerm = <T extends Term.Term>(u: T | JsValue): u is T => Term.isTerm(u);
|
|
91
|
+
|
|
92
|
+
const isAlias = (u: ExpressionInput | Alias<string, boolean>): u is Alias<string, boolean> =>
|
|
93
|
+
!isJsValue(u) && Predicate.isTagged(u, 'Alias');
|
|
94
|
+
|
|
95
|
+
const isOrderCondition = (u: ExpressionInput | Ast.OrderCondition): u is Ast.OrderCondition =>
|
|
96
|
+
!isJsValue(u) && 'descending' in u;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Converts a JS value to a literal (terms and expressions are returned
|
|
100
|
+
* unchanged).
|
|
101
|
+
*
|
|
102
|
+
* @since 0.1.0
|
|
103
|
+
* @category constructors
|
|
104
|
+
*/
|
|
105
|
+
export const toExpression = (input: ExpressionInput): Ast.Expression =>
|
|
106
|
+
isJsValue(input) ? Xsd.fromJs(input) : input;
|
|
107
|
+
|
|
108
|
+
const toObject = (input: ObjectInput): Ast.TermPattern =>
|
|
109
|
+
isTerm(input) ? input : Xsd.fromJs(input);
|
|
110
|
+
|
|
111
|
+
// -----------------------------------------------------------------------------
|
|
112
|
+
// Variables
|
|
113
|
+
// -----------------------------------------------------------------------------
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Creates a variable.
|
|
117
|
+
*
|
|
118
|
+
* @since 0.1.0
|
|
119
|
+
* @category variables
|
|
120
|
+
*/
|
|
121
|
+
export const variable = <const N extends string>(name: N): Term.Variable<N> => Term.variable(name);
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Variables by name, as `v` provides them.
|
|
125
|
+
*
|
|
126
|
+
* @since 0.1.0
|
|
127
|
+
* @category variables
|
|
128
|
+
*/
|
|
129
|
+
export interface Variables {
|
|
130
|
+
readonly [name: string]: Term.Variable;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* A proxy creating variables by property access: `v.name` is `?name`.
|
|
135
|
+
*
|
|
136
|
+
* @since 0.1.0
|
|
137
|
+
* @category variables
|
|
138
|
+
*/
|
|
139
|
+
export const v: Variables = new Proxy<Variables>(
|
|
140
|
+
{},
|
|
141
|
+
{ get: (_, name) => (Predicate.isString(name) ? Term.variable(name) : undefined) },
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Creates several variables at once, typed by name:
|
|
146
|
+
* `const { s, name } = vars('s', 'name')`.
|
|
147
|
+
*
|
|
148
|
+
* @since 0.1.0
|
|
149
|
+
* @category variables
|
|
150
|
+
*/
|
|
151
|
+
export const vars = <const N extends ReadonlyArray<string>>(
|
|
152
|
+
...names: N
|
|
153
|
+
): { readonly [K in N[number]]: Term.Variable<K> } =>
|
|
154
|
+
// SAFETY: one entry per name in `names`, each the variable of that name.
|
|
155
|
+
Record.fromEntries(names.map((n) => [n, Term.variable(n)])) as {
|
|
156
|
+
readonly [K in N[number]]: Term.Variable<K>;
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* The `as` constructor: an alias that is required unless marked optional.
|
|
161
|
+
*
|
|
162
|
+
* @since 0.1.0
|
|
163
|
+
* @category projection
|
|
164
|
+
*/
|
|
165
|
+
export interface AsAlias {
|
|
166
|
+
<const N extends string>(expression: ExpressionInput, name: N): Alias<N>;
|
|
167
|
+
<const N extends string>(
|
|
168
|
+
expression: ExpressionInput,
|
|
169
|
+
name: N,
|
|
170
|
+
options: { readonly optional: true },
|
|
171
|
+
): Alias<N, true>;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Marks a selected variable as possibly unbound (e.g. bound in an
|
|
176
|
+
* `OPTIONAL`): its row field becomes optional.
|
|
177
|
+
*
|
|
178
|
+
* @since 0.1.0
|
|
179
|
+
* @category projection
|
|
180
|
+
*/
|
|
181
|
+
export interface MaybeVariable<N extends string> {
|
|
182
|
+
readonly _tag: 'Maybe';
|
|
183
|
+
readonly name: N;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* @since 0.1.0
|
|
188
|
+
* @category projection
|
|
189
|
+
*/
|
|
190
|
+
export const maybe = <const N extends string>(name: N): MaybeVariable<N> => ({
|
|
191
|
+
_tag: 'Maybe',
|
|
192
|
+
name,
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* A projected expression `(expr AS ?name)`.
|
|
197
|
+
*
|
|
198
|
+
* @since 0.1.0
|
|
199
|
+
* @category projection
|
|
200
|
+
*/
|
|
201
|
+
export interface Alias<N extends string, Optional extends boolean = false> {
|
|
202
|
+
readonly _tag: 'Alias';
|
|
203
|
+
readonly name: N;
|
|
204
|
+
readonly expression: Ast.Expression;
|
|
205
|
+
readonly optional: Optional;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Projects an expression as a variable. Pass `{ optional: true }` when the
|
|
210
|
+
* expression may fail (leaving the variable unbound).
|
|
211
|
+
*
|
|
212
|
+
* @since 0.1.0
|
|
213
|
+
* @category projection
|
|
214
|
+
*/
|
|
215
|
+
export const as: AsAlias = (
|
|
216
|
+
expression: ExpressionInput,
|
|
217
|
+
name: string,
|
|
218
|
+
options?: { readonly optional: true },
|
|
219
|
+
): any => ({
|
|
220
|
+
_tag: 'Alias',
|
|
221
|
+
name,
|
|
222
|
+
expression: toExpression(expression),
|
|
223
|
+
optional: options?.optional ?? false,
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* An item of a `SELECT` list.
|
|
228
|
+
*
|
|
229
|
+
* @since 0.1.0
|
|
230
|
+
* @category projection
|
|
231
|
+
*/
|
|
232
|
+
export type SelectItem = string | Term.Variable | MaybeVariable<string> | Alias<string, boolean>;
|
|
233
|
+
|
|
234
|
+
type RequiredOf<I> = I extends string
|
|
235
|
+
? I
|
|
236
|
+
: I extends Term.Variable<infer N>
|
|
237
|
+
? N
|
|
238
|
+
: I extends Alias<infer N>
|
|
239
|
+
? N
|
|
240
|
+
: never;
|
|
241
|
+
|
|
242
|
+
type OptionalOf<I> =
|
|
243
|
+
I extends MaybeVariable<infer N> ? N : I extends Alias<infer N, true> ? N : never;
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* The row type of a `SELECT` query with required variables `R` and
|
|
247
|
+
* possibly-unbound variables `O`.
|
|
248
|
+
*
|
|
249
|
+
* @since 0.1.0
|
|
250
|
+
* @category models
|
|
251
|
+
*/
|
|
252
|
+
export type Row<R extends string, O extends string> = Simplify<
|
|
253
|
+
{ readonly [K in R]: Term.GroundTerm } & { readonly [K in O]?: Term.GroundTerm | undefined }
|
|
254
|
+
>;
|
|
255
|
+
|
|
256
|
+
// -----------------------------------------------------------------------------
|
|
257
|
+
// Patterns
|
|
258
|
+
// -----------------------------------------------------------------------------
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* A triple pattern. The predicate may be a property path; the object may be
|
|
262
|
+
* a JS value.
|
|
263
|
+
*
|
|
264
|
+
* @since 0.1.0
|
|
265
|
+
* @category patterns
|
|
266
|
+
*/
|
|
267
|
+
export const triple = (
|
|
268
|
+
subject: Ast.TermPattern,
|
|
269
|
+
predicate: Ast.VarOrIri | Ast.Path,
|
|
270
|
+
object: ObjectInput,
|
|
271
|
+
): Ast.TriplePattern | Ast.PathPattern =>
|
|
272
|
+
Ast.isPath(predicate)
|
|
273
|
+
? Ast.pathPattern(subject, predicate, toObject(object))
|
|
274
|
+
: Ast.triplePattern(subject, predicate, toObject(object));
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Property path constructors.
|
|
278
|
+
*
|
|
279
|
+
* @since 0.1.0
|
|
280
|
+
* @category patterns
|
|
281
|
+
*/
|
|
282
|
+
export const path = {
|
|
283
|
+
link: (iri: Term.NamedNode): Ast.Path => Ast.link(iri),
|
|
284
|
+
inverse: (p: Ast.Path | Term.NamedNode): Ast.Path => Ast.inverse(toPath(p)),
|
|
285
|
+
sequence: (...ps: ReadonlyArray<Ast.Path | Term.NamedNode>): Ast.Path =>
|
|
286
|
+
Ast.sequence(...ps.map(toPath)),
|
|
287
|
+
alternative: (...ps: ReadonlyArray<Ast.Path | Term.NamedNode>): Ast.Path =>
|
|
288
|
+
Ast.alternative(...ps.map(toPath)),
|
|
289
|
+
zeroOrMore: (p: Ast.Path | Term.NamedNode): Ast.Path => Ast.zeroOrMore(toPath(p)),
|
|
290
|
+
oneOrMore: (p: Ast.Path | Term.NamedNode): Ast.Path => Ast.oneOrMore(toPath(p)),
|
|
291
|
+
zeroOrOne: (p: Ast.Path | Term.NamedNode): Ast.Path => Ast.zeroOrOne(toPath(p)),
|
|
292
|
+
negated: (
|
|
293
|
+
iris: ReadonlyArray<Term.NamedNode>,
|
|
294
|
+
inverse: ReadonlyArray<Term.NamedNode> = [],
|
|
295
|
+
): Ast.Path => Ast.negated(iris, inverse),
|
|
296
|
+
} as const;
|
|
297
|
+
|
|
298
|
+
const toPath = (p: Ast.Path | Term.NamedNode): Ast.Path => (Ast.isPath(p) ? p : Ast.link(p));
|
|
299
|
+
|
|
300
|
+
/** Whether a pattern input is the list form (`Array.isArray` cannot narrow a `ReadonlyArray`). */
|
|
301
|
+
const isPatternList = (input: PatternInput): input is ReadonlyArray<PatternInput> =>
|
|
302
|
+
Array.isArray(input);
|
|
303
|
+
|
|
304
|
+
const isTriplePattern = (
|
|
305
|
+
p: Ast.TriplePattern | Ast.PathPattern | Ast.Pattern,
|
|
306
|
+
): p is Ast.TriplePattern | Ast.PathPattern =>
|
|
307
|
+
Predicate.isTagged(p, 'TriplePattern') || Predicate.isTagged(p, 'PathPattern');
|
|
308
|
+
|
|
309
|
+
const flatten = (inputs: ReadonlyArray<PatternInput>): Array<Ast.Pattern> => {
|
|
310
|
+
const out: Array<Ast.Pattern> = [];
|
|
311
|
+
const go = (input: PatternInput): void => {
|
|
312
|
+
if (isPatternList(input)) {
|
|
313
|
+
input.forEach(go);
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
if (isTriplePattern(input)) {
|
|
317
|
+
const last = out[out.length - 1];
|
|
318
|
+
if (Predicate.isTagged(last, 'Bgp')) {
|
|
319
|
+
out[out.length - 1] = Ast.bgp([...last.triples, input]);
|
|
320
|
+
} else out.push(Ast.bgp([input]));
|
|
321
|
+
} else out.push(input);
|
|
322
|
+
};
|
|
323
|
+
inputs.forEach(go);
|
|
324
|
+
return out;
|
|
325
|
+
};
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* A group graph pattern `{ … }`.
|
|
329
|
+
*
|
|
330
|
+
* @since 0.1.0
|
|
331
|
+
* @category patterns
|
|
332
|
+
*/
|
|
333
|
+
export const group = (...patterns: ReadonlyArray<PatternInput>): Ast.GroupPattern =>
|
|
334
|
+
Ast.group(flatten(patterns));
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* `OPTIONAL { … }`
|
|
338
|
+
*
|
|
339
|
+
* @since 0.1.0
|
|
340
|
+
* @category patterns
|
|
341
|
+
*/
|
|
342
|
+
export const optional = (...patterns: ReadonlyArray<PatternInput>): Ast.OptionalPattern =>
|
|
343
|
+
Ast.optional(group(...patterns));
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* `MINUS { … }`
|
|
347
|
+
*
|
|
348
|
+
* @since 0.1.0
|
|
349
|
+
* @category patterns
|
|
350
|
+
*/
|
|
351
|
+
export const minus = (...patterns: ReadonlyArray<PatternInput>): Ast.MinusPattern =>
|
|
352
|
+
Ast.minus(group(...patterns));
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* `{ … } UNION { … }`; each argument is one alternative.
|
|
356
|
+
*
|
|
357
|
+
* @since 0.1.0
|
|
358
|
+
* @category patterns
|
|
359
|
+
*/
|
|
360
|
+
export const union = (...alternatives: ReadonlyArray<PatternInput>): Ast.UnionPattern =>
|
|
361
|
+
Ast.union(alternatives.map((a) => group(a)));
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* `GRAPH name { … }`
|
|
365
|
+
*
|
|
366
|
+
* @since 0.1.0
|
|
367
|
+
* @category patterns
|
|
368
|
+
*/
|
|
369
|
+
export const graph = (
|
|
370
|
+
name: Ast.VarOrIri,
|
|
371
|
+
...patterns: ReadonlyArray<PatternInput>
|
|
372
|
+
): Ast.GraphPattern => Ast.graph(name, group(...patterns));
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* `FILTER(expr)`
|
|
376
|
+
*
|
|
377
|
+
* @since 0.1.0
|
|
378
|
+
* @category patterns
|
|
379
|
+
*/
|
|
380
|
+
export const filter = (expression: ExpressionInput): Ast.FilterPattern =>
|
|
381
|
+
Ast.filter(toExpression(expression));
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* `BIND(expr AS ?name)`
|
|
385
|
+
*
|
|
386
|
+
* @since 0.1.0
|
|
387
|
+
* @category patterns
|
|
388
|
+
*/
|
|
389
|
+
export const bind = (expression: ExpressionInput, name: string | Term.Variable): Ast.BindPattern =>
|
|
390
|
+
Ast.bind(toExpression(expression), Predicate.isString(name) ? Term.variable(name) : name);
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Inline data from records: `values([{ x: ex.a, y: 1 }, { x: ex.b }])`.
|
|
394
|
+
* Missing or `undefined` values are `UNDEF`.
|
|
395
|
+
*
|
|
396
|
+
* @since 0.1.0
|
|
397
|
+
* @category patterns
|
|
398
|
+
*/
|
|
399
|
+
export const values = (
|
|
400
|
+
rows: ReadonlyArray<Readonly<Record<string, Term.GroundTerm | JsValue | undefined>>>,
|
|
401
|
+
): Ast.ValuesPattern => {
|
|
402
|
+
const names = Arr.dedupe(rows.flatMap((r) => Record.keys(r)));
|
|
403
|
+
return Ast.values(
|
|
404
|
+
names.map((n) => Term.variable(n)),
|
|
405
|
+
rows.map((r) =>
|
|
406
|
+
names.map((n) => {
|
|
407
|
+
const x = r[n];
|
|
408
|
+
return x === undefined ? undefined : isTerm(x) ? x : Xsd.fromJs(x);
|
|
409
|
+
}),
|
|
410
|
+
),
|
|
411
|
+
);
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
// -----------------------------------------------------------------------------
|
|
415
|
+
// Expressions
|
|
416
|
+
// -----------------------------------------------------------------------------
|
|
417
|
+
|
|
418
|
+
const op =
|
|
419
|
+
(operator: Ast.Operator) =>
|
|
420
|
+
(...args: ReadonlyArray<ExpressionInput>): Ast.Expression =>
|
|
421
|
+
Ast.operation(operator, ...args.map(toExpression));
|
|
422
|
+
|
|
423
|
+
const binary =
|
|
424
|
+
(operator: Ast.Operator) =>
|
|
425
|
+
(a: ExpressionInput, b: ExpressionInput): Ast.Expression =>
|
|
426
|
+
Ast.operation(operator, toExpression(a), toExpression(b));
|
|
427
|
+
|
|
428
|
+
const unary =
|
|
429
|
+
(operator: Ast.Operator) =>
|
|
430
|
+
(a: ExpressionInput): Ast.Expression =>
|
|
431
|
+
Ast.operation(operator, toExpression(a));
|
|
432
|
+
|
|
433
|
+
/** @since 0.1.0 @category expressions */
|
|
434
|
+
export const eq = binary('=');
|
|
435
|
+
/** @since 0.1.0 @category expressions */
|
|
436
|
+
export const ne = binary('!=');
|
|
437
|
+
/** @since 0.1.0 @category expressions */
|
|
438
|
+
export const lt = binary('<');
|
|
439
|
+
/** @since 0.1.0 @category expressions */
|
|
440
|
+
export const le = binary('<=');
|
|
441
|
+
/** @since 0.1.0 @category expressions */
|
|
442
|
+
export const gt = binary('>');
|
|
443
|
+
/** @since 0.1.0 @category expressions */
|
|
444
|
+
export const ge = binary('>=');
|
|
445
|
+
/** @since 0.1.0 @category expressions */
|
|
446
|
+
export const add = binary('+');
|
|
447
|
+
/** @since 0.1.0 @category expressions */
|
|
448
|
+
export const subtract = binary('-');
|
|
449
|
+
/** @since 0.1.0 @category expressions */
|
|
450
|
+
export const multiply = binary('*');
|
|
451
|
+
/** @since 0.1.0 @category expressions */
|
|
452
|
+
export const divide = binary('/');
|
|
453
|
+
/** @since 0.1.0 @category expressions */
|
|
454
|
+
export const negate = unary('UMINUS');
|
|
455
|
+
/** @since 0.1.0 @category expressions */
|
|
456
|
+
export const not = unary('!');
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* Logical conjunction of any number of conditions.
|
|
460
|
+
*
|
|
461
|
+
* @since 0.1.0
|
|
462
|
+
* @category expressions
|
|
463
|
+
*/
|
|
464
|
+
export const and = (...args: ReadonlyArray<ExpressionInput>): Ast.Expression =>
|
|
465
|
+
args.map(toExpression).reduce((a, b) => Ast.operation('&&', a, b));
|
|
466
|
+
|
|
467
|
+
/**
|
|
468
|
+
* Logical disjunction of any number of conditions.
|
|
469
|
+
*
|
|
470
|
+
* @since 0.1.0
|
|
471
|
+
* @category expressions
|
|
472
|
+
*/
|
|
473
|
+
export const or = (...args: ReadonlyArray<ExpressionInput>): Ast.Expression =>
|
|
474
|
+
args.map(toExpression).reduce((a, b) => Ast.operation('||', a, b));
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* `expr IN (…)`
|
|
478
|
+
*
|
|
479
|
+
* @since 0.1.0
|
|
480
|
+
* @category expressions
|
|
481
|
+
*/
|
|
482
|
+
export const isIn = (
|
|
483
|
+
expression: ExpressionInput,
|
|
484
|
+
list: ReadonlyArray<ExpressionInput>,
|
|
485
|
+
): Ast.Expression => Ast.operation('IN', toExpression(expression), ...list.map(toExpression));
|
|
486
|
+
|
|
487
|
+
/**
|
|
488
|
+
* `expr NOT IN (…)`
|
|
489
|
+
*
|
|
490
|
+
* @since 0.1.0
|
|
491
|
+
* @category expressions
|
|
492
|
+
*/
|
|
493
|
+
export const notIn = (
|
|
494
|
+
expression: ExpressionInput,
|
|
495
|
+
list: ReadonlyArray<ExpressionInput>,
|
|
496
|
+
): Ast.Expression => Ast.operation('NOT IN', toExpression(expression), ...list.map(toExpression));
|
|
497
|
+
|
|
498
|
+
/**
|
|
499
|
+
* Calls any built-in function by name, e.g. `fn('STRLEN', v.name)`.
|
|
500
|
+
*
|
|
501
|
+
* @since 0.1.0
|
|
502
|
+
* @category expressions
|
|
503
|
+
*/
|
|
504
|
+
export const fn = (
|
|
505
|
+
name: Ast.BuiltInName,
|
|
506
|
+
...args: ReadonlyArray<ExpressionInput>
|
|
507
|
+
): Ast.Expression => Ast.operation(name, ...args.map(toExpression));
|
|
508
|
+
|
|
509
|
+
/**
|
|
510
|
+
* Calls an extension function (or XSD cast) by IRI.
|
|
511
|
+
*
|
|
512
|
+
* @since 0.1.0
|
|
513
|
+
* @category expressions
|
|
514
|
+
*/
|
|
515
|
+
export const call = (
|
|
516
|
+
iri: Term.NamedNode,
|
|
517
|
+
...args: ReadonlyArray<ExpressionInput>
|
|
518
|
+
): Ast.Expression => Ast.functionCall(iri, args.map(toExpression));
|
|
519
|
+
|
|
520
|
+
/** @since 0.1.0 @category expressions */
|
|
521
|
+
export const bound = (variable: Term.Variable): Ast.Expression => Ast.operation('BOUND', variable);
|
|
522
|
+
/** @since 0.1.0 @category expressions */
|
|
523
|
+
export const str = op('STR');
|
|
524
|
+
/** @since 0.1.0 @category expressions */
|
|
525
|
+
export const lang = op('LANG');
|
|
526
|
+
/** @since 0.1.0 @category expressions */
|
|
527
|
+
export const langMatches = op('LANGMATCHES');
|
|
528
|
+
/** @since 0.1.0 @category expressions */
|
|
529
|
+
export const datatype = op('DATATYPE');
|
|
530
|
+
/** @since 0.1.0 @category expressions */
|
|
531
|
+
export const iri = op('IRI');
|
|
532
|
+
/** @since 0.1.0 @category expressions */
|
|
533
|
+
export const regex = op('REGEX');
|
|
534
|
+
/** @since 0.1.0 @category expressions */
|
|
535
|
+
export const contains = op('CONTAINS');
|
|
536
|
+
/** @since 0.1.0 @category expressions */
|
|
537
|
+
export const strStarts = op('STRSTARTS');
|
|
538
|
+
/** @since 0.1.0 @category expressions */
|
|
539
|
+
export const strEnds = op('STRENDS');
|
|
540
|
+
/** @since 0.1.0 @category expressions */
|
|
541
|
+
export const strlen = op('STRLEN');
|
|
542
|
+
/** @since 0.1.0 @category expressions */
|
|
543
|
+
export const ucase = op('UCASE');
|
|
544
|
+
/** @since 0.1.0 @category expressions */
|
|
545
|
+
export const lcase = op('LCASE');
|
|
546
|
+
/** @since 0.1.0 @category expressions */
|
|
547
|
+
export const concat = op('CONCAT');
|
|
548
|
+
/** @since 0.1.0 @category expressions */
|
|
549
|
+
export const substr = op('SUBSTR');
|
|
550
|
+
/** @since 0.1.0 @category expressions */
|
|
551
|
+
export const replace = op('REPLACE');
|
|
552
|
+
/** @since 0.1.0 @category expressions */
|
|
553
|
+
export const coalesce = op('COALESCE');
|
|
554
|
+
/** @since 0.1.0 @category expressions */
|
|
555
|
+
export const ifThenElse = op('IF');
|
|
556
|
+
/** @since 0.1.0 @category expressions */
|
|
557
|
+
export const isIri = op('ISIRI');
|
|
558
|
+
/** @since 0.1.0 @category expressions */
|
|
559
|
+
export const isBlank = op('ISBLANK');
|
|
560
|
+
/** @since 0.1.0 @category expressions */
|
|
561
|
+
export const isLiteral = op('ISLITERAL');
|
|
562
|
+
/** @since 0.1.0 @category expressions */
|
|
563
|
+
export const isNumeric = op('ISNUMERIC');
|
|
564
|
+
/** @since 0.1.0 @category expressions */
|
|
565
|
+
export const sameTerm = op('SAMETERM');
|
|
566
|
+
|
|
567
|
+
/**
|
|
568
|
+
* `EXISTS { … }`
|
|
569
|
+
*
|
|
570
|
+
* @since 0.1.0
|
|
571
|
+
* @category expressions
|
|
572
|
+
*/
|
|
573
|
+
export const exists = (...patterns: ReadonlyArray<PatternInput>): Ast.Expression =>
|
|
574
|
+
Ast.exists(group(...patterns));
|
|
575
|
+
|
|
576
|
+
/**
|
|
577
|
+
* `NOT EXISTS { … }`
|
|
578
|
+
*
|
|
579
|
+
* @since 0.1.0
|
|
580
|
+
* @category expressions
|
|
581
|
+
*/
|
|
582
|
+
export const notExists = (...patterns: ReadonlyArray<PatternInput>): Ast.Expression =>
|
|
583
|
+
Ast.exists(group(...patterns), true);
|
|
584
|
+
|
|
585
|
+
const aggregate =
|
|
586
|
+
(name: Ast.AggregateName) =>
|
|
587
|
+
(expression: ExpressionInput, options?: { readonly distinct?: boolean }): Ast.Expression =>
|
|
588
|
+
Ast.aggregate(name, toExpression(expression), options);
|
|
589
|
+
|
|
590
|
+
/**
|
|
591
|
+
* `COUNT(*)` (no argument) or `COUNT(expr)`.
|
|
592
|
+
*
|
|
593
|
+
* @since 0.1.0
|
|
594
|
+
* @category aggregates
|
|
595
|
+
*/
|
|
596
|
+
export const count = (
|
|
597
|
+
expression?: ExpressionInput,
|
|
598
|
+
options?: { readonly distinct?: boolean },
|
|
599
|
+
): Ast.Expression =>
|
|
600
|
+
Ast.aggregate('COUNT', expression === undefined ? '*' : toExpression(expression), options);
|
|
601
|
+
/** @since 0.1.0 @category aggregates */
|
|
602
|
+
export const sum = aggregate('SUM');
|
|
603
|
+
/** @since 0.1.0 @category aggregates */
|
|
604
|
+
export const avg = aggregate('AVG');
|
|
605
|
+
/** @since 0.1.0 @category aggregates */
|
|
606
|
+
export const min = aggregate('MIN');
|
|
607
|
+
/** @since 0.1.0 @category aggregates */
|
|
608
|
+
export const max = aggregate('MAX');
|
|
609
|
+
/** @since 0.1.0 @category aggregates */
|
|
610
|
+
export const sample = aggregate('SAMPLE');
|
|
611
|
+
|
|
612
|
+
/**
|
|
613
|
+
* `GROUP_CONCAT(expr; SEPARATOR = sep)`
|
|
614
|
+
*
|
|
615
|
+
* @since 0.1.0
|
|
616
|
+
* @category aggregates
|
|
617
|
+
*/
|
|
618
|
+
export const groupConcat = (
|
|
619
|
+
expression: ExpressionInput,
|
|
620
|
+
options?: { readonly distinct?: boolean; readonly separator?: string },
|
|
621
|
+
): Ast.Expression => Ast.aggregate('GROUP_CONCAT', toExpression(expression), options);
|
|
622
|
+
|
|
623
|
+
/**
|
|
624
|
+
* A descending `ORDER BY` condition.
|
|
625
|
+
*
|
|
626
|
+
* @since 0.1.0
|
|
627
|
+
* @category modifiers
|
|
628
|
+
*/
|
|
629
|
+
export const desc = (expression: ExpressionInput): Ast.OrderCondition => ({
|
|
630
|
+
expression: toExpression(expression),
|
|
631
|
+
descending: true,
|
|
632
|
+
});
|
|
633
|
+
|
|
634
|
+
/**
|
|
635
|
+
* An ascending `ORDER BY` condition.
|
|
636
|
+
*
|
|
637
|
+
* @since 0.1.0
|
|
638
|
+
* @category modifiers
|
|
639
|
+
*/
|
|
640
|
+
export const asc = (expression: ExpressionInput): Ast.OrderCondition => ({
|
|
641
|
+
expression: toExpression(expression),
|
|
642
|
+
descending: false,
|
|
643
|
+
});
|
|
644
|
+
|
|
645
|
+
// -----------------------------------------------------------------------------
|
|
646
|
+
// Builders
|
|
647
|
+
// -----------------------------------------------------------------------------
|
|
648
|
+
|
|
649
|
+
type Kind = Ast.Query['_tag'];
|
|
650
|
+
|
|
651
|
+
type QueryOf<K extends Kind> = Extract<Ast.Query, { readonly _tag: K }>;
|
|
652
|
+
|
|
653
|
+
/**
|
|
654
|
+
* An immutable query builder. `K` is the query form; `R` and `O` are the
|
|
655
|
+
* required and optional variables of `SELECT` rows.
|
|
656
|
+
*
|
|
657
|
+
* @since 0.1.0
|
|
658
|
+
* @category models
|
|
659
|
+
*/
|
|
660
|
+
export class Builder<
|
|
661
|
+
K extends Kind,
|
|
662
|
+
R extends string = never,
|
|
663
|
+
O extends string = never,
|
|
664
|
+
> implements Pipeable {
|
|
665
|
+
/** @internal */
|
|
666
|
+
readonly query: QueryOf<K>;
|
|
667
|
+
constructor(query: QueryOf<K>) {
|
|
668
|
+
this.query = query;
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
private with(
|
|
672
|
+
patch: Partial<Ast.QueryBase> & Partial<Pick<Ast.SelectQuery, 'distinct' | 'reduced'>>,
|
|
673
|
+
): Builder<K, R, O> {
|
|
674
|
+
// SAFETY: patching fields of a query keeps its kind `K`; the spread only loses the
|
|
675
|
+
// discriminant's narrowing.
|
|
676
|
+
return new Builder({ ...this.query, ...patch } as QueryOf<K>);
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
private append(patterns: ReadonlyArray<Ast.Pattern>): Builder<K, R, O> {
|
|
680
|
+
return this.with({ where: group(this.query.where.patterns, patterns) });
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
/** Adds patterns to the `WHERE` clause. */
|
|
684
|
+
where(...patterns: ReadonlyArray<PatternInput>): Builder<K, R, O> {
|
|
685
|
+
return this.append(flatten(patterns));
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
/** Adds an `OPTIONAL { … }` block. */
|
|
689
|
+
optional(...patterns: ReadonlyArray<PatternInput>): Builder<K, R, O> {
|
|
690
|
+
return this.append([optional(...patterns)]);
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
/** Adds a `MINUS { … }` block. */
|
|
694
|
+
minus(...patterns: ReadonlyArray<PatternInput>): Builder<K, R, O> {
|
|
695
|
+
return this.append([minus(...patterns)]);
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
/** Adds a `UNION` of alternatives. */
|
|
699
|
+
union(...alternatives: ReadonlyArray<PatternInput>): Builder<K, R, O> {
|
|
700
|
+
return this.append([union(...alternatives)]);
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
/** Adds a `FILTER`. */
|
|
704
|
+
filter(expression: ExpressionInput): Builder<K, R, O> {
|
|
705
|
+
return this.append([filter(expression)]);
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
/** Adds a `BIND`. */
|
|
709
|
+
bind(expression: ExpressionInput, name: string | Term.Variable): Builder<K, R, O> {
|
|
710
|
+
return this.append([bind(expression, name)]);
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
/** Adds a `GRAPH` block. */
|
|
714
|
+
graph(name: Ast.VarOrIri, ...patterns: ReadonlyArray<PatternInput>): Builder<K, R, O> {
|
|
715
|
+
return this.append([graph(name, ...patterns)]);
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
/** Adds inline data. */
|
|
719
|
+
values(rows: Parameters<typeof values>[0]): Builder<K, R, O> {
|
|
720
|
+
return this.append([values(rows)]);
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
/** Adds `GROUP BY` conditions (expressions or `as(expr, name)`). */
|
|
724
|
+
groupBy(
|
|
725
|
+
...conditions: ReadonlyArray<ExpressionInput | Alias<string, boolean>>
|
|
726
|
+
): Builder<K, R, O> {
|
|
727
|
+
return this.with({
|
|
728
|
+
groupBy: [
|
|
729
|
+
...this.query.groupBy,
|
|
730
|
+
...conditions.map((c): Ast.GroupCondition =>
|
|
731
|
+
isAlias(c)
|
|
732
|
+
? { expression: c.expression, variable: Term.variable(c.name) }
|
|
733
|
+
: { expression: toExpression(c) },
|
|
734
|
+
),
|
|
735
|
+
],
|
|
736
|
+
});
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
/** Adds `HAVING` conditions. */
|
|
740
|
+
having(...conditions: ReadonlyArray<ExpressionInput>): Builder<K, R, O> {
|
|
741
|
+
return this.with({ having: [...this.query.having, ...conditions.map(toExpression)] });
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
/** Adds `ORDER BY` conditions (ascending unless wrapped with `desc`). */
|
|
745
|
+
orderBy(...conditions: ReadonlyArray<ExpressionInput | Ast.OrderCondition>): Builder<K, R, O> {
|
|
746
|
+
return this.with({
|
|
747
|
+
orderBy: [
|
|
748
|
+
...this.query.orderBy,
|
|
749
|
+
...conditions.map((c) => (isOrderCondition(c) ? c : asc(c))),
|
|
750
|
+
],
|
|
751
|
+
});
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
/** Sets `LIMIT`. */
|
|
755
|
+
limit(limit: number): Builder<K, R, O> {
|
|
756
|
+
return this.with({ limit });
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
/** Sets `OFFSET`. */
|
|
760
|
+
offset(offset: number): Builder<K, R, O> {
|
|
761
|
+
return this.with({ offset });
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
/** Makes a `SELECT` query `DISTINCT`. */
|
|
765
|
+
distinct(): Builder<K, R, O> {
|
|
766
|
+
return this.with({ distinct: true, reduced: false });
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
/** Makes a `SELECT` query `REDUCED`. */
|
|
770
|
+
reduced(): Builder<K, R, O> {
|
|
771
|
+
return this.with({ reduced: true, distinct: false });
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
/** Adds `FROM` graphs. */
|
|
775
|
+
from(...graphs: ReadonlyArray<Term.NamedNode>): Builder<K, R, O> {
|
|
776
|
+
const d = this.query.dataset ?? { default: [], named: [] };
|
|
777
|
+
return this.with({ dataset: { default: [...d.default, ...graphs], named: d.named } });
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
/** Adds `FROM NAMED` graphs. */
|
|
781
|
+
fromNamed(...graphs: ReadonlyArray<Term.NamedNode>): Builder<K, R, O> {
|
|
782
|
+
const d = this.query.dataset ?? { default: [], named: [] };
|
|
783
|
+
return this.with({ dataset: { default: d.default, named: [...d.named, ...graphs] } });
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
/** Declares prefixes (used when printing). */
|
|
787
|
+
prefixes(prefixes: Readonly<Record<string, string>>): Builder<K, R, O> {
|
|
788
|
+
return this.with({
|
|
789
|
+
prologue: {
|
|
790
|
+
...this.query.prologue,
|
|
791
|
+
prefixes: { ...this.query.prologue.prefixes, ...prefixes },
|
|
792
|
+
},
|
|
793
|
+
});
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
/** The query AST. */
|
|
797
|
+
build(): QueryOf<K> {
|
|
798
|
+
return this.query;
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
/** The query as SPARQL text. */
|
|
802
|
+
toString(): string {
|
|
803
|
+
return Generator.print(this.query);
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
pipe() {
|
|
807
|
+
return pipeArguments(this, arguments);
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
const empty = Ast.group([]);
|
|
812
|
+
|
|
813
|
+
const projectionItem = (item: SelectItem): Term.Variable | Ast.Projection => {
|
|
814
|
+
if (Predicate.isString(item)) return Term.variable(item);
|
|
815
|
+
return Match.value(item).pipe(
|
|
816
|
+
Match.tag('Variable', (x): Term.Variable | Ast.Projection => x),
|
|
817
|
+
Match.tag('Maybe', (m) => Term.variable(m.name)),
|
|
818
|
+
Match.tag('Alias', (a) => Ast.projection(a.expression, Term.variable(a.name))),
|
|
819
|
+
Match.exhaustive,
|
|
820
|
+
);
|
|
821
|
+
};
|
|
822
|
+
|
|
823
|
+
/**
|
|
824
|
+
* Starts a `SELECT` query. With no arguments, `SELECT *` (rows are then
|
|
825
|
+
* untyped records).
|
|
826
|
+
*
|
|
827
|
+
* @since 0.1.0
|
|
828
|
+
* @category constructors
|
|
829
|
+
*/
|
|
830
|
+
export const select = <const Items extends ReadonlyArray<SelectItem>>(
|
|
831
|
+
...items: Items
|
|
832
|
+
): Builder<'Select', RequiredOf<Items[number]>, OptionalOf<Items[number]>> =>
|
|
833
|
+
new Builder(
|
|
834
|
+
Ast.select({
|
|
835
|
+
where: empty,
|
|
836
|
+
projection: Arr.isReadonlyArrayEmpty(items) ? '*' : items.map(projectionItem),
|
|
837
|
+
}),
|
|
838
|
+
);
|
|
839
|
+
|
|
840
|
+
/**
|
|
841
|
+
* Starts an `ASK` query.
|
|
842
|
+
*
|
|
843
|
+
* @since 0.1.0
|
|
844
|
+
* @category constructors
|
|
845
|
+
*/
|
|
846
|
+
export const ask = (): Builder<'Ask'> => new Builder(Ast.ask({ where: empty }));
|
|
847
|
+
|
|
848
|
+
/**
|
|
849
|
+
* Starts a `CONSTRUCT` query with a template.
|
|
850
|
+
*
|
|
851
|
+
* @since 0.1.0
|
|
852
|
+
* @category constructors
|
|
853
|
+
*/
|
|
854
|
+
export const construct = (
|
|
855
|
+
...template: ReadonlyArray<Ast.TriplePattern | Ast.PathPattern>
|
|
856
|
+
): Builder<'Construct'> =>
|
|
857
|
+
new Builder(
|
|
858
|
+
Ast.construct({
|
|
859
|
+
where: empty,
|
|
860
|
+
template: template.filter((t): t is Ast.TriplePattern =>
|
|
861
|
+
Predicate.isTagged(t, 'TriplePattern'),
|
|
862
|
+
),
|
|
863
|
+
}),
|
|
864
|
+
);
|
|
865
|
+
|
|
866
|
+
/**
|
|
867
|
+
* Starts a `DESCRIBE` query.
|
|
868
|
+
*
|
|
869
|
+
* @since 0.1.0
|
|
870
|
+
* @category constructors
|
|
871
|
+
*/
|
|
872
|
+
export const describe = (...terms: ReadonlyArray<Ast.VarOrIri>): Builder<'Describe'> =>
|
|
873
|
+
new Builder(Ast.describe({ terms: Arr.isReadonlyArrayEmpty(terms) ? '*' : terms }));
|
|
874
|
+
|
|
875
|
+
// -----------------------------------------------------------------------------
|
|
876
|
+
// Execution
|
|
877
|
+
// -----------------------------------------------------------------------------
|
|
878
|
+
|
|
879
|
+
/**
|
|
880
|
+
* Executes a `SELECT` builder, streaming typed rows.
|
|
881
|
+
*
|
|
882
|
+
* @since 0.1.0
|
|
883
|
+
* @category execution
|
|
884
|
+
*/
|
|
885
|
+
export const execute = <R extends string, O extends string>(
|
|
886
|
+
builder: Builder<'Select', R, O>,
|
|
887
|
+
options?: Engine.RequestOptions,
|
|
888
|
+
): Stream.Stream<Row<R, O>, Engine.SparqlError, Engine.SparqlEngine> =>
|
|
889
|
+
Stream.unwrap(
|
|
890
|
+
Effect.gen(function* () {
|
|
891
|
+
const engine = yield* Engine.SparqlEngine;
|
|
892
|
+
const result = yield* engine.select(builder.build(), options);
|
|
893
|
+
// SAFETY: the builder's type parameters track the projected variables, so a row has exactly
|
|
894
|
+
// `R` and optional `O` keys.
|
|
895
|
+
return Stream.map(result.bindings, (b) => B.toRecord(b) as Row<R, O>);
|
|
896
|
+
}),
|
|
897
|
+
);
|
|
898
|
+
|
|
899
|
+
/**
|
|
900
|
+
* Executes a `SELECT` builder and collects all rows.
|
|
901
|
+
*
|
|
902
|
+
* @since 0.1.0
|
|
903
|
+
* @category execution
|
|
904
|
+
*/
|
|
905
|
+
export const executeAll = <R extends string, O extends string>(
|
|
906
|
+
builder: Builder<'Select', R, O>,
|
|
907
|
+
options?: Engine.RequestOptions,
|
|
908
|
+
): Effect.Effect<ReadonlyArray<Row<R, O>>, Engine.SparqlError, Engine.SparqlEngine> =>
|
|
909
|
+
Stream.runCollect(execute(builder, options));
|
|
910
|
+
|
|
911
|
+
/**
|
|
912
|
+
* Executes a `SELECT` builder and decodes each row with a schema (whose
|
|
913
|
+
* fields are typically `TermSchema` codecs).
|
|
914
|
+
*
|
|
915
|
+
* @since 0.1.0
|
|
916
|
+
* @category execution
|
|
917
|
+
*/
|
|
918
|
+
export const decode = <R extends string, O extends string, A, RD>(
|
|
919
|
+
builder: Builder<'Select', R, O>,
|
|
920
|
+
schema: Schema.Decoder<A, RD>,
|
|
921
|
+
options?: Engine.RequestOptions,
|
|
922
|
+
): Stream.Stream<A, Engine.SparqlError | Schema.SchemaError, Engine.SparqlEngine | RD> =>
|
|
923
|
+
Stream.mapEffect(execute(builder, options), (row) => Schema.decodeUnknownEffect(schema)(row));
|
|
924
|
+
|
|
925
|
+
/**
|
|
926
|
+
* Executes an `ASK` builder.
|
|
927
|
+
*
|
|
928
|
+
* @since 0.1.0
|
|
929
|
+
* @category execution
|
|
930
|
+
*/
|
|
931
|
+
export const executeAsk = (
|
|
932
|
+
builder: Builder<'Ask'>,
|
|
933
|
+
options?: Engine.RequestOptions,
|
|
934
|
+
): Effect.Effect<boolean, Engine.SparqlError, Engine.SparqlEngine> =>
|
|
935
|
+
Effect.flatMap(Effect.service(Engine.SparqlEngine), (engine) =>
|
|
936
|
+
engine.ask(builder.build(), options),
|
|
937
|
+
);
|
|
938
|
+
|
|
939
|
+
/**
|
|
940
|
+
* Executes a `CONSTRUCT` or `DESCRIBE` builder, streaming triples.
|
|
941
|
+
*
|
|
942
|
+
* @since 0.1.0
|
|
943
|
+
* @category execution
|
|
944
|
+
*/
|
|
945
|
+
export const executeGraph = (
|
|
946
|
+
builder: Builder<'Construct'> | Builder<'Describe'>,
|
|
947
|
+
options?: Engine.RequestOptions,
|
|
948
|
+
): Stream.Stream<Term.Quad, Engine.SparqlError, Engine.SparqlEngine> =>
|
|
949
|
+
Stream.unwrap(
|
|
950
|
+
Effect.flatMap(Effect.service(Engine.SparqlEngine), (engine) =>
|
|
951
|
+
engine.construct(builder.build(), options),
|
|
952
|
+
),
|
|
953
|
+
);
|