@thomasfosterau/effect-rdf 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +2251 -2
- package/dist/Algebra-CGG4oae3.mjs +433 -0
- package/dist/Algebra-CGG4oae3.mjs.map +1 -0
- package/dist/Algebra-uGsIEOUA.d.mts +446 -0
- package/dist/Ast-CPRZmBvk.mjs +552 -0
- package/dist/Ast-CPRZmBvk.mjs.map +1 -0
- package/dist/Ast-vcw2W-lf.d.mts +827 -0
- package/dist/Bindings-Ck3m7JRC.mjs +249 -0
- package/dist/Bindings-Ck3m7JRC.mjs.map +1 -0
- package/dist/Bindings-DiKpBd7f.d.mts +153 -0
- package/dist/ClientErrors-CpXdFX5u.mjs +128 -0
- package/dist/ClientErrors-CpXdFX5u.mjs.map +1 -0
- package/dist/ClientErrors-D4IZHUM-.d.mts +101 -0
- package/dist/ClientFormats-CXomkXLV.mjs +73 -0
- package/dist/ClientFormats-CXomkXLV.mjs.map +1 -0
- package/dist/ClientFormats-Dm57ZPwR.d.mts +36 -0
- package/dist/Csv2Json-DynEcwCh.mjs +194 -0
- package/dist/Csv2Json-DynEcwCh.mjs.map +1 -0
- package/dist/Csv2Json-aXNVDoXQ.d.mts +40 -0
- package/dist/Csv2Rdf-8maXP6mt.d.mts +41 -0
- package/dist/Csv2Rdf-DuSEkaKE.mjs +161 -0
- package/dist/Csv2Rdf-DuSEkaKE.mjs.map +1 -0
- package/dist/Dataset-BlmlcI7J.mjs +782 -0
- package/dist/Dataset-BlmlcI7J.mjs.map +1 -0
- package/dist/Dataset-DS3ESOcO.d.mts +426 -0
- package/dist/Dataset.d.mts +2 -0
- package/dist/Dataset.mjs +1 -0
- package/dist/Datatype-CxMpamHC.d.mts +212 -0
- package/dist/Datatype-DQvkNkiH.mjs +1001 -0
- package/dist/Datatype-DQvkNkiH.mjs.map +1 -0
- package/dist/Dialect-8ChFj5EX.d.mts +113 -0
- package/dist/Dialect-CzVH38uo.mjs +165 -0
- package/dist/Dialect-CzVH38uo.mjs.map +1 -0
- package/dist/DocumentLoader-D3lZREnB.mjs +346 -0
- package/dist/DocumentLoader-D3lZREnB.mjs.map +1 -0
- package/dist/DocumentLoader-ZUCEVrW5.d.mts +178 -0
- package/dist/DublinCore-AnwqxRx6.mjs +137 -0
- package/dist/DublinCore-AnwqxRx6.mjs.map +1 -0
- package/dist/DublinCore-Dq-tVA5d.d.mts +119 -0
- package/dist/Engine-CYPB3g4h.d.mts +144 -0
- package/dist/Engine-DF8PN7g-.mjs +872 -0
- package/dist/Engine-DF8PN7g-.mjs.map +1 -0
- package/dist/Errors-CMdV1RhU.mjs +37 -0
- package/dist/Errors-CMdV1RhU.mjs.map +1 -0
- package/dist/Errors-u2bDjUeM.d.mts +30 -0
- package/dist/Evaluator-DEsU4d1o.d.mts +50 -0
- package/dist/Evaluator-DOY2-guC.mjs +281 -0
- package/dist/Evaluator-DOY2-guC.mjs.map +1 -0
- package/dist/Exif-CpqniYQd.d.mts +78 -0
- package/dist/Exif-DjkCfEB-.mjs +89 -0
- package/dist/Exif-DjkCfEB-.mjs.map +1 -0
- package/dist/Expression-BIMMvduQ.mjs +230 -0
- package/dist/Expression-BIMMvduQ.mjs.map +1 -0
- package/dist/Expression-W8A9cyX7.d.mts +89 -0
- package/dist/Extract-Bop85jES.mjs +220 -0
- package/dist/Extract-Bop85jES.mjs.map +1 -0
- package/dist/Extract-C_pCvuTC.d.mts +88 -0
- package/dist/Federation-BcNrozc1.d.mts +52 -0
- package/dist/Federation-CHScBkaK.mjs +130 -0
- package/dist/Federation-CHScBkaK.mjs.map +1 -0
- package/dist/Functions-AvjNcId_.mjs +1346 -0
- package/dist/Functions-AvjNcId_.mjs.map +1 -0
- package/dist/Functions-OQJZP-F6.d.mts +111 -0
- package/dist/Generator-C52mmq01.d.mts +50 -0
- package/dist/Generator-D3utCJC7.mjs +205 -0
- package/dist/Generator-D3utCJC7.mjs.map +1 -0
- package/dist/Grammar-CPlSxGH6.mjs +200 -0
- package/dist/Grammar-CPlSxGH6.mjs.map +1 -0
- package/dist/Grammar-CRhnRoCu.d.mts +148 -0
- package/dist/Grammar-D6jZdJQ3.d.mts +169 -0
- package/dist/Grammar-mQ8CgE1M.mjs +258 -0
- package/dist/Grammar-mQ8CgE1M.mjs.map +1 -0
- package/dist/GraphStore-DhUa4nFO.d.mts +45 -0
- package/dist/GraphStore-DvbqwKy1.mjs +212 -0
- package/dist/GraphStore-DvbqwKy1.mjs.map +1 -0
- package/dist/Iri-BB8Ks-BF.d.mts +84 -0
- package/dist/Iri-Cr92gsQV.mjs +232 -0
- package/dist/Iri-Cr92gsQV.mjs.map +1 -0
- package/dist/Iri.d.mts +2 -0
- package/dist/Iri.mjs +1 -0
- package/dist/Isomorphism-B6qTY-xy.d.mts +28 -0
- package/dist/Isomorphism-BmqxhKyJ.mjs +232 -0
- package/dist/Isomorphism-BmqxhKyJ.mjs.map +1 -0
- package/dist/Isomorphism-DInKnWIy.mjs +390 -0
- package/dist/Isomorphism-DInKnWIy.mjs.map +1 -0
- package/dist/Isomorphism-DvSfZXLR.d.mts +37 -0
- package/dist/Isomorphism.d.mts +2 -0
- package/dist/Isomorphism.mjs +1 -0
- package/dist/JsonLd-DOwS2FHg.mjs +2836 -0
- package/dist/JsonLd-DOwS2FHg.mjs.map +1 -0
- package/dist/JsonLd-DobFrQNa.d.mts +242 -0
- package/dist/JsonLdError-C9J-BxfG.mjs +106 -0
- package/dist/JsonLdError-C9J-BxfG.mjs.map +1 -0
- package/dist/JsonLdError-DSOfHkOy.d.mts +43 -0
- package/dist/LanguageTag-BCu8rcmX.d.mts +38 -0
- package/dist/LanguageTag-BcOpMGZ4.mjs +89 -0
- package/dist/LanguageTag-BcOpMGZ4.mjs.map +1 -0
- package/dist/LanguageTag.d.mts +2 -0
- package/dist/LanguageTag.mjs +1 -0
- package/dist/Lexical-Cg0JHrf6.mjs +243 -0
- package/dist/Lexical-Cg0JHrf6.mjs.map +1 -0
- package/dist/Lexical-D3zySYVS.d.mts +163 -0
- package/dist/Manifest-B6xf6mUc.mjs +148 -0
- package/dist/Manifest-B6xf6mUc.mjs.map +1 -0
- package/dist/Manifest-DQUMRBFr.d.mts +98 -0
- package/dist/Mapping-BgG74x3U.d.mts +63 -0
- package/dist/Mapping-Dc1ZGirk.mjs +259 -0
- package/dist/Mapping-Dc1ZGirk.mjs.map +1 -0
- package/dist/Mcp-1DwTTKOK.mjs +48 -0
- package/dist/Mcp-1DwTTKOK.mjs.map +1 -0
- package/dist/Mcp-d-pX9erx.d.mts +25 -0
- package/dist/Message-CK_DGQuu.mjs +95 -0
- package/dist/Message-CK_DGQuu.mjs.map +1 -0
- package/dist/Message-fIvTJSXM.d.mts +49 -0
- package/dist/Metadata-BbffwGDZ.mjs +445 -0
- package/dist/Metadata-BbffwGDZ.mjs.map +1 -0
- package/dist/Metadata-CEt3yc1-.d.mts +901 -0
- package/dist/Metadata-D4HsQNXr.mjs +1273 -0
- package/dist/Metadata-D4HsQNXr.mjs.map +1 -0
- package/dist/Metadata-nzS7QKRj.d.mts +350 -0
- package/dist/Model-DaMmxurZ.d.mts +293 -0
- package/dist/Model-DlPzRYhF.mjs +528 -0
- package/dist/Model-DlPzRYhF.mjs.map +1 -0
- package/dist/N3-BzyV-KIH.mjs +974 -0
- package/dist/N3-BzyV-KIH.mjs.map +1 -0
- package/dist/N3-DSLnonDn.d.mts +100 -0
- package/dist/NQuads-C1VBOJ3-.mjs +117 -0
- package/dist/NQuads-C1VBOJ3-.mjs.map +1 -0
- package/dist/NQuads-FjFZikFg.d.mts +76 -0
- package/dist/NTriples-D-kLSEAf.mjs +120 -0
- package/dist/NTriples-D-kLSEAf.mjs.map +1 -0
- package/dist/NTriples-D34OspfW.d.mts +76 -0
- package/dist/Namespace-ClTUO_ya.d.mts +42 -0
- package/dist/Namespace-DHFIsORd.mjs +75 -0
- package/dist/Namespace-DHFIsORd.mjs.map +1 -0
- package/dist/Namespace.d.mts +2 -0
- package/dist/Namespace.mjs +1 -0
- package/dist/Namespaces-Bz85vpjW.mjs +235 -0
- package/dist/Namespaces-Bz85vpjW.mjs.map +1 -0
- package/dist/Namespaces-C1jW6EDo.d.mts +178 -0
- package/dist/Optimizer-BWWQRQPY.mjs +168 -0
- package/dist/Optimizer-BWWQRQPY.mjs.map +1 -0
- package/dist/Optimizer-DUpUow6k.d.mts +26 -0
- package/dist/Options-BLBGL4HE.mjs +72 -0
- package/dist/Options-BLBGL4HE.mjs.map +1 -0
- package/dist/Options-BommQwP9.d.mts +127 -0
- package/dist/Packet-CA76wVX3.mjs +197 -0
- package/dist/Packet-CA76wVX3.mjs.map +1 -0
- package/dist/Packet-Cy5g6XuW.d.mts +130 -0
- package/dist/Parser-p1Gyr0QN.d.mts +85 -0
- package/dist/Parser-xARsOWXk.mjs +1317 -0
- package/dist/Parser-xARsOWXk.mjs.map +1 -0
- package/dist/Path-B20Yp8KE.mjs +284 -0
- package/dist/Path-B20Yp8KE.mjs.map +1 -0
- package/dist/Path-DRB8e-Zn.d.mts +181 -0
- package/dist/Pdf-B9RZn--8.d.mts +77 -0
- package/dist/Pdf-CKK6dkZn.mjs +89 -0
- package/dist/Pdf-CKK6dkZn.mjs.map +1 -0
- package/dist/PdfA-CUjSuntT.d.mts +109 -0
- package/dist/PdfA-CleOhuL6.mjs +124 -0
- package/dist/PdfA-CleOhuL6.mjs.map +1 -0
- package/dist/Photoshop-CiHo80qV.mjs +233 -0
- package/dist/Photoshop-CiHo80qV.mjs.map +1 -0
- package/dist/Photoshop-udKZ0I3N.d.mts +204 -0
- package/dist/PrefixMap-BHFPDLO-.mjs +103 -0
- package/dist/PrefixMap-BHFPDLO-.mjs.map +1 -0
- package/dist/PrefixMap-BMlXrWNd.d.mts +64 -0
- package/dist/PrefixMap.d.mts +2 -0
- package/dist/PrefixMap.mjs +1 -0
- package/dist/Processor-CMmecFsb.mjs +198 -0
- package/dist/Processor-CMmecFsb.mjs.map +1 -0
- package/dist/Processor-FJPvO0CB.d.mts +435 -0
- package/dist/Protocol-BA7OkNgp.mjs +202 -0
- package/dist/Protocol-BA7OkNgp.mjs.map +1 -0
- package/dist/Protocol-DlSoiIKB.d.mts +108 -0
- package/dist/ProtocolErrors-Ckfejnl6.d.mts +84 -0
- package/dist/ProtocolErrors-czDPVcX5.mjs +129 -0
- package/dist/ProtocolErrors-czDPVcX5.mjs.map +1 -0
- package/dist/Query-D9A6LOpP.mjs +364 -0
- package/dist/Query-D9A6LOpP.mjs.map +1 -0
- package/dist/Query-KqSkTYyG.d.mts +96 -0
- package/dist/QueryBuilder-BLK9Vfbz.mjs +674 -0
- package/dist/QueryBuilder-BLK9Vfbz.mjs.map +1 -0
- package/dist/QueryBuilder-DUqh4ECe.d.mts +529 -0
- package/dist/RdfJs-D6-49XB5.mjs +86 -0
- package/dist/RdfJs-D6-49XB5.mjs.map +1 -0
- package/dist/RdfJs-DXFqdWrd.d.mts +76 -0
- package/dist/RdfJs.d.mts +2 -0
- package/dist/RdfJs.mjs +1 -0
- package/dist/RdfJson-5aKPDlPS.d.mts +297 -0
- package/dist/RdfJson-BNocgW4f.mjs +548 -0
- package/dist/RdfJson-BNocgW4f.mjs.map +1 -0
- package/dist/RdfXml-DJ9G4gOq.mjs +1014 -0
- package/dist/RdfXml-DJ9G4gOq.mjs.map +1 -0
- package/dist/RdfXml-_N7yxWEp.d.mts +149 -0
- package/dist/Rdfs-BRVPsAjc.d.mts +84 -0
- package/dist/Rdfs-CyY2wVHI.mjs +167 -0
- package/dist/Rdfs-CyY2wVHI.mjs.map +1 -0
- package/dist/Rdfs.d.mts +2 -0
- package/dist/Rdfs.mjs +1 -0
- package/dist/Reasoner-BxYhx9s7.d.mts +94 -0
- package/dist/Reasoner-Cw90zrjv.mjs +798 -0
- package/dist/Reasoner-Cw90zrjv.mjs.map +1 -0
- package/dist/Reification-BmN4EfnM.d.mts +40 -0
- package/dist/Reification-dpqQvjDE.mjs +82 -0
- package/dist/Reification-dpqQvjDE.mjs.map +1 -0
- package/dist/Reification.d.mts +2 -0
- package/dist/Reification.mjs +1 -0
- package/dist/Report-XHs8htzK.mjs +121 -0
- package/dist/Report-XHs8htzK.mjs.map +1 -0
- package/dist/Report-hcXsc_19.d.mts +115 -0
- package/dist/Resource-B1cI8FyJ.d.mts +218 -0
- package/dist/Resource-sIEeNh15.mjs +374 -0
- package/dist/Resource-sIEeNh15.mjs.map +1 -0
- package/dist/Resource.d.mts +2 -0
- package/dist/Resource.mjs +1 -0
- package/dist/Results-BVNEC-Wt.d.mts +277 -0
- package/dist/Results-peJjGA2V.mjs +621 -0
- package/dist/Results-peJjGA2V.mjs.map +1 -0
- package/dist/ResultsStream-BhF0OcNn.mjs +639 -0
- package/dist/ResultsStream-BhF0OcNn.mjs.map +1 -0
- package/dist/ResultsStream-toYMXrOe.d.mts +100 -0
- package/dist/SemAct-CDchtk49.d.mts +96 -0
- package/dist/SemAct-CmyT4yI8.mjs +118 -0
- package/dist/SemAct-CmyT4yI8.mjs.map +1 -0
- package/dist/Serialization-DP9H5bYQ.mjs +514 -0
- package/dist/Serialization-DP9H5bYQ.mjs.map +1 -0
- package/dist/Serialization-Df8iVauT.d.mts +392 -0
- package/dist/Serialization.d.mts +2 -0
- package/dist/Serialization.mjs +1 -0
- package/dist/ServerFormats-CrRnjjf6.mjs +64 -0
- package/dist/ServerFormats-CrRnjjf6.mjs.map +1 -0
- package/dist/ServerFormats-DjC9NsO_.d.mts +36 -0
- package/dist/ServiceDescription-BERsvg-k.d.mts +54 -0
- package/dist/ServiceDescription-Dq5hxeGy.mjs +97 -0
- package/dist/ServiceDescription-Dq5hxeGy.mjs.map +1 -0
- package/dist/ShExC-Ctf-06CL.d.mts +67 -0
- package/dist/ShExC-DJbB19i3.mjs +1181 -0
- package/dist/ShExC-DJbB19i3.mjs.map +1 -0
- package/dist/ShExError-BeYFD9rv.d.mts +61 -0
- package/dist/ShExError-CVtq2NnM.mjs +64 -0
- package/dist/ShExError-CVtq2NnM.mjs.map +1 -0
- package/dist/ShExJ-C1u_wgyD.d.mts +531 -0
- package/dist/ShExJ-COiPd9Xw.mjs +532 -0
- package/dist/ShExJ-COiPd9Xw.mjs.map +1 -0
- package/dist/ShExR-ByR4mCh-.mjs +480 -0
- package/dist/ShExR-ByR4mCh-.mjs.map +1 -0
- package/dist/ShExR-CqONNNBz.d.mts +40 -0
- package/dist/ShapeMap-C422pxKl.d.mts +140 -0
- package/dist/ShapeMap-CsgKxB2G.mjs +181 -0
- package/dist/ShapeMap-CsgKxB2G.mjs.map +1 -0
- package/dist/Shapes-18GjfyBV.mjs +597 -0
- package/dist/Shapes-18GjfyBV.mjs.map +1 -0
- package/dist/Shapes-BQFDFc4Q.d.mts +306 -0
- package/dist/Sparql-BiYFMSpl.mjs +29 -0
- package/dist/Sparql-BiYFMSpl.mjs.map +1 -0
- package/dist/Sparql-DecpWTPh.d.mts +97 -0
- package/dist/SparqlClient-C_CjXbwj.mjs +333 -0
- package/dist/SparqlClient-C_CjXbwj.mjs.map +1 -0
- package/dist/SparqlClient-UPc88SHy.d.mts +290 -0
- package/dist/SparqlServer-CbUW-pVj.d.mts +71 -0
- package/dist/SparqlServer-Db7w7Cll.mjs +308 -0
- package/dist/SparqlServer-Db7w7Cll.mjs.map +1 -0
- package/dist/SqlStore-BBqFx-Wl.mjs +684 -0
- package/dist/SqlStore-BBqFx-Wl.mjs.map +1 -0
- package/dist/SqlStore-CCJo5I-e.d.mts +117 -0
- package/dist/Store-D0jmVfb3.d.mts +166 -0
- package/dist/Store-DH3Ow1GO.mjs +162 -0
- package/dist/Store-DH3Ow1GO.mjs.map +1 -0
- package/dist/Structure-BjMo4Bkc.mjs +334 -0
- package/dist/Structure-BjMo4Bkc.mjs.map +1 -0
- package/dist/Structure-n4CmDiab.d.mts +63 -0
- package/dist/Table-BGgm9nbM.mjs +538 -0
- package/dist/Table-BGgm9nbM.mjs.map +1 -0
- package/dist/Table-C3reiVrb.d.mts +261 -0
- package/dist/Term-B_4ezyXq.d.mts +619 -0
- package/dist/Term-CFLG1qu4.mjs +991 -0
- package/dist/Term-CFLG1qu4.mjs.map +1 -0
- package/dist/Term.d.mts +2 -0
- package/dist/Term.mjs +1 -0
- package/dist/TermCodec-CDZiEztW.mjs +397 -0
- package/dist/TermCodec-CDZiEztW.mjs.map +1 -0
- package/dist/TermCodec-_03bDXr0.d.mts +209 -0
- package/dist/TermCodec.d.mts +2 -0
- package/dist/TermCodec.mjs +1 -0
- package/dist/TermJson-BOPe0yve.d.mts +232 -0
- package/dist/TermJson-FAg3lvjl.mjs +142 -0
- package/dist/TermJson-FAg3lvjl.mjs.map +1 -0
- package/dist/TermJson.d.mts +2 -0
- package/dist/TermJson.mjs +1 -0
- package/dist/TermSchema-Bn9CoaYA.mjs +30 -0
- package/dist/TermSchema-Bn9CoaYA.mjs.map +1 -0
- package/dist/TermSchema-DBO6MroX.d.mts +6 -0
- package/dist/Testing-B-aPCpmu.mjs +63 -0
- package/dist/Testing-B-aPCpmu.mjs.map +1 -0
- package/dist/Testing-CF6s8P3O.d.mts +53 -0
- package/dist/Tiff-CR-2QeSI.d.mts +148 -0
- package/dist/Tiff-DlsOlZPM.mjs +169 -0
- package/dist/Tiff-DlsOlZPM.mjs.map +1 -0
- package/dist/Tools-7MdRKccr.d.mts +583 -0
- package/dist/Tools-ryxphZbI.mjs +329 -0
- package/dist/Tools-ryxphZbI.mjs.map +1 -0
- package/dist/Translate-B0YKKANS.d.mts +37 -0
- package/dist/Translate-gzWPq0Ia.mjs +308 -0
- package/dist/Translate-gzWPq0Ia.mjs.map +1 -0
- package/dist/Translation-DC9rLm2y.mjs +1535 -0
- package/dist/Translation-DC9rLm2y.mjs.map +1 -0
- package/dist/Translation-K4L9XBqX.d.mts +103 -0
- package/dist/TriG-BkqtqZ6Y.mjs +125 -0
- package/dist/TriG-BkqtqZ6Y.mjs.map +1 -0
- package/dist/TriG-xDjdDatp.d.mts +86 -0
- package/dist/Turtle-Bv1_bisW.d.mts +85 -0
- package/dist/Turtle-CZVUOtwl.mjs +133 -0
- package/dist/Turtle-CZVUOtwl.mjs.map +1 -0
- package/dist/ValidationReport-DBdJshW5.mjs +285 -0
- package/dist/ValidationReport-DBdJshW5.mjs.map +1 -0
- package/dist/ValidationReport-Dx3WxY0h.d.mts +192 -0
- package/dist/Validator-227ff9Rn.d.mts +179 -0
- package/dist/Validator-BzXMKDeJ.mjs +1162 -0
- package/dist/Validator-BzXMKDeJ.mjs.map +1 -0
- package/dist/Validator-Dl8cih5V.d.mts +207 -0
- package/dist/Validator-DmUfMbpL.mjs +568 -0
- package/dist/Validator-DmUfMbpL.mjs.map +1 -0
- package/dist/Vocab-DceKywpq.mjs +168 -0
- package/dist/Vocab-DceKywpq.mjs.map +1 -0
- package/dist/Vocab-Df-L-IwZ.d.mts +46 -0
- package/dist/Vocab-Do56UgBX.d.mts +81 -0
- package/dist/Vocab-TfpWG1Ne.mjs +118 -0
- package/dist/Vocab-TfpWG1Ne.mjs.map +1 -0
- package/dist/Vocab.d.mts +2 -0
- package/dist/Vocab.mjs +1 -0
- package/dist/Vocabulary-C6-GPOy4.d.mts +22 -0
- package/dist/Vocabulary-CnQl-_Z4.mjs +179 -0
- package/dist/Vocabulary-CnQl-_Z4.mjs.map +1 -0
- package/dist/Xml-B7iihYCS.mjs +976 -0
- package/dist/Xml-B7iihYCS.mjs.map +1 -0
- package/dist/Xml-CmfHS7SW.d.mts +267 -0
- package/dist/Xmp-D7CKA7MZ.d.mts +111 -0
- package/dist/Xmp-DCGN9pOD.mjs +307 -0
- package/dist/Xmp-DCGN9pOD.mjs.map +1 -0
- package/dist/XmpBasic-CP38jpR_.mjs +73 -0
- package/dist/XmpBasic-CP38jpR_.mjs.map +1 -0
- package/dist/XmpBasic-Cmbe53rQ.d.mts +64 -0
- package/dist/XmpMM-BfL_TgJF.mjs +73 -0
- package/dist/XmpMM-BfL_TgJF.mjs.map +1 -0
- package/dist/XmpMM-Dqm3IX8p.d.mts +63 -0
- package/dist/XmpRights-BKPtoI5L.mjs +73 -0
- package/dist/XmpRights-BKPtoI5L.mjs.map +1 -0
- package/dist/XmpRights-CaALZQz2.d.mts +63 -0
- package/dist/Xsd-Cdgx5zRB.mjs +405 -0
- package/dist/Xsd-Cdgx5zRB.mjs.map +1 -0
- package/dist/Xsd-D2elNhSm.d.mts +187 -0
- package/dist/Xsd.d.mts +2 -0
- package/dist/Xsd.mjs +1 -0
- package/dist/accessors-CEjaojuQ.mjs +28 -0
- package/dist/accessors-CEjaojuQ.mjs.map +1 -0
- package/dist/codec-Lb2T96rv.d.mts +20 -0
- package/dist/codec-QNo7IdJF.mjs +389 -0
- package/dist/codec-QNo7IdJF.mjs.map +1 -0
- package/dist/csvw/Csv2Json.d.mts +2 -0
- package/dist/csvw/Csv2Json.mjs +1 -0
- package/dist/csvw/Csv2Rdf.d.mts +2 -0
- package/dist/csvw/Csv2Rdf.mjs +1 -0
- package/dist/csvw/Datatype.d.mts +2 -0
- package/dist/csvw/Datatype.mjs +1 -0
- package/dist/csvw/Metadata.d.mts +2 -0
- package/dist/csvw/Metadata.mjs +1 -0
- package/dist/csvw/Processor.d.mts +2 -0
- package/dist/csvw/Processor.mjs +1 -0
- package/dist/csvw/Report.d.mts +2 -0
- package/dist/csvw/Report.mjs +1 -0
- package/dist/csvw/Table.d.mts +2 -0
- package/dist/csvw/Table.mjs +1 -0
- package/dist/csvw/index.d.mts +8 -0
- package/dist/csvw/index.mjs +8 -0
- package/dist/index-Cms2TYfC.d.mts +16 -0
- package/dist/index-Ct8xFmRs.d.mts +7 -0
- package/dist/index-D4QFwOjm.d.mts +28 -0
- package/dist/index.d.mts +18 -0
- package/dist/index.mjs +17 -0
- package/dist/jsonld/DocumentLoader.d.mts +2 -0
- package/dist/jsonld/DocumentLoader.mjs +1 -0
- package/dist/jsonld/JsonLd.d.mts +2 -0
- package/dist/jsonld/JsonLd.mjs +1 -0
- package/dist/jsonld/JsonLdError.d.mts +2 -0
- package/dist/jsonld/JsonLdError.mjs +1 -0
- package/dist/jsonld/index.d.mts +4 -0
- package/dist/jsonld/index.mjs +4 -0
- package/dist/lists-D-OpQ0Ir.mjs +77 -0
- package/dist/lists-D-OpQ0Ir.mjs.map +1 -0
- package/dist/loop-D5-gNx9K.mjs +21 -0
- package/dist/loop-D5-gNx9K.mjs.map +1 -0
- package/dist/loop-DZ2hXlr_.mjs +21 -0
- package/dist/loop-DZ2hXlr_.mjs.map +1 -0
- package/dist/n3/Isomorphism.d.mts +2 -0
- package/dist/n3/Isomorphism.mjs +1 -0
- package/dist/n3/Mapping.d.mts +2 -0
- package/dist/n3/Mapping.mjs +1 -0
- package/dist/n3/Model.d.mts +2 -0
- package/dist/n3/Model.mjs +1 -0
- package/dist/n3/N3.d.mts +2 -0
- package/dist/n3/N3.mjs +1 -0
- package/dist/n3/Reasoner.d.mts +2 -0
- package/dist/n3/Reasoner.mjs +2 -0
- package/dist/n3/Vocab.d.mts +2 -0
- package/dist/n3/Vocab.mjs +1 -0
- package/dist/n3/index.d.mts +7 -0
- package/dist/n3/index.mjs +7 -0
- package/dist/ntriples/Grammar.d.mts +2 -0
- package/dist/ntriples/Grammar.mjs +1 -0
- package/dist/ntriples/Lexical.d.mts +2 -0
- package/dist/ntriples/Lexical.mjs +1 -0
- package/dist/ntriples/NQuads.d.mts +2 -0
- package/dist/ntriples/NQuads.mjs +1 -0
- package/dist/ntriples/NTriples.d.mts +2 -0
- package/dist/ntriples/NTriples.mjs +1 -0
- package/dist/ntriples/index.d.mts +5 -0
- package/dist/ntriples/index.mjs +5 -0
- package/dist/rdfjson/RdfJson.d.mts +2 -0
- package/dist/rdfjson/RdfJson.mjs +1 -0
- package/dist/rdfjson/index.d.mts +2 -0
- package/dist/rdfjson/index.mjs +1 -0
- package/dist/rdfxml/RdfXml.d.mts +2 -0
- package/dist/rdfxml/RdfXml.mjs +1 -0
- package/dist/rdfxml/Xml.d.mts +2 -0
- package/dist/rdfxml/Xml.mjs +1 -0
- package/dist/rdfxml/index.d.mts +3 -0
- package/dist/rdfxml/index.mjs +3 -0
- package/dist/rolldown-runtime-D8jQpDG7.mjs +12 -0
- package/dist/serialize-96KBvKaf.mjs +1463 -0
- package/dist/serialize-96KBvKaf.mjs.map +1 -0
- package/dist/serialize-DsoXdM6n.d.mts +37 -0
- package/dist/shacl/Message.d.mts +2 -0
- package/dist/shacl/Message.mjs +1 -0
- package/dist/shacl/Path.d.mts +2 -0
- package/dist/shacl/Path.mjs +1 -0
- package/dist/shacl/Shapes.d.mts +2 -0
- package/dist/shacl/Shapes.mjs +1 -0
- package/dist/shacl/Sparql.d.mts +2 -0
- package/dist/shacl/Sparql.mjs +1 -0
- package/dist/shacl/ValidationReport.d.mts +2 -0
- package/dist/shacl/ValidationReport.mjs +1 -0
- package/dist/shacl/Validator.d.mts +2 -0
- package/dist/shacl/Validator.mjs +1 -0
- package/dist/shacl/Vocabulary.d.mts +2 -0
- package/dist/shacl/Vocabulary.mjs +1 -0
- package/dist/shacl/index.d.mts +9 -0
- package/dist/shacl/index.mjs +8 -0
- package/dist/shex/SemAct.d.mts +2 -0
- package/dist/shex/SemAct.mjs +1 -0
- package/dist/shex/ShExC.d.mts +2 -0
- package/dist/shex/ShExC.mjs +1 -0
- package/dist/shex/ShExError.d.mts +2 -0
- package/dist/shex/ShExError.mjs +1 -0
- package/dist/shex/ShExJ.d.mts +2 -0
- package/dist/shex/ShExJ.mjs +2 -0
- package/dist/shex/ShExR.d.mts +2 -0
- package/dist/shex/ShExR.mjs +1 -0
- package/dist/shex/ShapeMap.d.mts +2 -0
- package/dist/shex/ShapeMap.mjs +1 -0
- package/dist/shex/Structure.d.mts +2 -0
- package/dist/shex/Structure.mjs +2 -0
- package/dist/shex/Validator.d.mts +2 -0
- package/dist/shex/Validator.mjs +4 -0
- package/dist/shex/index.d.mts +9 -0
- package/dist/shex/index.mjs +9 -0
- package/dist/sparql/Algebra.d.mts +2 -0
- package/dist/sparql/Algebra.mjs +1 -0
- package/dist/sparql/Ast.d.mts +2 -0
- package/dist/sparql/Ast.mjs +1 -0
- package/dist/sparql/Bindings.d.mts +2 -0
- package/dist/sparql/Bindings.mjs +1 -0
- package/dist/sparql/ClientErrors.d.mts +2 -0
- package/dist/sparql/ClientErrors.mjs +1 -0
- package/dist/sparql/ClientFormats.d.mts +2 -0
- package/dist/sparql/ClientFormats.mjs +1 -0
- package/dist/sparql/Engine.d.mts +2 -0
- package/dist/sparql/Engine.mjs +1 -0
- package/dist/sparql/Errors.d.mts +2 -0
- package/dist/sparql/Errors.mjs +1 -0
- package/dist/sparql/Expression.d.mts +2 -0
- package/dist/sparql/Expression.mjs +1 -0
- package/dist/sparql/Federation.d.mts +2 -0
- package/dist/sparql/Federation.mjs +1 -0
- package/dist/sparql/Functions.d.mts +2 -0
- package/dist/sparql/Functions.mjs +1 -0
- package/dist/sparql/Generator.d.mts +2 -0
- package/dist/sparql/Generator.mjs +1 -0
- package/dist/sparql/GraphStore.d.mts +2 -0
- package/dist/sparql/GraphStore.mjs +1 -0
- package/dist/sparql/Optimizer.d.mts +2 -0
- package/dist/sparql/Optimizer.mjs +1 -0
- package/dist/sparql/Options.d.mts +2 -0
- package/dist/sparql/Options.mjs +1 -0
- package/dist/sparql/Parser.d.mts +2 -0
- package/dist/sparql/Parser.mjs +1 -0
- package/dist/sparql/Protocol.d.mts +2 -0
- package/dist/sparql/Protocol.mjs +1 -0
- package/dist/sparql/ProtocolErrors.d.mts +2 -0
- package/dist/sparql/ProtocolErrors.mjs +1 -0
- package/dist/sparql/QueryBuilder.d.mts +2 -0
- package/dist/sparql/QueryBuilder.mjs +1 -0
- package/dist/sparql/Results.d.mts +2 -0
- package/dist/sparql/Results.mjs +1 -0
- package/dist/sparql/ResultsStream.d.mts +2 -0
- package/dist/sparql/ResultsStream.mjs +1 -0
- package/dist/sparql/ServerFormats.d.mts +2 -0
- package/dist/sparql/ServerFormats.mjs +1 -0
- package/dist/sparql/ServiceDescription.d.mts +2 -0
- package/dist/sparql/ServiceDescription.mjs +1 -0
- package/dist/sparql/SparqlClient.d.mts +2 -0
- package/dist/sparql/SparqlClient.mjs +1 -0
- package/dist/sparql/SparqlServer.d.mts +2 -0
- package/dist/sparql/SparqlServer.mjs +1 -0
- package/dist/sparql/Store.d.mts +2 -0
- package/dist/sparql/Store.mjs +1 -0
- package/dist/sparql/TermSchema.d.mts +3 -0
- package/dist/sparql/TermSchema.mjs +2 -0
- package/dist/sparql/Testing.d.mts +2 -0
- package/dist/sparql/Testing.mjs +1 -0
- package/dist/sparql/Translate.d.mts +2 -0
- package/dist/sparql/Translate.mjs +1 -0
- package/dist/sparql/ai/Mcp.d.mts +2 -0
- package/dist/sparql/ai/Mcp.mjs +1 -0
- package/dist/sparql/ai/Tools.d.mts +2 -0
- package/dist/sparql/ai/Tools.mjs +1 -0
- package/dist/sparql/ai/index.d.mts +3 -0
- package/dist/sparql/ai/index.mjs +3 -0
- package/dist/sparql/index.d.mts +30 -0
- package/dist/sparql/index.mjs +29 -0
- package/dist/sparql/shacl/Evaluator.d.mts +2 -0
- package/dist/sparql/shacl/Evaluator.mjs +1 -0
- package/dist/sparql/shacl/Query.d.mts +2 -0
- package/dist/sparql/shacl/Query.mjs +1 -0
- package/dist/sparql/shacl/index.d.mts +3 -0
- package/dist/sparql/shacl/index.mjs +3 -0
- package/dist/sparql/sql/Dialect.d.mts +2 -0
- package/dist/sparql/sql/Dialect.mjs +1 -0
- package/dist/sparql/sql/SqlStore.d.mts +2 -0
- package/dist/sparql/sql/SqlStore.mjs +1 -0
- package/dist/sparql/sql/Translation.d.mts +2 -0
- package/dist/sparql/sql/Translation.mjs +1 -0
- package/dist/sparql/sql/index.d.mts +4 -0
- package/dist/sparql/sql/index.mjs +4 -0
- package/dist/stringMap-D5YIpYtR.mjs +38 -0
- package/dist/stringMap-D5YIpYtR.mjs.map +1 -0
- package/dist/tokens-C6BzeodQ.mjs +24 -0
- package/dist/tokens-C6BzeodQ.mjs.map +1 -0
- package/dist/turtle/Grammar.d.mts +3 -0
- package/dist/turtle/Grammar.mjs +3 -0
- package/dist/turtle/Manifest.d.mts +2 -0
- package/dist/turtle/Manifest.mjs +1 -0
- package/dist/turtle/TriG.d.mts +2 -0
- package/dist/turtle/TriG.mjs +1 -0
- package/dist/turtle/Turtle.d.mts +2 -0
- package/dist/turtle/Turtle.mjs +1 -0
- package/dist/turtle/index.d.mts +5 -0
- package/dist/turtle/index.mjs +5 -0
- package/dist/xmp/DublinCore.d.mts +2 -0
- package/dist/xmp/DublinCore.mjs +1 -0
- package/dist/xmp/Exif.d.mts +2 -0
- package/dist/xmp/Exif.mjs +1 -0
- package/dist/xmp/Extract.d.mts +2 -0
- package/dist/xmp/Extract.mjs +1 -0
- package/dist/xmp/Metadata.d.mts +2 -0
- package/dist/xmp/Metadata.mjs +1 -0
- package/dist/xmp/Namespaces.d.mts +2 -0
- package/dist/xmp/Namespaces.mjs +1 -0
- package/dist/xmp/Packet.d.mts +2 -0
- package/dist/xmp/Packet.mjs +1 -0
- package/dist/xmp/Pdf.d.mts +2 -0
- package/dist/xmp/Pdf.mjs +1 -0
- package/dist/xmp/PdfA.d.mts +2 -0
- package/dist/xmp/PdfA.mjs +1 -0
- package/dist/xmp/Photoshop.d.mts +2 -0
- package/dist/xmp/Photoshop.mjs +1 -0
- package/dist/xmp/Tiff.d.mts +2 -0
- package/dist/xmp/Tiff.mjs +1 -0
- package/dist/xmp/Xmp.d.mts +2 -0
- package/dist/xmp/Xmp.mjs +3 -0
- package/dist/xmp/XmpBasic.d.mts +2 -0
- package/dist/xmp/XmpBasic.mjs +1 -0
- package/dist/xmp/XmpMM.d.mts +2 -0
- package/dist/xmp/XmpMM.mjs +1 -0
- package/dist/xmp/XmpRights.d.mts +2 -0
- package/dist/xmp/XmpRights.mjs +1 -0
- package/dist/xmp/index.d.mts +15 -0
- package/dist/xmp/index.mjs +15 -0
- package/package.json +195 -3
- package/src/Dataset.ts +1085 -0
- package/src/Iri.ts +322 -0
- package/src/Isomorphism.ts +319 -0
- package/src/LanguageTag.ts +98 -0
- package/src/Namespace.ts +100 -0
- package/src/PrefixMap.ts +117 -0
- package/src/RdfJs.ts +146 -0
- package/src/Rdfs.ts +241 -0
- package/src/Reification.ts +103 -0
- package/src/Resource.ts +873 -0
- package/src/Serialization.ts +775 -0
- package/src/Term.ts +1300 -0
- package/src/TermCodec.ts +505 -0
- package/src/TermJson.ts +313 -0
- package/src/Vocab.ts +161 -0
- package/src/Xsd.ts +573 -0
- package/src/csvw/Csv2Json.ts +265 -0
- package/src/csvw/Csv2Rdf.ts +268 -0
- package/src/csvw/Datatype.ts +589 -0
- package/src/csvw/Metadata.ts +1523 -0
- package/src/csvw/Processor.ts +276 -0
- package/src/csvw/Report.ts +135 -0
- package/src/csvw/Table.ts +759 -0
- package/src/csvw/index.ts +22 -0
- package/src/csvw/internal/dateFormat.ts +202 -0
- package/src/csvw/internal/json.ts +104 -0
- package/src/csvw/internal/numberFormat.ts +369 -0
- package/src/csvw/internal/object.ts +23 -0
- package/src/csvw/internal/uriTemplate.ts +130 -0
- package/src/csvw/internal/url.ts +93 -0
- package/src/csvw/internal/vocab.ts +282 -0
- package/src/index.ts +40 -0
- package/src/internal/arbitrary.ts +148 -0
- package/src/internal/loop.ts +24 -0
- package/src/internal/pending.ts +20 -0
- package/src/internal/textDecoder.ts +183 -0
- package/src/jsonld/DocumentLoader.ts +512 -0
- package/src/jsonld/JsonLd.ts +847 -0
- package/src/jsonld/JsonLdError.ts +105 -0
- package/src/jsonld/index.ts +13 -0
- package/src/jsonld/internal/compact.ts +852 -0
- package/src/jsonld/internal/context.ts +781 -0
- package/src/jsonld/internal/expand.ts +614 -0
- package/src/jsonld/internal/flatten.ts +243 -0
- package/src/jsonld/internal/frame.ts +559 -0
- package/src/jsonld/internal/iri.ts +52 -0
- package/src/jsonld/internal/json.ts +19 -0
- package/src/jsonld/internal/linkHeader.ts +60 -0
- package/src/jsonld/internal/rdf.ts +481 -0
- package/src/jsonld/internal/util.ts +367 -0
- package/src/n3/Isomorphism.ts +476 -0
- package/src/n3/Mapping.ts +332 -0
- package/src/n3/Model.ts +696 -0
- package/src/n3/N3.ts +237 -0
- package/src/n3/Reasoner.ts +568 -0
- package/src/n3/Vocab.ts +111 -0
- package/src/n3/index.ts +21 -0
- package/src/n3/internal/builtins.ts +668 -0
- package/src/n3/internal/guards.ts +23 -0
- package/src/n3/internal/lists.ts +106 -0
- package/src/n3/internal/loop.ts +28 -0
- package/src/n3/internal/parser.ts +1032 -0
- package/src/n3/internal/writer.ts +344 -0
- package/src/ntriples/Grammar.ts +317 -0
- package/src/ntriples/Lexical.ts +321 -0
- package/src/ntriples/NQuads.ts +140 -0
- package/src/ntriples/NTriples.ts +143 -0
- package/src/ntriples/index.ts +14 -0
- package/src/ntriples/internal/codec.ts +229 -0
- package/src/ntriples/internal/lineParser.ts +326 -0
- package/src/ntriples/internal/loop.ts +14 -0
- package/src/rdfjson/RdfJson.ts +806 -0
- package/src/rdfjson/index.ts +9 -0
- package/src/rdfjson/internal/json.ts +19 -0
- package/src/rdfxml/RdfXml.ts +1408 -0
- package/src/rdfxml/Xml.ts +419 -0
- package/src/rdfxml/index.ts +11 -0
- package/src/rdfxml/internal/chars.ts +73 -0
- package/src/rdfxml/internal/loop.ts +24 -0
- package/src/rdfxml/internal/parser.ts +1265 -0
- package/src/shacl/Message.ts +102 -0
- package/src/shacl/Path.ts +483 -0
- package/src/shacl/Shapes.ts +913 -0
- package/src/shacl/Sparql.ts +128 -0
- package/src/shacl/ValidationReport.ts +438 -0
- package/src/shacl/Validator.ts +1156 -0
- package/src/shacl/Vocabulary.ts +180 -0
- package/src/shacl/index.ts +22 -0
- package/src/shacl/internal/compare.ts +128 -0
- package/src/shacl/internal/regex.ts +56 -0
- package/src/shex/SemAct.ts +197 -0
- package/src/shex/ShExC.ts +415 -0
- package/src/shex/ShExError.ts +71 -0
- package/src/shex/ShExJ.ts +893 -0
- package/src/shex/ShExR.ts +640 -0
- package/src/shex/ShapeMap.ts +385 -0
- package/src/shex/Structure.ts +467 -0
- package/src/shex/Validator.ts +395 -0
- package/src/shex/index.ts +24 -0
- package/src/shex/internal/engine.ts +682 -0
- package/src/shex/internal/iterate.ts +14 -0
- package/src/shex/internal/json.ts +12 -0
- package/src/shex/internal/lexer.ts +56 -0
- package/src/shex/internal/nodeConstraint.ts +368 -0
- package/src/shex/internal/shexcLexer.ts +387 -0
- package/src/shex/internal/shexcParser.ts +1312 -0
- package/src/shex/internal/tokens.ts +41 -0
- package/src/shex/internal/xpathRegex.ts +290 -0
- package/src/sparql/Algebra.ts +914 -0
- package/src/sparql/Ast.ts +1344 -0
- package/src/sparql/Bindings.ts +272 -0
- package/src/sparql/ClientErrors.ts +156 -0
- package/src/sparql/ClientFormats.ts +70 -0
- package/src/sparql/Engine.ts +699 -0
- package/src/sparql/Errors.ts +30 -0
- package/src/sparql/Expression.ts +360 -0
- package/src/sparql/Federation.ts +187 -0
- package/src/sparql/Functions.ts +689 -0
- package/src/sparql/Generator.ts +426 -0
- package/src/sparql/GraphStore.ts +341 -0
- package/src/sparql/Optimizer.ts +230 -0
- package/src/sparql/Options.ts +191 -0
- package/src/sparql/Parser.ts +173 -0
- package/src/sparql/Protocol.ts +342 -0
- package/src/sparql/ProtocolErrors.ts +113 -0
- package/src/sparql/QueryBuilder.ts +953 -0
- package/src/sparql/Results.ts +844 -0
- package/src/sparql/ResultsStream.ts +771 -0
- package/src/sparql/ServerFormats.ts +75 -0
- package/src/sparql/ServiceDescription.ts +130 -0
- package/src/sparql/SparqlClient.ts +947 -0
- package/src/sparql/SparqlServer.ts +528 -0
- package/src/sparql/Store.ts +311 -0
- package/src/sparql/TermSchema.ts +20 -0
- package/src/sparql/Testing.ts +114 -0
- package/src/sparql/Translate.ts +407 -0
- package/src/sparql/ai/Mcp.ts +43 -0
- package/src/sparql/ai/Tools.ts +481 -0
- package/src/sparql/ai/index.ts +11 -0
- package/src/sparql/index.ts +64 -0
- package/src/sparql/internal/evaluator.ts +947 -0
- package/src/sparql/internal/hash.ts +418 -0
- package/src/sparql/internal/json.ts +12 -0
- package/src/sparql/internal/lexer.ts +488 -0
- package/src/sparql/internal/loop.ts +24 -0
- package/src/sparql/internal/parser.ts +2215 -0
- package/src/sparql/internal/prefetch.ts +46 -0
- package/src/sparql/internal/stringMap.ts +39 -0
- package/src/sparql/internal/textResults.ts +226 -0
- package/src/sparql/internal/values.ts +550 -0
- package/src/sparql/shacl/Evaluator.ts +478 -0
- package/src/sparql/shacl/Query.ts +574 -0
- package/src/sparql/shacl/index.ts +12 -0
- package/src/sparql/sql/Dialect.ts +246 -0
- package/src/sparql/sql/SqlStore.ts +1080 -0
- package/src/sparql/sql/Translation.ts +1898 -0
- package/src/sparql/sql/index.ts +17 -0
- package/src/sparql/sql/internal/encoding.ts +313 -0
- package/src/turtle/Grammar.ts +286 -0
- package/src/turtle/Manifest.ts +215 -0
- package/src/turtle/TriG.ts +158 -0
- package/src/turtle/Turtle.ts +166 -0
- package/src/turtle/index.ts +14 -0
- package/src/turtle/internal/loop.ts +23 -0
- package/src/turtle/internal/parse.ts +112 -0
- package/src/turtle/internal/parser.ts +1303 -0
- package/src/turtle/internal/serialize.ts +79 -0
- package/src/turtle/internal/streamWriter.ts +128 -0
- package/src/turtle/internal/writer.ts +898 -0
- package/src/xmp/DublinCore.ts +147 -0
- package/src/xmp/Exif.ts +109 -0
- package/src/xmp/Extract.ts +351 -0
- package/src/xmp/Metadata.ts +703 -0
- package/src/xmp/Namespaces.ts +228 -0
- package/src/xmp/Packet.ts +297 -0
- package/src/xmp/Pdf.ts +99 -0
- package/src/xmp/PdfA.ts +280 -0
- package/src/xmp/Photoshop.ts +275 -0
- package/src/xmp/Tiff.ts +196 -0
- package/src/xmp/Xmp.ts +430 -0
- package/src/xmp/XmpBasic.ts +90 -0
- package/src/xmp/XmpMM.ts +82 -0
- package/src/xmp/XmpRights.ts +83 -0
- package/src/xmp/index.ts +36 -0
- package/src/xmp/internal/accessors.ts +72 -0
- package/src/xmp/internal/xml.ts +63 -0
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-D8jQpDG7.mjs";
|
|
2
|
+
import { G as statementCount, t as DatasetSchema } from "./Dataset-BlmlcI7J.mjs";
|
|
3
|
+
import * as Arr from "effect/Array";
|
|
4
|
+
import * as Option from "effect/Option";
|
|
5
|
+
import * as Predicate from "effect/Predicate";
|
|
6
|
+
import * as Schema from "effect/Schema";
|
|
7
|
+
import * as SchemaTransformation from "effect/SchemaTransformation";
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import * as Order from "effect/Order";
|
|
10
|
+
import * as SchemaIssue from "effect/SchemaIssue";
|
|
11
|
+
import * as Context from "effect/Context";
|
|
12
|
+
import * as FileSystem from "effect/FileSystem";
|
|
13
|
+
import * as Layer from "effect/Layer";
|
|
14
|
+
import * as Path from "effect/Path";
|
|
15
|
+
import * as Stream from "effect/Stream";
|
|
16
|
+
import * as Result from "effect/Result";
|
|
17
|
+
// src/internal/textDecoder.ts
|
|
18
|
+
/**
|
|
19
|
+
* Incremental, strict text decoding for the byte entry points of
|
|
20
|
+
* `Serialization`. Validation is `TextDecoder`'s `fatal` mode; when it
|
|
21
|
+
* rejects UTF-8, a binary search over prefixes finds the exact bad byte, so
|
|
22
|
+
* the failure carries the line and column reached before it. A leading byte
|
|
23
|
+
* order mark is dropped. Other charsets go through a fatal `TextDecoder` too,
|
|
24
|
+
* with failures positioned at the start of the failing chunk.
|
|
25
|
+
*/
|
|
26
|
+
const isUtf8 = (charset) => /^utf-?8$/i.test(charset.trim());
|
|
27
|
+
/** The byte at `i` from the end of `bytes` (1 is the last), if there is one. */
|
|
28
|
+
const fromEnd = (bytes, i) => Option.fromUndefinedOr(bytes[bytes.length - i]);
|
|
29
|
+
const isContinuation = (b) => Option.exists(b, (byte) => byte >= 128 && byte < 192);
|
|
30
|
+
const sequenceLength = (lead) => Option.match(lead, {
|
|
31
|
+
onNone: () => 1,
|
|
32
|
+
onSome: (l) => l < 194 ? 1 : l < 224 ? 2 : l < 240 ? 3 : l < 245 ? 4 : 1
|
|
33
|
+
});
|
|
34
|
+
/**
|
|
35
|
+
* How many trailing bytes start a sequence the chunk does not finish (0–3):
|
|
36
|
+
* they are held back for the next chunk. Whether they are well formed is
|
|
37
|
+
* left to the decoder.
|
|
38
|
+
*/
|
|
39
|
+
const incompleteTail = (bytes) => {
|
|
40
|
+
if (sequenceLength(fromEnd(bytes, 1)) > 1) return 1;
|
|
41
|
+
if (sequenceLength(fromEnd(bytes, 2)) > 2 && isContinuation(fromEnd(bytes, 1))) return 2;
|
|
42
|
+
if (sequenceLength(fromEnd(bytes, 3)) > 3 && isContinuation(fromEnd(bytes, 2)) && isContinuation(fromEnd(bytes, 1))) return 3;
|
|
43
|
+
return 0;
|
|
44
|
+
};
|
|
45
|
+
const fatalUtf8 = (bytes, stream) => Result.try(() => new TextDecoder("utf-8", {
|
|
46
|
+
fatal: true,
|
|
47
|
+
ignoreBOM: true
|
|
48
|
+
}).decode(bytes, { stream }));
|
|
49
|
+
/**
|
|
50
|
+
* The length of the longest prefix of `bytes` with no ill-formed byte (an
|
|
51
|
+
* incomplete sequence at its end is allowed), given that `bytes.subarray(0,
|
|
52
|
+
* valid)` has none and `bytes.subarray(0, invalid)` has one.
|
|
53
|
+
*/
|
|
54
|
+
const validPrefix = (bytes, valid, invalid) => {
|
|
55
|
+
if (invalid - valid <= 1) return valid;
|
|
56
|
+
const mid = Math.floor((valid + invalid) / 2);
|
|
57
|
+
return Result.isSuccess(fatalUtf8(bytes.subarray(0, mid), true)) ? validPrefix(bytes, mid, invalid) : validPrefix(bytes, valid, mid);
|
|
58
|
+
};
|
|
59
|
+
var Position = class {
|
|
60
|
+
line = 1;
|
|
61
|
+
column = 1;
|
|
62
|
+
advance(text) {
|
|
63
|
+
const lines = text.split("\n");
|
|
64
|
+
const last = lines.at(-1) ?? "";
|
|
65
|
+
if (lines.length === 1) this.column += last.length;
|
|
66
|
+
else {
|
|
67
|
+
this.line += lines.length - 1;
|
|
68
|
+
this.column = last.length + 1;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
fail(message) {
|
|
72
|
+
return {
|
|
73
|
+
message,
|
|
74
|
+
line: this.line,
|
|
75
|
+
column: this.column
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const concat = (a, b) => {
|
|
80
|
+
if (a.byteLength === 0) return b;
|
|
81
|
+
const out = new Uint8Array(a.byteLength + b.byteLength);
|
|
82
|
+
out.set(a);
|
|
83
|
+
out.set(b, a.byteLength);
|
|
84
|
+
return out;
|
|
85
|
+
};
|
|
86
|
+
const utf8Decoder = () => {
|
|
87
|
+
const position = new Position();
|
|
88
|
+
let carry = /* @__PURE__ */ new Uint8Array(0);
|
|
89
|
+
let atStart = true;
|
|
90
|
+
const withoutBom = (text) => atStart && text.startsWith("") ? text.slice(1) : text;
|
|
91
|
+
const decode = (bytes) => Result.match(fatalUtf8(bytes, false), {
|
|
92
|
+
onSuccess: (text) => {
|
|
93
|
+
const out = withoutBom(text);
|
|
94
|
+
if (text !== "") atStart = false;
|
|
95
|
+
position.advance(out);
|
|
96
|
+
return out;
|
|
97
|
+
},
|
|
98
|
+
onFailure: () => {
|
|
99
|
+
const bad = Result.isSuccess(fatalUtf8(bytes, true)) ? bytes.length : validPrefix(bytes, 0, bytes.length);
|
|
100
|
+
position.advance(withoutBom(Result.getOrElse(fatalUtf8(bytes.subarray(0, bad), true), () => "")));
|
|
101
|
+
const byte = bytes[bad];
|
|
102
|
+
return position.fail(byte === void 0 ? "Invalid UTF-8: the input ends inside a multi-byte sequence" : `Invalid UTF-8: byte 0x${byte.toString(16).padStart(2, "0")} cannot appear here`);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
return {
|
|
106
|
+
push: (chunk) => {
|
|
107
|
+
const bytes = concat(carry, chunk);
|
|
108
|
+
const complete = bytes.byteLength - incompleteTail(bytes);
|
|
109
|
+
carry = bytes.slice(complete);
|
|
110
|
+
return decode(bytes.subarray(0, complete));
|
|
111
|
+
},
|
|
112
|
+
end: () => carry.byteLength === 0 ? "" : decode(carry)
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
const otherDecoder = (charset) => {
|
|
116
|
+
const position = new Position();
|
|
117
|
+
let text = Option.none();
|
|
118
|
+
const run = (chunk) => Result.match(Result.try({
|
|
119
|
+
try: () => {
|
|
120
|
+
const decoder = Option.getOrElse(text, () => new TextDecoder(charset, { fatal: true }));
|
|
121
|
+
text = Option.some(decoder);
|
|
122
|
+
return Option.match(chunk, {
|
|
123
|
+
onNone: () => decoder.decode(),
|
|
124
|
+
onSome: (bytes) => decoder.decode(bytes, { stream: true })
|
|
125
|
+
});
|
|
126
|
+
},
|
|
127
|
+
catch: (error) => error instanceof RangeError ? `Unsupported charset: ${charset}` : `Invalid ${charset}: the input is not well formed`
|
|
128
|
+
}), {
|
|
129
|
+
onSuccess: (decoded) => {
|
|
130
|
+
position.advance(decoded);
|
|
131
|
+
return decoded;
|
|
132
|
+
},
|
|
133
|
+
onFailure: (message) => position.fail(message)
|
|
134
|
+
});
|
|
135
|
+
return {
|
|
136
|
+
push: (chunk) => run(Option.some(chunk)),
|
|
137
|
+
end: () => run(Option.none())
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
/** A decoder for `charset` (default UTF-8). */
|
|
141
|
+
const make = (charset = "utf-8") => isUtf8(charset) ? utf8Decoder() : otherDecoder(charset);
|
|
142
|
+
/** Whether `push` / `end` failed. */
|
|
143
|
+
const isFailure = (result) => !Predicate.isString(result);
|
|
144
|
+
// src/Serialization.ts
|
|
145
|
+
/**
|
|
146
|
+
* Serialisation interfaces shared by every RDF syntax package.
|
|
147
|
+
*
|
|
148
|
+
* A syntax package (Turtle, JSON-LD, RDF/XML, …) provides a `Parser` and a
|
|
149
|
+
* `Serializer`, usually combined into a `Codec`. Codecs expose an Effect
|
|
150
|
+
* `Schema` transforming `string ⇄ Dataset`, and can be registered in the
|
|
151
|
+
* `Formats` service for media-type based lookup and content negotiation.
|
|
152
|
+
*
|
|
153
|
+
* @since 0.1.0
|
|
154
|
+
*/
|
|
155
|
+
var Serialization_exports = /* @__PURE__ */ __exportAll({
|
|
156
|
+
Formats: () => Formats,
|
|
157
|
+
RdfParseError: () => RdfParseError,
|
|
158
|
+
RdfSerializeError: () => RdfSerializeError,
|
|
159
|
+
formatError: () => formatError,
|
|
160
|
+
freshBlankNodePrefix: () => freshBlankNodePrefix,
|
|
161
|
+
layer: () => layer,
|
|
162
|
+
makeCodec: () => makeCodec,
|
|
163
|
+
makeFormat: () => makeFormat,
|
|
164
|
+
makeParser: () => makeParser,
|
|
165
|
+
makeSerializer: () => makeSerializer,
|
|
166
|
+
negotiate: () => negotiate,
|
|
167
|
+
parseAccept: () => parseAccept,
|
|
168
|
+
parseBytes: () => parseBytes,
|
|
169
|
+
parseBytesDocument: () => parseBytesDocument,
|
|
170
|
+
parserFor: () => parserFor,
|
|
171
|
+
parserForExtension: () => parserForExtension,
|
|
172
|
+
readFile: () => readFile,
|
|
173
|
+
serializeBytes: () => serializeBytes,
|
|
174
|
+
serializerFor: () => serializerFor,
|
|
175
|
+
serializerForExtension: () => serializerForExtension,
|
|
176
|
+
toSchema: () => toSchema,
|
|
177
|
+
withParseSpan: () => withParseSpan,
|
|
178
|
+
withSerializeSpan: () => withSerializeSpan,
|
|
179
|
+
withStreamSpan: () => withStreamSpan,
|
|
180
|
+
writeFile: () => writeFile
|
|
181
|
+
});
|
|
182
|
+
/**
|
|
183
|
+
* A syntax or semantic error encountered while parsing an RDF document.
|
|
184
|
+
*
|
|
185
|
+
* @since 0.1.0
|
|
186
|
+
* @category errors
|
|
187
|
+
*/
|
|
188
|
+
var RdfParseError = class extends Schema.TaggedError()("RdfParseError", {
|
|
189
|
+
format: Schema.String,
|
|
190
|
+
message: Schema.String,
|
|
191
|
+
line: Schema.optional(Schema.Number),
|
|
192
|
+
column: Schema.optional(Schema.Number)
|
|
193
|
+
}) {};
|
|
194
|
+
/**
|
|
195
|
+
* An error encountered while serialising quads, e.g. a quad that cannot be
|
|
196
|
+
* represented in the target syntax (a named graph in Turtle).
|
|
197
|
+
*
|
|
198
|
+
* @since 0.1.0
|
|
199
|
+
* @category errors
|
|
200
|
+
*/
|
|
201
|
+
var RdfSerializeError = class extends Schema.TaggedError()("RdfSerializeError", {
|
|
202
|
+
format: Schema.String,
|
|
203
|
+
message: Schema.String
|
|
204
|
+
}) {};
|
|
205
|
+
/**
|
|
206
|
+
* @since 0.1.0
|
|
207
|
+
* @category constructors
|
|
208
|
+
*/
|
|
209
|
+
const makeFormat = (format) => ({
|
|
210
|
+
...format,
|
|
211
|
+
mediaTypes: format.mediaTypes ?? [format.mediaType]
|
|
212
|
+
});
|
|
213
|
+
/**
|
|
214
|
+
* Builds a `Parser`. When `parseStream` is not provided the stream is
|
|
215
|
+
* buffered and parsed as a whole.
|
|
216
|
+
*
|
|
217
|
+
* @since 0.1.0
|
|
218
|
+
* @category constructors
|
|
219
|
+
*/
|
|
220
|
+
const makeParser = (options) => ({
|
|
221
|
+
format: options.format,
|
|
222
|
+
parse: options.parse,
|
|
223
|
+
parseStream: options.parseStream ?? ((input, parseOptions) => Stream.mkString(input).pipe(Effect.flatMap((text) => options.parse(text, parseOptions)), Effect.map((result) => result.dataset), Stream.fromIterableEffect))
|
|
224
|
+
});
|
|
225
|
+
/**
|
|
226
|
+
* Builds a `Serializer`. When `serializeStream` is not provided the stream is
|
|
227
|
+
* buffered and serialised as a whole.
|
|
228
|
+
*
|
|
229
|
+
* @since 0.1.0
|
|
230
|
+
* @category constructors
|
|
231
|
+
*/
|
|
232
|
+
const makeSerializer = (options) => ({
|
|
233
|
+
format: options.format,
|
|
234
|
+
serialize: options.serialize,
|
|
235
|
+
serializeStream: options.serializeStream ?? ((quads, serializeOptions) => Stream.runCollect(quads).pipe(Effect.flatMap((all) => options.serialize(all, serializeOptions)), Stream.fromEffect))
|
|
236
|
+
});
|
|
237
|
+
/**
|
|
238
|
+
* Combines a parser and serializer into a `Codec`.
|
|
239
|
+
*
|
|
240
|
+
* @since 0.1.0
|
|
241
|
+
* @category constructors
|
|
242
|
+
*/
|
|
243
|
+
const makeCodec = (parser, serializer) => ({
|
|
244
|
+
format: parser.format,
|
|
245
|
+
parse: parser.parse,
|
|
246
|
+
parseStream: parser.parseStream,
|
|
247
|
+
serialize: serializer.serialize,
|
|
248
|
+
serializeStream: serializer.serializeStream,
|
|
249
|
+
schema: toSchema(parser, serializer)
|
|
250
|
+
});
|
|
251
|
+
/**
|
|
252
|
+
* Builds a `Schema` that decodes documents to datasets with `parser` and
|
|
253
|
+
* encodes datasets with `serializer`.
|
|
254
|
+
*
|
|
255
|
+
* @since 0.1.0
|
|
256
|
+
* @category schemas
|
|
257
|
+
*/
|
|
258
|
+
const toSchema = (parser, serializer) => Schema.String.pipe(Schema.decodeTo(DatasetSchema, SchemaTransformation.transformEffect({
|
|
259
|
+
decode: (input) => parser.parse(input).pipe(Effect.map((r) => r.dataset), Effect.mapError((e) => new SchemaIssue.InvalidValue({ message: formatError(e) }, input))),
|
|
260
|
+
encode: (dataset) => serializer.serialize(dataset).pipe(Effect.mapError((e) => new SchemaIssue.InvalidValue({ message: e.message }, dataset)))
|
|
261
|
+
})));
|
|
262
|
+
/**
|
|
263
|
+
* Formats a parse error with its position.
|
|
264
|
+
*
|
|
265
|
+
* @since 0.1.0
|
|
266
|
+
* @category errors
|
|
267
|
+
*/
|
|
268
|
+
const formatError = (error) => error.line !== void 0 ? `${error.format} parse error at line ${error.line}${error.column !== void 0 ? `, column ${error.column}` : ""}: ${error.message}` : `${error.format} parse error: ${error.message}`;
|
|
269
|
+
/**
|
|
270
|
+
* A registry of available parsers and serializers, used for media-type
|
|
271
|
+
* lookup and HTTP content negotiation.
|
|
272
|
+
*
|
|
273
|
+
* @since 0.1.0
|
|
274
|
+
* @category services
|
|
275
|
+
*/
|
|
276
|
+
var Formats = class extends Context.Service()("@thomasfosterau/effect-rdf/Formats") {};
|
|
277
|
+
/**
|
|
278
|
+
* Creates a `Formats` layer from codecs, parsers and serializers.
|
|
279
|
+
*
|
|
280
|
+
* @since 0.1.0
|
|
281
|
+
* @category layers
|
|
282
|
+
*/
|
|
283
|
+
const layer = (...entries) => Layer.succeed(Formats, {
|
|
284
|
+
parsers: entries.filter((e) => "parse" in e),
|
|
285
|
+
serializers: entries.filter((e) => "serialize" in e)
|
|
286
|
+
});
|
|
287
|
+
const normalizeMediaType = (mediaType) => (mediaType.split(";")[0] ?? "").trim().toLowerCase();
|
|
288
|
+
/**
|
|
289
|
+
* Finds a parser for a media type (parameters such as `charset` are ignored).
|
|
290
|
+
*
|
|
291
|
+
* @since 0.1.0
|
|
292
|
+
* @category lookup
|
|
293
|
+
*/
|
|
294
|
+
const parserFor = (formats, mediaType) => {
|
|
295
|
+
const mt = normalizeMediaType(mediaType);
|
|
296
|
+
return Option.fromNullishOr(formats.parsers.find((p) => p.format.mediaTypes.includes(mt)));
|
|
297
|
+
};
|
|
298
|
+
/**
|
|
299
|
+
* Finds a serializer for a media type.
|
|
300
|
+
*
|
|
301
|
+
* @since 0.1.0
|
|
302
|
+
* @category lookup
|
|
303
|
+
*/
|
|
304
|
+
const serializerFor = (formats, mediaType) => {
|
|
305
|
+
const mt = normalizeMediaType(mediaType);
|
|
306
|
+
return Option.fromNullishOr(formats.serializers.find((s) => s.format.mediaTypes.includes(mt)));
|
|
307
|
+
};
|
|
308
|
+
/**
|
|
309
|
+
* Finds a parser for a file extension (with or without leading dot).
|
|
310
|
+
*
|
|
311
|
+
* @since 0.1.0
|
|
312
|
+
* @category lookup
|
|
313
|
+
*/
|
|
314
|
+
const parserForExtension = (formats, extension) => {
|
|
315
|
+
const ext = extension.replace(/^\./, "").toLowerCase();
|
|
316
|
+
return Option.fromNullishOr(formats.parsers.find((p) => p.format.extensions.includes(ext)));
|
|
317
|
+
};
|
|
318
|
+
/**
|
|
319
|
+
* Finds a serializer for a file extension (with or without leading dot).
|
|
320
|
+
*
|
|
321
|
+
* @since 0.1.0
|
|
322
|
+
* @category lookup
|
|
323
|
+
*/
|
|
324
|
+
const serializerForExtension = (formats, extension) => {
|
|
325
|
+
const ext = extension.replace(/^\./, "").toLowerCase();
|
|
326
|
+
return Option.fromNullishOr(formats.serializers.find((s) => s.format.extensions.includes(ext)));
|
|
327
|
+
};
|
|
328
|
+
/**
|
|
329
|
+
* Parses an HTTP `Accept` header, sorted by preference.
|
|
330
|
+
*
|
|
331
|
+
* @since 0.1.0
|
|
332
|
+
* @category negotiation
|
|
333
|
+
*/
|
|
334
|
+
const parseAccept = (header) => Arr.sort(header.split(",").map((part, index) => {
|
|
335
|
+
const [type, ...params] = part.split(";").map((s) => s.trim());
|
|
336
|
+
const q = Arr.reduce(params, 1, (acc, p) => {
|
|
337
|
+
const [k, v] = p.split("=").map((s) => s.trim());
|
|
338
|
+
return k === "q" && v !== void 0 ? Number(v) : acc;
|
|
339
|
+
});
|
|
340
|
+
return {
|
|
341
|
+
mediaType: (type ?? "").toLowerCase(),
|
|
342
|
+
q: Number.isNaN(q) ? 0 : q,
|
|
343
|
+
index
|
|
344
|
+
};
|
|
345
|
+
}).filter((e) => e.mediaType !== "" && e.q > 0), acceptOrder).map(({ mediaType, q }) => ({
|
|
346
|
+
mediaType,
|
|
347
|
+
q
|
|
348
|
+
}));
|
|
349
|
+
/** Highest quality first, then the most specific range, then header order. */
|
|
350
|
+
const acceptOrder = Order.combineAll([
|
|
351
|
+
Order.flip(Order.mapInput(Order.Number, (e) => e.q)),
|
|
352
|
+
Order.flip(Order.mapInput(Order.Number, (e) => specificity(e.mediaType))),
|
|
353
|
+
Order.mapInput(Order.Number, (e) => e.index)
|
|
354
|
+
]);
|
|
355
|
+
const specificity = (mt) => mt === "*/*" ? 0 : mt.endsWith("/*") ? 1 : 2;
|
|
356
|
+
/**
|
|
357
|
+
* Selects the best of `available` media types for an `Accept` header.
|
|
358
|
+
* Returns the first available type when the header is empty or absent.
|
|
359
|
+
*
|
|
360
|
+
* @since 0.1.0
|
|
361
|
+
* @category negotiation
|
|
362
|
+
*/
|
|
363
|
+
const negotiate = (accept, available) => {
|
|
364
|
+
if (!Arr.isReadonlyArrayNonEmpty(available)) return Option.none();
|
|
365
|
+
if (accept === void 0 || accept.trim() === "") return Option.some(available[0]);
|
|
366
|
+
return Arr.findFirst(parseAccept(accept), (entry) => {
|
|
367
|
+
if (entry.mediaType === "*/*") return Option.some(available[0]);
|
|
368
|
+
if (entry.mediaType.endsWith("/*")) {
|
|
369
|
+
const prefix = entry.mediaType.slice(0, -1);
|
|
370
|
+
return Arr.findFirst(available, (a) => a.startsWith(prefix));
|
|
371
|
+
}
|
|
372
|
+
return available.includes(entry.mediaType) ? Option.some(entry.mediaType) : Option.none();
|
|
373
|
+
});
|
|
374
|
+
};
|
|
375
|
+
/**
|
|
376
|
+
* Generates a fresh blank node label prefix for a parsed document.
|
|
377
|
+
*
|
|
378
|
+
* @since 0.1.0
|
|
379
|
+
* @category utils
|
|
380
|
+
*/
|
|
381
|
+
const freshBlankNodePrefix = () => `b${(documentCounter++).toString(36)}_`;
|
|
382
|
+
let documentCounter = 0;
|
|
383
|
+
const decodeFailure = (format, failure) => new RdfParseError({
|
|
384
|
+
format: format.name,
|
|
385
|
+
message: failure.message,
|
|
386
|
+
line: failure.line,
|
|
387
|
+
column: failure.column
|
|
388
|
+
});
|
|
389
|
+
/**
|
|
390
|
+
* Parses a stream of bytes (from `FileSystem.stream`, an HTTP body, a socket
|
|
391
|
+
* or a child process) into a stream of quads. The bytes are decoded as UTF-8
|
|
392
|
+
* by default (or as `options.charset`), across chunk boundaries; ill-formed
|
|
393
|
+
* input fails with an `RdfParseError` at the line and column of the bad
|
|
394
|
+
* byte, never a defect.
|
|
395
|
+
*
|
|
396
|
+
* @since 0.1.0
|
|
397
|
+
* @category parsing
|
|
398
|
+
*/
|
|
399
|
+
const parseBytes = (parser, input, options) => Stream.suspend(() => {
|
|
400
|
+
const decoder = make(options?.charset);
|
|
401
|
+
const step = (result) => isFailure(result) ? Effect.fail(decodeFailure(parser.format, result)) : Effect.succeed(result);
|
|
402
|
+
const text = input.pipe(Stream.mapEffect((chunk) => step(decoder.push(chunk))), Stream.concat(Stream.fromEffect(Effect.suspend(() => step(decoder.end())))), Stream.filter((chunk) => chunk !== ""));
|
|
403
|
+
return parser.parseStream(text, options);
|
|
404
|
+
});
|
|
405
|
+
/**
|
|
406
|
+
* Decodes a complete document's bytes as `parseBytes` does, then parses it
|
|
407
|
+
* with `parser.parse` (so the result keeps the document's prefixes and base).
|
|
408
|
+
*
|
|
409
|
+
* @since 0.1.0
|
|
410
|
+
* @category parsing
|
|
411
|
+
*/
|
|
412
|
+
const parseBytesDocument = (parser, input, options) => Effect.suspend(() => {
|
|
413
|
+
const decoder = make(options?.charset);
|
|
414
|
+
const body = decoder.push(input);
|
|
415
|
+
if (isFailure(body)) return Effect.fail(decodeFailure(parser.format, body));
|
|
416
|
+
const rest = decoder.end();
|
|
417
|
+
if (isFailure(rest)) return Effect.fail(decodeFailure(parser.format, rest));
|
|
418
|
+
return parser.parse(body + rest, options);
|
|
419
|
+
});
|
|
420
|
+
/**
|
|
421
|
+
* Serialises quads to a stream of UTF-8 bytes.
|
|
422
|
+
*
|
|
423
|
+
* @since 0.1.0
|
|
424
|
+
* @category serializing
|
|
425
|
+
*/
|
|
426
|
+
const serializeBytes = (serializer, quads, options) => Stream.encodeText(serializer.serializeStream(Stream.fromIterable(quads), options));
|
|
427
|
+
const fromFormats = (explicit, lookup) => Option.isSome(explicit) ? Effect.succeed(explicit) : Effect.map(Effect.serviceOption(Formats), Option.flatMap(lookup));
|
|
428
|
+
/**
|
|
429
|
+
* Reads an RDF file through Effect's platform-agnostic `FileSystem` (the
|
|
430
|
+
* consumer provides `NodeFileSystem`, Bun or another layer). The parser is
|
|
431
|
+
* `options.parser`, or is looked up in the `Formats` service by
|
|
432
|
+
* `options.mediaType` or the file extension. Relative IRIs resolve against
|
|
433
|
+
* the file's `file:` URL unless `options.baseIri` is given.
|
|
434
|
+
*
|
|
435
|
+
* @since 0.1.0
|
|
436
|
+
* @category files
|
|
437
|
+
*/
|
|
438
|
+
const readFile = (path, options) => Effect.gen(function* () {
|
|
439
|
+
const fs = yield* FileSystem.FileSystem;
|
|
440
|
+
const paths = yield* Path.Path;
|
|
441
|
+
const mediaType = options?.mediaType;
|
|
442
|
+
const parser = yield* fromFormats(Option.fromUndefinedOr(options?.parser), (formats) => mediaType === void 0 ? parserForExtension(formats, paths.extname(path)) : parserFor(formats, mediaType));
|
|
443
|
+
if (Option.isNone(parser)) return yield* new RdfParseError({
|
|
444
|
+
format: "unknown",
|
|
445
|
+
message: `No parser for ${mediaType ?? path} (provide one, or a Formats layer that has one)`
|
|
446
|
+
});
|
|
447
|
+
const bytes = yield* fs.readFile(path);
|
|
448
|
+
const baseIri = options?.baseIri ?? Option.getOrUndefined(Option.map(yield* Effect.option(paths.toFileUrl(paths.resolve(path))), (url) => url.href));
|
|
449
|
+
return yield* parseBytesDocument(parser.value, bytes, {
|
|
450
|
+
...options,
|
|
451
|
+
baseIri
|
|
452
|
+
});
|
|
453
|
+
});
|
|
454
|
+
/**
|
|
455
|
+
* Writes quads to an RDF file through Effect's `FileSystem`, as UTF-8. The
|
|
456
|
+
* serializer is `options.serializer`, or is looked up in the `Formats`
|
|
457
|
+
* service by `options.mediaType` or the file extension.
|
|
458
|
+
*
|
|
459
|
+
* @since 0.1.0
|
|
460
|
+
* @category files
|
|
461
|
+
*/
|
|
462
|
+
const writeFile = (path, quads, options) => Effect.gen(function* () {
|
|
463
|
+
const fs = yield* FileSystem.FileSystem;
|
|
464
|
+
const paths = yield* Path.Path;
|
|
465
|
+
const mediaType = options?.mediaType;
|
|
466
|
+
const serializer = yield* fromFormats(Option.fromUndefinedOr(options?.serializer), (formats) => mediaType === void 0 ? serializerForExtension(formats, paths.extname(path)) : serializerFor(formats, mediaType));
|
|
467
|
+
if (Option.isNone(serializer)) return yield* new RdfSerializeError({
|
|
468
|
+
format: "unknown",
|
|
469
|
+
message: `No serializer for ${mediaType ?? path} (provide one, or a Formats layer that has one)`
|
|
470
|
+
});
|
|
471
|
+
return yield* Stream.run(serializeBytes(serializer.value, quads, options), fs.sink(path));
|
|
472
|
+
});
|
|
473
|
+
const formatAttributes = (format) => ({
|
|
474
|
+
"rdf.format": format.name,
|
|
475
|
+
"rdf.media_type": format.mediaType
|
|
476
|
+
});
|
|
477
|
+
/**
|
|
478
|
+
* Wraps a whole-document parse in a span named `<module>.<operation>`
|
|
479
|
+
* (`operation` defaults to `parse`), with the format, media type and input
|
|
480
|
+
* length in characters as attributes and the number of statements parsed
|
|
481
|
+
* (`rdf.quads`, which counts a statement the document repeats each time) on
|
|
482
|
+
* completion. The input text itself is never recorded.
|
|
483
|
+
* With no target the effect is returned unchanged.
|
|
484
|
+
*
|
|
485
|
+
* @since 0.1.0
|
|
486
|
+
* @category tracing
|
|
487
|
+
*/
|
|
488
|
+
const withParseSpan = (target, input, operation = "parse") => (self) => target === void 0 ? self : self.pipe(Effect.tap((result) => Effect.annotateCurrentSpan("rdf.quads", statementCount(result.dataset))), Effect.withSpan(`${target.module}.${operation}`, { attributes: {
|
|
489
|
+
...formatAttributes(target.format),
|
|
490
|
+
"rdf.input.length": input.length
|
|
491
|
+
} }));
|
|
492
|
+
/**
|
|
493
|
+
* Wraps a whole-document serialisation in a span named
|
|
494
|
+
* `<module>.serialize`, with the format and media type as attributes and the
|
|
495
|
+
* output length in characters (`rdf.output.length`) on completion. With no
|
|
496
|
+
* target the effect is returned unchanged.
|
|
497
|
+
*
|
|
498
|
+
* @since 0.1.0
|
|
499
|
+
* @category tracing
|
|
500
|
+
*/
|
|
501
|
+
const withSerializeSpan = (target) => (self) => target === void 0 ? self : self.pipe(Effect.tap((output) => Effect.annotateCurrentSpan("rdf.output.length", output.length)), Effect.withSpan(`${target.module}.serialize`, { attributes: formatAttributes(target.format) }));
|
|
502
|
+
/**
|
|
503
|
+
* Wraps a streaming parse or serialisation in a span named
|
|
504
|
+
* `<module>.<operation>` (e.g. `Turtle.parseStream`) that lasts while the
|
|
505
|
+
* stream runs, with the format and media type as attributes. Nothing is
|
|
506
|
+
* recorded per element. With no target the stream is returned unchanged.
|
|
507
|
+
*
|
|
508
|
+
* @since 0.1.0
|
|
509
|
+
* @category tracing
|
|
510
|
+
*/
|
|
511
|
+
const withStreamSpan = (target, operation) => (self) => target === void 0 ? self : Stream.withSpan(self, `${target.module}.${operation}`, { attributes: formatAttributes(target.format) });
|
|
512
|
+
export { withParseSpan as C, writeFile as E, toSchema as S, withStreamSpan as T, parserForExtension as _, formatError as a, serializerFor as b, makeCodec as c, makeSerializer as d, negotiate as f, parserFor as g, parseBytesDocument as h, Serialization_exports as i, makeFormat as l, parseBytes as m, RdfParseError as n, freshBlankNodePrefix as o, parseAccept as p, RdfSerializeError as r, layer as s, Formats as t, makeParser as u, readFile as v, withSerializeSpan as w, serializerForExtension as x, serializeBytes as y };
|
|
513
|
+
|
|
514
|
+
//# sourceMappingURL=Serialization-DP9H5bYQ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Serialization-DP9H5bYQ.mjs","names":["Dataset.DatasetSchema","TextDecoder.make","TextDecoder.isFailure"],"sources":["../src/internal/textDecoder.ts","../src/Serialization.ts"],"sourcesContent":["/**\n * Incremental, strict text decoding for the byte entry points of\n * `Serialization`. Validation is `TextDecoder`'s `fatal` mode; when it\n * rejects UTF-8, a binary search over prefixes finds the exact bad byte, so\n * the failure carries the line and column reached before it. A leading byte\n * order mark is dropped. Other charsets go through a fatal `TextDecoder` too,\n * with failures positioned at the start of the failing chunk.\n */\nimport * as Option from 'effect/Option';\nimport * as Predicate from 'effect/Predicate';\nimport * as Result from 'effect/Result';\n\n/** Where decoding failed: a message, and the 1-based line and column of the bad input. */\nexport interface DecodeFailure {\n readonly message: string;\n readonly line: number;\n readonly column: number;\n}\n\n/** A stateful decoder: `push` each chunk in order, then `end`. */\nexport interface Decoder {\n /** Decodes a chunk; a sequence split across chunks is completed by the next one. */\n readonly push: (chunk: Uint8Array) => string | DecodeFailure;\n /** Flushes the decoder; fails if the input ended inside a sequence. */\n readonly end: () => string | DecodeFailure;\n}\n\nconst isUtf8 = (charset: string): boolean => /^utf-?8$/i.test(charset.trim());\n\n/** The byte at `i` from the end of `bytes` (1 is the last), if there is one. */\nconst fromEnd = (bytes: Uint8Array, i: number): Option.Option<number> =>\n Option.fromUndefinedOr(bytes[bytes.length - i]);\n\nconst isContinuation = (b: Option.Option<number>): boolean =>\n Option.exists(b, (byte) => byte >= 0x80 && byte < 0xc0);\n\n// The length of the sequence a lead byte starts (1 for anything that is not a multi-byte lead).\nconst sequenceLength = (lead: Option.Option<number>): number =>\n Option.match(lead, {\n onNone: () => 1,\n onSome: (l) => (l < 0xc2 ? 1 : l < 0xe0 ? 2 : l < 0xf0 ? 3 : l < 0xf5 ? 4 : 1),\n });\n\n/**\n * How many trailing bytes start a sequence the chunk does not finish (0–3):\n * they are held back for the next chunk. Whether they are well formed is\n * left to the decoder.\n */\nconst incompleteTail = (bytes: Uint8Array): number => {\n if (sequenceLength(fromEnd(bytes, 1)) > 1) return 1;\n if (sequenceLength(fromEnd(bytes, 2)) > 2 && isContinuation(fromEnd(bytes, 1))) return 2;\n if (\n sequenceLength(fromEnd(bytes, 3)) > 3 &&\n isContinuation(fromEnd(bytes, 2)) &&\n isContinuation(fromEnd(bytes, 1))\n )\n return 3;\n return 0;\n};\n\nconst fatalUtf8 = (bytes: Uint8Array, stream: boolean): Result.Result<string, unknown> =>\n Result.try(() =>\n new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(bytes, { stream }),\n );\n\n/**\n * The length of the longest prefix of `bytes` with no ill-formed byte (an\n * incomplete sequence at its end is allowed), given that `bytes.subarray(0,\n * valid)` has none and `bytes.subarray(0, invalid)` has one.\n */\nconst validPrefix = (bytes: Uint8Array, valid: number, invalid: number): number => {\n if (invalid - valid <= 1) return valid;\n const mid = Math.floor((valid + invalid) / 2);\n return Result.isSuccess(fatalUtf8(bytes.subarray(0, mid), true))\n ? validPrefix(bytes, mid, invalid)\n : validPrefix(bytes, valid, mid);\n};\n\nclass Position {\n line = 1;\n column = 1;\n advance(text: string): void {\n const lines = text.split('\\n');\n const last = lines.at(-1) ?? '';\n if (lines.length === 1) this.column += last.length;\n else {\n this.line += lines.length - 1;\n this.column = last.length + 1;\n }\n }\n fail(message: string): DecodeFailure {\n return { message, line: this.line, column: this.column };\n }\n}\n\nconst concat = (a: Uint8Array, b: Uint8Array): Uint8Array => {\n if (a.byteLength === 0) return b;\n const out = new Uint8Array(a.byteLength + b.byteLength);\n out.set(a);\n out.set(b, a.byteLength);\n return out;\n};\n\nconst utf8Decoder = (): Decoder => {\n const position = new Position();\n let carry: Uint8Array = new Uint8Array(0);\n let atStart = true;\n // Drop a byte order mark at the very start of the input.\n const withoutBom = (text: string): string =>\n atStart && text.startsWith('') ? text.slice(1) : text;\n const decode = (bytes: Uint8Array): string | DecodeFailure =>\n Result.match(fatalUtf8(bytes, false), {\n onSuccess: (text) => {\n const out = withoutBom(text);\n if (text !== '') atStart = false;\n position.advance(out);\n return out;\n },\n onFailure: () => {\n // Either the bytes end inside a sequence (a streaming decode accepts them) or one is bad.\n const bad = Result.isSuccess(fatalUtf8(bytes, true))\n ? bytes.length\n : validPrefix(bytes, 0, bytes.length);\n // The text before the bad byte: the valid prefix, without a sequence it leaves unfinished.\n position.advance(\n withoutBom(Result.getOrElse(fatalUtf8(bytes.subarray(0, bad), true), () => '')),\n );\n const byte = bytes[bad];\n return position.fail(\n byte === undefined\n ? 'Invalid UTF-8: the input ends inside a multi-byte sequence'\n : `Invalid UTF-8: byte 0x${byte.toString(16).padStart(2, '0')} cannot appear here`,\n );\n },\n });\n return {\n push: (chunk) => {\n const bytes = concat(carry, chunk);\n const complete = bytes.byteLength - incompleteTail(bytes);\n carry = bytes.slice(complete);\n return decode(bytes.subarray(0, complete));\n },\n end: () => (carry.byteLength === 0 ? '' : decode(carry)),\n };\n};\n\nconst otherDecoder = (charset: string): Decoder => {\n const position = new Position();\n let text: Option.Option<TextDecoder> = Option.none();\n const run = (chunk: Option.Option<Uint8Array>): string | DecodeFailure =>\n Result.match(\n Result.try({\n try: () => {\n const decoder = Option.getOrElse(text, () => new TextDecoder(charset, { fatal: true }));\n text = Option.some(decoder);\n return Option.match(chunk, {\n onNone: () => decoder.decode(),\n onSome: (bytes) => decoder.decode(bytes, { stream: true }),\n });\n },\n catch: (error) =>\n error instanceof RangeError\n ? `Unsupported charset: ${charset}`\n : `Invalid ${charset}: the input is not well formed`,\n }),\n {\n onSuccess: (decoded) => {\n position.advance(decoded);\n return decoded;\n },\n onFailure: (message) => position.fail(message),\n },\n );\n return { push: (chunk) => run(Option.some(chunk)), end: () => run(Option.none()) };\n};\n\n/** A decoder for `charset` (default UTF-8). */\nexport const make = (charset: string = 'utf-8'): Decoder =>\n isUtf8(charset) ? utf8Decoder() : otherDecoder(charset);\n\n/** Whether `push` / `end` failed. */\nexport const isFailure = (result: string | DecodeFailure): result is DecodeFailure =>\n !Predicate.isString(result);\n","/**\n * Serialisation interfaces shared by every RDF syntax package.\n *\n * A syntax package (Turtle, JSON-LD, RDF/XML, …) provides a `Parser` and a\n * `Serializer`, usually combined into a `Codec`. Codecs expose an Effect\n * `Schema` transforming `string ⇄ Dataset`, and can be registered in the\n * `Formats` service for media-type based lookup and content negotiation.\n *\n * @since 0.1.0\n */\nimport * as Arr from 'effect/Array';\nimport * as Context from 'effect/Context';\nimport * as Effect from 'effect/Effect';\nimport * as FileSystem from 'effect/FileSystem';\nimport * as Layer from 'effect/Layer';\nimport * as Option from 'effect/Option';\nimport * as Order from 'effect/Order';\nimport * as Path from 'effect/Path';\nimport type * as PlatformError from 'effect/PlatformError';\nimport * as Schema from 'effect/Schema';\nimport { statementCount } from './internal/pending.ts';\nimport * as SchemaIssue from 'effect/SchemaIssue';\nimport * as SchemaTransformation from 'effect/SchemaTransformation';\nimport * as Stream from 'effect/Stream';\nimport * as Dataset from './Dataset.ts';\nimport * as PrefixMap from './PrefixMap.ts';\nimport * as TextDecoder from './internal/textDecoder.ts';\nimport type * as Term from './Term.ts';\n\n// -----------------------------------------------------------------------------\n// Errors\n// -----------------------------------------------------------------------------\n\n/**\n * A syntax or semantic error encountered while parsing an RDF document.\n *\n * @since 0.1.0\n * @category errors\n */\nexport class RdfParseError extends Schema.TaggedError<RdfParseError>()('RdfParseError', {\n format: Schema.String,\n message: Schema.String,\n line: Schema.optional(Schema.Number),\n column: Schema.optional(Schema.Number),\n}) {}\n\n/**\n * An error encountered while serialising quads, e.g. a quad that cannot be\n * represented in the target syntax (a named graph in Turtle).\n *\n * @since 0.1.0\n * @category errors\n */\nexport class RdfSerializeError extends Schema.TaggedError<RdfSerializeError>()(\n 'RdfSerializeError',\n {\n format: Schema.String,\n message: Schema.String,\n },\n) {}\n\n// -----------------------------------------------------------------------------\n// Formats\n// -----------------------------------------------------------------------------\n\n/**\n * Metadata describing an RDF concrete syntax.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface Format {\n /** Human-readable name, e.g. `\"Turtle\"`. */\n readonly name: string;\n /** The preferred media type. */\n readonly mediaType: string;\n /** All media types (including the preferred one) that identify the syntax. */\n readonly mediaTypes: ReadonlyArray<string>;\n /** File extensions without the leading dot. */\n readonly extensions: ReadonlyArray<string>;\n /** Whether the syntax can represent named graphs. */\n readonly datasets: boolean;\n}\n\n/**\n * @since 0.1.0\n * @category constructors\n */\nexport const makeFormat = (\n format: Omit<Format, 'mediaTypes'> & { readonly mediaTypes?: ReadonlyArray<string> },\n): Format => ({\n ...format,\n mediaTypes: format.mediaTypes ?? [format.mediaType],\n});\n\n// -----------------------------------------------------------------------------\n// Parsing\n// -----------------------------------------------------------------------------\n\n/**\n * @since 0.1.0\n * @category models\n */\nexport interface ParseOptions {\n /** The base IRI against which relative IRIs are resolved. */\n readonly baseIri?: string | undefined;\n /**\n * The graph in which triples are placed when parsing a triples-only syntax.\n * Defaults to the default graph.\n */\n readonly graph?: Term.Graph | undefined;\n /**\n * Prefix for generated blank node labels. Defaults to a fresh prefix per\n * document so that blank nodes from different documents never clash.\n */\n readonly blankNodePrefix?: string | undefined;\n}\n\n/**\n * The result of parsing a complete document.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface ParseResult {\n readonly dataset: Dataset.Dataset;\n /** Prefixes declared by the document, if the syntax supports them. */\n readonly prefixes: PrefixMap.PrefixMap;\n /** The final base IRI of the document, if any. */\n readonly baseIri: string | undefined;\n}\n\n/**\n * @since 0.1.0\n * @category models\n */\nexport interface Parser<Options extends ParseOptions = ParseOptions> {\n readonly format: Format;\n /** Parses a complete document. */\n readonly parse: (input: string, options?: Options) => Effect.Effect<ParseResult, RdfParseError>;\n /** Parses a stream of text chunks into a stream of quads. */\n readonly parseStream: <E, R>(\n input: Stream.Stream<string, E, R>,\n options?: Options,\n ) => Stream.Stream<Term.Quad, RdfParseError | E, R>;\n}\n\n/**\n * Builds a `Parser`. When `parseStream` is not provided the stream is\n * buffered and parsed as a whole.\n *\n * @since 0.1.0\n * @category constructors\n */\nexport const makeParser = <Options extends ParseOptions = ParseOptions>(options: {\n readonly format: Format;\n readonly parse: (input: string, options?: Options) => Effect.Effect<ParseResult, RdfParseError>;\n readonly parseStream?: Parser<Options>['parseStream'];\n}): Parser<Options> => ({\n format: options.format,\n parse: options.parse,\n parseStream:\n options.parseStream ??\n (<E, R>(input: Stream.Stream<string, E, R>, parseOptions?: Options) =>\n Stream.mkString(input).pipe(\n Effect.flatMap((text) => options.parse(text, parseOptions)),\n Effect.map((result) => result.dataset),\n Stream.fromIterableEffect,\n )),\n});\n\n// -----------------------------------------------------------------------------\n// Serialising\n// -----------------------------------------------------------------------------\n\n/**\n * @since 0.1.0\n * @category models\n */\nexport interface SerializeOptions {\n /** Prefixes to use for abbreviating IRIs, if the syntax supports them. */\n readonly prefixes?: PrefixMap.PrefixMap | undefined;\n /** The base IRI used to relativise IRIs, if the syntax supports it. */\n readonly baseIri?: string | undefined;\n}\n\n/**\n * @since 0.1.0\n * @category models\n */\nexport interface Serializer<Options extends SerializeOptions = SerializeOptions> {\n readonly format: Format;\n /** Serialises quads to a complete document. */\n readonly serialize: (\n quads: Iterable<Term.Quad>,\n options?: Options,\n ) => Effect.Effect<string, RdfSerializeError>;\n /** Serialises a stream of quads to a stream of text chunks. */\n readonly serializeStream: <E, R>(\n quads: Stream.Stream<Term.Quad, E, R>,\n options?: Options,\n ) => Stream.Stream<string, RdfSerializeError | E, R>;\n}\n\n/**\n * Builds a `Serializer`. When `serializeStream` is not provided the stream is\n * buffered and serialised as a whole.\n *\n * @since 0.1.0\n * @category constructors\n */\nexport const makeSerializer = <Options extends SerializeOptions = SerializeOptions>(options: {\n readonly format: Format;\n readonly serialize: (\n quads: Iterable<Term.Quad>,\n options?: Options,\n ) => Effect.Effect<string, RdfSerializeError>;\n readonly serializeStream?: Serializer<Options>['serializeStream'];\n}): Serializer<Options> => ({\n format: options.format,\n serialize: options.serialize,\n serializeStream:\n options.serializeStream ??\n (<E, R>(quads: Stream.Stream<Term.Quad, E, R>, serializeOptions?: Options) =>\n Stream.runCollect(quads).pipe(\n Effect.flatMap((all) => options.serialize(all, serializeOptions)),\n Stream.fromEffect,\n )),\n});\n\n// -----------------------------------------------------------------------------\n// Codecs\n// -----------------------------------------------------------------------------\n\n/**\n * A parser and serializer for the same syntax.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface Codec<\n ParseOpts extends ParseOptions = ParseOptions,\n SerializeOpts extends SerializeOptions = SerializeOptions,\n>\n extends Parser<ParseOpts>, Serializer<SerializeOpts> {\n /** A schema transforming documents (`string`) to `Dataset`s and back. */\n readonly schema: Schema.Codec<Dataset.Dataset, string>;\n}\n\n/**\n * Combines a parser and serializer into a `Codec`.\n *\n * @since 0.1.0\n * @category constructors\n */\nexport const makeCodec = <ParseOpts extends ParseOptions, SerializeOpts extends SerializeOptions>(\n parser: Parser<ParseOpts>,\n serializer: Serializer<SerializeOpts>,\n): Codec<ParseOpts, SerializeOpts> => ({\n format: parser.format,\n parse: parser.parse,\n parseStream: parser.parseStream,\n serialize: serializer.serialize,\n serializeStream: serializer.serializeStream,\n schema: toSchema(parser, serializer),\n});\n\n/**\n * Builds a `Schema` that decodes documents to datasets with `parser` and\n * encodes datasets with `serializer`.\n *\n * @since 0.1.0\n * @category schemas\n */\nexport const toSchema = (\n parser: Parser<any>,\n serializer: Serializer<any>,\n): Schema.Codec<Dataset.Dataset, string> =>\n Schema.String.pipe(\n Schema.decodeTo(\n Dataset.DatasetSchema,\n SchemaTransformation.transformEffect({\n decode: (input: string) =>\n parser.parse(input).pipe(\n Effect.map((r) => r.dataset),\n Effect.mapError(\n (e) => new SchemaIssue.InvalidValue({ message: formatError(e) }, input),\n ),\n ),\n encode: (dataset: Dataset.Dataset) =>\n serializer\n .serialize(dataset)\n .pipe(\n Effect.mapError((e) => new SchemaIssue.InvalidValue({ message: e.message }, dataset)),\n ),\n }),\n ),\n );\n\n/**\n * Formats a parse error with its position.\n *\n * @since 0.1.0\n * @category errors\n */\nexport const formatError = (error: RdfParseError): string =>\n error.line !== undefined\n ? `${error.format} parse error at line ${error.line}${error.column !== undefined ? `, column ${error.column}` : ''}: ${error.message}`\n : `${error.format} parse error: ${error.message}`;\n\n// -----------------------------------------------------------------------------\n// Registry\n// -----------------------------------------------------------------------------\n\n/**\n * A registry of available parsers and serializers, used for media-type\n * lookup and HTTP content negotiation.\n *\n * @since 0.1.0\n * @category services\n */\nexport class Formats extends Context.Service<\n Formats,\n {\n readonly parsers: ReadonlyArray<Parser<any>>;\n readonly serializers: ReadonlyArray<Serializer<any>>;\n }\n>()('@thomasfosterau/effect-rdf/Formats') {}\n\n/**\n * Creates a `Formats` layer from codecs, parsers and serializers.\n *\n * @since 0.1.0\n * @category layers\n */\nexport const layer = (\n ...entries: ReadonlyArray<Codec<any, any> | Parser<any> | Serializer<any>>\n): Layer.Layer<Formats> =>\n Layer.succeed(Formats, {\n parsers: entries.filter((e): e is Parser<any> => 'parse' in e),\n serializers: entries.filter((e): e is Serializer<any> => 'serialize' in e),\n });\n\nconst normalizeMediaType = (mediaType: string): string =>\n (mediaType.split(';')[0] ?? '').trim().toLowerCase();\n\n/**\n * Finds a parser for a media type (parameters such as `charset` are ignored).\n *\n * @since 0.1.0\n * @category lookup\n */\nexport const parserFor = (\n formats: Formats['Service'],\n mediaType: string,\n): Option.Option<Parser<any>> => {\n const mt = normalizeMediaType(mediaType);\n return Option.fromNullishOr(formats.parsers.find((p) => p.format.mediaTypes.includes(mt)));\n};\n\n/**\n * Finds a serializer for a media type.\n *\n * @since 0.1.0\n * @category lookup\n */\nexport const serializerFor = (\n formats: Formats['Service'],\n mediaType: string,\n): Option.Option<Serializer<any>> => {\n const mt = normalizeMediaType(mediaType);\n return Option.fromNullishOr(formats.serializers.find((s) => s.format.mediaTypes.includes(mt)));\n};\n\n/**\n * Finds a parser for a file extension (with or without leading dot).\n *\n * @since 0.1.0\n * @category lookup\n */\nexport const parserForExtension = (\n formats: Formats['Service'],\n extension: string,\n): Option.Option<Parser<any>> => {\n const ext = extension.replace(/^\\./, '').toLowerCase();\n return Option.fromNullishOr(formats.parsers.find((p) => p.format.extensions.includes(ext)));\n};\n\n/**\n * Finds a serializer for a file extension (with or without leading dot).\n *\n * @since 0.1.0\n * @category lookup\n */\nexport const serializerForExtension = (\n formats: Formats['Service'],\n extension: string,\n): Option.Option<Serializer<any>> => {\n const ext = extension.replace(/^\\./, '').toLowerCase();\n return Option.fromNullishOr(formats.serializers.find((s) => s.format.extensions.includes(ext)));\n};\n\n/**\n * A parsed `Accept` header entry.\n *\n * @since 0.1.0\n * @category negotiation\n */\nexport interface AcceptEntry {\n readonly mediaType: string;\n readonly q: number;\n}\n\n/**\n * Parses an HTTP `Accept` header, sorted by preference.\n *\n * @since 0.1.0\n * @category negotiation\n */\nexport const parseAccept = (header: string): ReadonlyArray<AcceptEntry> =>\n Arr.sort(\n header\n .split(',')\n .map((part, index) => {\n const [type, ...params] = part.split(';').map((s) => s.trim());\n // The last `q` parameter wins\n const q = Arr.reduce(params, 1, (acc, p) => {\n const [k, v] = p.split('=').map((s) => s.trim());\n return k === 'q' && v !== undefined ? Number(v) : acc;\n });\n return { mediaType: (type ?? '').toLowerCase(), q: Number.isNaN(q) ? 0 : q, index };\n })\n .filter((e) => e.mediaType !== '' && e.q > 0),\n acceptOrder,\n ).map(({ mediaType, q }) => ({ mediaType, q }));\n\ninterface AcceptCandidate {\n readonly mediaType: string;\n readonly q: number;\n readonly index: number;\n}\n\n/** Highest quality first, then the most specific range, then header order. */\nconst acceptOrder: Order.Order<AcceptCandidate> = Order.combineAll([\n Order.flip(Order.mapInput(Order.Number, (e: AcceptCandidate) => e.q)),\n Order.flip(Order.mapInput(Order.Number, (e: AcceptCandidate) => specificity(e.mediaType))),\n Order.mapInput(Order.Number, (e: AcceptCandidate) => e.index),\n]);\n\nconst specificity = (mt: string): number => (mt === '*/*' ? 0 : mt.endsWith('/*') ? 1 : 2);\n\n/**\n * Selects the best of `available` media types for an `Accept` header.\n * Returns the first available type when the header is empty or absent.\n *\n * @since 0.1.0\n * @category negotiation\n */\nexport const negotiate = (\n accept: string | undefined,\n available: ReadonlyArray<string>,\n): Option.Option<string> => {\n if (!Arr.isReadonlyArrayNonEmpty(available)) return Option.none();\n if (accept === undefined || accept.trim() === '') return Option.some(available[0]);\n // The first entry, by preference, that one of the available types satisfies\n return Arr.findFirst(parseAccept(accept), (entry): Option.Option<string> => {\n if (entry.mediaType === '*/*') return Option.some(available[0]);\n if (entry.mediaType.endsWith('/*')) {\n const prefix = entry.mediaType.slice(0, -1);\n return Arr.findFirst(available, (a) => a.startsWith(prefix));\n }\n return available.includes(entry.mediaType) ? Option.some(entry.mediaType) : Option.none();\n });\n};\n\n/**\n * Generates a fresh blank node label prefix for a parsed document.\n *\n * @since 0.1.0\n * @category utils\n */\nexport const freshBlankNodePrefix = (): string => `b${(documentCounter++).toString(36)}_`;\n\nlet documentCounter = 0;\n\n// -----------------------------------------------------------------------------\n// Bytes\n// -----------------------------------------------------------------------------\n\n/**\n * Options for reading bytes: a parser's options plus the text encoding.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface BytesOptions {\n /**\n * The character encoding of the input, as in a `charset` media-type\n * parameter. Defaults to UTF-8, which is validated strictly; a leading byte\n * order mark is dropped.\n */\n readonly charset?: string | undefined;\n}\n\nconst decodeFailure = (format: Format, failure: TextDecoder.DecodeFailure): RdfParseError =>\n new RdfParseError({\n format: format.name,\n message: failure.message,\n line: failure.line,\n column: failure.column,\n });\n\n/**\n * Parses a stream of bytes (from `FileSystem.stream`, an HTTP body, a socket\n * or a child process) into a stream of quads. The bytes are decoded as UTF-8\n * by default (or as `options.charset`), across chunk boundaries; ill-formed\n * input fails with an `RdfParseError` at the line and column of the bad\n * byte, never a defect.\n *\n * @since 0.1.0\n * @category parsing\n */\nexport const parseBytes = <Options extends ParseOptions, E, R>(\n parser: Parser<Options>,\n input: Stream.Stream<Uint8Array, E, R>,\n options?: Options & BytesOptions,\n): Stream.Stream<Term.Quad, RdfParseError | E, R> =>\n Stream.suspend(() => {\n const decoder = TextDecoder.make(options?.charset);\n const step = (result: string | TextDecoder.DecodeFailure) =>\n TextDecoder.isFailure(result)\n ? Effect.fail(decodeFailure(parser.format, result))\n : Effect.succeed(result);\n const text = input.pipe(\n Stream.mapEffect((chunk) => step(decoder.push(chunk))),\n Stream.concat(Stream.fromEffect(Effect.suspend(() => step(decoder.end())))),\n Stream.filter((chunk) => chunk !== ''),\n );\n return parser.parseStream(text, options);\n });\n\n/**\n * Decodes a complete document's bytes as `parseBytes` does, then parses it\n * with `parser.parse` (so the result keeps the document's prefixes and base).\n *\n * @since 0.1.0\n * @category parsing\n */\nexport const parseBytesDocument = <Options extends ParseOptions>(\n parser: Parser<Options>,\n input: Uint8Array,\n options?: Options & BytesOptions,\n): Effect.Effect<ParseResult, RdfParseError> =>\n Effect.suspend(() => {\n const decoder = TextDecoder.make(options?.charset);\n const body = decoder.push(input);\n if (TextDecoder.isFailure(body)) return Effect.fail(decodeFailure(parser.format, body));\n const rest = decoder.end();\n if (TextDecoder.isFailure(rest)) return Effect.fail(decodeFailure(parser.format, rest));\n return parser.parse(body + rest, options);\n });\n\n/**\n * Serialises quads to a stream of UTF-8 bytes.\n *\n * @since 0.1.0\n * @category serializing\n */\nexport const serializeBytes = <Options extends SerializeOptions>(\n serializer: Serializer<Options>,\n quads: Iterable<Term.Quad>,\n options?: Options,\n): Stream.Stream<Uint8Array, RdfSerializeError> =>\n Stream.encodeText(serializer.serializeStream(Stream.fromIterable(quads), options));\n\n// -----------------------------------------------------------------------------\n// Files\n// -----------------------------------------------------------------------------\n\n/**\n * Options for `readFile`.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface ReadFileOptions extends ParseOptions, BytesOptions {\n /** The parser to use; otherwise one is chosen by `mediaType` or the file extension. */\n readonly parser?: Parser<any> | undefined;\n /** A media type to find the parser by in the `Formats` service. */\n readonly mediaType?: string | undefined;\n}\n\n/**\n * Options for `writeFile`.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface WriteFileOptions extends SerializeOptions {\n /** The serializer to use; otherwise one is chosen by `mediaType` or the file extension. */\n readonly serializer?: Serializer<any> | undefined;\n /** A media type to find the serializer by in the `Formats` service. */\n readonly mediaType?: string | undefined;\n}\n\nconst fromFormats = <A>(\n explicit: Option.Option<A>,\n lookup: (formats: Formats['Service']) => Option.Option<A>,\n): Effect.Effect<Option.Option<A>> =>\n Option.isSome(explicit)\n ? Effect.succeed(explicit)\n : Effect.map(Effect.serviceOption(Formats), Option.flatMap(lookup));\n\n/**\n * Reads an RDF file through Effect's platform-agnostic `FileSystem` (the\n * consumer provides `NodeFileSystem`, Bun or another layer). The parser is\n * `options.parser`, or is looked up in the `Formats` service by\n * `options.mediaType` or the file extension. Relative IRIs resolve against\n * the file's `file:` URL unless `options.baseIri` is given.\n *\n * @since 0.1.0\n * @category files\n */\nexport const readFile = (\n path: string,\n options?: ReadFileOptions,\n): Effect.Effect<\n ParseResult,\n RdfParseError | PlatformError.PlatformError,\n FileSystem.FileSystem | Path.Path\n> =>\n Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const paths = yield* Path.Path;\n const mediaType = options?.mediaType;\n const parser = yield* fromFormats(Option.fromUndefinedOr(options?.parser), (formats) =>\n mediaType === undefined\n ? parserForExtension(formats, paths.extname(path))\n : parserFor(formats, mediaType),\n );\n if (Option.isNone(parser)) {\n return yield* new RdfParseError({\n format: 'unknown',\n message: `No parser for ${mediaType ?? path} (provide one, or a Formats layer that has one)`,\n });\n }\n const bytes = yield* fs.readFile(path);\n const baseIri =\n options?.baseIri ??\n Option.getOrUndefined(\n Option.map(yield* Effect.option(paths.toFileUrl(paths.resolve(path))), (url) => url.href),\n );\n return yield* parseBytesDocument(parser.value, bytes, { ...options, baseIri });\n });\n\n/**\n * Writes quads to an RDF file through Effect's `FileSystem`, as UTF-8. The\n * serializer is `options.serializer`, or is looked up in the `Formats`\n * service by `options.mediaType` or the file extension.\n *\n * @since 0.1.0\n * @category files\n */\nexport const writeFile = (\n path: string,\n quads: Iterable<Term.Quad>,\n options?: WriteFileOptions,\n): Effect.Effect<\n void,\n RdfSerializeError | PlatformError.PlatformError,\n FileSystem.FileSystem | Path.Path\n> =>\n Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const paths = yield* Path.Path;\n const mediaType = options?.mediaType;\n const serializer = yield* fromFormats(Option.fromUndefinedOr(options?.serializer), (formats) =>\n mediaType === undefined\n ? serializerForExtension(formats, paths.extname(path))\n : serializerFor(formats, mediaType),\n );\n if (Option.isNone(serializer)) {\n return yield* new RdfSerializeError({\n format: 'unknown',\n message: `No serializer for ${mediaType ?? path} (provide one, or a Formats layer that has one)`,\n });\n }\n return yield* Stream.run(serializeBytes(serializer.value, quads, options), fs.sink(path));\n });\n\n// -----------------------------------------------------------------------------\n// Tracing\n// -----------------------------------------------------------------------------\n\n/**\n * What a syntax's spans are named after: `<module>.<operation>` (e.g.\n * `Turtle.parse`), with the format's name and media type as attributes.\n *\n * @since 0.1.0\n * @category tracing\n */\nexport interface SpanTarget {\n readonly module: string;\n readonly format: Format;\n}\n\nconst formatAttributes = (format: Format) => ({\n 'rdf.format': format.name,\n 'rdf.media_type': format.mediaType,\n});\n\n/**\n * Wraps a whole-document parse in a span named `<module>.<operation>`\n * (`operation` defaults to `parse`), with the format, media type and input\n * length in characters as attributes and the number of statements parsed\n * (`rdf.quads`, which counts a statement the document repeats each time) on\n * completion. The input text itself is never recorded.\n * With no target the effect is returned unchanged.\n *\n * @since 0.1.0\n * @category tracing\n */\nexport const withParseSpan =\n (target: SpanTarget | undefined, input: string, operation: string = 'parse') =>\n <A extends ParseResult, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>\n target === undefined\n ? self\n : self.pipe(\n // The statements parsed, counted without building a dataset that was not built yet\n Effect.tap((result) =>\n Effect.annotateCurrentSpan('rdf.quads', statementCount(result.dataset)),\n ),\n Effect.withSpan(`${target.module}.${operation}`, {\n attributes: { ...formatAttributes(target.format), 'rdf.input.length': input.length },\n }),\n );\n\n/**\n * Wraps a whole-document serialisation in a span named\n * `<module>.serialize`, with the format and media type as attributes and the\n * output length in characters (`rdf.output.length`) on completion. With no\n * target the effect is returned unchanged.\n *\n * @since 0.1.0\n * @category tracing\n */\nexport const withSerializeSpan =\n (target: SpanTarget | undefined) =>\n <E, R>(self: Effect.Effect<string, E, R>): Effect.Effect<string, E, R> =>\n target === undefined\n ? self\n : self.pipe(\n Effect.tap((output) => Effect.annotateCurrentSpan('rdf.output.length', output.length)),\n Effect.withSpan(`${target.module}.serialize`, {\n attributes: formatAttributes(target.format),\n }),\n );\n\n/**\n * Wraps a streaming parse or serialisation in a span named\n * `<module>.<operation>` (e.g. `Turtle.parseStream`) that lasts while the\n * stream runs, with the format and media type as attributes. Nothing is\n * recorded per element. With no target the stream is returned unchanged.\n *\n * @since 0.1.0\n * @category tracing\n */\nexport const withStreamSpan =\n (target: SpanTarget | undefined, operation: 'parseStream' | 'serializeStream') =>\n <A, E, R>(self: Stream.Stream<A, E, R>): Stream.Stream<A, E, R> =>\n target === undefined\n ? self\n : Stream.withSpan(self, `${target.module}.${operation}`, {\n attributes: formatAttributes(target.format),\n });\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,MAAM,UAAU,YAA6B,YAAY,KAAK,QAAQ,KAAK,CAAC;;AAG5E,MAAM,WAAW,OAAmB,MAClC,OAAO,gBAAgB,MAAM,MAAM,SAAS,EAAE;AAEhD,MAAM,kBAAkB,MACtB,OAAO,OAAO,IAAI,SAAS,QAAQ,OAAQ,OAAO,GAAI;AAGxD,MAAM,kBAAkB,SACtB,OAAO,MAAM,MAAM;CACjB,cAAc;CACd,SAAS,MAAO,IAAI,MAAO,IAAI,IAAI,MAAO,IAAI,IAAI,MAAO,IAAI,IAAI,MAAO,IAAI;AAC9E,CAAC;;;;;;AAOH,MAAM,kBAAkB,UAA8B;CACpD,IAAI,eAAe,QAAQ,OAAO,CAAC,CAAC,IAAI,GAAG,OAAO;CAClD,IAAI,eAAe,QAAQ,OAAO,CAAC,CAAC,IAAI,KAAK,eAAe,QAAQ,OAAO,CAAC,CAAC,GAAG,OAAO;CACvF,IACE,eAAe,QAAQ,OAAO,CAAC,CAAC,IAAI,KACpC,eAAe,QAAQ,OAAO,CAAC,CAAC,KAChC,eAAe,QAAQ,OAAO,CAAC,CAAC,GAEhC,OAAO;CACT,OAAO;AACT;AAEA,MAAM,aAAa,OAAmB,WACpC,OAAO,UACL,IAAI,YAAY,SAAS;CAAE,OAAO;CAAM,WAAW;AAAK,CAAC,CAAC,CAAC,OAAO,OAAO,EAAE,OAAO,CAAC,CACrF;;;;;;AAOF,MAAM,eAAe,OAAmB,OAAe,YAA4B;CACjF,IAAI,UAAU,SAAS,GAAG,OAAO;CACjC,MAAM,MAAM,KAAK,OAAO,QAAQ,WAAW,CAAC;CAC5C,OAAO,OAAO,UAAU,UAAU,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,IAC3D,YAAY,OAAO,KAAK,OAAO,IAC/B,YAAY,OAAO,OAAO,GAAG;AACnC;AAEA,IAAM,WAAN,MAAe;CACb,OAAO;CACP,SAAS;CACT,QAAQ,MAAoB;EAC1B,MAAM,QAAQ,KAAK,MAAM,IAAI;EAC7B,MAAM,OAAO,MAAM,GAAG,EAAE,KAAK;EAC7B,IAAI,MAAM,WAAW,GAAG,KAAK,UAAU,KAAK;OACvC;GACH,KAAK,QAAQ,MAAM,SAAS;GAC5B,KAAK,SAAS,KAAK,SAAS;EAC9B;CACF;CACA,KAAK,SAAgC;EACnC,OAAO;GAAE;GAAS,MAAM,KAAK;GAAM,QAAQ,KAAK;EAAO;CACzD;AACF;AAEA,MAAM,UAAU,GAAe,MAA8B;CAC3D,IAAI,EAAE,eAAe,GAAG,OAAO;CAC/B,MAAM,MAAM,IAAI,WAAW,EAAE,aAAa,EAAE,UAAU;CACtD,IAAI,IAAI,CAAC;CACT,IAAI,IAAI,GAAG,EAAE,UAAU;CACvB,OAAO;AACT;AAEA,MAAM,oBAA6B;CACjC,MAAM,WAAW,IAAI,SAAS;CAC9B,IAAI,wBAAoB,IAAI,WAAW,CAAC;CACxC,IAAI,UAAU;CAEd,MAAM,cAAc,SAClB,WAAW,KAAK,WAAW,GAAG,IAAI,KAAK,MAAM,CAAC,IAAI;CACpD,MAAM,UAAU,UACd,OAAO,MAAM,UAAU,OAAO,KAAK,GAAG;EACpC,YAAY,SAAS;GACnB,MAAM,MAAM,WAAW,IAAI;GAC3B,IAAI,SAAS,IAAI,UAAU;GAC3B,SAAS,QAAQ,GAAG;GACpB,OAAO;EACT;EACA,iBAAiB;GAEf,MAAM,MAAM,OAAO,UAAU,UAAU,OAAO,IAAI,CAAC,IAC/C,MAAM,SACN,YAAY,OAAO,GAAG,MAAM,MAAM;GAEtC,SAAS,QACP,WAAW,OAAO,UAAU,UAAU,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,CAChF;GACA,MAAM,OAAO,MAAM;GACnB,OAAO,SAAS,KACd,SAAS,KAAA,IACL,+DACA,yBAAyB,KAAK,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG,EAAE,oBAClE;EACF;CACF,CAAC;CACH,OAAO;EACL,OAAO,UAAU;GACf,MAAM,QAAQ,OAAO,OAAO,KAAK;GACjC,MAAM,WAAW,MAAM,aAAa,eAAe,KAAK;GACxD,QAAQ,MAAM,MAAM,QAAQ;GAC5B,OAAO,OAAO,MAAM,SAAS,GAAG,QAAQ,CAAC;EAC3C;EACA,WAAY,MAAM,eAAe,IAAI,KAAK,OAAO,KAAK;CACxD;AACF;AAEA,MAAM,gBAAgB,YAA6B;CACjD,MAAM,WAAW,IAAI,SAAS;CAC9B,IAAI,OAAmC,OAAO,KAAK;CACnD,MAAM,OAAO,UACX,OAAO,MACL,OAAO,IAAI;EACT,WAAW;GACT,MAAM,UAAU,OAAO,UAAU,YAAY,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,CAAC;GACtF,OAAO,OAAO,KAAK,OAAO;GAC1B,OAAO,OAAO,MAAM,OAAO;IACzB,cAAc,QAAQ,OAAO;IAC7B,SAAS,UAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;GAC3D,CAAC;EACH;EACA,QAAQ,UACN,iBAAiB,aACb,wBAAwB,YACxB,WAAW,QAAQ;CAC3B,CAAC,GACD;EACE,YAAY,YAAY;GACtB,SAAS,QAAQ,OAAO;GACxB,OAAO;EACT;EACA,YAAY,YAAY,SAAS,KAAK,OAAO;CAC/C,CACF;CACF,OAAO;EAAE,OAAO,UAAU,IAAI,OAAO,KAAK,KAAK,CAAC;EAAG,WAAW,IAAI,OAAO,KAAK,CAAC;CAAE;AACnF;;AAGA,MAAa,QAAQ,UAAkB,YACrC,OAAO,OAAO,IAAI,YAAY,IAAI,aAAa,OAAO;;AAGxD,MAAa,aAAa,WACxB,CAAC,UAAU,SAAS,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/I5B,IAAa,gBAAb,cAAmC,OAAO,YAA2B,CAAC,CAAC,iBAAiB;CACtF,QAAQ,OAAO;CACf,SAAS,OAAO;CAChB,MAAM,OAAO,SAAS,OAAO,MAAM;CACnC,QAAQ,OAAO,SAAS,OAAO,MAAM;AACvC,CAAC,CAAC,CAAC,CAAC;;;;;;;;AASJ,IAAa,oBAAb,cAAuC,OAAO,YAA+B,CAAC,CAC5E,qBACA;CACE,QAAQ,OAAO;CACf,SAAS,OAAO;AAClB,CACF,CAAC,CAAC,CAAC;;;;;AA6BH,MAAa,cACX,YACY;CACZ,GAAG;CACH,YAAY,OAAO,cAAc,CAAC,OAAO,SAAS;AACpD;;;;;;;;AA6DA,MAAa,cAA2D,aAIhD;CACtB,QAAQ,QAAQ;CAChB,OAAO,QAAQ;CACf,aACE,QAAQ,iBACA,OAAoC,iBAC1C,OAAO,SAAS,KAAK,CAAC,CAAC,KACrB,OAAO,SAAS,SAAS,QAAQ,MAAM,MAAM,YAAY,CAAC,GAC1D,OAAO,KAAK,WAAW,OAAO,OAAO,GACrC,OAAO,kBACT;AACN;;;;;;;;AA0CA,MAAa,kBAAuE,aAOxD;CAC1B,QAAQ,QAAQ;CAChB,WAAW,QAAQ;CACnB,iBACE,QAAQ,qBACA,OAAuC,qBAC7C,OAAO,WAAW,KAAK,CAAC,CAAC,KACvB,OAAO,SAAS,QAAQ,QAAQ,UAAU,KAAK,gBAAgB,CAAC,GAChE,OAAO,UACT;AACN;;;;;;;AA2BA,MAAa,aACX,QACA,gBACqC;CACrC,QAAQ,OAAO;CACf,OAAO,OAAO;CACd,aAAa,OAAO;CACpB,WAAW,WAAW;CACtB,iBAAiB,WAAW;CAC5B,QAAQ,SAAS,QAAQ,UAAU;AACrC;;;;;;;;AASA,MAAa,YACX,QACA,eAEA,OAAO,OAAO,KACZ,OAAO,SACLA,eACA,qBAAqB,gBAAgB;CACnC,SAAS,UACP,OAAO,MAAM,KAAK,CAAC,CAAC,KAClB,OAAO,KAAK,MAAM,EAAE,OAAO,GAC3B,OAAO,UACJ,MAAM,IAAI,YAAY,aAAa,EAAE,SAAS,YAAY,CAAC,EAAE,GAAG,KAAK,CACxE,CACF;CACF,SAAS,YACP,WACG,UAAU,OAAO,CAAC,CAClB,KACC,OAAO,UAAU,MAAM,IAAI,YAAY,aAAa,EAAE,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,CACtF;AACN,CAAC,CACH,CACF;;;;;;;AAQF,MAAa,eAAe,UAC1B,MAAM,SAAS,KAAA,IACX,GAAG,MAAM,OAAO,uBAAuB,MAAM,OAAO,MAAM,WAAW,KAAA,IAAY,YAAY,MAAM,WAAW,GAAG,IAAI,MAAM,YAC3H,GAAG,MAAM,OAAO,gBAAgB,MAAM;;;;;;;;AAa5C,IAAa,UAAb,cAA6B,QAAQ,QAMnC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC;;;;;;;AAQ3C,MAAa,SACX,GAAG,YAEH,MAAM,QAAQ,SAAS;CACrB,SAAS,QAAQ,QAAQ,MAAwB,WAAW,CAAC;CAC7D,aAAa,QAAQ,QAAQ,MAA4B,eAAe,CAAC;AAC3E,CAAC;AAEH,MAAM,sBAAsB,eACzB,UAAU,MAAM,GAAG,CAAC,CAAC,MAAM,GAAA,CAAI,KAAK,CAAC,CAAC,YAAY;;;;;;;AAQrD,MAAa,aACX,SACA,cAC+B;CAC/B,MAAM,KAAK,mBAAmB,SAAS;CACvC,OAAO,OAAO,cAAc,QAAQ,QAAQ,MAAM,MAAM,EAAE,OAAO,WAAW,SAAS,EAAE,CAAC,CAAC;AAC3F;;;;;;;AAQA,MAAa,iBACX,SACA,cACmC;CACnC,MAAM,KAAK,mBAAmB,SAAS;CACvC,OAAO,OAAO,cAAc,QAAQ,YAAY,MAAM,MAAM,EAAE,OAAO,WAAW,SAAS,EAAE,CAAC,CAAC;AAC/F;;;;;;;AAQA,MAAa,sBACX,SACA,cAC+B;CAC/B,MAAM,MAAM,UAAU,QAAQ,OAAO,EAAE,CAAC,CAAC,YAAY;CACrD,OAAO,OAAO,cAAc,QAAQ,QAAQ,MAAM,MAAM,EAAE,OAAO,WAAW,SAAS,GAAG,CAAC,CAAC;AAC5F;;;;;;;AAQA,MAAa,0BACX,SACA,cACmC;CACnC,MAAM,MAAM,UAAU,QAAQ,OAAO,EAAE,CAAC,CAAC,YAAY;CACrD,OAAO,OAAO,cAAc,QAAQ,YAAY,MAAM,MAAM,EAAE,OAAO,WAAW,SAAS,GAAG,CAAC,CAAC;AAChG;;;;;;;AAmBA,MAAa,eAAe,WAC1B,IAAI,KACF,OACG,MAAM,GAAG,CAAC,CACV,KAAK,MAAM,UAAU;CACpB,MAAM,CAAC,MAAM,GAAG,UAAU,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,KAAK,CAAC;CAE7D,MAAM,IAAI,IAAI,OAAO,QAAQ,IAAI,KAAK,MAAM;EAC1C,MAAM,CAAC,GAAG,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,KAAK,CAAC;EAC/C,OAAO,MAAM,OAAO,MAAM,KAAA,IAAY,OAAO,CAAC,IAAI;CACpD,CAAC;CACD,OAAO;EAAE,YAAY,QAAQ,GAAA,CAAI,YAAY;EAAG,GAAG,OAAO,MAAM,CAAC,IAAI,IAAI;EAAG;CAAM;AACpF,CAAC,CAAC,CACD,QAAQ,MAAM,EAAE,cAAc,MAAM,EAAE,IAAI,CAAC,GAC9C,WACF,CAAC,CAAC,KAAK,EAAE,WAAW,SAAS;CAAE;CAAW;AAAE,EAAE;;AAShD,MAAM,cAA4C,MAAM,WAAW;CACjE,MAAM,KAAK,MAAM,SAAS,MAAM,SAAS,MAAuB,EAAE,CAAC,CAAC;CACpE,MAAM,KAAK,MAAM,SAAS,MAAM,SAAS,MAAuB,YAAY,EAAE,SAAS,CAAC,CAAC;CACzF,MAAM,SAAS,MAAM,SAAS,MAAuB,EAAE,KAAK;AAC9D,CAAC;AAED,MAAM,eAAe,OAAwB,OAAO,QAAQ,IAAI,GAAG,SAAS,IAAI,IAAI,IAAI;;;;;;;;AASxF,MAAa,aACX,QACA,cAC0B;CAC1B,IAAI,CAAC,IAAI,wBAAwB,SAAS,GAAG,OAAO,OAAO,KAAK;CAChE,IAAI,WAAW,KAAA,KAAa,OAAO,KAAK,MAAM,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;CAEjF,OAAO,IAAI,UAAU,YAAY,MAAM,IAAI,UAAiC;EAC1E,IAAI,MAAM,cAAc,OAAO,OAAO,OAAO,KAAK,UAAU,EAAE;EAC9D,IAAI,MAAM,UAAU,SAAS,IAAI,GAAG;GAClC,MAAM,SAAS,MAAM,UAAU,MAAM,GAAG,EAAE;GAC1C,OAAO,IAAI,UAAU,YAAY,MAAM,EAAE,WAAW,MAAM,CAAC;EAC7D;EACA,OAAO,UAAU,SAAS,MAAM,SAAS,IAAI,OAAO,KAAK,MAAM,SAAS,IAAI,OAAO,KAAK;CAC1F,CAAC;AACH;;;;;;;AAQA,MAAa,6BAAqC,KAAK,kBAAA,CAAmB,SAAS,EAAE,EAAE;AAEvF,IAAI,kBAAkB;AAqBtB,MAAM,iBAAiB,QAAgB,YACrC,IAAI,cAAc;CAChB,QAAQ,OAAO;CACf,SAAS,QAAQ;CACjB,MAAM,QAAQ;CACd,QAAQ,QAAQ;AAClB,CAAC;;;;;;;;;;;AAYH,MAAa,cACX,QACA,OACA,YAEA,OAAO,cAAc;CACnB,MAAM,UAAUC,KAAiB,SAAS,OAAO;CACjD,MAAM,QAAQ,WACZC,UAAsB,MAAM,IACxB,OAAO,KAAK,cAAc,OAAO,QAAQ,MAAM,CAAC,IAChD,OAAO,QAAQ,MAAM;CAC3B,MAAM,OAAO,MAAM,KACjB,OAAO,WAAW,UAAU,KAAK,QAAQ,KAAK,KAAK,CAAC,CAAC,GACrD,OAAO,OAAO,OAAO,WAAW,OAAO,cAAc,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,GAC1E,OAAO,QAAQ,UAAU,UAAU,EAAE,CACvC;CACA,OAAO,OAAO,YAAY,MAAM,OAAO;AACzC,CAAC;;;;;;;;AASH,MAAa,sBACX,QACA,OACA,YAEA,OAAO,cAAc;CACnB,MAAM,UAAUD,KAAiB,SAAS,OAAO;CACjD,MAAM,OAAO,QAAQ,KAAK,KAAK;CAC/B,IAAIC,UAAsB,IAAI,GAAG,OAAO,OAAO,KAAK,cAAc,OAAO,QAAQ,IAAI,CAAC;CACtF,MAAM,OAAO,QAAQ,IAAI;CACzB,IAAIA,UAAsB,IAAI,GAAG,OAAO,OAAO,KAAK,cAAc,OAAO,QAAQ,IAAI,CAAC;CACtF,OAAO,OAAO,MAAM,OAAO,MAAM,OAAO;AAC1C,CAAC;;;;;;;AAQH,MAAa,kBACX,YACA,OACA,YAEA,OAAO,WAAW,WAAW,gBAAgB,OAAO,aAAa,KAAK,GAAG,OAAO,CAAC;AAgCnF,MAAM,eACJ,UACA,WAEA,OAAO,OAAO,QAAQ,IAClB,OAAO,QAAQ,QAAQ,IACvB,OAAO,IAAI,OAAO,cAAc,OAAO,GAAG,OAAO,QAAQ,MAAM,CAAC;;;;;;;;;;;AAYtE,MAAa,YACX,MACA,YAMA,OAAO,IAAI,aAAa;CACtB,MAAM,KAAK,OAAO,WAAW;CAC7B,MAAM,QAAQ,OAAO,KAAK;CAC1B,MAAM,YAAY,SAAS;CAC3B,MAAM,SAAS,OAAO,YAAY,OAAO,gBAAgB,SAAS,MAAM,IAAI,YAC1E,cAAc,KAAA,IACV,mBAAmB,SAAS,MAAM,QAAQ,IAAI,CAAC,IAC/C,UAAU,SAAS,SAAS,CAClC;CACA,IAAI,OAAO,OAAO,MAAM,GACtB,OAAO,OAAO,IAAI,cAAc;EAC9B,QAAQ;EACR,SAAS,iBAAiB,aAAa,KAAK;CAC9C,CAAC;CAEH,MAAM,QAAQ,OAAO,GAAG,SAAS,IAAI;CACrC,MAAM,UACJ,SAAS,WACT,OAAO,eACL,OAAO,IAAI,OAAO,OAAO,OAAO,MAAM,UAAU,MAAM,QAAQ,IAAI,CAAC,CAAC,IAAI,QAAQ,IAAI,IAAI,CAC1F;CACF,OAAO,OAAO,mBAAmB,OAAO,OAAO,OAAO;EAAE,GAAG;EAAS;CAAQ,CAAC;AAC/E,CAAC;;;;;;;;;AAUH,MAAa,aACX,MACA,OACA,YAMA,OAAO,IAAI,aAAa;CACtB,MAAM,KAAK,OAAO,WAAW;CAC7B,MAAM,QAAQ,OAAO,KAAK;CAC1B,MAAM,YAAY,SAAS;CAC3B,MAAM,aAAa,OAAO,YAAY,OAAO,gBAAgB,SAAS,UAAU,IAAI,YAClF,cAAc,KAAA,IACV,uBAAuB,SAAS,MAAM,QAAQ,IAAI,CAAC,IACnD,cAAc,SAAS,SAAS,CACtC;CACA,IAAI,OAAO,OAAO,UAAU,GAC1B,OAAO,OAAO,IAAI,kBAAkB;EAClC,QAAQ;EACR,SAAS,qBAAqB,aAAa,KAAK;CAClD,CAAC;CAEH,OAAO,OAAO,OAAO,IAAI,eAAe,WAAW,OAAO,OAAO,OAAO,GAAG,GAAG,KAAK,IAAI,CAAC;AAC1F,CAAC;AAkBH,MAAM,oBAAoB,YAAoB;CAC5C,cAAc,OAAO;CACrB,kBAAkB,OAAO;AAC3B;;;;;;;;;;;;AAaA,MAAa,iBACV,QAAgC,OAAe,YAAoB,aACtC,SAC5B,WAAW,KAAA,IACP,OACA,KAAK,KAEH,OAAO,KAAK,WACV,OAAO,oBAAoB,aAAa,eAAe,OAAO,OAAO,CAAC,CACxE,GACA,OAAO,SAAS,GAAG,OAAO,OAAO,GAAG,aAAa,EAC/C,YAAY;CAAE,GAAG,iBAAiB,OAAO,MAAM;CAAG,oBAAoB,MAAM;AAAO,EACrF,CAAC,CACH;;;;;;;;;;AAWR,MAAa,qBACV,YACM,SACL,WAAW,KAAA,IACP,OACA,KAAK,KACH,OAAO,KAAK,WAAW,OAAO,oBAAoB,qBAAqB,OAAO,MAAM,CAAC,GACrF,OAAO,SAAS,GAAG,OAAO,OAAO,aAAa,EAC5C,YAAY,iBAAiB,OAAO,MAAM,EAC5C,CAAC,CACH;;;;;;;;;;AAWR,MAAa,kBACV,QAAgC,eACvB,SACR,WAAW,KAAA,IACP,OACA,OAAO,SAAS,MAAM,GAAG,OAAO,OAAO,GAAG,aAAa,EACrD,YAAY,iBAAiB,OAAO,MAAM,EAC5C,CAAC"}
|