@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,538 @@
|
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-D8jQpDG7.mjs";
|
|
2
|
+
import { O as expandPrefixed, S as stringValue, b as parse, s as canonicalName, x as string } from "./Datatype-DQvkNkiH.mjs";
|
|
3
|
+
import { d as warning, s as error } from "./Report-XHs8htzK.mjs";
|
|
4
|
+
import { A as normalize, C as dialectOfTable, D as schemaOfTable, O as decodeName, _ as checkCompatible, j as resolve, k as encodeName, w as inherit } from "./Metadata-D4HsQNXr.mjs";
|
|
5
|
+
import * as Arr from "effect/Array";
|
|
6
|
+
import * as HashMap from "effect/HashMap";
|
|
7
|
+
import * as Option from "effect/Option";
|
|
8
|
+
import * as Predicate from "effect/Predicate";
|
|
9
|
+
import * as Record from "effect/Record";
|
|
10
|
+
import * as Result from "effect/Result";
|
|
11
|
+
import * as Data from "effect/Data";
|
|
12
|
+
// src/csvw/internal/uriTemplate.ts
|
|
13
|
+
/**
|
|
14
|
+
* RFC 6570 URI Template expansion (all four levels) over string and list
|
|
15
|
+
* values, for the `aboutUrl`, `propertyUrl` and `valueUrl` templates.
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
const operators = {
|
|
20
|
+
"": {
|
|
21
|
+
first: "",
|
|
22
|
+
sep: ",",
|
|
23
|
+
named: false,
|
|
24
|
+
ifEmpty: "",
|
|
25
|
+
reserved: false
|
|
26
|
+
},
|
|
27
|
+
"+": {
|
|
28
|
+
first: "",
|
|
29
|
+
sep: ",",
|
|
30
|
+
named: false,
|
|
31
|
+
ifEmpty: "",
|
|
32
|
+
reserved: true
|
|
33
|
+
},
|
|
34
|
+
".": {
|
|
35
|
+
first: ".",
|
|
36
|
+
sep: ".",
|
|
37
|
+
named: false,
|
|
38
|
+
ifEmpty: "",
|
|
39
|
+
reserved: false
|
|
40
|
+
},
|
|
41
|
+
"/": {
|
|
42
|
+
first: "/",
|
|
43
|
+
sep: "/",
|
|
44
|
+
named: false,
|
|
45
|
+
ifEmpty: "",
|
|
46
|
+
reserved: false
|
|
47
|
+
},
|
|
48
|
+
";": {
|
|
49
|
+
first: ";",
|
|
50
|
+
sep: ";",
|
|
51
|
+
named: true,
|
|
52
|
+
ifEmpty: "",
|
|
53
|
+
reserved: false
|
|
54
|
+
},
|
|
55
|
+
"?": {
|
|
56
|
+
first: "?",
|
|
57
|
+
sep: "&",
|
|
58
|
+
named: true,
|
|
59
|
+
ifEmpty: "=",
|
|
60
|
+
reserved: false
|
|
61
|
+
},
|
|
62
|
+
"&": {
|
|
63
|
+
first: "&",
|
|
64
|
+
sep: "&",
|
|
65
|
+
named: true,
|
|
66
|
+
ifEmpty: "=",
|
|
67
|
+
reserved: false
|
|
68
|
+
},
|
|
69
|
+
"#": {
|
|
70
|
+
first: "#",
|
|
71
|
+
sep: ",",
|
|
72
|
+
named: false,
|
|
73
|
+
ifEmpty: "",
|
|
74
|
+
reserved: true
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const utf8 = new TextEncoder();
|
|
78
|
+
const pct = (c) => Arr.join(Arr.map(Array.from(utf8.encode(c)), (b) => `%${b.toString(16).toUpperCase().padStart(2, "0")}`), "");
|
|
79
|
+
const encodeUnreserved = (s) => s.replace(/[^A-Za-z0-9\-._~]/gu, (c) => pct(c));
|
|
80
|
+
const encodeReserved = (s) => s.replace(/%[0-9A-Fa-f]{2}|[^A-Za-z0-9\-._~:/?#[\]@!$&'()*+,;=]/gu, (c) => c.startsWith("%") && c.length === 3 ? c : pct(c));
|
|
81
|
+
const parseVarSpec = (spec) => {
|
|
82
|
+
const explode = spec.endsWith("*");
|
|
83
|
+
const body = explode ? spec.slice(0, -1) : spec;
|
|
84
|
+
const colon = body.indexOf(":");
|
|
85
|
+
return colon === -1 ? {
|
|
86
|
+
name: body,
|
|
87
|
+
prefix: Option.none(),
|
|
88
|
+
explode
|
|
89
|
+
} : {
|
|
90
|
+
name: body.slice(0, colon),
|
|
91
|
+
prefix: Option.some(Number.parseInt(body.slice(colon + 1), 10)),
|
|
92
|
+
explode
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
const expandVar = (op, spec, defined) => {
|
|
96
|
+
const enc = op.reserved ? encodeReserved : encodeUnreserved;
|
|
97
|
+
if (Option.isNone(defined)) return [];
|
|
98
|
+
const value = defined.value;
|
|
99
|
+
if (Predicate.isString(value)) {
|
|
100
|
+
const v = Option.match(spec.prefix, {
|
|
101
|
+
onNone: () => value,
|
|
102
|
+
onSome: (n) => Arr.join(Arr.take(Array.from(value), n), "")
|
|
103
|
+
});
|
|
104
|
+
if (!op.named) return [enc(v)];
|
|
105
|
+
return [v === "" ? `${spec.name}${op.ifEmpty}` : `${spec.name}=${enc(v)}`];
|
|
106
|
+
}
|
|
107
|
+
if (!Arr.isReadonlyArrayNonEmpty(value)) return [];
|
|
108
|
+
if (!spec.explode) {
|
|
109
|
+
const joined = Arr.join(Arr.map(value, enc), ",");
|
|
110
|
+
return [op.named ? `${spec.name}=${joined}` : joined];
|
|
111
|
+
}
|
|
112
|
+
return Arr.map(value, (item) => op.named ? item === "" ? `${spec.name}${op.ifEmpty}` : `${spec.name}=${enc(item)}` : enc(item));
|
|
113
|
+
};
|
|
114
|
+
const expandExpression = (expression, variables) => {
|
|
115
|
+
const head = expression.charAt(0);
|
|
116
|
+
const op = Record.get(operators, head);
|
|
117
|
+
const [operator, body] = Option.match(op, {
|
|
118
|
+
onNone: () => [operators[""], expression],
|
|
119
|
+
onSome: (o) => [o, expression.slice(1)]
|
|
120
|
+
});
|
|
121
|
+
const resolved = operator ?? {
|
|
122
|
+
first: "",
|
|
123
|
+
sep: ",",
|
|
124
|
+
named: false,
|
|
125
|
+
ifEmpty: "",
|
|
126
|
+
reserved: false
|
|
127
|
+
};
|
|
128
|
+
const parts = Arr.flatMap(body.split(","), (raw) => {
|
|
129
|
+
const spec = parseVarSpec(raw);
|
|
130
|
+
return expandVar(resolved, spec, Record.get(variables, spec.name));
|
|
131
|
+
});
|
|
132
|
+
return Arr.match(parts, {
|
|
133
|
+
onEmpty: () => "",
|
|
134
|
+
onNonEmpty: (ps) => resolved.first + Arr.join(ps, resolved.sep)
|
|
135
|
+
});
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* Expands a URI template with the given variables (an absent variable is
|
|
139
|
+
* undefined).
|
|
140
|
+
*
|
|
141
|
+
* @internal
|
|
142
|
+
*/
|
|
143
|
+
const expand = (template, variables) => template.replace(/\{([^}]*)\}/g, (_, e) => expandExpression(e, variables));
|
|
144
|
+
// src/csvw/Table.ts
|
|
145
|
+
/**
|
|
146
|
+
* The annotated tabular data model (Tabular Data Model §Tabular Data Models):
|
|
147
|
+
* an already-parsed table (`Source`, rows of cell strings in file order) is
|
|
148
|
+
* read with its dialect's row-level flags (skipped rows, header rows, comment
|
|
149
|
+
* rows, blank rows, skipped columns, trimming), its embedded metadata is
|
|
150
|
+
* extracted and checked against the metadata, and every cell is parsed with
|
|
151
|
+
* its column's datatype into an annotated table, with the cell, primary-key
|
|
152
|
+
* and foreign-key errors in a validation report.
|
|
153
|
+
*
|
|
154
|
+
* @since 0.1.0
|
|
155
|
+
*/
|
|
156
|
+
var Table_exports = /* @__PURE__ */ __exportAll({
|
|
157
|
+
CellValue: () => CellValue,
|
|
158
|
+
annotate: () => annotate,
|
|
159
|
+
checkForeignKeyTargets: () => checkForeignKeyTargets,
|
|
160
|
+
parseCell: () => parseCell,
|
|
161
|
+
read: () => read,
|
|
162
|
+
referencedTable: () => referencedTable,
|
|
163
|
+
validateKeys: () => validateKeys
|
|
164
|
+
});
|
|
165
|
+
/**
|
|
166
|
+
* Constructors and matchers for `CellValue`.
|
|
167
|
+
*
|
|
168
|
+
* @since 0.1.0
|
|
169
|
+
* @category models
|
|
170
|
+
*/
|
|
171
|
+
const CellValue = Data.taggedEnum();
|
|
172
|
+
const nullValue = CellValue.Null({});
|
|
173
|
+
const trimCell = (value, trim) => trim === "true" ? value.trim() : trim === "start" ? value.trimStart() : trim === "end" ? value.trimEnd() : value;
|
|
174
|
+
const emptyColumn = (titles) => ({
|
|
175
|
+
...Option.match(Option.flatMap(Arr.head(Record.values(titles)), Arr.head), {
|
|
176
|
+
onNone: () => ({}),
|
|
177
|
+
onSome: (titleName) => ({ titleName })
|
|
178
|
+
}),
|
|
179
|
+
titles,
|
|
180
|
+
isVirtual: false,
|
|
181
|
+
isSuppressed: false,
|
|
182
|
+
inherited: {},
|
|
183
|
+
common: {}
|
|
184
|
+
});
|
|
185
|
+
/**
|
|
186
|
+
* Reads a source with a dialect (Tabular Data Model §Parsing Tabular Data,
|
|
187
|
+
* from the point a row's cells are known): skipped rows and comment rows
|
|
188
|
+
* become comments, header rows become column titles in `lang`, and the
|
|
189
|
+
* remaining rows (less blank ones when `skipBlankRows`) are the data.
|
|
190
|
+
*
|
|
191
|
+
* @since 0.1.0
|
|
192
|
+
* @category reading
|
|
193
|
+
*/
|
|
194
|
+
const read = (source, dialect, lang) => {
|
|
195
|
+
const prefix = Option.fromNullishOr(dialect.commentPrefix);
|
|
196
|
+
const content = (cells) => Arr.join(cells, dialect.delimiter);
|
|
197
|
+
const comment = (cells) => Option.flatMap(prefix, (p) => {
|
|
198
|
+
const c = content(cells);
|
|
199
|
+
return c.startsWith(p) ? Option.some(c.slice(p.length).trim()) : Option.none();
|
|
200
|
+
});
|
|
201
|
+
const cellsOf = (cells) => Arr.map(Arr.drop(cells, dialect.skipColumns), (c) => trimCell(c, dialect.trim));
|
|
202
|
+
const numbered = Arr.map(source.rows, (cells, i) => ({
|
|
203
|
+
cells,
|
|
204
|
+
sourceNumber: i + 1
|
|
205
|
+
}));
|
|
206
|
+
const [skipped, rest] = Arr.splitAt(numbered, dialect.skipRows);
|
|
207
|
+
const skippedComments = Arr.flatMap(skipped, ({ cells }) => Option.match(comment(cells), {
|
|
208
|
+
onSome: (c) => [c],
|
|
209
|
+
onNone: () => {
|
|
210
|
+
const c = content(cells).trim();
|
|
211
|
+
return c === "" ? [] : [c];
|
|
212
|
+
}
|
|
213
|
+
}));
|
|
214
|
+
const state = Arr.reduce(rest, {
|
|
215
|
+
headers: [],
|
|
216
|
+
comments: [],
|
|
217
|
+
rows: []
|
|
218
|
+
}, (acc, { cells, sourceNumber }) => {
|
|
219
|
+
const c = comment(cells);
|
|
220
|
+
if (Option.isSome(c)) {
|
|
221
|
+
acc.comments.push(c.value);
|
|
222
|
+
return acc;
|
|
223
|
+
}
|
|
224
|
+
if (Arr.length(acc.headers) < dialect.headerRowCount) {
|
|
225
|
+
acc.headers.push(cellsOf(cells));
|
|
226
|
+
return acc;
|
|
227
|
+
}
|
|
228
|
+
const data = cellsOf(cells);
|
|
229
|
+
if (dialect.shouldSkipBlankRows && Arr.every(data, (v) => v === "")) return acc;
|
|
230
|
+
acc.rows.push({
|
|
231
|
+
sourceNumber,
|
|
232
|
+
cells: data
|
|
233
|
+
});
|
|
234
|
+
return acc;
|
|
235
|
+
});
|
|
236
|
+
const width = Math.max(0, ...Arr.map(state.headers, Arr.length), ...Arr.map(Arr.take(state.rows, 1), (r) => Arr.length(r.cells)));
|
|
237
|
+
const columns = Arr.makeBy(width, (i) => {
|
|
238
|
+
const titles = Arr.filter(Arr.map(state.headers, (h) => (h[i] ?? "").trim() === "" ? "" : h[i] ?? ""), (t) => t !== "");
|
|
239
|
+
return emptyColumn(Arr.isReadonlyArrayNonEmpty(titles) ? { [lang]: titles } : {});
|
|
240
|
+
});
|
|
241
|
+
return {
|
|
242
|
+
columns: dialect.headerRowCount === 0 ? Arr.map(columns, () => emptyColumn({})) : columns,
|
|
243
|
+
comments: Arr.appendAll(skippedComments, state.comments),
|
|
244
|
+
rows: state.rows
|
|
245
|
+
};
|
|
246
|
+
};
|
|
247
|
+
const nameOf = (column, number) => column.name ?? (column.titleName === void 0 ? `_col.${number}` : encodeName(column.titleName));
|
|
248
|
+
const annotateColumn = (column, number, sourceNumber, inherited, tableDirection) => {
|
|
249
|
+
const p = inherit(column.inherited, ...inherited);
|
|
250
|
+
const direction = p.textDirection ?? "inherit";
|
|
251
|
+
return {
|
|
252
|
+
number,
|
|
253
|
+
sourceNumber,
|
|
254
|
+
id: Option.fromNullishOr(column.id),
|
|
255
|
+
name: nameOf(column, number),
|
|
256
|
+
titles: column.titles,
|
|
257
|
+
isVirtual: column.isVirtual,
|
|
258
|
+
isSuppressed: column.isSuppressed,
|
|
259
|
+
datatype: p.datatype ?? string,
|
|
260
|
+
default: p.default ?? "",
|
|
261
|
+
lang: p.lang ?? "und",
|
|
262
|
+
null: p.null ?? [""],
|
|
263
|
+
ordered: p.ordered ?? false,
|
|
264
|
+
required: p.required ?? false,
|
|
265
|
+
separator: Option.fromNullishOr(p.separator),
|
|
266
|
+
textDirection: direction === "inherit" ? tableDirection : direction,
|
|
267
|
+
aboutUrl: Option.fromNullishOr(p.aboutUrl),
|
|
268
|
+
propertyUrl: Option.fromNullishOr(p.propertyUrl),
|
|
269
|
+
valueUrl: Option.fromNullishOr(p.valueUrl),
|
|
270
|
+
common: column.common
|
|
271
|
+
};
|
|
272
|
+
};
|
|
273
|
+
const keepsWhitespace = (base) => Arr.contains([
|
|
274
|
+
"string",
|
|
275
|
+
"json",
|
|
276
|
+
"xml",
|
|
277
|
+
"html",
|
|
278
|
+
"anyAtomicType"
|
|
279
|
+
], canonicalName(base));
|
|
280
|
+
const normalizeWhitespace = (value, base) => {
|
|
281
|
+
if (keepsWhitespace(base)) return value;
|
|
282
|
+
const spaced = value.replace(/[\r\n\t]/g, " ");
|
|
283
|
+
return canonicalName(base) === "normalizedString" ? spaced : spaced.trim().replace(/ {2,}/g, " ");
|
|
284
|
+
};
|
|
285
|
+
const parseItem = (text, column) => {
|
|
286
|
+
const s = text === "" ? column.default : text;
|
|
287
|
+
if (Arr.contains(column.null, s)) return {
|
|
288
|
+
value: Option.none(),
|
|
289
|
+
errors: []
|
|
290
|
+
};
|
|
291
|
+
const language = Option.some(column.lang);
|
|
292
|
+
return Result.match(parse(s, column.datatype, language), {
|
|
293
|
+
onSuccess: (value) => ({
|
|
294
|
+
value: Option.some(value),
|
|
295
|
+
errors: []
|
|
296
|
+
}),
|
|
297
|
+
onFailure: (errors) => ({
|
|
298
|
+
value: Option.some(stringValue(s, canonicalName(column.datatype.base) === "string" ? language : Option.none())),
|
|
299
|
+
errors
|
|
300
|
+
})
|
|
301
|
+
});
|
|
302
|
+
};
|
|
303
|
+
/**
|
|
304
|
+
* Parses a cell's string value with its column (Tabular Data Model §Parsing
|
|
305
|
+
* Cells): whitespace normalization, `default`, `null`, `separator` lists,
|
|
306
|
+
* the datatype and its constraints, and `required`.
|
|
307
|
+
*
|
|
308
|
+
* @since 0.1.0
|
|
309
|
+
* @category parsing
|
|
310
|
+
*/
|
|
311
|
+
const parseCell = (stringValue, column) => {
|
|
312
|
+
const base = column.datatype.base;
|
|
313
|
+
const normalized = normalizeWhitespace(stringValue, base);
|
|
314
|
+
const s = normalized === "" ? column.default : normalized;
|
|
315
|
+
const required = (value, errors) => ({
|
|
316
|
+
value,
|
|
317
|
+
errors: column.required && CellValue.$is("Null")(value) ? Arr.append(errors, "a required cell is null") : errors
|
|
318
|
+
});
|
|
319
|
+
return Option.match(column.separator, {
|
|
320
|
+
onNone: () => {
|
|
321
|
+
const item = parseItem(s, column);
|
|
322
|
+
return required(Option.match(item.value, {
|
|
323
|
+
onNone: () => nullValue,
|
|
324
|
+
onSome: (value) => CellValue.Single({ value })
|
|
325
|
+
}), item.errors);
|
|
326
|
+
},
|
|
327
|
+
onSome: (separator) => {
|
|
328
|
+
if (s === "") return {
|
|
329
|
+
value: CellValue.List({ values: [] }),
|
|
330
|
+
errors: column.required ? ["a required cell is empty"] : []
|
|
331
|
+
};
|
|
332
|
+
if (Arr.contains(column.null, s)) return required(nullValue, []);
|
|
333
|
+
const strip = !Arr.contains(["string", "anyAtomicType"], canonicalName(base));
|
|
334
|
+
const items = Arr.map(s.split(separator), (part) => parseItem(strip ? part.trim() : part, column));
|
|
335
|
+
return {
|
|
336
|
+
value: CellValue.List({ values: Arr.getSomes(Arr.map(items, (i) => i.value)) }),
|
|
337
|
+
errors: Arr.flatMap(items, (i) => i.errors)
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
};
|
|
342
|
+
const templateValue = (value) => CellValue.$match(value, {
|
|
343
|
+
Null: () => Option.none(),
|
|
344
|
+
Single: ({ value: v }) => Option.some(v.lexical),
|
|
345
|
+
List: ({ values }) => Option.some(Arr.map(values, (v) => v.lexical))
|
|
346
|
+
});
|
|
347
|
+
const expandTemplate = (template, variables, tableUrl) => {
|
|
348
|
+
const expanded = expand(template, variables);
|
|
349
|
+
return resolve(Option.getOrElse(expandPrefixed(expanded), () => expanded), tableUrl);
|
|
350
|
+
};
|
|
351
|
+
/**
|
|
352
|
+
* Annotates one table of a group from its source: reads it with the table's
|
|
353
|
+
* dialect, checks the metadata against the embedded metadata, and parses
|
|
354
|
+
* every cell. Returns the annotated table and its issues.
|
|
355
|
+
*
|
|
356
|
+
* @since 0.1.0
|
|
357
|
+
* @category annotating
|
|
358
|
+
*/
|
|
359
|
+
const annotate = (group, table, source, options = {}) => {
|
|
360
|
+
const validate = options.validate ?? false;
|
|
361
|
+
const level = validate ? error : warning;
|
|
362
|
+
const schema = schemaOfTable(group, table);
|
|
363
|
+
const dialect = dialectOfTable(group, table);
|
|
364
|
+
const tableInherited = inherit(table.inherited, group.inherited);
|
|
365
|
+
const schemaInherited = Option.match(schema, {
|
|
366
|
+
onNone: () => ({}),
|
|
367
|
+
onSome: (s) => s.inherited
|
|
368
|
+
});
|
|
369
|
+
const lang = inherit(schemaInherited, tableInherited).lang ?? "und";
|
|
370
|
+
const embedded = read(source, dialect, lang);
|
|
371
|
+
const tableDirection = table.tableDirection ?? group.tableDirection ?? "auto";
|
|
372
|
+
const compatibility = Option.flatMap(schema, (s) => checkCompatible(s.columns, embedded.columns, validate));
|
|
373
|
+
const described = Option.match(schema, {
|
|
374
|
+
onNone: () => embedded.columns,
|
|
375
|
+
onSome: (s) => s.columns
|
|
376
|
+
});
|
|
377
|
+
const real = Arr.filter(described, (c) => !c.isVirtual);
|
|
378
|
+
const virtual = Arr.filter(described, (c) => c.isVirtual);
|
|
379
|
+
const width = Math.max(Arr.length(real), Arr.length(embedded.columns));
|
|
380
|
+
const inherited = [
|
|
381
|
+
schemaInherited,
|
|
382
|
+
table.inherited,
|
|
383
|
+
group.inherited
|
|
384
|
+
];
|
|
385
|
+
const realColumns = Arr.makeBy(width, (i) => annotateColumn(real[i] ?? emptyColumn({}), i + 1, Option.some(dialect.skipColumns + i + 1), inherited, tableDirection));
|
|
386
|
+
const columns = Arr.appendAll(realColumns, Arr.map(virtual, (c, i) => annotateColumn(c, width + i + 1, Option.none(), inherited, tableDirection)));
|
|
387
|
+
const rowTitles = Option.getOrElse(Option.flatMap(schema, (s) => Option.fromNullishOr(s.rowTitles)), () => []);
|
|
388
|
+
const issues = Arr.fromOption(Option.map(compatibility, (message) => level(message, { table: table.url })));
|
|
389
|
+
const rows = Arr.map(embedded.rows, ({ sourceNumber, cells }, index) => {
|
|
390
|
+
const parsed = Arr.map(columns, (column, i) => parseCell(column.isVirtual ? "" : cells[i] ?? "", column));
|
|
391
|
+
const variables = Record.fromEntries(Arr.flatMap(columns, (c, i) => Arr.fromOption(Option.map(templateValue(parsed[i]?.value ?? nullValue), (v) => [c.name, v]))));
|
|
392
|
+
const annotated = Arr.map(columns, (column, i) => {
|
|
393
|
+
const p = parsed[i] ?? {
|
|
394
|
+
value: nullValue,
|
|
395
|
+
errors: []
|
|
396
|
+
};
|
|
397
|
+
const vars = {
|
|
398
|
+
...variables,
|
|
399
|
+
_column: String(column.number),
|
|
400
|
+
_sourceColumn: String(Option.getOrElse(column.sourceNumber, () => column.number)),
|
|
401
|
+
_row: String(index + 1),
|
|
402
|
+
_sourceRow: String(sourceNumber),
|
|
403
|
+
_name: decodeName(column.name)
|
|
404
|
+
};
|
|
405
|
+
const expand = (t) => Option.map(t, (template) => expandTemplate(template, vars, table.url));
|
|
406
|
+
Arr.forEach(p.errors, (message) => issues.push(level(`${column.name}: ${message}`, {
|
|
407
|
+
table: table.url,
|
|
408
|
+
row: sourceNumber,
|
|
409
|
+
column: Option.getOrElse(column.sourceNumber, () => column.number)
|
|
410
|
+
})));
|
|
411
|
+
return {
|
|
412
|
+
column: i,
|
|
413
|
+
stringValue: column.isVirtual ? "" : cells[i] ?? "",
|
|
414
|
+
value: p.value,
|
|
415
|
+
errors: p.errors,
|
|
416
|
+
aboutUrl: expand(column.aboutUrl),
|
|
417
|
+
propertyUrl: expand(column.propertyUrl),
|
|
418
|
+
valueUrl: CellValue.$is("Null")(p.value) && !column.isVirtual ? Option.none() : expand(column.valueUrl),
|
|
419
|
+
ordered: column.ordered,
|
|
420
|
+
textDirection: column.textDirection
|
|
421
|
+
};
|
|
422
|
+
});
|
|
423
|
+
const titles = Arr.flatMap(rowTitles, (name) => Option.match(Arr.findFirstIndex(columns, (c) => c.name === name), {
|
|
424
|
+
onNone: () => [],
|
|
425
|
+
onSome: (i) => CellValue.$match(annotated[i]?.value ?? nullValue, {
|
|
426
|
+
Null: () => [],
|
|
427
|
+
Single: ({ value }) => [value],
|
|
428
|
+
List: ({ values }) => values
|
|
429
|
+
})
|
|
430
|
+
}));
|
|
431
|
+
return {
|
|
432
|
+
number: index + 1,
|
|
433
|
+
sourceNumber,
|
|
434
|
+
cells: annotated,
|
|
435
|
+
titles
|
|
436
|
+
};
|
|
437
|
+
});
|
|
438
|
+
const common = Arr.isReadonlyArrayNonEmpty(embedded.comments) ? {
|
|
439
|
+
...table.common,
|
|
440
|
+
"rdfs:comment": Arr.appendAll(Arr.ensure(table.common["rdfs:comment"] ?? []), Arr.map(embedded.comments, (c) => ({ "@value": c })))
|
|
441
|
+
} : table.common;
|
|
442
|
+
return {
|
|
443
|
+
table: {
|
|
444
|
+
url: table.url,
|
|
445
|
+
id: Option.fromNullishOr(table.id),
|
|
446
|
+
schemaId: Option.flatMap(schema, (s) => Option.fromNullishOr(s.id)),
|
|
447
|
+
isSuppressed: table.isSuppressed,
|
|
448
|
+
tableDirection,
|
|
449
|
+
dialect,
|
|
450
|
+
notes: table.notes,
|
|
451
|
+
common,
|
|
452
|
+
columns,
|
|
453
|
+
rows,
|
|
454
|
+
primaryKey: Option.getOrElse(Option.flatMap(schema, (s) => Option.fromNullishOr(s.primaryKey)), () => []),
|
|
455
|
+
foreignKeys: Option.match(schema, {
|
|
456
|
+
onNone: () => [],
|
|
457
|
+
onSome: (s) => s.foreignKeys
|
|
458
|
+
}),
|
|
459
|
+
transformations: Arr.appendAll(table.transformations, group.transformations)
|
|
460
|
+
},
|
|
461
|
+
issues
|
|
462
|
+
};
|
|
463
|
+
};
|
|
464
|
+
const keyOf = (row, indexes) => Arr.join(Arr.map(indexes, (i) => CellValue.$match(row.cells[i]?.value ?? nullValue, {
|
|
465
|
+
Null: () => "\0",
|
|
466
|
+
Single: ({ value }) => value.lexical,
|
|
467
|
+
List: ({ values }) => Arr.join(Arr.map(values, (v) => v.lexical), "")
|
|
468
|
+
})), "");
|
|
469
|
+
const indexesOf = (table, names) => Option.all(Arr.map(names, (n) => Arr.findFirstIndex(table.columns, (c) => c.name === n)));
|
|
470
|
+
const countKeys = (table, indexes) => Arr.reduce(table.rows, HashMap.empty(), (map, row) => {
|
|
471
|
+
const key = keyOf(row, indexes);
|
|
472
|
+
return HashMap.set(map, key, Option.getOrElse(HashMap.get(map, key), () => 0) + 1);
|
|
473
|
+
});
|
|
474
|
+
/**
|
|
475
|
+
* Finds the table a foreign key references: by `resource` URL or by
|
|
476
|
+
* `schemaReference` (exactly one table must use that schema).
|
|
477
|
+
*
|
|
478
|
+
* @since 0.1.0
|
|
479
|
+
* @category keys
|
|
480
|
+
*/
|
|
481
|
+
const referencedTable = (tables, reference) => {
|
|
482
|
+
if (reference.resource !== void 0) {
|
|
483
|
+
const url = normalize(reference.resource);
|
|
484
|
+
return Arr.findFirst(tables, (t) => normalize(t.url) === url);
|
|
485
|
+
}
|
|
486
|
+
const schema = reference.schemaReference;
|
|
487
|
+
const matching = Arr.filter(tables, (t) => Option.exists(t.schemaId, (id) => id === schema));
|
|
488
|
+
return Arr.length(matching) === 1 ? Arr.head(matching) : Option.none();
|
|
489
|
+
};
|
|
490
|
+
/**
|
|
491
|
+
* Checks that every foreign key of a group references an existing table and
|
|
492
|
+
* columns, returning the errors (these stop processing).
|
|
493
|
+
*
|
|
494
|
+
* @since 0.1.0
|
|
495
|
+
* @category keys
|
|
496
|
+
*/
|
|
497
|
+
const checkForeignKeyTargets = (tables) => Arr.flatMap(tables, (table) => Arr.flatMap(table.foreignKeys, (fk) => Option.match(referencedTable(tables, fk.reference), {
|
|
498
|
+
onNone: () => [`${table.url}: a foreign key references a table that is not in the group`],
|
|
499
|
+
onSome: (target) => Option.isSome(indexesOf(target, fk.reference.columnReference)) ? [] : [`${table.url}: a foreign key references a column that is not in ${target.url}`]
|
|
500
|
+
})));
|
|
501
|
+
/**
|
|
502
|
+
* Validates the primary keys and foreign keys of a group's tables: each row's
|
|
503
|
+
* primary key is unique, and each row's foreign keys reference exactly one
|
|
504
|
+
* row.
|
|
505
|
+
*
|
|
506
|
+
* @since 0.1.0
|
|
507
|
+
* @category keys
|
|
508
|
+
*/
|
|
509
|
+
const validateKeys = (tables) => {
|
|
510
|
+
const primary = Arr.flatMap(tables, (table) => Option.match(indexesOf(table, table.primaryKey), {
|
|
511
|
+
onNone: () => [],
|
|
512
|
+
onSome: (indexes) => {
|
|
513
|
+
if (!Arr.isReadonlyArrayNonEmpty(indexes)) return [];
|
|
514
|
+
const counts = countKeys(table, indexes);
|
|
515
|
+
return Arr.flatMap(table.rows, (row) => Option.getOrElse(HashMap.get(counts, keyOf(row, indexes)), () => 0) > 1 ? [error("duplicate primary key", {
|
|
516
|
+
table: table.url,
|
|
517
|
+
row: row.sourceNumber
|
|
518
|
+
})] : []);
|
|
519
|
+
}
|
|
520
|
+
}));
|
|
521
|
+
const foreign = Arr.flatMap(tables, (table) => Arr.flatMap(table.foreignKeys, (fk) => Option.match(Option.all([indexesOf(table, fk.columnReference), Option.flatMap(referencedTable(tables, fk.reference), (target) => Option.map(indexesOf(target, fk.reference.columnReference), (ix) => [target, ix]))]), {
|
|
522
|
+
onNone: () => [],
|
|
523
|
+
onSome: ([indexes, [target, targetIndexes]]) => {
|
|
524
|
+
const counts = countKeys(target, targetIndexes);
|
|
525
|
+
return Arr.flatMap(table.rows, (row) => {
|
|
526
|
+
const n = Option.getOrElse(HashMap.get(counts, keyOf(row, indexes)), () => 0);
|
|
527
|
+
return n === 1 ? [] : [error(n === 0 ? `foreign key references no row of ${target.url}` : `foreign key references ${n} rows of ${target.url}`, {
|
|
528
|
+
table: table.url,
|
|
529
|
+
row: row.sourceNumber
|
|
530
|
+
})];
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
})));
|
|
534
|
+
return Arr.appendAll(primary, foreign);
|
|
535
|
+
};
|
|
536
|
+
export { parseCell as a, validateKeys as c, checkForeignKeyTargets as i, expand as l, Table_exports as n, read as o, annotate as r, referencedTable as s, CellValue as t };
|
|
537
|
+
|
|
538
|
+
//# sourceMappingURL=Table-BGgm9nbM.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Table-BGgm9nbM.mjs","names":["Url.encodeName","Metadata.inherit","Datatype.string","Datatype.canonicalName","Datatype.parse","Datatype.stringValue","UriTemplate.expand","Url.resolve","Vocab.expandPrefixed","Report.error","Report.warning","Metadata.schemaOfTable","Metadata.dialectOfTable","Metadata.checkCompatible","Url.decodeName","Url.normalize"],"sources":["../src/csvw/internal/uriTemplate.ts","../src/csvw/Table.ts"],"sourcesContent":["/**\n * RFC 6570 URI Template expansion (all four levels) over string and list\n * values, for the `aboutUrl`, `propertyUrl` and `valueUrl` templates.\n *\n * @internal\n */\nimport * as Arr from 'effect/Array';\nimport * as Option from 'effect/Option';\nimport * as Predicate from 'effect/Predicate';\nimport * as Record from 'effect/Record';\n\n/**\n * A template variable's value: a string, a list of strings, or absent.\n *\n * @internal\n */\nexport type Value = string | ReadonlyArray<string>;\n\ninterface Operator {\n readonly first: string;\n readonly sep: string;\n readonly named: boolean;\n readonly ifEmpty: string;\n readonly reserved: boolean;\n}\n\nconst operators: Readonly<Record<string, Operator>> = {\n '': { first: '', sep: ',', named: false, ifEmpty: '', reserved: false },\n '+': { first: '', sep: ',', named: false, ifEmpty: '', reserved: true },\n '.': { first: '.', sep: '.', named: false, ifEmpty: '', reserved: false },\n '/': { first: '/', sep: '/', named: false, ifEmpty: '', reserved: false },\n ';': { first: ';', sep: ';', named: true, ifEmpty: '', reserved: false },\n '?': { first: '?', sep: '&', named: true, ifEmpty: '=', reserved: false },\n '&': { first: '&', sep: '&', named: true, ifEmpty: '=', reserved: false },\n '#': { first: '#', sep: ',', named: false, ifEmpty: '', reserved: true },\n};\n\nconst utf8 = new TextEncoder();\n\nconst pct = (c: string): string =>\n Arr.join(\n Arr.map(Array.from(utf8.encode(c)), (b) => `%${b.toString(16).toUpperCase().padStart(2, '0')}`),\n '',\n );\n\nconst encodeUnreserved = (s: string): string => s.replace(/[^A-Za-z0-9\\-._~]/gu, (c) => pct(c));\n\nconst encodeReserved = (s: string): string =>\n s.replace(/%[0-9A-Fa-f]{2}|[^A-Za-z0-9\\-._~:/?#[\\]@!$&'()*+,;=]/gu, (c) =>\n c.startsWith('%') && c.length === 3 ? c : pct(c),\n );\n\ninterface VarSpec {\n readonly name: string;\n readonly prefix: Option.Option<number>;\n readonly explode: boolean;\n}\n\nconst parseVarSpec = (spec: string): VarSpec => {\n const explode = spec.endsWith('*');\n const body = explode ? spec.slice(0, -1) : spec;\n const colon = body.indexOf(':');\n return colon === -1\n ? { name: body, prefix: Option.none(), explode }\n : {\n name: body.slice(0, colon),\n prefix: Option.some(Number.parseInt(body.slice(colon + 1), 10)),\n explode,\n };\n};\n\nconst expandVar = (\n op: Operator,\n spec: VarSpec,\n defined: Option.Option<Value>,\n): ReadonlyArray<string> => {\n const enc = op.reserved ? encodeReserved : encodeUnreserved;\n if (Option.isNone(defined)) return [];\n const value = defined.value;\n if (Predicate.isString(value)) {\n const v = Option.match(spec.prefix, {\n onNone: () => value,\n onSome: (n) => Arr.join(Arr.take(Array.from(value), n), ''),\n });\n if (!op.named) return [enc(v)];\n return [v === '' ? `${spec.name}${op.ifEmpty}` : `${spec.name}=${enc(v)}`];\n }\n if (!Arr.isReadonlyArrayNonEmpty(value)) return [];\n if (!spec.explode) {\n const joined = Arr.join(Arr.map(value, enc), ',');\n return [op.named ? `${spec.name}=${joined}` : joined];\n }\n return Arr.map(value, (item) =>\n op.named\n ? item === ''\n ? `${spec.name}${op.ifEmpty}`\n : `${spec.name}=${enc(item)}`\n : enc(item),\n );\n};\n\nconst expandExpression = (\n expression: string,\n variables: Readonly<Record<string, Value>>,\n): string => {\n const head = expression.charAt(0);\n const op = Record.get(operators, head);\n const [operator, body] = Option.match(op, {\n onNone: () => [operators[''], expression] as const,\n onSome: (o) => [o, expression.slice(1)] as const,\n });\n const resolved = operator ?? { first: '', sep: ',', named: false, ifEmpty: '', reserved: false };\n const parts = Arr.flatMap(body.split(','), (raw) => {\n const spec = parseVarSpec(raw);\n return expandVar(resolved, spec, Record.get(variables, spec.name));\n });\n return Arr.match(parts, {\n onEmpty: () => '',\n onNonEmpty: (ps) => resolved.first + Arr.join(ps, resolved.sep),\n });\n};\n\n/**\n * Expands a URI template with the given variables (an absent variable is\n * undefined).\n *\n * @internal\n */\nexport const expand = (template: string, variables: Readonly<Record<string, Value>>): string =>\n template.replace(/\\{([^}]*)\\}/g, (_, e: string) => expandExpression(e, variables));\n","/**\n * The annotated tabular data model (Tabular Data Model §Tabular Data Models):\n * an already-parsed table (`Source`, rows of cell strings in file order) is\n * read with its dialect's row-level flags (skipped rows, header rows, comment\n * rows, blank rows, skipped columns, trimming), its embedded metadata is\n * extracted and checked against the metadata, and every cell is parsed with\n * its column's datatype into an annotated table, with the cell, primary-key\n * and foreign-key errors in a validation report.\n *\n * @since 0.1.0\n */\nimport * as Arr from 'effect/Array';\nimport * as Data from 'effect/Data';\nimport * as HashMap from 'effect/HashMap';\nimport * as Option from 'effect/Option';\nimport * as Record from 'effect/Record';\nimport * as Result from 'effect/Result';\nimport type * as Schema from 'effect/Schema';\nimport * as Datatype from './Datatype.ts';\nimport * as Metadata from './Metadata.ts';\nimport * as Report from './Report.ts';\nimport * as UriTemplate from './internal/uriTemplate.ts';\nimport * as Url from './internal/url.ts';\nimport * as Vocab from './internal/vocab.ts';\n\n// -----------------------------------------------------------------------------\n// Input\n// -----------------------------------------------------------------------------\n\n/**\n * An already-parsed tabular data file: its URL and its records, in file\n * order, as cell strings — every record, including skipped, header, comment\n * and blank ones, with quotes and escapes already removed. Trimming, comment\n * prefixes, skipped rows and columns and header rows are applied from the\n * table's dialect.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface Source {\n readonly url: string;\n readonly rows: ReadonlyArray<ReadonlyArray<string>>;\n}\n\n// -----------------------------------------------------------------------------\n// Annotated model\n// -----------------------------------------------------------------------------\n\n/**\n * An annotated column, with every inherited property resolved.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface Column {\n /** Position among the table's columns, from 1. */\n readonly number: number;\n /** Position in the source file, from 1 (`None` for a virtual column). */\n readonly sourceNumber: Option.Option<number>;\n readonly id: Option.Option<string>;\n /** The column name (percent-encoded when derived from a title). */\n readonly name: string;\n readonly titles: Metadata.LanguageMap;\n readonly isVirtual: boolean;\n readonly isSuppressed: boolean;\n readonly datatype: Datatype.Datatype;\n readonly default: string;\n readonly lang: string;\n readonly null: ReadonlyArray<string>;\n readonly ordered: boolean;\n readonly required: boolean;\n readonly separator: Option.Option<string>;\n readonly textDirection: 'ltr' | 'rtl' | 'auto';\n readonly aboutUrl: Option.Option<string>;\n readonly propertyUrl: Option.Option<string>;\n readonly valueUrl: Option.Option<string>;\n readonly common: Metadata.CommonProperties;\n}\n\n/**\n * The value of a cell: null, a single value, or a list of values (a column\n * with a `separator`).\n *\n * @since 0.1.0\n * @category models\n */\nexport type CellValue = Data.TaggedEnum<{\n /** No value (a variant without fields). */\n Null: { readonly value?: never };\n Single: { readonly value: Datatype.Value };\n List: { readonly values: ReadonlyArray<Datatype.Value> };\n}>;\n\n/**\n * Constructors and matchers for `CellValue`.\n *\n * @since 0.1.0\n * @category models\n */\nexport const CellValue = Data.taggedEnum<CellValue>();\n\nconst nullValue: CellValue = CellValue.Null({});\n\n/**\n * An annotated cell.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface Cell {\n /** Index of the cell's column in `Table.columns`. */\n readonly column: number;\n readonly stringValue: string;\n readonly value: CellValue;\n readonly errors: ReadonlyArray<string>;\n readonly aboutUrl: Option.Option<string>;\n readonly propertyUrl: Option.Option<string>;\n readonly valueUrl: Option.Option<string>;\n readonly ordered: boolean;\n readonly textDirection: 'ltr' | 'rtl' | 'auto';\n}\n\n/**\n * An annotated row.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface Row {\n /** Position among the table's rows, from 1. */\n readonly number: number;\n /** Position in the source file, from 1. */\n readonly sourceNumber: number;\n readonly cells: ReadonlyArray<Cell>;\n /** The row titles (from the schema's `rowTitles` columns). */\n readonly titles: ReadonlyArray<Datatype.Value>;\n}\n\n/**\n * An annotated table.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface Table {\n readonly url: string;\n readonly id: Option.Option<string>;\n readonly schemaId: Option.Option<string>;\n readonly isSuppressed: boolean;\n readonly tableDirection: Metadata.TableDirection;\n readonly dialect: Metadata.Dialect;\n readonly notes: ReadonlyArray<Schema.Json>;\n /** Non-core annotations: the table description's common properties. */\n readonly common: Metadata.CommonProperties;\n readonly columns: ReadonlyArray<Column>;\n readonly rows: ReadonlyArray<Row>;\n readonly primaryKey: ReadonlyArray<string>;\n readonly foreignKeys: ReadonlyArray<Metadata.ForeignKey>;\n readonly transformations: ReadonlyArray<Metadata.Transformation>;\n}\n\n/**\n * An annotated group of tables.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface TableGroup {\n readonly id: Option.Option<string>;\n readonly notes: ReadonlyArray<Schema.Json>;\n readonly common: Metadata.CommonProperties;\n readonly tables: ReadonlyArray<Table>;\n}\n\n// -----------------------------------------------------------------------------\n// Reading rows and embedded metadata\n// -----------------------------------------------------------------------------\n\n/**\n * A data row as read from a source: its source row number and its cells\n * (after skipped columns, trimmed).\n *\n * @since 0.1.0\n * @category models\n */\nexport interface SourceRow {\n readonly sourceNumber: number;\n readonly cells: ReadonlyArray<string>;\n}\n\n/**\n * What reading a source with a dialect yields: the embedded metadata (column\n * titles from the header rows, comment rows) and the data rows.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface Embedded {\n readonly columns: ReadonlyArray<Metadata.Column>;\n readonly comments: ReadonlyArray<string>;\n readonly rows: ReadonlyArray<SourceRow>;\n}\n\ninterface Reading {\n readonly headers: Array<ReadonlyArray<string>>;\n readonly comments: Array<string>;\n readonly rows: Array<SourceRow>;\n}\n\nconst trimCell = (value: string, trim: Metadata.Trim): string =>\n trim === 'true'\n ? value.trim()\n : trim === 'start'\n ? value.trimStart()\n : trim === 'end'\n ? value.trimEnd()\n : value;\n\nconst emptyColumn = (titles: Metadata.LanguageMap): Metadata.Column => ({\n ...Option.match(Option.flatMap(Arr.head(Record.values(titles)), Arr.head), {\n onNone: () => ({}),\n onSome: (titleName) => ({ titleName }),\n }),\n titles,\n isVirtual: false,\n isSuppressed: false,\n inherited: {},\n common: {},\n});\n\n/**\n * Reads a source with a dialect (Tabular Data Model §Parsing Tabular Data,\n * from the point a row's cells are known): skipped rows and comment rows\n * become comments, header rows become column titles in `lang`, and the\n * remaining rows (less blank ones when `skipBlankRows`) are the data.\n *\n * @since 0.1.0\n * @category reading\n */\nexport const read = (source: Source, dialect: Metadata.Dialect, lang: string): Embedded => {\n const prefix = Option.fromNullishOr(dialect.commentPrefix);\n const content = (cells: ReadonlyArray<string>) => Arr.join(cells, dialect.delimiter);\n const comment = (cells: ReadonlyArray<string>): Option.Option<string> =>\n Option.flatMap(prefix, (p) => {\n const c = content(cells);\n return c.startsWith(p) ? Option.some(c.slice(p.length).trim()) : Option.none();\n });\n const cellsOf = (cells: ReadonlyArray<string>) =>\n Arr.map(Arr.drop(cells, dialect.skipColumns), (c) => trimCell(c, dialect.trim));\n const numbered = Arr.map(source.rows, (cells, i) => ({ cells, sourceNumber: i + 1 }));\n const [skipped, rest] = Arr.splitAt(numbered, dialect.skipRows);\n const skippedComments = Arr.flatMap(skipped, ({ cells }) =>\n Option.match(comment(cells), {\n onSome: (c) => [c],\n onNone: () => {\n const c = content(cells).trim();\n return c === '' ? [] : [c];\n },\n }),\n );\n // Header rows are the first `headerRowCount` rows that are not comments.\n const initial: Reading = { headers: [], comments: [], rows: [] };\n const state = Arr.reduce(rest, initial, (acc, { cells, sourceNumber }) => {\n const c = comment(cells);\n if (Option.isSome(c)) {\n acc.comments.push(c.value);\n return acc;\n }\n if (Arr.length(acc.headers) < dialect.headerRowCount) {\n acc.headers.push(cellsOf(cells));\n return acc;\n }\n const data = cellsOf(cells);\n if (dialect.shouldSkipBlankRows && Arr.every(data, (v) => v === '')) return acc;\n acc.rows.push({ sourceNumber, cells: data });\n return acc;\n });\n const width = Math.max(\n 0,\n ...Arr.map(state.headers, Arr.length),\n ...Arr.map(Arr.take(state.rows, 1), (r) => Arr.length(r.cells)),\n );\n const columns = Arr.makeBy(width, (i) => {\n const titles = Arr.filter(\n Arr.map(state.headers, (h) => ((h[i] ?? '').trim() === '' ? '' : (h[i] ?? ''))),\n (t) => t !== '',\n );\n return emptyColumn(Arr.isReadonlyArrayNonEmpty(titles) ? { [lang]: titles } : {});\n });\n return {\n columns: dialect.headerRowCount === 0 ? Arr.map(columns, () => emptyColumn({})) : columns,\n comments: Arr.appendAll(skippedComments, state.comments),\n rows: state.rows,\n };\n};\n\n// -----------------------------------------------------------------------------\n// Columns\n// -----------------------------------------------------------------------------\n\nconst nameOf = (column: Metadata.Column, number: number): string =>\n column.name ??\n (column.titleName === undefined ? `_col.${number}` : Url.encodeName(column.titleName));\n\nconst annotateColumn = (\n column: Metadata.Column,\n number: number,\n sourceNumber: Option.Option<number>,\n inherited: ReadonlyArray<Metadata.Inherited>,\n tableDirection: Metadata.TableDirection,\n): Column => {\n const p = Metadata.inherit(column.inherited, ...inherited);\n const direction = p.textDirection ?? 'inherit';\n return {\n number,\n sourceNumber,\n id: Option.fromNullishOr(column.id),\n name: nameOf(column, number),\n titles: column.titles,\n isVirtual: column.isVirtual,\n isSuppressed: column.isSuppressed,\n datatype: p.datatype ?? Datatype.string,\n default: p.default ?? '',\n lang: p.lang ?? 'und',\n null: p.null ?? [''],\n ordered: p.ordered ?? false,\n required: p.required ?? false,\n separator: Option.fromNullishOr(p.separator),\n textDirection: direction === 'inherit' ? tableDirection : direction,\n aboutUrl: Option.fromNullishOr(p.aboutUrl),\n propertyUrl: Option.fromNullishOr(p.propertyUrl),\n valueUrl: Option.fromNullishOr(p.valueUrl),\n common: column.common,\n };\n};\n\n// -----------------------------------------------------------------------------\n// Cells\n// -----------------------------------------------------------------------------\n\nconst keepsWhitespace = (base: string): boolean =>\n Arr.contains(['string', 'json', 'xml', 'html', 'anyAtomicType'], Datatype.canonicalName(base));\n\nconst normalizeWhitespace = (value: string, base: string): string => {\n if (keepsWhitespace(base)) return value;\n const spaced = value.replace(/[\\r\\n\\t]/g, ' ');\n return Datatype.canonicalName(base) === 'normalizedString'\n ? spaced\n : spaced.trim().replace(/ {2,}/g, ' ');\n};\n\ninterface Parsed {\n readonly value: CellValue;\n readonly errors: ReadonlyArray<string>;\n}\n\ninterface ParsedItem {\n readonly value: Option.Option<Datatype.Value>;\n readonly errors: ReadonlyArray<string>;\n}\n\nconst parseItem = (text: string, column: Column): ParsedItem => {\n const s = text === '' ? column.default : text;\n if (Arr.contains(column.null, s)) return { value: Option.none(), errors: [] };\n const language = Option.some(column.lang);\n return Result.match(Datatype.parse(s, column.datatype, language), {\n onSuccess: (value) => ({ value: Option.some(value), errors: [] }),\n onFailure: (errors) => ({\n value: Option.some(\n Datatype.stringValue(\n s,\n Datatype.canonicalName(column.datatype.base) === 'string' ? language : Option.none(),\n ),\n ),\n errors,\n }),\n });\n};\n\n/**\n * Parses a cell's string value with its column (Tabular Data Model §Parsing\n * Cells): whitespace normalization, `default`, `null`, `separator` lists,\n * the datatype and its constraints, and `required`.\n *\n * @since 0.1.0\n * @category parsing\n */\nexport const parseCell = (stringValue: string, column: Column): Parsed => {\n const base = column.datatype.base;\n const normalized = normalizeWhitespace(stringValue, base);\n const s = normalized === '' ? column.default : normalized;\n const required = (value: CellValue, errors: ReadonlyArray<string>): Parsed => ({\n value,\n errors:\n column.required && CellValue.$is('Null')(value)\n ? Arr.append(errors, 'a required cell is null')\n : errors,\n });\n return Option.match(column.separator, {\n onNone: () => {\n const item = parseItem(s, column);\n return required(\n Option.match(item.value, {\n onNone: () => nullValue,\n onSome: (value) => CellValue.Single({ value }),\n }),\n item.errors,\n );\n },\n onSome: (separator) => {\n if (s === '')\n return {\n value: CellValue.List({ values: [] }),\n errors: column.required ? ['a required cell is empty'] : [],\n };\n if (Arr.contains(column.null, s)) return required(nullValue, []);\n const strip = !Arr.contains(['string', 'anyAtomicType'], Datatype.canonicalName(base));\n const items = Arr.map(s.split(separator), (part) =>\n parseItem(strip ? part.trim() : part, column),\n );\n return {\n value: CellValue.List({ values: Arr.getSomes(Arr.map(items, (i) => i.value)) }),\n errors: Arr.flatMap(items, (i) => i.errors),\n };\n },\n });\n};\n\nconst templateValue = (value: CellValue): Option.Option<UriTemplate.Value> =>\n CellValue.$match(value, {\n Null: () => Option.none(),\n Single: ({ value: v }) => Option.some(v.lexical),\n List: ({ values }) => Option.some(Arr.map(values, (v) => v.lexical)),\n });\n\nconst expandTemplate = (\n template: string,\n variables: Readonly<Record<string, UriTemplate.Value>>,\n tableUrl: string,\n): string => {\n const expanded = UriTemplate.expand(template, variables);\n return Url.resolve(\n Option.getOrElse(Vocab.expandPrefixed(expanded), () => expanded),\n tableUrl,\n );\n};\n\n// -----------------------------------------------------------------------------\n// Annotating a table\n// -----------------------------------------------------------------------------\n\n/**\n * Options for annotating tables.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface Options {\n /**\n * Validate (default `false`): metadata incompatible with the data and\n * invalid cells are errors rather than warnings, and primary and foreign\n * keys are checked.\n */\n readonly validate?: boolean | undefined;\n}\n\n/**\n * An annotated table and the issues raised while annotating it.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface Annotated {\n readonly table: Table;\n readonly issues: ReadonlyArray<Report.Issue>;\n}\n\n/**\n * Annotates one table of a group from its source: reads it with the table's\n * dialect, checks the metadata against the embedded metadata, and parses\n * every cell. Returns the annotated table and its issues.\n *\n * @since 0.1.0\n * @category annotating\n */\nexport const annotate = (\n group: Metadata.TableGroup,\n table: Metadata.Table,\n source: Source,\n options: Options = {},\n): Annotated => {\n const validate = options.validate ?? false;\n const level = validate ? Report.error : Report.warning;\n const schema = Metadata.schemaOfTable(group, table);\n const dialect = Metadata.dialectOfTable(group, table);\n const tableInherited = Metadata.inherit(table.inherited, group.inherited);\n const schemaInherited = Option.match(schema, { onNone: () => ({}), onSome: (s) => s.inherited });\n const lang = Metadata.inherit(schemaInherited, tableInherited).lang ?? 'und';\n const embedded = read(source, dialect, lang);\n const tableDirection = table.tableDirection ?? group.tableDirection ?? 'auto';\n const compatibility = Option.flatMap(schema, (s) =>\n Metadata.checkCompatible(s.columns, embedded.columns, validate),\n );\n const described = Option.match(schema, {\n onNone: () => embedded.columns,\n onSome: (s) => s.columns,\n });\n const real = Arr.filter(described, (c) => !c.isVirtual);\n const virtual = Arr.filter(described, (c) => c.isVirtual);\n const width = Math.max(Arr.length(real), Arr.length(embedded.columns));\n const inherited = [schemaInherited, table.inherited, group.inherited];\n const realColumns = Arr.makeBy(width, (i) =>\n annotateColumn(\n real[i] ?? emptyColumn({}),\n i + 1,\n Option.some(dialect.skipColumns + i + 1),\n inherited,\n tableDirection,\n ),\n );\n const columns = Arr.appendAll(\n realColumns,\n Arr.map(virtual, (c, i) =>\n annotateColumn(c, width + i + 1, Option.none(), inherited, tableDirection),\n ),\n );\n const rowTitles = Option.getOrElse(\n Option.flatMap(schema, (s) => Option.fromNullishOr(s.rowTitles)),\n () => [],\n );\n const issues: Array<Report.Issue> = Arr.fromOption(\n Option.map(compatibility, (message) => level(message, { table: table.url })),\n );\n const rows = Arr.map(embedded.rows, ({ sourceNumber, cells }, index): Row => {\n const parsed = Arr.map(columns, (column, i) =>\n parseCell(column.isVirtual ? '' : (cells[i] ?? ''), column),\n );\n const variables: Record<string, UriTemplate.Value> = Record.fromEntries(\n Arr.flatMap(columns, (c, i) =>\n Arr.fromOption(\n Option.map(templateValue(parsed[i]?.value ?? nullValue), (v) => [c.name, v] as const),\n ),\n ),\n );\n const annotated = Arr.map(columns, (column, i): Cell => {\n const p = parsed[i] ?? { value: nullValue, errors: [] };\n const vars = {\n ...variables,\n _column: String(column.number),\n _sourceColumn: String(Option.getOrElse(column.sourceNumber, () => column.number)),\n _row: String(index + 1),\n _sourceRow: String(sourceNumber),\n _name: Url.decodeName(column.name),\n };\n const expand = (t: Option.Option<string>) =>\n Option.map(t, (template) => expandTemplate(template, vars, table.url));\n Arr.forEach(p.errors, (message) =>\n issues.push(\n level(`${column.name}: ${message}`, {\n table: table.url,\n row: sourceNumber,\n column: Option.getOrElse(column.sourceNumber, () => column.number),\n }),\n ),\n );\n return {\n column: i,\n stringValue: column.isVirtual ? '' : (cells[i] ?? ''),\n value: p.value,\n errors: p.errors,\n aboutUrl: expand(column.aboutUrl),\n propertyUrl: expand(column.propertyUrl),\n valueUrl:\n CellValue.$is('Null')(p.value) && !column.isVirtual\n ? Option.none()\n : expand(column.valueUrl),\n ordered: column.ordered,\n textDirection: column.textDirection,\n };\n });\n const titles = Arr.flatMap(rowTitles, (name) =>\n Option.match(\n Arr.findFirstIndex(columns, (c) => c.name === name),\n {\n onNone: () => [],\n onSome: (i) =>\n CellValue.$match(annotated[i]?.value ?? nullValue, {\n Null: () => [],\n Single: ({ value }) => [value],\n List: ({ values }) => values,\n }),\n },\n ),\n );\n return { number: index + 1, sourceNumber, cells: annotated, titles };\n });\n const common = Arr.isReadonlyArrayNonEmpty(embedded.comments)\n ? {\n ...table.common,\n 'rdfs:comment': Arr.appendAll(\n Arr.ensure(table.common['rdfs:comment'] ?? []),\n Arr.map(embedded.comments, (c): Schema.Json => ({ '@value': c })),\n ),\n }\n : table.common;\n return {\n table: {\n url: table.url,\n id: Option.fromNullishOr(table.id),\n schemaId: Option.flatMap(schema, (s) => Option.fromNullishOr(s.id)),\n isSuppressed: table.isSuppressed,\n tableDirection,\n dialect,\n notes: table.notes,\n common,\n columns,\n rows,\n primaryKey: Option.getOrElse(\n Option.flatMap(schema, (s) => Option.fromNullishOr(s.primaryKey)),\n () => [],\n ),\n foreignKeys: Option.match(schema, { onNone: () => [], onSome: (s) => s.foreignKeys }),\n transformations: Arr.appendAll(table.transformations, group.transformations),\n },\n issues,\n };\n};\n\n// -----------------------------------------------------------------------------\n// Keys\n// -----------------------------------------------------------------------------\n\nconst keyOf = (row: Row, indexes: ReadonlyArray<number>): string =>\n Arr.join(\n Arr.map(indexes, (i) =>\n CellValue.$match(row.cells[i]?.value ?? nullValue, {\n Null: () => '\\u0000',\n Single: ({ value }) => value.lexical,\n List: ({ values }) =>\n Arr.join(\n Arr.map(values, (v) => v.lexical),\n '\\u0001',\n ),\n }),\n ),\n '\\u0002',\n );\n\nconst indexesOf = (\n table: Table,\n names: ReadonlyArray<string>,\n): Option.Option<ReadonlyArray<number>> =>\n Option.all(Arr.map(names, (n) => Arr.findFirstIndex(table.columns, (c) => c.name === n)));\n\nconst countKeys = (table: Table, indexes: ReadonlyArray<number>): HashMap.HashMap<string, number> =>\n Arr.reduce(table.rows, HashMap.empty<string, number>(), (map, row) => {\n const key = keyOf(row, indexes);\n return HashMap.set(map, key, Option.getOrElse(HashMap.get(map, key), () => 0) + 1);\n });\n\n/**\n * Finds the table a foreign key references: by `resource` URL or by\n * `schemaReference` (exactly one table must use that schema).\n *\n * @since 0.1.0\n * @category keys\n */\nexport const referencedTable = (\n tables: ReadonlyArray<Table>,\n reference: Metadata.Reference,\n): Option.Option<Table> => {\n if (reference.resource !== undefined) {\n const url = Url.normalize(reference.resource);\n return Arr.findFirst(tables, (t) => Url.normalize(t.url) === url);\n }\n const schema = reference.schemaReference;\n const matching = Arr.filter(tables, (t) => Option.exists(t.schemaId, (id) => id === schema));\n return Arr.length(matching) === 1 ? Arr.head(matching) : Option.none();\n};\n\n/**\n * Checks that every foreign key of a group references an existing table and\n * columns, returning the errors (these stop processing).\n *\n * @since 0.1.0\n * @category keys\n */\nexport const checkForeignKeyTargets = (tables: ReadonlyArray<Table>): ReadonlyArray<string> =>\n Arr.flatMap(tables, (table) =>\n Arr.flatMap(table.foreignKeys, (fk) =>\n Option.match(referencedTable(tables, fk.reference), {\n onNone: () => [`${table.url}: a foreign key references a table that is not in the group`],\n onSome: (target) =>\n Option.isSome(indexesOf(target, fk.reference.columnReference))\n ? []\n : [`${table.url}: a foreign key references a column that is not in ${target.url}`],\n }),\n ),\n );\n\n/**\n * Validates the primary keys and foreign keys of a group's tables: each row's\n * primary key is unique, and each row's foreign keys reference exactly one\n * row.\n *\n * @since 0.1.0\n * @category keys\n */\nexport const validateKeys = (tables: ReadonlyArray<Table>): ReadonlyArray<Report.Issue> => {\n const primary = Arr.flatMap(tables, (table) =>\n Option.match(indexesOf(table, table.primaryKey), {\n onNone: () => [],\n onSome: (indexes) => {\n if (!Arr.isReadonlyArrayNonEmpty(indexes)) return [];\n const counts = countKeys(table, indexes);\n return Arr.flatMap(table.rows, (row) =>\n Option.getOrElse(HashMap.get(counts, keyOf(row, indexes)), () => 0) > 1\n ? [Report.error('duplicate primary key', { table: table.url, row: row.sourceNumber })]\n : [],\n );\n },\n }),\n );\n const foreign = Arr.flatMap(tables, (table) =>\n Arr.flatMap(table.foreignKeys, (fk) =>\n Option.match(\n Option.all([\n indexesOf(table, fk.columnReference),\n Option.flatMap(referencedTable(tables, fk.reference), (target) =>\n Option.map(\n indexesOf(target, fk.reference.columnReference),\n (ix) => [target, ix] as const,\n ),\n ),\n ]),\n {\n onNone: () => [],\n onSome: ([indexes, [target, targetIndexes]]) => {\n const counts = countKeys(target, targetIndexes);\n return Arr.flatMap(table.rows, (row) => {\n const n = Option.getOrElse(HashMap.get(counts, keyOf(row, indexes)), () => 0);\n return n === 1\n ? []\n : [\n Report.error(\n n === 0\n ? `foreign key references no row of ${target.url}`\n : `foreign key references ${n} rows of ${target.url}`,\n { table: table.url, row: row.sourceNumber },\n ),\n ];\n });\n },\n },\n ),\n ),\n );\n return Arr.appendAll(primary, foreign);\n};\n"],"mappings":"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"}
|