From adeb755455649c26e5c458924c1b5b3bea220c55 Mon Sep 17 00:00:00 2001 From: Franklin Koch Date: Wed, 8 Oct 2025 13:30:53 -0600 Subject: [PATCH 1/3] =?UTF-8?q?=F0=9F=9A=80=20Non-article=20support,=20com?= =?UTF-8?q?munity=20support,=20more=20updates...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 1002 +++++++++++++++++++++++--------------------- package.json | 8 +- src/cli/deposit.ts | 158 ++++--- src/cli/utils.ts | 36 +- src/index.ts | 59 ++- 5 files changed, 720 insertions(+), 543 deletions(-) diff --git a/package-lock.json b/package-lock.json index 797eec0..7cbee4b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,10 +13,10 @@ "commander": "^11.1.0", "inquirer": "^9.2.23", "js-yaml": "^4.1.0", - "myst-cli": "^1.3.12", - "myst-cli-utils": "^2.0.10", - "myst-common": "^1.7.1", - "myst-frontmatter": "^1.7.1" + "myst-cli": "^1.6.2", + "myst-cli-utils": "^2.0.11", + "myst-common": "^1.8.2", + "myst-frontmatter": "^1.8.2" }, "bin": { "zenodo": "dist/zenodo.cjs" @@ -349,9 +349,9 @@ } }, "node_modules/@citation-js/core": { - "version": "0.7.14", - "resolved": "https://registry.npmjs.org/@citation-js/core/-/core-0.7.14.tgz", - "integrity": "sha512-dgeGqYDSQmn2MtnWZkwPGpJQPh43yr1lAAr9jl1NJ9pIY1RXUQxtlAUZVur0V9PHdbfQC+kkvB1KC3VpgVV3MA==", + "version": "0.7.18", + "resolved": "https://registry.npmjs.org/@citation-js/core/-/core-0.7.18.tgz", + "integrity": "sha512-EjLuZWA5156dIFGdF7OnyPyWFBW43B8Ckje6Sn/W2RFxHDu0oACvW4/6TNgWT80jhEA4bVFm7ahrZe9MJ2B2UQ==", "license": "MIT", "dependencies": { "@citation-js/date": "^0.5.0", @@ -382,9 +382,9 @@ } }, "node_modules/@citation-js/plugin-bibtex": { - "version": "0.7.16", - "resolved": "https://registry.npmjs.org/@citation-js/plugin-bibtex/-/plugin-bibtex-0.7.16.tgz", - "integrity": "sha512-Udeli19VAoFjOw0H1bB1KgmekRoW6XP5cdR3OQF5c2Mt1tZatXWcSQVdq+FeLKzodRocZXG5NFRvjyUZjVbV6A==", + "version": "0.7.18", + "resolved": "https://registry.npmjs.org/@citation-js/plugin-bibtex/-/plugin-bibtex-0.7.18.tgz", + "integrity": "sha512-TdsZSMpgpfcx2NMPu0KiulEoecllwT5EtRUzAJl2pDsdPD1tUqqbyj/NBi0l8fwNy1r7WwAqSFGiqGPjQWpFdg==", "license": "MIT", "dependencies": { "@citation-js/date": "^0.5.0", @@ -399,9 +399,9 @@ } }, "node_modules/@citation-js/plugin-csl": { - "version": "0.7.14", - "resolved": "https://registry.npmjs.org/@citation-js/plugin-csl/-/plugin-csl-0.7.14.tgz", - "integrity": "sha512-7AKB8lMz1IqdtoE33NnWIpteLYMuSl3xqT+Cax7sQKwAIJEoq2HBmb43Ja8xQQ36nREAupQJv1V6XksIAmYnCg==", + "version": "0.7.18", + "resolved": "https://registry.npmjs.org/@citation-js/plugin-csl/-/plugin-csl-0.7.18.tgz", + "integrity": "sha512-cJcOdEZurmtIxNj0d4cOERHpVQJB/mN3YPSDNqfI/xTFRN3bWDpFAsaqubPtMO2ZPpoDS+ZGIP1kggbwCfMmlA==", "license": "MIT", "dependencies": { "@citation-js/date": "^0.5.0", @@ -1023,9 +1023,9 @@ "license": "MIT" }, "node_modules/@jupyter/ydoc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@jupyter/ydoc/-/ydoc-2.1.2.tgz", - "integrity": "sha512-eoKEh8GnasIsk+NHwgwoUf1YgFo81ysyOeNEj3+3/LvTHj4H9FVj2EDH1sVH8kft4CP+X4KdpYgSCqYyuZafVw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jupyter/ydoc/-/ydoc-3.1.0.tgz", + "integrity": "sha512-+hLNUBZr8Zz8NiuaoYKINDURDJHbjFGxg8EcSU52y+rBe412TsoFxfPSng4eP7w3cZFrVlm7D+8K0nAMHxj0ZQ==", "license": "BSD-3-Clause", "dependencies": { "@jupyterlab/nbformat": "^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0", @@ -1037,59 +1037,59 @@ } }, "node_modules/@jupyterlab/coreutils": { - "version": "6.2.5", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-6.2.5.tgz", - "integrity": "sha512-P3HniEv3bZ3EvV3zUwCmruR713fclGvSTfsuwFPBgI8M3rNIZYqGQ13xkTun7Zl6DUr2E8mrC/cq9jNwxW33yw==", + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-6.4.9.tgz", + "integrity": "sha512-UcuKl+ioafIYdJM2XEb+f/VOJy4a3Xcdp6G/Bpw2BGEhlL+E6zgSjuLZOIlwaJb1B3qJGvjpW64bDPbM5jDEKA==", "license": "BSD-3-Clause", "dependencies": { - "@lumino/coreutils": "^2.1.2", - "@lumino/disposable": "^2.1.2", - "@lumino/signaling": "^2.1.2", + "@lumino/coreutils": "^2.2.1", + "@lumino/disposable": "^2.1.4", + "@lumino/signaling": "^2.1.4", "minimist": "~1.2.0", "path-browserify": "^1.0.0", "url-parse": "~1.5.4" } }, "node_modules/@jupyterlab/nbformat": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@jupyterlab/nbformat/-/nbformat-4.2.5.tgz", - "integrity": "sha512-DF8bdlsEziUR5oKUr3Mm0wUx7kHZjlAtEjD6oJ8cOogQqTrMyBnUAgVjPr9QQob5J7qiyzz9aW2DYtaX+jFhng==", + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/@jupyterlab/nbformat/-/nbformat-4.4.9.tgz", + "integrity": "sha512-8Zb1byR338T+8Ty/Rx1jkKj986Xp7EjXgRqDKsuRLTvE2dpR17FitCKqF/J3ia33MNkElIk9Aj+fatNm8ypGdA==", "license": "BSD-3-Clause", "dependencies": { - "@lumino/coreutils": "^2.1.2" + "@lumino/coreutils": "^2.2.1" } }, "node_modules/@jupyterlab/services": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@jupyterlab/services/-/services-7.2.5.tgz", - "integrity": "sha512-Ya/jA8p8WOfiPPERinZasigsfSth54nNNWBQUrT2MEitdka3jVsjC3fR9R5XBpYQ59Qkczz782jMfXvaWNfCHQ==", + "version": "7.4.9", + "resolved": "https://registry.npmjs.org/@jupyterlab/services/-/services-7.4.9.tgz", + "integrity": "sha512-gBapumGTArPUWO8IHgBgFybDgDbixjlRmqd2vgiscb+dhD1gH2WHHlmpJwuzTtX3tng72bDPYgnG8Zc22wtUWQ==", "license": "BSD-3-Clause", "dependencies": { - "@jupyter/ydoc": "^2.0.1", - "@jupyterlab/coreutils": "^6.2.5", - "@jupyterlab/nbformat": "^4.2.5", - "@jupyterlab/settingregistry": "^4.2.5", - "@jupyterlab/statedb": "^4.2.5", - "@lumino/coreutils": "^2.1.2", - "@lumino/disposable": "^2.1.2", - "@lumino/polling": "^2.1.2", - "@lumino/properties": "^2.0.1", - "@lumino/signaling": "^2.1.2", + "@jupyter/ydoc": "^3.1.0", + "@jupyterlab/coreutils": "^6.4.9", + "@jupyterlab/nbformat": "^4.4.9", + "@jupyterlab/settingregistry": "^4.4.9", + "@jupyterlab/statedb": "^4.4.9", + "@lumino/coreutils": "^2.2.1", + "@lumino/disposable": "^2.1.4", + "@lumino/polling": "^2.1.4", + "@lumino/properties": "^2.0.3", + "@lumino/signaling": "^2.1.4", "ws": "^8.11.0" } }, "node_modules/@jupyterlab/settingregistry": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@jupyterlab/settingregistry/-/settingregistry-4.2.5.tgz", - "integrity": "sha512-RTHwFoldrP8h4hMxZrKafrOt3mLYKAcmUsnExkzKCqHuc3CIOh9hj+eN3gCh1mxjabbP9QIK0/08e89Rp/EG5w==", + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/@jupyterlab/settingregistry/-/settingregistry-4.4.9.tgz", + "integrity": "sha512-IexXqi8pTqwBNEvFe2yh48aSq3ePFdAymsdLPP0A4ZF93EB2MQr3fvIiuoH4HE71rfZnXWW39u2yS5puTkszFw==", "license": "BSD-3-Clause", "dependencies": { - "@jupyterlab/nbformat": "^4.2.5", - "@jupyterlab/statedb": "^4.2.5", - "@lumino/commands": "^2.3.0", - "@lumino/coreutils": "^2.1.2", - "@lumino/disposable": "^2.1.2", - "@lumino/signaling": "^2.1.2", + "@jupyterlab/nbformat": "^4.4.9", + "@jupyterlab/statedb": "^4.4.9", + "@lumino/commands": "^2.3.2", + "@lumino/coreutils": "^2.2.1", + "@lumino/disposable": "^2.1.4", + "@lumino/signaling": "^2.1.4", "@rjsf/utils": "^5.13.4", "ajv": "^8.12.0", "json5": "^2.2.3" @@ -1133,103 +1133,103 @@ } }, "node_modules/@jupyterlab/statedb": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@jupyterlab/statedb/-/statedb-4.2.5.tgz", - "integrity": "sha512-GGP4NSkVzcn/zYZyjKId8OvDxq+JQTHEmiE2ayzUvvP4BwpGJ2GafY1V+QT5Tl+4SB0AzowpNud6XHUJ28M/tA==", + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/@jupyterlab/statedb/-/statedb-4.4.9.tgz", + "integrity": "sha512-DBfQzz+ahBPZeuy5HrGkaK73HSz6t2PVpK8ekQkqEla6zVx5CzcqOaS7ea+r+5pKWOZeHQVu7c7B7tX/MNaUkQ==", "license": "BSD-3-Clause", "dependencies": { - "@lumino/commands": "^2.3.0", - "@lumino/coreutils": "^2.1.2", - "@lumino/disposable": "^2.1.2", - "@lumino/properties": "^2.0.1", - "@lumino/signaling": "^2.1.2" + "@lumino/commands": "^2.3.2", + "@lumino/coreutils": "^2.2.1", + "@lumino/disposable": "^2.1.4", + "@lumino/properties": "^2.0.3", + "@lumino/signaling": "^2.1.4" } }, "node_modules/@lumino/algorithm": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", - "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.3.tgz", + "integrity": "sha512-DIcF7cIrGEC1Wh8DNjdwaL7IdcNs4Jj1VjO/90oHefeQPszKgc6DSfCxvbQiRanKR6tl/JL7tq4ZRPZES2oVAA==", "license": "BSD-3-Clause" }, "node_modules/@lumino/commands": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@lumino/commands/-/commands-2.3.1.tgz", - "integrity": "sha512-DpX1kkE4PhILpvK1T4ZnaFb6UP4+YTkdZifvN3nbiomD64O2CTd+wcWIBpZMgy6MMgbVgrE8dzHxHk1EsKxNxw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@lumino/commands/-/commands-2.3.2.tgz", + "integrity": "sha512-aAFEiUpp2hrkQU82Z85w1L80g0iDzsQRncLBa+pqVR/k0k1lz6H9F6xZ1ff+lBumZKKtsxBxNomvd0hfxLLqGw==", "license": "BSD-3-Clause", "dependencies": { - "@lumino/algorithm": "^2.0.2", - "@lumino/coreutils": "^2.2.0", - "@lumino/disposable": "^2.1.3", - "@lumino/domutils": "^2.0.2", - "@lumino/keyboard": "^2.0.2", - "@lumino/signaling": "^2.1.3", - "@lumino/virtualdom": "^2.0.2" + "@lumino/algorithm": "^2.0.3", + "@lumino/coreutils": "^2.2.1", + "@lumino/disposable": "^2.1.4", + "@lumino/domutils": "^2.0.3", + "@lumino/keyboard": "^2.0.3", + "@lumino/signaling": "^2.1.4", + "@lumino/virtualdom": "^2.0.3" } }, "node_modules/@lumino/coreutils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", - "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.1.tgz", + "integrity": "sha512-yij4TnxDIum7xfFUsVvZB0oLv4shs2mNbn3juwtEIsruvVBPmurNzKX0Y8z2QetbP2AZ6MSFtBzEKsihf0H0VA==", "license": "BSD-3-Clause", "dependencies": { - "@lumino/algorithm": "^2.0.2" + "@lumino/algorithm": "^2.0.3" } }, "node_modules/@lumino/disposable": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@lumino/disposable/-/disposable-2.1.3.tgz", - "integrity": "sha512-k5KXy/+T3UItiWHY4WwQawnsJnGo3aNtP5CTRKqo4+tbTNuhc3rTSvygJlNKIbEfIZXW2EWYnwfFDozkYx95eA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@lumino/disposable/-/disposable-2.1.4.tgz", + "integrity": "sha512-qTJiDbglPE2QnG4x4gtBcRbcfKQibxyyinNGKcNDrcK2TGTbbhK5PpMQ8d70l2V2Xw2pb/LfksBAg5pxkJ/G4A==", "license": "BSD-3-Clause", "dependencies": { - "@lumino/signaling": "^2.1.3" + "@lumino/signaling": "^2.1.4" } }, "node_modules/@lumino/domutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@lumino/domutils/-/domutils-2.0.2.tgz", - "integrity": "sha512-2Kp6YHaMNI1rKB0PrALvOsZBHPy2EvVVAvJLWjlCm8MpWOVETjFp0MA9QpMubT9I76aKbaI5s1o1NJyZ8Y99pQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@lumino/domutils/-/domutils-2.0.3.tgz", + "integrity": "sha512-bXAbZg3mf2ZDNdBBpCGDike3U+osRGHePTh8H2Ud2KwaN4g/5IryFJm/TiO4K5IYs91bWF2Zqhf3FsdbZKHlGw==", "license": "BSD-3-Clause" }, "node_modules/@lumino/keyboard": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@lumino/keyboard/-/keyboard-2.0.2.tgz", - "integrity": "sha512-icRUpvswDaFjqmAJNbQRb/aTu6Iugo6Y2oC08TiIwhQtLS9W+Ee9VofdqvbPSvCm6DkyP+DCWMuA3KXZ4V4g4g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@lumino/keyboard/-/keyboard-2.0.3.tgz", + "integrity": "sha512-bU2OxAR8a9eNBdV0YFjU6/lVVpbOw1gM7yHOuDGDdNu4J0UpKapFoR9gopNGSaHTmTwDtx9RHdFfIAgHwjZ+VQ==", "license": "BSD-3-Clause" }, "node_modules/@lumino/polling": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@lumino/polling/-/polling-2.1.3.tgz", - "integrity": "sha512-WEZk96ddK6eHEhdDkFUAAA40EOLit86QVbqQqnbPmhdGwFogek26Kq9b1U273LJeirv95zXCATOJAkjRyb7D+w==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@lumino/polling/-/polling-2.1.4.tgz", + "integrity": "sha512-gSkxlIJ/4/esY2G7bsRrY9A4KimDMHTo0shaD+MCbhd09fZMCWJoDMcA447/dykB1rM5NXgugNLjpdGGL/e8cw==", "license": "BSD-3-Clause", "dependencies": { - "@lumino/coreutils": "^2.2.0", - "@lumino/disposable": "^2.1.3", - "@lumino/signaling": "^2.1.3" + "@lumino/coreutils": "^2.2.1", + "@lumino/disposable": "^2.1.4", + "@lumino/signaling": "^2.1.4" } }, "node_modules/@lumino/properties": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@lumino/properties/-/properties-2.0.2.tgz", - "integrity": "sha512-b312oA3Bh97WFK8efXejYmC3DVJmvzJk72LQB7H3fXhfqS5jUWvL7MSnNmgcQvGzl9fIhDWDWjhtSTi0KGYYBg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@lumino/properties/-/properties-2.0.3.tgz", + "integrity": "sha512-zkXIU5uYz/ScHCHGl5Bt4gMYsfPxZEduZd80zqDslBWvTIMro3NnzLe66NMnecbdr5N3hDJagYyA8//Qy3XjiA==", "license": "BSD-3-Clause" }, "node_modules/@lumino/signaling": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz", - "integrity": "sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.4.tgz", + "integrity": "sha512-nC5Z6d9om369Jkh1Vp3b7C89hV4cjr1fQDVcxhemyKXwc9r6VW7FpKixC+jElcAknP5KLj1FAa8Np+K06mMkEA==", "license": "BSD-3-Clause", "dependencies": { - "@lumino/algorithm": "^2.0.2", - "@lumino/coreutils": "^2.2.0" + "@lumino/algorithm": "^2.0.3", + "@lumino/coreutils": "^2.2.1" } }, "node_modules/@lumino/virtualdom": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@lumino/virtualdom/-/virtualdom-2.0.2.tgz", - "integrity": "sha512-HYZThOtZSoknjdXA102xpy5CiXtTFCVz45EXdWeYLx3NhuEwuAIX93QBBIhupalmtFlRg1yhdDNV40HxJ4kcXg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@lumino/virtualdom/-/virtualdom-2.0.3.tgz", + "integrity": "sha512-q2C8eBxPvvOOQjN3KuxZ+vJi082JH/GF7KwMdaWsy5g+7wjKdnXPuLQFTBLOrVqIzmbxBDlLeFr93CEhdQXcyQ==", "license": "BSD-3-Clause", "dependencies": { - "@lumino/algorithm": "^2.0.2" + "@lumino/algorithm": "^2.0.3" } }, "node_modules/@manypkg/find-root": { @@ -1451,9 +1451,9 @@ } }, "node_modules/@rjsf/utils": { - "version": "5.21.2", - "resolved": "https://registry.npmjs.org/@rjsf/utils/-/utils-5.21.2.tgz", - "integrity": "sha512-e/Fn5rOUQCyR+QqK7tyJyleojAOkwa7N606ohiQsq2DebQ4TWuw/PuODCp3HUPAjdiwEVa2fsnGe0rELL5NGLg==", + "version": "5.24.13", + "resolved": "https://registry.npmjs.org/@rjsf/utils/-/utils-5.24.13.tgz", + "integrity": "sha512-rNF8tDxIwTtXzz5O/U23QU73nlhgQNYJ+Sv5BAwQOIyhIE2Z3S5tUiSVMwZHt0julkv/Ryfwi+qsD4FiE5rOuw==", "license": "Apache-2.0", "dependencies": { "json-schema-merge-allof": "^0.8.1", @@ -1833,9 +1833,9 @@ } }, "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", "license": "MIT" }, "node_modules/@types/node": { @@ -2114,64 +2114,64 @@ "license": "ISC" }, "node_modules/@unified-latex/unified-latex": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex/-/unified-latex-1.8.0.tgz", - "integrity": "sha512-ksRx1hWzDRl6ETtNozKxdmyZWg4ef74oIYt1++2TROIgeeUuPH+P026hYZyt8eIDOqnFhFYB8dE/W3rxvbwD1A==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex/-/unified-latex-1.8.3.tgz", + "integrity": "sha512-LRyXYXkjoidIVoX4bPX9fuaoa++ef94wao5tFEOIbFmcrF3SRZDqGnlAKSftP8g8/9YbtXOe61D3hviXux5Q4A==", "license": "MIT", "dependencies": { "@unified-latex/unified-latex-types": "^1.8.0", - "@unified-latex/unified-latex-util-parse": "^1.8.0", - "@unified-latex/unified-latex-util-to-string": "^1.8.0", + "@unified-latex/unified-latex-util-parse": "^1.8.3", + "@unified-latex/unified-latex-util-to-string": "^1.8.3", "unified": "^10.1.2" } }, "node_modules/@unified-latex/unified-latex-builder": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-builder/-/unified-latex-builder-1.8.0.tgz", - "integrity": "sha512-1s5MIan/qaYeqJI1Tk3bfUwdkk0jIrQXRJt0dF0j3JWT9RG60WbiXp+593eOJgFYJtn+h3FdM0bvalfa+ZzTXg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-builder/-/unified-latex-builder-1.8.3.tgz", + "integrity": "sha512-DxZZHcSBUYaJD4LIDsgHqHG3sxY1Ycb+C+Ig/Xc7yjxV38CF6Hq+AfpgfT4dS5fs/sj0FK2/tNGwKEqRTgXy1w==", "license": "MIT", "dependencies": { "@unified-latex/unified-latex-types": "^1.8.0" } }, "node_modules/@unified-latex/unified-latex-ctan": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-ctan/-/unified-latex-ctan-1.8.0.tgz", - "integrity": "sha512-Ur2K23+iK4H5gqL9wLcMiWmaMu1110olwpFihonxEPEYnHJgWVAGZ9sWmASKEPhaPU+MPFWebJDKCWoOWPHIVQ==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-ctan/-/unified-latex-ctan-1.8.3.tgz", + "integrity": "sha512-bqApSRcGFNMPdAV939E9/oxhGp0AJZ5EfOp1LfdH0qhn0OXMqHYD30GJvvgOh+mfb8MdCcDNKU4QWUHBsvovwQ==", "license": "MIT", "dependencies": { - "@unified-latex/unified-latex-builder": "^1.8.0", + "@unified-latex/unified-latex-builder": "^1.8.3", "@unified-latex/unified-latex-types": "^1.8.0", - "@unified-latex/unified-latex-util-argspec": "^1.8.0", - "@unified-latex/unified-latex-util-arguments": "^1.8.0", - "@unified-latex/unified-latex-util-comments": "^1.8.0", + "@unified-latex/unified-latex-util-argspec": "^1.8.3", + "@unified-latex/unified-latex-util-arguments": "^1.8.3", + "@unified-latex/unified-latex-util-comments": "^1.8.3", "@unified-latex/unified-latex-util-match": "^1.8.0", - "@unified-latex/unified-latex-util-pegjs": "^1.8.0", + "@unified-latex/unified-latex-util-pegjs": "^1.8.1", "@unified-latex/unified-latex-util-print-raw": "^1.8.0", - "@unified-latex/unified-latex-util-render-info": "^1.8.0", - "@unified-latex/unified-latex-util-replace": "^1.8.0", + "@unified-latex/unified-latex-util-render-info": "^1.8.3", + "@unified-latex/unified-latex-util-replace": "^1.8.3", "@unified-latex/unified-latex-util-scan": "^1.8.0", "@unified-latex/unified-latex-util-split": "^1.8.0", - "@unified-latex/unified-latex-util-trim": "^1.8.0", - "@unified-latex/unified-latex-util-visit": "^1.8.0", + "@unified-latex/unified-latex-util-trim": "^1.8.3", + "@unified-latex/unified-latex-util-visit": "^1.8.3", "color": "^4.2.3" } }, "node_modules/@unified-latex/unified-latex-prettier": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-prettier/-/unified-latex-prettier-1.8.0.tgz", - "integrity": "sha512-pNeuMODsae9agMH1BH8GR+6zlCRArAFQjm++jFZczQ62inQltDgdwGanYwFM8JphBooATVy1L0z4Zo4bvmK5UQ==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-prettier/-/unified-latex-prettier-1.8.3.tgz", + "integrity": "sha512-sat9VSBJQriX/biqAD+gBG2OkVy1mXMdqn4vy323es3RyBU9IHxl43dVR8QGXRhbD6lMRABxWdxfj0lRG6KU9g==", "license": "MIT", "dependencies": { - "@unified-latex/unified-latex-ctan": "^1.8.0", + "@unified-latex/unified-latex-ctan": "^1.8.3", "@unified-latex/unified-latex-types": "^1.8.0", - "@unified-latex/unified-latex-util-align": "^1.8.0", + "@unified-latex/unified-latex-util-align": "^1.8.1", "@unified-latex/unified-latex-util-match": "^1.8.0", - "@unified-latex/unified-latex-util-parse": "^1.8.0", - "@unified-latex/unified-latex-util-pgfkeys": "^1.8.0", + "@unified-latex/unified-latex-util-parse": "^1.8.3", + "@unified-latex/unified-latex-util-pgfkeys": "^1.8.1", "@unified-latex/unified-latex-util-print-raw": "^1.8.0", - "@unified-latex/unified-latex-util-trim": "^1.8.0", - "@unified-latex/unified-latex-util-visit": "^1.8.0", + "@unified-latex/unified-latex-util-trim": "^1.8.3", + "@unified-latex/unified-latex-util-visit": "^1.8.3", "prettier": "^3.0.3" } }, @@ -2182,75 +2182,75 @@ "license": "MIT" }, "node_modules/@unified-latex/unified-latex-util-align": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-align/-/unified-latex-util-align-1.8.0.tgz", - "integrity": "sha512-HAX3j21IYC4Bv61aZf+8uSE8MlhLe1mWOwnKohtSd8rlXcXwEtDIX7zsWvBq3ECAD/Xw5r+wQ14Ai44qiGv+7Q==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-align/-/unified-latex-util-align-1.8.1.tgz", + "integrity": "sha512-csJxLrvziRc5ZkhcRsYI7gSQBGC4fXucPtwNkTscbSIy7PfYF7BfWBPc61sb9jXQg4T4R6MLdG/Tz6Pgb6z1bw==", "license": "MIT", "dependencies": { "@unified-latex/unified-latex-types": "^1.8.0", "@unified-latex/unified-latex-util-match": "^1.8.0", - "@unified-latex/unified-latex-util-pegjs": "^1.8.0" + "@unified-latex/unified-latex-util-pegjs": "^1.8.1" } }, "node_modules/@unified-latex/unified-latex-util-argspec": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-argspec/-/unified-latex-util-argspec-1.8.0.tgz", - "integrity": "sha512-4YHsd46hTQ9fzAJLiFX3SfuZFO9i8qSlVZ+XApqRITae2CUi5a//+kiNwswnNjtclMFgbGwqG2Nb7dnwX0Yxvw==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-argspec/-/unified-latex-util-argspec-1.8.3.tgz", + "integrity": "sha512-GPJIycwLIVpt3g9LIdv+ut5F2N0xscpMlDsrCnjRutgD1GzpbLeROxmRNfZ6EaOlL7POLCyL8TY6S79U2tuTBA==", "license": "MIT", "dependencies": { - "@unified-latex/unified-latex-util-pegjs": "^1.8.0" + "@unified-latex/unified-latex-util-pegjs": "^1.8.1" } }, "node_modules/@unified-latex/unified-latex-util-arguments": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-arguments/-/unified-latex-util-arguments-1.8.0.tgz", - "integrity": "sha512-yHyk3O+pH6rC+LTIuXubklC2jIaq6FSMixzrHV06h2/TTYJWYWHDYRb4ppdqT3IXfJ4OeMTvXTTBtmMWJP9mww==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-arguments/-/unified-latex-util-arguments-1.8.3.tgz", + "integrity": "sha512-CNazx2/PdimzQW7zo9Z1M+/4GBTdpE2hUJdxbXkn9G/dGF4QE63++GWbFiPK/N7+CzVgnewi0TOq6ARL+frN3Q==", "license": "MIT", "dependencies": { - "@unified-latex/unified-latex-builder": "^1.8.0", + "@unified-latex/unified-latex-builder": "^1.8.3", "@unified-latex/unified-latex-types": "^1.8.0", - "@unified-latex/unified-latex-util-argspec": "^1.8.0", + "@unified-latex/unified-latex-util-argspec": "^1.8.3", "@unified-latex/unified-latex-util-match": "^1.8.0", - "@unified-latex/unified-latex-util-render-info": "^1.8.0", + "@unified-latex/unified-latex-util-render-info": "^1.8.3", "@unified-latex/unified-latex-util-scan": "^1.8.0", - "@unified-latex/unified-latex-util-visit": "^1.8.0", + "@unified-latex/unified-latex-util-visit": "^1.8.3", "unified": "^10.1.2" } }, "node_modules/@unified-latex/unified-latex-util-catcode": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-catcode/-/unified-latex-util-catcode-1.8.0.tgz", - "integrity": "sha512-8VJX3ZpRsGl5fGsQkmL6s9oocLos7O8LPNueHhiQOfXRHLCorI5llQxDUPqDcjQ2kfM4oos/5WLGPgf6pzAIhQ==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-catcode/-/unified-latex-util-catcode-1.8.3.tgz", + "integrity": "sha512-EHdsqGPGh3pbuQTw8ejcGhDbIKp3ghibT7MCGkDhUK5cUqm8tTPknTg5/cGm3G+te5AsxT8fjlYbFQ/nQGi3UQ==", "license": "MIT", "dependencies": { "@unified-latex/unified-latex-types": "^1.8.0", "@unified-latex/unified-latex-util-match": "^1.8.0", - "@unified-latex/unified-latex-util-visit": "^1.8.0" + "@unified-latex/unified-latex-util-visit": "^1.8.3" } }, "node_modules/@unified-latex/unified-latex-util-comments": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-comments/-/unified-latex-util-comments-1.8.0.tgz", - "integrity": "sha512-EQxcQknRbFf7nUqZ9zus6oC0zEWL1sgvziwl/nTTnSsefII0pGMKRw7jBI+Hqr4/U5+RzDYTeCIhP6FVQhHGMw==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-comments/-/unified-latex-util-comments-1.8.3.tgz", + "integrity": "sha512-eC1RXiFia8Fw6RxXKAOI0sVQqqwJhyTO3JhvRSTWAjrvwLoMi9b/96Ny7sBO68haRo4HarwyxmBaIWL3SYVjyQ==", "license": "MIT", "dependencies": { "@unified-latex/unified-latex-types": "^1.8.0", "@unified-latex/unified-latex-util-match": "^1.8.0", - "@unified-latex/unified-latex-util-replace": "^1.8.0" + "@unified-latex/unified-latex-util-replace": "^1.8.3" } }, "node_modules/@unified-latex/unified-latex-util-environments": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-environments/-/unified-latex-util-environments-1.8.0.tgz", - "integrity": "sha512-yO6PMMOiDIo0Z+aiqvozNCWTWKnfBp7Y29nTTtD2NtRrlROct4s8sPO5wnWClNmSyxk2B6gIhCuTwREC9JnHHQ==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-environments/-/unified-latex-util-environments-1.8.3.tgz", + "integrity": "sha512-5cw+lCxLwv/+VRz2WQpLEG7Emok5SOVgT42bBTpJkeHyrxewiTqnqTbTmZMYYVep1D0lE/1RsO/xd+7+mrVToA==", "license": "MIT", "dependencies": { "@unified-latex/unified-latex-types": "^1.8.0", - "@unified-latex/unified-latex-util-arguments": "^1.8.0", + "@unified-latex/unified-latex-util-arguments": "^1.8.3", "@unified-latex/unified-latex-util-match": "^1.8.0", "@unified-latex/unified-latex-util-print-raw": "^1.8.0", - "@unified-latex/unified-latex-util-render-info": "^1.8.0", - "@unified-latex/unified-latex-util-visit": "^1.8.0", + "@unified-latex/unified-latex-util-render-info": "^1.8.3", + "@unified-latex/unified-latex-util-visit": "^1.8.3", "unified": "^10.1.2" } }, @@ -2265,28 +2265,28 @@ } }, "node_modules/@unified-latex/unified-latex-util-parse": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-parse/-/unified-latex-util-parse-1.8.0.tgz", - "integrity": "sha512-I7yvI3WJX9kFpC07rvCI0q2igZ3z1ng4FzoFIcXxsjfkCakPAx+AQi0Evh10lkem3Ip1LfTZvYI1Db30TaRytw==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-parse/-/unified-latex-util-parse-1.8.3.tgz", + "integrity": "sha512-H+VBB4/hxR1W7sTMMftiQCV9TRGGKVnPpisKBCfONN3KkyGuqGgmFKPna98tmoDU6A75gQCz6tu8f+1eW+RoYA==", "license": "MIT", "dependencies": { - "@unified-latex/unified-latex-ctan": "^1.8.0", + "@unified-latex/unified-latex-ctan": "^1.8.3", "@unified-latex/unified-latex-types": "^1.8.0", - "@unified-latex/unified-latex-util-arguments": "^1.8.0", - "@unified-latex/unified-latex-util-catcode": "^1.8.0", - "@unified-latex/unified-latex-util-environments": "^1.8.0", + "@unified-latex/unified-latex-util-arguments": "^1.8.3", + "@unified-latex/unified-latex-util-catcode": "^1.8.3", + "@unified-latex/unified-latex-util-environments": "^1.8.3", "@unified-latex/unified-latex-util-match": "^1.8.0", - "@unified-latex/unified-latex-util-pegjs": "^1.8.0", + "@unified-latex/unified-latex-util-pegjs": "^1.8.1", "@unified-latex/unified-latex-util-print-raw": "^1.8.0", - "@unified-latex/unified-latex-util-trim": "^1.8.0", - "@unified-latex/unified-latex-util-visit": "^1.8.0", + "@unified-latex/unified-latex-util-trim": "^1.8.3", + "@unified-latex/unified-latex-util-visit": "^1.8.3", "unified": "^10.1.2" } }, "node_modules/@unified-latex/unified-latex-util-pegjs": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-pegjs/-/unified-latex-util-pegjs-1.8.0.tgz", - "integrity": "sha512-SCYZq9T1THHuyl5NaVtiX6cTVDhxA2ON7qX1044hEyFfZvkU6R2bUhfaE33hZ6vYd6caF+hH53Gcky9DN5ubKw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-pegjs/-/unified-latex-util-pegjs-1.8.1.tgz", + "integrity": "sha512-1N6WknnzKGACFCmgaEZ2j89j5C2dKhmAOCfy6moD+AMm6nUb69Xp9pJ1jDfqz+Uz9+zRo5I6ksr6q5GgmAJvtw==", "license": "MIT", "dependencies": { "@unified-latex/unified-latex-types": "^1.8.0", @@ -2294,14 +2294,14 @@ } }, "node_modules/@unified-latex/unified-latex-util-pgfkeys": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-pgfkeys/-/unified-latex-util-pgfkeys-1.8.0.tgz", - "integrity": "sha512-YqLRgkr1jUMlChdBBoOJ/zxGBPBRKjnOMQxl/xT3ApOxx/iZpEQEnGxo9z4IRVmIGKt7LxvSTtaJEGi1Ti2h2A==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-pgfkeys/-/unified-latex-util-pgfkeys-1.8.1.tgz", + "integrity": "sha512-VwZeUzmPgKwO2sZ9xx4Ul0Mp82DVdWg32krOlH9dzW4ZQDOBTnRtvx6LQmg9b7Iz3F2pHLYU0LCCaJlvFNBm1A==", "license": "MIT", "dependencies": { "@unified-latex/unified-latex-types": "^1.8.0", "@unified-latex/unified-latex-util-match": "^1.8.0", - "@unified-latex/unified-latex-util-pegjs": "^1.8.0", + "@unified-latex/unified-latex-util-pegjs": "^1.8.1", "@unified-latex/unified-latex-util-print-raw": "^1.8.0" } }, @@ -2315,26 +2315,26 @@ } }, "node_modules/@unified-latex/unified-latex-util-render-info": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-render-info/-/unified-latex-util-render-info-1.8.0.tgz", - "integrity": "sha512-8rkCQ1chHBwGee/jRxM0Qtvru4Z9bv738oVmi4f+2QDnpxMMwj774EXMXnVOo982OM7e8ZTosH6IXcN6KehyzQ==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-render-info/-/unified-latex-util-render-info-1.8.3.tgz", + "integrity": "sha512-L1orYqc9U5DGObSqjYIAclAybMWYpL41eR5E2NkJjZAAypSPkLeRT7yvaGz879HJNS2C1C9UoIsPlHDPok0Gcg==", "license": "MIT", "dependencies": { "@unified-latex/unified-latex-types": "^1.8.0", - "@unified-latex/unified-latex-util-visit": "^1.8.0" + "@unified-latex/unified-latex-util-visit": "^1.8.3" } }, "node_modules/@unified-latex/unified-latex-util-replace": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-replace/-/unified-latex-util-replace-1.8.0.tgz", - "integrity": "sha512-F3WRwWZPbdYqy58qGpSpA0wXRh/1vdbuCK4/Gi/Mxbc/LvrzJKEc5H6lgB0SsrLgPybr3lzRmUCvuzSI3vC+3g==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-replace/-/unified-latex-util-replace-1.8.3.tgz", + "integrity": "sha512-HdrWVF+pwfsXkAiIGK5q7y2klBt5QK7r5sxbSZD+X3wXzpJFuFCYQQYe2Tmi5lOcssqLK94+1OUqRTrmA/rFbg==", "license": "MIT", "dependencies": { "@unified-latex/unified-latex-types": "^1.8.0", "@unified-latex/unified-latex-util-match": "^1.8.0", "@unified-latex/unified-latex-util-split": "^1.8.0", - "@unified-latex/unified-latex-util-trim": "^1.8.0", - "@unified-latex/unified-latex-util-visit": "^1.8.0", + "@unified-latex/unified-latex-util-trim": "^1.8.3", + "@unified-latex/unified-latex-util-visit": "^1.8.3", "unified": "^10.1.2" } }, @@ -2361,12 +2361,12 @@ } }, "node_modules/@unified-latex/unified-latex-util-to-string": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-to-string/-/unified-latex-util-to-string-1.8.0.tgz", - "integrity": "sha512-yrR+E9APNOb3hrD8Tbn5WKR7zfG1377cOXR1Io3ct0dPK1/N8eT7MmPZ5mAi6MJZV7aQNAnirchd7p210RR20w==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-to-string/-/unified-latex-util-to-string-1.8.3.tgz", + "integrity": "sha512-Tw1ZfFtC3n0zI1BkmNBbfJf0dYA9jBNVMkL6A15H48l1/uvsKnthACgu8CjxutskEstEOlp8LyYU2tSIICwg8w==", "license": "MIT", "dependencies": { - "@unified-latex/unified-latex-prettier": "^1.8.0", + "@unified-latex/unified-latex-prettier": "^1.8.3", "@unified-latex/unified-latex-types": "^1.8.0", "@unified-latex/unified-latex-util-print-raw": "^1.8.0", "prettier": "^2.8.8", @@ -2389,21 +2389,21 @@ } }, "node_modules/@unified-latex/unified-latex-util-trim": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-trim/-/unified-latex-util-trim-1.8.0.tgz", - "integrity": "sha512-jZYPJxkZkcQV49lOMJonGD7G3tgUFyJ0A54AGb0Rvpj05feaCzTL5TN7GGiow0pfAqpnolGDcCVmtFm8nlrmAA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-trim/-/unified-latex-util-trim-1.8.3.tgz", + "integrity": "sha512-Vb5YcVyebWuwU0koBTsVOvxKFWKfqP1T7nJdpzT+IUrfX7zcMiA4HlGdL/3imbEfuLBTHJb3IoLsymU0XfWCZg==", "license": "MIT", "dependencies": { "@unified-latex/unified-latex-types": "^1.8.0", "@unified-latex/unified-latex-util-match": "^1.8.0", - "@unified-latex/unified-latex-util-visit": "^1.8.0", + "@unified-latex/unified-latex-util-visit": "^1.8.3", "unified": "^10.1.2" } }, "node_modules/@unified-latex/unified-latex-util-visit": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-visit/-/unified-latex-util-visit-1.8.0.tgz", - "integrity": "sha512-kCmeZMQCC5yRUzTLW30Ulr1RvsXVJ2ar2JB9OWSzu3oXRNVcB7Ga34GGGQuBhS7WXEqcqcqAiArfgJKdA1yIIA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-visit/-/unified-latex-util-visit-1.8.3.tgz", + "integrity": "sha512-y1uxwXLbzXliAhTrxaDx4+LgIWaeNWMgS7q4DC/i/5RXXRQOImdCqQsTWwvQk2x5/8zQ3eweiTsd3q1gbBCqAA==", "license": "MIT", "dependencies": { "@unified-latex/unified-latex-types": "^1.8.0", @@ -3382,9 +3382,9 @@ } }, "node_modules/cffjs": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/cffjs/-/cffjs-0.0.1.tgz", - "integrity": "sha512-2LD9aYPn4uOA3Mk5olY6cErU5pPYWirynd89FtHRkxtYdpvNZ93TZO8+7ATOvYhcxd4EkO+kDVn8M/HYZBvEuQ==", + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/cffjs/-/cffjs-0.0.2.tgz", + "integrity": "sha512-h9UYU+vtapLulvNtr7q+rcuS5ycazEzCY2VnwRkscMFlj0CWuYHUaVza8v7j1xw1HtlsKiRzZ1XC3UX46amGYA==", "license": "MIT", "dependencies": { "ajv": "^8.17.1", @@ -3623,14 +3623,14 @@ } }, "node_modules/citation-js-utils": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/citation-js-utils/-/citation-js-utils-1.2.6.tgz", - "integrity": "sha512-shqqzhFo7O/sp+wZwcUu/rL581f21ymDjTkReuyyXehpR65LT+h4OKphmuTEjaU6vxure22iZRjjn4vUbFGZbQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/citation-js-utils/-/citation-js-utils-1.2.7.tgz", + "integrity": "sha512-1njwXlW4Lm4U8nS1T0Rz4VmBDkUlGNFxktMTCE6XJkDXHc7jxhE8YHqOw4QRx/Ms1FWwAMQAM4rk2yRywhsmxg==", "license": "MIT", "dependencies": { - "@citation-js/core": "^0.7.14", - "@citation-js/plugin-bibtex": "^0.7.14", - "@citation-js/plugin-csl": "^0.7.14", + "@citation-js/core": "^0.7.18", + "@citation-js/plugin-bibtex": "^0.7.18", + "@citation-js/plugin-csl": "^0.7.18", "sanitize-html": "^2.7.0" }, "engines": { @@ -3919,9 +3919,9 @@ "license": "MIT" }, "node_modules/csv-parse": { - "version": "5.5.6", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.5.6.tgz", - "integrity": "sha512-uNpm30m/AGSkLxxy7d9yRXpJQFrZzVWLFBkS+6ngPcZkw/5k3L/jjFuj7tVnEpRn+QgmiXr21nDlhCiUK4ij2A==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.6.0.tgz", + "integrity": "sha512-l3nz3euub2QMg5ouu5U09Ew9Wf6/wQ8I++ch1loQ0ljmzhmfZYrH9fflS22i/PQEvsPvxCwxgz5q7UB8K1JO4Q==", "license": "MIT" }, "node_modules/damerau-levenshtein": { @@ -4012,9 +4012,9 @@ } }, "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", "license": "MIT", "dependencies": { "character-entities": "^2.0.0" @@ -4300,9 +4300,9 @@ } }, "node_modules/docx/node_modules/@types/node": { - "version": "18.19.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.55.tgz", - "integrity": "sha512-zzw5Vw52205Zr/nmErSEkN5FLqXPuKX/k5d1D7RKHATGqU7y6YfX9QxZraUzUrFGqH6XzOzG196BC35ltJC4Cw==", + "version": "18.19.129", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.129.tgz", + "integrity": "sha512-hrmi5jWt2w60ayox3iIXwpMEnfUvOLJCRtrOPbHtH15nTjvO7uhnelvrdAs0dO0/zl5DZ3ZbahiaXEVb54ca/A==", "license": "MIT", "dependencies": { "undici-types": "~5.26.4" @@ -4315,9 +4315,9 @@ "license": "MIT" }, "node_modules/doi-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/doi-utils/-/doi-utils-2.0.3.tgz", - "integrity": "sha512-vXWjB8Wz195m0PSw9jCwkCVBtPO+yIY/iPUQ1qTLD3GZ7alXreaoLKA3D4MAewPOBt+D8BU1LJiOF7WKpy9ifQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/doi-utils/-/doi-utils-2.0.6.tgz", + "integrity": "sha512-QkaDmWbr5lIugDgl9fCxDMos2OJJ9Rp4c9XB7wgRGm6hJQ+hgeqI78DqToU8+vmtU+1XAyyVYJoLZUAgBdsFtg==", "license": "MIT" }, "node_modules/dom-serializer": { @@ -4374,9 +4374,9 @@ } }, "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", @@ -5662,10 +5662,20 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz", - "integrity": "sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==", - "license": "MIT" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" }, "node_modules/fastq": { "version": "1.17.1", @@ -6416,9 +6426,9 @@ } }, "node_modules/hast-util-from-html/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -6430,16 +6440,16 @@ } }, "node_modules/hast-util-from-parse5": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", - "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", - "hastscript": "^8.0.0", - "property-information": "^6.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", "vfile": "^6.0.0", "vfile-location": "^5.0.0", "web-namespaces": "^2.0.0" @@ -6483,9 +6493,9 @@ } }, "node_modules/hast-util-from-parse5/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -6679,6 +6689,16 @@ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "license": "MIT" }, + "node_modules/hast-util-raw/node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/hast-util-raw/node_modules/vfile-location": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz", @@ -6725,6 +6745,16 @@ "@types/unist": "^2" } }, + "node_modules/hast-util-to-html/node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/hast-util-to-mdast": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/hast-util-to-mdast/-/hast-util-to-mdast-8.4.1.tgz", @@ -6788,6 +6818,16 @@ "@types/unist": "^2" } }, + "node_modules/hast-util-to-parse5/node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/hast-util-to-text": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-3.1.2.tgz", @@ -6824,15 +6864,15 @@ } }, "node_modules/hastscript": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", - "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", - "property-information": "^6.0.0", + "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" }, "funding": { @@ -8000,19 +8040,19 @@ } }, "node_modules/jtex": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/jtex/-/jtex-1.0.18.tgz", - "integrity": "sha512-o2qfbtvfTsANJhbFilDf68bztEXCsVw1PXZ8M56HcMQk6nSrLyXvehEQtN6JYY8TETpdJnbQl67iS8rjlunXQw==", + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/jtex/-/jtex-1.0.20.tgz", + "integrity": "sha512-tdT6909BD8xIlbcZoCVFbok49eSS8EY5sEoXelJzKfDdJcXFHs9KvakqAfsHhYZF76LIy2DbwCHKB9sem40U2Q==", "license": "MIT", "dependencies": { "adm-zip": "^0.5.10", "chalk": "^5.2.0", "commander": "^10.0.1", "js-yaml": "^4.1.0", - "myst-cli-utils": "^2.0.10", - "myst-common": "^1.5.1", - "myst-frontmatter": "^1.5.1", - "myst-templates": "^1.0.20", + "myst-cli-utils": "^2.0.11", + "myst-common": "^1.7.3", + "myst-frontmatter": "^1.7.3", + "myst-templates": "^1.0.23", "node-fetch": "^3.3.1", "nunjucks": "^3.2.4", "pretty-hrtime": "^1.0.3", @@ -8128,9 +8168,9 @@ } }, "node_modules/lib0": { - "version": "0.2.98", - "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.98.tgz", - "integrity": "sha512-XteTiNO0qEXqqweWx+b21p/fBnNHUA1NwAtJNJek1oPrewEZs2uiT4gWivHKr9GqCjDPAhchz0UQO8NwU3bBNA==", + "version": "0.2.114", + "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.114.tgz", + "integrity": "sha512-gcxmNFzA4hv8UYi8j43uPlQ7CGcyMJ2KQb5kZASw6SnAKAf10hK12i2fjrS3Cl/ugZa5Ui6WwIu1/6MIXiHttQ==", "license": "MIT", "dependencies": { "isomorphic.js": "^0.2.4" @@ -8430,9 +8470,9 @@ "license": "MIT" }, "node_modules/markdown-it-myst": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/markdown-it-myst/-/markdown-it-myst-1.0.10.tgz", - "integrity": "sha512-u3xgQqrtQrX01dqwbRywwEgBPywbFczvYdCLYXjpqE0Aqzb/NaQmxYqu3ZkUTRG20G1po1QK3bcf/xnvt1h9xg==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/markdown-it-myst/-/markdown-it-myst-1.0.11.tgz", + "integrity": "sha512-fJQzvP7F67mMHXiwVeUm6wZknjDn/kTpsktQlVMWIFDoBcej6BhQlUJq5HiX2sbsDsyeNqKNUo4LN7pBoQaXvw==", "license": "MIT", "dependencies": { "js-yaml": "^4.1.0", @@ -8497,9 +8537,9 @@ "license": "ISC" }, "node_modules/markdown-table": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", - "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", "license": "MIT", "funding": { "type": "github", @@ -9331,24 +9371,24 @@ } }, "node_modules/myst-cli": { - "version": "1.3.12", - "resolved": "https://registry.npmjs.org/myst-cli/-/myst-cli-1.3.12.tgz", - "integrity": "sha512-R1NgWRizUewPskBtMUcYMy1kjHe4fTNg8cTihG0WYrAw3S6lx1dpPc4f9v09AEn3zA3+XzSg2bbGKOq210LMvQ==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/myst-cli/-/myst-cli-1.6.2.tgz", + "integrity": "sha512-d3OsOfuFhSviIiX8afoAjEZzIzBWLKx2zUJaEQTgW5Pb23+Mw6DGEt1KtpNgF4r/PonBrrYtPI3o7Bbwli0TOw==", "license": "MIT", "dependencies": { "@jupyterlab/services": "^7.0.0", "@reduxjs/toolkit": "^2.1.0", "adm-zip": "^0.5.10", "boxen": "^7.1.1", - "cffjs": "^0.0.1", + "cffjs": "^0.0.2", "chalk": "^5.2.0", "check-node-version": "^4.2.1", "chokidar": "^3.5.3", - "citation-js-utils": "^1.2.6", + "citation-js-utils": "^1.2.7", "commander": "^10.0.1", "cors": "^2.8.5", "docx": "^7.5.0", - "doi-utils": "^2.0.3", + "doi-utils": "^2.0.5", "express": "^4.18.2", "fs-extra": "^11.1.1", "get-port": "^6.1.2", @@ -9357,42 +9397,43 @@ "inquirer": "^9.2.17", "intersphinx": "^1.0.2", "js-yaml": "^4.1.0", - "jtex": "^1.0.18", + "jtex": "^1.0.20", "latest-version": "^7.0.0", "mdast": "^3.0.0", "meca": "^1.0.8", "mime-types": "^2.1.35", - "myst-cli-utils": "^2.0.10", - "myst-common": "^1.7.1", - "myst-config": "^1.7.1", - "myst-execute": "^0.1.0", - "myst-ext-card": "^1.0.8", - "myst-ext-exercise": "^1.0.7", - "myst-ext-grid": "^1.0.7", - "myst-ext-icon": "^0.0.1", - "myst-ext-proof": "^1.0.10", - "myst-ext-reactive": "^1.0.8", - "myst-ext-tabs": "^1.0.7", - "myst-frontmatter": "^1.7.1", - "myst-parser": "^1.5.6", + "myst-cli-utils": "^2.0.11", + "myst-common": "^1.8.2", + "myst-config": "^1.8.2", + "myst-execute": "^0.1.2", + "myst-ext-button": "^0.0.1", + "myst-ext-card": "^1.0.9", + "myst-ext-exercise": "^1.0.9", + "myst-ext-grid": "^1.0.9", + "myst-ext-icon": "^0.0.2", + "myst-ext-proof": "^1.0.12", + "myst-ext-reactive": "^1.0.9", + "myst-ext-tabs": "^1.0.9", + "myst-frontmatter": "^1.8.2", + "myst-parser": "^1.5.16", "myst-spec": "^0.0.5", - "myst-spec-ext": "^1.7.1", - "myst-templates": "^1.0.22", - "myst-to-docx": "^1.0.11", - "myst-to-jats": "^1.0.28", - "myst-to-md": "^1.0.13", - "myst-to-tex": "^1.0.37", - "myst-to-typst": "^0.0.23", - "myst-toc": "^0.1.2", - "myst-transforms": "^1.3.25", + "myst-spec-ext": "^1.8.2", + "myst-templates": "^1.0.25", + "myst-to-docx": "^1.0.14", + "myst-to-jats": "^1.0.34", + "myst-to-md": "^1.0.15", + "myst-to-tex": "^1.0.42", + "myst-to-typst": "^0.0.34", + "myst-toc": "^0.1.3", + "myst-transforms": "^1.3.39", "nanoid": "^4.0.0", - "nbtx": "^0.2.3", + "nbtx": "^0.4.0", "node-fetch": "^3.3.1", "p-limit": "^3.1.0", "redux": "^5.0.1", "simple-validators": "^1.1.0", "strip-ansi": "^7.0.1", - "tex-to-myst": "^1.0.37", + "tex-to-myst": "^1.0.42", "unified": "^10.1.2", "unist-util-filter": "^4.0.0", "unist-util-remove": "^3.1.0", @@ -9411,9 +9452,9 @@ } }, "node_modules/myst-cli-utils": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/myst-cli-utils/-/myst-cli-utils-2.0.10.tgz", - "integrity": "sha512-qgkXxqzn8YtZUICqEn8GfGJxONMjKX9DF1pz76QqPX8WLbgE6b4knQMWzAG+4+kh9RfdiTMHNnARQ2Jcd24Omw==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/myst-cli-utils/-/myst-cli-utils-2.0.11.tgz", + "integrity": "sha512-2iS3RpdUQSKBOGJ+Ltuc8uzIpkxI4JIUZx3v19lgLTlxEQKEXUXzZM02PWPphdFThoQtUtAXjHjqZ+bALZ+acA==", "license": "MIT", "dependencies": { "chalk": "^5.2.0", @@ -9645,13 +9686,13 @@ } }, "node_modules/myst-common": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/myst-common/-/myst-common-1.7.1.tgz", - "integrity": "sha512-wlKu+RhCNmf+mCqOylsRXd6/jSy+fhAiO0I4WncX5vAWeikukCHOzMvJRNgEHqGV4pUPB45iQTiUhGuDsna8TA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/myst-common/-/myst-common-1.8.2.tgz", + "integrity": "sha512-4DWeDxhB+nAmGMA2ybXgOHnnvjU7IbfmUgWg9eCRN/dn3t3dahG1yKao+hTP2m349rwtSy3vY7gbj6sB0fMcsw==", "license": "MIT", "dependencies": { "mdast": "^3.0.0", - "myst-frontmatter": "^1.7.1", + "myst-frontmatter": "^1.8.2", "myst-spec": "^0.0.5", "nanoid": "^4.0.0", "unified": "^10.1.2", @@ -9681,26 +9722,27 @@ } }, "node_modules/myst-config": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/myst-config/-/myst-config-1.7.1.tgz", - "integrity": "sha512-y2B0vAG64DF796u9JNwt0VCwKLFQevjkNR0tFZ/5GUzVcdaBSdgFtH7r87gtOLELXZbqVVbghf3LfgLIbDq4NQ==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/myst-config/-/myst-config-1.8.2.tgz", + "integrity": "sha512-7gA15w1hFdJTQNlKleh4iUIpSSWSGiFA8mJt5v5Q1FeDGEMcLDbNua/wIrRWp5zrRCZ6AEX3wSaVMxrV63G9ZQ==", "license": "MIT", "dependencies": { - "myst-frontmatter": "^1.7.1", - "simple-validators": "^1.1.0" + "myst-common": "^1.8.2", + "myst-frontmatter": "^1.8.2", + "simple-validators": "^1.1.1" } }, "node_modules/myst-directives": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/myst-directives/-/myst-directives-1.5.6.tgz", - "integrity": "sha512-EDkD5T32m+3pd81JFLS3VZNgxkWfn1p8JLfPdBdOGojD6SbBfSpNYtDXmOaxhF13M/KSeyKt3ZlHL7a5CeKwXA==", + "version": "1.5.16", + "resolved": "https://registry.npmjs.org/myst-directives/-/myst-directives-1.5.16.tgz", + "integrity": "sha512-99byGk3Fc3BYBNxZoLyLTu4N++dPqbqrwjM6a00OUKFQyLyaATtudqemCgEpoWk0iHTtTH0cXOju3Mjyyd283g==", "license": "MIT", "dependencies": { "classnames": "^2.3.2", "csv-parse": "^5.5.5", "js-yaml": "^4.1.0", - "myst-common": "^1.6.0", - "myst-spec-ext": "^1.6.0", + "myst-common": "^1.8.2", + "myst-spec-ext": "^1.8.2", "nanoid": "^4.0.2", "unist-util-select": "^4.0.3", "vfile": "^5.3.7" @@ -9725,15 +9767,15 @@ } }, "node_modules/myst-execute": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/myst-execute/-/myst-execute-0.1.0.tgz", - "integrity": "sha512-jcJjztTlhph7FPf00TCL/KrL9bCpn3CC5/c1MUQQG8E5WVANa7Zu6zackrYdrFHPLL0YfHyt+FT0SevBztukTw==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/myst-execute/-/myst-execute-0.1.2.tgz", + "integrity": "sha512-OsIly2afnJp375qou7IPuOHv4D1a2QqfT6ebxtXRQvuZUH6WL9TcdylU700WNXSDB39ojW6WCD728A2pmluGZQ==", "license": "MIT", "dependencies": { "@jupyterlab/services": "^7.0.0", "chalk": "^5.2.0", - "myst-cli-utils": "^2.0.10", - "myst-common": "^1.6.1", + "myst-cli-utils": "^2.0.11", + "myst-common": "^1.7.6", "node-fetch": "^3.3.0", "unist-util-select": "^4.0.3", "vfile": "^5.3.7", @@ -9764,88 +9806,98 @@ "node": "^16.13.0 || >=18.0.0" } }, + "node_modules/myst-ext-button": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/myst-ext-button/-/myst-ext-button-0.0.1.tgz", + "integrity": "sha512-OMFI8oS47ctq9cg9/zCQEprQ5s4Rk4KpkJqExU9+cIHJzsn6o+0s5QA3voliqNs93MuZTH9B8HqPgg6TR31M+g==", + "license": "MIT", + "dependencies": { + "myst-common": "^1.7.8", + "myst-spec-ext": "^1.7.8" + } + }, "node_modules/myst-ext-card": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/myst-ext-card/-/myst-ext-card-1.0.8.tgz", - "integrity": "sha512-PytOUwM6hnv3tWxVnsBX25NtZiqMQM3lIGLhRPylPaNte6EvSFfV3myq/jotUjz9I4qLPaeaM1O2IhvIscS0Zw==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/myst-ext-card/-/myst-ext-card-1.0.9.tgz", + "integrity": "sha512-liqGqwt5zdl0rNBjCUFr8iFnjWBCkm0a19e8Ojw8ti6v7OPCBmWccw9/ut0W8WqUbtvSHL0MQW+RreEeqpsmMg==", "license": "MIT", "dependencies": { - "myst-common": "^1.5.1" + "myst-common": "^1.7.2" } }, "node_modules/myst-ext-exercise": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/myst-ext-exercise/-/myst-ext-exercise-1.0.7.tgz", - "integrity": "sha512-tOewH5qiW2wmGfE6CkCE1EpUif7BVdzitUpEaV7GdaurVGLFTBfNtd/jw0NtRxTTX5qiDTHwZkwPONDjmLXatg==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/myst-ext-exercise/-/myst-ext-exercise-1.0.9.tgz", + "integrity": "sha512-9860YKmE4dxM4pFjjDZ6bduuyz/8+s7+9lw26DCrOTRMHfqGIFdekmkHfDKeLGjZl4NQtfXnwD2H+JgYp0AOxA==", "license": "MIT", "dependencies": { - "myst-common": "^1.5.1" + "myst-common": "^1.7.2" } }, "node_modules/myst-ext-grid": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/myst-ext-grid/-/myst-ext-grid-1.0.7.tgz", - "integrity": "sha512-3VvLQ+ZvAonie72mAs6QFy/ZTqDSC6CF+ewO6wWG5uJRYMdAaCJd10+OJ13dwHhmKB+mVupR5f6O+AhWfasuXw==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/myst-ext-grid/-/myst-ext-grid-1.0.9.tgz", + "integrity": "sha512-GtlWFNDc9iZIasmu7gwjm41EtMa+Imr8IxWc4uLnve1HR6m9GmofNmcKoAViO2wz1ivv7ye7w1rzEf8qaatwqg==", "license": "MIT", "dependencies": { - "myst-common": "^1.5.1" + "myst-common": "^1.7.2" } }, "node_modules/myst-ext-icon": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/myst-ext-icon/-/myst-ext-icon-0.0.1.tgz", - "integrity": "sha512-2WbuulHNJzex2xFdI6ERTo87V4WA0ErsYvbV1Rpd1CWPZ28TI4E+i78/THYia0R3JRzvMcvg+JldRUPAR4870Q==", + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/myst-ext-icon/-/myst-ext-icon-0.0.2.tgz", + "integrity": "sha512-i76dZ0fmyg2G9mSuIp4UC6JC7k6Y4NPoYNGIwYKcMA1aMx2fgAehB+0mjDZMdpzYAnmCAMXoKFFNkXl4GLBuJQ==", "license": "MIT", "dependencies": { - "myst-common": "^1.6.0" + "myst-common": "^1.7.2" } }, "node_modules/myst-ext-proof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/myst-ext-proof/-/myst-ext-proof-1.0.10.tgz", - "integrity": "sha512-EtUwu4BtGRABkiHR7I9prIFeWqYM91dW86l//o0xSB0R4vWKMryVeoLmsDQye8UZnTHe4siCDym4B6fHEk8trA==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/myst-ext-proof/-/myst-ext-proof-1.0.12.tgz", + "integrity": "sha512-35Q8BD05sUK8mvmWle36+jUEGe6/txUOYEVKg4XpqT5sKqezn0uaBWmscbOfMTHGOIdE/fpOxVe249cZMnGwRg==", "license": "MIT", "dependencies": { - "myst-common": "^1.5.1", + "myst-common": "^1.7.2", "myst-spec": "^0.0.5" } }, "node_modules/myst-ext-reactive": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/myst-ext-reactive/-/myst-ext-reactive-1.0.8.tgz", - "integrity": "sha512-SQjGzHJhggzektn1rbGujEOEra0ZC1++UUmyN6iCh7cW8bzznVJTC47AUmCkXKeEqACDxviF3xLVfn/B2bRtGA==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/myst-ext-reactive/-/myst-ext-reactive-1.0.9.tgz", + "integrity": "sha512-fxN5sBKWYSgVEk/GbXbvca+wkDJFhyOzA0rNiEVTizLjBrqjLJONHJu9u75LQCQIk/QJfzU7Dg2UXSK6HYFssw==", "license": "MIT", "dependencies": { - "myst-common": "^1.5.1" + "myst-common": "^1.7.2" } }, "node_modules/myst-ext-tabs": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/myst-ext-tabs/-/myst-ext-tabs-1.0.7.tgz", - "integrity": "sha512-Ew9JRotiuZ7Lqltkjn1bz5znv/ibmIZARbpe0Y0q65jGivhf5ydNc//RnasX7WPPlBAoi3sV2pQ8bCtpBC2Q4Q==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/myst-ext-tabs/-/myst-ext-tabs-1.0.9.tgz", + "integrity": "sha512-Sm1btywckrL/cDqsPE3AP78TQ0RhgBQ6EoFNm8PzJSLc7i7Fbl8VMv6I+uq2JT5H+iSO698o88SUMEIQNDtbgA==", "license": "MIT", "dependencies": { - "myst-common": "^1.5.1" + "myst-common": "^1.7.2" } }, "node_modules/myst-frontmatter": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/myst-frontmatter/-/myst-frontmatter-1.7.1.tgz", - "integrity": "sha512-QklBWWRjeh7kaoIx8l8M0Gqp8dMAclTMYoIk7ojn8/my+XP1JIBaV6iWuka1X9Kynm3gfGo82SVtLVMxUT30Kg==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/myst-frontmatter/-/myst-frontmatter-1.8.2.tgz", + "integrity": "sha512-F+wQX2+exUdRCBa2dSqmyTmdGXfuilU3HdC215HbcA2OgdkMqA53r8WVm+36Z8cP+yVqjMU4Ty3FxvqlgXHKew==", "license": "MIT", "dependencies": { "credit-roles": "^2.1.0", - "doi-utils": "^2.0.0", + "doi-utils": "^2.0.5", "myst-toc": "^0.1.2", "orcid": "^1.0.0", - "simple-validators": "^1.1.0", + "simple-validators": "^1.1.1", "spdx-correct": "^3.2.0" } }, "node_modules/myst-parser": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/myst-parser/-/myst-parser-1.5.6.tgz", - "integrity": "sha512-ZUDrTn8YRbfKoB5LX2KayYug2lnWzwg7Ggt+CzsPlosip+UWKonzVT/yYDCJisZOk7kpOxxsHo8vKuSwfqPhaA==", + "version": "1.5.16", + "resolved": "https://registry.npmjs.org/myst-parser/-/myst-parser-1.5.16.tgz", + "integrity": "sha512-CiOUN9SksnHxoojRiEkLfkHqMBMwHGZhDvonmxsUJHaAE1v3MVBQYSEaK1U2Y13boQPVdpTTr1b94R0P3LBmjg==", "license": "MIT", "dependencies": { "he": "^1.2.0", @@ -9855,12 +9907,12 @@ "markdown-it-dollarmath": "^0.5.0", "markdown-it-footnote": "^3.0.3", "markdown-it-front-matter": "^0.2.3", - "markdown-it-myst": "1.0.10", + "markdown-it-myst": "1.0.11", "markdown-it-myst-extras": "0.3.0", "markdown-it-task-lists": "^2.1.1", - "myst-common": "^1.6.0", - "myst-directives": "^1.5.6", - "myst-roles": "^1.5.6", + "myst-common": "^1.8.2", + "myst-directives": "^1.5.16", + "myst-roles": "^1.5.16", "myst-spec": "^0.0.5", "unified": "^10.1.1", "unist-builder": "^3.0.0", @@ -9871,13 +9923,13 @@ } }, "node_modules/myst-roles": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/myst-roles/-/myst-roles-1.5.6.tgz", - "integrity": "sha512-iHlGOz4KpgeEAhRt0EVWIRP8Zavs8FgVcbGvhAkZkldFiKoel8l4cuppipTNp1wFbIj4a63/ug81tqxMsZ6ZYQ==", + "version": "1.5.16", + "resolved": "https://registry.npmjs.org/myst-roles/-/myst-roles-1.5.16.tgz", + "integrity": "sha512-4ACsBk2dp1heIaTGCAwuzNHAqWsd2vzMwbKQLauwvv0ecYqEvctrsKiRN60RG8+8Dhgw3QivIwxPb/5I0a7QwQ==", "license": "MIT", "dependencies": { - "myst-common": "^1.6.0", - "myst-spec-ext": "^1.6.0" + "myst-common": "^1.8.2", + "myst-spec-ext": "^1.8.2" } }, "node_modules/myst-spec": { @@ -9887,18 +9939,18 @@ "license": "MIT" }, "node_modules/myst-spec-ext": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/myst-spec-ext/-/myst-spec-ext-1.7.1.tgz", - "integrity": "sha512-7ZOuYbJ0GsuVl/NfIxqxzuirwVs0w4y7YiAJRIr6vF4ErHhcpAGqNTYnqNu1U4SyvChho1ZRSBM4YKan/3+QQg==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/myst-spec-ext/-/myst-spec-ext-1.8.2.tgz", + "integrity": "sha512-bjFAy/5YRdyrU1KCVlka7W5zhNswxSymB2IVdmRkjzasGJgCkgjPuPFizp6Z9vY0OK6SVYYzjBzBzAvYGoNwAg==", "license": "MIT", "dependencies": { "myst-spec": "^0.0.5" } }, "node_modules/myst-templates": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/myst-templates/-/myst-templates-1.0.22.tgz", - "integrity": "sha512-FdA54LEZ07pFKC2eMTWKY6rnw2UW/7cg0Gs/nlmXWJ4FVFOJf8a9srox6zf1W4TVakPLZHH/yJ16OmDSUjAzNQ==", + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/myst-templates/-/myst-templates-1.0.25.tgz", + "integrity": "sha512-41WATz/Zxd601OqcWf2gKS8dXjbKbAnaiDUFvcyYCbmdbNbJaXWy8a+RNKPMCEAxN4CpiM0j9ezoBKjRSjqFkw==", "license": "MIT", "dependencies": { "adm-zip": "^0.5.10", @@ -9906,18 +9958,18 @@ "commander": "^10.0.1", "glob": "^10.3.1", "js-yaml": "^4.1.0", - "myst-cli-utils": "^2.0.10", - "myst-common": "^1.5.3", - "myst-frontmatter": "^1.5.3", + "myst-cli-utils": "^2.0.11", + "myst-common": "^1.7.11", + "myst-frontmatter": "^1.7.11", "node-fetch": "^3.3.1", "pretty-hrtime": "^1.0.3", "simple-validators": "^1.0.6" } }, "node_modules/myst-templates/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -9968,24 +10020,24 @@ } }, "node_modules/myst-to-docx": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/myst-to-docx/-/myst-to-docx-1.0.11.tgz", - "integrity": "sha512-Tg/k77whHnxqR1VIgZTkZ9V/Imq2ad70wH+ibvL/VCqmwYnLgVjtenY+a3GXckwjquDirZiYsqSZ8RHecPun+w==", + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/myst-to-docx/-/myst-to-docx-1.0.14.tgz", + "integrity": "sha512-DtD7MUSfKrRxDnlWTMZakIv9H3IPzyGpxxRiXHreStBULAqSqC4NSnLCaBKKxUyHu9AI3dGwokwt3gi4eauBqw==", "license": "MIT", "dependencies": { "buffer-image-size": "^0.6.4", "docx": "^7.3.0", - "myst-common": "^1.5.1", - "myst-frontmatter": "^1.5.1", + "myst-common": "^1.7.9", + "myst-frontmatter": "^1.7.9", "myst-spec": "^0.0.5", - "myst-spec-ext": "^1.5.1", + "myst-spec-ext": "^1.7.9", "unist-util-select": "^4.0.3" } }, "node_modules/myst-to-html": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/myst-to-html/-/myst-to-html-1.5.6.tgz", - "integrity": "sha512-d7exN4Y1f7AMGklwBaeXTNZWI26vEDw35zEs6PjazuI1yF0boG1Pxp9ktM/Zsljx6ndW4CE3T6gJQ5FltNqGUw==", + "version": "1.5.16", + "resolved": "https://registry.npmjs.org/myst-to-html/-/myst-to-html-1.5.16.tgz", + "integrity": "sha512-TRfCiV2otCoO48Lh69b6Z4HxAQk1ElU2OZYViuDzdN8cOyiyj8NM3gBa/Siim2cIyRM1MDpzEFct5oPYOTLfNg==", "license": "MIT", "dependencies": { "classnames": "^2.3.2", @@ -9995,7 +10047,7 @@ "mdast": "^3.0.0", "mdast-util-find-and-replace": "^2.1.0", "mdast-util-to-hast": "^12.3.0", - "myst-common": "^1.6.0", + "myst-common": "^1.8.2", "rehype-format": "^4.0.1", "rehype-parse": "^8.0.4", "rehype-remark": "^9.1.2", @@ -10046,23 +10098,23 @@ } }, "node_modules/myst-to-jats": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/myst-to-jats/-/myst-to-jats-1.0.28.tgz", - "integrity": "sha512-CA2ExCqB1h6af7yLdFWtEf2se/cm7P7QBeiDE0SoUv3TKYrPy4Lmc9CU65Ghwz5Pe9XPv4TfUEgTPXybS1Kdaw==", + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/myst-to-jats/-/myst-to-jats-1.0.34.tgz", + "integrity": "sha512-i4t3g5dT9NuX3LvEv6j37VJGRchhfZN0BYgwbydtNYhrv50KYrUiXmCqvqW3q51pc1a6zm50VwVxDnz160LN2w==", "license": "MIT", "dependencies": { "citation-js-utils": "^1.2.3", "credit-roles": "^2.1.0", - "doi-utils": "^2.0.1", + "doi-utils": "^2.0.5", "jats-tags": "^1.0.8", "jats-utils": "^1.0.8", "katex": "^0.15.2", - "myst-common": "^1.7.1", - "myst-frontmatter": "^1.7.1", + "myst-common": "^1.7.11", + "myst-frontmatter": "^1.7.11", "myst-spec": "^0.0.5", - "myst-spec-ext": "^1.7.1", - "myst-transforms": "^1.3.20", - "nbtx": "^0.2.3", + "myst-spec-ext": "^1.7.11", + "myst-transforms": "^1.3.34", + "nbtx": "^0.4.0", "unified": "^10.1.2", "unist-util-remove": "^3.1.0", "unist-util-select": "^4.0.3", @@ -10072,78 +10124,78 @@ } }, "node_modules/myst-to-md": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/myst-to-md/-/myst-to-md-1.0.13.tgz", - "integrity": "sha512-hF3+b95IxMZsjAW/qDBfdpCYM48YGiy6NQ0c3+hC5KyJk1blw1JG3pJBzlru3ITSvhnQZIclhW7nvi2yW8E7Rg==", + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/myst-to-md/-/myst-to-md-1.0.15.tgz", + "integrity": "sha512-/zs1W3Etbs8rtMKTdjL53pR/6MOTg5Wz7Srlk+Z8HFJ0o5Ftze2uACX7bTJQTbCgx5v4Su09VM6nHL+f3316uQ==", "license": "MIT", "dependencies": { "js-yaml": "^4.1.0", "mdast-util-gfm-footnote": "^1.0.2", "mdast-util-gfm-table": "^1.0.7", "mdast-util-to-markdown": "^1.5.0", - "myst-common": "^1.7.1", - "myst-frontmatter": "^1.7.1", + "myst-common": "^1.7.6", + "myst-frontmatter": "^1.7.6", "unist-util-select": "^4.0.3", "vfile": "^5.3.7", "vfile-reporter": "^7.0.4" } }, "node_modules/myst-to-tex": { - "version": "1.0.37", - "resolved": "https://registry.npmjs.org/myst-to-tex/-/myst-to-tex-1.0.37.tgz", - "integrity": "sha512-oWo16UM5bfCTtlL3OHcaQG4l5tuRi4z+olWkJi2czwcRUSMX3GQrj2948evOpIXPvSJzp7lsZ7Fy5hJ+Wb1kBg==", + "version": "1.0.42", + "resolved": "https://registry.npmjs.org/myst-to-tex/-/myst-to-tex-1.0.42.tgz", + "integrity": "sha512-wRJ0vYMCiPv9V5/I2tzoiToQ0DDB3enkP5ryNMKbfTspo2qqQbQ1EBDCrB+Xtw9MGfYNArg1f5q3gFsTsGM0eA==", "license": "MIT", "dependencies": { - "myst-common": "^1.6.1", - "myst-ext-proof": "^1.0.10", - "myst-frontmatter": "^1.6.1", - "myst-spec-ext": "^1.6.1", + "myst-common": "^1.7.6", + "myst-ext-proof": "^1.0.11", + "myst-frontmatter": "^1.7.6", + "myst-spec-ext": "^1.7.6", "unist-util-remove": "^3.1.0", "unist-util-select": "^4.0.3", "vfile-reporter": "^7.0.4" } }, "node_modules/myst-to-typst": { - "version": "0.0.23", - "resolved": "https://registry.npmjs.org/myst-to-typst/-/myst-to-typst-0.0.23.tgz", - "integrity": "sha512-kKryNHKu2I2SqbcR8udg9AkY3MvkwsPtkaVJamXsnvifrrZU6+l79LesLU9zQbiWSPoy1uJSA395SMBZtUcEpw==", + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/myst-to-typst/-/myst-to-typst-0.0.34.tgz", + "integrity": "sha512-+3JcGJVwr5qvzUu394Z3GJM+SX06y8uOY7aEElKKrg166Yl/wuSUpZk9lU8t9FE7YcMWEquR3INRPtcHkZ/tJw==", "license": "MIT", "dependencies": { - "myst-common": "^1.7.1", - "myst-frontmatter": "^1.7.1", - "myst-spec-ext": "^1.7.1", - "tex-to-typst": "^0.0.7", + "myst-common": "^1.8.1", + "myst-frontmatter": "^1.8.1", + "myst-spec-ext": "^1.8.1", + "tex-to-typst": "^0.0.16", "unist-util-select": "^4.0.3", "vfile-reporter": "^7.0.4" } }, "node_modules/myst-toc": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/myst-toc/-/myst-toc-0.1.2.tgz", - "integrity": "sha512-L1LDwGG0XyHuY84Ge2RkvZzz2kcWGj1nHfg9WGhe2GBEEE7hx8eavKv39319vy3GQ1+lKYuNzYmK8fuyDMcevg==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/myst-toc/-/myst-toc-0.1.3.tgz", + "integrity": "sha512-X5MrAeR+jlanAd7xNsDeC+A8GDQRjhj5u9lmwtsIMzHuxzZ5ttt/91ZJKCh0MfeQUgtHPzp1ZAeeEHMLjXAsUQ==", "license": "MIT", "dependencies": { "simple-validators": "^1.0.6" } }, "node_modules/myst-transforms": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/myst-transforms/-/myst-transforms-1.3.25.tgz", - "integrity": "sha512-wtUaIwcpqQtWomlfOmiQ+Z789MrGJJ8zPXCjtRr3B3+o4Kg3if7sEG2i0gZ8vmihdvp7EszPfWnS3sDHgnPjIw==", + "version": "1.3.39", + "resolved": "https://registry.npmjs.org/myst-transforms/-/myst-transforms-1.3.39.tgz", + "integrity": "sha512-fq1kK897DYQGXxz+dkclFp+yTqiP4yVO7fcuhU95Dcg6lr5ux0Po4FdBPk7ootXHvTneNuqsLG1os/XcK1p51g==", "license": "MIT", "dependencies": { - "doi-utils": "^2.0.0", + "doi-utils": "^2.0.5", "hast-util-from-html": "^2.0.1", "hast-util-to-mdast": "^8.3.1", "intersphinx": "^1.0.2", "js-yaml": "^4.1.0", "katex": "^0.15.2", "mdast-util-find-and-replace": "^2.1.0", - "myst-common": "^1.6.0", - "myst-frontmatter": "^1.6.0", + "myst-common": "^1.8.2", + "myst-frontmatter": "^1.8.2", "myst-spec": "^0.0.5", - "myst-spec-ext": "^1.6.0", - "myst-to-html": "1.5.6", + "myst-spec-ext": "^1.8.2", + "myst-to-html": "1.5.16", "rehype-parse": "^8.0.4", "rehype-remark": "^9.1.2", "unified": "^10.0.0", @@ -10184,9 +10236,9 @@ "license": "MIT" }, "node_modules/nbtx": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/nbtx/-/nbtx-0.2.3.tgz", - "integrity": "sha512-Gi7R1rFty2sCiTuHYHsmK0pdCqZ41LV152O26eKqiDuCxLAU1TbxVFXIHvJjYyJaBUXUdmZmfym6H3eaE+saZA==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/nbtx/-/nbtx-0.4.0.tgz", + "integrity": "sha512-nSlBJ3pcSGS6qryzi1BiutEqGwc39IJMWUOjKFX3jLOW3BZS4tq0/G1+uEtQohQEKya4uago7/gLASbSMNmZ8w==", "license": "MIT" }, "node_modules/negotiator": { @@ -10960,21 +11012,21 @@ "license": "MIT" }, "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "license": "MIT", "dependencies": { - "entities": "^4.4.0" + "entities": "^6.0.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" } }, "node_modules/parse5/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -11275,9 +11327,9 @@ } }, "node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", "license": "MIT", "funding": { "type": "github", @@ -11778,6 +11830,16 @@ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "license": "MIT" }, + "node_modules/rehype-parse/node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/rehype-parse/node_modules/vfile-location": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz", @@ -12161,9 +12223,9 @@ "license": "MIT" }, "node_modules/sanitize-html": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.13.1.tgz", - "integrity": "sha512-ZXtKq89oue4RP7abL9wp/9URJcqQNABB5GGJ2acW1sdO8JTVl92f4ygD7Yc9Ze09VAZhnt2zegeU0tbNsdcLYg==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.0.tgz", + "integrity": "sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA==", "license": "MIT", "dependencies": { "deepmerge": "^4.2.2", @@ -12363,24 +12425,24 @@ "license": "ISC" }, "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", + "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", "license": "MIT", "dependencies": { "is-arrayish": "^0.3.1" } }, "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", + "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", "license": "MIT" }, "node_modules/simple-validators": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-validators/-/simple-validators-1.1.0.tgz", - "integrity": "sha512-bMYR0+Wvc3wLOvB695GXQfP5dz/HiVZq03hZVl2AW4Wy5J5pypeDn+alDPMsVoJ9wLbT3AKhyIGmimT/DPa9bg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/simple-validators/-/simple-validators-1.1.1.tgz", + "integrity": "sha512-/+gpAy4BVCR1zk1Pf8q1lvEQMeTC8a1vEiGnTjfe45MTgqerZzNHAxbnS+72jJvv5FCUanyKT4QfZT3cUFpbDw==", "license": "MIT" }, "node_modules/slash": { @@ -12921,15 +12983,15 @@ } }, "node_modules/tex-to-myst": { - "version": "1.0.37", - "resolved": "https://registry.npmjs.org/tex-to-myst/-/tex-to-myst-1.0.37.tgz", - "integrity": "sha512-Gb7jbbBFZYBvzWWyysUn3OnaCCdJtJtUmk7hOK9Za7btrjenj4GZuO4vpgDDXruqgBfUIxpenczbZkphMftHgw==", + "version": "1.0.42", + "resolved": "https://registry.npmjs.org/tex-to-myst/-/tex-to-myst-1.0.42.tgz", + "integrity": "sha512-WGhAbReToq/0o+5S73xWp0K6/xJnTfjh3DlvW7S9zyMLF5XPxJ36FHFsoyedE+EbNfN7lrfxPJmhOyzsYFfi8Q==", "license": "MIT", "dependencies": { "@unified-latex/unified-latex": "^1.2.2", - "myst-common": "^1.6.1", - "myst-frontmatter": "^1.6.1", - "myst-spec-ext": "^1.6.1", + "myst-common": "^1.7.6", + "myst-frontmatter": "^1.7.6", + "myst-spec-ext": "^1.7.6", "unist-builder": "^3.0.0", "unist-util-remove": "^3.1.0", "unist-util-select": "^4.0.3", @@ -12937,9 +12999,9 @@ } }, "node_modules/tex-to-typst": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/tex-to-typst/-/tex-to-typst-0.0.7.tgz", - "integrity": "sha512-p6y30L7CsWMNYFW1E8xjIgWr4ljW0bO27lc4hqpxYSz67CBn3gC/ccpeECuAhkTU9RS1hGuI66oW5hGmmRymdA==", + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/tex-to-typst/-/tex-to-typst-0.0.16.tgz", + "integrity": "sha512-yoHb3cuwnLLf+RMNdmByd/9RD3EKEXsCNylQ96VUqgRk7TOdB13c3b4P6Ld2jGhDUSBNERiwhH3eSzogXoKa2A==", "license": "MIT", "dependencies": { "@unified-latex/unified-latex": "^1.4.0", @@ -13654,9 +13716,9 @@ } }, "node_modules/vfile-location/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -13702,9 +13764,9 @@ } }, "node_modules/vfile-reporter/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "license": "MIT", "engines": { "node": ">=12" @@ -13731,9 +13793,9 @@ } }, "node_modules/vfile-reporter/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -14698,9 +14760,9 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -14764,12 +14826,12 @@ "license": "ISC" }, "node_modules/yjs": { - "version": "13.6.19", - "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.19.tgz", - "integrity": "sha512-GNKw4mEUn5yWU2QPHRx8jppxmCm9KzbBhB4qJLUJFiiYD0g/tDVgXQ7aPkyh01YO28kbs2J/BEbWBagjuWyejw==", + "version": "13.6.27", + "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.27.tgz", + "integrity": "sha512-OIDwaflOaq4wC6YlPBy2L6ceKeKuF7DeTxx+jPzv1FHn9tCZ0ZwSRnUBxD05E3yed46fv/FWJbvR+Ud7x0L7zw==", "license": "MIT", "dependencies": { - "lib0": "^0.2.86" + "lib0": "^0.2.99" }, "engines": { "node": ">=16.0.0", diff --git a/package.json b/package.json index 802b205..ded861d 100644 --- a/package.json +++ b/package.json @@ -51,10 +51,10 @@ "commander": "^11.1.0", "inquirer": "^9.2.23", "js-yaml": "^4.1.0", - "myst-cli": "^1.3.12", - "myst-cli-utils": "^2.0.10", - "myst-common": "^1.7.1", - "myst-frontmatter": "^1.7.1" + "myst-cli": "^1.6.2", + "myst-cli-utils": "^2.0.11", + "myst-common": "^1.8.2", + "myst-frontmatter": "^1.8.2" }, "devDependencies": { "@changesets/cli": "^2.27.1", diff --git a/src/cli/deposit.ts b/src/cli/deposit.ts index 519dcf3..ed4fb15 100644 --- a/src/cli/deposit.ts +++ b/src/cli/deposit.ts @@ -3,17 +3,18 @@ import fs from 'node:fs'; import { load as yamlLoad } from 'js-yaml'; import { Command, Option } from 'commander'; import inquirer from 'inquirer'; -import type { UploadType, Contributor as ContributorZ, DepositionMetadata } from '../index.js'; +import type { UploadType, Contributor as ZenodoContributor, DepositionMetadata } from '../index.js'; import { ZenodoClient } from '../index.js'; import type { ISession } from 'myst-cli'; import { + castSession, filterPages, findCurrentProjectAndLoad, getFileContent, loadConfig, loadProject, - parseMyst, processProject, + resolveFrontmatterParts, selectors, Session, } from 'myst-cli'; @@ -22,12 +23,16 @@ import { extractPart, plural } from 'myst-common'; import { mystToHtml } from 'myst-to-html'; import type { Affiliation, Contributor, ProjectFrontmatter } from 'myst-frontmatter'; import { clirun } from 'myst-cli-utils'; -import { addZenodoToConfig } from './utils.js'; +import { addDoiToConfig, addZenodoToConfig } from './utils.js'; + +const DEPOSIT_FILE_EXTENSIONS = ['.pdf', '.pptx', '.png']; type DepositOptions = { type?: UploadType; file?: string; sandbox?: boolean; + community?: string; + publish?: boolean; }; type DepositSource = { @@ -47,18 +52,28 @@ export async function depositArticleFromSource(session: ISession, depositSource: let frontmatter: ProjectFrontmatter | undefined; const dois: Record = {}; if (depositFile === configFile) { - const { pages } = await loadProject(session, projectPath); - const fileContents = await getFileContent( - session, - pages.map(({ file }) => file), - { projectPath, imageExtensions: [] }, - ); + let fileContents: Awaited>; + try { + const { pages } = await loadProject(session, projectPath); + fileContents = await getFileContent( + session, + pages.map(({ file }) => file), + { projectPath, imageExtensions: [] }, + ); + } catch (error) { + fileContents = []; + } if (projectFrontmatter?.parts?.abstract) { - abstractPart = parseMyst(session, projectFrontmatter.parts.abstract.join('\n\n'), configFile); + const abstractContent = castSession(session).$getMdast( + projectFrontmatter.parts.abstract[0], + )?.pre; + abstractPart = abstractContent?.mdast; } else { - fileContents.forEach(({ mdast }) => { + fileContents.forEach(({ mdast, frontmatter: fileFrontmatter }) => { if (abstractPart) return; - abstractPart = extractPart(mdast, 'abstract'); + abstractPart = extractPart(mdast, 'abstract', { + frontmatterParts: resolveFrontmatterParts(session, fileFrontmatter), + }); }); } fileContents.forEach(({ references }) => { @@ -166,11 +181,7 @@ async function getDepositSources( return depositSources; } -function issueDataFromArticles( - session: ISession, - articles: { frontmatter: ProjectFrontmatter }[], - opts: DepositOptions, -) { +function issueDataFromArticles(articles: { frontmatter: ProjectFrontmatter }[]) { let venueTitle: string | undefined; let venueAbbr: string | undefined; let venueDoi: string | undefined; @@ -345,7 +356,7 @@ function issueDataFromArticles( async function deposit(session: Session, opts: DepositOptions) { let { type: depositType } = opts; - const { sandbox } = opts; + const { sandbox, community, publish } = opts; const client = new ZenodoClient(process.env.ZENODO_TOKEN, sandbox); if (!depositType) { const choices: { name: string; value: UploadType }[] = [ @@ -385,36 +396,56 @@ async function deposit(session: Session, opts: DepositOptions) { `🔍 Found ${plural('%s article(s)', depositArticles)} for ${depositType} deposit`, ); const { venueTitle, venueAbbr, venueUrl, eventDate, eventLocation, publicationEditors } = - issueDataFromArticles(session, depositArticles, opts); + issueDataFromArticles(depositArticles); for (let index = 0; index < depositArticles.length; index++) { - const article = depositArticles[index]; - let zenodoDepositId = getZenodoId(article.configFile); - if (!article.frontmatter.title) throw new Error('The deposit must have a title'); - if (!article.abstract) throw new Error('The deposit must have an abstract'); + const { configFile, frontmatter, abstract, project } = depositArticles[index]; + session.log.info(`\nProcessing: "${frontmatter.title}"`); + if (!configFile) { + throw new Error(`No config file found for source: ${frontmatter.title}`); + } + let zenodoDepositId = getZenodoId(configFile); + if (!zenodoDepositId) { + const createdData = await client.createEmptyDeposition(); + zenodoDepositId = createdData.id; + session.log.debug(JSON.stringify(createdData, null, 2)); + session.log.info(`🎉 Created deposit ${zenodoDepositId}: ${createdData.links.html}`); + addZenodoToConfig(configFile, zenodoDepositId, sandbox); + } else { + session.log.info(`🔍 Found existing deposit ID ${zenodoDepositId}`); + } + const existingData = await client.getDeposition(zenodoDepositId); + if (existingData.submitted) { + throw new Error(`Deposit ${zenodoDepositId} already submitted`); + } + if (!frontmatter.title) throw new Error('The deposit must have a title'); + if (!abstract) throw new Error('The deposit must have an abstract'); const data: DepositionMetadata = { - title: article.frontmatter.title, - description: article.abstract, + title: frontmatter.title, + description: abstract, upload_type: depositType, - publication_date: article.frontmatter.date, + publication_date: frontmatter.date, imprint_publisher: venueAbbr || venueTitle, creators: - article.frontmatter.authors?.map((a) => ({ + frontmatter.authors?.map((a) => ({ // TODO: improve this for non-western name, particles, etc. name: `${a.nameParsed?.family}, ${a.nameParsed?.given}` as string, affiliation: a.affiliations - ?.map((aff) => article.frontmatter.affiliations?.find((test) => test.id === aff)) + ?.map((aff) => frontmatter.affiliations?.find((test) => test.id === aff)) ?.map((aff) => aff?.name) ?.filter((aff) => !!aff) .join(', '), orcid: a.orcid, })) ?? [], - doi: article.frontmatter.doi, + doi: frontmatter.doi, }; - if (depositType === 'presentation') { + if (community) { + data.communities = [{ identifier: community }]; + } + if (depositType === 'presentation' || depositType === 'poster') { data.conference_title = venueTitle; data.contributors = publicationEditors?.map( - (e): ContributorZ => ({ + (e): ZenodoContributor => ({ type: 'Editor', name: e.name as string, orcid: e.orcid, @@ -425,39 +456,53 @@ async function deposit(session: Session, opts: DepositOptions) { data.conference_url = venueUrl; data.conference_dates = eventDate; data.conference_place = eventLocation; - if (article.frontmatter.github) { + if (frontmatter.github) { data.custom = { - 'code:codeRepository': article.frontmatter.github, + 'code:codeRepository': frontmatter.github, }; } } - if (zenodoDepositId) { - const depositData = await client.updateDeposition(zenodoDepositId, data); - session.log.debug(JSON.stringify(depositData, null, 2)); + session.log.debug(JSON.stringify(data, null, 2)); + const updatedData = await client.updateDeposition(zenodoDepositId, data); + session.log.debug(JSON.stringify(updatedData, null, 2)); + session.log.info(`✍️ Updated deposit ${zenodoDepositId}: ${updatedData.links.html}`); + if (updatedData.files?.length) { session.log.info( - `Updating a deposit with ${zenodoDepositId}. See the record at:\n${depositData.links.html}`, + `🛑 Skipping files - deposit already has ${plural('%s file(s)', updatedData.files)} uploaded`, ); } else { - const depositData = await client.createDeposition(data); - zenodoDepositId = depositData.id as number; - session.log.debug(JSON.stringify(depositData, null, 2)); - session.log.info( - `Creating a deposit with ${zenodoDepositId}. See the record at:\n${depositData.links.html}`, - ); - addZenodoToConfig(article.configFile, zenodoDepositId, sandbox); - } - for (let jj = 0; jj < (article.project?.downloads?.length ?? 0); jj++) { - const download = article.project?.downloads?.[jj]; - if (download?.url) { - const relativePath = path.join(path.dirname(article.configFile as string), download.url); + let filesToUpload = project?.downloads + ?.map((download) => download?.url) + .filter((download): download is string => !!download) + .map((download) => path.resolve(path.dirname(configFile), download)); + if (!filesToUpload?.length) { + filesToUpload = fs + .readdirSync(path.dirname(configFile)) + .filter((file) => DEPOSIT_FILE_EXTENSIONS.find((ext) => file.toLowerCase().endsWith(ext))) + .map((file) => path.resolve(path.dirname(configFile), file)); + } + if (!filesToUpload?.length) { + throw new Error(`🚨 No files found to upload for deposit ${zenodoDepositId}`); + } + session.log.info(`🔍 Found ${plural('%s file(s)', filesToUpload)} to upload`); + for (let jj = 0; jj < filesToUpload.length; jj++) { + session.log.debug(`Uploading ${filesToUpload[jj]}`); try { - const file = await client.uploadFile(zenodoDepositId, relativePath); + await client.uploadFile(existingData.links.bucket, filesToUpload[jj]); } catch (error) { session.log.warn('Error writing file, trying again!'); - const file = await client.uploadFile(zenodoDepositId, relativePath); + await client.uploadFile(existingData.links.bucket, filesToUpload[jj]); } } } + if (publish) { + const publishedData = await client.publishDeposition(zenodoDepositId); + session.log.debug(JSON.stringify(publishedData, null, 2)); + if (!frontmatter.doi) { + addDoiToConfig(configFile, publishedData.metadata.doi); + } + session.log.info(`🚀 Published deposit ${zenodoDepositId}: ${publishedData.links.html}`); + } } } @@ -480,12 +525,7 @@ function makeDepositCLI(program: Command) { .addOption( new Option('--type ', 'Deposit type').choices(choices).default('presentation'), ) - // .addOption(new Option('--id ', 'Deposit batch id')) - // .addOption(new Option('--name ', 'Depositor name').default('Curvenote')) - // .addOption(new Option('--email ', 'Depositor email').default('doi@curvenote.com')) - // .addOption(new Option('--registrant ', 'Registrant organization').default('Crossref')) - // .addOption(new Option('-o, --output ', 'Output file')) - // .addOption(new Option('--prefix ', 'Prefix for new DOIs')) + .addOption(new Option('--community ', 'Zenodo community identifier')) .addOption(new Option('--sandbox', 'Use the sandbox for testing purposes')) .addOption(new Option('--publish', 'Publish the resource')) .action(clirun(deposit, { program, getSession: (logger) => new Session({ logger }) })); @@ -500,9 +540,9 @@ function getZenodoId(configFile: string | undefined): number | undefined { // This shouldn't be needed in the future if (!configFile) return undefined; const data = yamlLoad(fs.readFileSync(configFile).toString()) as { - project: { zenodo?: string }; + project: { identifiers?: { zenodo?: string } }; }; - const url = data?.project?.zenodo; + const url = data?.project?.identifiers?.zenodo; if (!url) return undefined; return Number.parseInt(String(url).split('/').slice(-1)[0], 10); } diff --git a/src/cli/utils.ts b/src/cli/utils.ts index 25c6e7f..8883e90 100644 --- a/src/cli/utils.ts +++ b/src/cli/utils.ts @@ -1,17 +1,51 @@ import fs from 'node:fs'; +/** + * Add Zenodo ID to project identifiers in config file + * + * This function assumes there is no zenodo identifier present + */ export function addZenodoToConfig( configFile: string | undefined, zenodoId: string | number, sandbox?: boolean, ) { + if (!configFile) return; + const file = fs.readFileSync(configFile).toString(); + const lines = file.split('\n'); + const identifiersIndex = lines.findIndex((line) => line.trim() === 'identifiers:'); + let newLines: string[]; + if (identifiersIndex !== -1) { + newLines = [ + ...lines.slice(0, identifiersIndex + 1), + ` zenodo: https://${sandbox ? 'sandbox.' : ''}zenodo.org/deposit/${zenodoId}`, + ...lines.slice(identifiersIndex + 1), + ]; + } else { + const projectIndex = lines.findIndex((line) => line.trim() === 'project:'); + newLines = [ + ...lines.slice(0, projectIndex + 1), + ` identifiers:`, + ` zenodo: https://${sandbox ? 'sandbox.' : ''}zenodo.org/deposit/${zenodoId}`, + ...lines.slice(projectIndex + 1), + ]; + } + fs.writeFileSync(configFile, newLines.join('\n')); +} + +/** + * Add Zenodo ID to project identifiers in config file + * + * This function assumes there is no zenodo identifier present + */ +export function addDoiToConfig(configFile: string | undefined, doi: string) { if (!configFile) return; const file = fs.readFileSync(configFile).toString(); const lines = file.split('\n'); const projectIndex = lines.findIndex((line) => line.trim() === 'project:'); const newLines = [ ...lines.slice(0, projectIndex + 1), - ` zenodo: https://${sandbox ? 'sandbox.' : ''}zenodo.org/deposit/${zenodoId}`, + ` doi: ${doi}`, ...lines.slice(projectIndex + 1), ]; fs.writeFileSync(configFile, newLines.join('\n')); diff --git a/src/index.ts b/src/index.ts index 34f36cf..23343cc 100644 --- a/src/index.ts +++ b/src/index.ts @@ -538,6 +538,17 @@ export interface DepositionMetadata { }; } +export type Deposition = { + id: number; + submitted: boolean; + metadata: DepositionMetadata; + links: { + self: string; + html: string; + bucket: string; + }; +}; + export class ZenodoClient { private accessToken: string; private axiosInstance: AxiosInstance; @@ -559,6 +570,27 @@ export class ZenodoClient { }); } + /** + * Create a new deposition with the provided metadata. + * @param metadata Deposition metadata + */ + public async createEmptyDeposition(): Promise { + try { + const response = await this.axiosInstance.post( + '/deposit/depositions', + {}, + { + headers: { + 'Content-Type': 'application/json', + }, + }, + ); + return response.data; + } catch (error: any) { + this.handleError(error); + } + } + /** * Create a new deposition with the provided metadata. * @param metadata Deposition metadata @@ -580,6 +612,19 @@ export class ZenodoClient { } } + /** + * Get a deposition by ID. + * @param depositionId ID of the deposition + */ + public async getDeposition(depositionId: number): Promise { + try { + const response = await this.axiosInstance.get(`/deposit/depositions/${depositionId}`); + return response.data; + } catch (error: any) { + this.handleError(error); + } + } + /** * Create a new deposition with the provided metadata. * @param metadata Deposition metadata @@ -606,23 +651,19 @@ export class ZenodoClient { * @param depositionId ID of the deposition * @param filePath Path to the file to upload */ - public async uploadFile(depositionId: number, filePath: string): Promise { + public async uploadFile(bucketUrl: string, filePath: string): Promise { try { - // Get the deposition to retrieve the bucket URL - const deposition = await this.axiosInstance.get(`/deposit/depositions/${depositionId}`); - const bucketUrl: string = deposition.data.links.bucket; - - // Step 2: Prepare the file for upload + // Prepare the file for upload const fileName = path.basename(filePath); const url = `${bucketUrl}/${encodeURIComponent(fileName)}`; const fileStream = fs.createReadStream(filePath); - // Step 3: Calculate the file size + // Calculate the file size const stats = fs.statSync(filePath); const fileSizeInBytes = stats.size; - // Step 4: Set the appropriate headers and config + // Set the appropriate headers and config const response = await axios.put(url, fileStream, { headers: { 'Content-Type': 'application/octet-stream', // or the actual MIME type of your file @@ -673,7 +714,7 @@ export class ZenodoClient { * Handle API errors. * @param error Error object */ - private handleError(error: any): void { + private handleError(error: any): never { if (error.response) { console.error('API Error:', error.response.status, error.response.data); throw new Error(`API Error: ${error.response.status} ${JSON.stringify(error.response.data)}`); From b59185d5fb6872f84a21cd9e538d151b619e9172 Mon Sep 17 00:00:00 2001 From: Franklin Koch Date: Wed, 8 Oct 2025 13:45:30 -0600 Subject: [PATCH 2/3] Fix addDoiToConfig docstring --- src/cli/utils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cli/utils.ts b/src/cli/utils.ts index 8883e90..e7df13a 100644 --- a/src/cli/utils.ts +++ b/src/cli/utils.ts @@ -34,9 +34,9 @@ export function addZenodoToConfig( } /** - * Add Zenodo ID to project identifiers in config file + * Add DOI to project in config file * - * This function assumes there is no zenodo identifier present + * This function assumes there is no DOI present */ export function addDoiToConfig(configFile: string | undefined, doi: string) { if (!configFile) return; From 8fb85447cf1cc68a20776bd1298e2d07b97c0be8 Mon Sep 17 00:00:00 2001 From: Franklin Koch Date: Wed, 8 Oct 2025 14:33:23 -0600 Subject: [PATCH 3/3] Update readme --- README.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index dabd945..57c1278 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/continuous-foundation/zenodo-utils/blob/main/LICENSE) ![CI](https://github.com/continuous-foundation/zenodo-utils/workflows/CI/badge.svg) -Utilities to submit information to [Zenodo](https://zenodo.org) in your application. Works with MyST Frontmatter for a single way to define your publishing information for packages and have bulk uploads and deposits for long-term archiving. +Utilities to submit information to [Zenodo](https://zenodo.org) in your application. Works with [MyST Frontmatter](https://mystmd.org) for a single way to define your publishing information for packages and have bulk uploads and deposits for long-term archiving. ```shell npm install zenodo-utils @@ -12,7 +12,20 @@ npm install zenodo-utils ## Command Line -The library installs a command line interface (CLI) which allows for deposit and upload of content to Zenodo. +The library installs a command line interface (CLI) which allows for deposit and upload of content to Zenodo. Deposits require metadata in a `myst.yml` file, including `title`, `authors`, and `abstract`. You may specify the files to be deposited under `downloads`, or the CLI will attempt to discover files in the same folder. You can run the CLI in a folder with a `myst.yml` file, or you can run it in a parent folder, where it will traverse the children and potentially find multiple `myst.yml` files (and therefore create multiple deposits). + +You must provide your Zenodo API token as an environment variable `ZENODO_TOKEN`. Basic usage looks like: + +``` +ZENODO_TOKEN= zenodo deposit --type presentation --publish +``` + +Available options for `zenodo deposit` include: + +- `--type `: Deposit type (e.g. presentation, poster, publication, dataset, etc) +- `--publish`: Publish deposit immediately when uploads are complete +- `--community `: Add deposit to Zenodo community +- `--sandbox`: Deposit to zenodo sandbox environment ---