@thomasfosterau/effect-rdf 0.0.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +2250 -1
- package/dist/Algebra-CGG4oae3.mjs +433 -0
- package/dist/Algebra-CGG4oae3.mjs.map +1 -0
- package/dist/Algebra-uGsIEOUA.d.mts +446 -0
- package/dist/Ast-CPRZmBvk.mjs +552 -0
- package/dist/Ast-CPRZmBvk.mjs.map +1 -0
- package/dist/Ast-vcw2W-lf.d.mts +827 -0
- package/dist/Bindings-Ck3m7JRC.mjs +249 -0
- package/dist/Bindings-Ck3m7JRC.mjs.map +1 -0
- package/dist/Bindings-DiKpBd7f.d.mts +153 -0
- package/dist/ClientErrors-CpXdFX5u.mjs +128 -0
- package/dist/ClientErrors-CpXdFX5u.mjs.map +1 -0
- package/dist/ClientErrors-D4IZHUM-.d.mts +101 -0
- package/dist/ClientFormats-CXomkXLV.mjs +73 -0
- package/dist/ClientFormats-CXomkXLV.mjs.map +1 -0
- package/dist/ClientFormats-Dm57ZPwR.d.mts +36 -0
- package/dist/Csv2Json-DynEcwCh.mjs +194 -0
- package/dist/Csv2Json-DynEcwCh.mjs.map +1 -0
- package/dist/Csv2Json-aXNVDoXQ.d.mts +40 -0
- package/dist/Csv2Rdf-8maXP6mt.d.mts +41 -0
- package/dist/Csv2Rdf-DuSEkaKE.mjs +161 -0
- package/dist/Csv2Rdf-DuSEkaKE.mjs.map +1 -0
- package/dist/Dataset-BlmlcI7J.mjs +782 -0
- package/dist/Dataset-BlmlcI7J.mjs.map +1 -0
- package/dist/Dataset-DS3ESOcO.d.mts +426 -0
- package/dist/Dataset.d.mts +2 -0
- package/dist/Dataset.mjs +1 -0
- package/dist/Datatype-CxMpamHC.d.mts +212 -0
- package/dist/Datatype-DQvkNkiH.mjs +1001 -0
- package/dist/Datatype-DQvkNkiH.mjs.map +1 -0
- package/dist/Dialect-8ChFj5EX.d.mts +113 -0
- package/dist/Dialect-CzVH38uo.mjs +165 -0
- package/dist/Dialect-CzVH38uo.mjs.map +1 -0
- package/dist/DocumentLoader-D3lZREnB.mjs +346 -0
- package/dist/DocumentLoader-D3lZREnB.mjs.map +1 -0
- package/dist/DocumentLoader-ZUCEVrW5.d.mts +178 -0
- package/dist/DublinCore-AnwqxRx6.mjs +137 -0
- package/dist/DublinCore-AnwqxRx6.mjs.map +1 -0
- package/dist/DublinCore-Dq-tVA5d.d.mts +119 -0
- package/dist/Engine-CYPB3g4h.d.mts +144 -0
- package/dist/Engine-DF8PN7g-.mjs +872 -0
- package/dist/Engine-DF8PN7g-.mjs.map +1 -0
- package/dist/Errors-CMdV1RhU.mjs +37 -0
- package/dist/Errors-CMdV1RhU.mjs.map +1 -0
- package/dist/Errors-u2bDjUeM.d.mts +30 -0
- package/dist/Evaluator-DEsU4d1o.d.mts +50 -0
- package/dist/Evaluator-DOY2-guC.mjs +281 -0
- package/dist/Evaluator-DOY2-guC.mjs.map +1 -0
- package/dist/Exif-CpqniYQd.d.mts +78 -0
- package/dist/Exif-DjkCfEB-.mjs +89 -0
- package/dist/Exif-DjkCfEB-.mjs.map +1 -0
- package/dist/Expression-BIMMvduQ.mjs +230 -0
- package/dist/Expression-BIMMvduQ.mjs.map +1 -0
- package/dist/Expression-W8A9cyX7.d.mts +89 -0
- package/dist/Extract-Bop85jES.mjs +220 -0
- package/dist/Extract-Bop85jES.mjs.map +1 -0
- package/dist/Extract-C_pCvuTC.d.mts +88 -0
- package/dist/Federation-BcNrozc1.d.mts +52 -0
- package/dist/Federation-CHScBkaK.mjs +130 -0
- package/dist/Federation-CHScBkaK.mjs.map +1 -0
- package/dist/Functions-AvjNcId_.mjs +1346 -0
- package/dist/Functions-AvjNcId_.mjs.map +1 -0
- package/dist/Functions-OQJZP-F6.d.mts +111 -0
- package/dist/Generator-C52mmq01.d.mts +50 -0
- package/dist/Generator-D3utCJC7.mjs +205 -0
- package/dist/Generator-D3utCJC7.mjs.map +1 -0
- package/dist/Grammar-CPlSxGH6.mjs +200 -0
- package/dist/Grammar-CPlSxGH6.mjs.map +1 -0
- package/dist/Grammar-CRhnRoCu.d.mts +148 -0
- package/dist/Grammar-D6jZdJQ3.d.mts +169 -0
- package/dist/Grammar-mQ8CgE1M.mjs +258 -0
- package/dist/Grammar-mQ8CgE1M.mjs.map +1 -0
- package/dist/GraphStore-DhUa4nFO.d.mts +45 -0
- package/dist/GraphStore-DvbqwKy1.mjs +212 -0
- package/dist/GraphStore-DvbqwKy1.mjs.map +1 -0
- package/dist/Iri-BB8Ks-BF.d.mts +84 -0
- package/dist/Iri-Cr92gsQV.mjs +232 -0
- package/dist/Iri-Cr92gsQV.mjs.map +1 -0
- package/dist/Iri.d.mts +2 -0
- package/dist/Iri.mjs +1 -0
- package/dist/Isomorphism-B6qTY-xy.d.mts +28 -0
- package/dist/Isomorphism-BmqxhKyJ.mjs +232 -0
- package/dist/Isomorphism-BmqxhKyJ.mjs.map +1 -0
- package/dist/Isomorphism-DInKnWIy.mjs +390 -0
- package/dist/Isomorphism-DInKnWIy.mjs.map +1 -0
- package/dist/Isomorphism-DvSfZXLR.d.mts +37 -0
- package/dist/Isomorphism.d.mts +2 -0
- package/dist/Isomorphism.mjs +1 -0
- package/dist/JsonLd-DOwS2FHg.mjs +2836 -0
- package/dist/JsonLd-DOwS2FHg.mjs.map +1 -0
- package/dist/JsonLd-DobFrQNa.d.mts +242 -0
- package/dist/JsonLdError-C9J-BxfG.mjs +106 -0
- package/dist/JsonLdError-C9J-BxfG.mjs.map +1 -0
- package/dist/JsonLdError-DSOfHkOy.d.mts +43 -0
- package/dist/LanguageTag-BCu8rcmX.d.mts +38 -0
- package/dist/LanguageTag-BcOpMGZ4.mjs +89 -0
- package/dist/LanguageTag-BcOpMGZ4.mjs.map +1 -0
- package/dist/LanguageTag.d.mts +2 -0
- package/dist/LanguageTag.mjs +1 -0
- package/dist/Lexical-Cg0JHrf6.mjs +243 -0
- package/dist/Lexical-Cg0JHrf6.mjs.map +1 -0
- package/dist/Lexical-D3zySYVS.d.mts +163 -0
- package/dist/Manifest-B6xf6mUc.mjs +148 -0
- package/dist/Manifest-B6xf6mUc.mjs.map +1 -0
- package/dist/Manifest-DQUMRBFr.d.mts +98 -0
- package/dist/Mapping-BgG74x3U.d.mts +63 -0
- package/dist/Mapping-Dc1ZGirk.mjs +259 -0
- package/dist/Mapping-Dc1ZGirk.mjs.map +1 -0
- package/dist/Mcp-1DwTTKOK.mjs +48 -0
- package/dist/Mcp-1DwTTKOK.mjs.map +1 -0
- package/dist/Mcp-d-pX9erx.d.mts +25 -0
- package/dist/Message-CK_DGQuu.mjs +95 -0
- package/dist/Message-CK_DGQuu.mjs.map +1 -0
- package/dist/Message-fIvTJSXM.d.mts +49 -0
- package/dist/Metadata-BbffwGDZ.mjs +445 -0
- package/dist/Metadata-BbffwGDZ.mjs.map +1 -0
- package/dist/Metadata-CEt3yc1-.d.mts +901 -0
- package/dist/Metadata-D4HsQNXr.mjs +1273 -0
- package/dist/Metadata-D4HsQNXr.mjs.map +1 -0
- package/dist/Metadata-nzS7QKRj.d.mts +350 -0
- package/dist/Model-DaMmxurZ.d.mts +293 -0
- package/dist/Model-DlPzRYhF.mjs +528 -0
- package/dist/Model-DlPzRYhF.mjs.map +1 -0
- package/dist/N3-BzyV-KIH.mjs +974 -0
- package/dist/N3-BzyV-KIH.mjs.map +1 -0
- package/dist/N3-DSLnonDn.d.mts +100 -0
- package/dist/NQuads-C1VBOJ3-.mjs +117 -0
- package/dist/NQuads-C1VBOJ3-.mjs.map +1 -0
- package/dist/NQuads-FjFZikFg.d.mts +76 -0
- package/dist/NTriples-D-kLSEAf.mjs +120 -0
- package/dist/NTriples-D-kLSEAf.mjs.map +1 -0
- package/dist/NTriples-D34OspfW.d.mts +76 -0
- package/dist/Namespace-ClTUO_ya.d.mts +42 -0
- package/dist/Namespace-DHFIsORd.mjs +75 -0
- package/dist/Namespace-DHFIsORd.mjs.map +1 -0
- package/dist/Namespace.d.mts +2 -0
- package/dist/Namespace.mjs +1 -0
- package/dist/Namespaces-Bz85vpjW.mjs +235 -0
- package/dist/Namespaces-Bz85vpjW.mjs.map +1 -0
- package/dist/Namespaces-C1jW6EDo.d.mts +178 -0
- package/dist/Optimizer-BWWQRQPY.mjs +168 -0
- package/dist/Optimizer-BWWQRQPY.mjs.map +1 -0
- package/dist/Optimizer-DUpUow6k.d.mts +26 -0
- package/dist/Options-BLBGL4HE.mjs +72 -0
- package/dist/Options-BLBGL4HE.mjs.map +1 -0
- package/dist/Options-BommQwP9.d.mts +127 -0
- package/dist/Packet-CA76wVX3.mjs +197 -0
- package/dist/Packet-CA76wVX3.mjs.map +1 -0
- package/dist/Packet-Cy5g6XuW.d.mts +130 -0
- package/dist/Parser-p1Gyr0QN.d.mts +85 -0
- package/dist/Parser-xARsOWXk.mjs +1317 -0
- package/dist/Parser-xARsOWXk.mjs.map +1 -0
- package/dist/Path-B20Yp8KE.mjs +284 -0
- package/dist/Path-B20Yp8KE.mjs.map +1 -0
- package/dist/Path-DRB8e-Zn.d.mts +181 -0
- package/dist/Pdf-B9RZn--8.d.mts +77 -0
- package/dist/Pdf-CKK6dkZn.mjs +89 -0
- package/dist/Pdf-CKK6dkZn.mjs.map +1 -0
- package/dist/PdfA-CUjSuntT.d.mts +109 -0
- package/dist/PdfA-CleOhuL6.mjs +124 -0
- package/dist/PdfA-CleOhuL6.mjs.map +1 -0
- package/dist/Photoshop-CiHo80qV.mjs +233 -0
- package/dist/Photoshop-CiHo80qV.mjs.map +1 -0
- package/dist/Photoshop-udKZ0I3N.d.mts +204 -0
- package/dist/PrefixMap-BHFPDLO-.mjs +103 -0
- package/dist/PrefixMap-BHFPDLO-.mjs.map +1 -0
- package/dist/PrefixMap-BMlXrWNd.d.mts +64 -0
- package/dist/PrefixMap.d.mts +2 -0
- package/dist/PrefixMap.mjs +1 -0
- package/dist/Processor-CMmecFsb.mjs +198 -0
- package/dist/Processor-CMmecFsb.mjs.map +1 -0
- package/dist/Processor-FJPvO0CB.d.mts +435 -0
- package/dist/Protocol-BA7OkNgp.mjs +202 -0
- package/dist/Protocol-BA7OkNgp.mjs.map +1 -0
- package/dist/Protocol-DlSoiIKB.d.mts +108 -0
- package/dist/ProtocolErrors-Ckfejnl6.d.mts +84 -0
- package/dist/ProtocolErrors-czDPVcX5.mjs +129 -0
- package/dist/ProtocolErrors-czDPVcX5.mjs.map +1 -0
- package/dist/Query-D9A6LOpP.mjs +364 -0
- package/dist/Query-D9A6LOpP.mjs.map +1 -0
- package/dist/Query-KqSkTYyG.d.mts +96 -0
- package/dist/QueryBuilder-BLK9Vfbz.mjs +674 -0
- package/dist/QueryBuilder-BLK9Vfbz.mjs.map +1 -0
- package/dist/QueryBuilder-DUqh4ECe.d.mts +529 -0
- package/dist/RdfJs-D6-49XB5.mjs +86 -0
- package/dist/RdfJs-D6-49XB5.mjs.map +1 -0
- package/dist/RdfJs-DXFqdWrd.d.mts +76 -0
- package/dist/RdfJs.d.mts +2 -0
- package/dist/RdfJs.mjs +1 -0
- package/dist/RdfJson-5aKPDlPS.d.mts +297 -0
- package/dist/RdfJson-BNocgW4f.mjs +548 -0
- package/dist/RdfJson-BNocgW4f.mjs.map +1 -0
- package/dist/RdfXml-DJ9G4gOq.mjs +1014 -0
- package/dist/RdfXml-DJ9G4gOq.mjs.map +1 -0
- package/dist/RdfXml-_N7yxWEp.d.mts +149 -0
- package/dist/Rdfs-BRVPsAjc.d.mts +84 -0
- package/dist/Rdfs-CyY2wVHI.mjs +167 -0
- package/dist/Rdfs-CyY2wVHI.mjs.map +1 -0
- package/dist/Rdfs.d.mts +2 -0
- package/dist/Rdfs.mjs +1 -0
- package/dist/Reasoner-BxYhx9s7.d.mts +94 -0
- package/dist/Reasoner-Cw90zrjv.mjs +798 -0
- package/dist/Reasoner-Cw90zrjv.mjs.map +1 -0
- package/dist/Reification-BmN4EfnM.d.mts +40 -0
- package/dist/Reification-dpqQvjDE.mjs +82 -0
- package/dist/Reification-dpqQvjDE.mjs.map +1 -0
- package/dist/Reification.d.mts +2 -0
- package/dist/Reification.mjs +1 -0
- package/dist/Report-XHs8htzK.mjs +121 -0
- package/dist/Report-XHs8htzK.mjs.map +1 -0
- package/dist/Report-hcXsc_19.d.mts +115 -0
- package/dist/Resource-B1cI8FyJ.d.mts +218 -0
- package/dist/Resource-sIEeNh15.mjs +374 -0
- package/dist/Resource-sIEeNh15.mjs.map +1 -0
- package/dist/Resource.d.mts +2 -0
- package/dist/Resource.mjs +1 -0
- package/dist/Results-BVNEC-Wt.d.mts +277 -0
- package/dist/Results-peJjGA2V.mjs +621 -0
- package/dist/Results-peJjGA2V.mjs.map +1 -0
- package/dist/ResultsStream-BhF0OcNn.mjs +639 -0
- package/dist/ResultsStream-BhF0OcNn.mjs.map +1 -0
- package/dist/ResultsStream-toYMXrOe.d.mts +100 -0
- package/dist/SemAct-CDchtk49.d.mts +96 -0
- package/dist/SemAct-CmyT4yI8.mjs +118 -0
- package/dist/SemAct-CmyT4yI8.mjs.map +1 -0
- package/dist/Serialization-DP9H5bYQ.mjs +514 -0
- package/dist/Serialization-DP9H5bYQ.mjs.map +1 -0
- package/dist/Serialization-Df8iVauT.d.mts +392 -0
- package/dist/Serialization.d.mts +2 -0
- package/dist/Serialization.mjs +1 -0
- package/dist/ServerFormats-CrRnjjf6.mjs +64 -0
- package/dist/ServerFormats-CrRnjjf6.mjs.map +1 -0
- package/dist/ServerFormats-DjC9NsO_.d.mts +36 -0
- package/dist/ServiceDescription-BERsvg-k.d.mts +54 -0
- package/dist/ServiceDescription-Dq5hxeGy.mjs +97 -0
- package/dist/ServiceDescription-Dq5hxeGy.mjs.map +1 -0
- package/dist/ShExC-Ctf-06CL.d.mts +67 -0
- package/dist/ShExC-DJbB19i3.mjs +1181 -0
- package/dist/ShExC-DJbB19i3.mjs.map +1 -0
- package/dist/ShExError-BeYFD9rv.d.mts +61 -0
- package/dist/ShExError-CVtq2NnM.mjs +64 -0
- package/dist/ShExError-CVtq2NnM.mjs.map +1 -0
- package/dist/ShExJ-C1u_wgyD.d.mts +531 -0
- package/dist/ShExJ-COiPd9Xw.mjs +532 -0
- package/dist/ShExJ-COiPd9Xw.mjs.map +1 -0
- package/dist/ShExR-ByR4mCh-.mjs +480 -0
- package/dist/ShExR-ByR4mCh-.mjs.map +1 -0
- package/dist/ShExR-CqONNNBz.d.mts +40 -0
- package/dist/ShapeMap-C422pxKl.d.mts +140 -0
- package/dist/ShapeMap-CsgKxB2G.mjs +181 -0
- package/dist/ShapeMap-CsgKxB2G.mjs.map +1 -0
- package/dist/Shapes-18GjfyBV.mjs +597 -0
- package/dist/Shapes-18GjfyBV.mjs.map +1 -0
- package/dist/Shapes-BQFDFc4Q.d.mts +306 -0
- package/dist/Sparql-BiYFMSpl.mjs +29 -0
- package/dist/Sparql-BiYFMSpl.mjs.map +1 -0
- package/dist/Sparql-DecpWTPh.d.mts +97 -0
- package/dist/SparqlClient-C_CjXbwj.mjs +333 -0
- package/dist/SparqlClient-C_CjXbwj.mjs.map +1 -0
- package/dist/SparqlClient-UPc88SHy.d.mts +290 -0
- package/dist/SparqlServer-CbUW-pVj.d.mts +71 -0
- package/dist/SparqlServer-Db7w7Cll.mjs +308 -0
- package/dist/SparqlServer-Db7w7Cll.mjs.map +1 -0
- package/dist/SqlStore-BBqFx-Wl.mjs +684 -0
- package/dist/SqlStore-BBqFx-Wl.mjs.map +1 -0
- package/dist/SqlStore-CCJo5I-e.d.mts +117 -0
- package/dist/Store-D0jmVfb3.d.mts +166 -0
- package/dist/Store-DH3Ow1GO.mjs +162 -0
- package/dist/Store-DH3Ow1GO.mjs.map +1 -0
- package/dist/Structure-BjMo4Bkc.mjs +334 -0
- package/dist/Structure-BjMo4Bkc.mjs.map +1 -0
- package/dist/Structure-n4CmDiab.d.mts +63 -0
- package/dist/Table-BGgm9nbM.mjs +538 -0
- package/dist/Table-BGgm9nbM.mjs.map +1 -0
- package/dist/Table-C3reiVrb.d.mts +261 -0
- package/dist/Term-B_4ezyXq.d.mts +619 -0
- package/dist/Term-CFLG1qu4.mjs +991 -0
- package/dist/Term-CFLG1qu4.mjs.map +1 -0
- package/dist/Term.d.mts +2 -0
- package/dist/Term.mjs +1 -0
- package/dist/TermCodec-CDZiEztW.mjs +397 -0
- package/dist/TermCodec-CDZiEztW.mjs.map +1 -0
- package/dist/TermCodec-_03bDXr0.d.mts +209 -0
- package/dist/TermCodec.d.mts +2 -0
- package/dist/TermCodec.mjs +1 -0
- package/dist/TermJson-BOPe0yve.d.mts +232 -0
- package/dist/TermJson-FAg3lvjl.mjs +142 -0
- package/dist/TermJson-FAg3lvjl.mjs.map +1 -0
- package/dist/TermJson.d.mts +2 -0
- package/dist/TermJson.mjs +1 -0
- package/dist/TermSchema-Bn9CoaYA.mjs +30 -0
- package/dist/TermSchema-Bn9CoaYA.mjs.map +1 -0
- package/dist/TermSchema-DBO6MroX.d.mts +6 -0
- package/dist/Testing-B-aPCpmu.mjs +63 -0
- package/dist/Testing-B-aPCpmu.mjs.map +1 -0
- package/dist/Testing-CF6s8P3O.d.mts +53 -0
- package/dist/Tiff-CR-2QeSI.d.mts +148 -0
- package/dist/Tiff-DlsOlZPM.mjs +169 -0
- package/dist/Tiff-DlsOlZPM.mjs.map +1 -0
- package/dist/Tools-7MdRKccr.d.mts +583 -0
- package/dist/Tools-ryxphZbI.mjs +329 -0
- package/dist/Tools-ryxphZbI.mjs.map +1 -0
- package/dist/Translate-B0YKKANS.d.mts +37 -0
- package/dist/Translate-gzWPq0Ia.mjs +308 -0
- package/dist/Translate-gzWPq0Ia.mjs.map +1 -0
- package/dist/Translation-DC9rLm2y.mjs +1535 -0
- package/dist/Translation-DC9rLm2y.mjs.map +1 -0
- package/dist/Translation-K4L9XBqX.d.mts +103 -0
- package/dist/TriG-BkqtqZ6Y.mjs +125 -0
- package/dist/TriG-BkqtqZ6Y.mjs.map +1 -0
- package/dist/TriG-xDjdDatp.d.mts +86 -0
- package/dist/Turtle-Bv1_bisW.d.mts +85 -0
- package/dist/Turtle-CZVUOtwl.mjs +133 -0
- package/dist/Turtle-CZVUOtwl.mjs.map +1 -0
- package/dist/ValidationReport-DBdJshW5.mjs +285 -0
- package/dist/ValidationReport-DBdJshW5.mjs.map +1 -0
- package/dist/ValidationReport-Dx3WxY0h.d.mts +192 -0
- package/dist/Validator-227ff9Rn.d.mts +179 -0
- package/dist/Validator-BzXMKDeJ.mjs +1162 -0
- package/dist/Validator-BzXMKDeJ.mjs.map +1 -0
- package/dist/Validator-Dl8cih5V.d.mts +207 -0
- package/dist/Validator-DmUfMbpL.mjs +568 -0
- package/dist/Validator-DmUfMbpL.mjs.map +1 -0
- package/dist/Vocab-DceKywpq.mjs +168 -0
- package/dist/Vocab-DceKywpq.mjs.map +1 -0
- package/dist/Vocab-Df-L-IwZ.d.mts +46 -0
- package/dist/Vocab-Do56UgBX.d.mts +81 -0
- package/dist/Vocab-TfpWG1Ne.mjs +118 -0
- package/dist/Vocab-TfpWG1Ne.mjs.map +1 -0
- package/dist/Vocab.d.mts +2 -0
- package/dist/Vocab.mjs +1 -0
- package/dist/Vocabulary-C6-GPOy4.d.mts +22 -0
- package/dist/Vocabulary-CnQl-_Z4.mjs +179 -0
- package/dist/Vocabulary-CnQl-_Z4.mjs.map +1 -0
- package/dist/Xml-B7iihYCS.mjs +976 -0
- package/dist/Xml-B7iihYCS.mjs.map +1 -0
- package/dist/Xml-CmfHS7SW.d.mts +267 -0
- package/dist/Xmp-D7CKA7MZ.d.mts +111 -0
- package/dist/Xmp-DCGN9pOD.mjs +307 -0
- package/dist/Xmp-DCGN9pOD.mjs.map +1 -0
- package/dist/XmpBasic-CP38jpR_.mjs +73 -0
- package/dist/XmpBasic-CP38jpR_.mjs.map +1 -0
- package/dist/XmpBasic-Cmbe53rQ.d.mts +64 -0
- package/dist/XmpMM-BfL_TgJF.mjs +73 -0
- package/dist/XmpMM-BfL_TgJF.mjs.map +1 -0
- package/dist/XmpMM-Dqm3IX8p.d.mts +63 -0
- package/dist/XmpRights-BKPtoI5L.mjs +73 -0
- package/dist/XmpRights-BKPtoI5L.mjs.map +1 -0
- package/dist/XmpRights-CaALZQz2.d.mts +63 -0
- package/dist/Xsd-Cdgx5zRB.mjs +405 -0
- package/dist/Xsd-Cdgx5zRB.mjs.map +1 -0
- package/dist/Xsd-D2elNhSm.d.mts +187 -0
- package/dist/Xsd.d.mts +2 -0
- package/dist/Xsd.mjs +1 -0
- package/dist/accessors-CEjaojuQ.mjs +28 -0
- package/dist/accessors-CEjaojuQ.mjs.map +1 -0
- package/dist/codec-Lb2T96rv.d.mts +20 -0
- package/dist/codec-QNo7IdJF.mjs +389 -0
- package/dist/codec-QNo7IdJF.mjs.map +1 -0
- package/dist/csvw/Csv2Json.d.mts +2 -0
- package/dist/csvw/Csv2Json.mjs +1 -0
- package/dist/csvw/Csv2Rdf.d.mts +2 -0
- package/dist/csvw/Csv2Rdf.mjs +1 -0
- package/dist/csvw/Datatype.d.mts +2 -0
- package/dist/csvw/Datatype.mjs +1 -0
- package/dist/csvw/Metadata.d.mts +2 -0
- package/dist/csvw/Metadata.mjs +1 -0
- package/dist/csvw/Processor.d.mts +2 -0
- package/dist/csvw/Processor.mjs +1 -0
- package/dist/csvw/Report.d.mts +2 -0
- package/dist/csvw/Report.mjs +1 -0
- package/dist/csvw/Table.d.mts +2 -0
- package/dist/csvw/Table.mjs +1 -0
- package/dist/csvw/index.d.mts +8 -0
- package/dist/csvw/index.mjs +8 -0
- package/dist/index-Cms2TYfC.d.mts +16 -0
- package/dist/index-Ct8xFmRs.d.mts +7 -0
- package/dist/index-D4QFwOjm.d.mts +28 -0
- package/dist/index.d.mts +18 -0
- package/dist/index.mjs +17 -0
- package/dist/jsonld/DocumentLoader.d.mts +2 -0
- package/dist/jsonld/DocumentLoader.mjs +1 -0
- package/dist/jsonld/JsonLd.d.mts +2 -0
- package/dist/jsonld/JsonLd.mjs +1 -0
- package/dist/jsonld/JsonLdError.d.mts +2 -0
- package/dist/jsonld/JsonLdError.mjs +1 -0
- package/dist/jsonld/index.d.mts +4 -0
- package/dist/jsonld/index.mjs +4 -0
- package/dist/lists-D-OpQ0Ir.mjs +77 -0
- package/dist/lists-D-OpQ0Ir.mjs.map +1 -0
- package/dist/loop-D5-gNx9K.mjs +21 -0
- package/dist/loop-D5-gNx9K.mjs.map +1 -0
- package/dist/loop-DZ2hXlr_.mjs +21 -0
- package/dist/loop-DZ2hXlr_.mjs.map +1 -0
- package/dist/n3/Isomorphism.d.mts +2 -0
- package/dist/n3/Isomorphism.mjs +1 -0
- package/dist/n3/Mapping.d.mts +2 -0
- package/dist/n3/Mapping.mjs +1 -0
- package/dist/n3/Model.d.mts +2 -0
- package/dist/n3/Model.mjs +1 -0
- package/dist/n3/N3.d.mts +2 -0
- package/dist/n3/N3.mjs +1 -0
- package/dist/n3/Reasoner.d.mts +2 -0
- package/dist/n3/Reasoner.mjs +2 -0
- package/dist/n3/Vocab.d.mts +2 -0
- package/dist/n3/Vocab.mjs +1 -0
- package/dist/n3/index.d.mts +7 -0
- package/dist/n3/index.mjs +7 -0
- package/dist/ntriples/Grammar.d.mts +2 -0
- package/dist/ntriples/Grammar.mjs +1 -0
- package/dist/ntriples/Lexical.d.mts +2 -0
- package/dist/ntriples/Lexical.mjs +1 -0
- package/dist/ntriples/NQuads.d.mts +2 -0
- package/dist/ntriples/NQuads.mjs +1 -0
- package/dist/ntriples/NTriples.d.mts +2 -0
- package/dist/ntriples/NTriples.mjs +1 -0
- package/dist/ntriples/index.d.mts +5 -0
- package/dist/ntriples/index.mjs +5 -0
- package/dist/rdfjson/RdfJson.d.mts +2 -0
- package/dist/rdfjson/RdfJson.mjs +1 -0
- package/dist/rdfjson/index.d.mts +2 -0
- package/dist/rdfjson/index.mjs +1 -0
- package/dist/rdfxml/RdfXml.d.mts +2 -0
- package/dist/rdfxml/RdfXml.mjs +1 -0
- package/dist/rdfxml/Xml.d.mts +2 -0
- package/dist/rdfxml/Xml.mjs +1 -0
- package/dist/rdfxml/index.d.mts +3 -0
- package/dist/rdfxml/index.mjs +3 -0
- package/dist/rolldown-runtime-D8jQpDG7.mjs +12 -0
- package/dist/serialize-96KBvKaf.mjs +1463 -0
- package/dist/serialize-96KBvKaf.mjs.map +1 -0
- package/dist/serialize-DsoXdM6n.d.mts +37 -0
- package/dist/shacl/Message.d.mts +2 -0
- package/dist/shacl/Message.mjs +1 -0
- package/dist/shacl/Path.d.mts +2 -0
- package/dist/shacl/Path.mjs +1 -0
- package/dist/shacl/Shapes.d.mts +2 -0
- package/dist/shacl/Shapes.mjs +1 -0
- package/dist/shacl/Sparql.d.mts +2 -0
- package/dist/shacl/Sparql.mjs +1 -0
- package/dist/shacl/ValidationReport.d.mts +2 -0
- package/dist/shacl/ValidationReport.mjs +1 -0
- package/dist/shacl/Validator.d.mts +2 -0
- package/dist/shacl/Validator.mjs +1 -0
- package/dist/shacl/Vocabulary.d.mts +2 -0
- package/dist/shacl/Vocabulary.mjs +1 -0
- package/dist/shacl/index.d.mts +9 -0
- package/dist/shacl/index.mjs +8 -0
- package/dist/shex/SemAct.d.mts +2 -0
- package/dist/shex/SemAct.mjs +1 -0
- package/dist/shex/ShExC.d.mts +2 -0
- package/dist/shex/ShExC.mjs +1 -0
- package/dist/shex/ShExError.d.mts +2 -0
- package/dist/shex/ShExError.mjs +1 -0
- package/dist/shex/ShExJ.d.mts +2 -0
- package/dist/shex/ShExJ.mjs +2 -0
- package/dist/shex/ShExR.d.mts +2 -0
- package/dist/shex/ShExR.mjs +1 -0
- package/dist/shex/ShapeMap.d.mts +2 -0
- package/dist/shex/ShapeMap.mjs +1 -0
- package/dist/shex/Structure.d.mts +2 -0
- package/dist/shex/Structure.mjs +2 -0
- package/dist/shex/Validator.d.mts +2 -0
- package/dist/shex/Validator.mjs +4 -0
- package/dist/shex/index.d.mts +9 -0
- package/dist/shex/index.mjs +9 -0
- package/dist/sparql/Algebra.d.mts +2 -0
- package/dist/sparql/Algebra.mjs +1 -0
- package/dist/sparql/Ast.d.mts +2 -0
- package/dist/sparql/Ast.mjs +1 -0
- package/dist/sparql/Bindings.d.mts +2 -0
- package/dist/sparql/Bindings.mjs +1 -0
- package/dist/sparql/ClientErrors.d.mts +2 -0
- package/dist/sparql/ClientErrors.mjs +1 -0
- package/dist/sparql/ClientFormats.d.mts +2 -0
- package/dist/sparql/ClientFormats.mjs +1 -0
- package/dist/sparql/Engine.d.mts +2 -0
- package/dist/sparql/Engine.mjs +1 -0
- package/dist/sparql/Errors.d.mts +2 -0
- package/dist/sparql/Errors.mjs +1 -0
- package/dist/sparql/Expression.d.mts +2 -0
- package/dist/sparql/Expression.mjs +1 -0
- package/dist/sparql/Federation.d.mts +2 -0
- package/dist/sparql/Federation.mjs +1 -0
- package/dist/sparql/Functions.d.mts +2 -0
- package/dist/sparql/Functions.mjs +1 -0
- package/dist/sparql/Generator.d.mts +2 -0
- package/dist/sparql/Generator.mjs +1 -0
- package/dist/sparql/GraphStore.d.mts +2 -0
- package/dist/sparql/GraphStore.mjs +1 -0
- package/dist/sparql/Optimizer.d.mts +2 -0
- package/dist/sparql/Optimizer.mjs +1 -0
- package/dist/sparql/Options.d.mts +2 -0
- package/dist/sparql/Options.mjs +1 -0
- package/dist/sparql/Parser.d.mts +2 -0
- package/dist/sparql/Parser.mjs +1 -0
- package/dist/sparql/Protocol.d.mts +2 -0
- package/dist/sparql/Protocol.mjs +1 -0
- package/dist/sparql/ProtocolErrors.d.mts +2 -0
- package/dist/sparql/ProtocolErrors.mjs +1 -0
- package/dist/sparql/QueryBuilder.d.mts +2 -0
- package/dist/sparql/QueryBuilder.mjs +1 -0
- package/dist/sparql/Results.d.mts +2 -0
- package/dist/sparql/Results.mjs +1 -0
- package/dist/sparql/ResultsStream.d.mts +2 -0
- package/dist/sparql/ResultsStream.mjs +1 -0
- package/dist/sparql/ServerFormats.d.mts +2 -0
- package/dist/sparql/ServerFormats.mjs +1 -0
- package/dist/sparql/ServiceDescription.d.mts +2 -0
- package/dist/sparql/ServiceDescription.mjs +1 -0
- package/dist/sparql/SparqlClient.d.mts +2 -0
- package/dist/sparql/SparqlClient.mjs +1 -0
- package/dist/sparql/SparqlServer.d.mts +2 -0
- package/dist/sparql/SparqlServer.mjs +1 -0
- package/dist/sparql/Store.d.mts +2 -0
- package/dist/sparql/Store.mjs +1 -0
- package/dist/sparql/TermSchema.d.mts +3 -0
- package/dist/sparql/TermSchema.mjs +2 -0
- package/dist/sparql/Testing.d.mts +2 -0
- package/dist/sparql/Testing.mjs +1 -0
- package/dist/sparql/Translate.d.mts +2 -0
- package/dist/sparql/Translate.mjs +1 -0
- package/dist/sparql/ai/Mcp.d.mts +2 -0
- package/dist/sparql/ai/Mcp.mjs +1 -0
- package/dist/sparql/ai/Tools.d.mts +2 -0
- package/dist/sparql/ai/Tools.mjs +1 -0
- package/dist/sparql/ai/index.d.mts +3 -0
- package/dist/sparql/ai/index.mjs +3 -0
- package/dist/sparql/index.d.mts +30 -0
- package/dist/sparql/index.mjs +29 -0
- package/dist/sparql/shacl/Evaluator.d.mts +2 -0
- package/dist/sparql/shacl/Evaluator.mjs +1 -0
- package/dist/sparql/shacl/Query.d.mts +2 -0
- package/dist/sparql/shacl/Query.mjs +1 -0
- package/dist/sparql/shacl/index.d.mts +3 -0
- package/dist/sparql/shacl/index.mjs +3 -0
- package/dist/sparql/sql/Dialect.d.mts +2 -0
- package/dist/sparql/sql/Dialect.mjs +1 -0
- package/dist/sparql/sql/SqlStore.d.mts +2 -0
- package/dist/sparql/sql/SqlStore.mjs +1 -0
- package/dist/sparql/sql/Translation.d.mts +2 -0
- package/dist/sparql/sql/Translation.mjs +1 -0
- package/dist/sparql/sql/index.d.mts +4 -0
- package/dist/sparql/sql/index.mjs +4 -0
- package/dist/stringMap-D5YIpYtR.mjs +38 -0
- package/dist/stringMap-D5YIpYtR.mjs.map +1 -0
- package/dist/tokens-C6BzeodQ.mjs +24 -0
- package/dist/tokens-C6BzeodQ.mjs.map +1 -0
- package/dist/turtle/Grammar.d.mts +3 -0
- package/dist/turtle/Grammar.mjs +3 -0
- package/dist/turtle/Manifest.d.mts +2 -0
- package/dist/turtle/Manifest.mjs +1 -0
- package/dist/turtle/TriG.d.mts +2 -0
- package/dist/turtle/TriG.mjs +1 -0
- package/dist/turtle/Turtle.d.mts +2 -0
- package/dist/turtle/Turtle.mjs +1 -0
- package/dist/turtle/index.d.mts +5 -0
- package/dist/turtle/index.mjs +5 -0
- package/dist/xmp/DublinCore.d.mts +2 -0
- package/dist/xmp/DublinCore.mjs +1 -0
- package/dist/xmp/Exif.d.mts +2 -0
- package/dist/xmp/Exif.mjs +1 -0
- package/dist/xmp/Extract.d.mts +2 -0
- package/dist/xmp/Extract.mjs +1 -0
- package/dist/xmp/Metadata.d.mts +2 -0
- package/dist/xmp/Metadata.mjs +1 -0
- package/dist/xmp/Namespaces.d.mts +2 -0
- package/dist/xmp/Namespaces.mjs +1 -0
- package/dist/xmp/Packet.d.mts +2 -0
- package/dist/xmp/Packet.mjs +1 -0
- package/dist/xmp/Pdf.d.mts +2 -0
- package/dist/xmp/Pdf.mjs +1 -0
- package/dist/xmp/PdfA.d.mts +2 -0
- package/dist/xmp/PdfA.mjs +1 -0
- package/dist/xmp/Photoshop.d.mts +2 -0
- package/dist/xmp/Photoshop.mjs +1 -0
- package/dist/xmp/Tiff.d.mts +2 -0
- package/dist/xmp/Tiff.mjs +1 -0
- package/dist/xmp/Xmp.d.mts +2 -0
- package/dist/xmp/Xmp.mjs +3 -0
- package/dist/xmp/XmpBasic.d.mts +2 -0
- package/dist/xmp/XmpBasic.mjs +1 -0
- package/dist/xmp/XmpMM.d.mts +2 -0
- package/dist/xmp/XmpMM.mjs +1 -0
- package/dist/xmp/XmpRights.d.mts +2 -0
- package/dist/xmp/XmpRights.mjs +1 -0
- package/dist/xmp/index.d.mts +15 -0
- package/dist/xmp/index.mjs +15 -0
- package/package.json +187 -3
- package/src/Dataset.ts +1085 -0
- package/src/Iri.ts +322 -0
- package/src/Isomorphism.ts +319 -0
- package/src/LanguageTag.ts +98 -0
- package/src/Namespace.ts +100 -0
- package/src/PrefixMap.ts +117 -0
- package/src/RdfJs.ts +146 -0
- package/src/Rdfs.ts +241 -0
- package/src/Reification.ts +103 -0
- package/src/Resource.ts +873 -0
- package/src/Serialization.ts +775 -0
- package/src/Term.ts +1300 -0
- package/src/TermCodec.ts +505 -0
- package/src/TermJson.ts +313 -0
- package/src/Vocab.ts +161 -0
- package/src/Xsd.ts +573 -0
- package/src/csvw/Csv2Json.ts +265 -0
- package/src/csvw/Csv2Rdf.ts +268 -0
- package/src/csvw/Datatype.ts +589 -0
- package/src/csvw/Metadata.ts +1523 -0
- package/src/csvw/Processor.ts +276 -0
- package/src/csvw/Report.ts +135 -0
- package/src/csvw/Table.ts +759 -0
- package/src/csvw/index.ts +22 -0
- package/src/csvw/internal/dateFormat.ts +202 -0
- package/src/csvw/internal/json.ts +104 -0
- package/src/csvw/internal/numberFormat.ts +369 -0
- package/src/csvw/internal/object.ts +23 -0
- package/src/csvw/internal/uriTemplate.ts +130 -0
- package/src/csvw/internal/url.ts +93 -0
- package/src/csvw/internal/vocab.ts +282 -0
- package/src/index.ts +40 -0
- package/src/internal/arbitrary.ts +148 -0
- package/src/internal/loop.ts +24 -0
- package/src/internal/pending.ts +20 -0
- package/src/internal/textDecoder.ts +183 -0
- package/src/jsonld/DocumentLoader.ts +512 -0
- package/src/jsonld/JsonLd.ts +847 -0
- package/src/jsonld/JsonLdError.ts +105 -0
- package/src/jsonld/index.ts +13 -0
- package/src/jsonld/internal/compact.ts +852 -0
- package/src/jsonld/internal/context.ts +781 -0
- package/src/jsonld/internal/expand.ts +614 -0
- package/src/jsonld/internal/flatten.ts +243 -0
- package/src/jsonld/internal/frame.ts +559 -0
- package/src/jsonld/internal/iri.ts +52 -0
- package/src/jsonld/internal/json.ts +19 -0
- package/src/jsonld/internal/linkHeader.ts +60 -0
- package/src/jsonld/internal/rdf.ts +481 -0
- package/src/jsonld/internal/util.ts +367 -0
- package/src/n3/Isomorphism.ts +476 -0
- package/src/n3/Mapping.ts +332 -0
- package/src/n3/Model.ts +696 -0
- package/src/n3/N3.ts +237 -0
- package/src/n3/Reasoner.ts +568 -0
- package/src/n3/Vocab.ts +111 -0
- package/src/n3/index.ts +21 -0
- package/src/n3/internal/builtins.ts +668 -0
- package/src/n3/internal/guards.ts +23 -0
- package/src/n3/internal/lists.ts +106 -0
- package/src/n3/internal/loop.ts +28 -0
- package/src/n3/internal/parser.ts +1032 -0
- package/src/n3/internal/writer.ts +344 -0
- package/src/ntriples/Grammar.ts +317 -0
- package/src/ntriples/Lexical.ts +321 -0
- package/src/ntriples/NQuads.ts +140 -0
- package/src/ntriples/NTriples.ts +143 -0
- package/src/ntriples/index.ts +14 -0
- package/src/ntriples/internal/codec.ts +229 -0
- package/src/ntriples/internal/lineParser.ts +326 -0
- package/src/ntriples/internal/loop.ts +14 -0
- package/src/rdfjson/RdfJson.ts +806 -0
- package/src/rdfjson/index.ts +9 -0
- package/src/rdfjson/internal/json.ts +19 -0
- package/src/rdfxml/RdfXml.ts +1408 -0
- package/src/rdfxml/Xml.ts +419 -0
- package/src/rdfxml/index.ts +11 -0
- package/src/rdfxml/internal/chars.ts +73 -0
- package/src/rdfxml/internal/loop.ts +24 -0
- package/src/rdfxml/internal/parser.ts +1265 -0
- package/src/shacl/Message.ts +102 -0
- package/src/shacl/Path.ts +483 -0
- package/src/shacl/Shapes.ts +913 -0
- package/src/shacl/Sparql.ts +128 -0
- package/src/shacl/ValidationReport.ts +438 -0
- package/src/shacl/Validator.ts +1156 -0
- package/src/shacl/Vocabulary.ts +180 -0
- package/src/shacl/index.ts +22 -0
- package/src/shacl/internal/compare.ts +128 -0
- package/src/shacl/internal/regex.ts +56 -0
- package/src/shex/SemAct.ts +197 -0
- package/src/shex/ShExC.ts +415 -0
- package/src/shex/ShExError.ts +71 -0
- package/src/shex/ShExJ.ts +893 -0
- package/src/shex/ShExR.ts +640 -0
- package/src/shex/ShapeMap.ts +385 -0
- package/src/shex/Structure.ts +467 -0
- package/src/shex/Validator.ts +395 -0
- package/src/shex/index.ts +24 -0
- package/src/shex/internal/engine.ts +682 -0
- package/src/shex/internal/iterate.ts +14 -0
- package/src/shex/internal/json.ts +12 -0
- package/src/shex/internal/lexer.ts +56 -0
- package/src/shex/internal/nodeConstraint.ts +368 -0
- package/src/shex/internal/shexcLexer.ts +387 -0
- package/src/shex/internal/shexcParser.ts +1312 -0
- package/src/shex/internal/tokens.ts +41 -0
- package/src/shex/internal/xpathRegex.ts +290 -0
- package/src/sparql/Algebra.ts +914 -0
- package/src/sparql/Ast.ts +1344 -0
- package/src/sparql/Bindings.ts +272 -0
- package/src/sparql/ClientErrors.ts +156 -0
- package/src/sparql/ClientFormats.ts +70 -0
- package/src/sparql/Engine.ts +699 -0
- package/src/sparql/Errors.ts +30 -0
- package/src/sparql/Expression.ts +360 -0
- package/src/sparql/Federation.ts +187 -0
- package/src/sparql/Functions.ts +689 -0
- package/src/sparql/Generator.ts +426 -0
- package/src/sparql/GraphStore.ts +341 -0
- package/src/sparql/Optimizer.ts +230 -0
- package/src/sparql/Options.ts +191 -0
- package/src/sparql/Parser.ts +173 -0
- package/src/sparql/Protocol.ts +342 -0
- package/src/sparql/ProtocolErrors.ts +113 -0
- package/src/sparql/QueryBuilder.ts +953 -0
- package/src/sparql/Results.ts +844 -0
- package/src/sparql/ResultsStream.ts +771 -0
- package/src/sparql/ServerFormats.ts +75 -0
- package/src/sparql/ServiceDescription.ts +130 -0
- package/src/sparql/SparqlClient.ts +947 -0
- package/src/sparql/SparqlServer.ts +528 -0
- package/src/sparql/Store.ts +311 -0
- package/src/sparql/TermSchema.ts +20 -0
- package/src/sparql/Testing.ts +114 -0
- package/src/sparql/Translate.ts +407 -0
- package/src/sparql/ai/Mcp.ts +43 -0
- package/src/sparql/ai/Tools.ts +481 -0
- package/src/sparql/ai/index.ts +11 -0
- package/src/sparql/index.ts +64 -0
- package/src/sparql/internal/evaluator.ts +947 -0
- package/src/sparql/internal/hash.ts +418 -0
- package/src/sparql/internal/json.ts +12 -0
- package/src/sparql/internal/lexer.ts +488 -0
- package/src/sparql/internal/loop.ts +24 -0
- package/src/sparql/internal/parser.ts +2215 -0
- package/src/sparql/internal/prefetch.ts +46 -0
- package/src/sparql/internal/stringMap.ts +39 -0
- package/src/sparql/internal/textResults.ts +226 -0
- package/src/sparql/internal/values.ts +550 -0
- package/src/sparql/shacl/Evaluator.ts +478 -0
- package/src/sparql/shacl/Query.ts +574 -0
- package/src/sparql/shacl/index.ts +12 -0
- package/src/sparql/sql/Dialect.ts +246 -0
- package/src/sparql/sql/SqlStore.ts +1080 -0
- package/src/sparql/sql/Translation.ts +1898 -0
- package/src/sparql/sql/index.ts +17 -0
- package/src/sparql/sql/internal/encoding.ts +313 -0
- package/src/turtle/Grammar.ts +286 -0
- package/src/turtle/Manifest.ts +215 -0
- package/src/turtle/TriG.ts +158 -0
- package/src/turtle/Turtle.ts +166 -0
- package/src/turtle/index.ts +14 -0
- package/src/turtle/internal/loop.ts +23 -0
- package/src/turtle/internal/parse.ts +112 -0
- package/src/turtle/internal/parser.ts +1303 -0
- package/src/turtle/internal/serialize.ts +79 -0
- package/src/turtle/internal/streamWriter.ts +128 -0
- package/src/turtle/internal/writer.ts +898 -0
- package/src/xmp/DublinCore.ts +147 -0
- package/src/xmp/Exif.ts +109 -0
- package/src/xmp/Extract.ts +351 -0
- package/src/xmp/Metadata.ts +703 -0
- package/src/xmp/Namespaces.ts +228 -0
- package/src/xmp/Packet.ts +297 -0
- package/src/xmp/Pdf.ts +99 -0
- package/src/xmp/PdfA.ts +280 -0
- package/src/xmp/Photoshop.ts +275 -0
- package/src/xmp/Tiff.ts +196 -0
- package/src/xmp/Xmp.ts +430 -0
- package/src/xmp/XmpBasic.ts +90 -0
- package/src/xmp/XmpMM.ts +82 -0
- package/src/xmp/XmpRights.ts +83 -0
- package/src/xmp/index.ts +36 -0
- package/src/xmp/internal/accessors.ts +72 -0
- package/src/xmp/internal/xml.ts +63 -0
package/src/xmp/Tiff.ts
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed accessors for the most used properties of the TIFF schema (`tiff:`,
|
|
3
|
+
* XMP Specification Part 2 §3.3.5): the camera and the image's basic
|
|
4
|
+
* description. Any other TIFF property is read with `Metadata.get`.
|
|
5
|
+
*
|
|
6
|
+
* @since 0.1.0
|
|
7
|
+
*/
|
|
8
|
+
import type * as DateTime from 'effect/DateTime';
|
|
9
|
+
import type * as Option from 'effect/Option';
|
|
10
|
+
import * as Accessors from './internal/accessors.ts';
|
|
11
|
+
import type * as Metadata from './Metadata.ts';
|
|
12
|
+
import { TIFF } from './Namespaces.ts';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The manufacturer of the recording equipment (`tiff:Make`).
|
|
16
|
+
*
|
|
17
|
+
* @since 0.1.0
|
|
18
|
+
* @category getters
|
|
19
|
+
*/
|
|
20
|
+
export const make: (self: Metadata.Metadata) => Option.Option<string> = Accessors.text(
|
|
21
|
+
`${TIFF}Make`,
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Sets the manufacturer of the recording equipment (`tiff:Make`).
|
|
26
|
+
*
|
|
27
|
+
* @since 0.1.0
|
|
28
|
+
* @category setters
|
|
29
|
+
*/
|
|
30
|
+
export const setMake: Metadata.Setter<string> = Accessors.setText(`${TIFF}Make`);
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The model of the recording equipment (`tiff:Model`).
|
|
34
|
+
*
|
|
35
|
+
* @since 0.1.0
|
|
36
|
+
* @category getters
|
|
37
|
+
*/
|
|
38
|
+
export const model: (self: Metadata.Metadata) => Option.Option<string> = Accessors.text(
|
|
39
|
+
`${TIFF}Model`,
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Sets the model of the recording equipment (`tiff:Model`).
|
|
44
|
+
*
|
|
45
|
+
* @since 0.1.0
|
|
46
|
+
* @category setters
|
|
47
|
+
*/
|
|
48
|
+
export const setModel: Metadata.Setter<string> = Accessors.setText(`${TIFF}Model`);
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The software that produced the image (`tiff:Software`).
|
|
52
|
+
*
|
|
53
|
+
* @since 0.1.0
|
|
54
|
+
* @category getters
|
|
55
|
+
*/
|
|
56
|
+
export const software: (self: Metadata.Metadata) => Option.Option<string> = Accessors.text(
|
|
57
|
+
`${TIFF}Software`,
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Sets the software that produced the image (`tiff:Software`).
|
|
62
|
+
*
|
|
63
|
+
* @since 0.1.0
|
|
64
|
+
* @category setters
|
|
65
|
+
*/
|
|
66
|
+
export const setSoftware: Metadata.Setter<string> = Accessors.setText(`${TIFF}Software`);
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* The camera owner, photographer or image creator (`tiff:Artist`).
|
|
70
|
+
*
|
|
71
|
+
* @since 0.1.0
|
|
72
|
+
* @category getters
|
|
73
|
+
*/
|
|
74
|
+
export const artist: (self: Metadata.Metadata) => Option.Option<string> = Accessors.text(
|
|
75
|
+
`${TIFF}Artist`,
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Sets the camera owner, photographer or image creator (`tiff:Artist`).
|
|
80
|
+
*
|
|
81
|
+
* @since 0.1.0
|
|
82
|
+
* @category setters
|
|
83
|
+
*/
|
|
84
|
+
export const setArtist: Metadata.Setter<string> = Accessors.setText(`${TIFF}Artist`);
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* When the file was last changed (`tiff:DateTime`). An ISO 8601 date, as XMP stores it; the setter takes a `DateTime` or a string.
|
|
88
|
+
*
|
|
89
|
+
* @since 0.1.0
|
|
90
|
+
* @category getters
|
|
91
|
+
*/
|
|
92
|
+
export const dateTime: (self: Metadata.Metadata) => Option.Option<string> = Accessors.text(
|
|
93
|
+
`${TIFF}DateTime`,
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Sets when the file was last changed (`tiff:DateTime`).
|
|
98
|
+
*
|
|
99
|
+
* @since 0.1.0
|
|
100
|
+
* @category setters
|
|
101
|
+
*/
|
|
102
|
+
export const setDateTime: Metadata.Setter<DateTime.DateTime | string> = Accessors.setDate(
|
|
103
|
+
`${TIFF}DateTime`,
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* The orientation, 1 to 8 as in TIFF (`tiff:Orientation`). An integer.
|
|
108
|
+
*
|
|
109
|
+
* @since 0.1.0
|
|
110
|
+
* @category getters
|
|
111
|
+
*/
|
|
112
|
+
export const orientation: (self: Metadata.Metadata) => Option.Option<number> = Accessors.integer(
|
|
113
|
+
`${TIFF}Orientation`,
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Sets the orientation, 1 to 8 as in TIFF (`tiff:Orientation`).
|
|
118
|
+
*
|
|
119
|
+
* @since 0.1.0
|
|
120
|
+
* @category setters
|
|
121
|
+
*/
|
|
122
|
+
export const setOrientation: Metadata.Setter<number> = Accessors.setInteger(`${TIFF}Orientation`);
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* The image width, in pixels (`tiff:ImageWidth`). An integer.
|
|
126
|
+
*
|
|
127
|
+
* @since 0.1.0
|
|
128
|
+
* @category getters
|
|
129
|
+
*/
|
|
130
|
+
export const imageWidth: (self: Metadata.Metadata) => Option.Option<number> = Accessors.integer(
|
|
131
|
+
`${TIFF}ImageWidth`,
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Sets the image width, in pixels (`tiff:ImageWidth`).
|
|
136
|
+
*
|
|
137
|
+
* @since 0.1.0
|
|
138
|
+
* @category setters
|
|
139
|
+
*/
|
|
140
|
+
export const setImageWidth: Metadata.Setter<number> = Accessors.setInteger(`${TIFF}ImageWidth`);
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* The image height, in pixels (`tiff:ImageLength`). An integer.
|
|
144
|
+
*
|
|
145
|
+
* @since 0.1.0
|
|
146
|
+
* @category getters
|
|
147
|
+
*/
|
|
148
|
+
export const imageLength: (self: Metadata.Metadata) => Option.Option<number> = Accessors.integer(
|
|
149
|
+
`${TIFF}ImageLength`,
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Sets the image height, in pixels (`tiff:ImageLength`).
|
|
154
|
+
*
|
|
155
|
+
* @since 0.1.0
|
|
156
|
+
* @category setters
|
|
157
|
+
*/
|
|
158
|
+
export const setImageLength: Metadata.Setter<number> = Accessors.setInteger(`${TIFF}ImageLength`);
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* The image title (`tiff:ImageDescription`). A language alternative; reads the item in `language` (default `x-default`).
|
|
162
|
+
*
|
|
163
|
+
* @since 0.1.0
|
|
164
|
+
* @category getters
|
|
165
|
+
*/
|
|
166
|
+
export const imageDescription: (
|
|
167
|
+
self: Metadata.Metadata,
|
|
168
|
+
language?: string,
|
|
169
|
+
) => Option.Option<string> = Accessors.localized(`${TIFF}ImageDescription`);
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Sets the image title (`tiff:ImageDescription`).
|
|
173
|
+
*
|
|
174
|
+
* @since 0.1.0
|
|
175
|
+
* @category setters
|
|
176
|
+
*/
|
|
177
|
+
export const setImageDescription: Metadata.LocalizedSetter = Accessors.setLocalized(
|
|
178
|
+
`${TIFF}ImageDescription`,
|
|
179
|
+
);
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* The copyright notice (`tiff:Copyright`). A language alternative; reads the item in `language` (default `x-default`).
|
|
183
|
+
*
|
|
184
|
+
* @since 0.1.0
|
|
185
|
+
* @category getters
|
|
186
|
+
*/
|
|
187
|
+
export const copyright: (self: Metadata.Metadata, language?: string) => Option.Option<string> =
|
|
188
|
+
Accessors.localized(`${TIFF}Copyright`);
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Sets the copyright notice (`tiff:Copyright`).
|
|
192
|
+
*
|
|
193
|
+
* @since 0.1.0
|
|
194
|
+
* @category setters
|
|
195
|
+
*/
|
|
196
|
+
export const setCopyright: Metadata.LocalizedSetter = Accessors.setLocalized(`${TIFF}Copyright`);
|
package/src/xmp/Xmp.ts
ADDED
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* XMP packets as an RDF syntax: the parser reads an XMP packet (or a
|
|
3
|
+
* sidecar `.xmp` file, or any XML document embedding `rdf:RDF`) to a
|
|
4
|
+
* dataset, and the serializer writes the canonical XMP form of ISO 16684-1
|
|
5
|
+
* §7: an `<x:xmpmeta>` wrapper, one `rdf:Description` per schema namespace,
|
|
6
|
+
* property elements only, and the packet wrapper with padding. Most XMP
|
|
7
|
+
* consumers are not general RDF/XML parsers, so the serializer never uses
|
|
8
|
+
* the RDF/XML abbreviations they may not accept.
|
|
9
|
+
*
|
|
10
|
+
* `parseMetadata` / `serializeMetadata` work on the XMP data model
|
|
11
|
+
* (`Metadata`) directly.
|
|
12
|
+
*
|
|
13
|
+
* @since 0.1.0
|
|
14
|
+
*/
|
|
15
|
+
import * as HashSet from 'effect/HashSet';
|
|
16
|
+
import * as Arr from 'effect/Array';
|
|
17
|
+
import * as Effect from 'effect/Effect';
|
|
18
|
+
import * as Option from 'effect/Option';
|
|
19
|
+
import * as Predicate from 'effect/Predicate';
|
|
20
|
+
import * as Result from 'effect/Result';
|
|
21
|
+
import * as Dataset from '../Dataset.ts';
|
|
22
|
+
import * as PrefixMap from '../PrefixMap.ts';
|
|
23
|
+
import * as Serialization from '../Serialization.ts';
|
|
24
|
+
import * as Term from '../Term.ts';
|
|
25
|
+
import * as Xml from './internal/xml.ts';
|
|
26
|
+
import * as Metadata from './Metadata.ts';
|
|
27
|
+
import * as Namespaces from './Namespaces.ts';
|
|
28
|
+
import * as Packet from './Packet.ts';
|
|
29
|
+
|
|
30
|
+
const FORMAT_NAME = 'XMP';
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The XMP format description. XMP's registered media type is RDF/XML's
|
|
34
|
+
* (`application/rdf+xml`); the `.xmp` extension tells the two apart.
|
|
35
|
+
*
|
|
36
|
+
* @since 0.1.0
|
|
37
|
+
* @category formats
|
|
38
|
+
*/
|
|
39
|
+
export const format: Serialization.Format = Serialization.makeFormat({
|
|
40
|
+
name: FORMAT_NAME,
|
|
41
|
+
mediaType: 'application/rdf+xml',
|
|
42
|
+
extensions: ['xmp'],
|
|
43
|
+
datasets: false,
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// Spans are named `Xmp.parse`, `Xmp.serialize`.
|
|
47
|
+
const trace: Serialization.SpanTarget = { module: 'Xmp', format };
|
|
48
|
+
|
|
49
|
+
// -----------------------------------------------------------------------------
|
|
50
|
+
// Parsing
|
|
51
|
+
// -----------------------------------------------------------------------------
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Parses the text of an XMP packet: a packet, a bare `<x:xmpmeta>` (or
|
|
55
|
+
* older `<x:xapmeta>`) element, a bare `rdf:RDF` element or any XML document
|
|
56
|
+
* containing one (an SVG's `<metadata>`). The first `rdf:RDF` element is
|
|
57
|
+
* read as RDF/XML.
|
|
58
|
+
*
|
|
59
|
+
* @since 0.1.0
|
|
60
|
+
* @category parsing
|
|
61
|
+
*/
|
|
62
|
+
export const parse = (
|
|
63
|
+
input: string,
|
|
64
|
+
options?: Serialization.ParseOptions,
|
|
65
|
+
): Effect.Effect<Serialization.ParseResult, Serialization.RdfParseError> =>
|
|
66
|
+
Effect.suspend(() => Xml.parseRdf(input, options)).pipe(
|
|
67
|
+
Serialization.withParseSpan(trace, input),
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* The XMP parser.
|
|
72
|
+
*
|
|
73
|
+
* @since 0.1.0
|
|
74
|
+
* @category parsing
|
|
75
|
+
*/
|
|
76
|
+
export const parser: Serialization.Parser = Serialization.makeParser({ format, parse });
|
|
77
|
+
|
|
78
|
+
const decode = (input: string | Uint8Array): string =>
|
|
79
|
+
Predicate.isString(input)
|
|
80
|
+
? input
|
|
81
|
+
: Option.match(Packet.find(input), {
|
|
82
|
+
onNone: () => new TextDecoder().decode(input),
|
|
83
|
+
onSome: (packet) => packet.text,
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Reads the XMP data model from text, or from bytes: the first packet in
|
|
88
|
+
* them, or the whole of them as UTF-8 when they hold no packet (a sidecar
|
|
89
|
+
* `.xmp` file written without one).
|
|
90
|
+
*
|
|
91
|
+
* @since 0.1.0
|
|
92
|
+
* @category parsing
|
|
93
|
+
*/
|
|
94
|
+
export const parseMetadata = (
|
|
95
|
+
input: string | Uint8Array,
|
|
96
|
+
options?: Serialization.ParseOptions,
|
|
97
|
+
): Effect.Effect<Metadata.Metadata, Serialization.RdfParseError> =>
|
|
98
|
+
Effect.gen(function* () {
|
|
99
|
+
const result = yield* parse(decode(input), options);
|
|
100
|
+
return yield* Metadata.fromDataset(result.dataset).pipe(
|
|
101
|
+
Effect.mapError(
|
|
102
|
+
(e) => new Serialization.RdfParseError({ format: FORMAT_NAME, message: e.message }),
|
|
103
|
+
),
|
|
104
|
+
);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// -----------------------------------------------------------------------------
|
|
108
|
+
// Serializing
|
|
109
|
+
// -----------------------------------------------------------------------------
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Options for serializing XMP.
|
|
113
|
+
*
|
|
114
|
+
* @since 0.1.0
|
|
115
|
+
* @category models
|
|
116
|
+
*/
|
|
117
|
+
export interface SerializeOptions extends Serialization.SerializeOptions {
|
|
118
|
+
/** Whether to wrap the XMP in an `<?xpacket?>` packet. Defaults to `true`. */
|
|
119
|
+
readonly packet?: boolean | undefined;
|
|
120
|
+
/** Whether the packet trailer is `end="w"`. Defaults to `true`. */
|
|
121
|
+
readonly writable?: boolean | undefined;
|
|
122
|
+
/**
|
|
123
|
+
* Bytes of padding before the trailer. Defaults to `Packet.DEFAULT_PADDING`
|
|
124
|
+
* for a writable packet and 0 for a read-only one.
|
|
125
|
+
*/
|
|
126
|
+
readonly padding?: number | undefined;
|
|
127
|
+
/**
|
|
128
|
+
* The exact byte length of the packet, padding the difference: how a
|
|
129
|
+
* packet is updated in place. Serialization fails when the XMP does not
|
|
130
|
+
* fit. Overrides `padding`.
|
|
131
|
+
*/
|
|
132
|
+
readonly size?: number | undefined;
|
|
133
|
+
/** The `x:xmptk` attribute naming the writing toolkit. Omitted by default. */
|
|
134
|
+
readonly toolkit?: string | undefined;
|
|
135
|
+
/** The indentation unit. Defaults to one space, as Adobe's toolkit writes. */
|
|
136
|
+
readonly indent?: string | undefined;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const fail = (message: string): never => {
|
|
140
|
+
throw new Serialization.RdfSerializeError({ format: FORMAT_NAME, message });
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
const split = (iri: string): readonly [string, string] =>
|
|
144
|
+
Option.getOrElse(Xml.splitIri(iri), () =>
|
|
145
|
+
fail(`The IRI <${iri}> cannot be written as an XML element name`),
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
const namespaceOf = (iri: string): string => split(iri)[0];
|
|
149
|
+
|
|
150
|
+
/** Every property, field and qualifier IRI in a value, in document order. */
|
|
151
|
+
const iris = (value: Metadata.Value): ReadonlyArray<string> => [
|
|
152
|
+
...entryIris(value.qualifiers),
|
|
153
|
+
...(Metadata.isStruct(value)
|
|
154
|
+
? entryIris(value.fields)
|
|
155
|
+
: Metadata.isArray(value)
|
|
156
|
+
? Arr.flatMap(value.items, iris)
|
|
157
|
+
: []),
|
|
158
|
+
];
|
|
159
|
+
|
|
160
|
+
const entryIris = (entries: Metadata.Entries): ReadonlyArray<string> =>
|
|
161
|
+
Arr.flatMap(entries, ([iri, value]) => [iri, ...iris(value)]);
|
|
162
|
+
|
|
163
|
+
const RESERVED: HashSet.HashSet<string> = HashSet.make('x', 'rdf', 'xml', 'xmlns');
|
|
164
|
+
|
|
165
|
+
/** `[namespace, prefix]` pairs. */
|
|
166
|
+
type Prefixes = ReadonlyArray<readonly [string, string]>;
|
|
167
|
+
|
|
168
|
+
const prefixFor = (prefixes: Prefixes, ns: string): Option.Option<string> =>
|
|
169
|
+
Option.map(
|
|
170
|
+
Arr.findFirst(prefixes, ([n]) => n === ns),
|
|
171
|
+
([, prefix]) => prefix,
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
const usable = (map: PrefixMap.PrefixMap): Prefixes =>
|
|
175
|
+
Arr.map(
|
|
176
|
+
Arr.filter(
|
|
177
|
+
Arr.fromIterable(map.prefixes),
|
|
178
|
+
([prefix]) => prefix !== '' && !HashSet.has(RESERVED, prefix.toLowerCase()),
|
|
179
|
+
),
|
|
180
|
+
([prefix, ns]) => [ns, prefix] as const,
|
|
181
|
+
);
|
|
182
|
+
|
|
183
|
+
/** Assigns every namespace a prefix: the caller's, the conventional one, or `nsN`. */
|
|
184
|
+
const assignPrefixes = (
|
|
185
|
+
namespaces: ReadonlyArray<string>,
|
|
186
|
+
given: PrefixMap.PrefixMap,
|
|
187
|
+
): Prefixes => {
|
|
188
|
+
const preferred = [...usable(given), ...usable(Namespaces.prefixes)];
|
|
189
|
+
const initial: Prefixes = [[Namespaces.RDF, 'rdf']];
|
|
190
|
+
return Arr.reduce(Arr.dedupe(namespaces), initial, (assigned, ns) => {
|
|
191
|
+
if (Option.isSome(prefixFor(assigned, ns))) return assigned;
|
|
192
|
+
const isFree = (p: string) => !Arr.some(assigned, ([, taken]) => taken === p);
|
|
193
|
+
const generated = () =>
|
|
194
|
+
Option.getOrElse(
|
|
195
|
+
Arr.findFirst(
|
|
196
|
+
Arr.makeBy(assigned.length + 1, (i) => `ns${i + 1}`),
|
|
197
|
+
isFree,
|
|
198
|
+
),
|
|
199
|
+
() => `ns${assigned.length + 1}`,
|
|
200
|
+
);
|
|
201
|
+
const prefix = Option.getOrElse(Option.filter(prefixFor(preferred, ns), isFree), generated);
|
|
202
|
+
return [...assigned, [ns, prefix] as const];
|
|
203
|
+
});
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
interface Writer {
|
|
207
|
+
readonly prefixes: Prefixes;
|
|
208
|
+
readonly indent: string;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
const prefixOf = (writer: Writer, ns: string): string =>
|
|
212
|
+
Option.getOrElse(prefixFor(writer.prefixes, ns), () => fail(`No prefix for <${ns}>`));
|
|
213
|
+
|
|
214
|
+
const qname = (writer: Writer, iri: string): string => {
|
|
215
|
+
const [ns, local] = split(iri);
|
|
216
|
+
return `${prefixOf(writer, ns)}:${local}`;
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
const unqualified = <V extends Metadata.Value>(value: V): V => ({ ...value, qualifiers: [] });
|
|
220
|
+
|
|
221
|
+
const simpleLines = (pad: string, name: string, value: Metadata.Simple): ReadonlyArray<string> => {
|
|
222
|
+
if (value.isUri) return [`${pad}<${name} rdf:resource="${Xml.escapeAttribute(value.value)}"/>`];
|
|
223
|
+
const lang = Option.match(value.language, {
|
|
224
|
+
onNone: () => '',
|
|
225
|
+
onSome: (l) => ` xml:lang="${Xml.escapeAttribute(l)}"`,
|
|
226
|
+
});
|
|
227
|
+
return [`${pad}<${name}${lang}>${Xml.escapeText(value.value)}</${name}>`];
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
const structLines = (
|
|
231
|
+
writer: Writer,
|
|
232
|
+
pad: string,
|
|
233
|
+
name: string,
|
|
234
|
+
entries: Metadata.Entries,
|
|
235
|
+
depth: number,
|
|
236
|
+
): ReadonlyArray<string> =>
|
|
237
|
+
Arr.isReadonlyArrayNonEmpty(entries)
|
|
238
|
+
? [
|
|
239
|
+
`${pad}<${name} rdf:parseType="Resource">`,
|
|
240
|
+
...entryLines(writer, entries, depth + 1),
|
|
241
|
+
`${pad}</${name}>`,
|
|
242
|
+
]
|
|
243
|
+
: [`${pad}<${name} rdf:parseType="Resource"/>`];
|
|
244
|
+
|
|
245
|
+
const arrayLines = (
|
|
246
|
+
writer: Writer,
|
|
247
|
+
pad: string,
|
|
248
|
+
name: string,
|
|
249
|
+
value: Metadata.ArrayValue,
|
|
250
|
+
depth: number,
|
|
251
|
+
): ReadonlyArray<string> => {
|
|
252
|
+
const inner = writer.indent.repeat(depth + 1);
|
|
253
|
+
const container = `rdf:${value.form}`;
|
|
254
|
+
return [
|
|
255
|
+
`${pad}<${name}>`,
|
|
256
|
+
...(Arr.isReadonlyArrayNonEmpty(value.items)
|
|
257
|
+
? [
|
|
258
|
+
`${inner}<${container}>`,
|
|
259
|
+
...Arr.flatMap(value.items, (item) => elementLines(writer, 'rdf:li', item, depth + 2)),
|
|
260
|
+
`${inner}</${container}>`,
|
|
261
|
+
]
|
|
262
|
+
: [`${inner}<${container}/>`]),
|
|
263
|
+
`${pad}</${name}>`,
|
|
264
|
+
];
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
const elementLines = (
|
|
268
|
+
writer: Writer,
|
|
269
|
+
name: string,
|
|
270
|
+
value: Metadata.Value,
|
|
271
|
+
depth: number,
|
|
272
|
+
): ReadonlyArray<string> => {
|
|
273
|
+
const pad = writer.indent.repeat(depth);
|
|
274
|
+
if (Arr.isReadonlyArrayNonEmpty(value.qualifiers)) {
|
|
275
|
+
return [
|
|
276
|
+
`${pad}<${name} rdf:parseType="Resource">`,
|
|
277
|
+
...elementLines(writer, 'rdf:value', unqualified(value), depth + 1),
|
|
278
|
+
...entryLines(writer, value.qualifiers, depth + 1),
|
|
279
|
+
`${pad}</${name}>`,
|
|
280
|
+
];
|
|
281
|
+
}
|
|
282
|
+
if (Metadata.isSimple(value)) return simpleLines(pad, name, value);
|
|
283
|
+
if (Metadata.isStruct(value)) return structLines(writer, pad, name, value.fields, depth);
|
|
284
|
+
return arrayLines(writer, pad, name, value, depth);
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
const entryLines = (
|
|
288
|
+
writer: Writer,
|
|
289
|
+
entries: Metadata.Entries,
|
|
290
|
+
depth: number,
|
|
291
|
+
): ReadonlyArray<string> =>
|
|
292
|
+
Arr.flatMap(entries, ([iri, value]) => elementLines(writer, qname(writer, iri), value, depth));
|
|
293
|
+
|
|
294
|
+
const descriptionLines = (
|
|
295
|
+
writer: Writer,
|
|
296
|
+
about: string,
|
|
297
|
+
properties: Metadata.Entries,
|
|
298
|
+
): ReadonlyArray<string> => {
|
|
299
|
+
const pad = writer.indent.repeat(2);
|
|
300
|
+
const open = `${pad}<rdf:Description rdf:about="${Xml.escapeAttribute(about)}"`;
|
|
301
|
+
if (!Arr.isReadonlyArrayNonEmpty(properties)) return [`${open}/>`];
|
|
302
|
+
const declared = Arr.dedupe(Arr.map(entryIris(properties), namespaceOf));
|
|
303
|
+
const declarations = Arr.map(
|
|
304
|
+
Arr.filter(declared, (ns) => ns !== Namespaces.RDF),
|
|
305
|
+
(ns) =>
|
|
306
|
+
`\n${pad}${writer.indent.repeat(2)}xmlns:${prefixOf(writer, ns)}="${Xml.escapeAttribute(ns)}"`,
|
|
307
|
+
);
|
|
308
|
+
return [
|
|
309
|
+
`${open}${declarations.join('')}>`,
|
|
310
|
+
...entryLines(writer, properties, 3),
|
|
311
|
+
`${pad}</rdf:Description>`,
|
|
312
|
+
];
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
const xmpmeta = (meta: Metadata.Metadata, options: SerializeOptions): string => {
|
|
316
|
+
const entries = meta.properties;
|
|
317
|
+
const writer: Writer = {
|
|
318
|
+
prefixes: assignPrefixes(
|
|
319
|
+
Arr.map(entryIris(entries), namespaceOf),
|
|
320
|
+
options.prefixes ?? PrefixMap.empty,
|
|
321
|
+
),
|
|
322
|
+
indent: options.indent ?? ' ',
|
|
323
|
+
};
|
|
324
|
+
// One rdf:Description per schema namespace, in the order each first occurs.
|
|
325
|
+
const descriptions = Arr.isReadonlyArrayNonEmpty(entries)
|
|
326
|
+
? Arr.flatMap(Arr.dedupe(Arr.map(entries, ([iri]) => namespaceOf(iri))), (ns) =>
|
|
327
|
+
descriptionLines(
|
|
328
|
+
writer,
|
|
329
|
+
meta.about,
|
|
330
|
+
Arr.filter(entries, ([iri]) => namespaceOf(iri) === ns),
|
|
331
|
+
),
|
|
332
|
+
)
|
|
333
|
+
: descriptionLines(writer, meta.about, []);
|
|
334
|
+
const toolkit =
|
|
335
|
+
options.toolkit === undefined ? '' : ` x:xmptk="${Xml.escapeAttribute(options.toolkit)}"`;
|
|
336
|
+
return [
|
|
337
|
+
`<x:xmpmeta xmlns:x="${Namespaces.X}"${toolkit}>`,
|
|
338
|
+
`${writer.indent}<rdf:RDF xmlns:rdf="${Namespaces.RDF}">`,
|
|
339
|
+
...descriptions,
|
|
340
|
+
`${writer.indent}</rdf:RDF>`,
|
|
341
|
+
'</x:xmpmeta>',
|
|
342
|
+
].join('\n');
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
const write = (meta: Metadata.Metadata, options: SerializeOptions): string => {
|
|
346
|
+
const xml = xmpmeta(meta, options);
|
|
347
|
+
if (options.packet === false) return `${xml}\n`;
|
|
348
|
+
const writable = options.writable ?? true;
|
|
349
|
+
if (options.size === undefined) {
|
|
350
|
+
return Packet.wrap(xml, { writable, padding: options.padding });
|
|
351
|
+
}
|
|
352
|
+
const size = options.size;
|
|
353
|
+
return Option.getOrElse(Packet.wrapToSize(xml, size, { writable }), () =>
|
|
354
|
+
fail(`The XMP packet does not fit in ${size} bytes`),
|
|
355
|
+
);
|
|
356
|
+
};
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Serializes the XMP data model, returning a `Result`.
|
|
360
|
+
*
|
|
361
|
+
* @since 0.1.0
|
|
362
|
+
* @category serializing
|
|
363
|
+
*/
|
|
364
|
+
export const serializeMetadataResult = (
|
|
365
|
+
meta: Metadata.Metadata,
|
|
366
|
+
options?: SerializeOptions,
|
|
367
|
+
): Result.Result<string, Serialization.RdfSerializeError> =>
|
|
368
|
+
Result.try({
|
|
369
|
+
try: () => write(meta, options ?? {}),
|
|
370
|
+
catch: (e) => {
|
|
371
|
+
if (e instanceof Serialization.RdfSerializeError) return e;
|
|
372
|
+
throw e;
|
|
373
|
+
},
|
|
374
|
+
});
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* Serializes the XMP data model as a canonical XMP packet. Fails with
|
|
378
|
+
* `RdfSerializeError` when a property IRI does not end in an XML name, or
|
|
379
|
+
* the packet does not fit `options.size`.
|
|
380
|
+
*
|
|
381
|
+
* @since 0.1.0
|
|
382
|
+
* @category serializing
|
|
383
|
+
*/
|
|
384
|
+
export const serializeMetadata = (
|
|
385
|
+
meta: Metadata.Metadata,
|
|
386
|
+
options?: SerializeOptions,
|
|
387
|
+
): Effect.Effect<string, Serialization.RdfSerializeError> =>
|
|
388
|
+
Effect.suspend(() => Effect.fromResult(serializeMetadataResult(meta, options)));
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* Serializes quads as a canonical XMP packet. The quads must have the shape
|
|
392
|
+
* of the XMP data model (see `Metadata.fromDataset`); named graphs are
|
|
393
|
+
* merged.
|
|
394
|
+
*
|
|
395
|
+
* @since 0.1.0
|
|
396
|
+
* @category serializing
|
|
397
|
+
*/
|
|
398
|
+
export const serialize = (
|
|
399
|
+
quads: Iterable<Term.Quad>,
|
|
400
|
+
options?: SerializeOptions,
|
|
401
|
+
): Effect.Effect<string, Serialization.RdfSerializeError> =>
|
|
402
|
+
Effect.gen(function* () {
|
|
403
|
+
const meta = yield* Metadata.fromDataset(Dataset.fromIterable(quads)).pipe(
|
|
404
|
+
Effect.mapError(
|
|
405
|
+
(e) => new Serialization.RdfSerializeError({ format: FORMAT_NAME, message: e.message }),
|
|
406
|
+
),
|
|
407
|
+
);
|
|
408
|
+
return yield* serializeMetadata(meta, options);
|
|
409
|
+
}).pipe(Serialization.withSerializeSpan(trace));
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* The XMP serializer.
|
|
413
|
+
*
|
|
414
|
+
* @since 0.1.0
|
|
415
|
+
* @category serializing
|
|
416
|
+
*/
|
|
417
|
+
export const serializer: Serialization.Serializer<SerializeOptions> = Serialization.makeSerializer({
|
|
418
|
+
format,
|
|
419
|
+
serialize,
|
|
420
|
+
});
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* The XMP codec, including a `Schema` transforming XMP packets to datasets
|
|
424
|
+
* and back.
|
|
425
|
+
*
|
|
426
|
+
* @since 0.1.0
|
|
427
|
+
* @category codecs
|
|
428
|
+
*/
|
|
429
|
+
export const codec: Serialization.Codec<Serialization.ParseOptions, SerializeOptions> =
|
|
430
|
+
Serialization.makeCodec(parser, serializer);
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed accessors for the XMP Basic schema (`xmp:`, ISO 16684-1 §8.4). Dates are
|
|
3
|
+
* read as the ISO 8601 strings XMP stores; setters accept a `DateTime` or a
|
|
4
|
+
* string.
|
|
5
|
+
*
|
|
6
|
+
* @since 0.1.0
|
|
7
|
+
*/
|
|
8
|
+
import type * as DateTime from 'effect/DateTime';
|
|
9
|
+
import type * as Option from 'effect/Option';
|
|
10
|
+
import * as Accessors from './internal/accessors.ts';
|
|
11
|
+
import type * as Metadata from './Metadata.ts';
|
|
12
|
+
import { XMP } from './Namespaces.ts';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* When the resource was created (`xmp:CreateDate`).
|
|
16
|
+
*
|
|
17
|
+
* @since 0.1.0
|
|
18
|
+
* @category getters
|
|
19
|
+
*/
|
|
20
|
+
export const createDate: (self: Metadata.Metadata) => Option.Option<string> = Accessors.text(
|
|
21
|
+
`${XMP}CreateDate`,
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Sets when the resource was created (`xmp:CreateDate`).
|
|
26
|
+
*
|
|
27
|
+
* @since 0.1.0
|
|
28
|
+
* @category setters
|
|
29
|
+
*/
|
|
30
|
+
export const setCreateDate: Metadata.Setter<DateTime.DateTime | string> = Accessors.setDate(
|
|
31
|
+
`${XMP}CreateDate`,
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* When the resource was last modified (`xmp:ModifyDate`).
|
|
36
|
+
*
|
|
37
|
+
* @since 0.1.0
|
|
38
|
+
* @category getters
|
|
39
|
+
*/
|
|
40
|
+
export const modifyDate: (self: Metadata.Metadata) => Option.Option<string> = Accessors.text(
|
|
41
|
+
`${XMP}ModifyDate`,
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Sets when the resource was last modified (`xmp:ModifyDate`).
|
|
46
|
+
*
|
|
47
|
+
* @since 0.1.0
|
|
48
|
+
* @category setters
|
|
49
|
+
*/
|
|
50
|
+
export const setModifyDate: Metadata.Setter<DateTime.DateTime | string> = Accessors.setDate(
|
|
51
|
+
`${XMP}ModifyDate`,
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* When the metadata was last changed (`xmp:MetadataDate`).
|
|
56
|
+
*
|
|
57
|
+
* @since 0.1.0
|
|
58
|
+
* @category getters
|
|
59
|
+
*/
|
|
60
|
+
export const metadataDate: (self: Metadata.Metadata) => Option.Option<string> = Accessors.text(
|
|
61
|
+
`${XMP}MetadataDate`,
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Sets when the metadata was last changed (`xmp:MetadataDate`).
|
|
66
|
+
*
|
|
67
|
+
* @since 0.1.0
|
|
68
|
+
* @category setters
|
|
69
|
+
*/
|
|
70
|
+
export const setMetadataDate: Metadata.Setter<DateTime.DateTime | string> = Accessors.setDate(
|
|
71
|
+
`${XMP}MetadataDate`,
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* The application that created the resource (`xmp:CreatorTool`).
|
|
76
|
+
*
|
|
77
|
+
* @since 0.1.0
|
|
78
|
+
* @category getters
|
|
79
|
+
*/
|
|
80
|
+
export const creatorTool: (self: Metadata.Metadata) => Option.Option<string> = Accessors.text(
|
|
81
|
+
`${XMP}CreatorTool`,
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Sets the application that created the resource (`xmp:CreatorTool`).
|
|
86
|
+
*
|
|
87
|
+
* @since 0.1.0
|
|
88
|
+
* @category setters
|
|
89
|
+
*/
|
|
90
|
+
export const setCreatorTool: Metadata.Setter<string> = Accessors.setText(`${XMP}CreatorTool`);
|