anki: 25.02.5 -> 25.07.5

This includes needing to migrate to a 'uv' based packaging system, since
that's what upstream did.

Unfortunately, `uv sync` as a FoD doesn't work since it's not a stable
output format.

I handled it by writing a hacky "uv.lock to nix" converter (in the form
of the 'update.sh' script), and then using fetchurl to download every
file referenced in the uv.lock.

Using that, combined with the "UV_FIND_LINKS" environment variable lets
uv operate offline, so it seems like that's a good enough solution
there, phew!

The next hurdle was that anki wants us to populate 'pyenv' for an
offline build, and I wasn't sure the exact right 'uv' commands for that.
I ended up with a mix of 'uv export' to make requirements.txt files, and
'uv pip install' to install em. That seems to work okay for most things.

The final problem was that using anki's suggested version of PyQt hits
linker errors. To me, the easiest solution seemed like just using the
already-packaged pyqt packages from nixpkgs, so I did that.

Overall, this feels pragmatic and like it works.

I think the most compelling alternative would be to generate
"requirements.txt" using uv export, relax all the version requirements,
and use nixpkgs-packaged dependencies only.
I ended up not taking that route because not all of anki's dependencies
are present in nixpkgs, and so doing it like done in this PR seemed more
expedient.

That's the notes I have, hopefully this approach seems overall
reasonable!
This commit is contained in:
Euan Kemp
2025-08-24 21:17:43 +09:00
parent 130195b434
commit fcaf5bdf16
7 changed files with 3134 additions and 182 deletions
+96 -82
View File
@@ -3,9 +3,9 @@
stdenv,
writableTmpDirAsHomeHook,
buildEnv,
cargo,
fetchFromGitHub,
fetchurl,
installShellFiles,
lame,
mpv-unwrapped,
@@ -16,9 +16,11 @@
jq,
protobuf,
python3,
python3Packages,
qt6,
rsync,
rustPlatform,
uv,
writeShellScriptBin,
yarn,
yarn-berry_4,
@@ -32,12 +34,16 @@ let
yarn-berry = yarn-berry_4;
pname = "anki";
version = "25.02.5";
rev = "29192d156ae60d6ce35e80ccf815a8331c9db724";
version = "25.07.5";
rev = "7172b2d26684c7ef9d10e249bd43dc5bf73ae00c";
srcHash = "sha256-lx3tK57gcQpwmiqUzO6iU7sE31LPFp6s80prYaB2jHE=";
cargoHash = "sha256-BPCfeUiZ23FdZaF+zDUrRZchauNZWQ3gSO+Uo9WRPes=";
yarnHash = "sha256-3G+9N3xOzog3XDCKDQJCY/6CB3i6oXixRgxEyv7OG3U=";
srcHash = "sha256-nWxRr55Hm40V3Ijw+WetBKNoreLpcvRscgbOZa0REcY=";
cargoHash = "sha256-H/xwPPL6VupSZGLPEThhoeMcg12FvAX3fmNM6zYfqRQ=";
yarnHash = "sha256-adHnV345oDm20R8zGdEiEW+8/mTQAz4oxraybRfmwew=";
pythonDeps = map (meta: {
url = meta.url;
path = toString (fetchurl meta);
}) (lib.importJSON ./uv-deps.json);
src = fetchFromGitHub {
owner = "ankitects";
@@ -66,19 +72,39 @@ let
exec ${yarn}/bin/yarn "$@"
'';
anki-build-python = python3.withPackages (ps: with ps; [ mypy-protobuf ]);
uvWheels = stdenv.mkDerivation {
name = "uv-wheels";
phases = [ "installPhase" ];
pyEnv = buildEnv {
name = "anki-pyenv-${version}";
paths = with python3.pkgs; [
pip
anki-build-python
];
pathsToLink = [ "/bin" ];
# otherwise, it's too long of a string
passAsFile = [ "installCommand" ];
installCommand = ''
#!${stdenv.shell}
mkdir -p $out
# note: uv.lock doesn't contain build deps?? https://github.com/astral-sh/uv/issues/5190
# link them in manually
ln -vsf ${python3Packages.setuptools.dist}/*.whl $out
ln -vsf ${python3Packages.editables.dist}/*.whl $out
# we also force nixpkgs pyqt6 stuff because that needs to match the
# nixpkgs qt6 version, otherwise we get linker errors
ln -vsf ${python3Packages.pyqt6.dist}/*.whl $out
ln -vsf ${python3Packages.pyqt6-webengine.dist}/*.whl $out
ln -vsf ${python3Packages.pyqt6-sip.dist}/*.whl $out
''
+ (lib.strings.concatStringsSep "\n" (
map (dep: ''
if ! [[ "${builtins.baseNameOf dep.url}" =~ (PyQt|pyqt) ]]; then
ln -vsf ${dep.path} "$out/${builtins.baseNameOf dep.url}"
fi
'') pythonDeps
));
installPhase = ''bash $installCommandPath'';
};
in
python3.pkgs.buildPythonApplication rec {
format = "setuptools";
python3Packages.buildPythonApplication rec {
format = "other";
inherit pname version;
outputs = [
@@ -93,6 +119,7 @@ python3.pkgs.buildPythonApplication rec {
./patches/disable-auto-update.patch
./patches/remove-the-gl-library-workaround.patch
./patches/skip-formatting-python-code.patch
./patches/fix-compilation-under-rust-1.89.patch
# Used in with-addons.nix
./patches/allow-setting-addons-folder.patch
];
@@ -107,6 +134,7 @@ python3.pkgs.buildPythonApplication rec {
};
nativeBuildInputs = [
uv
cargo
installShellFiles
jq
@@ -126,60 +154,7 @@ python3.pkgs.buildPythonApplication rec {
]
++ lib.optional stdenv.hostPlatform.isLinux qt6.qtwayland;
propagatedBuildInputs = with python3.pkgs; [
# This rather long list came from running:
# grep --no-filename -oE "^[^ =]*" python/{requirements.base.txt,requirements.bundle.txt,requirements.qt6_lin.txt} | \
# sort | uniq | grep -v "^#$"
# in their repo at the git tag for this version
# There's probably a more elegant way, but the above extracted all the
# names, without version numbers, of their python dependencies. The hope is
# that nixpkgs versions are "close enough"
# I then removed the ones the check phase failed on (pythonCatchConflictsPhase)
attrs
beautifulsoup4
blinker
build
certifi
charset-normalizer
click
colorama
decorator
flask
flask-cors
google-api-python-client
idna
importlib-metadata
itsdangerous
jinja2
jsonschema
markdown
markupsafe
orjson
packaging
pip
pip-system-certs
pip-tools
protobuf
pyproject-hooks
pyqt6
pyqt6-sip
pyqt6-webengine
pyrsistent
pysocks
requests
send2trash
setuptools
soupsieve
tomli
urllib3
waitress
werkzeug
wheel
wrapt
zipp
];
nativeCheckInputs = with python3.pkgs; [
nativeCheckInputs = with python3Packages; [
pytest
mock
astroid
@@ -207,6 +182,12 @@ python3.pkgs.buildPythonApplication rec {
NODE_BINARY = lib.getExe nodejs;
PROTOC_BINARY = lib.getExe protobuf;
PYTHON_BINARY = lib.getExe python3;
UV_BINARY = lib.getExe uv;
UV_NO_MANAGED_PYTHON = "1";
UV_SYSTEM_PYTHON = true;
UV_PYTHON_DOWNLOADS = "never";
UV_OFFLINE = "1";
UV_FIND_LINKS = "${uvWheels}";
};
buildPhase = ''
@@ -216,17 +197,40 @@ python3.pkgs.buildPythonApplication rec {
mkdir -p out/pylib/anki .git
echo ${builtins.substring 0 8 rev} > out/buildhash
echo ${python3.version} > .python-version
ln -vsf ${pyEnv} ./out/pyenv
# Setup the python environment.
# We have 'UV_FIND_LINKS' set, so packages generally should just get picked
# up, so install everything anki wants.
# Note, for pyqt stuff, our versions may not match (see the comment above
# uvWheels), so we don't install those.
mkdir -p ./out/pyenv
uv export > requirements.txt
uv pip install --prefix ./out/pyenv -r requirements.txt
uv export --project qt --extra qt --extra audio \
--no-emit-package "pyqt6" \
--no-emit-package "pyqt6-qt6" \
--no-emit-package "pyqt6-webengine" \
--no-emit-package "pyqt6-webengine-qt6" \
--no-emit-package "pyqt6-sip" \
> requirements.txt
uv pip install --prefix ./out/pyenv -r requirements.txt
uv export --project pylib > requirements.txt
uv pip install --prefix ./out/pyenv -r requirements.txt
# anki's build tooling expects python in there too
ln -sf $PYTHON_BINARY ./out/pyenv/bin/python
mv node_modules out
# Run everything else
# And finally build
patchShebangs ./ninja
export PYTHONPATH=$PYTHONPATH:$PWD/out/pyenv/lib/python${python3.pythonVersion}/site-packages
# Necessary for yarn to not complain about 'corepack'
jq 'del(.packageManager)' package.json > package.json.tmp && mv package.json.tmp package.json
YARN_BINARY="${lib.getExe noInstallYarn}" PIP_USER=1 ./ninja build wheels
YARN_BINARY="${lib.getExe noInstallYarn}" PIP_USER=1 \
./ninja build wheels
'';
# mimic https://github.com/ankitects/anki/blob/76d8807315fcc2675e7fa44d9ddf3d4608efc487/build/ninja_gen/src/python.rs#L232-L250
@@ -247,6 +251,7 @@ python3.pkgs.buildPythonApplication rec {
in
''
runHook preCheck
export PYTHONPATH=$PYTHONPATH:$PWD/out/pyenv/lib/python${python3.pythonVersion}/site-packages
HOME=$TMP ANKI_TEST_MODE=1 PYTHONPATH=$PYTHONPATH:$PWD/out/pylib \
pytest -p no:cacheprovider pylib/tests -k ${disabledTestsString}
HOME=$TMP ANKI_TEST_MODE=1 PYTHONPATH=$PYTHONPATH:$PWD/out/pylib:$PWD/pylib:$PWD/out/qt \
@@ -254,17 +259,21 @@ python3.pkgs.buildPythonApplication rec {
runHook postCheck
'';
preInstall = ''
mkdir dist
mv out/wheels/* dist
'';
installPhase = ''
runHook preInstall
postInstall = ''
install -D -t $out/share/applications qt/bundle/lin/anki.desktop
mkdir -p $out
uv pip install out/wheels/*.whl --prefix $out
# remove non-anki bins from dependencies
find $out/bin -type f ! -name "anki*" -delete
install -D -t $out/share/applications qt/launcher/lin/anki.desktop
install -D -t $doc/share/doc/anki README* LICENSE*
install -D -t $out/share/mime/packages qt/bundle/lin/anki.xml
install -D -t $out/share/pixmaps qt/bundle/lin/anki.{png,xpm}
installManPage qt/bundle/lin/anki.1
install -D -t $out/share/mime/packages qt/launcher/lin/anki.xml
install -D -t $out/share/pixmaps qt/launcher/lin/anki.{png,xpm}
installManPage qt/launcher/lin/anki.1
runHook postInstall
'';
preFixup = ''
@@ -304,5 +313,10 @@ python3.pkgs.buildPythonApplication rec {
];
# Reported to crash at launch on darwin (as of 2.1.65)
broken = stdenv.hostPlatform.isDarwin;
badPlatforms = [
# pyqt6-webengine is broken on darwin
# https://github.com/NixOS/nixpkgs/issues/375059
lib.systems.inspect.patterns.isDarwin
];
};
}
+70 -87
View File
@@ -7,74 +7,56 @@
"@dprint/linux-x64-musl@npm:0.47.4": "c8b4c979a92fe897220877b40d59aa6e899ca2a39ce5368ba181ef3c3a376a119f4608b2a5e5271d1d811e055882cad86b890abd91970a32fb32ecfb5bbebdd7",
"@dprint/win32-arm64@npm:0.47.4": "5278a87a006758a9fe2b870a571895a6b19afb938cff35a180f192413ddfb8a4b612fcd1817c92e03dc0b587ed0c8ff750213c59d60ef3f0d02a4e2a4c938c5a",
"@dprint/win32-x64@npm:0.47.4": "5c5737f28ca10e51f3a548ad0160868a0b643f56a32eae5c8c151944ff47cb79aa109630c1ecf458233c2a3b521d5d284d3a25b60bbcd38885e7908f0db25d16",
"@esbuild/aix-ppc64@npm:0.19.12": "0740fd9160dffa94e55cd58d2f9faf4624a2be68d2696376d5c60cfced508809275eac76315796a1aef8daf3b0975b0df0f2d94de10c14c3f40087b7c6eeb047",
"@esbuild/aix-ppc64@npm:0.21.5": "1f48fea96ab4fbc2921756361bc8a0c4d0690f14dc2298a357aa3d436bcd1cd646d490e5d71c4e0fb46b9e04401bc93153d6886456dd0665b6758be643c95a16",
"@esbuild/android-arm64@npm:0.18.20": "8c1aa2455aab70b61c19e5d818ce418090a6a300619df48000a10ba0caf4649b388d4d039771a5b012621246dcb5ff9bd6b86c98ad74b62caa0e26e821870456",
"@esbuild/android-arm64@npm:0.19.12": "29d94e32a47af3ae1cc7c0364b00b3145db0b16539bd8d30356bb3a8769499867a7a3f1bc070f10a63cdb33c29752a43f3e4d4594a316e7d179e82bf12edf47c",
"@esbuild/android-arm64@npm:0.21.5": "7a4831b0886c165ed671f0094dcd491235fe503364a261379c84e2225a3c3230a06bce1d3a02316fa8a040b0ffede56c617746dc3b5550549ae3fb07095bb20d",
"@esbuild/android-arm@npm:0.18.20": "c38427fdc325049c8d73237693c637f829de68293d853c41e9ac1ef70773fc6099ab6008194216f89e1f22855fdf7e6ef8f01ee46353fcbc3bea387ab592cfe0",
"@esbuild/android-arm@npm:0.19.12": "f6784506ff94332d1332536cfcabe54dacb6ddc0ce285cdc3d00bb30a71c5dc57b81e3552354c59fe992d6dbc0f66eb8040d18cba76d44ee9cd7b7ed2a3feece",
"@esbuild/android-arm@npm:0.21.5": "9fa871018a9f2198f40fde2c672fcb1b9d3ab5ee602644ea4cf68c548ee2c0b6c60ad851ce85219f84886fd29757d8c49bac28ea48a2a16708a088e32dfe673a",
"@esbuild/android-x64@npm:0.18.20": "751957e816cf676117fbec20ab530fe2ce818492fbf32c8f6d9bb24e5963b54395b903adab95f6b874e4191845177f8e9cdd771f6b42298552b8573a5f24a150",
"@esbuild/android-x64@npm:0.19.12": "6253d60665402e38a080c101651c6e1617002b7aa53ed7a81f33d89fd5f99f37f11757bdd534faa3bf115dacf4723412a7cda532abdf0458bb478340772ba8d1",
"@esbuild/android-x64@npm:0.21.5": "24e477ccdaf1437cabe8710bc052a13b975a53617094a225e39823a1c562a71ef975d860ab895c129a813302495d85387143e27068e62fc897a2ac0335e4a2f6",
"@esbuild/darwin-arm64@npm:0.18.20": "16b1feeec7b1523da839e834e77f85a722bda5f2a9fb6800455e55684bd59bc11f8988b91ffefdb5ba3f4e8c1d7958f58413c74c729de92c26e31e0c326f658e",
"@esbuild/darwin-arm64@npm:0.19.12": "d934b758e8d6f7c69660f699a627963742a79dd5a917855c878700cc70eda3e629461e1fc69f8bb7242c15ec84f015e40f6877acd599604b784190514de4717f",
"@esbuild/darwin-arm64@npm:0.21.5": "67b0e4ebc870d0babb6721328f02b0e75eca5ee8f176220fa194ac5897ce76a27aa4f6d724389a74e1517670f70e766fe03c30875fdebeee5b1f7b22e99c5a1f",
"@esbuild/darwin-x64@npm:0.18.20": "a80288dea978a549e4fc42a3b1f0a1bc5f6341bbde3788b6b9fd6b9ba6ffd92a0b61cfe608543a8455d292d00094abbe7dc51bcd6487c9dc796a2e543299a9c4",
"@esbuild/darwin-x64@npm:0.19.12": "a436c4b3037a6a68c2b11fe487057c2cd4579363d94562d026a6d1a58eaf019c6ea94ba109e0b0a0597526fb6d2244d261fb7e6a18648f375ec90898b8bc14d6",
"@esbuild/darwin-x64@npm:0.21.5": "a4b6df47edf4b1e91eeca9d7af18f538e25615e00763709a4cc24a8918e7ac93b9bfc2ef9f44086f16257d05ad99e23c1213a7a1397475d1a78f0a1e773af89a",
"@esbuild/freebsd-arm64@npm:0.18.20": "72b69f1ba7fe6e8b7708809054cd96e9af3fd0bd561ce414c3bf7638abab15f7efc3782060dc7aa56dd4d1fcd43204355f2e0182a356d105a44e7c2efdec470c",
"@esbuild/freebsd-arm64@npm:0.19.12": "527060fd8bc2c9771d861a9a62935605e190dc17f454408fd87afc7d2fafe2a35cbca5cb171aaeab28cce187a21e5e2bfd607014e229360a8b4fa32438393203",
"@esbuild/freebsd-arm64@npm:0.21.5": "a4cf357807f2ea445b5191b8e5488070b567e2b534dba24ce6f8f1a332598ee0b9ffa41b3b0e55cd0cf57e2b56f0f1d84413faba182b81cb43bf19edf58a7654",
"@esbuild/freebsd-x64@npm:0.18.20": "b2cdcd81f3f7cd7be2f72c38790698993a6853ad241193bf085c2ad5d2df1495478a9d67a2282a54efeee3b827c26a412795b8064e19321c7aaf59ffc34f293f",
"@esbuild/freebsd-x64@npm:0.19.12": "b4d54892b0eec50f259fa6ab5527a5b4e48e1c68351d2c8febf60835bb5ac957564d2ab2ddf16ee66335b58a69ec367f48b125fb9646f8a39a11e1248c579501",
"@esbuild/freebsd-x64@npm:0.21.5": "8957c1345196e5dabd7d9f290b5292161f5d9955f269051fa7873118cfb5a20c31d70771ea3560b513f879d0948ba32fba915fb1b387571c4fbbb1fbeaf2dd87",
"@esbuild/linux-arm64@npm:0.18.20": "08216b531dc42e48abb6754f2b4f7f633055cd666ceb77c220c61c25aa84479b36ddeab25ecc23cf22965354314b84cabf1e8408a5cb1ba57b8343475613a782",
"@esbuild/linux-arm64@npm:0.19.12": "23dd17cd5b3f3d64726baa5632bd8079059ebf8419e3f9e82d900f8c781a7788980f6e6d1a604c1d84bd539f555227559f4916d52e2447a30f5886bbf1ed486c",
"@esbuild/linux-arm64@npm:0.21.5": "1b95b17ed94eb977e38ea9130e677551b7cf0ccccdb3f23a9f8b59b5d67400817c2a417e4f043295bd3f67796853da2a1b1a8ca201ffe745efb40a144dfdc99c",
"@esbuild/linux-arm@npm:0.18.20": "8fc75953ddebd11be542a224e0c73971e83556272d75d3f4023bebf4b0658a68314ee5721eb5dfabffb9ca9afcd7ae5404425f3d56cc6363c68bffa86f08fac3",
"@esbuild/linux-arm@npm:0.19.12": "76b9b411ba41320d57632347d1a09db7e745aec425db2cffe1c6467928c8d67bc122b544aa7fcbdca74a32262bfe0d48aa479931f6943bd84434389fada189a0",
"@esbuild/linux-arm@npm:0.21.5": "6bfcd098ada5e6117d028777e5cc58456c2f570157fa0a0dce30c9d05b8389b86f74bf6b862534bf6994d342946c98b6774e1820880fd289765864b668e94c17",
"@esbuild/linux-ia32@npm:0.18.20": "563d35963cfb7b94fec9e22986a4edfa8fd4f6d6d82fa6be1833eb7c50b996cdc9b53a656e2ccf02dc2ecc8676748b02d77ad20afbaf087ef802e562790390fa",
"@esbuild/linux-ia32@npm:0.19.12": "be7a5294d9387fe09e154c5c771761291ce2278c2e04d36396f737736d185ab4a23d97830afaec67bb593549745ba9e240ac86b0ad4c0e0044e553c408105aed",
"@esbuild/linux-ia32@npm:0.21.5": "73c249c9918f0c9a9268ffe14fe745f5e7564b309dcea213da08a5e4367ffdfc8df4b004c70f80269dce0f653a3280cfdd8bf9a7a616b5b60649e4faea6e69b5",
"@esbuild/linux-loong64@npm:0.18.20": "8a728161c3221ecc35e8d55f700d065e59fefbed5130feea6e3975f1e209cc8c31de55d908ff4abf29ec2d37e88e22f9b2590e9764e72a47825610b104a39374",
"@esbuild/linux-loong64@npm:0.19.12": "964386dd94bdd05383e6a8223a6af222a113bef78e4c8f7a77684c9c2e56c30d876c502ce4d28b4d91d21c402cdd491eb1e62bb72448c7077276c4714b299263",
"@esbuild/linux-loong64@npm:0.21.5": "60977efe24b3b6e1461d49da07dd57c1234992b9d2e6ac7d0dedfee538321d42be25e496ffb193121d3a6c6ca6ea6722b880e95695824dcc6643a3d9426b2296",
"@esbuild/linux-mips64el@npm:0.18.20": "e5d99e6c151323ea3ca5ddd6cbaab9bde45424932282adce064d90ad4e26fcaef1adce54b01734641616f65b89f1a5a69a715a9d05368b7c496a46c9ccca4744",
"@esbuild/linux-mips64el@npm:0.19.12": "5608d554f1db3311315eb29780e312e66d106d41ad53fb3458e201fbbddda198836fc4ca04314f7ae4e61462214c92494928804abab0759a384adff773da40d0",
"@esbuild/linux-mips64el@npm:0.21.5": "20fb6c8f6e58f66cd4351034858b2ad85bda4144576b180979305cfabed43780a71934e9f176e476c719f14e37253b231a43d46638ad232989d5f4dd72ec6b75",
"@esbuild/linux-ppc64@npm:0.18.20": "aebef9d269b964698128199821c8b1d9a45ca1898656d12add3f52cd335b098923565b7ef3bdea37297b14991f56f6b351681229d153904819b767ccc3af97db",
"@esbuild/linux-ppc64@npm:0.19.12": "7523a8c6b4b46324698b6aecfc661b369326099ebf72a36562ce69d8a6e2158cbe1d9af6d2588f130000c49875b719910df4b426885fcbac1065af590c1cd985",
"@esbuild/linux-ppc64@npm:0.21.5": "69f2ef1d127f48bc14cec479ae1a96dbf5fea651e0a3f148486f73495d2acb91acdaa164cd80648844916f05e7f9f9665a1864dd394e7f9acf96bea70937e6b5",
"@esbuild/linux-riscv64@npm:0.18.20": "3eb88a207ea74ed6a2cce3a3d91ce590b508fe673e0bdc5f72f58babd32ccd0fa79908f64ee25ce82bddc7a29d47a603c5522637d23cdad52d1ee4b6ba34b3cb",
"@esbuild/linux-riscv64@npm:0.19.12": "da7aedccce7377c1991a3bfce3767a41c2bd688a361ff5df9a16b56874d1bd198c4fa70ca15bd7234497ea5ff9a44ddbbece95733a1dbd9f43918b4bf27fb76c",
"@esbuild/linux-riscv64@npm:0.21.5": "60c749d87c0f67cc67c5cc0d82aa597b7a807bc52510a16960337433bdbc8fa9f3c46eba98080106c0971e404e2250ca11c441bb4ae5b7a7d78b4095e3a70363",
"@esbuild/linux-s390x@npm:0.18.20": "77172f6572740cda637f5beed73b3ff6bda8648b4c3632290dbfead82b3ff2f8431bdc3b43f2c7af881151b172eea086db24669658c4f9711f20366da21aace5",
"@esbuild/linux-s390x@npm:0.19.12": "5f55ca2284c1cd1034a0bdf1ded7d38f43539f028fd58ec157f36fd89701f5fd0d0d45514b82c4199e3bd16049635a3a16c96a694f5a8d9c8a40429ad3e2172e",
"@esbuild/linux-s390x@npm:0.21.5": "a14ff0484b962b374fd1e4662a53f8dd8999ba39fcf891f15631dfb2802c8d18893d6e366c42d28d55885e5804b7d6252c0e3cee038c241285c9b537ef12b4ae",
"@esbuild/linux-x64@npm:0.18.20": "9d438aec79e046e3527217fee95f39985e6e2df8c4390c9398ee24a6bff3f15e8f5fc2d5cc6564b1e182f864a99d8fd83818f880dba9616a2dcea6c7f16a57c5",
"@esbuild/linux-x64@npm:0.19.12": "401ff8f1d6d5ae6ebdd0d8e24cef86ba1c3adc4fac2014033c8e690331495cb57922e31cdaa96619e2b190a5bfc88ae8b90b1cd3a59952969a29da418bda58b1",
"@esbuild/linux-x64@npm:0.21.5": "9e5663fcace9c8456e9934a9ed6e7428db4080024eef3bfeaf82d476120bd881382c958be2785463d6b44467b3d3f870d6cce09a9cb37bcef19afeb97814d674",
"@esbuild/netbsd-x64@npm:0.18.20": "2523c64d41b2d8252f5f8f11fb5f8438d4e9fcbc5856e8644fb79b1c18175144b4c36c5a62306064639e444e938cd4641248dfdc167b15af26d72d90a1217898",
"@esbuild/netbsd-x64@npm:0.19.12": "0e4b3ae706cb82356e20862ec0066e9eb61bc7f7bf3cc09da27a72fa5790a59f5256f4e2cd255aac6023a37036c8ad805d51498dbd56fe7d913711858d3c8ebc",
"@esbuild/netbsd-x64@npm:0.21.5": "3cb6115c4557d653c7ad6d2be5b4ed7a688b14d85b7b7108a1a57dda0b2cca3f8ed13560fa6639da8788f860b75eb714a17cfb7ba8f967e93bdf40c9b3a1cde1",
"@esbuild/openbsd-x64@npm:0.18.20": "3e04b67db2a5ae3440dea5a0dddc6744cea6bc05bd7ce7b64ff4350efb16e804e701a14875199d62018e8322891dde4ba04ea7d6717556d6cc12e4178a1d7159",
"@esbuild/openbsd-x64@npm:0.19.12": "f55049053a978c178bf1d7f4857af395afa9b7708410707eef8149f42adc3ed6d72088419cc17f75f1b7be4991ad28007fe298be84f95ca4e02d28bac1b518c7",
"@esbuild/openbsd-x64@npm:0.21.5": "1caf0b502d6e2612ffd3e62589de2b9cd48cd742818746011d437e2d5787df4984f7c17b7a536aa20f12d04e519c859d755a7b57e6db0ed277054bd9c1036e85",
"@esbuild/sunos-x64@npm:0.18.20": "921cbdd363e622d854e83b9e868ccad05b0f0c09cb181e59f6ae1b74ddd6023974d1cba9116c56cc819d15063bf5a5bffa67c23a19b5b60b5a099ce1d9ec419d",
"@esbuild/sunos-x64@npm:0.19.12": "da944741c1d6c8d814633445f068b27cdff337f309513982125f633d7365154ba6073719ba4389e471479886841d0152f37426f5bd890b7a8c33b89b7f775c82",
"@esbuild/sunos-x64@npm:0.21.5": "676da7301c7c600bb7de2523ecf5d877128da3c125fd8136533f5be38ca15d9f800b2fbbd396ca37d44c5daa51b8124d8a4728bb18245cd2becb3191b897c45a",
"@esbuild/win32-arm64@npm:0.18.20": "9de26948654e871289a5b6a5ef0c238ca92b0973b00eea692689edd278a9e791ac2220e33cfc24eca673212571242c08e041cd0a97087b247716d9538609f68d",
"@esbuild/win32-arm64@npm:0.19.12": "c9e6922908588569a8cf396ab0c5230cd1634db77039cb635d83eb825eba64a4ac3e19f28917185495d9d7b043161bfbd4cd49eb7d3592b88cf4594d9d628d08",
"@esbuild/win32-arm64@npm:0.21.5": "9b2ab87429efd3c2697dc5c7948ea57b57757b6e4709469e773b73cd5fe4b7fda5912073f4c3bdf9d0346b8f3ae443367a63bcd51de24fb81b9f592712eb3366",
"@esbuild/win32-ia32@npm:0.18.20": "98d18afeb689679b73ee823b297d8fb160e97fb183cd5f39d716b787465c024b0489bebaec96e37157cfb10d5296e803070e90f07eaf9235a2afb041d25e9e31",
"@esbuild/win32-ia32@npm:0.19.12": "71487cca9ac6cce6bf214be36e5c6aa1eaac49a2bcd538fafb6168fecbbe2624edf2a057be531b5393c4e2672b24bd316a872cc081df1d9c06e3a12704662675",
"@esbuild/win32-ia32@npm:0.21.5": "c1fe3276507d82202c464cd4809e67e6f151e29ed9de05c32d086dfe30207db15e646911ebc7f50df659891bfee292a25062792c589c2ff769be238c6b5fb8be",
"@esbuild/win32-x64@npm:0.18.20": "b019d085b43c247251b8d3791fa8f3251851d34cfce54bbe8b15a3a73efb1bc903e884551c8a821d5e681a48bc91c80a6f7e394762b938a266d8b602b13664ee",
"@esbuild/win32-x64@npm:0.19.12": "33341d6ae7d0682fb679170c91efa3933fc58dfe3d2f95c19b9856db55af6c8af4785f3669f3de34907ab222b2a6a201a8557213bd37dcc8406593e9eddbaa3c",
"@esbuild/win32-x64@npm:0.21.5": "5d7b28baa9c22684d35ec0515f6d36f8f583f26733c8e84c7f78edf17b8a7d133819267486f2fd66f20ca3a810896f11c3c81106d745040c2f07ade314846bf1",
"@esbuild/aix-ppc64@npm:0.25.3": "5e3ec55997c8d3c9c0fa565cbd04f1566795fe47626d63f6a593a39190402869a2561c772d1db5621719fa9db174f4cbc201032447b97a1cc28e69a9426a893e",
"@esbuild/aix-ppc64@npm:0.25.5": "fb872b34a2843293dc60e809968fedf93e0d8f7174b062decffae6ba861eb56aaea0cd0aba87ba99162ceb2a690f0cde4fc29c000b52c035e40c91ec7861d43e",
"@esbuild/android-arm64@npm:0.25.3": "d840843df6b82cc918abea3e706235ae256caa7b6feaf4b78f47d97cfc476ffc905d5e4263f066ae96dcc997bdc4e33458ed3436d6a38d147cd401071dc92d10",
"@esbuild/android-arm64@npm:0.25.5": "c818e799b19b5587466bf68a27b578ccaaf866c1d144573fbde7659e3fd3f555422ec3e67f5bd186a87648957d1b6e74df4f847edea7219c16979c9916f36e91",
"@esbuild/android-arm@npm:0.25.3": "185f4827b86ebc797ec74a98a75256a401eda92af862d217c10268816e8c4feeb49d82e965916dd2df238d7f3eda98325085e8d36cccf63c6cb2d3a11b3c6ee0",
"@esbuild/android-arm@npm:0.25.5": "a5384933f9f2ffcadce2be49da6ff43249fe42f32a04071316434e9f633fc20c8d4029072e9a53555620c3531045786297607b852579eee30b6dbc3bc9d98cd9",
"@esbuild/android-x64@npm:0.25.3": "0328941aaedafe3e0164a93a0e57178ca5fbe5a336709bd24270329a504bdb76bfc4b7a63e07c2f6fdea1fbd4b25d53320ca5665351d477e8e77b2fd071732ee",
"@esbuild/android-x64@npm:0.25.5": "8ce115dc7e1e6735f23b4aadb2dfca29c0abd8577ce34802ea3d017a64e388928949134fe225dfe190babdc5ec01be5fc7794eca84738cdefc12c5e3789ce43b",
"@esbuild/darwin-arm64@npm:0.25.3": "c10ed8ec813cad217666f556481baa0c4286f2a0567ca662fbf3088cb960421729eaf6b5a8504b9c956a1497f88141549af5f7c0f907a27a2c546e75fb4c678e",
"@esbuild/darwin-arm64@npm:0.25.5": "a009eab62f2bd284a6f2001d5e08217059186ffc16907bbe873e1de40fe9b5ed92c0db2f4c4d0dc41545838850a430c8f2f35d7bdb9cd01a1a04293acd97afca",
"@esbuild/darwin-x64@npm:0.25.3": "9828c988e7a54e63c7afca426348bd09d5c70b4ec799908ec5310347a14c94900f58e14f2b2eeea87d68b382078977bd5d5629546b307e8ac093168a7c72712d",
"@esbuild/darwin-x64@npm:0.25.5": "cac8021a7a0c549263e076913346b35a5bb81f76ffbc1abfad5e7b67303f013ac0c76f111bf624ea8447b327ec86c18a60c6ff307d743a2269f5d47313f5b2de",
"@esbuild/freebsd-arm64@npm:0.25.3": "4b20547db6bc1dea0e14f4bb96fb474d6e80e8d01c4fdc141d77a1693be06aee5ea3d4968f80276f87037086822c336defa358cb315bd671a7af9c672a081811",
"@esbuild/freebsd-arm64@npm:0.25.5": "d248e7103b7094eb4288db7c9a78b2905a25b4a957f2b945531ca88d3394f45ceca2343a7c84954734534af6159bc741eb3d5c1ed9df990f7395337a1b14192c",
"@esbuild/freebsd-x64@npm:0.25.3": "083edc9e2de8f3dc407b52836b49ebea29d0d543786c706b744c77646f5fde53327b786d156b79b859fb61eaac191733d275a183807c8599d51cd4416d00f5d6",
"@esbuild/freebsd-x64@npm:0.25.5": "8a7be0740f07f5dbb3e24bf782ca6ef518a8ce9b53e5d864221722045713586d41774cbd531df97dc868b291b3b303c12e50ca8611c3cb7b5fe09a30b38285eb",
"@esbuild/linux-arm64@npm:0.25.3": "bad206365faf883e5f7615daef3d65b7a82d6c9e401fd67353352c532a42310dcf6491dbf0e094c8007fb6d73e45183bb63cc10585cfaadc1386fbf78c529dc1",
"@esbuild/linux-arm64@npm:0.25.5": "ce3c8fca47cf0a92148fb288eb35a5c4a4dcf7a700730b3a48fdd63c13e17c719eb6b350378203fba773477eb5be637f47a6d52c5d4ce5bdc0075ee917156006",
"@esbuild/linux-arm@npm:0.25.3": "4659e20bf62737bb6ba5e54f36f87260e8092f6c55aed6a73457cb002f7af990bb205ca48d0c19078540a210b65a1db1a1cecd7a4ed06f4fe4eb1c0d27c30bd0",
"@esbuild/linux-arm@npm:0.25.5": "cc81ea76ab86ed2a837c9da329f7c63412d288dc0aa608c8dcdf51705dc93d5b7f966a429be4896babe611074e5898c7e6c8e07ad7f50123a05478975294fbb4",
"@esbuild/linux-ia32@npm:0.25.3": "96cf22e5979c95aff499cf0ebd576e21964d9a7412bf5cd4eb1ab71cb555aef2b4d5d3e8aae34ab80354125f1ec571f0ddb3f728f9e19cebbeceff75bb9d0686",
"@esbuild/linux-ia32@npm:0.25.5": "bfed6750923afd56148f658f6ec8995479f5115116dc212ecb9e4c556064422e22eda855177e7c02cbc945494e4db1167101918c5fa932278115db2c7025a3f6",
"@esbuild/linux-loong64@npm:0.25.3": "9d12d8deaf0bdd5d64c062c65eb0e3ea24ab98b1e6ec34b2b14bb3902e5e3504442c3273f6dc05228f6104650ddaf0d37ba86033f19e7b065766c3d528c0f6a3",
"@esbuild/linux-loong64@npm:0.25.5": "e5c20140bbbdba53f0d86dd72961ed73e6255d2ada2d3a626f390b352170605644822ad7592f695b6e520edcefe0c5f6ba19d10694b5d11d725745d9792bde01",
"@esbuild/linux-mips64el@npm:0.25.3": "f117b06fe2d39b08571fd84ed191801cc9501342a514d5d83494219ad14bee9713b6332d0836f192c224b1f9a01405f3d6e2d22952e399bababd527bfeac9c0f",
"@esbuild/linux-mips64el@npm:0.25.5": "6b3559517efd0dd1301debc7af7e275b055859c26facdda2e229b1aaab6ebea4c480a1da151c46211ee4035d95bfa7f0cdacf735b57ee99d41b69c77357310b9",
"@esbuild/linux-ppc64@npm:0.25.3": "ef777920724eecd3bb20f9718901498001ed8b28ced1a6c9a8e947c5ae412d31856761556b9d89bdae1cd9af3ff53f9c83756fac3b4e99b53ebdce44c5ff0cdd",
"@esbuild/linux-ppc64@npm:0.25.5": "a1a1af99d758efce928335637924dcd8ddec4201af51014e1f831b012d53a0a673b1e0c31036ec9e8c5a0311439283419ec8abdfc67ecb245fa7f7b653006ed0",
"@esbuild/linux-riscv64@npm:0.25.3": "87d71b5c361f7d95c173f8c1051e8dce165ff3d6100ef0e5cbd090f8249c58d7f5a38e93774d081afe4fecf3a6e725102dbf9ffa51e5b4960ccd1b072cf86e10",
"@esbuild/linux-riscv64@npm:0.25.5": "6cd8dce6723b73e0f89898ab6cd52e0d009afdacdfc0d5529134de7b832c92c2e0421fbb5cbfc0e0c0b2b00a9b1ff2c4cdb9695b2c535ebc174960e986c727a7",
"@esbuild/linux-s390x@npm:0.25.3": "9972d82725c5818fca8ef1625c3f55a8033c2d678c809a01580780fd5171025e4f90b60fdfe6ff925a1738bb6cff85dea104fdce57badf0a270ed1d290345e23",
"@esbuild/linux-s390x@npm:0.25.5": "31b86dbc93d19eb362bad3353e65d6da771118346e723582d06c05f1b6ffad1c3765001b5215ef1e8f0c2bb29130d98815359bbc88e5c08304354d5a92e6ea94",
"@esbuild/linux-x64@npm:0.25.3": "434e21ed68e25e2043295fca9c382461bf50f031c45480a1482f297412f95ebfb183339001444e5d1e6b14358571c395f17ddb8bb9bbd22aefe82740463bc18c",
"@esbuild/linux-x64@npm:0.25.5": "f878a3e40edfd8a50de94bf982a9eaf03e636a0332af163a6c905490063aae652384fb392d4765c4338fb6f991034949c92ec768ee65c3b2fceeb494b89fe8b3",
"@esbuild/netbsd-arm64@npm:0.25.3": "4dbc6ef9a5ddcf44f2df0fe39c662189eb4cea38fe5778ecc81cc29af68fba2ac077c5b308ad84b8263bb6bea9f03732507b79966d051d860a2344b8fe8ddc4d",
"@esbuild/netbsd-arm64@npm:0.25.5": "941c5e28a63a93f19122271b5490e196db12815702c2266c6d66401b6909a4364ab889611ba81c5359624e3ce61f0505a680a1179ed9a555d1415fa1c485d75d",
"@esbuild/netbsd-x64@npm:0.25.3": "d42fca551f67c20b18d11cae67fed9675b90293c901b3b152d6e0c1153db1443f7b8a4f7786797b1946d19881db64b50f32e883d756ce3fdf8b844a1c71611f3",
"@esbuild/netbsd-x64@npm:0.25.5": "edbefdd88ca24a373497a7c8d1fdab418827ff89c6eee1c574159dbb4d9174552aa87753f35525a894964b77c14b012164ec5582b9f19dd4d6c1f5d45df411c7",
"@esbuild/openbsd-arm64@npm:0.25.3": "3aee3b70a7f41ce2355d93bd955718683861ffe9e6b5550c37caa28b8b16e6414222c806f413c37eb553c3990a22b8fdb88721c619f553d809db92cd070ed383",
"@esbuild/openbsd-arm64@npm:0.25.5": "d44633a374c109d2fb9c678882016e3ec3d79f0c5f21a6e6fb0114ea709bc539200b037a4e3ec52304eea2f8c5957bf16c6f0a7af5cfde41b652c4bac604bba6",
"@esbuild/openbsd-x64@npm:0.25.3": "d158b78f95feb68c6217f114a3178058aa93933e83897546ffecb6b9ab8e0fe5fed69940651b6c42c1ac9064a42a29fa1c2da316dc64ab146107c2c2599e68c6",
"@esbuild/openbsd-x64@npm:0.25.5": "efc4641ea653dedc9886f0603c2e7cfc6fbe94c34d4cdaee9b060a8b9d8143d1192c45da93b3e802af2c26f72ab1ad3a3fad0e0cb297d06de55814fe83ccd32c",
"@esbuild/sunos-x64@npm:0.25.3": "8b6bd4c43c023d0dcb9966349ec1f2ccdfb6163aea2c1c06060806795ed1fb083e22cb9e80e7853ba8c62a74d1bafa36dabab70881e7d6782c2dfb237f93bcc0",
"@esbuild/sunos-x64@npm:0.25.5": "29860663381b6098c0fda6f69235407654dfad953e83b3f9f06a270950d5c37da4ca60a4b5915b8e2606d468b560be6179870f64a22d5b046e8a930c31a7b554",
"@esbuild/win32-arm64@npm:0.25.3": "c49c827b8cae7eb2a4a6b38a1321c0c1bca1693826c7268d3c3b9361df360b897f583e91b9acff3eeb0c9f477d39c00a2d89c71436b64091442e74011a41f2ed",
"@esbuild/win32-arm64@npm:0.25.5": "a77d395251c8a62ab0cec07d5230222823fa02fbf3ef008d94b5213a335c9f949872c3f1c2f947abaa28098b669018e429af42f59616e049860a0072f3b006de",
"@esbuild/win32-ia32@npm:0.25.3": "84acc7f9d65de4875bfe09976620e94327bef444b1b8a795d98173ca777a2070b775763bd927ee475503455b2c1109bf5c911fdfe7c73de7d32124ccf3858afd",
"@esbuild/win32-ia32@npm:0.25.5": "ff1b6cbe835082aef5b93c3e2012d51be431d05c6ae5f90a5bc89687c687e8e2340c262dedddd124b27b511616bbc4088b5a4a949d3147f677084dc6ec572629",
"@esbuild/win32-x64@npm:0.25.3": "2b88dffa4814240cf7d88a6dee449361ae411a0d9cc6ebc327de59f4f6662a65fb2ef62fa38258bae422933d97a416db50ec4f04875ddf61d15f47bc0ec1ab22",
"@esbuild/win32-x64@npm:0.25.5": "266e69e8d37bd4deb77443588e49472e4e9791178cb39e1692eabb67cf65d8e85a932ac468e7ebb2072c8a9ee23ad413c8f0f7d954c474f643cedbbf7aad952a",
"@parcel/watcher-android-arm64@npm:2.4.1": "88cb813d54227fc25e487f00497cdd58974a07e1c22a5cc7cf922983d908b460e0876ec0c9acf333a5b6f5623dc50729f8b92612970bfbd5a12d4e5cffc025ff",
"@parcel/watcher-darwin-arm64@npm:2.4.1": "342502e0f175dbd0649f2edffc9f7d76823668e12184a62d8e542df454a067bcade1cfd298975bf7238a7575a9d721c6d7ccb0e8c9102dca5394c9fef2349561",
"@parcel/watcher-darwin-x64@npm:2.4.1": "175868753e64ea7bc70993a05a34694e8ad85d9d4a08bf9a36573925777369a0701f2971d6ff14f9ed525c9b7725ce40629cad97fd7c67dc653f247884d99a62",
@@ -87,23 +69,24 @@
"@parcel/watcher-win32-arm64@npm:2.4.1": "35fc4e90eb74a4e583377821775d5f90269deeaa61221fbb69127b3151279a37d4038df91beb38e51367ebb9d92f6b0295b58c0e4a7ac3ecc0adb0f27c935c69",
"@parcel/watcher-win32-ia32@npm:2.4.1": "0b12602039c1ebb6ea711bde1996ca66d814668a02d33b2b949c66111de9e3fbc6f4d8b9b6c985affa1eafa6089b4c13b0e0db8f8d3a7a2d19849c7d7f639f1c",
"@parcel/watcher-win32-x64@npm:2.4.1": "56f160729dc8c47d940187b4a2e9a4100be77fc2acc2dd5e4cb527d036676eecba454548cf00fb6d7c44757e42d77dc4d2d8ff19c1ce64759a7fde2097aa6bfe",
"@rollup/rollup-android-arm-eabi@npm:4.31.0": "c737cb26689f9d34357921d15ee6a7261e5d7cc068dbb93a36c2f40c34a59bd8721e7bb392943a212ecfb97d9326ced8254469e39e9d6b012db636269eb66577",
"@rollup/rollup-android-arm64@npm:4.31.0": "94957eda1ab8894a6fdf0b1772bc00e7563f2e520179542dfdd6f9797bbb9cde164693b29439da631fd8ee6b5117c36ea7ba7ad8ab43d1747c296b22d6c09cad",
"@rollup/rollup-darwin-arm64@npm:4.31.0": "2b408eef19930929008806adc87f29bb9cacbbea1f32770be339281d72a5bbc52a88da1269a34b88052a0037a0b2b61e70daf166ed9d3c982b4fb4bd606ad020",
"@rollup/rollup-darwin-x64@npm:4.31.0": "9e7bc70cfd1ccbdddad3016d9fd36616c8a71725f9c47bbdad1f3ef40b656f7db90f02c88a4724b399f8a46555e4f90c4880d5eea0f12fdeba2f71a555077db5",
"@rollup/rollup-freebsd-arm64@npm:4.31.0": "3e149a14c1930b539e1d0a733bc2582bc5e84a5906723b5ac0384d46c43861a05120dd4566bb4f1efca8f930fd1f0eb78646587fc3c0cc32606d32ce6fb7bb13",
"@rollup/rollup-freebsd-x64@npm:4.31.0": "fe381b185187a5c2e8383920090bcec0c1273d058cc113eba23a70bc9f49cbadacd92c2a6255d345971bd2cf283941f623b00035d051758f743cf3207c233b54",
"@rollup/rollup-linux-arm-gnueabihf@npm:4.31.0": "7bfe07f535125f59cc12fc0af162b9bae4400a364f5e2b1eae44377904deb3dc1c558048a0a8b059be1a54e609a7597c109f0a26a2a0baaf21a5539a331d14f4",
"@rollup/rollup-linux-arm-musleabihf@npm:4.31.0": "a1bb7593a83e2c2dbd32e8a3447e68ac43874a46aaa501c63a533695c47b66c7156527951bd84ad53c73a3155b5b50fd658c0aacad8790b6e4c03c0a83c94cad",
"@rollup/rollup-linux-arm64-gnu@npm:4.31.0": "e2e85814bcbaeb8b39e17ee5f8510c8856c5cc4c2ec1787245e8f8e0531563e36844549b02956b881d5aa9405e838a7d1b1697c305c394a57889c0b1c521c064",
"@rollup/rollup-linux-arm64-musl@npm:4.31.0": "00d8411e0516b298913d19dc2f4991ee184a4799b041f9c2a2eae5cf91f3aa315a4cc69d51d04c2540bfe0793b628af105d8df419ba541dba24981ccdc1a372a",
"@rollup/rollup-linux-loongarch64-gnu@npm:4.31.0": "ea1e4d813a12e8e9eda908d705dbf013835034a95cb63046a3bc15d43a6bf9812034d3779ab01c5ec87338ff1115ea86c6af2383efa4485b18da1423c68c3b79",
"@rollup/rollup-linux-powerpc64le-gnu@npm:4.31.0": "903350e968edd4d9fcb4c53831672ff5980f4d58c32a1b34e2c6446d0ae965d522173a82d9dccdf040805f82507b05e3c7e629782e56ccc51c78e01bc0b02dc2",
"@rollup/rollup-linux-riscv64-gnu@npm:4.31.0": "02bf4d53b6edc386103fdfaa6f1c774b1859e61146a305f3a0942159902b829ba67fbb6a6dbf914ed77fa7ae20826f601d11de79f033b37666077f26ccc0bfb6",
"@rollup/rollup-linux-s390x-gnu@npm:4.31.0": "bd6a2a45d36e11a80d4675c6427eafbe85165ffdac4c75945c89c650897ac8c582b57b76e0a69a39c09ba06c58edd865e4d8a54e1c7a245d2c192db465ae2c55",
"@rollup/rollup-linux-x64-gnu@npm:4.31.0": "6100d9bd7a0de95a54b3ad15d953ea74bef4c9c4424c24c5187ee1641f81d8fcaa30e48d16faeec0957e3a48517fcf78486e47fedc277f8f26fb6fbc7619df4b",
"@rollup/rollup-linux-x64-musl@npm:4.31.0": "b9a94514d6606e8b320ecad50f7c4142b86bb688aa1e87f076a462f76488000a90b8f75db01250cc17b540a70f231ab4064e79b79b66a2c7ad76c224d30b05e3",
"@rollup/rollup-win32-arm64-msvc@npm:4.31.0": "d0fee5e492f22df8885e0dcf2eccc2b8424c926050b1506d5a59fb97388de9ac5bd149a20d8521cf379cc3a46af92cb5de5d15cf749e648062f9f6ebf17e5754",
"@rollup/rollup-win32-ia32-msvc@npm:4.31.0": "c0e4d6f7cde9fc9a28eff19c04a96807a76d911141bb9fbe2a41d7ba394f4ebf334d3cd9b712c086498cd5de73ab2f2d1c12e6d22b08178ea4ede84474c656b8",
"@rollup/rollup-win32-x64-msvc@npm:4.31.0": "c3c397ddceb47db9631887caed7ec437b3bb9d1ff0de24440614720d3fe322a0c712617b869177fc37c2386430bad2e92cc3735a52ef579e25c9aded76f75580"
"@rollup/rollup-android-arm-eabi@npm:4.44.1": "ec8b655e2930312fe94eded1cfe439901bbd442a891494a512259caa0bd936c29b9d06debb061bece88f5d41f619ccb4d0d77d0fe190f1a5c25a3a1a724d255f",
"@rollup/rollup-android-arm64@npm:4.44.1": "5eb5c7de31f435afb97feebd06feefb93c2cb272002240b8530c1f274436ea578d8320d67fa49eb1409ddb20a47219efff59a09b22a426584b881d36adac7bea",
"@rollup/rollup-darwin-arm64@npm:4.44.1": "93cef94c44d1baabc5346148d59ebb5d640948b2895bbc5de6804908999857f331c388eb449f98eba98d2b239492e91211accee7eaf4b579ae3c007705d76246",
"@rollup/rollup-darwin-x64@npm:4.44.1": "d235e7f40080cc19295d45935b83a0238cb66962e7d6d4af0eb261012d80bc344fe073ec9dcc3d39092138a66e7a69c4e79cbac7c6ee49b8329b80d12d52968f",
"@rollup/rollup-freebsd-arm64@npm:4.44.1": "e26f6bf6914e190d72f74da4c8e47c27661fc99f6310f80e664acfcd6262f4981ff043ff53ccc06dc6a232d481f9f0055e32dba3b65442259316b18fc0ea9087",
"@rollup/rollup-freebsd-x64@npm:4.44.1": "d06455bfbe8bf71996864879b8b9b4f95617adda959a5a143be0df9a5bf749cd52740a9a3b2548e67be00eef9ccb99ef04368a052afceae2011e2a817baf4156",
"@rollup/rollup-linux-arm-gnueabihf@npm:4.44.1": "1bb6818627de1434f889c8a6bfc13a0205f25055bcc9f39483e445411c753111c7d082cfca2affdeeaad46c3711e3ece140fabb7173ef3cd19446d3682863854",
"@rollup/rollup-linux-arm-musleabihf@npm:4.44.1": "6e9eff8ad332d9923a7cadc0ce1911c4e0a2f8457a8131485f0bce241bb7c223dc811b976ffb9ca08d4930630c647219dbfcdab639c3a8bef075b68285c01960",
"@rollup/rollup-linux-arm64-gnu@npm:4.44.1": "a5382c59bf531afd774b7de82d1600bfb5915a0708ad6c7099ffd1af657b813a525de18902178120b247c95e21487f0c96a8eecc8d9ae9163da12ecb4a5ed3d3",
"@rollup/rollup-linux-arm64-musl@npm:4.44.1": "44944da3785383b8cdb5f8b4eb627737edc10e206ec66ec6a762f75f2dcc12dff7bfaae864d37941d5d30c50c8fee5f5a2b12c19627b356e0aea3186f80e2d48",
"@rollup/rollup-linux-loongarch64-gnu@npm:4.44.1": "1f7502f1777622abb717a3109bf69907ba46a277a6ea33b99d6cea8e33f74b6d8a979ac5bfa33398f31211687adf7458ef9680b7f2e3523d82088a3d59857c8f",
"@rollup/rollup-linux-powerpc64le-gnu@npm:4.44.1": "535c564216655518831098e5481f06b62452fad69209409776f4508e9c73265dfe531983a64b47c9090b244668b4c023c906061eee5a4c3c29c1c9822f1d1209",
"@rollup/rollup-linux-riscv64-gnu@npm:4.44.1": "423cb7d6578052d23374fe2ec3b996be9a420785fe324a0d1aa38e9e9d3f4b34ba3673f4ce5f622c7ed99bf82c4e24f55469b6e75deb5f27eb67369c052d8a9b",
"@rollup/rollup-linux-riscv64-musl@npm:4.44.1": "03a0530b45b554363296e938493e263aa26c342080aea72c9e2b673fc42d5ed2d9267d283ef136c71da64bc85a03fd360988aedbfc68029bd948567afafe71a6",
"@rollup/rollup-linux-s390x-gnu@npm:4.44.1": "93fecf841caf9621a99b8f0938d21a261ccc1ee7dced2ff47de659662a3bbbc0e3cc45ef38d3aca84918ecaeff51188a68a109db337892518ccfa393c305fafc",
"@rollup/rollup-linux-x64-gnu@npm:4.44.1": "b401ab19f21fb0f8ff50662a9fbe823d4c7904fdf0f8de17c3338107e3974ac89ba1189b7c6f0f2ff8734cfd07325bcb5e5dc6a5d53df076fe34757233063a72",
"@rollup/rollup-linux-x64-musl@npm:4.44.1": "87ef16e6ca9ae5d398f5b7e1b58033cf1b5f87efb0ab7c4b16dc7dd213a1b3a9305c2624b11e89539d75d146912eb7a41a139270464fc617fd1c2917e391fc56",
"@rollup/rollup-win32-arm64-msvc@npm:4.44.1": "5f4fe05f1c778d839ce22c2b1a1419d8c511fd10793326dab5a033978f259733b6d042519a26ad7df3f5b2cce75bfc2d2600d9c43ec9cf16d6acf105bedf00e7",
"@rollup/rollup-win32-ia32-msvc@npm:4.44.1": "5639edf6114f38055489c35f03f5d039b4719ae50309db235dc176c026fb8eb5bb028e0db2769ed4faec34722200f6a31df62c23a0f8c90a13568685a6f00140",
"@rollup/rollup-win32-x64-msvc@npm:4.44.1": "d23d4b88a0a96965ba20e75bb9f5bea6e22cab53b9658a54317634363a64aa43dd1ff66f569d0e4fecc34d60d554a64ae905fd85cbc436f78544d6f9d550ebe2"
}
@@ -0,0 +1,53 @@
From d8843c5fcaef79d209803849070e1a79ab380903 Mon Sep 17 00:00:00 2001
From: Euan Kemp <euank@euank.com>
Date: Sun, 24 Aug 2025 20:24:34 +0900
Subject: [PATCH] Fix compilation under rust 1.89
Rust 1.89 produces the following output:
```
error: unicode codepoint changing visible direction of text present in literal
...
warning: allow(text_direction_codepoint_in_literal) is ignored unless specified at crate level
--> rslib/i18n/src/generated.rs:7:10
|
7 | #![allow(text_direction_codepoint_in_literal)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
```
This change fixes it.
This ensures that some third-party crate that pulls in this code as
library code (and thus isn't subject to the rust-toolchain file in this
repo) doesn't hit this compilation error.
---
rslib/i18n/src/generated.rs | 1 -
rslib/i18n/src/lib.rs | 1 +
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/rslib/i18n/src/generated.rs b/rslib/i18n/src/generated.rs
index f3526f79f..f3fa71ce8 100644
--- a/rslib/i18n/src/generated.rs
+++ b/rslib/i18n/src/generated.rs
@@ -4,6 +4,5 @@
// Include auto-generated content
#![allow(clippy::all)]
-#![allow(text_direction_codepoint_in_literal)]
include!(concat!(env!("OUT_DIR"), "/strings.rs"));
diff --git a/rslib/i18n/src/lib.rs b/rslib/i18n/src/lib.rs
index bfd6f5ba2..f9dbb1948 100644
--- a/rslib/i18n/src/lib.rs
+++ b/rslib/i18n/src/lib.rs
@@ -1,6 +1,7 @@
// Copyright: Ankitects Pty Ltd and contributors
// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
+#![allow(text_direction_codepoint_in_literal)]
mod generated;
use std::borrow::Cow;
--
2.50.1
@@ -1,21 +1,31 @@
From 104572dc7ebb75061b867158ce3d4311d8cf4594 Mon Sep 17 00:00:00 2001
From 3d41c84cb5f5daf10b5b5ecffcb53aeed7f0584b Mon Sep 17 00:00:00 2001
From: Euan Kemp <euank@euank.com>
Date: Thu, 6 Jul 2023 10:05:15 +0900
Subject: [PATCH] Skip formatting Python code.
Date: Fri, 11 Jul 2025 15:59:16 +0900
Subject: [PATCH] Skip formatting Python code
Co-authored-by: Pavel Sobolev <paveloom@riseup.net>
This otherwise fails the nixpkgs build
---
pylib/tools/hookslib.py | 1 -
1 file changed, 1 deletion(-)
pylib/tools/hookslib.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/pylib/tools/hookslib.py b/pylib/tools/hookslib.py
index 6361c633e..6b16d3ec1 100644
index 99f08fa1e..2bb4b3f26 100644
--- a/pylib/tools/hookslib.py
+++ b/pylib/tools/hookslib.py
@@ -208,4 +208,3 @@ def write_file(path: str, hooks: list[Hook], prefix: str, suffix: str):
os.environ["USERPROFILE"] = os.environ["HOME"]
@@ -82,7 +82,7 @@ class Hook:
code = f"""\
class {self.classname()}:
{classdoc}{self.list_code()}
-
+
def append(self, callback: {self.callable()}) -> None:
'''{appenddoc}'''
self._hooks.append(callback)
@@ -205,4 +205,3 @@ def write_file(path: str, hooks: list[Hook], prefix: str, suffix: str):
with open(path, "wb") as file:
file.write(code.encode("utf8"))
- subprocess.run([sys.executable, "-m", "black", "-q", path], check=True)
--
2.42.0
- subprocess.run([sys.executable, "-m", "ruff", "format", "-q", path], check=True)
--
2.49.0
+6 -1
View File
@@ -10,7 +10,12 @@
rustPlatform.buildRustPackage {
pname = "anki-sync-server";
inherit (anki) version src cargoDeps;
inherit (anki)
version
src
cargoDeps
patches
;
# only build sync server
cargoBuildFlags = [
+89
View File
@@ -0,0 +1,89 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl git wget jq common-updater-scripts yarn-berry_4 yarn-berry_4.yarn-berry-fetcher tomlq nix-prefetch-github
set -eu -o pipefail
set -x
TMPDIR=/tmp/anki-update-script
cleanup() {
if [ -e $TMPDIR/.done ]; then
rm -rf "$TMPDIR"
else
echo
read -p "Script exited prematurely. Do you want to delete the temporary directory $TMPDIR ? " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
rm -rf "$TMPDIR"
fi
fi
}
trap cleanup EXIT
if [[ "$#" > 0 ]]; then
tag="$1"
else
tag="$(curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} -s 'https://api.github.com/repos/ankitects/anki/releases' | jq -r 'map(select(.prerelease == false)) | .[0].tag_name')"
fi
tag_sha="$(curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} -s "https://api.github.com/repos/ankitects/anki/git/ref/tags/$tag" | jq -r '.object.sha')"
rev="$(curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} -s "https://api.github.com/repos/ankitects/anki/git/tags/$tag_sha" | jq -r '.object.sha')"
nixpkgs="$(git rev-parse --show-toplevel)"
scriptDir="$nixpkgs/pkgs/games/anki"
ver=$(nix-instantiate --eval -E "(import \"$nixpkgs\" { config = {}; overlays = []; }).anki.version" | tr -d '"')
if [[ "$tag" == "$ver" ]]; then
echo "Latest version is $tag, already $ver, skipping update"
exit 0
fi
echo "Updating from $ver to $tag"
mkdir -p $TMPDIR
curl -o $TMPDIR/yarn.lock "https://raw.githubusercontent.com/ankitects/anki/refs/tags/$tag/yarn.lock"
echo "Generating missing-hashes.json"
yarn-berry-fetcher missing-hashes $TMPDIR/yarn.lock > $TMPDIR/missing-hashes.json
yarnHash=$(yarn-berry-fetcher prefetch $TMPDIR/yarn.lock $TMPDIR/missing-hashes.json)
echo "Copying missing-hashes.json back into nixpkgs"
cp $TMPDIR/missing-hashes.json "$scriptDir/missing-hashes.json"
sed -i -E "s|yarnHash = \".*\"|yarnHash = \"$yarnHash\"|" "$scriptDir/default.nix"
echo "yarnHash updated"
echo "Regenerating uv-deps.json"
curl -o $TMPDIR/uv.lock "https://raw.githubusercontent.com/ankitects/anki/refs/tags/$tag/uv.lock"
# Extract all urls to pre-compute hashes so we can download whatever uv needs for its cache.
# We skip pyqt because the derivation uses the nixos packaged ones for
# native-library compatibility.
tq -f $TMPDIR/uv.lock --output json '.' | jq '.. | objects | .url | select(. != null)' -cr | \
grep -Ev "PyQt|pyqt" \
> $TMPDIR/uv.urls
echo '[' > $TMPDIR/uv-deps.json
for url in $(cat $TMPDIR/uv.urls); do
urlHash="$(nix-prefetch-url --type sha256 "$url")"
echo '{"url": "'$url'", "hash": "'$(nix-hash --type sha256 --to-sri $urlHash)'"},' >> $TMPDIR/uv-deps.json
done
# strip final trailing comma
sed '$s/,$//' -i $TMPDIR/uv-deps.json
echo ']' >> $TMPDIR/uv-deps.json
# and jq format it on the way into nixpkgs too
jq '.' $TMPDIR/uv-deps.json > "$scriptDir/uv-deps.json"
echo "Wrote uv-deps.json"
# github as well
srcHash="$(nix-prefetch-github ankitects anki --fetch-submodules --rev "$tag" --json | jq -r '.hash')"
sed -i "s|version = \".*\";|version = \"$tag\";|" "$scriptDir/default.nix"
sed -i "s|rev = \".*\";|rev = \"$rev\";|" "$scriptDir/default.nix"
sed -i "s|srcHash = \".*\";|srcHash = \"$srcHash\";|" "$scriptDir/default.nix"
touch $TMPDIR/.done
File diff suppressed because it is too large Load Diff