From b8751e7adddf1162317c21d76d0aefa826a7a16f Mon Sep 17 00:00:00 2001 From: J M <2364004+Blu-J@users.noreply.github.com> Date: Wed, 1 Jun 2022 10:22:00 -0600 Subject: [PATCH] Chore/version 0 3 1 0 (#1475) * feat: move over to workspaces * chore: Move to libs * chore:fix(build): Compat * chore: fixing pr --- Makefile | 13 +- backend/Cargo.lock | 244 +- backend/Cargo.toml | 13 +- backend/src/action.rs | 51 +- backend/src/error.rs | 7 + backend/src/id.rs | 133 +- backend/src/install/mod.rs | 1 - backend/src/manager/mod.rs | 2 + backend/src/net/interface.rs | 43 +- backend/src/procedure/js_scripts.rs | 591 +---- .../procedure/js_scripts/ARM_JS_SNAPSHOT.bin | Bin 432192 -> 0 bytes .../src/procedure/js_scripts/JS_SNAPSHOT.bin | Bin 497440 -> 0 bytes backend/src/procedure/mod.rs | 61 +- backend/src/s9pk/manifest.rs | 85 +- backend/src/status/health_check.rs | 35 +- backend/src/util/mod.rs | 137 +- backend/src/version/mod.rs | 7 +- backend/src/version/v0_3_1.rs | 36 + backend/src/volume.rs | 74 +- libs/.gitignore | 10 + libs/Cargo.lock | 2287 +++++++++++++++++ libs/Cargo.toml | 8 + {backend => libs}/build-arm-v8-snapshot.sh | 14 +- libs/build-v8-snapshot.sh | 16 + libs/helpers/Cargo.toml | 11 + libs/helpers/src/lib.rs | 31 + libs/helpers/src/script_dir.rs | 13 + libs/js_engine/Cargo.toml | 17 + .../src/artifacts/ARM_JS_SNAPSHOT.bin | Bin 0 -> 434920 bytes libs/js_engine/src/artifacts/JS_SNAPSHOT.bin | Bin 0 -> 500656 bytes .../js_engine/src/artifacts}/loadModule.js | 12 +- libs/js_engine/src/lib.rs | 550 ++++ libs/models/Cargo.toml | 15 + libs/models/src/action_id.rs | 52 + libs/models/src/health_check_id.rs | 35 + libs/models/src/id.rs | 75 + libs/models/src/id_unchecked.rs | 56 + libs/models/src/interface_id.rs | 47 + libs/models/src/invalid_id.rs | 4 + libs/models/src/lib.rs | 21 + libs/models/src/package_id.rs | 85 + libs/models/src/procedure_name.rs | 50 + libs/models/src/version.rs | 110 + libs/models/src/volume_id.rs | 62 + libs/snapshot-creator/Cargo.toml | 11 + .../snapshot-creator/src/main.rs | 4 +- package-lock.json | 6 + system-images/compat/Cargo.lock | 1287 ++++++---- system-images/compat/Cargo.toml | 1 + 49 files changed, 4586 insertions(+), 1837 deletions(-) delete mode 100644 backend/src/procedure/js_scripts/ARM_JS_SNAPSHOT.bin delete mode 100644 backend/src/procedure/js_scripts/JS_SNAPSHOT.bin create mode 100644 backend/src/version/v0_3_1.rs create mode 100644 libs/.gitignore create mode 100644 libs/Cargo.lock create mode 100644 libs/Cargo.toml rename {backend => libs}/build-arm-v8-snapshot.sh (53%) create mode 100755 libs/build-v8-snapshot.sh create mode 100644 libs/helpers/Cargo.toml create mode 100644 libs/helpers/src/lib.rs create mode 100644 libs/helpers/src/script_dir.rs create mode 100644 libs/js_engine/Cargo.toml create mode 100644 libs/js_engine/src/artifacts/ARM_JS_SNAPSHOT.bin create mode 100644 libs/js_engine/src/artifacts/JS_SNAPSHOT.bin rename {backend/src/procedure/js_scripts => libs/js_engine/src/artifacts}/loadModule.js (89%) create mode 100644 libs/js_engine/src/lib.rs create mode 100644 libs/models/Cargo.toml create mode 100644 libs/models/src/action_id.rs create mode 100644 libs/models/src/health_check_id.rs create mode 100644 libs/models/src/id.rs create mode 100644 libs/models/src/id_unchecked.rs create mode 100644 libs/models/src/interface_id.rs create mode 100644 libs/models/src/invalid_id.rs create mode 100644 libs/models/src/lib.rs create mode 100644 libs/models/src/package_id.rs create mode 100644 libs/models/src/procedure_name.rs create mode 100644 libs/models/src/version.rs create mode 100644 libs/models/src/volume_id.rs create mode 100644 libs/snapshot-creator/Cargo.toml rename backend/src/bin/build-js-snapshots.rs => libs/snapshot-creator/src/main.rs (74%) create mode 100644 package-lock.json diff --git a/Makefile b/Makefile index 214e2782d..a4649fb74 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ EMBASSY_BINS := backend/target/aarch64-unknown-linux-gnu/release/embassyd backend/target/aarch64-unknown-linux-gnu/release/embassy-init backend/target/aarch64-unknown-linux-gnu/release/embassy-cli backend/target/aarch64-unknown-linux-gnu/release/embassy-sdk EMBASSY_UIS := frontend/dist/ui frontend/dist/setup-wizard frontend/dist/diagnostic-ui EMBASSY_SRC := raspios.img product_key.txt $(EMBASSY_BINS) backend/embassyd.service backend/embassy-init.service $(EMBASSY_UIS) $(shell find build) -EMBASSY_V8_SNAPSHOTS := backend/src/procedure/js_scripts/ARM_JS_SNAPSHOT.bin +EMBASSY_V8_SNAPSHOTS := libs/js_engine/src/artifacts/ARM_JS_SNAPSHOT.bin COMPAT_SRC := $(shell find system-images/compat/src) UTILS_SRC := $(shell find system-images/utils/Dockerfile) BACKEND_SRC := $(shell find backend/src) $(shell find patch-db/*/src) $(shell find rpc-toolkit/*/src) backend/Cargo.toml backend/Cargo.lock @@ -29,6 +29,10 @@ clean: rm -rf patch-db/client/node_modules rm -rf patch-db/client/dist + rm libs/js_engine/src/artifacts/ARM_JS_SNAPSHOT.bin + rm libs/js_engine/src/artifacts/JS_SNAPSHOT.bin + touch libs/snapshot-creator/Cargo.toml + eos.img: $(EMBASSY_SRC) system-images/compat/compat.tar system-images/utils/utils.tar $(EMBASSY_V8_SNAPSHOTS) ! test -f eos.img || rm eos.img if [ "$(NO_KEY)" = "1" ]; then NO_KEY=1 ./build/make-image.sh; else ./build/make-image.sh; fi @@ -51,10 +55,11 @@ product_key.txt: if [ "$(KEY)" != "" ]; then $(shell which echo) -n "$(KEY)" > product_key.txt; fi echo >> product_key.txt -$(EMBASSY_V8_SNAPSHOTS): $(BACKEND_SRC) $(EMBASSY_BINS) - cd backend && ./build-arm-v8-snapshot.sh +$(EMBASSY_V8_SNAPSHOTS): libs/snapshot-creator/Cargo.toml + cd libs/ && ./build-v8-snapshot.sh + cd libs/ && ./build-arm-v8-snapshot.sh -$(EMBASSY_BINS): $(BACKEND_SRC) +$(EMBASSY_BINS): $(BACKEND_SRC) $(EMBASSY_V8_SNAPSHOTS) cd backend && ./build-prod.sh frontend/node_modules: frontend/package.json diff --git a/backend/Cargo.lock b/backend/Cargo.lock index ec02392e7..93341c430 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -347,7 +347,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "thiserror", - "tokio 1.18.2", + "tokio 1.15.0", "tokio-util 0.6.10", "url", "winapi", @@ -806,16 +806,15 @@ dependencies = [ [[package]] name = "deno_ast" -version = "0.14.1" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0691d08faa4f1fd9898ecfbe82c32623f89969e92e7b97b5119a18399609d25" +checksum = "a2989afff97ba7da10f186e9a45e946b4ef943b9d4babd2ee7b4b24cc9906b69" dependencies = [ "anyhow", "base64 0.13.0", "data-url", + "dprint-swc-ext", "serde", - "swc_atoms", - "swc_common", "swc_ecmascript", "text_lines", "url", @@ -823,9 +822,9 @@ dependencies = [ [[package]] name = "deno_core" -version = "0.135.0" +version = "0.136.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cd837520179a6f8063fe542b98dacec14b44ce647990be476b6eca8e6125e5" +checksum = "07ced67ffe84c64aee6e84e40558835752b6f12807f84d15da8f5954e2b670c5" dependencies = [ "anyhow", "deno_ops", @@ -846,9 +845,9 @@ dependencies = [ [[package]] name = "deno_ops" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ab6a5a7c3d5b9fbd43064996bbe61799db5e0bfb0f46672b2f85c0192d15a9" +checksum = "05520711837dd592d2861319ea3cf2dfd81e39bb92e41758ee9172f3623daebd" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.39", @@ -944,6 +943,21 @@ version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" +[[package]] +name = "dprint-swc-ext" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3df529037ff02f1c43ae8c6cce54d9ad85546ff89cb5c1988f56130c16e16a48" +dependencies = [ + "bumpalo", + "num-bigint", + "rustc-hash", + "swc_atoms", + "swc_common", + "swc_ecmascript", + "text_lines", +] + [[package]] name = "ed25519" version = "1.5.2" @@ -994,8 +1008,6 @@ dependencies = [ "clap", "color-eyre", "cookie_store", - "deno_ast", - "deno_core", "digest 0.9.0", "divrem", "ed25519-dalek", @@ -1003,6 +1015,7 @@ dependencies = [ "fd-lock-rs", "futures", "git-version", + "helpers", "hex", "hmac", "http", @@ -1012,10 +1025,12 @@ dependencies = [ "indexmap", "isocountry", "itertools 0.10.3", + "js_engine", "jsonpath_lib", "lazy_static", "libc", "log", + "models", "nix 0.23.1", "nom 7.1.1", "num", @@ -1047,7 +1062,7 @@ dependencies = [ "stderrlog", "tar", "thiserror", - "tokio 1.18.2", + "tokio 1.15.0", "tokio-compat-02", "tokio-stream", "tokio-tar", @@ -1449,7 +1464,7 @@ dependencies = [ "http", "indexmap", "slab", - "tokio 1.18.2", + "tokio 1.15.0", "tokio-util 0.7.2", "tracing", ] @@ -1502,6 +1517,15 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "helpers" +version = "0.1.0" +dependencies = [ + "models", + "pin-project", + "tokio 1.15.0", +] + [[package]] name = "hermit-abi" version = "0.1.19" @@ -1594,7 +1618,7 @@ dependencies = [ "itoa 1.0.2", "pin-project-lite 0.2.9", "socket2", - "tokio 1.18.2", + "tokio 1.15.0", "tower-service", "tracing", "want", @@ -1609,7 +1633,7 @@ dependencies = [ "bytes 1.1.0", "hyper", "native-tls", - "tokio 1.18.2", + "tokio 1.15.0", "tokio-native-tls", ] @@ -1625,7 +1649,7 @@ dependencies = [ "hyper", "log", "sha-1 0.10.0", - "tokio 1.18.2", + "tokio 1.15.0", "tokio-tungstenite", ] @@ -1639,7 +1663,7 @@ dependencies = [ "hex", "hyper", "pin-project", - "tokio 1.18.2", + "tokio 1.15.0", ] [[package]] @@ -1782,6 +1806,21 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "js_engine" +version = "0.1.0" +dependencies = [ + "dashmap", + "deno_ast", + "deno_core", + "helpers", + "models", + "serde", + "serde_json", + "tokio 1.15.0", + "tracing", +] + [[package]] name = "json-patch" version = "0.2.7-alpha.0" @@ -2064,14 +2103,35 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.3" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713d550d9b44d89174e066b7a6217ae06234c10cb47819a88290d2b353c31799" +checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" dependencies = [ "libc", "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys", + "miow", + "ntapi", + "winapi", +] + +[[package]] +name = "miow" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" +dependencies = [ + "winapi", +] + +[[package]] +name = "models" +version = "0.1.0" +dependencies = [ + "emver", + "patch-db", + "rand 0.7.3", + "serde", + "thiserror", ] [[package]] @@ -2156,6 +2216,15 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "ntapi" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" +dependencies = [ + "winapi", +] + [[package]] name = "num" version = "0.4.0" @@ -2441,7 +2510,7 @@ dependencies = [ "serde_cbor 0.11.1", "serde_json", "thiserror", - "tokio 1.18.2", + "tokio 1.15.0", "tracing", "tracing-error", ] @@ -2946,7 +3015,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "tokio 1.18.2", + "tokio 1.15.0", "tokio-native-tls", "tokio-socks", "tokio-util 0.6.10", @@ -3009,7 +3078,7 @@ dependencies = [ "serde_cbor 0.11.2", "serde_json", "thiserror", - "tokio 1.18.2", + "tokio 1.15.0", "url", "yajrc", ] @@ -3260,9 +3329,9 @@ dependencies = [ [[package]] name = "serde_v8" -version = "0.46.0" +version = "0.47.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7797d56c9575ced9175e22366e5bd4cc8f3d571cd8c75be510f410ab97a54f6" +checksum = "3ca1daa2506c9d62744fff84d3534192f2e1c70cdf3bed95f298d89156c00b06" dependencies = [ "bytes 1.1.0", "derive_more", @@ -3588,7 +3657,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4db708cd3e459078f85f39f96a00960bd841f66ee2a669e90bf36907f5a79aae" dependencies = [ "once_cell", - "tokio 1.18.2", + "tokio 1.15.0", "tokio-rustls", ] @@ -3754,9 +3823,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "0.17.25" +version = "0.18.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "766ad22c1cb8586c038ccba7371a4903a6074b53ee4ba8980a52f502413f120e" +checksum = "e4516bf4969a924bfd1801aed5c4b214687665898c14b7584d227827faff9d6c" dependencies = [ "ahash", "ast_node", @@ -3780,13 +3849,40 @@ dependencies = [ ] [[package]] -name = "swc_ecma_ast" -version = "0.75.0" +name = "swc_config" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72961898fbe56591997e667a1ec6a268383582810351c279a15ec710b6177d33" +checksum = "b8bb05ef56c14b95dd7e62e95960153af811b9a447287f1f6ca59f1337fb83d4" +dependencies = [ + "anyhow", + "indexmap", + "serde", + "serde_json", + "swc_config_macro", +] + +[[package]] +name = "swc_config_macro" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb64bc03d90fd5c90d6ab917bb2b1d7fbd31957df39e31ea24a3f554b4372251" +dependencies = [ + "pmutil", + "proc-macro2 1.0.39", + "quote 1.0.18", + "swc_macros_common", + "syn 1.0.95", +] + +[[package]] +name = "swc_ecma_ast" +version = "0.78.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21f40169fe465e9a93cda5fe397c3afcb69be5ba2f76c4ab22137af6effaebcc" dependencies = [ "is-macro", "num-bigint", + "scoped-tls", "serde", "string_enum", "swc_atoms", @@ -3796,9 +3892,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "0.103.0" +version = "0.108.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ca430d8ea2c8791d1341c4035431c90b87330e39479b4a6dabb4fded124e30" +checksum = "5eec1d30c8f85e8267a8efc66d680aa777902d567c3a05b7dfd42965a4872243" dependencies = [ "bitflags", "memchr", @@ -3828,9 +3924,9 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "0.100.2" +version = "0.104.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "890d967031e3e7330cd7892f27d826b7b4f37c7caa19db85c78a0862e1fe3974" +checksum = "a5fea08aeb2eb1469928ac7ca2d208fe7816871787e4d93e34924495e724bb25" dependencies = [ "either", "enum_kind", @@ -3843,14 +3939,13 @@ dependencies = [ "swc_ecma_ast", "tracing", "typed-arena", - "unicode-id", ] [[package]] name = "swc_ecma_transforms" -version = "0.142.0" +version = "0.154.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f20e5e2d8ab843fa0454e049f73f6d99c444a8c0e2320f77028361ab75e2d18e" +checksum = "2bce21d9e8ff785aaf9b4ac11375d9f5767630fcaf882f72e6af0516224085a6" dependencies = [ "swc_atoms", "swc_common", @@ -3865,13 +3960,14 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.75.0" +version = "0.85.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "404c6ea7ca61ceb2ce1f4ed448d1436a38c31b8c572850f04541c0229c966bbf" +checksum = "528c99be91500ed393e04e5cfc37763b4b68b71bc4f9b54ff0cd21d714920130" dependencies = [ "better_scoped_tls", "once_cell", "phf", + "rustc-hash", "serde", "smallvec", "swc_atoms", @@ -3885,9 +3981,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "0.63.0" +version = "0.73.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "503f2f6bd0f9e6363a93406753bf64675163423774256a267c85a5d9b5b44b08" +checksum = "e74a27c29def9db5ff03db4d3ab3d37701fb6d100951162223b71132908451eb" dependencies = [ "swc_atoms", "swc_common", @@ -3912,9 +4008,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "0.97.0" +version = "0.107.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d08411e517736b0167f3c9784fe9b98cc09308ae12e6072abd2bb2c2236da2" +checksum = "47fc0f3b336764f89adf1899830321c3f5a7e845ede3ad5949eeb7468aa260ab" dependencies = [ "either", "serde", @@ -3931,9 +4027,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "0.104.0" +version = "0.114.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43cda44270dfcc95d61582981baddaf53d96c5233ea7384e81cd6e462816c58e" +checksum = "2fbfcd197ebeb0547b59dee39a164633bcf4fb0edbae886f8046e471e6a10502" dependencies = [ "ahash", "base64 0.13.0", @@ -3946,6 +4042,7 @@ dependencies = [ "string_enum", "swc_atoms", "swc_common", + "swc_config", "swc_ecma_ast", "swc_ecma_parser", "swc_ecma_transforms_base", @@ -3956,9 +4053,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "0.107.0" +version = "0.117.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a09397169ed7ce0751a82cb71655f3a4a1fb00d8863aabd5cca9b46eff3dd5f2" +checksum = "96bf410ffcf91d85dc1f8f1bb969fa2637f9430a6917f2174ad76458c776cb89" dependencies = [ "serde", "swc_atoms", @@ -3972,9 +4069,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "0.79.1" +version = "0.85.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44ee8d60b9977f58214af7102dc30855a6754e742afe6d6e26e5bf13883c7b91" +checksum = "031ac49cf598f00f048fecd87b3bda5e14b86f6ccd561ada7fce461e0a3ea8d1" dependencies = [ "indexmap", "once_cell", @@ -3987,9 +4084,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "0.61.0" +version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5ea00a52ba2b971955c62275696d5c59f3cf0cd06db74a66dec378ec9843c78" +checksum = "f2d3783a0dd1e301ae2945ab1241405f913427f9512ec62756d3d2072f7c21bb" dependencies = [ "num-bigint", "swc_atoms", @@ -4001,9 +4098,9 @@ dependencies = [ [[package]] name = "swc_ecmascript" -version = "0.143.0" +version = "0.157.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebda93aa6422956c184a9eb5fdb0f0f0ff433169fa15e55ef445e5ad0b5e0abe" +checksum = "bd35679e1dc392f776b691b125692d90a7bebd5d23ec96699cfe37d8ae8633b1" dependencies = [ "swc_ecma_ast", "swc_ecma_codegen", @@ -4302,9 +4399,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.18.2" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4903bf0427cf68dddd5aa6a93220756f8be0c34fcfa9f5e6191e103e15a31395" +checksum = "fbbf1c778ec206785635ce8ad57fe52b3009ae9e0c9f574a728f3049d3e55838" dependencies = [ "bytes 1.1.0", "libc", @@ -4312,10 +4409,9 @@ dependencies = [ "mio", "num_cpus", "once_cell", - "parking_lot 0.12.0", + "parking_lot 0.11.2", "pin-project-lite 0.2.9", "signal-hook-registry", - "socket2", "tokio-macros", "winapi", ] @@ -4330,7 +4426,7 @@ dependencies = [ "once_cell", "pin-project-lite 0.2.9", "tokio 0.2.25", - "tokio 1.18.2", + "tokio 1.15.0", "tokio-stream", ] @@ -4352,7 +4448,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" dependencies = [ "native-tls", - "tokio 1.18.2", + "tokio 1.15.0", ] [[package]] @@ -4362,7 +4458,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" dependencies = [ "rustls", - "tokio 1.18.2", + "tokio 1.15.0", "webpki", ] @@ -4375,7 +4471,7 @@ dependencies = [ "either", "futures-util", "thiserror", - "tokio 1.18.2", + "tokio 1.15.0", ] [[package]] @@ -4386,7 +4482,7 @@ checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3" dependencies = [ "futures-core", "pin-project-lite 0.2.9", - "tokio 1.18.2", + "tokio 1.15.0", "tokio-util 0.6.10", ] @@ -4399,7 +4495,7 @@ dependencies = [ "futures-core", "libc", "redox_syscall 0.2.13", - "tokio 1.18.2", + "tokio 1.15.0", "tokio-stream", "xattr", ] @@ -4413,7 +4509,7 @@ dependencies = [ "futures-util", "log", "pin-project", - "tokio 1.18.2", + "tokio 1.15.0", "tungstenite", ] @@ -4428,7 +4524,7 @@ dependencies = [ "futures-sink", "log", "pin-project-lite 0.2.9", - "tokio 1.18.2", + "tokio 1.15.0", ] [[package]] @@ -4441,7 +4537,7 @@ dependencies = [ "futures-core", "futures-sink", "pin-project-lite 0.2.9", - "tokio 1.18.2", + "tokio 1.15.0", "tracing", ] @@ -4471,7 +4567,7 @@ dependencies = [ "serde_derive", "sha2 0.9.9", "sha3", - "tokio 1.18.2", + "tokio 1.15.0", ] [[package]] @@ -4727,9 +4823,9 @@ checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] name = "v8" -version = "0.42.1" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854740dcc66681c3e10d15a1ebe1e0dfed77a7e2e58b97913dd3a111cf4cdb5f" +checksum = "1c87ec36fec9ea2cd5a368ae9d0a662a7c5e8caa8768ec1fcc02bea623681b98" dependencies = [ "bitflags", "fslock", @@ -4799,12 +4895,6 @@ version = "0.10.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - [[package]] name = "wasm-bindgen" version = "0.2.80" diff --git a/backend/Cargo.toml b/backend/Cargo.toml index ec8326ab4..aeb88950e 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -24,10 +24,6 @@ path = "src/lib.rs" name = "embassyd" path = "src/bin/embassyd.rs" -[[bin]] -name = "create-js-snapshots" -path = "src/bin/build-js-snapshots.rs" - [[bin]] name = "embassy-init" path = "src/bin/embassy-init.rs" @@ -43,7 +39,7 @@ path = "src/bin/embassy-cli.rs" [features] avahi = ["avahi-sys"] beta = [] -default = ["avahi", "sound", "metal"] +default = ["avahi", "sound", "metal", "js_engine"] dev = [] metal = [] sound = [] @@ -65,8 +61,6 @@ color-eyre = "0.5" cookie_store = "0.15.0" digest = "0.9.0" divrem = "1.0.0" -deno_core = "0.135.0" -deno_ast = { version = "0.14.1", features = ["transpiling"] } ed25519-dalek = { version = "1.0.1", features = ["serde"] } emver = { version = "0.1.6", features = ["serde"] } fd-lock-rs = "0.1.3" @@ -78,7 +72,7 @@ http = "0.2.5" hyper = "0.14.13" hyper-ws-listener = { git = "https://github.com/Start9Labs/hyper-ws-listener.git", branch = "main" } imbl = "1.0.1" -indexmap = { version = "1.7.0", features = ["serde"] } +indexmap = { version = "1.8.1", features = ["serde"] } isocountry = "0.3.2" itertools = "0.10.1" jsonpath_lib = "0.3.0" @@ -87,8 +81,11 @@ libc = "0.2.103" log = "0.4.14" nix = "0.23.0" nom = "7.0.0" +helpers = {path = "../libs/helpers"} num = "0.4.0" num_enum = "0.5.4" +models = {version = "*", path = "../libs/models"} +js_engine = {path = '../libs/js_engine', optional = true} openssh-keys = "0.5.0" openssl = { version = "0.10.36", features = ["vendored"] } patch-db = { version = "*", path = "../patch-db/patch-db", features = [ diff --git a/backend/src/action.rs b/backend/src/action.rs index 4b9736046..8f00e3f14 100644 --- a/backend/src/action.rs +++ b/backend/src/action.rs @@ -1,6 +1,4 @@ use std::collections::{BTreeMap, BTreeSet}; -use std::path::Path; -use std::str::FromStr; use clap::ArgMatches; use color_eyre::eyre::eyre; @@ -11,7 +9,7 @@ use tracing::instrument; use crate::config::{Config, ConfigSpec}; use crate::context::RpcContext; -use crate::id::{Id, ImageId, InvalidId}; +use crate::id::{ ImageId}; use crate::procedure::{PackageProcedure, ProcedureName}; use crate::s9pk::manifest::PackageId; use crate::util::serde::{display_serializable, parse_stdin_deserializable, IoFormat}; @@ -19,52 +17,7 @@ use crate::util::Version; use crate::volume::Volumes; use crate::{Error, ResultExt}; -#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize)] -pub struct ActionId = String>(Id); -impl FromStr for ActionId { - type Err = InvalidId; - fn from_str(s: &str) -> Result { - Ok(ActionId(Id::try_from(s.to_owned())?)) - } -} -impl From for String { - fn from(value: ActionId) -> Self { - value.0.into() - } -} -impl> AsRef> for ActionId { - fn as_ref(&self) -> &ActionId { - self - } -} -impl> std::fmt::Display for ActionId { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", &self.0) - } -} -impl> AsRef for ActionId { - fn as_ref(&self) -> &str { - self.0.as_ref() - } -} -impl> AsRef for ActionId { - fn as_ref(&self) -> &Path { - self.0.as_ref().as_ref() - } -} -impl<'de, S> Deserialize<'de> for ActionId -where - S: AsRef, - Id: Deserialize<'de>, -{ - fn deserialize(deserializer: D) -> Result - where - D: serde::de::Deserializer<'de>, - { - Ok(ActionId(Deserialize::deserialize(deserializer)?)) - } -} - +pub use models::ActionId; #[derive(Clone, Debug, Default, Deserialize, Serialize)] pub struct Actions(pub BTreeMap); diff --git a/backend/src/error.rs b/backend/src/error.rs index 52cdbf09c..c04a6d988 100644 --- a/backend/src/error.rs +++ b/backend/src/error.rs @@ -1,6 +1,7 @@ use std::fmt::Display; use color_eyre::eyre::eyre; +use models::InvalidId; use patch_db::Revision; use rpc_toolkit::yajrc::RpcError; @@ -144,6 +145,7 @@ pub struct Error { pub kind: ErrorKind, pub revision: Option, } + impl Display for Error { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}: {}", self.kind.as_str(), self.source) @@ -158,6 +160,11 @@ impl Error { } } } +impl From for Error { + fn from(err: InvalidId) -> Self { + Error::new(err, crate::error::ErrorKind::InvalidPackageId) + } +} impl From for Error { fn from(e: std::io::Error) -> Self { Error::new(e, ErrorKind::Filesystem) diff --git a/backend/src/id.rs b/backend/src/id.rs index e14c38fa5..0e1b97ac2 100644 --- a/backend/src/id.rs +++ b/backend/src/id.rs @@ -1,142 +1,13 @@ -use std::borrow::{Borrow, Cow}; use std::fmt::Debug; use std::str::FromStr; -use serde::{Deserialize, Deserializer, Serialize, Serializer}; +use serde::{Deserialize, Deserializer, Serialize}; use crate::util::Version; -use crate::Error; -pub const SYSTEM_ID: Id<&'static str> = Id("x_system"); +pub use models::{Id, InvalidId, IdUnchecked, SYSTEM_ID}; -#[derive(Debug, thiserror::Error)] -#[error("Invalid ID")] -pub struct InvalidId; -impl From for Error { - fn from(err: InvalidId) -> Self { - Error::new(err, crate::error::ErrorKind::InvalidPackageId) - } -} -#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] -pub struct IdUnchecked>(pub S); -impl<'de> Deserialize<'de> for IdUnchecked> { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - struct Visitor; - impl<'de> serde::de::Visitor<'de> for Visitor { - type Value = IdUnchecked>; - fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(formatter, "a valid ID") - } - fn visit_str(self, v: &str) -> Result - where - E: serde::de::Error, - { - Ok(IdUnchecked(Cow::Owned(v.to_owned()))) - } - fn visit_string(self, v: String) -> Result - where - E: serde::de::Error, - { - Ok(IdUnchecked(Cow::Owned(v))) - } - fn visit_borrowed_str(self, v: &'de str) -> Result - where - E: serde::de::Error, - { - Ok(IdUnchecked(Cow::Borrowed(v))) - } - } - deserializer.deserialize_any(Visitor) - } -} -impl<'de> Deserialize<'de> for IdUnchecked { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - Ok(IdUnchecked(String::deserialize(deserializer)?)) - } -} -impl<'de> Deserialize<'de> for IdUnchecked<&'de str> { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - Ok(IdUnchecked(<&'de str>::deserialize(deserializer)?)) - } -} - -#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] -pub struct Id = String>(S); -impl> Id { - pub fn try_from(value: S) -> Result { - if value - .as_ref() - .chars() - .all(|c| c.is_ascii_lowercase() || c == '-') - { - Ok(Id(value)) - } else { - Err(InvalidId) - } - } -} -impl<'a> Id<&'a str> { - pub fn owned(&self) -> Id { - Id(self.0.to_owned()) - } -} -impl From for String { - fn from(value: Id) -> Self { - value.0 - } -} -impl> std::ops::Deref for Id { - type Target = S; - fn deref(&self) -> &Self::Target { - &self.0 - } -} -impl> std::fmt::Display for Id { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", self.0.as_ref()) - } -} -impl> AsRef for Id { - fn as_ref(&self) -> &str { - self.0.as_ref() - } -} -impl> Borrow for Id { - fn borrow(&self) -> &str { - self.0.as_ref() - } -} -impl<'de, S> Deserialize<'de> for Id -where - S: AsRef, - IdUnchecked: Deserialize<'de>, -{ - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - let unchecked: IdUnchecked = Deserialize::deserialize(deserializer)?; - Id::try_from(unchecked.0).map_err(serde::de::Error::custom) - } -} -impl> Serialize for Id { - fn serialize(&self, serializer: Ser) -> Result - where - Ser: Serializer, - { - serializer.serialize_str(self.as_ref()) - } -} #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize)] pub struct ImageId = String>(Id); diff --git a/backend/src/install/mod.rs b/backend/src/install/mod.rs index 919e5a10d..57feccce1 100644 --- a/backend/src/install/mod.rs +++ b/backend/src/install/mod.rs @@ -59,7 +59,6 @@ pub const PKG_ARCHIVE_DIR: &str = "package-data/archive"; pub const PKG_PUBLIC_DIR: &str = "package-data/public"; pub const PKG_DOCKER_DIR: &str = "package-data/docker"; pub const PKG_WASM_DIR: &str = "package-data/wasm"; -pub const PKG_SCRIPT_DIR: &str = "package-data/scripts"; #[command(display(display_serializable))] pub async fn list(#[context] ctx: RpcContext) -> Result, Error> { diff --git a/backend/src/manager/mod.rs b/backend/src/manager/mod.rs index f7c0c0140..29ec33587 100644 --- a/backend/src/manager/mod.rs +++ b/backend/src/manager/mod.rs @@ -393,6 +393,7 @@ impl Manager { let _ = self.shared.on_stop.send(OnStop::Exit); let action = match &self.shared.manifest.main { PackageProcedure::Docker(a) => a, + #[cfg(feature = "js_engine")] PackageProcedure::Script(_) => return Ok(()), }; match self @@ -546,6 +547,7 @@ async fn stop(shared: &ManagerSharedState) -> Result<(), Error> { } let action = match &shared.manifest.main { PackageProcedure::Docker(a) => a, + #[cfg(feature = "js_engine")] PackageProcedure::Script(_) => return Ok(()), }; match shared diff --git a/backend/src/net/interface.rs b/backend/src/net/interface.rs index b53cc5867..522170c1a 100644 --- a/backend/src/net/interface.rs +++ b/backend/src/net/interface.rs @@ -1,5 +1,4 @@ use std::collections::BTreeMap; -use std::path::Path; use color_eyre::eyre::eyre; use futures::TryStreamExt; @@ -16,6 +15,8 @@ use crate::s9pk::manifest::PackageId; use crate::util::serde::Port; use crate::{Error, ResultExt}; +pub use models::InterfaceId; + #[derive(Clone, Debug, Deserialize, Serialize)] #[serde(rename_all = "kebab-case")] pub struct Interfaces(pub BTreeMap); // TODO @@ -113,46 +114,6 @@ impl Interfaces { } } -#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize)] -pub struct InterfaceId = String>(Id); -impl> From> for InterfaceId { - fn from(id: Id) -> Self { - Self(id) - } -} -impl> std::fmt::Display for InterfaceId { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", &self.0) - } -} -impl> std::ops::Deref for InterfaceId { - type Target = S; - fn deref(&self) -> &Self::Target { - &*self.0 - } -} -impl> AsRef for InterfaceId { - fn as_ref(&self) -> &str { - self.0.as_ref() - } -} -impl<'de, S> Deserialize<'de> for InterfaceId -where - S: AsRef, - Id: Deserialize<'de>, -{ - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - Ok(InterfaceId(Deserialize::deserialize(deserializer)?)) - } -} -impl> AsRef for InterfaceId { - fn as_ref(&self) -> &Path { - self.0.as_ref().as_ref() - } -} #[derive(Clone, Debug, Deserialize, Serialize)] #[serde(rename_all = "kebab-case")] diff --git a/backend/src/procedure/js_scripts.rs b/backend/src/procedure/js_scripts.rs index 061aebc3d..e0c382710 100644 --- a/backend/src/procedure/js_scripts.rs +++ b/backend/src/procedure/js_scripts.rs @@ -1,5 +1,6 @@ -use std::{path::PathBuf, time::Duration}; +use std::{path::{PathBuf, Path}, time::Duration}; +use models::VolumeId; use serde::{Deserialize, Serialize}; use tracing::instrument; @@ -7,22 +8,24 @@ use crate::{ context::RpcContext, s9pk::manifest::PackageId, util::Version, volume::Volumes, Error, }; -use self::js_runtime::JsExecutionEnvironment; +use js_engine::{JsExecutionEnvironment, PathForVolumeId}; use super::ProcedureName; -#[derive(Serialize, Deserialize, Debug, Default, Clone)] -pub struct JsCode(String); +pub use js_engine::{JsError}; -#[derive(Debug, Clone, Copy)] -pub enum JsError { - Unknown = 1, - Javascript = 2, - Engine = 3, - BoundryLayerSerDe = 4, - Tokio = 5, - FileSystem = 6, - Timeout = 143, + +impl PathForVolumeId for Volumes { + fn path_for(&self, data_dir: &Path, package_id: &PackageId, version: &Version, volume_id: &VolumeId) -> Option { + + let volume = self.get(volume_id)?; + Some(volume.path_for(data_dir, package_id, version, volume_id)) + } + + fn readonly(&self,volume_id: &VolumeId) -> bool { + self.get(volume_id).map(|x| x.readonly()).unwrap_or(false) + } + } #[derive(Clone, Debug, Deserialize, Serialize)] @@ -50,7 +53,7 @@ impl JsProcedure { directory, pkg_id, pkg_version, - volumes.clone(), + Box::new(volumes.clone()), ) .await? .run_action(name, input); @@ -82,7 +85,7 @@ impl JsProcedure { &ctx.datadir, pkg_id, pkg_version, - volumes.clone(), + Box::new(volumes.clone()), ) .await? .read_only_effects() @@ -100,564 +103,6 @@ impl JsProcedure { } } -mod js_runtime { - use deno_core::anyhow::{anyhow, bail}; - use deno_core::error::AnyError; - use deno_core::resolve_import; - use deno_core::JsRuntime; - use deno_core::ModuleLoader; - use deno_core::ModuleSource; - use deno_core::ModuleSourceFuture; - use deno_core::ModuleSpecifier; - use deno_core::ModuleType; - use deno_core::RuntimeOptions; - use deno_core::Snapshot; - use deno_core::{Extension, OpDecl}; - use serde::{Deserialize, Serialize}; - use serde_json::Value; - use std::sync::Arc; - use std::{path::PathBuf, pin::Pin}; - use tokio::io::AsyncReadExt; - - use crate::s9pk::manifest::PackageId; - use crate::util::Version; - use crate::volume::script_dir; - use crate::volume::Volumes; - - use super::super::ProcedureName; - use super::{JsCode, JsError}; - #[cfg(target_arch = "x86_64")] - const SNAPSHOT_BYTES: &[u8] = include_bytes!("./js_scripts/JS_SNAPSHOT.bin"); - - #[cfg(target_arch = "aarch64")] - const SNAPSHOT_BYTES: &[u8] = include_bytes!("./js_scripts/ARM_JS_SNAPSHOT.bin"); - #[derive(Clone, Deserialize, Serialize)] - struct JsContext { - sandboxed: bool, - datadir: PathBuf, - run_function: String, - version: Version, - package_id: PackageId, - volumes: Arc, - input: Value, - } - - #[derive(Clone, Default)] - struct AnswerState(std::sync::Arc>); - - #[derive(Clone, Debug)] - struct ModsLoader { - code: JsCode, - } - - impl ModuleLoader for ModsLoader { - fn resolve( - &self, - specifier: &str, - referrer: &str, - _is_main: bool, - ) -> Result { - if referrer.contains("embassy") { - bail!("Embassy.js cannot import anything else"); - } - let s = resolve_import(specifier, referrer).unwrap(); - Ok(s) - } - - fn load( - &self, - module_specifier: &ModuleSpecifier, - maybe_referrer: Option, - is_dyn_import: bool, - ) -> Pin> { - let module_specifier = module_specifier.as_str().to_owned(); - let module = match &*module_specifier { - "file:///deno_global.js" => Ok(ModuleSource { - module_url_specified: "file:///deno_global.js".to_string(), - module_url_found: "file:///deno_global.js".to_string(), - code: "const old_deno = Deno; Deno = null; export default old_deno" - .as_bytes() - .to_vec() - .into_boxed_slice(), - module_type: ModuleType::JavaScript, - }), - "file:///loadModule.js" => Ok(ModuleSource { - module_url_specified: "file:///loadModule.js".to_string(), - module_url_found: "file:///loadModule.js".to_string(), - code: include_str!("./js_scripts/loadModule.js") - .as_bytes() - .to_vec() - .into_boxed_slice(), - module_type: ModuleType::JavaScript, - }), - "file:///embassy.js" => Ok(ModuleSource { - module_url_specified: "file:///embassy.js".to_string(), - module_url_found: "file:///embassy.js".to_string(), - code: self.code.0.as_bytes().to_vec().into_boxed_slice(), - module_type: ModuleType::JavaScript, - }), - x => Err(anyhow!("Not allowed to import: {}", x)), - }; - Box::pin(async move { - if is_dyn_import { - bail!("Will not import dynamic"); - } - match &maybe_referrer { - Some(x) if x.as_str() == "file:///embassy.js" => { - bail!("Embassy is not allowed to import") - } - _ => (), - } - module - }) - } - } - pub struct JsExecutionEnvironment { - sandboxed: bool, - base_directory: PathBuf, - module_loader: ModsLoader, - package_id: PackageId, - version: Version, - volumes: Arc, - } - - impl JsExecutionEnvironment { - pub async fn load_from_package( - data_directory: impl AsRef, - package_id: &crate::s9pk::manifest::PackageId, - version: &crate::util::Version, - volumes: Volumes, - ) -> Result { - let data_dir = data_directory.as_ref(); - let base_directory = data_dir; - let js_code = JsCode({ - let file_path = script_dir(data_dir, package_id, version).join("embassy.js"); - let mut file = match tokio::fs::File::open(file_path.clone()).await { - Ok(x) => x, - Err(e) => { - tracing::debug!("path: {:?}", file_path); - tracing::debug!("{:?}", e); - return Err(( - JsError::FileSystem, - format!("The file opening '{:?}' created error: {}", file_path, e), - )); - } - }; - let mut buffer = Default::default(); - if let Err(err) = file.read_to_string(&mut buffer).await { - tracing::debug!("{:?}", err); - return Err(( - JsError::FileSystem, - format!("The file reading created error: {}", err), - )); - }; - buffer - }); - Ok(Self { - base_directory: base_directory.to_owned(), - module_loader: ModsLoader { code: js_code }, - package_id: package_id.clone(), - version: version.clone(), - volumes: Arc::new(volumes), - sandboxed: false, - }) - } - pub fn read_only_effects(mut self) -> Self { - self.sandboxed = true; - self - } - - pub async fn run_action Deserialize<'de>>( - self, - procedure_name: ProcedureName, - input: Option, - ) -> Result { - let input = match serde_json::to_value(input) { - Ok(a) => a, - Err(err) => { - tracing::error!("{}", err); - tracing::debug!("{:?}", err); - return Err(( - JsError::BoundryLayerSerDe, - "Couldn't convert input".to_string(), - )); - } - }; - let safer_handle: crate::util::NonDetachingJoinHandle<_> = - tokio::task::spawn_blocking(move || self.execute(procedure_name, input)).into(); - let output = safer_handle - .await - .map_err(|err| (JsError::Tokio, format!("Tokio gave us the error: {}", err)))??; - match serde_json::from_value(output.clone()) { - Ok(x) => Ok(x), - Err(err) => { - tracing::error!("{}", err); - tracing::debug!("{:?}", err); - return Err(( - JsError::BoundryLayerSerDe, - format!( - "Couldn't convert output = {:#?} to the correct type", - serde_json::to_string_pretty(&output).unwrap_or_default() - ), - )); - } - } - } - fn declarations() -> Vec { - vec![ - fns::read_file::decl(), - fns::write_file::decl(), - fns::remove_file::decl(), - fns::create_dir::decl(), - fns::remove_dir::decl(), - fns::current_function::decl(), - fns::log_trace::decl(), - fns::log_warn::decl(), - fns::log_error::decl(), - fns::log_debug::decl(), - fns::log_info::decl(), - fns::get_context::decl(), - fns::get_input::decl(), - fns::set_value::decl(), - fns::is_sandboxed::decl(), - ] - } - - fn execute( - &self, - procedure_name: ProcedureName, - input: Value, - ) -> Result { - let base_directory = self.base_directory.clone(); - let answer_state = AnswerState::default(); - let ext_answer_state = answer_state.clone(); - let js_ctx = JsContext { - datadir: base_directory, - run_function: procedure_name.js_function_name(), - package_id: self.package_id.clone(), - volumes: self.volumes.clone(), - version: self.version.clone(), - sandboxed: self.sandboxed, - input, - }; - let ext = Extension::builder() - .ops(Self::declarations()) - .state(move |state| { - state.put(ext_answer_state.clone()); - state.put(js_ctx.clone()); - Ok(()) - }) - .build(); - - let loader = std::rc::Rc::new(self.module_loader.clone()); - let runtime_options = RuntimeOptions { - module_loader: Some(loader), - extensions: vec![ext], - startup_snapshot: Some(Snapshot::Static(SNAPSHOT_BYTES)), - ..Default::default() - }; - let mut runtime = JsRuntime::new(runtime_options); - - let future = async move { - let mod_id = runtime - .load_main_module(&"file:///loadModule.js".parse().unwrap(), None) - .await?; - let evaluated = runtime.mod_evaluate(mod_id); - let res = runtime.run_event_loop(false).await; - res?; - evaluated.await??; - Ok::<_, AnyError>(()) - }; - - tokio::runtime::Handle::current() - .block_on(future) - .map_err(|e| { - tracing::debug!("{:?}", e); - (JsError::Javascript, format!("{}", e)) - })?; - - let answer = answer_state.0.lock().clone(); - Ok(answer) - } - } - - /// Note: Make sure that we have the assumption that all these methods are callable at any time, and all call restrictions should be in rust - mod fns { - use deno_core::{ - anyhow::{anyhow, bail}, - error::AnyError, - *, - }; - use serde_json::Value; - - use std::{ - convert::TryFrom, - path::{Path, PathBuf}, - }; - - use crate::volume::VolumeId; - - use super::{AnswerState, JsContext}; - - #[op] - async fn read_file( - ctx: JsContext, - volume_id: VolumeId, - path_in: PathBuf, - ) -> Result { - let volume = match ctx.volumes.get(&volume_id) { - Some(a) => a, - None => { - bail!("There is no {} in volumes", volume_id); - } - }; - let volume_path = - volume.path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id); - //get_path_for in volume.rs - let new_file = volume_path.join(path_in); - if !is_subset(&volume_path, &new_file).await? { - bail!( - "Path '{}' has broken away from parent '{}'", - new_file.to_string_lossy(), - volume_path.to_string_lossy(), - ); - } - let answer = tokio::fs::read_to_string(new_file).await?; - Ok(answer) - } - #[op] - async fn write_file( - ctx: JsContext, - volume_id: VolumeId, - path_in: PathBuf, - write: String, - ) -> Result<(), AnyError> { - if ctx.sandboxed { - bail!("Cannot write in sandbox mode"); - } - let volume = match ctx.volumes.get(&volume_id) { - Some(a) => a, - None => { - bail!("There is no {} in volumes", volume_id); - } - }; - if volume.readonly() { - bail!("Volume {} is readonly", volume_id); - } - let volume_path = - volume.path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id); - - let new_file = volume_path.join(path_in); - let parent_new_file = new_file - .parent() - .ok_or_else(|| anyhow!("Expecting that file is not root"))?; - // With the volume check - if !is_subset(&volume_path, &parent_new_file).await? { - bail!( - "Path '{}' has broken away from parent '{}'", - new_file.to_string_lossy(), - volume_path.to_string_lossy(), - ); - } - tokio::fs::write(new_file, write).await?; - Ok(()) - } - #[op] - async fn remove_file( - ctx: JsContext, - volume_id: VolumeId, - path_in: PathBuf, - ) -> Result<(), AnyError> { - if ctx.sandboxed { - bail!("Cannot write in sandbox mode"); - } - let volume = match ctx.volumes.get(&volume_id) { - Some(a) => a, - None => { - bail!("There is no {} in volumes", volume_id); - } - }; - if volume.readonly() { - bail!("Volume {} is readonly", volume_id); - } - let volume_path = - volume.path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id); - let new_file = volume_path.join(path_in); - // With the volume check - if !is_subset(&volume_path, &new_file).await? { - bail!( - "Path '{}' has broken away from parent '{}'", - new_file.to_string_lossy(), - volume_path.to_string_lossy(), - ); - } - tokio::fs::remove_file(new_file).await?; - Ok(()) - } - #[op] - async fn remove_dir( - ctx: JsContext, - volume_id: VolumeId, - path_in: PathBuf, - ) -> Result<(), AnyError> { - if ctx.sandboxed { - bail!("Cannot write in sandbox mode"); - } - let volume = match ctx.volumes.get(&volume_id) { - Some(a) => a, - None => { - bail!("There is no {} in volumes", volume_id); - } - }; - if volume.readonly() { - bail!("Volume {} is readonly", volume_id); - } - let volume_path = - volume.path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id); - let new_file = volume_path.join(path_in); - // With the volume check - if !is_subset(&volume_path, &new_file).await? { - bail!( - "Path '{}' has broken away from parent '{}'", - new_file.to_string_lossy(), - volume_path.to_string_lossy(), - ); - } - tokio::fs::remove_dir_all(new_file).await?; - Ok(()) - } - #[op] - async fn create_dir( - ctx: JsContext, - volume_id: VolumeId, - path_in: PathBuf, - ) -> Result<(), AnyError> { - if ctx.sandboxed { - bail!("Cannot write in sandbox mode"); - } - let volume = match ctx.volumes.get(&volume_id) { - Some(a) => a, - None => { - bail!("There is no {} in volumes", volume_id); - } - }; - if volume.readonly() { - bail!("Volume {} is readonly", volume_id); - } - let volume_path = - volume.path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id); - let new_file = volume_path.join(path_in); - let parent_new_file = new_file - .parent() - .ok_or_else(|| anyhow!("Expecting that file is not root"))?; - // With the volume check - if !is_subset(&volume_path, &parent_new_file).await? { - bail!( - "Path '{}' has broken away from parent '{}'", - new_file.to_string_lossy(), - volume_path.to_string_lossy(), - ); - } - tokio::fs::create_dir_all(new_file).await?; - Ok(()) - } - - #[op] - fn current_function(state: &mut OpState) -> Result { - let ctx = state.borrow::(); - Ok(ctx.run_function.clone()) - } - - #[op] - fn log_trace(state: &mut OpState, input: String) -> Result<(), AnyError> { - let ctx = state.borrow::(); - tracing::trace!( - package_id = tracing::field::display(&ctx.package_id), - run_function = tracing::field::display(&ctx.run_function), - "{}", - input - ); - Ok(()) - } - #[op] - fn log_warn(state: &mut OpState, input: String) -> Result<(), AnyError> { - let ctx = state.borrow::(); - tracing::warn!( - package_id = tracing::field::display(&ctx.package_id), - run_function = tracing::field::display(&ctx.run_function), - "{}", - input - ); - Ok(()) - } - #[op] - fn log_error(state: &mut OpState, input: String) -> Result<(), AnyError> { - let ctx = state.borrow::(); - tracing::error!( - package_id = tracing::field::display(&ctx.package_id), - run_function = tracing::field::display(&ctx.run_function), - "{}", - input - ); - Ok(()) - } - #[op] - fn log_debug(state: &mut OpState, input: String) -> Result<(), AnyError> { - let ctx = state.borrow::(); - tracing::debug!( - package_id = tracing::field::display(&ctx.package_id), - run_function = tracing::field::display(&ctx.run_function), - "{}", - input - ); - Ok(()) - } - #[op] - fn log_info(state: &mut OpState, input: String) -> Result<(), AnyError> { - let ctx = state.borrow::(); - tracing::info!( - package_id = tracing::field::display(&ctx.package_id), - run_function = tracing::field::display(&ctx.run_function), - "{}", - input - ); - Ok(()) - } - - #[op] - fn get_context(state: &mut OpState) -> Result { - let ctx = state.borrow::(); - Ok(ctx.clone()) - } - #[op] - fn get_input(state: &mut OpState) -> Result { - let ctx = state.borrow::(); - Ok(ctx.input.clone()) - } - #[op] - fn set_value(state: &mut OpState, value: Value) -> Result<(), AnyError> { - let mut answer = state.borrow::().0.lock(); - *answer = value; - Ok(()) - } - #[op] - fn is_sandboxed(state: &mut OpState) -> Result { - let ctx = state.borrow::(); - Ok(ctx.sandboxed) - } - - /// We need to make sure that during the file accessing, we don't reach beyond our scope of control - async fn is_subset( - parent: impl AsRef, - child: impl AsRef, - ) -> Result { - let child = tokio::fs::canonicalize(child).await?; - let parent = tokio::fs::canonicalize(parent).await?; - Ok(child.starts_with(parent)) - } - } -} - #[tokio::test] async fn js_action_execute() { let js_action = JsProcedure {}; diff --git a/backend/src/procedure/js_scripts/ARM_JS_SNAPSHOT.bin b/backend/src/procedure/js_scripts/ARM_JS_SNAPSHOT.bin deleted file mode 100644 index a927ac09394db7dc50c1edf7f8612cacab14c46d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 432192 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

Kq6v05!C?g=(FAXD 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

)YKgYEC)T+y%Ee%0IqOYO)DG__?!#fU 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 diff --git a/backend/src/procedure/mod.rs b/backend/src/procedure/mod.rs index c42e21744..7e007976d 100644 --- a/backend/src/procedure/mod.rs +++ b/backend/src/procedure/mod.rs @@ -6,66 +6,17 @@ use serde::{Deserialize, Serialize}; use tracing::instrument; use self::docker::DockerProcedure; -use self::js_scripts::JsProcedure; -use crate::action::ActionId; use crate::context::RpcContext; use crate::id::ImageId; use crate::s9pk::manifest::PackageId; -use crate::status::health_check::HealthCheckId; use crate::util::Version; use crate::volume::Volumes; use crate::Error; pub mod docker; +#[cfg(feature = "js_engine")] pub mod js_scripts; - -#[derive(Debug, Clone)] -pub enum ProcedureName { - Main, // Usually just run container - CreateBackup, - RestoreBackup, - GetConfig, - SetConfig, - Migration, - Properties, - Check(PackageId), - AutoConfig(PackageId), - Health(HealthCheckId), - Action(ActionId), -} - -impl ProcedureName { - fn docker_name(&self) -> Option { - match self { - ProcedureName::Main => None, - ProcedureName::CreateBackup => Some("CreateBackup".to_string()), - ProcedureName::RestoreBackup => Some("RestoreBackup".to_string()), - ProcedureName::GetConfig => Some("GetConfig".to_string()), - ProcedureName::SetConfig => Some("SetConfig".to_string()), - ProcedureName::Migration => Some("Migration".to_string()), - ProcedureName::Properties => Some(format!("Properties-{}", rand::random::())), - ProcedureName::Health(id) => Some(format!("{}Health", id)), - ProcedureName::Action(id) => Some(format!("{}Action", id)), - ProcedureName::Check(_) => None, - ProcedureName::AutoConfig(_) => None, - } - } - fn js_function_name(&self) -> String { - match self { - ProcedureName::Main => "/main".to_string(), - ProcedureName::CreateBackup => "/createBackup".to_string(), - ProcedureName::RestoreBackup => "/restoreBackup".to_string(), - ProcedureName::GetConfig => "/getConfig".to_string(), - ProcedureName::SetConfig => "/setConfig".to_string(), - ProcedureName::Migration => "/migration".to_string(), - ProcedureName::Properties => "/properties".to_string(), - ProcedureName::Health(id) => format!("/health/{}", id), - ProcedureName::Action(id) => format!("/action/{}", id), - ProcedureName::Check(id) => format!("/dependencies/{}/check", id), - ProcedureName::AutoConfig(id) => format!("/dependencies/{}/autoConfigure", id), - } - } -} +pub use models::ProcedureName; // TODO: create RPC endpoint that looks up the appropriate action and calls `execute` @@ -74,11 +25,14 @@ impl ProcedureName { #[serde(tag = "type")] pub enum PackageProcedure { Docker(DockerProcedure), - Script(JsProcedure), + + #[cfg(feature = "js_engine")] + Script(js_scripts::JsProcedure), } impl PackageProcedure { pub fn is_script(&self) -> bool { match self { + #[cfg(feature = "js_engine")] Self::Script(_) => true, _ => false, } @@ -93,6 +47,7 @@ impl PackageProcedure { match self { PackageProcedure::Docker(action) => action.validate(volumes, image_ids, expected_io), + #[cfg(feature = "js_engine")] PackageProcedure::Script(action) => action.validate(volumes), } } @@ -124,6 +79,7 @@ impl PackageProcedure { ) .await } + #[cfg(feature = "js_engine")] PackageProcedure::Script(procedure) => { procedure .execute( @@ -156,6 +112,7 @@ impl PackageProcedure { .sandboxed(ctx, pkg_id, pkg_version, volumes, input, timeout) .await } + #[cfg(feature = "js_engine")] PackageProcedure::Script(procedure) => { procedure .sandboxed(ctx, pkg_id, pkg_version, volumes, input, timeout, name) diff --git a/backend/src/s9pk/manifest.rs b/backend/src/s9pk/manifest.rs index a38db50bc..f51219846 100644 --- a/backend/src/s9pk/manifest.rs +++ b/backend/src/s9pk/manifest.rs @@ -1,17 +1,14 @@ -use std::borrow::Borrow; use std::path::{Path, PathBuf}; -use std::str::FromStr; use color_eyre::eyre::eyre; use patch_db::HasModel; -use serde::{Deserialize, Serialize, Serializer}; +use serde::{Deserialize, Serialize}; use url::Url; use crate::action::Actions; use crate::backup::BackupActions; use crate::config::action::ConfigActions; use crate::dependencies::Dependencies; -use crate::id::{Id, InvalidId, SYSTEM_ID}; use crate::migration::Migrations; use crate::net::interface::Interfaces; use crate::procedure::PackageProcedure; @@ -21,85 +18,7 @@ use crate::version::{Current, VersionT}; use crate::volume::Volumes; use crate::Error; -pub const SYSTEM_PACKAGE_ID: PackageId<&'static str> = PackageId(SYSTEM_ID); - -#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] -pub struct PackageId = String>(Id); -impl<'a> PackageId<&'a str> { - pub fn owned(&self) -> PackageId { - PackageId(self.0.owned()) - } -} -impl FromStr for PackageId { - type Err = InvalidId; - fn from_str(s: &str) -> Result { - Ok(PackageId(Id::try_from(s.to_owned())?)) - } -} -impl From for String { - fn from(value: PackageId) -> Self { - value.0.into() - } -} -impl> From> for PackageId { - fn from(id: Id) -> Self { - PackageId(id) - } -} -impl> std::ops::Deref for PackageId { - type Target = S; - fn deref(&self) -> &Self::Target { - &*self.0 - } -} -impl> AsRef> for PackageId { - fn as_ref(&self) -> &PackageId { - self - } -} -impl> std::fmt::Display for PackageId { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", &self.0) - } -} -impl> AsRef for PackageId { - fn as_ref(&self) -> &str { - self.0.as_ref() - } -} -impl> Borrow for PackageId { - fn borrow(&self) -> &str { - self.0.as_ref() - } -} -impl> AsRef for PackageId { - fn as_ref(&self) -> &Path { - self.0.as_ref().as_ref() - } -} -impl<'de, S> Deserialize<'de> for PackageId -where - S: AsRef, - Id: Deserialize<'de>, -{ - fn deserialize(deserializer: D) -> Result - where - D: serde::de::Deserializer<'de>, - { - Ok(PackageId(Deserialize::deserialize(deserializer)?)) - } -} -impl Serialize for PackageId -where - S: AsRef, -{ - fn serialize(&self, serializer: Ser) -> Result - where - Ser: Serializer, - { - Serialize::serialize(&self.0, serializer) - } -} +pub use models::{PackageId, SYSTEM_PACKAGE_ID}; fn current_version() -> Version { Current::new().semver().into() diff --git a/backend/src/status/health_check.rs b/backend/src/status/health_check.rs index 2c9e088c9..526e03cef 100644 --- a/backend/src/status/health_check.rs +++ b/backend/src/status/health_check.rs @@ -1,12 +1,11 @@ use std::collections::{BTreeMap, BTreeSet}; -use std::path::Path; use chrono::{DateTime, Utc}; -use serde::{Deserialize, Deserializer, Serialize}; +use serde::{Deserialize, Serialize}; use tracing::instrument; use crate::context::RpcContext; -use crate::id::{Id, ImageId}; +use crate::id::{ ImageId}; use crate::procedure::{NoOutput, PackageProcedure, ProcedureName}; use crate::s9pk::manifest::PackageId; use crate::util::serde::Duration; @@ -14,35 +13,7 @@ use crate::util::Version; use crate::volume::Volumes; use crate::{Error, ResultExt}; -#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize)] -pub struct HealthCheckId = String>(Id); -impl> std::fmt::Display for HealthCheckId { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", &self.0) - } -} -impl> AsRef for HealthCheckId { - fn as_ref(&self) -> &str { - self.0.as_ref() - } -} -impl<'de, S> Deserialize<'de> for HealthCheckId -where - S: AsRef, - Id: Deserialize<'de>, -{ - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - Ok(HealthCheckId(Deserialize::deserialize(deserializer)?)) - } -} -impl> AsRef for HealthCheckId { - fn as_ref(&self) -> &Path { - self.0.as_ref().as_ref() - } -} +pub use models::HealthCheckId; #[derive(Clone, Debug, Deserialize, Serialize)] pub struct HealthChecks(pub BTreeMap); diff --git a/backend/src/util/mod.rs b/backend/src/util/mod.rs index 1644ed564..c3fcb7bef 100644 --- a/backend/src/util/mod.rs +++ b/backend/src/util/mod.rs @@ -1,16 +1,12 @@ use std::collections::BTreeMap; use std::future::Future; -use std::hash::{Hash, Hasher}; use std::marker::PhantomData; -use std::ops::Deref; use std::path::{Path, PathBuf}; use std::pin::Pin; use std::process::Stdio; -use std::str::FromStr; use std::sync::Arc; use std::task::{Context, Poll}; -use ::serde::{Deserialize, Deserializer, Serialize, Serializer}; use async_trait::async_trait; use clap::ArgMatches; use color_eyre::eyre::{self, eyre}; @@ -19,16 +15,17 @@ use fd_lock_rs::FdLock; use futures::future::BoxFuture; use futures::FutureExt; use lazy_static::lazy_static; -use patch_db::{HasModel, Model}; use pin_project::pin_project; use tokio::fs::File; use tokio::sync::{Mutex, OwnedMutexGuard, RwLock}; -use tokio::task::{JoinError, JoinHandle}; use tracing::instrument; use crate::shutdown::Shutdown; use crate::{Error, ResultExt as _}; + +pub use helpers::NonDetachingJoinHandle; +pub use models::Version; pub mod io; pub mod logger; pub mod serde; @@ -125,110 +122,6 @@ impl SNone { } impl SOption for SNone {} -#[derive(Debug, Clone)] -pub struct Version { - version: emver::Version, - string: String, -} -impl Version { - pub fn as_str(&self) -> &str { - self.string.as_str() - } - pub fn into_version(self) -> emver::Version { - self.version - } -} -impl std::fmt::Display for Version { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", self.string) - } -} -impl std::str::FromStr for Version { - type Err = ::Err; - fn from_str(s: &str) -> Result { - Ok(Version { - string: s.to_owned(), - version: s.parse()?, - }) - } -} -impl From for Version { - fn from(v: emver::Version) -> Self { - Version { - string: v.to_string(), - version: v, - } - } -} -impl From for emver::Version { - fn from(v: Version) -> Self { - v.version - } -} -impl Default for Version { - fn default() -> Self { - Self::from(emver::Version::default()) - } -} -impl Deref for Version { - type Target = emver::Version; - fn deref(&self) -> &Self::Target { - &self.version - } -} -impl AsRef for Version { - fn as_ref(&self) -> &emver::Version { - &self.version - } -} -impl AsRef for Version { - fn as_ref(&self) -> &str { - self.as_str() - } -} -impl PartialEq for Version { - fn eq(&self, other: &Version) -> bool { - self.version.eq(&other.version) - } -} -impl Eq for Version {} -impl PartialOrd for Version { - fn partial_cmp(&self, other: &Self) -> Option { - self.version.partial_cmp(&other.version) - } -} -impl Ord for Version { - fn cmp(&self, other: &Self) -> std::cmp::Ordering { - self.version.cmp(&other.version) - } -} -impl Hash for Version { - fn hash(&self, state: &mut H) { - self.version.hash(state) - } -} -impl<'de> Deserialize<'de> for Version { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - let string = String::deserialize(deserializer)?; - let version = emver::Version::from_str(&string).map_err(::serde::de::Error::custom)?; - Ok(Self { string, version }) - } -} -impl Serialize for Version { - fn serialize(&self, serializer: S) -> Result - where - S: Serializer, - { - self.string.serialize(serializer) - } -} -impl HasModel for Version { - type Model = Model; -} - #[async_trait] pub trait AsyncFileExt: Sized { async fn maybe_open + Send + Sync>(path: P) -> std::io::Result>; @@ -358,30 +251,6 @@ where } } -#[pin_project::pin_project(PinnedDrop)] -pub struct NonDetachingJoinHandle(#[pin] JoinHandle); -impl From> for NonDetachingJoinHandle { - fn from(t: JoinHandle) -> Self { - NonDetachingJoinHandle(t) - } -} -#[pin_project::pinned_drop] -impl PinnedDrop for NonDetachingJoinHandle { - fn drop(self: std::pin::Pin<&mut Self>) { - let this = self.project(); - this.0.into_ref().get_ref().abort() - } -} -impl Future for NonDetachingJoinHandle { - type Output = Result; - fn poll( - self: std::pin::Pin<&mut Self>, - cx: &mut std::task::Context<'_>, - ) -> std::task::Poll { - let this = self.project(); - this.0.poll(cx) - } -} pub struct GeneralGuard T, T = ()>(Option); impl T, T> GeneralGuard { diff --git a/backend/src/version/mod.rs b/backend/src/version/mod.rs index 7021f6c1a..bb980ac31 100644 --- a/backend/src/version/mod.rs +++ b/backend/src/version/mod.rs @@ -11,8 +11,9 @@ mod v0_3_0; mod v0_3_0_1; mod v0_3_0_2; mod v0_3_0_3; +mod v0_3_1; -pub type Current = v0_3_0_3::Version; +pub type Current = v0_3_1::Version; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone)] #[serde(untagged)] @@ -21,6 +22,7 @@ enum Version { V0_3_0_1(Wrapper), V0_3_0_2(Wrapper), V0_3_0_3(Wrapper), + V0_3_1(Wrapper), Other(emver::Version), } @@ -40,6 +42,7 @@ impl Version { Version::V0_3_0_1(Wrapper(x)) => x.semver(), Version::V0_3_0_2(Wrapper(x)) => x.semver(), Version::V0_3_0_3(Wrapper(x)) => x.semver(), + Version::V0_3_1(Wrapper(x)) => x.semver(), Version::Other(x) => x.clone(), } } @@ -154,6 +157,7 @@ pub async fn init( Version::V0_3_0_1(v) => v.0.migrate_to(&Current::new(), db, receipts).await?, Version::V0_3_0_2(v) => v.0.migrate_to(&Current::new(), db, receipts).await?, Version::V0_3_0_3(v) => v.0.migrate_to(&Current::new(), db, receipts).await?, + Version::V0_3_1(v) => v.0.migrate_to(&Current::new(), db, receipts).await?, Version::Other(_) => { return Err(Error::new( eyre!("Cannot downgrade"), @@ -189,6 +193,7 @@ mod tests { Just(Version::V0_3_0_1(Wrapper(v0_3_0_1::Version::new()))), Just(Version::V0_3_0_2(Wrapper(v0_3_0_2::Version::new()))), Just(Version::V0_3_0_3(Wrapper(v0_3_0_3::Version::new()))), + Just(Version::V0_3_1(Wrapper(v0_3_1::Version::new()))), em_version().prop_map(Version::Other), ] } diff --git a/backend/src/version/v0_3_1.rs b/backend/src/version/v0_3_1.rs new file mode 100644 index 000000000..1855d7d08 --- /dev/null +++ b/backend/src/version/v0_3_1.rs @@ -0,0 +1,36 @@ +use emver::VersionRange; + +use super::*; + +const V0_3_1: emver::Version = emver::Version::new(0, 3, 1, 0); +lazy_static::lazy_static! { + pub static ref V0_3_1_COMPAT: VersionRange = VersionRange::Conj( + Box::new(VersionRange::Anchor( + emver::GTE, + emver::Version::new(0, 3, 0, 0), + )), + Box::new(VersionRange::Anchor(emver::LTE, Current::new().semver())), + ); +} + +#[derive(Clone, Debug)] +pub struct Version; +#[async_trait] +impl VersionT for Version { + type Previous = v0_3_0_3::Version; + fn new() -> Self { + Version + } + fn semver(&self) -> emver::Version { + V0_3_1 + } + fn compat(&self) -> &'static VersionRange { + &*V0_3_1_COMPAT + } + async fn up(&self, _db: &mut Db) -> Result<(), Error> { + Ok(()) + } + async fn down(&self, _db: &mut Db) -> Result<(), Error> { + Ok(()) + } +} diff --git a/backend/src/volume.rs b/backend/src/volume.rs index 733500794..890106185 100644 --- a/backend/src/volume.rs +++ b/backend/src/volume.rs @@ -1,79 +1,23 @@ -use std::borrow::Borrow; use std::collections::BTreeMap; use std::ops::{Deref, DerefMut}; use std::path::{Path, PathBuf}; use patch_db::{HasModel, Map, MapModel}; -use serde::{Deserialize, Deserializer, Serialize}; +use serde::{Deserialize, Serialize}; use tracing::instrument; use crate::context::RpcContext; -use crate::id::{Id, IdUnchecked}; -use crate::install::PKG_SCRIPT_DIR; use crate::net::interface::{InterfaceId, Interfaces}; use crate::net::NetController; use crate::s9pk::manifest::PackageId; use crate::util::Version; use crate::{Error, ResultExt}; -pub const PKG_VOLUME_DIR: &'static str = "package-data/volumes"; -pub const BACKUP_DIR: &'static str = "/media/embassy-os/backups"; +pub use helpers::script_dir; +pub use models::VolumeId; -#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] -pub enum VolumeId = String> { - Backup, - Custom(Id), -} -impl> std::fmt::Display for VolumeId { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - VolumeId::Backup => write!(f, "BACKUP"), - VolumeId::Custom(id) => write!(f, "{}", id), - } - } -} -impl> AsRef for VolumeId { - fn as_ref(&self) -> &str { - match self { - VolumeId::Backup => "BACKUP", - VolumeId::Custom(id) => id.as_ref(), - } - } -} -impl> Borrow for VolumeId { - fn borrow(&self) -> &str { - self.as_ref() - } -} -impl> AsRef for VolumeId { - fn as_ref(&self) -> &Path { - AsRef::::as_ref(self).as_ref() - } -} -impl<'de, S> Deserialize<'de> for VolumeId -where - S: AsRef, - IdUnchecked: Deserialize<'de>, -{ - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - let unchecked: IdUnchecked = Deserialize::deserialize(deserializer)?; - Ok(match unchecked.0.as_ref() { - "BACKUP" => VolumeId::Backup, - _ => VolumeId::Custom(Id::try_from(unchecked.0).map_err(serde::de::Error::custom)?), - }) - } -} -impl> Serialize for VolumeId { - fn serialize(&self, serializer: Ser) -> Result - where - Ser: serde::Serializer, - { - serializer.serialize_str(self.as_ref()) - } -} +pub const PKG_VOLUME_DIR: &str = "package-data/volumes"; +pub const BACKUP_DIR: &str = "/media/embassy-os/backups"; #[derive(Clone, Debug, Default, Deserialize, Serialize)] pub struct Volumes(BTreeMap); @@ -166,14 +110,6 @@ pub fn asset_dir>(datadir: P, pkg_id: &PackageId, version: &Versi .join(version.as_str()) } -pub fn script_dir>(datadir: P, pkg_id: &PackageId, version: &Version) -> PathBuf { - datadir - .as_ref() - .join(&*PKG_SCRIPT_DIR) - .join(pkg_id) - .join(version.as_str()) -} - pub fn backup_dir(pkg_id: &PackageId) -> PathBuf { Path::new(BACKUP_DIR).join(pkg_id).join("data") } diff --git a/libs/.gitignore b/libs/.gitignore new file mode 100644 index 000000000..d4898965a --- /dev/null +++ b/libs/.gitignore @@ -0,0 +1,10 @@ +/target +**/*.rs.bk +.DS_Store +.vscode +secrets.db +*.s9pk +*.sqlite3 +.env +.editorconfig +proptest-regressions/* diff --git a/libs/Cargo.lock b/libs/Cargo.lock new file mode 100644 index 000000000..93c6d34b0 --- /dev/null +++ b/libs/Cargo.lock @@ -0,0 +1,2287 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom 0.2.6", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +dependencies = [ + "memchr", +] + +[[package]] +name = "anyhow" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "ast_node" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc4c00309ed1c8104732df4a5fa9acc3b796b6f8531dfbd5ce0078c86f997244" +dependencies = [ + "darling", + "pmutil", + "proc-macro2", + "quote", + "swc_macros_common", + "syn", +] + +[[package]] +name = "async-trait" +version = "0.1.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base64" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" + +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + +[[package]] +name = "better_scoped_tls" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b73e8ecdec39e98aa3b19e8cd0b8ed8f77ccb86a6b0b2dc7cd86d105438a2123" +dependencies = [ + "scoped-tls", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitmaps" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +dependencies = [ + "typenum", +] + +[[package]] +name = "bitvec" +version = "0.19.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55f93d0ef3363c364d5976646a38f04cf67cfe1d4c8d160cdea02cab2c116b33" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "block-buffer" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bumpalo" +version = "3.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" + +[[package]] +name = "bytes" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" + +[[package]] +name = "cc" +version = "1.0.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "cpufeatures" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "darling" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "dashmap" +version = "5.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "391b56fbd302e585b7a9494fb70e40949567b1cf9003a8e4a6041a1687c26573" +dependencies = [ + "cfg-if", + "hashbrown 0.12.1", + "lock_api", +] + +[[package]] +name = "data-url" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a30bfce702bcfa94e906ef82421f2c0e61c076ad76030c16ee5d2e9a32fe193" +dependencies = [ + "matches", +] + +[[package]] +name = "debug_unreachable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a032eac705ca39214d169f83e3d3da290af06d8d1d344d1baad2fd002dca4b3" +dependencies = [ + "unreachable", +] + +[[package]] +name = "deno_ast" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2989afff97ba7da10f186e9a45e946b4ef943b9d4babd2ee7b4b24cc9906b69" +dependencies = [ + "anyhow", + "base64 0.13.0", + "data-url", + "dprint-swc-ext", + "serde", + "swc_ecmascript", + "text_lines", + "url", +] + +[[package]] +name = "deno_core" +version = "0.136.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07ced67ffe84c64aee6e84e40558835752b6f12807f84d15da8f5954e2b670c5" +dependencies = [ + "anyhow", + "deno_ops", + "futures", + "indexmap", + "libc", + "log", + "once_cell", + "parking_lot 0.12.0", + "pin-project", + "serde", + "serde_json", + "serde_v8", + "sourcemap", + "url", + "v8", +] + +[[package]] +name = "deno_ops" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05520711837dd592d2861319ea3cf2dfd81e39bb92e41758ee9172f3623daebd" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version 0.4.0", + "syn", +] + +[[package]] +name = "digest" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dprint-swc-ext" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3df529037ff02f1c43ae8c6cce54d9ad85546ff89cb5c1988f56130c16e16a48" +dependencies = [ + "bumpalo", + "num-bigint", + "rustc-hash", + "swc_atoms", + "swc_common", + "swc_ecmascript", + "text_lines", +] + +[[package]] +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + +[[package]] +name = "emver" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed260c4d7efaec031b9c4f6c4d3cf136e3df2bbfe50925800236f5e847f28704" +dependencies = [ + "either", + "fp-core", + "nom", + "serde", +] + +[[package]] +name = "enum_kind" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b940da354ae81ef0926c5eaa428207b8f4f091d3956c891dfbd124162bed99" +dependencies = [ + "pmutil", + "proc-macro2", + "swc_macros_common", + "syn", +] + +[[package]] +name = "fd-lock-rs" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a24e88458a5abfcd1cb81622511306f1aea43b900ddb9b34ff5ad8857a7685" +dependencies = [ + "nix 0.19.1", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +dependencies = [ + "matches", + "percent-encoding", +] + +[[package]] +name = "fp-core" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "338a5feb6c7248603dfa3da758da4e99abb65e792a157fe1d657e7c2f5fbcd0b" +dependencies = [ + "itertools", +] + +[[package]] +name = "from_variant" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0951635027ca477be98f8774abd6f0345233439d63f307e47101acb40c7cc63d" +dependencies = [ + "pmutil", + "proc-macro2", + "swc_macros_common", + "syn", +] + +[[package]] +name = "fslock" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57eafdd0c16f57161105ae1b98a1238f97645f2f588438b2949c99a2af9616bf" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "funty" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" + +[[package]] +name = "futures" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" + +[[package]] +name = "futures-executor" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" + +[[package]] +name = "futures-macro" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" + +[[package]] +name = "futures-task" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" + +[[package]] +name = "futures-util" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.10.2+wasi-snapshot-preview1", +] + +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" + +[[package]] +name = "hashbrown" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3" + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "helpers" +version = "0.1.0" +dependencies = [ + "models", + "pin-project", + "tokio", +] + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "if_chain" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" + +[[package]] +name = "imbl" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "543682c9082b25e63d03b5acbd65ad111fd49dd93e70843e5175db4ff81d606b" +dependencies = [ + "bitmaps", + "rand_core 0.6.3", + "rand_xoshiro", + "sized-chunks", + "typenum", + "version_check", +] + +[[package]] +name = "indexmap" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" +dependencies = [ + "autocfg", + "hashbrown 0.11.2", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "is-macro" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94b2c46692aee0d1b3aad44e781ac0f0e7db42ef27adaa0a877b627040019813" +dependencies = [ + "Inflector", + "pmutil", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "itertools" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" + +[[package]] +name = "js_engine" +version = "0.1.0" +dependencies = [ + "dashmap", + "deno_ast", + "deno_core", + "helpers", + "models", + "serde", + "serde_json", + "tokio", + "tracing", +] + +[[package]] +name = "json-patch" +version = "0.2.7-alpha.0" +dependencies = [ + "json-ptr", + "serde", + "serde_json", + "treediff", +] + +[[package]] +name = "json-ptr" +version = "0.1.0" +dependencies = [ + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lexical" +version = "6.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7aefb36fd43fef7003334742cbf77b243fcd36418a1d1bdd480d613a67968f6" +dependencies = [ + "lexical-core 0.8.5", +] + +[[package]] +name = "lexical-core" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe" +dependencies = [ + "arrayvec", + "bitflags", + "cfg-if", + "ryu", + "static_assertions", +] + +[[package]] +name = "lexical-core" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46" +dependencies = [ + "lexical-parse-float", + "lexical-parse-integer", + "lexical-util", + "lexical-write-float", + "lexical-write-integer", +] + +[[package]] +name = "lexical-parse-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" +dependencies = [ + "lexical-parse-integer", + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-parse-integer" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "125e1f93e5003d4bd89758c2ca2771bfae13632df633cde581efe07c87d354e5" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-util" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc" +dependencies = [ + "static_assertions", +] + +[[package]] +name = "lexical-write-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862" +dependencies = [ + "lexical-util", + "lexical-write-integer", + "static_assertions", +] + +[[package]] +name = "lexical-write-integer" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "libc" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" + +[[package]] +name = "lock_api" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "matches" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mio" +version = "0.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" +dependencies = [ + "libc", + "log", + "miow", + "ntapi", + "winapi", +] + +[[package]] +name = "miow" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" +dependencies = [ + "winapi", +] + +[[package]] +name = "models" +version = "0.1.0" +dependencies = [ + "emver", + "patch-db", + "rand 0.7.3", + "serde", + "thiserror", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" + +[[package]] +name = "nix" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ccba0cfe4fdf15982d1674c69b1fd80bad427d293849982668dfe454bd61f2" +dependencies = [ + "bitflags", + "cc", + "cfg-if", + "libc", +] + +[[package]] +name = "nix" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" +dependencies = [ + "bitflags", + "cc", + "cfg-if", + "libc", + "memoffset", +] + +[[package]] +name = "nom" +version = "6.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7413f999671bd4745a7b624bd370a569fb6bc574b23c83a3c5ed2e453f3d5e2" +dependencies = [ + "bitvec", + "funty", + "lexical-core 0.7.6", + "memchr", + "version_check", +] + +[[package]] +name = "ntapi" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" +dependencies = [ + "winapi", +] + +[[package]] +name = "num-bigint" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", + "serde", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "once_cell" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.5", +] + +[[package]] +name = "parking_lot" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.3", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-sys", +] + +[[package]] +name = "patch-db" +version = "0.1.0" +dependencies = [ + "async-trait", + "fd-lock-rs", + "futures", + "imbl", + "json-patch", + "json-ptr", + "lazy_static", + "nix 0.23.1", + "patch-db-macro", + "serde", + "serde_cbor", + "serde_json", + "thiserror", + "tokio", + "tracing", + "tracing-error", +] + +[[package]] +name = "patch-db-macro" +version = "0.1.0" +dependencies = [ + "patch-db-macro-internals", + "proc-macro2", + "syn", +] + +[[package]] +name = "patch-db-macro-internals" +version = "0.1.0" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_macros", + "phf_shared", + "proc-macro-hack", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pmutil" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3894e5d549cccbe44afecf72922f277f603cd4bb0219c8342631ef18fffbe004" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-crate" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +dependencies = [ + "thiserror", + "toml", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" + +[[package]] +name = "proc-macro2" +version = "1.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "941ba9d78d8e2f7ce474c015eea4d9c6d25b6a3327f9832ee29a4de27f91bbb8" + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.3", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.3", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom 0.2.6", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_xoshiro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +dependencies = [ + "rand_core 0.6.3", +] + +[[package]] +name = "redox_syscall" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" +dependencies = [ + "bitflags", +] + +[[package]] +name = "regex" +version = "1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver 1.0.9", +] + +[[package]] +name = "ryu" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" + +[[package]] +name = "scoped-tls" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cb243bdfdb5936c8dc3c45762a19d12ab4550cdc753bc247637d4ec35a040fd" + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.137" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_cbor" +version = "0.11.1" +dependencies = [ + "half", + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.137" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_v8" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ca1daa2506c9d62744fff84d3534192f2e1c70cdf3bed95f298d89156c00b06" +dependencies = [ + "bytes", + "derive_more", + "serde", + "v8", +] + +[[package]] +name = "sha-1" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +dependencies = [ + "libc", +] + +[[package]] +name = "siphasher" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" + +[[package]] +name = "sized-chunks" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" +dependencies = [ + "bitmaps", + "typenum", +] + +[[package]] +name = "slab" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" + +[[package]] +name = "smallvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" + +[[package]] +name = "snapshot-creator" +version = "0.1.0" +dependencies = [ + "dashmap", + "deno_ast", + "deno_core", +] + +[[package]] +name = "sourcemap" +version = "6.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e031f2463ecbdd5f34c950f89f5c1e1032f22c0f8e3dc4bdb2e8b6658cf61eb" +dependencies = [ + "base64 0.11.0", + "if_chain", + "lazy_static", + "regex", + "rustc_version 0.2.3", + "serde", + "serde_json", + "url", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "string_cache" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot 0.12.0", + "phf_shared", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", +] + +[[package]] +name = "string_enum" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f584cc881e9e5f1fd6bf827b0444aa94c30d8fe6378cf241071b5f5700b2871f" +dependencies = [ + "pmutil", + "proc-macro2", + "quote", + "swc_macros_common", + "syn", +] + +[[package]] +name = "strsim" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" + +[[package]] +name = "swc_atoms" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba8735ce37e421749498e038955abc1135eec6a4af0b54a173e55d2e5542d472" +dependencies = [ + "string_cache", + "string_cache_codegen", +] + +[[package]] +name = "swc_common" +version = "0.18.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4516bf4969a924bfd1801aed5c4b214687665898c14b7584d227827faff9d6c" +dependencies = [ + "ahash", + "ast_node", + "better_scoped_tls", + "cfg-if", + "debug_unreachable", + "either", + "from_variant", + "num-bigint", + "once_cell", + "rustc-hash", + "serde", + "siphasher", + "sourcemap", + "string_cache", + "swc_eq_ignore_macros", + "swc_visit", + "tracing", + "unicode-width", + "url", +] + +[[package]] +name = "swc_config" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8bb05ef56c14b95dd7e62e95960153af811b9a447287f1f6ca59f1337fb83d4" +dependencies = [ + "anyhow", + "indexmap", + "serde", + "serde_json", + "swc_config_macro", +] + +[[package]] +name = "swc_config_macro" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb64bc03d90fd5c90d6ab917bb2b1d7fbd31957df39e31ea24a3f554b4372251" +dependencies = [ + "pmutil", + "proc-macro2", + "quote", + "swc_macros_common", + "syn", +] + +[[package]] +name = "swc_ecma_ast" +version = "0.78.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21f40169fe465e9a93cda5fe397c3afcb69be5ba2f76c4ab22137af6effaebcc" +dependencies = [ + "is-macro", + "num-bigint", + "scoped-tls", + "serde", + "string_enum", + "swc_atoms", + "swc_common", + "unicode-id", +] + +[[package]] +name = "swc_ecma_codegen" +version = "0.108.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eec1d30c8f85e8267a8efc66d680aa777902d567c3a05b7dfd42965a4872243" +dependencies = [ + "bitflags", + "memchr", + "num-bigint", + "once_cell", + "rustc-hash", + "sourcemap", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_codegen_macros", + "tracing", +] + +[[package]] +name = "swc_ecma_codegen_macros" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59949619b2ef45eedb6c399d05f2c3c7bc678b5074b3103bb670f9e05bb99042" +dependencies = [ + "pmutil", + "proc-macro2", + "quote", + "swc_macros_common", + "syn", +] + +[[package]] +name = "swc_ecma_parser" +version = "0.104.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5fea08aeb2eb1469928ac7ca2d208fe7816871787e4d93e34924495e724bb25" +dependencies = [ + "either", + "enum_kind", + "lexical", + "num-bigint", + "serde", + "smallvec", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "tracing", + "typed-arena", +] + +[[package]] +name = "swc_ecma_transforms" +version = "0.154.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bce21d9e8ff785aaf9b4ac11375d9f5767630fcaf882f72e6af0516224085a6" +dependencies = [ + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_transforms_base", + "swc_ecma_transforms_proposal", + "swc_ecma_transforms_react", + "swc_ecma_transforms_typescript", + "swc_ecma_utils", + "swc_ecma_visit", +] + +[[package]] +name = "swc_ecma_transforms_base" +version = "0.85.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "528c99be91500ed393e04e5cfc37763b4b68b71bc4f9b54ff0cd21d714920130" +dependencies = [ + "better_scoped_tls", + "once_cell", + "phf", + "rustc-hash", + "serde", + "smallvec", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_parser", + "swc_ecma_utils", + "swc_ecma_visit", + "tracing", +] + +[[package]] +name = "swc_ecma_transforms_classes" +version = "0.73.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e74a27c29def9db5ff03db4d3ab3d37701fb6d100951162223b71132908451eb" +dependencies = [ + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_transforms_base", + "swc_ecma_utils", + "swc_ecma_visit", +] + +[[package]] +name = "swc_ecma_transforms_macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18712e4aab969c6508dff3540ade6358f1e013464aa58b3d30da2ab2d9fcbbed" +dependencies = [ + "pmutil", + "proc-macro2", + "quote", + "swc_macros_common", + "syn", +] + +[[package]] +name = "swc_ecma_transforms_proposal" +version = "0.107.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47fc0f3b336764f89adf1899830321c3f5a7e845ede3ad5949eeb7468aa260ab" +dependencies = [ + "either", + "serde", + "smallvec", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_transforms_base", + "swc_ecma_transforms_classes", + "swc_ecma_transforms_macros", + "swc_ecma_utils", + "swc_ecma_visit", +] + +[[package]] +name = "swc_ecma_transforms_react" +version = "0.114.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fbfcd197ebeb0547b59dee39a164633bcf4fb0edbae886f8046e471e6a10502" +dependencies = [ + "ahash", + "base64 0.13.0", + "dashmap", + "indexmap", + "once_cell", + "regex", + "serde", + "sha-1", + "string_enum", + "swc_atoms", + "swc_common", + "swc_config", + "swc_ecma_ast", + "swc_ecma_parser", + "swc_ecma_transforms_base", + "swc_ecma_transforms_macros", + "swc_ecma_utils", + "swc_ecma_visit", +] + +[[package]] +name = "swc_ecma_transforms_typescript" +version = "0.117.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bf410ffcf91d85dc1f8f1bb969fa2637f9430a6917f2174ad76458c776cb89" +dependencies = [ + "serde", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_transforms_base", + "swc_ecma_transforms_react", + "swc_ecma_utils", + "swc_ecma_visit", +] + +[[package]] +name = "swc_ecma_utils" +version = "0.85.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031ac49cf598f00f048fecd87b3bda5e14b86f6ccd561ada7fce461e0a3ea8d1" +dependencies = [ + "indexmap", + "once_cell", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_visit", + "tracing", +] + +[[package]] +name = "swc_ecma_visit" +version = "0.64.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2d3783a0dd1e301ae2945ab1241405f913427f9512ec62756d3d2072f7c21bb" +dependencies = [ + "num-bigint", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_visit", + "tracing", +] + +[[package]] +name = "swc_ecmascript" +version = "0.157.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd35679e1dc392f776b691b125692d90a7bebd5d23ec96699cfe37d8ae8633b1" +dependencies = [ + "swc_ecma_ast", + "swc_ecma_codegen", + "swc_ecma_parser", + "swc_ecma_transforms", + "swc_ecma_utils", + "swc_ecma_visit", +] + +[[package]] +name = "swc_eq_ignore_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c8f200a2eaed938e7c1a685faaa66e6d42fa9e17da5f62572d3cbc335898f5e" +dependencies = [ + "pmutil", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "swc_macros_common" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5dca3f08d02da4684c3373150f7c045128f81ea00f0c434b1b012bc65a6cce3" +dependencies = [ + "pmutil", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "swc_visit" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5c639379dd2a8a0221fa1e12fafbdd594ba53a0cace6560054da52409dfcc1a" +dependencies = [ + "either", + "swc_visit_macros", +] + +[[package]] +name = "swc_visit_macros" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3b9b72892df873972549838bf84d6c56234c7502148a7e23b5a3da6e0fedfb8" +dependencies = [ + "Inflector", + "pmutil", + "proc-macro2", + "quote", + "swc_macros_common", + "syn", +] + +[[package]] +name = "syn" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbaf6116ab8924f39d52792136fb74fd60a80194cf1b1c6ffa6453eef1c3f942" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "text_lines" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e49e3c53dd04de8b8e8390bc4fab57f6db7af7d33b086fe411803e6351c9f9f9" +dependencies = [ + "serde", +] + +[[package]] +name = "thiserror" +version = "1.0.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "tokio" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbbf1c778ec206785635ce8ad57fe52b3009ae9e0c9f574a728f3049d3e55838" +dependencies = [ + "bytes", + "libc", + "memchr", + "mio", + "num_cpus", + "once_cell", + "parking_lot 0.11.2", + "pin-project-lite", + "signal-hook-registry", + "tokio-macros", + "winapi", +] + +[[package]] +name = "tokio-macros" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "toml" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" +dependencies = [ + "serde", +] + +[[package]] +name = "tracing" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09" +dependencies = [ + "cfg-if", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" +dependencies = [ + "lazy_static", + "valuable", +] + +[[package]] +name = "tracing-error" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4d7c0b83d4a500748fa5879461652b361edf5c9d51ede2a2ac03875ca185e24" +dependencies = [ + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +dependencies = [ + "sharded-slab", + "thread_local", + "tracing-core", +] + +[[package]] +name = "treediff" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" +dependencies = [ + "serde_json", +] + +[[package]] +name = "typed-arena" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0685c84d5d54d1c26f7d3eb96cd41550adb97baed141a761cf335d3d33bcd0ae" + +[[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + +[[package]] +name = "unicode-bidi" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" + +[[package]] +name = "unicode-id" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69fe8d9274f490a36442acb4edfd0c4e473fdfc6a8b5cd32f28a0235761aedbe" + +[[package]] +name = "unicode-ident" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee" + +[[package]] +name = "unicode-normalization" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" + +[[package]] +name = "unicode-width" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" + +[[package]] +name = "unreachable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f2ae5ddb18e1c92664717616dd9549dde73f539f01bd7b77c2edb2446bdff91" +dependencies = [ + "void", +] + +[[package]] +name = "url" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +dependencies = [ + "form_urlencoded", + "idna", + "matches", + "percent-encoding", + "serde", +] + +[[package]] +name = "v8" +version = "0.43.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c87ec36fec9ea2cd5a368ae9d0a662a7c5e8caa8768ec1fcc02bea623681b98" +dependencies = [ + "bitflags", + "fslock", + "lazy_static", + "libc", + "which", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + +[[package]] +name = "which" +version = "4.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae" +dependencies = [ + "either", + "lazy_static", + "libc", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +dependencies = [ + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + +[[package]] +name = "windows_i686_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" + +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" + +[[package]] +name = "wyz" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" diff --git a/libs/Cargo.toml b/libs/Cargo.toml new file mode 100644 index 000000000..f36eaa470 --- /dev/null +++ b/libs/Cargo.toml @@ -0,0 +1,8 @@ +[workspace] + +members = [ + "snapshot-creator", + "models", + "js_engine", + "helpers" +] diff --git a/backend/build-arm-v8-snapshot.sh b/libs/build-arm-v8-snapshot.sh similarity index 53% rename from backend/build-arm-v8-snapshot.sh rename to libs/build-arm-v8-snapshot.sh index caf5f8598..9822c5447 100755 --- a/backend/build-arm-v8-snapshot.sh +++ b/libs/build-arm-v8-snapshot.sh @@ -4,10 +4,18 @@ set -e if [ "$0" != "./build-arm-v8-snapshot.sh" ]; then - >&2 echo "Must be run from backend directory" + >&2 echo "Must be run from backend/workspace directory" exit 1 fi +echo "Building " +cd .. +docker run --rm -it -v "$HOME/.cargo/registry":/root/.cargo/registry -v "$(pwd)":/home/rust/src start9/rust-arm-cross:aarch64 sh -c "(cd libs/ && cargo build -p snapshot-creator --release )" +cd - + echo "Creating Arm v8 Snapshot" -docker run --platform linux/arm64/v8 --mount type=bind,src=$(pwd),dst=/mnt arm64v8/ubuntu:20.04 /bin/sh -c "cd /mnt && /mnt/target/aarch64-unknown-linux-gnu/release/create-js-snapshots" -mv JS_SNAPSHOT.bin src/procedure/js_scripts/ARM_JS_SNAPSHOT.bin \ No newline at end of file +docker run --platform linux/arm64/v8 --mount type=bind,src=$(pwd),dst=/mnt arm64v8/ubuntu:20.04 /bin/sh -c "cd /mnt && /mnt/target/aarch64-unknown-linux-gnu/release/snapshot-creator" +sudo chown ${whoami}:${whoami} JS_SNAPSHOT.bin +sudo chmod 0644 JS_SNAPSHOT.bin + +sudo mv -f JS_SNAPSHOT.bin ./js_engine/src/artifacts/ARM_JS_SNAPSHOT.bin \ No newline at end of file diff --git a/libs/build-v8-snapshot.sh b/libs/build-v8-snapshot.sh new file mode 100755 index 000000000..fb482bc10 --- /dev/null +++ b/libs/build-v8-snapshot.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# Reason for this being is that we need to create a snapshot for the deno runtime. It wants to pull 3 files from build, and during the creation it gets embedded, but for some +# reason during the actual runtime it is looking for them. So this will create a docker in arm that creates the snaphot needed for the arm +set -e + +if [ "$0" != "./build-v8-snapshot.sh" ]; then + >&2 echo "Must be run from backend/workspace directory" + exit 1 +fi + +echo "Creating v8 Snapshot" +cargo run -p snapshot-creator --release +sudo chown ${whoami}:${whoami} JS_SNAPSHOT.bin +sudo chmod 0644 JS_SNAPSHOT.bin + +sudo mv -f JS_SNAPSHOT.bin ./js_engine/src/artifacts/JS_SNAPSHOT.bin \ No newline at end of file diff --git a/libs/helpers/Cargo.toml b/libs/helpers/Cargo.toml new file mode 100644 index 000000000..05f48984e --- /dev/null +++ b/libs/helpers/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "helpers" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +pin-project = "1.0.8" +tokio = { version = "1.15.*", features = ["full"] } +models = {path = "../models"} \ No newline at end of file diff --git a/libs/helpers/src/lib.rs b/libs/helpers/src/lib.rs new file mode 100644 index 000000000..f46aa1f4d --- /dev/null +++ b/libs/helpers/src/lib.rs @@ -0,0 +1,31 @@ +use std::future::Future; + +use tokio::task::{JoinError, JoinHandle}; + +mod script_dir; +pub use script_dir::*; + +#[pin_project::pin_project(PinnedDrop)] +pub struct NonDetachingJoinHandle(#[pin] JoinHandle); +impl From> for NonDetachingJoinHandle { + fn from(t: JoinHandle) -> Self { + NonDetachingJoinHandle(t) + } +} +#[pin_project::pinned_drop] +impl PinnedDrop for NonDetachingJoinHandle { + fn drop(self: std::pin::Pin<&mut Self>) { + let this = self.project(); + this.0.into_ref().get_ref().abort() + } +} +impl Future for NonDetachingJoinHandle { + type Output = Result; + fn poll( + self: std::pin::Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + ) -> std::task::Poll { + let this = self.project(); + this.0.poll(cx) + } +} diff --git a/libs/helpers/src/script_dir.rs b/libs/helpers/src/script_dir.rs new file mode 100644 index 000000000..d90051899 --- /dev/null +++ b/libs/helpers/src/script_dir.rs @@ -0,0 +1,13 @@ +use std::path::{Path, PathBuf}; + +use models::{PackageId, Version}; + +pub const PKG_SCRIPT_DIR: &str = "package-data/scripts"; + +pub fn script_dir>(datadir: P, pkg_id: &PackageId, version: &Version) -> PathBuf { + datadir + .as_ref() + .join(&*PKG_SCRIPT_DIR) + .join(pkg_id) + .join(version.as_str()) +} diff --git a/libs/js_engine/Cargo.toml b/libs/js_engine/Cargo.toml new file mode 100644 index 000000000..6b47cb824 --- /dev/null +++ b/libs/js_engine/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "js_engine" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +dashmap = "5.1.0" +deno_core = "0.136.0" +deno_ast = {version="0.15.0", features = ["transpiling"]} +models = {path = "../models"} +helpers = {path = "../helpers"} +serde = { version = "1.0.*", features = ["derive", "rc"] } +serde_json = "1.0.*" +tokio = { version = "1.*.*", features = ["full"] } +tracing = "0.1" diff --git a/libs/js_engine/src/artifacts/ARM_JS_SNAPSHOT.bin b/libs/js_engine/src/artifacts/ARM_JS_SNAPSHOT.bin new file mode 100644 index 0000000000000000000000000000000000000000..7b6059a9054a755e4246fcbeb9da48775a639ee5 GIT binary patch literal 434920 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ℑn+$c$CxuKDZ?C8;T4k(XyiX3X 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%0A}0AEyF} zkUQ{zfpXWmKJlu35OEOLcc@=+{{iCiLm($Tu3^dcMd6M?>HhxxUj4nvD`scUUE_M$ z29_Bgu8pY9j#~ORmItvP#8Z>jKVp$mw`3y&&)q(~P1($IG9w{bAcL}r1A98Oar2Vz2TerKIM_KFVGAZe_q=_%N^`Hv()XScmTwzi{3gGT9vn7)4( zcVYw6Rh~~&s7x~b1)}M&XgRDvu`0xd5H7oz6k17j_p+>^Mb$qc2=3zlLz+2slY~Vhj%~g4>fd=Y$YM-hBI#MySjG zhc3TxI-XYeKd)8z-*+n%8@$@6<%QkKb+aE_tMF&L6&e_HwGp)$ctKozP#}zq0uehL zDmeFFL;KwkBVi-@capYE;XbSv!+3I$kEGKZ7{gJu9tOqeVQn+uNkLh;E*sD#QNo{5 z@b^y_Q6lA!y7`XZp3#+(|Np`N_b`B{8(;P=aSvH;34jfRaZ840rwjSG&*2+K~47d)Z41|$Ba9qlR^+@NR zN)_Iz6ImilcH%I06xoS1571Ar6Y2!dS%XfeKmEZo0bb8oA=`-TP^yGLPRB2hybrAK z=oMBhoWD5-4=Gc1B!Pq#mrBZ73H$6Pdue=2@9GFk#3IO~Wmlgfkrli8#ttrP6gcBi z+MJDm;r!(nUqwoV&sY5!%>Xh=B&)1gQ8GKtQ!$V9XRs8 zmt)0gY=Xm2=kci#nhqYZN^$xpcPsP^h{7XD4Vg+aGnMjlqkgdH;5Cfuh?|}2Og5ts z=)}^Lf&Eb5& z;XbymOO*-;f>5wYeP+|{^(*D)C3)=P=mmlc`H6;g(>aeMk>`eq0|buWzSBNV?Z7!$9_Hi%g$T2hMn~E#t6rZX6Diy}cW))h zji_pQ&;d*AjSV4s`kHlP1TSGP*f|2kTHk@J8?*VsP@onDp@mxAaclsMRy-+c%^m2; z!iH5{d?J0DOu>(02Pv3vl1&=>I5GI^*OKVpx${v_giTEI5|SkGvW$o|e+VJ51{2mE z7}@CJPygA(Z+Xho$JSV!M3}0o8N<4^J>fc)>d7u5vwPMlX?EXj2Vw#RU+K`Z)M#yk`RxQk+k+%K~kW^Ipzq5aOsCGH5jDm;*YK;-5ioGB#;#U*hnJF z22s-bX9Y<$CC*i67}s4tCX(U_B=vu6Bq4?oBWdHaf~4jW=NgcNTLw2oNfcWY5k?`< SZ)S%Ex|0fBHoPh5?|%br8QoC; literal 0 HcmV?d00001 diff --git a/libs/js_engine/src/artifacts/JS_SNAPSHOT.bin b/libs/js_engine/src/artifacts/JS_SNAPSHOT.bin new file mode 100644 index 0000000000000000000000000000000000000000..9b86d35967854e9e760574501d74df21176eae1f GIT binary patch literal 500656 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 Deno.core.opAsync("write_file", context, volumeId, path, toWrite); +const writeFile = ({ path, volumeId, toWrite }) => Deno.core.opAsync("write_file", volumeId, path, toWrite); // @ts-ignore -const readFile = ({ volumeId, path }) => Deno.core.opAsync("read_file", context, volumeId, path); +const readFile = ({ volumeId, path }) => Deno.core.opAsync("read_file", volumeId, path); // @ts-ignore -const removeFile = ({ volumeId, path }) => Deno.core.opAsync("remove_file", context, volumeId, path); +const removeFile = ({ volumeId, path }) => Deno.core.opAsync("remove_file", volumeId, path); // @ts-ignore const isSandboxed = () => Deno.core.opSync("is_sandboxed"); @@ -42,9 +40,9 @@ const writeJsonFile = ({ volumeId, path, toWrite }) => // @ts-ignore const readJsonFile = async ({ volumeId, path }) => JSON.parse(await readFile({ volumeId, path })); // @ts-ignore -const createDir = ({ volumeId, path }) => Deno.core.opAsync("create_dir", context, volumeId, path); +const createDir = ({ volumeId, path }) => Deno.core.opAsync("create_dir", volumeId, path); // @ts-ignore -const removeDir = ({ volumeId, path }) => Deno.core.opAsync("remove_dir", context, volumeId, path); +const removeDir = ({ volumeId, path }) => Deno.core.opAsync("remove_dir", volumeId, path); // @ts-ignore const trace = (x) => Deno.core.opSync("log_trace", x); // @ts-ignore diff --git a/libs/js_engine/src/lib.rs b/libs/js_engine/src/lib.rs new file mode 100644 index 000000000..01787c432 --- /dev/null +++ b/libs/js_engine/src/lib.rs @@ -0,0 +1,550 @@ +use deno_core::anyhow::{anyhow, bail}; +use deno_core::error::AnyError; +use deno_core::resolve_import; +use deno_core::JsRuntime; +use deno_core::ModuleLoader; +use deno_core::ModuleSource; +use deno_core::ModuleSourceFuture; +use deno_core::ModuleSpecifier; +use deno_core::ModuleType; +use deno_core::RuntimeOptions; +use deno_core::Snapshot; +use deno_core::{Extension, OpDecl}; +use helpers::script_dir; +use helpers::NonDetachingJoinHandle; +use models::{PackageId, ProcedureName, Version, VolumeId}; +use serde::{Deserialize, Serialize}; +use serde_json::Value; +use std::{path::Path, sync::Arc}; +use std::{path::PathBuf, pin::Pin}; +use tokio::io::AsyncReadExt; + +pub trait PathForVolumeId: Send + Sync { + fn path_for( + &self, + data_dir: &Path, + package_id: &PackageId, + version: &Version, + volume_id: &VolumeId, + ) -> Option; + fn readonly(&self, volume_id: &VolumeId) -> bool; +} + +#[derive(Serialize, Deserialize, Debug, Default, Clone)] +pub struct JsCode(String); + +#[derive(Debug, Clone, Copy)] +pub enum JsError { + Unknown = 1, + Javascript = 2, + Engine = 3, + BoundryLayerSerDe = 4, + Tokio = 5, + FileSystem = 6, + Timeout = 143, +} + +#[cfg(target_arch = "x86_64")] +const SNAPSHOT_BYTES: &[u8] = include_bytes!("./artifacts/JS_SNAPSHOT.bin"); + +#[cfg(target_arch = "aarch64")] +const SNAPSHOT_BYTES: &[u8] = include_bytes!("./artifacts/ARM_JS_SNAPSHOT.bin"); +#[derive(Clone)] +struct JsContext { + sandboxed: bool, + datadir: PathBuf, + run_function: String, + version: Version, + package_id: PackageId, + volumes: Arc, + input: Value, +} + +#[derive(Clone, Default)] +struct AnswerState(std::sync::Arc>); + +#[derive(Clone, Debug)] +struct ModsLoader { + code: JsCode, +} + +impl ModuleLoader for ModsLoader { + fn resolve( + &self, + specifier: &str, + referrer: &str, + _is_main: bool, + ) -> Result { + if referrer.contains("embassy") { + bail!("Embassy.js cannot import anything else"); + } + let s = resolve_import(specifier, referrer).unwrap(); + Ok(s) + } + + fn load( + &self, + module_specifier: &ModuleSpecifier, + maybe_referrer: Option, + is_dyn_import: bool, + ) -> Pin> { + let module_specifier = module_specifier.as_str().to_owned(); + let module = match &*module_specifier { + "file:///deno_global.js" => Ok(ModuleSource { + module_url_specified: "file:///deno_global.js".to_string(), + module_url_found: "file:///deno_global.js".to_string(), + code: "const old_deno = Deno; Deno = null; export default old_deno" + .as_bytes() + .to_vec() + .into_boxed_slice(), + module_type: ModuleType::JavaScript, + }), + "file:///loadModule.js" => Ok(ModuleSource { + module_url_specified: "file:///loadModule.js".to_string(), + module_url_found: "file:///loadModule.js".to_string(), + code: include_str!("./artifacts/loadModule.js") + .as_bytes() + .to_vec() + .into_boxed_slice(), + module_type: ModuleType::JavaScript, + }), + "file:///embassy.js" => Ok(ModuleSource { + module_url_specified: "file:///embassy.js".to_string(), + module_url_found: "file:///embassy.js".to_string(), + code: self.code.0.as_bytes().to_vec().into_boxed_slice(), + module_type: ModuleType::JavaScript, + }), + x => Err(anyhow!("Not allowed to import: {}", x)), + }; + Box::pin(async move { + if is_dyn_import { + bail!("Will not import dynamic"); + } + match &maybe_referrer { + Some(x) if x.as_str() == "file:///embassy.js" => { + bail!("Embassy is not allowed to import") + } + _ => (), + } + module + }) + } +} +pub struct JsExecutionEnvironment { + sandboxed: bool, + base_directory: PathBuf, + module_loader: ModsLoader, + package_id: PackageId, + version: Version, + volumes: Arc, +} + +impl JsExecutionEnvironment { + pub async fn load_from_package( + data_directory: impl AsRef, + package_id: &PackageId, + version: &Version, + volumes: Box, + ) -> Result { + let data_dir = data_directory.as_ref(); + let base_directory = data_dir; + let js_code = JsCode({ + let file_path = script_dir(data_dir, package_id, version).join("embassy.js"); + let mut file = match tokio::fs::File::open(file_path.clone()).await { + Ok(x) => x, + Err(e) => { + tracing::debug!("path: {:?}", file_path); + tracing::debug!("{:?}", e); + return Err(( + JsError::FileSystem, + format!("The file opening '{:?}' created error: {}", file_path, e), + )); + } + }; + let mut buffer = Default::default(); + if let Err(err) = file.read_to_string(&mut buffer).await { + tracing::debug!("{:?}", err); + return Err(( + JsError::FileSystem, + format!("The file reading created error: {}", err), + )); + }; + buffer + }); + Ok(Self { + base_directory: base_directory.to_owned(), + module_loader: ModsLoader { code: js_code }, + package_id: package_id.clone(), + version: version.clone(), + volumes: volumes.into(), + sandboxed: false, + }) + } + pub fn read_only_effects(mut self) -> Self { + self.sandboxed = true; + self + } + + pub async fn run_action Deserialize<'de>>( + self, + procedure_name: ProcedureName, + input: Option, + ) -> Result { + let input = match serde_json::to_value(input) { + Ok(a) => a, + Err(err) => { + tracing::error!("{}", err); + tracing::debug!("{:?}", err); + return Err(( + JsError::BoundryLayerSerDe, + "Couldn't convert input".to_string(), + )); + } + }; + let safer_handle: NonDetachingJoinHandle<_> = + tokio::task::spawn_blocking(move || self.execute(procedure_name, input)).into(); + let output = safer_handle + .await + .map_err(|err| (JsError::Tokio, format!("Tokio gave us the error: {}", err)))??; + match serde_json::from_value(output.clone()) { + Ok(x) => Ok(x), + Err(err) => { + tracing::error!("{}", err); + tracing::debug!("{:?}", err); + return Err(( + JsError::BoundryLayerSerDe, + format!( + "Couldn't convert output = {:#?} to the correct type", + serde_json::to_string_pretty(&output).unwrap_or_default() + ), + )); + } + } + } + fn declarations() -> Vec { + vec![ + fns::read_file::decl(), + fns::write_file::decl(), + fns::remove_file::decl(), + fns::create_dir::decl(), + fns::remove_dir::decl(), + fns::current_function::decl(), + fns::log_trace::decl(), + fns::log_warn::decl(), + fns::log_error::decl(), + fns::log_debug::decl(), + fns::log_info::decl(), + fns::get_input::decl(), + fns::set_value::decl(), + fns::is_sandboxed::decl(), + ] + } + + fn execute( + &self, + procedure_name: ProcedureName, + input: Value, + ) -> Result { + let base_directory = self.base_directory.clone(); + let answer_state = AnswerState::default(); + let ext_answer_state = answer_state.clone(); + let js_ctx = JsContext { + datadir: base_directory, + run_function: procedure_name.js_function_name(), + package_id: self.package_id.clone(), + volumes: self.volumes.clone(), + version: self.version.clone(), + sandboxed: self.sandboxed, + input, + }; + let ext = Extension::builder() + .ops(Self::declarations()) + .state(move |state| { + state.put(ext_answer_state.clone()); + state.put(js_ctx.clone()); + Ok(()) + }) + .build(); + + let loader = std::rc::Rc::new(self.module_loader.clone()); + let runtime_options = RuntimeOptions { + module_loader: Some(loader), + extensions: vec![ext], + startup_snapshot: Some(Snapshot::Static(SNAPSHOT_BYTES)), + ..Default::default() + }; + let mut runtime = JsRuntime::new(runtime_options); + + let future = async move { + let mod_id = runtime + .load_main_module(&"file:///loadModule.js".parse().unwrap(), None) + .await?; + let evaluated = runtime.mod_evaluate(mod_id); + let res = runtime.run_event_loop(false).await; + res?; + evaluated.await??; + Ok::<_, AnyError>(()) + }; + + tokio::runtime::Handle::current() + .block_on(future) + .map_err(|e| { + tracing::debug!("{:?}", e); + (JsError::Javascript, format!("{}", e)) + })?; + + let answer = answer_state.0.lock().clone(); + Ok(answer) + } +} + +/// Note: Make sure that we have the assumption that all these methods are callable at any time, and all call restrictions should be in rust +mod fns { + use deno_core::{ + anyhow::{anyhow, bail}, + error::AnyError, + *, + }; + use serde_json::Value; + + use std::{ + cell::RefCell, + convert::TryFrom, + path::{Path, PathBuf}, + rc::Rc, + }; + + use models::VolumeId; + + use super::{AnswerState, JsContext}; + + #[op] + async fn read_file( + state: Rc>, + volume_id: VolumeId, + path_in: PathBuf, + ) -> Result { + let state = state.borrow(); + let ctx: &JsContext = state.borrow(); + let volume_path = ctx + .volumes + .path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id) + .ok_or_else(|| anyhow!("There is no {} in volumes", volume_id))?; + //get_path_for in volume.rs + let new_file = volume_path.join(path_in); + if !is_subset(&volume_path, &new_file).await? { + bail!( + "Path '{}' has broken away from parent '{}'", + new_file.to_string_lossy(), + volume_path.to_string_lossy(), + ); + } + let answer = tokio::fs::read_to_string(new_file).await?; + Ok(answer) + } + #[op] + async fn write_file( + state: Rc>, + volume_id: VolumeId, + path_in: PathBuf, + write: String, + ) -> Result<(), AnyError> { + let state = state.borrow(); + let ctx: &JsContext = state.borrow(); + let volume_path = ctx + .volumes + .path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id) + .ok_or_else(|| anyhow!("There is no {} in volumes", volume_id))?; + if ctx.volumes.readonly(&volume_id) { + bail!("Volume {} is readonly", volume_id); + } + + let new_file = volume_path.join(path_in); + let parent_new_file = new_file + .parent() + .ok_or_else(|| anyhow!("Expecting that file is not root"))?; + // With the volume check + if !is_subset(&volume_path, &parent_new_file).await? { + bail!( + "Path '{}' has broken away from parent '{}'", + new_file.to_string_lossy(), + volume_path.to_string_lossy(), + ); + } + tokio::fs::write(new_file, write).await?; + Ok(()) + } + #[op] + async fn remove_file( + state: Rc>, + volume_id: VolumeId, + path_in: PathBuf, + ) -> Result<(), AnyError> { + let state = state.borrow(); + let ctx: &JsContext = state.borrow(); + let volume_path = ctx + .volumes + .path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id) + .ok_or_else(|| anyhow!("There is no {} in volumes", volume_id))?; + if ctx.volumes.readonly(&volume_id) { + bail!("Volume {} is readonly", volume_id); + } + let new_file = volume_path.join(path_in); + // With the volume check + if !is_subset(&volume_path, &new_file).await? { + bail!( + "Path '{}' has broken away from parent '{}'", + new_file.to_string_lossy(), + volume_path.to_string_lossy(), + ); + } + tokio::fs::remove_file(new_file).await?; + Ok(()) + } + #[op] + async fn remove_dir( + state: Rc>, + volume_id: VolumeId, + path_in: PathBuf, + ) -> Result<(), AnyError> { + let state = state.borrow(); + let ctx: &JsContext = state.borrow(); + let volume_path = ctx + .volumes + .path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id) + .ok_or_else(|| anyhow!("There is no {} in volumes", volume_id))?; + if ctx.volumes.readonly(&volume_id) { + bail!("Volume {} is readonly", volume_id); + } + let new_file = volume_path.join(path_in); + // With the volume check + if !is_subset(&volume_path, &new_file).await? { + bail!( + "Path '{}' has broken away from parent '{}'", + new_file.to_string_lossy(), + volume_path.to_string_lossy(), + ); + } + tokio::fs::remove_dir_all(new_file).await?; + Ok(()) + } + #[op] + async fn create_dir( + state: Rc>, + volume_id: VolumeId, + path_in: PathBuf, + ) -> Result<(), AnyError> { + let state = state.borrow(); + let ctx: &JsContext = state.borrow(); + let volume_path = ctx + .volumes + .path_for(&ctx.datadir, &ctx.package_id, &ctx.version, &volume_id) + .ok_or_else(|| anyhow!("There is no {} in volumes", volume_id))?; + if ctx.volumes.readonly(&volume_id) { + bail!("Volume {} is readonly", volume_id); + } + let new_file = volume_path.join(path_in); + let parent_new_file = new_file + .parent() + .ok_or_else(|| anyhow!("Expecting that file is not root"))?; + // With the volume check + if !is_subset(&volume_path, &parent_new_file).await? { + bail!( + "Path '{}' has broken away from parent '{}'", + new_file.to_string_lossy(), + volume_path.to_string_lossy(), + ); + } + tokio::fs::create_dir_all(new_file).await?; + Ok(()) + } + + #[op] + fn current_function(state: &mut OpState) -> Result { + let ctx = state.borrow::(); + Ok(ctx.run_function.clone()) + } + + #[op] + fn log_trace(state: &mut OpState, input: String) -> Result<(), AnyError> { + let ctx = state.borrow::(); + tracing::trace!( + package_id = tracing::field::display(&ctx.package_id), + run_function = tracing::field::display(&ctx.run_function), + "{}", + input + ); + Ok(()) + } + #[op] + fn log_warn(state: &mut OpState, input: String) -> Result<(), AnyError> { + let ctx = state.borrow::(); + tracing::warn!( + package_id = tracing::field::display(&ctx.package_id), + run_function = tracing::field::display(&ctx.run_function), + "{}", + input + ); + Ok(()) + } + #[op] + fn log_error(state: &mut OpState, input: String) -> Result<(), AnyError> { + let ctx = state.borrow::(); + tracing::error!( + package_id = tracing::field::display(&ctx.package_id), + run_function = tracing::field::display(&ctx.run_function), + "{}", + input + ); + Ok(()) + } + #[op] + fn log_debug(state: &mut OpState, input: String) -> Result<(), AnyError> { + let ctx = state.borrow::(); + tracing::debug!( + package_id = tracing::field::display(&ctx.package_id), + run_function = tracing::field::display(&ctx.run_function), + "{}", + input + ); + Ok(()) + } + #[op] + fn log_info(state: &mut OpState, input: String) -> Result<(), AnyError> { + let ctx = state.borrow::(); + tracing::info!( + package_id = tracing::field::display(&ctx.package_id), + run_function = tracing::field::display(&ctx.run_function), + "{}", + input + ); + Ok(()) + } + + #[op] + fn get_input(state: &mut OpState) -> Result { + let ctx = state.borrow::(); + Ok(ctx.input.clone()) + } + #[op] + fn set_value(state: &mut OpState, value: Value) -> Result<(), AnyError> { + let mut answer = state.borrow::().0.lock(); + *answer = value; + Ok(()) + } + #[op] + fn is_sandboxed(state: &mut OpState) -> Result { + let ctx = state.borrow::(); + Ok(ctx.sandboxed) + } + + /// We need to make sure that during the file accessing, we don't reach beyond our scope of control + async fn is_subset( + parent: impl AsRef, + child: impl AsRef, + ) -> Result { + let child = tokio::fs::canonicalize(child).await?; + let parent = tokio::fs::canonicalize(parent).await?; + Ok(child.starts_with(parent)) + } +} diff --git a/libs/models/Cargo.toml b/libs/models/Cargo.toml new file mode 100644 index 000000000..c4c48d437 --- /dev/null +++ b/libs/models/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "models" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +patch-db = { version = "*", path = "../../patch-db/patch-db", features = [ + "trace", +] } +serde = { version = "1.0.*", features = ["derive", "rc"] } +thiserror = "1.0.*" +emver = { version = "0.1.6", features = ["serde"] } +rand = "0.7.*" \ No newline at end of file diff --git a/libs/models/src/action_id.rs b/libs/models/src/action_id.rs new file mode 100644 index 000000000..32460b7a3 --- /dev/null +++ b/libs/models/src/action_id.rs @@ -0,0 +1,52 @@ +use std::{str::FromStr, path::Path}; + +use serde::{Serialize, Deserialize}; + +use crate::{Id, InvalidId}; + + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize)] +pub struct ActionId = String>(Id); +impl FromStr for ActionId { + type Err = InvalidId; + fn from_str(s: &str) -> Result { + Ok(ActionId(Id::try_from(s.to_owned())?)) + } +} +impl From for String { + fn from(value: ActionId) -> Self { + value.0.into() + } +} +impl> AsRef> for ActionId { + fn as_ref(&self) -> &ActionId { + self + } +} +impl> std::fmt::Display for ActionId { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", &self.0) + } +} +impl> AsRef for ActionId { + fn as_ref(&self) -> &str { + self.0.as_ref() + } +} +impl> AsRef for ActionId { + fn as_ref(&self) -> &Path { + self.0.as_ref().as_ref() + } +} +impl<'de, S> Deserialize<'de> for ActionId +where + S: AsRef, + Id: Deserialize<'de>, +{ + fn deserialize(deserializer: D) -> Result + where + D: serde::de::Deserializer<'de>, + { + Ok(ActionId(serde::Deserialize::deserialize(deserializer)?)) + } +} diff --git a/libs/models/src/health_check_id.rs b/libs/models/src/health_check_id.rs new file mode 100644 index 000000000..71e26d2b5 --- /dev/null +++ b/libs/models/src/health_check_id.rs @@ -0,0 +1,35 @@ +use std::path::Path; + +use serde::{Serialize, Deserialize, Deserializer}; + +use crate::Id; + +#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize)] +pub struct HealthCheckId = String>(Id); +impl> std::fmt::Display for HealthCheckId { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", &self.0) + } +} +impl> AsRef for HealthCheckId { + fn as_ref(&self) -> &str { + self.0.as_ref() + } +} +impl<'de, S> Deserialize<'de> for HealthCheckId +where + S: AsRef, + Id: Deserialize<'de>, +{ + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + Ok(HealthCheckId(Deserialize::deserialize(deserializer)?)) + } +} +impl> AsRef for HealthCheckId { + fn as_ref(&self) -> &Path { + self.0.as_ref().as_ref() + } +} \ No newline at end of file diff --git a/libs/models/src/id.rs b/libs/models/src/id.rs new file mode 100644 index 000000000..29f16bfef --- /dev/null +++ b/libs/models/src/id.rs @@ -0,0 +1,75 @@ +use std::borrow::Borrow; + +use serde::{Deserialize, Deserializer, Serialize, Serializer}; + +use crate::{invalid_id::InvalidId, id_unchecked::IdUnchecked}; + +pub const SYSTEM_ID: Id<&'static str> = Id("x_system"); + +#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Id = String>(S); +impl> Id { + pub fn try_from(value: S) -> Result { + if value + .as_ref() + .chars() + .all(|c| c.is_ascii_lowercase() || c == '-') + { + Ok(Id(value)) + } else { + Err(InvalidId) + } + } +} +impl<'a> Id<&'a str> { + pub fn owned(&self) -> Id { + Id(self.0.to_owned()) + } +} +impl From for String { + fn from(value: Id) -> Self { + value.0 + } +} +impl> std::ops::Deref for Id { + type Target = S; + fn deref(&self) -> &Self::Target { + &self.0 + } +} +impl> std::fmt::Display for Id { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.0.as_ref()) + } +} +impl> AsRef for Id { + fn as_ref(&self) -> &str { + self.0.as_ref() + } +} +impl> Borrow for Id { + fn borrow(&self) -> &str { + self.0.as_ref() + } +} +impl<'de, S> Deserialize<'de> for Id +where + S: AsRef, + IdUnchecked: Deserialize<'de>, +{ + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let unchecked: IdUnchecked = Deserialize::deserialize(deserializer)?; + Id::try_from(unchecked.0).map_err(serde::de::Error::custom) + } +} +impl> Serialize for Id { + fn serialize(&self, serializer: Ser) -> Result + where + Ser: Serializer, + { + serializer.serialize_str(self.as_ref()) + } +} \ No newline at end of file diff --git a/libs/models/src/id_unchecked.rs b/libs/models/src/id_unchecked.rs new file mode 100644 index 000000000..f6f289898 --- /dev/null +++ b/libs/models/src/id_unchecked.rs @@ -0,0 +1,56 @@ +use std::borrow::Cow; + +use serde::{Deserialize, Deserializer}; + + +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub struct IdUnchecked>(pub S); +impl<'de> Deserialize<'de> for IdUnchecked> { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + struct Visitor; + impl<'de> serde::de::Visitor<'de> for Visitor { + type Value = IdUnchecked>; + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(formatter, "a valid ID") + } + fn visit_str(self, v: &str) -> Result + where + E: serde::de::Error, + { + Ok(IdUnchecked(Cow::Owned(v.to_owned()))) + } + fn visit_string(self, v: String) -> Result + where + E: serde::de::Error, + { + Ok(IdUnchecked(Cow::Owned(v))) + } + fn visit_borrowed_str(self, v: &'de str) -> Result + where + E: serde::de::Error, + { + Ok(IdUnchecked(Cow::Borrowed(v))) + } + } + deserializer.deserialize_any(Visitor) + } +} +impl<'de> Deserialize<'de> for IdUnchecked { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + Ok(IdUnchecked(String::deserialize(deserializer)?)) + } +} +impl<'de> Deserialize<'de> for IdUnchecked<&'de str> { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + Ok(IdUnchecked(<&'de str>::deserialize(deserializer)?)) + } +} \ No newline at end of file diff --git a/libs/models/src/interface_id.rs b/libs/models/src/interface_id.rs new file mode 100644 index 000000000..44af99aaf --- /dev/null +++ b/libs/models/src/interface_id.rs @@ -0,0 +1,47 @@ +use std::path::Path; + +use serde::{Serialize, Deserialize, Deserializer}; + +use crate::Id; + + +#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize)] +pub struct InterfaceId = String>(Id); +impl> From> for InterfaceId { + fn from(id: Id) -> Self { + Self(id) + } +} +impl> std::fmt::Display for InterfaceId { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", &self.0) + } +} +impl> std::ops::Deref for InterfaceId { + type Target = S; + fn deref(&self) -> &Self::Target { + &*self.0 + } +} +impl> AsRef for InterfaceId { + fn as_ref(&self) -> &str { + self.0.as_ref() + } +} +impl<'de, S> Deserialize<'de> for InterfaceId +where + S: AsRef, + Id: Deserialize<'de>, +{ + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + Ok(InterfaceId(Deserialize::deserialize(deserializer)?)) + } +} +impl> AsRef for InterfaceId { + fn as_ref(&self) -> &Path { + self.0.as_ref().as_ref() + } +} \ No newline at end of file diff --git a/libs/models/src/invalid_id.rs b/libs/models/src/invalid_id.rs new file mode 100644 index 000000000..adccefab3 --- /dev/null +++ b/libs/models/src/invalid_id.rs @@ -0,0 +1,4 @@ + +#[derive(Debug, thiserror::Error)] +#[error("Invalid ID")] +pub struct InvalidId; diff --git a/libs/models/src/lib.rs b/libs/models/src/lib.rs new file mode 100644 index 000000000..8a1e43843 --- /dev/null +++ b/libs/models/src/lib.rs @@ -0,0 +1,21 @@ + mod id; + mod invalid_id; + mod id_unchecked; + mod version; + mod volume_id; + mod interface_id; + mod package_id; + mod procedure_name; + mod health_check_id; + mod action_id; + + pub use id::*; + pub use invalid_id::*; + pub use id_unchecked::*; + pub use version::*; + pub use volume_id::*; + pub use interface_id::*; + pub use package_id::*; + pub use procedure_name::*; + pub use health_check_id::*; + pub use action_id::*; \ No newline at end of file diff --git a/libs/models/src/package_id.rs b/libs/models/src/package_id.rs new file mode 100644 index 000000000..d97698dfc --- /dev/null +++ b/libs/models/src/package_id.rs @@ -0,0 +1,85 @@ +use std::{str::FromStr, borrow::Borrow, path::Path}; + +use serde::{Deserialize, Serialize, Serializer}; + +use crate::{Id, InvalidId, SYSTEM_ID}; + + +pub const SYSTEM_PACKAGE_ID: PackageId<&'static str> = PackageId(SYSTEM_ID); +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct PackageId = String>(Id); +impl<'a> PackageId<&'a str> { + pub fn owned(&self) -> PackageId { + PackageId(self.0.owned()) + } +} +impl FromStr for PackageId { + type Err = InvalidId; + fn from_str(s: &str) -> Result { + Ok(PackageId(Id::try_from(s.to_owned())?)) + } +} +impl From for String { + fn from(value: PackageId) -> Self { + value.0.into() + } +} +impl> From> for PackageId { + fn from(id: Id) -> Self { + PackageId(id) + } +} +impl> std::ops::Deref for PackageId { + type Target = S; + fn deref(&self) -> &Self::Target { + &*self.0 + } +} +impl> AsRef> for PackageId { + fn as_ref(&self) -> &PackageId { + self + } +} +impl> std::fmt::Display for PackageId { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", &self.0) + } +} +impl> AsRef for PackageId { + fn as_ref(&self) -> &str { + self.0.as_ref() + } +} +impl> Borrow for PackageId { + fn borrow(&self) -> &str { + self.0.as_ref() + } +} +impl> AsRef for PackageId { + fn as_ref(&self) -> &Path { + self.0.as_ref().as_ref() + } +} +impl<'de, S> Deserialize<'de> for PackageId +where + S: AsRef, + Id: Deserialize<'de>, +{ + fn deserialize(deserializer: D) -> Result + where + D: serde::de::Deserializer<'de>, + { + Ok(PackageId(Deserialize::deserialize(deserializer)?)) + } +} +impl Serialize for PackageId +where + S: AsRef, +{ + fn serialize(&self, serializer: Ser) -> Result + where + Ser: Serializer, + { + Serialize::serialize(&self.0, serializer) + } +} \ No newline at end of file diff --git a/libs/models/src/procedure_name.rs b/libs/models/src/procedure_name.rs new file mode 100644 index 000000000..df7c22866 --- /dev/null +++ b/libs/models/src/procedure_name.rs @@ -0,0 +1,50 @@ +use crate::{PackageId, HealthCheckId, ActionId}; + + +#[derive(Debug, Clone)] +pub enum ProcedureName { + Main, // Usually just run container + CreateBackup, + RestoreBackup, + GetConfig, + SetConfig, + Migration, + Properties, + Check(PackageId), + AutoConfig(PackageId), + Health(HealthCheckId), + Action(ActionId), +} + +impl ProcedureName { + pub fn docker_name(&self) -> Option { + match self { + ProcedureName::Main => None, + ProcedureName::CreateBackup => Some("CreateBackup".to_string()), + ProcedureName::RestoreBackup => Some("RestoreBackup".to_string()), + ProcedureName::GetConfig => Some("GetConfig".to_string()), + ProcedureName::SetConfig => Some("SetConfig".to_string()), + ProcedureName::Migration => Some("Migration".to_string()), + ProcedureName::Properties => Some(format!("Properties-{}", rand::random::())), + ProcedureName::Health(id) => Some(format!("{}Health", id)), + ProcedureName::Action(id) => Some(format!("{}Action", id)), + ProcedureName::Check(_) => None, + ProcedureName::AutoConfig(_) => None, + } + } + pub fn js_function_name(&self) -> String { + match self { + ProcedureName::Main => "/main".to_string(), + ProcedureName::CreateBackup => "/createBackup".to_string(), + ProcedureName::RestoreBackup => "/restoreBackup".to_string(), + ProcedureName::GetConfig => "/getConfig".to_string(), + ProcedureName::SetConfig => "/setConfig".to_string(), + ProcedureName::Migration => "/migration".to_string(), + ProcedureName::Properties => "/properties".to_string(), + ProcedureName::Health(id) => format!("/health/{}", id), + ProcedureName::Action(id) => format!("/action/{}", id), + ProcedureName::Check(id) => format!("/dependencies/{}/check", id), + ProcedureName::AutoConfig(id) => format!("/dependencies/{}/autoConfigure", id), + } + } +} \ No newline at end of file diff --git a/libs/models/src/version.rs b/libs/models/src/version.rs new file mode 100644 index 000000000..d4b232b39 --- /dev/null +++ b/libs/models/src/version.rs @@ -0,0 +1,110 @@ +use std::{str::FromStr, ops::Deref}; +use std::hash::{Hash, Hasher}; + +use patch_db::{HasModel, Model}; +use serde::{Deserialize, Deserializer, Serialize, Serializer}; + + +#[derive(Debug, Clone)] +pub struct Version { + version: emver::Version, + string: String, +} +impl Version { + pub fn as_str(&self) -> &str { + self.string.as_str() + } + pub fn into_version(self) -> emver::Version { + self.version + } +} +impl std::fmt::Display for Version { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.string) + } +} +impl std::str::FromStr for Version { + type Err = ::Err; + fn from_str(s: &str) -> Result { + Ok(Version { + string: s.to_owned(), + version: s.parse()?, + }) + } +} +impl From for Version { + fn from(v: emver::Version) -> Self { + Version { + string: v.to_string(), + version: v, + } + } +} +impl From for emver::Version { + fn from(v: Version) -> Self { + v.version + } +} +impl Default for Version { + fn default() -> Self { + Self::from(emver::Version::default()) + } +} +impl Deref for Version { + type Target = emver::Version; + fn deref(&self) -> &Self::Target { + &self.version + } +} +impl AsRef for Version { + fn as_ref(&self) -> &emver::Version { + &self.version + } +} +impl AsRef for Version { + fn as_ref(&self) -> &str { + self.as_str() + } +} +impl PartialEq for Version { + fn eq(&self, other: &Version) -> bool { + self.version.eq(&other.version) + } +} +impl Eq for Version {} +impl PartialOrd for Version { + fn partial_cmp(&self, other: &Self) -> Option { + self.version.partial_cmp(&other.version) + } +} +impl Ord for Version { + fn cmp(&self, other: &Self) -> std::cmp::Ordering { + self.version.cmp(&other.version) + } +} +impl Hash for Version { + fn hash(&self, state: &mut H) { + self.version.hash(state) + } +} +impl<'de> Deserialize<'de> for Version { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let string = String::deserialize(deserializer)?; + let version = emver::Version::from_str(&string).map_err(::serde::de::Error::custom)?; + Ok(Self { string, version }) + } +} +impl Serialize for Version { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + self.string.serialize(serializer) + } +} +impl HasModel for Version { + type Model = Model; +} \ No newline at end of file diff --git a/libs/models/src/volume_id.rs b/libs/models/src/volume_id.rs new file mode 100644 index 000000000..07573d198 --- /dev/null +++ b/libs/models/src/volume_id.rs @@ -0,0 +1,62 @@ +use std::{borrow::Borrow, path::Path}; + +use serde::{Deserialize, Serialize, Deserializer}; + +use crate::{Id, IdUnchecked}; + + +#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum VolumeId = String> { + Backup, + Custom(Id), +} +impl> std::fmt::Display for VolumeId { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + VolumeId::Backup => write!(f, "BACKUP"), + VolumeId::Custom(id) => write!(f, "{}", id), + } + } +} +impl> AsRef for VolumeId { + fn as_ref(&self) -> &str { + match self { + VolumeId::Backup => "BACKUP", + VolumeId::Custom(id) => id.as_ref(), + } + } +} +impl> Borrow for VolumeId { + fn borrow(&self) -> &str { + self.as_ref() + } +} +impl> AsRef for VolumeId { + fn as_ref(&self) -> &Path { + AsRef::::as_ref(self).as_ref() + } +} +impl<'de, S> Deserialize<'de> for VolumeId +where + S: AsRef, + IdUnchecked: Deserialize<'de>, +{ + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let unchecked: IdUnchecked = Deserialize::deserialize(deserializer)?; + Ok(match unchecked.0.as_ref() { + "BACKUP" => VolumeId::Backup, + _ => VolumeId::Custom(Id::try_from(unchecked.0).map_err(serde::de::Error::custom)?), + }) + } +} +impl> Serialize for VolumeId { + fn serialize(&self, serializer: Ser) -> Result + where + Ser: serde::Serializer, + { + serializer.serialize_str(self.as_ref()) + } +} diff --git a/libs/snapshot-creator/Cargo.toml b/libs/snapshot-creator/Cargo.toml new file mode 100644 index 000000000..1c9236385 --- /dev/null +++ b/libs/snapshot-creator/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "snapshot-creator" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +dashmap = "5.1.0" +deno_core = "0.136.0" +deno_ast = {version="0.15.0", features = ["transpiling"]} \ No newline at end of file diff --git a/backend/src/bin/build-js-snapshots.rs b/libs/snapshot-creator/src/main.rs similarity index 74% rename from backend/src/bin/build-js-snapshots.rs rename to libs/snapshot-creator/src/main.rs index 971fad000..8ea372510 100644 --- a/backend/src/bin/build-js-snapshots.rs +++ b/libs/snapshot-creator/src/main.rs @@ -1,5 +1,7 @@ +use deno_core::{JsRuntime, RuntimeOptions}; + fn main() { - let mut runtime = deno_core::JsRuntime::new(deno_core::RuntimeOptions { + let mut runtime = JsRuntime::new(RuntimeOptions { will_snapshot: true, ..Default::default() }); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..497f28c49 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "embassy-os", + "lockfileVersion": 2, + "requires": true, + "packages": {} +} diff --git a/system-images/compat/Cargo.lock b/system-images/compat/Cargo.lock index 76a9a4744..6684c63e7 100644 --- a/system-images/compat/Cargo.lock +++ b/system-images/compat/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd" +checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" dependencies = [ "gimli", ] @@ -36,7 +36,7 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.3", + "getrandom 0.2.6", "once_cell", "version_check", ] @@ -50,15 +50,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "ansi_term" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" -dependencies = [ - "winapi", -] - [[package]] name = "ansi_term" version = "0.12.1" @@ -70,9 +61,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.44" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1" +checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" dependencies = [ "backtrace", ] @@ -100,13 +91,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.51" +version = "0.1.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e" +checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", ] [[package]] @@ -131,15 +122,15 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.61" +version = "0.3.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a905d892734eea339e896738c14b9afce22b5318f64b951e70bf3844419b01" +checksum = "11a17d453482a265fd5f8479f2a3f405566e6ca627837aaddb85af8b1ab8ef61" dependencies = [ "addr2line", "cc", @@ -152,9 +143,9 @@ dependencies = [ [[package]] name = "base-x" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" +checksum = "dc19a4937b4fbd3fe3379793130e42060d10627a360f2127802b10b87e7baf74" [[package]] name = "base32" @@ -227,9 +218,9 @@ dependencies = [ [[package]] name = "bitvec" -version = "0.19.5" +version = "0.19.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8942c8d352ae1838c9dda0b0ca2ab657696ef2232a20147cf1b30ae1a9cb4321" +checksum = "55f93d0ef3363c364d5976646a38f04cf67cfe1d4c8d160cdea02cab2c116b33" dependencies = [ "funty", "radium", @@ -267,7 +258,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ "block-padding 0.2.1", - "generic-array 0.14.4", + "generic-array 0.14.5", +] + +[[package]] +name = "block-buffer" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" +dependencies = [ + "generic-array 0.14.5", ] [[package]] @@ -287,9 +287,9 @@ checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] name = "bollard" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a3f238d4b66f33d9162893ade03cd8a485320f591b244ea5b7f236d3494e98" +checksum = "c92fed694fd5a7468c971538351c61b9c115f1ae6ed411cd2800f0f299403a4b" dependencies = [ "base64", "bollard-stubs", @@ -310,7 +310,7 @@ dependencies = [ "serde_urlencoded", "thiserror", "tokio 1.15.0", - "tokio-util", + "tokio-util 0.6.10", "url", "winapi", ] @@ -328,9 +328,9 @@ dependencies = [ [[package]] name = "bstr" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279" +checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" dependencies = [ "lazy_static", "memchr", @@ -340,9 +340,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.7.0" +version = "3.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631" +checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" [[package]] name = "byte-tools" @@ -370,9 +370,9 @@ checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" [[package]] name = "cc" -version = "1.0.70" +version = "1.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0" +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" [[package]] name = "cfg-if" @@ -427,16 +427,16 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.5", ] [[package]] name = "clap" -version = "2.33.3" +version = "2.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ - "ansi_term 0.11.0", + "ansi_term", "atty", "bitflags", "strsim 0.8.0", @@ -479,15 +479,16 @@ dependencies = [ "anyhow", "beau_collector", "clap", + "dashmap", "embassy-os", "emver", "failure", "indexmap", - "itertools 0.10.1", + "itertools 0.10.3", "lazy_static", "linear-map", "log", - "nix 0.23.0", + "nix 0.23.1", "pest", "pest_derive", "rand 0.7.3", @@ -500,9 +501,9 @@ dependencies = [ [[package]] name = "const_fn" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f92cfa0fd5690b3cf8c1ef2cabbd9b7ef22fa53cf5e1f92b05103f6d5d1cf6e7" +checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935" [[package]] name = "constant_time_eq" @@ -516,17 +517,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" -[[package]] -name = "cookie" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951" -dependencies = [ - "percent-encoding", - "time 0.2.27", - "version_check", -] - [[package]] name = "cookie" version = "0.15.1" @@ -540,30 +530,14 @@ dependencies = [ [[package]] name = "cookie_store" -version = "0.12.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3818dfca4b0cb5211a659bbcbb94225b7127407b2b135e650d717bfb78ab10d3" +checksum = "b3f7034c0932dc36f5bd8ec37368d971346809435824f277cb3b8299fc56167c" dependencies = [ - "cookie 0.14.4", + "cookie", "idna", "log", - "publicsuffix 1.5.6", - "serde", - "serde_json", - "time 0.2.27", - "url", -] - -[[package]] -name = "cookie_store" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55b4ac5559dd39f7bdc516f769cb412b151585d8886d216871a8435ed7f862cd" -dependencies = [ - "cookie 0.15.1", - "idna", - "log", - "publicsuffix 2.1.1", + "publicsuffix", "serde", "serde_json", "time 0.2.27", @@ -572,9 +546,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.1" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ "core-foundation-sys", "libc", @@ -582,15 +556,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "cpufeatures" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" dependencies = [ "libc", ] @@ -612,9 +586,9 @@ checksum = "ccaeedb56da03b09f598226e25e80088cb4cd25f316e6e4df7d695f0feeb1403" [[package]] name = "crossbeam-queue" -version = "0.3.2" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b10ddc024425c88c2ad148c1b0fd53f4c6d38db9697c9f1588381212fa657c9" +checksum = "1f25d8400f4a7a5778f0e4e52384a48cbd9b5c495d110786187fc750075277a2" dependencies = [ "cfg-if", "crossbeam-utils", @@ -622,9 +596,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" +checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" dependencies = [ "cfg-if", "lazy_static", @@ -636,13 +610,23 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +[[package]] +name = "crypto-common" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +dependencies = [ + "generic-array 0.14.5", + "typenum", +] + [[package]] name = "crypto-mac" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.5", "subtle", ] @@ -679,9 +663,9 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "3.2.0" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" dependencies = [ "byteorder", "digest 0.9.0", @@ -692,9 +676,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.13.0" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "757c0ded2af11d8e739c4daea1ac623dd1624b06c844cf3f5a39f1bdbd99bb12" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" dependencies = [ "darling_core", "darling_macro", @@ -702,51 +686,51 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.13.0" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c34d8efb62d0c2d7f60ece80f75e5c63c1588ba68032740494b0b9a996466e3" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.36", - "quote 1.0.17", + "proc-macro2 1.0.39", + "quote 1.0.18", "strsim 0.10.0", - "syn 1.0.90", + "syn 1.0.95", ] [[package]] name = "darling_macro" -version = "0.13.0" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade7bff147130fe5e6d39f089c6bd49ec0250f35d70b2eebf72afdfc919f15cc" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" dependencies = [ "darling_core", - "quote 1.0.17", - "syn 1.0.90", + "quote 1.0.18", + "syn 1.0.95", ] [[package]] -name = "derivative" -version = "2.2.0" +name = "dashmap" +version = "5.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +checksum = "391b56fbd302e585b7a9494fb70e40949567b1cf9003a8e4a6041a1687c26573" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", + "cfg-if", + "hashbrown 0.12.1", + "lock_api", ] [[package]] name = "derive_more" -version = "0.99.16" +version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40eebddd2156ce1bb37b20bbe5151340a31828b1f2d22ba4141f3531710e38df" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "convert_case", - "proc-macro2 1.0.36", - "quote 1.0.17", - "rustc_version 0.3.3", - "syn 1.0.90", + "proc-macro2 1.0.39", + "quote 1.0.18", + "rustc_version 0.4.0", + "syn 1.0.95", ] [[package]] @@ -770,7 +754,17 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.5", +] + +[[package]] +name = "digest" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +dependencies = [ + "block-buffer 0.10.2", + "crypto-common", ] [[package]] @@ -801,7 +795,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ "libc", - "redox_users 0.4.0", + "redox_users 0.4.3", "winapi", ] @@ -823,17 +817,11 @@ version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" -[[package]] -name = "dtoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" - [[package]] name = "ed25519" -version = "1.2.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4620d40f6d2601794401d6dd95a5cf69b6c157852539470eeda433a99b3c0efc" +checksum = "1e9c280362032ea4203659fc489832d0204ef09f247a0506f170dafcac08c369" dependencies = [ "serde", "signature", @@ -850,7 +838,7 @@ dependencies = [ "rand 0.7.3", "serde", "serde_bytes", - "sha2", + "sha2 0.9.9", "zeroize", ] @@ -877,7 +865,7 @@ dependencies = [ "ciborium", "clap", "color-eyre", - "cookie_store 0.15.0", + "cookie_store", "digest 0.9.0", "divrem", "ed25519-dalek", @@ -885,6 +873,7 @@ dependencies = [ "fd-lock-rs", "futures", "git-version", + "helpers", "hex", "hmac", "http", @@ -893,13 +882,14 @@ dependencies = [ "imbl", "indexmap", "isocountry", - "itertools 0.10.1", + "itertools 0.10.3", "jsonpath_lib", "lazy_static", "libc", "log", - "nix 0.23.0", - "nom 7.0.0", + "models", + "nix 0.23.1", + "nom 7.1.1", "num", "num_enum", "openssh-keys", @@ -923,7 +913,7 @@ dependencies = [ "serde_json", "serde_with", "serde_yaml", - "sha2", + "sha2 0.9.9", "simple-logging", "sqlx", "stderrlog", @@ -934,7 +924,7 @@ dependencies = [ "tokio-stream", "tokio-tar", "tokio-tungstenite", - "tokio-util", + "tokio-util 0.6.10", "toml", "torut", "tracing", @@ -974,9 +964,9 @@ checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] name = "encoding_rs" -version = "0.8.28" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80df024fbc5ac80f87dfef0d9f5209a252f2a497f7f42944cff24d8253cac065" +checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" dependencies = [ "cfg-if", ] @@ -995,10 +985,16 @@ dependencies = [ ] [[package]] -name = "eyre" -version = "0.6.5" +name = "event-listener" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "221239d1d5ea86bf5d6f91c9d6bc3646ffe471b08ff9b0f91c44f115ac969d2b" +checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" + +[[package]] +name = "eyre" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" dependencies = [ "indenter", "once_cell", @@ -1020,9 +1016,9 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", "synstructure", ] @@ -1032,6 +1028,15 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" +[[package]] +name = "fastrand" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" +dependencies = [ + "instant", +] + [[package]] name = "fd-lock-rs" version = "0.1.3" @@ -1043,21 +1048,21 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98" +checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.2.10", + "redox_syscall 0.2.13", "winapi", ] [[package]] name = "fixedbitset" -version = "0.2.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" +checksum = "279fb028e20b3c4c320317955b77c5e0c9701f05a1d309905d6fc702cdc5053e" [[package]] name = "flume" @@ -1068,7 +1073,7 @@ dependencies = [ "futures-core", "futures-sink", "pin-project", - "spin 0.9.2", + "spin 0.9.3", ] [[package]] @@ -1119,9 +1124,9 @@ checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" [[package]] name = "futures" -version = "0.3.17" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12aa0eb539080d55c3f2d45a67c3b58b6b0773c1a3ca2dfec66d58c97fd66ca" +checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" dependencies = [ "futures-channel", "futures-core", @@ -1167,7 +1172,7 @@ checksum = "62007592ac46aa7c2b6416f7deb9a8a8f63a01e0f1d6e1787d5630170db2b63e" dependencies = [ "futures-core", "lock_api", - "parking_lot", + "parking_lot 0.11.2", ] [[package]] @@ -1182,9 +1187,9 @@ version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", ] [[package]] @@ -1212,7 +1217,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project-lite 0.2.7", + "pin-project-lite 0.2.9", "pin-utils", "slab", ] @@ -1228,9 +1233,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.4" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" dependencies = [ "typenum", "version_check", @@ -1249,9 +1254,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.3" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" dependencies = [ "cfg-if", "libc", @@ -1260,9 +1265,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.25.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7" +checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" [[package]] name = "git-version" @@ -1281,16 +1286,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe69f1cbdb6e28af2bac214e943b99ce8a0a06b447d15d3e61161b0423139f3f" dependencies = [ "proc-macro-hack", - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", ] [[package]] name = "h2" -version = "0.3.4" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7f3675cfef6a30c8031cf9e6493ebdc3bb3272a3fea3923c4210d1830e6a472" +checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" dependencies = [ "bytes 1.1.0", "fnv", @@ -1301,15 +1306,15 @@ dependencies = [ "indexmap", "slab", "tokio 1.15.0", - "tokio-util", + "tokio-util 0.7.2", "tracing", ] [[package]] name = "half" -version = "1.7.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62aca2aba2d62b4a7f5b33f3712cb1b0692779a56fb510499d5c0aa594daeaf3" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" [[package]] name = "hashbrown" @@ -1320,13 +1325,19 @@ dependencies = [ "ahash", ] +[[package]] +name = "hashbrown" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3" + [[package]] name = "hashlink" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf" dependencies = [ - "hashbrown", + "hashbrown 0.11.2", ] [[package]] @@ -1338,6 +1349,24 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "heck" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "helpers" +version = "0.1.0" +dependencies = [ + "models", + "pin-project", + "tokio 1.15.0", +] + [[package]] name = "hermit-abi" version = "0.1.19" @@ -1365,37 +1394,37 @@ dependencies = [ [[package]] name = "http" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1323096b05d41827dadeaee54c9981958c0f94e670bc94ed80037d1a7b8b186b" +checksum = "ff8670570af52249509a86f5e3e18a08c60b177071826898fde8997cf5f6bfbb" dependencies = [ "bytes 1.1.0", "fnv", - "itoa 0.4.8", + "itoa 1.0.2", ] [[package]] name = "http-body" -version = "0.4.3" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "399c583b2979440c60be0821a6199eca73bc3c8dcd9d070d75ac726e2c6186e5" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes 1.1.0", "http", - "pin-project-lite 0.2.7", + "pin-project-lite 0.2.9", ] [[package]] name = "httparse" -version = "1.5.1" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" +checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" [[package]] name = "httpdate" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "humantime" @@ -1405,9 +1434,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.13" +version = "0.14.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15d1cfb9e4f68655fa04c01f59edb405b6074a0f7118ea881e5026e4a1cd8593" +checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" dependencies = [ "bytes 1.1.0", "futures-channel", @@ -1418,8 +1447,8 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 0.4.8", - "pin-project-lite 0.2.7", + "itoa 1.0.2", + "pin-project-lite 0.2.9", "socket2", "tokio 1.15.0", "tower-service", @@ -1451,7 +1480,7 @@ dependencies = [ "futures", "hyper", "log", - "sha-1 0.9.8", + "sha-1 0.10.0", "tokio 1.15.0", "tokio-tungstenite", ] @@ -1508,12 +1537,12 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" +checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.11.2", "serde", ] @@ -1528,18 +1557,18 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ "cfg-if", ] [[package]] name = "ipnet" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" +checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" [[package]] name = "isocountry" @@ -1571,9 +1600,9 @@ dependencies = [ [[package]] name = "itertools" -version = "0.10.1" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf" +checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" dependencies = [ "either", ] @@ -1586,15 +1615,15 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "itoa" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" +checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" [[package]] name = "js-sys" -version = "0.3.54" +version = "0.3.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1866b355d9c878e5e607473cbe3f63282c0b7aad2db1dbebf55076c686918254" +checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" dependencies = [ "wasm-bindgen", ] @@ -1631,22 +1660,22 @@ dependencies = [ [[package]] name = "keccak" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" +checksum = "f9b7d56ba4a8344d6be9729995e6b06f928af29998cdf79fe390cbf6b1fee838" [[package]] name = "lalrpop" -version = "0.19.6" +version = "0.19.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15174f1c529af5bf1283c3bc0058266b483a67156f79589fab2a25e23cf8988" +checksum = "b30455341b0e18f276fa64540aff54deafb54c589de6aca68659c63dd2d5d823" dependencies = [ "ascii-canvas", "atty", "bit-set", "diff", "ena", - "itertools 0.10.1", + "itertools 0.10.3", "lalrpop-util", "petgraph", "pico-args", @@ -1655,14 +1684,14 @@ dependencies = [ "string_cache", "term 0.7.0", "tiny-keccak", - "unicode-xid 0.2.2", + "unicode-xid 0.2.3", ] [[package]] name = "lalrpop-util" -version = "0.19.6" +version = "0.19.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e58cce361efcc90ba8a0a5f982c741ff86b603495bb15a998412e957dcd278" +checksum = "bcf796c978e9b4d983414f4caedc9273aa33ee214c5b887bd55fde84c85d2dc4" dependencies = [ "regex", ] @@ -1688,15 +1717,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.121" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f" +checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" [[package]] name = "libsqlite3-sys" -version = "0.23.2" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cafc7c74096c336d9d27145f7ebd4f4b6f95ba16aa5a282387267e6925cb58" +checksum = "898745e570c7d0453cc1fbc4a701eb6c662ed54e8fec8b7d14be137ebeeb9d14" dependencies = [ "cc", "pkg-config", @@ -1721,18 +1750,19 @@ checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" [[package]] name = "lock_api" -version = "0.4.5" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109" +checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" dependencies = [ + "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.14" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if", ] @@ -1771,15 +1801,15 @@ dependencies = [ [[package]] name = "memchr" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memoffset" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" dependencies = [ "autocfg", ] @@ -1792,25 +1822,24 @@ checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "minimal-lexical" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c835948974f68e0bd58636fc6c5b1fbff7b297e3046f11b3b3c18bbac012c6d" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.4.4" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082" dependencies = [ "adler", - "autocfg", ] [[package]] name = "mio" -version = "0.7.13" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c2bdb6314ec10835cd3293dd268473a835c02b7b352e788be788b3c6ca6bb16" +checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" dependencies = [ "libc", "log", @@ -1828,11 +1857,22 @@ dependencies = [ "winapi", ] +[[package]] +name = "models" +version = "0.1.0" +dependencies = [ + "emver", + "patch-db", + "rand 0.7.3", + "serde", + "thiserror", +] + [[package]] name = "native-tls" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48ba9f7719b5a0f42f338907614285fb5fd70e53858141f69898a1fb7203b24d" +checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" dependencies = [ "lazy_static", "libc", @@ -1866,9 +1906,9 @@ dependencies = [ [[package]] name = "nix" -version = "0.23.0" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f305c2c2e4c39a82f7bf0bf65fb557f9070ce06781d4f2454295cc34b1c43188" +checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" dependencies = [ "bitflags", "cc", @@ -1892,20 +1932,19 @@ dependencies = [ [[package]] name = "nom" -version = "7.0.0" +version = "7.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffd9d26838a953b4af82cbeb9f1592c6798916983959be223a7124e992742c1" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" dependencies = [ "memchr", "minimal-lexical", - "version_check", ] [[package]] name = "ntapi" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" +checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" dependencies = [ "winapi", ] @@ -1926,9 +1965,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74e768dff5fb39a41b3bcd30bb25cf989706c90d028d1ad71971987aa309d535" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" dependencies = [ "autocfg", "num-integer", @@ -1937,18 +1976,18 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085" +checksum = "97fbc387afefefd5e9e39493299f3069e14a140dd34dc19b4c1c1a8fddb6a790" dependencies = [ "num-traits", ] [[package]] name = "num-integer" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ "autocfg", "num-traits", @@ -1956,9 +1995,9 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.42" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" dependencies = [ "autocfg", "num-integer", @@ -1979,18 +2018,18 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" dependencies = [ "hermit-abi", "libc", @@ -1998,40 +2037,39 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.5.4" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9bd055fb730c4f8f4f57d45d35cd6b3f0980535b056dc7ff119cee6a66ed6f" +checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9" dependencies = [ - "derivative", "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.5.4" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "486ea01961c4a818096de679a8b740b26d9033146ac5291b1c98557658f8cdd9" +checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" dependencies = [ "proc-macro-crate", - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", ] [[package]] name = "object" -version = "0.26.2" +version = "0.28.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39f37e50073ccad23b6d09bcb5b263f4e76d3bb6038e4a3c08e52162ffa8abc2" +checksum = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.10.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" +checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" [[package]] name = "opaque-debug" @@ -2054,44 +2092,56 @@ dependencies = [ "base64", "byteorder", "md-5", - "sha2", + "sha2 0.9.9", "thiserror", ] [[package]] name = "openssl" -version = "0.10.36" +version = "0.10.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9facdb76fec0b73c406f125d44d86fdad818d66fef0531eec9233ca425ff4a" +checksum = "fb81a6430ac911acb25fe5ac8f1d2af1b4ea8a4fdfda0f1ee4292af2e2d8eb0e" dependencies = [ "bitflags", "cfg-if", "foreign-types", "libc", "once_cell", + "openssl-macros", "openssl-sys", ] [[package]] -name = "openssl-probe" -version = "0.1.4" +name = "openssl-macros" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" +checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +dependencies = [ + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "111.16.0+1.1.1l" +version = "111.20.0+1.1.1o" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab2173f69416cf3ec12debb5823d244127d23a9b127d5a5189aa97c5fa2859f" +checksum = "92892c4f87d56e376e469ace79f1128fdaded07646ddf73aa0be4706ff712dec" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.66" +version = "0.9.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1996d2d305e561b70d1ee0c53f1542833f4e1ac6ce9a6708b6ff2738ca67dc82" +checksum = "9d5fd19fb3e0a8191c1e34935718976a3e70c112ab9a24af6d7cadccd9d90bc0" dependencies = [ "autocfg", "cc", @@ -2115,7 +2165,17 @@ checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ "instant", "lock_api", - "parking_lot_core", + "parking_lot_core 0.8.5", +] + +[[package]] +name = "parking_lot" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.3", ] [[package]] @@ -2127,16 +2187,29 @@ dependencies = [ "cfg-if", "instant", "libc", - "redox_syscall 0.2.10", + "redox_syscall 0.2.13", "smallvec", "winapi", ] [[package]] -name = "password-hash" -version = "0.3.0" +name = "parking_lot_core" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ad7268ef9bc463fddde8361d358fbfae1aeeb1fb62eca111cd8c763bf1c5891" +checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.2.13", + "smallvec", + "windows-sys", +] + +[[package]] +name = "password-hash" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d791538a6dcc1e7cb7fe6f6b58aca40e7f79403c45b2bc274008b5e647af1d8" dependencies = [ "base64ct", "rand_core 0.6.3", @@ -2160,7 +2233,7 @@ dependencies = [ "json-patch", "json-ptr", "lazy_static", - "nix 0.23.0", + "nix 0.23.1", "patch-db-macro", "serde", "serde_cbor 0.11.1", @@ -2176,18 +2249,18 @@ name = "patch-db-macro" version = "0.1.0" dependencies = [ "patch-db-macro-internals", - "proc-macro2 1.0.36", - "syn 1.0.90", + "proc-macro2 1.0.39", + "syn 1.0.95", ] [[package]] name = "patch-db-macro-internals" version = "0.1.0" dependencies = [ - "heck", - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", + "heck 0.3.3", + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", ] [[package]] @@ -2199,7 +2272,7 @@ dependencies = [ "crypto-mac", "hmac", "password-hash", - "sha2", + "sha2 0.9.9", ] [[package]] @@ -2235,9 +2308,9 @@ checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" dependencies = [ "pest", "pest_meta", - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", ] [[package]] @@ -2253,9 +2326,9 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7" +checksum = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f" dependencies = [ "fixedbitset", "indexmap", @@ -2263,9 +2336,9 @@ dependencies = [ [[package]] name = "phf_shared" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" dependencies = [ "siphasher", ] @@ -2278,22 +2351,22 @@ checksum = "db8bcd96cb740d03149cbad5518db9fd87126a10ab519c011893b1754134c468" [[package]] name = "pin-project" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "576bc800220cc65dac09e99e97b08b358cfab6e17078de8dc5fee223bd2d0c08" +checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389" +checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", ] [[package]] @@ -2304,9 +2377,9 @@ checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" [[package]] name = "pin-project-lite" -version = "0.2.7" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "pin-utils" @@ -2316,9 +2389,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.19" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" +checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" [[package]] name = "platforms" @@ -2328,9 +2401,9 @@ checksum = "989d43012e2ca1c4a02507c67282691a0a3207f9dc67cec596b43fe925b3d325" [[package]] name = "ppv-lite86" -version = "0.2.10" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" [[package]] name = "precomputed-hash" @@ -2354,9 +2427,9 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "1.1.0" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebace6889caf889b4d3f76becee12e90353f2b8c7d875534a71e5742f8f6f83" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" dependencies = [ "thiserror", "toml", @@ -2379,11 +2452,11 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.36" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f" dependencies = [ - "unicode-xid 0.2.2", + "unicode-ident", ] [[package]] @@ -2398,7 +2471,7 @@ dependencies = [ "lazy_static", "num-traits", "quick-error 2.0.1", - "rand 0.8.4", + "rand 0.8.5", "rand_chacha 0.3.1", "rand_xorshift", "regex-syntax", @@ -2419,19 +2492,9 @@ dependencies = [ [[package]] name = "psl-types" -version = "2.0.7" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66b398073e7cdd6f05934389a8f5961e3aabfa66675b6f440df4e2c793d51a4f" - -[[package]] -name = "publicsuffix" -version = "1.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95b4ce31ff0a27d93c8de1849cf58162283752f065a90d508f1105fa6c9a213f" -dependencies = [ - "idna", - "url", -] +checksum = "e8eda7c62d9ecaafdf8b62374c006de0adf61666ae96a96ba74a37134aa4e470" [[package]] name = "publicsuffix" @@ -2440,7 +2503,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "292972edad6bbecc137ab84c5e36421a4a6c979ea31d3cc73540dd04315b33e1" dependencies = [ "byteorder", - "hashbrown", + "hashbrown 0.11.2", "idna", "psl-types", ] @@ -2468,11 +2531,11 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632d02bff7f874a36f33ea8bb416cd484b90cc66c1194b1a1110d067a7013f58" +checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" dependencies = [ - "proc-macro2 1.0.36", + "proc-macro2 1.0.39", ] [[package]] @@ -2491,19 +2554,18 @@ dependencies = [ "libc", "rand_chacha 0.2.2", "rand_core 0.5.1", - "rand_hc 0.2.0", + "rand_hc", ] [[package]] name = "rand" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha 0.3.1", "rand_core 0.6.3", - "rand_hc 0.3.1", ] [[package]] @@ -2541,7 +2603,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" dependencies = [ - "getrandom 0.2.3", + "getrandom 0.2.6", ] [[package]] @@ -2553,15 +2615,6 @@ dependencies = [ "rand_core 0.5.1", ] -[[package]] -name = "rand_hc" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" -dependencies = [ - "rand_core 0.6.3", -] - [[package]] name = "rand_xorshift" version = "0.3.0" @@ -2588,9 +2641,9 @@ checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" [[package]] name = "redox_syscall" -version = "0.2.10" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" dependencies = [ "bitflags", ] @@ -2608,19 +2661,20 @@ dependencies = [ [[package]] name = "redox_users" -version = "0.4.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.3", - "redox_syscall 0.2.10", + "getrandom 0.2.6", + "redox_syscall 0.2.13", + "thiserror", ] [[package]] name = "regex" -version = "1.5.4" +version = "1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1" dependencies = [ "aho-corasick", "memchr", @@ -2638,9 +2692,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.25" +version = "0.6.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64" [[package]] name = "remove_dir_all" @@ -2653,17 +2707,18 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.4" +version = "0.11.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246e9f61b9bb77df069a947682be06e31ac43ea37862e244a69f177694ea6d22" +checksum = "46a1f7aa4f35e5e8b4160449f51afc758f0ce6454315a9fa7d0d113e958c41eb" dependencies = [ "base64", "bytes 1.1.0", - "cookie 0.14.4", - "cookie_store 0.12.0", + "cookie", + "cookie_store", "encoding_rs", "futures-core", "futures-util", + "h2", "http", "http-body", "hyper", @@ -2675,14 +2730,15 @@ dependencies = [ "mime", "native-tls", "percent-encoding", - "pin-project-lite 0.2.7", + "pin-project-lite 0.2.9", + "proc-macro-hack", "serde", "serde_json", "serde_urlencoded", - "time 0.2.27", "tokio 1.15.0", "tokio-native-tls", "tokio-socks", + "tokio-util 0.6.10", "url", "wasm-bindgen", "wasm-bindgen-futures", @@ -2697,8 +2753,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48cbf3a2aeeeaa6d10a76db86068c3560320f6265c3a0e2642e0538e11c2d143" dependencies = [ "bytes 1.1.0", - "cookie 0.15.1", - "cookie_store 0.15.0", + "cookie", + "cookie_store", "reqwest", "url", ] @@ -2751,18 +2807,18 @@ dependencies = [ name = "rpc-toolkit-macro" version = "0.1.0" dependencies = [ - "proc-macro2 1.0.36", + "proc-macro2 1.0.39", "rpc-toolkit-macro-internals", - "syn 1.0.90", + "syn 1.0.95", ] [[package]] name = "rpc-toolkit-macro-internals" version = "0.1.0" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", ] [[package]] @@ -2794,11 +2850,11 @@ dependencies = [ [[package]] name = "rustc_version" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 0.11.0", + "semver 1.0.9", ] [[package]] @@ -2816,9 +2872,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61b3909d758bb75c79f23d4736fac9433868679d3ad2ea7a61e3c25cfda9a088" +checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" [[package]] name = "rusty-fork" @@ -2834,18 +2890,18 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.5" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" [[package]] name = "schannel" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" dependencies = [ "lazy_static", - "winapi", + "windows-sys", ] [[package]] @@ -2866,9 +2922,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.3.1" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23a2ac85147a3a11d77ecf1bc7166ec0b92febfa4461c37944e180f319ece467" +checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" dependencies = [ "bitflags", "core-foundation", @@ -2879,9 +2935,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.4.2" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9dd14d83160b528b7bfd66439110573efcfbe281b17fc2ca9f39f550d619c7e" +checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" dependencies = [ "core-foundation-sys", "libc", @@ -2893,17 +2949,14 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" dependencies = [ - "semver-parser 0.7.0", + "semver-parser", ] [[package]] name = "semver" -version = "0.11.0" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" -dependencies = [ - "semver-parser 0.10.2", -] +checksum = "8cb243bdfdb5936c8dc3c45762a19d12ab4550cdc753bc247637d4ec35a040fd" [[package]] name = "semver-parser" @@ -2911,29 +2964,20 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -[[package]] -name = "semver-parser" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" -dependencies = [ - "pest", -] - [[package]] name = "serde" -version = "1.0.136" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" dependencies = [ "serde_derive", ] [[package]] name = "serde_bytes" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9" +checksum = "212e73464ebcde48d723aa02eb270ba62eff38a9b732df31f33f1b4e145f3a54" dependencies = [ "serde", ] @@ -2958,53 +3002,53 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.136" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" +checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", ] [[package]] name = "serde_json" -version = "1.0.79" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" +checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" dependencies = [ "indexmap", - "itoa 1.0.1", + "itoa 1.0.2", "ryu", "serde", ] [[package]] name = "serde_test" -version = "1.0.130" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82178225dbdeae2d5d190e8649287db6a3a32c6d24da22ae3146325aa353e4c" +checksum = "fe196827aea34242c314d2f0dd49ed00a129225e80dda71b0dbf65d54d25628d" dependencies = [ "serde", ] [[package]] name = "serde_urlencoded" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 0.4.8", + "itoa 1.0.2", "ryu", "serde", ] [[package]] name = "serde_with" -version = "1.10.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "062b87e45d8f26714eacfaef0ed9a583e2bfd50ebd96bdd3c200733bd5758e2c" +checksum = "b827f2113224f3f19a665136f006709194bdfdcb1fdc1e4b2b5cbac8e0cced54" dependencies = [ "rustversion", "serde", @@ -3014,24 +3058,24 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "1.5.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98c1fcca18d55d1763e1c16873c4bde0ac3ef75179a28c7b372917e0494625be" +checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" dependencies = [ "darling", - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", ] [[package]] name = "serde_yaml" -version = "0.8.21" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8c608a35705a5d3cdc9fbe403147647ff34b921f8e833e49306df898f9b20af" +checksum = "707d15895415db6628332b737c838b88c598522e4dc70647e59b72312924aebc" dependencies = [ - "dtoa", "indexmap", + "ryu", "serde", "yaml-rust", ] @@ -3062,16 +3106,36 @@ dependencies = [ ] [[package]] -name = "sha1" -version = "0.6.0" +name = "sha-1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" +checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.3", +] + +[[package]] +name = "sha1" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" +dependencies = [ + "sha1_smol", +] + +[[package]] +name = "sha1_smol" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" [[package]] name = "sha2" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ "block-buffer 0.9.0", "cfg-if", @@ -3080,6 +3144,17 @@ dependencies = [ "opaque-debug 0.3.0", ] +[[package]] +name = "sha2" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.3", +] + [[package]] name = "sha3" version = "0.9.1" @@ -3112,9 +3187,9 @@ dependencies = [ [[package]] name = "signature" -version = "1.3.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19772be3c4dd2ceaacf03cb41d5885f2a02c4d8804884918e3a258480803335" +checksum = "f054c6c1a6e95179d6f23ed974060dcefb2d9388bb7256900badad682c499de4" [[package]] name = "simple-logging" @@ -3129,9 +3204,9 @@ dependencies = [ [[package]] name = "siphasher" -version = "0.3.7" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533494a8f9b724d33625ab53c6c4800f7cc445895924a8ef649222dcb76e938b" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" [[package]] name = "sized-chunks" @@ -3145,9 +3220,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590" +checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" [[package]] name = "smallvec" @@ -3157,9 +3232,9 @@ checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" [[package]] name = "socket2" -version = "0.4.1" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765f090f0e423d2b55843402a07915add955e7d60657db13707a159727326cad" +checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" dependencies = [ "libc", "winapi", @@ -3173,9 +3248,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spin" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "511254be0c5bcf062b019a6c89c01a664aa359ded62f78aa72c6fc137c0590e5" +checksum = "c530c2b0d0bf8b69304b39fe2001993e267461948b890cd037d8ad4293fa1a0d" dependencies = [ "lock_api", ] @@ -3186,16 +3261,16 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4b7922be017ee70900be125523f38bdd644f4f06a1b16e8fa5a8ee8c34bffd4" dependencies = [ - "itertools 0.10.1", - "nom 7.0.0", + "itertools 0.10.3", + "nom 7.1.1", "unicode_categories", ] [[package]] name = "sqlx" -version = "0.5.11" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc15591eb44ffb5816a4a70a7efd5dd87bfd3aa84c4c200401c4396140525826" +checksum = "551873805652ba0d912fec5bbb0f8b4cdd96baf8e2ebf5970e5671092966019b" dependencies = [ "sqlx-core", "sqlx-macros", @@ -3203,9 +3278,9 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.5.11" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "195183bf6ff8328bb82c0511a83faf60aacf75840103388851db61d7a9854ae3" +checksum = "e48c61941ccf5ddcada342cd59e3e5173b007c509e1e8e990dafc830294d9dc5" dependencies = [ "ahash", "atoi", @@ -3216,6 +3291,7 @@ dependencies = [ "crc", "crossbeam-queue", "either", + "event-listener", "flume", "futures-channel", "futures-core", @@ -3225,7 +3301,7 @@ dependencies = [ "hashlink", "hex", "indexmap", - "itoa 1.0.1", + "itoa 1.0.2", "libc", "libsqlite3-sys", "log", @@ -3235,7 +3311,7 @@ dependencies = [ "percent-encoding", "rustls", "serde", - "sha2", + "sha2 0.10.2", "smallvec", "sqlformat", "sqlx-rt", @@ -3249,31 +3325,31 @@ dependencies = [ [[package]] name = "sqlx-macros" -version = "0.5.11" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee35713129561f5e55c554bba1c378e2a7e67f81257b7311183de98c50e6f94" +checksum = "bc0fba2b0cae21fc00fe6046f8baa4c7fcb49e379f0f592b04696607f69ed2e1" dependencies = [ "dotenv", "either", - "heck", + "heck 0.4.0", "hex", "once_cell", - "proc-macro2 1.0.36", - "quote 1.0.17", + "proc-macro2 1.0.39", + "quote 1.0.18", "serde", "serde_json", - "sha2", + "sha2 0.10.2", "sqlx-core", "sqlx-rt", - "syn 1.0.90", + "syn 1.0.95", "url", ] [[package]] name = "sqlx-rt" -version = "0.5.11" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b555e70fbbf84e269ec3858b7a6515bcfe7a166a7cc9c636dd6efd20431678b6" +checksum = "4db708cd3e459078f85f39f96a00960bd841f66ee2a669e90bf36907f5a79aae" dependencies = [ "once_cell", "tokio 1.15.0", @@ -3328,11 +3404,11 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.17", + "proc-macro2 1.0.39", + "quote 1.0.18", "serde", "serde_derive", - "syn 1.0.90", + "syn 1.0.95", ] [[package]] @@ -3342,13 +3418,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" dependencies = [ "base-x", - "proc-macro2 1.0.36", - "quote 1.0.17", + "proc-macro2 1.0.39", + "quote 1.0.18", "serde", "serde_derive", "serde_json", "sha1", - "syn 1.0.90", + "syn 1.0.95", ] [[package]] @@ -3359,12 +3435,13 @@ checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" [[package]] name = "string_cache" -version = "0.8.1" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ddb1139b5353f96e429e1a5e19fbaf663bddedaa06d1dbd49f82e352601209a" +checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08" dependencies = [ - "lazy_static", "new_debug_unreachable", + "once_cell", + "parking_lot 0.12.0", "phf_shared", "precomputed-hash", ] @@ -3410,25 +3487,25 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.90" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "704df27628939572cd88d33f171cd6f896f4eaca85252c6e0a72d8d8287ee86f" +checksum = "fbaf6116ab8924f39d52792136fb74fd60a80194cf1b1c6ffa6453eef1c3f942" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.17", - "unicode-xid 0.2.2", + "proc-macro2 1.0.39", + "quote 1.0.18", + "unicode-ident", ] [[package]] name = "synstructure" -version = "0.12.5" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "474aaa926faa1603c40b7885a9eaea29b444d1cb2850cb7c0e37bb1a4182f4fa" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", - "unicode-xid 0.2.2", + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", + "unicode-xid 0.2.3", ] [[package]] @@ -3439,9 +3516,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tar" -version = "0.4.37" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6f5515d3add52e0bbdcad7b83c388bb36ba7b754dda3b5f5bc2d38640cdba5c" +checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" dependencies = [ "filetime", "libc", @@ -3450,14 +3527,14 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" +checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" dependencies = [ "cfg-if", + "fastrand", "libc", - "rand 0.8.4", - "redox_syscall 0.2.10", + "redox_syscall 0.2.13", "remove_dir_all", "winapi", ] @@ -3486,9 +3563,9 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" dependencies = [ "winapi-util", ] @@ -3504,22 +3581,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", ] [[package]] @@ -3585,10 +3662,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f" dependencies = [ "proc-macro-hack", - "proc-macro2 1.0.36", - "quote 1.0.17", + "proc-macro2 1.0.39", + "quote 1.0.18", "standback", - "syn 1.0.90", + "syn 1.0.95", ] [[package]] @@ -3602,9 +3679,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.4.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5241dd6f21443a3606b432718b166d3cedc962fd4b8bea54a8bc7f514ebda986" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" dependencies = [ "tinyvec_macros", ] @@ -3639,8 +3716,8 @@ dependencies = [ "mio", "num_cpus", "once_cell", - "parking_lot", - "pin-project-lite 0.2.7", + "parking_lot 0.11.2", + "pin-project-lite 0.2.9", "signal-hook-registry", "tokio-macros", "winapi", @@ -3654,7 +3731,7 @@ checksum = "e7d4237822b7be8fff0a7a27927462fad435dcb6650f95cea9e946bf6bdc7e07" dependencies = [ "bytes 0.5.6", "once_cell", - "pin-project-lite 0.2.7", + "pin-project-lite 0.2.9", "tokio 0.2.25", "tokio 1.15.0", "tokio-stream", @@ -3666,9 +3743,9 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", ] [[package]] @@ -3711,9 +3788,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3" dependencies = [ "futures-core", - "pin-project-lite 0.2.7", + "pin-project-lite 0.2.9", "tokio 1.15.0", - "tokio-util", + "tokio-util 0.6.10", ] [[package]] @@ -3724,7 +3801,7 @@ dependencies = [ "filetime", "futures-core", "libc", - "redox_syscall 0.2.10", + "redox_syscall 0.2.13", "tokio 1.15.0", "tokio-stream", "xattr", @@ -3745,32 +3822,46 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.6.8" +version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d3725d3efa29485e87311c5b699de63cde14b00ed4d256b8318aa30ca452cd" +checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" dependencies = [ "bytes 1.1.0", "futures-core", "futures-sink", "log", - "pin-project-lite 0.2.7", + "pin-project-lite 0.2.9", "tokio 1.15.0", ] [[package]] -name = "toml" -version = "0.5.8" +name = "tokio-util" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +checksum = "f988a1a1adc2fb21f9c12aa96441da33a1728193ae0b95d2be22dbd17fcb4e5c" +dependencies = [ + "bytes 1.1.0", + "futures-core", + "futures-sink", + "pin-project-lite 0.2.9", + "tokio 1.15.0", + "tracing", +] + +[[package]] +name = "toml" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" dependencies = [ "serde", ] [[package]] name = "torut" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecb506186a6ad032c4b50bd92c35307a32f95146e7d07ee28b93cc1410dfc384" +checksum = "99febc413f26cf855b3a309c5872edff5c31e0ffe9c2fce5681868761df36f69" dependencies = [ "base32", "base64", @@ -3781,7 +3872,7 @@ dependencies = [ "rand 0.7.3", "serde", "serde_derive", - "sha2", + "sha2 0.9.9", "sha3", "tokio 1.15.0", ] @@ -3794,34 +3885,35 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.29" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" +checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09" dependencies = [ "cfg-if", - "pin-project-lite 0.2.7", + "pin-project-lite 0.2.9", "tracing-attributes", "tracing-core", ] [[package]] name = "tracing-attributes" -version = "0.1.18" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e" +checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", ] [[package]] name = "tracing-core" -version = "0.1.21" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4" +checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" dependencies = [ "lazy_static", + "valuable", ] [[package]] @@ -3846,9 +3938,9 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" dependencies = [ "lazy_static", "log", @@ -3857,9 +3949,9 @@ dependencies = [ [[package]] name = "tracing-serde" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb65ea441fbb84f9f6748fd496cf7f63ec9af5bca94dd86456978d055e8eb28b" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" dependencies = [ "serde", "tracing-core", @@ -3867,11 +3959,11 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.2.20" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9cbe87a2fa7e35900ce5de20220a582a9483a7063811defce79d7cbd59d4cfe" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" dependencies = [ - "ansi_term 0.12.1", + "ansi_term", "chrono", "lazy_static", "matchers", @@ -3889,9 +3981,9 @@ dependencies = [ [[package]] name = "treediff" -version = "4.0.0" +version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9975655adeb6c47931d6bcd4173a493a1feb510a549f9e5f41f6f1f9fc24836f" +checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" dependencies = [ "serde_json", ] @@ -3915,7 +4007,7 @@ dependencies = [ "httparse", "input_buffer", "log", - "rand 0.8.4", + "rand 0.8.5", "sha-1 0.9.8", "thiserror", "url", @@ -3928,16 +4020,16 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a46ee5bd706ff79131be9c94e7edcb82b703c487766a114434e5790361cf08c5" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", ] [[package]] name = "typenum" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" [[package]] name = "ucd-trie" @@ -3947,9 +4039,15 @@ checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" [[package]] name = "unicode-bidi" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246f4c42e67e7a4e3c6106ff716a5d067d4132a642840b242e357e468a2a0085" +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" + +[[package]] +name = "unicode-ident" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee" [[package]] name = "unicode-normalization" @@ -3962,15 +4060,15 @@ dependencies = [ [[package]] name = "unicode-segmentation" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b" +checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" [[package]] name = "unicode-width" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" +checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" [[package]] name = "unicode-xid" @@ -3980,9 +4078,9 @@ checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" [[package]] name = "unicode-xid" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" [[package]] name = "unicode_categories" @@ -4015,6 +4113,12 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + [[package]] name = "vcpkg" version = "0.2.15" @@ -4029,9 +4133,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "wait-timeout" @@ -4066,36 +4170,34 @@ checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" [[package]] name = "wasm-bindgen" -version = "0.2.77" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e68338db6becec24d3c7977b5bf8a48be992c934b5d07177e3931f5dc9b076c" +checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" dependencies = [ "cfg-if", - "serde", - "serde_json", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.77" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f34c405b4f0658583dba0c1c7c9b694f3cac32655db463b56c254a1c75269523" +checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" dependencies = [ "bumpalo", "lazy_static", "log", - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.27" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a87d738d4abc4cf22f6eb142f5b9a81301331ee3c767f2fef2fda4e325492060" +checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2" dependencies = [ "cfg-if", "js-sys", @@ -4105,38 +4207,38 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.77" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d5a6580be83b19dc570a8f9c324251687ab2184e57086f71625feb57ec77c8" +checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" dependencies = [ - "quote 1.0.17", + "quote 1.0.18", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.77" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3775a030dc6f5a0afd8a84981a21cc92a781eb429acef9ecce476d0c9113e92" +checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.77" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c279e376c7a8e8752a8f1eaa35b7b0bee6bb9fb0cdacfa97cc3f1f289c87e2b4" +checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" [[package]] name = "web-sys" -version = "0.3.54" +version = "0.3.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a84d70d1ec7d2da2d26a5bd78f4bca1b8c3254805363ce743b7a05bc30d195a" +checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" dependencies = [ "js-sys", "wasm-bindgen", @@ -4193,10 +4295,53 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "winreg" -version = "0.7.0" +name = "windows-sys" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +dependencies = [ + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + +[[package]] +name = "windows_i686_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" + +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" + +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" dependencies = [ "winapi", ] @@ -4209,9 +4354,9 @@ checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" [[package]] name = "xattr" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c" +checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" dependencies = [ "libc", ] @@ -4237,21 +4382,21 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.4.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "377db0846015f7ae377174787dd452e1c5f5a9050bc6f954911d01f116daa0cd" +checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.1.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2c1e130bebaeab2f23886bf9acbaca14b092408c452543c857f66399cd6dab1" +checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" dependencies = [ - "proc-macro2 1.0.36", - "quote 1.0.17", - "syn 1.0.90", + "proc-macro2 1.0.39", + "quote 1.0.18", + "syn 1.0.95", "synstructure", ] diff --git a/system-images/compat/Cargo.toml b/system-images/compat/Cargo.toml index 33b45f476..9ce615ffe 100644 --- a/system-images/compat/Cargo.toml +++ b/system-images/compat/Cargo.toml @@ -10,6 +10,7 @@ version = "0.1.0" anyhow = { version = "1.0.40", features = ["backtrace"] } beau_collector = "0.2.1" clap = "2.33.3" +dashmap = "5.3.2" embassy-os = { path = "../../backend", default-features = false } emver = { version = "0.1.2", features = ["serde"] } failure = "0.1.8"