@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,220 @@
|
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-D8jQpDG7.mjs";
|
|
2
|
+
import * as Arr from "effect/Array";
|
|
3
|
+
import * as Option from "effect/Option";
|
|
4
|
+
import * as Schema from "effect/Schema";
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import * as Result from "effect/Result";
|
|
7
|
+
// src/xmp/Extract.ts
|
|
8
|
+
/**
|
|
9
|
+
* Reading the XMP packet embedded in an image file, as XMP Specification
|
|
10
|
+
* Part 3 places it: a JPEG's APP1 segment (with Extended XMP split across
|
|
11
|
+
* further APP1 segments) or a PNG's `iTXt` chunk with the keyword
|
|
12
|
+
* `XML:com.adobe.xmp` (stored or, read with `png`, zlib-compressed). Any
|
|
13
|
+
* other format (TIFF, WebP, GIF, MP4, PDF, …) can
|
|
14
|
+
* be scanned for its packet with `Packet.find`.
|
|
15
|
+
*
|
|
16
|
+
* @since 0.1.0
|
|
17
|
+
*/
|
|
18
|
+
var Extract_exports = /* @__PURE__ */ __exportAll({
|
|
19
|
+
DEFAULT_MAX_XMP_BYTES: () => DEFAULT_MAX_XMP_BYTES,
|
|
20
|
+
XmpExtractError: () => XmpExtractError,
|
|
21
|
+
jpeg: () => jpeg,
|
|
22
|
+
jpegResult: () => jpegResult,
|
|
23
|
+
png: () => png,
|
|
24
|
+
pngResult: () => pngResult
|
|
25
|
+
});
|
|
26
|
+
/**
|
|
27
|
+
* A malformed image file.
|
|
28
|
+
*
|
|
29
|
+
* @since 0.1.0
|
|
30
|
+
* @category errors
|
|
31
|
+
*/
|
|
32
|
+
var XmpExtractError = class extends Schema.TaggedError()("XmpExtractError", { message: Schema.String }) {};
|
|
33
|
+
const fail = (message) => {
|
|
34
|
+
throw new XmpExtractError({ message });
|
|
35
|
+
};
|
|
36
|
+
const ascii = (text) => Uint8Array.from(Arr.map(Arr.fromIterable(text), (c) => c.charCodeAt(0)));
|
|
37
|
+
const startsWith = (bytes, prefix) => bytes.length >= prefix.length && Arr.every(Arr.fromIterable(prefix), (b, i) => bytes[i] === b);
|
|
38
|
+
const utf8 = (bytes) => new TextDecoder().decode(bytes);
|
|
39
|
+
const latin1 = (bytes) => new TextDecoder("windows-1252").decode(bytes);
|
|
40
|
+
const view = (bytes) => new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
41
|
+
const catchExtract = (f) => Result.try({
|
|
42
|
+
try: f,
|
|
43
|
+
catch: (e) => {
|
|
44
|
+
if (e instanceof XmpExtractError) return e;
|
|
45
|
+
throw e;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
const STANDARD = ascii("http://ns.adobe.com/xap/1.0/\0");
|
|
49
|
+
const EXTENSION = ascii("http://ns.adobe.com/xmp/extension/\0");
|
|
50
|
+
const APP1 = 225;
|
|
51
|
+
const isStandalone = (marker) => marker === 1 || marker === 255 || marker >= 208 && marker <= 215;
|
|
52
|
+
/** The segments before the image data (SOS) or the end of the image (EOI). */
|
|
53
|
+
const jpegSegments = (bytes) => {
|
|
54
|
+
const data = view(bytes);
|
|
55
|
+
return Arr.getSomes(Arr.unfold(2, (pos) => {
|
|
56
|
+
if (pos + 2 > bytes.length) return Option.none();
|
|
57
|
+
if (data.getUint8(pos) !== 255) return fail(`Expected a JPEG marker at offset ${pos}`);
|
|
58
|
+
const marker = data.getUint8(pos + 1);
|
|
59
|
+
if (marker === 217 || marker === 218) return Option.none();
|
|
60
|
+
if (isStandalone(marker)) return Option.some([Option.none(), marker === 255 ? pos + 1 : pos + 2]);
|
|
61
|
+
if (pos + 4 > bytes.length) return fail(`Truncated JPEG segment at offset ${pos}`);
|
|
62
|
+
const length = data.getUint16(pos + 2);
|
|
63
|
+
const end = pos + 2 + length;
|
|
64
|
+
if (length < 2 || end > bytes.length) return fail(`Truncated JPEG segment at offset ${pos}`);
|
|
65
|
+
return Option.some([Option.some({
|
|
66
|
+
marker,
|
|
67
|
+
data: bytes.subarray(pos + 4, end)
|
|
68
|
+
}), end]);
|
|
69
|
+
}));
|
|
70
|
+
};
|
|
71
|
+
const extensionChunk = (payload) => {
|
|
72
|
+
const header = EXTENSION.length + 40;
|
|
73
|
+
if (payload.length < header) return fail("Truncated Extended XMP segment");
|
|
74
|
+
const data = view(payload);
|
|
75
|
+
return {
|
|
76
|
+
guid: latin1(payload.subarray(EXTENSION.length, EXTENSION.length + 32)),
|
|
77
|
+
length: data.getUint32(EXTENSION.length + 32),
|
|
78
|
+
offset: data.getUint32(EXTENSION.length + 36),
|
|
79
|
+
data: payload.subarray(header)
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
/** Reassembles the Extended XMP whose GUID the standard packet names. */
|
|
83
|
+
const extended = (standard, chunks) => Option.map(Arr.findFirst(chunks, (c) => standard.includes(c.guid)), ({ guid, length }) => {
|
|
84
|
+
const whole = new Uint8Array(length);
|
|
85
|
+
Arr.filter(chunks, (c) => c.guid === guid).forEach((c) => {
|
|
86
|
+
if (c.offset + c.data.length > length) fail("Extended XMP chunk out of bounds");
|
|
87
|
+
whole.set(c.data, c.offset);
|
|
88
|
+
});
|
|
89
|
+
return utf8(whole);
|
|
90
|
+
});
|
|
91
|
+
/**
|
|
92
|
+
* Reads the XMP of a JPEG file, returning a `Result`: `None` when the file
|
|
93
|
+
* has no XMP.
|
|
94
|
+
*
|
|
95
|
+
* @since 0.1.0
|
|
96
|
+
* @category extraction
|
|
97
|
+
*/
|
|
98
|
+
const jpegResult = (bytes) => catchExtract(() => {
|
|
99
|
+
if (bytes[0] !== 255 || bytes[1] !== 216) return fail("Not a JPEG file");
|
|
100
|
+
const app1 = Arr.map(Arr.filter(jpegSegments(bytes), (s) => s.marker === APP1), (s) => s.data);
|
|
101
|
+
const chunks = Arr.map(Arr.filter(app1, (d) => startsWith(d, EXTENSION)), extensionChunk);
|
|
102
|
+
return Option.map(Arr.findFirst(app1, (d) => startsWith(d, STANDARD)), (d) => {
|
|
103
|
+
const standard = utf8(d.subarray(STANDARD.length));
|
|
104
|
+
return {
|
|
105
|
+
standard,
|
|
106
|
+
extended: extended(standard, chunks)
|
|
107
|
+
};
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
/**
|
|
111
|
+
* Reads the XMP of a JPEG file: `None` when the file has no XMP.
|
|
112
|
+
*
|
|
113
|
+
* @since 0.1.0
|
|
114
|
+
* @category extraction
|
|
115
|
+
*/
|
|
116
|
+
const jpeg = (bytes) => Effect.suspend(() => Effect.fromResult(jpegResult(bytes)));
|
|
117
|
+
const PNG_SIGNATURE = Uint8Array.of(137, 80, 78, 71, 13, 10, 26, 10);
|
|
118
|
+
const XMP_KEYWORD = "XML:com.adobe.xmp";
|
|
119
|
+
const pngChunks = (bytes) => {
|
|
120
|
+
const data = view(bytes);
|
|
121
|
+
return Arr.unfold(PNG_SIGNATURE.length, (pos) => {
|
|
122
|
+
if (pos >= bytes.length) return Option.none();
|
|
123
|
+
if (pos + 12 > bytes.length) return fail(`Truncated PNG chunk at offset ${pos}`);
|
|
124
|
+
const length = data.getUint32(pos);
|
|
125
|
+
const type = latin1(bytes.subarray(pos + 4, pos + 8));
|
|
126
|
+
const end = pos + 12 + length;
|
|
127
|
+
if (end > bytes.length) return fail(`Truncated PNG chunk at offset ${pos}`);
|
|
128
|
+
if (type === "IEND") return Option.none();
|
|
129
|
+
return Option.some([{
|
|
130
|
+
type,
|
|
131
|
+
data: bytes.subarray(pos + 8, pos + 8 + length)
|
|
132
|
+
}, end]);
|
|
133
|
+
});
|
|
134
|
+
};
|
|
135
|
+
/** The XMP of an `iTXt` chunk, when its keyword is XMP's. */
|
|
136
|
+
const xmpChunk = (chunk) => {
|
|
137
|
+
const keywordEnd = chunk.indexOf(0);
|
|
138
|
+
if (keywordEnd < 0 || latin1(chunk.subarray(0, keywordEnd)) !== XMP_KEYWORD) return Option.none();
|
|
139
|
+
const compressed = chunk[keywordEnd + 1] !== 0;
|
|
140
|
+
if (compressed && chunk[keywordEnd + 2] !== 0) return fail("Unknown iTXt compression method");
|
|
141
|
+
const languageEnd = chunk.indexOf(0, keywordEnd + 3);
|
|
142
|
+
const translatedEnd = languageEnd < 0 ? -1 : chunk.indexOf(0, languageEnd + 1);
|
|
143
|
+
if (translatedEnd < 0) return fail("Malformed iTXt chunk");
|
|
144
|
+
return Option.some({
|
|
145
|
+
compressed,
|
|
146
|
+
text: chunk.subarray(translatedEnd + 1)
|
|
147
|
+
});
|
|
148
|
+
};
|
|
149
|
+
const pngXmpChunk = (bytes) => {
|
|
150
|
+
if (!startsWith(bytes, PNG_SIGNATURE)) return fail("Not a PNG file");
|
|
151
|
+
return Option.firstSomeOf(Arr.map(Arr.filter(pngChunks(bytes), (c) => c.type === "iTXt"), (c) => xmpChunk(c.data)));
|
|
152
|
+
};
|
|
153
|
+
/**
|
|
154
|
+
* The most bytes `Extract.png` inflates a compressed XMP chunk to by
|
|
155
|
+
* default: 4 MiB, far above any real packet, so a small deflate bomb fails
|
|
156
|
+
* instead of exhausting memory.
|
|
157
|
+
*
|
|
158
|
+
* @since 0.1.0
|
|
159
|
+
* @category constants
|
|
160
|
+
*/
|
|
161
|
+
const DEFAULT_MAX_XMP_BYTES = 4194304;
|
|
162
|
+
const concatChunks = (chunks, total) => {
|
|
163
|
+
const out = new Uint8Array(total);
|
|
164
|
+
Arr.reduce(chunks, 0, (offset, chunk) => {
|
|
165
|
+
out.set(chunk, offset);
|
|
166
|
+
return offset + chunk.length;
|
|
167
|
+
});
|
|
168
|
+
return out;
|
|
169
|
+
};
|
|
170
|
+
/**
|
|
171
|
+
* Reads a stream to its end, failing (and cancelling it) as soon as the
|
|
172
|
+
* running total passes `max`, so nothing past the cap is buffered.
|
|
173
|
+
*/
|
|
174
|
+
const readCapped = (reader, max, chunks, total) => reader.read().then((result) => {
|
|
175
|
+
if (result.done) return concatChunks(chunks, total);
|
|
176
|
+
const next = total + result.value.length;
|
|
177
|
+
if (next > max) {
|
|
178
|
+
reader.cancel();
|
|
179
|
+
return fail(`Compressed XMP iTXt chunk inflates to more than ${max} bytes`);
|
|
180
|
+
}
|
|
181
|
+
chunks.push(result.value);
|
|
182
|
+
return readCapped(reader, max, chunks, next);
|
|
183
|
+
});
|
|
184
|
+
/** Inflates zlib data with the platform's `DecompressionStream`, up to `max` bytes. */
|
|
185
|
+
const inflate = (data, max) => Effect.tryPromise({
|
|
186
|
+
try: () => {
|
|
187
|
+
const source = new ReadableStream({ start: (controller) => {
|
|
188
|
+
controller.enqueue(data.slice());
|
|
189
|
+
controller.close();
|
|
190
|
+
} });
|
|
191
|
+
return readCapped(source.pipeThrough(new DecompressionStream("deflate")).getReader(), max, [], 0);
|
|
192
|
+
},
|
|
193
|
+
catch: (e) => e instanceof XmpExtractError ? e : new XmpExtractError({ message: "Malformed compressed iTXt chunk" })
|
|
194
|
+
});
|
|
195
|
+
/**
|
|
196
|
+
* Reads the XMP packet of a PNG file, returning a `Result`: `None` when the
|
|
197
|
+
* file has no XMP. Decompression is asynchronous, so a compressed `iTXt`
|
|
198
|
+
* chunk fails here; `png` inflates it. (The XMP specification writes the
|
|
199
|
+
* chunk uncompressed, so a scanner can find the packet.)
|
|
200
|
+
*
|
|
201
|
+
* @since 0.1.0
|
|
202
|
+
* @category extraction
|
|
203
|
+
*/
|
|
204
|
+
const pngResult = (bytes) => catchExtract(() => Option.map(pngXmpChunk(bytes), (chunk) => chunk.compressed ? fail("A compressed XMP iTXt chunk needs Extract.png, which inflates it") : utf8(chunk.text)));
|
|
205
|
+
/**
|
|
206
|
+
* Reads the XMP packet of a PNG file: `None` when the file has no XMP. A
|
|
207
|
+
* zlib-compressed `iTXt` chunk is inflated with the platform's
|
|
208
|
+
* `DecompressionStream` (Node, browsers and Workers all provide it), and
|
|
209
|
+
* fails once it inflates past `maxXmpBytes` (default `DEFAULT_MAX_XMP_BYTES`).
|
|
210
|
+
*
|
|
211
|
+
* @since 0.1.0
|
|
212
|
+
* @category extraction
|
|
213
|
+
*/
|
|
214
|
+
const png = (bytes, options) => Effect.flatMap(Effect.suspend(() => Effect.fromResult(catchExtract(() => pngXmpChunk(bytes)))), Option.match({
|
|
215
|
+
onNone: () => Effect.succeed(Option.none()),
|
|
216
|
+
onSome: (chunk) => chunk.compressed ? Effect.map(inflate(chunk.text, options?.maxXmpBytes ?? 4194304), (text) => Option.some(utf8(text))) : Effect.succeed(Option.some(utf8(chunk.text)))
|
|
217
|
+
}));
|
|
218
|
+
export { jpegResult as a, jpeg as i, Extract_exports as n, png as o, XmpExtractError as r, pngResult as s, DEFAULT_MAX_XMP_BYTES as t };
|
|
219
|
+
|
|
220
|
+
//# sourceMappingURL=Extract-Bop85jES.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Extract-Bop85jES.mjs","names":[],"sources":["../src/xmp/Extract.ts"],"sourcesContent":["/**\n * Reading the XMP packet embedded in an image file, as XMP Specification\n * Part 3 places it: a JPEG's APP1 segment (with Extended XMP split across\n * further APP1 segments) or a PNG's `iTXt` chunk with the keyword\n * `XML:com.adobe.xmp` (stored or, read with `png`, zlib-compressed). Any\n * other format (TIFF, WebP, GIF, MP4, PDF, …) can\n * be scanned for its packet with `Packet.find`.\n *\n * @since 0.1.0\n */\nimport * as Arr from 'effect/Array';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\nimport * as Result from 'effect/Result';\nimport * as Schema from 'effect/Schema';\n\n/**\n * A malformed image file.\n *\n * @since 0.1.0\n * @category errors\n */\nexport class XmpExtractError extends Schema.TaggedError<XmpExtractError>()('XmpExtractError', {\n message: Schema.String,\n}) {}\n\n/**\n * The XMP of a JPEG file: the standard packet and, when the packet does not\n * fit one segment, the Extended XMP document its `xmpNote:HasExtendedXMP`\n * names.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface JpegXmp {\n readonly standard: string;\n readonly extended: Option.Option<string>;\n}\n\nconst fail = (message: string): never => {\n throw new XmpExtractError({ message });\n};\n\nconst ascii = (text: string): Uint8Array =>\n Uint8Array.from(Arr.map(Arr.fromIterable(text), (c) => c.charCodeAt(0)));\n\nconst startsWith = (bytes: Uint8Array, prefix: Uint8Array): boolean =>\n bytes.length >= prefix.length && Arr.every(Arr.fromIterable(prefix), (b, i) => bytes[i] === b);\n\nconst utf8 = (bytes: Uint8Array): string => new TextDecoder().decode(bytes);\nconst latin1 = (bytes: Uint8Array): string => new TextDecoder('windows-1252').decode(bytes);\n\nconst view = (bytes: Uint8Array) => new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\nconst catchExtract = <A>(f: () => A): Result.Result<A, XmpExtractError> =>\n Result.try({\n try: f,\n catch: (e) => {\n if (e instanceof XmpExtractError) return e;\n throw e;\n },\n });\n\n// -----------------------------------------------------------------------------\n// JPEG\n// -----------------------------------------------------------------------------\n\nconst STANDARD = ascii('http://ns.adobe.com/xap/1.0/\\0');\nconst EXTENSION = ascii('http://ns.adobe.com/xmp/extension/\\0');\nconst APP1 = 0xe1;\n\ninterface Segment {\n readonly marker: number;\n readonly data: Uint8Array;\n}\n\nconst isStandalone = (marker: number) =>\n marker === 0x01 || marker === 0xff || (marker >= 0xd0 && marker <= 0xd7);\n\n/** The segments before the image data (SOS) or the end of the image (EOI). */\nconst jpegSegments = (bytes: Uint8Array): ReadonlyArray<Segment> => {\n const data = view(bytes);\n return Arr.getSomes(\n Arr.unfold(2, (pos): Option.Option<readonly [Option.Option<Segment>, number]> => {\n if (pos + 2 > bytes.length) return Option.none();\n if (data.getUint8(pos) !== 0xff) return fail(`Expected a JPEG marker at offset ${pos}`);\n const marker = data.getUint8(pos + 1);\n if (marker === 0xd9 || marker === 0xda) return Option.none();\n // A fill byte (0xFF) or a marker without a length.\n if (isStandalone(marker))\n return Option.some([Option.none(), marker === 0xff ? pos + 1 : pos + 2]);\n if (pos + 4 > bytes.length) return fail(`Truncated JPEG segment at offset ${pos}`);\n const length = data.getUint16(pos + 2);\n const end = pos + 2 + length;\n if (length < 2 || end > bytes.length) return fail(`Truncated JPEG segment at offset ${pos}`);\n return Option.some([Option.some({ marker, data: bytes.subarray(pos + 4, end) }), end]);\n }),\n );\n};\n\ninterface Chunk {\n readonly guid: string;\n readonly length: number;\n readonly offset: number;\n readonly data: Uint8Array;\n}\n\nconst extensionChunk = (payload: Uint8Array): Chunk => {\n const header = EXTENSION.length + 40;\n if (payload.length < header) return fail('Truncated Extended XMP segment');\n const data = view(payload);\n return {\n guid: latin1(payload.subarray(EXTENSION.length, EXTENSION.length + 32)),\n length: data.getUint32(EXTENSION.length + 32),\n offset: data.getUint32(EXTENSION.length + 36),\n data: payload.subarray(header),\n };\n};\n\n/** Reassembles the Extended XMP whose GUID the standard packet names. */\nconst extended = (standard: string, chunks: ReadonlyArray<Chunk>): Option.Option<string> =>\n Option.map(\n Arr.findFirst(chunks, (c) => standard.includes(c.guid)),\n ({ guid, length }) => {\n const whole = new Uint8Array(length);\n Arr.filter(chunks, (c) => c.guid === guid).forEach((c) => {\n if (c.offset + c.data.length > length) fail('Extended XMP chunk out of bounds');\n whole.set(c.data, c.offset);\n });\n return utf8(whole);\n },\n );\n\n/**\n * Reads the XMP of a JPEG file, returning a `Result`: `None` when the file\n * has no XMP.\n *\n * @since 0.1.0\n * @category extraction\n */\nexport const jpegResult = (\n bytes: Uint8Array,\n): Result.Result<Option.Option<JpegXmp>, XmpExtractError> =>\n catchExtract(() => {\n if (bytes[0] !== 0xff || bytes[1] !== 0xd8) return fail('Not a JPEG file');\n const app1 = Arr.map(\n Arr.filter(jpegSegments(bytes), (s) => s.marker === APP1),\n (s) => s.data,\n );\n const chunks = Arr.map(\n Arr.filter(app1, (d) => startsWith(d, EXTENSION)),\n extensionChunk,\n );\n return Option.map(\n Arr.findFirst(app1, (d) => startsWith(d, STANDARD)),\n (d) => {\n const standard = utf8(d.subarray(STANDARD.length));\n return { standard, extended: extended(standard, chunks) };\n },\n );\n });\n\n/**\n * Reads the XMP of a JPEG file: `None` when the file has no XMP.\n *\n * @since 0.1.0\n * @category extraction\n */\nexport const jpeg = (bytes: Uint8Array): Effect.Effect<Option.Option<JpegXmp>, XmpExtractError> =>\n Effect.suspend(() => Effect.fromResult(jpegResult(bytes)));\n\n// -----------------------------------------------------------------------------\n// PNG\n// -----------------------------------------------------------------------------\n\nconst PNG_SIGNATURE = Uint8Array.of(0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a);\nconst XMP_KEYWORD = 'XML:com.adobe.xmp';\n\ninterface PngChunk {\n readonly type: string;\n readonly data: Uint8Array;\n}\n\nconst pngChunks = (bytes: Uint8Array): ReadonlyArray<PngChunk> => {\n const data = view(bytes);\n return Arr.unfold(PNG_SIGNATURE.length, (pos): Option.Option<readonly [PngChunk, number]> => {\n if (pos >= bytes.length) return Option.none();\n if (pos + 12 > bytes.length) return fail(`Truncated PNG chunk at offset ${pos}`);\n const length = data.getUint32(pos);\n const type = latin1(bytes.subarray(pos + 4, pos + 8));\n const end = pos + 12 + length;\n if (end > bytes.length) return fail(`Truncated PNG chunk at offset ${pos}`);\n if (type === 'IEND') return Option.none();\n return Option.some([{ type, data: bytes.subarray(pos + 8, pos + 8 + length) }, end]);\n });\n};\n\n/** The text of an XMP `iTXt` chunk: stored, or zlib-compressed. */\ninterface XmpChunk {\n readonly compressed: boolean;\n readonly text: Uint8Array;\n}\n\n/** The XMP of an `iTXt` chunk, when its keyword is XMP's. */\nconst xmpChunk = (chunk: Uint8Array): Option.Option<XmpChunk> => {\n const keywordEnd = chunk.indexOf(0);\n if (keywordEnd < 0 || latin1(chunk.subarray(0, keywordEnd)) !== XMP_KEYWORD) {\n return Option.none();\n }\n const compressed = chunk[keywordEnd + 1] !== 0;\n // Compression method 0 (zlib) is the only one PNG defines.\n if (compressed && chunk[keywordEnd + 2] !== 0) return fail('Unknown iTXt compression method');\n const languageEnd = chunk.indexOf(0, keywordEnd + 3);\n const translatedEnd = languageEnd < 0 ? -1 : chunk.indexOf(0, languageEnd + 1);\n if (translatedEnd < 0) return fail('Malformed iTXt chunk');\n return Option.some({ compressed, text: chunk.subarray(translatedEnd + 1) });\n};\n\nconst pngXmpChunk = (bytes: Uint8Array): Option.Option<XmpChunk> => {\n if (!startsWith(bytes, PNG_SIGNATURE)) return fail('Not a PNG file');\n return Option.firstSomeOf(\n Arr.map(\n Arr.filter(pngChunks(bytes), (c) => c.type === 'iTXt'),\n (c) => xmpChunk(c.data),\n ),\n );\n};\n\n/**\n * The most bytes `Extract.png` inflates a compressed XMP chunk to by\n * default: 4 MiB, far above any real packet, so a small deflate bomb fails\n * instead of exhausting memory.\n *\n * @since 0.1.0\n * @category constants\n */\nexport const DEFAULT_MAX_XMP_BYTES = 4 * 1024 * 1024;\n\n/**\n * Options for `Extract.png`.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface PngOptions {\n /**\n * The most bytes a compressed `iTXt` chunk may inflate to; past it the\n * read fails. Defaults to `DEFAULT_MAX_XMP_BYTES`.\n */\n readonly maxXmpBytes?: number | undefined;\n}\n\nconst concatChunks = (chunks: ReadonlyArray<Uint8Array>, total: number): Uint8Array => {\n const out = new Uint8Array(total);\n Arr.reduce(chunks, 0, (offset, chunk) => {\n out.set(chunk, offset);\n return offset + chunk.length;\n });\n return out;\n};\n\n/**\n * Reads a stream to its end, failing (and cancelling it) as soon as the\n * running total passes `max`, so nothing past the cap is buffered.\n */\nconst readCapped = (\n reader: ReadableStreamDefaultReader<Uint8Array>,\n max: number,\n chunks: Array<Uint8Array>,\n total: number,\n): Promise<Uint8Array> =>\n reader.read().then((result) => {\n if (result.done) return concatChunks(chunks, total);\n const next = total + result.value.length;\n if (next > max) {\n void reader.cancel();\n return fail(`Compressed XMP iTXt chunk inflates to more than ${max} bytes`);\n }\n chunks.push(result.value);\n return readCapped(reader, max, chunks, next);\n });\n\n/** Inflates zlib data with the platform's `DecompressionStream`, up to `max` bytes. */\nconst inflate = (data: Uint8Array, max: number): Effect.Effect<Uint8Array, XmpExtractError> =>\n Effect.tryPromise({\n try: () => {\n const source = new ReadableStream<BufferSource>({\n start: (controller) => {\n // A copy: `BufferSource` excludes a view over a `SharedArrayBuffer`.\n controller.enqueue(data.slice());\n controller.close();\n },\n });\n return readCapped(\n source.pipeThrough(new DecompressionStream('deflate')).getReader(),\n max,\n [],\n 0,\n );\n },\n catch: (e) =>\n e instanceof XmpExtractError\n ? e\n : new XmpExtractError({ message: 'Malformed compressed iTXt chunk' }),\n });\n\n/**\n * Reads the XMP packet of a PNG file, returning a `Result`: `None` when the\n * file has no XMP. Decompression is asynchronous, so a compressed `iTXt`\n * chunk fails here; `png` inflates it. (The XMP specification writes the\n * chunk uncompressed, so a scanner can find the packet.)\n *\n * @since 0.1.0\n * @category extraction\n */\nexport const pngResult = (\n bytes: Uint8Array,\n): Result.Result<Option.Option<string>, XmpExtractError> =>\n catchExtract(() =>\n Option.map(pngXmpChunk(bytes), (chunk) =>\n chunk.compressed\n ? fail('A compressed XMP iTXt chunk needs Extract.png, which inflates it')\n : utf8(chunk.text),\n ),\n );\n\n/**\n * Reads the XMP packet of a PNG file: `None` when the file has no XMP. A\n * zlib-compressed `iTXt` chunk is inflated with the platform's\n * `DecompressionStream` (Node, browsers and Workers all provide it), and\n * fails once it inflates past `maxXmpBytes` (default `DEFAULT_MAX_XMP_BYTES`).\n *\n * @since 0.1.0\n * @category extraction\n */\nexport const png = (\n bytes: Uint8Array,\n options?: PngOptions,\n): Effect.Effect<Option.Option<string>, XmpExtractError> =>\n Effect.flatMap(\n Effect.suspend(() => Effect.fromResult(catchExtract(() => pngXmpChunk(bytes)))),\n Option.match({\n onNone: () => Effect.succeed(Option.none()),\n onSome: (chunk) =>\n chunk.compressed\n ? Effect.map(inflate(chunk.text, options?.maxXmpBytes ?? DEFAULT_MAX_XMP_BYTES), (text) =>\n Option.some(utf8(text)),\n )\n : Effect.succeed(Option.some(utf8(chunk.text))),\n }),\n );\n"],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import * as Option from "effect/Option";
|
|
2
|
+
import * as Schema from "effect/Schema";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import * as Result from "effect/Result";
|
|
5
|
+
declare namespace Extract_d_exports {
|
|
6
|
+
export { DEFAULT_MAX_XMP_BYTES, JpegXmp, PngOptions, XmpExtractError, jpeg, jpegResult, png, pngResult };
|
|
7
|
+
}
|
|
8
|
+
declare const XmpExtractError_base: Schema.Class<XmpExtractError, Schema.TaggedStruct<"XmpExtractError", {
|
|
9
|
+
readonly message: Schema.String;
|
|
10
|
+
}>, import("effect/Cause").YieldableError>;
|
|
11
|
+
/**
|
|
12
|
+
* A malformed image file.
|
|
13
|
+
*
|
|
14
|
+
* @since 0.1.0
|
|
15
|
+
* @category errors
|
|
16
|
+
*/
|
|
17
|
+
declare class XmpExtractError extends XmpExtractError_base {}
|
|
18
|
+
/**
|
|
19
|
+
* The XMP of a JPEG file: the standard packet and, when the packet does not
|
|
20
|
+
* fit one segment, the Extended XMP document its `xmpNote:HasExtendedXMP`
|
|
21
|
+
* names.
|
|
22
|
+
*
|
|
23
|
+
* @since 0.1.0
|
|
24
|
+
* @category models
|
|
25
|
+
*/
|
|
26
|
+
interface JpegXmp {
|
|
27
|
+
readonly standard: string;
|
|
28
|
+
readonly extended: Option.Option<string>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Reads the XMP of a JPEG file, returning a `Result`: `None` when the file
|
|
32
|
+
* has no XMP.
|
|
33
|
+
*
|
|
34
|
+
* @since 0.1.0
|
|
35
|
+
* @category extraction
|
|
36
|
+
*/
|
|
37
|
+
declare const jpegResult: (bytes: Uint8Array) => Result.Result<Option.Option<JpegXmp>, XmpExtractError>;
|
|
38
|
+
/**
|
|
39
|
+
* Reads the XMP of a JPEG file: `None` when the file has no XMP.
|
|
40
|
+
*
|
|
41
|
+
* @since 0.1.0
|
|
42
|
+
* @category extraction
|
|
43
|
+
*/
|
|
44
|
+
declare const jpeg: (bytes: Uint8Array) => Effect.Effect<Option.Option<JpegXmp>, XmpExtractError>;
|
|
45
|
+
/**
|
|
46
|
+
* The most bytes `Extract.png` inflates a compressed XMP chunk to by
|
|
47
|
+
* default: 4 MiB, far above any real packet, so a small deflate bomb fails
|
|
48
|
+
* instead of exhausting memory.
|
|
49
|
+
*
|
|
50
|
+
* @since 0.1.0
|
|
51
|
+
* @category constants
|
|
52
|
+
*/
|
|
53
|
+
declare const DEFAULT_MAX_XMP_BYTES: number;
|
|
54
|
+
/**
|
|
55
|
+
* Options for `Extract.png`.
|
|
56
|
+
*
|
|
57
|
+
* @since 0.1.0
|
|
58
|
+
* @category models
|
|
59
|
+
*/
|
|
60
|
+
interface PngOptions {
|
|
61
|
+
/**
|
|
62
|
+
* The most bytes a compressed `iTXt` chunk may inflate to; past it the
|
|
63
|
+
* read fails. Defaults to `DEFAULT_MAX_XMP_BYTES`.
|
|
64
|
+
*/
|
|
65
|
+
readonly maxXmpBytes?: number | undefined;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Reads the XMP packet of a PNG file, returning a `Result`: `None` when the
|
|
69
|
+
* file has no XMP. Decompression is asynchronous, so a compressed `iTXt`
|
|
70
|
+
* chunk fails here; `png` inflates it. (The XMP specification writes the
|
|
71
|
+
* chunk uncompressed, so a scanner can find the packet.)
|
|
72
|
+
*
|
|
73
|
+
* @since 0.1.0
|
|
74
|
+
* @category extraction
|
|
75
|
+
*/
|
|
76
|
+
declare const pngResult: (bytes: Uint8Array) => Result.Result<Option.Option<string>, XmpExtractError>;
|
|
77
|
+
/**
|
|
78
|
+
* Reads the XMP packet of a PNG file: `None` when the file has no XMP. A
|
|
79
|
+
* zlib-compressed `iTXt` chunk is inflated with the platform's
|
|
80
|
+
* `DecompressionStream` (Node, browsers and Workers all provide it), and
|
|
81
|
+
* fails once it inflates past `maxXmpBytes` (default `DEFAULT_MAX_XMP_BYTES`).
|
|
82
|
+
*
|
|
83
|
+
* @since 0.1.0
|
|
84
|
+
* @category extraction
|
|
85
|
+
*/
|
|
86
|
+
declare const png: (bytes: Uint8Array, options?: PngOptions) => Effect.Effect<Option.Option<string>, XmpExtractError>;
|
|
87
|
+
export { XmpExtractError as a, png as c, PngOptions as i, pngResult as l, Extract_d_exports as n, jpeg as o, JpegXmp as r, jpegResult as s, DEFAULT_MAX_XMP_BYTES as t };
|
|
88
|
+
//# sourceMappingURL=Extract-C_pCvuTC.d.mts.map
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { a as QuadStore } from "./Store-D0jmVfb3.mjs";
|
|
2
|
+
import { a as ServiceHandler, o as SparqlEngine, r as Loader, t as EngineOptions } from "./Engine-CYPB3g4h.mjs";
|
|
3
|
+
import { t as Config } from "./SparqlClient-UPc88SHy.mjs";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import * as Layer from "effect/Layer";
|
|
6
|
+
import * as HttpClient from "effect/http/HttpClient";
|
|
7
|
+
declare namespace Federation_d_exports {
|
|
8
|
+
export { RemoteConfig, layerEngine, loader, serviceHandler, serviceQuery };
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Client settings used for remote endpoints (everything but the endpoint
|
|
12
|
+
* URLs).
|
|
13
|
+
*
|
|
14
|
+
* @since 0.1.0
|
|
15
|
+
* @category models
|
|
16
|
+
*/
|
|
17
|
+
type RemoteConfig = Omit<Config, 'endpoint' | 'updateEndpoint' | 'graphStoreEndpoint'>;
|
|
18
|
+
/**
|
|
19
|
+
* The query sent to a remote endpoint for a `SERVICE` pattern:
|
|
20
|
+
* `SELECT * WHERE { … }` with the prefixes of the original query.
|
|
21
|
+
*
|
|
22
|
+
* @since 0.1.0
|
|
23
|
+
* @category federation
|
|
24
|
+
*/
|
|
25
|
+
declare const serviceQuery: (service: Parameters<ServiceHandler>[1]) => string;
|
|
26
|
+
/**
|
|
27
|
+
* Builds a `SERVICE` handler that sends each remote pattern to its endpoint
|
|
28
|
+
* with the `HttpClient` from the context. Clients are cached per endpoint.
|
|
29
|
+
*
|
|
30
|
+
* @since 0.1.0
|
|
31
|
+
* @category federation
|
|
32
|
+
*/
|
|
33
|
+
declare const serviceHandler: (config?: RemoteConfig) => Effect.Effect<ServiceHandler, never, HttpClient.HttpClient>;
|
|
34
|
+
/**
|
|
35
|
+
* Builds a `LOAD` handler that fetches documents over HTTP and parses them
|
|
36
|
+
* with the `Serialization.Formats` service (or the default formats), by
|
|
37
|
+
* media type or, failing that, by file extension.
|
|
38
|
+
*
|
|
39
|
+
* @since 0.1.0
|
|
40
|
+
* @category federation
|
|
41
|
+
*/
|
|
42
|
+
declare const loader: (config?: Pick<RemoteConfig, "headers" | "timeout">) => Effect.Effect<Loader, never, HttpClient.HttpClient>;
|
|
43
|
+
/**
|
|
44
|
+
* A `SparqlEngine` layer whose `SERVICE` patterns are evaluated remotely and
|
|
45
|
+
* whose `LOAD` fetches documents over HTTP.
|
|
46
|
+
*
|
|
47
|
+
* @since 0.1.0
|
|
48
|
+
* @category layers
|
|
49
|
+
*/
|
|
50
|
+
declare const layerEngine: (options?: EngineOptions, config?: RemoteConfig) => Layer.Layer<SparqlEngine, never, QuadStore | HttpClient.HttpClient>;
|
|
51
|
+
export { serviceHandler as a, loader as i, RemoteConfig as n, serviceQuery as o, layerEngine as r, Federation_d_exports as t };
|
|
52
|
+
//# sourceMappingURL=Federation-BcNrozc1.d.mts.map
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-D8jQpDG7.mjs";
|
|
2
|
+
import { _ as parserForExtension, a as formatError, g as parserFor, t as Formats } from "./Serialization-DP9H5bYQ.mjs";
|
|
3
|
+
import { i as defaults, n as acceptHeader } from "./ClientFormats-CXomkXLV.mjs";
|
|
4
|
+
import { n as EvaluationError, r as UpdateError } from "./Errors-CMdV1RhU.mjs";
|
|
5
|
+
import { a as make, n as SparqlEngine } from "./Engine-DF8PN7g-.mjs";
|
|
6
|
+
import { t as QuadStore } from "./Store-DH3Ow1GO.mjs";
|
|
7
|
+
import { i as printPattern } from "./Generator-D3utCJC7.mjs";
|
|
8
|
+
import { c as make$1 } from "./SparqlClient-C_CjXbwj.mjs";
|
|
9
|
+
import * as MutableHashMap from "effect/MutableHashMap";
|
|
10
|
+
import * as Option from "effect/Option";
|
|
11
|
+
import * as Predicate from "effect/Predicate";
|
|
12
|
+
import * as Effect from "effect/Effect";
|
|
13
|
+
import * as Record from "effect/Record";
|
|
14
|
+
import * as Layer from "effect/Layer";
|
|
15
|
+
import * as Stream from "effect/Stream";
|
|
16
|
+
import * as HttpClient from "effect/http/HttpClient";
|
|
17
|
+
import * as HttpClientRequest from "effect/http/HttpClientRequest";
|
|
18
|
+
// src/sparql/Federation.ts
|
|
19
|
+
/**
|
|
20
|
+
* Federation for the in-memory SPARQL engine: an `Engine.ServiceHandler`
|
|
21
|
+
* that evaluates `SERVICE <endpoint> { … }` patterns remotely with the
|
|
22
|
+
* SPARQL client, and an `Engine.Loader` that fetches documents for `LOAD`.
|
|
23
|
+
*
|
|
24
|
+
* ```ts
|
|
25
|
+
* const EngineLive = Federation.layerEngine().pipe(
|
|
26
|
+
* Layer.provide(Store.layerMemory(data)),
|
|
27
|
+
* Layer.provide(FetchHttpClient.layer),
|
|
28
|
+
* );
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @since 0.1.0
|
|
32
|
+
*/
|
|
33
|
+
var Federation_exports = /* @__PURE__ */ __exportAll({
|
|
34
|
+
layerEngine: () => layerEngine,
|
|
35
|
+
loader: () => loader,
|
|
36
|
+
serviceHandler: () => serviceHandler,
|
|
37
|
+
serviceQuery: () => serviceQuery
|
|
38
|
+
});
|
|
39
|
+
/**
|
|
40
|
+
* The query sent to a remote endpoint for a `SERVICE` pattern:
|
|
41
|
+
* `SELECT * WHERE { … }` with the prefixes of the original query.
|
|
42
|
+
*
|
|
43
|
+
* @since 0.1.0
|
|
44
|
+
* @category federation
|
|
45
|
+
*/
|
|
46
|
+
const serviceQuery = (service) => {
|
|
47
|
+
return `${Record.toEntries(service.prefixes).map(([prefix, iri]) => `PREFIX ${prefix}: <${iri}>\n`).join("")}SELECT * WHERE ${printPattern(service.pattern, service.prefixes)}`;
|
|
48
|
+
};
|
|
49
|
+
const describeError = (e) => Predicate.isTagged(e, "HttpStatusError") ? e.message : `${e._tag}: ${e.message}`;
|
|
50
|
+
/**
|
|
51
|
+
* Builds a `SERVICE` handler that sends each remote pattern to its endpoint
|
|
52
|
+
* with the `HttpClient` from the context. Clients are cached per endpoint.
|
|
53
|
+
*
|
|
54
|
+
* @since 0.1.0
|
|
55
|
+
* @category federation
|
|
56
|
+
*/
|
|
57
|
+
const serviceHandler = (config = {}) => Effect.gen(function* () {
|
|
58
|
+
const context = yield* Effect.context();
|
|
59
|
+
const clients = MutableHashMap.empty();
|
|
60
|
+
const clientFor = (endpoint) => Effect.suspend(() => {
|
|
61
|
+
const cached = MutableHashMap.get(clients, endpoint.value);
|
|
62
|
+
if (Option.isSome(cached)) return Effect.succeed(cached.value);
|
|
63
|
+
return Effect.tap(Effect.provideContext(make$1({
|
|
64
|
+
...config,
|
|
65
|
+
endpoint: endpoint.value
|
|
66
|
+
}), context), (client) => Effect.sync(() => MutableHashMap.set(clients, endpoint.value, client)));
|
|
67
|
+
});
|
|
68
|
+
return (endpoint, service) => Stream.unwrap(Effect.map(clientFor(endpoint), (client) => client.selectBindings(serviceQuery(service)).pipe(Stream.mapError((e) => new EvaluationError({
|
|
69
|
+
message: `SERVICE <${endpoint.value}> failed: ${describeError(e)}`,
|
|
70
|
+
cause: e
|
|
71
|
+
}))))).pipe(Stream.withSpan("Federation.service", { attributes: { endpoint: endpoint.value } }));
|
|
72
|
+
});
|
|
73
|
+
const loadFailed = (iri, message, cause) => new UpdateError({
|
|
74
|
+
message: `LOAD <${iri.value}> failed: ${message}`,
|
|
75
|
+
cause
|
|
76
|
+
});
|
|
77
|
+
/**
|
|
78
|
+
* Builds a `LOAD` handler that fetches documents over HTTP and parses them
|
|
79
|
+
* with the `Serialization.Formats` service (or the default formats), by
|
|
80
|
+
* media type or, failing that, by file extension.
|
|
81
|
+
*
|
|
82
|
+
* @since 0.1.0
|
|
83
|
+
* @category federation
|
|
84
|
+
*/
|
|
85
|
+
const loader = (config = {}) => Effect.gen(function* () {
|
|
86
|
+
const http = yield* HttpClient.HttpClient;
|
|
87
|
+
const formats = Option.getOrElse(yield* Effect.serviceOption(Formats), () => defaults);
|
|
88
|
+
const accept = acceptHeader(formats);
|
|
89
|
+
return (iri) => Effect.gen(function* () {
|
|
90
|
+
const request = HttpClientRequest.get(iri.value, { headers: {
|
|
91
|
+
...config.headers,
|
|
92
|
+
accept
|
|
93
|
+
} });
|
|
94
|
+
const exchange = Effect.flatMap(http.execute(request), (response) => Effect.map(response.text, (text) => ({
|
|
95
|
+
response,
|
|
96
|
+
text
|
|
97
|
+
})));
|
|
98
|
+
const { response, text } = yield* (config.timeout === void 0 ? exchange : Effect.timeoutOrElse(exchange, {
|
|
99
|
+
duration: config.timeout,
|
|
100
|
+
orElse: () => Effect.fail(loadFailed(iri, "timed out"))
|
|
101
|
+
})).pipe(Effect.mapError((e) => Predicate.isTagged(e, "UpdateError") ? e : loadFailed(iri, e.message, e)));
|
|
102
|
+
if (response.status < 200 || response.status >= 300) return yield* loadFailed(iri, `status ${response.status}`);
|
|
103
|
+
const mediaType = ((response.headers["content-type"] ?? "").split(";", 1)[0] ?? "").trim();
|
|
104
|
+
const byType = parserFor(formats, mediaType);
|
|
105
|
+
const extension = new URL(iri.value).pathname.replace(/^.*\./, "");
|
|
106
|
+
const parser = Option.isSome(byType) ? byType : parserForExtension(formats, extension);
|
|
107
|
+
if (Option.isNone(parser)) return yield* loadFailed(iri, `unsupported media type '${mediaType}'`);
|
|
108
|
+
return (yield* parser.value.parse(text, { baseIri: iri.value }).pipe(Effect.mapError((e) => loadFailed(iri, formatError(e), e)))).dataset;
|
|
109
|
+
}).pipe(Effect.withSpan("Federation.load", { attributes: { iri: iri.value } }));
|
|
110
|
+
});
|
|
111
|
+
/**
|
|
112
|
+
* A `SparqlEngine` layer whose `SERVICE` patterns are evaluated remotely and
|
|
113
|
+
* whose `LOAD` fetches documents over HTTP.
|
|
114
|
+
*
|
|
115
|
+
* @since 0.1.0
|
|
116
|
+
* @category layers
|
|
117
|
+
*/
|
|
118
|
+
const layerEngine = (options = {}, config = {}) => Layer.effect(SparqlEngine, Effect.gen(function* () {
|
|
119
|
+
const store = yield* QuadStore;
|
|
120
|
+
const service = yield* serviceHandler(config);
|
|
121
|
+
const load = yield* loader(config);
|
|
122
|
+
return make(store, {
|
|
123
|
+
...options,
|
|
124
|
+
service: options.service ?? service,
|
|
125
|
+
load: options.load ?? load
|
|
126
|
+
});
|
|
127
|
+
}));
|
|
128
|
+
export { serviceQuery as a, serviceHandler as i, layerEngine as n, loader as r, Federation_exports as t };
|
|
129
|
+
|
|
130
|
+
//# sourceMappingURL=Federation-CHScBkaK.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Federation-CHScBkaK.mjs","names":["Generator.printPattern","SparqlClient.make","Serialization.Formats","ClientFormats.defaults","ClientFormats.acceptHeader","Serialization.parserFor","Serialization.parserForExtension","Serialization.formatError","Engine.SparqlEngine","Store.QuadStore","Engine.make"],"sources":["../src/sparql/Federation.ts"],"sourcesContent":["/**\n * Federation for the in-memory SPARQL engine: an `Engine.ServiceHandler`\n * that evaluates `SERVICE <endpoint> { … }` patterns remotely with the\n * SPARQL client, and an `Engine.Loader` that fetches documents for `LOAD`.\n *\n * ```ts\n * const EngineLive = Federation.layerEngine().pipe(\n * Layer.provide(Store.layerMemory(data)),\n * Layer.provide(FetchHttpClient.layer),\n * );\n * ```\n *\n * @since 0.1.0\n */\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport * as MutableHashMap from 'effect/MutableHashMap';\nimport * as Option from 'effect/Option';\nimport * as Predicate from 'effect/Predicate';\nimport * as Record from 'effect/Record';\nimport * as Stream from 'effect/Stream';\nimport * as HttpClient from 'effect/http/HttpClient';\nimport * as HttpClientRequest from 'effect/http/HttpClientRequest';\nimport * as Serialization from '../Serialization.ts';\nimport type * as Term from '../Term.ts';\nimport * as Engine from './Engine.ts';\nimport { EvaluationError, UpdateError } from './Errors.ts';\nimport * as Generator from './Generator.ts';\nimport * as Store from './Store.ts';\nimport type * as ClientErrors from './ClientErrors.ts';\nimport * as ClientFormats from './ClientFormats.ts';\nimport * as SparqlClient from './SparqlClient.ts';\n\n/**\n * Client settings used for remote endpoints (everything but the endpoint\n * URLs).\n *\n * @since 0.1.0\n * @category models\n */\nexport type RemoteConfig = Omit<\n SparqlClient.Config,\n 'endpoint' | 'updateEndpoint' | 'graphStoreEndpoint'\n>;\n\n/**\n * The query sent to a remote endpoint for a `SERVICE` pattern:\n * `SELECT * WHERE { … }` with the prefixes of the original query.\n *\n * @since 0.1.0\n * @category federation\n */\nexport const serviceQuery = (service: Parameters<Engine.ServiceHandler>[1]): string => {\n const prologue = Record.toEntries(service.prefixes)\n .map(([prefix, iri]) => `PREFIX ${prefix}: <${iri}>\\n`)\n .join('');\n return `${prologue}SELECT * WHERE ${Generator.printPattern(service.pattern, service.prefixes)}`;\n};\n\nconst describeError = (e: ClientErrors.SparqlClientError): string =>\n Predicate.isTagged(e, 'HttpStatusError') ? e.message : `${e._tag}: ${e.message}`;\n\n/**\n * Builds a `SERVICE` handler that sends each remote pattern to its endpoint\n * with the `HttpClient` from the context. Clients are cached per endpoint.\n *\n * @since 0.1.0\n * @category federation\n */\nexport const serviceHandler = (\n config: RemoteConfig = {},\n): Effect.Effect<Engine.ServiceHandler, never, HttpClient.HttpClient> =>\n Effect.gen(function* () {\n const context = yield* Effect.context<HttpClient.HttpClient>();\n const clients = MutableHashMap.empty<string, SparqlClient.SparqlClientShape>();\n const clientFor = (endpoint: Term.NamedNode) =>\n Effect.suspend(() => {\n const cached = MutableHashMap.get(clients, endpoint.value);\n if (Option.isSome(cached)) return Effect.succeed(cached.value);\n return Effect.tap(\n Effect.provideContext(\n SparqlClient.make({ ...config, endpoint: endpoint.value }),\n context,\n ),\n (client) => Effect.sync(() => MutableHashMap.set(clients, endpoint.value, client)),\n );\n });\n return (endpoint, service) =>\n Stream.unwrap(\n Effect.map(clientFor(endpoint), (client) =>\n client.selectBindings(serviceQuery(service)).pipe(\n Stream.mapError(\n (e) =>\n new EvaluationError({\n message: `SERVICE <${endpoint.value}> failed: ${describeError(e)}`,\n cause: e,\n }),\n ),\n ),\n ),\n ).pipe(Stream.withSpan('Federation.service', { attributes: { endpoint: endpoint.value } }));\n });\n\nconst loadFailed = (iri: Term.NamedNode, message: string, cause?: unknown) =>\n new UpdateError({ message: `LOAD <${iri.value}> failed: ${message}`, cause });\n\n/**\n * Builds a `LOAD` handler that fetches documents over HTTP and parses them\n * with the `Serialization.Formats` service (or the default formats), by\n * media type or, failing that, by file extension.\n *\n * @since 0.1.0\n * @category federation\n */\nexport const loader = (\n config: Pick<RemoteConfig, 'headers' | 'timeout'> = {},\n): Effect.Effect<Engine.Loader, never, HttpClient.HttpClient> =>\n Effect.gen(function* () {\n const http = yield* HttpClient.HttpClient;\n const formats = Option.getOrElse(\n yield* Effect.serviceOption(Serialization.Formats),\n () => ClientFormats.defaults,\n );\n const accept = ClientFormats.acceptHeader(formats);\n return (iri: Term.NamedNode) =>\n Effect.gen(function* () {\n const request = HttpClientRequest.get(iri.value, {\n headers: { ...config.headers, accept },\n });\n const exchange = Effect.flatMap(http.execute(request), (response) =>\n Effect.map(response.text, (text) => ({ response, text })),\n );\n const { response, text } = yield* (\n config.timeout === undefined\n ? exchange\n : Effect.timeoutOrElse(exchange, {\n duration: config.timeout,\n orElse: () => Effect.fail(loadFailed(iri, 'timed out')),\n })\n ).pipe(\n Effect.mapError((e) =>\n Predicate.isTagged(e, 'UpdateError') ? e : loadFailed(iri, e.message, e),\n ),\n );\n if (response.status < 200 || response.status >= 300) {\n return yield* loadFailed(iri, `status ${response.status}`);\n }\n const mediaType = ((response.headers['content-type'] ?? '').split(';', 1)[0] ?? '').trim();\n const byType = Serialization.parserFor(formats, mediaType);\n const extension = new URL(iri.value).pathname.replace(/^.*\\./, '');\n const parser = Option.isSome(byType)\n ? byType\n : Serialization.parserForExtension(formats, extension);\n if (Option.isNone(parser)) {\n return yield* loadFailed(iri, `unsupported media type '${mediaType}'`);\n }\n const parsed = yield* parser.value\n .parse(text, { baseIri: iri.value })\n .pipe(Effect.mapError((e) => loadFailed(iri, Serialization.formatError(e), e)));\n return parsed.dataset;\n }).pipe(Effect.withSpan('Federation.load', { attributes: { iri: iri.value } }));\n });\n\n/**\n * A `SparqlEngine` layer whose `SERVICE` patterns are evaluated remotely and\n * whose `LOAD` fetches documents over HTTP.\n *\n * @since 0.1.0\n * @category layers\n */\nexport const layerEngine = (\n options: Engine.EngineOptions = {},\n config: RemoteConfig = {},\n): Layer.Layer<Engine.SparqlEngine, never, Store.QuadStore | HttpClient.HttpClient> =>\n Layer.effect(\n Engine.SparqlEngine,\n Effect.gen(function* () {\n const store = yield* Store.QuadStore;\n const service = yield* serviceHandler(config);\n const load = yield* loader(config);\n return Engine.make(store, {\n ...options,\n service: options.service ?? service,\n load: options.load ?? load,\n });\n }),\n );\n"],"mappings":"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"}
|