@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":"Translation-DC9rLm2y.mjs","names":["XSD","Xsd.isKnownDatatype","Xsd.isValidLexical","Xsd.isNumericDatatype","Xsd.toValue","Store.StoreError","Term.namedNode","Term.blankNode","Term.Literal","Term.isTriple","Term.isGround","Term.isDefaultGraph","Term.Literal","Term.namedNode","Enc.classify","Term.isVariable","Term.isNamedNode","Enc.encode","Term.XSD_STRING","Term.isLiteral","Term.literal","Expression.equals","Enc.WELL_FORMED_KNOWN","Expression.effectiveBooleanValue"],"sources":["../src/sparql/sql/internal/encoding.ts","../src/sparql/sql/Translation.ts"],"sourcesContent":["/**\n * The encoding of RDF terms as rows of the term dictionary.\n *\n * @internal\n */\nimport * as Match from 'effect/Match';\nimport * as BigDecimal from 'effect/BigDecimal';\nimport * as MutableHashMap from 'effect/MutableHashMap';\nimport * as MutableHashSet from 'effect/MutableHashSet';\nimport * as Option from 'effect/Option';\nimport * as Term from '../../../Term.ts';\nimport * as Xsd from '../../../Xsd.ts';\nimport * as Store from '../../Store.ts';\n\n/** Term kinds stored in the `kind` column. */\nexport const Kind = {\n NamedNode: 1,\n BlankNode: 2,\n Literal: 3,\n Triple: 4,\n} as const;\n\n/**\n * Comparison classes stored in the `cls` column. They let the SQL\n * translation of SPARQL comparisons decide, per row, which comparison rule\n * applies (numeric, string, boolean, …) — and tell the store which rules the\n * data could need that SQL cannot evaluate exactly.\n */\nexport const Cls = {\n /** IRIs and blank nodes. */\n Resource: 0,\n /** Integers and decimals whose double value is exact and order preserving. */\n SafeNumber: 1,\n /** Finite `xsd:double`. */\n Double: 2,\n /** Finite `xsd:float` (`num` holds the float value). */\n Float: 3,\n /** `xsd:string`. */\n String: 4,\n /** Language-tagged strings (with or without a base direction). */\n LangString: 5,\n /** Valid `xsd:boolean` (`num` is 0 or 1). */\n Boolean: 6,\n /** Valid date/time and duration literals. */\n Temporal: 7,\n /** Integers and decimals that do not fit a double exactly. */\n UnsafeNumber: 8,\n /** Literals of datatypes unknown to the engine. */\n Unknown: 9,\n /** Triple terms. */\n Triple: 10,\n /** `NaN` and infinite doubles and floats. */\n SpecialFloat: 11,\n /** Ill-formed literals of numeric datatypes. */\n IllFormedNumeric: 12,\n /** Other well-formed literals of known datatypes (e.g. `xsd:anyURI`). */\n OtherKnown: 13,\n /** Other ill-formed literals of known datatypes. */\n IllFormed: 14,\n} as const;\n\n/** All comparison classes. */\nexport const ALL_CLASSES: ReadonlyArray<number> = Array.from({ length: 15 }, (_, i) => i);\n\n/** Classes of literals that are well-formed and of a known datatype. */\nexport const WELL_FORMED_KNOWN: ReadonlyArray<number> = [1, 2, 3, 4, 6, 7, 8, 11, 13];\n\nconst XSD = 'http://www.w3.org/2001/XMLSchema#';\n\nconst TEMPORAL = MutableHashSet.fromIterable(\n [\n 'dateTime',\n 'dateTimeStamp',\n 'date',\n 'time',\n 'gYear',\n 'gYearMonth',\n 'gMonth',\n 'gMonthDay',\n 'gDay',\n 'duration',\n 'dayTimeDuration',\n 'yearMonthDuration',\n ].map((l) => XSD + l),\n);\n\nconst MAX_SAFE = 2n ** 53n;\n\nconst decimalDigits = (d: BigDecimal.BigDecimal): number => {\n const n = BigDecimal.normalize(d);\n const v = n.value < 0n ? -n.value : n.value;\n return v.toString().length;\n};\n\n/** A term's comparison class and, for numbers and booleans, its numeric value. */\nexport interface Classification {\n readonly cls: number;\n /** The numeric value (none for terms without one, SQL `NULL` in the `num` column). */\n readonly num: Option.Option<number>;\n}\n\nconst noNumber = (cls: number): Classification => ({ cls, num: Option.none() });\n\nconst withNumber = (cls: number, num: number): Classification => ({ cls, num: Option.some(num) });\n\n// Built once: `classify` runs it for every numeric literal.\nconst numericClass = Match.type<Xsd.Value>().pipe(\n Match.withReturnType<Classification>(),\n Match.tag('Integer', (v) =>\n v.value <= MAX_SAFE && v.value >= -MAX_SAFE\n ? withNumber(Cls.SafeNumber, Number(v.value))\n : withNumber(Cls.UnsafeNumber, Number(v.value)),\n ),\n Match.tag('Decimal', (v) =>\n decimalDigits(v.value) <= 15\n ? withNumber(Cls.SafeNumber, Number(BigDecimal.format(v.value)))\n : withNumber(Cls.UnsafeNumber, BigDecimal.toNumberUnsafe(v.value)),\n ),\n Match.tag('Float', (v) =>\n Number.isFinite(v.value) ? withNumber(Cls.Float, v.value) : noNumber(Cls.SpecialFloat),\n ),\n Match.tag('Double', (v) =>\n Number.isFinite(v.value) ? withNumber(Cls.Double, v.value) : noNumber(Cls.SpecialFloat),\n ),\n Match.orElse(() => noNumber(Cls.IllFormedNumeric)),\n);\n\nconst RESOURCE = noNumber(Cls.Resource);\nconst TRIPLE = noNumber(Cls.Triple);\nconst LANG_STRING = noNumber(Cls.LangString);\nconst STRING = noNumber(Cls.String);\nconst UNKNOWN = noNumber(Cls.Unknown);\nconst ILL_FORMED_NUMERIC = noNumber(Cls.IllFormedNumeric);\nconst ILL_FORMED = noNumber(Cls.IllFormed);\nconst TEMPORAL_CLASS = noNumber(Cls.Temporal);\nconst OTHER_KNOWN = noNumber(Cls.OtherKnown);\n\n// Built once: `classify` runs for every term `encode` writes.\nconst classifyTerm = Match.type<Term.GroundTerm>().pipe(\n Match.withReturnType<Classification>(),\n Match.tag('NamedNode', 'BlankNode', () => RESOURCE),\n Match.tag('Triple', () => TRIPLE),\n Match.tag('Literal', (term) => {\n if (term.language !== '') return LANG_STRING;\n const dt = term.datatype.value;\n if (dt === Term.XSD_STRING) return STRING;\n if (!Xsd.isKnownDatatype(dt)) return UNKNOWN;\n const valid = Xsd.isValidLexical(dt, term.value);\n if (Xsd.isNumericDatatype(dt)) {\n if (!valid) return ILL_FORMED_NUMERIC;\n const v = Xsd.toValue(term);\n return numericClass(v);\n }\n if (!valid) return ILL_FORMED;\n if (dt === `${XSD}boolean`) {\n return withNumber(Cls.Boolean, term.value === 'true' || term.value === '1' ? 1 : 0);\n }\n if (MutableHashSet.has(TEMPORAL, dt)) return TEMPORAL_CLASS;\n return OTHER_KNOWN;\n }),\n Match.exhaustive,\n);\n\n/** The comparison class and numeric value of a term. */\nexport const classify = (term: Term.GroundTerm): Classification => classifyTerm(term);\n\n/** A row of the term dictionary (without the id). */\nexport interface TermRow {\n readonly kind: number;\n readonly value: string;\n readonly datatype: string;\n readonly lang: string;\n readonly dir: string;\n /** Triple term components (none for other terms, SQL `NULL` in the columns). */\n readonly sub: Option.Option<number>;\n readonly pre: Option.Option<number>;\n readonly obj: Option.Option<number>;\n readonly cls: number;\n /** The numeric value (none: SQL `NULL`). */\n readonly num: Option.Option<number>;\n}\n\n// Built once: `encode` runs for every term a load or update writes.\nconst encodeRow = Match.fn(\n (\n term: Term.GroundTerm,\n _class: Classification,\n _componentIds?: readonly [number, number, number],\n ) => term,\n).pipe(\n Match.withReturnType<TermRow>(),\n Match.tag('NamedNode', (term, _term, { cls, num }) => ({\n kind: Kind.NamedNode,\n value: term.value,\n datatype: '',\n lang: '',\n dir: '',\n sub: Option.none(),\n pre: Option.none(),\n obj: Option.none(),\n cls,\n num,\n })),\n Match.tag('BlankNode', (term, _term, { cls, num }) => ({\n kind: Kind.BlankNode,\n value: term.value,\n datatype: '',\n lang: '',\n dir: '',\n sub: Option.none(),\n pre: Option.none(),\n obj: Option.none(),\n cls,\n num,\n })),\n Match.tag('Literal', (term, _term, { cls, num }) => ({\n kind: Kind.Literal,\n value: term.value,\n datatype: term.datatype.value,\n lang: term.language,\n dir: term.direction ?? '',\n sub: Option.none(),\n pre: Option.none(),\n obj: Option.none(),\n cls,\n num,\n })),\n Match.tag('Triple', (_triple, _term, { cls, num }, componentIds) => {\n if (componentIds === undefined) {\n throw new Store.StoreError({ message: 'Triple terms need component ids' });\n }\n return {\n kind: Kind.Triple,\n value: componentIds.join(' '),\n datatype: '',\n lang: '',\n dir: '',\n sub: Option.some(componentIds[0]),\n pre: Option.some(componentIds[1]),\n obj: Option.some(componentIds[2]),\n cls,\n num,\n };\n }),\n Match.exhaustive,\n);\n\n/**\n * The dictionary row of a term. Triple terms store the ids of their\n * components in `value` (`\"s p o\"`), so that `(value, kind, datatype, lang,\n * dir)` is a unique key for every term.\n */\nexport const encode = (\n term: Term.GroundTerm,\n componentIds?: readonly [number, number, number],\n): TermRow => encodeRow(term, classify(term), componentIds);\n\n/** The unique key of a dictionary row. */\nexport const rowKey = (row: {\n readonly kind: number;\n readonly value: string;\n readonly datatype: string;\n readonly lang: string;\n readonly dir: string;\n}): string => `${row.kind}\\u0000${row.value}\\u0000${row.datatype}\\u0000${row.lang}\\u0000${row.dir}`;\n\nconst datatypes = MutableHashMap.empty<string, Term.NamedNode>();\n\nconst datatype = (iri: string): Term.NamedNode =>\n Option.getOrElse(MutableHashMap.get(datatypes, iri), () => {\n const n = Term.namedNode(iri);\n if (MutableHashMap.size(datatypes) < 10_000) MutableHashMap.set(datatypes, iri, n);\n return n;\n });\n\n// Built once: `decode` runs for every term a query result reads back.\nconst decodeRow = Match.fn(\n (kind: number, _value: string, _dt: string, _lang: string, _dir: string) => kind,\n).pipe(\n Match.withReturnType<Decoded>(),\n Match.when(Kind.NamedNode, (_kind, _k, value) => Term.namedNode(value)),\n Match.when(Kind.BlankNode, (_kind, _k, value) => Term.blankNode(value)),\n Match.when(\n Kind.Literal,\n (_kind, _k, value, dt, lang, dir) =>\n new Term.Literal(value, datatype(dt), lang, dir === 'ltr' || dir === 'rtl' ? dir : undefined),\n ),\n Match.orElse((_kind, _k, value) => {\n const [s = Number.NaN, p = Number.NaN, o = Number.NaN] = value.split(' ').map(Number);\n return [s, p, o];\n }),\n);\n\n/** A decoded dictionary row: the term, or the component ids of a triple term. */\nexport type Decoded = Term.GroundTerm | ComponentIds;\n\n/** The subject, predicate and object ids of a triple term. */\nexport type ComponentIds = readonly [number, number, number];\n\n/** Whether a decoded row is the component ids of a triple term. */\nexport const isComponentIds = (decoded: Decoded): decoded is ComponentIds => Array.isArray(decoded);\n\n/**\n * Decodes a non-triple dictionary row; returns the component ids for triple\n * terms.\n */\nexport const decode = (\n kind: number,\n value: string,\n dt: string,\n lang: string,\n dir: string,\n): Decoded => decodeRow(kind, value, dt, lang, dir);\n","/**\n * SPARQL algebra to SQL translation.\n *\n * `compile` translates an algebra tree into a single SQL `SELECT` over the\n * store's tables (term dictionary + quads of term ids), or reports that the\n * tree is not (exactly) translatable — the store then lets the generic engine\n * evaluate that node and offers its children again.\n *\n * Solutions are rows whose columns hold term ids (`NULL` = unbound). Terms\n * that are not in the dictionary but are needed by the query (constants of\n * `VALUES`, `BIND`, …) get negative, query-local ids. Integer results of\n * `COUNT` are carried as plain integers. The final `SELECT` joins the\n * dictionary to decode the ids.\n *\n * Translated: BGPs (self-joins of the quads table, triple term patterns\n * through the dictionary), `Join`, `LeftJoin` (with the filter in the `ON`\n * clause), `Union` (`UNION ALL` with `NULL` padding), `Minus` and\n * `[NOT] EXISTS` (correlated `NOT EXISTS` / `EXISTS`), `Filter`, `Graph`\n * (constant and variable), `Extend` with term-valued expressions, `Values`,\n * `Project`, `Distinct`, `Reduced`, `Slice` and `Group` with `COUNT` /\n * `SAMPLE`. Expressions: `&&`, `||`, `!`, `=`, `!=`, `<`, `>`, `<=`, `>=`,\n * `IN`, `NOT IN`, `BOUND`, `sameTerm`, `isIRI`, `isBlank`, `isLiteral`,\n * `isNumeric`, `isTriple`, `hasLang`, `hasLangDir`, `STR`, `LANG`,\n * `DATATYPE`, `STRLEN`, `STRSTARTS`, `STRENDS`, `CONTAINS`, `LANGMATCHES`,\n * `IF`, `COALESCE` and `EXISTS`, with SPARQL's error semantics (an error is\n * SQL `NULL`; SPARQL's `&&`/`||`/`!` coincide with SQL's three-valued logic).\n *\n * Comparisons are evaluated per row by the comparison class of the terms\n * (stored in the dictionary). Combinations of classes that SQL cannot compare\n * exactly (e.g. dates, arbitrary-precision decimals, float/double promotion)\n * are reported as `risks`: before running the query the store checks which\n * classes exist and falls back to the engine if a risk can occur.\n *\n * @since 0.1.0\n */\nimport * as Arr from 'effect/Array';\nimport * as Equal from 'effect/Equal';\nimport * as Match from 'effect/Match';\nimport * as MutableHashMap from 'effect/MutableHashMap';\nimport * as MutableHashSet from 'effect/MutableHashSet';\nimport * as Option from 'effect/Option';\nimport * as Result from 'effect/Result';\nimport * as Term from '../../Term.ts';\nimport type * as Algebra from '../Algebra.ts';\nimport type * as Ast from '../Ast.ts';\nimport * as Expression from '../Expression.ts';\nimport type * as Store from '../Store.ts';\nimport type * as Dialect from './Dialect.ts';\nimport * as Enc from './internal/encoding.ts';\nimport * as Predicate from 'effect/Predicate';\n\n// -----------------------------------------------------------------------------\n// Models\n// -----------------------------------------------------------------------------\n\n/**\n * What the translation needs to know besides the algebra.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface TranslationContext {\n readonly dialect: Dialect.Dialect;\n readonly tables: Dialect.Tables;\n readonly dataset: Store.DatasetSpec;\n readonly activeGraph: Store.ActiveGraph;\n}\n\n/**\n * An output column of a compiled query: `id` columns hold term ids (decoded\n * from the dictionary columns that follow them), `int` columns integers\n * (decoded as `xsd:integer`).\n *\n * @since 0.1.0\n * @category models\n */\nexport interface OutputColumn {\n readonly variable: string;\n readonly type: 'id' | 'int';\n}\n\n/**\n * A combination of comparison classes that the SQL cannot compare exactly.\n * The query is only exact if the combination cannot occur: a class marked\n * static is certainly present (it is the class of a constant operand);\n * otherwise it occurs if some term of the store (or a query-local constant)\n * has it.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface Risk {\n readonly a: number;\n readonly aStatic: boolean;\n readonly b: number;\n readonly bStatic: boolean;\n}\n\n/**\n * A compiled query.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface CompiledQuery {\n /** The SQL text (with dialect placeholders). */\n readonly sql: string;\n readonly params: ReadonlyArray<unknown>;\n /**\n * The output columns. Each `id` column is followed in the result rows by\n * the dictionary columns `kind, value, datatype, lang, dir`.\n */\n readonly columns: ReadonlyArray<OutputColumn>;\n /** Query-local terms (by negative id). */\n readonly locals: ReadonlyMap<number, Term.GroundTerm>;\n /** The comparison classes of the query-local terms. */\n readonly localClasses: ReadonlySet<number>;\n readonly risks: ReadonlyArray<Risk>;\n}\n\n/**\n * Whether the risks of a compiled query can occur, given the comparison\n * classes present in the store.\n *\n * @since 0.1.0\n * @category utils\n */\nexport const isRisky = (compiled: CompiledQuery, storeClasses: ReadonlySet<number>): boolean => {\n const present = (c: number) => storeClasses.has(c) || compiled.localClasses.has(c);\n return compiled.risks.some((r) => (r.aStatic || present(r.a)) && (r.bStatic || present(r.b)));\n};\n\nclass Unsupported {\n readonly reason: string;\n constructor(reason: string) {\n this.reason = reason;\n }\n}\n\nconst unsupported = (reason: string): never => {\n throw new Unsupported(reason);\n};\n\n// -----------------------------------------------------------------------------\n// Constants\n// -----------------------------------------------------------------------------\n\n/** Terms by key. */\ntype TermsByKey = MutableHashMap.MutableHashMap<string, Term.GroundTerm>;\n\n/** Whether a term (pattern) is a triple term with no variables. */\nconst isGroundTriple = (t: Ast.TermPattern | Term.Term): t is Term.Triple =>\n Term.isTriple(t) && Term.isGround(t);\n\nconst collectTerm = (term: Ast.TermPattern | Term.Term, out: TermsByKey): void => {\n return Match.value(term).pipe(\n Match.tag('NamedNode', 'Literal', (t) => {\n MutableHashMap.set(out, t.key, t);\n return;\n }),\n Match.tag('Triple', (t) => {\n if (isGroundTriple(t)) {\n MutableHashMap.set(out, t.key, t);\n } else {\n collectTerm(t.subject, out);\n collectTerm(t.predicate, out);\n collectTerm(t.object, out);\n }\n return;\n }),\n Match.orElse(() => undefined),\n );\n};\n\nconst collectExpression = (e: Algebra.Expression, out: TermsByKey): void => {\n Match.value(e).pipe(\n Match.tag('Operation', 'FunctionCall', (call) =>\n call.args.forEach((a) => collectExpression(a, out)),\n ),\n Match.tag('Exists', (x) => collectOperation(x.input, out)),\n Match.orElse((t) => collectTerm(t, out)),\n );\n};\n\nconst collectOperation = (operation: Algebra.Operation, out: TermsByKey): void => {\n return Match.value(operation).pipe(\n Match.tag('Bgp', (op) =>\n op.patterns.forEach((p) => {\n collectTerm(p.subject, out);\n collectTerm(p.predicate, out);\n collectTerm(p.object, out);\n }),\n ),\n Match.tag('Path', () => undefined),\n Match.tag('Join', 'Union', 'Minus', (op) => {\n collectOperation(op.left, out);\n collectOperation(op.right, out);\n return;\n }),\n Match.tag('LeftJoin', (op) => {\n collectOperation(op.left, out);\n collectOperation(op.right, out);\n if (op.expression !== undefined) collectExpression(op.expression, out);\n return;\n }),\n Match.tag('Filter', (op) => {\n collectExpression(op.expression, out);\n collectOperation(op.input, out);\n return;\n }),\n Match.tag('Extend', (op) => {\n collectExpression(op.expression, out);\n collectOperation(op.input, out);\n return;\n }),\n Match.tag('Graph', (op) => {\n collectTerm(op.name, out);\n collectOperation(op.input, out);\n return;\n }),\n Match.tag('Values', (op) =>\n op.bindings.forEach((b) => Arr.forEach(b, ([, t]) => collectTerm(t, out))),\n ),\n Match.tag('Group', 'OrderBy', 'Project', 'Distinct', 'Reduced', 'Slice', 'Service', (op) => {\n collectOperation(op.input, out);\n return;\n }),\n Match.exhaustive,\n );\n};\n\n/**\n * The constant terms of an algebra tree (and of the dataset) whose\n * dictionary ids the translation needs.\n *\n * @since 0.1.0\n * @category utils\n */\nexport const constants = (\n op: Algebra.Operation,\n context: Pick<TranslationContext, 'dataset' | 'activeGraph'>,\n): ReadonlyArray<Term.GroundTerm> => {\n const out: TermsByKey = MutableHashMap.empty();\n collectOperation(op, out);\n const { defaultGraph, namedGraphs } = context.dataset;\n if (!Predicate.isString(defaultGraph)) {\n defaultGraph.forEach((g) => {\n if (!Term.isDefaultGraph(g)) MutableHashMap.set(out, g.key, g);\n });\n }\n if (!Predicate.isString(namedGraphs)) {\n namedGraphs.forEach((g) => MutableHashMap.set(out, g.key, g));\n }\n if (Predicate.isTagged(context.activeGraph, 'NamedGraph')) {\n MutableHashMap.set(out, context.activeGraph.graph.key, context.activeGraph.graph);\n }\n MutableHashMap.set(out, TRUE.key, TRUE);\n MutableHashMap.set(out, FALSE.key, FALSE);\n return Arr.fromIterable(MutableHashMap.values(out));\n};\n\n// -----------------------------------------------------------------------------\n// Blocks\n// -----------------------------------------------------------------------------\n\ninterface Col {\n readonly sql: string;\n readonly nullable: boolean;\n readonly type: 'id' | 'int';\n}\n\n/** The columns of a block, by variable (in order of binding). */\ntype Cols = MutableHashMap.MutableHashMap<string, Col>;\n\n/** Column types without their SQL, by variable. */\ntype ColTypes = MutableHashMap.MutableHashMap<string, Omit<Col, 'sql'>>;\n\ninterface Item {\n readonly source: string;\n readonly alias: string;\n /** The `ON` condition of a `LEFT JOIN`; inner joins have none. */\n readonly left: Option.Option<string>;\n}\n\n/** A FROM item joined unconditionally. */\nconst inner = (source: string, alias: string): Item => ({ source, alias, left: Option.none() });\n\n/** A `SELECT` under construction: FROM items, WHERE conditions and variables. */\ninterface Block {\n readonly items: ReadonlyArray<Item>;\n readonly where: ReadonlyArray<string>;\n readonly cols: Cols;\n}\n\n/** A block selecting from one subquery. */\ninterface Wrapped extends Block {\n readonly items: readonly [Item];\n}\n\nconst EMPTY: Block = { items: [], where: [], cols: MutableHashMap.empty() };\n\n/** Whether a block is the unit (no items, conditions or columns). */\nconst isUnit = (block: Block): boolean =>\n Arr.isReadonlyArrayEmpty(block.items) &&\n Arr.isReadonlyArrayEmpty(block.where) &&\n MutableHashMap.isEmpty(block.cols);\n\ntype GraphCtx =\n | { readonly kind: 'default' }\n | { readonly kind: 'const'; readonly id: number }\n | { readonly kind: 'var'; readonly hidden: string };\n\nconst isHidden = (name: string): boolean => name.startsWith('#');\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 XSD = 'http://www.w3.org/2001/XMLSchema#';\nconst TRUE = new Term.Literal('true', Term.namedNode(`${XSD}boolean`));\nconst FALSE = new Term.Literal('false', Term.namedNode(`${XSD}boolean`));\n\n// -----------------------------------------------------------------------------\n// Expression operands\n// -----------------------------------------------------------------------------\n\ntype Scalar = string | number | boolean;\n\n/** A statically known value: none is SQL `NULL`. */\ntype Static = Option.Option<Scalar>;\n\n/** A field of an operand: statically known or a SQL expression. */\ntype F = { readonly s: Static } | { readonly q: string };\n\ntype C = boolean | string;\n\n/** The join condition of two columns of one variable, and their merged column. */\ninterface JoinCompat {\n readonly cond: string;\n readonly merged: Col;\n}\n\n/** Numeric-promotion branches of a comparison, and the class pairs they handle. */\ninterface Promotions {\n readonly branches: Array<readonly [C, string]>;\n readonly handled: MutableHashSet.MutableHashSet<string>;\n}\n\ninterface Fields {\n /** Possible comparison classes (none = any). */\n readonly classes: Option.Option<ReadonlyArray<number>>;\n readonly isNull: F;\n readonly cls: F;\n readonly kind: F;\n readonly value: F;\n readonly datatype: F;\n readonly lang: F;\n readonly dir: F;\n readonly num: F;\n}\n\ntype Operand =\n /** A term-valued expression (`id` is its term id). */\n | (Fields & { readonly tag: 'term'; readonly id: F })\n /** A constant term. */\n | (Fields & { readonly tag: 'const'; readonly id: F; readonly term: Term.GroundTerm })\n /** A boolean (`bool` is its SQL boolean). */\n | (Fields & { readonly tag: 'bool'; readonly bool: string })\n | (Fields & { readonly tag: 'int' })\n | (Fields & { readonly tag: 'str' })\n | (Fields & { readonly tag: 'iri' })\n | (Fields & { readonly tag: 'null' });\n\n/** The term id of a term-valued operand. */\nconst operandId = (o: Operand): Option.Option<F> =>\n o.tag === 'term' || o.tag === 'const' ? Option.some(o.id) : Option.none();\n\nconst S = (s: Scalar): F => ({ s: Option.some(s) });\nconst SO = (s: Static): F => ({ s });\nconst SNULL: F = { s: Option.none() };\nconst Q = (q: string): F => ({ q });\nconst isStatic = (f: F): f is { readonly s: Static } => 's' in f;\n\n/** The statically known number of a field. */\nconst staticNumber = (f: F): Option.Option<number> =>\n isStatic(f) ? Option.filter(f.s, Predicate.isNumber) : Option.none();\n\n/** Whether a field is statically the value `v`. */\nconst isStaticValue = (f: F, v: Scalar): boolean =>\n isStatic(f) && Option.exists(f.s, (s) => s === v);\n\nconst RISK_ORDER: ReadonlyArray<readonly [number, number]> = [\n [1, 3],\n [2, 3],\n [8, 1],\n [8, 2],\n [8, 3],\n [8, 8],\n [11, 1],\n [11, 2],\n [11, 3],\n [11, 8],\n [11, 11],\n [7, 7],\n];\nconst RISK_EQUAL: ReadonlyArray<readonly [number, number]> = [...RISK_ORDER, [10, 10]];\n\n/** The SQL conditions of `cs` (dropping the statically known ones). */\nconst conditions = (cs: ReadonlyArray<C>): Array<string> => cs.filter(Predicate.isString);\n\nconst and = (...cs: ReadonlyArray<C>): C => {\n if (cs.includes(false)) return false;\n const parts = conditions(cs);\n return Arr.match(parts, {\n onEmpty: () => true,\n onNonEmpty: ([first, ...rest]) =>\n Arr.isReadonlyArrayEmpty(rest) ? first : `(${parts.join(' AND ')})`,\n });\n};\n\nconst or = (...cs: ReadonlyArray<C>): C => {\n if (cs.includes(true)) return true;\n const parts = conditions(cs);\n return Arr.match(parts, {\n onEmpty: () => false,\n onNonEmpty: ([first, ...rest]) =>\n Arr.isReadonlyArrayEmpty(rest) ? first : `(${parts.join(' OR ')})`,\n });\n};\n\nconst condSql = (c: C): string => (c === true ? 'TRUE' : c === false ? 'FALSE' : c);\n\nconst isLive = (branch: readonly [C, string]): branch is readonly [string, string] =>\n Predicate.isString(branch[0]);\n\n/**\n * A `CASE` of the branches up to the first that always holds (whose value is\n * then the `ELSE`), dropping the branches that never hold.\n */\nconst caseOf = (branches: ReadonlyArray<readonly [C, string]>, otherwise: string): string => {\n const fallback = Option.match(\n Arr.findFirst(branches, ([c]) => c === true),\n { onNone: () => otherwise, onSome: ([, v]) => v },\n );\n const live = Arr.takeWhile(branches, ([c]) => c !== true).filter(isLive);\n if (Arr.isReadonlyArrayEmpty(live)) return fallback;\n return `(CASE ${live.map(([w, r]) => `WHEN ${w} THEN ${r}`).join(' ')} ELSE ${fallback} END)`;\n};\n\n// -----------------------------------------------------------------------------\n// Compiler\n// -----------------------------------------------------------------------------\n\ninterface Env {\n readonly cols: Cols;\n readonly graph: GraphCtx;\n}\n\n/** A query-local term and its (negative) id. */\ninterface Local {\n readonly id: number;\n readonly term: Term.GroundTerm;\n}\n\n/** Query-local terms by key. */\ntype Locals = MutableHashMap.MutableHashMap<string, Local>;\n\n/** An aggregate of a `GROUP`: the SQL of its value over the grouped subquery `s`. */\ninterface Aggregate {\n readonly target: string;\n readonly sql: (s: string) => string;\n readonly col: Omit<Col, 'sql'>;\n}\n\n/** A group key variable (`source`, bound to `col`) and the variable it is projected as. */\ninterface GroupKey {\n readonly source: string;\n readonly target: string;\n readonly col: Col;\n}\n\n/** The input of a `GRAPH ?var` and the column of its graph ids. */\ninterface GraphInput {\n readonly input: Block;\n readonly gcol: Col;\n}\n\n/** A variable of both sides of a `MINUS`, with its column on each side. */\ninterface Shared {\n readonly name: string;\n readonly left: Col;\n readonly right: Col;\n}\n\nclass Compiler {\n readonly dialect: Dialect.Dialect;\n readonly T: string;\n readonly Q: string;\n readonly G: string;\n counter = 0;\n readonly colNames = MutableHashMap.empty<string, string>();\n readonly params: Array<unknown> = [];\n readonly paramIndex = MutableHashMap.empty<string, number>();\n readonly risks: Array<Risk> = [];\n readonly localClasses = new Set<number>();\n\n readonly context: TranslationContext;\n readonly resolve: (term: Term.GroundTerm) => Option.Option<number>;\n /** Query-local terms, by key (stable across the two compilation passes). */\n readonly locals: Locals;\n /** Whether the query-local terms are complete (second pass). */\n readonly localsKnown: boolean;\n\n constructor(\n context: TranslationContext,\n resolve: (term: Term.GroundTerm) => Option.Option<number>,\n locals: Locals,\n localsKnown: boolean,\n ) {\n this.context = context;\n this.resolve = resolve;\n this.locals = locals;\n this.localsKnown = localsKnown;\n this.dialect = context.dialect;\n this.T = context.tables.terms;\n this.Q = context.tables.quads;\n this.G = context.tables.graphs;\n }\n\n alias(prefix: string): string {\n return `${prefix}${this.counter++}`;\n }\n\n col(name: string): string {\n return Option.getOrElse(MutableHashMap.get(this.colNames, name), () => {\n const c = `c${MutableHashMap.size(this.colNames)}`;\n MutableHashMap.set(this.colNames, name, c);\n return c;\n });\n }\n\n param(value: string): string {\n const i = Option.getOrElse(MutableHashMap.get(this.paramIndex, value), () => {\n this.params.push(value);\n const n = this.params.length;\n MutableHashMap.set(this.paramIndex, value, n);\n return n;\n });\n return this.dialect.castText(`\\ue000${i}\\ue000`);\n }\n\n lit(v: Scalar): string {\n if (Predicate.isBoolean(v)) return v ? 'TRUE' : 'FALSE';\n if (Predicate.isNumber(v)) {\n if (!Number.isFinite(v)) return 'NULL';\n return Number.isInteger(v) && Math.abs(v) < 1e15\n ? String(v)\n : this.dialect.castDouble(String(v));\n }\n return this.param(v);\n }\n\n /** A statically known value as SQL (none is `NULL`). */\n litOf(v: Static): string {\n return Option.match(v, { onNone: () => 'NULL', onSome: (s) => this.lit(s) });\n }\n\n f(field: F): string {\n return isStatic(field) ? this.litOf(field.s) : field.q;\n }\n\n /** The id of a constant term (a query-local negative id if it is not in the dictionary). */\n idOf(term: Term.GroundTerm | Term.DefaultGraph): number {\n if (Term.isDefaultGraph(term)) return 0;\n return Option.getOrElse(this.resolve(term), () => this.localId(term));\n }\n\n /** The query-local id of a term that is not in the dictionary. */\n localId(term: Term.GroundTerm): number {\n const local = Option.getOrElse(MutableHashMap.get(this.locals, term.key), () => {\n const created: Local = { id: -(MutableHashMap.size(this.locals) + 1), term };\n MutableHashMap.set(this.locals, term.key, created);\n return created;\n });\n this.localClasses.add(Enc.classify(term).cls);\n return local.id;\n }\n\n // --- rendering --------------------------------------------------------------\n\n from(items: ReadonlyArray<Item>): string {\n if (!Arr.isReadonlyArrayNonEmpty(items)) return '';\n const [first, ...rest] = items;\n const joins = rest.map((it) =>\n Option.match(it.left, {\n onNone: () => ` JOIN ${it.source} ${it.alias} ON TRUE`,\n onSome: (on) => ` LEFT JOIN ${it.source} ${it.alias} ON ${on}`,\n }),\n );\n return ` FROM ${first.source} ${first.alias}${joins.join('')}`;\n }\n\n whereClause(where: ReadonlyArray<string>): string {\n return Arr.isReadonlyArrayEmpty(where) ? '' : ` WHERE ${where.join(' AND ')}`;\n }\n\n nullCol(type: 'id' | 'int'): string {\n return type === 'id' ? this.dialect.nullId : this.dialect.castId('NULL');\n }\n\n render(\n block: Block,\n names: ReadonlyArray<string> = Arr.fromIterable(MutableHashMap.keys(block.cols)),\n options: {\n readonly distinct?: boolean;\n readonly types?: MutableHashMap.MutableHashMap<string, 'id' | 'int'>;\n } = {},\n ): string {\n const { types } = options;\n const select = names.map((n) => {\n const sql = Option.match(MutableHashMap.get(block.cols, n), {\n onNone: () =>\n this.nullCol(\n types === undefined\n ? 'id'\n : Option.getOrElse(MutableHashMap.get(types, n), () => 'id' as const),\n ),\n onSome: (c) => c.sql,\n });\n return `${sql} AS ${this.col(n)}`;\n });\n return `SELECT ${options.distinct === true ? 'DISTINCT ' : ''}${Arr.isReadonlyArrayEmpty(select) ? '1 AS one' : select.join(', ')}${this.from(block.items)}${this.whereClause(block.where)}`;\n }\n\n /** Wraps SQL as a subquery item. */\n wrapSql(sql: string, cols: ColTypes): Wrapped {\n const alias = this.alias('s');\n const out: Cols = MutableHashMap.empty();\n MutableHashMap.forEach(cols, (c, n) => {\n MutableHashMap.set(out, n, { ...c, sql: `${alias}.${this.col(n)}` });\n });\n return { items: [inner(`(${sql})`, alias)], where: [], cols: out };\n }\n\n wrap(block: Block, options: { readonly distinct?: boolean } = {}): Wrapped {\n return this.wrapSql(this.render(block, undefined, options), block.cols);\n }\n\n // --- joins ------------------------------------------------------------------\n\n compat(a: Col, b: Col): JoinCompat {\n if (a.type !== b.type) return unsupported('Joining integer and term columns');\n if (!a.nullable && !b.nullable) return { cond: `${a.sql} = ${b.sql}`, merged: a };\n if (!a.nullable) return { cond: `(${b.sql} IS NULL OR ${b.sql} = ${a.sql})`, merged: a };\n if (!b.nullable) return { cond: `(${a.sql} IS NULL OR ${a.sql} = ${b.sql})`, merged: b };\n return {\n cond: `(${a.sql} IS NULL OR ${b.sql} IS NULL OR ${a.sql} = ${b.sql})`,\n merged: { sql: `COALESCE(${a.sql}, ${b.sql})`, nullable: true, type: a.type },\n };\n }\n\n join(a: Block, b: Block): Block {\n if (isUnit(b)) return a;\n if (isUnit(a)) return b;\n const cols = MutableHashMap.fromIterable(a.cols);\n const where = [...a.where, ...b.where];\n MutableHashMap.forEach(b.cols, (cb, n) =>\n Option.match(MutableHashMap.get(cols, n), {\n onNone: () => {\n MutableHashMap.set(cols, n, cb);\n },\n onSome: (ca) => {\n const { cond, merged } = this.compat(ca, cb);\n where.push(cond);\n MutableHashMap.set(cols, n, merged);\n },\n }),\n );\n return { items: [...a.items, ...b.items], where, cols };\n }\n\n /** Ensures a block has a FROM item (so that a LEFT JOIN can be appended). */\n anchored(block: Block): Block {\n if (Arr.isReadonlyArrayNonEmpty(block.items)) return block;\n return { ...block, items: [inner('(SELECT 1 AS one)', this.alias('u'))] };\n }\n\n // --- operators --------------------------------------------------------------\n\n op(operation: Algebra.Operation, g: GraphCtx, unit: Block): Block {\n return Match.value(operation).pipe(\n Match.tag('Bgp', (op) =>\n Arr.isReadonlyArrayEmpty(op.patterns) ? unit : this.bgp(op.patterns, g),\n ),\n Match.tag('Join', (op) => this.join(this.op(op.left, g, unit), this.op(op.right, g, unit))),\n Match.tag('LeftJoin', (op) => this.leftJoin(op, g, unit)),\n Match.tag('Filter', (op) => {\n const input = this.op(op.input, g, unit);\n const cond = this.ebv(this.operand(op.expression, { cols: input.cols, graph: g }));\n if (cond === 'TRUE') return input;\n return { ...input, where: [...input.where, cond] };\n }),\n Match.tag('Union', (op) => this.union(this.op(op.left, g, unit), this.op(op.right, g, unit))),\n Match.tag('Graph', (op) => this.graph(op, g, unit)),\n Match.tag('Extend', (op) => {\n const input = this.op(op.input, g, unit);\n if (MutableHashMap.has(input.cols, op.variable.value)) {\n return unsupported('BIND to a bound variable');\n }\n const col = this.termValued(this.operand(op.expression, { cols: input.cols, graph: g }));\n const cols = MutableHashMap.fromIterable(input.cols);\n MutableHashMap.set(cols, op.variable.value, col);\n return { ...input, cols };\n }),\n Match.tag('Minus', (op) => this.minus(this.op(op.left, g, unit), this.op(op.right, g, unit))),\n Match.tag('Group', (op) => this.group(op, g, unit)),\n Match.tag('Project', (op) => {\n const input = this.op(op.input, g, unit);\n const keep = MutableHashSet.fromIterable(op.variables.map((v) => v.value));\n const cols: Cols = MutableHashMap.empty();\n MutableHashMap.forEach(input.cols, (c, n) => {\n if (MutableHashSet.has(keep, n) || isHidden(n)) MutableHashMap.set(cols, n, c);\n });\n return { ...input, cols };\n }),\n Match.tag('Distinct', (op) => this.wrap(this.op(op.input, g, unit), { distinct: true })),\n Match.tag('Reduced', (op) => this.op(op.input, g, unit)),\n Match.tag('Slice', (op) => {\n if (g.kind === 'var') return unsupported('Slice inside GRAPH ?var');\n const input = this.op(op.input, g, unit);\n return this.wrapSql(\n `${this.render(input)}${this.dialect.limitOffset(op.limit, op.offset)}`,\n input.cols,\n );\n }),\n Match.tag('Values', (op) => {\n // Like the engine, inline data does not see the context solution.\n return this.values(op);\n }),\n Match.tag('OrderBy', () => unsupported('ORDER BY is evaluated by the engine')),\n Match.tag('Path', () => unsupported('Property paths are evaluated by the engine')),\n Match.tag('Service', () => unsupported('SERVICE is evaluated by the engine')),\n Match.exhaustive,\n );\n }\n\n // --- BGP --------------------------------------------------------------------\n\n bgp(patterns: ReadonlyArray<Ast.TriplePattern>, ctx: GraphCtx): Block {\n const items: Array<Item> = [];\n const where: Array<string> = [];\n const cols: Cols = MutableHashMap.empty();\n const bind = (name: string, sql: string) =>\n Option.match(MutableHashMap.get(cols, name), {\n onNone: () => {\n MutableHashMap.set(cols, name, { sql, nullable: false, type: 'id' });\n },\n onSome: (c) => {\n where.push(`${c.sql} = ${sql}`);\n },\n });\n const position = (t: Ast.TermPattern, sql: string, bound: Array<string>): void => {\n return Match.value(t).pipe(\n Match.tag('Variable', (pattern) => {\n bind(pattern.value, sql);\n return;\n }),\n Match.tag('BlankNode', () => unsupported('Blank node in a pattern')),\n Match.tag('NamedNode', 'Literal', (pattern) => {\n bound.push(`${sql} = ${this.idOf(pattern)}`);\n return;\n }),\n Match.tag('Triple', (pattern) => {\n if (isGroundTriple(pattern)) {\n bound.push(`${sql} = ${this.idOf(pattern)}`);\n return;\n }\n const ta = this.alias('t');\n items.push(inner(this.T, ta));\n where.push(`${ta}.id = ${sql}`, `${ta}.kind = ${Enc.Kind.Triple}`);\n position(pattern.subject, `${ta}.sub`, where);\n position(pattern.predicate, `${ta}.pre`, where);\n position(pattern.object, `${ta}.obj`, where);\n return;\n }),\n Match.exhaustive,\n );\n };\n const { defaultGraph } = this.context.dataset;\n patterns.forEach((p) => {\n const a = this.alias('q');\n const merged =\n ctx.kind === 'default' &&\n (defaultGraph === 'union' || (Array.isArray(defaultGraph) && defaultGraph.length > 1));\n if (merged) {\n // The default graph is a merge of several graphs: match each triple once.\n const conds: Array<string> = [];\n if (!Predicate.isString(defaultGraph)) {\n conds.push(`g IN (${defaultGraph.map((x) => this.idOf(x)).join(', ')})`);\n }\n const deferred: Array<() => void> = [];\n const positionIn = (t: Ast.TermPattern, column: string) => {\n if (Term.isVariable(t) || (Term.isTriple(t) && !Term.isGround(t))) {\n deferred.push(() => position(t, `${a}.${column}`, where));\n } else position(t, column, conds);\n };\n positionIn(p.subject, 's');\n positionIn(p.predicate, 'p');\n positionIn(p.object, 'o');\n items.push(\n inner(\n `(SELECT DISTINCT s, p, o FROM ${this.Q}${Arr.isReadonlyArrayNonEmpty(conds) ? ` WHERE ${conds.join(' AND ')}` : ''})`,\n a,\n ),\n );\n deferred.forEach((f) => f());\n return;\n }\n items.push(inner(this.Q, a));\n Match.value(ctx).pipe(\n Match.when({ kind: 'default' }, () => {\n if (defaultGraph === 'default') where.push(`${a}.g = 0`);\n else if (!Predicate.isString(defaultGraph) && Predicate.isTupleOf(defaultGraph, 1)) {\n where.push(`${a}.g = ${this.idOf(defaultGraph[0])}`);\n } else where.push('1 = 0');\n }),\n Match.when({ kind: 'const' }, (graph) => {\n where.push(`${a}.g = ${graph.id}`);\n }),\n Match.when({ kind: 'var' }, (graph) => {\n bind(graph.hidden, `${a}.g`);\n where.push(this.namedGraphCond(`${a}.g`));\n }),\n Match.exhaustive,\n );\n position(p.subject, `${a}.s`, where);\n position(p.predicate, `${a}.p`, where);\n position(p.object, `${a}.o`, where);\n });\n return { items, where, cols };\n }\n\n /** The condition that the graph id column `g` of a quad is a named graph of the dataset. */\n namedGraphCond(g: string): string {\n const named = this.context.dataset.namedGraphs;\n if (named === 'all') return `${g} <> 0`;\n if (Arr.isReadonlyArrayEmpty(named)) return '1 = 0';\n return `${g} IN (${named.map((n) => this.idOf(n)).join(', ')})`;\n }\n\n /** A subquery listing the named graphs of the dataset (column `g`). */\n namedGraphsSource(): string {\n const named = this.context.dataset.namedGraphs;\n if (named === 'all') {\n return `(SELECT id AS g FROM ${this.G} UNION SELECT DISTINCT g FROM ${this.Q} WHERE g <> 0)`;\n }\n if (Arr.isReadonlyArrayEmpty(named)) return `(SELECT ${this.dialect.nullId} AS g WHERE 1 = 0)`;\n const alias = this.alias('n');\n return `(SELECT column1 AS g FROM (VALUES ${named.map((n) => `(${this.idOf(n)})`).join(', ')}) AS ${alias})`;\n }\n\n // --- other operators ---------------------------------------------------------\n\n values(op: Algebra.Values): Block {\n const vars = op.variables.map((v) => v.value);\n if (Arr.isReadonlyArrayEmpty(op.bindings)) {\n const cols = MutableHashMap.fromIterable(\n vars.map((v): readonly [string, Col] => [\n v,\n { sql: this.dialect.nullId, nullable: true, type: 'id' },\n ]),\n );\n return { items: [], where: ['1 = 0'], cols };\n }\n const rows = op.bindings.map((b) =>\n Arr.isReadonlyArrayEmpty(vars)\n ? '(1)'\n : `(${vars\n .map((v) => {\n const t = b.map.get(v);\n return t === undefined ? this.dialect.nullId : String(this.idOf(t));\n })\n .join(', ')})`,\n );\n const a = this.alias('v');\n const select = Arr.isReadonlyArrayEmpty(vars)\n ? 'column1 AS one'\n : vars.map((v, i) => `column${i + 1} AS ${this.col(v)}`);\n const cols = MutableHashMap.fromIterable(\n vars.map((v): readonly [string, Col] => [\n v,\n {\n sql: `${a}.${this.col(v)}`,\n nullable: !op.bindings.every((b) => b.map.has(v)),\n type: 'id',\n },\n ]),\n );\n return {\n items: [\n inner(\n `(SELECT ${Predicate.isString(select) ? select : select.join(', ')} FROM (VALUES ${rows.join(', ')}) AS ${a}_rows)`,\n a,\n ),\n ],\n where: [],\n cols,\n };\n }\n\n leftJoin(op: Algebra.LeftJoin, g: GraphCtx, unit: Block): Block {\n const left = this.op(op.left, g, unit);\n const right = this.op(op.right, g, unit);\n MutableHashMap.forEach(right.cols, (c, n) => {\n const leftNullable = Option.match(MutableHashMap.get(left.cols, n), {\n onNone: () => true,\n onSome: (l) => l.nullable,\n });\n if (isHidden(n) && leftNullable && !c.nullable) {\n unsupported('OPTIONAL graph-dependent pattern under GRAPH ?var');\n }\n });\n if (op.expression === undefined && isUnit(right)) return left;\n const a = this.anchored(left);\n const r = this.wrap(right);\n const conds: Array<string> = [];\n const merged = MutableHashMap.fromIterable(a.cols);\n const out = MutableHashMap.fromIterable(a.cols);\n MutableHashMap.forEach(r.cols, (cr, n) =>\n Option.match(MutableHashMap.get(a.cols, n), {\n onNone: () => {\n MutableHashMap.set(merged, n, cr);\n MutableHashMap.set(out, n, { ...cr, nullable: true });\n },\n onSome: (ca) => {\n const { cond, merged: m } = this.compat(ca, cr);\n conds.push(cond);\n MutableHashMap.set(merged, n, m);\n MutableHashMap.set(\n out,\n n,\n ca.nullable\n ? { sql: `COALESCE(${ca.sql}, ${cr.sql})`, nullable: true, type: ca.type }\n : ca,\n );\n },\n }),\n );\n if (op.expression !== undefined) {\n const e = this.ebv(this.operand(op.expression, { cols: merged, graph: g }));\n if (e !== 'TRUE') conds.push(e);\n }\n const on = Arr.isReadonlyArrayEmpty(conds) ? 'TRUE' : conds.join(' AND ');\n const [item] = r.items;\n return {\n items: [...a.items, { source: item.source, alias: item.alias, left: Option.some(on) }],\n where: a.where,\n cols: out,\n };\n }\n\n union(a: Block, b: Block): Block {\n const names = distinct([...MutableHashMap.keys(a.cols), ...MutableHashMap.keys(b.cols)]);\n const cols: ColTypes = MutableHashMap.empty();\n const types = MutableHashMap.empty<string, 'id' | 'int'>();\n names.forEach((n) => {\n const ca = MutableHashMap.get(a.cols, n);\n const cb = MutableHashMap.get(b.cols, n);\n if (Option.isSome(ca) && Option.isSome(cb) && ca.value.type !== cb.value.type) {\n unsupported('UNION of integer and term columns');\n }\n const nullable =\n Option.isNone(ca) || Option.isNone(cb) || ca.value.nullable || cb.value.nullable;\n if (isHidden(n) && nullable) {\n unsupported('UNION of graph-dependent and independent patterns under GRAPH ?var');\n }\n // `n` is a column of `a` or of `b`.\n const type = Option.isSome(ca) ? ca.value.type : Option.isSome(cb) ? cb.value.type : 'id';\n MutableHashMap.set(types, n, type);\n MutableHashMap.set(cols, n, { nullable, type });\n });\n const sql = `${this.render(a, names, { types })} UNION ALL ${this.render(b, names, { types })}`;\n return this.wrapSql(sql, cols);\n }\n\n minus(a: Block, b: Block): Block {\n const bNames = Arr.fromIterable(MutableHashMap.keys(b.cols));\n const shared = bNames.filter((n) => MutableHashMap.has(a.cols, n));\n if (bNames.some((n) => isHidden(n) && !MutableHashMap.has(a.cols, n))) {\n return unsupported('MINUS of a graph-dependent pattern under GRAPH ?var');\n }\n const overlap = shared.filter((n) => !isHidden(n));\n if (Arr.isReadonlyArrayEmpty(overlap)) return a;\n const m = this.wrap(b);\n const pairs = Arr.filterMap(shared, (name): Result.Result<Shared, void> => {\n const left = MutableHashMap.get(a.cols, name);\n const right = MutableHashMap.get(m.cols, name);\n return Option.isSome(left) && Option.isSome(right)\n ? Result.succeed({ name, left: left.value, right: right.value })\n : Result.failVoid;\n });\n const conds = pairs.map(({ left, right }) => this.compat(left, right).cond);\n const overlapCond = or(\n ...pairs\n .filter(({ name }) => !isHidden(name))\n .map(({ left, right }) =>\n and(\n left.nullable ? `${left.sql} IS NOT NULL` : true,\n right.nullable ? `${right.sql} IS NOT NULL` : true,\n ),\n ),\n );\n if (overlapCond === false) return a;\n if (overlapCond !== true) conds.push(overlapCond);\n const [item] = m.items;\n return {\n ...a,\n where: [\n ...a.where,\n `NOT EXISTS (SELECT 1 FROM ${item.source} ${item.alias} WHERE ${conds.join(' AND ')})`,\n ],\n };\n }\n\n graph(op: Algebra.Graph, g: GraphCtx, unit: Block): Block {\n const name = op.name;\n if (Term.isNamedNode(name)) {\n const id = this.idOf(name);\n const input = this.op(op.input, { kind: 'const', id }, unit);\n const named = this.context.dataset.namedGraphs;\n const cond =\n named === 'all'\n ? `(EXISTS (SELECT 1 FROM ${this.G} WHERE id = ${id}) OR EXISTS (SELECT 1 FROM ${this.Q} WHERE g = ${id}))`\n : named.some((n) => n.key === name.key)\n ? 'TRUE'\n : '1 = 0';\n return cond === 'TRUE' ? input : { ...input, where: [...input.where, cond] };\n }\n const hidden = `#${this.alias('g')}`;\n const body = this.op(op.input, { kind: 'var', hidden }, unit);\n const bound = MutableHashMap.get(body.cols, hidden);\n if (Option.isSome(bound) && bound.value.nullable) {\n return unsupported('Graph-independent solutions under GRAPH ?var');\n }\n const { input, gcol } = Option.match(bound, {\n onSome: (c): GraphInput => ({ input: body, gcol: c }),\n onNone: (): GraphInput => {\n const alias = this.alias('n');\n return {\n input: { ...body, items: [...body.items, inner(this.namedGraphsSource(), alias)] },\n gcol: { sql: `${alias}.g`, nullable: false, type: 'id' },\n };\n },\n });\n const cols = MutableHashMap.fromIterable(input.cols);\n MutableHashMap.remove(cols, hidden);\n const where = [...input.where];\n Option.match(MutableHashMap.get(cols, name.value), {\n onNone: () => undefined,\n onSome: (existing) => {\n where.push(this.compat(existing, gcol).cond);\n },\n });\n MutableHashMap.set(cols, name.value, gcol);\n void g;\n return { items: input.items, where, cols };\n }\n\n group(op: Algebra.Group, g: GraphCtx, unit: Block): Block {\n if (g.kind === 'var') return unsupported('GROUP inside GRAPH ?var');\n const input = this.op(op.input, g, unit);\n const needed = MutableHashSet.empty<string>();\n const keyVars = op.keys.map((k): GroupKey => {\n const e = k.expression;\n if (!Term.isVariable(e)) return unsupported('Non-variable group key');\n const col = Option.getOrElse(MutableHashMap.get(input.cols, e.value), () =>\n unsupported('Group key is never bound'),\n );\n MutableHashSet.add(needed, e.value);\n return { source: e.value, target: k.variable.value, col };\n });\n const aggs = op.aggregates.map(({ variable, aggregate }): Aggregate => {\n const e = aggregate.expression;\n if (aggregate.name === 'COUNT') {\n if (e === '*') {\n if (aggregate.distinct) return unsupported('COUNT(DISTINCT *)');\n return {\n target: variable.value,\n sql: () => 'COUNT(*)',\n col: { nullable: false, type: 'int' },\n };\n }\n if (!Term.isVariable(e)) return unsupported('COUNT of an expression');\n const name = e.value;\n if (!MutableHashMap.has(input.cols, name)) {\n return { target: variable.value, sql: () => '0', col: { nullable: false, type: 'int' } };\n }\n MutableHashSet.add(needed, name);\n return {\n target: variable.value,\n sql: (s) => `COUNT(${aggregate.distinct ? 'DISTINCT ' : ''}${s}.${this.col(name)})`,\n col: { nullable: false, type: 'int' },\n };\n }\n if (aggregate.name === 'SAMPLE' && Term.isVariable(e)) {\n const name = e.value;\n return Option.match(MutableHashMap.get(input.cols, name), {\n onNone: (): Aggregate => ({\n target: variable.value,\n sql: () => this.dialect.nullId,\n col: { nullable: true, type: 'id' },\n }),\n onSome: (c): Aggregate => {\n MutableHashSet.add(needed, name);\n return {\n target: variable.value,\n sql: (s) => `MIN(${s}.${this.col(name)})`,\n col: { nullable: true, type: c.type },\n };\n },\n });\n }\n return unsupported(`Aggregate ${aggregate.name}`);\n });\n const s = this.alias('a');\n const cols: ColTypes = MutableHashMap.empty();\n const select = [\n ...keyVars.map((k) => {\n const sql = `${s}.${this.col(k.source)} AS ${this.col(k.target)}`;\n MutableHashMap.set(cols, k.target, { nullable: k.col.nullable, type: k.col.type });\n return sql;\n }),\n ...aggs.map((agg) => {\n const sql = `${agg.sql(s)} AS ${this.col(agg.target)}`;\n MutableHashMap.set(cols, agg.target, agg.col);\n return sql;\n }),\n ];\n const innerSql = this.render(input, Arr.fromIterable(needed));\n const groupBy = Arr.isReadonlyArrayEmpty(keyVars)\n ? ''\n : ` GROUP BY ${distinct(keyVars.map((k) => `${s}.${this.col(k.source)}`)).join(', ')}`;\n const sql = `SELECT ${Arr.isReadonlyArrayEmpty(select) ? '1 AS one' : select.join(', ')} FROM (${innerSql}) ${s}${groupBy}`;\n return this.wrapSql(sql, cols);\n }\n\n // --- expressions ------------------------------------------------------------\n\n /** A dictionary attribute of a term id expression. */\n attr(id: string, field: 'kind' | 'value' | 'datatype' | 'lang' | 'dir' | 'cls' | 'num'): string {\n const lookup = `(SELECT ${field} FROM ${this.T} WHERE id = ${id})`;\n if (MutableHashMap.isEmpty(this.locals)) return lookup;\n if (!this.localsKnown) return lookup;\n const branches = Arr.fromIterable(MutableHashMap.values(this.locals)).map(\n ({ id: localId, term }) => {\n const row = Enc.encode(term, [0, 0, 0]);\n const v = field === 'num' ? this.litOf(row.num) : this.lit(row[field]);\n // Typed values, so that the branches agree with the dictionary column.\n const typed =\n field === 'num'\n ? this.dialect.castDouble(v)\n : field === 'kind' || field === 'cls'\n ? this.dialect.castInt(v)\n : this.dialect.castText(v);\n return `WHEN ${localId} THEN ${typed}`;\n },\n );\n return `(CASE WHEN ${id} < 0 THEN (CASE ${id} ${branches.join(' ')} END) ELSE ${lookup} END)`;\n }\n\n termOperand(id: string, nullable: boolean): Operand {\n return {\n tag: 'term',\n classes: Option.none(),\n isNull: nullable ? Q(`${id} IS NULL`) : S(false),\n cls: Q(this.attr(id, 'cls')),\n kind: Q(this.attr(id, 'kind')),\n value: Q(this.attr(id, 'value')),\n datatype: Q(this.attr(id, 'datatype')),\n lang: Q(this.attr(id, 'lang')),\n dir: Q(this.attr(id, 'dir')),\n num: Q(this.attr(id, 'num')),\n id: Q(id),\n };\n }\n\n constOperand(constant: Term.GroundTerm): Operand {\n const { cls, num } = Enc.classify(constant);\n const base = {\n tag: 'const' as const,\n classes: Option.some([cls]),\n isNull: S(false),\n cls: S(cls),\n num: SO(num),\n id: S(this.idOf(constant)),\n term: constant,\n };\n return Match.value(constant).pipe(\n Match.withReturnType<Operand>(),\n Match.tag('NamedNode', 'BlankNode', (term) => ({\n ...base,\n kind: S(Term.isNamedNode(term) ? Enc.Kind.NamedNode : Enc.Kind.BlankNode),\n value: S(term.value),\n datatype: S(''),\n lang: S(''),\n dir: S(''),\n })),\n Match.tag('Literal', (term) => ({\n ...base,\n kind: S(Enc.Kind.Literal),\n value: S(term.value),\n datatype: S(term.datatype.value),\n lang: S(term.language),\n dir: S(term.direction ?? ''),\n })),\n Match.tag('Triple', () => ({\n ...base,\n kind: S(Enc.Kind.Triple),\n value: SNULL,\n datatype: S(''),\n lang: S(''),\n dir: S(''),\n })),\n Match.exhaustive,\n );\n }\n\n intOperand(sql: string, nullable: boolean): Operand {\n return {\n tag: 'int',\n classes: Option.some([Enc.Cls.SafeNumber]),\n isNull: nullable ? Q(`${sql} IS NULL`) : S(false),\n cls: S(Enc.Cls.SafeNumber),\n kind: S(Enc.Kind.Literal),\n value: Q(this.dialect.castText(sql)),\n datatype: S(`${XSD}integer`),\n lang: S(''),\n dir: S(''),\n num: Q(sql),\n };\n }\n\n strOperand(sql: string): Operand {\n return {\n tag: 'str',\n classes: Option.some([Enc.Cls.String]),\n isNull: Q(`${sql} IS NULL`),\n cls: S(Enc.Cls.String),\n kind: S(Enc.Kind.Literal),\n value: Q(sql),\n datatype: S(Term.XSD_STRING),\n lang: S(''),\n dir: S(''),\n num: SNULL,\n };\n }\n\n boolOperand(sql: string): Operand {\n if (sql === 'TRUE' || sql === 'FALSE') return this.constOperand(sql === 'TRUE' ? TRUE : FALSE);\n return {\n tag: 'bool',\n classes: Option.some([Enc.Cls.Boolean]),\n isNull: Q(`${sql} IS NULL`),\n cls: S(Enc.Cls.Boolean),\n kind: S(Enc.Kind.Literal),\n value: Q(`(CASE WHEN ${sql} THEN 'true' WHEN NOT ${sql} THEN 'false' END)`),\n datatype: S(`${XSD}boolean`),\n lang: S(''),\n dir: S(''),\n num: Q(`(CASE WHEN ${sql} THEN 1 WHEN NOT ${sql} THEN 0 END)`),\n bool: sql,\n };\n }\n\n iriOperand(sql: string): Operand {\n return {\n tag: 'iri',\n classes: Option.some([Enc.Cls.Resource]),\n isNull: Q(`${sql} IS NULL`),\n cls: S(Enc.Cls.Resource),\n kind: S(Enc.Kind.NamedNode),\n value: Q(sql),\n datatype: S(''),\n lang: S(''),\n dir: S(''),\n num: SNULL,\n };\n }\n\n readonly NULL: Operand = {\n tag: 'null',\n classes: Option.some([]),\n isNull: S(true),\n cls: SNULL,\n kind: SNULL,\n value: SNULL,\n datatype: SNULL,\n lang: SNULL,\n dir: SNULL,\n num: SNULL,\n };\n\n /** A term-valued expression as a column (for `BIND`). */\n termValued(operand: Operand): Col {\n return Match.value(operand).pipe(\n Match.withReturnType<Col>(),\n Match.when({ tag: 'term' }, (o) => ({\n sql: this.f(o.id),\n nullable: !isStaticValue(o.isNull, false),\n type: 'id',\n })),\n Match.when({ tag: 'const' }, (o) => ({\n sql: String(this.idOf(o.term)),\n nullable: false,\n type: 'id',\n })),\n Match.when({ tag: 'int' }, (o) => ({\n sql: this.f(o.num),\n nullable: !isStaticValue(o.isNull, false),\n type: 'int',\n })),\n Match.when({ tag: 'bool' }, (o) => ({\n sql: `(CASE WHEN ${o.bool} THEN ${this.idOf(TRUE)} WHEN NOT ${o.bool} THEN ${this.idOf(FALSE)} END)`,\n nullable: true,\n type: 'id',\n })),\n Match.when({ tag: 'null' }, () => ({ sql: this.dialect.nullId, nullable: true, type: 'id' })),\n Match.orElse(() => unsupported('Expression value is not a stored term')),\n );\n }\n\n /** Compiles an expression to an operand. */\n operand(expr: Algebra.Expression, env: Env): Operand {\n return Match.value(expr).pipe(\n Match.tag('Variable', (e) =>\n Option.match(MutableHashMap.get(env.cols, e.value), {\n onNone: () => this.NULL,\n onSome: (c) =>\n c.type === 'int'\n ? this.intOperand(c.sql, c.nullable)\n : this.termOperand(c.sql, c.nullable),\n }),\n ),\n Match.tag('NamedNode', 'Literal', (e) => this.constOperand(e)),\n Match.tag('BlankNode', () => unsupported('Blank node in an expression')),\n Match.tag('Triple', (e) =>\n isGroundTriple(e)\n ? this.constOperand(e)\n : unsupported('Triple term pattern in an expression'),\n ),\n Match.tag('FunctionCall', (e) => unsupported(`Function <${e.function.value}>`)),\n Match.tag('Exists', (e) => this.boolOperand(this.exists(e, env))),\n Match.tag('Operation', (e) => this.operation(e, env)),\n Match.exhaustive,\n );\n }\n\n operation(expr: Algebra.OperationExpression, env: Env): Operand {\n const args = expr.args;\n const arg = (i: number) =>\n Option.match(Arr.get(args, i), {\n onNone: () => unsupported(`Operator ${expr.operator} without argument ${i + 1}`),\n onSome: (a) => this.operand(a, env),\n });\n const bool = (sql: string) => this.boolOperand(sql);\n return Match.value(expr)\n .pipe(\n Match.when({ operator: '&&' }, () => bool(`(${this.ebv(arg(0))} AND ${this.ebv(arg(1))})`)),\n Match.when({ operator: '||' }, () => bool(`(${this.ebv(arg(0))} OR ${this.ebv(arg(1))})`)),\n Match.when({ operator: '!' }, () => bool(`(NOT ${this.ebv(arg(0))})`)),\n Match.when({ operator: '=' }, () => bool(this.equals(arg(0), arg(1)))),\n Match.when({ operator: '!=' }, () => bool(`(NOT ${this.equals(arg(0), arg(1))})`)),\n Match.when({ operator: Match.is('<', '>', '<=', '>=') }, (e) =>\n bool(this.compare(arg(0), arg(1), e.operator)),\n ),\n Match.when({ operator: Match.is('IN', 'NOT IN') }, (e) => {\n const value = arg(0);\n const tests = args.slice(1).map((_, i) => this.equals(value, arg(i + 1)));\n const any = Arr.isReadonlyArrayEmpty(tests) ? 'FALSE' : `(${tests.join(' OR ')})`;\n return bool(e.operator === 'IN' ? any : `(NOT ${any})`);\n }),\n Match.when({ operator: 'BOUND' }, () => {\n const v = args[0];\n if (!Term.isVariable(v)) return unsupported('BOUND of a non-variable');\n return bool(\n Option.match(MutableHashMap.get(env.cols, v.value), {\n onNone: () => 'FALSE',\n onSome: (c) => (c.nullable ? `(${c.sql} IS NOT NULL)` : 'TRUE'),\n }),\n );\n }),\n Match.when({ operator: 'SAMETERM' }, () => {\n const a = arg(0);\n const b = arg(1);\n if (a.tag === 'null' || b.tag === 'null') return bool('NULL');\n const ia = operandId(a);\n const ib = operandId(b);\n if (Option.isNone(ia) || Option.isNone(ib)) {\n return unsupported('sameTerm of computed values');\n }\n return bool(`(${this.f(ia.value)} = ${this.f(ib.value)})`);\n }),\n Match.when({ operator: Match.is('ISIRI', 'ISURI') }, () =>\n bool(this.kindTest(arg(0), Enc.Kind.NamedNode)),\n ),\n Match.when({ operator: 'ISBLANK' }, () => bool(this.kindTest(arg(0), Enc.Kind.BlankNode))),\n Match.when({ operator: 'ISLITERAL' }, () => bool(this.kindTest(arg(0), Enc.Kind.Literal))),\n Match.when({ operator: 'ISTRIPLE' }, () => bool(this.kindTest(arg(0), Enc.Kind.Triple))),\n Match.when({ operator: 'ISNUMERIC' }, () => {\n const a = arg(0);\n return bool(this.guard(a, condSql(this.clsIn(a, [1, 2, 3, 8, 11]))));\n }),\n Match.when({ operator: 'HASLANG' }, () => {\n const a = arg(0);\n return bool(this.guard(a, condSql(this.clsIn(a, [Enc.Cls.LangString]))));\n }),\n Match.when({ operator: 'HASLANGDIR' }, () => {\n const a = arg(0);\n return bool(\n this.guard(a, condSql(and(this.clsIn(a, [Enc.Cls.LangString]), this.ne(a.dir, S(''))))),\n );\n }),\n Match.when({ operator: 'STR' }, () => {\n const a = arg(0);\n if (a.tag === 'const') {\n const t = a.term;\n if (Term.isNamedNode(t) || Term.isLiteral(t)) {\n return this.constOperand(Term.literal(t.value));\n }\n return this.NULL;\n }\n if (a.tag === 'str' || a.tag === 'null') return a;\n return this.strOperand(\n caseOf(\n [\n [this.isNullC(a), 'NULL'],\n [\n or(this.eqC(a.kind, Enc.Kind.NamedNode), this.eqC(a.kind, Enc.Kind.Literal)),\n this.f(a.value),\n ],\n ],\n 'NULL',\n ),\n );\n }),\n Match.when({ operator: 'LANG' }, () => {\n const a = arg(0);\n if (a.tag === 'const') {\n const t = a.term;\n return Term.isLiteral(t) ? this.constOperand(Term.literal(t.language)) : this.NULL;\n }\n if (a.tag === 'null') return a;\n return this.strOperand(\n caseOf(\n [\n [this.isNullC(a), 'NULL'],\n [this.eqC(a.kind, Enc.Kind.Literal), this.f(a.lang)],\n ],\n 'NULL',\n ),\n );\n }),\n )\n .pipe(\n Match.when({ operator: 'DATATYPE' }, () => {\n const a = arg(0);\n if (a.tag === 'const') {\n const t = a.term;\n return Term.isLiteral(t) ? this.constOperand(t.datatype) : this.NULL;\n }\n if (a.tag === 'null') return a;\n return this.iriOperand(\n caseOf(\n [\n [this.isNullC(a), 'NULL'],\n [this.eqC(a.kind, Enc.Kind.Literal), this.f(a.datatype)],\n ],\n 'NULL',\n ),\n );\n }),\n Match.when({ operator: 'STRLEN' }, () => {\n const a = arg(0);\n if (a.tag === 'null') return a;\n return this.intOperand(\n caseOf(\n [\n [\n this.clsIn(a, [Enc.Cls.String, Enc.Cls.LangString]),\n this.dialect.length(this.f(a.value)),\n ],\n ],\n 'NULL',\n ),\n true,\n );\n }),\n Match.when({ operator: Match.is('STRSTARTS', 'STRENDS', 'CONTAINS') }, (e) => {\n const a = arg(0);\n const b = arg(1);\n const fn =\n e.operator === 'STRSTARTS'\n ? this.dialect.startsWith\n : e.operator === 'STRENDS'\n ? this.dialect.endsWith\n : this.dialect.contains;\n const strings = [Enc.Cls.String, Enc.Cls.LangString];\n const ok = and(\n this.clsIn(a, strings),\n this.clsIn(b, strings),\n or(\n this.clsIn(b, [Enc.Cls.String]),\n and(this.eqFF(a.lang, b.lang), this.eqFF(a.dir, b.dir)),\n ),\n );\n return bool(caseOf([[ok, fn(this.f(a.value), this.f(b.value))]], 'NULL'));\n }),\n Match.when({ operator: 'LANGMATCHES' }, () => {\n const a = arg(0);\n const b = arg(1);\n if (b.tag !== 'const') return unsupported('LANGMATCHES with a non-constant range');\n const range = b.term;\n if (!Term.isLiteral(range) || Enc.classify(range).cls !== Enc.Cls.String) {\n return bool('NULL');\n }\n // eslint-disable-next-line no-control-regex\n if (!/^[\\x00-\\x7f]*$/.test(range.value)) return unsupported('Non-ASCII language range');\n const r = range.value.toLowerCase();\n const tag = `lower(${this.f(a.value)})`;\n const test =\n r === '*'\n ? `(${this.f(a.value)} <> '')`\n : `(${tag} = ${this.lit(r)} OR ${this.dialect.startsWith(tag, this.lit(`${r}-`))})`;\n return bool(caseOf([[this.clsIn(a, [Enc.Cls.String]), test]], 'NULL'));\n }),\n Match.when({ operator: 'IF' }, () => {\n const c = this.ebv(arg(0));\n const a = arg(1);\n const b = arg(2);\n const ca = this.termValued(a);\n const cb = this.termValued(b);\n if (ca.type !== cb.type) return unsupported('IF of integer and term values');\n const sql = `(CASE WHEN ${c} THEN ${ca.sql} WHEN NOT ${c} THEN ${cb.sql} END)`;\n return ca.type === 'int' ? this.intOperand(sql, true) : this.termOperand(sql, true);\n }),\n Match.when({ operator: 'COALESCE' }, () => {\n const parts = args.map((_, i) => arg(i)).filter((o) => o.tag !== 'null');\n if (!Arr.isReadonlyArrayNonEmpty(parts)) return this.NULL;\n const cols = Arr.map(parts, (o) => this.termValued(o));\n const [first, ...rest] = cols;\n const type = first.type;\n if (rest.some((c) => c.type !== type)) {\n return unsupported('COALESCE of integer and term values');\n }\n const sql = Arr.isReadonlyArrayEmpty(rest)\n ? first.sql\n : `COALESCE(${cols.map((c) => c.sql).join(', ')})`;\n const nullable = cols.every((c) => c.nullable);\n return type === 'int' ? this.intOperand(sql, nullable) : this.termOperand(sql, nullable);\n }),\n Match.orElse((e) => unsupported(`Operator ${e.operator}`)),\n );\n }\n\n // --- conditions -------------------------------------------------------------\n\n isNullC(o: Operand): C {\n return isStatic(o.isNull) ? Option.exists(o.isNull.s, (s) => s === true) : o.isNull.q;\n }\n\n eqC(f: F, v: Scalar): C {\n if (isStatic(f)) return Option.exists(f.s, (s) => s === v);\n return `${f.q} = ${this.lit(v)}`;\n }\n\n clsIn(o: Operand, classes: ReadonlyArray<number>): C {\n const f = o.cls;\n if (isStatic(f)) return Option.exists(f.s, (s) => Predicate.isNumber(s) && classes.includes(s));\n return classes.length === 1 ? `${f.q} = ${classes[0]}` : `${f.q} IN (${classes.join(', ')})`;\n }\n\n eqFF(a: F, b: F): C {\n if (isStatic(a) && isStatic(b)) return Equal.equals(a.s, b.s);\n return `${this.f(a)} = ${this.f(b)}`;\n }\n\n ne(a: F, b: F): C {\n if (isStatic(a) && isStatic(b)) return !Equal.equals(a.s, b.s);\n return `${this.f(a)} <> ${this.f(b)}`;\n }\n\n /** `NULL` if the operand is unbound, otherwise the test. */\n guard(o: Operand, test: string): string {\n return caseOf([[this.isNullC(o), 'NULL']], test);\n }\n\n kindTest(o: Operand, kind: number): string {\n return this.guard(o, condSql(this.eqC(o.kind, kind)));\n }\n\n /** Records the class combinations of a comparison that SQL cannot evaluate exactly. */\n risk(\n pairs: ReadonlyArray<readonly [number, number]>,\n a: Operand,\n b: Operand,\n handled: MutableHashSet.MutableHashSet<string> = MutableHashSet.empty(),\n ): void {\n const possible = (o: Operand, c: number) =>\n Option.match(o.classes, { onNone: () => true, onSome: (classes) => classes.includes(c) });\n pairs.forEach(([x, y]) => {\n const orders: ReadonlyArray<readonly [number, number]> =\n x === y\n ? [[x, y]]\n : [\n [x, y],\n [y, x],\n ];\n orders.forEach(([p, q]) => {\n if (!possible(a, p) || !possible(b, q) || MutableHashSet.has(handled, `${p},${q}`)) return;\n const r: Risk = {\n a: p,\n aStatic: Option.isSome(a.classes),\n b: q,\n bStatic: Option.isSome(b.classes),\n };\n if (r.aStatic && r.bStatic) unsupported('Comparison that SQL cannot evaluate exactly');\n this.risks.push(r);\n });\n });\n }\n\n /**\n * Exact comparisons of a float-or-double term with a numeric constant,\n * following SPARQL's type promotion (integers and decimals are promoted to\n * float, floats to double). Returns the branches and the class pairs they\n * handle.\n */\n promoted(a: Operand, b: Operand, op: string): Promotions {\n const branches: Array<readonly [C, string]> = [];\n const handled = MutableHashSet.empty<string>();\n const one = (t: Operand, c: Operand, flip: boolean) => {\n if (c.tag !== 'const' || t.tag === 'const') return;\n const value = staticNumber(c.num);\n const constClass = staticNumber(c.cls);\n if (Option.isNone(value) || Option.isNone(constClass)) return;\n const v = value.value;\n const cc = constClass.value;\n const add = (cls: number, n: number) => {\n if (!Number.isFinite(n)) return;\n const cmp = flip\n ? `${this.lit(n)} ${op} ${this.f(t.num)}`\n : `${this.f(t.num)} ${op} ${this.lit(n)}`;\n branches.push([this.clsIn(t, [cls]), cmp]);\n MutableHashSet.add(handled, flip ? `${cc},${cls}` : `${cls},${cc}`);\n };\n if (cc === Enc.Cls.SafeNumber) add(Enc.Cls.Float, Math.fround(v));\n else if (cc === Enc.Cls.Double) add(Enc.Cls.Float, v);\n else if (cc === Enc.Cls.Float) add(Enc.Cls.Double, v);\n };\n one(a, b, false);\n one(b, a, true);\n return { branches, handled };\n }\n\n /**\n * The branches comparing two numbers of the same SQL-comparable kind\n * (integers, decimals and doubles together; floats with floats) by `num`.\n */\n numericBranches(a: Operand, b: Operand, num: string): Array<readonly [C, string]> {\n return [\n [and(this.clsIn(a, [1, 2]), this.clsIn(b, [1, 2])), num],\n [and(this.clsIn(a, [3]), this.clsIn(b, [3])), num],\n ];\n }\n\n /** SPARQL `=` (value equality, with errors as `NULL`). */\n equals(a: Operand, b: Operand): string {\n if (a.tag === 'null' || b.tag === 'null') return 'NULL';\n if (a.tag === 'const' && b.tag === 'const') {\n const r = Expression.equals(a.term, b.term);\n return Result.isSuccess(r) ? (r.success ? 'TRUE' : 'FALSE') : 'NULL';\n }\n const promoted = this.promoted(a, b, '=');\n this.risk(RISK_EQUAL, a, b, promoted.handled);\n const ia = operandId(a);\n const ib = operandId(b);\n const bothIds = Option.isSome(ia) && Option.isSome(ib);\n const sameId: C =\n Option.isSome(ia) && Option.isSome(ib) ? this.eqFF(ia.value, ib.value) : false;\n const num = `${this.f(a.num)} = ${this.f(b.num)}`;\n return caseOf(\n [\n [or(this.isNullC(a), this.isNullC(b)), 'NULL'],\n [sameId, 'TRUE'],\n ...promoted.branches,\n ...this.numericBranches(a, b, num),\n [and(this.clsIn(a, [6]), this.clsIn(b, [6])), num],\n [and(this.clsIn(a, [4]), this.clsIn(b, [4])), `${this.f(a.value)} = ${this.f(b.value)}`],\n [\n and(this.clsIn(a, [0]), this.clsIn(b, [0])),\n bothIds ? 'FALSE' : condSql(and(this.eqFF(a.kind, b.kind), this.eqFF(a.value, b.value))),\n ],\n [or(this.clsIn(a, [0, 10]), this.clsIn(b, [0, 10])), 'FALSE'],\n [or(this.clsIn(a, [5]), this.clsIn(b, [5])), 'FALSE'],\n [\n and(\n this.clsIn(a, Enc.WELL_FORMED_KNOWN),\n this.clsIn(b, Enc.WELL_FORMED_KNOWN),\n this.ne(a.datatype, b.datatype),\n ),\n 'FALSE',\n ],\n ],\n 'NULL',\n );\n }\n\n /** SPARQL `<`, `>`, `<=`, `>=`. */\n compare(a: Operand, b: Operand, op: '<' | '>' | '<=' | '>='): string {\n if (a.tag === 'null' || b.tag === 'null') return 'NULL';\n const promoted = this.promoted(a, b, op);\n this.risk(RISK_ORDER, a, b, promoted.handled);\n const num = `${this.f(a.num)} ${op} ${this.f(b.num)}`;\n const str = `${this.dialect.binary(this.f(a.value))} ${op} ${this.dialect.binary(this.f(b.value))}`;\n return caseOf(\n [\n [or(this.isNullC(a), this.isNullC(b)), 'NULL'],\n ...promoted.branches,\n ...this.numericBranches(a, b, num),\n [and(this.clsIn(a, [4]), this.clsIn(b, [4])), str],\n [\n and(\n this.clsIn(a, [5]),\n this.clsIn(b, [5]),\n this.eqFF(a.lang, b.lang),\n this.eqFF(a.dir, b.dir),\n ),\n str,\n ],\n [and(this.clsIn(a, [6]), this.clsIn(b, [6])), num],\n ],\n 'NULL',\n );\n }\n\n /** The effective boolean value (SQL boolean, `NULL` = error). */\n ebv(operand: Operand): string {\n return Match.value(operand).pipe(\n Match.when({ tag: 'bool' }, (o) => o.bool),\n Match.when({ tag: Match.is('null', 'iri') }, () => 'NULL'),\n Match.when({ tag: 'const' }, (o) => {\n const r = Expression.effectiveBooleanValue(o.term);\n return Result.isSuccess(r) ? (r.success ? 'TRUE' : 'FALSE') : 'NULL';\n }),\n Match.when({ tag: 'int' }, (o) => `(${this.f(o.num)} <> 0)`),\n Match.when({ tag: 'str' }, (o) => `(${this.f(o.value)} <> '')`),\n Match.when({ tag: 'term' }, (o) => {\n const num = `${this.f(o.num)} <> 0`;\n const value = this.f(o.value);\n return caseOf(\n [\n [this.clsIn(o, [6, 1, 2, 3]), num],\n [this.clsIn(o, [4]), `${value} <> ''`],\n [this.clsIn(o, [8]), this.dialect.hasNonZeroDigit(value)],\n [this.clsIn(o, [11]), `${value} <> 'NaN'`],\n [this.clsIn(o, [12]), 'FALSE'],\n ],\n 'NULL',\n );\n }),\n Match.exhaustive,\n );\n }\n\n /** `EXISTS` / `NOT EXISTS` as a correlated subquery. */\n exists(e: Algebra.ExistsExpression, env: Env): string {\n const context: Block = { items: [], where: [], cols: env.cols };\n const body = this.op(e.input, env.graph, context);\n const where = [...body.where];\n if (env.graph.kind === 'var') {\n const hidden = env.graph.hidden;\n const ic = MutableHashMap.get(body.cols, hidden);\n const oc = MutableHashMap.get(env.cols, hidden);\n if (Option.isSome(ic)) {\n if (Option.isNone(oc) || oc.value.nullable) {\n return unsupported('EXISTS in a graph-independent pattern');\n }\n if (ic.value.sql !== oc.value.sql) where.push(`${ic.value.sql} = ${oc.value.sql}`);\n }\n }\n const sql = `EXISTS (SELECT 1${this.from(body.items)}${this.whereClause(where)})`;\n return e.negated ? `(NOT ${sql})` : sql;\n }\n}\n\n// -----------------------------------------------------------------------------\n// Entry points\n// -----------------------------------------------------------------------------\n\nconst compileOnce = (\n op: Algebra.Operation,\n context: TranslationContext,\n resolve: (term: Term.GroundTerm) => Option.Option<number>,\n locals: Locals,\n localsKnown: boolean,\n): CompiledQuery => {\n const c = new Compiler(context, resolve, locals, localsKnown);\n const g: GraphCtx = Predicate.isTagged(context.activeGraph, 'NamedGraph')\n ? { kind: 'const', id: c.idOf(context.activeGraph.graph) }\n : { kind: 'default' };\n const block = c.op(op, g, EMPTY);\n const visible = Arr.fromIterable(block.cols).filter(([n]) => !isHidden(n));\n const names = visible.map(([n]) => n);\n const innerSql = c.render(block, names);\n const select: Array<string> = [];\n const joins: Array<string> = [];\n const columns: Array<OutputColumn> = [];\n visible.forEach(([n, col], i) => {\n const name = `r.${c.col(n)}`;\n columns.push({ variable: n, type: col.type });\n if (col.type === 'int') {\n select.push(name);\n return;\n }\n const t = `d${i}`;\n select.push(name, `${t}.kind`, `${t}.value`, `${t}.datatype`, `${t}.lang`, `${t}.dir`);\n joins.push(` LEFT JOIN ${c.T} ${t} ON ${t}.id = ${name}`);\n });\n const marked = `SELECT ${Arr.isReadonlyArrayEmpty(select) ? '1 AS one' : select.join(', ')} FROM (${innerSql}) r${joins.join('')}`;\n // Number the parameters in order of use (fragments of discarded branches\n // may have allocated parameters that are not used).\n const params: Array<unknown> = [];\n const numbering = MutableHashMap.empty<string, number>();\n const sql = marked.replace(/\\ue000(\\d+)\\ue000/g, (_, i: string) => {\n if (context.dialect.anonymousParameters) {\n params.push(c.params[Number(i) - 1]);\n return context.dialect.placeholder(params.length);\n }\n const n = Option.getOrElse(MutableHashMap.get(numbering, i), () => {\n params.push(c.params[Number(i) - 1]);\n MutableHashMap.set(numbering, i, params.length);\n return params.length;\n });\n return context.dialect.placeholder(n);\n });\n // `CompiledQuery.locals` is a `ReadonlyMap`.\n const byId = new Map(\n Arr.fromIterable(MutableHashMap.values(locals)).map(({ id, term }) => [id, term] as const),\n );\n return {\n sql,\n params,\n columns,\n locals: byId,\n localClasses: c.localClasses,\n risks: c.risks,\n };\n};\n\n/**\n * Translates an algebra tree to SQL. `resolve` gives the dictionary ids of\n * constant terms (see `constants`); terms it does not know get query-local\n * ids. Fails with a reason if the tree is not translatable.\n *\n * @since 0.1.0\n * @category compilation\n */\nexport const compile = (\n op: Algebra.Operation,\n context: TranslationContext,\n resolve: (term: Term.GroundTerm) => number | undefined,\n): Result.Result<CompiledQuery, string> => {\n const resolveId = (term: Term.GroundTerm) => Option.fromNullishOr(resolve(term));\n return Result.try({\n try: () => {\n const locals: Locals = MutableHashMap.empty();\n const first = compileOnce(op, context, resolveId, locals, false);\n if (MutableHashMap.isEmpty(locals)) return first;\n // Second pass: dictionary attributes of query-local terms are inlined.\n return compileOnce(op, context, resolveId, locals, true);\n },\n // An `Unsupported` is the expected failure; anything else is a defect and\n // keeps propagating.\n catch: (err) => {\n if (err instanceof Unsupported) return err.reason;\n throw err;\n },\n });\n};\n\n/**\n * Whether an algebra tree is translatable to SQL (independent of the data).\n *\n * @since 0.1.0\n * @category compilation\n */\nexport const supports = (op: Algebra.Operation, context: TranslationContext): boolean =>\n Result.isSuccess(compile(op, context, () => undefined));\n"],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { s as GroundTerm } from "./Term-B_4ezyXq.mjs";
|
|
2
|
+
import { g as Operation } from "./Algebra-uGsIEOUA.mjs";
|
|
3
|
+
import { n as DatasetSpec, t as ActiveGraph } from "./Store-D0jmVfb3.mjs";
|
|
4
|
+
import { i as Tables, t as Dialect } from "./Dialect-8ChFj5EX.mjs";
|
|
5
|
+
import * as Result from "effect/Result";
|
|
6
|
+
declare namespace Translation_d_exports {
|
|
7
|
+
export { CompiledQuery, OutputColumn, Risk, TranslationContext, compile, constants, isRisky, supports };
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* What the translation needs to know besides the algebra.
|
|
11
|
+
*
|
|
12
|
+
* @since 0.1.0
|
|
13
|
+
* @category models
|
|
14
|
+
*/
|
|
15
|
+
interface TranslationContext {
|
|
16
|
+
readonly dialect: Dialect;
|
|
17
|
+
readonly tables: Tables;
|
|
18
|
+
readonly dataset: DatasetSpec;
|
|
19
|
+
readonly activeGraph: ActiveGraph;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* An output column of a compiled query: `id` columns hold term ids (decoded
|
|
23
|
+
* from the dictionary columns that follow them), `int` columns integers
|
|
24
|
+
* (decoded as `xsd:integer`).
|
|
25
|
+
*
|
|
26
|
+
* @since 0.1.0
|
|
27
|
+
* @category models
|
|
28
|
+
*/
|
|
29
|
+
interface OutputColumn {
|
|
30
|
+
readonly variable: string;
|
|
31
|
+
readonly type: 'id' | 'int';
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* A combination of comparison classes that the SQL cannot compare exactly.
|
|
35
|
+
* The query is only exact if the combination cannot occur: a class marked
|
|
36
|
+
* static is certainly present (it is the class of a constant operand);
|
|
37
|
+
* otherwise it occurs if some term of the store (or a query-local constant)
|
|
38
|
+
* has it.
|
|
39
|
+
*
|
|
40
|
+
* @since 0.1.0
|
|
41
|
+
* @category models
|
|
42
|
+
*/
|
|
43
|
+
interface Risk {
|
|
44
|
+
readonly a: number;
|
|
45
|
+
readonly aStatic: boolean;
|
|
46
|
+
readonly b: number;
|
|
47
|
+
readonly bStatic: boolean;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* A compiled query.
|
|
51
|
+
*
|
|
52
|
+
* @since 0.1.0
|
|
53
|
+
* @category models
|
|
54
|
+
*/
|
|
55
|
+
interface CompiledQuery {
|
|
56
|
+
/** The SQL text (with dialect placeholders). */
|
|
57
|
+
readonly sql: string;
|
|
58
|
+
readonly params: ReadonlyArray<unknown>;
|
|
59
|
+
/**
|
|
60
|
+
* The output columns. Each `id` column is followed in the result rows by
|
|
61
|
+
* the dictionary columns `kind, value, datatype, lang, dir`.
|
|
62
|
+
*/
|
|
63
|
+
readonly columns: ReadonlyArray<OutputColumn>;
|
|
64
|
+
/** Query-local terms (by negative id). */
|
|
65
|
+
readonly locals: ReadonlyMap<number, GroundTerm>;
|
|
66
|
+
/** The comparison classes of the query-local terms. */
|
|
67
|
+
readonly localClasses: ReadonlySet<number>;
|
|
68
|
+
readonly risks: ReadonlyArray<Risk>;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Whether the risks of a compiled query can occur, given the comparison
|
|
72
|
+
* classes present in the store.
|
|
73
|
+
*
|
|
74
|
+
* @since 0.1.0
|
|
75
|
+
* @category utils
|
|
76
|
+
*/
|
|
77
|
+
declare const isRisky: (compiled: CompiledQuery, storeClasses: ReadonlySet<number>) => boolean;
|
|
78
|
+
/**
|
|
79
|
+
* The constant terms of an algebra tree (and of the dataset) whose
|
|
80
|
+
* dictionary ids the translation needs.
|
|
81
|
+
*
|
|
82
|
+
* @since 0.1.0
|
|
83
|
+
* @category utils
|
|
84
|
+
*/
|
|
85
|
+
declare const constants: (op: Operation, context: Pick<TranslationContext, "dataset" | "activeGraph">) => ReadonlyArray<GroundTerm>;
|
|
86
|
+
/**
|
|
87
|
+
* Translates an algebra tree to SQL. `resolve` gives the dictionary ids of
|
|
88
|
+
* constant terms (see `constants`); terms it does not know get query-local
|
|
89
|
+
* ids. Fails with a reason if the tree is not translatable.
|
|
90
|
+
*
|
|
91
|
+
* @since 0.1.0
|
|
92
|
+
* @category compilation
|
|
93
|
+
*/
|
|
94
|
+
declare const compile: (op: Operation, context: TranslationContext, resolve: (term: GroundTerm) => number | undefined) => Result.Result<CompiledQuery, string>;
|
|
95
|
+
/**
|
|
96
|
+
* Whether an algebra tree is translatable to SQL (independent of the data).
|
|
97
|
+
*
|
|
98
|
+
* @since 0.1.0
|
|
99
|
+
* @category compilation
|
|
100
|
+
*/
|
|
101
|
+
declare const supports: (op: Operation, context: TranslationContext) => boolean;
|
|
102
|
+
export { Translation_d_exports as a, isRisky as c, TranslationContext as i, supports as l, OutputColumn as n, compile as o, Risk as r, constants as s, CompiledQuery as t };
|
|
103
|
+
//# sourceMappingURL=Translation-K4L9XBqX.d.mts.map
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-D8jQpDG7.mjs";
|
|
2
|
+
import { c as makeCodec, d as makeSerializer, l as makeFormat, u as makeParser } from "./Serialization-DP9H5bYQ.mjs";
|
|
3
|
+
import { a as parseStream$1, i as parseQuads$1, n as serializeStream$1, r as parse$1, t as serialize$1 } from "./serialize-96KBvKaf.mjs";
|
|
4
|
+
import * as Option from "effect/Option";
|
|
5
|
+
// src/turtle/TriG.ts
|
|
6
|
+
/**
|
|
7
|
+
* RDF 1.2 TriG: Turtle extended with named graphs.
|
|
8
|
+
*
|
|
9
|
+
* Supports the same RDF 1.2 features as `Turtle`, plus `GRAPH` blocks and
|
|
10
|
+
* `{ ... }` default-graph blocks. The serializer writes default-graph
|
|
11
|
+
* triples at the top level followed by one block per named graph, with the
|
|
12
|
+
* same pretty-printing as the Turtle serializer.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { Effect } from 'effect'
|
|
17
|
+
* import { TriG } from '@thomasfosterau/effect-rdf/turtle'
|
|
18
|
+
*
|
|
19
|
+
* const program = Effect.gen(function* () {
|
|
20
|
+
* const { dataset, prefixes } = yield* TriG.parse(`
|
|
21
|
+
* PREFIX ex: <http://example.org/>
|
|
22
|
+
* ex:g { ex:s ex:p ex:o }
|
|
23
|
+
* `)
|
|
24
|
+
* return yield* TriG.serialize(dataset, { prefixes })
|
|
25
|
+
* })
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @since 0.1.0
|
|
29
|
+
*/
|
|
30
|
+
var TriG_exports = /* @__PURE__ */ __exportAll({
|
|
31
|
+
codec: () => codec,
|
|
32
|
+
format: () => format,
|
|
33
|
+
parse: () => parse,
|
|
34
|
+
parseQuads: () => parseQuads,
|
|
35
|
+
parseStream: () => parseStream,
|
|
36
|
+
parser: () => parser,
|
|
37
|
+
serialize: () => serialize,
|
|
38
|
+
serializeStream: () => serializeStream,
|
|
39
|
+
serializer: () => serializer
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* @since 0.1.0
|
|
43
|
+
* @category formats
|
|
44
|
+
*/
|
|
45
|
+
const format = makeFormat({
|
|
46
|
+
name: "TriG",
|
|
47
|
+
mediaType: "application/trig",
|
|
48
|
+
extensions: ["trig"],
|
|
49
|
+
datasets: true
|
|
50
|
+
});
|
|
51
|
+
const syntax = {
|
|
52
|
+
name: "TriG",
|
|
53
|
+
trig: true,
|
|
54
|
+
trace: Option.some({
|
|
55
|
+
module: "TriG",
|
|
56
|
+
format
|
|
57
|
+
})
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Parses a TriG document, returning the dataset together with the declared
|
|
61
|
+
* prefixes and the final base IRI.
|
|
62
|
+
*
|
|
63
|
+
* @since 0.1.0
|
|
64
|
+
* @category parsing
|
|
65
|
+
*/
|
|
66
|
+
const parse = (input, options) => parse$1(syntax, input, options);
|
|
67
|
+
/**
|
|
68
|
+
* Parses a TriG document into statements in document order.
|
|
69
|
+
*
|
|
70
|
+
* @since 0.1.0
|
|
71
|
+
* @category parsing
|
|
72
|
+
*/
|
|
73
|
+
const parseQuads = (input, options) => parseQuads$1(syntax, input, options);
|
|
74
|
+
/**
|
|
75
|
+
* Parses a stream of text chunks incrementally. Statements are emitted as
|
|
76
|
+
* soon as they are complete (statements inside graph blocks individually);
|
|
77
|
+
* chunk boundaries may fall anywhere.
|
|
78
|
+
*
|
|
79
|
+
* @since 0.1.0
|
|
80
|
+
* @category parsing
|
|
81
|
+
*/
|
|
82
|
+
const parseStream = parseStream$1(syntax);
|
|
83
|
+
/**
|
|
84
|
+
* Serialises quads as pretty TriG. Fails for triple terms in the subject
|
|
85
|
+
* position (not expressible in TriG 1.2).
|
|
86
|
+
*
|
|
87
|
+
* @since 0.1.0
|
|
88
|
+
* @category serializing
|
|
89
|
+
*/
|
|
90
|
+
const serialize = (quads, options) => serialize$1(syntax, quads, options);
|
|
91
|
+
/**
|
|
92
|
+
* Serialises a stream of quads incrementally in constant memory. Only
|
|
93
|
+
* consecutive statements are grouped (a graph block is opened whenever the
|
|
94
|
+
* graph changes), and blank nodes keep their labels.
|
|
95
|
+
*
|
|
96
|
+
* @since 0.1.0
|
|
97
|
+
* @category serializing
|
|
98
|
+
*/
|
|
99
|
+
const serializeStream = serializeStream$1(syntax);
|
|
100
|
+
/**
|
|
101
|
+
* @since 0.1.0
|
|
102
|
+
* @category parsing
|
|
103
|
+
*/
|
|
104
|
+
const parser = makeParser({
|
|
105
|
+
format,
|
|
106
|
+
parse,
|
|
107
|
+
parseStream
|
|
108
|
+
});
|
|
109
|
+
/**
|
|
110
|
+
* @since 0.1.0
|
|
111
|
+
* @category serializing
|
|
112
|
+
*/
|
|
113
|
+
const serializer = makeSerializer({
|
|
114
|
+
format,
|
|
115
|
+
serialize,
|
|
116
|
+
serializeStream
|
|
117
|
+
});
|
|
118
|
+
/**
|
|
119
|
+
* @since 0.1.0
|
|
120
|
+
* @category codecs
|
|
121
|
+
*/
|
|
122
|
+
const codec = makeCodec(parser, serializer);
|
|
123
|
+
export { parseQuads as a, serialize as c, parse as i, serializeStream as l, codec as n, parseStream as o, format as r, parser as s, TriG_exports as t, serializer as u };
|
|
124
|
+
|
|
125
|
+
//# sourceMappingURL=TriG-BkqtqZ6Y.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TriG-BkqtqZ6Y.mjs","names":["Serialization.makeFormat","internal.parse","internal.parseQuads","internal.parseStream","internalSerialize.serialize","internalSerialize.serializeStream","Serialization.makeParser","Serialization.makeSerializer","Serialization.makeCodec"],"sources":["../src/turtle/TriG.ts"],"sourcesContent":["/**\n * RDF 1.2 TriG: Turtle extended with named graphs.\n *\n * Supports the same RDF 1.2 features as `Turtle`, plus `GRAPH` blocks and\n * `{ ... }` default-graph blocks. The serializer writes default-graph\n * triples at the top level followed by one block per named graph, with the\n * same pretty-printing as the Turtle serializer.\n *\n * @example\n * ```ts\n * import { Effect } from 'effect'\n * import { TriG } from '@thomasfosterau/effect-rdf/turtle'\n *\n * const program = Effect.gen(function* () {\n * const { dataset, prefixes } = yield* TriG.parse(`\n * PREFIX ex: <http://example.org/>\n * ex:g { ex:s ex:p ex:o }\n * `)\n * return yield* TriG.serialize(dataset, { prefixes })\n * })\n * ```\n *\n * @since 0.1.0\n */\nimport * as Serialization from '../Serialization.ts';\nimport type * as Term from '../Term.ts';\nimport type * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\nimport type * as Stream from 'effect/Stream';\nimport * as internal from './internal/parse.ts';\nimport * as internalSerialize from './internal/serialize.ts';\n\n/**\n * The result of `parseQuads`: statements in document order with the\n * document's prefixes and final base IRI.\n *\n * @since 0.1.0\n * @category models\n */\nexport type QuadsResult = internal.QuadsResult;\n\n/**\n * Options for the TriG serializer.\n *\n * @since 0.1.0\n * @category models\n */\nexport type SerializeOptions = internalSerialize.SerializeOptions;\n\n/**\n * @since 0.1.0\n * @category formats\n */\nexport const format: Serialization.Format = Serialization.makeFormat({\n name: 'TriG',\n mediaType: 'application/trig',\n extensions: ['trig'],\n datasets: true,\n});\n\n// The span names are `TriG.parse`, `TriG.serialize`, …\nconst syntax: internal.Syntax = {\n name: 'TriG',\n trig: true,\n trace: Option.some({ module: 'TriG', format }),\n};\n\n/**\n * Parses a TriG document, returning the dataset together with the declared\n * prefixes and the final base IRI.\n *\n * @since 0.1.0\n * @category parsing\n */\nexport const parse = (\n input: string,\n options?: Serialization.ParseOptions,\n): Effect.Effect<Serialization.ParseResult, Serialization.RdfParseError> =>\n internal.parse(syntax, input, options);\n\n/**\n * Parses a TriG document into statements in document order.\n *\n * @since 0.1.0\n * @category parsing\n */\nexport const parseQuads = (\n input: string,\n options?: Serialization.ParseOptions,\n): Effect.Effect<QuadsResult, Serialization.RdfParseError> =>\n internal.parseQuads(syntax, input, options);\n\n/**\n * Parses a stream of text chunks incrementally. Statements are emitted as\n * soon as they are complete (statements inside graph blocks individually);\n * chunk boundaries may fall anywhere.\n *\n * @since 0.1.0\n * @category parsing\n */\nexport const parseStream: <E, R>(\n input: Stream.Stream<string, E, R>,\n options?: Serialization.ParseOptions,\n) => Stream.Stream<Term.Quad, Serialization.RdfParseError | E, R> = internal.parseStream(syntax);\n\n/**\n * Serialises quads as pretty TriG. Fails for triple terms in the subject\n * position (not expressible in TriG 1.2).\n *\n * @since 0.1.0\n * @category serializing\n */\nexport const serialize = (\n quads: Iterable<Term.Quad>,\n options?: SerializeOptions,\n): Effect.Effect<string, Serialization.RdfSerializeError> =>\n internalSerialize.serialize(syntax, quads, options);\n\n/**\n * Serialises a stream of quads incrementally in constant memory. Only\n * consecutive statements are grouped (a graph block is opened whenever the\n * graph changes), and blank nodes keep their labels.\n *\n * @since 0.1.0\n * @category serializing\n */\nexport const serializeStream: <E, R>(\n quads: Stream.Stream<Term.Quad, E, R>,\n options?: SerializeOptions,\n) => Stream.Stream<string, Serialization.RdfSerializeError | E, R> =\n internalSerialize.serializeStream(syntax);\n\n/**\n * @since 0.1.0\n * @category parsing\n */\nexport const parser: Serialization.Parser = Serialization.makeParser({\n format,\n parse,\n parseStream,\n});\n\n/**\n * @since 0.1.0\n * @category serializing\n */\nexport const serializer: Serialization.Serializer<SerializeOptions> = Serialization.makeSerializer({\n format,\n serialize,\n serializeStream,\n});\n\n/**\n * @since 0.1.0\n * @category codecs\n */\nexport const codec: Serialization.Codec<Serialization.ParseOptions, SerializeOptions> =\n Serialization.makeCodec(parser, serializer);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqDA,MAAa,SAA+BA,WAAyB;CACnE,MAAM;CACN,WAAW;CACX,YAAY,CAAC,MAAM;CACnB,UAAU;AACZ,CAAC;AAGD,MAAM,SAA0B;CAC9B,MAAM;CACN,MAAM;CACN,OAAO,OAAO,KAAK;EAAE,QAAQ;EAAQ;CAAO,CAAC;AAC/C;;;;;;;;AASA,MAAa,SACX,OACA,YAEAC,QAAe,QAAQ,OAAO,OAAO;;;;;;;AAQvC,MAAa,cACX,OACA,YAEAC,aAAoB,QAAQ,OAAO,OAAO;;;;;;;;;AAU5C,MAAa,cAGuDC,cAAqB,MAAM;;;;;;;;AAS/F,MAAa,aACX,OACA,YAEAC,YAA4B,QAAQ,OAAO,OAAO;;;;;;;;;AAUpD,MAAa,kBAIXC,kBAAkC,MAAM;;;;;AAM1C,MAAa,SAA+BC,WAAyB;CACnE;CACA;CACA;AACF,CAAC;;;;;AAMD,MAAa,aAAyDC,eAA6B;CACjG;CACA;CACA;AACF,CAAC;;;;;AAMD,MAAa,QACXC,UAAwB,QAAQ,UAAU"}
|