From 018ec31cfc1e48a2391f4619e5c765cb5914a6f2 Mon Sep 17 00:00:00 2001 From: Matthieu B <66959271+mtthidoteu@users.noreply.github.com> Date: Mon, 20 May 2024 14:36:36 +0000 Subject: [PATCH 01/33] prep for allowing editing of existing users #414 --- apps/wizarr-backend/wizarr_backend/helpers/users.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/apps/wizarr-backend/wizarr_backend/helpers/users.py b/apps/wizarr-backend/wizarr_backend/helpers/users.py index 6417d5d2..2f7c8f4b 100644 --- a/apps/wizarr-backend/wizarr_backend/helpers/users.py +++ b/apps/wizarr-backend/wizarr_backend/helpers/users.py @@ -163,3 +163,12 @@ def create_user(**kwargs) -> Users: # Return the user return user + +def edit_user_expiration(user_id: int, expiry: datetime) -> Users: + """Add a user expiration date to an existing user or edit existing expiration date""" + user = Users.get_by_id(user_id) + user.expires = expiry + user.save() + return user + + \ No newline at end of file From f51cad3eb3edfa7a9ce611e427a0505bac67b4e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 06:48:09 +0000 Subject: [PATCH 02/33] --- updated-dependencies: - dependency-name: cryptography dependency-type: direct:production dependency-group: pip - dependency-name: requests dependency-type: direct:production dependency-group: pip - dependency-name: werkzeug dependency-type: direct:production dependency-group: pip - dependency-name: gunicorn dependency-type: direct:production dependency-group: pip - dependency-name: pydantic dependency-type: direct:production dependency-group: pip - dependency-name: idna dependency-type: indirect dependency-group: pip - dependency-name: jinja2 dependency-type: indirect dependency-group: pip ... Signed-off-by: dependabot[bot] --- apps/wizarr-backend/poetry.lock | 194 +++++++++++++++-------------- apps/wizarr-backend/pyproject.toml | 10 +- 2 files changed, 107 insertions(+), 97 deletions(-) diff --git a/apps/wizarr-backend/poetry.lock b/apps/wizarr-backend/poetry.lock index a87d9f02..88a28c27 100644 --- a/apps/wizarr-backend/poetry.lock +++ b/apps/wizarr-backend/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "aniso8601" @@ -483,47 +483,56 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "41.0.4" +version = "42.0.4" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:80907d3faa55dc5434a16579952ac6da800935cd98d14dbd62f6f042c7f5e839"}, - {file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:35c00f637cd0b9d5b6c6bd11b6c3359194a8eba9c46d4e875a3660e3b400005f"}, - {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cecfefa17042941f94ab54f769c8ce0fe14beff2694e9ac684176a2535bf9714"}, - {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e40211b4923ba5a6dc9769eab704bdb3fbb58d56c5b336d30996c24fcf12aadb"}, - {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:23a25c09dfd0d9f28da2352503b23e086f8e78096b9fd585d1d14eca01613e13"}, - {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2ed09183922d66c4ec5fdaa59b4d14e105c084dd0febd27452de8f6f74704143"}, - {file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5a0f09cefded00e648a127048119f77bc2b2ec61e736660b5789e638f43cc397"}, - {file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9eeb77214afae972a00dee47382d2591abe77bdae166bda672fb1e24702a3860"}, - {file = "cryptography-41.0.4-cp37-abi3-win32.whl", hash = "sha256:3b224890962a2d7b57cf5eeb16ccaafba6083f7b811829f00476309bce2fe0fd"}, - {file = "cryptography-41.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:c880eba5175f4307129784eca96f4e70b88e57aa3f680aeba3bab0e980b0f37d"}, - {file = "cryptography-41.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:004b6ccc95943f6a9ad3142cfabcc769d7ee38a3f60fb0dddbfb431f818c3a67"}, - {file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:86defa8d248c3fa029da68ce61fe735432b047e32179883bdb1e79ed9bb8195e"}, - {file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:37480760ae08065437e6573d14be973112c9e6dcaf5f11d00147ee74f37a3829"}, - {file = "cryptography-41.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b5f4dfe950ff0479f1f00eda09c18798d4f49b98f4e2006d644b3301682ebdca"}, - {file = "cryptography-41.0.4-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7e53db173370dea832190870e975a1e09c86a879b613948f09eb49324218c14d"}, - {file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5b72205a360f3b6176485a333256b9bcd48700fc755fef51c8e7e67c4b63e3ac"}, - {file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:93530900d14c37a46ce3d6c9e6fd35dbe5f5601bf6b3a5c325c7bffc030344d9"}, - {file = "cryptography-41.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efc8ad4e6fc4f1752ebfb58aefece8b4e3c4cae940b0994d43649bdfce8d0d4f"}, - {file = "cryptography-41.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c3391bd8e6de35f6f1140e50aaeb3e2b3d6a9012536ca23ab0d9c35ec18c8a91"}, - {file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:0d9409894f495d465fe6fda92cb70e8323e9648af912d5b9141d616df40a87b8"}, - {file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8ac4f9ead4bbd0bc8ab2d318f97d85147167a488be0e08814a37eb2f439d5cf6"}, - {file = "cryptography-41.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:047c4603aeb4bbd8db2756e38f5b8bd7e94318c047cfe4efeb5d715e08b49311"}, - {file = "cryptography-41.0.4.tar.gz", hash = "sha256:7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a"}, + {file = "cryptography-42.0.4-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:ffc73996c4fca3d2b6c1c8c12bfd3ad00def8621da24f547626bf06441400449"}, + {file = "cryptography-42.0.4-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:db4b65b02f59035037fde0998974d84244a64c3265bdef32a827ab9b63d61b18"}, + {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad9c385ba8ee025bb0d856714f71d7840020fe176ae0229de618f14dae7a6e2"}, + {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69b22ab6506a3fe483d67d1ed878e1602bdd5912a134e6202c1ec672233241c1"}, + {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e09469a2cec88fb7b078e16d4adec594414397e8879a4341c6ace96013463d5b"}, + {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3e970a2119507d0b104f0a8e281521ad28fc26f2820687b3436b8c9a5fcf20d1"}, + {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:e53dc41cda40b248ebc40b83b31516487f7db95ab8ceac1f042626bc43a2f992"}, + {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:c3a5cbc620e1e17009f30dd34cb0d85c987afd21c41a74352d1719be33380885"}, + {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6bfadd884e7280df24d26f2186e4e07556a05d37393b0f220a840b083dc6a824"}, + {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:01911714117642a3f1792c7f376db572aadadbafcd8d75bb527166009c9f1d1b"}, + {file = "cryptography-42.0.4-cp37-abi3-win32.whl", hash = "sha256:fb0cef872d8193e487fc6bdb08559c3aa41b659a7d9be48b2e10747f47863925"}, + {file = "cryptography-42.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:c1f25b252d2c87088abc8bbc4f1ecbf7c919e05508a7e8628e6875c40bc70923"}, + {file = "cryptography-42.0.4-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:15a1fb843c48b4a604663fa30af60818cd28f895572386e5f9b8a665874c26e7"}, + {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1327f280c824ff7885bdeef8578f74690e9079267c1c8bd7dc5cc5aa065ae52"}, + {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ffb03d419edcab93b4b19c22ee80c007fb2d708429cecebf1dd3258956a563a"}, + {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:1df6fcbf60560d2113b5ed90f072dc0b108d64750d4cbd46a21ec882c7aefce9"}, + {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:44a64043f743485925d3bcac548d05df0f9bb445c5fcca6681889c7c3ab12764"}, + {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:3c6048f217533d89f2f8f4f0fe3044bf0b2090453b7b73d0b77db47b80af8dff"}, + {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6d0fbe73728c44ca3a241eff9aefe6496ab2656d6e7a4ea2459865f2e8613257"}, + {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:887623fe0d70f48ab3f5e4dbf234986b1329a64c066d719432d0698522749929"}, + {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:ce8613beaffc7c14f091497346ef117c1798c202b01153a8cc7b8e2ebaaf41c0"}, + {file = "cryptography-42.0.4-cp39-abi3-win32.whl", hash = "sha256:810bcf151caefc03e51a3d61e53335cd5c7316c0a105cc695f0959f2c638b129"}, + {file = "cryptography-42.0.4-cp39-abi3-win_amd64.whl", hash = "sha256:a0298bdc6e98ca21382afe914c642620370ce0470a01e1bef6dd9b5354c36854"}, + {file = "cryptography-42.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5f8907fcf57392cd917892ae83708761c6ff3c37a8e835d7246ff0ad251d9298"}, + {file = "cryptography-42.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:12d341bd42cdb7d4937b0cabbdf2a94f949413ac4504904d0cdbdce4a22cbf88"}, + {file = "cryptography-42.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1cdcdbd117681c88d717437ada72bdd5be9de117f96e3f4d50dab3f59fd9ab20"}, + {file = "cryptography-42.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0e89f7b84f421c56e7ff69f11c441ebda73b8a8e6488d322ef71746224c20fce"}, + {file = "cryptography-42.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f1e85a178384bf19e36779d91ff35c7617c885da487d689b05c1366f9933ad74"}, + {file = "cryptography-42.0.4-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d2a27aca5597c8a71abbe10209184e1a8e91c1fd470b5070a2ea60cafec35bcd"}, + {file = "cryptography-42.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4e36685cb634af55e0677d435d425043967ac2f3790ec652b2b88ad03b85c27b"}, + {file = "cryptography-42.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f47be41843200f7faec0683ad751e5ef11b9a56a220d57f300376cd8aba81660"}, + {file = "cryptography-42.0.4.tar.gz", hash = "sha256:831a4b37accef30cccd34fcb916a5d7b5be3cbbe27268a02832c3e450aea39cb"}, ] [package.dependencies] -cffi = ">=1.12" +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} [package.extras] docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] -docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] +docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] nox = ["nox"] -pep8test = ["black", "check-sdist", "mypy", "ruff"] +pep8test = ["check-sdist", "click", "mypy", "ruff"] sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] [[package]] @@ -856,22 +865,23 @@ test = ["objgraph", "psutil"] [[package]] name = "gunicorn" -version = "21.2.0" +version = "22.0.0" description = "WSGI HTTP Server for UNIX" optional = false -python-versions = ">=3.5" +python-versions = ">=3.7" files = [ - {file = "gunicorn-21.2.0-py3-none-any.whl", hash = "sha256:3213aa5e8c24949e792bcacfc176fef362e7aac80b76c56f6b5122bf350722f0"}, - {file = "gunicorn-21.2.0.tar.gz", hash = "sha256:88ec8bff1d634f98e61b9f65bc4bf3cd918a90806c6f5c48bc5603849ec81033"}, + {file = "gunicorn-22.0.0-py3-none-any.whl", hash = "sha256:350679f91b24062c86e386e198a15438d53a7a8207235a78ba1b53df4c4378d9"}, + {file = "gunicorn-22.0.0.tar.gz", hash = "sha256:4a0b436239ff76fb33f11c07a16482c521a7e09c1ce3cc293c2330afe01bec63"}, ] [package.dependencies] packaging = "*" [package.extras] -eventlet = ["eventlet (>=0.24.1)"] +eventlet = ["eventlet (>=0.24.1,!=0.36.0)"] gevent = ["gevent (>=1.4.0)"] setproctitle = ["setproctitle"] +testing = ["coverage", "eventlet", "gevent", "pytest", "pytest-cov"] tornado = ["tornado (>=0.2)"] [[package]] @@ -901,13 +911,13 @@ pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_ve [[package]] name = "idna" -version = "3.4" +version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] [[package]] @@ -934,13 +944,13 @@ files = [ [[package]] name = "jinja2" -version = "3.1.2" +version = "3.1.4" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, ] [package.dependencies] @@ -1226,47 +1236,47 @@ files = [ [[package]] name = "pydantic" -version = "1.10.12" +version = "1.10.13" description = "Data validation and settings management using python type hints" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718"}, - {file = "pydantic-1.10.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe"}, - {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b"}, - {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d"}, - {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09"}, - {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed"}, - {file = "pydantic-1.10.12-cp310-cp310-win_amd64.whl", hash = "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a"}, - {file = "pydantic-1.10.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc"}, - {file = "pydantic-1.10.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405"}, - {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62"}, - {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494"}, - {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246"}, - {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33"}, - {file = "pydantic-1.10.12-cp311-cp311-win_amd64.whl", hash = "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f"}, - {file = "pydantic-1.10.12-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a"}, - {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565"}, - {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350"}, - {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303"}, - {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5"}, - {file = "pydantic-1.10.12-cp37-cp37m-win_amd64.whl", hash = "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8"}, - {file = "pydantic-1.10.12-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62"}, - {file = "pydantic-1.10.12-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb"}, - {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0"}, - {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c"}, - {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d"}, - {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33"}, - {file = "pydantic-1.10.12-cp38-cp38-win_amd64.whl", hash = "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47"}, - {file = "pydantic-1.10.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6"}, - {file = "pydantic-1.10.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523"}, - {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86"}, - {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1"}, - {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe"}, - {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb"}, - {file = "pydantic-1.10.12-cp39-cp39-win_amd64.whl", hash = "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d"}, - {file = "pydantic-1.10.12-py3-none-any.whl", hash = "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942"}, - {file = "pydantic-1.10.12.tar.gz", hash = "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303"}, + {file = "pydantic-1.10.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:efff03cc7a4f29d9009d1c96ceb1e7a70a65cfe86e89d34e4a5f2ab1e5693737"}, + {file = "pydantic-1.10.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ecea2b9d80e5333303eeb77e180b90e95eea8f765d08c3d278cd56b00345d01"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84bafe2e60b5e78bc64a2941b4c071a4b7404c5c907f5f5a99b0139781e69ed8"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc0898c12f8e9c97f6cd44c0ed70d55749eaf783716896960b4ecce2edfd2d69"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:654db58ae399fe6434e55325a2c3e959836bd17a6f6a0b6ca8107ea0571d2e17"}, + {file = "pydantic-1.10.13-cp310-cp310-win_amd64.whl", hash = "sha256:75ac15385a3534d887a99c713aa3da88a30fbd6204a5cd0dc4dab3d770b9bd2f"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c553f6a156deb868ba38a23cf0df886c63492e9257f60a79c0fd8e7173537653"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e08865bc6464df8c7d61439ef4439829e3ab62ab1669cddea8dd00cd74b9ffe"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31647d85a2013d926ce60b84f9dd5300d44535a9941fe825dc349ae1f760df9"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:210ce042e8f6f7c01168b2d84d4c9eb2b009fe7bf572c2266e235edf14bacd80"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8ae5dd6b721459bfa30805f4c25880e0dd78fc5b5879f9f7a692196ddcb5a580"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0"}, + {file = "pydantic-1.10.13-cp311-cp311-win_amd64.whl", hash = "sha256:61d9dce220447fb74f45e73d7ff3b530e25db30192ad8d425166d43c5deb6df0"}, + {file = "pydantic-1.10.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4b03e42ec20286f052490423682016fd80fda830d8e4119f8ab13ec7464c0132"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a1f9f747851338933942db7af7b6ee8268568ef2ed86c4185c6ef4402e80ba8"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:97cce3ae7341f7620a0ba5ef6cf043975cd9d2b81f3aa5f4ea37928269bc1b87"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854223752ba81e3abf663d685f105c64150873cc6f5d0c01d3e3220bcff7d36f"}, + {file = "pydantic-1.10.13-cp37-cp37m-win_amd64.whl", hash = "sha256:b97c1fac8c49be29486df85968682b0afa77e1b809aff74b83081cc115e52f33"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c958d053453a1c4b1c2062b05cd42d9d5c8eb67537b8d5a7e3c3032943ecd261"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c5370a7edaac06daee3af1c8b1192e305bc102abcbf2a92374b5bc793818599"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6f6e7305244bddb4414ba7094ce910560c907bdfa3501e9db1a7fd7eaea127"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3a3c792a58e1622667a2837512099eac62490cdfd63bd407993aaf200a4cf1f"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c636925f38b8db208e09d344c7aa4f29a86bb9947495dd6b6d376ad10334fb78"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:678bcf5591b63cc917100dc50ab6caebe597ac67e8c9ccb75e698f66038ea953"}, + {file = "pydantic-1.10.13-cp38-cp38-win_amd64.whl", hash = "sha256:6cf25c1a65c27923a17b3da28a0bdb99f62ee04230c931d83e888012851f4e7f"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8ef467901d7a41fa0ca6db9ae3ec0021e3f657ce2c208e98cd511f3161c762c6"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:968ac42970f57b8344ee08837b62f6ee6f53c33f603547a55571c954a4225691"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9849f031cf8a2f0a928fe885e5a04b08006d6d41876b8bbd2fc68a18f9f2e3fd"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56e3ff861c3b9c6857579de282ce8baabf443f42ffba355bf070770ed63e11e1"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f00790179497767aae6bcdc36355792c79e7bbb20b145ff449700eb076c5f96"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:75b297827b59bc229cac1a23a2f7a4ac0031068e5be0ce385be1462e7e17a35d"}, + {file = "pydantic-1.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:e70ca129d2053fb8b728ee7d1af8e553a928d7e301a311094b8a0501adc8763d"}, + {file = "pydantic-1.10.13-py3-none-any.whl", hash = "sha256:b87326822e71bd5f313e7d3bfdc77ac3247035ac10b0c0618bd99dcf95b1e687"}, + {file = "pydantic-1.10.13.tar.gz", hash = "sha256:32c8b48dcd3b2ac4e78b0ba4af3a2c2eb6048cb75202f0ea7b34feb740efc340"}, ] [package.dependencies] @@ -1306,21 +1316,21 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pyopenssl" -version = "23.2.0" +version = "24.1.0" description = "Python wrapper module around the OpenSSL library" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pyOpenSSL-23.2.0-py3-none-any.whl", hash = "sha256:24f0dc5227396b3e831f4c7f602b950a5e9833d292c8e4a2e06b709292806ae2"}, - {file = "pyOpenSSL-23.2.0.tar.gz", hash = "sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac"}, + {file = "pyOpenSSL-24.1.0-py3-none-any.whl", hash = "sha256:17ed5be5936449c5418d1cd269a1a9e9081bc54c17aed272b45856a3d3dc86ad"}, + {file = "pyOpenSSL-24.1.0.tar.gz", hash = "sha256:cabed4bfaa5df9f1a16c0ef64a0cb65318b5cd077a7eda7d6970131ca2f41a6f"}, ] [package.dependencies] -cryptography = ">=38.0.0,<40.0.0 || >40.0.0,<40.0.1 || >40.0.1,<42" +cryptography = ">=41.0.5,<43" [package.extras] -docs = ["sphinx (!=5.2.0,!=5.2.0.post0)", "sphinx-rtd-theme"] -test = ["flaky", "pretend", "pytest (>=3.0.1)"] +docs = ["sphinx (!=5.2.0,!=5.2.0.post0,!=7.2.5)", "sphinx-rtd-theme"] +test = ["pretend", "pytest (>=3.0.1)", "pytest-rerunfailures"] [[package]] name = "pyreadline3" @@ -1530,13 +1540,13 @@ rpds-py = ">=0.7.0" [[package]] name = "requests" -version = "2.31.0" +version = "2.32.0" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, + {file = "requests-2.32.0-py3-none-any.whl", hash = "sha256:f2c3881dddb70d056c5bd7600a4fae312b2a300e39be6a118d30b90bd27262b5"}, + {file = "requests-2.32.0.tar.gz", hash = "sha256:fa5490319474c82ef1d2c9bc459d3652e3ae4ef4c4ebdd18a21145a47ca4b6b8"}, ] [package.dependencies] @@ -1937,13 +1947,13 @@ pyOpenSSL = ">=23.2.0" [[package]] name = "werkzeug" -version = "3.0.0" +version = "3.0.3" description = "The comprehensive WSGI web application library." optional = false python-versions = ">=3.8" files = [ - {file = "werkzeug-3.0.0-py3-none-any.whl", hash = "sha256:cbb2600f7eabe51dbc0502f58be0b3e1b96b893b05695ea2b35b43d4de2d9962"}, - {file = "werkzeug-3.0.0.tar.gz", hash = "sha256:3ffff4dcc32db52ef3cc94dff3000a3c2846890f3a5a51800a27b909c5e770f0"}, + {file = "werkzeug-3.0.3-py3-none-any.whl", hash = "sha256:fc9645dc43e03e4d630d23143a04a7f947a9a3b5727cd535fdfe155a17cc48c8"}, + {file = "werkzeug-3.0.3.tar.gz", hash = "sha256:097e5bfda9f0aba8da6b8545146def481d06aa7d3266e7448e2cccf67dd8bd18"}, ] [package.dependencies] @@ -2040,4 +2050,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.10.6" -content-hash = "5c53237dc8787090d7cb16ac7f3d6bfe3d033aac5665fc874d74d7e3dd794e97" +content-hash = "afa311f51bdab56d556c77eb5a107c6e8d78375ee3803c0202a8e466dccb5fc2" diff --git a/apps/wizarr-backend/pyproject.toml b/apps/wizarr-backend/pyproject.toml index c23b9709..636cc267 100644 --- a/apps/wizarr-backend/pyproject.toml +++ b/apps/wizarr-backend/pyproject.toml @@ -24,7 +24,7 @@ include = "wizarr_backend" python = "^3.10.6" apscheduler = "^3.10.4" coloredlogs = "^15.0.1" -cryptography = "^41.0.4" +cryptography = "^42.0.4" python-dotenv = "^1.0.0" flask = "2.3.3" flask-caching = "^2.1.0" @@ -40,17 +40,17 @@ peewee = "^3.17.0" plexapi = "^4.15.4" psutil = "^5.9.6" pytz = "^2023.3.post1" -requests = "^2.31.0" +requests = "^2.32.0" schematics = "^2.1.1" tabulate = "^0.9.0" termcolor = "^2.3.0" webauthn = "^1.11.0" -werkzeug = "^3.0.0" +werkzeug = "^3.0.3" sentry-sdk = { extras = ["flask"], version = "^1.32.0" } -gunicorn = "^21.2.0" +gunicorn = "^22.0.0" gevent = "^23.9.1" gevent-websocket = "^0.10.1" -pydantic = "1.10.12" +pydantic = "1.10.13" requests-cache = "^1.1.0" flask-apscheduler = "^1.13.0" From 92c7154e8c6ba9614efe0d2b4652fc08faeea8f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 16:08:05 -0500 Subject: [PATCH 03/33] chore(deps): bump actions/download-artifact from 3 to 4 (#428) updated-dependencies: - dependency-name: actions/download-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/master-beta-ci.yml | 2 +- .github/workflows/nightly-ci.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/master-beta-ci.yml b/.github/workflows/master-beta-ci.yml index b0bd59ad..dfc109b9 100644 --- a/.github/workflows/master-beta-ci.yml +++ b/.github/workflows/master-beta-ci.yml @@ -144,7 +144,7 @@ jobs: # Download the digests from the artifacts - name: Download digests - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: digests_ghcr path: /tmp/digests diff --git a/.github/workflows/nightly-ci.yml b/.github/workflows/nightly-ci.yml index 8e201dbc..63d02b0b 100644 --- a/.github/workflows/nightly-ci.yml +++ b/.github/workflows/nightly-ci.yml @@ -141,7 +141,7 @@ jobs: # Download the digests from the artifacts - name: Download digests - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: digests_ghcr path: /tmp/digests From fdf96e563d2017bfcb2d2ba178f9152e57016a55 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 16:08:31 -0500 Subject: [PATCH 04/33] chore(deps): bump peaceiris/actions-gh-pages from 3 to 4 (#429) updated-dependencies: - dependency-name: peaceiris/actions-gh-pages dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-storybook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-storybook.yml b/.github/workflows/build-storybook.yml index 93ff146e..e0401469 100644 --- a/.github/workflows/build-storybook.yml +++ b/.github/workflows/build-storybook.yml @@ -44,7 +44,7 @@ jobs: run: npx nx run wizarr-frontend:build-storybook - name: Deploy Storybook - uses: peaceiris/actions-gh-pages@v3 + uses: peaceiris/actions-gh-pages@v4 with: external_repository: wizarrrr/storybook.wizarr.dev personal_token: ${{ steps.gh_app.outputs.token }} From 0d660528f88a390160b43db95be7182376ec743c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 16:08:43 -0500 Subject: [PATCH 05/33] chore(deps): bump actions/setup-python from 4 to 5 (#430) updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/master-beta-ci.yml | 2 +- .github/workflows/nightly-ci.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/master-beta-ci.yml b/.github/workflows/master-beta-ci.yml index dfc109b9..395044a3 100644 --- a/.github/workflows/master-beta-ci.yml +++ b/.github/workflows/master-beta-ci.yml @@ -56,7 +56,7 @@ jobs: node-version: 18.18.2 # Set up Python and install Poetry - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: "3.10" diff --git a/.github/workflows/nightly-ci.yml b/.github/workflows/nightly-ci.yml index 63d02b0b..c1ba4a95 100644 --- a/.github/workflows/nightly-ci.yml +++ b/.github/workflows/nightly-ci.yml @@ -55,7 +55,7 @@ jobs: node-version: 18.18.2 # Use Python and Poetry to install dependencies - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: "3.10" From 4b776320e7bd9e7d5c6ae40dbe2515c66a978c48 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 16:08:56 -0500 Subject: [PATCH 06/33] chore(deps): bump actions/checkout from 2 to 4 (#431) updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-storybook.yml | 2 +- .github/workflows/translations.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-storybook.yml b/.github/workflows/build-storybook.yml index e0401469..edacae44 100644 --- a/.github/workflows/build-storybook.yml +++ b/.github/workflows/build-storybook.yml @@ -28,7 +28,7 @@ jobs: private_key: ${{ secrets.APP_PRIVATE_KEY }} - name: Checkout Repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: fetch-depth: 0 diff --git a/.github/workflows/translations.yml b/.github/workflows/translations.yml index 3be6d498..7ddda9f2 100644 --- a/.github/workflows/translations.yml +++ b/.github/workflows/translations.yml @@ -17,7 +17,7 @@ jobs: steps: # Checkout the repo and the translations branch - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: ref: translations From 8c026d269dbee9b654db28681d0220187a0ac52d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 16:09:09 -0500 Subject: [PATCH 07/33] chore(deps): bump getsentry/action-github-app-token from 2 to 3 (#432) updated-dependencies: - dependency-name: getsentry/action-github-app-token dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-storybook.yml | 2 +- .github/workflows/pr-review-request.yml | 2 +- .github/workflows/semantic-release.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-storybook.yml b/.github/workflows/build-storybook.yml index edacae44..19575714 100644 --- a/.github/workflows/build-storybook.yml +++ b/.github/workflows/build-storybook.yml @@ -22,7 +22,7 @@ jobs: steps: - name: GitHub App Token id: gh_app - uses: getsentry/action-github-app-token@v2 + uses: getsentry/action-github-app-token@v3 with: app_id: ${{ secrets.APP_ID }} private_key: ${{ secrets.APP_PRIVATE_KEY }} diff --git a/.github/workflows/pr-review-request.yml b/.github/workflows/pr-review-request.yml index 5650ab5c..10daba24 100644 --- a/.github/workflows/pr-review-request.yml +++ b/.github/workflows/pr-review-request.yml @@ -11,7 +11,7 @@ jobs: steps: - name: Get GitHub App Token id: gh_app - uses: getsentry/action-github-app-token@v2 + uses: getsentry/action-github-app-token@v3 with: app_id: ${{ secrets.APP_ID }} private_key: ${{ secrets.APP_PRIVATE_KEY }} diff --git a/.github/workflows/semantic-release.yml b/.github/workflows/semantic-release.yml index 3eee8179..20b81899 100644 --- a/.github/workflows/semantic-release.yml +++ b/.github/workflows/semantic-release.yml @@ -30,7 +30,7 @@ jobs: # Get the GH_TOKEN from the app - name: Get GitHub App Token id: gh_app - uses: getsentry/action-github-app-token@v2 + uses: getsentry/action-github-app-token@v3 with: app_id: ${{ secrets.APP_ID }} private_key: ${{ secrets.APP_PRIVATE_KEY }} From 1147e4496f1300a063c1826b844545c4cfee934d Mon Sep 17 00:00:00 2001 From: MrDynamo Date: Tue, 21 May 2024 18:18:07 -0500 Subject: [PATCH 08/33] =?UTF-8?q?ci(dependabot):=20=F0=9F=94=A7=20fix=20pi?= =?UTF-8?q?p=20path?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/dependabot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index f58ac2bb..c5ffc785 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -20,7 +20,7 @@ updates: # Enable version updates for poetry backend - package-ecosystem: "pip" # Look for `pyproject.toml` and `lock` files in the `backend` directory - directory: "/apps/wizarr_backend/" + directory: "/apps/wizarr-backend/" # Check the pip registry for updates every day (weekdays) schedule: interval: "daily" From 357e067369a58c01eb4be63390c6b6d911d2681a Mon Sep 17 00:00:00 2001 From: MrDynamo Date: Tue, 21 May 2024 18:22:29 -0500 Subject: [PATCH 09/33] =?UTF-8?q?ci(code-ql):=20=F0=9F=A7=AA=20add=20beta?= =?UTF-8?q?=20and=20master=20branch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [skip ci] --- .github/workflows/vulnerability-scan.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/vulnerability-scan.yml b/.github/workflows/vulnerability-scan.yml index bd7fff0b..1ba91a1d 100644 --- a/.github/workflows/vulnerability-scan.yml +++ b/.github/workflows/vulnerability-scan.yml @@ -15,6 +15,8 @@ on: push: branches: - develop + - beta + - master pull_request_target: branches: - develop From c6b85739c3f69a1d1e986fd7a5a06e1d0dfc52cb Mon Sep 17 00:00:00 2001 From: MrDynamo Date: Tue, 21 May 2024 18:34:51 -0500 Subject: [PATCH 10/33] =?UTF-8?q?ci(build-image):=20=F0=9F=A7=AA=20bump=20?= =?UTF-8?q?upload-artifact=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix 🐛 error when downloading artifact with v4 that was uploaded with v3 https://github.com/marketplace/actions/download-a-build-artifact#breaking-changes --- .github/workflows/master-beta-ci.yml | 2 +- .github/workflows/nightly-ci.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/master-beta-ci.yml b/.github/workflows/master-beta-ci.yml index 395044a3..4af4665c 100644 --- a/.github/workflows/master-beta-ci.yml +++ b/.github/workflows/master-beta-ci.yml @@ -109,7 +109,7 @@ jobs: # Upload the digest as an artifact - name: Upload digest - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: digests_ghcr path: /tmp/digests/* diff --git a/.github/workflows/nightly-ci.yml b/.github/workflows/nightly-ci.yml index c1ba4a95..c0379c64 100644 --- a/.github/workflows/nightly-ci.yml +++ b/.github/workflows/nightly-ci.yml @@ -108,7 +108,7 @@ jobs: # Upload the digest to the artifacts - name: Upload digest - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: digests_ghcr path: /tmp/digests/* From 0b711e1cd1031ab614253373e40e1819dcd74cad Mon Sep 17 00:00:00 2001 From: MrDynamo Date: Tue, 21 May 2024 18:48:30 -0500 Subject: [PATCH 11/33] =?UTF-8?q?ci(build-image):=20=F0=9F=A7=AA=20drop=20?= =?UTF-8?q?download/upload=20artifact=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v4 upload-artifact no longer allows multiple artifacts with the same name --- .github/workflows/master-beta-ci.yml | 4 ++-- .github/workflows/nightly-ci.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/master-beta-ci.yml b/.github/workflows/master-beta-ci.yml index 4af4665c..ac1ed525 100644 --- a/.github/workflows/master-beta-ci.yml +++ b/.github/workflows/master-beta-ci.yml @@ -109,7 +109,7 @@ jobs: # Upload the digest as an artifact - name: Upload digest - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: name: digests_ghcr path: /tmp/digests/* @@ -144,7 +144,7 @@ jobs: # Download the digests from the artifacts - name: Download digests - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v3 with: name: digests_ghcr path: /tmp/digests diff --git a/.github/workflows/nightly-ci.yml b/.github/workflows/nightly-ci.yml index c0379c64..ca57d279 100644 --- a/.github/workflows/nightly-ci.yml +++ b/.github/workflows/nightly-ci.yml @@ -108,7 +108,7 @@ jobs: # Upload the digest to the artifacts - name: Upload digest - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: name: digests_ghcr path: /tmp/digests/* @@ -141,7 +141,7 @@ jobs: # Download the digests from the artifacts - name: Download digests - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v3 with: name: digests_ghcr path: /tmp/digests From 8ec9ddc594752fb788da28e42ae2759cc7eab3e6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 19:09:13 -0500 Subject: [PATCH 12/33] chore(deps): bump the pip group across 1 directory with 7 updates (#433) updated-dependencies: - dependency-name: cryptography dependency-type: direct:production dependency-group: pip - dependency-name: requests dependency-type: direct:production dependency-group: pip - dependency-name: werkzeug dependency-type: direct:production dependency-group: pip - dependency-name: gunicorn dependency-type: direct:production dependency-group: pip - dependency-name: pydantic dependency-type: direct:production dependency-group: pip - dependency-name: idna dependency-type: indirect dependency-group: pip - dependency-name: jinja2 dependency-type: indirect dependency-group: pip ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: MrDynamo --- apps/wizarr-backend/poetry.lock | 8 ++++---- apps/wizarr-backend/pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/wizarr-backend/poetry.lock b/apps/wizarr-backend/poetry.lock index f5e13f5c..e2f3cb3e 100644 --- a/apps/wizarr-backend/poetry.lock +++ b/apps/wizarr-backend/poetry.lock @@ -1540,13 +1540,13 @@ rpds-py = ">=0.7.0" [[package]] name = "requests" -version = "2.32.0" +version = "2.32.2" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" files = [ - {file = "requests-2.32.0-py3-none-any.whl", hash = "sha256:f2c3881dddb70d056c5bd7600a4fae312b2a300e39be6a118d30b90bd27262b5"}, - {file = "requests-2.32.0.tar.gz", hash = "sha256:fa5490319474c82ef1d2c9bc459d3652e3ae4ef4c4ebdd18a21145a47ca4b6b8"}, + {file = "requests-2.32.2-py3-none-any.whl", hash = "sha256:fc06670dd0ed212426dfeb94fc1b983d917c4f9847c863f313c9dfaaffb7c23c"}, + {file = "requests-2.32.2.tar.gz", hash = "sha256:dd951ff5ecf3e3b3aa26b40703ba77495dab41da839ae72ef3c8e5d8e2433289"}, ] [package.dependencies] @@ -2050,4 +2050,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.10.6" -content-hash = "afa311f51bdab56d556c77eb5a107c6e8d78375ee3803c0202a8e466dccb5fc2" +content-hash = "8ac8922225aee5419b46e11fffa219d27ce4997cb7aa6b90ab39e0ab45e10097" diff --git a/apps/wizarr-backend/pyproject.toml b/apps/wizarr-backend/pyproject.toml index 636cc267..efe142f7 100644 --- a/apps/wizarr-backend/pyproject.toml +++ b/apps/wizarr-backend/pyproject.toml @@ -40,7 +40,7 @@ peewee = "^3.17.0" plexapi = "^4.15.4" psutil = "^5.9.6" pytz = "^2023.3.post1" -requests = "^2.32.0" +requests = "^2.32.2" schematics = "^2.1.1" tabulate = "^0.9.0" termcolor = "^2.3.0" From c0e7c2a0878da7b9423c2dec9c36771bca9ee657 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 May 2024 12:22:20 -0500 Subject: [PATCH 13/33] chore(deps): bump tj-actions/branch-names from 7 to 8 (#435) updated-dependencies: - dependency-name: tj-actions/branch-names dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/semantic-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/semantic-release.yml b/.github/workflows/semantic-release.yml index 20b81899..99101a93 100644 --- a/.github/workflows/semantic-release.yml +++ b/.github/workflows/semantic-release.yml @@ -72,7 +72,7 @@ jobs: # Get the current branch from git - name: Get branch name id: branch-name - uses: tj-actions/branch-names@v7 + uses: tj-actions/branch-names@v8 # Create Release for the Beta - name: Semantic Release for Beta From ae5d6b1bb4e3d2159c4d062930977153ef2afec3 Mon Sep 17 00:00:00 2001 From: Jam <1347620+JamsRepos@users.noreply.github.com> Date: Sun, 26 May 2024 20:40:45 +0100 Subject: [PATCH 14/33] =?UTF-8?q?revert:=20=F0=9F=94=81=20Change=20unraid?= =?UTF-8?q?=20configuration=20back=20to=20working=20variant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- unraid.xml | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/unraid.xml b/unraid.xml index 7d7e7d7b..5e2c0821 100644 --- a/unraid.xml +++ b/unraid.xml @@ -4,7 +4,6 @@ ghcr.io/wizarrrr/wizarr https://github.com/wizarrrr/wizarr/pkgs/container/wizarr bridge - bash false https://github.com/Wizarrrr/wizarr/discussions @@ -15,19 +14,6 @@ Choose between the stable, beta, or nightly branch as per your requirements. Not MediaServer:Other http://[IP]:[PORT:5690]/ https://raw.githubusercontent.com/Wizarrrr/wizarr/master/apps/wizarr-frontend/src/assets/img/wizard.png - - - - 1713138518 - - - - - - - - + /mnt/user/appdata/wizarr/ + 5690 From f37e767d1f0e3021875bc65e259d8c68a33a98c4 Mon Sep 17 00:00:00 2001 From: Jam <1347620+JamsRepos@users.noreply.github.com> Date: Sun, 26 May 2024 20:48:17 +0100 Subject: [PATCH 15/33] =?UTF-8?q?Revert=20"revert:=20=F0=9F=94=81=20Change?= =?UTF-8?q?=20unraid=20configuration=20back=20to=20working=20variant"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit ae5d6b1bb4e3d2159c4d062930977153ef2afec3. --- unraid.xml | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/unraid.xml b/unraid.xml index 5e2c0821..7d7e7d7b 100644 --- a/unraid.xml +++ b/unraid.xml @@ -4,6 +4,7 @@ ghcr.io/wizarrrr/wizarr https://github.com/wizarrrr/wizarr/pkgs/container/wizarr bridge + bash false https://github.com/Wizarrrr/wizarr/discussions @@ -14,6 +15,19 @@ Choose between the stable, beta, or nightly branch as per your requirements. Not MediaServer:Other http://[IP]:[PORT:5690]/ https://raw.githubusercontent.com/Wizarrrr/wizarr/master/apps/wizarr-frontend/src/assets/img/wizard.png - /mnt/user/appdata/wizarr/ - 5690 + + + + 1713138518 + + + + + + + + From 10e104b80fd3d2ae53678c0d83a4044d5b2deee0 Mon Sep 17 00:00:00 2001 From: Euan M <31319098+EuanMosit@users.noreply.github.com> Date: Sun, 30 Jun 2024 09:41:45 +0100 Subject: [PATCH 16/33] feat: Ability to specify whether a user can download content (#449) * feat: Ability to specify whether a user can download content * feat: Ability to specify whether a user can download content --- .../migrations/2024-06-29_22-44-04.py | 32 +++++++++++++++++++ .../app/models/database/invitations.py | 1 + .../app/models/wizarr/invitations.py | 1 + .../wizarr_backend/helpers/emby.py | 4 +++ .../wizarr_backend/helpers/jellyfin.py | 4 +++ .../admin/components/Forms/InvitationForm.vue | 12 ++++++- .../InvitationManager/Invitation.vue | 8 +++++ .../src/types/api/invitations.ts | 1 + 8 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 apps/wizarr-backend/wizarr_backend/app/migrator/migrations/2024-06-29_22-44-04.py diff --git a/apps/wizarr-backend/wizarr_backend/app/migrator/migrations/2024-06-29_22-44-04.py b/apps/wizarr-backend/wizarr_backend/app/migrator/migrations/2024-06-29_22-44-04.py new file mode 100644 index 00000000..2be0e3c1 --- /dev/null +++ b/apps/wizarr-backend/wizarr_backend/app/migrator/migrations/2024-06-29_22-44-04.py @@ -0,0 +1,32 @@ +# +# CREATED ON VERSION: V4.1.1 +# MIGRATION: 2024-06-29_22-44-04 +# CREATED: Sat Jun 29 2024 +# + +from peewee import * +from playhouse.migrate import * + +from app import db + +# Do not change the name of this file, +# migrations are run in order of their filenames date and time + +def run(): + # Use migrator to perform actions on the database + migrator = SqliteMigrator(db) + + # Add new Column to users table, its a boolean field with a default value of True + with db.transaction(): + # Check if the column exists + cursor = db.cursor() + cursor.execute("PRAGMA table_info(invitations);") + columns = cursor.fetchall() + column_names = [column[1] for column in columns] + + if "allow_download" not in column_names: + db.execute_sql("ALTER TABLE invitations ADD COLUMN allow_download BOOLEAN DEFAULT 1") + else: + print("Column allow_download already exists") + + print("Migration 2024-06-29_22-44-04 complete") \ No newline at end of file diff --git a/apps/wizarr-backend/wizarr_backend/app/models/database/invitations.py b/apps/wizarr-backend/wizarr_backend/app/models/database/invitations.py index f36056c6..061b39c1 100644 --- a/apps/wizarr-backend/wizarr_backend/app/models/database/invitations.py +++ b/apps/wizarr-backend/wizarr_backend/app/models/database/invitations.py @@ -16,3 +16,4 @@ class Invitations(BaseModel): sessions = CharField(null=True, default=None) live_tv = BooleanField(null=True, default=None) hide_user = BooleanField(null=True, default=True) + allow_download = BooleanField(null=True, default=None) diff --git a/apps/wizarr-backend/wizarr_backend/app/models/wizarr/invitations.py b/apps/wizarr-backend/wizarr_backend/app/models/wizarr/invitations.py index 6b95c63e..955fb8b9 100644 --- a/apps/wizarr-backend/wizarr_backend/app/models/wizarr/invitations.py +++ b/apps/wizarr-backend/wizarr_backend/app/models/wizarr/invitations.py @@ -42,6 +42,7 @@ class InvitationsModel(Model): used_at = DateTimeType(required=False, default=None, convert_tz=True) created = DateTimeType(required=False, default=datetime.utcnow(), convert_tz=True) hide_user = BooleanType(required=False, default=True) + allow_download = BooleanType(required=False, default=True) # ANCHOR - Validate Code diff --git a/apps/wizarr-backend/wizarr_backend/helpers/emby.py b/apps/wizarr-backend/wizarr_backend/helpers/emby.py index 1bbdc3af..016c8924 100644 --- a/apps/wizarr-backend/wizarr_backend/helpers/emby.py +++ b/apps/wizarr-backend/wizarr_backend/helpers/emby.py @@ -284,6 +284,10 @@ def invite_emby_user(username: str, password: str, code: str, server_api_key: Op if invitation.hide_user is not None and invitation.hide_user == False: new_policy["IsHiddenRemotely"] = False + # Set the Allow Download status + if invitation.allow_download is not None and invitation.allow_download == False: + new_policy["EnableContentDownloading"] = False + # Get users default policy old_policy = user_response["Policy"] diff --git a/apps/wizarr-backend/wizarr_backend/helpers/jellyfin.py b/apps/wizarr-backend/wizarr_backend/helpers/jellyfin.py index c4983923..fa77ca80 100644 --- a/apps/wizarr-backend/wizarr_backend/helpers/jellyfin.py +++ b/apps/wizarr-backend/wizarr_backend/helpers/jellyfin.py @@ -284,6 +284,10 @@ def invite_jellyfin_user(username: str, password: str, code: str, server_api_key if invitation.hide_user is not None and invitation.hide_user == False: new_policy["IsHidden"] = False + # Set the Allow Download status + if invitation.allow_download is not None and invitation.allow_download == False: + new_policy["EnableContentDownloading"] = False + # Get users default policy old_policy = user_response["Policy"] diff --git a/apps/wizarr-frontend/src/modules/admin/components/Forms/InvitationForm.vue b/apps/wizarr-frontend/src/modules/admin/components/Forms/InvitationForm.vue index 27066042..97eaaac3 100644 --- a/apps/wizarr-frontend/src/modules/admin/components/Forms/InvitationForm.vue +++ b/apps/wizarr-frontend/src/modules/admin/components/Forms/InvitationForm.vue @@ -107,7 +107,7 @@ export default defineComponent({ inviteCode: "", expiration: 1440 as number | null | "custom", customExpiration: "" as string, - checkboxes: ["live_tv", "hide_user"] as string[],// Add the checkboxes you want to be checked by default + checkboxes: ["live_tv", "hide_user", "allow_download"] as string[],// Add the checkboxes you want to be checked by default duration: "unlimited" as number | "unlimited" | "custom", customDuration: "" as string, libraries: [] as string[], @@ -188,6 +188,10 @@ export default defineComponent({ label: "Hide User from the Login Page", value: "hide_user", }, + allow_download: { + label: "Allow User to Download Content", + value: "allow_download", + }, }, emby: { unlimited: { @@ -202,6 +206,10 @@ export default defineComponent({ label: "Hide User from the Login Page", value: "hide_user", }, + allow_download: { + label: "Allow User to Download Content", + value: "allow_download", + }, }, plex: { unlimited: { @@ -269,6 +277,7 @@ export default defineComponent({ const plex_allow_sync = invitationData.checkboxes.includes("plex_allow_sync"); const live_tv = invitationData.checkboxes.includes("live_tv"); const hide_user = invitationData.checkboxes.includes("hide_user"); + const allow_download = invitationData.checkboxes.includes("allow_download"); const sessions = invitationData.sessions; const duration = invitationData.duration == "custom" ? this.$filter("toMinutes", invitationData.customDuration) : invitationData.duration == "unlimited" ? null : invitationData.duration; const libraries = invitationData.libraries; @@ -280,6 +289,7 @@ export default defineComponent({ plex_allow_sync: plex_allow_sync, live_tv: live_tv, hide_user: hide_user, + allow_download: allow_download, sessions: sessions, duration: duration, specific_libraries: JSON.stringify(libraries), diff --git a/apps/wizarr-frontend/src/modules/admin/components/InvitationManager/Invitation.vue b/apps/wizarr-frontend/src/modules/admin/components/InvitationManager/Invitation.vue index 761291b5..d71a1c36 100644 --- a/apps/wizarr-frontend/src/modules/admin/components/InvitationManager/Invitation.vue +++ b/apps/wizarr-frontend/src/modules/admin/components/InvitationManager/Invitation.vue @@ -110,6 +110,10 @@ export default defineComponent({ label: "Hide User from the Login Page", value: this.invitation.hide_user, }, + allow_download: { + label: "Allow User to Download Content", + value: this.invitation.allow_download, + }, }, emby: { unlimited: { @@ -124,6 +128,10 @@ export default defineComponent({ label: "Hide User from the Login Page", value: this.invitation.hide_user, }, + allow_download: { + label: "Allow User to Download Content", + value: this.invitation.allow_download, + }, }, plex: { unlimited: { diff --git a/apps/wizarr-frontend/src/types/api/invitations.ts b/apps/wizarr-frontend/src/types/api/invitations.ts index af5562f7..13fc743f 100644 --- a/apps/wizarr-frontend/src/types/api/invitations.ts +++ b/apps/wizarr-frontend/src/types/api/invitations.ts @@ -9,6 +9,7 @@ export interface Invitation { plex_allow_sync: boolean; live_tv: boolean; hide_user: boolean; + allow_download: boolean; sessions: number; specific_libraries: string; unlimited: boolean; From 2408a599a49a9a86a8ed4eda1284c4fa48ef6d35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albin=20M=C3=A9doc?= Date: Wed, 24 Jul 2024 10:47:10 +0200 Subject: [PATCH 17/33] =?UTF-8?q?fix:=20=F0=9F=9B=A0=EF=B8=8F=20Country=20?= =?UTF-8?q?Code=20for=20Sweden=20being=20incorrect=20(#457)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wizarr-frontend/src/i18n.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/wizarr-frontend/src/i18n.ts b/apps/wizarr-frontend/src/i18n.ts index 65d2f945..a5a0d760 100644 --- a/apps/wizarr-frontend/src/i18n.ts +++ b/apps/wizarr-frontend/src/i18n.ts @@ -25,7 +25,7 @@ const availableLanguages: GetTextOptions["availableLanguages"] = { pt: "Português", ro: "Română", ru: "Русский", - sv: "Svenska", + se: "Svenska", zh_cn: "简体中文", zh_tw: "繁體中文", }; From 856fa349acd4b1e4b5e784e0b7b1014d766cdcf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albin=20M=C3=A9doc?= Date: Wed, 24 Jul 2024 10:48:30 +0200 Subject: [PATCH 18/33] =?UTF-8?q?refactor:=20=F0=9F=93=A6=20Cleanup=20code?= =?UTF-8?q?=20for=20darkmode=20(#458)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/Buttons/ThemeToggle.vue | 15 +++--- apps/wizarr-frontend/src/stores/theme.ts | 28 ++++------ apps/wizarr-frontend/src/ts/utils/darkMode.ts | 54 ++++++++----------- 3 files changed, 39 insertions(+), 58 deletions(-) diff --git a/apps/wizarr-frontend/src/components/Buttons/ThemeToggle.vue b/apps/wizarr-frontend/src/components/Buttons/ThemeToggle.vue index bd745036..133265a7 100644 --- a/apps/wizarr-frontend/src/components/Buttons/ThemeToggle.vue +++ b/apps/wizarr-frontend/src/components/Buttons/ThemeToggle.vue @@ -2,9 +2,9 @@ @@ -14,20 +14,19 @@ - diff --git a/apps/wizarr-frontend/src/modules/help/views/Help.vue b/apps/wizarr-frontend/src/modules/help/views/Help.vue index fad9da4d..8c7f416f 100644 --- a/apps/wizarr-frontend/src/modules/help/views/Help.vue +++ b/apps/wizarr-frontend/src/modules/help/views/Help.vue @@ -11,7 +11,7 @@ {{ __("Getting Started!") }} -
+
@@ -30,18 +34,20 @@ diff --git a/apps/wizarr-frontend/src/modules/settings/components/Modals/EditOnboarding.vue b/apps/wizarr-frontend/src/modules/settings/components/Modals/EditOnboarding.vue new file mode 100644 index 00000000..015e637f --- /dev/null +++ b/apps/wizarr-frontend/src/modules/settings/components/Modals/EditOnboarding.vue @@ -0,0 +1,66 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/settings/components/Onboarding/OnboardingSection.vue b/apps/wizarr-frontend/src/modules/settings/components/Onboarding/OnboardingSection.vue new file mode 100644 index 00000000..0f309172 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/settings/components/Onboarding/OnboardingSection.vue @@ -0,0 +1,80 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/settings/pages/Main.vue b/apps/wizarr-frontend/src/modules/settings/pages/Main.vue index f196eae0..af505618 100644 --- a/apps/wizarr-frontend/src/modules/settings/pages/Main.vue +++ b/apps/wizarr-frontend/src/modules/settings/pages/Main.vue @@ -193,14 +193,12 @@ export default defineComponent({ icon: "fab fa-discord", url: "/admin/settings/discord", }, - //TODO: hiding unimplemented features - // { - // title: this.__("Custom HTML"), - // description: this.__("Add Custom HTML page to help screen"), - // icon: "fas fa-code", - // url: "/admin/settings/html", - // disabled: true, - // }, + { + title: this.__("Onboarding"), + description: this.__("Manage onboarding pages"), + icon: "fas fa-book", + url: "/admin/settings/onboarding", + }, ], }, { diff --git a/apps/wizarr-frontend/src/modules/settings/pages/Onboarding.vue b/apps/wizarr-frontend/src/modules/settings/pages/Onboarding.vue new file mode 100644 index 00000000..79e3da7c --- /dev/null +++ b/apps/wizarr-frontend/src/modules/settings/pages/Onboarding.vue @@ -0,0 +1,139 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/settings/router/children.ts b/apps/wizarr-frontend/src/modules/settings/router/children.ts index e7187ed0..56f10749 100644 --- a/apps/wizarr-frontend/src/modules/settings/router/children.ts +++ b/apps/wizarr-frontend/src/modules/settings/router/children.ts @@ -55,6 +55,12 @@ const children: RouteRecordRaw[] = [ component: () => import("../pages/Discord.vue"), meta: { header: "Manage Discord", subheader: "Configure Discord" }, }, + { + path: "onboarding", + name: "admin-settings-onboarding", + component: () => import("../pages/Onboarding.vue"), + meta: { header: "Manage onboarding pages", subheader: "Configure onboarding pages" }, + }, { path: "logs", name: "admin-settings-logs", diff --git a/apps/wizarr-frontend/src/stores/onboarding.ts b/apps/wizarr-frontend/src/stores/onboarding.ts new file mode 100644 index 00000000..13eee613 --- /dev/null +++ b/apps/wizarr-frontend/src/stores/onboarding.ts @@ -0,0 +1,98 @@ +import { defineStore } from 'pinia'; +import type { OnboardingPage } from '@/types/OnboardingPage'; + +// Define the shape of the state in this store +interface OnboardingStoreState { + onboardingPages: OnboardingPage[]; +} + +// Define and export a store named 'onboarding' using the Pinia library +export const useOnboardingStore = defineStore('onboarding', { + // Define the initial state of the store + state: (): OnboardingStoreState => ({ + onboardingPages: [], + }), + getters: { + enabledOnboardingPages(state) { + return state.onboardingPages.filter(page => page.enabled); + } + }, + // Define actions that can mutate the state + actions: { + // Asynchronously fetches onboarding pages from the server and updates the state + async getOnboardingPages() { + const response = await this.$axios + .get('/api/onboarding') + .catch((err) => { + this.$toast.error('Could not get onboarding pages'); + console.error(err); + return null; + }); + + if (response !== null) { + this.updateOnboardingPages(response.data); + } + }, + // Updates the current pages state with new data + updateOnboardingPages(onboardingPages: OnboardingPage[]) { + const newPageMap = new Map(onboardingPages.map(key => [key.id, key])); + const updatedPages = this.onboardingPages.map(page => newPageMap.get(page.id) || page); + newPageMap.forEach((page, id) => { + if (!this.onboardingPages.some(k => k.id === id)) { + updatedPages.push(page); + } + }); + this.onboardingPages = updatedPages.filter(page => newPageMap.has(page.id)).sort((a, b) => a.order - b.order); + }, + async updateOnboardingPage(onboardingPage: Pick & Partial) { + const formData = new FormData(); + Object.keys(onboardingPage).forEach((key) => { + // @ts-ignore + formData.append(key, onboardingPage[key]); + }); + await this.$axios + .put(`/api/onboarding/${onboardingPage.id}`, formData, { disableErrorToast: true }) + .catch((err) => { + this.$toast.error('Could not update onboarding page'); + console.error(err); + return null; + }); + await this.getOnboardingPages(); + }, + // Creates a new onboarding page on the server and updates the local state if successful + async createOnboardingPage(onboardingPage: Partial) { + const formData = new FormData(); + Object.keys(onboardingPage).forEach((key) => { + // @ts-ignore + formData.append(key, onboardingPage[key]); + }); + const response = await this.$axios + .post('/api/onboarding', formData, { disableErrorToast: true }) + .catch((err) => { + this.$toast.error('Could not create onboarding page'); + console.error(err); + return null; + }); + + if (response !== null) { + const onboardingPage = response.data.page as OnboardingPage; + this.updateOnboardingPages([...this.onboardingPages, onboardingPage]); + return onboardingPage; + } + }, + // Deletes an onboarding page from the server and removes it from the local state if successful + async deleteOnboardingPage(id: number) { + const response = await this.$axios + .delete(`/api/onboarding/${id}`, { disableInfoToast: true }) + .catch((err) => { + this.$toast.error('Could not delete onboarding page'); + console.error(err); + return null; + }); + + if (response !== null) { + this.onboardingPages = this.onboardingPages.filter(page => page.id !== id); + } + }, + } +}); diff --git a/apps/wizarr-frontend/src/types/OnboardingPage.ts b/apps/wizarr-frontend/src/types/OnboardingPage.ts new file mode 100644 index 00000000..80d1589f --- /dev/null +++ b/apps/wizarr-frontend/src/types/OnboardingPage.ts @@ -0,0 +1,14 @@ +/** + * Interface for the Onboarding page + * @interface OnboardingPage + * @property {number} id - The id of the onboarding page + * @property {string} value - The content for the onboarding page + * @property {number} order - The order of the onboarding page + * @property {boolean} enabled - If the onboarding page is enabled + */ +export interface OnboardingPage { + id: number; + value: string; + order: number; + enabled: boolean; +} diff --git a/package-lock.json b/package-lock.json index 1c36495c..3f70918b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -161,6 +161,7 @@ "execa": "^8.0.1", "husky": "^8.0.3", "jsdom": "^22.1.0", + "md-editor-v3": "^4.17.4", "npm-run-all": "^4.1.5", "nx": "17.0.0", "postcss": "^8.4.28", @@ -1682,73 +1683,18 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/compat-data": { "version": "7.23.2", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", @@ -1795,13 +1741,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -1809,11 +1756,12 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1965,11 +1913,13 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2005,9 +1955,10 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2078,25 +2029,28 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2128,13 +2082,15 @@ } }, "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -2197,9 +2153,10 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz", + "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==", + "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -2403,12 +2360,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -3462,32 +3420,31 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.2.tgz", + "integrity": "sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -3495,12 +3452,13 @@ } }, "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -3547,6 +3505,420 @@ "integrity": "sha512-BxOqI5LgsIQP1odU5KMwV9yoijleOPzHL18/YvNqF9KFSGF2K/DLlYAbDQsWqd/1nbaFuSkYD/191dpMtNh4vw==", "dev": true }, + "node_modules/@codemirror/autocomplete": { + "version": "6.17.0", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.17.0.tgz", + "integrity": "sha512-fdfj6e6ZxZf8yrkMHUSJJir7OJkHkZKaOZGzLWIYp2PZ3jd+d+UjG8zVPqJF6d3bKxkhvXTPan/UZ1t7Bqm0gA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0" + }, + "peerDependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@codemirror/commands": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.6.0.tgz", + "integrity": "sha512-qnY+b7j1UNcTS31Eenuc/5YJB6gQOzkUoNmJQc0rznwqSRpeaWWpjkWy2C/MPTcePpsKJEM26hXrOXl1+nceXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.4.0", + "@codemirror/view": "^6.27.0", + "@lezer/common": "^1.1.0" + } + }, + "node_modules/@codemirror/lang-angular": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@codemirror/lang-angular/-/lang-angular-0.1.3.tgz", + "integrity": "sha512-xgeWGJQQl1LyStvndWtruUvb4SnBZDAu/gvFH/ZU+c0W25tQR8e5hq7WTwiIY2dNxnf+49mRiGI/9yxIwB6f5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/lang-html": "^6.0.0", + "@codemirror/lang-javascript": "^6.1.2", + "@codemirror/language": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.3" + } + }, + "node_modules/@codemirror/lang-cpp": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-cpp/-/lang-cpp-6.0.2.tgz", + "integrity": "sha512-6oYEYUKHvrnacXxWxYa6t4puTlbN3dgV662BDfSH8+MfjQjVmP697/KYTDOqpxgerkvoNm7q5wlFMBeX8ZMocg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/cpp": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-css": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.2.1.tgz", + "integrity": "sha512-/UNWDNV5Viwi/1lpr/dIXJNWiwDxpw13I4pTUAsNxZdg6E0mI2kTQb0P2iHczg1Tu+H4EBgJR+hYhKiHKko7qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.2", + "@lezer/css": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-go": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-go/-/lang-go-6.0.1.tgz", + "integrity": "sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.6.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/go": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-html": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.9.tgz", + "integrity": "sha512-aQv37pIMSlueybId/2PVSP6NPnmurFDVmZwzc7jszd2KAF8qd4VBbvNYPXWQq90WIARjsdVkPbw29pszmHws3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/lang-css": "^6.0.0", + "@codemirror/lang-javascript": "^6.0.0", + "@codemirror/language": "^6.4.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0", + "@lezer/css": "^1.1.0", + "@lezer/html": "^1.3.0" + } + }, + "node_modules/@codemirror/lang-java": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-java/-/lang-java-6.0.1.tgz", + "integrity": "sha512-OOnmhH67h97jHzCuFaIEspbmsT98fNdhVhmA3zCxW0cn7l8rChDhZtwiwJ/JOKXgfm4J+ELxQihxaI7bj7mJRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/java": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-javascript": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.2.tgz", + "integrity": "sha512-VGQfY+FCc285AhWuwjYxQyUQcYurWlxdKYT4bqwr3Twnd5wP5WSeu52t4tvvuWmljT4EmgEgZCqSieokhtY8hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.6.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0", + "@lezer/javascript": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-json": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.1.tgz", + "integrity": "sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/json": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-less": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-less/-/lang-less-6.0.2.tgz", + "integrity": "sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/lang-css": "^6.2.0", + "@codemirror/language": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-liquid": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-liquid/-/lang-liquid-6.2.1.tgz", + "integrity": "sha512-J1Mratcm6JLNEiX+U2OlCDTysGuwbHD76XwuL5o5bo9soJtSbz2g6RU3vGHFyS5DC8rgVmFSzi7i6oBftm7tnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/lang-html": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.1" + } + }, + "node_modules/@codemirror/lang-markdown": { + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/@codemirror/lang-markdown/-/lang-markdown-6.2.5.tgz", + "integrity": "sha512-Hgke565YcO4fd9pe2uLYxnMufHO5rQwRr+AAhFq8ABuhkrjyX8R5p5s+hZUTdV60O0dMRjxKhBLxz8pu/MkUVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.7.1", + "@codemirror/lang-html": "^6.0.0", + "@codemirror/language": "^6.3.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.2.1", + "@lezer/markdown": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-php": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-php/-/lang-php-6.0.1.tgz", + "integrity": "sha512-ublojMdw/PNWa7qdN5TMsjmqkNuTBD3k6ndZ4Z0S25SBAiweFGyY68AS3xNcIOlb6DDFDvKlinLQ40vSLqf8xA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/lang-html": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/php": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-python": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@codemirror/lang-python/-/lang-python-6.1.6.tgz", + "integrity": "sha512-ai+01WfZhWqM92UqjnvorkxosZ2aq2u28kHvr+N3gu012XqY2CThD67JPMHnGceRfXPDBmn1HnyqowdpF57bNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.3.2", + "@codemirror/language": "^6.8.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.2.1", + "@lezer/python": "^1.1.4" + } + }, + "node_modules/@codemirror/lang-rust": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-rust/-/lang-rust-6.0.1.tgz", + "integrity": "sha512-344EMWFBzWArHWdZn/NcgkwMvZIWUR1GEBdwG8FEp++6o6vT6KL9V7vGs2ONsKxxFUPXKI0SPcWhyYyl2zPYxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/rust": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-sass": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-sass/-/lang-sass-6.0.2.tgz", + "integrity": "sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/lang-css": "^6.2.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.2", + "@lezer/sass": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-sql": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@codemirror/lang-sql/-/lang-sql-6.7.0.tgz", + "integrity": "sha512-KMXp6rtyPYz6RaElvkh/77ClEAoQoHRPZo0zutRRialeFs/B/X8YaUJBCnAV2zqyeJPLZ4hgo48mG8TKoNXfZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-vue": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@codemirror/lang-vue/-/lang-vue-0.1.3.tgz", + "integrity": "sha512-QSKdtYTDRhEHCfo5zOShzxCmqKJvgGrZwDQSdbvCRJ5pRLWBS7pD/8e/tH44aVQT6FKm0t6RVNoSUWHOI5vNug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/lang-html": "^6.0.0", + "@codemirror/lang-javascript": "^6.1.2", + "@codemirror/language": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.1" + } + }, + "node_modules/@codemirror/lang-wast": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-wast/-/lang-wast-6.0.2.tgz", + "integrity": "sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-xml": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@codemirror/lang-xml/-/lang-xml-6.1.0.tgz", + "integrity": "sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.4.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/xml": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-yaml": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-yaml/-/lang-yaml-6.1.1.tgz", + "integrity": "sha512-HV2NzbK9bbVnjWxwObuZh5FuPCowx51mEfoFT9y3y+M37fA3+pbxx4I7uePuygFzDsAmCTwQSc/kXh/flab4uw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.2.0", + "@lezer/yaml": "^1.0.0" + } + }, + "node_modules/@codemirror/language": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.10.2.tgz", + "integrity": "sha512-kgbTYTo0Au6dCSc/TFy7fK3fpJmgHDv1sG1KNQKJXVi+xBTEeBPY/M30YXiU6mMXeH+YIDLsbrT4ZwNRdtF+SA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.23.0", + "@lezer/common": "^1.1.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.0" + } + }, + "node_modules/@codemirror/language-data": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@codemirror/language-data/-/language-data-6.5.1.tgz", + "integrity": "sha512-0sWxeUSNlBr6OmkqybUTImADFUP0M3P0IiSde4nc24bz/6jIYzqYSgkOSLS+CBIoW1vU8Q9KUWXscBXeoMVC9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/lang-angular": "^0.1.0", + "@codemirror/lang-cpp": "^6.0.0", + "@codemirror/lang-css": "^6.0.0", + "@codemirror/lang-go": "^6.0.0", + "@codemirror/lang-html": "^6.0.0", + "@codemirror/lang-java": "^6.0.0", + "@codemirror/lang-javascript": "^6.0.0", + "@codemirror/lang-json": "^6.0.0", + "@codemirror/lang-less": "^6.0.0", + "@codemirror/lang-liquid": "^6.0.0", + "@codemirror/lang-markdown": "^6.0.0", + "@codemirror/lang-php": "^6.0.0", + "@codemirror/lang-python": "^6.0.0", + "@codemirror/lang-rust": "^6.0.0", + "@codemirror/lang-sass": "^6.0.0", + "@codemirror/lang-sql": "^6.0.0", + "@codemirror/lang-vue": "^0.1.1", + "@codemirror/lang-wast": "^6.0.0", + "@codemirror/lang-xml": "^6.0.0", + "@codemirror/lang-yaml": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/legacy-modes": "^6.4.0" + } + }, + "node_modules/@codemirror/legacy-modes": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@codemirror/legacy-modes/-/legacy-modes-6.4.0.tgz", + "integrity": "sha512-5m/K+1A6gYR0e+h/dEde7LoGimMjRtWXZFg4Lo70cc8HzjSdHe3fLwjWMR0VRl5KFT1SxalSap7uMgPKF28wBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0" + } + }, + "node_modules/@codemirror/lint": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.1.tgz", + "integrity": "sha512-IZ0Y7S4/bpaunwggW2jYqwLuHj0QtESf5xcROewY6+lDNwZ/NzvR4t+vpYgg9m7V8UXLPYqG+lu3DF470E5Oxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/search": { + "version": "6.5.6", + "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.6.tgz", + "integrity": "sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/state": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.4.1.tgz", + "integrity": "sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@codemirror/view": { + "version": "6.29.1", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.29.1.tgz", + "integrity": "sha512-7r+DlO/QFwPqKp73uq5mmrS4TuLPUVotbNOKYzN3OLP5ScrOVXcm4g13/48b6ZXGhdmzMinzFYqH0vo+qihIkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.4.0", + "style-mod": "^4.1.0", + "w3c-keyname": "^2.2.4" + } + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -6921,13 +7293,14 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -6942,9 +7315,10 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -6964,9 +7338,10 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -6977,6 +7352,200 @@ "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==" }, + "node_modules/@lezer/common": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.1.tgz", + "integrity": "sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@lezer/cpp": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@lezer/cpp/-/cpp-1.1.2.tgz", + "integrity": "sha512-macwKtyeUO0EW86r3xWQCzOV9/CF8imJLpJlPv3sDY57cPGeUZ8gXWOWNlJr52TVByMV3PayFQCA5SHEERDmVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/css": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.1.8.tgz", + "integrity": "sha512-7JhxupKuMBaWQKjQoLtzhGj83DdnZY9MckEOG5+/iLKNK2ZJqKc6hf6uc0HjwCX7Qlok44jBNqZhHKDhEhZYLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/go": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@lezer/go/-/go-1.0.0.tgz", + "integrity": "sha512-co9JfT3QqX1YkrMmourYw2Z8meGC50Ko4d54QEcQbEYpvdUvN4yb0NBZdn/9ertgvjsySxHsKzH3lbm3vqJ4Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/highlight": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.0.tgz", + "integrity": "sha512-WrS5Mw51sGrpqjlh3d4/fOwpEV2Hd3YOkp9DBt4k8XZQcoTHZFB7sx030A6OcahF4J1nDQAa3jXlTVVYH50IFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@lezer/html": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.10.tgz", + "integrity": "sha512-dqpT8nISx/p9Do3AchvYGV3qYc4/rKr3IBZxlHmpIKam56P47RSHkSF5f13Vu9hebS1jM0HmtJIwLbWz1VIY6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/java": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@lezer/java/-/java-1.1.2.tgz", + "integrity": "sha512-3j8X70JvYf0BZt8iSRLXLkt0Ry1hVUgH6wT32yBxH/Xi55nW2VMhc1Az4SKwu4YGSmxCm1fsqDDcHTuFjC8pmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/javascript": { + "version": "1.4.17", + "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.4.17.tgz", + "integrity": "sha512-bYW4ctpyGK+JMumDApeUzuIezX01H76R1foD6LcRX224FWfyYit/HYxiPGDjXXe/wQWASjCvVGoukTH68+0HIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.1.3", + "@lezer/lr": "^1.3.0" + } + }, + "node_modules/@lezer/json": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.2.tgz", + "integrity": "sha512-xHT2P4S5eeCYECyKNPhr4cbEL9tc8w83SPwRC373o9uEdrvGKTZoJVAGxpOsZckMlEh9W23Pc72ew918RWQOBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/lr": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", + "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@lezer/markdown": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@lezer/markdown/-/markdown-1.3.0.tgz", + "integrity": "sha512-ErbEQ15eowmJUyT095e9NJc3BI9yZ894fjSDtHftD0InkfUBGgnKSU6dvan9jqsZuNHg2+ag/1oyDRxNsENupQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0", + "@lezer/highlight": "^1.0.0" + } + }, + "node_modules/@lezer/php": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@lezer/php/-/php-1.0.2.tgz", + "integrity": "sha512-GN7BnqtGRpFyeoKSEqxvGvhJQiI4zkgmYnDk/JIyc7H7Ifc1tkPnUn/R2R8meH3h/aBf5rzjvU8ZQoyiNDtDrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.1.0" + } + }, + "node_modules/@lezer/python": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@lezer/python/-/python-1.1.14.tgz", + "integrity": "sha512-ykDOb2Ti24n76PJsSa4ZoDF0zH12BSw1LGfQXCYJhJyOGiFTfGaX0Du66Ze72R+u/P35U+O6I9m8TFXov1JzsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/rust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@lezer/rust/-/rust-1.0.2.tgz", + "integrity": "sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/sass": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@lezer/sass/-/sass-1.0.6.tgz", + "integrity": "sha512-w/RCO2dIzZH1To8p+xjs8cE+yfgGus8NZ/dXeWl/QzHyr+TeBs71qiE70KPImEwvTsmEjoWh0A5SxMzKd5BWBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/xml": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.5.tgz", + "integrity": "sha512-VFouqOzmUWfIg+tfmpcdV33ewtK+NSwd4ngSe1aG7HFb4BN0ExyY1b8msp+ndFrnlG4V4iC8yXacjFtrwERnaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/yaml": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@lezer/yaml/-/yaml-1.0.3.tgz", + "integrity": "sha512-GuBLekbw9jDBDhGur82nuwkxKQ+a3W5H0GfaAthDXcAu+XdpS43VlnxA9E9hllkpSP5ellRDKjLLj7Lu9Wr6xA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.4.0" + } + }, "node_modules/@lukeed/csprng": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", @@ -18551,11 +19120,36 @@ "@types/node": "*" } }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/lodash": { "version": "4.14.200", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.200.tgz", "integrity": "sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==" }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/mdx": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.10.tgz", @@ -19005,6 +19599,13 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@vavt/util": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@vavt/util/-/util-1.7.0.tgz", + "integrity": "sha512-EAwplP/2Lm79KCFj5umtU/HKgFUi8Ec6a1clK2Za4MErkAkY8+mdOSnAFJdltceWzmnauZrEc+By+u0ZvX6u6g==", + "dev": true, + "license": "MIT" + }, "node_modules/@vite-pwa/assets-generator": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/@vite-pwa/assets-generator/-/assets-generator-0.0.9.tgz", @@ -20126,13 +20727,17 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -20160,17 +20765,19 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, + "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -20336,9 +20943,13 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -21394,13 +22005,19 @@ "integrity": "sha512-B5Gzp1Z+KASQX+LdUNb5fjFvv2ONhLet4vGV6wJbvw0fFSPPW/vbundamN6vJ6RZEghiR8n09vsKLMX+f5sFpQ==" }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -21804,6 +22421,22 @@ "node": ">= 0.12.0" } }, + "node_modules/codemirror": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", + "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/commands": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/search": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } + }, "node_modules/collect-v8-coverage": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", @@ -22241,6 +22874,16 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, "node_modules/core-js": { "version": "3.33.0", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.33.0.tgz", @@ -22311,6 +22954,13 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "devOptional": true }, + "node_modules/crelt": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", + "dev": true, + "license": "MIT" + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -22405,6 +23055,13 @@ "node": ">=4" } }, + "node_modules/cssfilter": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", + "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==", + "dev": true, + "license": "MIT" + }, "node_modules/csso": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", @@ -22730,6 +23387,60 @@ "node": ">=14" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/date-fns": { "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", @@ -23125,16 +23836,20 @@ } }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-lazy-prop": { @@ -23876,50 +24591,58 @@ } }, "node_modules/es-abstract": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", - "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, + "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -23928,6 +24651,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-get-iterator": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", @@ -23953,15 +24697,29 @@ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==" }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -25725,15 +26483,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -25776,13 +26539,15 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -26448,15 +27213,6 @@ "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", "dev": true }, - "node_modules/has": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -26493,20 +27249,22 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -26526,11 +27284,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -26571,9 +27330,10 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -27301,13 +28061,14 @@ "dev": true }, "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -27369,14 +28130,17 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -27460,6 +28224,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -27621,10 +28401,14 @@ } }, "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -27651,10 +28435,11 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -27775,21 +28560,29 @@ } }, "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -27850,11 +28643,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -27882,10 +28676,14 @@ } }, "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -27903,13 +28701,17 @@ } }, "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -32937,6 +33739,75 @@ "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==" }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it-image-figures": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/markdown-it-image-figures/-/markdown-it-image-figures-2.1.1.tgz", + "integrity": "sha512-mwXSQ2nPeVUzCMIE3HlLvjRioopiqyJLNph0pyx38yf9mpqFDhNGnMpAXF9/A2Xv0oiF2cVyg9xwfF0HNAz05g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "markdown-it": "*" + } + }, + "node_modules/markdown-it-task-lists": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/markdown-it-task-lists/-/markdown-it-task-lists-2.1.1.tgz", + "integrity": "sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==", + "dev": true, + "license": "ISC" + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/markdown-it/node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/markdown-it/node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/markdown-it/node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "license": "MIT" + }, "node_modules/markdown-to-jsx": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.3.2.tgz", @@ -33019,6 +33890,38 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/md-editor-v3": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/md-editor-v3/-/md-editor-v3-4.17.4.tgz", + "integrity": "sha512-g7fDBFNfahS0bNHbweVLepd1e8BnZtHNSobduSIa3nTEiGHCD0VzQtf+JyHsDYdGhDwZrBGReGpHxK+/9AZb/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@codemirror/lang-markdown": "^6.2.5", + "@codemirror/language-data": "^6.5.1", + "@types/markdown-it": "^14.0.1", + "@vavt/util": "^1.6.2", + "codemirror": "^6.0.1", + "copy-to-clipboard": "^3.3.3", + "lru-cache": "^10.2.0", + "markdown-it": "^14.0.0", + "markdown-it-image-figures": "^2.1.1", + "markdown-it-task-lists": "^2.1.1", + "medium-zoom": "^1.1.0", + "punycode": "^2.3.1", + "xss": "^1.0.15" + }, + "peerDependencies": { + "vue": "^3.2.47" + } + }, + "node_modules/md-editor-v3/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, "node_modules/mdast-util-definitions": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", @@ -33055,6 +33958,13 @@ "node": ">= 0.6" } }, + "node_modules/medium-zoom": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.1.0.tgz", + "integrity": "sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==", + "dev": true, + "license": "MIT" + }, "node_modules/memoizerific": { "version": "1.11.3", "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", @@ -37072,12 +37982,13 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -38061,6 +38972,15 @@ "lodash": "^4.17.14" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -38649,10 +39569,21 @@ } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -38752,11 +39683,12 @@ } }, "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.3.tgz", + "integrity": "sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==", + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -39304,14 +40236,16 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -39762,13 +40696,14 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -39785,15 +40720,19 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -40372,28 +41311,33 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "license": "MIT", "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -40507,13 +41451,18 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -41447,20 +42396,27 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -41484,14 +42440,16 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -41501,28 +42459,33 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -41647,6 +42610,13 @@ "node": ">=4" } }, + "node_modules/style-mod": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", + "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", + "dev": true, + "license": "MIT" + }, "node_modules/sucrase": { "version": "3.34.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", @@ -42362,6 +43332,13 @@ "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.22.0.tgz", "integrity": "sha512-YHCs00HCNiHxUhksloa36fTfMEXEWV+vdPn3ARQfmj2u3PcUYIjJkfc+ABUfCF9Eb+LSy/QzuLl256fbsRnpHQ==" }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==", + "dev": true, + "license": "MIT" + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -42626,29 +43603,32 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -42658,16 +43638,18 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, + "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -42677,14 +43659,21 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -44454,6 +45443,13 @@ "vue": "^3.0.1" } }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "dev": true, + "license": "MIT" + }, "node_modules/w3c-xmlserializer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", @@ -44715,15 +45711,19 @@ } }, "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, + "license": "MIT", "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -44735,15 +45735,16 @@ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -45320,6 +46321,30 @@ "node": ">=0.4.0" } }, + "node_modules/xss": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz", + "integrity": "sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + }, + "bin": { + "xss": "bin/xss" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/xss/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index 1188bab5..a476c0ee 100644 --- a/package.json +++ b/package.json @@ -165,6 +165,7 @@ "execa": "^8.0.1", "husky": "^8.0.3", "jsdom": "^22.1.0", + "md-editor-v3": "^4.17.4", "npm-run-all": "^4.1.5", "nx": "17.0.0", "postcss": "^8.4.28", From 7a958fe83e7fbc4feac0a1ae88353c92642d3336 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albin=20M=C3=A9doc?= Date: Wed, 31 Jul 2024 20:19:27 +0200 Subject: [PATCH 23/33] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Solve=20security=20?= =?UTF-8?q?alerts=20(#465)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wizarr-backend/wizarr_backend/api/routes/image_api.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/wizarr-backend/wizarr_backend/api/routes/image_api.py b/apps/wizarr-backend/wizarr_backend/api/routes/image_api.py index 0def422d..5653ffee 100644 --- a/apps/wizarr-backend/wizarr_backend/api/routes/image_api.py +++ b/apps/wizarr-backend/wizarr_backend/api/routes/image_api.py @@ -60,6 +60,9 @@ class ImageAPI(Resource): @api.response(500, "Internal server error") def get(self, filename): """Get image""" + # Sanitize the filename to avoid directory traversal + filename = secure_filename(filename) + # Assuming images are stored in a directory specified by UPLOAD_FOLDER config upload_folder = current_app.config['UPLOAD_FOLDER'] image_path = os.path.join(upload_folder, filename) @@ -74,6 +77,9 @@ def get(self, filename): @api.response(500, "Internal server error") def delete(self, filename): """Delete image""" + # Sanitize the filename to avoid directory traversal + filename = secure_filename(filename) + upload_folder = current_app.config['UPLOAD_FOLDER'] image_path = os.path.join(upload_folder, filename) From a6ea8dbdc97fb1d684d2ee2f3bf2fc3f1a28b659 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 31 Jul 2024 18:53:43 +0000 Subject: [PATCH 24/33] chore(release): 4.2.0-beta.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [4.2.0-beta.1](https://github.com/wizarrrr/wizarr/compare/v4.1.1...v4.2.0-beta.1) (2024-07-31) ### New Features * ✨ Added Onboarding Customisation ([e6e9d68](https://github.com/wizarrrr/wizarr/commit/e6e9d6890b431ce6ec60e33306d28f3a3a571a98)) * 🎊 Make DefaultButton center icon ([#462](https://github.com/wizarrrr/wizarr/issues/462)) ([c8b8d36](https://github.com/wizarrrr/wizarr/commit/c8b8d3653b140472172737ec275d6444054b2ada)) * Ability to specify whether a user can download content ([#449](https://github.com/wizarrrr/wizarr/issues/449)) ([10e104b](https://github.com/wizarrrr/wizarr/commit/10e104b80fd3d2ae53678c0d83a4044d5b2deee0)) ### Bug Fixes * 🐛 Solve security alerts ([#465](https://github.com/wizarrrr/wizarr/issues/465)) ([7a958fe](https://github.com/wizarrrr/wizarr/commit/7a958fe83e7fbc4feac0a1ae88353c92642d3336)) * 🛠️ Country Code for Sweden being incorrect ([#457](https://github.com/wizarrrr/wizarr/issues/457)) ([2408a59](https://github.com/wizarrrr/wizarr/commit/2408a599a49a9a86a8ed4eda1284c4fa48ef6d35)) ### Continuous Integration * **build-image:** 🧪 bump upload-artifact version ([c6b8573](https://github.com/wizarrrr/wizarr/commit/c6b85739c3f69a1d1e986fd7a5a06e1d0dfc52cb)) * **build-image:** 🧪 drop download/upload artifact version ([0b711e1](https://github.com/wizarrrr/wizarr/commit/0b711e1cd1031ab614253373e40e1819dcd74cad)) * **code-ql:** 🧪 add beta and master branch ([357e067](https://github.com/wizarrrr/wizarr/commit/357e067369a58c01eb4be63390c6b6d911d2681a)) * **dependabot:** 🔧 fix pip path ([1147e44](https://github.com/wizarrrr/wizarr/commit/1147e4496f1300a063c1826b844545c4cfee934d)) ### Chores * 🧽 sync develop with beta ([1a263de](https://github.com/wizarrrr/wizarr/commit/1a263de76e4bf3cc10025e6d5f421424fb869584)) * 🧽 sync develop with master ([e2b8fd4](https://github.com/wizarrrr/wizarr/commit/e2b8fd4549424b103f4d87f6ca057d7e7349ad5d)) * **deps:** bump actions/checkout from 2 to 4 ([#431](https://github.com/wizarrrr/wizarr/issues/431)) ([4b77632](https://github.com/wizarrrr/wizarr/commit/4b776320e7bd9e7d5c6ae40dbe2515c66a978c48)) * **deps:** bump actions/download-artifact from 3 to 4 ([#428](https://github.com/wizarrrr/wizarr/issues/428)) ([92c7154](https://github.com/wizarrrr/wizarr/commit/92c7154e8c6ba9614efe0d2b4652fc08faeea8f1)) * **deps:** bump actions/setup-python from 4 to 5 ([#430](https://github.com/wizarrrr/wizarr/issues/430)) ([0d66052](https://github.com/wizarrrr/wizarr/commit/0d660528f88a390160b43db95be7182376ec743c)) * **deps:** bump docker/build-push-action from 5 to 6 ([#446](https://github.com/wizarrrr/wizarr/issues/446)) ([9780190](https://github.com/wizarrrr/wizarr/commit/9780190169d7f9f34aabc603ac5eb0e665c96178)) * **deps:** bump getsentry/action-github-app-token from 2 to 3 ([#432](https://github.com/wizarrrr/wizarr/issues/432)) ([8c026d2](https://github.com/wizarrrr/wizarr/commit/8c026d269dbee9b654db28681d0220187a0ac52d)) * **deps:** bump peaceiris/actions-gh-pages from 3 to 4 ([#429](https://github.com/wizarrrr/wizarr/issues/429)) ([fdf96e5](https://github.com/wizarrrr/wizarr/commit/fdf96e563d2017bfcb2d2ba178f9152e57016a55)) * **deps:** bump the pip group across 1 directory with 7 updates ([#433](https://github.com/wizarrrr/wizarr/issues/433)) ([8ec9ddc](https://github.com/wizarrrr/wizarr/commit/8ec9ddc594752fb788da28e42ae2759cc7eab3e6)) * **deps:** bump tj-actions/branch-names from 7 to 8 ([#435](https://github.com/wizarrrr/wizarr/issues/435)) ([c0e7c2a](https://github.com/wizarrrr/wizarr/commit/c0e7c2a0878da7b9423c2dec9c36771bca9ee657)) ### Code Refactoring * 📦 Cleanup code for darkmode ([#458](https://github.com/wizarrrr/wizarr/issues/458)) ([856fa34](https://github.com/wizarrrr/wizarr/commit/856fa349acd4b1e4b5e784e0b7b1014d766cdcf3)) --- CHANGELOG-beta.md | 42 ++++++++++++++++++++++++++++++++++++++++++ latest | 2 +- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/CHANGELOG-beta.md b/CHANGELOG-beta.md index cbe12cdd..81b869f7 100644 --- a/CHANGELOG-beta.md +++ b/CHANGELOG-beta.md @@ -1,3 +1,45 @@ +## [4.2.0-beta.1](https://github.com/wizarrrr/wizarr/compare/v4.1.1...v4.2.0-beta.1) (2024-07-31) + + +### New Features + +* ✨ Added Onboarding Customisation ([e6e9d68](https://github.com/wizarrrr/wizarr/commit/e6e9d6890b431ce6ec60e33306d28f3a3a571a98)) +* 🎊 Make DefaultButton center icon ([#462](https://github.com/wizarrrr/wizarr/issues/462)) ([c8b8d36](https://github.com/wizarrrr/wizarr/commit/c8b8d3653b140472172737ec275d6444054b2ada)) +* Ability to specify whether a user can download content ([#449](https://github.com/wizarrrr/wizarr/issues/449)) ([10e104b](https://github.com/wizarrrr/wizarr/commit/10e104b80fd3d2ae53678c0d83a4044d5b2deee0)) + + +### Bug Fixes + +* 🐛 Solve security alerts ([#465](https://github.com/wizarrrr/wizarr/issues/465)) ([7a958fe](https://github.com/wizarrrr/wizarr/commit/7a958fe83e7fbc4feac0a1ae88353c92642d3336)) +* 🛠️ Country Code for Sweden being incorrect ([#457](https://github.com/wizarrrr/wizarr/issues/457)) ([2408a59](https://github.com/wizarrrr/wizarr/commit/2408a599a49a9a86a8ed4eda1284c4fa48ef6d35)) + + +### Continuous Integration + +* **build-image:** 🧪 bump upload-artifact version ([c6b8573](https://github.com/wizarrrr/wizarr/commit/c6b85739c3f69a1d1e986fd7a5a06e1d0dfc52cb)) +* **build-image:** 🧪 drop download/upload artifact version ([0b711e1](https://github.com/wizarrrr/wizarr/commit/0b711e1cd1031ab614253373e40e1819dcd74cad)) +* **code-ql:** 🧪 add beta and master branch ([357e067](https://github.com/wizarrrr/wizarr/commit/357e067369a58c01eb4be63390c6b6d911d2681a)) +* **dependabot:** 🔧 fix pip path ([1147e44](https://github.com/wizarrrr/wizarr/commit/1147e4496f1300a063c1826b844545c4cfee934d)) + + +### Chores + +* 🧽 sync develop with beta ([1a263de](https://github.com/wizarrrr/wizarr/commit/1a263de76e4bf3cc10025e6d5f421424fb869584)) +* 🧽 sync develop with master ([e2b8fd4](https://github.com/wizarrrr/wizarr/commit/e2b8fd4549424b103f4d87f6ca057d7e7349ad5d)) +* **deps:** bump actions/checkout from 2 to 4 ([#431](https://github.com/wizarrrr/wizarr/issues/431)) ([4b77632](https://github.com/wizarrrr/wizarr/commit/4b776320e7bd9e7d5c6ae40dbe2515c66a978c48)) +* **deps:** bump actions/download-artifact from 3 to 4 ([#428](https://github.com/wizarrrr/wizarr/issues/428)) ([92c7154](https://github.com/wizarrrr/wizarr/commit/92c7154e8c6ba9614efe0d2b4652fc08faeea8f1)) +* **deps:** bump actions/setup-python from 4 to 5 ([#430](https://github.com/wizarrrr/wizarr/issues/430)) ([0d66052](https://github.com/wizarrrr/wizarr/commit/0d660528f88a390160b43db95be7182376ec743c)) +* **deps:** bump docker/build-push-action from 5 to 6 ([#446](https://github.com/wizarrrr/wizarr/issues/446)) ([9780190](https://github.com/wizarrrr/wizarr/commit/9780190169d7f9f34aabc603ac5eb0e665c96178)) +* **deps:** bump getsentry/action-github-app-token from 2 to 3 ([#432](https://github.com/wizarrrr/wizarr/issues/432)) ([8c026d2](https://github.com/wizarrrr/wizarr/commit/8c026d269dbee9b654db28681d0220187a0ac52d)) +* **deps:** bump peaceiris/actions-gh-pages from 3 to 4 ([#429](https://github.com/wizarrrr/wizarr/issues/429)) ([fdf96e5](https://github.com/wizarrrr/wizarr/commit/fdf96e563d2017bfcb2d2ba178f9152e57016a55)) +* **deps:** bump the pip group across 1 directory with 7 updates ([#433](https://github.com/wizarrrr/wizarr/issues/433)) ([8ec9ddc](https://github.com/wizarrrr/wizarr/commit/8ec9ddc594752fb788da28e42ae2759cc7eab3e6)) +* **deps:** bump tj-actions/branch-names from 7 to 8 ([#435](https://github.com/wizarrrr/wizarr/issues/435)) ([c0e7c2a](https://github.com/wizarrrr/wizarr/commit/c0e7c2a0878da7b9423c2dec9c36771bca9ee657)) + + +### Code Refactoring + +* 📦 Cleanup code for darkmode ([#458](https://github.com/wizarrrr/wizarr/issues/458)) ([856fa34](https://github.com/wizarrrr/wizarr/commit/856fa349acd4b1e4b5e784e0b7b1014d766cdcf3)) + ## [4.1.1-beta.3](https://github.com/wizarrrr/wizarr/compare/v4.1.1-beta.2...v4.1.1-beta.3) (2024-05-19) diff --git a/latest b/latest index 627a3f43..5ed3f53e 100644 --- a/latest +++ b/latest @@ -1 +1 @@ -4.1.1 +4.2.0-beta.1 From 2f6ca87e106eb83e0c81fb90666546bb43c2280a Mon Sep 17 00:00:00 2001 From: albinmedoc Date: Thu, 1 Aug 2024 13:25:29 +0200 Subject: [PATCH 25/33] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Solve=20issue=20reo?= =?UTF-8?q?rdering=20onboarding=20pages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/routes/onboarding_api.py | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/apps/wizarr-backend/wizarr_backend/api/routes/onboarding_api.py b/apps/wizarr-backend/wizarr_backend/api/routes/onboarding_api.py index 096a5c35..b55bd1c8 100644 --- a/apps/wizarr-backend/wizarr_backend/api/routes/onboarding_api.py +++ b/apps/wizarr-backend/wizarr_backend/api/routes/onboarding_api.py @@ -52,35 +52,34 @@ def put(self, onboarding_id: int): if not page: return {"error": "Onboarding page not found"}, 404 - if(value is not None): + if value is not None: page.value = value - if(enabled is not None): + if enabled is not None: page.enabled = enabled in ["true", "True", "1"] if order is not None and page.order != order: step = 1 if page.order > order else -1 start, end = sorted([page.order, order]) - # Update orders of affected pages + # Temporarily set the order of the target page to a value that won't conflict + max_order = OnboardingDB.select(fn.MAX(OnboardingDB.order)).scalar() or 0 + page.order = max_order + 1 + page.save() + + # Shift orders of affected pages affected_pages = OnboardingDB.select().where( OnboardingDB.id != onboarding_id, OnboardingDB.order >= start, OnboardingDB.order <= end, - ) + ).order_by(OnboardingDB.order.asc() if step > 0 else OnboardingDB.order.desc()) for p in affected_pages: p.order += step - p.save() # Save each affected page + p.save() - # Update the target page + # Finally, set the target page to its new order page.order = order page.save() # Save the target page - - try: - transaction.commit() # Commit the transaction - except Exception as e: - transaction.rollback() # Rollback in case of error - return {"error": str(e)}, 500 return loads(dumps(model_to_dict(page), indent=4, sort_keys=True, default=str)), 200 @api.doc(description="Delete a single onboarding page") From c850c8e64a34cf7fcee584e6a20a2b801830a74b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albin=20M=C3=A9doc?= Date: Thu, 1 Aug 2024 19:40:52 +0200 Subject: [PATCH 26/33] =?UTF-8?q?feat:=20=F0=9F=8E=8A=20Any=20length=20of?= =?UTF-8?q?=20invitation=20code=20(#469)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wizarr_backend/app/models/wizarr/invitations.py | 6 +++--- .../src/modules/admin/components/Forms/InvitationForm.vue | 5 ++--- apps/wizarr-frontend/src/modules/home/pages/JoinForm.vue | 4 ++-- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/apps/wizarr-backend/wizarr_backend/app/models/wizarr/invitations.py b/apps/wizarr-backend/wizarr_backend/app/models/wizarr/invitations.py index 955fb8b9..18f132c8 100644 --- a/apps/wizarr-backend/wizarr_backend/app/models/wizarr/invitations.py +++ b/apps/wizarr-backend/wizarr_backend/app/models/wizarr/invitations.py @@ -51,8 +51,8 @@ def validate_code(self, _, value: str): if value is None: return - # Check that the code is a 6 character string of only letters and numbers - if not isinstance(value, str) or len(value) != 6 or not value.isalnum(): + # Check that the code only contains letters and numbers + if not isinstance(value, str) or not value.isalnum(): raise ValidationError("Invalid code") # Check that the code has not been used @@ -104,7 +104,7 @@ def create_code(): raise ValidationError("Unable to generate a unique code") # If code is None, generate a new code - if not invitation["code"] or len(invitation["code"]) != 6 or not str(invitation["code"]).isalnum(): + if not invitation["code"] or not str(invitation["code"]).isalnum(): invitation["code"] = create_code() # Upper case the code diff --git a/apps/wizarr-frontend/src/modules/admin/components/Forms/InvitationForm.vue b/apps/wizarr-frontend/src/modules/admin/components/Forms/InvitationForm.vue index 97eaaac3..211e1dcf 100644 --- a/apps/wizarr-frontend/src/modules/admin/components/Forms/InvitationForm.vue +++ b/apps/wizarr-frontend/src/modules/admin/components/Forms/InvitationForm.vue @@ -5,7 +5,7 @@
- + @@ -399,8 +399,7 @@ export default defineComponent({ watch: { "invitationData.inviteCode": { immediate: true, - handler(inviteCode) { - if (inviteCode.length >= 7) this.invitationData.inviteCode = inviteCode.slice(0, 6); + handler() { this.invitationData.inviteCode = this.invitationData.inviteCode.replace(/[^a-zA-Z0-9]/g, ""); this.invitationData.inviteCode = this.invitationData.inviteCode.toUpperCase(); }, diff --git a/apps/wizarr-frontend/src/modules/home/pages/JoinForm.vue b/apps/wizarr-frontend/src/modules/home/pages/JoinForm.vue index 0ea3933d..e5ae35c0 100644 --- a/apps/wizarr-frontend/src/modules/home/pages/JoinForm.vue +++ b/apps/wizarr-frontend/src/modules/home/pages/JoinForm.vue @@ -30,8 +30,8 @@ export default defineComponent({ methods: { async join() { // Check if the code is inputted - if (!this.code || this.code.length !== 6) { - this.$toast.info(this.__('Please enter an invite code')); + if (!this.code) { + this.$toast.info(this.__("Please enter an invite code")); return; } From 2051990271cd0dfee3efad8b641065513ee4e479 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albin=20M=C3=A9doc?= Date: Thu, 1 Aug 2024 20:45:14 +0200 Subject: [PATCH 27/33] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Solve=20some=20issu?= =?UTF-8?q?es=20with=20markdown=20preview=20(#470)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 🐛 Solve some issues with markdown preview * fix: 🩹 Change background color of code block * fix: 🐛 Change background color of markdown editor --- .../src/assets/scss/md-editor-v3.scss | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/apps/wizarr-frontend/src/assets/scss/md-editor-v3.scss b/apps/wizarr-frontend/src/assets/scss/md-editor-v3.scss index 4691025c..11e647c0 100644 --- a/apps/wizarr-frontend/src/assets/scss/md-editor-v3.scss +++ b/apps/wizarr-frontend/src/assets/scss/md-editor-v3.scss @@ -2,6 +2,19 @@ --md-theme-quote-border: 5px solid rgb(208, 49, 67) !important; --md-theme-link-color: rgb(208, 49, 67) !important; --md-theme-link-hover-color: rgb(208, 49, 67) !important; + --md-theme-code-inline-color: rgb(208, 49, 67) !important; + --md-theme-code-inline-bg-color: rgba(208, 49, 67, 0.1) !important; + --md-theme-code-block-bg-color: rgb(17, 24, 39) !important; +} + +.md-editor.md-editor-dark, .md-editor-modal-container[data-theme='dark'] { + --md-color: #fff; + --md-bk-color: rgb(55, 65, 81); + --md-scrollbar-bg-color: rgb(55, 65, 81); +} + +.md-editor.md-editor-previewOnly { + background-color: inherit !important; } .md-editor-preview { @@ -10,21 +23,24 @@ h1, h2, h3, h4, h5, h6 { word-break: normal !important; } - h1, h2, h3, h4, h5, h6 { + > h1, > h2, > h3, > h4, > h5, > h6 { &:first-child { margin-top: 0; } } } -.md-editor.md-editor-dark, .md-editor-modal-container[data-theme='dark'] { - --md-color: #fff; -} +.md-editor-preview { + ol { + list-style-type: decimal; + } -.md-editor.md-editor-previewOnly { - background-color: inherit !important; + ul { + list-style-type: disc; + } } + .md-editor.md-editor-previewOnly .md-editor-preview-wrapper { padding: inherit !important; } \ No newline at end of file From 3a3bc034d7498360edfa73c84dd14262aa2641fb Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 2 Aug 2024 22:11:11 +0000 Subject: [PATCH 28/33] chore(release): 4.2.0-beta.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [4.2.0-beta.2](https://github.com/wizarrrr/wizarr/compare/v4.2.0-beta.1...v4.2.0-beta.2) (2024-08-02) ### New Features * 🎊 Any length of invitation code ([#469](https://github.com/wizarrrr/wizarr/issues/469)) ([c850c8e](https://github.com/wizarrrr/wizarr/commit/c850c8e64a34cf7fcee584e6a20a2b801830a74b)) ### Bug Fixes * 🐛 Solve issue reordering onboarding pages ([2f6ca87](https://github.com/wizarrrr/wizarr/commit/2f6ca87e106eb83e0c81fb90666546bb43c2280a)) * 🐛 Solve some issues with markdown preview ([#470](https://github.com/wizarrrr/wizarr/issues/470)) ([2051990](https://github.com/wizarrrr/wizarr/commit/2051990271cd0dfee3efad8b641065513ee4e479)) --- CHANGELOG-beta.md | 13 +++++++++++++ latest | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG-beta.md b/CHANGELOG-beta.md index 81b869f7..0344e6a0 100644 --- a/CHANGELOG-beta.md +++ b/CHANGELOG-beta.md @@ -1,3 +1,16 @@ +## [4.2.0-beta.2](https://github.com/wizarrrr/wizarr/compare/v4.2.0-beta.1...v4.2.0-beta.2) (2024-08-02) + + +### New Features + +* 🎊 Any length of invitation code ([#469](https://github.com/wizarrrr/wizarr/issues/469)) ([c850c8e](https://github.com/wizarrrr/wizarr/commit/c850c8e64a34cf7fcee584e6a20a2b801830a74b)) + + +### Bug Fixes + +* 🐛 Solve issue reordering onboarding pages ([2f6ca87](https://github.com/wizarrrr/wizarr/commit/2f6ca87e106eb83e0c81fb90666546bb43c2280a)) +* 🐛 Solve some issues with markdown preview ([#470](https://github.com/wizarrrr/wizarr/issues/470)) ([2051990](https://github.com/wizarrrr/wizarr/commit/2051990271cd0dfee3efad8b641065513ee4e479)) + ## [4.2.0-beta.1](https://github.com/wizarrrr/wizarr/compare/v4.1.1...v4.2.0-beta.1) (2024-07-31) diff --git a/latest b/latest index 5ed3f53e..6e477314 100644 --- a/latest +++ b/latest @@ -1 +1 @@ -4.2.0-beta.1 +4.2.0-beta.2 From 2edf951afbbc2af4d4c4f7222df2207d013edb63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albin=20M=C3=A9doc?= Date: Sat, 3 Aug 2024 23:56:53 +0200 Subject: [PATCH 29/33] =?UTF-8?q?feat:=20=F0=9F=8E=89=20Add=20MAX=5FCONTEN?= =?UTF-8?q?T=5FLENGTH=20configuration=20for=20file=20uploads=20(#473)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wizarr-backend/wizarr_backend/app/config.py | 3 ++- apps/wizarr-backend/wizarr_backend/definitions.py | 1 + files/nginx-backend.conf | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/wizarr-backend/wizarr_backend/app/config.py b/apps/wizarr-backend/wizarr_backend/app/config.py index c6386304..de4e57f4 100644 --- a/apps/wizarr-backend/wizarr_backend/app/config.py +++ b/apps/wizarr-backend/wizarr_backend/app/config.py @@ -2,7 +2,7 @@ from os import environ, path from flask import Flask from app.security import secret_key, SchedulerAuth -from definitions import DATABASE_DIR +from definitions import DATABASE_DIR, MAX_CONTENT_LENGTH def create_config(app: Flask): config = {} @@ -30,5 +30,6 @@ def create_config(app: Flask): config["SCHEDULER_API_ENABLED"] = True config["SCHEDULER_API_PREFIX"] = "/api/scheduler" config["SCHEDULER_AUTH"] = SchedulerAuth() + config["MAX_CONTENT_LENGTH"] = MAX_CONTENT_LENGTH return config diff --git a/apps/wizarr-backend/wizarr_backend/definitions.py b/apps/wizarr-backend/wizarr_backend/definitions.py index 0c150f55..481cb2f4 100644 --- a/apps/wizarr-backend/wizarr_backend/definitions.py +++ b/apps/wizarr-backend/wizarr_backend/definitions.py @@ -3,3 +3,4 @@ ROOT_DIR = getenv("ROOT_DIR", path.abspath(path.join(path.abspath(__file__), "../"))) LATEST_FILE = getenv("LATEST_FILE", path.join(ROOT_DIR, "../", "../", "../", "latest")) DATABASE_DIR = getenv("DATABASE_DIR", path.join(ROOT_DIR, "../", "database")) +MAX_CONTENT_LENGTH = getenv("MAX_CONTENT_LENGTH", 5 * 1024 * 1024) # 5MB diff --git a/files/nginx-backend.conf b/files/nginx-backend.conf index 3606af9d..3a9d7e10 100644 --- a/files/nginx-backend.conf +++ b/files/nginx-backend.conf @@ -8,6 +8,8 @@ server { add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization'; + client_max_body_size 0; # Disables limit, relying on Flask's MAX_CONTENT_LENGTH + location /api { proxy_pass http://127.0.0.1:5000; # proxy_set_header Host $host; From 3d4c06a4450c7f28547a4478f10c5c0907aff013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albin=20M=C3=A9doc?= Date: Sun, 4 Aug 2024 21:45:39 +0200 Subject: [PATCH 30/33] =?UTF-8?q?=20feat:=20=E2=9C=A8=20Allow=20editing=20?= =?UTF-8?q?of=20all=20onboarding=20pages=20(#471)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 🐝 Only pass value to Custom page * refactor: 📦 Move onboarding interface under api folder * feat: 🎉 Add backend for fixed onboarding page * feat: ✨ Add variable functionality to markdown editor * feat: 🎊 Update onboarding store to handle fixed onboarding pages * feat: 🚀 Replace static onboarding page with markdown ones * refactor: 📦 Remove unused download buttons * fix: 🐛 Error inte onboarding api for fixed pages * fix: 🐝 Variable replacement in help pages * fix: 🚑 Don't make Request help page editable * feat: 🎉 Create migration file for fixed onboarding pages * feat: 🎊 Make it possible to reorder all onboarding pages * fix: 🩹 Fix onboarding migration * fix: 🐛 Correct onboarding model * refactor: 🔧 Simplify onboarding page creation logic * Revert "refactor: 📦 Remove unused download buttons" This reverts commit 5bb405911b047c63b82982d7a3c859fcfdfd05f1. * feat: 🚀 Add property editable to onboarding page feat: 🚀 Make it possible to show/hide onboarding pages * refactor: 📦 Remove unused download buttons * feat: 🎉 Add Download component to onboarding pages * fix: 🚑 Fix migration for onboarding pages * feat: ✨ Make "open server"-button a link * fix: 🩹 Error when adding request service --- .../wizarr_backend/api/routes/requests_api.py | 6 + .../wizarr_backend/api/routes/settings_api.py | 23 +++- .../migrations/2024-08-02_22-27-11.py | 114 +++++++++++++++++ .../app/models/database/onboarding.py | 6 +- .../wizarr_backend/helpers/__init__.py | 1 + .../wizarr_backend/helpers/onboarding.py | 45 +++++++ .../DownloadButtons/DownloadAndroid.vue | 28 ----- .../DownloadButtons/DownloadAppStore.vue | 31 ----- .../Buttons/DownloadButtons/DownloadLinux.vue | 60 --------- .../src/modules/help/components/Custom.vue | 18 +-- .../src/modules/help/components/Download.vue | 53 ++++++-- .../modules/help/components/Emby/Download.vue | 118 ------------------ .../modules/help/components/Emby/Welcome.vue | 27 ---- .../help/components/Jellyfin/Download.vue | 118 ------------------ .../help/components/Jellyfin/Welcome.vue | 27 ---- .../modules/help/components/Plex/Download.vue | 43 ------- .../modules/help/components/Plex/Welcome.vue | 25 ---- .../src/modules/help/components/Welcome.vue | 39 ------ .../src/modules/help/router/index.ts | 11 +- .../src/modules/help/views/Help.vue | 78 ++++++------ .../settings/components/Forms/MediaForm.vue | 2 +- .../components/MDToolbars/Variables.vue | 64 ++++++++++ .../components/Modals/EditOnboarding.vue | 25 +++- .../Onboarding/OnboardingSection.vue | 60 +++++++-- .../src/modules/settings/pages/Onboarding.vue | 73 ++++++----- .../src/router/middleware/openServer.ts | 13 -- apps/wizarr-frontend/src/stores/onboarding.ts | 36 ++++-- .../onboarding/onboardingPage.ts} | 2 + 28 files changed, 492 insertions(+), 654 deletions(-) create mode 100644 apps/wizarr-backend/wizarr_backend/app/migrator/migrations/2024-08-02_22-27-11.py create mode 100644 apps/wizarr-backend/wizarr_backend/helpers/onboarding.py delete mode 100644 apps/wizarr-frontend/src/components/Buttons/DownloadButtons/DownloadAndroid.vue delete mode 100644 apps/wizarr-frontend/src/components/Buttons/DownloadButtons/DownloadAppStore.vue delete mode 100644 apps/wizarr-frontend/src/components/Buttons/DownloadButtons/DownloadLinux.vue delete mode 100644 apps/wizarr-frontend/src/modules/help/components/Emby/Download.vue delete mode 100644 apps/wizarr-frontend/src/modules/help/components/Emby/Welcome.vue delete mode 100644 apps/wizarr-frontend/src/modules/help/components/Jellyfin/Download.vue delete mode 100644 apps/wizarr-frontend/src/modules/help/components/Jellyfin/Welcome.vue delete mode 100644 apps/wizarr-frontend/src/modules/help/components/Plex/Download.vue delete mode 100644 apps/wizarr-frontend/src/modules/help/components/Plex/Welcome.vue delete mode 100644 apps/wizarr-frontend/src/modules/help/components/Welcome.vue create mode 100644 apps/wizarr-frontend/src/modules/settings/components/MDToolbars/Variables.vue delete mode 100644 apps/wizarr-frontend/src/router/middleware/openServer.ts rename apps/wizarr-frontend/src/types/{OnboardingPage.ts => api/onboarding/onboardingPage.ts} (90%) diff --git a/apps/wizarr-backend/wizarr_backend/api/routes/requests_api.py b/apps/wizarr-backend/wizarr_backend/api/routes/requests_api.py index 14a1dad6..68b3f64c 100644 --- a/apps/wizarr-backend/wizarr_backend/api/routes/requests_api.py +++ b/apps/wizarr-backend/wizarr_backend/api/routes/requests_api.py @@ -7,6 +7,7 @@ from datetime import datetime from app.models.database.requests import Requests +from helpers.onboarding import showRequest api = Namespace("Requests", description="Requests related operations", path="/requests") @@ -27,6 +28,7 @@ def post(self) -> tuple[dict[str, str], int]: # Create the request request_db = Requests.create(**request.form) request_db.created = datetime.utcnow() + showRequest(True) # Return the request return loads(dumps(model_to_dict(request_db), indent=4, sort_keys=True, default=str)), 200 @@ -51,6 +53,10 @@ def delete(self, requests_id: str) -> tuple[dict[str, str], int]: # Delete the request request.delete_instance() + # Check if there are no more requests in the database + if Requests.select().count() == 0: + showRequest(False) + # Responnse response = { "message": f"Request { requests_id } has been deleted" } diff --git a/apps/wizarr-backend/wizarr_backend/api/routes/settings_api.py b/apps/wizarr-backend/wizarr_backend/api/routes/settings_api.py index 21808937..a90cd9ed 100644 --- a/apps/wizarr-backend/wizarr_backend/api/routes/settings_api.py +++ b/apps/wizarr-backend/wizarr_backend/api/routes/settings_api.py @@ -11,6 +11,7 @@ from app.models.database.users import Users from app.models.database.invitations import Invitations from app.models.database.requests import Requests +from helpers.onboarding import populateForServerType, showDiscord api = Namespace("Settings", description="Settings related operations", path="/settings") @@ -53,6 +54,14 @@ def post(self): for key, value in settings.items(): Settings.update(key=key, value=value) + # Get the value of the 'setup' query parameter + initial_setup = request.args.get('setup') == "true" + if initial_setup and "server_type" in settings: + populateForServerType(settings["server_type"]) + + if "server_discord_id" in settings: + showDiscord(bool(settings["server_discord_id"])) + response = { key: value for key, value in settings.items() } return response, 200 @@ -71,11 +80,19 @@ def put(self): data = SettingsModel(**form) # Extract the data from the model to a dictionary - response = data.model_dump() + settings = data.model_dump() + + # Get the value of the 'setup' query parameter + initial_setup = request.args.get('setup') == "true" + if initial_setup and "server_type" in settings: + populateForServerType(settings["server_type"]) + + if "server_discord_id" in settings: + showDiscord(settings["server_discord_id"] != "") # FIXME: This will send many queries to the database # Insert the settings into the database - for key, value in response.items(): + for key, value in settings.items(): setting = Settings.get_or_none(Settings.key == key) if not setting: Settings.create(key=key, value=value) @@ -92,7 +109,7 @@ def put(self): elif value == "jellyfin" or value == "emby": Requests.delete().where(Requests.service == "overseerr").execute() - return response, 200 + return settings, 200 @api.route('/') diff --git a/apps/wizarr-backend/wizarr_backend/app/migrator/migrations/2024-08-02_22-27-11.py b/apps/wizarr-backend/wizarr_backend/app/migrator/migrations/2024-08-02_22-27-11.py new file mode 100644 index 00000000..1383aaea --- /dev/null +++ b/apps/wizarr-backend/wizarr_backend/app/migrator/migrations/2024-08-02_22-27-11.py @@ -0,0 +1,114 @@ +# +# CREATED ON VERSION: V4.1.1 +# MIGRATION: 2024-08-02_22-27-11 +# CREATED: Fri Aug 02 2024 +# + +from peewee import * +from playhouse.migrate import * + +from app import db + +# Do not change the name of this file, +# migrations are run in order of their filenames date and time + +def run(): + # Use migrator to perform actions on the database + migrator = SqliteMigrator(db) + + # update onboarding table with columns (needs to be recreated) + with db.transaction(): + # Step 1: Create a new table with the desired structure + db.execute_sql(""" + CREATE TABLE "onboarding_temp" ( + "id" INTEGER NOT NULL UNIQUE, + "value" TEXT, + "order" INTEGER NOT NULL, + "enabled" INTEGER NOT NULL DEFAULT 1, + "template" INTEGER, + "editable" INTEGER NOT NULL DEFAULT 1, + PRIMARY KEY("id") + ) + """) + + # Step 2: Copy data from the existing table to the new table + db.execute_sql(""" + INSERT INTO onboarding_temp ("value", "order", "enabled") + SELECT "value", "order", "enabled" FROM onboarding; + """) + + # Step 3: Drop the old table + db.execute_sql("DROP TABLE onboarding;") + + # Step 4: Rename the new table to match the old table's name + db.execute_sql("ALTER TABLE onboarding_temp RENAME TO onboarding;") + + + # populate onboarding with default values + with db.transaction(): + + add_requests = bool(db.execute_sql("SELECT EXISTS(SELECT 1 FROM requests)").fetchone()[0]) + add_discord = bool(db.execute_sql("SELECT key FROM settings WHERE key = 'server_discord_id' AND value IS NOT NULL").fetchone()) + + # Increment the order column by 2 for each onboarding row + db.execute_sql(f"UPDATE onboarding SET 'order' = 'order' + {2 + int(add_requests) + int(add_discord)}") + # Check if server_type is set in the settings table + if db.execute_sql("SELECT key FROM settings WHERE key = 'server_type'").fetchone(): + # Get the server_type + server_type = db.execute_sql("SELECT value FROM settings WHERE key = 'server_type'").fetchone()[0] + if(server_type == "plex"): + db.execute_sql(""" + INSERT INTO onboarding ("order", "template", "value") VALUES + (0, NULL, '## ℹ️ Eh, So, What is Plex exactly? + +Great question! Plex is a software that allows individuals to share their media collections with others. If you''ve received this invitation, it means someone wants to share their library with you. + +With Plex, you''ll have access to all of the movies, TV shows, music, and photos that are stored on their server! + +So let''s see how to get started!'), + (1, 3, '## Join & Download Plex + +So you now have access to our server''s media collection. Let''s make sure you know how to use it with Plex. + +Planning on watching movies on this device?') + """) + if(server_type == "jellyfin"): + db.execute_sql(""" + INSERT INTO onboarding ("order", "template", "value") VALUES + (0, NULL, '## ℹ️ Eh, So, What is Jellyfin exactly? + +Jellyfin is a platform that lets you stream all your favorite movies, TV shows, and music in one place. It''s like having your own personal movie theater right at your fingertips! Think of it as a digital library of your favorite content that you can access from anywhere, on any device - your phone, tablet, laptop, smart TV, you name it.? + +## 🍿 Right, so how do I watch stuff? + +It couldn''t be simpler! Jellyfin is available on a wide variety of devices including laptops, tablets, smartphones, and TVs. All you need to do is download the Jellyfin app on your device, sign in with your account, and you''re ready to start streaming your media. It''s that easy!'), + (1, 3, '## Join & Download Jellyfin + +So you now have access to our server''s media collection. Let''s make sure you know how to use it with Jellyfin. + +Planning on watching movies on this device?') + """) + if(server_type == "emby"): + db.execute_sql(""" + INSERT INTO onboarding ("order", "template", "value") VALUES + (0, NULL, '## ℹ️ Eh, So, What is Emby exactly? + +Emby is a platform that lets you stream all your favorite movies, TV shows, and music in one place. It''s like having your own personal movie theater right at your fingertips! Think of it as a digital library of your favorite content that you can access from anywhere, on any device - your phone, tablet, laptop, smart TV, you name it. + +## 🍿 Right, so how do I watch stuff? + +It couldn''t be simpler! Emby is available on a wide variety of devices including laptops, tablets, smartphones, and TVs. All you need to do is download the Emby app on your device, sign in with your account, and you''re ready to start streaming your media. It''s that easy!'), + (1, 3, '## Join & Download Emby + +Great news! You now have access to our server''s media collection. Let''s make sure you know how to use it with Emby. + +Planning on watching movies on this device?') + """) + + if add_discord: + db.execute_sql("""INSERT INTO onboarding ("order", "template", "editable") VALUES (2, 1, 0)""") + if add_requests: + db.execute_sql("""INSERT INTO onboarding ("order", "template", "editable") VALUES (3, 2, 0)""") + + elif add_requests: + db.execute_sql("""INSERT INTO onboarding ("order", "template", "editable") VALUES (2, 2, 0)""") diff --git a/apps/wizarr-backend/wizarr_backend/app/models/database/onboarding.py b/apps/wizarr-backend/wizarr_backend/app/models/database/onboarding.py index fcb78a8a..c2982b39 100644 --- a/apps/wizarr-backend/wizarr_backend/app/models/database/onboarding.py +++ b/apps/wizarr-backend/wizarr_backend/app/models/database/onboarding.py @@ -3,6 +3,8 @@ class Onboarding(BaseModel): id = IntegerField(primary_key=True, unique=True) - value = CharField(null=False) + value = CharField() order = IntegerField(null=False, unique=True) - enabled = BooleanField(default=False) + enabled = BooleanField(default=True) + template = IntegerField() + editable = BooleanField(default=True) diff --git a/apps/wizarr-backend/wizarr_backend/helpers/__init__.py b/apps/wizarr-backend/wizarr_backend/helpers/__init__.py index 366e9831..43030d61 100644 --- a/apps/wizarr-backend/wizarr_backend/helpers/__init__.py +++ b/apps/wizarr-backend/wizarr_backend/helpers/__init__.py @@ -4,3 +4,4 @@ from .settings import * from .accounts import * from .universal import * +from .onboarding import * diff --git a/apps/wizarr-backend/wizarr_backend/helpers/onboarding.py b/apps/wizarr-backend/wizarr_backend/helpers/onboarding.py new file mode 100644 index 00000000..ae30b6ad --- /dev/null +++ b/apps/wizarr-backend/wizarr_backend/helpers/onboarding.py @@ -0,0 +1,45 @@ +from enum import Enum +from peewee import fn +from app.models.database.settings import Settings +from app.models.database.onboarding import Onboarding + +class TemplateType(Enum): + Discord = 1 + Request = 2 + Download = 3 + +def getNextOrder(): + return (Onboarding.select(fn.MAX(Onboarding.order)).scalar() or -1) + 1 + +def populateForServerType(server_type: str): + next_order = getNextOrder() + if(server_type == "plex"): + Onboarding.create(id=1, order=next_order, value="## ℹ️ Eh, So, What is Plex exactly?\n\nGreat question! Plex is a software that allows individuals to share their media collections with others. If you've received this invitation, it means someone wants to share their library with you.\n\nWith Plex, you'll have access to all of the movies, TV shows, music, and photos that are stored on their server!\n\nSo let's see how to get started!") + Onboarding.create(id=2, order=next_order + 1, template=TemplateType.Download.value, value="## Join & Download Plex\n\nSo you now have access to our server's media collection. Let's make sure you know how to use it with Plex.\n\nPlanning on watching movies on this device?") + elif(server_type == "jellyfin"): + Onboarding.create(id=3, order=next_order, value="## ℹ️ Eh, So, What is Jellyfin exactly?\n\nJellyfin is a platform that lets you stream all your favorite movies, TV shows, and music in one place. It's like having your own personal movie theater right at your fingertips! Think of it as a digital library of your favorite content that you can access from anywhere, on any device - your phone, tablet, laptop, smart TV, you name it.?\n\n## 🍿 Right, so how do I watch stuff??\n\nIt couldn't be simpler! Jellyfin is available on a wide variety of devices including laptops, tablets, smartphones, and TVs. All you need to do is download the Jellyfin app on your device, sign in with your account, and you're ready to start streaming your media. It's that easy!") + Onboarding.create(id=4, order=next_order + 1, template=TemplateType.Download.value, value="## Join & Download Jellyfin\n\nSo you now have access to our server's media collection. Let's make sure you know how to use it with Jellyfin.\n\nPlanning on watching movies on this device?") + elif(server_type == "emby"): + Onboarding.create(id=5, order=next_order, value="## ℹ️ Eh, So, What is Emby exactly?\n\nEmby is a platform that lets you stream all your favorite movies, TV shows, and music in one place. It's like having your own personal movie theater right at your fingertips! Think of it as a digital library of your favorite content that you can access from anywhere, on any device - your phone, tablet, laptop, smart TV, you name it.\n\n## 🍿 Right, so how do I watch stuff?\n\nIt couldn't be simpler! Emby is available on a wide variety of devices including laptops, tablets, smartphones, and TVs. All you need to do is download the Emby app on your device, sign in with your account, and you're ready to start streaming your media. It's that easy!") + Onboarding.create(id=6, order=next_order + 1, template=TemplateType.Download.value, value="## Join & Download Emby\n\nGreat news! You now have access to our server's media collection. Let's make sure you know how to use it with Emby.\n\nPlanning on watching movies on this device?") + +def showStatic(template: int, show: bool): + static_row = Onboarding.get_or_none(template=template) + if show: + if not static_row: + Onboarding.create(order=getNextOrder(), template=template, editable=False) + elif static_row.enabled == False: + static_row.enabled = True + static_row.save() + else: + if static_row and static_row.enabled == True: + static_row.enabled = False + static_row.save() + + +def showRequest(show: bool): + showStatic(TemplateType.Request.value, show) + +def showDiscord(show: bool): + showStatic(TemplateType.Discord.value, show) + diff --git a/apps/wizarr-frontend/src/components/Buttons/DownloadButtons/DownloadAndroid.vue b/apps/wizarr-frontend/src/components/Buttons/DownloadButtons/DownloadAndroid.vue deleted file mode 100644 index c1acc0ea..00000000 --- a/apps/wizarr-frontend/src/components/Buttons/DownloadButtons/DownloadAndroid.vue +++ /dev/null @@ -1,28 +0,0 @@ - - - diff --git a/apps/wizarr-frontend/src/components/Buttons/DownloadButtons/DownloadAppStore.vue b/apps/wizarr-frontend/src/components/Buttons/DownloadButtons/DownloadAppStore.vue deleted file mode 100644 index c712dbc2..00000000 --- a/apps/wizarr-frontend/src/components/Buttons/DownloadButtons/DownloadAppStore.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - diff --git a/apps/wizarr-frontend/src/components/Buttons/DownloadButtons/DownloadLinux.vue b/apps/wizarr-frontend/src/components/Buttons/DownloadButtons/DownloadLinux.vue deleted file mode 100644 index 39e886b2..00000000 --- a/apps/wizarr-frontend/src/components/Buttons/DownloadButtons/DownloadLinux.vue +++ /dev/null @@ -1,60 +0,0 @@ - - - diff --git a/apps/wizarr-frontend/src/modules/help/components/Custom.vue b/apps/wizarr-frontend/src/modules/help/components/Custom.vue index 678e4a48..f27e6985 100644 --- a/apps/wizarr-frontend/src/modules/help/components/Custom.vue +++ b/apps/wizarr-frontend/src/modules/help/components/Custom.vue @@ -1,15 +1,14 @@ diff --git a/apps/wizarr-frontend/src/modules/help/components/Emby/Download.vue b/apps/wizarr-frontend/src/modules/help/components/Emby/Download.vue deleted file mode 100644 index 87f1d6a1..00000000 --- a/apps/wizarr-frontend/src/modules/help/components/Emby/Download.vue +++ /dev/null @@ -1,118 +0,0 @@ - - - diff --git a/apps/wizarr-frontend/src/modules/help/components/Emby/Welcome.vue b/apps/wizarr-frontend/src/modules/help/components/Emby/Welcome.vue deleted file mode 100644 index f91de4bf..00000000 --- a/apps/wizarr-frontend/src/modules/help/components/Emby/Welcome.vue +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/apps/wizarr-frontend/src/modules/help/components/Jellyfin/Download.vue b/apps/wizarr-frontend/src/modules/help/components/Jellyfin/Download.vue deleted file mode 100644 index e7630ba6..00000000 --- a/apps/wizarr-frontend/src/modules/help/components/Jellyfin/Download.vue +++ /dev/null @@ -1,118 +0,0 @@ - - - diff --git a/apps/wizarr-frontend/src/modules/help/components/Jellyfin/Welcome.vue b/apps/wizarr-frontend/src/modules/help/components/Jellyfin/Welcome.vue deleted file mode 100644 index 7ab4cdc1..00000000 --- a/apps/wizarr-frontend/src/modules/help/components/Jellyfin/Welcome.vue +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/apps/wizarr-frontend/src/modules/help/components/Plex/Download.vue b/apps/wizarr-frontend/src/modules/help/components/Plex/Download.vue deleted file mode 100644 index d4411d91..00000000 --- a/apps/wizarr-frontend/src/modules/help/components/Plex/Download.vue +++ /dev/null @@ -1,43 +0,0 @@ - - - diff --git a/apps/wizarr-frontend/src/modules/help/components/Plex/Welcome.vue b/apps/wizarr-frontend/src/modules/help/components/Plex/Welcome.vue deleted file mode 100644 index 285c0ee3..00000000 --- a/apps/wizarr-frontend/src/modules/help/components/Plex/Welcome.vue +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/apps/wizarr-frontend/src/modules/help/components/Welcome.vue b/apps/wizarr-frontend/src/modules/help/components/Welcome.vue deleted file mode 100644 index 656e5700..00000000 --- a/apps/wizarr-frontend/src/modules/help/components/Welcome.vue +++ /dev/null @@ -1,39 +0,0 @@ - - - diff --git a/apps/wizarr-frontend/src/modules/help/router/index.ts b/apps/wizarr-frontend/src/modules/help/router/index.ts index 3348fdf9..d08121a4 100644 --- a/apps/wizarr-frontend/src/modules/help/router/index.ts +++ b/apps/wizarr-frontend/src/modules/help/router/index.ts @@ -1,4 +1,3 @@ -import openServer from '@/router/middleware/openServer'; import type { RouteRecordRaw } from 'vue-router'; const routes: Readonly = [ @@ -6,15 +5,7 @@ const routes: Readonly = [ path: '/help', name: 'help', component: () => import('../views/Help.vue'), - }, - { - path: '/open', - name: 'open', - component: () => '', - meta: { - middleware: [openServer], - }, - }, + } ]; export default routes; diff --git a/apps/wizarr-frontend/src/modules/help/views/Help.vue b/apps/wizarr-frontend/src/modules/help/views/Help.vue index 8c7f416f..4c4feef8 100644 --- a/apps/wizarr-frontend/src/modules/help/views/Help.vue +++ b/apps/wizarr-frontend/src/modules/help/views/Help.vue @@ -34,7 +34,7 @@ diff --git a/apps/wizarr-frontend/src/modules/settings/components/Modals/EditOnboarding.vue b/apps/wizarr-frontend/src/modules/settings/components/Modals/EditOnboarding.vue index 015e637f..73436659 100644 --- a/apps/wizarr-frontend/src/modules/settings/components/Modals/EditOnboarding.vue +++ b/apps/wizarr-frontend/src/modules/settings/components/Modals/EditOnboarding.vue @@ -1,29 +1,44 @@