@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":"SqlStore-BBqFx-Wl.mjs","names":["Store.StoreError","Term.isTriple","Dialect.fromClient","tables","Dialect.tables","Term.triple","Term.isNamedNode","Term.isLiteral","Enc.rowKey","Enc.encode","Term.isDefaultGraph","Enc.decode","Enc.isComponentIds","Term.Quad","Term.defaultGraph","compile","Translation.constants","Translation.compile","B.fromEntries","Term.Literal","Translation.isRisky","Term.namedNode","Store.QuadStore"],"sources":["../src/sparql/sql/SqlStore.ts"],"sourcesContent":["/**\n * A SQL storage backend for the SPARQL engine, built on Effect's SQL\n * abstraction (`effect/sql`).\n *\n * The store keeps a dictionary of interned terms (RDF 1.2 triple terms\n * included, referencing their components) and a table of quads of term ids\n * indexed in four orders (`spog`, `posg`, `ospg`, `gspo`). It implements the\n * `QuadStore` service of `@thomasfosterau/effect-rdf/sparql` — streaming pattern\n * matching, statistics, updates, named graph management and transactions\n * (mapped to `SqlClient.withTransaction`) — and a `QueryCapability` that\n * translates SPARQL algebra to SQL (see `Translation`), so that the engine\n * runs whole queries (or the largest translatable subtrees) in the database.\n *\n * The store is driver-agnostic: `layer` runs over whichever `SqlClient`\n * the context provides, in the SQLite (3.35 or later) or PostgreSQL dialect\n * (`Dialect.fromClient`). A backend for one driver (a ready store layer that\n * also provides that driver's `SqlClient`) is a package of its own,\n * `@thomasfosterau/effect-sparql-<driver>`.\n *\n * @since 0.1.0\n */\nimport * as Arr from 'effect/Array';\nimport * as Context from 'effect/Context';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport * as Option from 'effect/Option';\nimport * as Predicate from 'effect/Predicate';\nimport * as Result from 'effect/Result';\nimport * as MutableHashMap from 'effect/MutableHashMap';\nimport * as MutableHashSet from 'effect/MutableHashSet';\nimport * as Order from 'effect/Order';\nimport * as Migrator from 'effect/sql/Migrator';\nimport * as SqlClient from 'effect/sql/SqlClient';\nimport * as SqlError from 'effect/sql/SqlError';\nimport * as Stream from 'effect/Stream';\nimport * as Term from '../../Term.ts';\nimport type * as Algebra from '../Algebra.ts';\nimport * as B from '../Bindings.ts';\nimport * as Store from '../Store.ts';\nimport * as Dialect from './Dialect.ts';\nimport * as Enc from './internal/encoding.ts';\nimport * as Translation from './Translation.ts';\n\n// -----------------------------------------------------------------------------\n// Models\n// -----------------------------------------------------------------------------\n\n/**\n * An event reported to `SqlStoreOptions.onQuery` for every algebra node the\n * engine offers to the store: either it was translated to SQL and executed,\n * or it was declined (and evaluated by the engine).\n *\n * @since 0.1.0\n * @category models\n */\nexport type QueryEvent =\n | {\n readonly _tag: 'Executed';\n readonly operation: Algebra.Operation;\n readonly sql: string;\n readonly params: ReadonlyArray<unknown>;\n readonly rows: number;\n }\n | {\n readonly _tag: 'Declined';\n readonly operation: Algebra.Operation;\n readonly reason: string;\n };\n\n/**\n * Options of the SQL store.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface SqlStoreOptions {\n /** The SQL dialect; detected from the `SqlClient` by default. */\n readonly dialect?: Dialect.Dialect | undefined;\n /** The prefix of the table names (default `rdf_`). */\n readonly tablePrefix?: string | undefined;\n /** Whether to create / migrate the schema when the store is built (default `true`). */\n readonly migrate?: boolean | undefined;\n /** Whether to translate SPARQL algebra to SQL (default `true`). */\n readonly translate?: boolean | undefined;\n /** The number of quads per insert / delete statement (default 500). */\n readonly batchSize?: number | undefined;\n /** The number of quads per page of `match` (default 5000). */\n readonly pageSize?: number | undefined;\n /** Debug hook: called for every algebra node offered to the store. */\n readonly onQuery?: ((event: QueryEvent) => void) | undefined;\n}\n\n/**\n * The SQL store: a `QuadStore` with native SPARQL-to-SQL evaluation and some\n * SQL-specific extras.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface SqlStoreShape extends Store.QuadStoreShape {\n readonly dialect: Dialect.Dialect;\n readonly tables: Dialect.Tables;\n /** The native algebra evaluation (also available as `query`). */\n readonly capability: Store.QueryCapability;\n /**\n * Translates an algebra tree for the given evaluation context, resolving\n * constants against the dictionary (for inspection and debugging).\n */\n readonly compile: (\n op: Algebra.Operation,\n context?: Partial<Pick<Store.EvaluationContext, 'dataset' | 'activeGraph'>>,\n ) => Effect.Effect<Result.Result<Translation.CompiledQuery, string>, Store.StoreError>;\n /** The number of terms in the dictionary. */\n readonly termCount: Effect.Effect<number, Store.StoreError>;\n}\n\n/**\n * The SQL store service.\n *\n * @since 0.1.0\n * @category services\n */\nexport class SqlStore extends Context.Service<SqlStore, SqlStoreShape>()(\n '@thomasfosterau/effect-rdf/sparql/sql/SqlStore',\n) {}\n\n// -----------------------------------------------------------------------------\n// Helpers\n// -----------------------------------------------------------------------------\n\nconst storeError = (message: string) => (cause: unknown) =>\n cause instanceof Store.StoreError\n ? cause\n : new Store.StoreError({\n message: `${message}: ${Predicate.isError(cause) ? cause.message : String(cause)}`,\n cause,\n });\n\nconst chunks = <A>(items: ReadonlyArray<A>, size: number): Array<ReadonlyArray<A>> =>\n Array.from({ length: Math.ceil(items.length / size) }, (_, i) =>\n items.slice(i * size, (i + 1) * size),\n );\n\n/** The distinct values of `items`, in order of first occurrence. */\nconst distinct = <A extends string | number>(items: Iterable<A>): Array<A> =>\n Arr.fromIterable(MutableHashSet.fromIterable(items));\n\nconst num = (v: unknown): number => (Predicate.isNumber(v) ? v : Number(v));\n// The text columns come back as strings; a count or other numeric cell as a number (or a bigint);\n// a missing cell is nullish and reads as the empty string.\nconst str = (v: unknown): string =>\n Predicate.isString(v)\n ? v\n : Predicate.isNumber(v) || Predicate.isBigInt(v) || Predicate.isBoolean(v)\n ? `${v}`\n : '';\n\nconst depth = (t: Term.GroundTerm): number =>\n Term.isTriple(t) ? 1 + Math.max(depth(t.subject), depth(t.predicate), depth(t.object)) : 0;\n\nconst CACHE_LIMIT = 200_000;\n\nconst DEFAULT_DATASET: Store.DatasetSpec = { defaultGraph: 'default', namedGraphs: 'all' };\n\n/**\n * The schema migrations of the store (for `effect/sql/Migrator`): a record of\n * `<id>_<name>` to migration effect.\n *\n * @since 0.1.0\n * @category schema\n */\nexport const migrations = (dialect: Dialect.Dialect, tables: Dialect.Tables) => ({\n '1_create_rdf_store': Effect.gen(function* () {\n const sql = yield* SqlClient.SqlClient;\n yield* Effect.forEach(dialect.schema(tables), (statement) => sql.unsafe(statement), {\n concurrency: 1,\n discard: true,\n });\n }),\n});\n\n/**\n * Creates or migrates the store's schema.\n *\n * @since 0.1.0\n * @category schema\n */\nexport const migrate = (\n options: Pick<SqlStoreOptions, 'dialect' | 'tablePrefix'> = {},\n): Effect.Effect<void, Store.StoreError, SqlClient.SqlClient> =>\n Effect.gen(function* () {\n const sql = yield* SqlClient.SqlClient;\n const dialect = options.dialect ?? (yield* Dialect.fromClient(sql));\n const tables = Dialect.tables(options.tablePrefix);\n yield* Migrator.make({})({\n loader: Migrator.fromRecord(migrations(dialect, tables)),\n table: tables.migrations,\n });\n }).pipe(Effect.mapError(storeError('Migration failed')));\n\n// -----------------------------------------------------------------------------\n// Constructor\n// -----------------------------------------------------------------------------\n\ninterface DecodeState {\n readonly known: MutableHashMap.MutableHashMap<number, Term.GroundTerm>;\n readonly triples: MutableHashMap.MutableHashMap<number, Enc.ComponentIds>;\n}\n\n/** Term ids by term key. */\ntype Ids = MutableHashMap.MutableHashMap<string, number>;\n\n/**\n * The term with id `id` of a decode state that `complete` has filled: every\n * id is known, so a missing one is a defect.\n */\nconst termOf = (state: DecodeState, id: number): Term.GroundTerm => {\n const known = MutableHashMap.get(state.known, id);\n if (Option.isSome(known)) return known.value;\n const comps = MutableHashMap.get(state.triples, id);\n if (Option.isNone(comps)) throw new Store.StoreError({ message: `Unknown term id ${id}` });\n const [s, p, o] = comps.value;\n const t = Term.triple(\n termAs(state, s, isSubject, 'subject'),\n termAs(state, p, Term.isNamedNode, 'predicate'),\n termOf(state, o),\n );\n MutableHashMap.set(state.known, id, t);\n return t;\n};\n\n/**\n * The term with id `id`, which the store only ever wrote in a position of\n * kind `T` (so another kind is a defect).\n */\nconst termAs = <T extends Term.GroundTerm>(\n state: DecodeState,\n id: number,\n is: Predicate.Refinement<Term.GroundTerm, T>,\n position: string,\n): T => {\n const t = termOf(state, id);\n if (is(t)) return t;\n throw new Store.StoreError({ message: `Term id ${id} cannot be a ${position}` });\n};\n\n// A ground term is a subject unless it is a literal, and a graph name unless it is also not a\n// triple term (the fewest checks, as these run for every decoded quad).\nconst isSubject = (t: Term.GroundTerm): t is Term.Subject => !Term.isLiteral(t);\n\nconst isGraphName = (t: Term.GroundTerm): t is Term.NamedNode | Term.BlankNode =>\n !Term.isLiteral(t) && !Term.isTriple(t);\n\n/** The dictionary key of a `id, kind, value, datatype, lang, dir` result row. */\nconst rowKeyOf = (r: ReadonlyArray<unknown>) =>\n Enc.rowKey({\n kind: num(r[1]),\n value: str(r[2]),\n datatype: str(r[3]),\n lang: str(r[4]),\n dir: str(r[5]),\n });\n\n/** A term to intern, its dictionary row and the row's key. */\ninterface Encoded {\n readonly term: Term.GroundTerm;\n readonly row: Enc.TermRow;\n readonly key: string;\n}\n\n/** A dictionary row and its id, if it has one. */\ninterface Found {\n readonly encoded: Encoded;\n readonly id: Option.Option<number>;\n}\n\nconst withKey = (term: Term.GroundTerm, row: Enc.TermRow): Encoded => ({\n term,\n row,\n key: Enc.rowKey(row),\n});\n\n/**\n * The dictionary rows of one depth level of terms; a triple term whose\n * components have no id yet is left out.\n */\nconst encodeLevel = (\n level: MutableHashMap.MutableHashMap<string, Term.GroundTerm>,\n ids: Ids,\n): Array<Encoded> =>\n Arr.filterMap(MutableHashMap.values(level), (t): Result.Result<Encoded, void> => {\n if (!Term.isTriple(t)) return Result.succeed(withKey(t, Enc.encode(t)));\n const s = MutableHashMap.get(ids, t.subject.key);\n const p = MutableHashMap.get(ids, t.predicate.key);\n const o = MutableHashMap.get(ids, t.object.key);\n return Option.isSome(s) && Option.isSome(p) && Option.isSome(o)\n ? Result.succeed(withKey(t, Enc.encode(t, [s.value, p.value, o.value])))\n : Result.failVoid;\n });\n\nconst newState = (): DecodeState => ({\n known: MutableHashMap.empty(),\n triples: MutableHashMap.empty(),\n});\n\nconst isResolved = (state: DecodeState, c: number) =>\n Option.isSome(MutableHashMap.get(state.known, c)) ||\n Option.isSome(MutableHashMap.get(state.triples, c));\n\n/** The id of a term or graph (`0` for the default graph), if it has one. */\nconst idIn = (ids: Ids, t: Term.GroundTerm | Term.DefaultGraph): Option.Option<number> =>\n Term.isDefaultGraph(t) ? Option.some(0) : MutableHashMap.get(ids, t.key);\n\n/** The `s, p, o, g` ids of a quad, if all its terms have one. */\nconst quadRow = (\n ids: Ids,\n q: Term.Quad,\n): Result.Result<readonly [number, number, number, number], void> => {\n const s = MutableHashMap.get(ids, q.subject.key);\n const p = MutableHashMap.get(ids, q.predicate.key);\n const o = MutableHashMap.get(ids, q.object.key);\n const g = idIn(ids, q.graph);\n return Option.isSome(s) && Option.isSome(p) && Option.isSome(o) && Option.isSome(g)\n ? Result.succeed([s.value, p.value, o.value, g.value] as const)\n : Result.failVoid;\n};\n\nconst INDEXES = [\n ['s', 'p', 'o', 'g'],\n ['p', 'o', 's', 'g'],\n ['o', 's', 'p', 'g'],\n ['g', 's', 'p', 'o'],\n] as const;\n\n/** The number of leading columns of an index that are bound. */\nconst boundPrefix = (idx: ReadonlyArray<string>, bound: MutableHashSet.MutableHashSet<string>) => {\n const i = idx.findIndex((c) => !MutableHashSet.has(bound, c));\n return i < 0 ? idx.length : i;\n};\n\n/** The index whose longest prefix of columns is bound (the first on a tie). */\ninterface BestIndex {\n readonly best: ReadonlyArray<string>;\n readonly prefix: number;\n}\n\nconst indexFor = (bound: MutableHashSet.MutableHashSet<string>): ReadonlyArray<string> => {\n const first: BestIndex = { best: INDEXES[0], prefix: -1 };\n return Arr.reduce(INDEXES, first, (acc, idx): BestIndex => {\n const n = boundPrefix(idx, bound);\n return n > acc.prefix ? { best: idx, prefix: n } : acc;\n }).best;\n};\n\n/** Where an output column of a compiled query starts in its result rows. */\ninterface ColumnAt {\n readonly column: Translation.OutputColumn;\n readonly at: number;\n}\n\nconst columnLayout = (columns: ReadonlyArray<Translation.OutputColumn>): ReadonlyArray<ColumnAt> =>\n Arr.mapAccum(columns, 0, (at, column) => [\n at + (column.type === 'int' ? 1 : 6),\n { column, at },\n ])[1];\n\n/**\n * Creates a SQL store over the `SqlClient` service.\n *\n * @since 0.1.0\n * @category constructors\n */\nexport const make = (\n options: SqlStoreOptions = {},\n): Effect.Effect<SqlStoreShape, Store.StoreError, SqlClient.SqlClient> =>\n Effect.gen(function* () {\n const sql = yield* SqlClient.SqlClient;\n const dialect =\n options.dialect ??\n (yield* Effect.mapError(Dialect.fromClient(sql), storeError('Unsupported database')));\n const tables = Dialect.tables(options.tablePrefix);\n if (options.migrate !== false) yield* migrate({ dialect, tablePrefix: options.tablePrefix });\n\n const T = tables.terms;\n const Qt = tables.quads;\n const Gt = tables.graphs;\n const batchSize = Math.max(1, Math.min(options.batchSize ?? 500, 1000));\n const pageSize = Math.max(1, options.pageSize ?? 5000);\n const onQuery = options.onQuery;\n const ph = dialect.placeholder;\n\n // Caches of the (append-only) dictionary, only filled outside transactions.\n const idCache: Ids = MutableHashMap.empty();\n const termCache = MutableHashMap.empty<number, Term.GroundTerm>();\n\n const inTransaction = Effect.map(Effect.serviceOption(sql.transactionService), Option.isSome);\n\n const run = (text: string, params: ReadonlyArray<unknown> = []) =>\n sql.unsafe(text, params).values;\n const exec = (text: string, params: ReadonlyArray<unknown> = []) =>\n Effect.asVoid(sql.unsafe(text, params).raw);\n\n // --- term dictionary ------------------------------------------------------\n\n const lookupRows = (rows: ReadonlyArray<Encoded>) => {\n const found: Ids = MutableHashMap.empty();\n const values = distinct(rows.map((r) => r.row.value));\n return Effect.as(\n Effect.forEach(\n chunks(values, 500),\n (chunk) => {\n const list = chunk\n .map((_, i) => dialect.valueKey(dialect.castText(ph(i + 1))))\n .join(', ');\n return Effect.map(\n run(\n `SELECT id, kind, value, datatype, lang, dir FROM ${T} WHERE ${dialect.valueKey('value')} IN (${list})`,\n chunk,\n ),\n (result) =>\n result.forEach((r) => {\n MutableHashMap.set(found, rowKeyOf(r), num(r[0]));\n }),\n );\n },\n { concurrency: 1, discard: true },\n ),\n found,\n );\n };\n\n /** Inserts dictionary rows; returns the ids of the rows that were new. */\n const insertRows = (rows: ReadonlyArray<Encoded>) =>\n Effect.gen(function* () {\n const inserted: Ids = MutableHashMap.empty();\n yield* Effect.forEach(\n chunks(rows, 500),\n Effect.fnUntraced(function* (chunk) {\n const params: Array<unknown> = [];\n const tuples = chunk.map(({ row: r }) => {\n const base = params.length;\n // An absent component or number is SQL `NULL`.\n params.push(\n r.kind,\n r.value,\n r.datatype,\n r.lang,\n r.dir,\n Option.getOrNull(r.sub),\n Option.getOrNull(r.pre),\n Option.getOrNull(r.obj),\n r.cls,\n Option.getOrNull(r.num),\n );\n return `(${Array.from({ length: 10 }, (_, i) => {\n const p = ph(base + i + 1);\n return i >= 1 && i <= 4\n ? dialect.castText(p)\n : i === 9\n ? dialect.castDouble(p)\n : dialect.castId(p);\n }).join(', ')})`;\n });\n const result = yield* run(\n `INSERT INTO ${T} (kind, value, datatype, lang, dir, sub, pre, obj, cls, num) VALUES ${tuples.join(', ')} ON CONFLICT DO NOTHING RETURNING id, kind, value, datatype, lang, dir`,\n params,\n );\n result.forEach((r) => {\n MutableHashMap.set(inserted, rowKeyOf(r), num(r[0]));\n });\n }),\n { concurrency: 1, discard: true },\n );\n const classes = distinct(rows.map((r) => r.row.cls));\n if (Arr.isReadonlyArrayNonEmpty(classes)) {\n yield* exec(\n `INSERT INTO ${tables.classes} (cls) VALUES ${classes.map((c) => `(${c})`).join(', ')} ON CONFLICT DO NOTHING`,\n );\n }\n return inserted;\n });\n\n /**\n * The ids of dictionary rows (none for a row not in the dictionary). With\n * `create`, rows are inserted first (new rows come back with their ids) and\n * the rest looked up.\n */\n const findIds = (rows: ReadonlyArray<Encoded>, create: boolean) =>\n Effect.gen(function* () {\n if (!create) {\n const found = yield* lookupRows(rows);\n return rows.map((encoded): Found => ({\n encoded,\n id: MutableHashMap.get(found, encoded.key),\n }));\n }\n const inserted = yield* insertRows(rows);\n const first = rows.map((encoded): Found => ({\n encoded,\n id: MutableHashMap.get(inserted, encoded.key),\n }));\n const existing = first.filter(({ id }) => Option.isNone(id)).map(({ encoded }) => encoded);\n if (Arr.isReadonlyArrayEmpty(existing)) return first;\n const more = yield* lookupRows(existing);\n return first.map((f): Found =>\n Option.isSome(f.id)\n ? f\n : { encoded: f.encoded, id: MutableHashMap.get(more, f.encoded.key) },\n );\n });\n\n /**\n * The dictionary ids of terms (by key). With `create`, missing terms are\n * interned; otherwise they are absent from the result.\n */\n const resolveTerms = (terms: Iterable<Term.GroundTerm>, create: boolean) =>\n Effect.gen(function* () {\n const cacheable = !(yield* inTransaction);\n const result: Ids = MutableHashMap.empty();\n // The terms to look up by depth (components before the triple terms using them).\n const levels = MutableHashMap.empty<\n number,\n MutableHashMap.MutableHashMap<string, Term.GroundTerm>\n >();\n const levelAt = (d: number) => {\n const found = MutableHashMap.get(levels, d);\n if (Option.isSome(found)) return found.value;\n const level = MutableHashMap.empty<string, Term.GroundTerm>();\n MutableHashMap.set(levels, d, level);\n return level;\n };\n const add = (t: Term.GroundTerm): void => {\n if (Option.isSome(MutableHashMap.get(result, t.key))) return;\n const cached = MutableHashMap.get(idCache, t.key);\n if (Option.isSome(cached)) {\n MutableHashMap.set(result, t.key, cached.value);\n return;\n }\n const level = levelAt(depth(t));\n if (Option.isSome(MutableHashMap.get(level, t.key))) return;\n MutableHashMap.set(level, t.key, t);\n if (Term.isTriple(t)) {\n add(t.subject);\n add(t.predicate);\n add(t.object);\n }\n };\n Arr.fromIterable(terms).forEach((t) => add(t));\n const depths = Arr.sort(MutableHashMap.keys(levels), Order.Number);\n yield* Effect.forEach(\n depths,\n Effect.fnUntraced(function* (d) {\n const rows = encodeLevel(levelAt(d), result);\n if (Arr.isReadonlyArrayEmpty(rows)) return;\n const found = yield* findIds(rows, create);\n found.forEach(({ encoded: { term }, id }) => {\n if (Option.isNone(id)) return;\n MutableHashMap.set(result, term.key, id.value);\n if (cacheable) {\n if (MutableHashMap.size(idCache) >= CACHE_LIMIT) MutableHashMap.clear(idCache);\n MutableHashMap.set(idCache, term.key, id.value);\n }\n });\n }),\n { concurrency: 1, discard: true },\n );\n return result;\n });\n\n // --- decoding -------------------------------------------------------------\n\n /**\n * Records the term with id `id` whose `kind, value, datatype, lang, dir`\n * columns start at `row[at]` (`kind` is SQL `NULL` for an id with no term\n * row).\n */\n const addRow = (state: DecodeState, id: number, row: ReadonlyArray<unknown>, at: number) => {\n if (isResolved(state, id)) return;\n const cached = MutableHashMap.get(termCache, id);\n if (Option.isSome(cached)) {\n MutableHashMap.set(state.known, id, cached.value);\n return;\n }\n const kind = row[at];\n if (Predicate.isNullish(kind)) return;\n const t = Enc.decode(\n num(kind),\n str(row[at + 1]),\n str(row[at + 2]),\n str(row[at + 3]),\n str(row[at + 4]),\n );\n if (Enc.isComponentIds(t)) MutableHashMap.set(state.triples, id, t);\n else MutableHashMap.set(state.known, id, t);\n };\n\n /** Reads the dictionary rows of `ids` (one chunk) into a decode state. */\n const fetchTerms = (state: DecodeState, ids: ReadonlyArray<number>) =>\n Effect.map(\n run(\n `SELECT id, kind, value, datatype, lang, dir FROM ${T} WHERE id IN (${ids.join(', ')})`,\n ),\n (rows) =>\n rows.forEach((r) => {\n addRow(state, num(r[0]), r, 1);\n }),\n );\n\n /** Fetches the components of the triple terms of a decode state, until none is missing. */\n const complete = (\n state: DecodeState,\n ): Effect.Effect<void, Store.StoreError | SqlError.SqlError> =>\n Effect.suspend(() => {\n const missing = MutableHashSet.empty<number>();\n MutableHashMap.forEach(state.triples, (comps) =>\n comps.forEach((c) => {\n if (!isResolved(state, c)) MutableHashSet.add(missing, c);\n }),\n );\n // The cached terms need no query.\n const unknown = Arr.filter(Arr.fromIterable(missing), (c) =>\n Option.match(MutableHashMap.get(termCache, c), {\n onNone: () => true,\n onSome: (cached) => {\n MutableHashMap.set(state.known, c, cached);\n return false;\n },\n }),\n );\n if (Arr.isReadonlyArrayEmpty(unknown)) return Effect.void;\n return Effect.forEach(\n chunks(unknown, 500),\n (chunk) =>\n Effect.flatMap(fetchTerms(state, chunk), () =>\n Option.match(\n Arr.findFirst(chunk, (c) => !isResolved(state, c)),\n {\n onNone: () => Effect.void,\n onSome: (c) =>\n Effect.fail(new Store.StoreError({ message: `Unknown term id ${c}` })),\n },\n ),\n ),\n { concurrency: 1, discard: true },\n ).pipe(Effect.flatMap(() => complete(state)));\n });\n\n const remember = (state: DecodeState) =>\n Effect.map(inTransaction, (inTx) => {\n if (inTx) return;\n if (MutableHashMap.size(termCache) + MutableHashMap.size(state.known) > CACHE_LIMIT) {\n MutableHashMap.clear(termCache);\n }\n MutableHashMap.forEach(state.known, (t, id) => {\n MutableHashMap.set(termCache, id, t);\n });\n });\n\n // --- quads ------------------------------------------------------------------\n\n const patternConditions = (pattern: Store.QuadPattern) =>\n Effect.gen(function* () {\n const positions = [\n ['s', pattern.subject],\n ['p', pattern.predicate],\n ['o', pattern.object],\n ['g', pattern.graph],\n ] as const;\n const present = Arr.filterMap(positions, ([column, t]) =>\n t === undefined ? Result.failVoid : Result.succeed({ column, t }),\n );\n const ids = yield* resolveTerms(\n Arr.filterMap(present, ({ t }) =>\n Term.isDefaultGraph(t) ? Result.failVoid : Result.succeed(t),\n ),\n false,\n );\n // A term that is not in the dictionary matches nothing.\n return Option.all(\n present.map(({ column, t }) =>\n Option.map(idIn(ids, t), (id): readonly [string, number] => [column, id]),\n ),\n );\n });\n\n const decodeQuads = (rows: ReadonlyArray<ReadonlyArray<unknown>>) =>\n Effect.gen(function* () {\n const state = newState();\n rows.forEach((r) => {\n addRow(state, num(r[0]), r, 4);\n addRow(state, num(r[1]), r, 9);\n addRow(state, num(r[2]), r, 14);\n const g = num(r[3]);\n if (g !== 0) addRow(state, g, r, 19);\n });\n yield* complete(state);\n yield* remember(state);\n // The store only inserts quads, so each column decodes to its position's kind and a\n // non-zero graph to an IRI or blank node.\n return rows.map((r) => {\n const g = num(r[3]);\n return new Term.Quad(\n termAs(state, num(r[0]), isSubject, 'subject'),\n termAs(state, num(r[1]), Term.isNamedNode, 'predicate'),\n termOf(state, num(r[2])),\n g === 0 ? Term.defaultGraph : termAs(state, g, isGraphName, 'graph name'),\n );\n });\n });\n\n const match = (pattern: Store.QuadPattern): Stream.Stream<Term.Quad, Store.StoreError> =>\n Stream.unwrap(\n Effect.gen(function* () {\n const conds = yield* patternConditions(pattern);\n if (Option.isNone(conds)) return Stream.empty;\n const bound = MutableHashSet.fromIterable(conds.value.map(([c]) => c));\n const order = indexFor(bound);\n const where = conds.value.map(([c, id]) => `${c} = ${id}`);\n const attrs = ['s', 'p', 'o', 'g']\n .map((c) => `m${c}.kind, m${c}.value, m${c}.datatype, m${c}.lang, m${c}.dir`)\n .join(', ');\n const joins = ['s', 'p', 'o', 'g']\n .map((c) => ` LEFT JOIN ${T} m${c} ON m${c}.id = q.${c}`)\n .join('');\n const page = (after: Option.Option<ReadonlyArray<number>>) => {\n const w = Option.match(after, {\n onNone: () => where,\n onSome: (cursor) => [...where, `(${order.join(', ')}) > (${cursor.join(', ')})`],\n });\n return `SELECT q.s, q.p, q.o, q.g, ${attrs} FROM (SELECT s, p, o, g FROM ${Qt}${Arr.isReadonlyArrayNonEmpty(w) ? ` WHERE ${w.join(' AND ')}` : ''} ORDER BY ${order.join(', ')} LIMIT ${pageSize}) q${joins}`;\n };\n // The first page has no cursor.\n return Stream.paginate(Option.none<ReadonlyArray<number>>(), (after) =>\n Effect.gen(function* () {\n const rows = yield* run(page(after));\n const quads = yield* decodeQuads(rows);\n const next =\n rows.length < pageSize\n ? Option.none()\n : Option.map(Arr.last(rows), (last) =>\n Option.some(order.map((c) => num(last[['s', 'p', 'o', 'g'].indexOf(c)]))),\n );\n return [quads, next] as const;\n }),\n );\n }),\n ).pipe(Stream.mapError(storeError('match failed')));\n\n const countWhere = (pattern: Store.QuadPattern, limit: Option.Option<number>) =>\n Effect.gen(function* () {\n const conds = yield* patternConditions(pattern);\n if (Option.isNone(conds)) return 0;\n const where = conds.value.map(([c, id]) => `${c} = ${id}`);\n const filter = Arr.isReadonlyArrayNonEmpty(where) ? ` WHERE ${where.join(' AND ')}` : '';\n const rows = yield* run(\n Option.match(limit, {\n onNone: () => `SELECT COUNT(*) FROM ${Qt}${filter}`,\n onSome: (n) => `SELECT COUNT(*) FROM (SELECT 1 FROM ${Qt}${filter} LIMIT ${n}) x`,\n }),\n );\n return num(rows[0]?.[0] ?? 0);\n }).pipe(Effect.mapError(storeError('count failed')));\n\n const quadIds = (quads: Iterable<Term.Quad>, create: boolean) =>\n Effect.gen(function* () {\n const list = Arr.fromIterable(quads);\n const terms: Array<Term.GroundTerm> = [];\n list.forEach((q) => {\n terms.push(q.subject, q.predicate, q.object);\n if (!Term.isDefaultGraph(q.graph)) terms.push(q.graph);\n });\n const ids = yield* resolveTerms(terms, create);\n return Arr.filterMap(list, (q) => quadRow(ids, q));\n });\n\n const tuples = (rows: ReadonlyArray<readonly [number, number, number, number]>) => {\n const params: Array<number> = [];\n const text = rows\n .map((r) => {\n const base = params.length;\n params.push(...r);\n return `(${r.map((_, i) => dialect.castId(ph(base + i + 1))).join(', ')})`;\n })\n .join(', ');\n return { text, params };\n };\n\n /** Runs one statement per `batchSize` quad-id rows, `statement` building it from the tuples. */\n const execBatches = (\n rows: ReadonlyArray<readonly [number, number, number, number]>,\n statement: (tuplesText: string) => string,\n ) =>\n Effect.forEach(\n chunks(rows, batchSize),\n (chunk) => {\n const { text, params } = tuples(chunk);\n return exec(statement(text), params);\n },\n { concurrency: 1, discard: true },\n );\n\n const insert = (quads: Iterable<Term.Quad>) =>\n sql\n .withTransaction(\n Effect.gen(function* () {\n const list = Array.from(quads);\n yield* Effect.forEach(\n chunks(list, batchSize * 4),\n (batch) =>\n Effect.flatMap(quadIds(batch, true), (rows) =>\n execBatches(\n rows,\n (text) =>\n `INSERT INTO ${Qt} (s, p, o, g) VALUES ${text} ON CONFLICT DO NOTHING`,\n ),\n ),\n { concurrency: 1, discard: true },\n );\n }),\n )\n .pipe(Effect.mapError(storeError('insert failed')));\n\n const del = (quads: Iterable<Term.Quad>) =>\n sql\n .withTransaction(\n Effect.gen(function* () {\n const rows = yield* quadIds(quads, false);\n yield* execBatches(\n rows,\n (text) => `DELETE FROM ${Qt} WHERE (s, p, o, g) IN (VALUES ${text})`,\n );\n }),\n )\n .pipe(Effect.mapError(storeError('delete failed')));\n\n const decodeIds = (ids: ReadonlyArray<number>) =>\n Effect.gen(function* () {\n const state = newState();\n yield* Effect.forEach(chunks(ids, 500), (chunk) => fetchTerms(state, chunk), {\n concurrency: 1,\n discard: true,\n });\n yield* complete(state);\n yield* remember(state);\n // The ids come from the graph table and the quads' graph column, so they decode to IRIs\n // or blank nodes.\n return ids.map((id) => termAs(state, id, isGraphName, 'graph name'));\n });\n\n const graphs: Stream.Stream<Term.NamedNode | Term.BlankNode, Store.StoreError> = Stream.unwrap(\n Effect.gen(function* () {\n const rows = yield* run(\n `SELECT id FROM ${Gt} UNION SELECT DISTINCT g FROM ${Qt} WHERE g <> 0`,\n );\n return Stream.fromArray(yield* decodeIds(rows.map((r) => num(r[0]))));\n }),\n ).pipe(Stream.mapError(storeError('graphs failed')));\n\n const graphIdOf = (graph: Term.NamedNode | Term.BlankNode, create: boolean) =>\n Effect.map(resolveTerms([graph], create), (ids) => MutableHashMap.get(ids, graph.key));\n\n const hasGraph = (graph: Term.NamedNode | Term.BlankNode) =>\n Effect.gen(function* () {\n const found = yield* graphIdOf(graph, false);\n if (Option.isNone(found)) return false;\n const id = found.value;\n const rows = yield* run(\n `SELECT 1 WHERE EXISTS (SELECT 1 FROM ${Gt} WHERE id = ${id}) OR EXISTS (SELECT 1 FROM ${Qt} WHERE g = ${id})`,\n );\n return Arr.isReadonlyArrayNonEmpty(rows);\n }).pipe(Effect.mapError(storeError('hasGraph failed')));\n\n const createGraph = (graph: Term.NamedNode | Term.BlankNode) =>\n sql\n .withTransaction(\n Effect.gen(function* () {\n const id = yield* graphIdOf(graph, true);\n if (Option.isNone(id)) return;\n yield* exec(`INSERT INTO ${Gt} (id) VALUES (${id.value}) ON CONFLICT DO NOTHING`);\n }),\n )\n .pipe(Effect.mapError(storeError('createGraph failed')));\n\n const dropGraph = (graph: Term.NamedNode | Term.BlankNode) =>\n sql\n .withTransaction(\n Effect.gen(function* () {\n const id = yield* graphIdOf(graph, false);\n if (Option.isNone(id)) return;\n yield* exec(`DELETE FROM ${Qt} WHERE g = ${id.value}`);\n yield* exec(`DELETE FROM ${Gt} WHERE id = ${id.value}`);\n }),\n )\n .pipe(Effect.mapError(storeError('dropGraph failed')));\n\n const clear = (graph: Term.Graph) =>\n Effect.gen(function* () {\n const id = Term.isDefaultGraph(graph) ? Option.some(0) : yield* graphIdOf(graph, false);\n if (Option.isNone(id)) return;\n yield* exec(`DELETE FROM ${Qt} WHERE g = ${id.value}`);\n }).pipe(Effect.mapError(storeError('clear failed')));\n\n const transaction = <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E | Store.StoreError, R> =>\n sql.withTransaction(effect).pipe(\n Effect.mapError((e) =>\n // SAFETY: `withTransaction` adds only `SqlError` to `E`, and that case was handled.\n SqlError.isSqlError(e) ? storeError('transaction failed')(e) : e,\n ),\n );\n\n // --- SPARQL to SQL ------------------------------------------------------------\n\n const storeClasses = Effect.map(\n run(`SELECT cls FROM ${tables.classes}`),\n (rows) => new Set(rows.map((r) => num(r[0]))),\n );\n\n const translationContext = (\n context?: Partial<Pick<Store.EvaluationContext, 'dataset' | 'activeGraph'>>,\n ): Translation.TranslationContext => ({\n dialect,\n tables,\n dataset: context?.dataset ?? DEFAULT_DATASET,\n activeGraph: context?.activeGraph ?? { _tag: 'DefaultGraph' },\n });\n\n const compile: SqlStoreShape['compile'] = (op, context) =>\n Effect.gen(function* () {\n const ctx = translationContext(context);\n const ids = yield* resolveTerms(Translation.constants(op, ctx), false);\n return Translation.compile(op, ctx, resolveIn(ids));\n }).pipe(Effect.mapError(storeError('compile failed')));\n\n const decodeSolutions = (\n compiled: Translation.CompiledQuery,\n rows: ReadonlyArray<ReadonlyArray<unknown>>,\n ) =>\n Effect.gen(function* () {\n const layout = columnLayout(compiled.columns);\n const terms = layout.filter(({ column }) => column.type === 'id');\n const state = newState();\n compiled.locals.forEach((t, id) => {\n MutableHashMap.set(state.known, id, t);\n });\n rows.forEach((r) =>\n terms.forEach(({ at }) => {\n // An unbound variable is SQL `NULL`.\n const v = r[at];\n if (Predicate.isNullish(v)) return;\n const id = num(v);\n if (id > 0) addRow(state, id, r, at + 1);\n }),\n );\n yield* complete(state);\n compiled.locals.forEach((_, id) => {\n MutableHashMap.remove(state.known, id);\n });\n yield* remember(state);\n compiled.locals.forEach((t, id) => {\n MutableHashMap.set(state.known, id, t);\n });\n return rows.map((r) =>\n B.fromEntries(\n Arr.filterMap(layout, ({ column, at }) => {\n const v = r[at];\n if (Predicate.isNullish(v)) return Result.failVoid;\n const term =\n column.type === 'int' ? new Term.Literal(str(v), INTEGER) : termOf(state, num(v));\n return Result.succeed([column.variable, term] as const);\n }),\n ),\n );\n });\n\n const declined = new WeakSet<Algebra.Operation>();\n\n const capability: Store.QueryCapability = {\n evaluate: (op, context) => {\n if (options.translate === false) return Option.none();\n if (declined.has(op)) {\n declined.delete(op);\n return Option.none();\n }\n const ctx = translationContext(context);\n const check = Translation.compile(op, ctx, () => undefined);\n if (Result.isFailure(check)) {\n onQuery?.({ _tag: 'Declined', operation: op, reason: check.failure });\n return Option.none();\n }\n const stream: Stream.Stream<B.Bindings, Store.StoreError> = Stream.unwrap(\n Effect.gen(function* () {\n const ids = yield* resolveTerms(Translation.constants(op, ctx), false);\n const compiled = Translation.compile(op, ctx, resolveIn(ids));\n if (Result.isFailure(compiled)) {\n return yield* new Store.StoreError({ message: compiled.failure });\n }\n const q = compiled.success;\n if (\n Arr.isReadonlyArrayNonEmpty(q.risks) &&\n Translation.isRisky(q, yield* storeClasses)\n ) {\n onQuery?.({\n _tag: 'Declined',\n operation: op,\n reason: 'The data contains values SQL cannot compare exactly',\n });\n declined.add(op);\n return Stream.mapError(context.evaluate(op), storeError('evaluation failed'));\n }\n const rows = yield* run(q.sql, q.params).pipe(\n Effect.withSpan('SqlStore.query', { attributes: { 'db.query.text': q.sql } }),\n );\n onQuery?.({\n _tag: 'Executed',\n operation: op,\n sql: q.sql,\n params: q.params,\n rows: rows.length,\n });\n return Stream.fromArray(yield* decodeSolutions(q, rows));\n }).pipe(Effect.mapError(storeError('SQL query failed'))),\n );\n return Option.some(stream);\n },\n };\n\n const termCount = Effect.map(run(`SELECT COUNT(*) FROM ${T}`), (rows) =>\n num(rows[0]?.[0] ?? 0),\n ).pipe(Effect.mapError(storeError('termCount failed')));\n\n const store: SqlStoreShape = {\n dialect,\n tables,\n capability,\n compile,\n termCount,\n match,\n estimate: (pattern) => countWhere(pattern, Option.some(10_000)),\n count: (pattern) => countWhere(pattern, Option.none()),\n graphs,\n hasGraph,\n insert,\n delete: del,\n createGraph,\n dropGraph,\n clear,\n transaction,\n query: capability,\n };\n return store;\n });\n\n/** The `resolve` of `Translation.compile` over resolved term ids. */\nconst resolveIn = (ids: Ids) => (t: Term.GroundTerm) =>\n Option.getOrUndefined(MutableHashMap.get(ids, t.key));\n\nconst INTEGER = Term.namedNode('http://www.w3.org/2001/XMLSchema#integer');\n\n// -----------------------------------------------------------------------------\n// Layers\n// -----------------------------------------------------------------------------\n\n/**\n * A layer providing the SQL store as both `SqlStore` and the engine's\n * `QuadStore` (whose `query` is the SPARQL-to-SQL `QueryCapability`), over\n * the `SqlClient` service.\n *\n * @since 0.1.0\n * @category layers\n */\nexport const layer = (\n options: SqlStoreOptions = {},\n): Layer.Layer<SqlStore | Store.QuadStore, Store.StoreError, SqlClient.SqlClient> =>\n Layer.effectContext(\n Effect.map(make(options), (store) =>\n Context.make(SqlStore, store).pipe(Context.add(Store.QuadStore, store)),\n ),\n );\n"],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { g as Operation } from "./Algebra-uGsIEOUA.mjs";
|
|
2
|
+
import { a as QuadStore, c as StoreError, o as QuadStoreShape, r as EvaluationContext, s as QueryCapability } from "./Store-D0jmVfb3.mjs";
|
|
3
|
+
import { i as Tables, t as Dialect } from "./Dialect-8ChFj5EX.mjs";
|
|
4
|
+
import { t as CompiledQuery } from "./Translation-K4L9XBqX.mjs";
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import * as Context from "effect/Context";
|
|
7
|
+
import * as Layer from "effect/Layer";
|
|
8
|
+
import * as Result from "effect/Result";
|
|
9
|
+
import * as SqlClient from "effect/sql/SqlClient";
|
|
10
|
+
import * as SqlError from "effect/sql/SqlError";
|
|
11
|
+
declare namespace SqlStore_d_exports {
|
|
12
|
+
export { QueryEvent, SqlStore, SqlStoreOptions, SqlStoreShape, layer, make, migrate, migrations };
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* An event reported to `SqlStoreOptions.onQuery` for every algebra node the
|
|
16
|
+
* engine offers to the store: either it was translated to SQL and executed,
|
|
17
|
+
* or it was declined (and evaluated by the engine).
|
|
18
|
+
*
|
|
19
|
+
* @since 0.1.0
|
|
20
|
+
* @category models
|
|
21
|
+
*/
|
|
22
|
+
type QueryEvent = {
|
|
23
|
+
readonly _tag: 'Executed';
|
|
24
|
+
readonly operation: Operation;
|
|
25
|
+
readonly sql: string;
|
|
26
|
+
readonly params: ReadonlyArray<unknown>;
|
|
27
|
+
readonly rows: number;
|
|
28
|
+
} | {
|
|
29
|
+
readonly _tag: 'Declined';
|
|
30
|
+
readonly operation: Operation;
|
|
31
|
+
readonly reason: string;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Options of the SQL store.
|
|
35
|
+
*
|
|
36
|
+
* @since 0.1.0
|
|
37
|
+
* @category models
|
|
38
|
+
*/
|
|
39
|
+
interface SqlStoreOptions {
|
|
40
|
+
/** The SQL dialect; detected from the `SqlClient` by default. */
|
|
41
|
+
readonly dialect?: Dialect | undefined;
|
|
42
|
+
/** The prefix of the table names (default `rdf_`). */
|
|
43
|
+
readonly tablePrefix?: string | undefined;
|
|
44
|
+
/** Whether to create / migrate the schema when the store is built (default `true`). */
|
|
45
|
+
readonly migrate?: boolean | undefined;
|
|
46
|
+
/** Whether to translate SPARQL algebra to SQL (default `true`). */
|
|
47
|
+
readonly translate?: boolean | undefined;
|
|
48
|
+
/** The number of quads per insert / delete statement (default 500). */
|
|
49
|
+
readonly batchSize?: number | undefined;
|
|
50
|
+
/** The number of quads per page of `match` (default 5000). */
|
|
51
|
+
readonly pageSize?: number | undefined;
|
|
52
|
+
/** Debug hook: called for every algebra node offered to the store. */
|
|
53
|
+
readonly onQuery?: ((event: QueryEvent) => void) | undefined;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The SQL store: a `QuadStore` with native SPARQL-to-SQL evaluation and some
|
|
57
|
+
* SQL-specific extras.
|
|
58
|
+
*
|
|
59
|
+
* @since 0.1.0
|
|
60
|
+
* @category models
|
|
61
|
+
*/
|
|
62
|
+
interface SqlStoreShape extends QuadStoreShape {
|
|
63
|
+
readonly dialect: Dialect;
|
|
64
|
+
readonly tables: Tables;
|
|
65
|
+
/** The native algebra evaluation (also available as `query`). */
|
|
66
|
+
readonly capability: QueryCapability;
|
|
67
|
+
/**
|
|
68
|
+
* Translates an algebra tree for the given evaluation context, resolving
|
|
69
|
+
* constants against the dictionary (for inspection and debugging).
|
|
70
|
+
*/
|
|
71
|
+
readonly compile: (op: Operation, context?: Partial<Pick<EvaluationContext, 'dataset' | 'activeGraph'>>) => Effect.Effect<Result.Result<CompiledQuery, string>, StoreError>;
|
|
72
|
+
/** The number of terms in the dictionary. */
|
|
73
|
+
readonly termCount: Effect.Effect<number, StoreError>;
|
|
74
|
+
}
|
|
75
|
+
declare const SqlStore_base: Context.ServiceClass<SqlStore, "@thomasfosterau/effect-rdf/sparql/sql/SqlStore", SqlStoreShape>;
|
|
76
|
+
/**
|
|
77
|
+
* The SQL store service.
|
|
78
|
+
*
|
|
79
|
+
* @since 0.1.0
|
|
80
|
+
* @category services
|
|
81
|
+
*/
|
|
82
|
+
declare class SqlStore extends SqlStore_base {}
|
|
83
|
+
/**
|
|
84
|
+
* The schema migrations of the store (for `effect/sql/Migrator`): a record of
|
|
85
|
+
* `<id>_<name>` to migration effect.
|
|
86
|
+
*
|
|
87
|
+
* @since 0.1.0
|
|
88
|
+
* @category schema
|
|
89
|
+
*/
|
|
90
|
+
declare const migrations: (dialect: Dialect, tables: Tables) => {
|
|
91
|
+
'1_create_rdf_store': Effect.Effect<void, SqlError.SqlError, SqlClient.SqlClient>;
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Creates or migrates the store's schema.
|
|
95
|
+
*
|
|
96
|
+
* @since 0.1.0
|
|
97
|
+
* @category schema
|
|
98
|
+
*/
|
|
99
|
+
declare const migrate: (options?: Pick<SqlStoreOptions, "dialect" | "tablePrefix">) => Effect.Effect<void, StoreError, SqlClient.SqlClient>;
|
|
100
|
+
/**
|
|
101
|
+
* Creates a SQL store over the `SqlClient` service.
|
|
102
|
+
*
|
|
103
|
+
* @since 0.1.0
|
|
104
|
+
* @category constructors
|
|
105
|
+
*/
|
|
106
|
+
declare const make: (options?: SqlStoreOptions) => Effect.Effect<SqlStoreShape, StoreError, SqlClient.SqlClient>;
|
|
107
|
+
/**
|
|
108
|
+
* A layer providing the SQL store as both `SqlStore` and the engine's
|
|
109
|
+
* `QuadStore` (whose `query` is the SPARQL-to-SQL `QueryCapability`), over
|
|
110
|
+
* the `SqlClient` service.
|
|
111
|
+
*
|
|
112
|
+
* @since 0.1.0
|
|
113
|
+
* @category layers
|
|
114
|
+
*/
|
|
115
|
+
declare const layer: (options?: SqlStoreOptions) => Layer.Layer<SqlStore | QuadStore, StoreError, SqlClient.SqlClient>;
|
|
116
|
+
export { SqlStore_d_exports as a, migrate as c, SqlStoreShape as i, migrations as l, SqlStore as n, layer as o, SqlStoreOptions as r, make as s, QueryEvent as t };
|
|
117
|
+
//# sourceMappingURL=SqlStore-CCJo5I-e.d.mts.map
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { _ as Quad, d as NamedNode, o as Graph, s as GroundTerm, t as BlankNode } from "./Term-B_4ezyXq.mjs";
|
|
2
|
+
import { n as Dataset } from "./Dataset-DS3ESOcO.mjs";
|
|
3
|
+
import { t as Bindings } from "./Bindings-DiKpBd7f.mjs";
|
|
4
|
+
import { g as Operation } from "./Algebra-uGsIEOUA.mjs";
|
|
5
|
+
import * as Option from "effect/Option";
|
|
6
|
+
import * as Schema from "effect/Schema";
|
|
7
|
+
import * as Effect from "effect/Effect";
|
|
8
|
+
import * as Context from "effect/Context";
|
|
9
|
+
import * as Layer from "effect/Layer";
|
|
10
|
+
import * as Stream from "effect/Stream";
|
|
11
|
+
declare namespace Store_d_exports {
|
|
12
|
+
export { ActiveGraph, DatasetSpec, EvaluationContext, QuadPattern, QuadStore, QuadStoreShape, QueryCapability, StoreError, layerMemory, makeMemory, toDataset };
|
|
13
|
+
}
|
|
14
|
+
declare const StoreError_base: Schema.Class<StoreError, Schema.TaggedStruct<"StoreError", {
|
|
15
|
+
readonly message: Schema.String;
|
|
16
|
+
readonly cause: Schema.optional<Schema.Defect>;
|
|
17
|
+
}>, import("effect/Cause").YieldableError>;
|
|
18
|
+
/**
|
|
19
|
+
* A failure of the storage backend.
|
|
20
|
+
*
|
|
21
|
+
* @since 0.1.0
|
|
22
|
+
* @category errors
|
|
23
|
+
*/
|
|
24
|
+
declare class StoreError extends StoreError_base {}
|
|
25
|
+
/**
|
|
26
|
+
* A quad pattern: `undefined` positions match anything. `graph` may be the
|
|
27
|
+
* default graph.
|
|
28
|
+
*
|
|
29
|
+
* @since 0.1.0
|
|
30
|
+
* @category models
|
|
31
|
+
*/
|
|
32
|
+
interface QuadPattern {
|
|
33
|
+
readonly subject?: GroundTerm | undefined;
|
|
34
|
+
readonly predicate?: GroundTerm | undefined;
|
|
35
|
+
readonly object?: GroundTerm | undefined;
|
|
36
|
+
readonly graph?: Graph | undefined;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The RDF dataset a query is evaluated against.
|
|
40
|
+
*
|
|
41
|
+
* - `defaultGraph`: `'default'` uses the store's default graph, `'union'` the
|
|
42
|
+
* merge of all graphs (default and named), or an explicit list of graphs
|
|
43
|
+
* whose merge forms the default graph (`FROM`).
|
|
44
|
+
* - `namedGraphs`: `'all'` uses every named graph of the store, or an
|
|
45
|
+
* explicit list (`FROM NAMED`).
|
|
46
|
+
*
|
|
47
|
+
* @since 0.1.0
|
|
48
|
+
* @category models
|
|
49
|
+
*/
|
|
50
|
+
interface DatasetSpec {
|
|
51
|
+
readonly defaultGraph: 'default' | 'union' | ReadonlyArray<Graph>;
|
|
52
|
+
readonly namedGraphs: 'all' | ReadonlyArray<NamedNode | BlankNode>;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The graph that patterns are matched against.
|
|
56
|
+
*
|
|
57
|
+
* @since 0.1.0
|
|
58
|
+
* @category models
|
|
59
|
+
*/
|
|
60
|
+
type ActiveGraph = {
|
|
61
|
+
readonly _tag: 'DefaultGraph';
|
|
62
|
+
} | {
|
|
63
|
+
readonly _tag: 'NamedGraph';
|
|
64
|
+
readonly graph: NamedNode | BlankNode;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* What a `QueryCapability` receives with an algebra node.
|
|
68
|
+
*
|
|
69
|
+
* @since 0.1.0
|
|
70
|
+
* @category models
|
|
71
|
+
*/
|
|
72
|
+
interface EvaluationContext {
|
|
73
|
+
readonly dataset: DatasetSpec;
|
|
74
|
+
readonly activeGraph: ActiveGraph;
|
|
75
|
+
/**
|
|
76
|
+
* Evaluates a sub-operator with the generic engine (which offers it to the
|
|
77
|
+
* capability again), so that a backend can handle a node itself while
|
|
78
|
+
* delegating some of its children.
|
|
79
|
+
*/
|
|
80
|
+
readonly evaluate: (op: Operation, activeGraph?: ActiveGraph) => Stream.Stream<Bindings, unknown>;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Native algebra evaluation offered by a backend.
|
|
84
|
+
*
|
|
85
|
+
* @since 0.1.0
|
|
86
|
+
* @category models
|
|
87
|
+
*/
|
|
88
|
+
interface QueryCapability {
|
|
89
|
+
/**
|
|
90
|
+
* Returns `Some(stream)` to evaluate `op` natively, or `None` to let the
|
|
91
|
+
* engine evaluate it (offering its children again).
|
|
92
|
+
*/
|
|
93
|
+
readonly evaluate: (op: Operation, context: EvaluationContext) => Option.Option<Stream.Stream<Bindings, StoreError>>;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* The interface implemented by storage backends.
|
|
97
|
+
*
|
|
98
|
+
* @since 0.1.0
|
|
99
|
+
* @category models
|
|
100
|
+
*/
|
|
101
|
+
interface QuadStoreShape {
|
|
102
|
+
/** Streams the quads matching a pattern. */
|
|
103
|
+
readonly match: (pattern: QuadPattern) => Stream.Stream<Quad, StoreError>;
|
|
104
|
+
/**
|
|
105
|
+
* An estimate of the number of quads matching a pattern, used by the
|
|
106
|
+
* optimizer to order joins. Should be cheap.
|
|
107
|
+
*/
|
|
108
|
+
readonly estimate?: ((pattern: QuadPattern) => Effect.Effect<number, StoreError>) | undefined;
|
|
109
|
+
/** The exact number of quads matching a pattern, if the backend can count cheaply. */
|
|
110
|
+
readonly count?: ((pattern: QuadPattern) => Effect.Effect<number, StoreError>) | undefined;
|
|
111
|
+
/** The named graphs of the store (including empty graphs it tracks). */
|
|
112
|
+
readonly graphs: Stream.Stream<NamedNode | BlankNode, StoreError>;
|
|
113
|
+
/** Whether a named graph exists. */
|
|
114
|
+
readonly hasGraph: (graph: NamedNode | BlankNode) => Effect.Effect<boolean, StoreError>;
|
|
115
|
+
/** Adds quads (duplicates are ignored). */
|
|
116
|
+
readonly insert: (quads: Iterable<Quad>) => Effect.Effect<void, StoreError>;
|
|
117
|
+
/** Removes quads (missing quads are ignored). */
|
|
118
|
+
readonly delete: (quads: Iterable<Quad>) => Effect.Effect<void, StoreError>;
|
|
119
|
+
/** Creates an empty named graph. */
|
|
120
|
+
readonly createGraph: (graph: NamedNode | BlankNode) => Effect.Effect<void, StoreError>;
|
|
121
|
+
/** Removes a named graph and all its quads. */
|
|
122
|
+
readonly dropGraph: (graph: NamedNode | BlankNode) => Effect.Effect<void, StoreError>;
|
|
123
|
+
/** Removes all quads of a graph (the graph itself, if named, is kept). */
|
|
124
|
+
readonly clear: (graph: Graph) => Effect.Effect<void, StoreError>;
|
|
125
|
+
/**
|
|
126
|
+
* Runs an effect atomically: if it fails, all changes made through this
|
|
127
|
+
* store during the effect are rolled back.
|
|
128
|
+
*/
|
|
129
|
+
readonly transaction: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E | StoreError, R>;
|
|
130
|
+
/** Native algebra evaluation, if supported. */
|
|
131
|
+
readonly query?: QueryCapability | undefined;
|
|
132
|
+
}
|
|
133
|
+
declare const QuadStore_base: Context.ServiceClass<QuadStore, "@thomasfosterau/effect-rdf/sparql/QuadStore", QuadStoreShape>;
|
|
134
|
+
/**
|
|
135
|
+
* The quad store service used by the SPARQL engine.
|
|
136
|
+
*
|
|
137
|
+
* @since 0.1.0
|
|
138
|
+
* @category services
|
|
139
|
+
*/
|
|
140
|
+
declare class QuadStore extends QuadStore_base {}
|
|
141
|
+
/**
|
|
142
|
+
* Builds an in-memory `QuadStore` backed by an immutable core `Dataset`.
|
|
143
|
+
*
|
|
144
|
+
* @since 0.1.0
|
|
145
|
+
* @category constructors
|
|
146
|
+
*/
|
|
147
|
+
declare const makeMemory: (initial?: Dataset) => Effect.Effect<QuadStoreShape & {
|
|
148
|
+
readonly snapshot: Effect.Effect<Dataset>;
|
|
149
|
+
}>;
|
|
150
|
+
/**
|
|
151
|
+
* A layer providing an in-memory `QuadStore`, optionally pre-loaded with a
|
|
152
|
+
* dataset.
|
|
153
|
+
*
|
|
154
|
+
* @since 0.1.0
|
|
155
|
+
* @category layers
|
|
156
|
+
*/
|
|
157
|
+
declare const layerMemory: (initial?: Dataset) => Layer.Layer<QuadStore>;
|
|
158
|
+
/**
|
|
159
|
+
* Collects all quads of a store into a `Dataset`.
|
|
160
|
+
*
|
|
161
|
+
* @since 0.1.0
|
|
162
|
+
* @category utils
|
|
163
|
+
*/
|
|
164
|
+
declare const toDataset: (store: QuadStoreShape) => Effect.Effect<Dataset, StoreError>;
|
|
165
|
+
export { QuadStore as a, StoreError as c, makeMemory as d, toDataset as f, QuadPattern as i, Store_d_exports as l, DatasetSpec as n, QuadStoreShape as o, EvaluationContext as r, QueryCapability as s, ActiveGraph as t, layerMemory as u };
|
|
166
|
+
//# sourceMappingURL=Store-D0jmVfb3.d.mts.map
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-D8jQpDG7.mjs";
|
|
2
|
+
import { B as isNamedNode, F as isGraph, P as isDefaultGraph, z as isLiteral } from "./Term-CFLG1qu4.mjs";
|
|
3
|
+
import { D as mutate, E as match, P as removeMatches, _ as graphs, a as addAll, c as empty, m as fromIterable, o as count } from "./Dataset-BlmlcI7J.mjs";
|
|
4
|
+
import { n as empty$1, t as copy } from "./stringMap-D5YIpYtR.mjs";
|
|
5
|
+
import * as Iterable from "effect/Iterable";
|
|
6
|
+
import * as Option from "effect/Option";
|
|
7
|
+
import * as Schema from "effect/Schema";
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import * as Context from "effect/Context";
|
|
10
|
+
import * as Layer from "effect/Layer";
|
|
11
|
+
import * as Stream from "effect/Stream";
|
|
12
|
+
import * as Ref from "effect/Ref";
|
|
13
|
+
import * as Semaphore from "effect/Semaphore";
|
|
14
|
+
// src/sparql/Store.ts
|
|
15
|
+
/**
|
|
16
|
+
* The storage abstraction of the SPARQL engine.
|
|
17
|
+
*
|
|
18
|
+
* A backend implements `QuadStore`: streaming quad pattern matching, named
|
|
19
|
+
* graph management, updates and transactions. Optionally it can
|
|
20
|
+
*
|
|
21
|
+
* - give cardinality estimates (`estimate`) used by the optimizer to order
|
|
22
|
+
* joins, and
|
|
23
|
+
* - evaluate algebra natively through a `QueryCapability` (e.g. a SQL backend
|
|
24
|
+
* translating SPARQL algebra to SQL): the engine offers every algebra node
|
|
25
|
+
* to `QueryCapability.evaluate` top-down before evaluating it generically,
|
|
26
|
+
* so a backend can take over whole subtrees and fall back to the engine for
|
|
27
|
+
* anything it does not support.
|
|
28
|
+
*
|
|
29
|
+
* `MemoryStore` is an in-memory implementation based on the core
|
|
30
|
+
* `Dataset`.
|
|
31
|
+
*
|
|
32
|
+
* @since 0.1.0
|
|
33
|
+
*/
|
|
34
|
+
var Store_exports = /* @__PURE__ */ __exportAll({
|
|
35
|
+
QuadStore: () => QuadStore,
|
|
36
|
+
StoreError: () => StoreError,
|
|
37
|
+
layerMemory: () => layerMemory,
|
|
38
|
+
makeMemory: () => makeMemory,
|
|
39
|
+
toDataset: () => toDataset
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* A failure of the storage backend.
|
|
43
|
+
*
|
|
44
|
+
* @since 0.1.0
|
|
45
|
+
* @category errors
|
|
46
|
+
*/
|
|
47
|
+
var StoreError = class extends Schema.TaggedError()("StoreError", {
|
|
48
|
+
message: Schema.String,
|
|
49
|
+
cause: Schema.optional(Schema.Defect())
|
|
50
|
+
}) {};
|
|
51
|
+
/**
|
|
52
|
+
* The quad store service used by the SPARQL engine.
|
|
53
|
+
*
|
|
54
|
+
* @since 0.1.0
|
|
55
|
+
* @category services
|
|
56
|
+
*/
|
|
57
|
+
var QuadStore = class extends Context.Service()("@thomasfosterau/effect-rdf/sparql/QuadStore") {};
|
|
58
|
+
const InTransaction = Context.Reference("@thomasfosterau/effect-rdf/sparql/Store/InTransaction", { defaultValue: () => false });
|
|
59
|
+
/** The dataset pattern of a quad pattern; `None` if no quad can match it (a literal subject, …). */
|
|
60
|
+
const toDatasetPattern = (pattern) => {
|
|
61
|
+
const { subject, predicate, object, graph } = pattern;
|
|
62
|
+
if (predicate !== void 0 && !isNamedNode(predicate)) return Option.none();
|
|
63
|
+
if (subject !== void 0 && isLiteral(subject)) return Option.none();
|
|
64
|
+
if (graph !== void 0 && !isGraph(graph)) return Option.none();
|
|
65
|
+
return Option.some({
|
|
66
|
+
subject,
|
|
67
|
+
predicate,
|
|
68
|
+
object,
|
|
69
|
+
graph
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Builds an in-memory `QuadStore` backed by an immutable core `Dataset`.
|
|
74
|
+
*
|
|
75
|
+
* @since 0.1.0
|
|
76
|
+
* @category constructors
|
|
77
|
+
*/
|
|
78
|
+
const makeMemory = (initial = empty) => Effect.gen(function* () {
|
|
79
|
+
const state = yield* Ref.make({
|
|
80
|
+
dataset: initial,
|
|
81
|
+
graphs: empty$1()
|
|
82
|
+
});
|
|
83
|
+
const lock = Semaphore.makeUnsafe(1);
|
|
84
|
+
const write = (f) => Effect.flatMap(Effect.service(InTransaction), (inTx) => {
|
|
85
|
+
const run = Ref.modify(state, f);
|
|
86
|
+
return inTx ? run : lock.withPermits(1)(run);
|
|
87
|
+
});
|
|
88
|
+
const namedGraphs = (s) => {
|
|
89
|
+
const out = copy(s.graphs);
|
|
90
|
+
Iterable.forEach(graphs(s.dataset), (g) => {
|
|
91
|
+
if (!isDefaultGraph(g) && !out.has(g.key)) out.set(g.key, g);
|
|
92
|
+
});
|
|
93
|
+
return Array.from(out.values());
|
|
94
|
+
};
|
|
95
|
+
/** The exact count, which is cheap for the indexed dataset (so it is the estimate too). */
|
|
96
|
+
const count$1 = (pattern) => Effect.map(Ref.get(state), (s) => {
|
|
97
|
+
const p = toDatasetPattern(pattern);
|
|
98
|
+
return Option.isNone(p) ? 0 : count(s.dataset, p.value);
|
|
99
|
+
});
|
|
100
|
+
return {
|
|
101
|
+
snapshot: Effect.map(Ref.get(state), (s) => s.dataset),
|
|
102
|
+
match: (pattern) => Stream.suspend(() => {
|
|
103
|
+
const p = toDatasetPattern(pattern);
|
|
104
|
+
if (Option.isNone(p)) return Stream.empty;
|
|
105
|
+
return Stream.fromIterableEffect(Effect.map(Ref.get(state), (s) => match(s.dataset, p.value)));
|
|
106
|
+
}),
|
|
107
|
+
estimate: count$1,
|
|
108
|
+
count: count$1,
|
|
109
|
+
graphs: Stream.fromIterableEffect(Effect.map(Ref.get(state), namedGraphs)),
|
|
110
|
+
hasGraph: (graph) => Effect.map(Ref.get(state), (s) => namedGraphs(s).some((g) => g.key === graph.key)),
|
|
111
|
+
insert: (quads) => write((s) => [void 0, {
|
|
112
|
+
...s,
|
|
113
|
+
dataset: addAll(s.dataset, quads)
|
|
114
|
+
}]),
|
|
115
|
+
delete: (quads) => write((s) => [void 0, {
|
|
116
|
+
...s,
|
|
117
|
+
dataset: mutate(s.dataset, (b) => Iterable.forEach(quads, (q) => b.remove(q)))
|
|
118
|
+
}]),
|
|
119
|
+
createGraph: (graph) => write((s) => {
|
|
120
|
+
const graphs = copy(s.graphs);
|
|
121
|
+
graphs.set(graph.key, graph);
|
|
122
|
+
return [void 0, {
|
|
123
|
+
...s,
|
|
124
|
+
graphs
|
|
125
|
+
}];
|
|
126
|
+
}),
|
|
127
|
+
dropGraph: (graph) => write((s) => {
|
|
128
|
+
const graphs = copy(s.graphs);
|
|
129
|
+
graphs.delete(graph.key);
|
|
130
|
+
return [void 0, {
|
|
131
|
+
graphs,
|
|
132
|
+
dataset: removeMatches(s.dataset, { graph })
|
|
133
|
+
}];
|
|
134
|
+
}),
|
|
135
|
+
clear: (graph) => write((s) => [void 0, {
|
|
136
|
+
...s,
|
|
137
|
+
dataset: removeMatches(s.dataset, { graph })
|
|
138
|
+
}]),
|
|
139
|
+
transaction: (effect) => Effect.flatMap(Effect.service(InTransaction), (inTx) => {
|
|
140
|
+
if (inTx) return effect;
|
|
141
|
+
return lock.withPermits(1)(Effect.flatMap(Ref.get(state), (before) => effect.pipe(Effect.provideService(InTransaction, true), Effect.onError(() => Ref.set(state, before)))));
|
|
142
|
+
})
|
|
143
|
+
};
|
|
144
|
+
});
|
|
145
|
+
/**
|
|
146
|
+
* A layer providing an in-memory `QuadStore`, optionally pre-loaded with a
|
|
147
|
+
* dataset.
|
|
148
|
+
*
|
|
149
|
+
* @since 0.1.0
|
|
150
|
+
* @category layers
|
|
151
|
+
*/
|
|
152
|
+
const layerMemory = (initial = empty) => Layer.effect(QuadStore, makeMemory(initial));
|
|
153
|
+
/**
|
|
154
|
+
* Collects all quads of a store into a `Dataset`.
|
|
155
|
+
*
|
|
156
|
+
* @since 0.1.0
|
|
157
|
+
* @category utils
|
|
158
|
+
*/
|
|
159
|
+
const toDataset = (store) => Effect.map(Stream.runCollect(store.match({})), (quads) => fromIterable(quads));
|
|
160
|
+
export { makeMemory as a, layerMemory as i, StoreError as n, toDataset as o, Store_exports as r, QuadStore as t };
|
|
161
|
+
|
|
162
|
+
//# sourceMappingURL=Store-DH3Ow1GO.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Store-DH3Ow1GO.mjs","names":["Term.isNamedNode","Term.isLiteral","Term.isGraph","Dataset.empty","StringMap.empty","StringMap.copy","Dataset.graphs","Term.isDefaultGraph","count","Dataset.count","Dataset.match","Dataset.addAll","Dataset.mutate","Dataset.removeMatches","Dataset.fromIterable"],"sources":["../src/sparql/Store.ts"],"sourcesContent":["/**\n * The storage abstraction of the SPARQL engine.\n *\n * A backend implements `QuadStore`: streaming quad pattern matching, named\n * graph management, updates and transactions. Optionally it can\n *\n * - give cardinality estimates (`estimate`) used by the optimizer to order\n * joins, and\n * - evaluate algebra natively through a `QueryCapability` (e.g. a SQL backend\n * translating SPARQL algebra to SQL): the engine offers every algebra node\n * to `QueryCapability.evaluate` top-down before evaluating it generically,\n * so a backend can take over whole subtrees and fall back to the engine for\n * anything it does not support.\n *\n * `MemoryStore` is an in-memory implementation based on the core\n * `Dataset`.\n *\n * @since 0.1.0\n */\nimport * as Context from 'effect/Context';\nimport * as Effect from 'effect/Effect';\nimport * as Iterable from 'effect/Iterable';\nimport * as Layer from 'effect/Layer';\nimport * as Option from 'effect/Option';\nimport * as Ref from 'effect/Ref';\nimport * as Schema from 'effect/Schema';\nimport * as Semaphore from 'effect/Semaphore';\nimport * as Stream from 'effect/Stream';\nimport * as Dataset from '../Dataset.ts';\nimport * as Term from '../Term.ts';\nimport type * as Algebra from './Algebra.ts';\nimport * as StringMap from './internal/stringMap.ts';\nimport type { Bindings } from './Bindings.ts';\n\n// -----------------------------------------------------------------------------\n// Errors and models\n// -----------------------------------------------------------------------------\n\n/**\n * A failure of the storage backend.\n *\n * @since 0.1.0\n * @category errors\n */\nexport class StoreError extends Schema.TaggedError<StoreError>()('StoreError', {\n message: Schema.String,\n cause: Schema.optional(Schema.Defect()),\n}) {}\n\n/**\n * A quad pattern: `undefined` positions match anything. `graph` may be the\n * default graph.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface QuadPattern {\n readonly subject?: Term.GroundTerm | undefined;\n readonly predicate?: Term.GroundTerm | undefined;\n readonly object?: Term.GroundTerm | undefined;\n readonly graph?: Term.Graph | undefined;\n}\n\n/**\n * The RDF dataset a query is evaluated against.\n *\n * - `defaultGraph`: `'default'` uses the store's default graph, `'union'` the\n * merge of all graphs (default and named), or an explicit list of graphs\n * whose merge forms the default graph (`FROM`).\n * - `namedGraphs`: `'all'` uses every named graph of the store, or an\n * explicit list (`FROM NAMED`).\n *\n * @since 0.1.0\n * @category models\n */\nexport interface DatasetSpec {\n readonly defaultGraph: 'default' | 'union' | ReadonlyArray<Term.Graph>;\n readonly namedGraphs: 'all' | ReadonlyArray<Term.NamedNode | Term.BlankNode>;\n}\n\n/**\n * The graph that patterns are matched against.\n *\n * @since 0.1.0\n * @category models\n */\nexport type ActiveGraph =\n | { readonly _tag: 'DefaultGraph' }\n | { readonly _tag: 'NamedGraph'; readonly graph: Term.NamedNode | Term.BlankNode };\n\n/**\n * What a `QueryCapability` receives with an algebra node.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface EvaluationContext {\n readonly dataset: DatasetSpec;\n readonly activeGraph: ActiveGraph;\n /**\n * Evaluates a sub-operator with the generic engine (which offers it to the\n * capability again), so that a backend can handle a node itself while\n * delegating some of its children.\n */\n readonly evaluate: (\n op: Algebra.Operation,\n activeGraph?: ActiveGraph,\n ) => Stream.Stream<Bindings, unknown>;\n}\n\n/**\n * Native algebra evaluation offered by a backend.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface QueryCapability {\n /**\n * Returns `Some(stream)` to evaluate `op` natively, or `None` to let the\n * engine evaluate it (offering its children again).\n */\n readonly evaluate: (\n op: Algebra.Operation,\n context: EvaluationContext,\n ) => Option.Option<Stream.Stream<Bindings, StoreError>>;\n}\n\n/**\n * The interface implemented by storage backends.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface QuadStoreShape {\n /** Streams the quads matching a pattern. */\n readonly match: (pattern: QuadPattern) => Stream.Stream<Term.Quad, StoreError>;\n /**\n * An estimate of the number of quads matching a pattern, used by the\n * optimizer to order joins. Should be cheap.\n */\n readonly estimate?: ((pattern: QuadPattern) => Effect.Effect<number, StoreError>) | undefined;\n /** The exact number of quads matching a pattern, if the backend can count cheaply. */\n readonly count?: ((pattern: QuadPattern) => Effect.Effect<number, StoreError>) | undefined;\n /** The named graphs of the store (including empty graphs it tracks). */\n readonly graphs: Stream.Stream<Term.NamedNode | Term.BlankNode, StoreError>;\n /** Whether a named graph exists. */\n readonly hasGraph: (graph: Term.NamedNode | Term.BlankNode) => Effect.Effect<boolean, StoreError>;\n /** Adds quads (duplicates are ignored). */\n readonly insert: (quads: Iterable<Term.Quad>) => Effect.Effect<void, StoreError>;\n /** Removes quads (missing quads are ignored). */\n readonly delete: (quads: Iterable<Term.Quad>) => Effect.Effect<void, StoreError>;\n /** Creates an empty named graph. */\n readonly createGraph: (graph: Term.NamedNode | Term.BlankNode) => Effect.Effect<void, StoreError>;\n /** Removes a named graph and all its quads. */\n readonly dropGraph: (graph: Term.NamedNode | Term.BlankNode) => Effect.Effect<void, StoreError>;\n /** Removes all quads of a graph (the graph itself, if named, is kept). */\n readonly clear: (graph: Term.Graph) => Effect.Effect<void, StoreError>;\n /**\n * Runs an effect atomically: if it fails, all changes made through this\n * store during the effect are rolled back.\n */\n readonly transaction: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E | StoreError, R>;\n /** Native algebra evaluation, if supported. */\n readonly query?: QueryCapability | undefined;\n}\n\n/**\n * The quad store service used by the SPARQL engine.\n *\n * @since 0.1.0\n * @category services\n */\nexport class QuadStore extends Context.Service<QuadStore, QuadStoreShape>()(\n '@thomasfosterau/effect-rdf/sparql/QuadStore',\n) {}\n\n// -----------------------------------------------------------------------------\n// In-memory store\n// -----------------------------------------------------------------------------\n\ninterface MemoryState {\n readonly dataset: Dataset.Dataset;\n /** Explicitly created (possibly empty) named graphs, by key. */\n readonly graphs: ReadonlyMap<string, Term.NamedNode | Term.BlankNode>;\n}\n\nconst InTransaction = Context.Reference<boolean>(\n '@thomasfosterau/effect-rdf/sparql/Store/InTransaction',\n {\n defaultValue: () => false,\n },\n);\n\n/** The dataset pattern of a quad pattern; `None` if no quad can match it (a literal subject, …). */\nconst toDatasetPattern = (pattern: QuadPattern): Option.Option<Dataset.Pattern> => {\n const { subject, predicate, object, graph } = pattern;\n if (predicate !== undefined && !Term.isNamedNode(predicate)) return Option.none();\n if (subject !== undefined && Term.isLiteral(subject)) return Option.none();\n if (graph !== undefined && !Term.isGraph(graph)) return Option.none();\n return Option.some({ subject, predicate, object, graph });\n};\n\n/**\n * Builds an in-memory `QuadStore` backed by an immutable core `Dataset`.\n *\n * @since 0.1.0\n * @category constructors\n */\nexport const makeMemory = (\n initial: Dataset.Dataset = Dataset.empty,\n): Effect.Effect<QuadStoreShape & { readonly snapshot: Effect.Effect<Dataset.Dataset> }> =>\n Effect.gen(function* () {\n const state = yield* Ref.make<MemoryState>({ dataset: initial, graphs: StringMap.empty() });\n const lock = Semaphore.makeUnsafe(1);\n\n const write = <A>(f: (s: MemoryState) => readonly [A, MemoryState]) =>\n Effect.flatMap(Effect.service(InTransaction), (inTx) => {\n const run = Ref.modify(state, f);\n return inTx ? run : lock.withPermits(1)(run);\n });\n\n const namedGraphs = (s: MemoryState): ReadonlyArray<Term.NamedNode | Term.BlankNode> => {\n const out = StringMap.copy(s.graphs);\n Iterable.forEach(Dataset.graphs(s.dataset), (g) => {\n if (!Term.isDefaultGraph(g) && !out.has(g.key)) out.set(g.key, g);\n });\n return Array.from(out.values());\n };\n\n /** The exact count, which is cheap for the indexed dataset (so it is the estimate too). */\n const count = (pattern: QuadPattern) =>\n Effect.map(Ref.get(state), (s) => {\n const p = toDatasetPattern(pattern);\n return Option.isNone(p) ? 0 : Dataset.count(s.dataset, p.value);\n });\n\n const store: QuadStoreShape & { readonly snapshot: Effect.Effect<Dataset.Dataset> } = {\n snapshot: Effect.map(Ref.get(state), (s) => s.dataset),\n match: (pattern) =>\n Stream.suspend(() => {\n const p = toDatasetPattern(pattern);\n if (Option.isNone(p)) return Stream.empty;\n return Stream.fromIterableEffect(\n Effect.map(Ref.get(state), (s) => Dataset.match(s.dataset, p.value)),\n );\n }),\n estimate: count,\n count,\n graphs: Stream.fromIterableEffect(Effect.map(Ref.get(state), namedGraphs)),\n hasGraph: (graph) =>\n Effect.map(Ref.get(state), (s) => namedGraphs(s).some((g) => g.key === graph.key)),\n insert: (quads) =>\n write((s) => [undefined, { ...s, dataset: Dataset.addAll(s.dataset, quads) }]),\n delete: (quads) =>\n write((s) => [\n undefined,\n {\n ...s,\n dataset: Dataset.mutate(s.dataset, (b) => Iterable.forEach(quads, (q) => b.remove(q))),\n },\n ]),\n createGraph: (graph) =>\n write((s) => {\n const graphs = StringMap.copy(s.graphs);\n graphs.set(graph.key, graph);\n return [undefined, { ...s, graphs }];\n }),\n dropGraph: (graph) =>\n write((s) => {\n const graphs = StringMap.copy(s.graphs);\n graphs.delete(graph.key);\n return [undefined, { graphs, dataset: Dataset.removeMatches(s.dataset, { graph }) }];\n }),\n clear: (graph) =>\n write((s) => [undefined, { ...s, dataset: Dataset.removeMatches(s.dataset, { graph }) }]),\n transaction: <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n Effect.flatMap(Effect.service(InTransaction), (inTx) => {\n if (inTx) return effect;\n return lock.withPermits(1)(\n Effect.flatMap(Ref.get(state), (before) =>\n effect.pipe(\n Effect.provideService(InTransaction, true),\n Effect.onError(() => Ref.set(state, before)),\n ),\n ),\n );\n }),\n };\n return store;\n });\n\n/**\n * A layer providing an in-memory `QuadStore`, optionally pre-loaded with a\n * dataset.\n *\n * @since 0.1.0\n * @category layers\n */\nexport const layerMemory = (initial: Dataset.Dataset = Dataset.empty): Layer.Layer<QuadStore> =>\n Layer.effect(QuadStore, makeMemory(initial));\n\n/**\n * Collects all quads of a store into a `Dataset`.\n *\n * @since 0.1.0\n * @category utils\n */\nexport const toDataset = (store: QuadStoreShape): Effect.Effect<Dataset.Dataset, StoreError> =>\n Effect.map(Stream.runCollect(store.match({})), (quads) => Dataset.fromIterable(quads));\n"],"mappings":"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"}
|