anki/cargo/licenses.json

3432 lines
118 KiB
JSON
Raw Normal View History

[
{
"name": "addr2line",
"version": "0.19.0",
"authors": null,
"repository": "https://github.com/gimli-rs/addr2line",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A cross-platform symbolication library written in Rust, using `gimli`"
},
{
"name": "adler",
2021-03-07 10:04:34 +01:00
"version": "1.0.2",
"authors": "Jonas Schievink <jonasschievink@gmail.com>",
"repository": "https://github.com/jonas-schievink/adler.git",
2020-12-15 08:10:25 +01:00
"license": "0BSD OR Apache-2.0 OR MIT",
"license_file": null,
"description": "A simple clean-room implementation of the Adler-32 checksum"
},
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
{
"name": "aes",
"version": "0.7.5",
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/block-ciphers",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Pure Rust implementation of the Advanced Encryption Standard (a.k.a. Rijndael) including support for AES in counter mode (a.k.a. AES-CTR)"
},
{
"name": "ahash",
"version": "0.7.6",
"authors": "Tom Kaitchuck <Tom.Kaitchuck@gmail.com>",
"repository": "https://github.com/tkaitchuck/ahash",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A non-cryptographic hash function using AES-NI for high performance"
},
{
"name": "aho-corasick",
"version": "0.7.20",
"authors": "Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/BurntSushi/aho-corasick",
2020-12-15 08:10:25 +01:00
"license": "MIT OR Unlicense",
"license_file": null,
"description": "Fast multiple substring searching."
},
{
"name": "ammonia",
"version": "3.3.0",
"authors": "Michael Howell <michael@notriddle.com>",
"repository": "https://github.com/rust-ammonia/ammonia",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "HTML Sanitization"
},
2022-09-24 04:39:21 +02:00
{
"name": "android_system_properties",
"version": "0.1.5",
"authors": "Nicolas Silva <nical@fastmail.com>",
"repository": "https://github.com/nical/android_system_properties",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Minimal Android system properties wrapper"
},
2020-11-24 09:41:03 +01:00
{
"name": "anki",
"version": "0.0.0",
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
"authors": "Ankitects Pty Ltd and contributors <https://help.ankiweb.net>",
2020-11-24 09:41:03 +01:00
"repository": null,
"license": "AGPL-3.0-or-later",
"license_file": null,
"description": "Anki's Rust library code"
},
{
"name": "anki_i18n",
"version": "0.0.0",
"authors": "Ankitects Pty Ltd and contributors <https://help.ankiweb.net>",
"repository": null,
"license": "AGPL-3.0-or-later",
"license_file": null,
"description": "Anki's Rust library i18n code"
},
{
"name": "anyhow",
"version": "1.0.70",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/anyhow",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Flexible concrete Error type built on std::error::Error"
},
{
"name": "arrayref",
"version": "0.3.7",
"authors": "David Roundy <roundyd@physics.oregonstate.edu>",
"repository": "https://github.com/droundy/arrayref",
"license": "BSD-2-Clause",
"license_file": null,
"description": "Macros to take array references of slices"
},
2021-10-02 12:42:03 +02:00
{
"name": "arrayvec",
2021-11-18 11:54:00 +01:00
"version": "0.7.2",
2021-10-02 12:42:03 +02:00
"authors": "bluss",
"repository": "https://github.com/bluss/arrayvec",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A vector with fixed capacity, backed by an array (it can be stored on the stack too). Implements fixed capacity ArrayVec and ArrayString."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "assert-json-diff",
"version": "2.0.2",
"authors": "David Pedersen <david.pdrsn@gmail.com>",
"repository": "https://github.com/davidpdrsn/assert-json-diff.git",
"license": "MIT",
"license_file": null,
"description": "Easily compare two JSON values and get great output"
},
{
"name": "async-channel",
"version": "1.8.0",
"authors": "Stjepan Glavina <stjepang@gmail.com>",
"repository": "https://github.com/smol-rs/async-channel",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Async multi-producer multi-consumer channel"
},
{
"name": "async-compression",
"version": "0.3.15",
"authors": "Wim Looman <wim@nemo157.com>|Allen Bui <fairingrey@gmail.com>",
"repository": "https://github.com/Nemo157/async-compression",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Adaptors between compression crates and Rust's modern asynchronous IO types."
},
{
"name": "async-stream",
"version": "0.3.4",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Carl Lerche <me@carllerche.com>",
"repository": "https://github.com/tokio-rs/async-stream",
"license": "MIT",
"license_file": null,
"description": "Asynchronous streams using async & await notation"
},
{
"name": "async-stream-impl",
"version": "0.3.4",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Carl Lerche <me@carllerche.com>",
"repository": "https://github.com/tokio-rs/async-stream",
"license": "MIT",
"license_file": null,
"description": "proc macros for async-stream crate"
},
2021-01-05 10:58:53 +01:00
{
"name": "async-trait",
"version": "0.1.68",
2021-01-05 10:58:53 +01:00
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/async-trait",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Type erasure for async trait methods"
},
{
"name": "autocfg",
"version": "1.1.0",
"authors": "Josh Stone <cuviper@gmail.com>",
"repository": "https://github.com/cuviper/autocfg",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Automatic cfg for Rust compiler features"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "axum",
"version": "0.6.12",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": null,
"repository": "https://github.com/tokio-rs/axum",
"license": "MIT",
"license_file": null,
"description": "Web framework that focuses on ergonomics and modularity"
},
{
"name": "axum-client-ip",
"version": "0.3.1",
"authors": null,
"repository": "https://github.com/imbolc/axum-client-ip",
"license": "MIT",
"license_file": null,
"description": "A client IP address extractor for Axum"
},
{
"name": "axum-core",
"version": "0.3.3",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": null,
"repository": "https://github.com/tokio-rs/axum",
"license": "MIT",
"license_file": null,
"description": "Core types and traits for axum"
},
{
"name": "axum-macros",
"version": "0.3.7",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": null,
"repository": "https://github.com/tokio-rs/axum",
"license": "MIT",
"license_file": null,
"description": "Macros for axum"
},
{
"name": "backtrace",
"version": "0.3.67",
"authors": "The Rust Project Developers",
"repository": "https://github.com/rust-lang/backtrace-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A library to acquire a stack trace (backtrace) at runtime in a Rust program."
},
{
"name": "base64",
"version": "0.13.1",
"authors": "Alice Maz <alice@alicemaz.com>|Marshall Pierce <marshall@mpierce.org>",
"repository": "https://github.com/marshallpierce/rust-base64",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "encodes and decodes base64 as bytes or utf8"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "base64",
"version": "0.21.0",
"authors": "Alice Maz <alice@alicemaz.com>|Marshall Pierce <marshall@mpierce.org>",
"repository": "https://github.com/marshallpierce/rust-base64",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "encodes and decodes base64 as bytes or utf8"
},
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
{
"name": "base64ct",
"version": "1.6.0",
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/formats/tree/master/base64ct",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Pure Rust implementation of Base64 (RFC 4648) which avoids any usages of data-dependent branches/LUTs and thereby provides portable \"best effort\" constant-time operation and embedded-friendly no_std support"
},
{
"name": "bitflags",
2021-10-02 12:42:03 +02:00
"version": "1.3.2",
"authors": "The Rust Project Developers",
"repository": "https://github.com/bitflags/bitflags",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A macro to generate structures which behave like bitflags."
},
{
"name": "bitflags",
"version": "2.0.2",
"authors": "The Rust Project Developers",
"repository": "https://github.com/bitflags/bitflags",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A macro to generate structures which behave like bitflags."
},
{
"name": "blake3",
"version": "1.3.3",
2022-01-15 05:59:43 +01:00
"authors": "Jack O'Connor <oconnor663@gmail.com>|Samuel Neves",
"repository": "https://github.com/BLAKE3-team/BLAKE3",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR CC0-1.0",
"license_file": null,
"description": "the BLAKE3 hash function"
},
2022-01-15 05:59:43 +01:00
{
"name": "block-buffer",
"version": "0.10.4",
2022-01-15 05:59:43 +01:00
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/utils",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Buffer type for block processing of data"
},
Plaintext import/export (#1850) * Add crate csv * Add start of csv importing on backend * Add Menomosyne serializer * Add csv and json importing on backend * Add plaintext importing on frontend * Add csv metadata extraction on backend * Add csv importing with GUI * Fix missing dfa file in build Added compile_data_attr, then re-ran cargo/update.py. * Don't use doubly buffered reader in csv * Escape HTML entities if CSV is not HTML Also use name 'is_html' consistently. * Use decimal number as foreign ease (like '2.5') * ForeignCard.ivl → ForeignCard.interval * Only allow fixed set of CSV delimiters * Map timestamp of ForeignCard to native due time * Don't trim CSV records * Document use of empty strings for defaults * Avoid creating CardGenContexts for every note This requires CardGenContext to be generic, so it works both with an owned and borrowed notetype. * Show all accepted file types in import file picker * Add import_json_file() * factor → ease_factor * delimter_from_value → delimiter_from_value * Map columns to fields, not the other way around * Fallback to current config for csv metadata * Add start of new import csv screen * Temporary fix for compilation issue on Linux/Mac * Disable jest bazel action for import-csv Jest fails with an error code if no tests are available, but this would not be noticable on Windows as Jest is not run there. * Fix field mapping issue * Revert "Temporary fix for compilation issue on Linux/Mac" This reverts commit 21f8a261408cdae49ec031aa21a1b659c4f66d82. * Add HtmlSwitch and move Switch to components * Fix spacing and make selectors consistent * Fix shortcut tooltip * Place import button at the top with path * Fix meta column indices * Remove NotetypeForString * Fix queue and type of foreign cards * Support different dupe resolution strategies * Allow dupe resolution selection when importing CSV * Test import of unnormalized text Close #1863. * Fix logging of foreign notes * Implement CSV exports * Use db_scalar() in notes_table_len() * Rework CSV metadata - Notetypes and decks are either defined by a global id or by a column. - If a notetype id is provided, its field map must also be specified. - If a notetype column is provided, fields are now mapped by index instead of name at import time. So the first non-meta column is used for the first field of every note, regardless of notetype. This makes importing easier and should improve compatiblity with files without a notetype column. - Ensure first field can be mapped to a column. - Meta columns must be defined as `#[meta name]:[column index]` instead of in the `#columns` tag. - Column labels contain the raw names defined by the file and must be prettified by the frontend. * Adjust frontend to new backend column mapping * Add force flags for is_html and delimiter * Detect if CSV is HTML by field content * Update dupe resolution labels * Simplify selectors * Fix coalescence of oneofs in TS * Disable meta columns from selection Plus a lot of refactoring. * Make import button stick to the bottom * Write delimiter and html flag into csv * Refetch field map after notetype change * Fix log labels for csv import * Log notes whose deck/notetype was missing * Fix hiding of empty log queues * Implement adding tags to all notes of a csv * Fix dupe resolution not being set in log * Implement adding tags to updated notes of a csv * Check first note field is not empty * Temporary fix for build on Linux/Mac * Fix inverted html check (dae) * Remove unused ftl string * Delimiter → Separator * Remove commented-out line * Don't accept .json files * Tweak tag ftl strings * Remove redundant blur call * Strip sound and add spaces in csv export * Export HTML by default * Fix unset deck in Mnemosyne import Also accept both numbers and strings for notetypes and decks in JSON. * Make DupeResolution::Update the default * Fix missing dot in extension * Make column indices 1-based * Remove StickContainer from TagEditor Fixes line breaking, border and z index on ImportCsvPage. * Assign different key combos to tag editors * Log all updated duplicates Add a log field for the true number of found notes. * Show identical notes as skipped * Split tag-editor into separate ts module (dae) * Add progress for CSV export * Add progress for text import * Tidy-ups after tag-editor split (dae) - import-csv no longer depends on editor - remove some commented lines
2022-06-01 12:26:16 +02:00
{
"name": "bstr",
"version": "0.2.17",
"authors": "Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/BurntSushi/bstr",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A string type that is not required to be valid UTF-8."
},
{
"name": "bumpalo",
"version": "3.12.0",
"authors": "Nick Fitzgerald <fitzgen@gmail.com>",
"repository": "https://github.com/fitzgen/bumpalo",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A fast bump allocation arena for Rust."
},
{
"name": "byteorder",
2021-03-27 05:47:16 +01:00
"version": "1.4.3",
"authors": "Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/BurntSushi/byteorder",
2020-12-15 08:10:25 +01:00
"license": "MIT OR Unlicense",
"license_file": null,
"description": "Library for reading/writing numbers in big-endian and little-endian."
},
{
"name": "bytes",
"version": "1.4.0",
"authors": "Carl Lerche <me@carllerche.com>|Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/tokio-rs/bytes",
"license": "MIT",
"license_file": null,
"description": "Types and traits for working with bytes"
},
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
{
"name": "bzip2",
"version": "0.4.4",
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/alexcrichton/bzip2-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Bindings to libbzip2 for bzip2 compression and decompression exposed as Reader/Writer streams."
},
{
"name": "bzip2-sys",
"version": "0.1.11+1.0.8",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/alexcrichton/bzip2-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Bindings to libbzip2 for bzip2 compression and decompression exposed as Reader/Writer streams."
},
{
"name": "cc",
"version": "1.0.79",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/rust-lang/cc-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A build-time dependency for Cargo build scripts to assist in invoking the native C compiler to compile native C code into a static archive to be linked into Rust code."
},
{
"name": "cfg-if",
"version": "1.0.0",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/alexcrichton/cfg-if",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A macro to ergonomically define an item depending on a large number of #[cfg] parameters. Structured like an if-else chain, the first matching branch is the item that gets emitted."
},
{
"name": "chrono",
"version": "0.4.24",
2022-09-24 04:39:21 +02:00
"authors": null,
"repository": "https://github.com/chronotope/chrono",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Date and time library for Rust"
},
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
{
"name": "cipher",
"version": "0.3.0",
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/traits",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Traits for describing block ciphers and stream ciphers"
},
{
"name": "coarsetime",
"version": "0.1.23",
"authors": "Frank Denis <github@pureftpd.org>",
"repository": "https://github.com/jedisct1/rust-coarsetime",
"license": "ISC",
"license_file": null,
"description": "Time and duration crate optimized for speed"
},
{
"name": "codespan-reporting",
"version": "0.11.1",
"authors": "Brendan Zabarauskas <bjzaba@yahoo.com.au>",
"repository": "https://github.com/brendanzab/codespan",
"license": "Apache-2.0",
"license_file": null,
"description": "Beautiful diagnostic reporting for text-based programming languages"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "concurrent-queue",
"version": "2.1.0",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Stjepan Glavina <stjepang@gmail.com>|Taiki Endo <te316e89@gmail.com>|John Nunley <jtnunley01@gmail.com>",
"repository": "https://github.com/smol-rs/concurrent-queue",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Concurrent multi-producer multi-consumer queue"
},
{
"name": "constant_time_eq",
"version": "0.1.5",
"authors": "Cesar Eduardo Barros <cesarb@cesarb.eti.br>",
"repository": "https://github.com/cesarb/constant_time_eq",
"license": "CC0-1.0",
"license_file": null,
"description": "Compares two equal-sized byte strings in constant time."
},
{
"name": "constant_time_eq",
"version": "0.2.5",
"authors": "Cesar Eduardo Barros <cesarb@cesarb.eti.br>",
"repository": "https://github.com/cesarb/constant_time_eq",
"license": "Apache-2.0 OR CC0-1.0 OR MIT-0",
"license_file": null,
"description": "Compares two equal-sized byte strings in constant time."
},
{
"name": "convert_case",
"version": "0.6.0",
"authors": "Rutrum <dave@rutrum.net>",
"repository": "https://github.com/rutrum/convert-case",
"license": "MIT",
"license_file": null,
"description": "Convert strings into any case"
},
{
"name": "core-foundation",
"version": "0.9.3",
"authors": "The Servo Project Developers",
"repository": "https://github.com/servo/core-foundation-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Bindings to Core Foundation for macOS"
},
{
"name": "core-foundation-sys",
"version": "0.8.3",
"authors": "The Servo Project Developers",
"repository": "https://github.com/servo/core-foundation-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Bindings to Core Foundation for macOS"
},
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
{
"name": "cpufeatures",
"version": "0.2.6",
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/utils",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Lightweight runtime CPU feature detection for x86/x86_64 and aarch64 with no_std support and support for mobile targets including Android and iOS"
},
{
"name": "crc32fast",
"version": "1.3.2",
"authors": "Sam Rijs <srijs@airpost.net>|Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/srijs/rust-crc32fast",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Fast, SIMD-accelerated CRC32 (IEEE) checksum computation"
},
{
"name": "crossbeam-channel",
2023-04-12 00:29:26 +02:00
"version": "0.5.8",
2022-01-15 05:59:43 +01:00
"authors": null,
"repository": "https://github.com/crossbeam-rs/crossbeam",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Multi-producer multi-consumer channels for message passing"
},
{
"name": "crossbeam-utils",
"version": "0.8.15",
2022-01-15 05:59:43 +01:00
"authors": null,
"repository": "https://github.com/crossbeam-rs/crossbeam",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Utilities for concurrent programming"
},
{
2022-01-15 05:59:43 +01:00
"name": "crypto-common",
2022-09-24 04:39:21 +02:00
"version": "0.1.6",
2022-01-15 05:59:43 +01:00
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/traits",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
2022-01-15 05:59:43 +01:00
"description": "Common cryptographic traits"
},
Plaintext import/export (#1850) * Add crate csv * Add start of csv importing on backend * Add Menomosyne serializer * Add csv and json importing on backend * Add plaintext importing on frontend * Add csv metadata extraction on backend * Add csv importing with GUI * Fix missing dfa file in build Added compile_data_attr, then re-ran cargo/update.py. * Don't use doubly buffered reader in csv * Escape HTML entities if CSV is not HTML Also use name 'is_html' consistently. * Use decimal number as foreign ease (like '2.5') * ForeignCard.ivl → ForeignCard.interval * Only allow fixed set of CSV delimiters * Map timestamp of ForeignCard to native due time * Don't trim CSV records * Document use of empty strings for defaults * Avoid creating CardGenContexts for every note This requires CardGenContext to be generic, so it works both with an owned and borrowed notetype. * Show all accepted file types in import file picker * Add import_json_file() * factor → ease_factor * delimter_from_value → delimiter_from_value * Map columns to fields, not the other way around * Fallback to current config for csv metadata * Add start of new import csv screen * Temporary fix for compilation issue on Linux/Mac * Disable jest bazel action for import-csv Jest fails with an error code if no tests are available, but this would not be noticable on Windows as Jest is not run there. * Fix field mapping issue * Revert "Temporary fix for compilation issue on Linux/Mac" This reverts commit 21f8a261408cdae49ec031aa21a1b659c4f66d82. * Add HtmlSwitch and move Switch to components * Fix spacing and make selectors consistent * Fix shortcut tooltip * Place import button at the top with path * Fix meta column indices * Remove NotetypeForString * Fix queue and type of foreign cards * Support different dupe resolution strategies * Allow dupe resolution selection when importing CSV * Test import of unnormalized text Close #1863. * Fix logging of foreign notes * Implement CSV exports * Use db_scalar() in notes_table_len() * Rework CSV metadata - Notetypes and decks are either defined by a global id or by a column. - If a notetype id is provided, its field map must also be specified. - If a notetype column is provided, fields are now mapped by index instead of name at import time. So the first non-meta column is used for the first field of every note, regardless of notetype. This makes importing easier and should improve compatiblity with files without a notetype column. - Ensure first field can be mapped to a column. - Meta columns must be defined as `#[meta name]:[column index]` instead of in the `#columns` tag. - Column labels contain the raw names defined by the file and must be prettified by the frontend. * Adjust frontend to new backend column mapping * Add force flags for is_html and delimiter * Detect if CSV is HTML by field content * Update dupe resolution labels * Simplify selectors * Fix coalescence of oneofs in TS * Disable meta columns from selection Plus a lot of refactoring. * Make import button stick to the bottom * Write delimiter and html flag into csv * Refetch field map after notetype change * Fix log labels for csv import * Log notes whose deck/notetype was missing * Fix hiding of empty log queues * Implement adding tags to all notes of a csv * Fix dupe resolution not being set in log * Implement adding tags to updated notes of a csv * Check first note field is not empty * Temporary fix for build on Linux/Mac * Fix inverted html check (dae) * Remove unused ftl string * Delimiter → Separator * Remove commented-out line * Don't accept .json files * Tweak tag ftl strings * Remove redundant blur call * Strip sound and add spaces in csv export * Export HTML by default * Fix unset deck in Mnemosyne import Also accept both numbers and strings for notetypes and decks in JSON. * Make DupeResolution::Update the default * Fix missing dot in extension * Make column indices 1-based * Remove StickContainer from TagEditor Fixes line breaking, border and z index on ImportCsvPage. * Assign different key combos to tag editors * Log all updated duplicates Add a log field for the true number of found notes. * Show identical notes as skipped * Split tag-editor into separate ts module (dae) * Add progress for CSV export * Add progress for text import * Tidy-ups after tag-editor split (dae) - import-csv no longer depends on editor - remove some commented lines
2022-06-01 12:26:16 +02:00
{
"name": "csv",
"version": "1.1.6",
"authors": "Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/BurntSushi/rust-csv",
"license": "MIT OR Unlicense",
"license_file": null,
"description": "Fast CSV parsing with support for serde."
},
{
"name": "csv-core",
"version": "0.1.10",
"authors": "Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/BurntSushi/rust-csv",
"license": "MIT OR Unlicense",
"license_file": null,
"description": "Bare bones CSV parsing with no_std support."
},
{
"name": "cxx",
"version": "1.0.94",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/cxx",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Safe interop between Rust and C++"
},
{
"name": "cxx-build",
"version": "1.0.94",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/cxx",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "C++ code generator for integrating `cxx` crate into a Cargo build."
},
{
"name": "cxxbridge-flags",
"version": "1.0.94",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/cxx",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Compiler configuration of the `cxx` crate (implementation detail)"
},
{
"name": "cxxbridge-macro",
"version": "1.0.94",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/cxx",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Implementation detail of the `cxx` crate."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "deadpool",
"version": "0.9.5",
"authors": "Michael P. Jung <michael.jung@terreon.de>",
"repository": "https://github.com/bikeshedder/deadpool",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Dead simple async pool"
},
{
"name": "deadpool-runtime",
"version": "0.1.2",
"authors": "Michael P. Jung <michael.jung@terreon.de>",
"repository": "https://github.com/bikeshedder/deadpool",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Dead simple async pool utitities for sync managers"
},
{
"name": "difflib",
"version": "0.4.0",
"authors": "Dima Kudosh <dimakudosh@gmail.com>",
"repository": "https://github.com/DimaKudosh/difflib",
"license": "MIT",
"license_file": null,
"description": "Port of Python's difflib library to Rust."
},
{
"name": "digest",
"version": "0.10.6",
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/traits",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Traits for cryptographic hash functions and message authentication codes"
},
{
"name": "displaydoc",
"version": "0.2.3",
"authors": "Jane Lusby <jlusby@yaah.dev>",
"repository": "https://github.com/yaahc/displaydoc",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A derive macro for implementing the display Trait via a doc comment and string interpolation"
},
{
"name": "doc-comment",
"version": "0.3.3",
"authors": "Guillaume Gomez <guillaume1.gomez@gmail.com>",
"repository": "https://github.com/GuillaumeGomez/doc-comment",
"license": "MIT",
"license_file": null,
"description": "Macro to generate doc comments"
},
{
"name": "either",
"version": "1.8.1",
"authors": "bluss",
"repository": "https://github.com/bluss/either",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "The enum `Either` with variants `Left` and `Right` is a general purpose sum type with two cases."
},
{
"name": "encoding_rs",
"version": "0.8.32",
"authors": "Henri Sivonen <hsivonen@hsivonen.fi>",
"repository": "https://github.com/hsivonen/encoding_rs",
2022-09-24 04:39:21 +02:00
"license": "(Apache-2.0 OR MIT) AND BSD-3-Clause",
"license_file": null,
"description": "A Gecko-oriented implementation of the Encoding Standard"
},
{
"name": "env_logger",
"version": "0.10.0",
2022-09-24 04:39:21 +02:00
"authors": null,
"repository": "https://github.com/rust-cli/env_logger/",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A logging implementation for `log` which is configured via an environment variable."
},
{
"name": "errno",
"version": "0.3.0",
"authors": "Chris Wong <lambda.fairy@gmail.com>",
"repository": "https://github.com/lambda-fairy/rust-errno",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Cross-platform interface to the `errno` variable."
},
{
"name": "errno-dragonfly",
"version": "0.1.2",
"authors": "Michael Neumann <mneumann@ntecs.de>",
"repository": "https://github.com/mneumann/errno-dragonfly-rs",
"license": "MIT",
"license_file": null,
"description": "Exposes errno functionality to stable Rust on DragonFlyBSD"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "event-listener",
"version": "2.5.3",
"authors": "Stjepan Glavina <stjepang@gmail.com>",
"repository": "https://github.com/smol-rs/event-listener",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Notify async tasks or threads"
},
{
"name": "fallible-iterator",
"version": "0.2.0",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/rust-fallible-iterator",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Fallible iterator traits"
},
{
"name": "fallible-streaming-iterator",
"version": "0.1.9",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/fallible-streaming-iterator",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Fallible streaming iteration"
},
2022-01-15 05:59:43 +01:00
{
"name": "fastrand",
"version": "1.9.0",
2022-01-15 05:59:43 +01:00
"authors": "Stjepan Glavina <stjepang@gmail.com>",
"repository": "https://github.com/smol-rs/fastrand",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A simple and fast random number generator"
},
{
"name": "fixedbitset",
2022-09-24 04:39:21 +02:00
"version": "0.4.2",
"authors": "bluss",
2022-01-15 05:59:43 +01:00
"repository": "https://github.com/petgraph/fixedbitset",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "FixedBitSet is a simple bitset collection"
},
{
"name": "flate2",
"version": "1.0.25",
"authors": "Alex Crichton <alex@alexcrichton.com>|Josh Triplett <josh@joshtriplett.org>",
"repository": "https://github.com/rust-lang/flate2-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
2022-09-24 04:39:21 +02:00
"description": "DEFLATE compression and decompression exposed as Read/BufRead/Write streams. Supports miniz_oxide and multiple zlib implementations. Supports zlib, gzip, and raw deflate streams."
},
{
"name": "fluent",
2021-10-02 12:42:03 +02:00
"version": "0.16.0",
"authors": "Zibi Braniecki <gandalf@mozilla.com>|Staś Małolepszy <stas@mozilla.com>",
"repository": "https://github.com/projectfluent/fluent-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A localization system designed to unleash the entire expressive power of natural language translations."
},
{
"name": "fluent-bundle",
"version": "0.15.2",
"authors": "Zibi Braniecki <gandalf@mozilla.com>|Staś Małolepszy <stas@mozilla.com>",
"repository": "https://github.com/projectfluent/fluent-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A localization system designed to unleash the entire expressive power of natural language translations."
},
{
"name": "fluent-langneg",
"version": "0.13.0",
"authors": "Zibi Braniecki <gandalf@mozilla.com>",
"repository": "https://github.com/projectfluent/fluent-langneg-rs",
"license": "Apache-2.0",
"license_file": null,
"description": "A library for language and locale negotiation."
},
{
"name": "fluent-syntax",
2021-03-27 04:24:11 +01:00
"version": "0.11.0",
"authors": "Zibi Braniecki <gandalf@mozilla.com>|Staś Małolepszy <stas@mozilla.com>",
"repository": "https://github.com/projectfluent/fluent-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Parser/Serializer tools for Fluent Syntax."
},
{
"name": "fnv",
"version": "1.0.7",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/servo/rust-fnv",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "FowlerNollVo hash function"
},
{
"name": "foreign-types",
"version": "0.3.2",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/foreign-types",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A framework for Rust wrappers over C APIs"
},
{
"name": "foreign-types-shared",
"version": "0.1.1",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/foreign-types",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "An internal crate used by foreign-types"
},
{
"name": "form_urlencoded",
2022-09-24 04:39:21 +02:00
"version": "1.1.0",
"authors": "The rust-url developers",
"repository": "https://github.com/servo/rust-url",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Parser and serializer for the application/x-www-form-urlencoded syntax, as used by HTML forms."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "forwarded-header-value",
"version": "0.1.1",
"authors": "James Brown <jbrown@easypost.com>",
"repository": "https://github.com/EasyPost/rust-forwarded-header-value",
"license": "ISC",
"license_file": null,
"description": "Parser for values from the Forwarded header (RFC 7239)"
},
{
"name": "futf",
"version": "0.1.5",
"authors": "Keegan McAllister <kmcallister@mozilla.com>",
"repository": "https://github.com/servo/futf",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Handling fragments of UTF-8"
},
{
"name": "futures",
"version": "0.3.28",
2021-12-03 11:04:47 +01:00
"authors": null,
"repository": "https://github.com/rust-lang/futures-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "An implementation of futures and streams featuring zero allocations, composability, and iterator-like interfaces."
},
{
"name": "futures-channel",
"version": "0.3.28",
2021-12-03 11:04:47 +01:00
"authors": null,
"repository": "https://github.com/rust-lang/futures-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Channels for asynchronous communication using futures-rs."
},
{
"name": "futures-core",
"version": "0.3.28",
2021-12-03 11:04:47 +01:00
"authors": null,
"repository": "https://github.com/rust-lang/futures-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "The core traits and types in for the `futures` library."
},
{
"name": "futures-executor",
"version": "0.3.28",
2021-12-03 11:04:47 +01:00
"authors": null,
"repository": "https://github.com/rust-lang/futures-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Executors for asynchronous tasks based on the futures-rs library."
},
{
"name": "futures-io",
"version": "0.3.28",
2021-12-03 11:04:47 +01:00
"authors": null,
"repository": "https://github.com/rust-lang/futures-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "The `AsyncRead`, `AsyncWrite`, `AsyncSeek`, and `AsyncBufRead` traits for the futures-rs library."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "futures-lite",
"version": "1.12.0",
"authors": "Stjepan Glavina <stjepang@gmail.com>|Contributors to futures-rs",
"repository": "https://github.com/smol-rs/futures-lite",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Futures, streams, and async I/O combinators"
},
{
"name": "futures-macro",
"version": "0.3.28",
2021-12-03 11:04:47 +01:00
"authors": null,
"repository": "https://github.com/rust-lang/futures-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "The futures-rs procedural macro implementations."
},
{
"name": "futures-sink",
"version": "0.3.28",
2021-12-03 11:04:47 +01:00
"authors": null,
"repository": "https://github.com/rust-lang/futures-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "The asynchronous `Sink` trait for the futures-rs library."
},
{
"name": "futures-task",
"version": "0.3.28",
2021-12-03 11:04:47 +01:00
"authors": null,
"repository": "https://github.com/rust-lang/futures-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Tools for working with tasks."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "futures-timer",
"version": "3.0.2",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/async-rs/futures-timer",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Timeouts for futures."
},
{
"name": "futures-util",
"version": "0.3.28",
2021-12-03 11:04:47 +01:00
"authors": null,
"repository": "https://github.com/rust-lang/futures-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Common utilities and extension traits for the futures-rs library."
},
{
"name": "generic-array",
"version": "0.14.7",
"authors": "Bartłomiej Kamiński <fizyk20@gmail.com>|Aaron Trent <novacrazy@gmail.com>",
"repository": "https://github.com/fizyk20/generic-array.git",
"license": "MIT",
"license_file": null,
"description": "Generic types implementing functionality of arrays"
},
{
"name": "getopts",
"version": "0.2.21",
"authors": "The Rust Project Developers",
"repository": "https://github.com/rust-lang/getopts",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "getopts-like option parsing."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "getrandom",
"version": "0.1.16",
"authors": "The Rand Project Developers",
"repository": "https://github.com/rust-random/getrandom",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A small cross-platform library for retrieving random data from system source"
},
{
"name": "getrandom",
"version": "0.2.8",
2021-02-03 11:29:48 +01:00
"authors": "The Rand Project Developers",
"repository": "https://github.com/rust-random/getrandom",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A small cross-platform library for retrieving random data from system source"
},
{
"name": "gimli",
"version": "0.27.2",
"authors": null,
"repository": "https://github.com/gimli-rs/gimli",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A library for reading and writing the DWARF debugging format."
},
{
"name": "h2",
"version": "0.3.16",
"authors": "Carl Lerche <me@carllerche.com>|Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/hyperium/h2",
"license": "MIT",
"license_file": null,
"description": "An HTTP/2 client and server"
},
2021-06-25 08:22:21 +02:00
{
"name": "hashbrown",
2022-09-24 04:39:21 +02:00
"version": "0.12.3",
2021-06-25 08:22:21 +02:00
"authors": "Amanieu d'Antras <amanieu@gmail.com>",
"repository": "https://github.com/rust-lang/hashbrown",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A Rust port of Google's SwissTable hash map"
},
{
"name": "hashlink",
2022-09-24 04:39:21 +02:00
"version": "0.8.1",
"authors": "kyren <kerriganw@gmail.com>",
"repository": "https://github.com/kyren/hashlink",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "HashMap-like containers that hold their key-value pairs in a user controllable order"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "headers",
"version": "0.3.8",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/hyperium/headers",
"license": "MIT",
"license_file": null,
"description": "typed HTTP headers"
},
{
"name": "headers-core",
"version": "0.2.0",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/hyperium/headers",
"license": "MIT",
"license_file": null,
"description": "typed HTTP headers core trait"
},
{
"name": "heck",
"version": "0.4.1",
"authors": "Without Boats <woboats@gmail.com>",
"repository": "https://github.com/withoutboats/heck",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "heck is a case conversion library."
},
{
"name": "hermit-abi",
"version": "0.2.6",
"authors": "Stefan Lankes",
"repository": "https://github.com/hermitcore/rusty-hermit",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "hermit-abi is small interface to call functions from the unikernel RustyHermit. It is used to build the target `x86_64-unknown-hermit`."
},
{
"name": "hermit-abi",
"version": "0.3.1",
"authors": "Stefan Lankes",
"repository": "https://github.com/hermitcore/rusty-hermit",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Hermit system calls definitions."
},
{
"name": "hex",
2021-03-07 10:04:34 +01:00
"version": "0.4.3",
"authors": "KokaKiwi <kokakiwi@kokakiwi.net>",
"repository": "https://github.com/KokaKiwi/rust-hex",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Encoding and decoding data into/from hexadecimal representation."
},
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
{
"name": "hmac",
"version": "0.12.1",
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/MACs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Generic implementation of Hash-based Message Authentication Code (HMAC)"
},
{
"name": "html5ever",
2022-09-24 04:39:21 +02:00
"version": "0.26.0",
"authors": "The html5ever Project Developers",
"repository": "https://github.com/servo/html5ever",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "High-performance browser-grade HTML5 parser"
},
{
"name": "htmlescape",
"version": "0.3.1",
"authors": "Viktor Dahl <pazaconyoman@gmail.com>",
"repository": "https://github.com/veddan/rust-htmlescape",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT OR MPL-2.0",
"license_file": null,
"description": "A library for HTML entity encoding and decoding"
},
{
"name": "http",
"version": "0.2.9",
"authors": "Alex Crichton <alex@alexcrichton.com>|Carl Lerche <me@carllerche.com>|Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/hyperium/http",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A set of types for representing HTTP requests and responses."
},
{
"name": "http-body",
2022-09-24 04:39:21 +02:00
"version": "0.4.5",
"authors": "Carl Lerche <me@carllerche.com>|Lucio Franco <luciofranco14@gmail.com>|Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/hyperium/http-body",
"license": "MIT",
"license_file": null,
"description": "Trait representing an asynchronous, streaming, HTTP request or response body."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "http-range-header",
"version": "0.3.0",
"authors": null,
"repository": "https://github.com/MarcusGrass/parse-range-headers",
"license": "MIT",
"license_file": null,
"description": "No-dep range header parser"
},
{
"name": "http-types",
"version": "2.12.0",
"authors": "Yoshua Wuyts <yoshuawuyts@gmail.com>",
"repository": "https://github.com/http-rs/http-types",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Common types for HTTP operations."
},
{
"name": "httparse",
2022-09-24 04:39:21 +02:00
"version": "1.8.0",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/seanmonstar/httparse",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A tiny, safe, speedy, zero-copy HTTP/1.x parser."
},
{
"name": "httpdate",
2021-11-18 11:54:00 +01:00
"version": "1.0.2",
"authors": "Pyfisch <pyfisch@posteo.org>",
"repository": "https://github.com/pyfisch/httpdate",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "HTTP date parsing and formatting"
},
{
"name": "humantime",
2021-02-03 11:29:48 +01:00
"version": "2.1.0",
"authors": "Paul Colomiets <paul@colomiets.name>",
"repository": "https://github.com/tailhook/humantime",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A parser and formatter for std::time::{Duration, SystemTime}"
},
{
"name": "hyper",
"version": "0.14.25",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/hyperium/hyper",
"license": "MIT",
"license_file": null,
"description": "A fast and correct HTTP library."
},
{
"name": "hyper-rustls",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"version": "0.23.2",
"authors": null,
"repository": "https://github.com/ctz/hyper-rustls",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR ISC OR MIT",
"license_file": null,
"description": "Rustls+hyper integration for pure rust HTTPS"
},
{
"name": "hyper-tls",
"version": "0.5.0",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/hyperium/hyper-tls",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Default TLS implementation for use with hyper"
},
2022-09-24 04:39:21 +02:00
{
"name": "iana-time-zone",
"version": "0.1.56",
"authors": "Andrew Straw <strawman@astraw.com>|René Kijewski <rene.kijewski@fu-berlin.de>|Ryan Lopopolo <rjl@hyperbo.la>",
2022-09-24 04:39:21 +02:00
"repository": "https://github.com/strawlab/iana-time-zone",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "get the IANA time zone for the current system"
},
{
"name": "iana-time-zone-haiku",
"version": "0.1.1",
"authors": "René Kijewski <crates.io@k6i.de>",
"repository": "https://github.com/strawlab/iana-time-zone",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "iana-time-zone support crate for Haiku OS"
},
V3 parent limits (#1638) * avoid repinning Rust deps by default * add id_tree dependency * Respect intermediate child limits in v3 * Test new behaviour of v3 counts * Rework v3 queue building to respect parent limits * Add missing did field to SQL query * Fix `LimitTreeMap::is_exhausted()` * Rework tree building logic https://github.com/ankitects/anki/pull/1638#discussion_r798328734 * Add timer for build_queues() * `is_exhausted()` -> `limit_reached()` * Move context and limits into `QueueBuilder` This allows for moving more logic into QueueBuilder, so less passing around of arguments. Unfortunately, some tests will require additional work to set up. * Fix stop condition in new_cards_by_position * Fix order gather order of new cards by deck * Add scheduler/queue/builder/burying.rs * Fix bad tree due to unsorted child decks * Fix comment * Fix `cap_new_to_review_rec()` * Add test for new card gathering * Always sort `child_decks()` * Fix deck removal in `cap_new_to_review_rec()` * Fix sibling ordering in new card gathering * Remove limits for deck total count with children * Add random gather order * Remove bad sibling order handling All routines ensure ascending order now. Also do some other minor refactoring. * Remove queue truncating All routines stop now as soon as the root limit is reached. * Move deck fetching into `QueueBuilder::new()` * Rework new card gather and sort options https://github.com/ankitects/anki/pull/1638#issuecomment-1032173013 * Disable new sort order choices ... depending on set gather order. * Use enum instead of numbers * Ensure valid sort order setting * Update new gather and sort order tooltips * Warn about random insertion order with v3 * Revert "Add timer for build_queues()" This reverts commit c9f5fc6ebe87953c17a0c842990b009b5596c69c. * Update rslib/src/storage/card/mod.rs (dae) * minor wording tweaks to the tooltips (dae) + move legacy strings to bottom + consistent capitalization (our leech action still needs fixing, but that will require introducing a new 'suspend card' string as the existing one is used elsewhere as well)
2022-02-10 00:55:43 +01:00
{
"name": "id_tree",
"version": "1.8.0",
"authors": "Ian Burns <iwburns8@gmail.com>",
"repository": "https://github.com/iwburns/id-tree",
"license": "MIT",
"license_file": null,
"description": "A library for creating and modifying Tree structures."
},
{
"name": "idna",
2022-09-24 04:39:21 +02:00
"version": "0.3.0",
"authors": "The rust-url developers",
"repository": "https://github.com/servo/rust-url/",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "IDNA (Internationalizing Domain Names in Applications) and Punycode."
},
{
"name": "indexmap",
"version": "1.9.3",
2022-09-24 04:39:21 +02:00
"authors": null,
"repository": "https://github.com/bluss/indexmap",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
2022-09-24 04:39:21 +02:00
"description": "A hash table with consistent order and fast iteration."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "infer",
"version": "0.2.3",
"authors": "Bojan <dbojan@gmail.com>",
"repository": "https://github.com/bojand/infer",
"license": "MIT",
"license_file": null,
"description": "Small crate to infer file types based on its magic number signature"
},
{
"name": "inflections",
"version": "1.1.1",
"authors": "Caleb Meredith <calebmeredith8@gmail.com>",
"repository": "https://docs.rs/inflections",
"license": "MIT",
"license_file": null,
"description": "High performance inflection transformation library for changing properties of words like the case."
},
{
"name": "instant",
"version": "0.1.12",
"authors": "sebcrozet <developer@crozet.re>",
"repository": "https://github.com/sebcrozet/instant",
"license": "BSD-3-Clause",
"license_file": null,
"description": "A partial replacement for std::time::Instant that works on WASM too."
},
{
"name": "intl-memoizer",
2021-02-03 11:29:48 +01:00
"version": "0.5.1",
"authors": "Zibi Braniecki <gandalf@mozilla.com>|Manish Goregaokar <manishsmail@gmail.com>",
"repository": "https://github.com/projectfluent/fluent-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A memoizer specifically tailored for storing lazy-initialized intl formatters."
},
{
"name": "intl_pluralrules",
"version": "7.0.2",
"authors": "Kekoa Riggin <kekoariggin@gmail.com>|Zibi Braniecki <zbraniecki@mozilla.com>",
"repository": "https://github.com/zbraniecki/pluralrules",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Unicode Plural Rules categorizer for numeric input."
},
{
"name": "io-lifetimes",
"version": "1.0.9",
"authors": "Dan Gohman <dev@sunfishcode.online>",
"repository": "https://github.com/sunfishcode/io-lifetimes",
"license": "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
"license_file": null,
"description": "A low-level I/O ownership and borrowing library"
},
{
"name": "ipnet",
"version": "2.7.2",
"authors": "Kris Price <kris@krisprice.nz>",
"repository": "https://github.com/krisprice/ipnet",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Provides types and useful methods for working with IPv4 and IPv6 network addresses, commonly called IP prefixes. The new `IpNet`, `Ipv4Net`, and `Ipv6Net` types build on the existing `IpAddr`, `Ipv4Addr`, and `Ipv6Addr` types already provided in Rust's standard library and align to their design to stay consistent. The module also provides useful traits that extend `Ipv4Addr` and `Ipv6Addr` with methods for `Add`, `Sub`, `BitAnd`, and `BitOr` operations. The module only uses stable feature so it is guaranteed to compile using the stable toolchain."
},
{
"name": "is-terminal",
"version": "0.4.6",
"authors": "softprops <d.tangren@gmail.com>|Dan Gohman <dev@sunfishcode.online>",
"repository": "https://github.com/sunfishcode/is-terminal",
"license": "MIT",
"license_file": null,
"description": "Test whether a given stream is a terminal"
},
2021-06-25 07:35:25 +02:00
{
"name": "itertools",
2022-09-24 04:39:21 +02:00
"version": "0.10.5",
2021-06-25 07:35:25 +02:00
"authors": "bluss",
"repository": "https://github.com/rust-itertools/itertools",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Extra iterator adaptors, iterator methods, free functions, and macros."
},
{
"name": "itoa",
"version": "1.0.6",
2022-01-15 05:59:43 +01:00
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/itoa",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Fast integer primitive to string conversion"
},
Backups (#1685) * Add zstd dep * Implement backend backup with zstd * Implement backup thinning * Write backup meta * Use new file ending anki21b * Asynchronously backup on collection close in Rust * Revert "Add zstd dep" This reverts commit 3fcb2141d2be15f907269d13275c41971431385c. * Add zstd again * Take backup col path from col struct * Fix formatting * Implement backup restoring on backend * Normalize restored media file names * Refactor `extract_legacy_data()` A bit cumbersome due to borrowing rules. * Refactor * Make thinning calendar-based and gradual * Consider last kept backups of previous stages * Import full apkgs and colpkgs with backend * Expose new backup settings * Test `BackupThinner` and make it deterministic * Mark backup_path when closing optional * Delete leaky timer * Add progress updates for restoring media * Write restored collection to tempfile first * Do collection compression in the background thread This has us currently storing an uncompressed and compressed copy of the collection in memory (not ideal), but means the collection can be closed without waiting for compression to complete. On a large collection, this takes a close and reopen from about 0.55s to about 0.07s. The old backup code for comparison: about 0.35s for compression off, about 8.5s for zip compression. * Use multithreading in zstd compression On my system, this reduces the compression time of a large collection from about 0.55s to 0.08s. * Stream compressed collection data into zip file * Tweak backup explanation + Fix incorrect tab order for ignore accents option * Decouple restoring backup and full import In the first case, no profile is opened, unless the new collection succeeds to load. In the second case, either the old collection is reloaded or the new one is loaded. * Fix number gap in Progress message * Don't revert backup when media fails but report it * Tweak error flow * Remove native BackupLimits enum * Fix type annotation * Add thinning test for whole year * Satisfy linter * Await async backup to finish * Move restart disclaimer out of backup tab Should be visible regardless of the current tab. * Write restored collection in chunks * Refactor * Write media in chunks and refactor * Log error if removing file fails * join_backup_task -> await_backup_completion * Refactor backup.rs * Refactor backup meta and collection extraction * Fix wrong error being returned * Call sync_all() on new collection * Add ImportError * Store logger in Backend, instead of creating one on demand init_backend() accepts a Logger rather than a log file, to allow other callers to customize the logger if they wish. In the future we may want to explore using the tracing crate as an alternative; it's a bit more ergonomic, as a logger doesn't need to be passed around, and it plays more nicely with async code. * Sync file contents prior to rename; sync folder after rename. * Limit backup creation to once per 30 min * Use zstd::stream::copy_decode * Make importing abortable * Don't revert if backup media is aborted * Set throttle implicitly * Change force flag to minimum_backup_interval * Don't attempt to open folders on Windows * Join last backup thread before starting new one Also refactor. * Disable auto sync and backup when restoring again * Force backup on full download * Include the reason why a media file import failed, and the file path - Introduce a FileIoError that contains a string representation of the underlying I/O error, and an associated path. There are a few places in the code where we're currently manually including the filename in a custom error message, and this is a step towards a more consistent approach (but we may be better served with a more general approach in the future similar to Anyhow's .context()) - Move the error message into importing.ftl, as it's a bit neater when error messages live in the same file as the rest of the messages associated with some functionality. * Fix importing of media files * Minor wording tweaks * Save an allocation I18n strings with replacements are already strings, so we can skip the extra allocation. Not that it matters here at all. * Terminate import if file missing from archive If a third-party tool is creating invalid archives, the user should know about it. This should be rare, so I did not attempt to make it translatable. * Skip multithreaded compression on small collections Co-authored-by: Damien Elmes <gpg@ankiweb.net>
2022-03-07 06:11:31 +01:00
{
"name": "jobserver",
"version": "0.1.26",
Backups (#1685) * Add zstd dep * Implement backend backup with zstd * Implement backup thinning * Write backup meta * Use new file ending anki21b * Asynchronously backup on collection close in Rust * Revert "Add zstd dep" This reverts commit 3fcb2141d2be15f907269d13275c41971431385c. * Add zstd again * Take backup col path from col struct * Fix formatting * Implement backup restoring on backend * Normalize restored media file names * Refactor `extract_legacy_data()` A bit cumbersome due to borrowing rules. * Refactor * Make thinning calendar-based and gradual * Consider last kept backups of previous stages * Import full apkgs and colpkgs with backend * Expose new backup settings * Test `BackupThinner` and make it deterministic * Mark backup_path when closing optional * Delete leaky timer * Add progress updates for restoring media * Write restored collection to tempfile first * Do collection compression in the background thread This has us currently storing an uncompressed and compressed copy of the collection in memory (not ideal), but means the collection can be closed without waiting for compression to complete. On a large collection, this takes a close and reopen from about 0.55s to about 0.07s. The old backup code for comparison: about 0.35s for compression off, about 8.5s for zip compression. * Use multithreading in zstd compression On my system, this reduces the compression time of a large collection from about 0.55s to 0.08s. * Stream compressed collection data into zip file * Tweak backup explanation + Fix incorrect tab order for ignore accents option * Decouple restoring backup and full import In the first case, no profile is opened, unless the new collection succeeds to load. In the second case, either the old collection is reloaded or the new one is loaded. * Fix number gap in Progress message * Don't revert backup when media fails but report it * Tweak error flow * Remove native BackupLimits enum * Fix type annotation * Add thinning test for whole year * Satisfy linter * Await async backup to finish * Move restart disclaimer out of backup tab Should be visible regardless of the current tab. * Write restored collection in chunks * Refactor * Write media in chunks and refactor * Log error if removing file fails * join_backup_task -> await_backup_completion * Refactor backup.rs * Refactor backup meta and collection extraction * Fix wrong error being returned * Call sync_all() on new collection * Add ImportError * Store logger in Backend, instead of creating one on demand init_backend() accepts a Logger rather than a log file, to allow other callers to customize the logger if they wish. In the future we may want to explore using the tracing crate as an alternative; it's a bit more ergonomic, as a logger doesn't need to be passed around, and it plays more nicely with async code. * Sync file contents prior to rename; sync folder after rename. * Limit backup creation to once per 30 min * Use zstd::stream::copy_decode * Make importing abortable * Don't revert if backup media is aborted * Set throttle implicitly * Change force flag to minimum_backup_interval * Don't attempt to open folders on Windows * Join last backup thread before starting new one Also refactor. * Disable auto sync and backup when restoring again * Force backup on full download * Include the reason why a media file import failed, and the file path - Introduce a FileIoError that contains a string representation of the underlying I/O error, and an associated path. There are a few places in the code where we're currently manually including the filename in a custom error message, and this is a step towards a more consistent approach (but we may be better served with a more general approach in the future similar to Anyhow's .context()) - Move the error message into importing.ftl, as it's a bit neater when error messages live in the same file as the rest of the messages associated with some functionality. * Fix importing of media files * Minor wording tweaks * Save an allocation I18n strings with replacements are already strings, so we can skip the extra allocation. Not that it matters here at all. * Terminate import if file missing from archive If a third-party tool is creating invalid archives, the user should know about it. This should be rare, so I did not attempt to make it translatable. * Skip multithreaded compression on small collections Co-authored-by: Damien Elmes <gpg@ankiweb.net>
2022-03-07 06:11:31 +01:00
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/alexcrichton/jobserver-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "An implementation of the GNU make jobserver for Rust"
},
{
"name": "js-sys",
"version": "0.3.61",
"authors": "The wasm-bindgen Developers",
"repository": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/js-sys",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Bindings for all JS global objects and functions in all JS environments like Node.js and browsers, built on `#[wasm_bindgen]` using the `wasm-bindgen` crate."
},
{
"name": "lazy_static",
"version": "1.4.0",
"authors": "Marvin Löbel <loebel.marvin@gmail.com>",
"repository": "https://github.com/rust-lang-nursery/lazy-static.rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A macro for declaring lazily evaluated statics in Rust."
},
{
"name": "libc",
"version": "0.2.140",
"authors": "The Rust Project Developers",
"repository": "https://github.com/rust-lang/libc",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Raw FFI bindings to platform libraries like libc."
},
{
"name": "libsqlite3-sys",
"version": "0.26.0",
"authors": "The rusqlite developers",
"repository": "https://github.com/rusqlite/rusqlite",
"license": "MIT",
"license_file": null,
"description": "Native bindings to the libsqlite3 library"
},
{
"name": "link-cplusplus",
"version": "1.0.8",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/link-cplusplus",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Link libstdc++ or libc++ automatically or manually"
},
{
"name": "linux-raw-sys",
"version": "0.3.1",
"authors": "Dan Gohman <dev@sunfishcode.online>",
"repository": "https://github.com/sunfishcode/linux-raw-sys",
"license": "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
"license_file": null,
"description": "Generated bindings for Linux's userspace API"
},
{
"name": "lock_api",
2022-09-24 04:39:21 +02:00
"version": "0.4.9",
"authors": "Amanieu d'Antras <amanieu@gmail.com>",
"repository": "https://github.com/Amanieu/parking_lot",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Wrappers to create fully-featured Mutex and RwLock types. Compatible with no_std."
},
{
"name": "log",
2022-09-24 04:39:21 +02:00
"version": "0.4.17",
"authors": "The Rust Project Developers",
"repository": "https://github.com/rust-lang/log",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A lightweight logging facade for Rust"
},
{
"name": "mac",
"version": "0.1.1",
"authors": "Jonathan Reem <jonathan.reem@gmail.com>",
"repository": "https://github.com/reem/rust-mac.git",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A collection of great and ubiqutitous macros."
},
{
"name": "maplit",
"version": "1.0.2",
"authors": "bluss",
"repository": "https://github.com/bluss/maplit",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Collection “literal” macros for HashMap, HashSet, BTreeMap, and BTreeSet."
},
{
"name": "markup5ever",
2022-09-24 04:39:21 +02:00
"version": "0.11.0",
"authors": "The html5ever Project Developers",
"repository": "https://github.com/servo/html5ever",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Common code for xml5ever and html5ever"
},
{
"name": "matchers",
"version": "0.1.0",
"authors": "Eliza Weisman <eliza@buoyant.io>",
"repository": "https://github.com/hawkw/matchers",
"license": "MIT",
"license_file": null,
"description": "Regex matching on character and byte streams."
},
{
"name": "matches",
"version": "0.1.10",
"authors": null,
"repository": "https://github.com/SimonSapin/rust-std-candidates",
"license": "MIT",
"license_file": null,
"description": "A macro to evaluate, as a boolean, whether an expression matches a pattern."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "matchit",
"version": "0.7.0",
"authors": "Ibraheem Ahmed <ibraheem@ibraheem.ca>",
"repository": "https://github.com/ibraheemdev/matchit",
"license": "MIT",
"license_file": null,
"description": "A blazing fast URL router."
},
{
"name": "memchr",
2022-09-24 04:39:21 +02:00
"version": "2.5.0",
"authors": "Andrew Gallant <jamslam@gmail.com>|bluss",
2021-10-02 12:42:03 +02:00
"repository": "https://github.com/BurntSushi/memchr",
2020-12-15 08:10:25 +01:00
"license": "MIT OR Unlicense",
"license_file": null,
"description": "Safe interface to memchr."
},
{
"name": "mime",
"version": "0.3.17",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/hyperium/mime",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Strongly Typed Mimes"
},
{
"name": "mime_guess",
"version": "2.0.4",
"authors": "Austin Bonander <austin.bonander@gmail.com>",
"repository": "https://github.com/abonander/mime_guess",
"license": "MIT",
"license_file": null,
"description": "A simple crate for detection of a file's MIME type by its extension."
},
2021-10-02 12:42:03 +02:00
{
"name": "minimal-lexical",
2021-11-18 11:54:00 +01:00
"version": "0.2.1",
2021-10-02 12:42:03 +02:00
"authors": "Alex Huszagh <ahuszagh@gmail.com>",
"repository": "https://github.com/Alexhuszagh/minimal-lexical",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Fast float parsing conversion routines."
},
{
"name": "miniz_oxide",
"version": "0.6.2",
"authors": "Frommi <daniil.liferenko@gmail.com>|oyvindln <oyvindln@users.noreply.github.com>",
"repository": "https://github.com/Frommi/miniz_oxide/tree/master/miniz_oxide",
"license": "Apache-2.0 OR MIT OR Zlib",
"license_file": null,
"description": "DEFLATE compression and decompression library rewritten in Rust based on miniz"
},
{
"name": "mio",
"version": "0.8.6",
"authors": "Carl Lerche <me@carllerche.com>|Thomas de Zeeuw <thomasdezeeuw@gmail.com>|Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/mio",
"license": "MIT",
"license_file": null,
"description": "Lightweight non-blocking I/O."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "multer",
"version": "2.0.4",
"authors": "Rousan Ali <hello@rousan.io>",
"repository": "https://github.com/rousan/multer-rs",
"license": "MIT",
"license_file": null,
"description": "An async parser for `multipart/form-data` content-type in Rust."
},
{
"name": "multimap",
2021-03-27 05:47:16 +01:00
"version": "0.8.3",
"authors": "Håvar Nøvik <havar.novik@gmail.com>",
"repository": "https://github.com/havarnov/multimap",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A multimap implementation."
},
{
"name": "native-tls",
"version": "0.2.11",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/rust-native-tls",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A wrapper over a platform's native TLS implementation"
},
{
"name": "new_debug_unreachable",
"version": "1.0.4",
"authors": "Matt Brubeck <mbrubeck@limpet.net>|Jonathan Reem <jonathan.reem@gmail.com>",
"repository": "https://github.com/mbrubeck/rust-debug-unreachable",
"license": "MIT",
"license_file": null,
"description": "panic in debug, intrinsics::unreachable() in release (fork of debug_unreachable)"
},
2021-06-25 07:35:25 +02:00
{
"name": "nom",
"version": "7.1.3",
2021-06-25 07:35:25 +02:00
"authors": "contact@geoffroycouprie.com",
"repository": "https://github.com/Geal/nom",
"license": "MIT",
"license_file": null,
"description": "A byte-oriented, zero-copy, parser combinators library"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "nonempty",
"version": "0.7.0",
"authors": "Alexis Sellier <self@cloudhead.io>",
"repository": "https://github.com/cloudhead/nonempty",
"license": "MIT",
"license_file": null,
"description": "Correct by construction non-empty vector"
},
{
"name": "nu-ansi-term",
"version": "0.46.0",
"authors": "ogham@bsago.me|Ryan Scheel (Havvy) <ryan.havvy@gmail.com>|Josh Triplett <josh@joshtriplett.org>|The Nushell Project Developers",
"repository": "https://github.com/nushell/nu-ansi-term",
"license": "MIT",
"license_file": null,
"description": "Library for ANSI terminal colors and styles (bold, underline)"
},
{
"name": "num-format",
"version": "0.4.4",
"authors": "Brian Myers <brian.carl.myers@gmail.com>",
"repository": "https://github.com/bcmyers/num-format",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A Rust crate for producing string-representations of numbers, formatted according to international standards"
},
{
"name": "num-integer",
2022-09-24 04:39:21 +02:00
"version": "0.1.45",
"authors": "The Rust Project Developers",
"repository": "https://github.com/rust-num/num-integer",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Integer traits and functions"
},
{
"name": "num-traits",
2022-09-24 04:39:21 +02:00
"version": "0.2.15",
"authors": "The Rust Project Developers",
"repository": "https://github.com/rust-num/num-traits",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Numeric traits for generic mathematics"
},
{
"name": "num_cpus",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"version": "1.15.0",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/seanmonstar/num_cpus",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Get the number of CPUs on a machine."
},
{
"name": "num_enum",
"version": "0.5.11",
"authors": "Daniel Wagner-Hall <dawagner@gmail.com>|Daniel Henry-Mantilla <daniel.henry.mantilla@gmail.com>|Vincent Esche <regexident@gmail.com>",
"repository": "https://github.com/illicitonion/num_enum",
2022-01-15 05:59:43 +01:00
"license": "Apache-2.0 OR BSD-3-Clause OR MIT",
"license_file": null,
"description": "Procedural macros to make inter-operation between primitives and enums easier."
},
{
"name": "num_enum_derive",
"version": "0.5.11",
"authors": "Daniel Wagner-Hall <dawagner@gmail.com>|Daniel Henry-Mantilla <daniel.henry.mantilla@gmail.com>|Vincent Esche <regexident@gmail.com>",
"repository": "https://github.com/illicitonion/num_enum",
2022-01-15 05:59:43 +01:00
"license": "Apache-2.0 OR BSD-3-Clause OR MIT",
"license_file": null,
"description": "Internal implementation details for ::num_enum (Procedural macros to make inter-operation between primitives and enums easier)"
},
{
"name": "object",
"version": "0.30.3",
"authors": null,
"repository": "https://github.com/gimli-rs/object",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A unified interface for reading and writing object file formats."
},
{
"name": "once_cell",
"version": "1.17.1",
"authors": "Aleksey Kladov <aleksey.kladov@gmail.com>",
"repository": "https://github.com/matklad/once_cell",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Single assignment cells and lazy values."
},
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
{
"name": "opaque-debug",
"version": "0.3.0",
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/utils",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Macro for opaque Debug trait implementation"
},
{
"name": "openssl",
"version": "0.10.48",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/rust-openssl",
"license": "Apache-2.0",
"license_file": null,
"description": "OpenSSL bindings"
},
2022-09-24 04:39:21 +02:00
{
"name": "openssl-macros",
"version": "0.1.0",
"authors": null,
"repository": null,
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Internal macros used by the openssl crate."
},
{
"name": "openssl-probe",
2022-01-15 05:59:43 +01:00
"version": "0.1.5",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/alexcrichton/openssl-probe",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Tool for helping to find SSL certificate locations on the system for OpenSSL"
},
{
"name": "openssl-sys",
"version": "0.9.83",
"authors": "Alex Crichton <alex@alexcrichton.com>|Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/rust-openssl",
"license": "MIT",
"license_file": null,
"description": "FFI bindings to OpenSSL"
},
{
"name": "overload",
"version": "0.1.1",
"authors": "Daniel Salvadori <danaugrs@gmail.com>",
"repository": "https://github.com/danaugrs/overload",
"license": "MIT",
"license_file": null,
"description": "Provides a macro to simplify operator overloading."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "parking",
"version": "2.0.0",
"authors": "Stjepan Glavina <stjepang@gmail.com>|The Rust Project Developers",
"repository": "https://github.com/stjepang/parking",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Thread parking and unparking"
},
{
"name": "parking_lot",
2022-09-24 04:39:21 +02:00
"version": "0.12.1",
"authors": "Amanieu d'Antras <amanieu@gmail.com>",
"repository": "https://github.com/Amanieu/parking_lot",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "More compact and efficient implementations of the standard synchronization primitives."
},
{
"name": "parking_lot_core",
"version": "0.9.7",
"authors": "Amanieu d'Antras <amanieu@gmail.com>",
"repository": "https://github.com/Amanieu/parking_lot",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "An advanced API for creating custom synchronization primitives."
},
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
{
"name": "password-hash",
"version": "0.4.2",
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/traits/tree/master/password-hash",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Traits which describe the functionality of password hashing algorithms, as well as a `no_std`-friendly implementation of the PHC string format (a well-defined subset of the Modular Crypt Format a.k.a. MCF)"
},
{
"name": "pbkdf2",
"version": "0.11.0",
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/password-hashes/tree/master/pbkdf2",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Generic implementation of PBKDF2"
},
{
"name": "percent-encoding",
2022-09-24 04:39:21 +02:00
"version": "2.2.0",
"authors": "The rust-url developers",
"repository": "https://github.com/servo/rust-url/",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Percent encoding and decoding"
},
{
"name": "percent-encoding",
"version": "2.2.0",
"authors": "The rust-url developers",
"repository": "https://github.com/servo/rust-url/",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Percent encoding and decoding"
},
{
"name": "petgraph",
"version": "0.6.3",
"authors": "bluss|mitchmindtree",
"repository": "https://github.com/petgraph/petgraph",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Graph data structure library. Provides graph types and graph algorithms."
},
{
"name": "phf",
2022-09-24 04:39:21 +02:00
"version": "0.10.1",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/rust-phf",
"license": "MIT",
"license_file": null,
"description": "Runtime support for perfect hash function data structures"
},
2021-06-25 07:35:25 +02:00
{
"name": "phf",
2022-09-24 04:39:21 +02:00
"version": "0.11.1",
2021-06-25 07:35:25 +02:00
"authors": "Steven Fackler <sfackler@gmail.com>",
2022-09-24 04:39:21 +02:00
"repository": "https://github.com/rust-phf/rust-phf",
2021-06-25 07:35:25 +02:00
"license": "MIT",
"license_file": null,
"description": "Runtime support for perfect hash function data structures"
},
{
"name": "phf_codegen",
2022-09-24 04:39:21 +02:00
"version": "0.10.0",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/rust-phf",
"license": "MIT",
"license_file": null,
"description": "Codegen library for PHF types"
},
{
"name": "phf_generator",
2022-09-24 04:39:21 +02:00
"version": "0.10.0",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/rust-phf",
"license": "MIT",
"license_file": null,
"description": "PHF generation logic"
},
2021-06-25 07:35:25 +02:00
{
"name": "phf_generator",
2022-09-24 04:39:21 +02:00
"version": "0.11.1",
2021-06-25 07:35:25 +02:00
"authors": "Steven Fackler <sfackler@gmail.com>",
2022-09-24 04:39:21 +02:00
"repository": "https://github.com/rust-phf/rust-phf",
2021-06-25 07:35:25 +02:00
"license": "MIT",
"license_file": null,
"description": "PHF generation logic"
},
2021-07-23 11:39:40 +02:00
{
"name": "phf_macros",
2022-09-24 04:39:21 +02:00
"version": "0.11.1",
2021-07-23 11:39:40 +02:00
"authors": "Steven Fackler <sfackler@gmail.com>",
2022-09-24 04:39:21 +02:00
"repository": "https://github.com/rust-phf/rust-phf",
"license": "MIT",
"license_file": null,
"description": "Macros to generate types in the phf crate"
},
{
"name": "phf_shared",
2022-09-24 04:39:21 +02:00
"version": "0.10.0",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/rust-phf",
"license": "MIT",
"license_file": null,
"description": "Support code shared by PHF libraries"
},
2021-06-25 07:35:25 +02:00
{
"name": "phf_shared",
2022-09-24 04:39:21 +02:00
"version": "0.11.1",
2021-06-25 07:35:25 +02:00
"authors": "Steven Fackler <sfackler@gmail.com>",
2022-09-24 04:39:21 +02:00
"repository": "https://github.com/rust-phf/rust-phf",
2021-06-25 07:35:25 +02:00
"license": "MIT",
"license_file": null,
"description": "Support code shared by PHF libraries"
},
{
"name": "pin-project",
2022-09-24 04:39:21 +02:00
"version": "1.0.12",
2022-01-15 05:59:43 +01:00
"authors": null,
"repository": "https://github.com/taiki-e/pin-project",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A crate for safe and ergonomic pin-projection."
},
{
"name": "pin-project-internal",
2022-09-24 04:39:21 +02:00
"version": "1.0.12",
2022-01-15 05:59:43 +01:00
"authors": null,
"repository": "https://github.com/taiki-e/pin-project",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Implementation detail of the `pin-project` crate."
},
2020-11-24 07:57:37 +01:00
{
"name": "pin-project-lite",
2022-09-24 04:39:21 +02:00
"version": "0.2.9",
2022-01-15 05:59:43 +01:00
"authors": null,
2020-11-24 07:57:37 +01:00
"repository": "https://github.com/taiki-e/pin-project-lite",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A lightweight version of pin-project written with declarative macros."
},
{
"name": "pin-utils",
"version": "0.1.0",
"authors": "Josef Brandl <mail@josefbrandl.de>",
"repository": "https://github.com/rust-lang-nursery/pin-utils",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Utilities for pinning"
},
{
"name": "pkg-config",
"version": "0.3.26",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/rust-lang/pkg-config-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A library to run the pkg-config system tool at build time in order to be used in Cargo build scripts."
},
{
"name": "ppv-lite86",
"version": "0.2.17",
"authors": "The CryptoCorrosion Contributors",
"repository": "https://github.com/cryptocorrosion/cryptocorrosion",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Implementation of the crypto-simd API for x86"
},
{
"name": "precomputed-hash",
"version": "0.1.1",
"authors": "Emilio Cobos Álvarez <emilio@crisal.io>",
"repository": "https://github.com/emilio/precomputed-hash",
"license": "MIT",
"license_file": null,
"description": "A library intending to be a base dependency to expose a precomputed hash"
},
{
"name": "prettyplease",
"version": "0.1.25",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/prettyplease",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A minimal `syn` syntax tree pretty-printer"
},
{
"name": "proc-macro-crate",
"version": "1.3.1",
"authors": "Bastian Köcher <git@kchr.de>",
"repository": "https://github.com/bkchr/proc-macro-crate",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Replacement for crate (macro_rules keyword) in proc-macros"
},
{
"name": "proc-macro-hack",
"version": "0.5.20+deprecated",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/proc-macro-hack",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Procedural macros in expression position"
},
{
"name": "proc-macro2",
"version": "1.0.54",
2021-11-18 11:54:00 +01:00
"authors": "David Tolnay <dtolnay@gmail.com>|Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/dtolnay/proc-macro2",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A substitute implementation of the compiler's `proc_macro` API to decouple token-based libraries from the procedural macro use case."
},
{
"name": "prost",
"version": "0.11.8",
2022-09-24 04:39:21 +02:00
"authors": "Dan Burkert <dan@danburkert.com>|Lucio Franco <luciofranco14@gmail.com|Tokio Contributors <team@tokio.rs>",
2021-10-02 12:42:03 +02:00
"repository": "https://github.com/tokio-rs/prost",
"license": "Apache-2.0",
"license_file": null,
"description": "A Protocol Buffers implementation for the Rust Language."
},
{
"name": "prost-build",
"version": "0.11.8",
2022-09-24 04:39:21 +02:00
"authors": "Dan Burkert <dan@danburkert.com>|Lucio Franco <luciofranco14@gmail.com>|Tokio Contributors <team@tokio.rs>",
2021-10-02 12:42:03 +02:00
"repository": "https://github.com/tokio-rs/prost",
"license": "Apache-2.0",
"license_file": null,
"description": "A Protocol Buffers implementation for the Rust Language."
},
{
"name": "prost-derive",
"version": "0.11.8",
2022-09-24 04:39:21 +02:00
"authors": "Dan Burkert <dan@danburkert.com>|Lucio Franco <luciofranco14@gmail.com>|Tokio Contributors <team@tokio.rs>",
2021-10-02 12:42:03 +02:00
"repository": "https://github.com/tokio-rs/prost",
"license": "Apache-2.0",
"license_file": null,
"description": "A Protocol Buffers implementation for the Rust Language."
},
{
"name": "prost-types",
"version": "0.11.8",
2022-09-24 04:39:21 +02:00
"authors": "Dan Burkert <dan@danburkert.com>|Lucio Franco <luciofranco14@gmail.com|Tokio Contributors <team@tokio.rs>",
2021-10-02 12:42:03 +02:00
"repository": "https://github.com/tokio-rs/prost",
"license": "Apache-2.0",
"license_file": null,
"description": "A Protocol Buffers implementation for the Rust Language."
},
{
"name": "pulldown-cmark",
2022-09-24 04:39:21 +02:00
"version": "0.9.2",
"authors": "Raph Levien <raph.levien@gmail.com>|Marcus Klaas de Vries <mail@marcusklaas.nl>",
"repository": "https://github.com/raphlinus/pulldown-cmark",
"license": "MIT",
"license_file": null,
"description": "A pull parser for CommonMark"
},
{
"name": "quote",
"version": "1.0.26",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/quote",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Quasi-quoting macro quote!(...)"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "rand",
"version": "0.7.3",
"authors": "The Rand Project Developers|The Rust Project Developers",
"repository": "https://github.com/rust-random/rand",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Random number generators and other randomness functionality."
},
2021-02-03 11:29:48 +01:00
{
"name": "rand",
"version": "0.8.5",
2021-02-03 11:29:48 +01:00
"authors": "The Rand Project Developers|The Rust Project Developers",
"repository": "https://github.com/rust-random/rand",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Random number generators and other randomness functionality."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "rand_chacha",
"version": "0.2.2",
"authors": "The Rand Project Developers|The Rust Project Developers|The CryptoCorrosion Contributors",
"repository": "https://github.com/rust-random/rand",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "ChaCha random number generator"
},
2021-02-03 11:29:48 +01:00
{
"name": "rand_chacha",
2021-06-16 08:10:57 +02:00
"version": "0.3.1",
2021-02-03 11:29:48 +01:00
"authors": "The Rand Project Developers|The Rust Project Developers|The CryptoCorrosion Contributors",
"repository": "https://github.com/rust-random/rand",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "ChaCha random number generator"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "rand_core",
"version": "0.5.1",
"authors": "The Rand Project Developers|The Rust Project Developers",
"repository": "https://github.com/rust-random/rand",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Core random number generator traits and tools for implementation."
},
{
"name": "rand_core",
2022-09-24 04:39:21 +02:00
"version": "0.6.4",
2021-02-03 11:29:48 +01:00
"authors": "The Rand Project Developers|The Rust Project Developers",
"repository": "https://github.com/rust-random/rand",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Core random number generator traits and tools for implementation."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "rand_hc",
"version": "0.2.0",
"authors": "The Rand Project Developers",
"repository": "https://github.com/rust-random/rand",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "HC128 random number generator"
},
{
"name": "rand_pcg",
"version": "0.2.1",
"authors": "The Rand Project Developers",
"repository": "https://github.com/rust-random/rand",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Selected PCG random number generators"
},
{
"name": "redox_syscall",
2022-09-24 04:39:21 +02:00
"version": "0.2.16",
2021-02-03 11:29:48 +01:00
"authors": "Jeremy Soller <jackpot51@gmail.com>",
"repository": "https://gitlab.redox-os.org/redox-os/syscall",
"license": "MIT",
"license_file": null,
"description": "A Rust library to access raw Redox system calls"
},
{
"name": "redox_syscall",
"version": "0.3.5",
"authors": "Jeremy Soller <jackpot51@gmail.com>",
"repository": "https://gitlab.redox-os.org/redox-os/syscall",
"license": "MIT",
"license_file": null,
"description": "A Rust library to access raw Redox system calls"
},
{
"name": "regex",
"version": "1.7.3",
"authors": "The Rust Project Developers",
"repository": "https://github.com/rust-lang/regex",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "An implementation of regular expressions for Rust. This implementation uses finite automata and guarantees linear time matching on all inputs."
},
Plaintext import/export (#1850) * Add crate csv * Add start of csv importing on backend * Add Menomosyne serializer * Add csv and json importing on backend * Add plaintext importing on frontend * Add csv metadata extraction on backend * Add csv importing with GUI * Fix missing dfa file in build Added compile_data_attr, then re-ran cargo/update.py. * Don't use doubly buffered reader in csv * Escape HTML entities if CSV is not HTML Also use name 'is_html' consistently. * Use decimal number as foreign ease (like '2.5') * ForeignCard.ivl → ForeignCard.interval * Only allow fixed set of CSV delimiters * Map timestamp of ForeignCard to native due time * Don't trim CSV records * Document use of empty strings for defaults * Avoid creating CardGenContexts for every note This requires CardGenContext to be generic, so it works both with an owned and borrowed notetype. * Show all accepted file types in import file picker * Add import_json_file() * factor → ease_factor * delimter_from_value → delimiter_from_value * Map columns to fields, not the other way around * Fallback to current config for csv metadata * Add start of new import csv screen * Temporary fix for compilation issue on Linux/Mac * Disable jest bazel action for import-csv Jest fails with an error code if no tests are available, but this would not be noticable on Windows as Jest is not run there. * Fix field mapping issue * Revert "Temporary fix for compilation issue on Linux/Mac" This reverts commit 21f8a261408cdae49ec031aa21a1b659c4f66d82. * Add HtmlSwitch and move Switch to components * Fix spacing and make selectors consistent * Fix shortcut tooltip * Place import button at the top with path * Fix meta column indices * Remove NotetypeForString * Fix queue and type of foreign cards * Support different dupe resolution strategies * Allow dupe resolution selection when importing CSV * Test import of unnormalized text Close #1863. * Fix logging of foreign notes * Implement CSV exports * Use db_scalar() in notes_table_len() * Rework CSV metadata - Notetypes and decks are either defined by a global id or by a column. - If a notetype id is provided, its field map must also be specified. - If a notetype column is provided, fields are now mapped by index instead of name at import time. So the first non-meta column is used for the first field of every note, regardless of notetype. This makes importing easier and should improve compatiblity with files without a notetype column. - Ensure first field can be mapped to a column. - Meta columns must be defined as `#[meta name]:[column index]` instead of in the `#columns` tag. - Column labels contain the raw names defined by the file and must be prettified by the frontend. * Adjust frontend to new backend column mapping * Add force flags for is_html and delimiter * Detect if CSV is HTML by field content * Update dupe resolution labels * Simplify selectors * Fix coalescence of oneofs in TS * Disable meta columns from selection Plus a lot of refactoring. * Make import button stick to the bottom * Write delimiter and html flag into csv * Refetch field map after notetype change * Fix log labels for csv import * Log notes whose deck/notetype was missing * Fix hiding of empty log queues * Implement adding tags to all notes of a csv * Fix dupe resolution not being set in log * Implement adding tags to updated notes of a csv * Check first note field is not empty * Temporary fix for build on Linux/Mac * Fix inverted html check (dae) * Remove unused ftl string * Delimiter → Separator * Remove commented-out line * Don't accept .json files * Tweak tag ftl strings * Remove redundant blur call * Strip sound and add spaces in csv export * Export HTML by default * Fix unset deck in Mnemosyne import Also accept both numbers and strings for notetypes and decks in JSON. * Make DupeResolution::Update the default * Fix missing dot in extension * Make column indices 1-based * Remove StickContainer from TagEditor Fixes line breaking, border and z index on ImportCsvPage. * Assign different key combos to tag editors * Log all updated duplicates Add a log field for the true number of found notes. * Show identical notes as skipped * Split tag-editor into separate ts module (dae) * Add progress for CSV export * Add progress for text import * Tidy-ups after tag-editor split (dae) - import-csv no longer depends on editor - remove some commented lines
2022-06-01 12:26:16 +02:00
{
"name": "regex-automata",
"version": "0.1.10",
"authors": "Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/BurntSushi/regex-automata",
"license": "MIT OR Unlicense",
"license_file": null,
"description": "Automata construction and matching using regular expressions."
},
{
"name": "regex-syntax",
"version": "0.6.29",
"authors": "The Rust Project Developers",
"repository": "https://github.com/rust-lang/regex",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A regular expression parser."
},
{
"name": "reqwest",
"version": "0.11.16",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/seanmonstar/reqwest",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "higher level HTTP client library"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "retain_mut",
"version": "0.1.9",
"authors": "Xidorn Quan <me@upsuper.org>",
"repository": "https://github.com/upsuper/retain_mut",
"license": "MIT",
"license_file": null,
"description": "Provide retain_mut method that has the same functionality as retain but gives mutable borrow to the predicate."
},
{
"name": "ring",
2021-02-03 11:29:48 +01:00
"version": "0.16.20",
"authors": "Brian Smith <brian@briansmith.org>",
"repository": "https://github.com/briansmith/ring",
"license": null,
"license_file": "LICENSE",
"description": "Safe, fast, small crypto using Rust."
},
{
"name": "rusqlite",
"version": "0.29.0",
"authors": "The rusqlite developers",
"repository": "https://github.com/rusqlite/rusqlite",
"license": "MIT",
"license_file": null,
"description": "Ergonomic wrapper for SQLite"
},
{
"name": "rustc-demangle",
"version": "0.1.22",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/alexcrichton/rustc-demangle",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Rust compiler symbol demangling."
},
2021-02-03 11:29:48 +01:00
{
"name": "rustc-hash",
"version": "1.1.0",
"authors": "The Rust Project Developers",
"repository": "https://github.com/rust-lang-nursery/rustc-hash",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "speed, non-cryptographic hash used in rustc"
},
{
"name": "rustix",
"version": "0.37.5",
"authors": "Dan Gohman <dev@sunfishcode.online>|Jakub Konka <kubkon@jakubkonka.com>",
"repository": "https://github.com/bytecodealliance/rustix",
"license": "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
"license_file": null,
"description": "Safe Rust bindings to POSIX/Unix/Linux/Winsock2-like syscalls"
},
{
"name": "rustls",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"version": "0.20.8",
"authors": null,
"repository": "https://github.com/rustls/rustls",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR ISC OR MIT",
"license_file": null,
"description": "Rustls is a modern TLS library written in Rust."
},
2021-06-18 10:15:41 +02:00
{
"name": "rustls-native-certs",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"version": "0.6.2",
2021-06-18 10:15:41 +02:00
"authors": "Joseph Birr-Pixton <jpixton@gmail.com>",
"repository": "https://github.com/ctz/rustls-native-certs",
"license": "Apache-2.0 OR ISC OR MIT",
"license_file": null,
"description": "rustls-native-certs allows rustls to use the platform native certificate store"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "rustls-pemfile",
"version": "1.0.2",
"authors": null,
"repository": "https://github.com/rustls/pemfile",
"license": "Apache-2.0 OR ISC OR MIT",
"license_file": null,
"description": "Basic .pem file parser for keys and certificates"
},
2021-10-02 12:42:03 +02:00
{
"name": "rustversion",
"version": "1.0.12",
2021-10-02 12:42:03 +02:00
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/rustversion",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Conditional compilation according to rustc compiler version"
},
{
"name": "ryu",
"version": "1.0.13",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/ryu",
"license": "Apache-2.0 OR BSL-1.0",
"license_file": null,
"description": "Fast floating point to string conversion"
},
{
"name": "schannel",
"version": "0.1.21",
"authors": "Steven Fackler <sfackler@gmail.com>|Steffen Butzer <steffen.butzer@outlook.com>",
"repository": "https://github.com/steffengy/schannel-rs",
"license": "MIT",
"license_file": null,
"description": "Schannel bindings for rust, allowing SSL/TLS (e.g. https) without openssl"
},
{
"name": "scopeguard",
"version": "1.1.0",
"authors": "bluss",
"repository": "https://github.com/bluss/scopeguard",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A RAII scope guard that will run a given closure when it goes out of scope, even if the code between panics (assuming unwinding panic). Defines the macros `defer!`, `defer_on_unwind!`, `defer_on_success!` as shorthands for guards with one of the implemented strategies."
},
{
"name": "scratch",
"version": "1.0.5",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/scratch",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Compile-time temporary directory shared by multiple crates and erased by `cargo clean`"
},
{
"name": "sct",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"version": "0.7.0",
"authors": "Joseph Birr-Pixton <jpixton@gmail.com>",
"repository": "https://github.com/ctz/sct.rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR ISC OR MIT",
"license_file": null,
"description": "Certificate transparency SCT verification library"
},
{
"name": "security-framework",
"version": "2.8.2",
"authors": "Steven Fackler <sfackler@gmail.com>|Kornel <kornel@geekhood.net>",
"repository": "https://github.com/kornelski/rust-security-framework",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Security.framework bindings for macOS and iOS"
},
{
"name": "security-framework-sys",
"version": "2.8.0",
"authors": "Steven Fackler <sfackler@gmail.com>|Kornel <kornel@geekhood.net>",
"repository": "https://github.com/kornelski/rust-security-framework",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Apple `Security.framework` low-level FFI bindings"
},
{
"name": "self_cell",
2021-12-03 11:04:47 +01:00
"version": "0.10.2",
"authors": "Lukas Bergdoll <lukas.bergdoll@gmail.com>",
"repository": "https://github.com/Voultapher/self_cell",
"license": "Apache-2.0",
"license_file": null,
"description": "Safe-to-use proc-macro-free self-referential structs in stable Rust."
},
{
"name": "serde",
"version": "1.0.159",
"authors": "Erick Tryzelaar <erick.tryzelaar@gmail.com>|David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/serde-rs/serde",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A generic serialization/deserialization framework"
},
{
"name": "serde-aux",
"version": "4.1.2",
"authors": "Victor Polevoy <maintainer@vpolevoy.com>",
"repository": "https://github.com/vityafx/serde-aux",
"license": "MIT",
"license_file": null,
"description": "A serde crate's auxiliary library"
},
{
"name": "serde_derive",
"version": "1.0.159",
"authors": "Erick Tryzelaar <erick.tryzelaar@gmail.com>|David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/serde-rs/serde",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Macros 1.1 implementation of #[derive(Serialize, Deserialize)]"
},
{
"name": "serde_json",
"version": "1.0.95",
"authors": "Erick Tryzelaar <erick.tryzelaar@gmail.com>|David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/serde-rs/json",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A JSON serialization file format"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "serde_path_to_error",
"version": "0.1.11",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/path-to-error",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Path to the element that failed to deserialize"
},
{
"name": "serde_qs",
"version": "0.8.5",
"authors": "Sam Scott <sam@osohq.com>",
"repository": "https://github.com/samscott89/serde_qs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Querystrings for Serde"
},
{
"name": "serde_repr",
"version": "0.1.12",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/serde-repr",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Derive Serialize and Deserialize that delegates to the underlying repr of a C-like enum."
},
{
"name": "serde_tuple",
"version": "0.5.0",
"authors": "Jacob Brown <kardeiz@gmail.com>",
"repository": "https://github.com/kardeiz/serde_tuple",
"license": "MIT",
"license_file": null,
"description": "De/serialize structs with named fields as array of values"
},
{
"name": "serde_tuple_macros",
"version": "0.5.0",
"authors": "Jacob Brown <kardeiz@gmail.com>",
"repository": "https://github.com/kardeiz/serde_tuple",
"license": "MIT",
"license_file": null,
"description": "De/serialize structs with named fields as array of values"
},
{
"name": "serde_urlencoded",
"version": "0.7.1",
"authors": "Anthony Ramine <n.oxyde@gmail.com>",
"repository": "https://github.com/nox/serde_urlencoded",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "`x-www-form-urlencoded` meets Serde"
},
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
{
"name": "sha1",
"version": "0.10.5",
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/hashes",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "SHA-1 hash function"
},
{
"name": "sha2",
"version": "0.10.6",
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/hashes",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Pure Rust implementation of the SHA-2 hash function family including SHA-224, SHA-256, SHA-384, and SHA-512."
},
{
"name": "sharded-slab",
"version": "0.1.4",
"authors": "Eliza Weisman <eliza@buoyant.io>",
"repository": "https://github.com/hawkw/sharded-slab",
"license": "MIT",
"license_file": null,
"description": "A lock-free concurrent slab."
},
{
"name": "signal-hook-registry",
"version": "1.4.1",
"authors": "Michal 'vorner' Vaner <vorner@vorner.cz>|Masaki Hara <ackie.h.gmai@gmail.com>",
"repository": "https://github.com/vorner/signal-hook",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Backend crate for signal-hook"
},
{
"name": "siphasher",
"version": "0.3.10",
"authors": "Frank Denis <github@pureftpd.org>",
"repository": "https://github.com/jedisct1/rust-siphash",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "SipHash-2-4, SipHash-1-3 and 128-bit variants in pure Rust"
},
{
"name": "slab",
"version": "0.4.8",
"authors": "Carl Lerche <me@carllerche.com>",
"repository": "https://github.com/tokio-rs/slab",
"license": "MIT",
"license_file": null,
"description": "Pre-allocated storage for a uniform data type"
},
{
"name": "smallvec",
"version": "1.10.0",
"authors": "The Servo Project Developers",
"repository": "https://github.com/servo/rust-smallvec",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "'Small vector' optimization: store up to a small number of items on the stack"
},
{
"name": "snafu",
"version": "0.7.4",
"authors": "Jake Goulding <jake.goulding@gmail.com>",
"repository": "https://github.com/shepmaster/snafu",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "An ergonomic error handling library"
},
{
"name": "snafu-derive",
"version": "0.7.4",
"authors": "Jake Goulding <jake.goulding@gmail.com>",
"repository": "https://github.com/shepmaster/snafu",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "An ergonomic error handling library"
},
V3 parent limits (#1638) * avoid repinning Rust deps by default * add id_tree dependency * Respect intermediate child limits in v3 * Test new behaviour of v3 counts * Rework v3 queue building to respect parent limits * Add missing did field to SQL query * Fix `LimitTreeMap::is_exhausted()` * Rework tree building logic https://github.com/ankitects/anki/pull/1638#discussion_r798328734 * Add timer for build_queues() * `is_exhausted()` -> `limit_reached()` * Move context and limits into `QueueBuilder` This allows for moving more logic into QueueBuilder, so less passing around of arguments. Unfortunately, some tests will require additional work to set up. * Fix stop condition in new_cards_by_position * Fix order gather order of new cards by deck * Add scheduler/queue/builder/burying.rs * Fix bad tree due to unsorted child decks * Fix comment * Fix `cap_new_to_review_rec()` * Add test for new card gathering * Always sort `child_decks()` * Fix deck removal in `cap_new_to_review_rec()` * Fix sibling ordering in new card gathering * Remove limits for deck total count with children * Add random gather order * Remove bad sibling order handling All routines ensure ascending order now. Also do some other minor refactoring. * Remove queue truncating All routines stop now as soon as the root limit is reached. * Move deck fetching into `QueueBuilder::new()` * Rework new card gather and sort options https://github.com/ankitects/anki/pull/1638#issuecomment-1032173013 * Disable new sort order choices ... depending on set gather order. * Use enum instead of numbers * Ensure valid sort order setting * Update new gather and sort order tooltips * Warn about random insertion order with v3 * Revert "Add timer for build_queues()" This reverts commit c9f5fc6ebe87953c17a0c842990b009b5596c69c. * Update rslib/src/storage/card/mod.rs (dae) * minor wording tweaks to the tooltips (dae) + move legacy strings to bottom + consistent capitalization (our leech action still needs fixing, but that will require introducing a new 'suspend card' string as the existing one is used elsewhere as well)
2022-02-10 00:55:43 +01:00
{
"name": "snowflake",
"version": "1.3.0",
"authors": "Steven Allen <steven@stebalien.com>",
"repository": "https://github.com/Stebalien/snowflake",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A module for generating guaranteed process unique IDs."
},
{
"name": "socket2",
"version": "0.4.9",
"authors": "Alex Crichton <alex@alexcrichton.com>|Thomas de Zeeuw <thomasdezeeuw@gmail.com>",
"repository": "https://github.com/rust-lang/socket2",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Utilities for handling networking sockets with a maximal amount of configuration possible intended."
},
{
"name": "spin",
"version": "0.5.2",
"authors": "Mathijs van de Nes <git@mathijs.vd-nes.nl>|John Ericson <git@JohnEricson.me>",
"repository": "https://github.com/mvdnes/spin-rs.git",
"license": "MIT",
"license_file": null,
"description": "Synchronization primitives based on spinning. They may contain data, are usable without `std`, and static initializers are available."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "spin",
"version": "0.9.8",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Mathijs van de Nes <git@mathijs.vd-nes.nl>|John Ericson <git@JohnEricson.me>|Joshua Barretto <joshua.s.barretto@gmail.com>",
"repository": "https://github.com/mvdnes/spin-rs.git",
"license": "MIT",
"license_file": null,
"description": "Spin-based synchronization primitives"
},
{
"name": "string_cache",
"version": "0.8.7",
"authors": "The Servo Project Developers",
"repository": "https://github.com/servo/string-cache",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A string interning library for Rust, developed as part of the Servo project."
},
{
"name": "string_cache_codegen",
2022-09-24 04:39:21 +02:00
"version": "0.5.2",
"authors": "The Servo Project Developers",
"repository": "https://github.com/servo/string-cache",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A codegen library for string-cache, developed as part of the Servo project."
},
2021-03-07 10:08:03 +01:00
{
"name": "strum",
2022-09-24 04:39:21 +02:00
"version": "0.24.1",
2021-03-07 10:08:03 +01:00
"authors": "Peter Glotfelty <peter.glotfelty@microsoft.com>",
"repository": "https://github.com/Peternator7/strum",
"license": "MIT",
"license_file": null,
"description": "Helpful macros for working with enums and strings"
},
{
"name": "strum_macros",
2022-09-24 04:39:21 +02:00
"version": "0.24.3",
2021-03-07 10:08:03 +01:00
"authors": "Peter Glotfelty <peter.glotfelty@microsoft.com>",
"repository": "https://github.com/Peternator7/strum",
"license": "MIT",
"license_file": null,
"description": "Helpful macros for working with enums and strings"
},
2022-01-15 05:59:43 +01:00
{
"name": "subtle",
"version": "2.4.1",
"authors": "Isis Lovecruft <isis@patternsinthevoid.net>|Henry de Valence <hdevalence@hdevalence.ca>",
"repository": "https://github.com/dalek-cryptography/subtle",
"license": "BSD-3-Clause",
"license_file": null,
"description": "Pure-Rust traits and utilities for constant-time cryptographic implementations."
},
{
"name": "syn",
"version": "1.0.109",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/syn",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Parser for Rust source code"
},
{
"name": "syn",
"version": "2.0.12",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/syn",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Parser for Rust source code"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "sync_wrapper",
"version": "0.1.2",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Actyx AG <developer@actyx.io>",
"repository": "https://github.com/Actyx/sync_wrapper",
"license": "Apache-2.0",
"license_file": null,
"description": "A tool for enlisting the compilers help in proving the absence of concurrency"
},
{
"name": "tempfile",
"version": "3.5.0",
"authors": "Steven Allen <steven@stebalien.com>|The Rust Project Developers|Ashley Mannix <ashleymannix@live.com.au>|Jason White <me@jasonwhite.io>",
"repository": "https://github.com/Stebalien/tempfile",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A library for managing temporary files and directories."
},
{
"name": "tendril",
2022-09-24 04:39:21 +02:00
"version": "0.4.3",
"authors": "Keegan McAllister <mcallister.keegan@gmail.com>|Simon Sapin <simon.sapin@exyr.org>|Chris Morgan <me@chrismorgan.info>",
"repository": "https://github.com/servo/tendril",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Compact buffer/string type for zero-copy parsing"
},
{
"name": "termcolor",
"version": "1.2.0",
"authors": "Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/BurntSushi/termcolor",
2020-12-15 08:10:25 +01:00
"license": "MIT OR Unlicense",
"license_file": null,
"description": "A simple cross platform library for writing colored text to a terminal."
},
{
"name": "thiserror",
"version": "1.0.40",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/thiserror",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "derive(Error)"
},
{
"name": "thiserror-impl",
"version": "1.0.40",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/thiserror",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Implementation detail of the `thiserror` crate"
},
{
"name": "thread_local",
"version": "1.1.7",
"authors": "Amanieu d'Antras <amanieu@gmail.com>",
"repository": "https://github.com/Amanieu/thread_local-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Per-object thread-local storage"
},
{
"name": "time",
"version": "0.3.20",
"authors": "Jacob Pratt <open-source@jhpratt.dev>|Time contributors",
"repository": "https://github.com/time-rs/time",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Date and time library. Fully interoperable with the standard library. Mostly compatible with #![no_std]."
},
{
"name": "time-core",
"version": "0.1.0",
"authors": "Jacob Pratt <open-source@jhpratt.dev>|Time contributors",
"repository": "https://github.com/time-rs/time",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "This crate is an implementation detail and should not be relied upon directly."
},
{
"name": "time-macros",
"version": "0.2.8",
"authors": "Jacob Pratt <open-source@jhpratt.dev>|Time contributors",
"repository": "https://github.com/time-rs/time",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Procedural macros for the time crate. This crate is an implementation detail and should not be relied upon directly."
},
{
"name": "tinystr",
"version": "0.7.1",
"authors": "The ICU4X Project Developers",
"repository": "https://github.com/unicode-org/icu4x",
"license": "Unicode-DFS-2016",
"license_file": null,
"description": "A small ASCII-only bounded length string representation."
},
{
"name": "tinyvec",
2022-09-24 04:39:21 +02:00
"version": "1.6.0",
"authors": "Lokathor <zefria@gmail.com>",
"repository": "https://github.com/Lokathor/tinyvec",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT OR Zlib",
"license_file": null,
"description": "`tinyvec` provides 100% safe vec-like data structures."
},
{
"name": "tinyvec_macros",
"version": "0.1.1",
"authors": "Soveu <marx.tomasz@gmail.com>",
"repository": "https://github.com/Soveu/tinyvec_macros",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT OR Zlib",
"license_file": null,
"description": "Some macros for tiny containers"
},
{
"name": "tokio",
"version": "1.27.0",
"authors": "Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/tokio",
"license": "MIT",
"license_file": null,
"description": "An event-driven, non-blocking I/O platform for writing asynchronous I/O backed applications."
},
2021-07-23 11:39:40 +02:00
{
"name": "tokio-macros",
"version": "2.0.0",
2021-07-23 11:39:40 +02:00
"authors": "Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/tokio",
"license": "MIT",
"license_file": null,
"description": "Tokio's proc macros."
},
{
"name": "tokio-native-tls",
"version": "0.3.1",
"authors": "Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/tls",
"license": "MIT",
"license_file": null,
"description": "An implementation of TLS/SSL streams for Tokio using native-tls giving an implementation of TLS for nonblocking I/O streams."
},
{
"name": "tokio-rustls",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"version": "0.23.4",
"authors": "quininer kel <quininer@live.com>",
"repository": "https://github.com/tokio-rs/tls",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Asynchronous TLS/SSL streams for Tokio using Rustls."
},
{
"name": "tokio-socks",
"version": "0.5.1",
"authors": "Yilin Chen <sticnarf@gmail.com>",
"repository": "https://github.com/sticnarf/tokio-socks",
"license": "MIT",
"license_file": null,
"description": "Asynchronous SOCKS proxy support for Rust."
},
{
"name": "tokio-util",
"version": "0.7.7",
"authors": "Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/tokio",
"license": "MIT",
"license_file": null,
"description": "Additional utilities for working with Tokio."
},
{
"name": "toml_datetime",
"version": "0.6.1",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/toml-rs/toml",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A TOML-compatible datetime type"
},
{
"name": "toml_edit",
"version": "0.19.8",
"authors": "Andronik Ordian <write@reusable.software>|Ed Page <eopage@gmail.com>",
"repository": "https://github.com/ordian/toml_edit",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Yet another format-preserving TOML parser."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "tower",
"version": "0.4.13",
"authors": "Tower Maintainers <team@tower-rs.com>",
"repository": "https://github.com/tower-rs/tower",
"license": "MIT",
"license_file": null,
"description": "Tower is a library of modular and reusable components for building robust clients and servers."
},
{
"name": "tower-http",
"version": "0.4.0",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Tower Maintainers <team@tower-rs.com>",
"repository": "https://github.com/tower-rs/tower-http",
"license": "MIT",
"license_file": null,
"description": "Tower middleware and utilities for HTTP clients and servers"
},
{
"name": "tower-layer",
"version": "0.3.2",
"authors": "Tower Maintainers <team@tower-rs.com>",
"repository": "https://github.com/tower-rs/tower",
"license": "MIT",
"license_file": null,
"description": "Decorates a `Service` to allow easy composition between `Service`s."
},
{
"name": "tower-service",
2022-09-24 04:39:21 +02:00
"version": "0.3.2",
"authors": "Tower Maintainers <team@tower-rs.com>",
"repository": "https://github.com/tower-rs/tower",
"license": "MIT",
"license_file": null,
"description": "Trait representing an asynchronous, request / response based, client or server."
},
{
"name": "tracing",
"version": "0.1.37",
"authors": "Eliza Weisman <eliza@buoyant.io>|Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/tracing",
"license": "MIT",
"license_file": null,
"description": "Application-level tracing for Rust."
},
{
"name": "tracing-appender",
"version": "0.2.2",
"authors": "Zeki Sherif <zekshi@amazon.com>|Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/tracing",
"license": "MIT",
"license_file": null,
"description": "Provides utilities for file appenders and making non-blocking writers."
},
{
"name": "tracing-attributes",
"version": "0.1.23",
"authors": "Tokio Contributors <team@tokio.rs>|Eliza Weisman <eliza@buoyant.io>|David Barsky <dbarsky@amazon.com>",
"repository": "https://github.com/tokio-rs/tracing",
"license": "MIT",
"license_file": null,
"description": "Procedural macro attributes for automatically instrumenting functions."
},
{
"name": "tracing-core",
"version": "0.1.30",
"authors": "Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/tracing",
"license": "MIT",
"license_file": null,
"description": "Core primitives for application-level tracing."
},
{
"name": "tracing-log",
"version": "0.1.3",
"authors": "Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/tracing",
"license": "MIT",
"license_file": null,
"description": "Provides compatibility between `tracing` and the `log` crate."
},
{
"name": "tracing-subscriber",
"version": "0.3.16",
"authors": "Eliza Weisman <eliza@buoyant.io>|David Barsky <me@davidbarsky.com>|Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/tracing",
"license": "MIT",
"license_file": null,
"description": "Utilities for implementing and composing `tracing` subscribers."
},
{
"name": "try-lock",
"version": "0.2.4",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/seanmonstar/try-lock",
"license": "MIT",
"license_file": null,
"description": "A lightweight atomic lock."
},
{
"name": "type-map",
2021-02-03 11:29:48 +01:00
"version": "0.4.0",
"authors": "Jacob Brown <kardeiz@gmail.com>",
"repository": "https://github.com/kardeiz/type-map",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Provides a typemap container with FxHashMap"
},
{
"name": "typenum",
"version": "1.16.0",
"authors": "Paho Lurie-Gregg <paho@paholg.com>|Andre Bogus <bogusandre@gmail.com>",
"repository": "https://github.com/paholg/typenum",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
2021-03-27 05:47:16 +01:00
"description": "Typenum is a Rust library for type-level numbers evaluated at compile time. It currently supports bits, unsigned integers, and signed integers. It also provides a type-level array of type-level numbers, but its implementation is incomplete."
},
{
"name": "unic-char-property",
"version": "0.9.0",
"authors": "The UNIC Project Developers",
"repository": "https://github.com/open-i18n/rust-unic/",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "UNIC — Unicode Character Tools — Character Property taxonomy, contracts and build macros"
},
{
"name": "unic-char-range",
"version": "0.9.0",
"authors": "The UNIC Project Developers",
"repository": "https://github.com/open-i18n/rust-unic/",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "UNIC — Unicode Character Tools — Character Range and Iteration"
},
{
"name": "unic-common",
"version": "0.9.0",
"authors": "The UNIC Project Developers",
"repository": "https://github.com/open-i18n/rust-unic/",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "UNIC — Common Utilities"
},
{
"name": "unic-langid",
"version": "0.9.1",
"authors": "Zibi Braniecki <gandalf@mozilla.com>",
"repository": "https://github.com/zbraniecki/unic-locale",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "API for managing Unicode Language Identifiers"
},
{
"name": "unic-langid-impl",
"version": "0.9.1",
"authors": "Zibi Braniecki <gandalf@mozilla.com>",
"repository": "https://github.com/zbraniecki/unic-locale",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "API for managing Unicode Language Identifiers"
},
{
"name": "unic-langid-macros",
"version": "0.9.1",
"authors": "Manish Goregaokar <manishsmail@gmail.com>|Zibi Braniecki <gandalf@mozilla.com>",
"repository": "https://github.com/zbraniecki/unic-locale",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "API for managing Unicode Language Identifiers"
},
{
"name": "unic-langid-macros-impl",
"version": "0.9.1",
"authors": "Manish Goregaokar <manishsmail@gmail.com>|Zibi Braniecki <gandalf@mozilla.com>",
"repository": "https://github.com/zbraniecki/unic-locale",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "API for managing Unicode Language Identifiers"
},
{
"name": "unic-ucd-category",
"version": "0.9.0",
"authors": "The UNIC Project Developers",
"repository": "https://github.com/open-i18n/rust-unic/",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "UNIC — Unicode Character Database — General Category"
},
{
"name": "unic-ucd-version",
"version": "0.9.0",
"authors": "The UNIC Project Developers",
"repository": "https://github.com/open-i18n/rust-unic/",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "UNIC — Unicode Character Database — Version"
},
{
"name": "unicase",
"version": "2.6.0",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/seanmonstar/unicase",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A case-insensitive wrapper around strings."
},
{
"name": "unicode-bidi",
"version": "0.3.13",
"authors": "The Servo Project Developers",
"repository": "https://github.com/servo/unicode-bidi",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Implementation of the Unicode Bidirectional Algorithm"
},
{
2022-09-24 04:39:21 +02:00
"name": "unicode-ident",
"version": "1.0.8",
2022-09-24 04:39:21 +02:00
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/unicode-ident",
"license": "(MIT OR Apache-2.0) AND Unicode-DFS-2016",
"license_file": null,
2022-09-24 04:39:21 +02:00
"description": "Determine whether characters have the XID_Start or XID_Continue properties according to Unicode Standard Annex #31"
},
{
2022-09-24 04:39:21 +02:00
"name": "unicode-normalization",
"version": "0.1.22",
"authors": "kwantam <kwantam@gmail.com>|Manish Goregaokar <manishsmail@gmail.com>",
2022-09-24 04:39:21 +02:00
"repository": "https://github.com/unicode-rs/unicode-normalization",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
2022-09-24 04:39:21 +02:00
"description": "This crate provides functions for normalization of Unicode strings, including Canonical and Compatible Decomposition and Recomposition, as described in Unicode Standard Annex #15."
},
{
"name": "unicode-segmentation",
"version": "1.10.1",
"authors": "kwantam <kwantam@gmail.com>|Manish Goregaokar <manishsmail@gmail.com>",
"repository": "https://github.com/unicode-rs/unicode-segmentation",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "This crate provides Grapheme Cluster, Word and Sentence boundaries according to Unicode Standard Annex #29 rules."
},
{
"name": "unicode-width",
2022-09-24 04:39:21 +02:00
"version": "0.1.10",
"authors": "kwantam <kwantam@gmail.com>|Manish Goregaokar <manishsmail@gmail.com>",
"repository": "https://github.com/unicode-rs/unicode-width",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Determine displayed width of `char` and `str` types according to Unicode Standard Annex #11 rules."
},
{
"name": "untrusted",
"version": "0.7.1",
"authors": "Brian Smith <brian@briansmith.org>",
"repository": "https://github.com/briansmith/untrusted",
"license": "ISC",
"license_file": null,
"description": "Safe, fast, zero-panic, zero-crashing, zero-allocation parsing of untrusted inputs in Rust."
},
{
"name": "url",
2022-09-24 04:39:21 +02:00
"version": "2.3.1",
"authors": "The rust-url developers",
"repository": "https://github.com/servo/rust-url",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "URL library for Rust, based on the WHATWG URL Standard"
},
{
"name": "utf-8",
"version": "0.7.6",
"authors": "Simon Sapin <simon.sapin@exyr.org>",
"repository": "https://github.com/SimonSapin/rust-utf8",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Incremental, zero-copy UTF-8 decoding with error handling"
},
{
"name": "utime",
"version": "0.3.1",
"authors": "Hyeon Kim <simnalamburt@gmail.com>",
"repository": "https://github.com/simnalamburt/utime",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A missing utime function for Rust."
},
{
"name": "valuable",
"version": "0.1.0",
"authors": null,
"repository": "https://github.com/tokio-rs/valuable",
"license": "MIT",
"license_file": null,
"description": "Object-safe value inspection, used to pass un-typed structured data across trait-object boundaries."
},
{
"name": "vcpkg",
2021-06-25 07:35:25 +02:00
"version": "0.2.15",
"authors": "Jim McGrath <jimmc2@gmail.com>",
"repository": "https://github.com/mcgoo/vcpkg-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A library to find native dependencies in a vcpkg tree at build time in order to be used in Cargo build scripts."
},
{
"name": "version_check",
2022-01-15 05:59:43 +01:00
"version": "0.9.4",
"authors": "Sergio Benitez <sb@sergio.bz>",
"repository": "https://github.com/SergioBenitez/version_check",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Tiny crate to check the version of the installed/running rustc."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "waker-fn",
"version": "1.1.0",
"authors": "Stjepan Glavina <stjepang@gmail.com>",
"repository": "https://github.com/stjepang/waker-fn",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Convert closures into wakers"
},
{
"name": "want",
"version": "0.3.0",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/seanmonstar/want",
"license": "MIT",
"license_file": null,
"description": "Detect when another Future wants a result."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "wasi",
"version": "0.9.0+wasi-snapshot-preview1",
"authors": "The Cranelift Project Developers",
"repository": "https://github.com/bytecodealliance/wasi",
"license": "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
"license_file": null,
"description": "Experimental WASI API bindings for Rust"
},
{
"name": "wasi",
"version": "0.11.0+wasi-snapshot-preview1",
"authors": "The Cranelift Project Developers",
"repository": "https://github.com/bytecodealliance/wasi",
"license": "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
"license_file": null,
"description": "Experimental WASI API bindings for Rust"
},
{
"name": "wasm-bindgen",
"version": "0.2.84",
"authors": "The wasm-bindgen Developers",
"repository": "https://github.com/rustwasm/wasm-bindgen",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Easy support for interacting between JS and Rust."
},
{
"name": "wasm-bindgen-backend",
"version": "0.2.84",
"authors": "The wasm-bindgen Developers",
"repository": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/backend",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Backend code generation of the wasm-bindgen tool"
},
{
"name": "wasm-bindgen-futures",
"version": "0.4.34",
"authors": "The wasm-bindgen Developers",
"repository": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/futures",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Bridging the gap between Rust Futures and JavaScript Promises"
},
{
"name": "wasm-bindgen-macro",
"version": "0.2.84",
"authors": "The wasm-bindgen Developers",
"repository": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/macro",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Definition of the `#[wasm_bindgen]` attribute, an internal dependency"
},
{
"name": "wasm-bindgen-macro-support",
"version": "0.2.84",
"authors": "The wasm-bindgen Developers",
"repository": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/macro-support",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "The part of the implementation of the `#[wasm_bindgen]` attribute that is not in the shared backend crate"
},
{
"name": "wasm-bindgen-shared",
"version": "0.2.84",
"authors": "The wasm-bindgen Developers",
"repository": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/shared",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Shared support between wasm-bindgen and wasm-bindgen cli, an internal dependency."
},
{
"name": "wasm-streams",
"version": "0.2.3",
"authors": "Mattias Buelens <mattias@buelens.com>",
"repository": "https://github.com/MattiasBuelens/wasm-streams/",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Bridging between web streams and Rust streams using WebAssembly"
},
{
"name": "web-sys",
"version": "0.3.61",
"authors": "The wasm-bindgen Developers",
"repository": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/web-sys",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Bindings for all Web APIs, a procedurally generated crate from WebIDL"
},
{
"name": "webpki",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"version": "0.22.0",
"authors": "Brian Smith <brian@briansmith.org>",
"repository": "https://github.com/briansmith/webpki",
"license": null,
"license_file": "LICENSE",
"description": "Web PKI X.509 Certificate Verification."
},
{
"name": "webpki-roots",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"version": "0.22.6",
"authors": "Joseph Birr-Pixton <jpixton@gmail.com>",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"repository": "https://github.com/rustls/webpki-roots",
"license": "MPL-2.0",
"license_file": null,
"description": "Mozilla's CA root certificates for use with webpki"
},
{
"name": "which",
"version": "4.4.0",
"authors": "Harry Fei <tiziyuanfang@gmail.com>",
"repository": "https://github.com/harryfei/which-rs.git",
"license": "MIT",
"license_file": null,
"description": "A Rust equivalent of Unix command \"which\". Locate installed executable in cross platforms."
},
{
"name": "winapi",
"version": "0.3.9",
"authors": "Peter Atashian <retep998@gmail.com>",
"repository": "https://github.com/retep998/winapi-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Raw FFI bindings for all of Windows API."
},
{
"name": "winapi-i686-pc-windows-gnu",
"version": "0.4.0",
"authors": "Peter Atashian <retep998@gmail.com>",
"repository": "https://github.com/retep998/winapi-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import libraries for the i686-pc-windows-gnu target. Please don't use this crate directly, depend on winapi instead."
},
{
"name": "winapi-util",
"version": "0.1.5",
"authors": "Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/BurntSushi/winapi-util",
2020-12-15 08:10:25 +01:00
"license": "MIT OR Unlicense",
"license_file": null,
"description": "A dumping ground for high level safe wrappers over winapi."
},
{
"name": "winapi-x86_64-pc-windows-gnu",
"version": "0.4.0",
"authors": "Peter Atashian <retep998@gmail.com>",
"repository": "https://github.com/retep998/winapi-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import libraries for the x86_64-pc-windows-gnu target. Please don't use this crate directly, depend on winapi instead."
},
{
"name": "windows",
"version": "0.48.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Rust for Windows"
},
{
"name": "windows-sys",
"version": "0.42.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Rust for Windows"
},
{
"name": "windows-sys",
"version": "0.45.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Rust for Windows"
},
{
"name": "windows-targets",
"version": "0.42.2",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import libs for Windows"
},
{
"name": "windows-targets",
"version": "0.48.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import libs for Windows"
},
{
"name": "windows_aarch64_gnullvm",
"version": "0.42.2",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_aarch64_gnullvm",
"version": "0.48.0",
"authors": "Microsoft",
2022-09-24 04:39:21 +02:00
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_aarch64_msvc",
"version": "0.42.2",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_aarch64_msvc",
"version": "0.48.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_i686_gnu",
"version": "0.42.2",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_i686_gnu",
"version": "0.48.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_i686_msvc",
"version": "0.42.2",
"authors": "Microsoft",
2022-09-24 04:39:21 +02:00
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_i686_msvc",
"version": "0.48.0",
"authors": "Microsoft",
2022-09-24 04:39:21 +02:00
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_x86_64_gnu",
"version": "0.42.2",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_x86_64_gnu",
"version": "0.48.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_x86_64_gnullvm",
"version": "0.42.2",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_x86_64_gnullvm",
"version": "0.48.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_x86_64_msvc",
"version": "0.42.2",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_x86_64_msvc",
"version": "0.48.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "winnow",
"version": "0.4.1",
"authors": null,
"repository": "https://github.com/winnow-rs/winnow",
"license": "MIT",
"license_file": null,
"description": "A byte-oriented, zero-copy, parser combinators library"
},
{
"name": "winreg",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"version": "0.10.1",
"authors": "Igor Shaula <gentoo90@gmail.com>",
"repository": "https://github.com/gentoo90/winreg-rs",
"license": "MIT",
"license_file": null,
"description": "Rust bindings to MS Windows Registry API"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "wiremock",
"version": "0.5.17",
"authors": "Luca Palmieri <rust@lpalmieri.com>",
"repository": "https://github.com/LukeMathWalker/wiremock-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "HTTP mocking to test Rust applications."
},
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
{
"name": "workspace-hack",
"version": "0.1.0",
"authors": null,
"repository": null,
"license": null,
"license_file": null,
"description": "workspace-hack package, managed by hakari"
},
{
"name": "zip",
"version": "0.6.4",
"authors": "Mathijs van de Nes <git@mathijs.vd-nes.nl>|Marli Frost <marli@frost.red>|Ryan Levick <ryan.levick@gmail.com>",
"repository": "https://github.com/zip-rs/zip.git",
"license": "MIT",
"license_file": null,
"description": "Library to support the reading and writing of zip files."
Backups (#1685) * Add zstd dep * Implement backend backup with zstd * Implement backup thinning * Write backup meta * Use new file ending anki21b * Asynchronously backup on collection close in Rust * Revert "Add zstd dep" This reverts commit 3fcb2141d2be15f907269d13275c41971431385c. * Add zstd again * Take backup col path from col struct * Fix formatting * Implement backup restoring on backend * Normalize restored media file names * Refactor `extract_legacy_data()` A bit cumbersome due to borrowing rules. * Refactor * Make thinning calendar-based and gradual * Consider last kept backups of previous stages * Import full apkgs and colpkgs with backend * Expose new backup settings * Test `BackupThinner` and make it deterministic * Mark backup_path when closing optional * Delete leaky timer * Add progress updates for restoring media * Write restored collection to tempfile first * Do collection compression in the background thread This has us currently storing an uncompressed and compressed copy of the collection in memory (not ideal), but means the collection can be closed without waiting for compression to complete. On a large collection, this takes a close and reopen from about 0.55s to about 0.07s. The old backup code for comparison: about 0.35s for compression off, about 8.5s for zip compression. * Use multithreading in zstd compression On my system, this reduces the compression time of a large collection from about 0.55s to 0.08s. * Stream compressed collection data into zip file * Tweak backup explanation + Fix incorrect tab order for ignore accents option * Decouple restoring backup and full import In the first case, no profile is opened, unless the new collection succeeds to load. In the second case, either the old collection is reloaded or the new one is loaded. * Fix number gap in Progress message * Don't revert backup when media fails but report it * Tweak error flow * Remove native BackupLimits enum * Fix type annotation * Add thinning test for whole year * Satisfy linter * Await async backup to finish * Move restart disclaimer out of backup tab Should be visible regardless of the current tab. * Write restored collection in chunks * Refactor * Write media in chunks and refactor * Log error if removing file fails * join_backup_task -> await_backup_completion * Refactor backup.rs * Refactor backup meta and collection extraction * Fix wrong error being returned * Call sync_all() on new collection * Add ImportError * Store logger in Backend, instead of creating one on demand init_backend() accepts a Logger rather than a log file, to allow other callers to customize the logger if they wish. In the future we may want to explore using the tracing crate as an alternative; it's a bit more ergonomic, as a logger doesn't need to be passed around, and it plays more nicely with async code. * Sync file contents prior to rename; sync folder after rename. * Limit backup creation to once per 30 min * Use zstd::stream::copy_decode * Make importing abortable * Don't revert if backup media is aborted * Set throttle implicitly * Change force flag to minimum_backup_interval * Don't attempt to open folders on Windows * Join last backup thread before starting new one Also refactor. * Disable auto sync and backup when restoring again * Force backup on full download * Include the reason why a media file import failed, and the file path - Introduce a FileIoError that contains a string representation of the underlying I/O error, and an associated path. There are a few places in the code where we're currently manually including the filename in a custom error message, and this is a step towards a more consistent approach (but we may be better served with a more general approach in the future similar to Anyhow's .context()) - Move the error message into importing.ftl, as it's a bit neater when error messages live in the same file as the rest of the messages associated with some functionality. * Fix importing of media files * Minor wording tweaks * Save an allocation I18n strings with replacements are already strings, so we can skip the extra allocation. Not that it matters here at all. * Terminate import if file missing from archive If a third-party tool is creating invalid archives, the user should know about it. This should be rare, so I did not attempt to make it translatable. * Skip multithreaded compression on small collections Co-authored-by: Damien Elmes <gpg@ankiweb.net>
2022-03-07 06:11:31 +01:00
},
{
"name": "zstd",
2022-09-24 04:39:21 +02:00
"version": "0.11.2+zstd.1.5.2",
Backups (#1685) * Add zstd dep * Implement backend backup with zstd * Implement backup thinning * Write backup meta * Use new file ending anki21b * Asynchronously backup on collection close in Rust * Revert "Add zstd dep" This reverts commit 3fcb2141d2be15f907269d13275c41971431385c. * Add zstd again * Take backup col path from col struct * Fix formatting * Implement backup restoring on backend * Normalize restored media file names * Refactor `extract_legacy_data()` A bit cumbersome due to borrowing rules. * Refactor * Make thinning calendar-based and gradual * Consider last kept backups of previous stages * Import full apkgs and colpkgs with backend * Expose new backup settings * Test `BackupThinner` and make it deterministic * Mark backup_path when closing optional * Delete leaky timer * Add progress updates for restoring media * Write restored collection to tempfile first * Do collection compression in the background thread This has us currently storing an uncompressed and compressed copy of the collection in memory (not ideal), but means the collection can be closed without waiting for compression to complete. On a large collection, this takes a close and reopen from about 0.55s to about 0.07s. The old backup code for comparison: about 0.35s for compression off, about 8.5s for zip compression. * Use multithreading in zstd compression On my system, this reduces the compression time of a large collection from about 0.55s to 0.08s. * Stream compressed collection data into zip file * Tweak backup explanation + Fix incorrect tab order for ignore accents option * Decouple restoring backup and full import In the first case, no profile is opened, unless the new collection succeeds to load. In the second case, either the old collection is reloaded or the new one is loaded. * Fix number gap in Progress message * Don't revert backup when media fails but report it * Tweak error flow * Remove native BackupLimits enum * Fix type annotation * Add thinning test for whole year * Satisfy linter * Await async backup to finish * Move restart disclaimer out of backup tab Should be visible regardless of the current tab. * Write restored collection in chunks * Refactor * Write media in chunks and refactor * Log error if removing file fails * join_backup_task -> await_backup_completion * Refactor backup.rs * Refactor backup meta and collection extraction * Fix wrong error being returned * Call sync_all() on new collection * Add ImportError * Store logger in Backend, instead of creating one on demand init_backend() accepts a Logger rather than a log file, to allow other callers to customize the logger if they wish. In the future we may want to explore using the tracing crate as an alternative; it's a bit more ergonomic, as a logger doesn't need to be passed around, and it plays more nicely with async code. * Sync file contents prior to rename; sync folder after rename. * Limit backup creation to once per 30 min * Use zstd::stream::copy_decode * Make importing abortable * Don't revert if backup media is aborted * Set throttle implicitly * Change force flag to minimum_backup_interval * Don't attempt to open folders on Windows * Join last backup thread before starting new one Also refactor. * Disable auto sync and backup when restoring again * Force backup on full download * Include the reason why a media file import failed, and the file path - Introduce a FileIoError that contains a string representation of the underlying I/O error, and an associated path. There are a few places in the code where we're currently manually including the filename in a custom error message, and this is a step towards a more consistent approach (but we may be better served with a more general approach in the future similar to Anyhow's .context()) - Move the error message into importing.ftl, as it's a bit neater when error messages live in the same file as the rest of the messages associated with some functionality. * Fix importing of media files * Minor wording tweaks * Save an allocation I18n strings with replacements are already strings, so we can skip the extra allocation. Not that it matters here at all. * Terminate import if file missing from archive If a third-party tool is creating invalid archives, the user should know about it. This should be rare, so I did not attempt to make it translatable. * Skip multithreaded compression on small collections Co-authored-by: Damien Elmes <gpg@ankiweb.net>
2022-03-07 06:11:31 +01:00
"authors": "Alexandre Bury <alexandre.bury@gmail.com>",
"repository": "https://github.com/gyscos/zstd-rs",
"license": "MIT",
"license_file": null,
"description": "Binding for the zstd compression library."
},
{
"name": "zstd",
"version": "0.12.3+zstd.1.5.2",
"authors": "Alexandre Bury <alexandre.bury@gmail.com>",
"repository": "https://github.com/gyscos/zstd-rs",
"license": "MIT",
"license_file": null,
"description": "Binding for the zstd compression library."
},
Backups (#1685) * Add zstd dep * Implement backend backup with zstd * Implement backup thinning * Write backup meta * Use new file ending anki21b * Asynchronously backup on collection close in Rust * Revert "Add zstd dep" This reverts commit 3fcb2141d2be15f907269d13275c41971431385c. * Add zstd again * Take backup col path from col struct * Fix formatting * Implement backup restoring on backend * Normalize restored media file names * Refactor `extract_legacy_data()` A bit cumbersome due to borrowing rules. * Refactor * Make thinning calendar-based and gradual * Consider last kept backups of previous stages * Import full apkgs and colpkgs with backend * Expose new backup settings * Test `BackupThinner` and make it deterministic * Mark backup_path when closing optional * Delete leaky timer * Add progress updates for restoring media * Write restored collection to tempfile first * Do collection compression in the background thread This has us currently storing an uncompressed and compressed copy of the collection in memory (not ideal), but means the collection can be closed without waiting for compression to complete. On a large collection, this takes a close and reopen from about 0.55s to about 0.07s. The old backup code for comparison: about 0.35s for compression off, about 8.5s for zip compression. * Use multithreading in zstd compression On my system, this reduces the compression time of a large collection from about 0.55s to 0.08s. * Stream compressed collection data into zip file * Tweak backup explanation + Fix incorrect tab order for ignore accents option * Decouple restoring backup and full import In the first case, no profile is opened, unless the new collection succeeds to load. In the second case, either the old collection is reloaded or the new one is loaded. * Fix number gap in Progress message * Don't revert backup when media fails but report it * Tweak error flow * Remove native BackupLimits enum * Fix type annotation * Add thinning test for whole year * Satisfy linter * Await async backup to finish * Move restart disclaimer out of backup tab Should be visible regardless of the current tab. * Write restored collection in chunks * Refactor * Write media in chunks and refactor * Log error if removing file fails * join_backup_task -> await_backup_completion * Refactor backup.rs * Refactor backup meta and collection extraction * Fix wrong error being returned * Call sync_all() on new collection * Add ImportError * Store logger in Backend, instead of creating one on demand init_backend() accepts a Logger rather than a log file, to allow other callers to customize the logger if they wish. In the future we may want to explore using the tracing crate as an alternative; it's a bit more ergonomic, as a logger doesn't need to be passed around, and it plays more nicely with async code. * Sync file contents prior to rename; sync folder after rename. * Limit backup creation to once per 30 min * Use zstd::stream::copy_decode * Make importing abortable * Don't revert if backup media is aborted * Set throttle implicitly * Change force flag to minimum_backup_interval * Don't attempt to open folders on Windows * Join last backup thread before starting new one Also refactor. * Disable auto sync and backup when restoring again * Force backup on full download * Include the reason why a media file import failed, and the file path - Introduce a FileIoError that contains a string representation of the underlying I/O error, and an associated path. There are a few places in the code where we're currently manually including the filename in a custom error message, and this is a step towards a more consistent approach (but we may be better served with a more general approach in the future similar to Anyhow's .context()) - Move the error message into importing.ftl, as it's a bit neater when error messages live in the same file as the rest of the messages associated with some functionality. * Fix importing of media files * Minor wording tweaks * Save an allocation I18n strings with replacements are already strings, so we can skip the extra allocation. Not that it matters here at all. * Terminate import if file missing from archive If a third-party tool is creating invalid archives, the user should know about it. This should be rare, so I did not attempt to make it translatable. * Skip multithreaded compression on small collections Co-authored-by: Damien Elmes <gpg@ankiweb.net>
2022-03-07 06:11:31 +01:00
{
"name": "zstd-safe",
2022-09-24 04:39:21 +02:00
"version": "5.0.2+zstd.1.5.2",
Backups (#1685) * Add zstd dep * Implement backend backup with zstd * Implement backup thinning * Write backup meta * Use new file ending anki21b * Asynchronously backup on collection close in Rust * Revert "Add zstd dep" This reverts commit 3fcb2141d2be15f907269d13275c41971431385c. * Add zstd again * Take backup col path from col struct * Fix formatting * Implement backup restoring on backend * Normalize restored media file names * Refactor `extract_legacy_data()` A bit cumbersome due to borrowing rules. * Refactor * Make thinning calendar-based and gradual * Consider last kept backups of previous stages * Import full apkgs and colpkgs with backend * Expose new backup settings * Test `BackupThinner` and make it deterministic * Mark backup_path when closing optional * Delete leaky timer * Add progress updates for restoring media * Write restored collection to tempfile first * Do collection compression in the background thread This has us currently storing an uncompressed and compressed copy of the collection in memory (not ideal), but means the collection can be closed without waiting for compression to complete. On a large collection, this takes a close and reopen from about 0.55s to about 0.07s. The old backup code for comparison: about 0.35s for compression off, about 8.5s for zip compression. * Use multithreading in zstd compression On my system, this reduces the compression time of a large collection from about 0.55s to 0.08s. * Stream compressed collection data into zip file * Tweak backup explanation + Fix incorrect tab order for ignore accents option * Decouple restoring backup and full import In the first case, no profile is opened, unless the new collection succeeds to load. In the second case, either the old collection is reloaded or the new one is loaded. * Fix number gap in Progress message * Don't revert backup when media fails but report it * Tweak error flow * Remove native BackupLimits enum * Fix type annotation * Add thinning test for whole year * Satisfy linter * Await async backup to finish * Move restart disclaimer out of backup tab Should be visible regardless of the current tab. * Write restored collection in chunks * Refactor * Write media in chunks and refactor * Log error if removing file fails * join_backup_task -> await_backup_completion * Refactor backup.rs * Refactor backup meta and collection extraction * Fix wrong error being returned * Call sync_all() on new collection * Add ImportError * Store logger in Backend, instead of creating one on demand init_backend() accepts a Logger rather than a log file, to allow other callers to customize the logger if they wish. In the future we may want to explore using the tracing crate as an alternative; it's a bit more ergonomic, as a logger doesn't need to be passed around, and it plays more nicely with async code. * Sync file contents prior to rename; sync folder after rename. * Limit backup creation to once per 30 min * Use zstd::stream::copy_decode * Make importing abortable * Don't revert if backup media is aborted * Set throttle implicitly * Change force flag to minimum_backup_interval * Don't attempt to open folders on Windows * Join last backup thread before starting new one Also refactor. * Disable auto sync and backup when restoring again * Force backup on full download * Include the reason why a media file import failed, and the file path - Introduce a FileIoError that contains a string representation of the underlying I/O error, and an associated path. There are a few places in the code where we're currently manually including the filename in a custom error message, and this is a step towards a more consistent approach (but we may be better served with a more general approach in the future similar to Anyhow's .context()) - Move the error message into importing.ftl, as it's a bit neater when error messages live in the same file as the rest of the messages associated with some functionality. * Fix importing of media files * Minor wording tweaks * Save an allocation I18n strings with replacements are already strings, so we can skip the extra allocation. Not that it matters here at all. * Terminate import if file missing from archive If a third-party tool is creating invalid archives, the user should know about it. This should be rare, so I did not attempt to make it translatable. * Skip multithreaded compression on small collections Co-authored-by: Damien Elmes <gpg@ankiweb.net>
2022-03-07 06:11:31 +01:00
"authors": "Alexandre Bury <alexandre.bury@gmail.com>",
"repository": "https://github.com/gyscos/zstd-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Safe low-level bindings for the zstd compression library."
},
{
"name": "zstd-safe",
"version": "6.0.4+zstd.1.5.4",
"authors": "Alexandre Bury <alexandre.bury@gmail.com>",
"repository": "https://github.com/gyscos/zstd-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Safe low-level bindings for the zstd compression library."
},
Backups (#1685) * Add zstd dep * Implement backend backup with zstd * Implement backup thinning * Write backup meta * Use new file ending anki21b * Asynchronously backup on collection close in Rust * Revert "Add zstd dep" This reverts commit 3fcb2141d2be15f907269d13275c41971431385c. * Add zstd again * Take backup col path from col struct * Fix formatting * Implement backup restoring on backend * Normalize restored media file names * Refactor `extract_legacy_data()` A bit cumbersome due to borrowing rules. * Refactor * Make thinning calendar-based and gradual * Consider last kept backups of previous stages * Import full apkgs and colpkgs with backend * Expose new backup settings * Test `BackupThinner` and make it deterministic * Mark backup_path when closing optional * Delete leaky timer * Add progress updates for restoring media * Write restored collection to tempfile first * Do collection compression in the background thread This has us currently storing an uncompressed and compressed copy of the collection in memory (not ideal), but means the collection can be closed without waiting for compression to complete. On a large collection, this takes a close and reopen from about 0.55s to about 0.07s. The old backup code for comparison: about 0.35s for compression off, about 8.5s for zip compression. * Use multithreading in zstd compression On my system, this reduces the compression time of a large collection from about 0.55s to 0.08s. * Stream compressed collection data into zip file * Tweak backup explanation + Fix incorrect tab order for ignore accents option * Decouple restoring backup and full import In the first case, no profile is opened, unless the new collection succeeds to load. In the second case, either the old collection is reloaded or the new one is loaded. * Fix number gap in Progress message * Don't revert backup when media fails but report it * Tweak error flow * Remove native BackupLimits enum * Fix type annotation * Add thinning test for whole year * Satisfy linter * Await async backup to finish * Move restart disclaimer out of backup tab Should be visible regardless of the current tab. * Write restored collection in chunks * Refactor * Write media in chunks and refactor * Log error if removing file fails * join_backup_task -> await_backup_completion * Refactor backup.rs * Refactor backup meta and collection extraction * Fix wrong error being returned * Call sync_all() on new collection * Add ImportError * Store logger in Backend, instead of creating one on demand init_backend() accepts a Logger rather than a log file, to allow other callers to customize the logger if they wish. In the future we may want to explore using the tracing crate as an alternative; it's a bit more ergonomic, as a logger doesn't need to be passed around, and it plays more nicely with async code. * Sync file contents prior to rename; sync folder after rename. * Limit backup creation to once per 30 min * Use zstd::stream::copy_decode * Make importing abortable * Don't revert if backup media is aborted * Set throttle implicitly * Change force flag to minimum_backup_interval * Don't attempt to open folders on Windows * Join last backup thread before starting new one Also refactor. * Disable auto sync and backup when restoring again * Force backup on full download * Include the reason why a media file import failed, and the file path - Introduce a FileIoError that contains a string representation of the underlying I/O error, and an associated path. There are a few places in the code where we're currently manually including the filename in a custom error message, and this is a step towards a more consistent approach (but we may be better served with a more general approach in the future similar to Anyhow's .context()) - Move the error message into importing.ftl, as it's a bit neater when error messages live in the same file as the rest of the messages associated with some functionality. * Fix importing of media files * Minor wording tweaks * Save an allocation I18n strings with replacements are already strings, so we can skip the extra allocation. Not that it matters here at all. * Terminate import if file missing from archive If a third-party tool is creating invalid archives, the user should know about it. This should be rare, so I did not attempt to make it translatable. * Skip multithreaded compression on small collections Co-authored-by: Damien Elmes <gpg@ankiweb.net>
2022-03-07 06:11:31 +01:00
{
"name": "zstd-sys",
"version": "2.0.7+zstd.1.5.4",
Backups (#1685) * Add zstd dep * Implement backend backup with zstd * Implement backup thinning * Write backup meta * Use new file ending anki21b * Asynchronously backup on collection close in Rust * Revert "Add zstd dep" This reverts commit 3fcb2141d2be15f907269d13275c41971431385c. * Add zstd again * Take backup col path from col struct * Fix formatting * Implement backup restoring on backend * Normalize restored media file names * Refactor `extract_legacy_data()` A bit cumbersome due to borrowing rules. * Refactor * Make thinning calendar-based and gradual * Consider last kept backups of previous stages * Import full apkgs and colpkgs with backend * Expose new backup settings * Test `BackupThinner` and make it deterministic * Mark backup_path when closing optional * Delete leaky timer * Add progress updates for restoring media * Write restored collection to tempfile first * Do collection compression in the background thread This has us currently storing an uncompressed and compressed copy of the collection in memory (not ideal), but means the collection can be closed without waiting for compression to complete. On a large collection, this takes a close and reopen from about 0.55s to about 0.07s. The old backup code for comparison: about 0.35s for compression off, about 8.5s for zip compression. * Use multithreading in zstd compression On my system, this reduces the compression time of a large collection from about 0.55s to 0.08s. * Stream compressed collection data into zip file * Tweak backup explanation + Fix incorrect tab order for ignore accents option * Decouple restoring backup and full import In the first case, no profile is opened, unless the new collection succeeds to load. In the second case, either the old collection is reloaded or the new one is loaded. * Fix number gap in Progress message * Don't revert backup when media fails but report it * Tweak error flow * Remove native BackupLimits enum * Fix type annotation * Add thinning test for whole year * Satisfy linter * Await async backup to finish * Move restart disclaimer out of backup tab Should be visible regardless of the current tab. * Write restored collection in chunks * Refactor * Write media in chunks and refactor * Log error if removing file fails * join_backup_task -> await_backup_completion * Refactor backup.rs * Refactor backup meta and collection extraction * Fix wrong error being returned * Call sync_all() on new collection * Add ImportError * Store logger in Backend, instead of creating one on demand init_backend() accepts a Logger rather than a log file, to allow other callers to customize the logger if they wish. In the future we may want to explore using the tracing crate as an alternative; it's a bit more ergonomic, as a logger doesn't need to be passed around, and it plays more nicely with async code. * Sync file contents prior to rename; sync folder after rename. * Limit backup creation to once per 30 min * Use zstd::stream::copy_decode * Make importing abortable * Don't revert if backup media is aborted * Set throttle implicitly * Change force flag to minimum_backup_interval * Don't attempt to open folders on Windows * Join last backup thread before starting new one Also refactor. * Disable auto sync and backup when restoring again * Force backup on full download * Include the reason why a media file import failed, and the file path - Introduce a FileIoError that contains a string representation of the underlying I/O error, and an associated path. There are a few places in the code where we're currently manually including the filename in a custom error message, and this is a step towards a more consistent approach (but we may be better served with a more general approach in the future similar to Anyhow's .context()) - Move the error message into importing.ftl, as it's a bit neater when error messages live in the same file as the rest of the messages associated with some functionality. * Fix importing of media files * Minor wording tweaks * Save an allocation I18n strings with replacements are already strings, so we can skip the extra allocation. Not that it matters here at all. * Terminate import if file missing from archive If a third-party tool is creating invalid archives, the user should know about it. This should be rare, so I did not attempt to make it translatable. * Skip multithreaded compression on small collections Co-authored-by: Damien Elmes <gpg@ankiweb.net>
2022-03-07 06:11:31 +01:00
"authors": "Alexandre Bury <alexandre.bury@gmail.com>",
"repository": "https://github.com/gyscos/zstd-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Low-level bindings for the zstd compression library."
}
]