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 a927ac093..000000000 Binary files a/backend/src/procedure/js_scripts/ARM_JS_SNAPSHOT.bin and /dev/null differ diff --git a/backend/src/procedure/js_scripts/JS_SNAPSHOT.bin b/backend/src/procedure/js_scripts/JS_SNAPSHOT.bin deleted file mode 100644 index 65249a414..000000000 Binary files a/backend/src/procedure/js_scripts/JS_SNAPSHOT.bin and /dev/null differ 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 000000000..7b6059a90 Binary files /dev/null and b/libs/js_engine/src/artifacts/ARM_JS_SNAPSHOT.bin differ 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 000000000..9b86d3596 Binary files /dev/null and b/libs/js_engine/src/artifacts/JS_SNAPSHOT.bin differ diff --git a/backend/src/procedure/js_scripts/loadModule.js b/libs/js_engine/src/artifacts/loadModule.js similarity index 89% rename from backend/src/procedure/js_scripts/loadModule.js rename to libs/js_engine/src/artifacts/loadModule.js index c9a030e26..fd868f577 100644 --- a/backend/src/procedure/js_scripts/loadModule.js +++ b/libs/js_engine/src/artifacts/loadModule.js @@ -21,14 +21,12 @@ function jsonPointerValue(obj, pointer) { } // @ts-ignore -const context = Deno.core.opSync("get_context"); -// @ts-ignore -const writeFile = ({ path, volumeId, toWrite }) => 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"