From aebf6678a8ea81ef48ac24c0a259130d9ab9e42e Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 7 Jul 2021 16:54:14 -0400 Subject: [PATCH 001/459] wip: move out of dioxus main --- .gitignore | 2 + .vscode/settings.json | 3 + Cargo.toml | 33 ++++++++++ README.md | 48 ++++++++++++++ src/builder.rs | 146 ++++++++++++++++++++++++++++++++++++++++++ src/cargo.rs | 69 ++++++++++++++++++++ src/cli.rs | 62 ++++++++++++++++++ src/config.rs | 92 ++++++++++++++++++++++++++ src/develop.rs | 111 ++++++++++++++++++++++++++++++++ src/error.rs | 34 ++++++++++ src/lib.rs | 8 +++ src/logging.rs | 49 ++++++++++++++ src/main.rs | 28 ++++++++ src/watch.rs | 11 ++++ 14 files changed, 696 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 Cargo.toml create mode 100644 README.md create mode 100644 src/builder.rs create mode 100644 src/cargo.rs create mode 100644 src/cli.rs create mode 100644 src/config.rs create mode 100644 src/develop.rs create mode 100644 src/error.rs create mode 100644 src/lib.rs create mode 100644 src/logging.rs create mode 100644 src/main.rs create mode 100644 src/watch.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..96ef6c0b9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +Cargo.lock diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..80f51cff8 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "rust-analyzer.inlayHints.enable": false +} \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 000000000..299a26ae6 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,33 @@ +[package] +name = "dioxus-studio" +version = "0.1.0" +authors = ["Jonathan Kelley "] +edition = "2018" +description = "CLI tool for developing, testing, and publishing Dioxus apps" +"license" = "MIT/Apache-2.0" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +thiserror = "1.0.23" +log = "0.4.13" +fern = { version="0.6.0", features=["colored"] } +wasm-bindgen-cli-support = "0.2.73" +anyhow = "1.0.38" +argh = "0.1.4" +serde = "1.0.120" +serde_json = "1.0.61" +async-std = { version="1.9.0", features=["attributes"] } +tide = "0.15.0" +fs_extra = "1.2.0" + +cargo_toml = "0.8.1" +futures = "0.3.12" +notify = "5.0.0-pre.4" +rjdebounce = "0.2.1" +tempfile = "3.2.0" + +[[bin]] + +path = "src/main.rs" +name = "dioxus" diff --git a/README.md b/README.md new file mode 100644 index 000000000..bf2e3310a --- /dev/null +++ b/README.md @@ -0,0 +1,48 @@ +
+

📦✨ dioxus-cli

+

+ Tooling to supercharge dioxus projects +

+
+ +# About +--- +dioxus-cli (inspired by wasm-pack and webpack) is a tool to help get dioxus projects off the ground. It handles all the build, development, bundling, and publishing to make web development just a simple two commands: `cargo init` and `dioxus-cli publish`. + +Best thing: +- No NPM. +- No Webpack. +- No `node_modules`. +- No Babel +- No parcel +- No rollup +- No ESLint + +Just install Rust, dioxus-cli, and you're good to go. +`cargo install --git github.com/jkelleyrtp/dioxus-cli` + +Need a development server? +`dioxus develop` + +Need to run an example? +`dioxus develop --example textbox` + +Need to benchmark a component? +`dioxus bench` + +Need to test your code? +`dioxus test` + +Need to build your code into a bundle? +`dioxus build --outdir public` + +Need to publish your code to GitHub pages, Netlify, etc? +`dioxus publish --ghpages myrepo.git` + +# Use in your project +--- +Sometimes you'll want to include static assets without bundling them into your .wasm content. dioxus-cli provides a few ways of doing this: + +- Load in dynamic content using `dioxus::asset("./static/images/blah.svg")` +- Live-reload HTML templates without rebuilding your .wasm with `dioxus::template("./templates/blah.html")` +- Use a CSS library like tailwind in your dioxus configuration with diff --git a/src/builder.rs b/src/builder.rs new file mode 100644 index 000000000..1d06b3ae8 --- /dev/null +++ b/src/builder.rs @@ -0,0 +1,146 @@ +use crate::{ + cli::BuildOptions, + config::{Config, ExecutableType}, + error::Result, +}; +use log::{info, warn}; +use std::{io::Write, process::Command}; +use wasm_bindgen_cli_support::Bindgen; + +pub struct BuildConfig {} +impl Into for BuildOptions { + fn into(self) -> BuildConfig { + BuildConfig {} + } +} +impl Default for BuildConfig { + fn default() -> Self { + Self {} + } +} + +pub fn build(config: &Config, _build_config: &BuildConfig) -> Result<()> { + /* + [1] Build the project with cargo, generating a wasm32-unknown-unknown target (is there a more specific, better target to leverage?) + [2] Generate the appropriate build folders + [3] Wasm-bindgen the .wasm fiile, and move it into the {builddir}/modules/xxxx/xxxx_bg.wasm + [4] Wasm-opt the .wasm file with whatever optimizations need to be done + [5] Link up the html page to the wasm module + */ + + let Config { + out_dir, + crate_dir, + target_dir, + static_dir, + executable, + .. + } = config; + + let t_start = std::time::Instant::now(); + + // [1] Build the .wasm module + info!("Running build commands..."); + let mut cmd = Command::new("cargo"); + cmd.current_dir(&crate_dir) + .arg("build") + .arg("--target") + .arg("wasm32-unknown-unknown") + .stdout(std::process::Stdio::piped()) + .stderr(std::process::Stdio::piped()); + + if config.release { + cmd.arg("--release"); + } + + match executable { + ExecutableType::Binary(name) => cmd.arg("--bin").arg(name), + ExecutableType::Lib(name) => cmd.arg("--lib").arg(name), + ExecutableType::Example(name) => cmd.arg("--example").arg(name), + }; + + let mut child = cmd.spawn()?; + let _err_code = child.wait()?; + + info!("Build complete!"); + + // [2] Establish the output directory structure + let bindgen_outdir = out_dir.join("wasm"); + + // [3] Bindgen the final binary for use easy linking + let mut bindgen_builder = Bindgen::new(); + + let release_type = match config.release { + true => "release", + false => "debug", + }; + + let input_path = match executable { + ExecutableType::Binary(name) | ExecutableType::Lib(name) => target_dir + // .join("wasm32-unknown-unknown/release") + .join(format!("wasm32-unknown-unknown/{}", release_type)) + .join(format!("{}.wasm", name)), + + ExecutableType::Example(name) => target_dir + // .join("wasm32-unknown-unknown/release/examples") + .join(format!("wasm32-unknown-unknown/{}/examples", release_type)) + .join(format!("{}.wasm", name)), + }; + + bindgen_builder + .input_path(input_path) + .web(true)? + .debug(true) + .demangle(true) + .keep_debug(true) + .remove_name_section(false) + .remove_producers_section(false) + .out_name("module") + .generate(&bindgen_outdir)?; + + // [4] + // TODO: wasm-opt + + // [5] Generate the html file with the module name + // TODO: support names via options + info!("Writing to '{:#?}' directory...", out_dir); + let mut file = std::fs::File::create(out_dir.join("index.html"))?; + file.write_all(gen_page("./wasm/module.js").as_str().as_bytes())?; + + let copy_options = fs_extra::dir::CopyOptions::new(); + match fs_extra::dir::copy(static_dir, out_dir, ©_options) { + Ok(_) => {} + Err(_e) => { + warn!("Error copying dir"); + } + } + + let t_end = std::time::Instant::now(); + log::info!("Done in {}ms! 🎉", (t_end - t_start).as_millis()); + Ok(()) +} + +fn gen_page(module: &str) -> String { + format!( + r#" + + + + + + + + + + + +"#, + module + ) +} diff --git a/src/cargo.rs b/src/cargo.rs new file mode 100644 index 000000000..3a911a81e --- /dev/null +++ b/src/cargo.rs @@ -0,0 +1,69 @@ +//! Utilities for working with cargo and rust files +use crate::error::{Error, Result}; +use std::{env, fs, path::PathBuf, process::Command, str}; + +/// How many parent folders are searched for a `Cargo.toml` +const MAX_ANCESTORS: u32 = 10; + +/// Returns the root of the crate that the command is run from +/// +/// If the command is run from the workspace root, this will return the top-level Cargo.toml +pub fn crate_root() -> Result { + // From the current directory we work our way up, looking for `Cargo.toml` + env::current_dir() + .ok() + .and_then(|mut wd| { + for _ in 0..MAX_ANCESTORS { + if contains_manifest(&wd) { + return Some(wd); + } + if !wd.pop() { + break; + } + } + None + }) + .ok_or_else(|| Error::CargoError("Failed to find the cargo directory".to_string())) +} + +/// Returns the root of a workspace +/// TODO @Jon, find a different way that doesn't rely on the cargo metadata command (it's slow) +pub fn workspace_root() -> Result { + let output = Command::new("cargo") + .args(&["metadata"]) + .output() + .map_err(|_| Error::CargoError("Manifset".to_string()))?; + + if !output.status.success() { + let mut msg = str::from_utf8(&output.stderr).unwrap().trim(); + if msg.starts_with("error: ") { + msg = &msg[7..]; + } + + return Err(Error::CargoError(msg.to_string())); + } + + let stdout = str::from_utf8(&output.stdout).unwrap(); + for line in stdout.lines() { + let meta: serde_json::Value = serde_json::from_str(line) + .map_err(|_| Error::CargoError("InvalidOutput".to_string()))?; + + let root = meta["workspace_root"] + .as_str() + .ok_or_else(|| Error::CargoError("InvalidOutput".to_string()))?; + return Ok(root.into()); + } + + Err(Error::CargoError("InvalidOutput".to_string())) +} + +/// Checks if the directory contains `Cargo.toml` +fn contains_manifest(path: &PathBuf) -> bool { + fs::read_dir(path) + .map(|entries| { + entries + .filter_map(Result::ok) + .any(|ent| &ent.file_name() == "Cargo.toml") + }) + .unwrap_or(false) +} diff --git a/src/cli.rs b/src/cli.rs new file mode 100644 index 000000000..852d4ee71 --- /dev/null +++ b/src/cli.rs @@ -0,0 +1,62 @@ +use argh::FromArgs; + +#[derive(FromArgs, PartialEq, Debug)] +/// Top-level command. +pub struct LaunchOptions { + #[argh(subcommand)] + pub command: LaunchCommand, +} + +/// The various kinds of commands that `wasm-pack` can execute. +#[derive(FromArgs, PartialEq, Debug)] +#[argh(subcommand)] +pub enum LaunchCommand { + Develop(DevelopOptions), + Build(BuildOptions), + Test(TestOptions), + Publish(PublishOptions), +} + +/// Publish your yew application to Github Pages, Netlify, or S3 +#[derive(FromArgs, PartialEq, Debug)] +#[argh(subcommand, name = "publish")] +pub struct PublishOptions {} + +/// 🔬 test your yew application! +#[derive(FromArgs, PartialEq, Debug)] +#[argh(subcommand, name = "test")] +pub struct TestOptions { + /// an example in the crate + #[argh(option)] + pub example: Option, +} + +/// 🏗️ Build your yew application +#[derive(FromArgs, PartialEq, Debug, Clone)] +#[argh(subcommand, name = "build")] +pub struct BuildOptions { + /// an optional direction which is "up" by default + #[argh(option, short = 'o', default = "String::from(\"public\")")] + pub outdir: String, + + /// an example in the crate + #[argh(option)] + pub example: Option, + + /// develop in release mode + #[argh(switch, short = 'r')] + pub release: bool, +} + +/// 🛠 Start a development server +#[derive(FromArgs, PartialEq, Debug)] +#[argh(subcommand, name = "develop")] +pub struct DevelopOptions { + /// an example in the crate + #[argh(option)] + pub example: Option, + + /// develop in release mode + #[argh(switch, short = 'r')] + pub release: bool, +} diff --git a/src/config.rs b/src/config.rs new file mode 100644 index 000000000..02a04eaf7 --- /dev/null +++ b/src/config.rs @@ -0,0 +1,92 @@ +use crate::{ + cli::{BuildOptions, DevelopOptions}, + error::Result, +}; +use std::{io::Write, path::PathBuf, process::Command}; + +#[derive(Debug, Clone)] +pub struct Config { + pub out_dir: PathBuf, + pub crate_dir: PathBuf, + pub workspace_dir: PathBuf, + pub target_dir: PathBuf, + pub static_dir: PathBuf, + pub manifest: cargo_toml::Manifest, + pub executable: ExecutableType, + pub release: bool, +} + +#[derive(Debug, Clone)] +pub enum ExecutableType { + Binary(String), + Lib(String), + Example(String), +} + +impl Config { + pub fn new() -> Result { + let crate_dir = crate::cargo::crate_root()?; + let workspace_dir = crate::cargo::workspace_root()?; + let target_dir = workspace_dir.join("target"); + let out_dir = crate_dir.join("public"); + let cargo_def = &crate_dir.join("Cargo.toml"); + let static_dir = crate_dir.join("static"); + + let manifest = cargo_toml::Manifest::from_path(&cargo_def).unwrap(); + + // We just assume they're using a 'main.rs' + // Anyway, we've already parsed the manifest, so it should be easy to change the type + let output_filename = (&manifest) + .lib + .as_ref() + .and_then(|lib| lib.name.clone()) + .or_else(|| { + (&manifest) + .package + .as_ref() + .and_then(|pkg| Some(pkg.name.replace("-", "_"))) + .clone() + }) + .expect("No lib found from cargo metadata"); + let executable = ExecutableType::Binary(output_filename); + + let release = false; + + Ok(Self { + out_dir, + crate_dir, + workspace_dir, + target_dir, + static_dir, + manifest, + executable, + release, + }) + } + + pub fn as_example(&mut self, example_name: String) -> &mut Self { + self.executable = ExecutableType::Example(example_name); + self + } + + pub fn with_release(&mut self, release: bool) -> &mut Self { + self.release = release; + self + } + + pub fn with_build_options(&mut self, options: &BuildOptions) { + if let Some(name) = &options.example { + self.as_example(name.clone()); + } + self.release = options.release; + self.out_dir = options.outdir.clone().into(); + } + + pub fn with_develop_options(&mut self, options: &DevelopOptions) { + if let Some(name) = &options.example { + self.as_example(name.clone()); + } + self.release = options.release; + self.out_dir = tempfile::Builder::new().tempdir().expect("").into_path(); + } +} diff --git a/src/develop.rs b/src/develop.rs new file mode 100644 index 000000000..1ae016b0d --- /dev/null +++ b/src/develop.rs @@ -0,0 +1,111 @@ +use crate::{builder::BuildConfig, cli::DevelopOptions, config::Config, error::Result}; +use async_std::prelude::FutureExt; + +use async_std::future; +use async_std::prelude::*; + +use log::info; +use notify::{RecommendedWatcher, RecursiveMode, Watcher}; +use std::path::PathBuf; +use std::time::Duration; + +pub struct DevelopConfig {} +impl Into for DevelopOptions { + fn into(self) -> DevelopConfig { + DevelopConfig {} + } +} + +pub async fn start(config: &Config, _options: &DevelopConfig) -> Result<()> { + log::info!("Starting development server 🚀"); + + let Config { out_dir, .. } = config; + + // Spawn the server onto a seperate task + // This lets the task progress while we handle file updates + let server = async_std::task::spawn(launch_server(out_dir.clone())); + let watcher = async_std::task::spawn(watch_directory(config.clone())); + + match server.race(watcher).await { + Err(e) => log::warn!("Error running development server, {:?}", e), + _ => {} + } + + Ok(()) +} + +async fn watch_directory(config: Config) -> Result<()> { + // Create a channel to receive the events. + let (watcher_tx, watcher_rx) = async_std::channel::bounded(100); + + // Automatically select the best implementation for your platform. + // You can also access each implementation directly e.g. INotifyWatcher. + let mut watcher: RecommendedWatcher = Watcher::new_immediate(move |res| { + async_std::task::block_on(watcher_tx.send(res)); + }) + .expect("failed to make watcher"); + + let src_dir = crate::cargo::crate_root()?; + + // Add a path to be watched. All files and directories at that path and + // below will be monitored for changes. + watcher + .watch(src_dir.join("src"), RecursiveMode::Recursive) + .expect("Failed to watch dir"); + + watcher + .watch(src_dir.join("examples"), RecursiveMode::Recursive) + .expect("Failed to watch dir"); + + let build_config = BuildConfig::default(); + + 'run: loop { + crate::builder::build(&config, &build_config)?; + + // Wait for the message with a debounce + let _msg = watcher_rx + .recv() + .join(future::ready(1_usize).delay(Duration::from_millis(2000))) + .await; + + info!("File updated, rebuilding app"); + } + Ok(()) +} + +async fn launch_server(outdir: PathBuf) -> Result<()> { + let _crate_dir = crate::cargo::crate_root()?; + let _workspace_dir = crate::cargo::workspace_root()?; + + let mut app = tide::with_state(ServerState::new(outdir.to_owned())); + let p = outdir.display().to_string(); + + app.at("/") + .get(|req: tide::Request| async move { + log::info!("Connected to development server"); + let state = req.state(); + Ok(tide::Body::from_file(state.serv_path.clone().join("index.html")).await?) + }) + .serve_dir(p)?; + + let port = "8080"; + let serve_addr = format!("0.0.0.0:{}", port); + // let serve_addr = format!("127.0.0.1:{}", port); + + info!("App available at http://{}", serve_addr); + app.listen(serve_addr).await?; + Ok(()) +} + +/// https://github.com/http-rs/tide/blob/main/examples/state.rs +/// Tide seems to prefer using state instead of injecting into the app closure +/// The app closure needs to be static and +#[derive(Clone)] +struct ServerState { + serv_path: PathBuf, +} +impl ServerState { + fn new(serv_path: PathBuf) -> Self { + Self { serv_path } + } +} diff --git a/src/error.rs b/src/error.rs new file mode 100644 index 000000000..80a884956 --- /dev/null +++ b/src/error.rs @@ -0,0 +1,34 @@ +use thiserror::Error as ThisError; + +pub type Result = std::result::Result; + +#[derive(ThisError, Debug)] +pub enum Error { + /// Used when errors need to propogate but are too unique to be typed + #[error("{0}")] + Unique(String), + + #[error("I/O Error: {0}")] + IO(#[from] std::io::Error), + + #[error("Failed to write error")] + FailedToWrite, + + #[error("Failed to write error")] + CargoError(String), + + #[error(transparent)] + Other(#[from] anyhow::Error), +} + +impl From<&str> for Error { + fn from(s: &str) -> Self { + Error::Unique(s.to_string()) + } +} + +impl From for Error { + fn from(s: String) -> Self { + Error::Unique(s) + } +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 000000000..d6e7c838d --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,8 @@ +pub mod builder; +pub mod cargo; +pub mod cli; +pub mod config; +pub mod develop; +pub mod error; +pub mod logging; +pub mod watch; diff --git a/src/logging.rs b/src/logging.rs new file mode 100644 index 000000000..94a9ce85b --- /dev/null +++ b/src/logging.rs @@ -0,0 +1,49 @@ +use fern::colors::{Color, ColoredLevelConfig}; +use log::debug; + +pub fn set_up_logging() { + // configure colors for the whole line + let colors_line = ColoredLevelConfig::new() + .error(Color::Red) + .warn(Color::Yellow) + // we actually don't need to specify the color for debug and info, they are white by default + .info(Color::White) + .debug(Color::White) + // depending on the terminals color scheme, this is the same as the background color + .trace(Color::BrightBlack); + + // configure colors for the name of the level. + // since almost all of them are the same as the color for the whole line, we + // just clone `colors_line` and overwrite our changes + let colors_level = colors_line.clone().info(Color::Green); + // here we set up our fern Dispatch + fern::Dispatch::new() + .format(move |out, message, record| { + out.finish(format_args!( + "{color_line}[{level}{color_line}] {message}\x1B[0m", + color_line = format_args!( + "\x1B[{}m", + colors_line.get_color(&record.level()).to_fg_str() + ), + level = colors_level.color(record.level()), + message = message, + )); + }) + // set the default log level. to filter out verbose log messages from dependencies, set + // this to Warn and overwrite the log level for your crate. + .level(log::LevelFilter::Info) + // .level(log::LevelFilter::Warn) + // change log levels for individual modules. Note: This looks for the record's target + // field which defaults to the module path but can be overwritten with the `target` + // parameter: + // `info!(target="special_target", "This log message is about special_target");` + // .level_for("dioxus", log::LevelFilter::Debug) + // .level_for("dioxus", log::LevelFilter::Info) + // .level_for("pretty_colored", log::LevelFilter::Trace) + // output to stdout + .chain(std::io::stdout()) + .apply() + .unwrap(); + + debug!("finished setting up logging! yay!"); +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 000000000..7a5df372c --- /dev/null +++ b/src/main.rs @@ -0,0 +1,28 @@ +use diopack::cli::{LaunchCommand, LaunchOptions}; +use dioxus_cli as diopack; + +#[async_std::main] +async fn main() -> diopack::error::Result<()> { + diopack::logging::set_up_logging(); + + let opts: LaunchOptions = argh::from_env(); + let mut config = diopack::config::Config::new()?; + + match opts.command { + LaunchCommand::Build(options) => { + config.with_build_options(&options); + diopack::builder::build(&config, &(options.into()))?; + } + + LaunchCommand::Develop(options) => { + config.with_develop_options(&options); + diopack::develop::start(&config, &(options.into())).await?; + } + + _ => { + todo!("Command not currently implemented"); + } + } + + Ok(()) +} diff --git a/src/watch.rs b/src/watch.rs new file mode 100644 index 000000000..ae39bc670 --- /dev/null +++ b/src/watch.rs @@ -0,0 +1,11 @@ +pub struct Watcher {} + +impl Watcher { + // Spawns a new notify instance that alerts us of changes + pub fn new() -> Self { + Self {} + } + + /// Subsribe to the watcher + pub fn subscribe() {} +} From 7a67964a2fdd81563633635d62f8e3d2e60e0c95 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 7 Jul 2021 16:54:40 -0400 Subject: [PATCH 002/459] wip: rename docs --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bf2e3310a..fc1e5796b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@
-

📦✨ dioxus-cli

+

📦✨ dioxus-Studio

Tooling to supercharge dioxus projects

From e2a4efeb9ee9ee9d50238514ef7f98eca90a07d4 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Thu, 23 Sep 2021 13:33:22 -0400 Subject: [PATCH 003/459] wip: bump versions --- Cargo.toml | 6 +++--- src/develop.rs | 6 +++--- src/main.rs | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 299a26ae6..b57f28140 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,13 +11,13 @@ description = "CLI tool for developing, testing, and publishing Dioxus apps" [dependencies] thiserror = "1.0.23" log = "0.4.13" -fern = { version="0.6.0", features=["colored"] } -wasm-bindgen-cli-support = "0.2.73" +fern = { version = "0.6.0", features = ["colored"] } +wasm-bindgen-cli-support = "0.2.78" anyhow = "1.0.38" argh = "0.1.4" serde = "1.0.120" serde_json = "1.0.61" -async-std = { version="1.9.0", features=["attributes"] } +async-std = { version = "1.9.0", features = ["attributes"] } tide = "0.15.0" fs_extra = "1.2.0" diff --git a/src/develop.rs b/src/develop.rs index 1ae016b0d..48565e311 100644 --- a/src/develop.rs +++ b/src/develop.rs @@ -40,7 +40,7 @@ async fn watch_directory(config: Config) -> Result<()> { // Automatically select the best implementation for your platform. // You can also access each implementation directly e.g. INotifyWatcher. - let mut watcher: RecommendedWatcher = Watcher::new_immediate(move |res| { + let mut watcher: RecommendedWatcher = Watcher::new(move |res| { async_std::task::block_on(watcher_tx.send(res)); }) .expect("failed to make watcher"); @@ -50,11 +50,11 @@ async fn watch_directory(config: Config) -> Result<()> { // Add a path to be watched. All files and directories at that path and // below will be monitored for changes. watcher - .watch(src_dir.join("src"), RecursiveMode::Recursive) + .watch(&src_dir.join("src"), RecursiveMode::Recursive) .expect("Failed to watch dir"); watcher - .watch(src_dir.join("examples"), RecursiveMode::Recursive) + .watch(&src_dir.join("examples"), RecursiveMode::Recursive) .expect("Failed to watch dir"); let build_config = BuildConfig::default(); diff --git a/src/main.rs b/src/main.rs index 7a5df372c..8b7ce240d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ -use diopack::cli::{LaunchCommand, LaunchOptions}; -use dioxus_cli as diopack; +use dioxus_studio as diopack; +use dioxus_studio::cli::{LaunchCommand, LaunchOptions}; #[async_std::main] async fn main() -> diopack::error::Result<()> { From f81183e2a6bd12224afa840a233b3fbbeb38c164 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Sun, 10 Oct 2021 15:42:16 -0400 Subject: [PATCH 004/459] feat: remove tailwind from tempalte --- src/builder.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 1d06b3ae8..6b61c8665 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -127,10 +127,6 @@ fn gen_page(module: &str) -> String { - @@ -138,6 +134,7 @@ fn gen_page(module: &str) -> String { import init from "{}"; init("./wasm/module_bg.wasm"); +
"#, From 0966653630a5b2ee06fd4a66f98e3c5b4196aa25 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 29 Dec 2021 11:57:30 -0500 Subject: [PATCH 005/459] docs: fix readme --- README.md | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fc1e5796b..9f436199c 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ # About --- -dioxus-cli (inspired by wasm-pack and webpack) is a tool to help get dioxus projects off the ground. It handles all the build, development, bundling, and publishing to make web development just a simple two commands: `cargo init` and `dioxus-cli publish`. +dioxus-studio (inspired by wasm-pack and webpack) is a tool to help get dioxus projects off the ground. It handles all the build, development, bundling, and publishing to make web development just a simple two commands: `cargo init` and `dioxus-cli publish`. Best thing: - No NPM. @@ -18,6 +18,17 @@ Best thing: - No rollup - No ESLint + +## Visual Studio +Dioxus Studio features a command-line driven visual interface to manage your project. It's a great way to get started with dioxus projects. + +To start the visual environment, simply type `dioxus studio` in your terminal. + +From there, you can explore all the options to build, bundle, and deploy your app. + + +## Features + Just install Rust, dioxus-cli, and you're good to go. `cargo install --git github.com/jkelleyrtp/dioxus-cli` @@ -33,12 +44,12 @@ Need to benchmark a component? Need to test your code? `dioxus test` +Need to convert some html into rsx? +`dioxus convert file.html >> file.rs` + Need to build your code into a bundle? `dioxus build --outdir public` -Need to publish your code to GitHub pages, Netlify, etc? -`dioxus publish --ghpages myrepo.git` - # Use in your project --- Sometimes you'll want to include static assets without bundling them into your .wasm content. dioxus-cli provides a few ways of doing this: From 5fdb14446bb88cddd89179e909081d757204c924 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 29 Dec 2021 12:03:18 -0500 Subject: [PATCH 006/459] wip: studio upgrades --- .vscode/settings.json | 4 +- Cargo.toml | 9 +- src/builder.rs | 26 ++++-- src/cli.rs | 45 ++++++++-- src/config.rs | 5 +- src/develop.rs | 76 ++++++++++++----- src/err.html | 19 +++++ src/error.rs | 3 + src/lib.rs | 29 +++++-- src/logging.rs | 2 - src/main.rs | 24 +----- src/studio.rs | 194 ++++++++++++++++++++++++++++++++++++++++++ src/translate.rs | 101 ++++++++++++++++++++++ tests/test.html | 32 +++++++ 14 files changed, 499 insertions(+), 70 deletions(-) create mode 100644 src/err.html create mode 100644 src/studio.rs create mode 100644 src/translate.rs create mode 100644 tests/test.html diff --git a/.vscode/settings.json b/.vscode/settings.json index 80f51cff8..1c68f97cc 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,3 @@ { - "rust-analyzer.inlayHints.enable": false -} \ No newline at end of file + "rust-analyzer.inlayHints.enable": true +} diff --git a/Cargo.toml b/Cargo.toml index b57f28140..99d6ff539 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,14 +18,19 @@ argh = "0.1.4" serde = "1.0.120" serde_json = "1.0.61" async-std = { version = "1.9.0", features = ["attributes"] } -tide = "0.15.0" +tide = "0.16.0" fs_extra = "1.2.0" -cargo_toml = "0.8.1" +cargo_toml = "0.10.0" futures = "0.3.12" notify = "5.0.0-pre.4" rjdebounce = "0.2.1" tempfile = "3.2.0" +html_parser = "0.6.2" + +tui = { version = "0.15.0", features = ["crossterm"] } +crossterm = "0.19.0" +tui-template = { git = "https://github.com/jkelleyrtp/tui-builder.git" } [[bin]] diff --git a/src/builder.rs b/src/builder.rs index 6b61c8665..83a6d1de5 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -1,10 +1,13 @@ use crate::{ cli::BuildOptions, - config::{Config, ExecutableType}, - error::Result, + config::{CrateConfig, ExecutableType}, + error::{Error, Result}, }; use log::{info, warn}; -use std::{io::Write, process::Command}; +use std::{ + io::{Read, Write}, + process::Command, +}; use wasm_bindgen_cli_support::Bindgen; pub struct BuildConfig {} @@ -19,7 +22,7 @@ impl Default for BuildConfig { } } -pub fn build(config: &Config, _build_config: &BuildConfig) -> Result<()> { +pub fn build(config: &CrateConfig, _build_config: &BuildConfig) -> Result<()> { /* [1] Build the project with cargo, generating a wasm32-unknown-unknown target (is there a more specific, better target to leverage?) [2] Generate the appropriate build folders @@ -28,7 +31,7 @@ pub fn build(config: &Config, _build_config: &BuildConfig) -> Result<()> { [5] Link up the html page to the wasm module */ - let Config { + let CrateConfig { out_dir, crate_dir, target_dir, @@ -60,9 +63,16 @@ pub fn build(config: &Config, _build_config: &BuildConfig) -> Result<()> { }; let mut child = cmd.spawn()?; - let _err_code = child.wait()?; + let output = child.wait()?; - info!("Build complete!"); + if output.success() { + info!("Build complete!"); + } else { + log::error!("Build failed!"); + let mut reason = String::new(); + child.stderr.unwrap().read_to_string(&mut reason)?; + return Err(Error::BuildFailed(reason)); + } // [2] Establish the output directory structure let bindgen_outdir = out_dir.join("wasm"); @@ -129,6 +139,8 @@ fn gen_page(module: &str) -> String { +
+
diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index f4b69d5d7..58d797485 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -13,8 +13,7 @@ pub struct Build { impl Build { pub fn build(self) -> anyhow::Result<()> { - - let mut crate_config = crate::CrateConfig::new()?; + let mut crate_config = crate::CrateConfig::new()?; // change the relase state. crate_config.with_release(self.build.release); @@ -23,4 +22,4 @@ impl Build { Ok(()) } -} \ No newline at end of file +} diff --git a/src/cli/cfg.rs b/src/cli/cfg.rs index feab0e61f..5736ebc19 100644 --- a/src/cli/cfg.rs +++ b/src/cli/cfg.rs @@ -67,6 +67,26 @@ pub struct ConfigOptsBuild { pub pattern_params: Option>, } +#[derive(Clone, Debug, Default, Deserialize, StructOpt)] +pub struct ConfigOptsServe { + /// The index HTML file to drive the bundling process [default: index.html] + #[structopt(parse(from_os_str))] + pub target: Option, + + /// Build in release mode [default: false] + #[structopt(long)] + #[serde(default)] + pub release: bool, + + /// The output dir for all final assets [default: dist] + #[structopt(short, long, parse(from_os_str))] + pub dist: Option, + + /// The public URL from which assets are to be served [default: /] + #[structopt(long, parse(from_str=parse_public_url))] + pub public_url: Option, +} + /// Ensure the given value for `--public-url` is formatted correctly. pub fn parse_public_url(val: &str) -> String { let prefix = if !val.starts_with('/') { "/" } else { "" }; diff --git a/src/cli/mod.rs b/src/cli/mod.rs index fa3bd2c77..32492459a 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -35,7 +35,6 @@ pub enum Commands { Translate(translate::Translate), // /// Build, watch & serve the Rust WASM app and all of its assets. Serve(serve::Serve), - // /// Clean output artifacts. // Clean(clean::Clean), diff --git a/src/cli/serve/develop.rs b/src/cli/serve/develop.rs index dd386b14e..27aba99ee 100644 --- a/src/cli/serve/develop.rs +++ b/src/cli/serve/develop.rs @@ -1,145 +1,145 @@ -use crate::{cli::DevelopOptions, config::CrateConfig, error::Result}; -use async_std::prelude::FutureExt; +// use crate::{cli::DevelopOptions, config::CrateConfig, error::Result}; +// use async_std::prelude::FutureExt; -use log::info; -use notify::{RecommendedWatcher, RecursiveMode, Watcher}; -use std::path::PathBuf; -use std::sync::atomic::AtomicBool; -use std::sync::Arc; -use tide::http::mime::HTML; -use tide::http::Mime; +// use log::info; +// use notify::{RecommendedWatcher, RecursiveMode, Watcher}; +// use std::path::PathBuf; +// use std::sync::atomic::AtomicBool; +// use std::sync::Arc; +// use tide::http::mime::HTML; +// use tide::http::Mime; -pub struct DevelopState { - // - reload_on_change: bool, -} +// pub struct DevelopState { +// // +// reload_on_change: bool, +// } -pub async fn develop(options: DevelopOptions) -> Result<()> { - // - log::info!("Starting development server 🚀"); - let mut cfg = CrateConfig::new()?; - cfg.with_develop_options(&options); +// pub async fn develop(options: DevelopOptions) -> Result<()> { +// // +// log::info!("Starting development server 🚀"); +// let mut cfg = CrateConfig::new()?; +// cfg.with_develop_options(&options); - let out_dir = cfg.out_dir.clone(); +// let out_dir = cfg.out_dir.clone(); - let is_err = Arc::new(AtomicBool::new(false)); +// let is_err = Arc::new(AtomicBool::new(false)); - // Spawn the server onto a seperate task - // This lets the task progress while we handle file updates - let server = async_std::task::spawn(launch_server(out_dir, is_err.clone())); - let watcher = async_std::task::spawn(watch_directory(cfg.clone(), is_err.clone())); +// // Spawn the server onto a seperate task +// // This lets the task progress while we handle file updates +// let server = async_std::task::spawn(launch_server(out_dir, is_err.clone())); +// let watcher = async_std::task::spawn(watch_directory(cfg.clone(), is_err.clone())); - match server.race(watcher).await { - Err(e) => log::warn!("Error running development server, {:?}", e), - _ => {} - } +// match server.race(watcher).await { +// Err(e) => log::warn!("Error running development server, {:?}", e), +// _ => {} +// } - Ok(()) -} +// Ok(()) +// } -async fn watch_directory(config: CrateConfig, is_err: ErrStatus) -> Result<()> { - // Create a channel to receive the events. - let (watcher_tx, watcher_rx) = async_std::channel::bounded(100); +// async fn watch_directory(config: CrateConfig, is_err: ErrStatus) -> Result<()> { +// // Create a channel to receive the events. +// let (watcher_tx, watcher_rx) = async_std::channel::bounded(100); - // Automatically select the best implementation for your platform. - // You can also access each implementation directly e.g. INotifyWatcher. - let mut watcher: RecommendedWatcher = Watcher::new(move |res| { - async_std::task::block_on(watcher_tx.send(res)); - // send an event - let _ = async_std::task::block_on(watcher_tx.send(res)); - }) - .expect("failed to make watcher"); +// // Automatically select the best implementation for your platform. +// // You can also access each implementation directly e.g. INotifyWatcher. +// let mut watcher: RecommendedWatcher = Watcher::new(move |res| { +// async_std::task::block_on(watcher_tx.send(res)); +// // send an event +// let _ = async_std::task::block_on(watcher_tx.send(res)); +// }) +// .expect("failed to make watcher"); - let src_dir = crate::cargo::crate_root()?; +// let src_dir = crate::cargo::crate_root()?; - // Add a path to be watched. All files and directories at that path and - // below will be monitored for changes. - watcher - .watch(&src_dir.join("src"), RecursiveMode::Recursive) - .expect("Failed to watch dir"); +// // Add a path to be watched. All files and directories at that path and +// // below will be monitored for changes. +// watcher +// .watch(&src_dir.join("src"), RecursiveMode::Recursive) +// .expect("Failed to watch dir"); - match watcher.watch(&src_dir.join("examples"), RecursiveMode::Recursive) { - Ok(_) => {} - Err(e) => log::warn!("Failed to watch examples dir, {:?}", e), - } +// match watcher.watch(&src_dir.join("examples"), RecursiveMode::Recursive) { +// Ok(_) => {} +// Err(e) => log::warn!("Failed to watch examples dir, {:?}", e), +// } - 'run: loop { - match crate::builder::build(&config) { - Ok(_) => { - is_err.store(false, std::sync::atomic::Ordering::Relaxed); - async_std::task::sleep(std::time::Duration::from_millis(500)).await; - } - Err(err) => is_err.store(true, std::sync::atomic::Ordering::Relaxed), - }; +// 'run: loop { +// match crate::builder::build(&config) { +// Ok(_) => { +// is_err.store(false, std::sync::atomic::Ordering::Relaxed); +// async_std::task::sleep(std::time::Duration::from_millis(500)).await; +// } +// Err(err) => is_err.store(true, std::sync::atomic::Ordering::Relaxed), +// }; - let mut msg = None; - loop { - let new_msg = watcher_rx.recv().await.unwrap().unwrap(); - if !watcher_rx.is_empty() { - msg = Some(new_msg); - break; - } - } +// let mut msg = None; +// loop { +// let new_msg = watcher_rx.recv().await.unwrap().unwrap(); +// if !watcher_rx.is_empty() { +// msg = Some(new_msg); +// break; +// } +// } - info!("File updated, rebuilding app"); - } - Ok(()) -} +// info!("File updated, rebuilding app"); +// } +// Ok(()) +// } -async fn launch_server(outdir: PathBuf, is_err: ErrStatus) -> Result<()> { - let _crate_dir = crate::cargo::crate_root()?; - let _workspace_dir = crate::cargo::workspace_root()?; +// async fn launch_server(outdir: PathBuf, is_err: ErrStatus) -> Result<()> { +// let _crate_dir = crate::cargo::crate_root()?; +// let _workspace_dir = crate::cargo::workspace_root()?; - let mut app = tide::with_state(ServerState::new(outdir.to_owned(), is_err)); +// let mut app = tide::with_state(ServerState::new(outdir.to_owned(), is_err)); - let file_path = format!("{}/index.html", outdir.display()); - log::info!("Serving {}", file_path); - let p = outdir.display().to_string(); +// let file_path = format!("{}/index.html", outdir.display()); +// log::info!("Serving {}", file_path); +// let p = outdir.display().to_string(); - app.at("/") - .get(|req: tide::Request| async move { - log::info!("Connected to development server"); - let state = req.state(); +// app.at("/") +// .get(|req: tide::Request| async move { +// log::info!("Connected to development server"); +// let state = req.state(); - match state.is_err.load(std::sync::atomic::Ordering::Relaxed) { - true => { - // - let mut resp = - tide::Body::from_string(format!(include_str!("../err.html"), err = "_")); - resp.set_mime(HTML); +// match state.is_err.load(std::sync::atomic::Ordering::Relaxed) { +// true => { +// // +// let mut resp = +// tide::Body::from_string(format!(include_str!("../err.html"), err = "_")); +// resp.set_mime(HTML); - Ok(resp) - } - false => { - Ok(tide::Body::from_file(state.serv_path.clone().join("index.html")).await?) - } - } - }) - .serve_dir(p)?; - // .serve_file(file_path) - // .unwrap(); +// Ok(resp) +// } +// false => { +// Ok(tide::Body::from_file(state.serv_path.clone().join("index.html")).await?) +// } +// } +// }) +// .serve_dir(p)?; +// // .serve_file(file_path) +// // .unwrap(); - let port = "8080"; - let serve_addr = format!("127.0.0.1:{}", port); +// let port = "8080"; +// let serve_addr = format!("127.0.0.1:{}", port); - info!("App available at http://{}/", serve_addr); - app.listen(serve_addr).await?; - Ok(()) -} +// info!("App available at http://{}/", serve_addr); +// app.listen(serve_addr).await?; +// Ok(()) +// } -/// https://github.com/http-rs/tide/blob/main/examples/state.rs -/// Tide seems to prefer using state instead of injecting into the app closure -/// The app closure needs to be static and -#[derive(Clone)] -struct ServerState { - serv_path: PathBuf, - is_err: ErrStatus, -} +// /// https://github.com/http-rs/tide/blob/main/examples/state.rs +// /// Tide seems to prefer using state instead of injecting into the app closure +// /// The app closure needs to be static and +// #[derive(Clone)] +// struct ServerState { +// serv_path: PathBuf, +// is_err: ErrStatus, +// } -type ErrStatus = Arc; +// type ErrStatus = Arc; -impl ServerState { - fn new(serv_path: PathBuf, is_err: ErrStatus) -> Self { - Self { serv_path, is_err } - } -} +// impl ServerState { +// fn new(serv_path: PathBuf, is_err: ErrStatus) -> Self { +// Self { serv_path, is_err } +// } +// } diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index 9695870c0..36c050bd3 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -1,9 +1,36 @@ -use crate::cfg::ConfigOptsBuild; +use crate::{cfg::ConfigOptsServe, server}; use anyhow::Result; use std::path::PathBuf; +use std::io::Write; use structopt::StructOpt; -/// Build the Rust WASM app and all of its assets. +mod develop; + +/// Run the WASM project on dev-server #[derive(Clone, Debug, StructOpt)] #[structopt(name = "serve")] -pub struct Serve {} +pub struct Serve { + #[structopt(flatten)] + pub serve: ConfigOptsServe, +} + +impl Serve { + pub async fn serve(self) -> anyhow::Result<()> { + + let mut crate_config = crate::CrateConfig::new()?; + // change the relase state. + crate_config.with_release(self.serve.release); + + crate::builder::build(&crate_config).expect("build failed"); + + let serve_html = String::from(include_str!("../../server/serve.html")); + + let mut file = std::fs::File::create(crate_config.out_dir.join("index.html"))?; + file.write_all(serve_html.as_bytes())?; + + // start the develop server + server::startup(crate_config.clone()).await?; + + Ok(()) + } +} diff --git a/src/lib.rs b/src/lib.rs index ea8393484..d4d3d7953 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,5 @@ pub mod builder; +pub mod server; pub use builder::*; pub mod cargo; @@ -16,4 +17,4 @@ pub use error::*; pub mod logging; pub use logging::*; -pub mod watch; \ No newline at end of file +pub mod watch; diff --git a/src/main.rs b/src/main.rs index 2ec44eb97..a58794783 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,30 +3,28 @@ use structopt::StructOpt; #[tokio::main] async fn main() -> Result<()> { - let args = Cli::from_args(); set_up_logging(); match args.action { Commands::Translate(opts) => { opts.translate(); - } - + } + Commands::Build(opts) => { opts.build(); } - // Commands::Clean(_) => { - // // - // } + // Commands::Clean(_) => { + // // + // } - // Commands::Config(_) => { - // // - // } - - Commands::Serve(_) => { - // - } + // Commands::Config(_) => { + // // + // } + Commands::Serve(opts) => { + opts.serve().await; + } } Ok(()) diff --git a/src/server/mod.rs b/src/server/mod.rs new file mode 100644 index 000000000..2e937dbb8 --- /dev/null +++ b/src/server/mod.rs @@ -0,0 +1,87 @@ +use axum::{ + extract::{ + ws::{Message, WebSocket}, + Extension, TypedHeader, WebSocketUpgrade, + }, + http::StatusCode, + response::IntoResponse, + routing::{get, get_service}, + AddExtensionLayer, Router, +}; +use notify::{watcher, Watcher, DebouncedEvent}; +use std::sync::{mpsc::channel, Arc, Mutex}; +use std::time::Duration; +use tower_http::services::ServeDir; + +use crate::{CrateConfig, builder}; + +struct WsRelodState { + update: bool, +} + +impl WsRelodState { fn change(&mut self) { self.update = !self.update } } + +pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { + + log::info!("Starting development server 🚀"); + + let (tx, rx) = channel(); + + let mut watcher = watcher(tx, Duration::from_secs(2)).unwrap(); + watcher.watch(config.crate_dir.join("src").clone(), notify::RecursiveMode::Recursive).unwrap(); + + let ws_reload_state = Arc::new(Mutex::new(WsRelodState { update: false })); + + let watcher_conf = config.clone(); + let watcher_ws_state = ws_reload_state.clone(); + tokio::spawn(async move { + loop { + if let Ok(v) = rx.recv() { + match v { + DebouncedEvent::Create(_) | DebouncedEvent::Write(_) | + DebouncedEvent::Remove(_) | DebouncedEvent::Rename(_, _) => { + builder::build(&watcher_conf).unwrap(); + watcher_ws_state.lock().unwrap().change(); + }, + _ => {} + } + } + } + }); + + let app = Router::new() + .route("/ws", get(ws_handler)) + .fallback( + get_service(ServeDir::new(config.out_dir)).handle_error( + |error: std::io::Error| async move { + ( + StatusCode::INTERNAL_SERVER_ERROR, + format!("Unhandled internal error: {}", error), + ) + }, + ), + ) + .layer(AddExtensionLayer::new(ws_reload_state.clone())); + + let port = "8080"; + axum::Server::bind(&format!("0.0.0.0:{}", port).parse().unwrap()) + .serve(app.into_make_service()) + .await?; + + Ok(()) +} + +async fn ws_handler( + ws: WebSocketUpgrade, + _: Option>, + Extension(state): Extension>>, +) -> impl IntoResponse { + ws.on_upgrade(|mut socket| async move { + loop { + if state.lock().unwrap().update { + socket.send(Message::Text(String::from("reload"))).await.unwrap(); + state.lock().unwrap().change(); + } + } + }) +} diff --git a/src/server/serve.html b/src/server/serve.html new file mode 100644 index 000000000..98997403b --- /dev/null +++ b/src/server/serve.html @@ -0,0 +1,28 @@ + + + + + Dioxus-CLI Dev Server + + +
+ + + + + + + From d18a93f129132bd1ea59344fe757389eae603edc Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Sat, 22 Jan 2022 22:19:59 +0800 Subject: [PATCH 022/459] fix: fixed warn info --- src/builder.rs | 24 +++++++++++------------- src/cli/build/mod.rs | 4 +--- src/cli/cfg.rs | 5 +---- src/cli/clean/mod.rs | 3 --- src/cli/mod.rs | 2 -- src/cli/serve/mod.rs | 2 -- src/cli/translate/to_component.rs | 1 + src/config.rs | 2 +- src/main.rs | 6 +++--- src/server/mod.rs | 11 ++++++----- src/server/serve.html | 27 +++++++++++++++++++-------- 11 files changed, 43 insertions(+), 44 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 89451e163..101d31ee5 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -3,7 +3,7 @@ use crate::{ error::{Error, Result}, }; use std::{ - io::{Read, Write}, + io::Write, process::Command, }; use wasm_bindgen_cli_support::Bindgen; @@ -29,14 +29,15 @@ pub fn build(config: &CrateConfig) -> Result<()> { let t_start = std::time::Instant::now(); // [1] Build the .wasm module - log::info!("Running build commands..."); + log::info!("🚅 Running build commands..."); let mut cmd = Command::new("cargo"); cmd.current_dir(&crate_dir) .arg("build") .arg("--target") .arg("wasm32-unknown-unknown") - .stdout(std::process::Stdio::piped()) - .stderr(std::process::Stdio::piped()); + .stdout(std::process::Stdio::inherit()) + .stderr(std::process::Stdio::inherit()) + ; if config.release { cmd.arg("--release"); @@ -48,16 +49,13 @@ pub fn build(config: &CrateConfig) -> Result<()> { ExecutableType::Example(name) => cmd.arg("--example").arg(name), }; - let mut child = cmd.spawn()?; + let output = cmd.output()?; - let output = child.wait()?; - - if output.success() { - log::info!("Build complete!"); + if output.status.success() { + std::io::stdout().write_all(&output.stdout).unwrap(); } else { log::error!("Build failed!"); - let mut reason = String::new(); - child.stderr.unwrap().read_to_string(&mut reason)?; + let reason = String::from_utf8_lossy(&output.stderr).to_string(); return Err(Error::BuildFailed(reason)); } @@ -98,8 +96,8 @@ pub fn build(config: &CrateConfig) -> Result<()> { // [5] Generate the html file with the module name // TODO: support names via options - log::info!("Writing to '{:#?}' directory...", out_dir); + // log::info!("Writing to '{:#?}' directory...", out_dir); let copy_options = fs_extra::dir::CopyOptions::new(); if static_dir.is_dir() { match fs_extra::dir::copy(static_dir, out_dir, ©_options) { @@ -111,7 +109,7 @@ pub fn build(config: &CrateConfig) -> Result<()> { } let t_end = std::time::Instant::now(); - log::info!("Done in {}ms! 🎉", (t_end - t_start).as_millis()); + log::info!("🏁 Done in {}ms!", (t_end - t_start).as_millis()); Ok(()) } diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index 58d797485..fc329a305 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -1,6 +1,4 @@ use crate::cfg::ConfigOptsBuild; -use anyhow::Result; -use std::path::PathBuf; use structopt::StructOpt; /// Build the Rust WASM app and all of its assets. @@ -18,7 +16,7 @@ impl Build { // change the relase state. crate_config.with_release(self.build.release); - crate::builder::build(&crate_config); + crate::builder::build(&crate_config)?; Ok(()) } diff --git a/src/cli/cfg.rs b/src/cli/cfg.rs index 5736ebc19..2c5f42a26 100644 --- a/src/cli/cfg.rs +++ b/src/cli/cfg.rs @@ -1,11 +1,8 @@ -use anyhow::Result; use std::path::PathBuf; use structopt::StructOpt; -use serde::{Deserialize, Serialize}; +use serde::Deserialize; use std::collections::HashMap; -use std::str::FromStr; -use std::sync::Arc; /// Config options for the build system. #[derive(Clone, Debug, Default, Deserialize, StructOpt)] diff --git a/src/cli/clean/mod.rs b/src/cli/clean/mod.rs index aeeedf523..1edcd053a 100644 --- a/src/cli/clean/mod.rs +++ b/src/cli/clean/mod.rs @@ -1,6 +1,3 @@ -use crate::cfg::ConfigOptsBuild; -use anyhow::Result; -use std::path::PathBuf; use structopt::StructOpt; /// Build the Rust WASM app and all of its assets. diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 32492459a..a739f9a01 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -1,5 +1,3 @@ -use anyhow::{Context, Result}; -use std::path::PathBuf; use structopt::StructOpt; pub mod build; diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index 36c050bd3..f2ac2b69f 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -1,6 +1,4 @@ use crate::{cfg::ConfigOptsServe, server}; -use anyhow::Result; -use std::path::PathBuf; use std::io::Write; use structopt::StructOpt; diff --git a/src/cli/translate/to_component.rs b/src/cli/translate/to_component.rs index b08161e9c..d64854d37 100644 --- a/src/cli/translate/to_component.rs +++ b/src/cli/translate/to_component.rs @@ -20,6 +20,7 @@ pub fn convert_html_to_component(html: &str) -> Result { }) } +#[allow(dead_code)] pub struct ComponentRenderer { dom: Dom, icon_index: usize, diff --git a/src/config.rs b/src/config.rs index 47920c583..d17294b18 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,5 +1,5 @@ use crate::error::Result; -use std::{io::Write, path::PathBuf, process::Command}; +use std::path::PathBuf; #[derive(Debug, Clone)] pub struct CrateConfig { diff --git a/src/main.rs b/src/main.rs index a58794783..41fa5835b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,11 +8,11 @@ async fn main() -> Result<()> { match args.action { Commands::Translate(opts) => { - opts.translate(); + opts.translate()?; } Commands::Build(opts) => { - opts.build(); + opts.build()?; } // Commands::Clean(_) => { @@ -23,7 +23,7 @@ async fn main() -> Result<()> { // // // } Commands::Serve(opts) => { - opts.serve().await; + opts.serve().await?; } } diff --git a/src/server/mod.rs b/src/server/mod.rs index 2e937dbb8..6c6c08c1f 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -1,6 +1,6 @@ use axum::{ extract::{ - ws::{Message, WebSocket}, + ws::Message, Extension, TypedHeader, WebSocketUpgrade, }, http::StatusCode, @@ -19,11 +19,11 @@ struct WsRelodState { update: bool, } -impl WsRelodState { fn change(&mut self) { self.update = !self.update } } +impl WsRelodState { fn change(&mut self) { self.update = !self.update; } } pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { - log::info!("Starting development server 🚀"); + log::info!("🚀 Starting development server..."); let (tx, rx) = channel(); @@ -40,8 +40,9 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { match v { DebouncedEvent::Create(_) | DebouncedEvent::Write(_) | DebouncedEvent::Remove(_) | DebouncedEvent::Rename(_, _) => { - builder::build(&watcher_conf).unwrap(); - watcher_ws_state.lock().unwrap().change(); + if let Ok(_) = builder::build(&watcher_conf) { + watcher_ws_state.lock().unwrap().change(); + } }, _ => {} } diff --git a/src/server/serve.html b/src/server/serve.html index 98997403b..b5268bd68 100644 --- a/src/server/serve.html +++ b/src/server/serve.html @@ -14,15 +14,26 @@ From 0e2c05be66fc994ad8ac2e03b34c0e48632c3296 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Sun, 23 Jan 2022 01:29:36 +0800 Subject: [PATCH 023/459] feat: add `init` command --- README.md | 5 +- src/builder.rs | 8 +- src/cli/init/mod.rs | 61 +++++++++++++ src/cli/mod.rs | 8 +- src/cli/serve/develop.rs | 145 ------------------------------ src/cli/serve/events.rs | 0 src/cli/serve/mod.rs | 3 - src/cli/translate/to_component.rs | 1 + src/lib.rs | 4 +- src/main.rs | 18 +++- src/{ => server}/err.html | 0 src/server/mod.rs | 64 +++++++------ src/template/config.toml | 9 ++ src/template/default.rs | 16 ++++ src/watch.rs | 1 - 15 files changed, 151 insertions(+), 192 deletions(-) create mode 100644 src/cli/init/mod.rs delete mode 100644 src/cli/serve/develop.rs delete mode 100644 src/cli/serve/events.rs rename src/{ => server}/err.html (100%) create mode 100644 src/template/config.toml create mode 100644 src/template/default.rs delete mode 100644 src/watch.rs diff --git a/README.md b/README.md index 34be58eda..75e05b3cf 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ # About -dioxus-studio (inspired by wasm-pack and webpack) is a tool to help get dioxus projects off the ground. It handles all the build, development, bundling, and publishing to make web development simple. +dioxus-cli (inspired by wasm-pack and webpack) is a tool to help get dioxus projects off the ground. It handles all the build, development, bundling, and publishing to make web development simple. ## Installation @@ -19,5 +19,4 @@ dioxus-studio (inspired by wasm-pack and webpack) is a tool to help get dioxus p $ cargo install dioxus-cli ``` -Now, `dioxus` is in your path. - +Now, `dioxus` is in your path. \ No newline at end of file diff --git a/src/builder.rs b/src/builder.rs index 101d31ee5..24d9c3151 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -2,10 +2,7 @@ use crate::{ config::{CrateConfig, ExecutableType}, error::{Error, Result}, }; -use std::{ - io::Write, - process::Command, -}; +use std::{io::Write, process::Command}; use wasm_bindgen_cli_support::Bindgen; pub fn build(config: &CrateConfig) -> Result<()> { @@ -36,8 +33,7 @@ pub fn build(config: &CrateConfig) -> Result<()> { .arg("--target") .arg("wasm32-unknown-unknown") .stdout(std::process::Stdio::inherit()) - .stderr(std::process::Stdio::inherit()) - ; + .stderr(std::process::Stdio::inherit()); if config.release { cmd.arg("--release"); diff --git a/src/cli/init/mod.rs b/src/cli/init/mod.rs new file mode 100644 index 000000000..2325d9c31 --- /dev/null +++ b/src/cli/init/mod.rs @@ -0,0 +1,61 @@ +use std::{process::{Command, Stdio}, fs::File, path::PathBuf, io::Write}; + +use structopt::StructOpt; + +use crate::{error::{Error, Result}, cargo}; + +/// Build the Rust WASM app and all of its assets. +#[derive(Clone, Debug, StructOpt)] +#[structopt(name = "init")] +pub struct Init { + + /// Init project path + #[structopt(default_value = ".")] + path: String, + + /// Template path + #[structopt(default_value = "default", long)] + template: String, + +} + +impl Init { + pub fn init(self) -> Result<()> { + + log::info!("🔧 Start to init a new project '{}'.", self.path); + + let project_path = PathBuf::from(&self.path); + + let output = Command::new("cargo") + .arg("init") + .arg(&self.path) + .arg("--bin") + .stdout(Stdio::piped()) + .stderr(Stdio::piped()) + .output()? + ; + + if !output.status.success() { + return Err(Error::CargoError("Cargo init failed".into())); + } + + // get the template code + let template_str = match self.template { + _ => include_str!("../../template/default.rs"), + }; + + let main_rs_file = project_path.join("src").join("main.rs"); + if !main_rs_file.is_file() { + return Err(Error::FailedToWrite); + } + + let mut file = File::create(main_rs_file)?; + file.write_all(&template_str.as_bytes())?; + + // log::info!("🎯 Project initialization completed."); + + + + Ok(()) + } +} \ No newline at end of file diff --git a/src/cli/mod.rs b/src/cli/mod.rs index a739f9a01..ddc55d5c4 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -5,6 +5,7 @@ pub mod cfg; pub mod clean; pub mod serve; pub mod translate; +pub mod init; /// Build, bundle, & ship your Dioxus app. /// @@ -27,12 +28,15 @@ pub struct Cli { #[derive(StructOpt)] pub enum Commands { - // /// Build the Rust WASM app and all of its assets. + /// Build the Rust WASM app and all of its assets. Build(build::Build), /// Translate some source file into Dioxus code. Translate(translate::Translate), - // /// Build, watch & serve the Rust WASM app and all of its assets. + /// Build, watch & serve the Rust WASM app and all of its assets. Serve(serve::Serve), + /// Init a new project for Dioxus. + Init(init::Init), + // /// Clean output artifacts. // Clean(clean::Clean), diff --git a/src/cli/serve/develop.rs b/src/cli/serve/develop.rs deleted file mode 100644 index 27aba99ee..000000000 --- a/src/cli/serve/develop.rs +++ /dev/null @@ -1,145 +0,0 @@ -// use crate::{cli::DevelopOptions, config::CrateConfig, error::Result}; -// use async_std::prelude::FutureExt; - -// use log::info; -// use notify::{RecommendedWatcher, RecursiveMode, Watcher}; -// use std::path::PathBuf; -// use std::sync::atomic::AtomicBool; -// use std::sync::Arc; -// use tide::http::mime::HTML; -// use tide::http::Mime; - -// pub struct DevelopState { -// // -// reload_on_change: bool, -// } - -// pub async fn develop(options: DevelopOptions) -> Result<()> { -// // -// log::info!("Starting development server 🚀"); -// let mut cfg = CrateConfig::new()?; -// cfg.with_develop_options(&options); - -// let out_dir = cfg.out_dir.clone(); - -// let is_err = Arc::new(AtomicBool::new(false)); - -// // Spawn the server onto a seperate task -// // This lets the task progress while we handle file updates -// let server = async_std::task::spawn(launch_server(out_dir, is_err.clone())); -// let watcher = async_std::task::spawn(watch_directory(cfg.clone(), is_err.clone())); - -// match server.race(watcher).await { -// Err(e) => log::warn!("Error running development server, {:?}", e), -// _ => {} -// } - -// Ok(()) -// } - -// async fn watch_directory(config: CrateConfig, is_err: ErrStatus) -> Result<()> { -// // Create a channel to receive the events. -// let (watcher_tx, watcher_rx) = async_std::channel::bounded(100); - -// // Automatically select the best implementation for your platform. -// // You can also access each implementation directly e.g. INotifyWatcher. -// let mut watcher: RecommendedWatcher = Watcher::new(move |res| { -// async_std::task::block_on(watcher_tx.send(res)); -// // send an event -// let _ = async_std::task::block_on(watcher_tx.send(res)); -// }) -// .expect("failed to make watcher"); - -// let src_dir = crate::cargo::crate_root()?; - -// // Add a path to be watched. All files and directories at that path and -// // below will be monitored for changes. -// watcher -// .watch(&src_dir.join("src"), RecursiveMode::Recursive) -// .expect("Failed to watch dir"); - -// match watcher.watch(&src_dir.join("examples"), RecursiveMode::Recursive) { -// Ok(_) => {} -// Err(e) => log::warn!("Failed to watch examples dir, {:?}", e), -// } - -// 'run: loop { -// match crate::builder::build(&config) { -// Ok(_) => { -// is_err.store(false, std::sync::atomic::Ordering::Relaxed); -// async_std::task::sleep(std::time::Duration::from_millis(500)).await; -// } -// Err(err) => is_err.store(true, std::sync::atomic::Ordering::Relaxed), -// }; - -// let mut msg = None; -// loop { -// let new_msg = watcher_rx.recv().await.unwrap().unwrap(); -// if !watcher_rx.is_empty() { -// msg = Some(new_msg); -// break; -// } -// } - -// info!("File updated, rebuilding app"); -// } -// Ok(()) -// } - -// async fn launch_server(outdir: PathBuf, is_err: ErrStatus) -> Result<()> { -// let _crate_dir = crate::cargo::crate_root()?; -// let _workspace_dir = crate::cargo::workspace_root()?; - -// let mut app = tide::with_state(ServerState::new(outdir.to_owned(), is_err)); - -// let file_path = format!("{}/index.html", outdir.display()); -// log::info!("Serving {}", file_path); -// let p = outdir.display().to_string(); - -// app.at("/") -// .get(|req: tide::Request| async move { -// log::info!("Connected to development server"); -// let state = req.state(); - -// match state.is_err.load(std::sync::atomic::Ordering::Relaxed) { -// true => { -// // -// let mut resp = -// tide::Body::from_string(format!(include_str!("../err.html"), err = "_")); -// resp.set_mime(HTML); - -// Ok(resp) -// } -// false => { -// Ok(tide::Body::from_file(state.serv_path.clone().join("index.html")).await?) -// } -// } -// }) -// .serve_dir(p)?; -// // .serve_file(file_path) -// // .unwrap(); - -// let port = "8080"; -// let serve_addr = format!("127.0.0.1:{}", port); - -// info!("App available at http://{}/", serve_addr); -// app.listen(serve_addr).await?; -// Ok(()) -// } - -// /// https://github.com/http-rs/tide/blob/main/examples/state.rs -// /// Tide seems to prefer using state instead of injecting into the app closure -// /// The app closure needs to be static and -// #[derive(Clone)] -// struct ServerState { -// serv_path: PathBuf, -// is_err: ErrStatus, -// } - -// type ErrStatus = Arc; - -// impl ServerState { -// fn new(serv_path: PathBuf, is_err: ErrStatus) -> Self { -// Self { serv_path, is_err } -// } -// } diff --git a/src/cli/serve/events.rs b/src/cli/serve/events.rs deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index f2ac2b69f..d6287f07d 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -2,8 +2,6 @@ use crate::{cfg::ConfigOptsServe, server}; use std::io::Write; use structopt::StructOpt; -mod develop; - /// Run the WASM project on dev-server #[derive(Clone, Debug, StructOpt)] #[structopt(name = "serve")] @@ -14,7 +12,6 @@ pub struct Serve { impl Serve { pub async fn serve(self) -> anyhow::Result<()> { - let mut crate_config = crate::CrateConfig::new()?; // change the relase state. crate_config.with_release(self.serve.release); diff --git a/src/cli/translate/to_component.rs b/src/cli/translate/to_component.rs index d64854d37..972da7a25 100644 --- a/src/cli/translate/to_component.rs +++ b/src/cli/translate/to_component.rs @@ -4,6 +4,7 @@ //! - [ ] Extracts svgs //! - [ ] Attempts to extract lists +#[allow(unused_imports)] use std::{ fmt::{Display, Formatter}, io::Write, diff --git a/src/lib.rs b/src/lib.rs index d4d3d7953..15c10a3b3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -15,6 +15,4 @@ pub mod error; pub use error::*; pub mod logging; -pub use logging::*; - -pub mod watch; +pub use logging::*; \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 41fa5835b..69636c6e3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,11 +8,15 @@ async fn main() -> Result<()> { match args.action { Commands::Translate(opts) => { - opts.translate()?; + if let Err(e) = opts.translate() { + log::error!("translate error: {}", e); + } } Commands::Build(opts) => { - opts.build()?; + if let Err(e) = opts.build() { + log::error!("build error: {}", e); + } } // Commands::Clean(_) => { @@ -23,7 +27,15 @@ async fn main() -> Result<()> { // // // } Commands::Serve(opts) => { - opts.serve().await?; + if let Err(e) = opts.serve().await { + log::error!("serve error: {}", e); + } + } + + Commands::Init(opts) => { + if let Err(e) = opts.init() { + log::error!("init error: {}", e); + } } } diff --git a/src/err.html b/src/server/err.html similarity index 100% rename from src/err.html rename to src/server/err.html diff --git a/src/server/mod.rs b/src/server/mod.rs index 6c6c08c1f..7c0713c8d 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -1,34 +1,40 @@ use axum::{ - extract::{ - ws::Message, - Extension, TypedHeader, WebSocketUpgrade, - }, + extract::{ws::Message, Extension, TypedHeader, WebSocketUpgrade}, http::StatusCode, response::IntoResponse, routing::{get, get_service}, AddExtensionLayer, Router, }; -use notify::{watcher, Watcher, DebouncedEvent}; +use notify::{watcher, DebouncedEvent, Watcher}; use std::sync::{mpsc::channel, Arc, Mutex}; use std::time::Duration; use tower_http::services::ServeDir; -use crate::{CrateConfig, builder}; +use crate::{builder, CrateConfig}; struct WsRelodState { update: bool, } -impl WsRelodState { fn change(&mut self) { self.update = !self.update; } } +impl WsRelodState { + fn change(&mut self) { + self.update = !self.update; + } +} pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { - log::info!("🚀 Starting development server..."); - + let (tx, rx) = channel(); + // file watcher: check file change let mut watcher = watcher(tx, Duration::from_secs(2)).unwrap(); - watcher.watch(config.crate_dir.join("src").clone(), notify::RecursiveMode::Recursive).unwrap(); + watcher + .watch( + config.crate_dir.join("src").clone(), + notify::RecursiveMode::Recursive, + ) + .unwrap(); let ws_reload_state = Arc::new(Mutex::new(WsRelodState { update: false })); @@ -38,37 +44,40 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { loop { if let Ok(v) = rx.recv() { match v { - DebouncedEvent::Create(_) | DebouncedEvent::Write(_) | - DebouncedEvent::Remove(_) | DebouncedEvent::Rename(_, _) => { + DebouncedEvent::Create(_) + | DebouncedEvent::Write(_) + | DebouncedEvent::Remove(_) + | DebouncedEvent::Rename(_, _) => { if let Ok(_) = builder::build(&watcher_conf) { + // change the websocket reload state to true; + // the page will auto-reload. watcher_ws_state.lock().unwrap().change(); } - }, + } _ => {} } } - } + } }); let app = Router::new() .route("/ws", get(ws_handler)) - .fallback( - get_service(ServeDir::new(config.out_dir)).handle_error( - |error: std::io::Error| async move { - ( - StatusCode::INTERNAL_SERVER_ERROR, - format!("Unhandled internal error: {}", error), - ) - }, - ), - ) + .fallback(get_service(ServeDir::new(config.out_dir)).handle_error( + |error: std::io::Error| async move { + ( + StatusCode::INTERNAL_SERVER_ERROR, + format!("Unhandled internal error: {}", error), + ) + }, + )) .layer(AddExtensionLayer::new(ws_reload_state.clone())); + // start serve dev-server at 0.0.0.0:8080 let port = "8080"; + log::info!("📡 Dev-Server is started at: http://127.0.0.1:{}/", port); axum::Server::bind(&format!("0.0.0.0:{}", port).parse().unwrap()) .serve(app.into_make_service()) .await?; - Ok(()) } @@ -80,7 +89,10 @@ async fn ws_handler( ws.on_upgrade(|mut socket| async move { loop { if state.lock().unwrap().update { - socket.send(Message::Text(String::from("reload"))).await.unwrap(); + socket + .send(Message::Text(String::from("reload"))) + .await + .unwrap(); state.lock().unwrap().change(); } } diff --git a/src/template/config.toml b/src/template/config.toml new file mode 100644 index 000000000..4c6c2be9c --- /dev/null +++ b/src/template/config.toml @@ -0,0 +1,9 @@ +[package] +name = "{project}" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +dioxus = { version = "0.1.7", features = ["web"] } diff --git a/src/template/default.rs b/src/template/default.rs new file mode 100644 index 000000000..c0fa412ea --- /dev/null +++ b/src/template/default.rs @@ -0,0 +1,16 @@ +use dioxus::prelude::*; + +fn main() { + dioxus::desktop::launch(app); +} + +fn app(cx: Scope) -> Element { + cx.render(rsx! ( + div { + style: "text-align: center;", + h2 { "🌗🚀 Dioxus" } + p { strong { "Frontend that scales." } } + p { "Dioxus is a portable, performant, and ergonomic framework for building cross-platform user interfaces in Rust." } + } + )) +} diff --git a/src/watch.rs b/src/watch.rs deleted file mode 100644 index 8b1378917..000000000 --- a/src/watch.rs +++ /dev/null @@ -1 +0,0 @@ - From 5395e7693c05caf5446a1cc6671de7e870366569 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Sun, 23 Jan 2022 10:54:24 +0800 Subject: [PATCH 024/459] fix: `dist` setting --- src/builder.rs | 9 +++++---- src/cli/build/mod.rs | 7 ++++++- src/cli/init/mod.rs | 38 +++++++++++++++++++++++++++++--------- src/cli/mod.rs | 3 +-- src/cli/serve/mod.rs | 11 +++++++---- src/lib.rs | 2 +- src/server/mod.rs | 13 ++++++++++--- src/template/config.toml | 2 +- src/template/default.rs | 2 +- 9 files changed, 61 insertions(+), 26 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 24d9c3151..aad275ff2 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -2,10 +2,10 @@ use crate::{ config::{CrateConfig, ExecutableType}, error::{Error, Result}, }; -use std::{io::Write, process::Command}; +use std::{io::Write, path::PathBuf, process::Command}; use wasm_bindgen_cli_support::Bindgen; -pub fn build(config: &CrateConfig) -> Result<()> { +pub fn build(config: &CrateConfig, dist: PathBuf) -> Result<()> { /* [1] Build the project with cargo, generating a wasm32-unknown-unknown target (is there a more specific, better target to leverage?) [2] Generate the appropriate build folders @@ -15,7 +15,6 @@ pub fn build(config: &CrateConfig) -> Result<()> { */ let CrateConfig { - out_dir, crate_dir, target_dir, static_dir, @@ -23,10 +22,12 @@ pub fn build(config: &CrateConfig) -> Result<()> { .. } = config; + let out_dir = crate_dir.join(dist); + let t_start = std::time::Instant::now(); // [1] Build the .wasm module - log::info!("🚅 Running build commands..."); + log::info!("🚅 Running build command..."); let mut cmd = Command::new("cargo"); cmd.current_dir(&crate_dir) .arg("build") diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index fc329a305..760c2fd8e 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -1,3 +1,5 @@ +use std::path::PathBuf; + use crate::cfg::ConfigOptsBuild; use structopt::StructOpt; @@ -16,7 +18,10 @@ impl Build { // change the relase state. crate_config.with_release(self.build.release); - crate::builder::build(&crate_config)?; + crate::builder::build( + &crate_config, + self.build.dist.unwrap_or(PathBuf::from("dist")), + )?; Ok(()) } diff --git a/src/cli/init/mod.rs b/src/cli/init/mod.rs index 2325d9c31..dde0ccca3 100644 --- a/src/cli/init/mod.rs +++ b/src/cli/init/mod.rs @@ -1,14 +1,18 @@ -use std::{process::{Command, Stdio}, fs::File, path::PathBuf, io::Write}; +use std::{ + fs::{File, OpenOptions}, + io::Write, + path::PathBuf, + process::{Command, Stdio}, +}; use structopt::StructOpt; -use crate::{error::{Error, Result}, cargo}; +use crate::error::{Error, Result}; /// Build the Rust WASM app and all of its assets. #[derive(Clone, Debug, StructOpt)] #[structopt(name = "init")] pub struct Init { - /// Init project path #[structopt(default_value = ".")] path: String, @@ -16,24 +20,26 @@ pub struct Init { /// Template path #[structopt(default_value = "default", long)] template: String, - } impl Init { pub fn init(self) -> Result<()> { - log::info!("🔧 Start to init a new project '{}'.", self.path); let project_path = PathBuf::from(&self.path); + if project_path.join("Cargo.toml").is_file() { + log::warn!("Path '{}' is initialized.", self.path); + return Ok(()); + } + let output = Command::new("cargo") .arg("init") .arg(&self.path) .arg("--bin") .stdout(Stdio::piped()) .stderr(Stdio::piped()) - .output()? - ; + .output()?; if !output.status.success() { return Err(Error::CargoError("Cargo init failed".into())); @@ -54,8 +60,22 @@ impl Init { // log::info!("🎯 Project initialization completed."); - + if !Command::new("cargo") + .args(["add", "dioxus", "--features web"]) + .output()? + .status + .success() + { + let mut file = OpenOptions::new() + .append(true) + .open(project_path.join("Cargo.toml"))?; + file.write_all("dioxus = { version = \"0.1.7\", features = [\"web\"] }".as_bytes())?; + } + + log::info!("\n💡 Project initialized:"); + log::info!("🎯> cd {}", self.path); + log::info!("🎯> dioxus serve"); Ok(()) } -} \ No newline at end of file +} diff --git a/src/cli/mod.rs b/src/cli/mod.rs index ddc55d5c4..93cbfef28 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -3,9 +3,9 @@ use structopt::StructOpt; pub mod build; pub mod cfg; pub mod clean; +pub mod init; pub mod serve; pub mod translate; -pub mod init; /// Build, bundle, & ship your Dioxus app. /// @@ -36,7 +36,6 @@ pub enum Commands { Serve(serve::Serve), /// Init a new project for Dioxus. Init(init::Init), - // /// Clean output artifacts. // Clean(clean::Clean), diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index d6287f07d..586d49b7c 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -1,5 +1,5 @@ use crate::{cfg::ConfigOptsServe, server}; -use std::io::Write; +use std::{io::Write, path::PathBuf}; use structopt::StructOpt; /// Run the WASM project on dev-server @@ -16,15 +16,18 @@ impl Serve { // change the relase state. crate_config.with_release(self.serve.release); - crate::builder::build(&crate_config).expect("build failed"); + let dist_path = self.serve.dist.clone().unwrap_or(PathBuf::from("dist")); + + crate::builder::build(&crate_config, dist_path.clone()).expect("build failed"); let serve_html = String::from(include_str!("../../server/serve.html")); - let mut file = std::fs::File::create(crate_config.out_dir.join("index.html"))?; + let mut file = + std::fs::File::create(crate_config.crate_dir.join(dist_path).join("index.html"))?; file.write_all(serve_html.as_bytes())?; // start the develop server - server::startup(crate_config.clone()).await?; + server::startup(crate_config.clone(), &self.serve).await?; Ok(()) } diff --git a/src/lib.rs b/src/lib.rs index 15c10a3b3..395cbc8dc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -15,4 +15,4 @@ pub mod error; pub use error::*; pub mod logging; -pub use logging::*; \ No newline at end of file +pub use logging::*; diff --git a/src/server/mod.rs b/src/server/mod.rs index 7c0713c8d..4f04d3268 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -6,8 +6,11 @@ use axum::{ AddExtensionLayer, Router, }; use notify::{watcher, DebouncedEvent, Watcher}; -use std::sync::{mpsc::channel, Arc, Mutex}; use std::time::Duration; +use std::{ + path::PathBuf, + sync::{mpsc::channel, Arc, Mutex}, +}; use tower_http::services::ServeDir; use crate::{builder, CrateConfig}; @@ -22,7 +25,10 @@ impl WsRelodState { } } -pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { +pub async fn startup( + config: CrateConfig, + opts: &crate::cfg::ConfigOptsServe, +) -> anyhow::Result<()> { log::info!("🚀 Starting development server..."); let (tx, rx) = channel(); @@ -40,6 +46,7 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { let watcher_conf = config.clone(); let watcher_ws_state = ws_reload_state.clone(); + let dist_path = opts.dist.clone().unwrap_or(PathBuf::from("dist")); tokio::spawn(async move { loop { if let Ok(v) = rx.recv() { @@ -48,7 +55,7 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { | DebouncedEvent::Write(_) | DebouncedEvent::Remove(_) | DebouncedEvent::Rename(_, _) => { - if let Ok(_) = builder::build(&watcher_conf) { + if let Ok(_) = builder::build(&watcher_conf, dist_path.clone()) { // change the websocket reload state to true; // the page will auto-reload. watcher_ws_state.lock().unwrap().change(); diff --git a/src/template/config.toml b/src/template/config.toml index 4c6c2be9c..9644babc1 100644 --- a/src/template/config.toml +++ b/src/template/config.toml @@ -6,4 +6,4 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -dioxus = { version = "0.1.7", features = ["web"] } +dioxus = { version = "0.1.7", features = ["web"] } \ No newline at end of file diff --git a/src/template/default.rs b/src/template/default.rs index c0fa412ea..ac1614fc4 100644 --- a/src/template/default.rs +++ b/src/template/default.rs @@ -1,7 +1,7 @@ use dioxus::prelude::*; fn main() { - dioxus::desktop::launch(app); + dioxus::web::launch(app); } fn app(cx: Scope) -> Element { From 70adff7e443500e05ce8ff32a803971c4f816aff Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Sun, 23 Jan 2022 12:11:17 +0800 Subject: [PATCH 025/459] feat: add `dioxus.toml` support --- Cargo.toml | 1 + Dioxus.toml | 42 ++++++++++++++++++++++++++++++++++++++++++ src/builder.rs | 13 ++----------- src/config.rs | 40 +++++++++++++++++++++++++++++++++++++++- src/server/mod.rs | 24 ++++++++++++++---------- 5 files changed, 98 insertions(+), 22 deletions(-) create mode 100644 Dioxus.toml diff --git a/Cargo.toml b/Cargo.toml index cd1dec98b..8bb6fd3ce 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,6 +16,7 @@ wasm-bindgen-cli-support = "0.2.79" anyhow = "1.0.38" serde = { version = "1.0.133", features = ["derive"] } serde_json = "1" +toml = "0.5.8" fs_extra = "1.2.0" cargo_toml = "0.10.0" futures = "0.3.12" diff --git a/Dioxus.toml b/Dioxus.toml new file mode 100644 index 000000000..abd2d1ee4 --- /dev/null +++ b/Dioxus.toml @@ -0,0 +1,42 @@ +[application] + +# App (Project) Name +name = "dioxus-cli" + +# Dioxus App Support Platform +# desktop, web, mobile, ssr +platforms = ["web"] + +[web.app] + +# Web `build` & `serve` dist path +out_dir = "dist" + +# resource (static) file folder +static_dir = "static" + +[web.watcher] + + +watch_path = ["src"] + +# include `assets` in web platform +[web.resource] + +# CSS style file +style = [ + "./my-style.css" +] + +# Javascript code file +script = [ + "./app.js" +] + +[web.resource.dev] + +# Javascript code file +# serve: [dev-server] only +script = [ + "./debug.js" +] \ No newline at end of file diff --git a/src/builder.rs b/src/builder.rs index aad275ff2..58ee085fc 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -48,14 +48,12 @@ pub fn build(config: &CrateConfig, dist: PathBuf) -> Result<()> { let output = cmd.output()?; - if output.status.success() { - std::io::stdout().write_all(&output.stdout).unwrap(); - } else { + if !output.status.success() { log::error!("Build failed!"); let reason = String::from_utf8_lossy(&output.stderr).to_string(); return Err(Error::BuildFailed(reason)); } - + // [2] Establish the output directory structure let bindgen_outdir = out_dir.join("assets"); @@ -88,13 +86,6 @@ pub fn build(config: &CrateConfig, dist: PathBuf) -> Result<()> { .out_name("module") .generate(&bindgen_outdir)?; - // [4] - // TODO: wasm-opt - - // [5] Generate the html file with the module name - // TODO: support names via options - - // log::info!("Writing to '{:#?}' directory...", out_dir); let copy_options = fs_extra::dir::CopyOptions::new(); if static_dir.is_dir() { match fs_extra::dir::copy(static_dir, out_dir, ©_options) { diff --git a/src/config.rs b/src/config.rs index d17294b18..9d38160f2 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,6 +1,44 @@ use crate::error::Result; +use serde::{Deserialize, Serialize}; use std::path::PathBuf; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct DioxusConfig { + application: ApplicationConfig, + web: WebConfig, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ApplicationConfig { + name: String, + platform: Vec, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct WebConfig { + app: WebAppConfing, + watcher: WebWatcherConfing, + resource: WebResourceConfing, +} + + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct WebAppConfing { + +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct WebWatcherConfing { + +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct WebResourceConfing { + +} + + #[derive(Debug, Clone)] pub struct CrateConfig { pub out_dir: PathBuf, @@ -86,4 +124,4 @@ impl CrateConfig { // self.release = options.release; // self.out_dir = tempfile::Builder::new().tempdir().expect("").into_path(); // } -} +} \ No newline at end of file diff --git a/src/server/mod.rs b/src/server/mod.rs index 4f04d3268..6b91a2e71 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -33,6 +33,8 @@ pub async fn startup( let (tx, rx) = channel(); + let dist_path = opts.dist.clone().unwrap_or(PathBuf::from("dist")); + // file watcher: check file change let mut watcher = watcher(tx, Duration::from_secs(2)).unwrap(); watcher @@ -46,7 +48,7 @@ pub async fn startup( let watcher_conf = config.clone(); let watcher_ws_state = ws_reload_state.clone(); - let dist_path = opts.dist.clone().unwrap_or(PathBuf::from("dist")); + let watcher_dist_path = dist_path.clone(); tokio::spawn(async move { loop { if let Ok(v) = rx.recv() { @@ -55,7 +57,7 @@ pub async fn startup( | DebouncedEvent::Write(_) | DebouncedEvent::Remove(_) | DebouncedEvent::Rename(_, _) => { - if let Ok(_) = builder::build(&watcher_conf, dist_path.clone()) { + if let Ok(_) = builder::build(&watcher_conf, watcher_dist_path.clone()) { // change the websocket reload state to true; // the page will auto-reload. watcher_ws_state.lock().unwrap().change(); @@ -69,14 +71,16 @@ pub async fn startup( let app = Router::new() .route("/ws", get(ws_handler)) - .fallback(get_service(ServeDir::new(config.out_dir)).handle_error( - |error: std::io::Error| async move { - ( - StatusCode::INTERNAL_SERVER_ERROR, - format!("Unhandled internal error: {}", error), - ) - }, - )) + .fallback( + get_service(ServeDir::new(config.crate_dir.join(&dist_path))).handle_error( + |error: std::io::Error| async move { + ( + StatusCode::INTERNAL_SERVER_ERROR, + format!("Unhandled internal error: {}", error), + ) + }, + ), + ) .layer(AddExtensionLayer::new(ws_reload_state.clone())); // start serve dev-server at 0.0.0.0:8080 From 9bb10c65a3cbabef127f6af5c0d1eadab1d01531 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Sun, 23 Jan 2022 17:35:59 +0800 Subject: [PATCH 026/459] feat: add `Dioxus.toml` --- src/assets/autoreload.js | 25 +++++++++++++ src/assets/index.html | 18 +++++++++ src/builder.rs | 81 ++++++++++++++++++++++++++-------------- src/cli/build/mod.rs | 7 +--- src/cli/cfg.rs | 16 -------- src/cli/init/mod.rs | 27 ++++++++++---- src/cli/serve/mod.rs | 28 ++++++++++---- src/config.rs | 78 ++++++++++++++++++++++++++++++-------- src/server/err.html | 19 ---------- src/server/mod.rs | 54 ++++++++++++++++----------- src/server/serve.html | 39 ------------------- src/template/config.toml | 43 +++++++++++++++++---- src/template/default.rs | 4 +- 13 files changed, 269 insertions(+), 170 deletions(-) create mode 100644 src/assets/autoreload.js create mode 100644 src/assets/index.html delete mode 100644 src/server/err.html delete mode 100644 src/server/serve.html diff --git a/src/assets/autoreload.js b/src/assets/autoreload.js new file mode 100644 index 000000000..ff4444085 --- /dev/null +++ b/src/assets/autoreload.js @@ -0,0 +1,25 @@ +(function () { + var protocol = window.location.protocol === "https:" ? "wss:" : "ws:"; + + var url = protocol + "//" + window.location.host + "/_dioxus/ws"; + + var poll_interval = 2000; + + var reload_upon_connect = () => { + window.setTimeout(() => { + var ws = new WebSocket(url); + ws.onopen = () => window.location.reload(); + ws.onclose = reload_upon_connect; + }, poll_interval); + }; + + var ws = new WebSocket(url); + + ws.onmessage = (ev) => { + if (ev.data == "reload") { + window.location.reload(); + } + }; + + ws.onclose = reload_upon_connect; +})(); \ No newline at end of file diff --git a/src/assets/index.html b/src/assets/index.html new file mode 100644 index 000000000..12e1e5678 --- /dev/null +++ b/src/assets/index.html @@ -0,0 +1,18 @@ + + + {app_title} + + + {style_include} + + + +
+ + + {script_include} + + diff --git a/src/builder.rs b/src/builder.rs index 58ee085fc..381ef8b28 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -1,11 +1,12 @@ use crate::{ config::{CrateConfig, ExecutableType}, error::{Error, Result}, + DioxusConfig, }; -use std::{io::Write, path::PathBuf, process::Command}; +use std::process::Command; use wasm_bindgen_cli_support::Bindgen; -pub fn build(config: &CrateConfig, dist: PathBuf) -> Result<()> { +pub fn build(config: &CrateConfig) -> Result<()> { /* [1] Build the project with cargo, generating a wasm32-unknown-unknown target (is there a more specific, better target to leverage?) [2] Generate the appropriate build folders @@ -15,15 +16,15 @@ pub fn build(config: &CrateConfig, dist: PathBuf) -> Result<()> { */ let CrateConfig { + out_dir, crate_dir, target_dir, static_dir, executable, + dioxus_config, .. } = config; - let out_dir = crate_dir.join(dist); - let t_start = std::time::Instant::now(); // [1] Build the .wasm module @@ -53,7 +54,7 @@ pub fn build(config: &CrateConfig, dist: PathBuf) -> Result<()> { let reason = String::from_utf8_lossy(&output.stderr).to_string(); return Err(Error::BuildFailed(reason)); } - + // [2] Establish the output directory structure let bindgen_outdir = out_dir.join("assets"); @@ -83,7 +84,7 @@ pub fn build(config: &CrateConfig, dist: PathBuf) -> Result<()> { .keep_debug(true) .remove_name_section(false) .remove_producers_section(false) - .out_name("module") + .out_name(&dioxus_config.application.name) .generate(&bindgen_outdir)?; let copy_options = fs_extra::dir::CopyOptions::new(); @@ -101,28 +102,52 @@ pub fn build(config: &CrateConfig, dist: PathBuf) -> Result<()> { Ok(()) } -pub fn gen_page(module: &str) -> String { - format!( - r#" - - - - - - -
-
- - -
- - -"#, - module - ) +pub fn gen_page(config: &DioxusConfig, serve: bool) -> String { + let mut html = String::from(include_str!("./assets/index.html")); + + let resouces = config.web.resource.clone(); + + let mut style_list = resouces.style.unwrap_or(vec![]); + let mut script_list = resouces.script.unwrap_or(vec![]); + + if serve { + let mut dev_style = resouces.dev.style.clone().unwrap_or(vec![]); + let mut dev_script = resouces.dev.script.clone().unwrap_or(vec![]); + style_list.append(&mut dev_style); + script_list.append(&mut dev_script); + } + + let mut style_str = String::new(); + for style in style_list { + style_str.push_str(&format!( + "\n", + &style.to_str().unwrap(), + )) + } + html = html.replace("{style_include}", &style_str); + + let mut script_str = String::new(); + for script in script_list { + script_str.push_str(&format!( + "\n", + &script.to_str().unwrap(), + )) + } + + html = html.replace("{script_include}", &script_str); + + if serve { + html += &format!( + "", + include_str!("./assets/autoreload.js") + ); + } + + html = html.replace("{app_name}", &config.application.name); + + let title = config.web.app.title.clone().unwrap_or("dioxus | ⛺".into()); + + html.replace("{app_title}", &title) } // use binary_install::{Cache, Download}; diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index 760c2fd8e..fc329a305 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -1,5 +1,3 @@ -use std::path::PathBuf; - use crate::cfg::ConfigOptsBuild; use structopt::StructOpt; @@ -18,10 +16,7 @@ impl Build { // change the relase state. crate_config.with_release(self.build.release); - crate::builder::build( - &crate_config, - self.build.dist.unwrap_or(PathBuf::from("dist")), - )?; + crate::builder::build(&crate_config)?; Ok(()) } diff --git a/src/cli/cfg.rs b/src/cli/cfg.rs index 2c5f42a26..ab68ce4f9 100644 --- a/src/cli/cfg.rs +++ b/src/cli/cfg.rs @@ -16,14 +16,6 @@ pub struct ConfigOptsBuild { #[serde(default)] pub release: bool, - /// The output dir for all final assets [default: dist] - #[structopt(short, long, parse(from_os_str))] - pub dist: Option, - - /// The public URL from which assets are to be served [default: /] - #[structopt(long, parse(from_str=parse_public_url))] - pub public_url: Option, - /// Optional pattern for the app loader script [default: None] /// /// Patterns should include the sequences `{base}`, `{wasm}`, and `{js}` in order to @@ -74,14 +66,6 @@ pub struct ConfigOptsServe { #[structopt(long)] #[serde(default)] pub release: bool, - - /// The output dir for all final assets [default: dist] - #[structopt(short, long, parse(from_os_str))] - pub dist: Option, - - /// The public URL from which assets are to be served [default: /] - #[structopt(long, parse(from_str=parse_public_url))] - pub public_url: Option, } /// Ensure the given value for `--public-url` is formatted correctly. diff --git a/src/cli/init/mod.rs b/src/cli/init/mod.rs index dde0ccca3..52dcf4c14 100644 --- a/src/cli/init/mod.rs +++ b/src/cli/init/mod.rs @@ -13,9 +13,9 @@ use crate::error::{Error, Result}; #[derive(Clone, Debug, StructOpt)] #[structopt(name = "init")] pub struct Init { - /// Init project path + /// Init project name #[structopt(default_value = ".")] - path: String, + name: String, /// Template path #[structopt(default_value = "default", long)] @@ -24,18 +24,23 @@ pub struct Init { impl Init { pub fn init(self) -> Result<()> { - log::info!("🔧 Start to init a new project '{}'.", self.path); + if self.name.contains(".") { + log::error!("❗Unsupported project name."); + return Ok(()); + } - let project_path = PathBuf::from(&self.path); + log::info!("🔧 Start to init a new project '{}'.", self.name); + + let project_path = PathBuf::from(&self.name); if project_path.join("Cargo.toml").is_file() { - log::warn!("Path '{}' is initialized.", self.path); + log::warn!("Folder '{}' is initialized.", self.name); return Ok(()); } let output = Command::new("cargo") .arg("init") - .arg(&self.path) + .arg(&format!("./{}", self.name)) .arg("--bin") .stdout(Stdio::piped()) .stderr(Stdio::piped()) @@ -58,6 +63,11 @@ impl Init { let mut file = File::create(main_rs_file)?; file.write_all(&template_str.as_bytes())?; + let mut file = File::create(project_path.join("Dioxus.toml"))?; + let dioxus_conf = String::from(include_str!("../../template/config.toml")) + .replace("{project-name}", &self.name); + file.write_all(dioxus_conf.as_bytes())?; + // log::info!("🎯 Project initialization completed."); if !Command::new("cargo") @@ -72,8 +82,9 @@ impl Init { file.write_all("dioxus = { version = \"0.1.7\", features = [\"web\"] }".as_bytes())?; } - log::info!("\n💡 Project initialized:"); - log::info!("🎯> cd {}", self.path); + println!(""); + log::info!("💡 Project initialized:"); + log::info!("🎯> cd ./{}", self.name); log::info!("🎯> dioxus serve"); Ok(()) diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index 586d49b7c..7d580f7fb 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -1,4 +1,4 @@ -use crate::{cfg::ConfigOptsServe, server}; +use crate::{cfg::ConfigOptsServe, gen_page, server}; use std::{io::Write, path::PathBuf}; use structopt::StructOpt; @@ -16,19 +16,31 @@ impl Serve { // change the relase state. crate_config.with_release(self.serve.release); - let dist_path = self.serve.dist.clone().unwrap_or(PathBuf::from("dist")); + crate::builder::build(&crate_config).expect("build failed"); - crate::builder::build(&crate_config, dist_path.clone()).expect("build failed"); + let serve_html = gen_page(&crate_config.dioxus_config, true); - let serve_html = String::from(include_str!("../../server/serve.html")); - - let mut file = - std::fs::File::create(crate_config.crate_dir.join(dist_path).join("index.html"))?; + let mut file = std::fs::File::create( + crate_config + .crate_dir + .join( + crate_config + .dioxus_config + .web + .app + .out_dir + .clone() + .unwrap_or(PathBuf::from("dist")), + ) + .join("index.html"), + )?; file.write_all(serve_html.as_bytes())?; // start the develop server - server::startup(crate_config.clone(), &self.serve).await?; + server::startup(crate_config.clone()).await?; Ok(()) } + + pub fn regen_page() {} } diff --git a/src/config.rs b/src/config.rs index 9d38160f2..39a3d2038 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,43 +1,76 @@ use crate::error::Result; use serde::{Deserialize, Serialize}; -use std::path::PathBuf; - +use std::{fs::File, io::Read, path::PathBuf}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct DioxusConfig { - application: ApplicationConfig, - web: WebConfig, + pub application: ApplicationConfig, + pub web: WebConfig, +} + +impl DioxusConfig { + pub fn load() -> crate::error::Result { + let crate_dir = crate::cargo::crate_root()?; + + if !crate_dir.join("Dioxus.toml").is_file() { + return Err(crate::error::Error::CargoError( + "Dioxus.toml not found".into(), + )); + } + + let mut dioxus_conf_file = File::open(crate_dir.join("Dioxus.toml"))?; + let mut meta_str = String::new(); + dioxus_conf_file.read_to_string(&mut meta_str)?; + + match toml::from_str::(&meta_str) { + Ok(v) => return Ok(v), + Err(e) => { + log::error!("{}", e); + return Err(crate::error::Error::Unique( + "Dioxus.toml parse failed".into(), + )); + } + } + } } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ApplicationConfig { - name: String, - platform: Vec, + pub name: String, + pub platforms: Vec, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct WebConfig { - app: WebAppConfing, - watcher: WebWatcherConfing, - resource: WebResourceConfing, + pub app: WebAppConfing, + pub watcher: WebWatcherConfing, + pub resource: WebResourceConfing, } - #[derive(Debug, Clone, Serialize, Deserialize)] pub struct WebAppConfing { - + pub title: Option, + pub out_dir: Option, + pub static_dir: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct WebWatcherConfing { - + pub watch_path: Option>, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct WebResourceConfing { - + pub dev: WebDevResourceConfing, + pub style: Option>, + pub script: Option>, } +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct WebDevResourceConfing { + pub style: Option>, + pub script: Option>, +} #[derive(Debug, Clone)] pub struct CrateConfig { @@ -48,6 +81,7 @@ pub struct CrateConfig { pub static_dir: PathBuf, pub manifest: cargo_toml::Manifest, pub executable: ExecutableType, + pub dioxus_config: DioxusConfig, pub release: bool, } @@ -60,12 +94,23 @@ pub enum ExecutableType { impl CrateConfig { pub fn new() -> Result { + let dioxus_config = DioxusConfig::load()?; + let crate_dir = crate::cargo::crate_root()?; let workspace_dir = crate::cargo::workspace_root()?; let target_dir = workspace_dir.join("target"); - let out_dir = crate_dir.join("public"); + + let out_dir = match dioxus_config.web.app.out_dir { + Some(ref v) => crate_dir.join(v), + None => crate_dir.join("dist"), + }; + let cargo_def = &crate_dir.join("Cargo.toml"); - let static_dir = crate_dir.join("static"); + + let static_dir = match dioxus_config.web.app.static_dir { + Some(ref v) => crate_dir.join(v), + None => crate_dir.join("static"), + }; let manifest = cargo_toml::Manifest::from_path(&cargo_def).unwrap(); @@ -96,6 +141,7 @@ impl CrateConfig { manifest, executable, release, + dioxus_config, }) } @@ -124,4 +170,4 @@ impl CrateConfig { // self.release = options.release; // self.out_dir = tempfile::Builder::new().tempdir().expect("").into_path(); // } -} \ No newline at end of file +} diff --git a/src/server/err.html b/src/server/err.html deleted file mode 100644 index 8fdbf9bae..000000000 --- a/src/server/err.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - -
-

- Sorry, but building your application failed. -

-

- Here's the error: -

- - {err} - -
- - - diff --git a/src/server/mod.rs b/src/server/mod.rs index 6b91a2e71..4d33f524e 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -13,7 +13,7 @@ use std::{ }; use tower_http::services::ServeDir; -use crate::{builder, CrateConfig}; +use crate::{builder, crate_root, CrateConfig}; struct WsRelodState { update: bool, @@ -25,42 +25,54 @@ impl WsRelodState { } } -pub async fn startup( - config: CrateConfig, - opts: &crate::cfg::ConfigOptsServe, -) -> anyhow::Result<()> { +pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { log::info!("🚀 Starting development server..."); let (tx, rx) = channel(); - let dist_path = opts.dist.clone().unwrap_or(PathBuf::from("dist")); + let dist_path = config.out_dir.clone(); // file watcher: check file change - let mut watcher = watcher(tx, Duration::from_secs(2)).unwrap(); + let mut watcher = watcher(tx, Duration::from_secs(1)).unwrap(); watcher - .watch( - config.crate_dir.join("src").clone(), - notify::RecursiveMode::Recursive, - ) + .watch(config.crate_dir.clone(), notify::RecursiveMode::Recursive) .unwrap(); let ws_reload_state = Arc::new(Mutex::new(WsRelodState { update: false })); let watcher_conf = config.clone(); let watcher_ws_state = ws_reload_state.clone(); - let watcher_dist_path = dist_path.clone(); tokio::spawn(async move { + let allow_watch_path = watcher_conf + .dioxus_config + .web + .watcher + .watch_path + .clone() + .unwrap_or(vec![PathBuf::from("src")]); + let crate_dir = watcher_conf.crate_dir.clone(); loop { if let Ok(v) = rx.recv() { match v { - DebouncedEvent::Create(_) - | DebouncedEvent::Write(_) - | DebouncedEvent::Remove(_) - | DebouncedEvent::Rename(_, _) => { - if let Ok(_) = builder::build(&watcher_conf, watcher_dist_path.clone()) { - // change the websocket reload state to true; - // the page will auto-reload. - watcher_ws_state.lock().unwrap().change(); + DebouncedEvent::Create(e) + | DebouncedEvent::Write(e) + | DebouncedEvent::Remove(e) + | DebouncedEvent::Rename(e, _) => { + let mut reload = false; + for path in &allow_watch_path { + let temp = crate_dir.clone().join(path); + if e.starts_with(temp) { + reload = true; + break; + } + } + + if reload { + if let Ok(_) = builder::build(&watcher_conf) { + // change the websocket reload state to true; + // the page will auto-reload. + watcher_ws_state.lock().unwrap().change(); + } } } _ => {} @@ -70,7 +82,7 @@ pub async fn startup( }); let app = Router::new() - .route("/ws", get(ws_handler)) + .route("/_dioxus/ws", get(ws_handler)) .fallback( get_service(ServeDir::new(config.crate_dir.join(&dist_path))).handle_error( |error: std::io::Error| async move { diff --git a/src/server/serve.html b/src/server/serve.html deleted file mode 100644 index b5268bd68..000000000 --- a/src/server/serve.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - Dioxus-CLI Dev Server - - -
- - - - - - - diff --git a/src/template/config.toml b/src/template/config.toml index 9644babc1..ea1efbd4b 100644 --- a/src/template/config.toml +++ b/src/template/config.toml @@ -1,9 +1,38 @@ -[package] -name = "{project}" -version = "0.1.0" -edition = "2021" +[application] -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +# App (Project) Name +name = "{project-name}" -[dependencies] -dioxus = { version = "0.1.7", features = ["web"] } \ No newline at end of file +# Dioxus App Support Platform +# desktop, web, mobile, ssr +platforms = ["web"] + +[web.app] + +# HTML title tag content +title = "dioxus | ⛺" + +# Web `build` & `serve` dist path +out_dir = "dist" + +# resource (static) file folder +static_dir = "static" + +[web.watcher] + +watch_path = ["src"] + +# include `assets` in web platform +[web.resource] + +# CSS style file +style = [] + +# Javascript code file +script = [] + +[web.resource.dev] + +# Javascript code file +# serve: [dev-server] only +script = [] \ No newline at end of file diff --git a/src/template/default.rs b/src/template/default.rs index ac1614fc4..47b4a2c1d 100644 --- a/src/template/default.rs +++ b/src/template/default.rs @@ -8,8 +8,8 @@ fn app(cx: Scope) -> Element { cx.render(rsx! ( div { style: "text-align: center;", - h2 { "🌗🚀 Dioxus" } - p { strong { "Frontend that scales." } } + h1 { "🌗 Dioxus 🚀" } + h3 { "Frontend that scales." } p { "Dioxus is a portable, performant, and ergonomic framework for building cross-platform user interfaces in Rust." } } )) From 7343af2089ae0ff1f3da6b418d8168651a201832 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Sun, 23 Jan 2022 22:50:23 +0800 Subject: [PATCH 027/459] feat: `clean` command --- src/assets/index.html | 4 ++-- src/builder.rs | 30 ++++++++++++++++++------- src/cli/build/mod.rs | 22 +++++++++++++++++- src/cli/clean/mod.rs | 35 +++++++++++++++++++++++++++++ src/cli/mod.rs | 3 +-- src/cli/serve/mod.rs | 17 +++++++++----- src/config.rs | 48 ++++++++++++++++++++++++++++++++-------- src/main.rs | 8 ++++--- src/server/mod.rs | 11 ++++++++- src/template/config.toml | 8 +++++-- 10 files changed, 152 insertions(+), 34 deletions(-) diff --git a/src/assets/index.html b/src/assets/index.html index 12e1e5678..9934e490d 100644 --- a/src/assets/index.html +++ b/src/assets/index.html @@ -10,8 +10,8 @@
{script_include} diff --git a/src/builder.rs b/src/builder.rs index 381ef8b28..0ecde96cd 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -19,7 +19,7 @@ pub fn build(config: &CrateConfig) -> Result<()> { out_dir, crate_dir, target_dir, - static_dir, + public_dir, executable, dioxus_config, .. @@ -56,7 +56,7 @@ pub fn build(config: &CrateConfig) -> Result<()> { } // [2] Establish the output directory structure - let bindgen_outdir = out_dir.join("assets"); + let bindgen_outdir = out_dir.join("assets").join("dioxus"); // [3] Bindgen the final binary for use easy linking let mut bindgen_builder = Bindgen::new(); @@ -87,12 +87,26 @@ pub fn build(config: &CrateConfig) -> Result<()> { .out_name(&dioxus_config.application.name) .generate(&bindgen_outdir)?; - let copy_options = fs_extra::dir::CopyOptions::new(); - if static_dir.is_dir() { - match fs_extra::dir::copy(static_dir, out_dir, ©_options) { - Ok(_) => {} - Err(_e) => { - log::warn!("Error copying dir: {}", _e); + let copy_options = fs_extra::dir::CopyOptions { + overwrite: true, + skip_exist: false, + buffer_size: 64000, + copy_inside: false, + content_only: false, + depth: 0, + }; + if public_dir.is_dir() { + for entry in std::fs::read_dir(&public_dir)? { + let path = entry?.path(); + if path.is_file() { + std::fs::copy(&path, out_dir.join(path.file_name().unwrap()))?; + } else { + match fs_extra::dir::copy(&path, out_dir, ©_options) { + Ok(_) => {} + Err(_e) => { + log::warn!("Error copying dir: {}", _e); + } + } } } } diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index fc329a305..e24a99822 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -1,4 +1,6 @@ -use crate::cfg::ConfigOptsBuild; +use std::{io::Write, path::PathBuf}; + +use crate::{cfg::ConfigOptsBuild, gen_page}; use structopt::StructOpt; /// Build the Rust WASM app and all of its assets. @@ -18,6 +20,24 @@ impl Build { crate::builder::build(&crate_config)?; + let temp = gen_page(&crate_config.dioxus_config, false); + + let mut file = std::fs::File::create( + crate_config + .crate_dir + .join( + crate_config + .dioxus_config + .web + .app + .out_dir + .clone() + .unwrap_or(PathBuf::from("dist")), + ) + .join("index.html"), + )?; + file.write_all(temp.as_bytes())?; + Ok(()) } } diff --git a/src/cli/clean/mod.rs b/src/cli/clean/mod.rs index 1edcd053a..4ab7653d2 100644 --- a/src/cli/clean/mod.rs +++ b/src/cli/clean/mod.rs @@ -1,6 +1,41 @@ +use std::{ + fs::remove_dir_all, + path::PathBuf, + process::{Command, Stdio}, +}; + use structopt::StructOpt; /// Build the Rust WASM app and all of its assets. #[derive(Clone, Debug, StructOpt)] #[structopt(name = "clean")] pub struct Clean {} + +impl Clean { + pub fn clean(self) -> anyhow::Result<()> { + let crate_config = crate::CrateConfig::new()?; + + let output = Command::new("cargo") + .arg("clean") + .stdout(Stdio::piped()) + .stderr(Stdio::piped()) + .output()?; + + if !output.status.success() { + log::error!("Cargo clean failed."); + return Ok(()); + } + + let out_dir = crate_config + .dioxus_config + .web + .app + .out_dir + .unwrap_or(PathBuf::from("dist")); + if crate_config.crate_dir.join(&out_dir).is_dir() { + remove_dir_all(crate_config.crate_dir.join(&out_dir))?; + } + + Ok(()) + } +} diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 93cbfef28..6224cea32 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -37,8 +37,7 @@ pub enum Commands { /// Init a new project for Dioxus. Init(init::Init), // /// Clean output artifacts. - // Clean(clean::Clean), - + Clean(clean::Clean), // /// Trunk config controls. // Config(config::Config), } diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index 7d580f7fb..19a7f28ff 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -1,4 +1,4 @@ -use crate::{cfg::ConfigOptsServe, gen_page, server}; +use crate::{cfg::ConfigOptsServe, gen_page, server, CrateConfig}; use std::{io::Write, path::PathBuf}; use structopt::StructOpt; @@ -18,6 +18,16 @@ impl Serve { crate::builder::build(&crate_config).expect("build failed"); + // generate dev-index page + Serve::regen_dev_page(&crate_config)?; + + // start the develop server + server::startup(crate_config.clone()).await?; + + Ok(()) + } + + pub fn regen_dev_page(crate_config: &CrateConfig) -> anyhow::Result<()> { let serve_html = gen_page(&crate_config.dioxus_config, true); let mut file = std::fs::File::create( @@ -36,11 +46,6 @@ impl Serve { )?; file.write_all(serve_html.as_bytes())?; - // start the develop server - server::startup(crate_config.clone()).await?; - Ok(()) } - - pub fn regen_page() {} } diff --git a/src/config.rs b/src/config.rs index 39a3d2038..403ad0e81 100644 --- a/src/config.rs +++ b/src/config.rs @@ -13,9 +13,8 @@ impl DioxusConfig { let crate_dir = crate::cargo::crate_root()?; if !crate_dir.join("Dioxus.toml").is_file() { - return Err(crate::error::Error::CargoError( - "Dioxus.toml not found".into(), - )); + log::warn!("Config file: `Dioxus.toml` not found."); + return Ok(Self::default()); } let mut dioxus_conf_file = File::open(crate_dir.join("Dioxus.toml"))?; @@ -34,6 +33,36 @@ impl DioxusConfig { } } +impl Default for DioxusConfig { + fn default() -> Self { + Self { + application: ApplicationConfig { + name: "dioxus".into(), + platforms: vec![String::from("web")], + }, + web: WebConfig { + app: WebAppConfing { + title: Some("dioxus | ⛺".into()), + out_dir: Some(PathBuf::from("dist")), + public_dir: Some(PathBuf::from("public")), + }, + watcher: WebWatcherConfing { + watch_path: Some(vec![PathBuf::from("src")]), + reload_html: Some(false), + }, + resource: WebResourceConfing { + dev: WebDevResourceConfing { + style: Some(vec![]), + script: Some(vec![]), + }, + style: Some(vec![]), + script: Some(vec![]), + }, + }, + } + } +} + #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ApplicationConfig { pub name: String, @@ -51,12 +80,13 @@ pub struct WebConfig { pub struct WebAppConfing { pub title: Option, pub out_dir: Option, - pub static_dir: Option, + pub public_dir: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct WebWatcherConfing { pub watch_path: Option>, + pub reload_html: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -78,7 +108,7 @@ pub struct CrateConfig { pub crate_dir: PathBuf, pub workspace_dir: PathBuf, pub target_dir: PathBuf, - pub static_dir: PathBuf, + pub public_dir: PathBuf, pub manifest: cargo_toml::Manifest, pub executable: ExecutableType, pub dioxus_config: DioxusConfig, @@ -107,9 +137,9 @@ impl CrateConfig { let cargo_def = &crate_dir.join("Cargo.toml"); - let static_dir = match dioxus_config.web.app.static_dir { + let public_dir = match dioxus_config.web.app.public_dir { Some(ref v) => crate_dir.join(v), - None => crate_dir.join("static"), + None => crate_dir.join("public"), }; let manifest = cargo_toml::Manifest::from_path(&cargo_def).unwrap(); @@ -124,7 +154,7 @@ impl CrateConfig { (&manifest) .package .as_ref() - .and_then(|pkg| Some(pkg.name.replace("-", "_"))) + .and_then(|pkg| Some(pkg.name.clone())) .clone() }) .expect("No lib found from cargo metadata"); @@ -137,7 +167,7 @@ impl CrateConfig { crate_dir, workspace_dir, target_dir, - static_dir, + public_dir, manifest, executable, release, diff --git a/src/main.rs b/src/main.rs index 69636c6e3..70f92cf95 100644 --- a/src/main.rs +++ b/src/main.rs @@ -19,9 +19,11 @@ async fn main() -> Result<()> { } } - // Commands::Clean(_) => { - // // - // } + Commands::Clean(opts) => { + if let Err(e) = opts.clean() { + log::error!("clean error: {}", e); + } + } // Commands::Config(_) => { // // diff --git a/src/server/mod.rs b/src/server/mod.rs index 4d33f524e..3151975d5 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -13,7 +13,7 @@ use std::{ }; use tower_http::services::ServeDir; -use crate::{builder, crate_root, CrateConfig}; +use crate::{builder, serve::Serve, CrateConfig}; struct WsRelodState { update: bool, @@ -71,6 +71,15 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { if let Ok(_) = builder::build(&watcher_conf) { // change the websocket reload state to true; // the page will auto-reload. + if watcher_conf + .dioxus_config + .web + .watcher + .reload_html + .unwrap_or(false) + { + let _ = Serve::regen_dev_page(&watcher_conf); + } watcher_ws_state.lock().unwrap().change(); } } diff --git a/src/template/config.toml b/src/template/config.toml index ea1efbd4b..44f5baabd 100644 --- a/src/template/config.toml +++ b/src/template/config.toml @@ -15,11 +15,15 @@ title = "dioxus | ⛺" # Web `build` & `serve` dist path out_dir = "dist" -# resource (static) file folder -static_dir = "static" +# resource (public) file folder +public_dir = "public" [web.watcher] +# when watcher trigger, regenerate the `index.html` +reload_html = true + +# which files or dirs will be watcher monitoring watch_path = ["src"] # include `assets` in web platform From bdcc06648b0275404b8626bcae6acf62b8af7af8 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Mon, 24 Jan 2022 05:55:40 +0800 Subject: [PATCH 028/459] feat: init use `cargo-generate ` --- Cargo.toml | 3 +- Dioxus.toml | 2 +- src/cli/build/mod.rs | 4 ++ src/cli/cfg.rs | 8 ++++ src/cli/init/mod.rs | 97 ++++++++++++++++++++++------------------ src/cli/serve/mod.rs | 5 +++ src/template/config.toml | 42 ----------------- src/template/default.rs | 16 ------- 8 files changed, 74 insertions(+), 103 deletions(-) delete mode 100644 src/template/config.toml delete mode 100644 src/template/default.rs diff --git a/Cargo.toml b/Cargo.toml index 8bb6fd3ce..68dd3ee56 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dioxus-cli" -version = "0.1.1" +version = "0.1.2" authors = ["Jonathan Kelley"] edition = "2018" description = "CLI tool for developing, testing, and publishing Dioxus apps" @@ -28,6 +28,7 @@ structopt = "0.3.25" cargo_metadata = "0.14.1" tokio = { version = "1.15.0", features = ["full"] } atty = "0.2.14" +regex = "1.5.4" axum = { version = "0.4.4", features = ["ws", "headers"] } tower-http = { version = "0.2.0", features = ["fs", "trace"] } diff --git a/Dioxus.toml b/Dioxus.toml index abd2d1ee4..b4ba03f9d 100644 --- a/Dioxus.toml +++ b/Dioxus.toml @@ -13,7 +13,7 @@ platforms = ["web"] out_dir = "dist" # resource (static) file folder -static_dir = "static" +public_dir = "public" [web.watcher] diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index e24a99822..cbf82b339 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -18,6 +18,10 @@ impl Build { // change the relase state. crate_config.with_release(self.build.release); + if self.build.example.is_some() { + crate_config.as_example(self.build.example.unwrap()); + } + crate::builder::build(&crate_config)?; let temp = gen_page(&crate_config.dioxus_config, false); diff --git a/src/cli/cfg.rs b/src/cli/cfg.rs index ab68ce4f9..6a27c4890 100644 --- a/src/cli/cfg.rs +++ b/src/cli/cfg.rs @@ -16,6 +16,10 @@ pub struct ConfigOptsBuild { #[serde(default)] pub release: bool, + /// Build a example [default: ""] + #[structopt(long)] + pub example: Option, + /// Optional pattern for the app loader script [default: None] /// /// Patterns should include the sequences `{base}`, `{wasm}`, and `{js}` in order to @@ -62,6 +66,10 @@ pub struct ConfigOptsServe { #[structopt(parse(from_os_str))] pub target: Option, + /// Build a example [default: ""] + #[structopt(long)] + pub example: Option, + /// Build in release mode [default: false] #[structopt(long)] #[serde(default)] diff --git a/src/cli/init/mod.rs b/src/cli/init/mod.rs index 52dcf4c14..a19ee68fd 100644 --- a/src/cli/init/mod.rs +++ b/src/cli/init/mod.rs @@ -1,16 +1,18 @@ use std::{ - fs::{File, OpenOptions}, - io::Write, + fs::File, + io::{Read, Write}, path::PathBuf, process::{Command, Stdio}, }; +use regex::Regex; +use serde::Deserialize; use structopt::StructOpt; -use crate::error::{Error, Result}; +use crate::{error::Result, Error}; /// Build the Rust WASM app and all of its assets. -#[derive(Clone, Debug, StructOpt)] +#[derive(Clone, Debug, Default, Deserialize, StructOpt)] #[structopt(name = "init")] pub struct Init { /// Init project name @@ -18,69 +20,73 @@ pub struct Init { name: String, /// Template path - #[structopt(default_value = "default", long)] + #[structopt(default_value = "gh:dioxuslabs/dioxus-template", long)] template: String, + + /// Create a `lib` project, include a `hello-world` example. + #[structopt(long)] + #[serde(default)] + pub lib: bool, } impl Init { pub fn init(self) -> Result<()> { - if self.name.contains(".") { + if Self::name_vaild_check(self.name.clone()) { log::error!("❗Unsupported project name."); return Ok(()); } - log::info!("🔧 Start to init a new project '{}'.", self.name); - let project_path = PathBuf::from(&self.name); - if project_path.join("Cargo.toml").is_file() { - log::warn!("Folder '{}' is initialized.", self.name); - return Ok(()); + if project_path.join("Dioxus.toml").is_file() || project_path.join("Cargo.toml").is_file() { + return Err(Error::Other(anyhow::anyhow!( + "🧨 Folder '{}' is initialized.", + &self.name + ))); } + log::info!("🔧 Start to init a new project '{}'.", self.name); + let output = Command::new("cargo") - .arg("init") - .arg(&format!("./{}", self.name)) - .arg("--bin") + .arg("generate") + .arg("--help") .stdout(Stdio::piped()) .stderr(Stdio::piped()) .output()?; if !output.status.success() { - return Err(Error::CargoError("Cargo init failed".into())); + log::warn!("Tool is not installed: cargo-generate, try to install it."); + let install_output = Command::new("cargo") + .arg("install") + .arg("cargo-generate") + .stdout(Stdio::inherit()) + .stderr(Stdio::inherit()) + .output()?; + if !install_output.status.success() { + return Err(Error::Other(anyhow::anyhow!( + "Try to install cargo-generate failed." + ))); + } } - // get the template code - let template_str = match self.template { - _ => include_str!("../../template/default.rs"), - }; + let generate_output = Command::new("cargo") + .arg("generate") + .arg(&self.template) + .arg("--name") + .arg(&self.name) + .stdout(Stdio::piped()) + .stderr(Stdio::inherit()) + .output()?; - let main_rs_file = project_path.join("src").join("main.rs"); - if !main_rs_file.is_file() { - return Err(Error::FailedToWrite); + if !generate_output.status.success() { + return Err(Error::Other(anyhow::anyhow!("Generate project failed."))); } - let mut file = File::create(main_rs_file)?; - file.write_all(&template_str.as_bytes())?; - - let mut file = File::create(project_path.join("Dioxus.toml"))?; - let dioxus_conf = String::from(include_str!("../../template/config.toml")) - .replace("{project-name}", &self.name); - file.write_all(dioxus_conf.as_bytes())?; - - // log::info!("🎯 Project initialization completed."); - - if !Command::new("cargo") - .args(["add", "dioxus", "--features web"]) - .output()? - .status - .success() - { - let mut file = OpenOptions::new() - .append(true) - .open(project_path.join("Cargo.toml"))?; - file.write_all("dioxus = { version = \"0.1.7\", features = [\"web\"] }".as_bytes())?; - } + let mut dioxus_file = File::open(project_path.join("Dioxus.toml"))?; + let mut meta_file = String::new(); + dioxus_file.read_to_string(&mut meta_file)?; + meta_file = meta_file.replace("{{project-name}}", &self.name); + File::create(project_path.join("Dioxus.toml"))?.write_all(meta_file.as_bytes())?; println!(""); log::info!("💡 Project initialized:"); @@ -89,4 +95,9 @@ impl Init { Ok(()) } + + fn name_vaild_check(name: String) -> bool { + let r = Regex::new(r"^[a-zA-Z][a-zA-Z0-9\-_]$").unwrap(); + r.is_match(&name) + } } diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index 19a7f28ff..57716ac7e 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -13,9 +13,14 @@ pub struct Serve { impl Serve { pub async fn serve(self) -> anyhow::Result<()> { let mut crate_config = crate::CrateConfig::new()?; + // change the relase state. crate_config.with_release(self.serve.release); + if self.serve.example.is_some() { + crate_config.as_example(self.serve.example.unwrap()); + } + crate::builder::build(&crate_config).expect("build failed"); // generate dev-index page diff --git a/src/template/config.toml b/src/template/config.toml deleted file mode 100644 index 44f5baabd..000000000 --- a/src/template/config.toml +++ /dev/null @@ -1,42 +0,0 @@ -[application] - -# App (Project) Name -name = "{project-name}" - -# Dioxus App Support Platform -# desktop, web, mobile, ssr -platforms = ["web"] - -[web.app] - -# HTML title tag content -title = "dioxus | ⛺" - -# Web `build` & `serve` dist path -out_dir = "dist" - -# resource (public) file folder -public_dir = "public" - -[web.watcher] - -# when watcher trigger, regenerate the `index.html` -reload_html = true - -# which files or dirs will be watcher monitoring -watch_path = ["src"] - -# include `assets` in web platform -[web.resource] - -# CSS style file -style = [] - -# Javascript code file -script = [] - -[web.resource.dev] - -# Javascript code file -# serve: [dev-server] only -script = [] \ No newline at end of file diff --git a/src/template/default.rs b/src/template/default.rs deleted file mode 100644 index 47b4a2c1d..000000000 --- a/src/template/default.rs +++ /dev/null @@ -1,16 +0,0 @@ -use dioxus::prelude::*; - -fn main() { - dioxus::web::launch(app); -} - -fn app(cx: Scope) -> Element { - cx.render(rsx! ( - div { - style: "text-align: center;", - h1 { "🌗 Dioxus 🚀" } - h3 { "Frontend that scales." } - p { "Dioxus is a portable, performant, and ergonomic framework for building cross-platform user interfaces in Rust." } - } - )) -} From 0ff4881d54f03115812ddeda48fa4687683be8c3 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Mon, 24 Jan 2022 08:55:52 +0800 Subject: [PATCH 029/459] feat: support `desktop` build --- src/cli/build/mod.rs | 63 +++++++++++++++++++++++++++++++++++++++++++- src/cli/cfg.rs | 41 +++------------------------- 2 files changed, 65 insertions(+), 39 deletions(-) diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index cbf82b339..82060b436 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -1,6 +1,7 @@ -use std::{io::Write, path::PathBuf}; +use std::{io::Write, path::PathBuf, process::Command, fs::copy}; use crate::{cfg::ConfigOptsBuild, gen_page}; +use std::fs::remove_dir_all; use structopt::StructOpt; /// Build the Rust WASM app and all of its assets. @@ -22,6 +23,66 @@ impl Build { crate_config.as_example(self.build.example.unwrap()); } + if self.build.platform.is_some() { + if self.build.platform.unwrap().to_uppercase() == "DESKTOP" { + log::info!("🚅 Running build command..."); + + let mut cmd = Command::new("cargo"); + cmd.current_dir(&crate_config.crate_dir) + .arg("build") + .stdout(std::process::Stdio::inherit()) + .stderr(std::process::Stdio::inherit()); + + if self.build.release { + cmd.arg("--release"); + } + + match &crate_config.executable { + crate::ExecutableType::Binary(name) => cmd.arg("--bin").arg(name), + crate::ExecutableType::Lib(name) => cmd.arg("--lib").arg(name), + crate::ExecutableType::Example(name) => cmd.arg("--example").arg(name), + }; + + let output = cmd.output()?; + + if output.status.success() { + if crate_config.out_dir.is_dir() { + + remove_dir_all(&crate_config.out_dir)?; + + let release_type = match crate_config.release { + true => "release", + false => "debug", + }; + + let mut res_path = match &crate_config.executable { + crate::ExecutableType::Binary(name) + | crate::ExecutableType::Lib(name) => crate_config + .target_dir + .join(format!("{}", release_type)) + .join(format!("{}", name)), + + crate::ExecutableType::Example(name) => crate_config + .target_dir + .join(format!("{}/examples", release_type)) + .join(format!("{}", name)), + }; + + let target_file; + if cfg!(windows) { + res_path.set_extension("exe"); + target_file = format!("{}.exe", &crate_config.dioxus_config.application.name); + } else { + target_file = crate_config.dioxus_config.application.name.clone(); + } + copy(res_path, &crate_config.out_dir.join(target_file))?; + } + } + + return Ok(()); + } + } + crate::builder::build(&crate_config)?; let temp = gen_page(&crate_config.dioxus_config, false); diff --git a/src/cli/cfg.rs b/src/cli/cfg.rs index 6a27c4890..7010d62e6 100644 --- a/src/cli/cfg.rs +++ b/src/cli/cfg.rs @@ -20,44 +20,9 @@ pub struct ConfigOptsBuild { #[structopt(long)] pub example: Option, - /// Optional pattern for the app loader script [default: None] - /// - /// Patterns should include the sequences `{base}`, `{wasm}`, and `{js}` in order to - /// properly load the application. Other sequences may be included corresponding - /// to key/value pairs provided in `pattern_params`. - /// - /// These values can only be provided via config file. - #[structopt(skip)] - #[serde(default)] - pub pattern_script: Option, - - /// Optional pattern for the app preload element [default: None] - /// - /// Patterns should include the sequences `{base}`, `{wasm}`, and `{js}` in order to - /// properly preload the application. Other sequences may be included corresponding - /// to key/value pairs provided in `pattern_params`. - /// - /// These values can only be provided via config file. - #[structopt(skip)] - #[serde(default)] - pub pattern_preload: Option, - - #[structopt(skip)] - #[serde(default)] - /// Optional replacement parameters corresponding to the patterns provided in - /// `pattern_script` and `pattern_preload`. - /// - /// When a pattern is being replaced with its corresponding value from this map, if the value is - /// prefixed with the symbol `@`, then the value is expected to be a file path, and the pattern - /// will be replaced with the contents of the target file. This allows insertion of some big JSON - /// state or even HTML files as a part of the `index.html` build. - /// - /// Trunk will automatically insert the `base`, `wasm` and `js` key/values into this map. In order - //// for the app to be loaded properly, the patterns `{base}`, `{wasm}` and `{js}` should be used - /// in `pattern_script` and `pattern_preload`. - /// - /// These values can only be provided via config file. - pub pattern_params: Option>, + /// Build platform: support Web & Desktop [default: "web"] + #[structopt(long)] + pub platform: Option, } #[derive(Clone, Debug, Default, Deserialize, StructOpt)] From bb69a040456db2e2a669ba4e3d80f2d2da44415f Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Mon, 24 Jan 2022 11:29:39 +0800 Subject: [PATCH 030/459] feat: commit code --- Dioxus.toml | 4 +-- src/cli/build/mod.rs | 76 ++++++++++++++++++++++++++++---------------- src/cli/cfg.rs | 1 - src/cli/clean/mod.rs | 3 +- src/cli/serve/mod.rs | 3 +- src/config.rs | 6 ++-- 6 files changed, 55 insertions(+), 38 deletions(-) diff --git a/Dioxus.toml b/Dioxus.toml index b4ba03f9d..86f52c349 100644 --- a/Dioxus.toml +++ b/Dioxus.toml @@ -7,11 +7,11 @@ name = "dioxus-cli" # desktop, web, mobile, ssr platforms = ["web"] -[web.app] - # Web `build` & `serve` dist path out_dir = "dist" +[web.app] + # resource (static) file folder public_dir = "public" diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index 82060b436..c1639e815 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -1,4 +1,9 @@ -use std::{io::Write, path::PathBuf, process::Command, fs::copy}; +use std::{ + fs::{copy, create_dir_all}, + io::Write, + path::PathBuf, + process::Command, +}; use crate::{cfg::ConfigOptsBuild, gen_page}; use std::fs::remove_dir_all; @@ -25,7 +30,7 @@ impl Build { if self.build.platform.is_some() { if self.build.platform.unwrap().to_uppercase() == "DESKTOP" { - log::info!("🚅 Running build command..."); + log::info!("🚅 Running build [Desktop] command..."); let mut cmd = Command::new("cargo"); cmd.current_dir(&crate_config.crate_dir) @@ -47,36 +52,52 @@ impl Build { if output.status.success() { if crate_config.out_dir.is_dir() { - remove_dir_all(&crate_config.out_dir)?; + } - let release_type = match crate_config.release { - true => "release", - false => "debug", - }; - - let mut res_path = match &crate_config.executable { - crate::ExecutableType::Binary(name) - | crate::ExecutableType::Lib(name) => crate_config + let release_type = match crate_config.release { + true => "release", + false => "debug", + }; + + let file_name: String; + let mut res_path = match &crate_config.executable { + crate::ExecutableType::Binary(name) | crate::ExecutableType::Lib(name) => { + file_name = name.clone(); + crate_config .target_dir .join(format!("{}", release_type)) - .join(format!("{}", name)), - - crate::ExecutableType::Example(name) => crate_config - .target_dir - .join(format!("{}/examples", release_type)) - .join(format!("{}", name)), - }; - - let target_file; - if cfg!(windows) { - res_path.set_extension("exe"); - target_file = format!("{}.exe", &crate_config.dioxus_config.application.name); - } else { - target_file = crate_config.dioxus_config.application.name.clone(); + .join(format!("{}", name)) } - copy(res_path, &crate_config.out_dir.join(target_file))?; + crate::ExecutableType::Example(name) => { + file_name = name.clone(); + crate_config + .target_dir + .join(format!("{}", release_type)) + .join("examples") + .join(format!("{}", name)) + } + }; + + let target_file; + if cfg!(windows) { + res_path.set_extension("exe"); + target_file = format!("{}.exe", &file_name); + } else { + target_file = file_name.clone(); } + create_dir_all(&crate_config.out_dir)?; + copy(res_path, &crate_config.out_dir.join(target_file))?; + + log::info!( + "🏛 Build completed: [:{}]", + &crate_config + .dioxus_config + .application + .out_dir + .unwrap_or(PathBuf::from("dist")) + .display() + ); } return Ok(()); @@ -93,8 +114,7 @@ impl Build { .join( crate_config .dioxus_config - .web - .app + .application .out_dir .clone() .unwrap_or(PathBuf::from("dist")), diff --git a/src/cli/cfg.rs b/src/cli/cfg.rs index 7010d62e6..0734f362d 100644 --- a/src/cli/cfg.rs +++ b/src/cli/cfg.rs @@ -2,7 +2,6 @@ use std::path::PathBuf; use structopt::StructOpt; use serde::Deserialize; -use std::collections::HashMap; /// Config options for the build system. #[derive(Clone, Debug, Default, Deserialize, StructOpt)] diff --git a/src/cli/clean/mod.rs b/src/cli/clean/mod.rs index 4ab7653d2..7ba33b530 100644 --- a/src/cli/clean/mod.rs +++ b/src/cli/clean/mod.rs @@ -28,8 +28,7 @@ impl Clean { let out_dir = crate_config .dioxus_config - .web - .app + .application .out_dir .unwrap_or(PathBuf::from("dist")); if crate_config.crate_dir.join(&out_dir).is_dir() { diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index 57716ac7e..8b002e1fb 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -41,8 +41,7 @@ impl Serve { .join( crate_config .dioxus_config - .web - .app + .application .out_dir .clone() .unwrap_or(PathBuf::from("dist")), diff --git a/src/config.rs b/src/config.rs index 403ad0e81..ad1e25ea5 100644 --- a/src/config.rs +++ b/src/config.rs @@ -39,11 +39,11 @@ impl Default for DioxusConfig { application: ApplicationConfig { name: "dioxus".into(), platforms: vec![String::from("web")], + out_dir: Some(PathBuf::from("dist")), }, web: WebConfig { app: WebAppConfing { title: Some("dioxus | ⛺".into()), - out_dir: Some(PathBuf::from("dist")), public_dir: Some(PathBuf::from("public")), }, watcher: WebWatcherConfing { @@ -67,6 +67,7 @@ impl Default for DioxusConfig { pub struct ApplicationConfig { pub name: String, pub platforms: Vec, + pub out_dir: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -79,7 +80,6 @@ pub struct WebConfig { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct WebAppConfing { pub title: Option, - pub out_dir: Option, pub public_dir: Option, } @@ -130,7 +130,7 @@ impl CrateConfig { let workspace_dir = crate::cargo::workspace_root()?; let target_dir = workspace_dir.join("target"); - let out_dir = match dioxus_config.web.app.out_dir { + let out_dir = match dioxus_config.application.out_dir { Some(ref v) => crate_dir.join(v), None => crate_dir.join("dist"), }; From d6957774026620c8649e92202e312432580c771c Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Mon, 24 Jan 2022 11:55:27 +0800 Subject: [PATCH 031/459] feat: support `desktop` --- src/builder.rs | 81 +++++++++++++++++++++++++++++++++++++++++++- src/cli/build/mod.rs | 80 ++----------------------------------------- src/cli/cfg.rs | 4 +++ src/cli/serve/mod.rs | 25 +++++++++++++- 4 files changed, 110 insertions(+), 80 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 0ecde96cd..415e56480 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -3,7 +3,11 @@ use crate::{ error::{Error, Result}, DioxusConfig, }; -use std::process::Command; +use std::{ + fs::{copy, create_dir_all, remove_dir_all}, + path::PathBuf, + process::Command, +}; use wasm_bindgen_cli_support::Bindgen; pub fn build(config: &CrateConfig) -> Result<()> { @@ -116,6 +120,81 @@ pub fn build(config: &CrateConfig) -> Result<()> { Ok(()) } +pub fn build_desktop(config: &CrateConfig) -> Result<()> { + log::info!("🚅 Running build [Desktop] command..."); + + let mut cmd = Command::new("cargo"); + cmd.current_dir(&config.crate_dir) + .arg("build") + .stdout(std::process::Stdio::inherit()) + .stderr(std::process::Stdio::inherit()); + + if config.release { + cmd.arg("--release"); + } + + match &config.executable { + crate::ExecutableType::Binary(name) => cmd.arg("--bin").arg(name), + crate::ExecutableType::Lib(name) => cmd.arg("--lib").arg(name), + crate::ExecutableType::Example(name) => cmd.arg("--example").arg(name), + }; + + let output = cmd.output()?; + + if output.status.success() { + if config.out_dir.is_dir() { + remove_dir_all(&config.out_dir)?; + } + + let release_type = match config.release { + true => "release", + false => "debug", + }; + + let file_name: String; + let mut res_path = match &config.executable { + crate::ExecutableType::Binary(name) | crate::ExecutableType::Lib(name) => { + file_name = name.clone(); + config + .target_dir + .join(format!("{}", release_type)) + .join(format!("{}", name)) + } + crate::ExecutableType::Example(name) => { + file_name = name.clone(); + config + .target_dir + .join(format!("{}", release_type)) + .join("examples") + .join(format!("{}", name)) + } + }; + + let target_file; + if cfg!(windows) { + res_path.set_extension("exe"); + target_file = format!("{}.exe", &file_name); + } else { + target_file = file_name.clone(); + } + create_dir_all(&config.out_dir)?; + copy(res_path, &config.out_dir.join(target_file))?; + + log::info!( + "🚩 Build completed: [./{}]", + config + .dioxus_config + .application + .out_dir + .clone() + .unwrap_or(PathBuf::from("dist")) + .display() + ); + } + + Ok(()) +} + pub fn gen_page(config: &DioxusConfig, serve: bool) -> String { let mut html = String::from(include_str!("./assets/index.html")); diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index c1639e815..f018165ef 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -1,12 +1,6 @@ -use std::{ - fs::{copy, create_dir_all}, - io::Write, - path::PathBuf, - process::Command, -}; +use std::{io::Write, path::PathBuf}; use crate::{cfg::ConfigOptsBuild, gen_page}; -use std::fs::remove_dir_all; use structopt::StructOpt; /// Build the Rust WASM app and all of its assets. @@ -30,77 +24,7 @@ impl Build { if self.build.platform.is_some() { if self.build.platform.unwrap().to_uppercase() == "DESKTOP" { - log::info!("🚅 Running build [Desktop] command..."); - - let mut cmd = Command::new("cargo"); - cmd.current_dir(&crate_config.crate_dir) - .arg("build") - .stdout(std::process::Stdio::inherit()) - .stderr(std::process::Stdio::inherit()); - - if self.build.release { - cmd.arg("--release"); - } - - match &crate_config.executable { - crate::ExecutableType::Binary(name) => cmd.arg("--bin").arg(name), - crate::ExecutableType::Lib(name) => cmd.arg("--lib").arg(name), - crate::ExecutableType::Example(name) => cmd.arg("--example").arg(name), - }; - - let output = cmd.output()?; - - if output.status.success() { - if crate_config.out_dir.is_dir() { - remove_dir_all(&crate_config.out_dir)?; - } - - let release_type = match crate_config.release { - true => "release", - false => "debug", - }; - - let file_name: String; - let mut res_path = match &crate_config.executable { - crate::ExecutableType::Binary(name) | crate::ExecutableType::Lib(name) => { - file_name = name.clone(); - crate_config - .target_dir - .join(format!("{}", release_type)) - .join(format!("{}", name)) - } - crate::ExecutableType::Example(name) => { - file_name = name.clone(); - crate_config - .target_dir - .join(format!("{}", release_type)) - .join("examples") - .join(format!("{}", name)) - } - }; - - let target_file; - if cfg!(windows) { - res_path.set_extension("exe"); - target_file = format!("{}.exe", &file_name); - } else { - target_file = file_name.clone(); - } - create_dir_all(&crate_config.out_dir)?; - copy(res_path, &crate_config.out_dir.join(target_file))?; - - log::info!( - "🏛 Build completed: [:{}]", - &crate_config - .dioxus_config - .application - .out_dir - .unwrap_or(PathBuf::from("dist")) - .display() - ); - } - - return Ok(()); + crate::builder::build_desktop(&crate_config)?; } } diff --git a/src/cli/cfg.rs b/src/cli/cfg.rs index 0734f362d..454da71fe 100644 --- a/src/cli/cfg.rs +++ b/src/cli/cfg.rs @@ -38,6 +38,10 @@ pub struct ConfigOptsServe { #[structopt(long)] #[serde(default)] pub release: bool, + + /// Build platform: support Web & Desktop [default: "web"] + #[structopt(long)] + pub platform: Option, } /// Ensure the given value for `--public-url` is formatted correctly. diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index 8b002e1fb..ef413a63e 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -1,5 +1,5 @@ use crate::{cfg::ConfigOptsServe, gen_page, server, CrateConfig}; -use std::{io::Write, path::PathBuf}; +use std::{io::Write, path::PathBuf, process::Command}; use structopt::StructOpt; /// Run the WASM project on dev-server @@ -21,6 +21,29 @@ impl Serve { crate_config.as_example(self.serve.example.unwrap()); } + if self.serve.platform.is_some() { + if self.serve.platform.unwrap().to_uppercase() == "DESKTOP" { + crate::builder::build_desktop(&crate_config)?; + + match &crate_config.executable { + crate::ExecutableType::Binary(name) + | crate::ExecutableType::Lib(name) + | crate::ExecutableType::Example(name) => { + let mut file = crate_config.out_dir.join(name); + if cfg!(windows) { + file.set_extension("exe"); + } + Command::new(format!( + "{}", + crate_config.out_dir.join(file).to_str().unwrap() + )) + .output()?; + } + } + return Ok(()); + } + } + crate::builder::build(&crate_config).expect("build failed"); // generate dev-index page From 4cc7752adf17e41e153bcfa490ea14964e67b863 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Mon, 24 Jan 2022 12:16:02 +0800 Subject: [PATCH 032/459] fix: change `init` to `create` --- src/cli/{init => create}/mod.rs | 10 +++++----- src/cli/mod.rs | 4 ++-- src/config.rs | 3 +-- src/main.rs | 6 +++--- 4 files changed, 11 insertions(+), 12 deletions(-) rename src/cli/{init => create}/mod.rs (94%) diff --git a/src/cli/init/mod.rs b/src/cli/create/mod.rs similarity index 94% rename from src/cli/init/mod.rs rename to src/cli/create/mod.rs index a19ee68fd..7cb2edbbe 100644 --- a/src/cli/init/mod.rs +++ b/src/cli/create/mod.rs @@ -13,8 +13,8 @@ use crate::{error::Result, Error}; /// Build the Rust WASM app and all of its assets. #[derive(Clone, Debug, Default, Deserialize, StructOpt)] -#[structopt(name = "init")] -pub struct Init { +#[structopt(name = "create")] +pub struct Create { /// Init project name #[structopt(default_value = ".")] name: String, @@ -29,8 +29,8 @@ pub struct Init { pub lib: bool, } -impl Init { - pub fn init(self) -> Result<()> { +impl Create { + pub fn create(self) -> Result<()> { if Self::name_vaild_check(self.name.clone()) { log::error!("❗Unsupported project name."); return Ok(()); @@ -45,7 +45,7 @@ impl Init { ))); } - log::info!("🔧 Start to init a new project '{}'.", self.name); + log::info!("🔧 Start to create a new project '{}'.", self.name); let output = Command::new("cargo") .arg("generate") diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 6224cea32..91d561463 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -3,7 +3,7 @@ use structopt::StructOpt; pub mod build; pub mod cfg; pub mod clean; -pub mod init; +pub mod create; pub mod serve; pub mod translate; @@ -35,7 +35,7 @@ pub enum Commands { /// Build, watch & serve the Rust WASM app and all of its assets. Serve(serve::Serve), /// Init a new project for Dioxus. - Init(init::Init), + Create(create::Create), // /// Clean output artifacts. Clean(clean::Clean), // /// Trunk config controls. diff --git a/src/config.rs b/src/config.rs index ad1e25ea5..fa52ddcbc 100644 --- a/src/config.rs +++ b/src/config.rs @@ -13,8 +13,7 @@ impl DioxusConfig { let crate_dir = crate::cargo::crate_root()?; if !crate_dir.join("Dioxus.toml").is_file() { - log::warn!("Config file: `Dioxus.toml` not found."); - return Ok(Self::default()); + return Err(crate::error::Error::Unique("Config file: `Dioxus.toml` not found.".into())); } let mut dioxus_conf_file = File::open(crate_dir.join("Dioxus.toml"))?; diff --git a/src/main.rs b/src/main.rs index 70f92cf95..20536048b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -34,9 +34,9 @@ async fn main() -> Result<()> { } } - Commands::Init(opts) => { - if let Err(e) = opts.init() { - log::error!("init error: {}", e); + Commands::Create(opts) => { + if let Err(e) = opts.create() { + log::error!("create error: {}", e); } } } From 66b832045ad436c4577990ef138407331d38d056 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Mon, 24 Jan 2022 16:18:16 +0800 Subject: [PATCH 033/459] feat: add `config` command --- Dioxus.toml => src/assets/dioxus.toml | 18 +++++------ src/cli/config/mod.rs | 43 +++++++++++++++++++++++++++ src/cli/create/mod.rs | 5 ---- src/cli/mod.rs | 7 +++-- src/config.rs | 4 ++- src/main.rs | 6 ++++ 6 files changed, 63 insertions(+), 20 deletions(-) rename Dioxus.toml => src/assets/dioxus.toml (79%) create mode 100644 src/cli/config/mod.rs diff --git a/Dioxus.toml b/src/assets/dioxus.toml similarity index 79% rename from Dioxus.toml rename to src/assets/dioxus.toml index 86f52c349..717b070e2 100644 --- a/Dioxus.toml +++ b/src/assets/dioxus.toml @@ -1,7 +1,7 @@ [application] # App (Project) Name -name = "dioxus-cli" +name = "{{project-name}}" # Dioxus App Support Platform # desktop, web, mobile, ssr @@ -12,31 +12,27 @@ out_dir = "dist" [web.app] +# HTML title tag content +title = "dioxus | ⛺" + # resource (static) file folder public_dir = "public" [web.watcher] - watch_path = ["src"] # include `assets` in web platform [web.resource] # CSS style file -style = [ - "./my-style.css" -] +style = [] # Javascript code file -script = [ - "./app.js" -] +script = [] [web.resource.dev] # Javascript code file # serve: [dev-server] only -script = [ - "./debug.js" -] \ No newline at end of file +script = [] \ No newline at end of file diff --git a/src/cli/config/mod.rs b/src/cli/config/mod.rs new file mode 100644 index 000000000..5e903dc3a --- /dev/null +++ b/src/cli/config/mod.rs @@ -0,0 +1,43 @@ +use std::{fs::File, io::Write}; + +use serde::Deserialize; +use structopt::StructOpt; + +/// Build the Rust WASM app and all of its assets. +#[derive(Clone, Debug, Deserialize, StructOpt)] +#[structopt(name = "config")] +pub enum Config { + /// Init `Dioxus.toml` for project/folder. + Init { + /// Init project name + name: String, + + /// Cover old config + #[structopt(long)] + #[serde(default)] + force: bool, + }, +} + +impl Config { + pub fn config(self) -> anyhow::Result<()> { + let crate_root = crate::cargo::crate_root()?; + match self { + Config::Init { name, force } => { + let conf_path = crate_root.join("Dioxus.toml"); + if conf_path.is_file() && force == false { + log::warn!( + "config file `Dioxus.toml` already exist, use `--force` to overwrite it." + ); + return Ok(()); + } + let mut file = File::create(conf_path)?; + let content = String::from(include_str!("../../assets/dioxus.toml")) + .replace("{{project-name}}", &name); + file.write_all(content.as_bytes())?; + log::info!("🚩 Init config file completed."); + } + } + Ok(()) + } +} diff --git a/src/cli/create/mod.rs b/src/cli/create/mod.rs index 7cb2edbbe..42364ddab 100644 --- a/src/cli/create/mod.rs +++ b/src/cli/create/mod.rs @@ -22,11 +22,6 @@ pub struct Create { /// Template path #[structopt(default_value = "gh:dioxuslabs/dioxus-template", long)] template: String, - - /// Create a `lib` project, include a `hello-world` example. - #[structopt(long)] - #[serde(default)] - pub lib: bool, } impl Create { diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 91d561463..4a72e00ac 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -3,6 +3,7 @@ use structopt::StructOpt; pub mod build; pub mod cfg; pub mod clean; +pub mod config; pub mod create; pub mod serve; pub mod translate; @@ -36,8 +37,8 @@ pub enum Commands { Serve(serve::Serve), /// Init a new project for Dioxus. Create(create::Create), - // /// Clean output artifacts. + /// Clean output artifacts. Clean(clean::Clean), - // /// Trunk config controls. - // Config(config::Config), + /// Dioxus config file controls. + Config(config::Config), } diff --git a/src/config.rs b/src/config.rs index fa52ddcbc..fb26b50bf 100644 --- a/src/config.rs +++ b/src/config.rs @@ -13,7 +13,9 @@ impl DioxusConfig { let crate_dir = crate::cargo::crate_root()?; if !crate_dir.join("Dioxus.toml").is_file() { - return Err(crate::error::Error::Unique("Config file: `Dioxus.toml` not found.".into())); + return Err(crate::error::Error::Unique( + "Config file: `Dioxus.toml` not found.".into(), + )); } let mut dioxus_conf_file = File::open(crate_dir.join("Dioxus.toml"))?; diff --git a/src/main.rs b/src/main.rs index 20536048b..1ef3a08f1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -39,6 +39,12 @@ async fn main() -> Result<()> { log::error!("create error: {}", e); } } + + Commands::Config(opts) => { + if let Err(e) = opts.config() { + log::error!("config error: {}", e); + } + } } Ok(()) From 84d1867654482640fa2cf31dd3eae10bf1bfa52d Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Tue, 25 Jan 2022 12:42:27 +0800 Subject: [PATCH 034/459] fix: use clippy fix --- src/builder.rs | 18 +++++++++--------- src/cli/build/mod.rs | 6 ++---- src/cli/config/mod.rs | 2 +- src/cli/create/mod.rs | 2 +- src/cli/serve/mod.rs | 29 ++++++++++++----------------- src/cli/translate/mod.rs | 4 ++-- src/cli/translate/to_component.rs | 2 +- src/config.rs | 15 +++++++-------- src/logging.rs | 2 +- 9 files changed, 36 insertions(+), 44 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 415e56480..c281f2b80 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -157,16 +157,16 @@ pub fn build_desktop(config: &CrateConfig) -> Result<()> { file_name = name.clone(); config .target_dir - .join(format!("{}", release_type)) - .join(format!("{}", name)) + .join(release_type.to_string()) + .join(name.to_string()) } crate::ExecutableType::Example(name) => { file_name = name.clone(); config .target_dir - .join(format!("{}", release_type)) + .join(release_type.to_string()) .join("examples") - .join(format!("{}", name)) + .join(name.to_string()) } }; @@ -175,7 +175,7 @@ pub fn build_desktop(config: &CrateConfig) -> Result<()> { res_path.set_extension("exe"); target_file = format!("{}.exe", &file_name); } else { - target_file = file_name.clone(); + target_file = file_name; } create_dir_all(&config.out_dir)?; copy(res_path, &config.out_dir.join(target_file))?; @@ -200,12 +200,12 @@ pub fn gen_page(config: &DioxusConfig, serve: bool) -> String { let resouces = config.web.resource.clone(); - let mut style_list = resouces.style.unwrap_or(vec![]); - let mut script_list = resouces.script.unwrap_or(vec![]); + let mut style_list = resouces.style.unwrap_or_default(); + let mut script_list = resouces.script.unwrap_or_default(); if serve { - let mut dev_style = resouces.dev.style.clone().unwrap_or(vec![]); - let mut dev_script = resouces.dev.script.clone().unwrap_or(vec![]); + let mut dev_style = resouces.dev.style.clone().unwrap_or_default(); + let mut dev_script = resouces.dev.script.unwrap_or_default(); style_list.append(&mut dev_style); script_list.append(&mut dev_script); } diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index f018165ef..318f6b7f5 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -22,10 +22,8 @@ impl Build { crate_config.as_example(self.build.example.unwrap()); } - if self.build.platform.is_some() { - if self.build.platform.unwrap().to_uppercase() == "DESKTOP" { - crate::builder::build_desktop(&crate_config)?; - } + if self.build.platform.is_some() && self.build.platform.unwrap().to_uppercase() == "DESKTOP" { + crate::builder::build_desktop(&crate_config)?; } crate::builder::build(&crate_config)?; diff --git a/src/cli/config/mod.rs b/src/cli/config/mod.rs index 5e903dc3a..d5291a7d6 100644 --- a/src/cli/config/mod.rs +++ b/src/cli/config/mod.rs @@ -25,7 +25,7 @@ impl Config { match self { Config::Init { name, force } => { let conf_path = crate_root.join("Dioxus.toml"); - if conf_path.is_file() && force == false { + if conf_path.is_file() && !force { log::warn!( "config file `Dioxus.toml` already exist, use `--force` to overwrite it." ); diff --git a/src/cli/create/mod.rs b/src/cli/create/mod.rs index 42364ddab..fa553c55a 100644 --- a/src/cli/create/mod.rs +++ b/src/cli/create/mod.rs @@ -83,7 +83,7 @@ impl Create { meta_file = meta_file.replace("{{project-name}}", &self.name); File::create(project_path.join("Dioxus.toml"))?.write_all(meta_file.as_bytes())?; - println!(""); + println!(); log::info!("💡 Project initialized:"); log::info!("🎯> cd ./{}", self.name); log::info!("🎯> dioxus serve"); diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index ef413a63e..04795ab13 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -21,27 +21,22 @@ impl Serve { crate_config.as_example(self.serve.example.unwrap()); } - if self.serve.platform.is_some() { - if self.serve.platform.unwrap().to_uppercase() == "DESKTOP" { - crate::builder::build_desktop(&crate_config)?; + if self.serve.platform.is_some() && self.serve.platform.unwrap().to_uppercase() == "DESKTOP" { + crate::builder::build_desktop(&crate_config)?; - match &crate_config.executable { - crate::ExecutableType::Binary(name) - | crate::ExecutableType::Lib(name) - | crate::ExecutableType::Example(name) => { - let mut file = crate_config.out_dir.join(name); - if cfg!(windows) { - file.set_extension("exe"); - } - Command::new(format!( - "{}", - crate_config.out_dir.join(file).to_str().unwrap() - )) - .output()?; + match &crate_config.executable { + crate::ExecutableType::Binary(name) + | crate::ExecutableType::Lib(name) + | crate::ExecutableType::Example(name) => { + let mut file = crate_config.out_dir.join(name); + if cfg!(windows) { + file.set_extension("exe"); } + Command::new(crate_config.out_dir.join(file).to_str().unwrap().to_string()) + .output()?; } - return Ok(()); } + return Ok(()); } crate::builder::build(&crate_config).expect("build failed"); diff --git a/src/cli/translate/mod.rs b/src/cli/translate/mod.rs index 5799cad02..a62a1b4b3 100644 --- a/src/cli/translate/mod.rs +++ b/src/cli/translate/mod.rs @@ -48,7 +48,7 @@ impl Translate { exit(0); }) }); - if let None = temp { + if temp.is_none() { if let Some(s) = source { contents = s; } else { @@ -112,7 +112,7 @@ fn render_child(f: &mut impl Write, child: &Node, il: u32) -> std::fmt::Result { } write!(f, "\",")?; } - write!(f, "\n")?; + writeln!(f)?; // write the attributes if let Some(id) = &el.id { diff --git a/src/cli/translate/to_component.rs b/src/cli/translate/to_component.rs index 972da7a25..c83777ccb 100644 --- a/src/cli/translate/to_component.rs +++ b/src/cli/translate/to_component.rs @@ -120,7 +120,7 @@ fn render_element<'a>( } write!(f, "\",")?; } - write!(f, "\n")?; + writeln!(f)?; // write the attributes if let Some(id) = &el.id { diff --git a/src/config.rs b/src/config.rs index fb26b50bf..fa7e1bd1c 100644 --- a/src/config.rs +++ b/src/config.rs @@ -23,12 +23,12 @@ impl DioxusConfig { dioxus_conf_file.read_to_string(&mut meta_str)?; match toml::from_str::(&meta_str) { - Ok(v) => return Ok(v), + Ok(v) => Ok(v), Err(e) => { log::error!("{}", e); - return Err(crate::error::Error::Unique( + Err(crate::error::Error::Unique( "Dioxus.toml parse failed".into(), - )); + )) } } } @@ -147,16 +147,15 @@ impl CrateConfig { // We just assume they're using a 'main.rs' // Anyway, we've already parsed the manifest, so it should be easy to change the type - let output_filename = (&manifest) + let output_filename = manifest .lib .as_ref() .and_then(|lib| lib.name.clone()) .or_else(|| { - (&manifest) + manifest .package - .as_ref() - .and_then(|pkg| Some(pkg.name.clone())) - .clone() + .as_ref().map(|pkg| pkg.name.clone()) + }) .expect("No lib found from cargo metadata"); let executable = ExecutableType::Binary(output_filename); diff --git a/src/logging.rs b/src/logging.rs index d30eeee47..48c2a2788 100644 --- a/src/logging.rs +++ b/src/logging.rs @@ -14,7 +14,7 @@ pub fn set_up_logging() { // configure colors for the name of the level. // since almost all of them are the same as the color for the whole line, we // just clone `colors_line` and overwrite our changes - let colors_level = colors_line.clone().info(Color::Green); + let colors_level = colors_line.info(Color::Green); // here we set up our fern Dispatch fern::Dispatch::new() .format(move |out, message, record| { From 1c2cf3330ee164a9492342ab1132f8d17b15931b Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Tue, 25 Jan 2022 13:52:33 +0800 Subject: [PATCH 035/459] fix: use clippy fix --- src/builder.rs | 4 ++-- src/cargo.rs | 6 +++--- src/cli/build/mod.rs | 2 +- src/cli/clean/mod.rs | 2 +- src/cli/serve/mod.rs | 2 +- src/cli/translate/mod.rs | 2 +- src/server/mod.rs | 28 +++++++++++++--------------- 7 files changed, 22 insertions(+), 24 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index c281f2b80..7d76f75cc 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -187,7 +187,7 @@ pub fn build_desktop(config: &CrateConfig) -> Result<()> { .application .out_dir .clone() - .unwrap_or(PathBuf::from("dist")) + .unwrap_or_else(|| PathBuf::from("dist")) .display() ); } @@ -238,7 +238,7 @@ pub fn gen_page(config: &DioxusConfig, serve: bool) -> String { html = html.replace("{app_name}", &config.application.name); - let title = config.web.app.title.clone().unwrap_or("dioxus | ⛺".into()); + let title = config.web.app.title.clone().unwrap_or_else(|| "dioxus | ⛺".into()); html.replace("{app_title}", &title) } diff --git a/src/cargo.rs b/src/cargo.rs index 3a911a81e..c268c5a3a 100644 --- a/src/cargo.rs +++ b/src/cargo.rs @@ -1,6 +1,6 @@ //! Utilities for working with cargo and rust files use crate::error::{Error, Result}; -use std::{env, fs, path::PathBuf, process::Command, str}; +use std::{env, fs, path::{PathBuf, Path}, process::Command, str}; /// How many parent folders are searched for a `Cargo.toml` const MAX_ANCESTORS: u32 = 10; @@ -44,7 +44,7 @@ pub fn workspace_root() -> Result { } let stdout = str::from_utf8(&output.stdout).unwrap(); - for line in stdout.lines() { + if let Some(line) = stdout.lines().next() { let meta: serde_json::Value = serde_json::from_str(line) .map_err(|_| Error::CargoError("InvalidOutput".to_string()))?; @@ -58,7 +58,7 @@ pub fn workspace_root() -> Result { } /// Checks if the directory contains `Cargo.toml` -fn contains_manifest(path: &PathBuf) -> bool { +fn contains_manifest(path: &Path) -> bool { fs::read_dir(path) .map(|entries| { entries diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index 318f6b7f5..27015420b 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -39,7 +39,7 @@ impl Build { .application .out_dir .clone() - .unwrap_or(PathBuf::from("dist")), + .unwrap_or_else(|| PathBuf::from("dist")), ) .join("index.html"), )?; diff --git a/src/cli/clean/mod.rs b/src/cli/clean/mod.rs index 7ba33b530..62593b1ee 100644 --- a/src/cli/clean/mod.rs +++ b/src/cli/clean/mod.rs @@ -30,7 +30,7 @@ impl Clean { .dioxus_config .application .out_dir - .unwrap_or(PathBuf::from("dist")); + .unwrap_or_else(|| PathBuf::from("dist")); if crate_config.crate_dir.join(&out_dir).is_dir() { remove_dir_all(crate_config.crate_dir.join(&out_dir))?; } diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index 04795ab13..a84d8136d 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -62,7 +62,7 @@ impl Serve { .application .out_dir .clone() - .unwrap_or(PathBuf::from("dist")), + .unwrap_or_else(|| PathBuf::from("dist")), ) .join("index.html"), )?; diff --git a/src/cli/translate/mod.rs b/src/cli/translate/mod.rs index a62a1b4b3..81b5092ed 100644 --- a/src/cli/translate/mod.rs +++ b/src/cli/translate/mod.rs @@ -48,7 +48,7 @@ impl Translate { exit(0); }) }); - if temp.is_none() { + if let Some(..) = temp { if let Some(s) = source { contents = s; } else { diff --git a/src/server/mod.rs b/src/server/mod.rs index 3151975d5..3092a01ec 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -49,7 +49,7 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { .watcher .watch_path .clone() - .unwrap_or(vec![PathBuf::from("src")]); + .unwrap_or_else(|| vec![PathBuf::from("src")]); let crate_dir = watcher_conf.crate_dir.clone(); loop { if let Ok(v) = rx.recv() { @@ -67,21 +67,19 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { } } - if reload { - if let Ok(_) = builder::build(&watcher_conf) { - // change the websocket reload state to true; - // the page will auto-reload. - if watcher_conf - .dioxus_config - .web - .watcher - .reload_html - .unwrap_or(false) - { - let _ = Serve::regen_dev_page(&watcher_conf); - } - watcher_ws_state.lock().unwrap().change(); + if reload && builder::build(&watcher_conf).is_ok() { + // change the websocket reload state to true; + // the page will auto-reload. + if watcher_conf + .dioxus_config + .web + .watcher + .reload_html + .unwrap_or(false) + { + let _ = Serve::regen_dev_page(&watcher_conf); } + watcher_ws_state.lock().unwrap().change(); } } _ => {} From 25e3ee848cadcd14ff291b39436266857037a11a Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Tue, 25 Jan 2022 17:09:06 +0800 Subject: [PATCH 036/459] fix: high CPU usage --- src/server/mod.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/mod.rs b/src/server/mod.rs index 3092a01ec..364b7c572 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -118,6 +118,7 @@ async fn ws_handler( ) -> impl IntoResponse { ws.on_upgrade(|mut socket| async move { loop { + tokio::time::sleep(tokio::time::Duration::from_millis(1200)).await; if state.lock().unwrap().update { socket .send(Message::Text(String::from("reload"))) From b01b3f519f5a2a279cb60c479e7000d9819fed33 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Tue, 25 Jan 2022 17:51:36 +0800 Subject: [PATCH 037/459] fix: commit code --- src/builder.rs | 17 ++++++++++------ src/cargo.rs | 7 ++++++- src/cli/build/mod.rs | 14 +++++++++---- src/cli/cfg.rs | 8 ++++---- src/cli/serve/mod.rs | 47 ++++++++++++++++++++++++++++---------------- src/config.rs | 12 +++-------- src/main.rs | 3 --- src/server/mod.rs | 6 +++--- 8 files changed, 67 insertions(+), 47 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 7d76f75cc..583c9bc8f 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -170,13 +170,13 @@ pub fn build_desktop(config: &CrateConfig) -> Result<()> { } }; - let target_file; - if cfg!(windows) { + let target_file = if cfg!(windows) { res_path.set_extension("exe"); - target_file = format!("{}.exe", &file_name); + format!("{}.exe", &file_name) } else { - target_file = file_name; - } + file_name + }; + create_dir_all(&config.out_dir)?; copy(res_path, &config.out_dir.join(target_file))?; @@ -238,7 +238,12 @@ pub fn gen_page(config: &DioxusConfig, serve: bool) -> String { html = html.replace("{app_name}", &config.application.name); - let title = config.web.app.title.clone().unwrap_or_else(|| "dioxus | ⛺".into()); + let title = config + .web + .app + .title + .clone() + .unwrap_or_else(|| "dioxus | ⛺".into()); html.replace("{app_title}", &title) } diff --git a/src/cargo.rs b/src/cargo.rs index c268c5a3a..67a3e48f1 100644 --- a/src/cargo.rs +++ b/src/cargo.rs @@ -1,6 +1,11 @@ //! Utilities for working with cargo and rust files use crate::error::{Error, Result}; -use std::{env, fs, path::{PathBuf, Path}, process::Command, str}; +use std::{ + env, fs, + path::{Path, PathBuf}, + process::Command, + str, +}; /// How many parent folders are searched for a `Cargo.toml` const MAX_ANCESTORS: u32 = 10; diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index 27015420b..684cec58c 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -22,12 +22,18 @@ impl Build { crate_config.as_example(self.build.example.unwrap()); } - if self.build.platform.is_some() && self.build.platform.unwrap().to_uppercase() == "DESKTOP" { - crate::builder::build_desktop(&crate_config)?; + match self.build.platform.as_str() { + "web" => { + crate::builder::build(&crate_config)?; + } + "desktop" => { + crate::builder::build_desktop(&crate_config)?; + } + _ => { + return Err(anyhow::anyhow!("Unsoppurt platform target.")); + } } - crate::builder::build(&crate_config)?; - let temp = gen_page(&crate_config.dioxus_config, false); let mut file = std::fs::File::create( diff --git a/src/cli/cfg.rs b/src/cli/cfg.rs index 454da71fe..ece00e07e 100644 --- a/src/cli/cfg.rs +++ b/src/cli/cfg.rs @@ -20,8 +20,8 @@ pub struct ConfigOptsBuild { pub example: Option, /// Build platform: support Web & Desktop [default: "web"] - #[structopt(long)] - pub platform: Option, + #[structopt(long, default_value = "web")] + pub platform: String, } #[derive(Clone, Debug, Default, Deserialize, StructOpt)] @@ -40,8 +40,8 @@ pub struct ConfigOptsServe { pub release: bool, /// Build platform: support Web & Desktop [default: "web"] - #[structopt(long)] - pub platform: Option, + #[structopt(long, default_value = "web")] + pub platform: String, } /// Ensure the given value for `--public-url` is formatted correctly. diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index a84d8136d..fd8f3c4f5 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -21,25 +21,38 @@ impl Serve { crate_config.as_example(self.serve.example.unwrap()); } - if self.serve.platform.is_some() && self.serve.platform.unwrap().to_uppercase() == "DESKTOP" { - crate::builder::build_desktop(&crate_config)?; - - match &crate_config.executable { - crate::ExecutableType::Binary(name) - | crate::ExecutableType::Lib(name) - | crate::ExecutableType::Example(name) => { - let mut file = crate_config.out_dir.join(name); - if cfg!(windows) { - file.set_extension("exe"); - } - Command::new(crate_config.out_dir.join(file).to_str().unwrap().to_string()) - .output()?; - } + match self.serve.platform.as_str() { + "web" => { + crate::builder::build(&crate_config)?; } - return Ok(()); - } + "desktop" => { + crate::builder::build_desktop(&crate_config)?; - crate::builder::build(&crate_config).expect("build failed"); + match &crate_config.executable { + crate::ExecutableType::Binary(name) + | crate::ExecutableType::Lib(name) + | crate::ExecutableType::Example(name) => { + let mut file = crate_config.out_dir.join(name); + if cfg!(windows) { + file.set_extension("exe"); + } + Command::new( + crate_config + .out_dir + .join(file) + .to_str() + .unwrap() + .to_string(), + ) + .output()?; + } + } + return Ok(()); + } + _ => { + return Err(anyhow::anyhow!("Unsoppurt platform target.")); + } + } // generate dev-index page Serve::regen_dev_page(&crate_config)?; diff --git a/src/config.rs b/src/config.rs index fa7e1bd1c..088955910 100644 --- a/src/config.rs +++ b/src/config.rs @@ -13,9 +13,8 @@ impl DioxusConfig { let crate_dir = crate::cargo::crate_root()?; if !crate_dir.join("Dioxus.toml").is_file() { - return Err(crate::error::Error::Unique( - "Config file: `Dioxus.toml` not found.".into(), - )); + log::warn!("Config file: `Dioxus.toml` not found; using default config."); + return Ok(DioxusConfig::default()); } let mut dioxus_conf_file = File::open(crate_dir.join("Dioxus.toml"))?; @@ -151,12 +150,7 @@ impl CrateConfig { .lib .as_ref() .and_then(|lib| lib.name.clone()) - .or_else(|| { - manifest - .package - .as_ref().map(|pkg| pkg.name.clone()) - - }) + .or_else(|| manifest.package.as_ref().map(|pkg| pkg.name.clone())) .expect("No lib found from cargo metadata"); let executable = ExecutableType::Binary(output_filename); diff --git a/src/main.rs b/src/main.rs index 1ef3a08f1..6b8c177db 100644 --- a/src/main.rs +++ b/src/main.rs @@ -25,9 +25,6 @@ async fn main() -> Result<()> { } } - // Commands::Config(_) => { - // // - // } Commands::Serve(opts) => { if let Err(e) = opts.serve().await { log::error!("serve error: {}", e); diff --git a/src/server/mod.rs b/src/server/mod.rs index 364b7c572..c7c9074ed 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -58,16 +58,16 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { | DebouncedEvent::Write(e) | DebouncedEvent::Remove(e) | DebouncedEvent::Rename(e, _) => { - let mut reload = false; + let mut should_reload = false; for path in &allow_watch_path { let temp = crate_dir.clone().join(path); if e.starts_with(temp) { - reload = true; + should_reload = true; break; } } - if reload && builder::build(&watcher_conf).is_ok() { + if should_reload && builder::build(&watcher_conf).is_ok() { // change the websocket reload state to true; // the page will auto-reload. if watcher_conf From 2c0b0460c9da1f8b30e3c91cce070e669b23d908 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Tue, 25 Jan 2022 18:01:33 +0800 Subject: [PATCH 038/459] fix: error wrap --- src/config.rs | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/config.rs b/src/config.rs index 088955910..1151445ef 100644 --- a/src/config.rs +++ b/src/config.rs @@ -21,15 +21,8 @@ impl DioxusConfig { let mut meta_str = String::new(); dioxus_conf_file.read_to_string(&mut meta_str)?; - match toml::from_str::(&meta_str) { - Ok(v) => Ok(v), - Err(e) => { - log::error!("{}", e); - Err(crate::error::Error::Unique( - "Dioxus.toml parse failed".into(), - )) - } - } + toml::from_str::(&meta_str) + .map_err(|_| crate::Error::Unique("Dioxus.toml parse failed".into())) } } From 20977a49f0e0329dcdc77ccd01f4d5bb83fcf989 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Wed, 26 Jan 2022 00:21:40 +0800 Subject: [PATCH 039/459] fix: high CPU usage --- src/assets/autoreload.js | 17 ++++------- src/server/mod.rs | 63 ++++++++++++++++++++-------------------- 2 files changed, 37 insertions(+), 43 deletions(-) diff --git a/src/assets/autoreload.js b/src/assets/autoreload.js index ff4444085..b2baa1907 100644 --- a/src/assets/autoreload.js +++ b/src/assets/autoreload.js @@ -5,21 +5,16 @@ var poll_interval = 2000; - var reload_upon_connect = () => { - window.setTimeout(() => { - var ws = new WebSocket(url); - ws.onopen = () => window.location.reload(); - ws.onclose = reload_upon_connect; - }, poll_interval); - }; - var ws = new WebSocket(url); - ws.onmessage = (ev) => { + ws.addEventListener("message", (ev) => { if (ev.data == "reload") { window.location.reload(); } - }; + }); + + ws.addEventListener("open", () => { + ws.send("init"); + }); - ws.onclose = reload_upon_connect; })(); \ No newline at end of file diff --git a/src/server/mod.rs b/src/server/mod.rs index c7c9074ed..24504498a 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -20,8 +20,8 @@ struct WsRelodState { } impl WsRelodState { - fn change(&mut self) { - self.update = !self.update; + fn change(&mut self, state: bool) { + self.update = state; } } @@ -34,40 +34,35 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { // file watcher: check file change let mut watcher = watcher(tx, Duration::from_secs(1)).unwrap(); - watcher - .watch(config.crate_dir.clone(), notify::RecursiveMode::Recursive) - .unwrap(); + let allow_watch_path = config + .dioxus_config + .web + .watcher + .watch_path + .clone() + .unwrap_or_else(|| vec![PathBuf::from("src")]); + for sub_path in allow_watch_path { + watcher + .watch( + config.crate_dir.join(sub_path), + notify::RecursiveMode::Recursive, + ) + .unwrap(); + } let ws_reload_state = Arc::new(Mutex::new(WsRelodState { update: false })); let watcher_conf = config.clone(); let watcher_ws_state = ws_reload_state.clone(); tokio::spawn(async move { - let allow_watch_path = watcher_conf - .dioxus_config - .web - .watcher - .watch_path - .clone() - .unwrap_or_else(|| vec![PathBuf::from("src")]); - let crate_dir = watcher_conf.crate_dir.clone(); loop { if let Ok(v) = rx.recv() { match v { - DebouncedEvent::Create(e) - | DebouncedEvent::Write(e) - | DebouncedEvent::Remove(e) - | DebouncedEvent::Rename(e, _) => { - let mut should_reload = false; - for path in &allow_watch_path { - let temp = crate_dir.clone().join(path); - if e.starts_with(temp) { - should_reload = true; - break; - } - } - - if should_reload && builder::build(&watcher_conf).is_ok() { + DebouncedEvent::Create(_) + | DebouncedEvent::Write(_) + | DebouncedEvent::Remove(_) + | DebouncedEvent::Rename(_, _) => { + if builder::build(&watcher_conf).is_ok() { // change the websocket reload state to true; // the page will auto-reload. if watcher_conf @@ -79,7 +74,7 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { { let _ = Serve::regen_dev_page(&watcher_conf); } - watcher_ws_state.lock().unwrap().change(); + watcher_ws_state.lock().unwrap().change(true); } } _ => {} @@ -118,13 +113,17 @@ async fn ws_handler( ) -> impl IntoResponse { ws.on_upgrade(|mut socket| async move { loop { - tokio::time::sleep(tokio::time::Duration::from_millis(1200)).await; + tokio::time::sleep(tokio::time::Duration::from_millis(1000)).await; if state.lock().unwrap().update { - socket + // ignore the error + if socket .send(Message::Text(String::from("reload"))) .await - .unwrap(); - state.lock().unwrap().change(); + .is_err() + { + return; + } + state.lock().unwrap().change(false); } } }) From 78980b2dbf62278bf939ece72c67f9ab35a39807 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Wed, 26 Jan 2022 10:18:31 +0800 Subject: [PATCH 040/459] fix: use channel --- src/assets/autoreload.js | 4 ++++ src/server/mod.rs | 52 +++++++++++++++++++++------------------- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/assets/autoreload.js b/src/assets/autoreload.js index b2baa1907..89054664e 100644 --- a/src/assets/autoreload.js +++ b/src/assets/autoreload.js @@ -17,4 +17,8 @@ ws.send("init"); }); + ws.addEventListener("close", () => { + alert("Dev-Server Socket Closed."); + }); + })(); \ No newline at end of file diff --git a/src/server/mod.rs b/src/server/mod.rs index 24504498a..366ea41ab 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -9,31 +9,26 @@ use notify::{watcher, DebouncedEvent, Watcher}; use std::time::Duration; use std::{ path::PathBuf, - sync::{mpsc::channel, Arc, Mutex}, + sync::{mpsc::channel, Arc}, }; use tower_http::services::ServeDir; use crate::{builder, serve::Serve, CrateConfig}; +use tokio::sync::broadcast; struct WsRelodState { - update: bool, -} - -impl WsRelodState { - fn change(&mut self, state: bool) { - self.update = state; - } + update: broadcast::Sender, } pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { log::info!("🚀 Starting development server..."); - let (tx, rx) = channel(); + let (watcher_tx, watcher_rx) = channel(); let dist_path = config.out_dir.clone(); // file watcher: check file change - let mut watcher = watcher(tx, Duration::from_secs(1)).unwrap(); + let mut watcher = watcher(watcher_tx, Duration::from_secs(1)).unwrap(); let allow_watch_path = config .dioxus_config .web @@ -50,13 +45,14 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { .unwrap(); } - let ws_reload_state = Arc::new(Mutex::new(WsRelodState { update: false })); + let (reload_tx, _) = broadcast::channel(100); + let ws_reload_state = Arc::new(WsRelodState { update: reload_tx }); let watcher_conf = config.clone(); - let watcher_ws_state = ws_reload_state.clone(); + let watcher_ws_state = ws_reload_state.update.clone(); tokio::spawn(async move { loop { - if let Ok(v) = rx.recv() { + if let Ok(v) = watcher_rx.recv() { match v { DebouncedEvent::Create(_) | DebouncedEvent::Write(_) @@ -74,7 +70,8 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { { let _ = Serve::regen_dev_page(&watcher_conf); } - watcher_ws_state.lock().unwrap().change(true); + println!("send reload!"); + watcher_ws_state.send("reload".into()).unwrap(); } } _ => {} @@ -109,21 +106,26 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { async fn ws_handler( ws: WebSocketUpgrade, _: Option>, - Extension(state): Extension>>, + Extension(state): Extension>, ) -> impl IntoResponse { ws.on_upgrade(|mut socket| async move { + let mut rx = state.update.subscribe(); loop { - tokio::time::sleep(tokio::time::Duration::from_millis(1000)).await; - if state.lock().unwrap().update { - // ignore the error - if socket - .send(Message::Text(String::from("reload"))) - .await - .is_err() - { - return; + println!("wait"); + if let Ok(v) = rx.recv().await { + println!("trigger recv: {}", v); + if v == "reload" { + // ignore the error + if socket + .send(Message::Text(String::from("reload"))) + .await + .is_err() + { + return; + } } - state.lock().unwrap().change(false); + } else { + println!("SS"); } } }) From 7aeddba4270c404a1898382acd0b89b4b33096db Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Thu, 27 Jan 2022 01:03:17 +0800 Subject: [PATCH 041/459] fix: auto-connect `ws` server --- src/assets/autoreload.js | 40 +++++++------- src/server/mod.rs | 111 ++++++++++++++++++++------------------- 2 files changed, 77 insertions(+), 74 deletions(-) diff --git a/src/assets/autoreload.js b/src/assets/autoreload.js index 89054664e..a6bbac5da 100644 --- a/src/assets/autoreload.js +++ b/src/assets/autoreload.js @@ -1,24 +1,22 @@ (function () { - var protocol = window.location.protocol === "https:" ? "wss:" : "ws:"; - - var url = protocol + "//" + window.location.host + "/_dioxus/ws"; - - var poll_interval = 2000; + var protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; + var url = protocol + '//' + window.location.host + '/_dioxus/ws'; + var poll_interval = 8080; + var reload_upon_connect = () => { + window.setTimeout( + () => { + var ws = new WebSocket(url); + ws.onopen = () => window.location.reload(); + ws.onclose = reload_upon_connect; + }, + poll_interval); + }; var ws = new WebSocket(url); - - ws.addEventListener("message", (ev) => { - if (ev.data == "reload") { - window.location.reload(); - } - }); - - ws.addEventListener("open", () => { - ws.send("init"); - }); - - ws.addEventListener("close", () => { - alert("Dev-Server Socket Closed."); - }); - -})(); \ No newline at end of file + ws.onmessage = (ev) => { + if (ev.data == "reload") { + window.location.reload(); + } + }; + ws.onclose = reload_upon_connect; +})() \ No newline at end of file diff --git a/src/server/mod.rs b/src/server/mod.rs index 366ea41ab..7dd4151eb 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -36,6 +36,7 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { .watch_path .clone() .unwrap_or_else(|| vec![PathBuf::from("src")]); + for sub_path in allow_watch_path { watcher .watch( @@ -46,60 +47,63 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { } let (reload_tx, _) = broadcast::channel(100); - let ws_reload_state = Arc::new(WsRelodState { update: reload_tx }); + + let ws_reload_state = Arc::new(WsRelodState { + update: reload_tx.clone(), + }); let watcher_conf = config.clone(); - let watcher_ws_state = ws_reload_state.update.clone(); + tokio::spawn(async move { - loop { - if let Ok(v) = watcher_rx.recv() { - match v { - DebouncedEvent::Create(_) - | DebouncedEvent::Write(_) - | DebouncedEvent::Remove(_) - | DebouncedEvent::Rename(_, _) => { - if builder::build(&watcher_conf).is_ok() { - // change the websocket reload state to true; - // the page will auto-reload. - if watcher_conf - .dioxus_config - .web - .watcher - .reload_html - .unwrap_or(false) - { - let _ = Serve::regen_dev_page(&watcher_conf); - } - println!("send reload!"); - watcher_ws_state.send("reload".into()).unwrap(); + while let Ok(v) = watcher_rx.recv() { + match v { + DebouncedEvent::Create(_) + | DebouncedEvent::Write(_) + | DebouncedEvent::Remove(_) + | DebouncedEvent::Rename(_, _) => { + if builder::build(&watcher_conf).is_ok() { + // change the websocket reload state to true; + // the page will auto-reload. + if watcher_conf + .dioxus_config + .web + .watcher + .reload_html + .unwrap_or(false) + { + let _ = Serve::regen_dev_page(&watcher_conf); } + reload_tx.send("reload".into()).unwrap(); } - _ => {} } + _ => {} } } }); - let app = Router::new() - .route("/_dioxus/ws", get(ws_handler)) - .fallback( - get_service(ServeDir::new(config.crate_dir.join(&dist_path))).handle_error( - |error: std::io::Error| async move { - ( - StatusCode::INTERNAL_SERVER_ERROR, - format!("Unhandled internal error: {}", error), - ) - }, - ), - ) - .layer(AddExtensionLayer::new(ws_reload_state.clone())); - // start serve dev-server at 0.0.0.0:8080 let port = "8080"; log::info!("📡 Dev-Server is started at: http://127.0.0.1:{}/", port); + axum::Server::bind(&format!("0.0.0.0:{}", port).parse().unwrap()) - .serve(app.into_make_service()) + .serve( + Router::new() + .route("/_dioxus/ws", get(ws_handler)) + .fallback( + get_service(ServeDir::new(config.crate_dir.join(&dist_path))).handle_error( + |error: std::io::Error| async move { + ( + StatusCode::INTERNAL_SERVER_ERROR, + format!("Unhandled internal error: {}", error), + ) + }, + ), + ) + .layer(AddExtensionLayer::new(ws_reload_state)) + .into_make_service(), + ) .await?; + Ok(()) } @@ -109,23 +113,24 @@ async fn ws_handler( Extension(state): Extension>, ) -> impl IntoResponse { ws.on_upgrade(|mut socket| async move { + + log::info!("New websocket conenct."); + let mut rx = state.update.subscribe(); + loop { - println!("wait"); - if let Ok(v) = rx.recv().await { - println!("trigger recv: {}", v); - if v == "reload" { - // ignore the error - if socket - .send(Message::Text(String::from("reload"))) - .await - .is_err() - { - return; - } + let v = rx.recv().await.unwrap(); + println!("trigger recv: {}", v); + if v == "reload" { + // ignore the error + if socket + .send(Message::Text(String::from("reload"))) + .await + .is_err() + { + println!("send failed"); + return; } - } else { - println!("SS"); } } }) From b6172998609812a02cc9e68786e0cd283bc0e685 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Thu, 27 Jan 2022 11:13:41 +0800 Subject: [PATCH 042/459] fix: auto-reload --- Cargo.toml | 3 +- src/assets/autoreload.js | 1 + src/server/mod.rs | 131 +++++++++++++++++++++------------------ 3 files changed, 73 insertions(+), 62 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 68dd3ee56..5f6443245 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,8 @@ toml = "0.5.8" fs_extra = "1.2.0" cargo_toml = "0.10.0" futures = "0.3.12" -notify = "4.0.17" +# notify = "4.0.17" +notify = { version = "5.0.0-pre.13", features = ["serde"] } html_parser = "0.6.2" binary-install = "0.0.2" convert_case = "0.5.0" diff --git a/src/assets/autoreload.js b/src/assets/autoreload.js index a6bbac5da..da62e5eae 100644 --- a/src/assets/autoreload.js +++ b/src/assets/autoreload.js @@ -15,6 +15,7 @@ var ws = new WebSocket(url); ws.onmessage = (ev) => { if (ev.data == "reload") { + // alert("reload!!!"); window.location.reload(); } }; diff --git a/src/server/mod.rs b/src/server/mod.rs index 7dd4151eb..45d7191d0 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -5,12 +5,9 @@ use axum::{ routing::{get, get_service}, AddExtensionLayer, Router, }; -use notify::{watcher, DebouncedEvent, Watcher}; -use std::time::Duration; -use std::{ - path::PathBuf, - sync::{mpsc::channel, Arc}, -}; +use notify::{RecommendedWatcher, Watcher}; + +use std::{path::PathBuf, sync::Arc}; use tower_http::services::ServeDir; use crate::{builder, serve::Serve, CrateConfig}; @@ -23,12 +20,33 @@ struct WsRelodState { pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { log::info!("🚀 Starting development server..."); - let (watcher_tx, watcher_rx) = channel(); - let dist_path = config.out_dir.clone(); + let (reload_tx, _) = broadcast::channel(100); + + let ws_reload_state = Arc::new(WsRelodState { + update: reload_tx.clone(), + }); + // file watcher: check file change - let mut watcher = watcher(watcher_tx, Duration::from_secs(1)).unwrap(); + let watcher_conf = config.clone(); + let mut watcher = RecommendedWatcher::new(move |_| { + if builder::build(&watcher_conf).is_ok() { + // change the websocket reload state to true; + // the page will auto-reload. + if watcher_conf + .dioxus_config + .web + .watcher + .reload_html + .unwrap_or(false) + { + let _ = Serve::regen_dev_page(&watcher_conf); + } + reload_tx.send("reload".into()).unwrap(); + } + }) + .unwrap(); let allow_watch_path = config .dioxus_config .web @@ -40,46 +58,38 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { for sub_path in allow_watch_path { watcher .watch( - config.crate_dir.join(sub_path), + &config.crate_dir.join(sub_path), notify::RecursiveMode::Recursive, ) .unwrap(); } - let (reload_tx, _) = broadcast::channel(100); - - let ws_reload_state = Arc::new(WsRelodState { - update: reload_tx.clone(), - }); - - let watcher_conf = config.clone(); - - tokio::spawn(async move { - while let Ok(v) = watcher_rx.recv() { - match v { - DebouncedEvent::Create(_) - | DebouncedEvent::Write(_) - | DebouncedEvent::Remove(_) - | DebouncedEvent::Rename(_, _) => { - if builder::build(&watcher_conf).is_ok() { - // change the websocket reload state to true; - // the page will auto-reload. - if watcher_conf - .dioxus_config - .web - .watcher - .reload_html - .unwrap_or(false) - { - let _ = Serve::regen_dev_page(&watcher_conf); - } - reload_tx.send("reload".into()).unwrap(); - } - } - _ => {} - } - } - }); + // tokio::spawn(async move { + // while let Ok(v) = watcher_rx.recv() { + // match v { + // DebouncedEvent::Create(_) + // | DebouncedEvent::Write(_) + // | DebouncedEvent::Remove(_) + // | DebouncedEvent::Rename(_, _) => { + // if builder::build(&watcher_conf).is_ok() { + // // change the websocket reload state to true; + // // the page will auto-reload. + // if watcher_conf + // .dioxus_config + // .web + // .watcher + // .reload_html + // .unwrap_or(false) + // { + // let _ = Serve::regen_dev_page(&watcher_conf); + // } + // reload_tx.send("reload".into()).unwrap(); + // } + // } + // _ => {} + // } + // } + // }); // start serve dev-server at 0.0.0.0:8080 let port = "8080"; @@ -113,25 +123,24 @@ async fn ws_handler( Extension(state): Extension>, ) -> impl IntoResponse { ws.on_upgrade(|mut socket| async move { - - log::info!("New websocket conenct."); - let mut rx = state.update.subscribe(); - - loop { - let v = rx.recv().await.unwrap(); - println!("trigger recv: {}", v); - if v == "reload" { - // ignore the error - if socket - .send(Message::Text(String::from("reload"))) - .await - .is_err() - { - println!("send failed"); - return; + let reload_watcher = tokio::spawn(async move { + loop { + let v = rx.recv().await.unwrap(); + println!("trigger recv: {}", v); + if v == "reload" { + // ignore the error + if socket + .send(Message::Text(String::from("reload"))) + .await + .is_err() + { + break; + } } } - } + }); + + reload_watcher.await.unwrap(); }) } From b8b0303904b3f01da5942355b5c61a5ea33c325c Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Thu, 27 Jan 2022 12:09:54 +0800 Subject: [PATCH 043/459] fix: dev server `auto-reload` --- Cargo.toml | 2 +- src/server/mod.rs | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 5f6443245..5bbfd7ac2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,6 @@ toml = "0.5.8" fs_extra = "1.2.0" cargo_toml = "0.10.0" futures = "0.3.12" -# notify = "4.0.17" notify = { version = "5.0.0-pre.13", features = ["serde"] } html_parser = "0.6.2" binary-install = "0.0.2" @@ -30,6 +29,7 @@ cargo_metadata = "0.14.1" tokio = { version = "1.15.0", features = ["full"] } atty = "0.2.14" regex = "1.5.4" +chrono = "0.4.19" axum = { version = "0.4.4", features = ["ws", "headers"] } tower-http = { version = "0.2.0", features = ["fs", "trace"] } diff --git a/src/server/mod.rs b/src/server/mod.rs index 45d7191d0..b1684d980 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -28,10 +28,14 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { update: reload_tx.clone(), }); + let mut last_update_time = chrono::Local::now().timestamp(); + // file watcher: check file change let watcher_conf = config.clone(); - let mut watcher = RecommendedWatcher::new(move |_| { - if builder::build(&watcher_conf).is_ok() { + let mut watcher = RecommendedWatcher::new(move | _ : notify::Result| { + if chrono::Local::now().timestamp() > last_update_time + && builder::build(&watcher_conf).is_ok() + { // change the websocket reload state to true; // the page will auto-reload. if watcher_conf @@ -43,7 +47,9 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { { let _ = Serve::regen_dev_page(&watcher_conf); } + println!("watcher send reload"); reload_tx.send("reload".into()).unwrap(); + last_update_time = chrono::Local::now().timestamp(); } }) .unwrap(); @@ -127,7 +133,6 @@ async fn ws_handler( let reload_watcher = tokio::spawn(async move { loop { let v = rx.recv().await.unwrap(); - println!("trigger recv: {}", v); if v == "reload" { // ignore the error if socket From 23e09f0d9f0b3740cb9b9809e3efdd0f2652c21c Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Thu, 27 Jan 2022 14:11:18 +0800 Subject: [PATCH 044/459] fix: delete comment --- src/server/mod.rs | 29 +---------------------------- 1 file changed, 1 insertion(+), 28 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index b1684d980..880f25ceb 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -32,7 +32,7 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { // file watcher: check file change let watcher_conf = config.clone(); - let mut watcher = RecommendedWatcher::new(move | _ : notify::Result| { + let mut watcher = RecommendedWatcher::new(move |_: notify::Result| { if chrono::Local::now().timestamp() > last_update_time && builder::build(&watcher_conf).is_ok() { @@ -70,33 +70,6 @@ pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { .unwrap(); } - // tokio::spawn(async move { - // while let Ok(v) = watcher_rx.recv() { - // match v { - // DebouncedEvent::Create(_) - // | DebouncedEvent::Write(_) - // | DebouncedEvent::Remove(_) - // | DebouncedEvent::Rename(_, _) => { - // if builder::build(&watcher_conf).is_ok() { - // // change the websocket reload state to true; - // // the page will auto-reload. - // if watcher_conf - // .dioxus_config - // .web - // .watcher - // .reload_html - // .unwrap_or(false) - // { - // let _ = Serve::regen_dev_page(&watcher_conf); - // } - // reload_tx.send("reload".into()).unwrap(); - // } - // } - // _ => {} - // } - // } - // }); - // start serve dev-server at 0.0.0.0:8080 let port = "8080"; log::info!("📡 Dev-Server is started at: http://127.0.0.1:{}/", port); From b23e69cfbbf0af2d96ab897bf45e3944f863be59 Mon Sep 17 00:00:00 2001 From: c5soft Date: Thu, 27 Jan 2022 15:54:49 +0800 Subject: [PATCH 045/459] Refactor extension, make it easy to maintain and unique to register --- extension/LICENSE.txt | 21 +++++++++++ extension/package.json | 15 ++++---- extension/src/extension.ts | 75 +++++++++++++------------------------- 3 files changed, 54 insertions(+), 57 deletions(-) create mode 100644 extension/LICENSE.txt diff --git a/extension/LICENSE.txt b/extension/LICENSE.txt new file mode 100644 index 000000000..6fd3d45f6 --- /dev/null +++ b/extension/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 DioxusLabs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/extension/package.json b/extension/package.json index 3b72cfa8c..0a3d50b67 100644 --- a/extension/package.json +++ b/extension/package.json @@ -17,19 +17,19 @@ "Other" ], "activationEvents": [ - "onCommand:extension.htmlToRsx", - "onCommand:extension.htmlToComponent" + "onCommand:extension.htmlToDioxusRsx", + "onCommand:extension.htmlToDioxusComponent" ], "main": "./out/extension", "contributes": { "commands": [ { - "command": "extension.htmlToRsx", - "title": "Convert HTML to RSX" + "command": "extension.htmlToDioxusRsx", + "title": "Dioxus: Convert HTML to RSX" }, { - "command": "extension.htmlToComponent", - "title": "Convert HTML to Dioxus Component" + "command": "extension.htmlToDioxusComponent", + "title": "Dioxus: Convert HTML to Component" } ] }, @@ -37,7 +37,8 @@ "vscode:prepublish": "npm run compile", "compile": "tsc -p ./", "lint": "eslint . --ext .ts,.tsx", - "watch": "tsc -watch -p ./" + "watch": "tsc -watch -p ./", + "package": "vsce package" }, "devDependencies": { "@types/node": "^12.12.0", diff --git a/extension/src/extension.ts b/extension/src/extension.ts index c9ab06662..5a41c7f5f 100644 --- a/extension/src/extension.ts +++ b/extension/src/extension.ts @@ -1,57 +1,32 @@ -'use strict'; - import * as vscode from 'vscode'; import { spawn } from "child_process"; export function activate(context: vscode.ExtensionContext) { - const htmlToPureRsx = vscode.commands.registerCommand('extension.htmlToRsx', function () { - // Get the active text editor - const editor = vscode.window.activeTextEditor; - - if (editor) { - const document = editor.document; - const selection = editor.selection; - const word = document.getText(selection); - - const child_proc = spawn("dioxus", ["translate", "--source", word]); - - let result = ''; - child_proc.stdout?.on('data', data => result += data); - - child_proc.on('close', () => { - editor.edit(editBuilder => { - if (result != '') { - editBuilder.replace(selection, result) - } - }) - }); + function registerCommand(cmd: string) { + function convert(cmd: string) { + const editor = vscode.window.activeTextEditor;// Get the active text editor + if (editor) { + const html = editor.document.getText(editor.selection); + if (html.length > 0) { + let params = ["translate"]; + if (cmd.includes("Component")) params.push("--component"); + params.push("--source"); + params.push(html); + const child_proc = spawn("dioxus", params); + let result = ''; + child_proc.stdout?.on('data', data => result += data); + child_proc.on('close', () => { + if (result.length > 0) editor.edit(editBuilder => editBuilder.replace(editor.selection, result)); + }); + } else { + vscode.window.showWarningMessage("Please select HTML fragment before invoking this command!"); + } + } } - }); + const handle = vscode.commands.registerCommand(cmd, () => convert(cmd)); + context.subscriptions.push(handle); + } - const htmlToComponent = vscode.commands.registerCommand('extension.htmlToComponent', function () { - // Get the active text editor - const editor = vscode.window.activeTextEditor; - - if (editor) { - const document = editor.document; - const selection = editor.selection; - const word = document.getText(selection); - - const child_proc = spawn("dioxus", ["translate", "--component", "--source", word]); - - let result = ''; - child_proc.stdout?.on('data', data => result += data); - - child_proc.on('close', () => { - editor.edit(editBuilder => { - if (result != '') { - editBuilder.replace(selection, result) - } - }) - }); - } - }); - - context.subscriptions.push(htmlToPureRsx); - context.subscriptions.push(htmlToComponent); + registerCommand('extension.htmlToDioxusRsx'); + registerCommand('extension.htmlToDioxusComponent'); } From 5d9a58b0faae85375b523ea3fa70ce29d58b141c Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Thu, 27 Jan 2022 23:06:09 +0800 Subject: [PATCH 046/459] fix: desktop build --- src/builder.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/builder.rs b/src/builder.rs index 583c9bc8f..257072a6a 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -141,6 +141,10 @@ pub fn build_desktop(config: &CrateConfig) -> Result<()> { let output = cmd.output()?; + if !output.status.success() { + return Err(Error::BuildFailed("Program build failed.".into())); + } + if output.status.success() { if config.out_dir.is_dir() { remove_dir_all(&config.out_dir)?; From efe956a1bfd097a2190a7db95286dafe1a2c09d9 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Thu, 27 Jan 2022 23:56:44 +0800 Subject: [PATCH 047/459] fix: display log --- src/cli/serve/mod.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index fd8f3c4f5..8f26e0f30 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -1,5 +1,5 @@ use crate::{cfg::ConfigOptsServe, gen_page, server, CrateConfig}; -use std::{io::Write, path::PathBuf, process::Command}; +use std::{io::Write, path::PathBuf, process::{Command, Stdio}}; use structopt::StructOpt; /// Run the WASM project on dev-server @@ -44,6 +44,7 @@ impl Serve { .unwrap() .to_string(), ) + .stdout(Stdio::inherit()) .output()?; } } From a4ae4598fbf4aa41562efe2c0afbf37049da7ba8 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Sat, 5 Feb 2022 09:11:44 +0800 Subject: [PATCH 048/459] docs: update reamde --- README.md | 44 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 75e05b3cf..7bc1fa131 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,46 @@

📦✨ dioxus-cli

-

- Tooling to supercharge dioxus projects -

+

Tooling to supercharge dioxus projects

-![Dioxus Logo](https://dioxuslabs.com/guide/images/dioxuslogo_full.png) - - -# About - dioxus-cli (inspired by wasm-pack and webpack) is a tool to help get dioxus projects off the ground. It handles all the build, development, bundling, and publishing to make web development simple. - ## Installation ``` $ cargo install dioxus-cli ``` -Now, `dioxus` is in your path. \ No newline at end of file +Now, `dioxus` is in your path, you can use `dioxus --help` to get the help document. + +``` +dioxus 0.1.2 +Build, bundle, & ship your Dioxus app + +USAGE: + dioxus.exe [FLAGS] + +FLAGS: + -h, --help Prints help information + -v Enable verbose logging + -V, --version Prints version information + +SUBCOMMANDS: + build Build the Rust WASM app and all of its assets + clean Clean output artifacts + config Dioxus config file controls + create Init a new project for Dioxus + help Prints this message or the help of the given subcommand(s) + serve Build, watch & serve the Rust WASM app and all of its assets + translate Translate some source file into Dioxus code +``` + +## Get Started + +You can use the `dioxus crate project_name` to init a dioxus project, its will be clone from the [dioxus-template](https://github.com/DioxusLabs/dioxus-template). + +or you can assign the template path: + +``` +dioxus create hello --template gh:dioxuslabs/dioxus-template +``` \ No newline at end of file From 025efc912075348bb90fbaed1cde3e5c61c8ccf9 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Sun, 6 Feb 2022 16:28:17 -0500 Subject: [PATCH 049/459] fix: translation service --- src/cli/translate/extract_svgs.rs | 1 - src/cli/translate/mod.rs | 240 ++++++++++++++++++++++++------ src/cli/translate/to_component.rs | 183 ----------------------- src/cli/translate/translate.rs | 1 - 4 files changed, 192 insertions(+), 233 deletions(-) delete mode 100644 src/cli/translate/extract_svgs.rs delete mode 100644 src/cli/translate/to_component.rs delete mode 100644 src/cli/translate/translate.rs diff --git a/src/cli/translate/extract_svgs.rs b/src/cli/translate/extract_svgs.rs deleted file mode 100644 index 8b1378917..000000000 --- a/src/cli/translate/extract_svgs.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/cli/translate/mod.rs b/src/cli/translate/mod.rs index 81b5092ed..a717d632a 100644 --- a/src/cli/translate/mod.rs +++ b/src/cli/translate/mod.rs @@ -1,15 +1,14 @@ +use anyhow::Result; use html_parser::Dom; +use html_parser::Element; use html_parser::Node; -use std::fmt::Write; +#[allow(unused_imports)] +use std::fmt::{Display, Formatter}; use std::io::Read; use std::path::PathBuf; use std::process::exit; use structopt::StructOpt; -pub mod extract_svgs; -pub mod to_component; -pub mod translate; - /// Build the Rust WASM app and all of its assets. #[derive(Clone, Debug, StructOpt)] #[structopt(name = "translate")] @@ -21,11 +20,7 @@ pub struct Translate { /// Input file #[structopt(short, long)] - pub source: Option, - - /// Input file - #[structopt(short, long, parse(from_os_str))] - pub input: Option, + pub file: Option, /// Output file, stdout if not present #[structopt(parse(from_os_str))] @@ -35,23 +30,17 @@ pub struct Translate { impl Translate { pub fn translate(self) -> anyhow::Result<()> { let Translate { - component: as_component, - input, + component, output, - source, + file, } = self; - let contents; - let temp = input.map(|f| { - std::fs::read_to_string(&f).unwrap_or_else(|e| { + let contents = match file { + Some(input) => std::fs::read_to_string(&input).unwrap_or_else(|e| { log::error!("Cloud not read input file: {}.", e); exit(0); - }) - }); - if let Some(..) = temp { - if let Some(s) = source { - contents = s; - } else { + }), + None => { if atty::is(atty::Stream::Stdin) { log::error!("No input file, source, or stdin to translate from."); exit(0); @@ -60,28 +49,21 @@ impl Translate { let mut buffer = String::new(); std::io::stdin().read_to_string(&mut buffer).unwrap(); - contents = buffer.trim().to_string(); + buffer.trim().to_string() } - } else { - contents = temp.unwrap(); - } + }; - // parse the input as html and prepare the output - let dom = Dom::parse(&contents)?; - let mut out_buf = String::new(); - - if as_component { - writeln!(out_buf, "use dioxus::prelude::*;")?; - writeln!(out_buf, "fn component(cx: Scope) -> Element {{")?; - writeln!(out_buf, " cx.render(rsx!(")?; - } - for child in &dom.children { - render_child(&mut out_buf, child, if as_component { 2 } else { 0 })?; - } - if as_component { - writeln!(out_buf, " ))")?; - writeln!(out_buf, "}}")?; - } + let out_buf = match component { + true => format!("{}", convert_html_to_component(&contents).unwrap()), + false => { + let mut buf = String::new(); + let dom = Dom::parse(&contents).unwrap(); + for child in &dom.children { + simple_render_child(&mut buf, child, 0)?; + } + buf + } + }; if let Some(output) = output { std::fs::write(&output, out_buf)?; @@ -93,7 +75,8 @@ impl Translate { } } -fn render_child(f: &mut impl Write, child: &Node, il: u32) -> std::fmt::Result { +/// render without handling svgs or anything +fn simple_render_child(f: &mut impl std::fmt::Write, child: &Node, il: u32) -> std::fmt::Result { write_tabs(f, il)?; match child { Node::Text(t) => writeln!(f, "\"{}\"", t)?, @@ -131,9 +114,8 @@ fn render_child(f: &mut impl Write, child: &Node, il: u32) -> std::fmt::Result { None => writeln!(f, "{}: \"\",", new_name)?, } } else { - match name.as_str() { - "for" | "async" | "type" | "as" => write!(f, "r#")?, - _ => {} + if matches!(name.as_str(), "for" | "async" | "type" | "as") { + write!(f, "r#")? } match value { @@ -145,7 +127,7 @@ fn render_child(f: &mut impl Write, child: &Node, il: u32) -> std::fmt::Result { // now the children for child in &el.children { - render_child(f, child, il + 1)?; + simple_render_child(f, child, il + 1)?; } // close the tag @@ -156,9 +138,171 @@ fn render_child(f: &mut impl Write, child: &Node, il: u32) -> std::fmt::Result { Ok(()) } -fn write_tabs(f: &mut impl Write, num: u32) -> std::fmt::Result { +pub fn convert_html_to_component(html: &str) -> Result { + Ok(ComponentRenderer { + dom: Dom::parse(html)?, + icon_index: 0, + }) +} + +#[allow(dead_code)] +pub struct ComponentRenderer { + dom: Dom, + icon_index: usize, +} + +impl Display for ComponentRenderer { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + writeln!( + f, + r##" +fn component(cx: Scope) -> Element {{ + cx.render(rsx!("## + )?; + let mut svg_nodes = vec![]; + + let mut svg_idx = 0; + for child in &self.dom.children { + render_child(f, child, 2, &mut svg_nodes, true, &mut svg_idx)?; + } + write!( + f, + r##" )) +}}"## + )?; + + if svg_idx == 0 { + return Ok(()); + } + + writeln!(f, "\n\nmod icons {{")?; + + let mut id = 0; + while let Some(svg) = svg_nodes.pop() { + writeln!( + f, + r##" pub(super) fn icon_{}(cx: Scope) -> Element {{ + cx.render(rsx!("##, + id + )?; + write_tabs(f, 3)?; + + render_element(f, svg, 3, &mut svg_nodes, false, &mut 0)?; + writeln!(f, "\t\t))\n\t}}\n")?; + id += 1; + } + + writeln!(f, "}}")?; + + Ok(()) + } +} + +fn render_child<'a>( + f: &mut Formatter<'_>, + child: &'a Node, + il: u32, + svg_buffer: &mut Vec<&'a Element>, + skip_svg: bool, + svg_idx: &mut usize, +) -> std::fmt::Result { + write_tabs(f, il)?; + match child { + Node::Text(t) => writeln!(f, "\"{}\"", t)?, + Node::Comment(e) => writeln!(f, "/* {} */", e)?, + Node::Element(el) => render_element(f, el, il, svg_buffer, skip_svg, svg_idx)?, + }; + Ok(()) +} + +fn render_element<'a>( + f: &mut Formatter<'_>, + el: &'a Element, + il: u32, + svg_buffer: &mut Vec<&'a Element>, + skip_svg: bool, + svg_idx: &mut usize, +) -> std::fmt::Result { + if el.name == "svg" && skip_svg { + svg_buffer.push(el); + // todo: attach the right icon ID + writeln!(f, "icons::icon_{} {{}}", svg_idx)?; + *svg_idx += 1; + return Ok(()); + } + + // open the tag + write!(f, "{} {{ ", &el.name)?; + + // todo: dioxus will eventually support classnames + // for now, just write them with a space between each + let class_iter = &mut el.classes.iter(); + if let Some(first_class) = class_iter.next() { + write!(f, "class: \"{}", first_class)?; + for next_class in class_iter { + write!(f, " {}", next_class)?; + } + write!(f, "\",")?; + } + writeln!(f)?; + + // write the attributes + if let Some(id) = &el.id { + write_tabs(f, il + 1)?; + writeln!(f, "id: \"{}\",", id)?; + } + + for (name, value) in &el.attributes { + write_tabs(f, il + 1)?; + + use convert_case::{Case, Casing}; + if name.chars().any(|ch| ch.is_ascii_uppercase() || ch == '-') { + let new_name = name.to_case(Case::Snake); + match value { + Some(val) => writeln!(f, "{}: \"{}\",", new_name, val)?, + None => writeln!(f, "{}: \"\",", new_name)?, + } + } else { + if matches!(name.as_str(), "for" | "async" | "type" | "as") { + write!(f, "r#")? + } + + match value { + Some(val) => writeln!(f, "{}: \"{}\",", name, val)?, + None => writeln!(f, "{}: \"\",", name)?, + } + } + } + + // now the children + for child in &el.children { + render_child(f, child, il + 1, svg_buffer, skip_svg, svg_idx)?; + } + + // close the tag + write_tabs(f, il)?; + writeln!(f, "}}")?; + Ok(()) +} + +fn write_tabs(f: &mut impl std::fmt::Write, num: u32) -> std::fmt::Result { for _ in 0..num { write!(f, " ")? } Ok(()) } + +#[test] +fn generates_svgs() { + use std::io::Write; + + let st = include_str!("../../../tests/svg.html"); + + let out = format!("{:}", convert_html_to_component(st).unwrap()); + dbg!(&out); + + std::fs::File::create("svg_rsx.rs") + .unwrap() + .write_all(out.as_bytes()) + .unwrap(); +} diff --git a/src/cli/translate/to_component.rs b/src/cli/translate/to_component.rs deleted file mode 100644 index c83777ccb..000000000 --- a/src/cli/translate/to_component.rs +++ /dev/null @@ -1,183 +0,0 @@ -//! Intelligently converts html to rsx with appropraite transformations and extractions. -//! -//! - [*] Creates a component -//! - [ ] Extracts svgs -//! - [ ] Attempts to extract lists - -#[allow(unused_imports)] -use std::{ - fmt::{Display, Formatter}, - io::Write, -}; - -use anyhow::Result; - -use html_parser::{Dom, Element, Node}; - -pub fn convert_html_to_component(html: &str) -> Result { - Ok(ComponentRenderer { - dom: Dom::parse(html)?, - icon_index: 0, - }) -} - -#[allow(dead_code)] -pub struct ComponentRenderer { - dom: Dom, - icon_index: usize, -} - -impl Display for ComponentRenderer { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - writeln!( - f, - r##" -fn component(cx: Scope) -> Element {{ - cx.render(rsx!("## - )?; - let mut svg_nodes = vec![]; - - let mut svg_idx = 0; - for child in &self.dom.children { - render_child(f, child, 2, &mut svg_nodes, true, &mut svg_idx)?; - } - write!( - f, - r##" )) -}}"## - )?; - - if svg_idx == 0 { - return Ok(()); - } - - writeln!(f, "\n\nmod icons {{")?; - - let mut id = 0; - while let Some(svg) = svg_nodes.pop() { - writeln!( - f, - r##" pub(super) fn icon_{}(cx: Scope) -> Element {{ - cx.render(rsx!("##, - id - )?; - write_tabs(f, 3)?; - - render_element(f, svg, 3, &mut svg_nodes, false, &mut 0)?; - writeln!(f, "\t\t))\n\t}}\n")?; - id += 1; - } - - writeln!(f, "}}")?; - - Ok(()) - } -} - -fn render_child<'a>( - f: &mut Formatter<'_>, - child: &'a Node, - il: u32, - svg_buffer: &mut Vec<&'a Element>, - skip_svg: bool, - svg_idx: &mut usize, -) -> std::fmt::Result { - write_tabs(f, il)?; - match child { - Node::Text(t) => writeln!(f, "\"{}\"", t)?, - Node::Comment(e) => writeln!(f, "/* {} */", e)?, - Node::Element(el) => render_element(f, el, il, svg_buffer, skip_svg, svg_idx)?, - }; - Ok(()) -} - -fn render_element<'a>( - f: &mut Formatter<'_>, - el: &'a Element, - il: u32, - svg_buffer: &mut Vec<&'a Element>, - skip_svg: bool, - svg_idx: &mut usize, -) -> std::fmt::Result { - if el.name == "svg" && skip_svg { - svg_buffer.push(el); - // todo: attach the right icon ID - writeln!(f, "icons::icon_{} {{}}", svg_idx)?; - *svg_idx += 1; - return Ok(()); - } - - // open the tag - write!(f, "{} {{ ", &el.name)?; - - // todo: dioxus will eventually support classnames - // for now, just write them with a space between each - let class_iter = &mut el.classes.iter(); - if let Some(first_class) = class_iter.next() { - write!(f, "class: \"{}", first_class)?; - for next_class in class_iter { - write!(f, " {}", next_class)?; - } - write!(f, "\",")?; - } - writeln!(f)?; - - // write the attributes - if let Some(id) = &el.id { - write_tabs(f, il + 1)?; - writeln!(f, "id: \"{}\",", id)?; - } - - for (name, value) in &el.attributes { - write_tabs(f, il + 1)?; - - use convert_case::{Case, Casing}; - if name.chars().any(|ch| ch.is_ascii_uppercase() || ch == '-') { - let new_name = name.to_case(Case::Snake); - match value { - Some(val) => writeln!(f, "{}: \"{}\",", new_name, val)?, - None => writeln!(f, "{}: \"\",", new_name)?, - } - } else { - match name.as_str() { - "for" | "async" | "type" | "as" => write!(f, "r#")?, - _ => {} - } - - match value { - Some(val) => writeln!(f, "{}: \"{}\",", name, val)?, - None => writeln!(f, "{}: \"\",", name)?, - } - } - } - - // now the children - for child in &el.children { - render_child(f, child, il + 1, svg_buffer, skip_svg, svg_idx)?; - } - - // close the tag - write_tabs(f, il)?; - writeln!(f, "}}")?; - Ok(()) -} - -fn write_tabs(f: &mut Formatter, num: u32) -> std::fmt::Result { - for _ in 0..num { - write!(f, " ")? - } - Ok(()) -} - -#[test] -fn generates_svgs() { - let st = include_str!("../../../tests/svg.html"); - - let out = format!("{:}", convert_html_to_component(st).unwrap()); - dbg!(&out); - - std::fs::File::create("svg_rsx.rs") - .unwrap() - .write_all(out.as_bytes()) - .unwrap(); -} diff --git a/src/cli/translate/translate.rs b/src/cli/translate/translate.rs deleted file mode 100644 index 8b1378917..000000000 --- a/src/cli/translate/translate.rs +++ /dev/null @@ -1 +0,0 @@ - From eb7388794a09eae788ad70aaabfb483e37cc19b3 Mon Sep 17 00:00:00 2001 From: Aster Date: Mon, 7 Feb 2022 05:28:18 +0800 Subject: [PATCH 050/459] Replace struct-opt with clap --- .gitignore | 1 + Cargo.toml | 26 +++++++++++++------------- README.md | 7 ++++++- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 96ef6c0b9..2e049011e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /target Cargo.lock +.idea/ \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index 5bbfd7ac2..0f2ad96c4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dioxus-cli" -version = "0.1.2" +version = "0.1.3" authors = ["Jonathan Kelley"] edition = "2018" description = "CLI tool for developing, testing, and publishing Dioxus apps" @@ -9,31 +9,31 @@ license = "MIT/Apache-2.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -thiserror = "1.0.23" -log = "0.4.13" +thiserror = "1.0.30" +log = "0.4.14" fern = { version = "0.6.0", features = ["colored"] } wasm-bindgen-cli-support = "0.2.79" -anyhow = "1.0.38" -serde = { version = "1.0.133", features = ["derive"] } -serde_json = "1" +anyhow = "1.0.53" +serde = { version = "1.0.136", features = ["derive"] } +serde_json = "1.0.79" toml = "0.5.8" fs_extra = "1.2.0" -cargo_toml = "0.10.0" -futures = "0.3.12" +cargo_toml = "0.11.4" +futures = "0.3.21" notify = { version = "5.0.0-pre.13", features = ["serde"] } html_parser = "0.6.2" binary-install = "0.0.2" convert_case = "0.5.0" -structopt = "0.3.25" cargo_metadata = "0.14.1" -tokio = { version = "1.15.0", features = ["full"] } +tokio = { version = "1.16.1", features = ["full"] } atty = "0.2.14" regex = "1.5.4" chrono = "0.4.19" +clap = "3.0.14" -axum = { version = "0.4.4", features = ["ws", "headers"] } -tower-http = { version = "0.2.0", features = ["fs", "trace"] } -headers = "0.3" +axum = { version = "0.4.5", features = ["ws", "headers"] } +tower-http = { version = "0.2.2", features = ["fs", "trace"] } +headers = "0.3.7" # hyper = { version = "0.14.11", features = ["full"] } [[bin]] diff --git a/README.md b/README.md index 75e05b3cf..ab4cf1225 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,13 @@ dioxus-cli (inspired by wasm-pack and webpack) is a tool to help get dioxus proj ## Installation -``` +```shell +# for stable $ cargo install dioxus-cli +# for latest +$ cargo install --git https://github.com/DioxusLabs/cli +# for developing +$ cargo install --path . --debug ``` Now, `dioxus` is in your path. \ No newline at end of file From b6c6dd6532335c5acd2c2eea54300f6f6b341a64 Mon Sep 17 00:00:00 2001 From: Aster Date: Tue, 8 Feb 2022 00:51:21 +0800 Subject: [PATCH 051/459] Clean struct-opt derive --- Cargo.toml | 7 ++++--- src/cli/build/mod.rs | 8 +++----- src/cli/cfg.rs | 9 +++------ src/cli/clean/mod.rs | 10 ++-------- src/cli/config/mod.rs | 7 ++----- src/cli/create/mod.rs | 13 +------------ src/cli/mod.rs | 33 ++++++++++++++++++++++++++------- src/cli/serve/mod.rs | 6 ++---- src/cli/translate/mod.rs | 13 ++----------- tests/main.rs | 4 ++++ 10 files changed, 49 insertions(+), 61 deletions(-) create mode 100644 tests/main.rs diff --git a/Cargo.toml b/Cargo.toml index 0f2ad96c4..89943ec62 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,11 +9,13 @@ license = "MIT/Apache-2.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +# cli core +clap = {version = "3.0.14", features = ["derive"]} thiserror = "1.0.30" +wasm-bindgen-cli-support = "0.2.79" +# features log = "0.4.14" fern = { version = "0.6.0", features = ["colored"] } -wasm-bindgen-cli-support = "0.2.79" -anyhow = "1.0.53" serde = { version = "1.0.136", features = ["derive"] } serde_json = "1.0.79" toml = "0.5.8" @@ -29,7 +31,6 @@ tokio = { version = "1.16.1", features = ["full"] } atty = "0.2.14" regex = "1.5.4" chrono = "0.4.19" -clap = "3.0.14" axum = { version = "0.4.5", features = ["ws", "headers"] } tower-http = { version = "0.2.2", features = ["fs", "trace"] } diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index 684cec58c..b4d7f5fe4 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -1,10 +1,8 @@ -use std::{io::Write, path::PathBuf}; +use super::*; -use crate::{cfg::ConfigOptsBuild, gen_page}; -use structopt::StructOpt; /// Build the Rust WASM app and all of its assets. -#[derive(Clone, Debug, StructOpt)] +#[derive(Clone, Debug, Parser)] #[structopt(name = "build")] pub struct Build { #[structopt(flatten)] @@ -15,7 +13,7 @@ impl Build { pub fn build(self) -> anyhow::Result<()> { let mut crate_config = crate::CrateConfig::new()?; - // change the relase state. + // change the release state. crate_config.with_release(self.build.release); if self.build.example.is_some() { diff --git a/src/cli/cfg.rs b/src/cli/cfg.rs index ece00e07e..fdd627e85 100644 --- a/src/cli/cfg.rs +++ b/src/cli/cfg.rs @@ -1,10 +1,7 @@ -use std::path::PathBuf; -use structopt::StructOpt; - -use serde::Deserialize; +use super::*; /// Config options for the build system. -#[derive(Clone, Debug, Default, Deserialize, StructOpt)] +#[derive(Clone, Debug, Default, Deserialize, Parser)] pub struct ConfigOptsBuild { /// The index HTML file to drive the bundling process [default: index.html] #[structopt(parse(from_os_str))] @@ -24,7 +21,7 @@ pub struct ConfigOptsBuild { pub platform: String, } -#[derive(Clone, Debug, Default, Deserialize, StructOpt)] +#[derive(Clone, Debug, Default, Deserialize, Parser)] pub struct ConfigOptsServe { /// The index HTML file to drive the bundling process [default: index.html] #[structopt(parse(from_os_str))] diff --git a/src/cli/clean/mod.rs b/src/cli/clean/mod.rs index 62593b1ee..334f93572 100644 --- a/src/cli/clean/mod.rs +++ b/src/cli/clean/mod.rs @@ -1,13 +1,7 @@ -use std::{ - fs::remove_dir_all, - path::PathBuf, - process::{Command, Stdio}, -}; - -use structopt::StructOpt; +use super::*; /// Build the Rust WASM app and all of its assets. -#[derive(Clone, Debug, StructOpt)] +#[derive(Clone, Debug, Parser)] #[structopt(name = "clean")] pub struct Clean {} diff --git a/src/cli/config/mod.rs b/src/cli/config/mod.rs index d5291a7d6..e5d7bdbe4 100644 --- a/src/cli/config/mod.rs +++ b/src/cli/config/mod.rs @@ -1,10 +1,7 @@ -use std::{fs::File, io::Write}; - -use serde::Deserialize; -use structopt::StructOpt; +use super::*; /// Build the Rust WASM app and all of its assets. -#[derive(Clone, Debug, Deserialize, StructOpt)] +#[derive(Clone, Debug, Deserialize, Parser)] #[structopt(name = "config")] pub enum Config { /// Init `Dioxus.toml` for project/folder. diff --git a/src/cli/create/mod.rs b/src/cli/create/mod.rs index fa553c55a..b92a193b7 100644 --- a/src/cli/create/mod.rs +++ b/src/cli/create/mod.rs @@ -1,15 +1,4 @@ -use std::{ - fs::File, - io::{Read, Write}, - path::PathBuf, - process::{Command, Stdio}, -}; - -use regex::Regex; -use serde::Deserialize; -use structopt::StructOpt; - -use crate::{error::Result, Error}; +use super::*; /// Build the Rust WASM app and all of its assets. #[derive(Clone, Debug, Default, Deserialize, StructOpt)] diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 4a72e00ac..e3bd18b3b 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -1,5 +1,3 @@ -use structopt::StructOpt; - pub mod build; pub mod cfg; pub mod clean; @@ -8,17 +6,38 @@ pub mod create; pub mod serve; pub mod translate; +use std::{io::Write, path::PathBuf}; +use crate::{cfg::ConfigOptsBuild, gen_page}; +use clap::{Parser}; +use serde::Deserialize; +use std::{ + fs::remove_dir_all, + process::{Command, Stdio}, +}; +use std::{fs::File}; +use std::{ + io::{Read}, +}; +use regex::Regex; +use crate::{error::Result, Error}; +use crate::{cfg::ConfigOptsServe, server, CrateConfig}; +use html_parser::Dom; +use html_parser::Element; +use html_parser::Node; +use std::fmt::{Display, Formatter}; +use std::process::exit; + /// Build, bundle, & ship your Dioxus app. /// /// -#[derive(StructOpt)] -#[structopt(name = "dioxus")] +#[derive(Parser, Debug)] +#[clap(name = "dioxus")] pub struct Cli { - #[structopt(subcommand)] + #[clap(subcommand)] pub action: Commands, /// Enable verbose logging. - #[structopt(short)] + #[clap(short)] pub v: bool, // // // note: dioxus is still roughly compatible with trunk @@ -27,7 +46,7 @@ pub struct Cli { // pub config: Option, } -#[derive(StructOpt)] +#[derive(Parser)] pub enum Commands { /// Build the Rust WASM app and all of its assets. Build(build::Build), diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index 8f26e0f30..d7184f5f9 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -1,9 +1,7 @@ -use crate::{cfg::ConfigOptsServe, gen_page, server, CrateConfig}; -use std::{io::Write, path::PathBuf, process::{Command, Stdio}}; -use structopt::StructOpt; +use super::*; /// Run the WASM project on dev-server -#[derive(Clone, Debug, StructOpt)] +#[derive(Clone, Debug, Parser)] #[structopt(name = "serve")] pub struct Serve { #[structopt(flatten)] diff --git a/src/cli/translate/mod.rs b/src/cli/translate/mod.rs index a717d632a..4e23533aa 100644 --- a/src/cli/translate/mod.rs +++ b/src/cli/translate/mod.rs @@ -1,16 +1,7 @@ -use anyhow::Result; -use html_parser::Dom; -use html_parser::Element; -use html_parser::Node; -#[allow(unused_imports)] -use std::fmt::{Display, Formatter}; -use std::io::Read; -use std::path::PathBuf; -use std::process::exit; -use structopt::StructOpt; +use super::*; /// Build the Rust WASM app and all of its assets. -#[derive(Clone, Debug, StructOpt)] +#[derive(Clone, Debug, Parser)] #[structopt(name = "translate")] pub struct Translate { /// Activate debug mode diff --git a/tests/main.rs b/tests/main.rs new file mode 100644 index 000000000..f9bb6a890 --- /dev/null +++ b/tests/main.rs @@ -0,0 +1,4 @@ +#[test] +fn ready() { + println!("Compiled successfully!") +} \ No newline at end of file From ce628e1197095c778432fcb51df6d5f176a4f868 Mon Sep 17 00:00:00 2001 From: Aster Date: Wed, 9 Feb 2022 16:11:02 +0800 Subject: [PATCH 052/459] Fix compiler errors --- Cargo.toml | 2 ++ src/cli/build/mod.rs | 9 ++++----- src/cli/cfg.rs | 16 ++++++++-------- src/cli/clean/mod.rs | 4 ++-- src/cli/config/mod.rs | 9 +++++---- src/cli/create/mod.rs | 20 ++++++++------------ src/cli/mod.rs | 33 +++++++++++++++++---------------- src/cli/serve/mod.rs | 10 +++++----- src/cli/translate/mod.rs | 10 +++++----- src/error.rs | 37 +++++++++++++++++++++++++++++++++++++ src/main.rs | 4 ++-- src/server/mod.rs | 3 ++- tests/main.rs | 8 ++++---- 13 files changed, 101 insertions(+), 64 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 89943ec62..3ae7b4610 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,6 +31,8 @@ tokio = { version = "1.16.1", features = ["full"] } atty = "0.2.14" regex = "1.5.4" chrono = "0.4.19" +anyhow = "1.0.53" +hyper = "0.14.17" axum = { version = "0.4.5", features = ["ws", "headers"] } tower-http = { version = "0.2.2", features = ["fs", "trace"] } diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index b4d7f5fe4..1c665abd3 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -1,16 +1,15 @@ use super::*; - /// Build the Rust WASM app and all of its assets. #[derive(Clone, Debug, Parser)] -#[structopt(name = "build")] +#[clap(name = "build")] pub struct Build { - #[structopt(flatten)] + #[clap(flatten)] pub build: ConfigOptsBuild, } impl Build { - pub fn build(self) -> anyhow::Result<()> { + pub fn build(self) -> Result<()> { let mut crate_config = crate::CrateConfig::new()?; // change the release state. @@ -28,7 +27,7 @@ impl Build { crate::builder::build_desktop(&crate_config)?; } _ => { - return Err(anyhow::anyhow!("Unsoppurt platform target.")); + return custom_error!("Unsoppurt platform target."); } } diff --git a/src/cli/cfg.rs b/src/cli/cfg.rs index fdd627e85..f1e3d0845 100644 --- a/src/cli/cfg.rs +++ b/src/cli/cfg.rs @@ -4,40 +4,40 @@ use super::*; #[derive(Clone, Debug, Default, Deserialize, Parser)] pub struct ConfigOptsBuild { /// The index HTML file to drive the bundling process [default: index.html] - #[structopt(parse(from_os_str))] + #[clap(parse(from_os_str))] pub target: Option, /// Build in release mode [default: false] - #[structopt(long)] + #[clap(long)] #[serde(default)] pub release: bool, /// Build a example [default: ""] - #[structopt(long)] + #[clap(long)] pub example: Option, /// Build platform: support Web & Desktop [default: "web"] - #[structopt(long, default_value = "web")] + #[clap(long, default_value = "web")] pub platform: String, } #[derive(Clone, Debug, Default, Deserialize, Parser)] pub struct ConfigOptsServe { /// The index HTML file to drive the bundling process [default: index.html] - #[structopt(parse(from_os_str))] + #[clap(parse(from_os_str))] pub target: Option, /// Build a example [default: ""] - #[structopt(long)] + #[clap(long)] pub example: Option, /// Build in release mode [default: false] - #[structopt(long)] + #[clap(long)] #[serde(default)] pub release: bool, /// Build platform: support Web & Desktop [default: "web"] - #[structopt(long, default_value = "web")] + #[clap(long, default_value = "web")] pub platform: String, } diff --git a/src/cli/clean/mod.rs b/src/cli/clean/mod.rs index 334f93572..74a99fec2 100644 --- a/src/cli/clean/mod.rs +++ b/src/cli/clean/mod.rs @@ -2,11 +2,11 @@ use super::*; /// Build the Rust WASM app and all of its assets. #[derive(Clone, Debug, Parser)] -#[structopt(name = "clean")] +#[clap(name = "clean")] pub struct Clean {} impl Clean { - pub fn clean(self) -> anyhow::Result<()> { + pub fn clean(self) -> Result<()> { let crate_config = crate::CrateConfig::new()?; let output = Command::new("cargo") diff --git a/src/cli/config/mod.rs b/src/cli/config/mod.rs index e5d7bdbe4..3cbf368e0 100644 --- a/src/cli/config/mod.rs +++ b/src/cli/config/mod.rs @@ -1,8 +1,9 @@ use super::*; + /// Build the Rust WASM app and all of its assets. -#[derive(Clone, Debug, Deserialize, Parser)] -#[structopt(name = "config")] +#[derive(Clone, Debug, Deserialize, Subcommand)] +#[clap(name = "config")] pub enum Config { /// Init `Dioxus.toml` for project/folder. Init { @@ -10,14 +11,14 @@ pub enum Config { name: String, /// Cover old config - #[structopt(long)] + #[clap(long)] #[serde(default)] force: bool, }, } impl Config { - pub fn config(self) -> anyhow::Result<()> { + pub fn config(self) -> Result<()> { let crate_root = crate::cargo::crate_root()?; match self { Config::Init { name, force } => { diff --git a/src/cli/create/mod.rs b/src/cli/create/mod.rs index b92a193b7..f00bc5dd9 100644 --- a/src/cli/create/mod.rs +++ b/src/cli/create/mod.rs @@ -1,15 +1,16 @@ use super::*; +use crate::custom_error; /// Build the Rust WASM app and all of its assets. -#[derive(Clone, Debug, Default, Deserialize, StructOpt)] -#[structopt(name = "create")] +#[derive(Clone, Debug, Default, Deserialize, Parser)] +#[clap(name = "create")] pub struct Create { /// Init project name - #[structopt(default_value = ".")] + #[clap(default_value = ".")] name: String, /// Template path - #[structopt(default_value = "gh:dioxuslabs/dioxus-template", long)] + #[clap(default_value = "gh:dioxuslabs/dioxus-template", long)] template: String, } @@ -23,10 +24,7 @@ impl Create { let project_path = PathBuf::from(&self.name); if project_path.join("Dioxus.toml").is_file() || project_path.join("Cargo.toml").is_file() { - return Err(Error::Other(anyhow::anyhow!( - "🧨 Folder '{}' is initialized.", - &self.name - ))); + return custom_error!("🧨 Folder '{}' is initialized.", &self.name); } log::info!("🔧 Start to create a new project '{}'.", self.name); @@ -47,9 +45,7 @@ impl Create { .stderr(Stdio::inherit()) .output()?; if !install_output.status.success() { - return Err(Error::Other(anyhow::anyhow!( - "Try to install cargo-generate failed." - ))); + return custom_error!("Try to install cargo-generate failed."); } } @@ -63,7 +59,7 @@ impl Create { .output()?; if !generate_output.status.success() { - return Err(Error::Other(anyhow::anyhow!("Generate project failed."))); + return custom_error!("Generate project failed."); } let mut dioxus_file = File::open(project_path.join("Dioxus.toml"))?; diff --git a/src/cli/mod.rs b/src/cli/mod.rs index e3bd18b3b..8ec374933 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -6,31 +6,31 @@ pub mod create; pub mod serve; pub mod translate; -use std::{io::Write, path::PathBuf}; +use crate::custom_error; use crate::{cfg::ConfigOptsBuild, gen_page}; -use clap::{Parser}; +use crate::{cfg::ConfigOptsServe, server, CrateConfig}; +use crate::{error::Result, Error}; +use clap::Parser; +use html_parser::Dom; +use html_parser::Element; +use html_parser::Node; +use regex::Regex; use serde::Deserialize; +use std::fmt::{Display, Formatter}; +use std::fs::File; +use std::io::Read; +use std::process::exit; use std::{ fs::remove_dir_all, process::{Command, Stdio}, }; -use std::{fs::File}; -use std::{ - io::{Read}, -}; -use regex::Regex; -use crate::{error::Result, Error}; -use crate::{cfg::ConfigOptsServe, server, CrateConfig}; -use html_parser::Dom; -use html_parser::Element; -use html_parser::Node; -use std::fmt::{Display, Formatter}; -use std::process::exit; +use std::{io::Write, path::PathBuf}; +use clap::{Subcommand}; /// Build, bundle, & ship your Dioxus app. /// /// -#[derive(Parser, Debug)] +#[derive(Parser)] #[clap(name = "dioxus")] pub struct Cli { #[clap(subcommand)] @@ -42,7 +42,7 @@ pub struct Cli { // // // note: dioxus is still roughly compatible with trunk // /// Path to the Trunk config file [default: Trunk.toml] - // #[structopt(long, parse(from_os_str), env = "TRUNK_CONFIG")] + // #[clap(long, parse(from_os_str), env = "TRUNK_CONFIG")] // pub config: Option, } @@ -59,5 +59,6 @@ pub enum Commands { /// Clean output artifacts. Clean(clean::Clean), /// Dioxus config file controls. + #[clap(subcommand)] Config(config::Config), } diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index d7184f5f9..d627ace47 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -2,14 +2,14 @@ use super::*; /// Run the WASM project on dev-server #[derive(Clone, Debug, Parser)] -#[structopt(name = "serve")] +#[clap(name = "serve")] pub struct Serve { - #[structopt(flatten)] + #[clap(flatten)] pub serve: ConfigOptsServe, } impl Serve { - pub async fn serve(self) -> anyhow::Result<()> { + pub async fn serve(self) -> Result<()> { let mut crate_config = crate::CrateConfig::new()?; // change the relase state. @@ -49,7 +49,7 @@ impl Serve { return Ok(()); } _ => { - return Err(anyhow::anyhow!("Unsoppurt platform target.")); + return custom_error!("Unsoppurt platform target."); } } @@ -62,7 +62,7 @@ impl Serve { Ok(()) } - pub fn regen_dev_page(crate_config: &CrateConfig) -> anyhow::Result<()> { + pub fn regen_dev_page(crate_config: &CrateConfig) -> Result<()> { let serve_html = gen_page(&crate_config.dioxus_config, true); let mut file = std::fs::File::create( diff --git a/src/cli/translate/mod.rs b/src/cli/translate/mod.rs index 4e23533aa..55ba101cd 100644 --- a/src/cli/translate/mod.rs +++ b/src/cli/translate/mod.rs @@ -2,24 +2,24 @@ use super::*; /// Build the Rust WASM app and all of its assets. #[derive(Clone, Debug, Parser)] -#[structopt(name = "translate")] +#[clap(name = "translate")] pub struct Translate { /// Activate debug mode // short and long flags (-d, --debug) will be deduced from the field's name - #[structopt(short, long)] + #[clap(short, long)] pub component: bool, /// Input file - #[structopt(short, long)] + #[clap(short, long)] pub file: Option, /// Output file, stdout if not present - #[structopt(parse(from_os_str))] + #[clap(parse(from_os_str))] pub output: Option, } impl Translate { - pub fn translate(self) -> anyhow::Result<()> { + pub fn translate(self) -> Result<()> { let Translate { component, output, diff --git a/src/error.rs b/src/error.rs index 8684abf74..d40868333 100644 --- a/src/error.rs +++ b/src/error.rs @@ -11,6 +11,15 @@ pub enum Error { #[error("I/O Error: {0}")] IO(#[from] std::io::Error), + #[error("Format Error: {0}")] + FormatError(#[from] std::fmt::Error), + + #[error("Format failed: {0}")] + ParseError(String), + + #[error("Runtime Error: {0}")] + RuntimeError(String), + #[error("Failed to write error")] FailedToWrite, @@ -20,6 +29,9 @@ pub enum Error { #[error("Failed to write error")] CargoError(String), + #[error("{0}")] + CustomError(String), + #[error(transparent)] Other(#[from] anyhow::Error), } @@ -35,3 +47,28 @@ impl From for Error { Error::Unique(s) } } + +impl From for Error { + fn from(e: html_parser::Error) -> Self { + Self::ParseError(e.to_string()) + } +} + +impl From for Error { + fn from(e: hyper::Error) -> Self { + Self::RuntimeError(e.to_string()) + } +} + +#[macro_export] +macro_rules! custom_error { + ($msg:literal $(,)?) => { + Err(Error::CustomError($msg.to_string())) + }; + ($err:expr $(,)?) => { + Err(Error::from($err)) + }; + ($fmt:expr, $($arg:tt)*) => { + Err(Error::CustomError(format!($fmt, $($arg)*))) + }; +} diff --git a/src/main.rs b/src/main.rs index 6b8c177db..97d4a3bb4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,9 @@ +use clap::Parser; use dioxus_cli::*; -use structopt::StructOpt; #[tokio::main] async fn main() -> Result<()> { - let args = Cli::from_args(); + let args = Cli::parse(); set_up_logging(); match args.action { diff --git a/src/server/mod.rs b/src/server/mod.rs index 880f25ceb..f312e07c2 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -10,6 +10,7 @@ use notify::{RecommendedWatcher, Watcher}; use std::{path::PathBuf, sync::Arc}; use tower_http::services::ServeDir; +use crate::Result; use crate::{builder, serve::Serve, CrateConfig}; use tokio::sync::broadcast; @@ -17,7 +18,7 @@ struct WsRelodState { update: broadcast::Sender, } -pub async fn startup(config: CrateConfig) -> anyhow::Result<()> { +pub async fn startup(config: CrateConfig) -> Result<()> { log::info!("🚀 Starting development server..."); let dist_path = config.out_dir.clone(); diff --git a/tests/main.rs b/tests/main.rs index f9bb6a890..1849f5dc8 100644 --- a/tests/main.rs +++ b/tests/main.rs @@ -1,4 +1,4 @@ -#[test] -fn ready() { - println!("Compiled successfully!") -} \ No newline at end of file +#[test] +fn ready() { + println!("Compiled successfully!") +} From 59ebb9ec116449bcd77ab554b34a6bb8e09796b9 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Wed, 9 Feb 2022 21:11:41 +0800 Subject: [PATCH 053/459] feat: add `default_platform` config --- src/assets/dioxus.toml | 15 ++++++++------- src/cli/build/mod.rs | 10 +++++++++- src/cli/cfg.rs | 12 ++++++------ src/cli/serve/mod.rs | 16 ++++++++++++++-- src/config.rs | 4 ++-- 5 files changed, 39 insertions(+), 18 deletions(-) diff --git a/src/assets/dioxus.toml b/src/assets/dioxus.toml index 717b070e2..31e306079 100644 --- a/src/assets/dioxus.toml +++ b/src/assets/dioxus.toml @@ -1,23 +1,24 @@ [application] -# App (Project) Name +# dioxus project name name = "{{project-name}}" -# Dioxus App Support Platform -# desktop, web, mobile, ssr -platforms = ["web"] +# default platfrom +# you can also use `dioxus serve/build --platform XXX` to use other platform +# value: web | desktop +default_platform = "web" # Web `build` & `serve` dist path out_dir = "dist" +# resource (static) file folder +public_dir = "public" + [web.app] # HTML title tag content title = "dioxus | ⛺" -# resource (static) file folder -public_dir = "public" - [web.watcher] watch_path = ["src"] diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index 684cec58c..bae291b7e 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -22,7 +22,15 @@ impl Build { crate_config.as_example(self.build.example.unwrap()); } - match self.build.platform.as_str() { + let platform = self.build.platform.unwrap_or_else(|| { + crate_config + .dioxus_config + .application + .default_platform + .clone() + }); + + match platform.as_str() { "web" => { crate::builder::build(&crate_config)?; } diff --git a/src/cli/cfg.rs b/src/cli/cfg.rs index ece00e07e..2271f0453 100644 --- a/src/cli/cfg.rs +++ b/src/cli/cfg.rs @@ -19,9 +19,9 @@ pub struct ConfigOptsBuild { #[structopt(long)] pub example: Option, - /// Build platform: support Web & Desktop [default: "web"] - #[structopt(long, default_value = "web")] - pub platform: String, + /// Build platform: support Web & Desktop [default: "default_platform"] + #[structopt(long)] + pub platform: Option, } #[derive(Clone, Debug, Default, Deserialize, StructOpt)] @@ -39,9 +39,9 @@ pub struct ConfigOptsServe { #[serde(default)] pub release: bool, - /// Build platform: support Web & Desktop [default: "web"] - #[structopt(long, default_value = "web")] - pub platform: String, + /// Build platform: support Web & Desktop [default: "default_platform"] + #[structopt(long)] + pub platform: Option, } /// Ensure the given value for `--public-url` is formatted correctly. diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index 8f26e0f30..ff263b6b5 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -1,5 +1,9 @@ use crate::{cfg::ConfigOptsServe, gen_page, server, CrateConfig}; -use std::{io::Write, path::PathBuf, process::{Command, Stdio}}; +use std::{ + io::Write, + path::PathBuf, + process::{Command, Stdio}, +}; use structopt::StructOpt; /// Run the WASM project on dev-server @@ -21,7 +25,15 @@ impl Serve { crate_config.as_example(self.serve.example.unwrap()); } - match self.serve.platform.as_str() { + let platform = self.serve.platform.unwrap_or_else(|| { + crate_config + .dioxus_config + .application + .default_platform + .clone() + }); + + match platform.as_str() { "web" => { crate::builder::build(&crate_config)?; } diff --git a/src/config.rs b/src/config.rs index 1151445ef..a7f5d1fec 100644 --- a/src/config.rs +++ b/src/config.rs @@ -31,7 +31,7 @@ impl Default for DioxusConfig { Self { application: ApplicationConfig { name: "dioxus".into(), - platforms: vec![String::from("web")], + default_platform: "web".to_string(), out_dir: Some(PathBuf::from("dist")), }, web: WebConfig { @@ -59,7 +59,7 @@ impl Default for DioxusConfig { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ApplicationConfig { pub name: String, - pub platforms: Vec, + pub default_platform: String, pub out_dir: Option, } From a0356c7f36cc8862ec3f49f92d07330070e3fa3e Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Wed, 9 Feb 2022 21:25:29 +0800 Subject: [PATCH 054/459] fix: clean `out_dir` --- src/builder.rs | 6 ++++-- src/cli/build/mod.rs | 2 +- src/cli/serve/mod.rs | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 257072a6a..24168a934 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -120,7 +120,7 @@ pub fn build(config: &CrateConfig) -> Result<()> { Ok(()) } -pub fn build_desktop(config: &CrateConfig) -> Result<()> { +pub fn build_desktop(config: &CrateConfig, is_serve: bool) -> Result<()> { log::info!("🚅 Running build [Desktop] command..."); let mut cmd = Command::new("cargo"); @@ -146,7 +146,9 @@ pub fn build_desktop(config: &CrateConfig) -> Result<()> { } if output.status.success() { - if config.out_dir.is_dir() { + // this code will clean the output dir. + // if using the serve, we will not clean the out_dir. + if config.out_dir.is_dir() && !is_serve { remove_dir_all(&config.out_dir)?; } diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index bae291b7e..a29ba654b 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -35,7 +35,7 @@ impl Build { crate::builder::build(&crate_config)?; } "desktop" => { - crate::builder::build_desktop(&crate_config)?; + crate::builder::build_desktop(&crate_config, false)?; } _ => { return Err(anyhow::anyhow!("Unsoppurt platform target.")); diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index ff263b6b5..fe70f7914 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -38,7 +38,7 @@ impl Serve { crate::builder::build(&crate_config)?; } "desktop" => { - crate::builder::build_desktop(&crate_config)?; + crate::builder::build_desktop(&crate_config, true)?; match &crate_config.executable { crate::ExecutableType::Binary(name) From 653ee254c036653674a984cb716d0239c4c38f27 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Wed, 9 Feb 2022 21:30:00 +0800 Subject: [PATCH 055/459] docs: update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7bc1fa131..31e957111 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ dioxus-cli (inspired by wasm-pack and webpack) is a tool to help get dioxus proj ## Installation ``` -$ cargo install dioxus-cli +$ cargo install --git https://github.com/DioxusLabs/cli ``` Now, `dioxus` is in your path, you can use `dioxus --help` to get the help document. From 9d8b95dfc43023da050943300df86ba2612c72a6 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Wed, 9 Feb 2022 21:59:26 +0800 Subject: [PATCH 056/459] feat: add `public_dir` for other platform --- src/builder.rs | 31 ++++++++++++++++++++++++++++++- src/config.rs | 6 +++--- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 24168a934..1458d52ba 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -91,6 +91,7 @@ pub fn build(config: &CrateConfig) -> Result<()> { .out_name(&dioxus_config.application.name) .generate(&bindgen_outdir)?; + // this code will copy all public file to the output dir let copy_options = fs_extra::dir::CopyOptions { overwrite: true, skip_exist: false, @@ -183,9 +184,37 @@ pub fn build_desktop(config: &CrateConfig, is_serve: bool) -> Result<()> { file_name }; - create_dir_all(&config.out_dir)?; + if !config.out_dir.is_dir() { + create_dir_all(&config.out_dir)?; + } copy(res_path, &config.out_dir.join(target_file))?; + // this code will copy all public file to the output dir + if config.public_dir.is_dir() { + let copy_options = fs_extra::dir::CopyOptions { + overwrite: true, + skip_exist: false, + buffer_size: 64000, + copy_inside: false, + content_only: false, + depth: 0, + }; + + for entry in std::fs::read_dir(&config.public_dir)? { + let path = entry?.path(); + if path.is_file() { + std::fs::copy(&path, &config.out_dir.join(path.file_name().unwrap()))?; + } else { + match fs_extra::dir::copy(&path, &config.out_dir, ©_options) { + Ok(_) => {} + Err(e) => { + log::warn!("Error copying dir: {}", e); + } + } + } + } + } + log::info!( "🚩 Build completed: [./{}]", config diff --git a/src/config.rs b/src/config.rs index a7f5d1fec..5949310dd 100644 --- a/src/config.rs +++ b/src/config.rs @@ -33,11 +33,11 @@ impl Default for DioxusConfig { name: "dioxus".into(), default_platform: "web".to_string(), out_dir: Some(PathBuf::from("dist")), + public_dir: Some(PathBuf::from("public")), }, web: WebConfig { app: WebAppConfing { title: Some("dioxus | ⛺".into()), - public_dir: Some(PathBuf::from("public")), }, watcher: WebWatcherConfing { watch_path: Some(vec![PathBuf::from("src")]), @@ -61,6 +61,7 @@ pub struct ApplicationConfig { pub name: String, pub default_platform: String, pub out_dir: Option, + pub public_dir: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -73,7 +74,6 @@ pub struct WebConfig { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct WebAppConfing { pub title: Option, - pub public_dir: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -130,7 +130,7 @@ impl CrateConfig { let cargo_def = &crate_dir.join("Cargo.toml"); - let public_dir = match dioxus_config.web.app.public_dir { + let public_dir = match dioxus_config.application.public_dir { Some(ref v) => crate_dir.join(v), None => crate_dir.join("public"), }; From 62712219406ef95d83060bf637c0fa831bcc30d8 Mon Sep 17 00:00:00 2001 From: Aster Date: Thu, 10 Feb 2022 04:02:09 +0800 Subject: [PATCH 057/459] Fix format and clippy --- rustfmt.toml | 8 ++++++++ src/builder.rs | 12 +++++------- src/cli/config/mod.rs | 1 - src/cli/mod.rs | 32 +++++++++++++------------------- src/server/mod.rs | 3 +-- 5 files changed, 27 insertions(+), 29 deletions(-) create mode 100644 rustfmt.toml diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 000000000..9071fb4b5 --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1,8 @@ +version = "Two" +edition = "2018" + +imports_granularity = "Crate" +#use_small_heuristics = "Max" +#control_brace_style = "ClosingNextLine" +normalize_comments = true +format_code_in_doc_comments = true \ No newline at end of file diff --git a/src/builder.rs b/src/builder.rs index 257072a6a..f3090f85d 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -11,13 +11,11 @@ use std::{ use wasm_bindgen_cli_support::Bindgen; pub fn build(config: &CrateConfig) -> Result<()> { - /* - [1] Build the project with cargo, generating a wasm32-unknown-unknown target (is there a more specific, better target to leverage?) - [2] Generate the appropriate build folders - [3] Wasm-bindgen the .wasm fiile, and move it into the {builddir}/modules/xxxx/xxxx_bg.wasm - [4] Wasm-opt the .wasm file with whatever optimizations need to be done - [5] Link up the html page to the wasm module - */ + // [1] Build the project with cargo, generating a wasm32-unknown-unknown target (is there a more specific, better target to leverage?) + // [2] Generate the appropriate build folders + // [3] Wasm-bindgen the .wasm fiile, and move it into the {builddir}/modules/xxxx/xxxx_bg.wasm + // [4] Wasm-opt the .wasm file with whatever optimizations need to be done + // [5] Link up the html page to the wasm module let CrateConfig { out_dir, diff --git a/src/cli/config/mod.rs b/src/cli/config/mod.rs index 3cbf368e0..6d672b7a5 100644 --- a/src/cli/config/mod.rs +++ b/src/cli/config/mod.rs @@ -1,6 +1,5 @@ use super::*; - /// Build the Rust WASM app and all of its assets. #[derive(Clone, Debug, Deserialize, Subcommand)] #[clap(name = "config")] diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 8ec374933..1b5ba0be7 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -6,30 +6,25 @@ pub mod create; pub mod serve; pub mod translate; -use crate::custom_error; -use crate::{cfg::ConfigOptsBuild, gen_page}; -use crate::{cfg::ConfigOptsServe, server, CrateConfig}; -use crate::{error::Result, Error}; -use clap::Parser; -use html_parser::Dom; -use html_parser::Element; -use html_parser::Node; +use crate::{ + cfg::{ConfigOptsBuild, ConfigOptsServe}, + custom_error, + error::Result, + gen_page, server, CrateConfig, Error, +}; +use clap::{Parser, Subcommand}; +use html_parser::{Dom, Element, Node}; use regex::Regex; use serde::Deserialize; -use std::fmt::{Display, Formatter}; -use std::fs::File; -use std::io::Read; -use std::process::exit; use std::{ - fs::remove_dir_all, - process::{Command, Stdio}, + fmt::{Display, Formatter}, + fs::{remove_dir_all, File}, + io::{Read, Write}, + path::PathBuf, + process::{exit, Command, Stdio}, }; -use std::{io::Write, path::PathBuf}; -use clap::{Subcommand}; /// Build, bundle, & ship your Dioxus app. -/// -/// #[derive(Parser)] #[clap(name = "dioxus")] pub struct Cli { @@ -39,7 +34,6 @@ pub struct Cli { /// Enable verbose logging. #[clap(short)] pub v: bool, - // // // note: dioxus is still roughly compatible with trunk // /// Path to the Trunk config file [default: Trunk.toml] // #[clap(long, parse(from_os_str), env = "TRUNK_CONFIG")] diff --git a/src/server/mod.rs b/src/server/mod.rs index f312e07c2..38e37d60b 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -10,8 +10,7 @@ use notify::{RecommendedWatcher, Watcher}; use std::{path::PathBuf, sync::Arc}; use tower_http::services::ServeDir; -use crate::Result; -use crate::{builder, serve::Serve, CrateConfig}; +use crate::{builder, serve::Serve, CrateConfig, Result}; use tokio::sync::broadcast; struct WsRelodState { From 936fefbbf8da475d4b1a915c1d040161b9daee3c Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Fri, 11 Feb 2022 16:54:35 +0800 Subject: [PATCH 058/459] feat: commit code --- src/builder.rs | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 1458d52ba..c1e9fc0a7 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -5,6 +5,7 @@ use crate::{ }; use std::{ fs::{copy, create_dir_all, remove_dir_all}, + panic, path::PathBuf, process::Command, }; @@ -62,9 +63,6 @@ pub fn build(config: &CrateConfig) -> Result<()> { // [2] Establish the output directory structure let bindgen_outdir = out_dir.join("assets").join("dioxus"); - // [3] Bindgen the final binary for use easy linking - let mut bindgen_builder = Bindgen::new(); - let release_type = match config.release { true => "release", false => "debug", @@ -80,16 +78,25 @@ pub fn build(config: &CrateConfig) -> Result<()> { .join(format!("{}.wasm", name)), }; - bindgen_builder - .input_path(input_path) - .web(true)? - .debug(true) - .demangle(true) - .keep_debug(true) - .remove_name_section(false) - .remove_producers_section(false) - .out_name(&dioxus_config.application.name) - .generate(&bindgen_outdir)?; + let bindgen_result = panic::catch_unwind(move || { + // [3] Bindgen the final binary for use easy linking + let mut bindgen_builder = Bindgen::new(); + + bindgen_builder + .input_path(input_path) + .web(true).unwrap() + .debug(true) + .demangle(true) + .keep_debug(true) + .remove_name_section(false) + .remove_producers_section(false) + .out_name(&dioxus_config.application.name) + .generate(&bindgen_outdir).unwrap(); + }); + if bindgen_result.is_err() { + panic!("Bindgen build failed"); + } + // this code will copy all public file to the output dir let copy_options = fs_extra::dir::CopyOptions { From c3ba5c287decc50d82748ee502de3bc863be04e8 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Thu, 17 Feb 2022 19:28:54 +0800 Subject: [PATCH 059/459] feat: change public to `asset_dir` --- src/assets/dioxus.toml | 2 +- src/builder.rs | 10 +++++----- src/config.rs | 10 +++++----- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/assets/dioxus.toml b/src/assets/dioxus.toml index 31e306079..d3f160242 100644 --- a/src/assets/dioxus.toml +++ b/src/assets/dioxus.toml @@ -12,7 +12,7 @@ default_platform = "web" out_dir = "dist" # resource (static) file folder -public_dir = "public" +asset_dir = "public" [web.app] diff --git a/src/builder.rs b/src/builder.rs index efc5a915a..afd551dd3 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -22,7 +22,7 @@ pub fn build(config: &CrateConfig) -> Result<()> { out_dir, crate_dir, target_dir, - public_dir, + asset_dir, executable, dioxus_config, .. @@ -105,8 +105,8 @@ pub fn build(config: &CrateConfig) -> Result<()> { content_only: false, depth: 0, }; - if public_dir.is_dir() { - for entry in std::fs::read_dir(&public_dir)? { + if asset_dir.is_dir() { + for entry in std::fs::read_dir(&asset_dir)? { let path = entry?.path(); if path.is_file() { std::fs::copy(&path, out_dir.join(path.file_name().unwrap()))?; @@ -195,7 +195,7 @@ pub fn build_desktop(config: &CrateConfig, is_serve: bool) -> Result<()> { copy(res_path, &config.out_dir.join(target_file))?; // this code will copy all public file to the output dir - if config.public_dir.is_dir() { + if config.asset_dir.is_dir() { let copy_options = fs_extra::dir::CopyOptions { overwrite: true, skip_exist: false, @@ -205,7 +205,7 @@ pub fn build_desktop(config: &CrateConfig, is_serve: bool) -> Result<()> { depth: 0, }; - for entry in std::fs::read_dir(&config.public_dir)? { + for entry in std::fs::read_dir(&config.asset_dir)? { let path = entry?.path(); if path.is_file() { std::fs::copy(&path, &config.out_dir.join(path.file_name().unwrap()))?; diff --git a/src/config.rs b/src/config.rs index 5949310dd..ba0427191 100644 --- a/src/config.rs +++ b/src/config.rs @@ -33,7 +33,7 @@ impl Default for DioxusConfig { name: "dioxus".into(), default_platform: "web".to_string(), out_dir: Some(PathBuf::from("dist")), - public_dir: Some(PathBuf::from("public")), + asset_dir: Some(PathBuf::from("public")), }, web: WebConfig { app: WebAppConfing { @@ -61,7 +61,7 @@ pub struct ApplicationConfig { pub name: String, pub default_platform: String, pub out_dir: Option, - pub public_dir: Option, + pub asset_dir: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -101,7 +101,7 @@ pub struct CrateConfig { pub crate_dir: PathBuf, pub workspace_dir: PathBuf, pub target_dir: PathBuf, - pub public_dir: PathBuf, + pub asset_dir: PathBuf, pub manifest: cargo_toml::Manifest, pub executable: ExecutableType, pub dioxus_config: DioxusConfig, @@ -130,7 +130,7 @@ impl CrateConfig { let cargo_def = &crate_dir.join("Cargo.toml"); - let public_dir = match dioxus_config.application.public_dir { + let asset_dir = match dioxus_config.application.asset_dir { Some(ref v) => crate_dir.join(v), None => crate_dir.join("public"), }; @@ -154,7 +154,7 @@ impl CrateConfig { crate_dir, workspace_dir, target_dir, - public_dir, + asset_dir, manifest, executable, release, From e7acc4d88de55792606014c28c9c235bdb860f41 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Thu, 17 Feb 2022 19:32:56 +0800 Subject: [PATCH 060/459] feat: add `log info` --- src/builder.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/builder.rs b/src/builder.rs index afd551dd3..708e1ce69 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -92,7 +92,7 @@ pub fn build(config: &CrateConfig) -> Result<()> { .generate(&bindgen_outdir).unwrap(); }); if bindgen_result.is_err() { - panic!("Bindgen build failed"); + log::error!("Bindgen build failed! \nThis is probably due to the Bindgen version, dioxus-cli using `0.2.79` Bindgen crate."); } From 8a0abec82865daf78c5783d897c4d8375c0fbb6c Mon Sep 17 00:00:00 2001 From: YuKun Liu Date: Fri, 18 Feb 2022 09:50:26 +0800 Subject: [PATCH 061/459] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 33d1d4932..a939dfcaf 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ dioxus 0.1.2 Build, bundle, & ship your Dioxus app USAGE: - dioxus.exe [FLAGS] + dioxus [FLAGS] FLAGS: -h, --help Prints help information @@ -42,10 +42,10 @@ SUBCOMMANDS: ## Get Started -You can use the `dioxus crate project_name` to init a dioxus project, its will be clone from the [dioxus-template](https://github.com/DioxusLabs/dioxus-template). +You can use the `dioxus create project_name` to init a dioxus project, its will be clone from the [dioxus-template](https://github.com/DioxusLabs/dioxus-template). or you can assign the template path: ``` dioxus create hello --template gh:dioxuslabs/dioxus-template -``` \ No newline at end of file +``` From d462e032925f3a455eb0808274df69207f057fd5 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Fri, 18 Feb 2022 15:40:16 -0500 Subject: [PATCH 062/459] fix: indenting --- src/cli/translate/mod.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cli/translate/mod.rs b/src/cli/translate/mod.rs index a717d632a..3e1f1057c 100644 --- a/src/cli/translate/mod.rs +++ b/src/cli/translate/mod.rs @@ -23,7 +23,7 @@ pub struct Translate { pub file: Option, /// Output file, stdout if not present - #[structopt(parse(from_os_str))] + #[structopt(short, long)] pub output: Option, } @@ -176,6 +176,7 @@ fn component(cx: Scope) -> Element {{ } writeln!(f, "\n\nmod icons {{")?; + writeln!(f, "\tuse super::*;")?; let mut id = 0; while let Some(svg) = svg_nodes.pop() { @@ -188,7 +189,8 @@ fn component(cx: Scope) -> Element {{ write_tabs(f, 3)?; render_element(f, svg, 3, &mut svg_nodes, false, &mut 0)?; - writeln!(f, "\t\t))\n\t}}\n")?; + + writeln!(f, "\t\t))\n\t}}")?; id += 1; } From 91a8ce31690d54b8df896254e58206da2816b0cd Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Thu, 10 Mar 2022 11:29:27 +0800 Subject: [PATCH 063/459] feat: config init `platform` arg --- src/assets/autoreload.js | 4 +++- src/assets/dioxus.toml | 2 +- src/cli/config/mod.rs | 13 +++++++++++-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/assets/autoreload.js b/src/assets/autoreload.js index da62e5eae..fffb3e26c 100644 --- a/src/assets/autoreload.js +++ b/src/assets/autoreload.js @@ -1,3 +1,6 @@ +// Dioxus-CLI +// https://github.com/DioxusLabs/cli + (function () { var protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; var url = protocol + '//' + window.location.host + '/_dioxus/ws'; @@ -15,7 +18,6 @@ var ws = new WebSocket(url); ws.onmessage = (ev) => { if (ev.data == "reload") { - // alert("reload!!!"); window.location.reload(); } }; diff --git a/src/assets/dioxus.toml b/src/assets/dioxus.toml index d3f160242..af9cc886b 100644 --- a/src/assets/dioxus.toml +++ b/src/assets/dioxus.toml @@ -6,7 +6,7 @@ name = "{{project-name}}" # default platfrom # you can also use `dioxus serve/build --platform XXX` to use other platform # value: web | desktop -default_platform = "web" +default_platform = "{{default-platform}}" # Web `build` & `serve` dist path out_dir = "dist" diff --git a/src/cli/config/mod.rs b/src/cli/config/mod.rs index 6d672b7a5..2a1f28fda 100644 --- a/src/cli/config/mod.rs +++ b/src/cli/config/mod.rs @@ -13,6 +13,10 @@ pub enum Config { #[clap(long)] #[serde(default)] force: bool, + + /// Project default platform + #[clap(long, default_value = "web")] + platform: String, }, } @@ -20,7 +24,11 @@ impl Config { pub fn config(self) -> Result<()> { let crate_root = crate::cargo::crate_root()?; match self { - Config::Init { name, force } => { + Config::Init { + name, + force, + platform, + } => { let conf_path = crate_root.join("Dioxus.toml"); if conf_path.is_file() && !force { log::warn!( @@ -30,7 +38,8 @@ impl Config { } let mut file = File::create(conf_path)?; let content = String::from(include_str!("../../assets/dioxus.toml")) - .replace("{{project-name}}", &name); + .replace("{{project-name}}", &name) + .replace("{{default-platform}}", &platform); file.write_all(content.as_bytes())?; log::info!("🚩 Init config file completed."); } From 5fb1b3e20bb5f8282c735bcf7160dfdbcaf695d9 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Sat, 12 Mar 2022 13:00:07 +0800 Subject: [PATCH 064/459] feat: commit code --- Cargo.toml | 7 ++++- src/assets/dioxus.toml | 4 ++- src/cli/mod.rs | 1 + src/cli/tools.rs | 69 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 src/cli/tools.rs diff --git a/Cargo.toml b/Cargo.toml index 3ae7b4610..6a7a2c9d0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,10 +9,12 @@ license = "MIT/Apache-2.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] + # cli core clap = {version = "3.0.14", features = ["derive"]} thiserror = "1.0.30" wasm-bindgen-cli-support = "0.2.79" + # features log = "0.4.14" fern = { version = "0.6.0", features = ["colored"] } @@ -37,7 +39,10 @@ hyper = "0.14.17" axum = { version = "0.4.5", features = ["ws", "headers"] } tower-http = { version = "0.2.2", features = ["fs", "trace"] } headers = "0.3.7" -# hyper = { version = "0.14.11", features = ["full"] } + +# tools download +dirs = "4.0.0" +reqwest = { version = "0.11", features = ["json"] } [[bin]] path = "src/main.rs" diff --git a/src/assets/dioxus.toml b/src/assets/dioxus.toml index af9cc886b..b897a39a7 100644 --- a/src/assets/dioxus.toml +++ b/src/assets/dioxus.toml @@ -36,4 +36,6 @@ script = [] # Javascript code file # serve: [dev-server] only -script = [] \ No newline at end of file +script = [] + +[web.tools] diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 1b5ba0be7..9f31c60ae 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -5,6 +5,7 @@ pub mod config; pub mod create; pub mod serve; pub mod translate; +pub mod tools; use crate::{ cfg::{ConfigOptsBuild, ConfigOptsServe}, diff --git a/src/cli/tools.rs b/src/cli/tools.rs new file mode 100644 index 000000000..aa320275e --- /dev/null +++ b/src/cli/tools.rs @@ -0,0 +1,69 @@ +use std::path::PathBuf; + +pub enum Tool { + WasmOpt, +} + +pub fn app_path() { + let data_local = dirs::data_local_dir().unwrap(); + +} + +impl Tool { + pub fn name(&self) -> &str { + match self { + Self::WasmOpt => "wasm-opt", + } + } + + pub fn bin_path(&self) -> &str { + if cfg!(target_os = "windows") { + match self { + Self::WasmOpt => "bin/wasm-opt.exe", + } + } else { + match self { + Self::WasmOpt => "bin/wasm-opt", + } + } + } + + pub fn target_platform(&self) -> &str { + match self { + Self::WasmOpt => { + if cfg!(target_os = "windows") { + "windows" + } else if cfg!(target_os = "macos") { + "macos" + } else if cfg!(target_os = "linux") { + "linux" + } else { + panic!("unsupported platformm"); + } + } + } + } + + pub fn download_url(&self) -> String { + match self { + Self::WasmOpt => { + format!( + "https://github.com/WebAssembly/binaryen/releases/download/version_105/binaryen-version_105-x86_64-{target}.tar.gz", + target = self.target_platform() + ) + } + } + } + + pub async fn download_package(&self) { + + let download_dir = dirs::download_dir().unwrap(); + let download_url = self.download_url(); + + let resp = reqwest::get(download_url).await.unwrap(); + + resp. + + } + +} From 25ff6c5937b8907a734d05b6936f5f20e8113b5b Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Sat, 12 Mar 2022 23:48:05 +0800 Subject: [PATCH 065/459] feat: commit code --- Cargo.toml | 2 +- src/cli/tools.rs | 41 +++++++++++++++++++++++++++++++++-------- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 6a7a2c9d0..0b96d72a2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,7 +42,7 @@ headers = "0.3.7" # tools download dirs = "4.0.0" -reqwest = { version = "0.11", features = ["json"] } +reqwest = { version = "0.11", features = ["rustls-tls", "stream", "trust-dns"] } [[bin]] path = "src/main.rs" diff --git a/src/cli/tools.rs b/src/cli/tools.rs index aa320275e..a042e7565 100644 --- a/src/cli/tools.rs +++ b/src/cli/tools.rs @@ -1,12 +1,29 @@ -use std::path::PathBuf; +use std::{fs::create_dir_all, path::PathBuf}; + +use anyhow::Context; +use futures::StreamExt; +use tokio::io::AsyncWriteExt; pub enum Tool { WasmOpt, } -pub fn app_path() { +pub fn app_path() -> PathBuf { let data_local = dirs::data_local_dir().unwrap(); - + let dioxus_dir = data_local.join("dioxus"); + if !dioxus_dir.is_dir() { + create_dir_all(&dioxus_dir).unwrap(); + } + dioxus_dir +} + +pub fn temp_path() -> PathBuf { + let app_path = app_path(); + let temp_path = app_path.join("temp"); + if !temp_path.is_dir() { + create_dir_all(&temp_path).unwrap(); + } + temp_path } impl Tool { @@ -55,15 +72,23 @@ impl Tool { } } - pub async fn download_package(&self) { - - let download_dir = dirs::download_dir().unwrap(); + pub async fn download_package(&self) -> anyhow::Result { + let temp_dir = temp_path(); let download_url = self.download_url(); + let temp_out = temp_dir.join(format!("{}-tool.tmp", self.name())); + let mut file = tokio::fs::File::create(&temp_out) + .await + .context("failed creating temporary output file")?; + let resp = reqwest::get(download_url).await.unwrap(); - resp. + let mut res_bytes = resp.bytes_stream(); + while let Some(chunk_res) = res_bytes.next().await { + let chunk = chunk_res.context("error reading chunk from download")?; + let _ = file.write(chunk.as_ref()).await; + } + Ok(temp_out) } - } From eea01f7f8c94c00d6c8ae4cbe6bde29e184552a6 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Sun, 13 Mar 2022 13:19:54 +0800 Subject: [PATCH 066/459] feat: commit code --- Cargo.toml | 2 ++ src/cli/mod.rs | 4 ++++ src/cli/tool/mod.rs | 40 ++++++++++++++++++++++++++++++++++++++++ src/cli/tools.rs | 45 +++++++++++++++++++++++++++++++++++++++++---- src/main.rs | 6 ++++++ 5 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 src/cli/tool/mod.rs diff --git a/Cargo.toml b/Cargo.toml index 0b96d72a2..8beca8f7d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,6 +43,8 @@ headers = "0.3.7" # tools download dirs = "4.0.0" reqwest = { version = "0.11", features = ["rustls-tls", "stream", "trust-dns"] } +flate2 = "1.0.22" +tar = "0.4.38" [[bin]] path = "src/main.rs" diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 9f31c60ae..6e653507d 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -6,6 +6,7 @@ pub mod create; pub mod serve; pub mod translate; pub mod tools; +pub mod tool; use crate::{ cfg::{ConfigOptsBuild, ConfigOptsServe}, @@ -56,4 +57,7 @@ pub enum Commands { /// Dioxus config file controls. #[clap(subcommand)] Config(config::Config), + /// Install & Manage tools for Dioxus-cli. + #[clap(subcommand)] + Tool(tool::Tool), } diff --git a/src/cli/tool/mod.rs b/src/cli/tool/mod.rs new file mode 100644 index 000000000..3f3a86bfc --- /dev/null +++ b/src/cli/tool/mod.rs @@ -0,0 +1,40 @@ +use super::*; + +/// Build the Rust WASM app and all of its assets. +#[derive(Clone, Debug, Deserialize, Subcommand)] +#[clap(name = "tool")] +pub enum Tool { + /// Return all dioxus-cli support tools. + List {}, + Add { + name: String + } +} + +impl Tool { + pub async fn tool(self) -> Result<()> { + match self { + Tool::List {} => { + for item in tools::tool_list() { + if tools::Tool::from_str(item).unwrap().is_installed() { + println!("{item} [installed]"); + } else { + println!("{item}"); + } + } + } + Tool::Add { name } => { + let tool_list = tools::tool_list(); + + if !tool_list.contains(&name.as_str()) { + log::error!("Tool {name} not found."); + return Ok(()); + } + let target_tool = tools::Tool::from_str(&name).unwrap(); + println!("{:?}", target_tool.download_package().await); + } + } + + Ok(()) + } +} diff --git a/src/cli/tools.rs b/src/cli/tools.rs index a042e7565..1eb68e773 100644 --- a/src/cli/tools.rs +++ b/src/cli/tools.rs @@ -8,6 +8,10 @@ pub enum Tool { WasmOpt, } +pub fn tool_list() -> Vec<&'static str> { + vec!["wasm-opt"] +} + pub fn app_path() -> PathBuf { let data_local = dirs::data_local_dir().unwrap(); let dioxus_dir = data_local.join("dioxus"); @@ -26,7 +30,24 @@ pub fn temp_path() -> PathBuf { temp_path } +pub fn tools_path(tool: &Tool) -> PathBuf { + let app_path = app_path(); + let temp_path = app_path.join("tools"); + if !temp_path.is_dir() { + create_dir_all(&temp_path).unwrap(); + } + temp_path.join(tool.name()) +} + +#[allow(clippy::should_implement_trait)] impl Tool { + pub fn from_str(name: &str) -> Option { + match name { + "wasm-opt" => Some(Self::WasmOpt), + _ => None, + } + } + pub fn name(&self) -> &str { match self { Self::WasmOpt => "wasm-opt", @@ -72,11 +93,23 @@ impl Tool { } } - pub async fn download_package(&self) -> anyhow::Result { - let temp_dir = temp_path(); - let download_url = self.download_url(); + pub fn extension(&self) -> &str { + match self { + Self::WasmOpt => "tar.gz", + } + } - let temp_out = temp_dir.join(format!("{}-tool.tmp", self.name())); + pub fn is_installed(&self) -> bool { + tools_path(self).is_dir() + } + + pub fn temp_out_path(&self) -> PathBuf { + temp_path().join(format!("{}-tool.tmp", self.name())) + } + + pub async fn download_package(&self) -> anyhow::Result { + let download_url = self.download_url(); + let temp_out = self.temp_out_path(); let mut file = tokio::fs::File::create(&temp_out) .await .context("failed creating temporary output file")?; @@ -91,4 +124,8 @@ impl Tool { Ok(temp_out) } + + pub async fn install_package() -> anyhow::Result<()> { + Ok(()) + } } diff --git a/src/main.rs b/src/main.rs index 97d4a3bb4..099ff74c0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -42,6 +42,12 @@ async fn main() -> Result<()> { log::error!("config error: {}", e); } } + + Commands::Tool(opts) => { + if let Err(e) = opts.tool().await { + log::error!("tool error: {}", e); + } + } } Ok(()) From 140d7ad7ed1b724b19806ea8999bde84b904646d Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Mon, 14 Mar 2022 19:11:12 +0800 Subject: [PATCH 067/459] feat: commit code --- Dioxus.toml | 45 +++++++++++++++++++++++++++++++ src/assets/dioxus.toml | 6 ++++- src/cli/config/mod.rs | 5 ++++ src/cli/tool/mod.rs | 26 +++++++++++++++++- src/cli/tools.rs | 61 ++++++++++++++++++++++++++++-------------- src/config.rs | 4 ++- 6 files changed, 124 insertions(+), 23 deletions(-) create mode 100644 Dioxus.toml diff --git a/Dioxus.toml b/Dioxus.toml new file mode 100644 index 000000000..ab85abe86 --- /dev/null +++ b/Dioxus.toml @@ -0,0 +1,45 @@ +[application] + +# dioxus project name +name = "{{project-name}}" + +# default platfrom +# you can also use `dioxus serve/build --platform XXX` to use other platform +# value: web | desktop +default_platform = "{{default-platform}}" + +# Web `build` & `serve` dist path +out_dir = "dist" + +# resource (static) file folder +asset_dir = "public" + +[web.app] + +# HTML title tag content +title = "dioxus | ⛺" + +[web.watcher] + +watch_path = ["src"] + +# include `assets` in web platform +[web.resource] + +# CSS style file +style = [] + +# Javascript code file +script = [] + +[web.resource.dev] + +# Javascript code file +# serve: [dev-server] only +script = [] + +[application.tools] + +# use binaryen.wasm-opt for output Wasm file +# binaryen just will trigger in `web` platform +binaryen = { wasm_opt = [".PROJECT_OUT"] } \ No newline at end of file diff --git a/src/assets/dioxus.toml b/src/assets/dioxus.toml index b897a39a7..ab85abe86 100644 --- a/src/assets/dioxus.toml +++ b/src/assets/dioxus.toml @@ -38,4 +38,8 @@ script = [] # serve: [dev-server] only script = [] -[web.tools] +[application.tools] + +# use binaryen.wasm-opt for output Wasm file +# binaryen just will trigger in `web` platform +binaryen = { wasm_opt = [".PROJECT_OUT"] } \ No newline at end of file diff --git a/src/cli/config/mod.rs b/src/cli/config/mod.rs index 2a1f28fda..6422ede27 100644 --- a/src/cli/config/mod.rs +++ b/src/cli/config/mod.rs @@ -18,6 +18,8 @@ pub enum Config { #[clap(long, default_value = "web")] platform: String, }, + /// Format Print Dioxus-Config. + FormatPrint {} } impl Config { @@ -43,6 +45,9 @@ impl Config { file.write_all(content.as_bytes())?; log::info!("🚩 Init config file completed."); } + Config::FormatPrint {} => { + println!("{:#?}", crate::CrateConfig::new()?.dioxus_config); + } } Ok(()) } diff --git a/src/cli/tool/mod.rs b/src/cli/tool/mod.rs index 3f3a86bfc..1b8768497 100644 --- a/src/cli/tool/mod.rs +++ b/src/cli/tool/mod.rs @@ -6,6 +6,9 @@ use super::*; pub enum Tool { /// Return all dioxus-cli support tools. List {}, + /// Get default app install path. + AppPath {}, + /// Install a new tool. Add { name: String } @@ -23,6 +26,9 @@ impl Tool { } } } + Tool::AppPath {} => { + println!("{}", tools::tools_path().to_str().unwrap()); + } Tool::Add { name } => { let tool_list = tools::tool_list(); @@ -31,7 +37,25 @@ impl Tool { return Ok(()); } let target_tool = tools::Tool::from_str(&name).unwrap(); - println!("{:?}", target_tool.download_package().await); + + if target_tool.is_installed() { + log::warn!("Tool {name} is installed."); + return Ok(()); + } + + log::info!("Start to download tool package..."); + if let Err(e) = target_tool.download_package().await { + log::error!("Tool download failed: {e}"); + return Ok(()); + } + + log::info!("Start to install tool package..."); + if let Err(e) = target_tool.install_package().await { + log::error!("Tool install failed: {e}"); + return Ok(()); + } + + log::info!("Tool {name} install successfully!"); } } diff --git a/src/cli/tools.rs b/src/cli/tools.rs index 1eb68e773..257c7f856 100644 --- a/src/cli/tools.rs +++ b/src/cli/tools.rs @@ -1,15 +1,21 @@ -use std::{fs::create_dir_all, path::PathBuf}; +use std::{ + fs::{create_dir_all, File}, + path::PathBuf, +}; use anyhow::Context; +use flate2::read::GzDecoder; use futures::StreamExt; +use tar::Archive; use tokio::io::AsyncWriteExt; +#[derive(Debug, PartialEq, Eq)] pub enum Tool { - WasmOpt, + Binaryen, } pub fn tool_list() -> Vec<&'static str> { - vec!["wasm-opt"] + vec!["binaryen"] } pub fn app_path() -> PathBuf { @@ -30,45 +36,39 @@ pub fn temp_path() -> PathBuf { temp_path } -pub fn tools_path(tool: &Tool) -> PathBuf { +pub fn tools_path() -> PathBuf { let app_path = app_path(); let temp_path = app_path.join("tools"); if !temp_path.is_dir() { create_dir_all(&temp_path).unwrap(); } - temp_path.join(tool.name()) + temp_path } #[allow(clippy::should_implement_trait)] impl Tool { pub fn from_str(name: &str) -> Option { match name { - "wasm-opt" => Some(Self::WasmOpt), + "binaryen" => Some(Self::Binaryen), _ => None, } } pub fn name(&self) -> &str { match self { - Self::WasmOpt => "wasm-opt", + Self::Binaryen => "binaryen", } } pub fn bin_path(&self) -> &str { - if cfg!(target_os = "windows") { - match self { - Self::WasmOpt => "bin/wasm-opt.exe", - } - } else { - match self { - Self::WasmOpt => "bin/wasm-opt", - } + match self { + Self::Binaryen => "bin", } } pub fn target_platform(&self) -> &str { match self { - Self::WasmOpt => { + Self::Binaryen => { if cfg!(target_os = "windows") { "windows" } else if cfg!(target_os = "macos") { @@ -84,7 +84,7 @@ impl Tool { pub fn download_url(&self) -> String { match self { - Self::WasmOpt => { + Self::Binaryen => { format!( "https://github.com/WebAssembly/binaryen/releases/download/version_105/binaryen-version_105-x86_64-{target}.tar.gz", target = self.target_platform() @@ -95,12 +95,12 @@ impl Tool { pub fn extension(&self) -> &str { match self { - Self::WasmOpt => "tar.gz", + Self::Binaryen => "tar.gz", } } pub fn is_installed(&self) -> bool { - tools_path(self).is_dir() + tools_path().join(self.name()).is_dir() } pub fn temp_out_path(&self) -> PathBuf { @@ -125,7 +125,28 @@ impl Tool { Ok(temp_out) } - pub async fn install_package() -> anyhow::Result<()> { + pub async fn install_package(&self) -> anyhow::Result<()> { + let temp_path = self.temp_out_path(); + let tool_path = tools_path(); + + let dir_name = if self == &Tool::Binaryen { + "binaryen-version_105" + } else { + "" + }; + + if self.extension() == "tar.gz" { + let tar_gz = File::open(temp_path)?; + let tar = GzDecoder::new(tar_gz); + let mut archive = Archive::new(tar); + archive.unpack(&tool_path)?; + // println!("{:?} -> {:?}", tool_path.join(dir_name), tool_path.join(self.name())); + std::fs::rename( + tool_path.join(dir_name), + tool_path.join(self.name()), + )?; + } + Ok(()) } } diff --git a/src/config.rs b/src/config.rs index ba0427191..f7897f5f8 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,6 +1,6 @@ use crate::error::Result; use serde::{Deserialize, Serialize}; -use std::{fs::File, io::Read, path::PathBuf}; +use std::{fs::File, io::Read, path::PathBuf, collections::HashMap}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct DioxusConfig { @@ -34,6 +34,7 @@ impl Default for DioxusConfig { default_platform: "web".to_string(), out_dir: Some(PathBuf::from("dist")), asset_dir: Some(PathBuf::from("public")), + tools: None, }, web: WebConfig { app: WebAppConfing { @@ -62,6 +63,7 @@ pub struct ApplicationConfig { pub default_platform: String, pub out_dir: Option, pub asset_dir: Option, + pub tools: Option> } #[derive(Debug, Clone, Serialize, Deserialize)] From 2e83822d415e8d29503defb56eec5cccb0231ed3 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Mon, 14 Mar 2022 22:39:15 +0800 Subject: [PATCH 068/459] feat: commit code --- Dioxus.toml | 4 ++-- src/cli/mod.rs | 1 - src/cli/tool/mod.rs | 2 ++ src/lib.rs | 2 ++ src/{cli => }/tools.rs | 11 +++++++++++ 5 files changed, 17 insertions(+), 3 deletions(-) rename src/{cli => }/tools.rs (92%) diff --git a/Dioxus.toml b/Dioxus.toml index ab85abe86..2db611914 100644 --- a/Dioxus.toml +++ b/Dioxus.toml @@ -1,12 +1,12 @@ [application] # dioxus project name -name = "{{project-name}}" +name = "dioxus-cli" # default platfrom # you can also use `dioxus serve/build --platform XXX` to use other platform # value: web | desktop -default_platform = "{{default-platform}}" +default_platform = "desktop" # Web `build` & `serve` dist path out_dir = "dist" diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 6e653507d..2c91c94dd 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -5,7 +5,6 @@ pub mod config; pub mod create; pub mod serve; pub mod translate; -pub mod tools; pub mod tool; use crate::{ diff --git a/src/cli/tool/mod.rs b/src/cli/tool/mod.rs index 1b8768497..51e41e384 100644 --- a/src/cli/tool/mod.rs +++ b/src/cli/tool/mod.rs @@ -1,3 +1,5 @@ +use crate::tools; + use super::*; /// Build the Rust WASM app and all of its assets. diff --git a/src/lib.rs b/src/lib.rs index 395cbc8dc..8cd4b1f2d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,7 @@ pub mod builder; pub mod server; +pub mod tools; + pub use builder::*; pub mod cargo; diff --git a/src/cli/tools.rs b/src/tools.rs similarity index 92% rename from src/cli/tools.rs rename to src/tools.rs index 257c7f856..b5c9d658a 100644 --- a/src/cli/tools.rs +++ b/src/tools.rs @@ -47,6 +47,8 @@ pub fn tools_path() -> PathBuf { #[allow(clippy::should_implement_trait)] impl Tool { + + /// from str to tool enum pub fn from_str(name: &str) -> Option { match name { "binaryen" => Some(Self::Binaryen), @@ -54,18 +56,21 @@ impl Tool { } } + /// get current tool name str pub fn name(&self) -> &str { match self { Self::Binaryen => "binaryen", } } + /// get tool bin dir path pub fn bin_path(&self) -> &str { match self { Self::Binaryen => "bin", } } + /// get target platform pub fn target_platform(&self) -> &str { match self { Self::Binaryen => { @@ -82,6 +87,7 @@ impl Tool { } } + /// get tool package download url pub fn download_url(&self) -> String { match self { Self::Binaryen => { @@ -93,20 +99,24 @@ impl Tool { } } + /// get package extension name pub fn extension(&self) -> &str { match self { Self::Binaryen => "tar.gz", } } + /// check tool state pub fn is_installed(&self) -> bool { tools_path().join(self.name()).is_dir() } + /// get download temp path pub fn temp_out_path(&self) -> PathBuf { temp_path().join(format!("{}-tool.tmp", self.name())) } + /// start to download package pub async fn download_package(&self) -> anyhow::Result { let download_url = self.download_url(); let temp_out = self.temp_out_path(); @@ -125,6 +135,7 @@ impl Tool { Ok(temp_out) } + /// start to install package pub async fn install_package(&self) -> anyhow::Result<()> { let temp_path = self.temp_out_path(); let tool_path = tools_path(); From 3514e341124bd9f0b9f91ad6604c071cd9296685 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Tue, 15 Mar 2022 00:22:41 +0800 Subject: [PATCH 069/459] feat: commit code --- Dioxus.toml | 2 +- src/builder.rs | 27 +++++++++++++++++++++++++-- src/cli/build/mod.rs | 1 + src/tools.rs | 34 +++++++++++++++++++++++++++++----- 4 files changed, 56 insertions(+), 8 deletions(-) diff --git a/Dioxus.toml b/Dioxus.toml index 2db611914..c3e0dd8a0 100644 --- a/Dioxus.toml +++ b/Dioxus.toml @@ -42,4 +42,4 @@ script = [] # use binaryen.wasm-opt for output Wasm file # binaryen just will trigger in `web` platform -binaryen = { wasm_opt = [".PROJECT_OUT"] } \ No newline at end of file +binaryen = { wasm_opt = true } \ No newline at end of file diff --git a/src/builder.rs b/src/builder.rs index 708e1ce69..870e737f0 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -82,19 +82,42 @@ pub fn build(config: &CrateConfig) -> Result<()> { bindgen_builder .input_path(input_path) - .web(true).unwrap() + .web(true) + .unwrap() .debug(true) .demangle(true) .keep_debug(true) .remove_name_section(false) .remove_producers_section(false) .out_name(&dioxus_config.application.name) - .generate(&bindgen_outdir).unwrap(); + .generate(&bindgen_outdir) + .unwrap(); }); if bindgen_result.is_err() { log::error!("Bindgen build failed! \nThis is probably due to the Bindgen version, dioxus-cli using `0.2.79` Bindgen crate."); } + // check binaryen:wasm-opt tool + let dioxus_tools = dioxus_config.application.tools.clone().unwrap_or_default(); + if dioxus_tools.contains_key("binaryen") { + let info = dioxus_tools.get("binaryen").unwrap(); + let binaryen = crate::tools::Tool::Binaryen; + if let Some(sub) = info.as_table() { + println!("sub: {sub:?}"); + if sub.contains_key("wasm_opt") + && sub.get("wasm_opt").unwrap().as_bool().unwrap_or(false) + { + let target_file = out_dir + .join("assets") + .join("dioxus") + .join(format!("{}_bg.wasm", dioxus_config.application.name)); + println!("tf: {target_file:?}"); + if target_file.is_file() { + binaryen.call("wasm-opt", vec![target_file.to_str().unwrap(), "--print"])?; + } + } + } + } // this code will copy all public file to the output dir let copy_options = fs_extra::dir::CopyOptions { diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index 4c043091f..3b4d343af 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -12,6 +12,7 @@ impl Build { pub fn build(self) -> Result<()> { let mut crate_config = crate::CrateConfig::new()?; + // change the release state. crate_config.with_release(self.build.release); diff --git a/src/tools.rs b/src/tools.rs index b5c9d658a..b84cd5579 100644 --- a/src/tools.rs +++ b/src/tools.rs @@ -1,6 +1,7 @@ use std::{ fs::{create_dir_all, File}, path::PathBuf, + process::Command, }; use anyhow::Context; @@ -47,7 +48,6 @@ pub fn tools_path() -> PathBuf { #[allow(clippy::should_implement_trait)] impl Tool { - /// from str to tool enum pub fn from_str(name: &str) -> Option { match name { @@ -152,12 +152,36 @@ impl Tool { let mut archive = Archive::new(tar); archive.unpack(&tool_path)?; // println!("{:?} -> {:?}", tool_path.join(dir_name), tool_path.join(self.name())); - std::fs::rename( - tool_path.join(dir_name), - tool_path.join(self.name()), - )?; + std::fs::rename(tool_path.join(dir_name), tool_path.join(self.name()))?; } Ok(()) } + + pub fn call(&self, command: &str, args: Vec<&str>) -> anyhow::Result<()> { + let bin_path = tools_path().join(self.name()).join(self.bin_path()); + + let command_file = match self { + Tool::Binaryen => { + if cfg!(target_os = "windows") { + format!("{}.exe", command) + } else { + command.to_string() + } + } + }; + + if !bin_path.join(command_file).is_file() { + return Err(anyhow::anyhow!("Command file not found.")); + } + + let mut command = Command::new(bin_path.to_str().unwrap()); + + command + .args(&args[..]) + .stdout(std::process::Stdio::inherit()) + .stderr(std::process::Stdio::inherit()); + + Ok(()) + } } From 62a2292c16e54fe46c1438d7629ed67831eb5018 Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Tue, 15 Mar 2022 17:32:42 +0800 Subject: [PATCH 070/459] feat: commit code --- src/builder.rs | 18 +++++++++++++++--- src/tools.rs | 14 +++++++------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 870e737f0..ac9f72b13 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -95,6 +95,7 @@ pub fn build(config: &CrateConfig) -> Result<()> { }); if bindgen_result.is_err() { log::error!("Bindgen build failed! \nThis is probably due to the Bindgen version, dioxus-cli using `0.2.79` Bindgen crate."); + return Ok(()); } // check binaryen:wasm-opt tool @@ -102,8 +103,13 @@ pub fn build(config: &CrateConfig) -> Result<()> { if dioxus_tools.contains_key("binaryen") { let info = dioxus_tools.get("binaryen").unwrap(); let binaryen = crate::tools::Tool::Binaryen; + + if !binaryen.is_installed() { + log::error!("Binaryen tool not found, you can use `dioxus tool add binaryen` to install it."); + return Ok(()); + } + if let Some(sub) = info.as_table() { - println!("sub: {sub:?}"); if sub.contains_key("wasm_opt") && sub.get("wasm_opt").unwrap().as_bool().unwrap_or(false) { @@ -111,9 +117,15 @@ pub fn build(config: &CrateConfig) -> Result<()> { .join("assets") .join("dioxus") .join(format!("{}_bg.wasm", dioxus_config.application.name)); - println!("tf: {target_file:?}"); if target_file.is_file() { - binaryen.call("wasm-opt", vec![target_file.to_str().unwrap(), "--print"])?; + binaryen.call( + "wasm-opt", + vec![ + target_file.to_str().unwrap(), + "-o", + target_file.to_str().unwrap(), + ], + )?; } } } diff --git a/src/tools.rs b/src/tools.rs index b84cd5579..937063be0 100644 --- a/src/tools.rs +++ b/src/tools.rs @@ -158,7 +158,7 @@ impl Tool { Ok(()) } - pub fn call(&self, command: &str, args: Vec<&str>) -> anyhow::Result<()> { + pub fn call(&self, command: &str, args: Vec<&str>) -> anyhow::Result> { let bin_path = tools_path().join(self.name()).join(self.bin_path()); let command_file = match self { @@ -171,17 +171,17 @@ impl Tool { } }; - if !bin_path.join(command_file).is_file() { + if !bin_path.join(&command_file).is_file() { return Err(anyhow::anyhow!("Command file not found.")); } - let mut command = Command::new(bin_path.to_str().unwrap()); + let mut command = Command::new(bin_path.join(&command_file).to_str().unwrap()); - command + let output = command .args(&args[..]) .stdout(std::process::Stdio::inherit()) - .stderr(std::process::Stdio::inherit()); - - Ok(()) + .stderr(std::process::Stdio::inherit()) + .output()?; + Ok(output.stdout) } } From 8b380f2617f3845db6d7006790312290c85cf19c Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Tue, 15 Mar 2022 18:28:19 +0800 Subject: [PATCH 071/459] feat: commit code --- src/builder.rs | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index ac9f72b13..d58af6f43 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -105,29 +105,30 @@ pub fn build(config: &CrateConfig) -> Result<()> { let binaryen = crate::tools::Tool::Binaryen; if !binaryen.is_installed() { - log::error!("Binaryen tool not found, you can use `dioxus tool add binaryen` to install it."); - return Ok(()); - } - - if let Some(sub) = info.as_table() { - if sub.contains_key("wasm_opt") - && sub.get("wasm_opt").unwrap().as_bool().unwrap_or(false) - { - let target_file = out_dir - .join("assets") - .join("dioxus") - .join(format!("{}_bg.wasm", dioxus_config.application.name)); - if target_file.is_file() { - binaryen.call( - "wasm-opt", - vec![ - target_file.to_str().unwrap(), - "-o", - target_file.to_str().unwrap(), - ], - )?; + if let Some(sub) = info.as_table() { + if sub.contains_key("wasm_opt") + && sub.get("wasm_opt").unwrap().as_bool().unwrap_or(false) + { + let target_file = out_dir + .join("assets") + .join("dioxus") + .join(format!("{}_bg.wasm", dioxus_config.application.name)); + if target_file.is_file() { + binaryen.call( + "wasm-opt", + vec![ + target_file.to_str().unwrap(), + "-o", + target_file.to_str().unwrap(), + ], + )?; + } } } + } else { + log::warn!( + "Binaryen tool not found, you can use `dioxus tool add binaryen` to install it." + ); } } From 6b0d57abe5c70ebd8cc7cdcc9f14fea5c8b738dd Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Sun, 20 Mar 2022 18:39:28 +0800 Subject: [PATCH 072/459] feat: commit code --- Cargo.toml | 2 +- src/server/mod.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 8beca8f7d..246e90517 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dioxus-cli" -version = "0.1.3" +version = "0.1.4" authors = ["Jonathan Kelley"] edition = "2018" description = "CLI tool for developing, testing, and publishing Dioxus apps" diff --git a/src/server/mod.rs b/src/server/mod.rs index 38e37d60b..7d63f3eb6 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -33,6 +33,7 @@ pub async fn startup(config: CrateConfig) -> Result<()> { // file watcher: check file change let watcher_conf = config.clone(); let mut watcher = RecommendedWatcher::new(move |_: notify::Result| { + log::info!("Start to rebuild project..."); if chrono::Local::now().timestamp() > last_update_time && builder::build(&watcher_conf).is_ok() { @@ -47,8 +48,7 @@ pub async fn startup(config: CrateConfig) -> Result<()> { { let _ = Serve::regen_dev_page(&watcher_conf); } - println!("watcher send reload"); - reload_tx.send("reload".into()).unwrap(); + let _ = reload_tx.send("reload".into()); last_update_time = chrono::Local::now().timestamp(); } }) From e5dfe84eb1f8c821fa875744ed7ec541de8013ad Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Sun, 20 Mar 2022 19:31:30 +0800 Subject: [PATCH 073/459] feat: add `custom html` support --- src/assets/index.html | 2 -- src/builder.rs | 17 +++++++++++++++-- src/cli/config/mod.rs | 13 +++++++++++-- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/assets/index.html b/src/assets/index.html index 9934e490d..925df0227 100644 --- a/src/assets/index.html +++ b/src/assets/index.html @@ -4,11 +4,9 @@ {style_include} -
- {script_include} From 4867cb5cf30f06635142837cf790480b37aa5fdc Mon Sep 17 00:00:00 2001 From: YuKun Liu Date: Sat, 2 Apr 2022 23:51:52 +0800 Subject: [PATCH 089/459] Update config.rs --- src/config.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config.rs b/src/config.rs index 3fc63637c..e664edbfc 100644 --- a/src/config.rs +++ b/src/config.rs @@ -65,7 +65,7 @@ pub struct ApplicationConfig { pub default_platform: String, pub out_dir: Option, pub asset_dir: Option, - pub tools: Option> + pub tools: Option>, pub sub_package: Option, } From 280480de6bd7c9d95910be0932edb31b984827f3 Mon Sep 17 00:00:00 2001 From: Ben Birch Date: Thu, 7 Apr 2022 15:22:46 +1000 Subject: [PATCH 090/459] - set index on 404 to true (highly desired for SPA) - add support for web.base_path in dioxus.toml to allow multi level routes --- src/assets/index.html | 45 +++++++++++++++++++++++-------------------- src/builder.rs | 12 +++++++++--- src/config.rs | 4 +++- 3 files changed, 36 insertions(+), 25 deletions(-) diff --git a/src/assets/index.html b/src/assets/index.html index bff411bee..f907aa281 100644 --- a/src/assets/index.html +++ b/src/assets/index.html @@ -1,23 +1,26 @@ - - {app_title} - - - - {style_include} - - -
- - - {script_include} - - + + {app_title} + + + + {style_include} + + + + +
+ + + {script_include} + + + \ No newline at end of file diff --git a/src/builder.rs b/src/builder.rs index 708e1ce69..bacfcd664 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -82,20 +82,21 @@ pub fn build(config: &CrateConfig) -> Result<()> { bindgen_builder .input_path(input_path) - .web(true).unwrap() + .web(true) + .unwrap() .debug(true) .demangle(true) .keep_debug(true) .remove_name_section(false) .remove_producers_section(false) .out_name(&dioxus_config.application.name) - .generate(&bindgen_outdir).unwrap(); + .generate(&bindgen_outdir) + .unwrap(); }); if bindgen_result.is_err() { log::error!("Bindgen build failed! \nThis is probably due to the Bindgen version, dioxus-cli using `0.2.79` Bindgen crate."); } - // this code will copy all public file to the output dir let copy_options = fs_extra::dir::CopyOptions { overwrite: true, @@ -278,6 +279,11 @@ pub fn gen_page(config: &DioxusConfig, serve: bool) -> String { html = html.replace("{app_name}", &config.application.name); + html = match &config.web.app.base_path { + Some(path) => html.replace("{base_path}", path), + None => html.replace("{base_path}", "."), + }; + let title = config .web .app diff --git a/src/config.rs b/src/config.rs index fbf6f4b9d..9e8b47f7a 100644 --- a/src/config.rs +++ b/src/config.rs @@ -39,11 +39,12 @@ impl Default for DioxusConfig { web: WebConfig { app: WebAppConfing { title: Some("dioxus | ⛺".into()), + base_path: None, }, watcher: WebWatcherConfing { watch_path: Some(vec![PathBuf::from("src")]), reload_html: Some(false), - index_on_404: Some(false), + index_on_404: Some(true), }, resource: WebResourceConfing { dev: WebDevResourceConfing { @@ -77,6 +78,7 @@ pub struct WebConfig { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct WebAppConfing { pub title: Option, + pub base_path: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] From 714c6dd46ff383abfa749e6c3d9d82bbbfd6bdb5 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sun, 17 Apr 2022 11:24:17 +0800 Subject: [PATCH 091/459] Upgrade `axum` version --- Cargo.toml | 2 +- src/builder.rs | 8 ++++---- src/cli/serve/mod.rs | 15 ++++----------- 3 files changed, 9 insertions(+), 16 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 5f5ded9be..21e2dad7e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,7 +36,7 @@ chrono = "0.4.19" anyhow = "1.0.53" hyper = "0.14.17" -axum = { version = "0.4.5", features = ["ws", "headers"] } +axum = { version = "0.5.1", features = ["ws", "headers"] } tower-http = { version = "0.2.2", features = ["fs", "trace"] } headers = "0.3.7" # tools download diff --git a/src/builder.rs b/src/builder.rs index aaaa0278a..09a410458 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -206,16 +206,16 @@ pub fn build_desktop(config: &CrateConfig, is_serve: bool) -> Result<()> { file_name = name.clone(); config .target_dir - .join(release_type.to_string()) - .join(name.to_string()) + .join(release_type) + .join(name) } crate::ExecutableType::Example(name) => { file_name = name.clone(); config .target_dir - .join(release_type.to_string()) + .join(release_type) .join("examples") - .join(name.to_string()) + .join(name) } }; diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index 21d29cd93..85bd92c74 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -1,9 +1,9 @@ +use super::*; use std::{ io::Write, path::PathBuf, process::{Command, Stdio}, }; -use super::*; /// Run the WASM project on dev-server #[derive(Clone, Debug, Parser)] @@ -47,16 +47,9 @@ impl Serve { if cfg!(windows) { file.set_extension("exe"); } - Command::new( - crate_config - .out_dir - .join(file) - .to_str() - .unwrap() - .to_string(), - ) - .stdout(Stdio::inherit()) - .output()?; + Command::new(crate_config.out_dir.join(file).to_str().unwrap()) + .stdout(Stdio::inherit()) + .output()?; } } return Ok(()); From 001410f1196f2ea6fe35084b5d489f48d104ca83 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sun, 17 Apr 2022 11:25:53 +0800 Subject: [PATCH 092/459] Format code --- src/builder.rs | 7 ++----- src/cli/build/mod.rs | 1 - src/cli/config/mod.rs | 2 +- src/cli/mod.rs | 2 +- src/cli/tool/mod.rs | 6 ++---- src/config.rs | 2 +- 6 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 09a410458..f7f68e2bc 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -132,7 +132,7 @@ pub fn build(config: &CrateConfig) -> Result<()> { ); } } - + // this code will copy all public file to the output dir let copy_options = fs_extra::dir::CopyOptions { overwrite: true, @@ -204,10 +204,7 @@ pub fn build_desktop(config: &CrateConfig, is_serve: bool) -> Result<()> { let mut res_path = match &config.executable { crate::ExecutableType::Binary(name) | crate::ExecutableType::Lib(name) => { file_name = name.clone(); - config - .target_dir - .join(release_type) - .join(name) + config.target_dir.join(release_type).join(name) } crate::ExecutableType::Example(name) => { file_name = name.clone(); diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index 3b4d343af..4c043091f 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -12,7 +12,6 @@ impl Build { pub fn build(self) -> Result<()> { let mut crate_config = crate::CrateConfig::new()?; - // change the release state. crate_config.with_release(self.build.release); diff --git a/src/cli/config/mod.rs b/src/cli/config/mod.rs index fb1e046fb..5f9fa20d0 100644 --- a/src/cli/config/mod.rs +++ b/src/cli/config/mod.rs @@ -21,7 +21,7 @@ pub enum Config { /// Format print Dioxus config. FormatPrint {}, /// Create a custom html file. - CustomHtml {} + CustomHtml {}, } impl Config { diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 2c91c94dd..d639d28a7 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -4,8 +4,8 @@ pub mod clean; pub mod config; pub mod create; pub mod serve; -pub mod translate; pub mod tool; +pub mod translate; use crate::{ cfg::{ConfigOptsBuild, ConfigOptsServe}, diff --git a/src/cli/tool/mod.rs b/src/cli/tool/mod.rs index 51e41e384..d5c4581aa 100644 --- a/src/cli/tool/mod.rs +++ b/src/cli/tool/mod.rs @@ -11,9 +11,7 @@ pub enum Tool { /// Get default app install path. AppPath {}, /// Install a new tool. - Add { - name: String - } + Add { name: String }, } impl Tool { @@ -33,7 +31,7 @@ impl Tool { } Tool::Add { name } => { let tool_list = tools::tool_list(); - + if !tool_list.contains(&name.as_str()) { log::error!("Tool {name} not found."); return Ok(()); diff --git a/src/config.rs b/src/config.rs index 0cdd0bd8b..783c72ccd 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,6 +1,6 @@ use crate::error::Result; use serde::{Deserialize, Serialize}; -use std::{fs::File, io::Read, path::PathBuf, collections::HashMap}; +use std::{collections::HashMap, fs::File, io::Read, path::PathBuf}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct DioxusConfig { From 569b294ab9fe98960f89c9eb4e75158f7db4b8cb Mon Sep 17 00:00:00 2001 From: Michael Mroz Date: Sun, 17 Apr 2022 01:13:48 -0700 Subject: [PATCH 093/459] Opt into standards mode --- src/assets/index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/src/assets/index.html b/src/assets/index.html index f57acbd34..87d447816 100644 --- a/src/assets/index.html +++ b/src/assets/index.html @@ -1,3 +1,4 @@ + {app_title} From f203b5f99d7bed69f638073ac86fd911b14f2c19 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sun, 24 Apr 2022 10:44:06 +0800 Subject: [PATCH 094/459] Move `docs` to cli repo --- .github/workflows/docs.yml | 32 ++++++++ docs/.gitignore | 1 + docs/book.toml | 6 ++ docs/src/SUMMARY.md | 11 +++ docs/src/cmd/README.md | 26 +++++++ docs/src/cmd/build.md | 47 ++++++++++++ docs/src/cmd/clean.md | 18 +++++ docs/src/cmd/serve.md | 49 +++++++++++++ docs/src/cmd/translate.md | 57 ++++++++++++++ docs/src/configure.md | 147 +++++++++++++++++++++++++++++++++++++ docs/src/creating.md | 38 ++++++++++ docs/src/installation.md | 24 ++++++ docs/src/introduction.md | 21 ++++++ 13 files changed, 477 insertions(+) create mode 100644 .github/workflows/docs.yml create mode 100644 docs/.gitignore create mode 100644 docs/book.toml create mode 100644 docs/src/SUMMARY.md create mode 100644 docs/src/cmd/README.md create mode 100644 docs/src/cmd/build.md create mode 100644 docs/src/cmd/clean.md create mode 100644 docs/src/cmd/serve.md create mode 100644 docs/src/cmd/translate.md create mode 100644 docs/src/configure.md create mode 100644 docs/src/creating.md create mode 100644 docs/src/installation.md create mode 100644 docs/src/introduction.md diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 000000000..2638b8a18 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,32 @@ +name: github pages + +on: + push: + paths: + - docs/** + - .github/workflows/docs.yml + branches: + - master + +jobs: + build-deploy: + runs-on: ubuntu-latest + environment: docs + steps: + - uses: actions/checkout@v2 + + - name: Setup mdBook + uses: peaceiris/actions-mdbook@v1 + with: + mdbook-version: "0.4.10" + + - name: Build + run: cd docs && md build -d ../build + + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@v4.2.3 + with: + branch: gh-pages # The branch the action should deploy to. + folder: build # The folder the action should deploy. + clean: false + token: ${{ secrets.DEPLOY_KEY }} # let's pretend I don't need it for now diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 000000000..7585238ef --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1 @@ +book diff --git a/docs/book.toml b/docs/book.toml new file mode 100644 index 000000000..c5c216fe4 --- /dev/null +++ b/docs/book.toml @@ -0,0 +1,6 @@ +[book] +authors = ["YuKun Liu"] +language = "en" +multilingual = false +src = "src" +title = "Dioxus Cli" diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md new file mode 100644 index 000000000..ed7bcbfaf --- /dev/null +++ b/docs/src/SUMMARY.md @@ -0,0 +1,11 @@ +# Summary + +- [Introduction](./introduction.md) +- [Installation](./installation.md) +- [Create a Project](./creating.md) +- [Configure Project](./configure.md) +- [Commands](./cmd/README.md) + - [Build](./cmd/build.md) + - [Serve](./cmd/serve.md) + - [Clean](./cmd/clean.md) + - [Translate](./cmd/translate.md) \ No newline at end of file diff --git a/docs/src/cmd/README.md b/docs/src/cmd/README.md new file mode 100644 index 000000000..c642b475f --- /dev/null +++ b/docs/src/cmd/README.md @@ -0,0 +1,26 @@ +# Commands + +In this chapter we will introduce all `dioxus-cli` commands. + +> you can also use `dioxus --help` to get cli help info. + +``` +dioxus +Build, bundle, & ship your Dioxus app + +USAGE: + dioxus [OPTIONS] + +OPTIONS: + -h, --help Print help information + -v Enable verbose logging + +SUBCOMMANDS: + build Build the Rust WASM app and all of its assets + clean Clean output artifacts + config Dioxus config file controls + create Init a new project for Dioxus + help Print this message or the help of the given subcommand(s) + serve Build, watch & serve the Rust WASM app and all of its assets + translate Translate some source file into Dioxus code +``` \ No newline at end of file diff --git a/docs/src/cmd/build.md b/docs/src/cmd/build.md new file mode 100644 index 000000000..e81973f2d --- /dev/null +++ b/docs/src/cmd/build.md @@ -0,0 +1,47 @@ +# Build + +The `dioxus build` command can help you `pack & build` a dioxus project. + +``` +dioxus-build +Build the Rust WASM app and all of its assets + +USAGE: + dioxus build [OPTIONS] + +OPTIONS: + --example [default: ""] + --platform [default: "default_platform"] + --release [default: false] +``` + +You can use this command to build project to `out_dir` : + +``` +dioxus build --release +``` + +## Target platform + +Use option `platform` choose build target platform: + +``` +# for desktop project +dioxus build --platform desktop +``` + +`platform` only supports `desktop` & `web`. + +``` +# for web project +dioxus build --platform web +``` + +## Build Example + +You can use `--example {name}` to build a example code. + +``` +# build `example/test` code +dioxus build --exmaple test +``` \ No newline at end of file diff --git a/docs/src/cmd/clean.md b/docs/src/cmd/clean.md new file mode 100644 index 000000000..2f889c1a8 --- /dev/null +++ b/docs/src/cmd/clean.md @@ -0,0 +1,18 @@ +# Clean + +`dioxus clean` will call `target clean` and remove `out_dir` directory. + +``` +dioxus-clean +Clean output artifacts + +USAGE: + dioxus clean +``` + +you can use this command to clean all build cache and the `out_dir` content. + +``` +dioxus clean +``` + diff --git a/docs/src/cmd/serve.md b/docs/src/cmd/serve.md new file mode 100644 index 000000000..e5c10a902 --- /dev/null +++ b/docs/src/cmd/serve.md @@ -0,0 +1,49 @@ +# Serve + +The `dioxus serve` can start a dev server (include hot-reload tool) to run the project. + +``` +dioxus-serve +Build, watch & serve the Rust WASM app and all of its assets + +USAGE: + dioxus serve [OPTIONS] + +OPTIONS: + --example [default: ""] + --platform [default: "default_platform"] + --release [default: false] +``` + +You can use this command to build project and start a `dev server` : + +``` +dioxus serve +``` + +## Target platform + +Use option `platform` choose build target platform: + +``` +# for desktop project +dioxus serve --platform desktop +``` + +`platform` only supports `desktop` & `web`. + +`dev-server` only for `web` project. + +``` +# for web project +dioxus serve --platform web +``` + +## Serve Example + +You can use `--example {name}` to start a example code. + +``` +# build `example/test` code +dioxus serve --exmaple test +``` \ No newline at end of file diff --git a/docs/src/cmd/translate.md b/docs/src/cmd/translate.md new file mode 100644 index 000000000..415a88fba --- /dev/null +++ b/docs/src/cmd/translate.md @@ -0,0 +1,57 @@ +# Translate + +`dioxus translate` can translate some source file into Dioxus code. + +``` +dioxus-translate +Translate some source file into Dioxus code + +USAGE: + dioxus translate [OPTIONS] [OUTPUT] + +ARGS: + Output file, stdout if not present + +OPTIONS: + -c, --component Activate debug mode + -f, --file Input file +``` + +## Translate HTML to stdout + +``` +dioxus transtale --file ./index.html +``` + +## Output in a file + +``` +dioxus translate --component --file ./index.html component.rsx +``` + +set `component` flag will wrap `dioxus rsx` code in a component function. + +## Example + +```html +
+

Hello World

+ Link +
+``` + +Translate HTML to Dioxus component code. + +```rust +fn component(cx: Scope) -> Element { + cx.render(rsx! { + div { + h1 { "Hello World" }, + a { + href: "https://dioxuslabs.com/", + "Link" + } + } + }) +} +``` \ No newline at end of file diff --git a/docs/src/configure.md b/docs/src/configure.md new file mode 100644 index 000000000..f274ce70d --- /dev/null +++ b/docs/src/configure.md @@ -0,0 +1,147 @@ +# Configure Project + +This chapter will introduce `Dioxus.toml` and anatomy the config file. + +## Structure + +We use `toml` to define some info for `dioxus` project. + +### Application + +1. ***name*** - project name & title +2. ***default_platform*** - which platform target for this project. + ``` + # current support: web, desktop + # default: web + default_platform = "web" + ``` + change this to `desktop`, the `dioxus build & serve` will default build desktop app. +3. ***out_dir*** - which directory to put the output file; use `dioxus build & service`, the output will put at this directory, and the `assets` will be also copy to here. + ``` + out_dir = "dist" + ``` +4. ***asset_dir*** - which direcotry to put your `static, assets` file, cli will automatic copy all file to `out_dir`, so you can put some resource file in there, like `CSS, JS, Image` file. + ``` + asset_dir = "public" + ``` + +### Web.App + +Web platform application config: + +1. ***title*** - this value will display on the web page title. like `` tag. + ``` + # HTML title tag content + title = "dioxus app | ⛺" + ``` + +### Web.Watcher + +Web platform `dev-server` watcher config: + +1. ***reload_html*** - a boolean value; when watcher trigger, regenerate `index.html` file. + ``` + # when watcher trigger, regenerate the `index.html` + reload_html = true + ``` +2. ***watch_path*** - which files & directories will be watcher monitoring. + ``` + watch_path = ["src", "public"] + ``` + +### Web.Resource + +Include some `CSS Javascript` resources into html file. + +1. ***style*** - include some style(CSS) file into html. + ``` + style = [ + # include from public_dir. + "./assets/style.css", + # or some asset from online cdn. + "https://cdn.jsdelivr.net/npm/bootstrap/dist/css/bootstrap.css" + ] + ``` +2. ***script*** - include some script(JS) file into html. + ``` + style = [ + # include from public_dir. + "./assets/index.js", + # or some asset from online cdn. + "https://cdn.jsdelivr.net/npm/bootstrap/dist/js/bootstrap.js" + ] + ``` + +### Web.Resource.Dev + +Only include resources at `Dev` mode. + +1. ***style*** - include some style(CSS) file into html. + ``` + style = [ + # include from public_dir. + "./assets/style.css", + # or some asset from online cdn. + "https://cdn.jsdelivr.net/npm/bootstrap/dist/css/bootstrap.css" + ] + ``` +2. ***script*** - include some script(JS) file into html. + ``` + style = [ + # include from public_dir. + "./assets/index.js", + # or some asset from online cdn. + "https://cdn.jsdelivr.net/npm/bootstrap/dist/js/bootstrap.js" + ] + ``` + +## Config example + +```toml +[application] + +# App (Project) Name +name = "{{project-name}}" + +# Dioxus App Default Platform +# desktop, web, mobile, ssr +default_platform = "web" + +# `build` & `serve` dist path +out_dir = "dist" + +# resource (public) file folder +asset_dir = "public" + +[web.app] + +# HTML title tag content +title = "dioxus | ⛺" + +[web.watcher] + +# when watcher trigger, regenerate the `index.html` +reload_html = true + +# which files or dirs will be watcher monitoring +watch_path = ["src", "public"] + +# include `assets` in web platform +[web.resource] + +# CSS style file +style = [] + +# Javascript code file +script = [] + +[web.resource.dev] + +# serve: [dev-server] only + +# CSS style file +style = [] + +# Javascript code file +script = [] +``` \ No newline at end of file diff --git a/docs/src/creating.md b/docs/src/creating.md new file mode 100644 index 000000000..fa725a4f7 --- /dev/null +++ b/docs/src/creating.md @@ -0,0 +1,38 @@ +# Create a Project + +Once you have the Dioxus CLI tool installed, you can use it to create dioxus project. + +## Initializing a default project + +The `dioxus create` command will create a new directory containing a project template. +``` +dioxus create hello-dioxus +``` + +It will clone a default template from github template: [DioxusLabs/dioxus-template](https://github.com/DioxusLabs/dioxus-template) + +> This default template is use for `web` platform application. + +then you can change the current directory in to the project: + +``` +cd hello-dioxus +``` + +> Make sure `wasm32 target` is installed before running the Web project. + +now we can create a `dev server` to display the project: + +``` +dioxus serve +``` + +by default, the dioxus dev server will running at: [`http://127.0.0.1:8080/`](http://127.0.0.1:8080/) + +## Initalizing from other repository + +you can assign which repository you want to create: + +``` +dioxus init hello-dioxus --template=gh:dioxuslabs/dioxus-template +``` \ No newline at end of file diff --git a/docs/src/installation.md b/docs/src/installation.md new file mode 100644 index 000000000..7151de1ff --- /dev/null +++ b/docs/src/installation.md @@ -0,0 +1,24 @@ +# Installation + +There are multiple ways to install the Dioxus CLI tool. Choose any one of the methods below that best suit your needs. + +## Install from latest master version + +We suggest you use `github master` version to install it now. + +We have not yet released the latest version to `crates.io` + +``` +cargo install --git https://github.com/Dioxuslabs/cli +``` + +This will automatically download `Dioxus-CLI` source from github master branch, +and install it in Cargo's global binary directory (`~/.cargo/bin/` by default). + +## Install from `crates.io` version + +``` +cargo install dioxus-cli +``` + +Make sure to add the Cargo bin directory to your `PATH`. \ No newline at end of file diff --git a/docs/src/introduction.md b/docs/src/introduction.md new file mode 100644 index 000000000..2f857a2a5 --- /dev/null +++ b/docs/src/introduction.md @@ -0,0 +1,21 @@ +# Introduction + +📦✨ **Dioxus-Cli** is a tool to help get dioxus projects off the ground. + +![dioxus-logo](https://dioxuslabs.com/guide/images/dioxuslogo_full.png) + +It includes `dev server`, `hot reload` and some `quick command` to help you use dioxus. + +## Features + +- [x] `html` to `rsx` conversion tool +- [x] hot reload for `web` platform +- [x] create dioxus project from `git` repo +- [x] build & pack dioxus project +- [ ] autoformat dioxus `rsx` code + +## Contributors + +Contributors to this guide: + +- [mrxiaozhuox](https://github.com/mrxiaozhuox) \ No newline at end of file From 79df0d0f742f98c7d54a5463e62a19a3ef0b36c8 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sun, 24 Apr 2022 10:47:04 +0800 Subject: [PATCH 095/459] Fixed workflows --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 2638b8a18..c6ae8be13 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -21,7 +21,7 @@ jobs: mdbook-version: "0.4.10" - name: Build - run: cd docs && md build -d ../build + run: cd docs && mdbook build -d ../build - name: Deploy 🚀 uses: JamesIves/github-pages-deploy-action@v4.2.3 From 1f1de4d82219125df7ff4654b76c7ef3d7d3ba1b Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sun, 24 Apr 2022 11:03:46 +0800 Subject: [PATCH 096/459] Fixed docs.yml --- .github/workflows/docs.yml | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index c6ae8be13..5643e6194 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -2,31 +2,29 @@ name: github pages on: push: - paths: - - docs/** - - .github/workflows/docs.yml branches: - - master + - main + pull_request: jobs: - build-deploy: - runs-on: ubuntu-latest - environment: docs + deploy: + runs-on: ubuntu-20.04 + concurrency: + group: ${{ github.workflow }}-${{ github.ref }} steps: - uses: actions/checkout@v2 - name: Setup mdBook uses: peaceiris/actions-mdbook@v1 with: - mdbook-version: "0.4.10" + mdbook-version: '0.4.10' + # mdbook-version: 'latest' - - name: Build - run: cd docs && mdbook build -d ../build + - run: cd docs && mdbook build - - name: Deploy 🚀 - uses: JamesIves/github-pages-deploy-action@v4.2.3 + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + if: ${{ github.ref == 'refs/heads/main' }} with: - branch: gh-pages # The branch the action should deploy to. - folder: build # The folder the action should deploy. - clean: false - token: ${{ secrets.DEPLOY_KEY }} # let's pretend I don't need it for now + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./docs/book \ No newline at end of file From 5f7daedc5d0a9515fce711804e1eaf94204cf6df Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sun, 24 Apr 2022 11:22:02 +0800 Subject: [PATCH 097/459] Update docs.yml --- .github/workflows/docs.yml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 5643e6194..2ed974a47 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -22,9 +22,12 @@ jobs: - run: cd docs && mdbook build - - name: Deploy - uses: peaceiris/actions-gh-pages@v3 - if: ${{ github.ref == 'refs/heads/main' }} + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@v4.2.3 with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./docs/book \ No newline at end of file + branch: gh-pages # The branch the action should deploy to. + folder: docs/book # The folder the action should deploy. + target-folder: docs/nightly/cli + repository-name: dioxuslabs/docsite + clean: false + token: ${{ secrets.DEPLOY_KEY }} # let's pretend I don't need it for now \ No newline at end of file From 04535749e9668b04a37d192fedc258ba6d9168ef Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Sat, 23 Apr 2022 23:28:53 -0400 Subject: [PATCH 098/459] chore: clean up some latent items --- TODO.md | 11 ----------- out.rsx | 23 ----------------------- test.html | 5 ----- 3 files changed, 39 deletions(-) delete mode 100644 TODO.md delete mode 100644 out.rsx delete mode 100644 test.html diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 6fd51d591..000000000 --- a/TODO.md +++ /dev/null @@ -1,11 +0,0 @@ - -asd -- [ ] use a TUI for the dev server aspect of things -- [ ] allow any index.html -- [ ] use wasmopt for production builds -- [ ] pass arguments through to `cargo` -- [ ] figure out a bundling strategy -- [ ] an external configuration - - -should we just use trunk? diff --git a/out.rsx b/out.rsx deleted file mode 100644 index b30b76f9e..000000000 --- a/out.rsx +++ /dev/null @@ -1,23 +0,0 @@ - -use dioxus::prelude::*; -fn component(cx: Scope) -> Element { - cx.render(rsx!( - div { - h1 { - "hello" - } - } - )) -} - -use dioxus::prelude::*; -fn component(cx: Scope) -> Element { - cx.render(rsx!( - div { - h1 { - "hello" - } - } - )) -} - diff --git a/test.html b/test.html deleted file mode 100644 index 33ca3dd1f..000000000 --- a/test.html +++ /dev/null @@ -1,5 +0,0 @@ -
-

- hello -

-
From 3269b2b5aaaa95c55599bc311cc46ade38ca4630 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Sat, 23 Apr 2022 23:55:18 -0400 Subject: [PATCH 099/459] feat: add more options to translation --- extension/package.json | 4 +-- extension/src/extension.ts | 5 ++- src/cli/translate/mod.rs | 22 +++++++++--- tests/test.html | 72 +++++++++++++++++++++++--------------- 4 files changed, 68 insertions(+), 35 deletions(-) diff --git a/extension/package.json b/extension/package.json index 0a3d50b67..c492f97e2 100644 --- a/extension/package.json +++ b/extension/package.json @@ -1,7 +1,7 @@ { "name": "dioxusstudio", - "displayName": "dioxusStudio", - "description": "Toolkit for IDE support in Dioxus apps", + "displayName": "Dioxus", + "description": "Useful tools for working with Dioxus", "version": "0.0.1", "publisher": "jkelleyrtp", "private": true, diff --git a/extension/src/extension.ts b/extension/src/extension.ts index 5a41c7f5f..4322c48e1 100644 --- a/extension/src/extension.ts +++ b/extension/src/extension.ts @@ -2,6 +2,7 @@ import * as vscode from 'vscode'; import { spawn } from "child_process"; export function activate(context: vscode.ExtensionContext) { + function registerCommand(cmd: string) { function convert(cmd: string) { const editor = vscode.window.activeTextEditor;// Get the active text editor @@ -10,7 +11,7 @@ export function activate(context: vscode.ExtensionContext) { if (html.length > 0) { let params = ["translate"]; if (cmd.includes("Component")) params.push("--component"); - params.push("--source"); + params.push("--raw"); params.push(html); const child_proc = spawn("dioxus", params); let result = ''; @@ -23,6 +24,8 @@ export function activate(context: vscode.ExtensionContext) { } } } + + const handle = vscode.commands.registerCommand(cmd, () => convert(cmd)); context.subscriptions.push(handle); } diff --git a/src/cli/translate/mod.rs b/src/cli/translate/mod.rs index e239ce318..3440ee6b1 100644 --- a/src/cli/translate/mod.rs +++ b/src/cli/translate/mod.rs @@ -13,6 +13,10 @@ pub struct Translate { #[clap(short, long)] pub file: Option, + /// Input file + #[clap(short, long)] + pub raw: Option, + /// Output file, stdout if not present #[clap(parse(from_os_str))] pub output: Option, @@ -24,14 +28,20 @@ impl Translate { component, output, file, + raw, } = self; - let contents = match file { - Some(input) => std::fs::read_to_string(&input).unwrap_or_else(|e| { + let contents = match (file, raw) { + (Some(input), None) => std::fs::read_to_string(&input).unwrap_or_else(|e| { log::error!("Cloud not read input file: {}.", e); exit(0); }), - None => { + (None, Some(raw)) => raw, + (Some(_), Some(_)) => { + log::error!("Only one of --file or --raw can be specified."); + exit(0); + } + (None, None) => { if atty::is(atty::Stream::Stdin) { log::error!("No input file, source, or stdin to translate from."); exit(0); @@ -67,7 +77,11 @@ impl Translate { } /// render without handling svgs or anything -fn simple_render_child(f: &mut impl std::fmt::Write, child: &Node, il: u32) -> std::fmt::Result { +pub fn simple_render_child( + f: &mut impl std::fmt::Write, + child: &Node, + il: u32, +) -> std::fmt::Result { write_tabs(f, il)?; match child { Node::Text(t) => writeln!(f, "\"{}\"", t)?, diff --git a/tests/test.html b/tests/test.html index 4936ae36a..05ccd7b18 100644 --- a/tests/test.html +++ b/tests/test.html @@ -1,32 +1,48 @@
-
-
-
-
- content -
-

Buy YouTube Videos

-

- Williamsburg occupy sustainable snackwave gochujang. Pinterest cornhole brunch, slow-carb neutra - irony. -

- -
-
-
- content -
-

The Catalyzer

-

- Williamsburg occupy sustainable snackwave gochujang. Pinterest - cornhole brunch, slow-carb neutra irony. -

- -
+
+
+
+
+ content
+

+ Buy YouTube Videos +

+

+ Williamsburg occupy sustainable snackwave gochujang. Pinterest + cornhole brunch, slow-carb neutra irony. +

+ +
+
+
+ content +
+

+ The Catalyzer +

+

+ Williamsburg occupy sustainable snackwave gochujang. Pinterest + cornhole brunch, slow-carb neutra irony. +

+ +
+
From 84f0245f6c5fe18412b799e9019327fb73788083 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Sun, 24 Apr 2022 03:24:41 -0400 Subject: [PATCH 100/459] feat: basic autofmt --- Cargo.toml | 3 ++ extension/DEV.md | 10 +++++ extension/README.md | 10 ----- extension/package.json | 14 ++++-- extension/src/extension.ts | 86 ++++++++++++++++++++++++++----------- extension/static/icon.png | Bin 0 -> 20768 bytes src/cli/autoformat/mod.rs | 25 +++++++++++ src/cli/mod.rs | 11 +++++ src/main.rs | 6 +++ 9 files changed, 127 insertions(+), 38 deletions(-) create mode 100644 extension/DEV.md create mode 100644 extension/static/icon.png create mode 100644 src/cli/autoformat/mod.rs diff --git a/Cargo.toml b/Cargo.toml index 21e2dad7e..b8f0e271b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,6 +46,9 @@ flate2 = "1.0.22" tar = "0.4.38" tower = "0.4.12" +dioxus-rsx = { git = "https://github.com/dioxuslabs/dioxus.git", branch = "jk/rsx-refactor" } +dioxus-autofmt = { git = "https://github.com/dioxuslabs/dioxus.git", branch = "jk/rsx-refactor" } + [[bin]] path = "src/main.rs" name = "dioxus" diff --git a/extension/DEV.md b/extension/DEV.md new file mode 100644 index 000000000..54d0c396a --- /dev/null +++ b/extension/DEV.md @@ -0,0 +1,10 @@ + +## packaging + +``` +$ cd myExtension +$ vsce package +# myExtension.vsix generated +$ vsce publish +# .myExtension published to VS Code Marketplace +``` diff --git a/extension/README.md b/extension/README.md index bf9459fe9..fe67f1587 100644 --- a/extension/README.md +++ b/extension/README.md @@ -12,13 +12,3 @@ Converts a selection of html to valid rsx. ### Convert HTML to Dioxus Component Converts a selection of html to a valid Dioxus component with all SVGs factored out into their own module. - -## packaging - -``` -$ cd myExtension -$ vsce package -# myExtension.vsix generated -$ vsce publish -# .myExtension published to VS Code Marketplace -``` diff --git a/extension/package.json b/extension/package.json index c492f97e2..ca73c0ea8 100644 --- a/extension/package.json +++ b/extension/package.json @@ -1,14 +1,15 @@ { - "name": "dioxusstudio", + "name": "dioxus", "displayName": "Dioxus", "description": "Useful tools for working with Dioxus", "version": "0.0.1", - "publisher": "jkelleyrtp", + "publisher": "DioxusLabs", "private": true, "license": "MIT", + "icon": "static/icon.png", "repository": { "type": "git", - "url": "https://github.com/Microsoft/vscode-extension-samples" + "url": "https://github.com/DioxusLabs/cli" }, "engines": { "vscode": "^1.32.0" @@ -18,7 +19,8 @@ ], "activationEvents": [ "onCommand:extension.htmlToDioxusRsx", - "onCommand:extension.htmlToDioxusComponent" + "onCommand:extension.htmlToDioxusComponent", + "onCommand:extension.formatRsx" ], "main": "./out/extension", "contributes": { @@ -30,6 +32,10 @@ { "command": "extension.htmlToDioxusComponent", "title": "Dioxus: Convert HTML to Component" + }, + { + "command": "extension.formatRsx", + "title": "Dioxus: Format RSX" } ] }, diff --git a/extension/src/extension.ts b/extension/src/extension.ts index 4322c48e1..fd8e2906b 100644 --- a/extension/src/extension.ts +++ b/extension/src/extension.ts @@ -3,33 +3,71 @@ import { spawn } from "child_process"; export function activate(context: vscode.ExtensionContext) { - function registerCommand(cmd: string) { - function convert(cmd: string) { - const editor = vscode.window.activeTextEditor;// Get the active text editor - if (editor) { - const html = editor.document.getText(editor.selection); - if (html.length > 0) { - let params = ["translate"]; - if (cmd.includes("Component")) params.push("--component"); - params.push("--raw"); - params.push(html); - const child_proc = spawn("dioxus", params); - let result = ''; - child_proc.stdout?.on('data', data => result += data); - child_proc.on('close', () => { - if (result.length > 0) editor.edit(editBuilder => editBuilder.replace(editor.selection, result)); - }); - } else { - vscode.window.showWarningMessage("Please select HTML fragment before invoking this command!"); - } - } + + function translate(component: boolean) { + const editor = vscode.window.activeTextEditor;// Get the active text editor + if (!editor) return; + + const html = editor.document.getText(editor.selection); + if (html.length == 0) { + vscode.window.showWarningMessage("Please select HTML fragment before invoking this command!"); + return; } + let params = ["translate"]; + if (component) params.push("--component"); + params.push("--raw"); + params.push(html); - const handle = vscode.commands.registerCommand(cmd, () => convert(cmd)); - context.subscriptions.push(handle); + const child_proc = spawn("dioxus", params); + + let result = ''; + child_proc.stdout?.on('data', data => result += data); + + child_proc.on('close', () => { + if (result.length > 0) editor.edit(editBuilder => editBuilder.replace(editor.selection, result)); + }); + + child_proc.on('error', (err) => { + vscode.window.showWarningMessage(`Errors occurred while translating. Make sure you have the most recent Dioxus-CLI installed! \n${err}`); + }); } - registerCommand('extension.htmlToDioxusRsx'); - registerCommand('extension.htmlToDioxusComponent'); + function autoformat() { + const editor = vscode.window.activeTextEditor;// Get the active text editor + if (!editor) return; + + const unformatted = editor.document.getText(editor.selection); + if (unformatted.length == 0) { + vscode.window.showWarningMessage("Please select rsx invoking this command!"); + return; + } + + const params = ["fmt", "--raw", unformatted]; + + const child_proc = spawn("dioxus", params); + + let result = ''; + child_proc.stdout?.on('data', data => result += data); + + child_proc.on('close', () => { + if (result.length > 0) editor.edit(editBuilder => editBuilder.replace(editor.selection, result)); + }); + + child_proc.on('error', (err) => { + vscode.window.showWarningMessage(`Errors occurred while translating. Make sure you have the most recent Dioxus-CLI installed! \n${err}`); + }); + } + + + + + const handles = + [ + vscode.commands.registerCommand('extension.htmlToDioxusRsx', () => translate(false)), + vscode.commands.registerCommand('extension.htmlToDioxusComponent', () => translate(true)), + vscode.commands.registerCommand('extension.formatRsx', () => autoformat()) + ]; + + context.subscriptions.push(...handles); } diff --git a/extension/static/icon.png b/extension/static/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..42c355c2647b0b68cf18c12d292db134ac8750d2 GIT binary patch literal 20768 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 IM6N<$f;9DK`~Uy| literal 0 HcmV?d00001 diff --git a/src/cli/autoformat/mod.rs b/src/cli/autoformat/mod.rs new file mode 100644 index 000000000..26ab86345 --- /dev/null +++ b/src/cli/autoformat/mod.rs @@ -0,0 +1,25 @@ +use super::*; + +/// Build the Rust WASM app and all of its assets. +#[derive(Clone, Debug, Parser)] +pub struct Autoformat { + /// Input file + #[clap(short, long)] + pub raw: Option, +} + +impl Autoformat { + pub fn autoformat(self) -> Result<()> { + if let Some(raw) = self.raw { + if let Some(inner) = dioxus_autofmt::fmt_block(&raw) { + println!("{}", inner); + } else { + // exit process with error + eprintln!("error formatting codeblock"); + exit(1); + } + } + + Ok(()) + } +} diff --git a/src/cli/mod.rs b/src/cli/mod.rs index d639d28a7..92e05eaa9 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -1,3 +1,4 @@ +pub mod autoformat; pub mod build; pub mod cfg; pub mod clean; @@ -45,17 +46,27 @@ pub struct Cli { pub enum Commands { /// Build the Rust WASM app and all of its assets. Build(build::Build), + /// Translate some source file into Dioxus code. Translate(translate::Translate), + /// Build, watch & serve the Rust WASM app and all of its assets. Serve(serve::Serve), + /// Init a new project for Dioxus. Create(create::Create), + /// Clean output artifacts. Clean(clean::Clean), + + /// Format some rsx + #[clap(name = "fmt")] + Autoformat(autoformat::Autoformat), + /// Dioxus config file controls. #[clap(subcommand)] Config(config::Config), + /// Install & Manage tools for Dioxus-cli. #[clap(subcommand)] Tool(tool::Tool), diff --git a/src/main.rs b/src/main.rs index 099ff74c0..72558741e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -48,6 +48,12 @@ async fn main() -> Result<()> { log::error!("tool error: {}", e); } } + + Commands::Autoformat(opts) => { + if let Err(e) = opts.autoformat() { + log::error!("format error: {}", e); + } + } } Ok(()) From 201dcc144d363571865ace40d85336b3c792d474 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Tue, 26 Apr 2022 18:45:27 -0400 Subject: [PATCH 101/459] feat: fix bug with applying multiple edits in sequence --- Cargo.toml | 6 ++- extension/package.json | 7 +++- extension/src/extension.ts | 85 ++++++++++++++++++++++++++++++++------ src/cli/autoformat/mod.rs | 38 ++++++++++++++++- 4 files changed, 120 insertions(+), 16 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b8f0e271b..9f85a89c2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,8 +46,10 @@ flate2 = "1.0.22" tar = "0.4.38" tower = "0.4.12" -dioxus-rsx = { git = "https://github.com/dioxuslabs/dioxus.git", branch = "jk/rsx-refactor" } -dioxus-autofmt = { git = "https://github.com/dioxuslabs/dioxus.git", branch = "jk/rsx-refactor" } +dioxus-rsx = { path = "../../dioxus/packages/rsx" } +dioxus-autofmt = { path = "../../dioxus/packages/autofmt" } +# dioxus-rsx = { git = "https://github.com/dioxuslabs/dioxus.git", branch = "jk/rsx-refactor" } +# dioxus-autofmt = { git = "https://github.com/dioxuslabs/dioxus.git", branch = "jk/rsx-refactor" } [[bin]] path = "src/main.rs" diff --git a/extension/package.json b/extension/package.json index ca73c0ea8..f884637c8 100644 --- a/extension/package.json +++ b/extension/package.json @@ -20,7 +20,8 @@ "activationEvents": [ "onCommand:extension.htmlToDioxusRsx", "onCommand:extension.htmlToDioxusComponent", - "onCommand:extension.formatRsx" + "onCommand:extension.formatRsx", + "onCommand:extension.formatRsxDocument" ], "main": "./out/extension", "contributes": { @@ -36,6 +37,10 @@ { "command": "extension.formatRsx", "title": "Dioxus: Format RSX" + }, + { + "command": "extension.formatRsxDocument", + "title": "Dioxus: Format RSX Document" } ] }, diff --git a/extension/src/extension.ts b/extension/src/extension.ts index fd8e2906b..46ce2aa89 100644 --- a/extension/src/extension.ts +++ b/extension/src/extension.ts @@ -33,7 +33,7 @@ export function activate(context: vscode.ExtensionContext) { }); } - function autoformat() { + function autoformat_selection() { const editor = vscode.window.activeTextEditor;// Get the active text editor if (!editor) return; @@ -43,11 +43,10 @@ export function activate(context: vscode.ExtensionContext) { return; } - const params = ["fmt", "--raw", unformatted]; - - const child_proc = spawn("dioxus", params); - + let args = ["fmt", "--raw", unformatted.toString()]; + const child_proc = spawn("dioxus", args); let result = ''; + child_proc.stdout?.on('data', data => result += data); child_proc.on('close', () => { @@ -60,14 +59,76 @@ export function activate(context: vscode.ExtensionContext) { } + function autoformat_document(document: vscode.TextDocument) { + // check the settings to make sure format on save is configured + // const formatOnSave: string | undefined = vscode.workspace.getConfiguration('rust').get('formatOnSave'); + if (document.languageId === "rust" && document.uri.scheme === "file") { + const editor = vscode.window.activeTextEditor;// Get the active text editor + if (editor) { + const text = editor.document.getText(); - const handles = - [ - vscode.commands.registerCommand('extension.htmlToDioxusRsx', () => translate(false)), - vscode.commands.registerCommand('extension.htmlToDioxusComponent', () => translate(true)), - vscode.commands.registerCommand('extension.formatRsx', () => autoformat()) - ]; + console.error(text); - context.subscriptions.push(...handles); + const child_proc = spawn("dioxus", ["fmt", "-f", text]); + + let result = ''; + + child_proc.stdout?.on('data', data => result += data); + + type RsxEdit = { + formatted: string, + start: number, + end: number + } + + child_proc.on('close', () => { + // if (result.length > 0) { + // editor.edit(editBuilder => editBuilder.insert(new vscode.Position(0, 0), result)); + // } else { + // console.error("No result"); + // } + if (result.length > 0) { + let decoded: RsxEdit[] = JSON.parse(result); + + console.log("Decoded edits: ", decoded); + + editor.edit(editBuilder => { + + for (let edit of decoded) { + console.log("Handling Edit: ", edit); + + let start = document.positionAt(edit.start - 1); + let end = document.positionAt(edit.end + 1); + const range = new vscode.Range(start, end); + + editBuilder.replace(range, `{ ${edit.formatted} }`); + // editor.edit(editBuilder => editBuilder.replace(range, `{ ${edit.formatted} }`)).then((could_be_applied) => { + // }); + // editor.edit(editBuilder => editBuilder.replace(range, `{ ${edit.formatted} }`)).then((could_be_applied) => { + // console.log("Edit applied: ", could_be_applied); + // }); + } + }) + } + }); + + child_proc.on('error', (err) => { + vscode.window.showWarningMessage(`Errors occurred while translating. Make sure you have the most recent Dioxus-CLI installed! \n${err}`); + }); + } + } + } + + context.subscriptions.push( + vscode.commands.registerCommand('extension.htmlToDioxusRsx', () => translate(false)), + vscode.commands.registerCommand('extension.htmlToDioxusComponent', () => translate(true)), + vscode.commands.registerCommand('extension.formatRsx', () => autoformat_selection()), + vscode.commands.registerCommand('extension.formatRsxDocument', () => { + const editor = vscode.window.activeTextEditor;// Get the active text editor + if (!editor) return; + autoformat_document(editor.document); + }), + vscode.workspace.onDidSaveTextDocument(autoformat_document) + ); } diff --git a/src/cli/autoformat/mod.rs b/src/cli/autoformat/mod.rs index 26ab86345..3008411db 100644 --- a/src/cli/autoformat/mod.rs +++ b/src/cli/autoformat/mod.rs @@ -3,9 +3,13 @@ use super::*; /// Build the Rust WASM app and all of its assets. #[derive(Clone, Debug, Parser)] pub struct Autoformat { - /// Input file + /// Input rsx (selection) #[clap(short, long)] pub raw: Option, + + /// Input file + #[clap(short, long)] + pub file: Option, } impl Autoformat { @@ -20,6 +24,38 @@ impl Autoformat { } } + if let Some(file) = self.file { + let edits = dioxus_autofmt::get_format_blocks(&file); + let as_json = serde_json::to_string(&edits).unwrap(); + println!("{}", as_json); + } + Ok(()) } } + +#[test] +fn spawn_properly() { + let out = Command::new("dioxus") + .args([ + "fmt", + "-f", + r#" +// + +rsx! { + + div {} +} + +// +// +// + + "#, + ]) + .output() + .expect("failed to execute process"); + + dbg!(out); +} From 4a54934c8ef34d98861223bcf5be244fa3922027 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Thu, 28 Apr 2022 23:59:20 -0400 Subject: [PATCH 102/459] fix: extension should respect blocks --- extension/src/extension.ts | 49 +++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/extension/src/extension.ts b/extension/src/extension.ts index 46ce2aa89..44d5b8f16 100644 --- a/extension/src/extension.ts +++ b/extension/src/extension.ts @@ -64,9 +64,10 @@ export function activate(context: vscode.ExtensionContext) { // const formatOnSave: string | undefined = vscode.workspace.getConfiguration('rust').get('formatOnSave'); if (document.languageId === "rust" && document.uri.scheme === "file") { - const editor = vscode.window.activeTextEditor;// Get the active text editor - if (editor) { - const text = editor.document.getText(); + const active_editor = vscode.window.activeTextEditor;// Get the active text editor + + if (active_editor?.document.fileName === document.fileName) { + const text = document.getText(); console.error(text); @@ -83,33 +84,37 @@ export function activate(context: vscode.ExtensionContext) { } child_proc.on('close', () => { - // if (result.length > 0) { - // editor.edit(editBuilder => editBuilder.insert(new vscode.Position(0, 0), result)); - // } else { - // console.error("No result"); - // } + if (result.length > 0) { let decoded: RsxEdit[] = JSON.parse(result); console.log("Decoded edits: ", decoded); - editor.edit(editBuilder => { + // Get the active text editor + const cur_editor = vscode.window.activeTextEditor; - for (let edit of decoded) { - console.log("Handling Edit: ", edit); - let start = document.positionAt(edit.start - 1); - let end = document.positionAt(edit.end + 1); - const range = new vscode.Range(start, end); + // even if we build an empty edit stream, it tries to save the editor + // this makes sure the editor is actually saved + if (decoded.length > 0 && cur_editor == active_editor) { + active_editor.edit(editBuilder => { - editBuilder.replace(range, `{ ${edit.formatted} }`); - // editor.edit(editBuilder => editBuilder.replace(range, `{ ${edit.formatted} }`)).then((could_be_applied) => { - // }); - // editor.edit(editBuilder => editBuilder.replace(range, `{ ${edit.formatted} }`)).then((could_be_applied) => { - // console.log("Edit applied: ", could_be_applied); - // }); - } - }) + for (let edit of decoded) { + console.log("Handling Edit: ", edit); + + let start = document.positionAt(edit.start - 1); + let end = document.positionAt(edit.end + 1); + const range = new vscode.Range(start, end); + + editBuilder.replace(range, `{ ${edit.formatted} }`); + // editor.edit(editBuilder => editBuilder.replace(range, `{ ${edit.formatted} }`)).then((could_be_applied) => { + // }); + // editor.edit(editBuilder => editBuilder.replace(range, `{ ${edit.formatted} }`)).then((could_be_applied) => { + // console.log("Edit applied: ", could_be_applied); + // }); + } + }) + } } }); From 2c9f5f1957941dd7875f0b01742809f9ec0823f1 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Fri, 29 Apr 2022 12:59:15 +0800 Subject: [PATCH 103/459] Fixed `dioxus.toml` --- src/assets/dioxus.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/dioxus.toml b/src/assets/dioxus.toml index ab85abe86..b43d0d6df 100644 --- a/src/assets/dioxus.toml +++ b/src/assets/dioxus.toml @@ -42,4 +42,4 @@ script = [] # use binaryen.wasm-opt for output Wasm file # binaryen just will trigger in `web` platform -binaryen = { wasm_opt = [".PROJECT_OUT"] } \ No newline at end of file +binaryen = { wasm_opt = true } \ No newline at end of file From 5d013ecf824b1e62b8741e7e4565af8bf3262f97 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sat, 7 May 2022 11:54:00 +0800 Subject: [PATCH 104/459] Try to add `Sass` support --- src/assets/dioxus.toml | 5 ++++- src/tools.rs | 32 +++++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/assets/dioxus.toml b/src/assets/dioxus.toml index b43d0d6df..0c57542b8 100644 --- a/src/assets/dioxus.toml +++ b/src/assets/dioxus.toml @@ -42,4 +42,7 @@ script = [] # use binaryen.wasm-opt for output Wasm file # binaryen just will trigger in `web` platform -binaryen = { wasm_opt = true } \ No newline at end of file +binaryen = { wasm_opt = true } + +# use sass auto will auto check sass file and build it. +sass = { auto = true } \ No newline at end of file diff --git a/src/tools.rs b/src/tools.rs index 937063be0..db4d82268 100644 --- a/src/tools.rs +++ b/src/tools.rs @@ -13,10 +13,11 @@ use tokio::io::AsyncWriteExt; #[derive(Debug, PartialEq, Eq)] pub enum Tool { Binaryen, + Sass, } pub fn tool_list() -> Vec<&'static str> { - vec!["binaryen"] + vec!["binaryen", "sass"] } pub fn app_path() -> PathBuf { @@ -60,6 +61,7 @@ impl Tool { pub fn name(&self) -> &str { match self { Self::Binaryen => "binaryen", + Self::Sass => "sass", } } @@ -67,6 +69,7 @@ impl Tool { pub fn bin_path(&self) -> &str { match self { Self::Binaryen => "bin", + Self::Sass => ".", } } @@ -84,6 +87,17 @@ impl Tool { panic!("unsupported platformm"); } } + Self::Sass => { + if cfg!(target_os = "windows") { + "windows" + } else if cfg!(target_os = "macos") { + "macos" + } else if cfg!(target_os = "linux") { + "linux" + } else { + panic!("unsupported platformm"); + } + } } } @@ -96,6 +110,12 @@ impl Tool { target = self.target_platform() ) } + Self::Sass => { + format!( + "https://github.com/sass/dart-sass/releases/download/1.51.0/dart-sass-1.51.0-{target}-x64.tar.gz", + target = self.target_platform() + ) + } } } @@ -103,6 +123,13 @@ impl Tool { pub fn extension(&self) -> &str { match self { Self::Binaryen => "tar.gz", + Self::Sass => { + if cfg!(target_os = "windows") { + "zip" + } else { + "tar.ge" + } + }, } } @@ -169,6 +196,9 @@ impl Tool { command.to_string() } } + Tool::Sass => { + command.to_string() + } }; if !bin_path.join(&command_file).is_file() { From c48345b86e556c0535d4ead6134921c68d4c121c Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sat, 7 May 2022 16:25:23 +0800 Subject: [PATCH 105/459] Add `zip` support --- Cargo.toml | 2 ++ src/tools.rs | 46 +++++++++++++++++++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 21e2dad7e..d2bda881f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,11 +39,13 @@ hyper = "0.14.17" axum = { version = "0.5.1", features = ["ws", "headers"] } tower-http = { version = "0.2.2", features = ["fs", "trace"] } headers = "0.3.7" + # tools download dirs = "4.0.0" reqwest = { version = "0.11", features = ["rustls-tls", "stream", "trust-dns"] } flate2 = "1.0.22" tar = "0.4.38" +zip = "0.6.2" tower = "0.4.12" [[bin]] diff --git a/src/tools.rs b/src/tools.rs index db4d82268..b37d10cd2 100644 --- a/src/tools.rs +++ b/src/tools.rs @@ -1,6 +1,6 @@ use std::{ fs::{create_dir_all, File}, - path::PathBuf, + path::{Path, PathBuf}, process::Command, }; @@ -112,8 +112,9 @@ impl Tool { } Self::Sass => { format!( - "https://github.com/sass/dart-sass/releases/download/1.51.0/dart-sass-1.51.0-{target}-x64.tar.gz", - target = self.target_platform() + "https://github.com/sass/dart-sass/releases/download/1.51.0/dart-sass-1.51.0-{target}-x64.{extension}", + target = self.target_platform(), + extension = self.extension() ) } } @@ -129,7 +130,7 @@ impl Tool { } else { "tar.ge" } - }, + } } } @@ -169,6 +170,8 @@ impl Tool { let dir_name = if self == &Tool::Binaryen { "binaryen-version_105" + } else if self == &Tool::Sass { + "sass-version-1_51" } else { "" }; @@ -180,6 +183,8 @@ impl Tool { archive.unpack(&tool_path)?; // println!("{:?} -> {:?}", tool_path.join(dir_name), tool_path.join(self.name())); std::fs::rename(tool_path.join(dir_name), tool_path.join(self.name()))?; + } else if self.extension() == "zip" { + // decompress the `zip` file } Ok(()) @@ -196,9 +201,7 @@ impl Tool { command.to_string() } } - Tool::Sass => { - command.to_string() - } + Tool::Sass => command.to_string(), }; if !bin_path.join(&command_file).is_file() { @@ -215,3 +218,32 @@ impl Tool { Ok(output.stdout) } } + +fn extract_zip(file: &Path, target: &Path) -> anyhow::Result<()> { + let zip_file = std::fs::File::open(&file)?; + let mut zip = zip::ZipArchive::new(zip_file)?; + + if !target.exists() { + let _ = std::fs::create_dir_all(target)?; + } + + for i in 0..zip.len() { + let mut file = zip.by_index(i)?; + if file.is_dir() { + // dir + let target = target.join(Path::new(&file.name().replace('\\', ""))); + let _ = std::fs::create_dir_all(target)?; + } else { + // file + let file_path = target.join(Path::new(file.name())); + let mut target_file = if !file_path.exists() { + std::fs::File::create(file_path)? + } else { + std::fs::File::open(file_path)? + }; + let _num = std::io::copy(&mut file, &mut target_file)?; + } + } + + Ok(()) +} From ea723f64cd362d4139d0766fc5a74b95166e2ca0 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sat, 7 May 2022 19:11:12 +0800 Subject: [PATCH 106/459] Support `sass` install --- src/cli/tool/mod.rs | 4 ++-- src/tools.rs | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/cli/tool/mod.rs b/src/cli/tool/mod.rs index d5c4581aa..f13c1620e 100644 --- a/src/cli/tool/mod.rs +++ b/src/cli/tool/mod.rs @@ -20,9 +20,9 @@ impl Tool { Tool::List {} => { for item in tools::tool_list() { if tools::Tool::from_str(item).unwrap().is_installed() { - println!("{item} [installed]"); + println!("- {item} [installed]"); } else { - println!("{item}"); + println!("- {item}"); } } } diff --git a/src/tools.rs b/src/tools.rs index b37d10cd2..9f96ce0b9 100644 --- a/src/tools.rs +++ b/src/tools.rs @@ -53,6 +53,7 @@ impl Tool { pub fn from_str(name: &str) -> Option { match name { "binaryen" => Some(Self::Binaryen), + "sass" => Some(Self::Sass), _ => None, } } @@ -128,7 +129,7 @@ impl Tool { if cfg!(target_os = "windows") { "zip" } else { - "tar.ge" + "tar.gz" } } } @@ -159,7 +160,7 @@ impl Tool { let chunk = chunk_res.context("error reading chunk from download")?; let _ = file.write(chunk.as_ref()).await; } - + // log::info!("temp file path: {:?}", temp_out); Ok(temp_out) } @@ -170,10 +171,8 @@ impl Tool { let dir_name = if self == &Tool::Binaryen { "binaryen-version_105" - } else if self == &Tool::Sass { - "sass-version-1_51" } else { - "" + "dart-sass" }; if self.extension() == "tar.gz" { @@ -181,10 +180,11 @@ impl Tool { let tar = GzDecoder::new(tar_gz); let mut archive = Archive::new(tar); archive.unpack(&tool_path)?; - // println!("{:?} -> {:?}", tool_path.join(dir_name), tool_path.join(self.name())); std::fs::rename(tool_path.join(dir_name), tool_path.join(self.name()))?; } else if self.extension() == "zip" { // decompress the `zip` file + extract_zip(&temp_path, &tool_path)?; + std::fs::rename(tool_path.join(dir_name), tool_path.join(self.name()))?; } Ok(()) From f7f1d90520bf9712172175ad6ccbec41803172f2 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sun, 8 May 2022 00:56:22 +0800 Subject: [PATCH 107/459] Add `sass` support --- src/assets/dioxus.toml | 14 +++++++++++++- src/cli/tool/mod.rs | 7 +++++-- src/tools.rs | 8 +++++++- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/assets/dioxus.toml b/src/assets/dioxus.toml index 0c57542b8..8f160b293 100644 --- a/src/assets/dioxus.toml +++ b/src/assets/dioxus.toml @@ -45,4 +45,16 @@ script = [] binaryen = { wasm_opt = true } # use sass auto will auto check sass file and build it. -sass = { auto = true } \ No newline at end of file +[application.tools.sass] + +version = "1.51.0" + +# if auto = true, we will check style array, and translate all sass file to css. +auto = true + +# or you can specify some sass file -> css file +files = [ + # some sass file path + # this file will translate to `/css/test.css` + "/css/test.sass" +] \ No newline at end of file diff --git a/src/cli/tool/mod.rs b/src/cli/tool/mod.rs index f13c1620e..45c866c40 100644 --- a/src/cli/tool/mod.rs +++ b/src/cli/tool/mod.rs @@ -27,7 +27,11 @@ impl Tool { } } Tool::AppPath {} => { - println!("{}", tools::tools_path().to_str().unwrap()); + if let Some(v) = tools::tools_path().to_str() { + println!("{}", v); + } else { + log::error!("Tools path get failed."); + } } Tool::Add { name } => { let tool_list = tools::tool_list(); @@ -58,7 +62,6 @@ impl Tool { log::info!("Tool {name} install successfully!"); } } - Ok(()) } } diff --git a/src/tools.rs b/src/tools.rs index 9f96ce0b9..ae4e58b79 100644 --- a/src/tools.rs +++ b/src/tools.rs @@ -201,7 +201,13 @@ impl Tool { command.to_string() } } - Tool::Sass => command.to_string(), + Tool::Sass => { + if cfg!(target_os = "windows") { + format!("{}.bat", command) + } else { + command.to_string() + } + }, }; if !bin_path.join(&command_file).is_file() { From 768a0426d8519073259f9e642bc0b44f75110f52 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Tue, 10 May 2022 10:31:02 +0800 Subject: [PATCH 108/459] Add `sass` support --- Cargo.toml | 2 ++ src/assets/dioxus.toml | 4 +--- src/builder.rs | 48 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index d2bda881f..c869267b1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,6 +40,8 @@ axum = { version = "0.5.1", features = ["ws", "headers"] } tower-http = { version = "0.2.2", features = ["fs", "trace"] } headers = "0.3.7" +walkdir = "2" + # tools download dirs = "4.0.0" reqwest = { version = "0.11", features = ["rustls-tls", "stream", "trust-dns"] } diff --git a/src/assets/dioxus.toml b/src/assets/dioxus.toml index 8f160b293..3e82e0c93 100644 --- a/src/assets/dioxus.toml +++ b/src/assets/dioxus.toml @@ -47,8 +47,6 @@ binaryen = { wasm_opt = true } # use sass auto will auto check sass file and build it. [application.tools.sass] -version = "1.51.0" - # if auto = true, we will check style array, and translate all sass file to css. auto = true @@ -56,5 +54,5 @@ auto = true files = [ # some sass file path # this file will translate to `/css/test.css` - "/css/test.sass" + "/css/test.scss" ] \ No newline at end of file diff --git a/src/builder.rs b/src/builder.rs index f7f68e2bc..7c3a7e9fb 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -1,6 +1,7 @@ use crate::{ config::{CrateConfig, ExecutableType}, error::{Error, Result}, + tools::Tool, DioxusConfig, }; use std::{ @@ -29,6 +30,10 @@ pub fn build(config: &CrateConfig) -> Result<()> { .. } = config; + + // start to build the assets + build_assets(config)?; + let t_start = std::time::Instant::now(); // [1] Build the .wasm module @@ -339,6 +344,49 @@ pub fn gen_page(config: &DioxusConfig, serve: bool) -> String { html.replace("{app_title}", &title) } +// this function will build some assets file +// like sass tool resources +fn build_assets(config: &CrateConfig) -> Result<()> { + let dioxus_config = &config.dioxus_config; + let dioxus_tools = dioxus_config.application.tools.clone().unwrap_or_default(); + + // check sass tool state + let sass = Tool::Sass; + if sass.is_installed() && dioxus_tools.contains_key("sass") { + let sass_conf = dioxus_tools.get("sass").unwrap(); + if let Some(tab) = sass_conf.as_table() { + if tab.contains_key("auto") && tab.get("auto").unwrap().as_bool().unwrap_or(false) { + // if the sass open auto, we need auto-check the assets dir. + let asset_dir = config.asset_dir.clone(); + if asset_dir.is_dir() { + for entry in walkdir::WalkDir::new(asset_dir) + .into_iter() + .filter_map(|e| e.ok()) + { + let temp = entry.path(); + if temp.is_file() { + let suffix = temp.file_name().unwrap().to_str().unwrap(); + let suffix = suffix.split('.').collect::>(); + let suffix: &str = suffix.last().unwrap(); + if suffix == "scss" { + // if file suffix is `scss` we need transform it. + let temp_stem = temp.file_stem().unwrap().to_str().unwrap(); + let target_path = + temp.parent().unwrap().join(format!("{}.css", temp_stem)); + sass.call( + "sass", + vec![temp.to_str().unwrap(), target_path.to_str().unwrap()], + )?; + } + } + } + } + } + } + } + Ok(()) +} + // use binary_install::{Cache, Download}; // /// Attempts to find `wasm-opt` in `PATH` locally, or failing that downloads a From 8b06fe60596371118e47ef71a72627044c17672a Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Tue, 10 May 2022 13:46:53 +0800 Subject: [PATCH 109/459] Fixed sass tool --- src/assets/dioxus.toml | 4 ++-- src/builder.rs | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/assets/dioxus.toml b/src/assets/dioxus.toml index 3e82e0c93..105251aa1 100644 --- a/src/assets/dioxus.toml +++ b/src/assets/dioxus.toml @@ -47,10 +47,10 @@ binaryen = { wasm_opt = true } # use sass auto will auto check sass file and build it. [application.tools.sass] -# if auto = true, we will check style array, and translate all sass file to css. +# auto will check the assets dirs, and auto to transform all scss file to css file. auto = true -# or you can specify some sass file -> css file +# you can specify some scss file -> css file files = [ # some sass file path # this file will translate to `/css/test.css` diff --git a/src/builder.rs b/src/builder.rs index 7c3a7e9fb..0e0cf7e9a 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -30,7 +30,6 @@ pub fn build(config: &CrateConfig) -> Result<()> { .. } = config; - // start to build the assets build_assets(config)?; @@ -359,20 +358,21 @@ fn build_assets(config: &CrateConfig) -> Result<()> { // if the sass open auto, we need auto-check the assets dir. let asset_dir = config.asset_dir.clone(); if asset_dir.is_dir() { - for entry in walkdir::WalkDir::new(asset_dir) + for entry in walkdir::WalkDir::new(&asset_dir) .into_iter() .filter_map(|e| e.ok()) { let temp = entry.path(); if temp.is_file() { - let suffix = temp.file_name().unwrap().to_str().unwrap(); - let suffix = suffix.split('.').collect::>(); - let suffix: &str = suffix.last().unwrap(); + let suffix = temp.extension().unwrap().to_str().unwrap(); if suffix == "scss" { // if file suffix is `scss` we need transform it. - let temp_stem = temp.file_stem().unwrap().to_str().unwrap(); - let target_path = - temp.parent().unwrap().join(format!("{}.css", temp_stem)); + let out_file = + format!("{}.css", temp.file_stem().unwrap().to_str().unwrap()); + let target_path = config + .out_dir + .join(temp.strip_prefix(&asset_dir).unwrap().parent().unwrap()) + .join(out_file); sass.call( "sass", vec![temp.to_str().unwrap(), target_path.to_str().unwrap()], From b5ecd09185062724415e9bf7b6b10d7e2c6860e8 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Tue, 10 May 2022 19:22:19 +0800 Subject: [PATCH 110/459] Add `files` list option --- src/assets/dioxus.toml | 2 +- src/builder.rs | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/assets/dioxus.toml b/src/assets/dioxus.toml index 105251aa1..5f5032e2a 100644 --- a/src/assets/dioxus.toml +++ b/src/assets/dioxus.toml @@ -50,7 +50,7 @@ binaryen = { wasm_opt = true } # auto will check the assets dirs, and auto to transform all scss file to css file. auto = true -# you can specify some scss file -> css file +# or you can specify some scss file -> css file files = [ # some sass file path # this file will translate to `/css/test.css` diff --git a/src/builder.rs b/src/builder.rs index 0e0cf7e9a..fb0c8088d 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -381,6 +381,28 @@ fn build_assets(config: &CrateConfig) -> Result<()> { } } } + } else if tab.contains_key("files") && tab.get("files").unwrap().is_array() { + // check files list. + let list = tab.get("files").unwrap().as_array().unwrap(); + for i in list { + if i.is_str() { + let path = i.as_str().unwrap(); + let path = PathBuf::from(path); + let path = config.asset_dir.join(path); + if path.is_file() { + sass.call( + "sass", + vec![ + path.to_str().unwrap(), + path.parent().unwrap().join(format!( + "{}.css", + path.file_stem().unwrap().to_str().unwrap() + )).to_str().unwrap(), + ], + )?; + } + } + } } } } From 551d2477ffcd84d13cfc4c5d15e1c8033a23a160 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Tue, 10 May 2022 22:32:47 +0800 Subject: [PATCH 111/459] Add `source_map` option --- src/assets/dioxus.toml | 4 +++- src/builder.rs | 30 +++++++++++++++++++++++++----- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/assets/dioxus.toml b/src/assets/dioxus.toml index 5f5032e2a..b481193a8 100644 --- a/src/assets/dioxus.toml +++ b/src/assets/dioxus.toml @@ -55,4 +55,6 @@ files = [ # some sass file path # this file will translate to `/css/test.css` "/css/test.scss" -] \ No newline at end of file +] + +source_map = true \ No newline at end of file diff --git a/src/builder.rs b/src/builder.rs index fb0c8088d..825a9eebf 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -354,6 +354,17 @@ fn build_assets(config: &CrateConfig) -> Result<()> { if sass.is_installed() && dioxus_tools.contains_key("sass") { let sass_conf = dioxus_tools.get("sass").unwrap(); if let Some(tab) = sass_conf.as_table() { + let source_map = tab.contains_key("source_map"); + let source_map = if source_map && tab.get("source_map").unwrap().is_bool() { + if tab.get("source_map").unwrap().as_bool().unwrap_or_default() { + "--source-map" + } else { + "--no-source-map" + } + } else { + "--no-source-map" + }; + if tab.contains_key("auto") && tab.get("auto").unwrap().as_bool().unwrap_or(false) { // if the sass open auto, we need auto-check the assets dir. let asset_dir = config.asset_dir.clone(); @@ -375,7 +386,11 @@ fn build_assets(config: &CrateConfig) -> Result<()> { .join(out_file); sass.call( "sass", - vec![temp.to_str().unwrap(), target_path.to_str().unwrap()], + vec![ + temp.to_str().unwrap(), + target_path.to_str().unwrap(), + source_map, + ], )?; } } @@ -394,10 +409,15 @@ fn build_assets(config: &CrateConfig) -> Result<()> { "sass", vec![ path.to_str().unwrap(), - path.parent().unwrap().join(format!( - "{}.css", - path.file_stem().unwrap().to_str().unwrap() - )).to_str().unwrap(), + path.parent() + .unwrap() + .join(format!( + "{}.css", + path.file_stem().unwrap().to_str().unwrap() + )) + .to_str() + .unwrap(), + source_map, ], )?; } From 9ddaa773d9ffa8d6274a2731dfdac00223f6b74d Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Tue, 10 May 2022 22:58:48 +0800 Subject: [PATCH 112/459] Remove `auto` option --- src/builder.rs | 111 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 73 insertions(+), 38 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 825a9eebf..75c83990d 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -362,48 +362,54 @@ fn build_assets(config: &CrateConfig) -> Result<()> { "--no-source-map" } } else { - "--no-source-map" + "--source-map" }; - if tab.contains_key("auto") && tab.get("auto").unwrap().as_bool().unwrap_or(false) { - // if the sass open auto, we need auto-check the assets dir. - let asset_dir = config.asset_dir.clone(); - if asset_dir.is_dir() { - for entry in walkdir::WalkDir::new(&asset_dir) - .into_iter() - .filter_map(|e| e.ok()) - { - let temp = entry.path(); - if temp.is_file() { - let suffix = temp.extension().unwrap().to_str().unwrap(); - if suffix == "scss" { - // if file suffix is `scss` we need transform it. - let out_file = - format!("{}.css", temp.file_stem().unwrap().to_str().unwrap()); - let target_path = config - .out_dir - .join(temp.strip_prefix(&asset_dir).unwrap().parent().unwrap()) - .join(out_file); - sass.call( - "sass", - vec![ - temp.to_str().unwrap(), - target_path.to_str().unwrap(), - source_map, - ], - )?; + if tab.contains_key("files") { + if tab.get("files").unwrap().is_str() { + let file = tab.get("files").unwrap().as_str().unwrap().trim(); + + if file == "*" { + // if the sass open auto, we need auto-check the assets dir. + let asset_dir = config.asset_dir.clone(); + if asset_dir.is_dir() { + for entry in walkdir::WalkDir::new(&asset_dir) + .into_iter() + .filter_map(|e| e.ok()) + { + let temp = entry.path(); + if temp.is_file() { + let suffix = temp.extension().unwrap().to_str().unwrap(); + if suffix == "scss" { + // if file suffix is `scss` we need transform it. + let out_file = format!( + "{}.css", + temp.file_stem().unwrap().to_str().unwrap() + ); + let target_path = config + .out_dir + .join( + temp.strip_prefix(&asset_dir) + .unwrap() + .parent() + .unwrap(), + ) + .join(out_file); + sass.call( + "sass", + vec![ + temp.to_str().unwrap(), + target_path.to_str().unwrap(), + source_map, + ], + )?; + } + } } } - } - } - } else if tab.contains_key("files") && tab.get("files").unwrap().is_array() { - // check files list. - let list = tab.get("files").unwrap().as_array().unwrap(); - for i in list { - if i.is_str() { - let path = i.as_str().unwrap(); - let path = PathBuf::from(path); - let path = config.asset_dir.join(path); + } else { + // just transform one file. + let path = config.asset_dir.join(file); if path.is_file() { sass.call( "sass", @@ -422,10 +428,39 @@ fn build_assets(config: &CrateConfig) -> Result<()> { )?; } } + } else if tab.get("files").unwrap().is_array() { + // check files list. + let list = tab.get("files").unwrap().as_array().unwrap(); + for i in list { + if i.is_str() { + let path = i.as_str().unwrap(); + let path = PathBuf::from(path); + let path = config.asset_dir.join(path); + if path.is_file() { + sass.call( + "sass", + vec![ + path.to_str().unwrap(), + path.parent() + .unwrap() + .join(format!( + "{}.css", + path.file_stem().unwrap().to_str().unwrap() + )) + .to_str() + .unwrap(), + source_map, + ], + )?; + } + } + } } } } } + // SASS END + Ok(()) } From ecb846dd24d34c0827bfa3503048bf97a8389fda Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Tue, 10 May 2022 23:00:39 +0800 Subject: [PATCH 113/459] Rename `files` to `input` --- src/assets/dioxus.toml | 12 ++++++------ src/builder.rs | 10 +++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/assets/dioxus.toml b/src/assets/dioxus.toml index b481193a8..a5e849bfb 100644 --- a/src/assets/dioxus.toml +++ b/src/assets/dioxus.toml @@ -48,13 +48,13 @@ binaryen = { wasm_opt = true } [application.tools.sass] # auto will check the assets dirs, and auto to transform all scss file to css file. -auto = true +input = "*" # or you can specify some scss file -> css file -files = [ - # some sass file path - # this file will translate to `/css/test.css` - "/css/test.scss" -] +# input = [ +# # some sass file path +# # this file will translate to `/css/test.css` +# "/css/test.scss" +# ] source_map = true \ No newline at end of file diff --git a/src/builder.rs b/src/builder.rs index 75c83990d..f9f0bd9bd 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -365,9 +365,9 @@ fn build_assets(config: &CrateConfig) -> Result<()> { "--source-map" }; - if tab.contains_key("files") { - if tab.get("files").unwrap().is_str() { - let file = tab.get("files").unwrap().as_str().unwrap().trim(); + if tab.contains_key("input") { + if tab.get("input").unwrap().is_str() { + let file = tab.get("input").unwrap().as_str().unwrap().trim(); if file == "*" { // if the sass open auto, we need auto-check the assets dir. @@ -428,9 +428,9 @@ fn build_assets(config: &CrateConfig) -> Result<()> { )?; } } - } else if tab.get("files").unwrap().is_array() { + } else if tab.get("input").unwrap().is_array() { // check files list. - let list = tab.get("files").unwrap().as_array().unwrap(); + let list = tab.get("input").unwrap().as_array().unwrap(); for i in list { if i.is_str() { let path = i.as_str().unwrap(); From bf49d526d773cc87449ac343659609c52890f0ac Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Wed, 11 May 2022 00:27:37 +0800 Subject: [PATCH 114/459] Fixed some problem --- src/builder.rs | 13 ++++++++++++- src/tools.rs | 6 +++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index f9f0bd9bd..77f0838f0 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -409,7 +409,13 @@ fn build_assets(config: &CrateConfig) -> Result<()> { } } else { // just transform one file. - let path = config.asset_dir.join(file); + let path = if &file[0..] == "/" { + &file[1..file.len() - 1] + } else { + file + }; + let path = PathBuf::from(path); + let path = config.asset_dir.join(path); if path.is_file() { sass.call( "sass", @@ -434,6 +440,11 @@ fn build_assets(config: &CrateConfig) -> Result<()> { for i in list { if i.is_str() { let path = i.as_str().unwrap(); + let path = if &path[0..] == "/" { + &path[1..path.len() - 1] + } else { + path + }; let path = PathBuf::from(path); let path = config.asset_dir.join(path); if path.is_file() { diff --git a/src/tools.rs b/src/tools.rs index ae4e58b79..2952a9614 100644 --- a/src/tools.rs +++ b/src/tools.rs @@ -207,7 +207,7 @@ impl Tool { } else { command.to_string() } - }, + } }; if !bin_path.join(&command_file).is_file() { @@ -232,7 +232,7 @@ fn extract_zip(file: &Path, target: &Path) -> anyhow::Result<()> { if !target.exists() { let _ = std::fs::create_dir_all(target)?; } - + for i in 0..zip.len() { let mut file = zip.by_index(i)?; if file.is_dir() { @@ -252,4 +252,4 @@ fn extract_zip(file: &Path, target: &Path) -> anyhow::Result<()> { } Ok(()) -} +} \ No newline at end of file From c6aa4e332df58c223416fafc62e729574ff8c564 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Wed, 11 May 2022 10:01:02 +0800 Subject: [PATCH 115/459] Ignore `scss` file in out_dir --- src/builder.rs | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 77f0838f0..25d087191 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -31,7 +31,7 @@ pub fn build(config: &CrateConfig) -> Result<()> { } = config; // start to build the assets - build_assets(config)?; + let ignore_files = build_assets(config)?; let t_start = std::time::Instant::now(); @@ -158,6 +158,13 @@ pub fn build(config: &CrateConfig) -> Result<()> { log::warn!("Error copying dir: {}", _e); } } + for ignore in &ignore_files { + let ignore = ignore.strip_prefix(&config.asset_dir).unwrap(); + let ignore = config.out_dir.join(ignore); + if ignore.is_file() { + std::fs::remove_file(ignore)?; + } + } } } } @@ -345,7 +352,11 @@ pub fn gen_page(config: &DioxusConfig, serve: bool) -> String { // this function will build some assets file // like sass tool resources -fn build_assets(config: &CrateConfig) -> Result<()> { +// this function will return a array which file don't need copy to out_dir. +fn build_assets(config: &CrateConfig) -> Result> { + + let mut result = vec![]; + let dioxus_config = &config.dioxus_config; let dioxus_tools = dioxus_config.application.tools.clone().unwrap_or_default(); @@ -395,14 +406,17 @@ fn build_assets(config: &CrateConfig) -> Result<()> { .unwrap(), ) .join(out_file); - sass.call( + let res = sass.call( "sass", vec![ temp.to_str().unwrap(), target_path.to_str().unwrap(), source_map, ], - )?; + ); + if res.is_ok() { + result.push(temp.to_path_buf()); + } } } } @@ -417,7 +431,7 @@ fn build_assets(config: &CrateConfig) -> Result<()> { let path = PathBuf::from(path); let path = config.asset_dir.join(path); if path.is_file() { - sass.call( + let res = sass.call( "sass", vec![ path.to_str().unwrap(), @@ -431,7 +445,10 @@ fn build_assets(config: &CrateConfig) -> Result<()> { .unwrap(), source_map, ], - )?; + ); + if res.is_ok() { + result.push(path); + } } } } else if tab.get("input").unwrap().is_array() { @@ -448,7 +465,7 @@ fn build_assets(config: &CrateConfig) -> Result<()> { let path = PathBuf::from(path); let path = config.asset_dir.join(path); if path.is_file() { - sass.call( + let res = sass.call( "sass", vec![ path.to_str().unwrap(), @@ -462,7 +479,10 @@ fn build_assets(config: &CrateConfig) -> Result<()> { .unwrap(), source_map, ], - )?; + ); + if res.is_ok() { + result.push(path); + } } } } @@ -472,7 +492,7 @@ fn build_assets(config: &CrateConfig) -> Result<()> { } // SASS END - Ok(()) + Ok(result) } // use binary_install::{Cache, Download}; From dccd82091a0b499527cd435fccf1a088262235e1 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Wed, 11 May 2022 11:12:23 +0800 Subject: [PATCH 116/459] Fixed `input` option error --- src/builder.rs | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 25d087191..e1ed0a8f1 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -354,7 +354,6 @@ pub fn gen_page(config: &DioxusConfig, serve: bool) -> String { // like sass tool resources // this function will return a array which file don't need copy to out_dir. fn build_assets(config: &CrateConfig) -> Result> { - let mut result = vec![]; let dioxus_config = &config.dioxus_config; @@ -430,19 +429,23 @@ fn build_assets(config: &CrateConfig) -> Result> { }; let path = PathBuf::from(path); let path = config.asset_dir.join(path); + let out_file = + format!("{}.css", path.file_stem().unwrap().to_str().unwrap()); + let target_path = config + .out_dir + .join( + path.strip_prefix(&config.asset_dir) + .unwrap() + .parent() + .unwrap(), + ) + .join(out_file); if path.is_file() { let res = sass.call( "sass", vec![ path.to_str().unwrap(), - path.parent() - .unwrap() - .join(format!( - "{}.css", - path.file_stem().unwrap().to_str().unwrap() - )) - .to_str() - .unwrap(), + target_path.to_str().unwrap(), source_map, ], ); @@ -464,19 +467,23 @@ fn build_assets(config: &CrateConfig) -> Result> { }; let path = PathBuf::from(path); let path = config.asset_dir.join(path); + let out_file = + format!("{}.css", path.file_stem().unwrap().to_str().unwrap()); + let target_path = config + .out_dir + .join( + path.strip_prefix(&config.asset_dir) + .unwrap() + .parent() + .unwrap(), + ) + .join(out_file); if path.is_file() { let res = sass.call( "sass", vec![ path.to_str().unwrap(), - path.parent() - .unwrap() - .join(format!( - "{}.css", - path.file_stem().unwrap().to_str().unwrap() - )) - .to_str() - .unwrap(), + target_path.to_str().unwrap(), source_map, ], ); From 065da8db6589a1c745392b3973bae127ebecb183 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Wed, 11 May 2022 11:14:49 +0800 Subject: [PATCH 117/459] Add `sass` desktop build support --- src/builder.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/builder.rs b/src/builder.rs index e1ed0a8f1..ae6e83605 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -177,6 +177,8 @@ pub fn build(config: &CrateConfig) -> Result<()> { pub fn build_desktop(config: &CrateConfig, is_serve: bool) -> Result<()> { log::info!("🚅 Running build [Desktop] command..."); + let ignore_files = build_assets(config)?; + let mut cmd = Command::new("cargo"); cmd.current_dir(&config.crate_dir) .arg("build") @@ -261,6 +263,13 @@ pub fn build_desktop(config: &CrateConfig, is_serve: bool) -> Result<()> { log::warn!("Error copying dir: {}", e); } } + for ignore in &ignore_files { + let ignore = ignore.strip_prefix(&config.asset_dir).unwrap(); + let ignore = config.out_dir.join(ignore); + if ignore.is_file() { + std::fs::remove_file(ignore)?; + } + } } } } From 60bb0d9eb9f6a6e10267df85840914afa04d460b Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Wed, 11 May 2022 11:15:33 +0800 Subject: [PATCH 118/459] Format code --- src/cli/tool/mod.rs | 2 +- src/tools.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cli/tool/mod.rs b/src/cli/tool/mod.rs index 45c866c40..fde94b29a 100644 --- a/src/cli/tool/mod.rs +++ b/src/cli/tool/mod.rs @@ -27,7 +27,7 @@ impl Tool { } } Tool::AppPath {} => { - if let Some(v) = tools::tools_path().to_str() { + if let Some(v) = tools::tools_path().to_str() { println!("{}", v); } else { log::error!("Tools path get failed."); diff --git a/src/tools.rs b/src/tools.rs index 2952a9614..2ab358d6b 100644 --- a/src/tools.rs +++ b/src/tools.rs @@ -252,4 +252,4 @@ fn extract_zip(file: &Path, target: &Path) -> anyhow::Result<()> { } Ok(()) -} \ No newline at end of file +} From cb650bad8a726c50eacdf8d29669532a5fb75c42 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Wed, 11 May 2022 11:47:49 +0800 Subject: [PATCH 119/459] Fixed some problem --- src/builder.rs | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index ae6e83605..8f3823a65 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -431,24 +431,19 @@ fn build_assets(config: &CrateConfig) -> Result> { } } else { // just transform one file. - let path = if &file[0..] == "/" { - &file[1..file.len() - 1] + let relative_path = if &file[0..1] == "/" { + &file[1..file.len()] } else { file }; - let path = PathBuf::from(path); - let path = config.asset_dir.join(path); + let path = config.asset_dir.join(relative_path); let out_file = format!("{}.css", path.file_stem().unwrap().to_str().unwrap()); let target_path = config .out_dir - .join( - path.strip_prefix(&config.asset_dir) - .unwrap() - .parent() - .unwrap(), - ) + .join(PathBuf::from(relative_path).parent().unwrap()) .join(out_file); + println!("{:?} -- {:?}", target_path, path); if path.is_file() { let res = sass.call( "sass", @@ -460,6 +455,8 @@ fn build_assets(config: &CrateConfig) -> Result> { ); if res.is_ok() { result.push(path); + } else { + log::error!("{:?}", res); } } } @@ -469,23 +466,17 @@ fn build_assets(config: &CrateConfig) -> Result> { for i in list { if i.is_str() { let path = i.as_str().unwrap(); - let path = if &path[0..] == "/" { - &path[1..path.len() - 1] + let relative_path = if &path[0..1] == "/" { + &path[1..path.len()] } else { path }; - let path = PathBuf::from(path); - let path = config.asset_dir.join(path); + let path = config.asset_dir.join(relative_path); let out_file = format!("{}.css", path.file_stem().unwrap().to_str().unwrap()); let target_path = config .out_dir - .join( - path.strip_prefix(&config.asset_dir) - .unwrap() - .parent() - .unwrap(), - ) + .join(PathBuf::from(relative_path).parent().unwrap()) .join(out_file); if path.is_file() { let res = sass.call( From 7f829c4553eaf45eda2e9c7964ba28cac63723cb Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Wed, 11 May 2022 11:50:01 +0800 Subject: [PATCH 120/459] Format code --- src/builder.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/builder.rs b/src/builder.rs index 8f3823a65..e0d3ac285 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -443,7 +443,6 @@ fn build_assets(config: &CrateConfig) -> Result> { .out_dir .join(PathBuf::from(relative_path).parent().unwrap()) .join(out_file); - println!("{:?} -- {:?}", target_path, path); if path.is_file() { let res = sass.call( "sass", From cc56dd19ddbdaf9578ee6f56df7a354bbd2d3bc6 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Thu, 12 May 2022 00:11:51 +0800 Subject: [PATCH 121/459] Add `sass` file extension --- src/builder.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index e0d3ac285..cdb431933 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -399,8 +399,8 @@ fn build_assets(config: &CrateConfig) -> Result> { let temp = entry.path(); if temp.is_file() { let suffix = temp.extension().unwrap().to_str().unwrap(); - if suffix == "scss" { - // if file suffix is `scss` we need transform it. + if suffix == "scss" || suffix == "sass" { + // if file suffix is `scss` / `sass` we need transform it. let out_file = format!( "{}.css", temp.file_stem().unwrap().to_str().unwrap() From 87e6ed0a3d13dfb023c185a249ceee3a7a22d9e8 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Thu, 12 May 2022 22:49:27 +0800 Subject: [PATCH 122/459] Fixed builder problem --- src/builder.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/builder.rs b/src/builder.rs index cdb431933..4f6824780 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -398,7 +398,9 @@ fn build_assets(config: &CrateConfig) -> Result> { { let temp = entry.path(); if temp.is_file() { - let suffix = temp.extension().unwrap().to_str().unwrap(); + let suffix = temp.extension(); + if suffix.is_none() { continue; } + let suffix = suffix.unwrap().to_str().unwrap(); if suffix == "scss" || suffix == "sass" { // if file suffix is `scss` / `sass` we need transform it. let out_file = format!( From 51639af48230bb8a4bb7b50105c1bcd270ac0774 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Mon, 6 Jun 2022 00:16:15 +0800 Subject: [PATCH 123/459] feat: add `profile` flag --- src/builder.rs | 5 +++++ src/cli/build/mod.rs | 4 ++++ src/cli/cfg.rs | 8 ++++++++ src/cli/serve/mod.rs | 4 ++++ src/config.rs | 9 +++++++++ 5 files changed, 30 insertions(+) diff --git a/src/builder.rs b/src/builder.rs index 4f6824780..31bb96f46 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -49,6 +49,11 @@ pub fn build(config: &CrateConfig) -> Result<()> { cmd.arg("--release"); } + if config.custom_profile.is_some() { + let custom_profile = config.custom_profile.as_ref().unwrap(); + cmd.arg(format!("--profile {}", custom_profile)); + } + match executable { ExecutableType::Binary(name) => cmd.arg("--bin").arg(name), ExecutableType::Lib(name) => cmd.arg("--lib").arg(name), diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index 4c043091f..7f8c7b420 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -19,6 +19,10 @@ impl Build { crate_config.as_example(self.build.example.unwrap()); } + if self.build.profile.is_some() { + crate_config.set_profile(self.build.profile.unwrap()); + } + let platform = self.build.platform.unwrap_or_else(|| { crate_config .dioxus_config diff --git a/src/cli/cfg.rs b/src/cli/cfg.rs index f5ee45b87..11a1603c7 100644 --- a/src/cli/cfg.rs +++ b/src/cli/cfg.rs @@ -16,6 +16,10 @@ pub struct ConfigOptsBuild { #[clap(long)] pub example: Option, + /// Build with custom profile + #[clap(long)] + pub profile: Option, + /// Build platform: support Web & Desktop [default: "default_platform"] #[clap(long)] pub platform: Option, @@ -36,6 +40,10 @@ pub struct ConfigOptsServe { #[serde(default)] pub release: bool, + /// Build with custom profile + #[clap(long)] + pub profile: Option, + /// Build platform: support Web & Desktop [default: "default_platform"] #[clap(long)] pub platform: Option, diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index 85bd92c74..1b79284b7 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -24,6 +24,10 @@ impl Serve { crate_config.as_example(self.serve.example.unwrap()); } + if self.serve.profile.is_some() { + crate_config.set_profile(self.serve.profile.unwrap()); + } + let platform = self.serve.platform.unwrap_or_else(|| { crate_config .dioxus_config diff --git a/src/config.rs b/src/config.rs index 783c72ccd..9679fadaa 100644 --- a/src/config.rs +++ b/src/config.rs @@ -114,6 +114,7 @@ pub struct CrateConfig { pub executable: ExecutableType, pub dioxus_config: DioxusConfig, pub release: bool, + pub custom_profile: Option, } #[derive(Debug, Clone)] @@ -163,6 +164,8 @@ impl CrateConfig { let release = false; + let custom_profile = None; + Ok(Self { out_dir, crate_dir, @@ -173,6 +176,7 @@ impl CrateConfig { executable, release, dioxus_config, + custom_profile, }) } @@ -186,6 +190,11 @@ impl CrateConfig { self } + pub fn set_profile(&mut self, profile: String) -> &mut Self { + self.custom_profile = Some(profile); + self + } + // pub fn with_build_options(&mut self, options: &BuildOptions) { // if let Some(name) = &options.example { // self.as_example(name.clone()); From 6aa609144d4b8dde995749ad2de4aaa8d69f16f4 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Mon, 6 Jun 2022 08:46:16 +0800 Subject: [PATCH 124/459] feat: add `profile` flag --- src/builder.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/builder.rs b/src/builder.rs index 31bb96f46..57738b1bc 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -51,7 +51,8 @@ pub fn build(config: &CrateConfig) -> Result<()> { if config.custom_profile.is_some() { let custom_profile = config.custom_profile.as_ref().unwrap(); - cmd.arg(format!("--profile {}", custom_profile)); + cmd.arg("--profile"); + cmd.arg(custom_profile); } match executable { @@ -194,6 +195,12 @@ pub fn build_desktop(config: &CrateConfig, is_serve: bool) -> Result<()> { cmd.arg("--release"); } + if config.custom_profile.is_some() { + let custom_profile = config.custom_profile.as_ref().unwrap(); + cmd.arg("--profile"); + cmd.arg(custom_profile); + } + match &config.executable { crate::ExecutableType::Binary(name) => cmd.arg("--bin").arg(name), crate::ExecutableType::Lib(name) => cmd.arg("--lib").arg(name), From d20e7ab50815014e67871ec2227413a085762690 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Mon, 6 Jun 2022 18:18:22 +0800 Subject: [PATCH 125/459] feat: add `features` flag --- src/builder.rs | 12 ++++++++++++ src/cli/cfg.rs | 8 ++++++++ src/config.rs | 9 ++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/builder.rs b/src/builder.rs index 57738b1bc..46d4c15f5 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -55,6 +55,12 @@ pub fn build(config: &CrateConfig) -> Result<()> { cmd.arg(custom_profile); } + if config.features.is_some() { + let features_str = config.features.as_ref().unwrap().join(" "); + cmd.arg("--features"); + cmd.arg(features_str); + } + match executable { ExecutableType::Binary(name) => cmd.arg("--bin").arg(name), ExecutableType::Lib(name) => cmd.arg("--lib").arg(name), @@ -201,6 +207,12 @@ pub fn build_desktop(config: &CrateConfig, is_serve: bool) -> Result<()> { cmd.arg(custom_profile); } + if config.features.is_some() { + let features_str = config.features.as_ref().unwrap().join(" "); + cmd.arg("--features"); + cmd.arg(features_str); + } + match &config.executable { crate::ExecutableType::Binary(name) => cmd.arg("--bin").arg(name), crate::ExecutableType::Lib(name) => cmd.arg("--lib").arg(name), diff --git a/src/cli/cfg.rs b/src/cli/cfg.rs index 11a1603c7..b8305e3a8 100644 --- a/src/cli/cfg.rs +++ b/src/cli/cfg.rs @@ -23,6 +23,10 @@ pub struct ConfigOptsBuild { /// Build platform: support Web & Desktop [default: "default_platform"] #[clap(long)] pub platform: Option, + + /// Space separated list of features to activate + #[clap(long)] + pub features: Option>, } #[derive(Clone, Debug, Default, Deserialize, Parser)] @@ -47,6 +51,10 @@ pub struct ConfigOptsServe { /// Build platform: support Web & Desktop [default: "default_platform"] #[clap(long)] pub platform: Option, + + /// Space separated list of features to activate + #[clap(long)] + pub features: Option>, } /// Ensure the given value for `--public-url` is formatted correctly. diff --git a/src/config.rs b/src/config.rs index 9679fadaa..6804ae6cd 100644 --- a/src/config.rs +++ b/src/config.rs @@ -115,6 +115,7 @@ pub struct CrateConfig { pub dioxus_config: DioxusConfig, pub release: bool, pub custom_profile: Option, + pub features: Option>, } #[derive(Debug, Clone)] @@ -163,8 +164,8 @@ impl CrateConfig { let executable = ExecutableType::Binary(output_filename); let release = false; - let custom_profile = None; + let features = None; Ok(Self { out_dir, @@ -177,6 +178,7 @@ impl CrateConfig { release, dioxus_config, custom_profile, + features }) } @@ -195,6 +197,11 @@ impl CrateConfig { self } + pub fn set_features(&mut self, features: Vec) -> &mut Self { + self.features = Some(features); + self + } + // pub fn with_build_options(&mut self, options: &BuildOptions) { // if let Some(name) = &options.example { // self.as_example(name.clone()); From 421d2ed2980d4e4d542f1b7b28c31e9ca279a563 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Mon, 6 Jun 2022 21:48:14 +0800 Subject: [PATCH 126/459] feat: add `verbose` flag --- src/builder.rs | 6 ++++++ src/cli/build/mod.rs | 1 + src/cli/cfg.rs | 10 ++++++++++ src/cli/serve/mod.rs | 1 + src/config.rs | 10 +++++++++- 5 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/builder.rs b/src/builder.rs index 46d4c15f5..02add84ad 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -48,6 +48,9 @@ pub fn build(config: &CrateConfig) -> Result<()> { if config.release { cmd.arg("--release"); } + if config.verbose { + cmd.arg("--verbose"); + } if config.custom_profile.is_some() { let custom_profile = config.custom_profile.as_ref().unwrap(); @@ -200,6 +203,9 @@ pub fn build_desktop(config: &CrateConfig, is_serve: bool) -> Result<()> { if config.release { cmd.arg("--release"); } + if config.verbose { + cmd.arg("--verbose"); + } if config.custom_profile.is_some() { let custom_profile = config.custom_profile.as_ref().unwrap(); diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index 7f8c7b420..661f17a5a 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -14,6 +14,7 @@ impl Build { // change the release state. crate_config.with_release(self.build.release); + crate_config.with_verbose(self.build.verbose); if self.build.example.is_some() { crate_config.as_example(self.build.example.unwrap()); diff --git a/src/cli/cfg.rs b/src/cli/cfg.rs index b8305e3a8..26409c370 100644 --- a/src/cli/cfg.rs +++ b/src/cli/cfg.rs @@ -12,6 +12,11 @@ pub struct ConfigOptsBuild { #[serde(default)] pub release: bool, + // Use verbose output [default: false] + #[clap(long)] + #[serde(default)] + pub verbose: bool, + /// Build a example [default: ""] #[clap(long)] pub example: Option, @@ -44,6 +49,11 @@ pub struct ConfigOptsServe { #[serde(default)] pub release: bool, + // Use verbose output [default: false] + #[clap(long)] + #[serde(default)] + pub verbose: bool, + /// Build with custom profile #[clap(long)] pub profile: Option, diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index 1b79284b7..d25aa5bad 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -19,6 +19,7 @@ impl Serve { // change the relase state. crate_config.with_release(self.serve.release); + crate_config.with_verbose(self.serve.verbose); if self.serve.example.is_some() { crate_config.as_example(self.serve.example.unwrap()); diff --git a/src/config.rs b/src/config.rs index 6804ae6cd..6e855002b 100644 --- a/src/config.rs +++ b/src/config.rs @@ -114,6 +114,7 @@ pub struct CrateConfig { pub executable: ExecutableType, pub dioxus_config: DioxusConfig, pub release: bool, + pub verbose: bool, pub custom_profile: Option, pub features: Option>, } @@ -164,6 +165,7 @@ impl CrateConfig { let executable = ExecutableType::Binary(output_filename); let release = false; + let verbose = false; let custom_profile = None; let features = None; @@ -178,7 +180,8 @@ impl CrateConfig { release, dioxus_config, custom_profile, - features + features, + verbose, }) } @@ -192,6 +195,11 @@ impl CrateConfig { self } + pub fn with_verbose(&mut self, verbose: bool) -> &mut Self { + self.verbose = verbose; + self + } + pub fn set_profile(&mut self, profile: String) -> &mut Self { self.custom_profile = Some(profile); self From 49b3ef83d33932bb8ee0e15f128f737994ef902a Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Thu, 9 Jun 2022 09:37:26 -0500 Subject: [PATCH 127/459] create websocket to update rsx and report errors back --- Cargo.toml | 5 + src/hot_reload/mod.rs | 614 ++++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 3 + src/server/mod.rs | 174 ++++++++++-- 4 files changed, 770 insertions(+), 26 deletions(-) create mode 100644 src/hot_reload/mod.rs diff --git a/Cargo.toml b/Cargo.toml index 21e2dad7e..4acd41463 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,6 +46,11 @@ flate2 = "1.0.22" tar = "0.4.38" tower = "0.4.12" +# hot reload +syn = "1.0" +dioxus-rsx-interpreter = { path = "../dioxus/packages/rsx_interpreter" } +proc-macro2 = { version = "1.0", features = ["span-locations"] } + [[bin]] path = "src/main.rs" name = "dioxus" diff --git a/src/hot_reload/mod.rs b/src/hot_reload/mod.rs new file mode 100644 index 000000000..d70cda29e --- /dev/null +++ b/src/hot_reload/mod.rs @@ -0,0 +1,614 @@ +use dioxus_rsx::{BodyNode, CallBody}; +use proc_macro2::TokenStream; +use syn::{File, Macro}; + +pub enum DiffResult { + CodeChanged, + RsxChanged(Vec<(Macro, TokenStream)>), +} + +pub fn find_rsx(new: &File, old: &File) -> DiffResult { + let mut rsx_calls = Vec::new(); + if new.items.len() != old.items.len() { + return DiffResult::CodeChanged; + } + for (new, old) in new.items.iter().zip(old.items.iter()) { + if find_rsx_item(new, old, &mut rsx_calls) { + return DiffResult::CodeChanged; + } + } + DiffResult::RsxChanged(rsx_calls) +} + +fn find_rsx_item( + new: &syn::Item, + old: &syn::Item, + rsx_calls: &mut Vec<(Macro, TokenStream)>, +) -> bool { + match (new, old) { + (syn::Item::Const(new_item), syn::Item::Const(old_item)) => { + find_rsx_expr(&new_item.expr, &old_item.expr, rsx_calls) + || new_item.attrs != old_item.attrs + || new_item.vis != old_item.vis + || new_item.const_token != old_item.const_token + || new_item.ident != old_item.ident + || new_item.colon_token != old_item.colon_token + || new_item.ty != old_item.ty + || new_item.eq_token != old_item.eq_token + || new_item.semi_token != old_item.semi_token + } + (syn::Item::Enum(new_item), syn::Item::Enum(old_item)) => { + if new_item.variants.len() != old_item.variants.len() { + return true; + } + for (new_varient, old_varient) in new_item.variants.iter().zip(old_item.variants.iter()) + { + match (&new_varient.discriminant, &old_varient.discriminant) { + (Some((new_eq, new_expr)), Some((old_eq, old_expr))) => { + if find_rsx_expr(new_expr, old_expr, rsx_calls) || new_eq != old_eq { + return true; + } + } + (None, None) => (), + _ => return true, + } + if new_varient.attrs != old_varient.attrs + || new_varient.ident != old_varient.ident + || new_varient.fields != old_varient.fields + { + return true; + } + } + new_item.attrs != old_item.attrs + || new_item.vis != old_item.vis + || new_item.enum_token != old_item.enum_token + || new_item.ident != old_item.ident + || new_item.generics != old_item.generics + || new_item.brace_token != old_item.brace_token + } + (syn::Item::ExternCrate(new_item), syn::Item::ExternCrate(old_item)) => { + old_item != new_item + } + (syn::Item::Fn(new_item), syn::Item::Fn(old_item)) => { + find_rsx_block(&new_item.block, &old_item.block, rsx_calls) + || new_item.attrs != old_item.attrs + || new_item.vis != old_item.vis + || new_item.sig != old_item.sig + } + (syn::Item::ForeignMod(new_item), syn::Item::ForeignMod(old_item)) => old_item != new_item, + (syn::Item::Impl(new_item), syn::Item::Impl(old_item)) => { + if new_item.items.len() != old_item.items.len() { + return true; + } + for (new_item, old_item) in new_item.items.iter().zip(old_item.items.iter()) { + if match (new_item, old_item) { + (syn::ImplItem::Const(new_item), syn::ImplItem::Const(old_item)) => { + find_rsx_expr(&new_item.expr, &old_item.expr, rsx_calls) + } + (syn::ImplItem::Method(new_item), syn::ImplItem::Method(old_item)) => { + find_rsx_block(&new_item.block, &old_item.block, rsx_calls) + } + (syn::ImplItem::Type(new_item), syn::ImplItem::Type(old_item)) => { + old_item != new_item + } + (syn::ImplItem::Macro(new_item), syn::ImplItem::Macro(old_item)) => { + old_item != new_item + } + _ => true, + } { + return true; + } + } + new_item.attrs != old_item.attrs + || new_item.defaultness != old_item.defaultness + || new_item.unsafety != old_item.unsafety + || new_item.impl_token != old_item.impl_token + || new_item.generics != old_item.generics + || new_item.trait_ != old_item.trait_ + || new_item.self_ty != old_item.self_ty + || new_item.brace_token != old_item.brace_token + } + (syn::Item::Macro(new_item), syn::Item::Macro(old_item)) => old_item != new_item, + (syn::Item::Macro2(new_item), syn::Item::Macro2(old_item)) => old_item != new_item, + (syn::Item::Mod(new_item), syn::Item::Mod(old_item)) => { + match (&new_item.content, &old_item.content) { + (Some((_, new_items)), Some((_, old_items))) => { + if new_items.len() != old_items.len() { + return true; + } + for (new_item, old_item) in new_items.iter().zip(old_items.iter()) { + if find_rsx_item(new_item, old_item, rsx_calls) { + return true; + } + } + new_item.attrs != old_item.attrs + || new_item.vis != old_item.vis + || new_item.mod_token != old_item.mod_token + || new_item.ident != old_item.ident + || new_item.semi != old_item.semi + } + (None, None) => { + new_item.attrs != old_item.attrs + || new_item.vis != old_item.vis + || new_item.mod_token != old_item.mod_token + || new_item.ident != old_item.ident + || new_item.semi != old_item.semi + } + _ => true, + } + } + (syn::Item::Static(new_item), syn::Item::Static(old_item)) => { + find_rsx_expr(&new_item.expr, &old_item.expr, rsx_calls) + || new_item.attrs != old_item.attrs + || new_item.vis != old_item.vis + || new_item.static_token != old_item.static_token + || new_item.mutability != old_item.mutability + || new_item.ident != old_item.ident + || new_item.colon_token != old_item.colon_token + || new_item.ty != old_item.ty + || new_item.eq_token != old_item.eq_token + || new_item.semi_token != old_item.semi_token + } + (syn::Item::Struct(new_item), syn::Item::Struct(old_item)) => old_item != new_item, + (syn::Item::Trait(new_item), syn::Item::Trait(old_item)) => { + find_rsx_trait(new_item, old_item, rsx_calls) + } + (syn::Item::TraitAlias(new_item), syn::Item::TraitAlias(old_item)) => old_item != new_item, + (syn::Item::Type(new_item), syn::Item::Type(old_item)) => old_item != new_item, + (syn::Item::Union(new_item), syn::Item::Union(old_item)) => old_item != new_item, + (syn::Item::Use(new_item), syn::Item::Use(old_item)) => old_item != new_item, + (syn::Item::Verbatim(_), syn::Item::Verbatim(_)) => false, + _ => return true, + } +} + +fn find_rsx_trait( + new_item: &syn::ItemTrait, + old_item: &syn::ItemTrait, + rsx_calls: &mut Vec<(Macro, TokenStream)>, +) -> bool { + if new_item.items.len() != old_item.items.len() { + return true; + } + for (new_item, old_item) in new_item.items.iter().zip(old_item.items.iter()) { + if match (new_item, old_item) { + (syn::TraitItem::Const(new_item), syn::TraitItem::Const(old_item)) => { + if let (Some((_, new_expr)), Some((_, old_expr))) = + (&new_item.default, &old_item.default) + { + find_rsx_expr(new_expr, old_expr, rsx_calls) + } else { + true + } + } + (syn::TraitItem::Method(new_item), syn::TraitItem::Method(old_item)) => { + if let (Some(new_block), Some(old_block)) = (&new_item.default, &old_item.default) { + find_rsx_block(new_block, old_block, rsx_calls) + } else { + true + } + } + (syn::TraitItem::Type(new_item), syn::TraitItem::Type(old_item)) => { + old_item != new_item + } + (syn::TraitItem::Macro(new_item), syn::TraitItem::Macro(old_item)) => { + old_item != new_item + } + _ => true, + } { + return true; + } + } + new_item.attrs != old_item.attrs + || new_item.vis != old_item.vis + || new_item.unsafety != old_item.unsafety + || new_item.auto_token != old_item.auto_token + || new_item.ident != old_item.ident + || new_item.generics != old_item.generics + || new_item.colon_token != old_item.colon_token + || new_item.supertraits != old_item.supertraits + || new_item.brace_token != old_item.brace_token +} + +fn find_rsx_block( + new_block: &syn::Block, + old_block: &syn::Block, + rsx_calls: &mut Vec<(Macro, TokenStream)>, +) -> bool { + if new_block.stmts.len() != old_block.stmts.len() { + return true; + } + for (new_stmt, old_stmt) in new_block.stmts.iter().zip(old_block.stmts.iter()) { + if find_rsx_stmt(new_stmt, old_stmt, rsx_calls) { + return true; + } + } + new_block.brace_token != old_block.brace_token +} + +fn find_rsx_stmt( + new_stmt: &syn::Stmt, + old_stmt: &syn::Stmt, + rsx_calls: &mut Vec<(Macro, TokenStream)>, +) -> bool { + match (new_stmt, old_stmt) { + (syn::Stmt::Local(new_local), syn::Stmt::Local(old_local)) => { + (match (&new_local.init, &old_local.init) { + (Some((new_eq, new_expr)), Some((old_eq, old_expr))) => { + find_rsx_expr(new_expr, old_expr, rsx_calls) || new_eq != old_eq + } + (None, None) => false, + _ => true, + } || new_local.attrs != old_local.attrs + || new_local.let_token != old_local.let_token + || new_local.pat != old_local.pat + || new_local.semi_token != old_local.semi_token) + } + (syn::Stmt::Item(new_item), syn::Stmt::Item(old_item)) => { + find_rsx_item(new_item, old_item, rsx_calls) + } + (syn::Stmt::Expr(new_expr), syn::Stmt::Expr(old_expr)) => { + find_rsx_expr(new_expr, old_expr, rsx_calls) + } + (syn::Stmt::Semi(new_expr, new_semi), syn::Stmt::Semi(old_expr, old_semi)) => { + find_rsx_expr(new_expr, old_expr, rsx_calls) || new_semi != old_semi + } + _ => true, + } +} + +fn find_rsx_expr( + new_expr: &syn::Expr, + old_expr: &syn::Expr, + rsx_calls: &mut Vec<(Macro, TokenStream)>, +) -> bool { + match (new_expr, old_expr) { + (syn::Expr::Array(new_expr), syn::Expr::Array(old_expr)) => { + if new_expr.elems.len() != old_expr.elems.len() { + return true; + } + for (new_el, old_el) in new_expr.elems.iter().zip(old_expr.elems.iter()) { + if find_rsx_expr(new_el, old_el, rsx_calls) { + return true; + } + } + new_expr.attrs != old_expr.attrs || new_expr.bracket_token != old_expr.bracket_token + } + (syn::Expr::Assign(new_expr), syn::Expr::Assign(old_expr)) => { + find_rsx_expr(&new_expr.left, &old_expr.left, rsx_calls) + || find_rsx_expr(&new_expr.right, &old_expr.right, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.eq_token != old_expr.eq_token + } + (syn::Expr::AssignOp(new_expr), syn::Expr::AssignOp(old_expr)) => { + find_rsx_expr(&new_expr.left, &old_expr.left, rsx_calls) + || find_rsx_expr(&new_expr.right, &old_expr.right, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.op != old_expr.op + } + (syn::Expr::Async(new_expr), syn::Expr::Async(old_expr)) => { + find_rsx_block(&new_expr.block, &old_expr.block, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.async_token != old_expr.async_token + || new_expr.capture != old_expr.capture + } + (syn::Expr::Await(new_expr), syn::Expr::Await(old_expr)) => { + find_rsx_expr(&new_expr.base, &old_expr.base, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.dot_token != old_expr.dot_token + || new_expr.await_token != old_expr.await_token + } + (syn::Expr::Binary(new_expr), syn::Expr::Binary(old_expr)) => { + find_rsx_expr(&new_expr.left, &old_expr.left, rsx_calls) + || find_rsx_expr(&new_expr.right, &old_expr.right, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.op != old_expr.op + } + (syn::Expr::Block(new_expr), syn::Expr::Block(old_expr)) => { + find_rsx_block(&new_expr.block, &old_expr.block, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.label != old_expr.label + } + (syn::Expr::Box(new_expr), syn::Expr::Box(old_expr)) => { + find_rsx_expr(&new_expr.expr, &old_expr.expr, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.box_token != old_expr.box_token + } + (syn::Expr::Break(new_expr), syn::Expr::Break(old_expr)) => { + match (&new_expr.expr, &old_expr.expr) { + (Some(new_inner), Some(old_inner)) => { + find_rsx_expr(new_inner, old_inner, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.break_token != old_expr.break_token + || new_expr.label != old_expr.label + } + (None, None) => { + new_expr.attrs != old_expr.attrs + || new_expr.break_token != old_expr.break_token + || new_expr.label != old_expr.label + } + _ => true, + } + } + (syn::Expr::Call(new_expr), syn::Expr::Call(old_expr)) => { + find_rsx_expr(&new_expr.func, &old_expr.func, rsx_calls); + if new_expr.args.len() != old_expr.args.len() { + return true; + } + for (new_arg, old_arg) in new_expr.args.iter().zip(old_expr.args.iter()) { + if find_rsx_expr(new_arg, old_arg, rsx_calls) { + return true; + } + } + new_expr.attrs != old_expr.attrs || new_expr.paren_token != old_expr.paren_token + } + (syn::Expr::Cast(new_expr), syn::Expr::Cast(old_expr)) => { + find_rsx_expr(&new_expr.expr, &old_expr.expr, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.as_token != old_expr.as_token + || new_expr.ty != old_expr.ty + } + (syn::Expr::Closure(new_expr), syn::Expr::Closure(old_expr)) => { + find_rsx_expr(&new_expr.body, &old_expr.body, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.movability != old_expr.movability + || new_expr.asyncness != old_expr.asyncness + || new_expr.capture != old_expr.capture + || new_expr.or1_token != old_expr.or1_token + || new_expr.inputs != old_expr.inputs + || new_expr.or2_token != old_expr.or2_token + || new_expr.output != old_expr.output + } + (syn::Expr::Continue(new_expr), syn::Expr::Continue(old_expr)) => old_expr != new_expr, + (syn::Expr::Field(new_expr), syn::Expr::Field(old_expr)) => { + find_rsx_expr(&new_expr.base, &old_expr.base, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.dot_token != old_expr.dot_token + || new_expr.member != old_expr.member + } + (syn::Expr::ForLoop(new_expr), syn::Expr::ForLoop(old_expr)) => { + find_rsx_block(&new_expr.body, &old_expr.body, rsx_calls) + || find_rsx_expr(&new_expr.expr, &old_expr.expr, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.label != old_expr.label + || new_expr.for_token != old_expr.for_token + || new_expr.pat != old_expr.pat + || new_expr.in_token != old_expr.in_token + } + (syn::Expr::Group(new_expr), syn::Expr::Group(old_expr)) => { + find_rsx_expr(&new_expr.expr, &old_expr.expr, rsx_calls) + } + (syn::Expr::If(new_expr), syn::Expr::If(old_expr)) => { + if find_rsx_expr(&new_expr.cond, &old_expr.cond, rsx_calls) + || find_rsx_block(&new_expr.then_branch, &old_expr.then_branch, rsx_calls) + { + return true; + } + match (&new_expr.else_branch, &old_expr.else_branch) { + (Some((new_tok, new_else)), Some((old_tok, old_else))) => { + find_rsx_expr(new_else, old_else, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.if_token != old_expr.if_token + || new_expr.cond != old_expr.cond + || new_tok != old_tok + } + (None, None) => { + new_expr.attrs != old_expr.attrs + || new_expr.if_token != old_expr.if_token + || new_expr.cond != old_expr.cond + } + _ => true, + } + } + (syn::Expr::Index(new_expr), syn::Expr::Index(old_expr)) => { + find_rsx_expr(&new_expr.expr, &old_expr.expr, rsx_calls) + || find_rsx_expr(&new_expr.index, &old_expr.index, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.bracket_token != old_expr.bracket_token + } + (syn::Expr::Let(new_expr), syn::Expr::Let(old_expr)) => { + find_rsx_expr(&new_expr.expr, &old_expr.expr, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.let_token != old_expr.let_token + || new_expr.pat != old_expr.pat + || new_expr.eq_token != old_expr.eq_token + } + (syn::Expr::Lit(new_expr), syn::Expr::Lit(old_expr)) => old_expr != new_expr, + (syn::Expr::Loop(new_expr), syn::Expr::Loop(old_expr)) => { + find_rsx_block(&new_expr.body, &old_expr.body, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.label != old_expr.label + || new_expr.loop_token != old_expr.loop_token + } + (syn::Expr::Macro(new_expr), syn::Expr::Macro(old_expr)) => { + let new_mac = &new_expr.mac; + let old_mac = &old_expr.mac; + if new_mac.path.get_ident().map(|ident| ident.to_string()) == Some("rsx".to_string()) + && old_mac.path.get_ident().map(|ident| ident.to_string()) + == Some("rsx".to_string()) + { + rsx_calls.push((old_mac.clone(), new_mac.tokens.clone())); + false + } else { + new_expr != old_expr + } + } + (syn::Expr::Match(new_expr), syn::Expr::Match(old_expr)) => { + if find_rsx_expr(&new_expr.expr, &old_expr.expr, rsx_calls) { + return true; + } + for (new_arm, old_arm) in new_expr.arms.iter().zip(old_expr.arms.iter()) { + match (&new_arm.guard, &old_arm.guard) { + (Some((new_tok, new_expr)), Some((old_tok, old_expr))) => { + if find_rsx_expr(new_expr, old_expr, rsx_calls) || new_tok != old_tok { + return true; + } + } + (None, None) => (), + _ => return true, + } + if find_rsx_expr(&new_arm.body, &old_arm.body, rsx_calls) + || new_arm.attrs != old_arm.attrs + || new_arm.pat != old_arm.pat + || new_arm.fat_arrow_token != old_arm.fat_arrow_token + || new_arm.comma != old_arm.comma + { + return true; + } + } + new_expr.attrs != old_expr.attrs + || new_expr.match_token != old_expr.match_token + || new_expr.brace_token != old_expr.brace_token + } + (syn::Expr::MethodCall(new_expr), syn::Expr::MethodCall(old_expr)) => { + if find_rsx_expr(&new_expr.receiver, &old_expr.receiver, rsx_calls) { + return true; + } + for (new_arg, old_arg) in new_expr.args.iter().zip(old_expr.args.iter()) { + if find_rsx_expr(new_arg, old_arg, rsx_calls) { + return true; + } + } + new_expr.attrs != old_expr.attrs + || new_expr.dot_token != old_expr.dot_token + || new_expr.method != old_expr.method + || new_expr.turbofish != old_expr.turbofish + || new_expr.paren_token != old_expr.paren_token + } + (syn::Expr::Paren(new_expr), syn::Expr::Paren(old_expr)) => { + find_rsx_expr(&new_expr.expr, &old_expr.expr, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.paren_token != old_expr.paren_token + } + (syn::Expr::Path(new_expr), syn::Expr::Path(old_expr)) => old_expr != new_expr, + (syn::Expr::Range(new_expr), syn::Expr::Range(old_expr)) => { + match (&new_expr.from, &old_expr.from) { + (Some(new_expr), Some(old_expr)) => { + if find_rsx_expr(new_expr, old_expr, rsx_calls) { + return true; + } + } + (None, None) => (), + _ => return true, + } + match (&new_expr.to, &old_expr.to) { + (Some(new_inner), Some(old_inner)) => { + find_rsx_expr(new_inner, old_inner, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.limits != old_expr.limits + } + (None, None) => { + new_expr.attrs != old_expr.attrs || new_expr.limits != old_expr.limits + } + _ => true, + } + } + (syn::Expr::Reference(new_expr), syn::Expr::Reference(old_expr)) => { + find_rsx_expr(&new_expr.expr, &old_expr.expr, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.and_token != old_expr.and_token + || new_expr.mutability != old_expr.mutability + } + (syn::Expr::Repeat(new_expr), syn::Expr::Repeat(old_expr)) => { + find_rsx_expr(&new_expr.expr, &old_expr.expr, rsx_calls) + || find_rsx_expr(&new_expr.len, &old_expr.len, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.bracket_token != old_expr.bracket_token + || new_expr.semi_token != old_expr.semi_token + } + (syn::Expr::Return(new_expr), syn::Expr::Return(old_expr)) => { + match (&new_expr.expr, &old_expr.expr) { + (Some(new_inner), Some(old_inner)) => { + find_rsx_expr(new_inner, old_inner, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.return_token != old_expr.return_token + } + (None, None) => { + new_expr.attrs != old_expr.attrs + || new_expr.return_token != old_expr.return_token + } + _ => true, + } + } + (syn::Expr::Struct(new_expr), syn::Expr::Struct(old_expr)) => { + match (&new_expr.rest, &old_expr.rest) { + (Some(new_expr), Some(old_expr)) => { + if find_rsx_expr(new_expr, old_expr, rsx_calls) { + return true; + } + } + (None, None) => (), + _ => return true, + } + for (new_field, old_field) in new_expr.fields.iter().zip(old_expr.fields.iter()) { + if find_rsx_expr(&new_field.expr, &old_field.expr, rsx_calls) + || new_field.attrs != old_field.attrs + || new_field.member != old_field.member + || new_field.colon_token != old_field.colon_token + { + return true; + } + } + new_expr.attrs != old_expr.attrs + || new_expr.path != old_expr.path + || new_expr.brace_token != old_expr.brace_token + || new_expr.dot2_token != old_expr.dot2_token + } + (syn::Expr::Try(new_expr), syn::Expr::Try(old_expr)) => { + find_rsx_expr(&new_expr.expr, &old_expr.expr, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.question_token != old_expr.question_token + } + (syn::Expr::TryBlock(new_expr), syn::Expr::TryBlock(old_expr)) => { + find_rsx_block(&new_expr.block, &old_expr.block, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.try_token != old_expr.try_token + } + (syn::Expr::Tuple(new_expr), syn::Expr::Tuple(old_expr)) => { + for (new_el, old_el) in new_expr.elems.iter().zip(old_expr.elems.iter()) { + if find_rsx_expr(new_el, old_el, rsx_calls) { + return true; + } + } + new_expr.attrs != old_expr.attrs || new_expr.paren_token != old_expr.paren_token + } + (syn::Expr::Type(new_expr), syn::Expr::Type(old_expr)) => { + find_rsx_expr(&new_expr.expr, &old_expr.expr, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.colon_token != old_expr.colon_token + || new_expr.ty != old_expr.ty + } + (syn::Expr::Unary(new_expr), syn::Expr::Unary(old_expr)) => { + find_rsx_expr(&new_expr.expr, &old_expr.expr, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.op != old_expr.op + } + (syn::Expr::Unsafe(new_expr), syn::Expr::Unsafe(old_expr)) => { + find_rsx_block(&new_expr.block, &old_expr.block, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.unsafe_token != old_expr.unsafe_token + } + (syn::Expr::While(new_expr), syn::Expr::While(old_expr)) => { + find_rsx_expr(&new_expr.cond, &old_expr.cond, rsx_calls) + || find_rsx_block(&new_expr.body, &old_expr.body, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.label != old_expr.label + || new_expr.while_token != old_expr.while_token + } + (syn::Expr::Yield(new_expr), syn::Expr::Yield(old_expr)) => { + match (&new_expr.expr, &old_expr.expr) { + (Some(new_inner), Some(old_inner)) => { + find_rsx_expr(new_inner, old_inner, rsx_calls) + || new_expr.attrs != old_expr.attrs + || new_expr.yield_token != old_expr.yield_token + } + (None, None) => { + new_expr.attrs != old_expr.attrs || new_expr.yield_token != old_expr.yield_token + } + _ => true, + } + } + (syn::Expr::Verbatim(_), syn::Expr::Verbatim(_)) => false, + _ => true, + } +} diff --git a/src/lib.rs b/src/lib.rs index 8cd4b1f2d..722b03a06 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -18,3 +18,6 @@ pub use error::*; pub mod logging; pub use logging::*; + +pub mod hot_reload; +pub use hot_reload::*; diff --git a/src/server/mod.rs b/src/server/mod.rs index 1df13ca6a..230136e54 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -7,18 +7,28 @@ use axum::{ Router, }; use notify::{RecommendedWatcher, Watcher}; +use std::{fs::File, io::Read}; +use syn::__private::ToTokens; use std::{path::PathBuf, sync::Arc}; use tower::ServiceBuilder; use tower_http::services::fs::{ServeDir, ServeFileSystemResponseBody}; -use crate::{builder, serve::Serve, CrateConfig, Result}; +use crate::{builder, find_rsx, serve::Serve, CrateConfig, Result}; use tokio::sync::broadcast; -struct WsRelodState { +use std::collections::HashMap; + +use dioxus_rsx_interpreter::{error::RecompileReason, CodeLocation, SetRsxMessage}; + +struct WsReloadState { update: broadcast::Sender, } +struct HotReloadState { + messages: broadcast::Sender, +} + pub async fn startup(config: CrateConfig) -> Result<()> { log::info!("🚀 Starting development server..."); @@ -26,35 +36,20 @@ pub async fn startup(config: CrateConfig) -> Result<()> { let (reload_tx, _) = broadcast::channel(100); - let ws_reload_state = Arc::new(WsRelodState { + let ws_reload_state = Arc::new(WsReloadState { update: reload_tx.clone(), }); + let hot_reload_tx = broadcast::channel(100).0; + let hot_reload_state = Arc::new(HotReloadState { + messages: hot_reload_tx.clone(), + }); + let mut last_update_time = chrono::Local::now().timestamp(); // file watcher: check file change let watcher_conf = config.clone(); - let mut watcher = RecommendedWatcher::new(move |_: notify::Result| { - if chrono::Local::now().timestamp() > last_update_time { - log::info!("Start to rebuild project..."); - if builder::build(&watcher_conf).is_ok() { - // change the websocket reload state to true; - // the page will auto-reload. - if watcher_conf - .dioxus_config - .web - .watcher - .reload_html - .unwrap_or(false) - { - let _ = Serve::regen_dev_page(&watcher_conf); - } - let _ = reload_tx.send("reload".into()); - last_update_time = chrono::Local::now().timestamp(); - } - } - }) - .unwrap(); + let mut old_files_parsed: HashMap = HashMap::new(); let allow_watch_path = config .dioxus_config .web @@ -63,6 +58,92 @@ pub async fn startup(config: CrateConfig) -> Result<()> { .clone() .unwrap_or_else(|| vec![PathBuf::from("src")]); + let crate_dir = config.crate_dir.clone(); + + let mut watcher = RecommendedWatcher::new(move |evt: notify::Result| { + if let Ok(evt) = evt { + if let notify::EventKind::Modify(_) = evt.kind { + for path in evt.paths { + log::info!("File changed: {}", path.display()); + let mut file = File::open(path.clone()).unwrap(); + let mut src = String::new(); + file.read_to_string(&mut src).expect("Unable to read file"); + if src.is_empty() { + continue; + } + if let Ok(syntax) = syn::parse_file(&src) { + if let Some(old_str) = old_files_parsed.get(path.to_str().unwrap()) { + if let Ok(old) = syn::parse_file(&old_str) { + match find_rsx(&syntax, &old) { + crate::DiffResult::CodeChanged => { + log::info!("reload required"); + if chrono::Local::now().timestamp() > last_update_time { + log::info!("Start to rebuild project..."); + if builder::build(&watcher_conf).is_ok() { + // change the websocket reload state to true; + // the page will auto-reload. + if watcher_conf + .dioxus_config + .web + .watcher + .reload_html + .unwrap_or(false) + { + let _ = Serve::regen_dev_page(&watcher_conf); + } + let _ = reload_tx.send("reload".into()); + old_files_parsed.insert( + path.to_str().unwrap().to_string(), + src, + ); + last_update_time = chrono::Local::now().timestamp(); + } + } + } + crate::DiffResult::RsxChanged(changed) => { + for (old, new) in changed.into_iter() { + if let Some(hr) = old + .to_token_stream() + .into_iter() + .map(|tree| { + let location = tree.span(); + let start = location.start(); + CodeLocation { + file: path + .strip_prefix(&crate_dir) + .unwrap() + .display() + .to_string(), + line: start.line as u32, + column: start.column as u32 + 1, + } + }) + .min_by(|cl1, cl2| { + cl1.line + .cmp(&cl2.line) + .then(cl1.column.cmp(&cl2.column)) + }) + { + let rsx = new.to_string(); + let _ = hot_reload_tx.send(SetRsxMessage { + location: hr, + new_text: rsx, + }); + } + } + } + } + } + } else { + old_files_parsed.insert(path.to_str().unwrap().to_string(), src); + } + } + } + } + } + }) + .unwrap(); + for sub_path in allow_watch_path { watcher .watch( @@ -115,6 +196,7 @@ pub async fn startup(config: CrateConfig) -> Result<()> { let router = Router::new() .route("/_dioxus/ws", get(ws_handler)) + .route("/_dioxus/hot_reload", get(hot_reload_handler)) .fallback( get_service(file_service).handle_error(|error: std::io::Error| async move { ( @@ -125,7 +207,12 @@ pub async fn startup(config: CrateConfig) -> Result<()> { ); axum::Server::bind(&format!("0.0.0.0:{}", port).parse().unwrap()) - .serve(router.layer(Extension(ws_reload_state)).into_make_service()) + .serve( + router + .layer(Extension(ws_reload_state)) + .layer(Extension(hot_reload_state)) + .into_make_service(), + ) .await?; Ok(()) @@ -134,7 +221,7 @@ pub async fn startup(config: CrateConfig) -> Result<()> { async fn ws_handler( ws: WebSocketUpgrade, _: Option>, - Extension(state): Extension>, + Extension(state): Extension>, ) -> impl IntoResponse { ws.on_upgrade(|mut socket| async move { let mut rx = state.update.subscribe(); @@ -157,3 +244,38 @@ async fn ws_handler( reload_watcher.await.unwrap(); }) } + +async fn hot_reload_handler( + ws: WebSocketUpgrade, + _: Option>, + Extension(state): Extension>, +) -> impl IntoResponse { + ws.on_upgrade(|mut socket| async move { + println!("🔥 Hot Reload WebSocket is connected."); + let mut rx = state.messages.subscribe(); + loop { + let read_set_rsx = rx.recv(); + let read_err = socket.recv(); + tokio::select! { + err = read_err => { + if let Some(Ok(Message::Text(err))) = err { + let error: RecompileReason = serde_json::from_str(&err).unwrap(); + log::error!("{:?}", error); + }; + }, + set_rsx = read_set_rsx => { + if let Ok(rsx) = set_rsx{ + if socket + .send(Message::Text(serde_json::to_string(&rsx).unwrap())) + .await + .is_err() + { + break; + }; + // println!("{:?}", rsx); + } + } + }; + } + }) +} From 3ccd65b582b8320b24c8921829b777084a6d2e1e Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Thu, 9 Jun 2022 10:35:18 -0500 Subject: [PATCH 128/459] remove unused import --- src/hot_reload/mod.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/hot_reload/mod.rs b/src/hot_reload/mod.rs index d70cda29e..3aced9567 100644 --- a/src/hot_reload/mod.rs +++ b/src/hot_reload/mod.rs @@ -1,4 +1,3 @@ -use dioxus_rsx::{BodyNode, CallBody}; use proc_macro2::TokenStream; use syn::{File, Macro}; From 61e9f56816495ad18c367cc72038409e60382ddc Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Thu, 9 Jun 2022 11:37:48 -0500 Subject: [PATCH 129/459] automaticly reload when rsx requires it --- src/server/mod.rs | 59 +++++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 230136e54..c4ab60385 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -7,7 +7,7 @@ use axum::{ Router, }; use notify::{RecommendedWatcher, Watcher}; -use std::{fs::File, io::Read}; +use std::{fs::File, io::Read, sync::Mutex}; use syn::__private::ToTokens; use std::{path::PathBuf, sync::Arc}; @@ -23,10 +23,13 @@ use dioxus_rsx_interpreter::{error::RecompileReason, CodeLocation, SetRsxMessage struct WsReloadState { update: broadcast::Sender, + last_file_rebuild: Arc>>, + watcher_config: CrateConfig, } struct HotReloadState { messages: broadcast::Sender, + update: broadcast::Sender, } pub async fn startup(config: CrateConfig) -> Result<()> { @@ -36,20 +39,23 @@ pub async fn startup(config: CrateConfig) -> Result<()> { let (reload_tx, _) = broadcast::channel(100); + let last_file_rebuild = Arc::new(Mutex::new(HashMap::new())); + let ws_reload_state = Arc::new(WsReloadState { update: reload_tx.clone(), + last_file_rebuild: last_file_rebuild.clone(), + watcher_config: config.clone(), }); let hot_reload_tx = broadcast::channel(100).0; let hot_reload_state = Arc::new(HotReloadState { messages: hot_reload_tx.clone(), + update: reload_tx.clone(), }); let mut last_update_time = chrono::Local::now().timestamp(); // file watcher: check file change - let watcher_conf = config.clone(); - let mut old_files_parsed: HashMap = HashMap::new(); let allow_watch_path = config .dioxus_config .web @@ -64,7 +70,6 @@ pub async fn startup(config: CrateConfig) -> Result<()> { if let Ok(evt) = evt { if let notify::EventKind::Modify(_) = evt.kind { for path in evt.paths { - log::info!("File changed: {}", path.display()); let mut file = File::open(path.clone()).unwrap(); let mut src = String::new(); file.read_to_string(&mut src).expect("Unable to read file"); @@ -72,35 +77,19 @@ pub async fn startup(config: CrateConfig) -> Result<()> { continue; } if let Ok(syntax) = syn::parse_file(&src) { - if let Some(old_str) = old_files_parsed.get(path.to_str().unwrap()) { + let mut last_file_rebuild = last_file_rebuild.lock().unwrap(); + if let Some(old_str) = last_file_rebuild.get(path.to_str().unwrap()) { if let Ok(old) = syn::parse_file(&old_str) { match find_rsx(&syntax, &old) { crate::DiffResult::CodeChanged => { log::info!("reload required"); if chrono::Local::now().timestamp() > last_update_time { - log::info!("Start to rebuild project..."); - if builder::build(&watcher_conf).is_ok() { - // change the websocket reload state to true; - // the page will auto-reload. - if watcher_conf - .dioxus_config - .web - .watcher - .reload_html - .unwrap_or(false) - { - let _ = Serve::regen_dev_page(&watcher_conf); - } - let _ = reload_tx.send("reload".into()); - old_files_parsed.insert( - path.to_str().unwrap().to_string(), - src, - ); - last_update_time = chrono::Local::now().timestamp(); - } + let _ = reload_tx.send("reload".into()); + last_update_time = chrono::Local::now().timestamp(); } } crate::DiffResult::RsxChanged(changed) => { + log::info!("reloading rsx"); for (old, new) in changed.into_iter() { if let Some(hr) = old .to_token_stream() @@ -135,7 +124,7 @@ pub async fn startup(config: CrateConfig) -> Result<()> { } } } else { - old_files_parsed.insert(path.to_str().unwrap().to_string(), src); + last_file_rebuild.insert(path.to_str().unwrap().to_string(), src); } } } @@ -229,6 +218,22 @@ async fn ws_handler( loop { let v = rx.recv().await.unwrap(); if v == "reload" { + log::info!("Start to rebuild project..."); + if builder::build(&state.watcher_config).is_ok() { + // change the websocket reload state to true; + // the page will auto-reload. + if state + .watcher_config + .dioxus_config + .web + .watcher + .reload_html + .unwrap_or(false) + { + let _ = Serve::regen_dev_page(&state.watcher_config); + } + *state.last_file_rebuild.lock().unwrap() = HashMap::new(); + } // ignore the error if socket .send(Message::Text(String::from("reload"))) @@ -261,6 +266,7 @@ async fn hot_reload_handler( if let Some(Ok(Message::Text(err))) = err { let error: RecompileReason = serde_json::from_str(&err).unwrap(); log::error!("{:?}", error); + state.update.send("reload".to_string()).unwrap(); }; }, set_rsx = read_set_rsx => { @@ -272,7 +278,6 @@ async fn hot_reload_handler( { break; }; - // println!("{:?}", rsx); } } }; From f19958d766c5584c89df6d617170e87f275591bd Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Thu, 9 Jun 2022 11:58:09 -0500 Subject: [PATCH 130/459] move into feature --- Cargo.toml | 10 +-- src/lib.rs | 2 +- src/server/mod.rs | 159 +++++++++++++++++++++++++++------------------- 3 files changed, 100 insertions(+), 71 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 4acd41463..770fd7b1d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,10 +46,12 @@ flate2 = "1.0.22" tar = "0.4.38" tower = "0.4.12" -# hot reload -syn = "1.0" -dioxus-rsx-interpreter = { path = "../dioxus/packages/rsx_interpreter" } -proc-macro2 = { version = "1.0", features = ["span-locations"] } +syn = { version = "1.0", optional = true } +dioxus-rsx-interpreter = { path = "../dioxus/packages/rsx_interpreter", optional = true } +proc-macro2 = { version = "1.0", features = ["span-locations"], optional = true } + +[features] +hot_reload = ["dioxus-rsx-interpreter", "proc-macro2", "syn"] [[bin]] path = "src/main.rs" diff --git a/src/lib.rs b/src/lib.rs index 722b03a06..683b7251a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -19,5 +19,5 @@ pub use error::*; pub mod logging; pub use logging::*; +#[cfg(feature = "hot_reload")] pub mod hot_reload; -pub use hot_reload::*; diff --git a/src/server/mod.rs b/src/server/mod.rs index c4ab60385..18d50fc57 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -7,26 +7,34 @@ use axum::{ Router, }; use notify::{RecommendedWatcher, Watcher}; -use std::{fs::File, io::Read, sync::Mutex}; -use syn::__private::ToTokens; +use std::{fs::File, io::Read}; use std::{path::PathBuf, sync::Arc}; use tower::ServiceBuilder; use tower_http::services::fs::{ServeDir, ServeFileSystemResponseBody}; -use crate::{builder, find_rsx, serve::Serve, CrateConfig, Result}; +use crate::{builder, serve::Serve, CrateConfig, Result}; use tokio::sync::broadcast; -use std::collections::HashMap; - -use dioxus_rsx_interpreter::{error::RecompileReason, CodeLocation, SetRsxMessage}; +#[cfg(feature = "hot_reload")] +mod hot_reload_improts { + pub use crate::hot_reload::{find_rsx, DiffResult}; + pub use dioxus_rsx_interpreter::{error::RecompileReason, CodeLocation, SetRsxMessage}; + pub use std::collections::HashMap; + pub use std::sync::Mutex; + pub use syn::__private::ToTokens; +} +#[cfg(feature = "hot_reload")] +use hot_reload_improts::*; struct WsReloadState { update: broadcast::Sender, + #[cfg(feature = "hot_reload")] last_file_rebuild: Arc>>, watcher_config: CrateConfig, } +#[cfg(feature = "hot_reload")] struct HotReloadState { messages: broadcast::Sender, update: broadcast::Sender, @@ -39,19 +47,24 @@ pub async fn startup(config: CrateConfig) -> Result<()> { let (reload_tx, _) = broadcast::channel(100); + #[cfg(feature = "hot_reload")] let last_file_rebuild = Arc::new(Mutex::new(HashMap::new())); - - let ws_reload_state = Arc::new(WsReloadState { - update: reload_tx.clone(), - last_file_rebuild: last_file_rebuild.clone(), - watcher_config: config.clone(), - }); - + #[cfg(feature = "hot_reload")] let hot_reload_tx = broadcast::channel(100).0; + #[cfg(feature = "hot_reload")] let hot_reload_state = Arc::new(HotReloadState { messages: hot_reload_tx.clone(), update: reload_tx.clone(), }); + #[cfg(feature = "hot_reload")] + let crate_dir = config.crate_dir.clone(); + + let ws_reload_state = Arc::new(WsReloadState { + update: reload_tx.clone(), + #[cfg(feature = "hot_reload")] + last_file_rebuild: last_file_rebuild.clone(), + watcher_config: config.clone(), + }); let mut last_update_time = chrono::Local::now().timestamp(); @@ -64,8 +77,6 @@ pub async fn startup(config: CrateConfig) -> Result<()> { .clone() .unwrap_or_else(|| vec![PathBuf::from("src")]); - let crate_dir = config.crate_dir.clone(); - let mut watcher = RecommendedWatcher::new(move |evt: notify::Result| { if let Ok(evt) = evt { if let notify::EventKind::Modify(_) = evt.kind { @@ -76,55 +87,66 @@ pub async fn startup(config: CrateConfig) -> Result<()> { if src.is_empty() { continue; } - if let Ok(syntax) = syn::parse_file(&src) { - let mut last_file_rebuild = last_file_rebuild.lock().unwrap(); - if let Some(old_str) = last_file_rebuild.get(path.to_str().unwrap()) { - if let Ok(old) = syn::parse_file(&old_str) { - match find_rsx(&syntax, &old) { - crate::DiffResult::CodeChanged => { - log::info!("reload required"); - if chrono::Local::now().timestamp() > last_update_time { - let _ = reload_tx.send("reload".into()); - last_update_time = chrono::Local::now().timestamp(); + #[cfg(feature = "hot_reload")] + { + if let Ok(syntax) = syn::parse_file(&src) { + let mut last_file_rebuild = last_file_rebuild.lock().unwrap(); + if let Some(old_str) = last_file_rebuild.get(path.to_str().unwrap()) { + if let Ok(old) = syn::parse_file(&old_str) { + match find_rsx(&syntax, &old) { + DiffResult::CodeChanged => { + log::info!("reload required"); + if chrono::Local::now().timestamp() > last_update_time { + let _ = reload_tx.send("reload".into()); + last_update_time = chrono::Local::now().timestamp(); + } } - } - crate::DiffResult::RsxChanged(changed) => { - log::info!("reloading rsx"); - for (old, new) in changed.into_iter() { - if let Some(hr) = old - .to_token_stream() - .into_iter() - .map(|tree| { - let location = tree.span(); - let start = location.start(); - CodeLocation { - file: path - .strip_prefix(&crate_dir) - .unwrap() - .display() - .to_string(), - line: start.line as u32, - column: start.column as u32 + 1, - } - }) - .min_by(|cl1, cl2| { - cl1.line - .cmp(&cl2.line) - .then(cl1.column.cmp(&cl2.column)) - }) - { - let rsx = new.to_string(); - let _ = hot_reload_tx.send(SetRsxMessage { - location: hr, - new_text: rsx, - }); + DiffResult::RsxChanged(changed) => { + log::info!("reloading rsx"); + for (old, new) in changed.into_iter() { + if let Some(hr) = old + .to_token_stream() + .into_iter() + .map(|tree| { + let location = tree.span(); + let start = location.start(); + CodeLocation { + file: path + .strip_prefix(&crate_dir) + .unwrap() + .display() + .to_string(), + line: start.line as u32, + column: start.column as u32 + 1, + } + }) + .min_by(|cl1, cl2| { + cl1.line + .cmp(&cl2.line) + .then(cl1.column.cmp(&cl2.column)) + }) + { + let rsx = new.to_string(); + let _ = hot_reload_tx.send(SetRsxMessage { + location: hr, + new_text: rsx, + }); + } } } } } + } else { + last_file_rebuild.insert(path.to_str().unwrap().to_string(), src); } - } else { - last_file_rebuild.insert(path.to_str().unwrap().to_string(), src); + } + } + #[cfg(not(feature = "hot_reload"))] + { + log::info!("reload required"); + if chrono::Local::now().timestamp() > last_update_time { + let _ = reload_tx.send("reload".into()); + last_update_time = chrono::Local::now().timestamp(); } } } @@ -185,7 +207,6 @@ pub async fn startup(config: CrateConfig) -> Result<()> { let router = Router::new() .route("/_dioxus/ws", get(ws_handler)) - .route("/_dioxus/hot_reload", get(hot_reload_handler)) .fallback( get_service(file_service).handle_error(|error: std::io::Error| async move { ( @@ -194,14 +215,16 @@ pub async fn startup(config: CrateConfig) -> Result<()> { ) }), ); + #[cfg(feature = "hot_reload")] + let router = router.route("/_dioxus/hot_reload", get(hot_reload_handler)); + + let router = router.layer(Extension(ws_reload_state)); + + #[cfg(feature = "hot_reload")] + let router = router.layer(Extension(hot_reload_state)); axum::Server::bind(&format!("0.0.0.0:{}", port).parse().unwrap()) - .serve( - router - .layer(Extension(ws_reload_state)) - .layer(Extension(hot_reload_state)) - .into_make_service(), - ) + .serve(router.into_make_service()) .await?; Ok(()) @@ -232,7 +255,10 @@ async fn ws_handler( { let _ = Serve::regen_dev_page(&state.watcher_config); } - *state.last_file_rebuild.lock().unwrap() = HashMap::new(); + #[cfg(feature = "hot_reload")] + { + *state.last_file_rebuild.lock().unwrap() = HashMap::new(); + } } // ignore the error if socket @@ -250,6 +276,7 @@ async fn ws_handler( }) } +#[cfg(feature = "hot_reload")] async fn hot_reload_handler( ws: WebSocketUpgrade, _: Option>, From f06920a37ec12fafbff53d766c14b89fd8b21c8a Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Thu, 9 Jun 2022 12:38:59 -0500 Subject: [PATCH 131/459] search directory .rs files to diff automaticly --- src/server/mod.rs | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 18d50fc57..8670debb1 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -7,7 +7,10 @@ use axum::{ Router, }; use notify::{RecommendedWatcher, Watcher}; -use std::{fs::File, io::Read}; +use std::{ + fs::{self, File}, + io::{self, Read}, +}; use std::{path::PathBuf, sync::Arc}; use tower::ServiceBuilder; @@ -50,6 +53,8 @@ pub async fn startup(config: CrateConfig) -> Result<()> { #[cfg(feature = "hot_reload")] let last_file_rebuild = Arc::new(Mutex::new(HashMap::new())); #[cfg(feature = "hot_reload")] + find_rs_files(&config.crate_dir, &mut *last_file_rebuild.lock().unwrap()).unwrap(); + #[cfg(feature = "hot_reload")] let hot_reload_tx = broadcast::channel(100).0; #[cfg(feature = "hot_reload")] let hot_reload_state = Arc::new(HotReloadState { @@ -215,6 +220,7 @@ pub async fn startup(config: CrateConfig) -> Result<()> { ) }), ); + #[cfg(feature = "hot_reload")] let router = router.route("/_dioxus/hot_reload", get(hot_reload_handler)); @@ -257,7 +263,9 @@ async fn ws_handler( } #[cfg(feature = "hot_reload")] { - *state.last_file_rebuild.lock().unwrap() = HashMap::new(); + let mut write = state.last_file_rebuild.lock().unwrap(); + *write = HashMap::new(); + find_rs_files(&state.watcher_config.crate_dir, &mut *write).unwrap(); } } // ignore the error @@ -311,3 +319,23 @@ async fn hot_reload_handler( } }) } + +#[cfg(feature = "hot_reload")] +fn find_rs_files(root: &PathBuf, files: &mut HashMap) -> io::Result<()> { + for entry in fs::read_dir(root)? { + if let Ok(entry) = entry { + let path = entry.path(); + if path.is_dir() { + find_rs_files(&path, files)?; + } else { + if path.extension().map(|s| s.to_str()).flatten() == Some("rs") { + let mut file = File::open(path.clone()).unwrap(); + let mut src = String::new(); + file.read_to_string(&mut src).expect("Unable to read file"); + files.insert(path.display().to_string(), src); + } + } + } + } + Ok(()) +} From aa9f5a1a425c0e07e234ac8e594d041b53fb79f4 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Thu, 9 Jun 2022 12:44:07 -0500 Subject: [PATCH 132/459] clean up imports --- src/server/mod.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 8670debb1..9c0c86fd6 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -7,10 +7,7 @@ use axum::{ Router, }; use notify::{RecommendedWatcher, Watcher}; -use std::{ - fs::{self, File}, - io::{self, Read}, -}; +use std::{fs::File, io::Read}; use std::{path::PathBuf, sync::Arc}; use tower::ServiceBuilder; @@ -25,6 +22,7 @@ mod hot_reload_improts { pub use dioxus_rsx_interpreter::{error::RecompileReason, CodeLocation, SetRsxMessage}; pub use std::collections::HashMap; pub use std::sync::Mutex; + pub use std::{fs, io}; pub use syn::__private::ToTokens; } #[cfg(feature = "hot_reload")] From 1d29f66cfc40cbd33065a193cbc013694cfebf0f Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Thu, 9 Jun 2022 13:00:28 -0500 Subject: [PATCH 133/459] use log::info instead of print --- src/server/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 9c0c86fd6..95026d768 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -289,7 +289,7 @@ async fn hot_reload_handler( Extension(state): Extension>, ) -> impl IntoResponse { ws.on_upgrade(|mut socket| async move { - println!("🔥 Hot Reload WebSocket is connected."); + log::info!("🔥 Hot Reload WebSocket connected"); let mut rx = state.messages.subscribe(); loop { let read_set_rsx = rx.recv(); From 0c4028ad5270281e0893dd8e919fdebb3407b44c Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Fri, 10 Jun 2022 19:18:02 -0500 Subject: [PATCH 134/459] close websocket on disconnect --- src/server/mod.rs | 54 ++++++++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 95026d768..3506112f2 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -291,30 +291,40 @@ async fn hot_reload_handler( ws.on_upgrade(|mut socket| async move { log::info!("🔥 Hot Reload WebSocket connected"); let mut rx = state.messages.subscribe(); - loop { - let read_set_rsx = rx.recv(); - let read_err = socket.recv(); - tokio::select! { - err = read_err => { - if let Some(Ok(Message::Text(err))) = err { - let error: RecompileReason = serde_json::from_str(&err).unwrap(); - log::error!("{:?}", error); - state.update.send("reload".to_string()).unwrap(); - }; - }, - set_rsx = read_set_rsx => { - if let Ok(rsx) = set_rsx{ - if socket - .send(Message::Text(serde_json::to_string(&rsx).unwrap())) - .await - .is_err() - { + let hot_reload_handle = tokio::spawn(async move { + loop { + let read_set_rsx = rx.recv(); + let read_err = socket.recv(); + tokio::select! { + err = read_err => { + if let Some(Ok(err)) = err { + if let Message::Text(err) = err { + let error: RecompileReason = serde_json::from_str(&err).unwrap(); + log::error!("{:?}", error); + if state.update.send("reload".to_string()).is_err() { + break; + } + } + } else { break; - }; + } + }, + set_rsx = read_set_rsx => { + if let Ok(rsx) = set_rsx { + if socket + .send(Message::Text(serde_json::to_string(&rsx).unwrap())) + .await + .is_err() + { + break; + }; + } } - } - }; - } + }; + } + }); + + hot_reload_handle.await.unwrap(); }) } From d1c619e5dc9409eb358dfaf141458a5b38edc02b Mon Sep 17 00:00:00 2001 From: xTeKc <81730792+xTeKc@users.noreply.github.com> Date: Sun, 12 Jun 2022 03:31:13 -0400 Subject: [PATCH 135/459] update edition --- rustfmt.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rustfmt.toml b/rustfmt.toml index 9071fb4b5..39b98f125 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -1,8 +1,8 @@ version = "Two" -edition = "2018" +edition = "2021" imports_granularity = "Crate" #use_small_heuristics = "Max" #control_brace_style = "ClosingNextLine" normalize_comments = true -format_code_in_doc_comments = true \ No newline at end of file +format_code_in_doc_comments = true From f287e757611ac2a84a8622bcf9b4a3d3cf60294b Mon Sep 17 00:00:00 2001 From: xTeKc <81730792+xTeKc@users.noreply.github.com> Date: Sun, 12 Jun 2022 03:31:35 -0400 Subject: [PATCH 136/459] update edition --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index c869267b1..24493e787 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "dioxus-cli" version = "0.1.4" authors = ["Jonathan Kelley"] -edition = "2018" +edition = "2021" description = "CLI tool for developing, testing, and publishing Dioxus apps" license = "MIT/Apache-2.0" From bfab711010dd4f508930c3ce6af8f39c65c6c025 Mon Sep 17 00:00:00 2001 From: xTeKc <81730792+xTeKc@users.noreply.github.com> Date: Sun, 12 Jun 2022 03:35:25 -0400 Subject: [PATCH 137/459] force closure to take ownership --- src/server/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 1df13ca6a..ada3e10c7 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -79,7 +79,7 @@ pub async fn startup(config: CrateConfig) -> Result<()> { let file_service_config = config.clone(); let file_service = ServiceBuilder::new() .and_then( - |response: Response| async move { + move |response: Response| async move { let response = if file_service_config .dioxus_config .web From b3db5469c36b143d024b6b828cebcef261740510 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Mon, 13 Jun 2022 15:33:49 -0500 Subject: [PATCH 138/459] ignore files that have not been changed recently when checking for changes initially --- src/hot_reload/mod.rs | 4 +- src/server/mod.rs | 206 +++++++++++++++++++++++++++++------------- 2 files changed, 145 insertions(+), 65 deletions(-) diff --git a/src/hot_reload/mod.rs b/src/hot_reload/mod.rs index 3aced9567..8297fedb9 100644 --- a/src/hot_reload/mod.rs +++ b/src/hot_reload/mod.rs @@ -426,7 +426,9 @@ fn find_rsx_expr( && old_mac.path.get_ident().map(|ident| ident.to_string()) == Some("rsx".to_string()) { - rsx_calls.push((old_mac.clone(), new_mac.tokens.clone())); + if old_mac != new_mac { + rsx_calls.push((old_mac.clone(), new_mac.tokens.clone())); + } false } else { new_expr != old_expr diff --git a/src/server/mod.rs b/src/server/mod.rs index 3506112f2..a0bdf24b0 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -7,7 +7,6 @@ use axum::{ Router, }; use notify::{RecommendedWatcher, Watcher}; -use std::{fs::File, io::Read}; use std::{path::PathBuf, sync::Arc}; use tower::ServiceBuilder; @@ -20,9 +19,12 @@ use tokio::sync::broadcast; mod hot_reload_improts { pub use crate::hot_reload::{find_rsx, DiffResult}; pub use dioxus_rsx_interpreter::{error::RecompileReason, CodeLocation, SetRsxMessage}; + pub use proc_macro2::TokenStream; pub use std::collections::HashMap; pub use std::sync::Mutex; - pub use std::{fs, io}; + pub use std::time::SystemTime; + pub use std::{fs, io, path::Path}; + pub use std::{fs::File, io::Read}; pub use syn::__private::ToTokens; } #[cfg(feature = "hot_reload")] @@ -31,7 +33,7 @@ use hot_reload_improts::*; struct WsReloadState { update: broadcast::Sender, #[cfg(feature = "hot_reload")] - last_file_rebuild: Arc>>, + last_file_rebuild: Arc>, watcher_config: CrateConfig, } @@ -39,6 +41,47 @@ struct WsReloadState { struct HotReloadState { messages: broadcast::Sender, update: broadcast::Sender, + last_file_rebuild: Arc>, + watcher_config: CrateConfig, +} + +#[cfg(feature = "hot_reload")] +struct FileMap { + map: HashMap, + last_updated_time: std::time::SystemTime, +} + +#[cfg(feature = "hot_reload")] +impl FileMap { + fn new(path: PathBuf) -> Self { + fn find_rs_files(root: PathBuf) -> io::Result> { + let mut files = HashMap::new(); + if root.is_dir() { + let mut handles = Vec::new(); + for entry in fs::read_dir(root)? { + if let Ok(entry) = entry { + let path = entry.path(); + handles.push(std::thread::spawn(move || find_rs_files(path))); + } + } + for handle in handles { + files.extend(handle.join().unwrap()?); + } + } else { + if root.extension().map(|s| s.to_str()).flatten() == Some("rs") { + let mut file = File::open(root.clone()).unwrap(); + let mut src = String::new(); + file.read_to_string(&mut src).expect("Unable to read file"); + files.insert(root, src); + } + } + Ok(files) + } + Self { + last_updated_time: SystemTime::now(), + map: find_rs_files(path).unwrap(), + } + } } pub async fn startup(config: CrateConfig) -> Result<()> { @@ -49,15 +92,15 @@ pub async fn startup(config: CrateConfig) -> Result<()> { let (reload_tx, _) = broadcast::channel(100); #[cfg(feature = "hot_reload")] - let last_file_rebuild = Arc::new(Mutex::new(HashMap::new())); - #[cfg(feature = "hot_reload")] - find_rs_files(&config.crate_dir, &mut *last_file_rebuild.lock().unwrap()).unwrap(); + let last_file_rebuild = Arc::new(Mutex::new(FileMap::new(config.crate_dir.clone()))); #[cfg(feature = "hot_reload")] let hot_reload_tx = broadcast::channel(100).0; #[cfg(feature = "hot_reload")] let hot_reload_state = Arc::new(HotReloadState { messages: hot_reload_tx.clone(), update: reload_tx.clone(), + last_file_rebuild: last_file_rebuild.clone(), + watcher_config: config.clone(), }); #[cfg(feature = "hot_reload")] let crate_dir = config.crate_dir.clone(); @@ -83,18 +126,21 @@ pub async fn startup(config: CrateConfig) -> Result<()> { let mut watcher = RecommendedWatcher::new(move |evt: notify::Result| { if let Ok(evt) = evt { if let notify::EventKind::Modify(_) = evt.kind { - for path in evt.paths { - let mut file = File::open(path.clone()).unwrap(); - let mut src = String::new(); - file.read_to_string(&mut src).expect("Unable to read file"); - if src.is_empty() { - continue; - } - #[cfg(feature = "hot_reload")] - { + #[cfg(feature = "hot_reload")] + { + for path in evt.paths { + let mut file = File::open(path.clone()).unwrap(); + if path.extension().map(|p| p.to_str()).flatten() != Some("rs") { + continue; + } + let mut src = String::new(); + file.read_to_string(&mut src).expect("Unable to read file"); + if src.is_empty() { + continue; + } if let Ok(syntax) = syn::parse_file(&src) { let mut last_file_rebuild = last_file_rebuild.lock().unwrap(); - if let Some(old_str) = last_file_rebuild.get(path.to_str().unwrap()) { + if let Some(old_str) = last_file_rebuild.map.get(&path) { if let Ok(old) = syn::parse_file(&old_str) { match find_rsx(&syntax, &old) { DiffResult::CodeChanged => { @@ -107,28 +153,13 @@ pub async fn startup(config: CrateConfig) -> Result<()> { DiffResult::RsxChanged(changed) => { log::info!("reloading rsx"); for (old, new) in changed.into_iter() { - if let Some(hr) = old - .to_token_stream() - .into_iter() - .map(|tree| { - let location = tree.span(); - let start = location.start(); - CodeLocation { - file: path - .strip_prefix(&crate_dir) - .unwrap() - .display() - .to_string(), - line: start.line as u32, - column: start.column as u32 + 1, - } - }) - .min_by(|cl1, cl2| { - cl1.line - .cmp(&cl2.line) - .then(cl1.column.cmp(&cl2.column)) - }) - { + if let Some(hr) = get_min_location( + &path + .strip_prefix(&crate_dir) + .unwrap() + .to_path_buf(), + old.to_token_stream(), + ) { let rsx = new.to_string(); let _ = hot_reload_tx.send(SetRsxMessage { location: hr, @@ -140,17 +171,17 @@ pub async fn startup(config: CrateConfig) -> Result<()> { } } } else { - last_file_rebuild.insert(path.to_str().unwrap().to_string(), src); + *last_file_rebuild = FileMap::new(crate_dir.clone()); } } } - #[cfg(not(feature = "hot_reload"))] - { - log::info!("reload required"); - if chrono::Local::now().timestamp() > last_update_time { - let _ = reload_tx.send("reload".into()); - last_update_time = chrono::Local::now().timestamp(); - } + } + #[cfg(not(feature = "hot_reload"))] + { + log::info!("reload required"); + if chrono::Local::now().timestamp() > last_update_time { + let _ = reload_tx.send("reload".into()); + last_update_time = chrono::Local::now().timestamp(); } } } @@ -262,8 +293,7 @@ async fn ws_handler( #[cfg(feature = "hot_reload")] { let mut write = state.last_file_rebuild.lock().unwrap(); - *write = HashMap::new(); - find_rs_files(&state.watcher_config.crate_dir, &mut *write).unwrap(); + *write = FileMap::new(state.watcher_config.crate_dir.clone()); } } // ignore the error @@ -290,6 +320,59 @@ async fn hot_reload_handler( ) -> impl IntoResponse { ws.on_upgrade(|mut socket| async move { log::info!("🔥 Hot Reload WebSocket connected"); + { + log::info!("Searching files for changes since last run..."); + // update any files that changed before the websocket connected. + let mut messages = Vec::new(); + + { + let handle = state.last_file_rebuild.lock().unwrap(); + let update_time = handle.last_updated_time.clone(); + for (k, v) in handle.map.iter() { + let mut file = File::open(k).unwrap(); + if let Ok(md) = file.metadata() { + if let Ok(time) = md.modified() { + if time < update_time { + continue; + } + } + } + let mut new = String::new(); + file.read_to_string(&mut new).expect("Unable to read file"); + if let Ok(new) = syn::parse_file(&new) { + if let Ok(old) = syn::parse_file(&v) { + if let DiffResult::RsxChanged(changed) = find_rsx(&new, &old) { + for (old, new) in changed.into_iter() { + if let Some(hr) = get_min_location( + k.strip_prefix(&state.watcher_config.crate_dir).unwrap(), + old.to_token_stream(), + ) { + let rsx = new.to_string(); + let msg = SetRsxMessage { + location: hr, + new_text: rsx, + }; + messages.push(msg); + } + } + } + } + } + } + } + + for msg in &messages { + if socket + .send(Message::Text(serde_json::to_string(msg).unwrap())) + .await + .is_err() + { + return; + } + } + log::info!("Updated page"); + } + let mut rx = state.messages.subscribe(); let hot_reload_handle = tokio::spawn(async move { loop { @@ -329,21 +412,16 @@ async fn hot_reload_handler( } #[cfg(feature = "hot_reload")] -fn find_rs_files(root: &PathBuf, files: &mut HashMap) -> io::Result<()> { - for entry in fs::read_dir(root)? { - if let Ok(entry) = entry { - let path = entry.path(); - if path.is_dir() { - find_rs_files(&path, files)?; - } else { - if path.extension().map(|s| s.to_str()).flatten() == Some("rs") { - let mut file = File::open(path.clone()).unwrap(); - let mut src = String::new(); - file.read_to_string(&mut src).expect("Unable to read file"); - files.insert(path.display().to_string(), src); - } +fn get_min_location(path: &Path, ts: TokenStream) -> Option { + ts.into_iter() + .map(|tree| { + let location = tree.span(); + let start = location.start(); + CodeLocation { + file: path.display().to_string(), + line: start.line as u32, + column: start.column as u32 + 1, } - } - } - Ok(()) + }) + .min_by(|cl1, cl2| cl1.line.cmp(&cl2.line).then(cl1.column.cmp(&cl2.column))) } From 712d258496415f839b389da8163d5634a36e15f1 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Tue, 14 Jun 2022 07:31:37 -0500 Subject: [PATCH 139/459] clean up config statements --- src/hot_reload/mod.rs | 4 +- src/server/hot_reload.rs | 174 ++++++++++++++++++ src/server/mod.rs | 383 +++++++++++++++------------------------ 3 files changed, 321 insertions(+), 240 deletions(-) create mode 100644 src/server/hot_reload.rs diff --git a/src/hot_reload/mod.rs b/src/hot_reload/mod.rs index 8297fedb9..3aced9567 100644 --- a/src/hot_reload/mod.rs +++ b/src/hot_reload/mod.rs @@ -426,9 +426,7 @@ fn find_rsx_expr( && old_mac.path.get_ident().map(|ident| ident.to_string()) == Some("rsx".to_string()) { - if old_mac != new_mac { - rsx_calls.push((old_mac.clone(), new_mac.tokens.clone())); - } + rsx_calls.push((old_mac.clone(), new_mac.tokens.clone())); false } else { new_expr != old_expr diff --git a/src/server/hot_reload.rs b/src/server/hot_reload.rs new file mode 100644 index 000000000..661d249e6 --- /dev/null +++ b/src/server/hot_reload.rs @@ -0,0 +1,174 @@ +use axum::{ + extract::{ws::Message, Extension, TypedHeader, WebSocketUpgrade}, + response::IntoResponse, +}; + +use std::{path::PathBuf, sync::Arc}; + +pub use crate::hot_reload::{find_rsx, DiffResult}; +use crate::CrateConfig; +pub use dioxus_rsx_interpreter::{error::RecompileReason, CodeLocation, SetRsxMessage}; +pub use proc_macro2::TokenStream; +pub use std::collections::HashMap; +pub use std::sync::Mutex; +pub use std::time::SystemTime; +pub use std::{fs, io, path::Path}; +pub use std::{fs::File, io::Read}; +pub use syn::__private::ToTokens; +use tokio::sync::broadcast; + +pub struct HotReloadState { + pub messages: broadcast::Sender, + pub update: broadcast::Sender, + pub last_file_rebuild: Arc>, + pub watcher_config: CrateConfig, +} + +pub struct FileMap { + pub map: HashMap, + pub last_updated_time: std::time::SystemTime, +} + +impl FileMap { + pub fn new(path: PathBuf) -> Self { + fn find_rs_files(root: PathBuf) -> io::Result> { + let mut files = HashMap::new(); + if root.is_dir() { + let mut handles = Vec::new(); + for entry in fs::read_dir(root)? { + if let Ok(entry) = entry { + let path = entry.path(); + handles.push(std::thread::spawn(move || find_rs_files(path))); + } + } + for handle in handles { + files.extend(handle.join().unwrap()?); + } + } else { + if root.extension().map(|s| s.to_str()).flatten() == Some("rs") { + let mut file = File::open(root.clone()).unwrap(); + let mut src = String::new(); + file.read_to_string(&mut src).expect("Unable to read file"); + files.insert(root, src); + } + } + Ok(files) + } + Self { + last_updated_time: SystemTime::now(), + map: find_rs_files(path).unwrap(), + } + } +} + +pub async fn hot_reload_handler( + ws: WebSocketUpgrade, + _: Option>, + Extension(state): Extension>, +) -> impl IntoResponse { + ws.on_upgrade(|mut socket| async move { + log::info!("🔥 Hot Reload WebSocket connected"); + { + log::info!("Searching files for changes since last run..."); + // update any files that changed before the websocket connected. + let mut messages = Vec::new(); + + { + let handle = state.last_file_rebuild.lock().unwrap(); + let update_time = handle.last_updated_time.clone(); + for (k, v) in handle.map.iter() { + let mut file = File::open(k).unwrap(); + if let Ok(md) = file.metadata() { + if let Ok(time) = md.modified() { + if time < update_time { + continue; + } + } + } + let mut new = String::new(); + file.read_to_string(&mut new).expect("Unable to read file"); + if let Ok(new) = syn::parse_file(&new) { + if let Ok(old) = syn::parse_file(&v) { + if let DiffResult::RsxChanged(changed) = find_rsx(&new, &old) { + for (old, new) in changed.into_iter() { + if let Some(hr) = get_min_location( + k.strip_prefix(&state.watcher_config.crate_dir).unwrap(), + old.to_token_stream(), + ) { + let rsx = new.to_string(); + let msg = SetRsxMessage { + location: hr, + new_text: rsx, + }; + messages.push(msg); + } + } + } + } + } + } + } + + for msg in &messages { + if socket + .send(Message::Text(serde_json::to_string(msg).unwrap())) + .await + .is_err() + { + return; + } + } + log::info!("Updated page"); + } + + let mut rx = state.messages.subscribe(); + let hot_reload_handle = tokio::spawn(async move { + loop { + let read_set_rsx = rx.recv(); + let read_err = socket.recv(); + tokio::select! { + err = read_err => { + if let Some(Ok(err)) = err { + if let Message::Text(err) = err { + let error: RecompileReason = serde_json::from_str(&err).unwrap(); + log::error!("{:?}", error); + if state.update.send("reload".to_string()).is_err() { + break; + } + } + } else { + break; + } + }, + set_rsx = read_set_rsx => { + if let Ok(rsx) = set_rsx { + if socket + .send(Message::Text(serde_json::to_string(&rsx).unwrap())) + .await + .is_err() + { + break; + }; + } + } + }; + } + }); + + hot_reload_handle.await.unwrap(); + }) +} + +pub fn get_min_location(path: &Path, ts: TokenStream) -> Option { + ts.into_iter() + .map(|tree| { + let location = tree.span(); + let start = location.start(); + CodeLocation { + file: path.display().to_string(), + line: start.line as u32, + column: start.column as u32 + 1, + } + }) + .min_by(|cl1, cl2| cl1.line.cmp(&cl2.line).then(cl1.column.cmp(&cl2.column))) +} diff --git a/src/server/mod.rs b/src/server/mod.rs index a0bdf24b0..262dbf17d 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -16,19 +16,9 @@ use crate::{builder, serve::Serve, CrateConfig, Result}; use tokio::sync::broadcast; #[cfg(feature = "hot_reload")] -mod hot_reload_improts { - pub use crate::hot_reload::{find_rsx, DiffResult}; - pub use dioxus_rsx_interpreter::{error::RecompileReason, CodeLocation, SetRsxMessage}; - pub use proc_macro2::TokenStream; - pub use std::collections::HashMap; - pub use std::sync::Mutex; - pub use std::time::SystemTime; - pub use std::{fs, io, path::Path}; - pub use std::{fs::File, io::Read}; - pub use syn::__private::ToTokens; -} +mod hot_reload; #[cfg(feature = "hot_reload")] -use hot_reload_improts::*; +use hot_reload::*; struct WsReloadState { update: broadcast::Sender, @@ -38,76 +28,24 @@ struct WsReloadState { } #[cfg(feature = "hot_reload")] -struct HotReloadState { - messages: broadcast::Sender, - update: broadcast::Sender, - last_file_rebuild: Arc>, - watcher_config: CrateConfig, -} - -#[cfg(feature = "hot_reload")] -struct FileMap { - map: HashMap, - last_updated_time: std::time::SystemTime, -} - -#[cfg(feature = "hot_reload")] -impl FileMap { - fn new(path: PathBuf) -> Self { - fn find_rs_files(root: PathBuf) -> io::Result> { - let mut files = HashMap::new(); - if root.is_dir() { - let mut handles = Vec::new(); - for entry in fs::read_dir(root)? { - if let Ok(entry) = entry { - let path = entry.path(); - handles.push(std::thread::spawn(move || find_rs_files(path))); - } - } - for handle in handles { - files.extend(handle.join().unwrap()?); - } - } else { - if root.extension().map(|s| s.to_str()).flatten() == Some("rs") { - let mut file = File::open(root.clone()).unwrap(); - let mut src = String::new(); - file.read_to_string(&mut src).expect("Unable to read file"); - files.insert(root, src); - } - } - Ok(files) - } - Self { - last_updated_time: SystemTime::now(), - map: find_rs_files(path).unwrap(), - } - } -} - pub async fn startup(config: CrateConfig) -> Result<()> { log::info!("🚀 Starting development server..."); let dist_path = config.out_dir.clone(); - let (reload_tx, _) = broadcast::channel(100); - - #[cfg(feature = "hot_reload")] let last_file_rebuild = Arc::new(Mutex::new(FileMap::new(config.crate_dir.clone()))); - #[cfg(feature = "hot_reload")] let hot_reload_tx = broadcast::channel(100).0; - #[cfg(feature = "hot_reload")] let hot_reload_state = Arc::new(HotReloadState { messages: hot_reload_tx.clone(), update: reload_tx.clone(), last_file_rebuild: last_file_rebuild.clone(), watcher_config: config.clone(), }); - #[cfg(feature = "hot_reload")] - let crate_dir = config.crate_dir.clone(); + let crate_dir = config.crate_dir.clone(); let ws_reload_state = Arc::new(WsReloadState { update: reload_tx.clone(), - #[cfg(feature = "hot_reload")] + last_file_rebuild: last_file_rebuild.clone(), watcher_config: config.clone(), }); @@ -125,63 +63,49 @@ pub async fn startup(config: CrateConfig) -> Result<()> { let mut watcher = RecommendedWatcher::new(move |evt: notify::Result| { if let Ok(evt) = evt { - if let notify::EventKind::Modify(_) = evt.kind { - #[cfg(feature = "hot_reload")] - { - for path in evt.paths { - let mut file = File::open(path.clone()).unwrap(); - if path.extension().map(|p| p.to_str()).flatten() != Some("rs") { - continue; - } - let mut src = String::new(); - file.read_to_string(&mut src).expect("Unable to read file"); - if src.is_empty() { - continue; - } - if let Ok(syntax) = syn::parse_file(&src) { - let mut last_file_rebuild = last_file_rebuild.lock().unwrap(); - if let Some(old_str) = last_file_rebuild.map.get(&path) { - if let Ok(old) = syn::parse_file(&old_str) { - match find_rsx(&syntax, &old) { - DiffResult::CodeChanged => { - log::info!("reload required"); - if chrono::Local::now().timestamp() > last_update_time { - let _ = reload_tx.send("reload".into()); - last_update_time = chrono::Local::now().timestamp(); - } - } - DiffResult::RsxChanged(changed) => { - log::info!("reloading rsx"); - for (old, new) in changed.into_iter() { - if let Some(hr) = get_min_location( - &path - .strip_prefix(&crate_dir) - .unwrap() - .to_path_buf(), - old.to_token_stream(), - ) { - let rsx = new.to_string(); - let _ = hot_reload_tx.send(SetRsxMessage { - location: hr, - new_text: rsx, - }); - } - } + for path in evt.paths { + let mut file = File::open(path.clone()).unwrap(); + if path.extension().map(|p| p.to_str()).flatten() != Some("rs") { + continue; + } + let mut src = String::new(); + file.read_to_string(&mut src).expect("Unable to read file"); + if src.is_empty() { + continue; + } + // find changes to the rsx in the file + if let Ok(syntax) = syn::parse_file(&src) { + let mut last_file_rebuild = last_file_rebuild.lock().unwrap(); + if let Some(old_str) = last_file_rebuild.map.get(&path) { + if let Ok(old) = syn::parse_file(&old_str) { + match find_rsx(&syntax, &old) { + DiffResult::CodeChanged => { + log::info!("reload required"); + if chrono::Local::now().timestamp() > last_update_time { + let _ = reload_tx.send("reload".into()); + last_update_time = chrono::Local::now().timestamp(); + } + } + DiffResult::RsxChanged(changed) => { + log::info!("reloading rsx"); + for (old, new) in changed.into_iter() { + if let Some(hr) = get_min_location( + &path.strip_prefix(&crate_dir).unwrap().to_path_buf(), + old.to_token_stream(), + ) { + let rsx = new.to_string(); + let _ = hot_reload_tx.send(SetRsxMessage { + location: hr, + new_text: rsx, + }); } } } - } else { - *last_file_rebuild = FileMap::new(crate_dir.clone()); } } - } - } - #[cfg(not(feature = "hot_reload"))] - { - log::info!("reload required"); - if chrono::Local::now().timestamp() > last_update_time { - let _ = reload_tx.send("reload".into()); - last_update_time = chrono::Local::now().timestamp(); + } else { + // if this is a new file, rebuild the project + *last_file_rebuild = FileMap::new(crate_dir.clone()); } } } @@ -250,13 +174,112 @@ pub async fn startup(config: CrateConfig) -> Result<()> { }), ); - #[cfg(feature = "hot_reload")] - let router = router.route("/_dioxus/hot_reload", get(hot_reload_handler)); + let router = router + .route("/_dioxus/hot_reload", get(hot_reload_handler)) + .layer(Extension(ws_reload_state)) + .layer(Extension(hot_reload_state)); - let router = router.layer(Extension(ws_reload_state)); + axum::Server::bind(&format!("0.0.0.0:{}", port).parse().unwrap()) + .serve(router.into_make_service()) + .await?; - #[cfg(feature = "hot_reload")] - let router = router.layer(Extension(hot_reload_state)); + Ok(()) +} + +#[cfg(not(feature = "hot_reload"))] +pub async fn startup(config: CrateConfig) -> Result<()> { + log::info!("🚀 Starting development server..."); + + let dist_path = config.out_dir.clone(); + + let (reload_tx, _) = broadcast::channel(100); + + let ws_reload_state = Arc::new(WsReloadState { + update: reload_tx.clone(), + watcher_config: config.clone(), + }); + + let mut last_update_time = chrono::Local::now().timestamp(); + + // file watcher: check file change + let allow_watch_path = config + .dioxus_config + .web + .watcher + .watch_path + .clone() + .unwrap_or_else(|| vec![PathBuf::from("src")]); + + let mut watcher = RecommendedWatcher::new(move |_: notify::Result| { + log::info!("reload required"); + if chrono::Local::now().timestamp() > last_update_time { + let _ = reload_tx.send("reload".into()); + last_update_time = chrono::Local::now().timestamp(); + } + }) + .unwrap(); + + for sub_path in allow_watch_path { + watcher + .watch( + &config.crate_dir.join(sub_path), + notify::RecursiveMode::Recursive, + ) + .unwrap(); + } + + // start serve dev-server at 0.0.0.0:8080 + let port = "8080"; + log::info!("📡 Dev-Server is started at: http://127.0.0.1:{}/", port); + + let file_service_config = config.clone(); + let file_service = ServiceBuilder::new() + .and_then( + |response: Response| async move { + let response = if file_service_config + .dioxus_config + .web + .watcher + .index_on_404 + .unwrap_or(false) + && response.status() == StatusCode::NOT_FOUND + { + let body = Full::from( + // TODO: Cache/memoize this. + std::fs::read_to_string( + file_service_config + .crate_dir + .join(file_service_config.out_dir) + .join("index.html"), + ) + .ok() + .unwrap(), + ) + .map_err(|err| match err {}) + .boxed(); + Response::builder() + .status(StatusCode::OK) + .body(body) + .unwrap() + } else { + response.map(|body| body.boxed()) + }; + Ok(response) + }, + ) + .service(ServeDir::new((&config.crate_dir).join(&dist_path))); + + let router = Router::new() + .route("/_dioxus/ws", get(ws_handler)) + .fallback( + get_service(file_service).handle_error(|error: std::io::Error| async move { + ( + StatusCode::INTERNAL_SERVER_ERROR, + format!("Unhandled internal error: {}", error), + ) + }), + ) + .layer(Extension(ws_reload_state)); axum::Server::bind(&format!("0.0.0.0:{}", port).parse().unwrap()) .serve(router.into_make_service()) @@ -311,117 +334,3 @@ async fn ws_handler( reload_watcher.await.unwrap(); }) } - -#[cfg(feature = "hot_reload")] -async fn hot_reload_handler( - ws: WebSocketUpgrade, - _: Option>, - Extension(state): Extension>, -) -> impl IntoResponse { - ws.on_upgrade(|mut socket| async move { - log::info!("🔥 Hot Reload WebSocket connected"); - { - log::info!("Searching files for changes since last run..."); - // update any files that changed before the websocket connected. - let mut messages = Vec::new(); - - { - let handle = state.last_file_rebuild.lock().unwrap(); - let update_time = handle.last_updated_time.clone(); - for (k, v) in handle.map.iter() { - let mut file = File::open(k).unwrap(); - if let Ok(md) = file.metadata() { - if let Ok(time) = md.modified() { - if time < update_time { - continue; - } - } - } - let mut new = String::new(); - file.read_to_string(&mut new).expect("Unable to read file"); - if let Ok(new) = syn::parse_file(&new) { - if let Ok(old) = syn::parse_file(&v) { - if let DiffResult::RsxChanged(changed) = find_rsx(&new, &old) { - for (old, new) in changed.into_iter() { - if let Some(hr) = get_min_location( - k.strip_prefix(&state.watcher_config.crate_dir).unwrap(), - old.to_token_stream(), - ) { - let rsx = new.to_string(); - let msg = SetRsxMessage { - location: hr, - new_text: rsx, - }; - messages.push(msg); - } - } - } - } - } - } - } - - for msg in &messages { - if socket - .send(Message::Text(serde_json::to_string(msg).unwrap())) - .await - .is_err() - { - return; - } - } - log::info!("Updated page"); - } - - let mut rx = state.messages.subscribe(); - let hot_reload_handle = tokio::spawn(async move { - loop { - let read_set_rsx = rx.recv(); - let read_err = socket.recv(); - tokio::select! { - err = read_err => { - if let Some(Ok(err)) = err { - if let Message::Text(err) = err { - let error: RecompileReason = serde_json::from_str(&err).unwrap(); - log::error!("{:?}", error); - if state.update.send("reload".to_string()).is_err() { - break; - } - } - } else { - break; - } - }, - set_rsx = read_set_rsx => { - if let Ok(rsx) = set_rsx { - if socket - .send(Message::Text(serde_json::to_string(&rsx).unwrap())) - .await - .is_err() - { - break; - }; - } - } - }; - } - }); - - hot_reload_handle.await.unwrap(); - }) -} - -#[cfg(feature = "hot_reload")] -fn get_min_location(path: &Path, ts: TokenStream) -> Option { - ts.into_iter() - .map(|tree| { - let location = tree.span(); - let start = location.start(); - CodeLocation { - file: path.display().to_string(), - line: start.line as u32, - column: start.column as u32 + 1, - } - }) - .min_by(|cl1, cl2| cl1.line.cmp(&cl2.line).then(cl1.column.cmp(&cl2.column))) -} From fb7ea5915b303fe79682a299bbb6bdc3907e2e82 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Tue, 14 Jun 2022 09:47:16 -0500 Subject: [PATCH 140/459] use cli flag instead of feature flag --- Cargo.toml | 8 +++----- src/cli/cfg.rs | 5 +++++ src/cli/serve/mod.rs | 4 +++- src/config.rs | 8 ++++++++ src/lib.rs | 1 - src/server/mod.rs | 26 +++++++++++++++----------- 6 files changed, 34 insertions(+), 18 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 770fd7b1d..7f1223520 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,12 +46,10 @@ flate2 = "1.0.22" tar = "0.4.38" tower = "0.4.12" -syn = { version = "1.0", optional = true } -dioxus-rsx-interpreter = { path = "../dioxus/packages/rsx_interpreter", optional = true } -proc-macro2 = { version = "1.0", features = ["span-locations"], optional = true } +syn = { version = "1.0" } +dioxus-rsx-interpreter = { path = "../dioxus/packages/rsx_interpreter" } +proc-macro2 = { version = "1.0", features = ["span-locations"] } -[features] -hot_reload = ["dioxus-rsx-interpreter", "proc-macro2", "syn"] [[bin]] path = "src/main.rs" diff --git a/src/cli/cfg.rs b/src/cli/cfg.rs index f5ee45b87..3f284cbbf 100644 --- a/src/cli/cfg.rs +++ b/src/cli/cfg.rs @@ -39,6 +39,11 @@ pub struct ConfigOptsServe { /// Build platform: support Web & Desktop [default: "default_platform"] #[clap(long)] pub platform: Option, + + /// Build with hot reloading rsx [default: false] + #[clap(long)] + #[serde(default)] + pub hot_reload: bool, } /// Ensure the given value for `--public-url` is formatted correctly. diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index 85bd92c74..391e646d4 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -18,7 +18,9 @@ impl Serve { let mut crate_config = crate::CrateConfig::new()?; // change the relase state. - crate_config.with_release(self.serve.release); + crate_config + .with_release(self.serve.release) + .with_hot_reload(self.serve.hot_reload); if self.serve.example.is_some() { crate_config.as_example(self.serve.example.unwrap()); diff --git a/src/config.rs b/src/config.rs index 783c72ccd..aa2a03440 100644 --- a/src/config.rs +++ b/src/config.rs @@ -114,6 +114,7 @@ pub struct CrateConfig { pub executable: ExecutableType, pub dioxus_config: DioxusConfig, pub release: bool, + pub hot_reload: bool, } #[derive(Debug, Clone)] @@ -162,6 +163,7 @@ impl CrateConfig { let executable = ExecutableType::Binary(output_filename); let release = false; + let hot_reload = false; Ok(Self { out_dir, @@ -173,6 +175,7 @@ impl CrateConfig { executable, release, dioxus_config, + hot_reload, }) } @@ -186,6 +189,11 @@ impl CrateConfig { self } + pub fn with_hot_reload(&mut self, hot_reload: bool) -> &mut Self { + self.hot_reload = hot_reload; + self + } + // pub fn with_build_options(&mut self, options: &BuildOptions) { // if let Some(name) = &options.example { // self.as_example(name.clone()); diff --git a/src/lib.rs b/src/lib.rs index 683b7251a..6d009c18c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -19,5 +19,4 @@ pub use error::*; pub mod logging; pub use logging::*; -#[cfg(feature = "hot_reload")] pub mod hot_reload; diff --git a/src/server/mod.rs b/src/server/mod.rs index 262dbf17d..8a98fd9d9 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -15,20 +15,24 @@ use tower_http::services::fs::{ServeDir, ServeFileSystemResponseBody}; use crate::{builder, serve::Serve, CrateConfig, Result}; use tokio::sync::broadcast; -#[cfg(feature = "hot_reload")] mod hot_reload; -#[cfg(feature = "hot_reload")] use hot_reload::*; struct WsReloadState { update: broadcast::Sender, - #[cfg(feature = "hot_reload")] - last_file_rebuild: Arc>, + last_file_rebuild: Option>>, watcher_config: CrateConfig, } -#[cfg(feature = "hot_reload")] pub async fn startup(config: CrateConfig) -> Result<()> { + if config.hot_reload { + startup_hot_reload(config).await + } else { + startup_default(config).await + } +} + +pub async fn startup_hot_reload(config: CrateConfig) -> Result<()> { log::info!("🚀 Starting development server..."); let dist_path = config.out_dir.clone(); @@ -46,7 +50,7 @@ pub async fn startup(config: CrateConfig) -> Result<()> { let ws_reload_state = Arc::new(WsReloadState { update: reload_tx.clone(), - last_file_rebuild: last_file_rebuild.clone(), + last_file_rebuild: Some(last_file_rebuild.clone()), watcher_config: config.clone(), }); @@ -186,8 +190,7 @@ pub async fn startup(config: CrateConfig) -> Result<()> { Ok(()) } -#[cfg(not(feature = "hot_reload"))] -pub async fn startup(config: CrateConfig) -> Result<()> { +pub async fn startup_default(config: CrateConfig) -> Result<()> { log::info!("🚀 Starting development server..."); let dist_path = config.out_dir.clone(); @@ -196,6 +199,8 @@ pub async fn startup(config: CrateConfig) -> Result<()> { let ws_reload_state = Arc::new(WsReloadState { update: reload_tx.clone(), + + last_file_rebuild: None, watcher_config: config.clone(), }); @@ -313,9 +318,8 @@ async fn ws_handler( { let _ = Serve::regen_dev_page(&state.watcher_config); } - #[cfg(feature = "hot_reload")] - { - let mut write = state.last_file_rebuild.lock().unwrap(); + if let Some(file_map) = &state.last_file_rebuild { + let mut write = file_map.lock().unwrap(); *write = FileMap::new(state.watcher_config.crate_dir.clone()); } } From b0f987aa106994e95af8e75765ce12321684821b Mon Sep 17 00:00:00 2001 From: Demonthos <66571940+Demonthos@users.noreply.github.com> Date: Wed, 15 Jun 2022 12:55:25 -0500 Subject: [PATCH 141/459] accept all interperter errors --- src/server/hot_reload.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/hot_reload.rs b/src/server/hot_reload.rs index 661d249e6..a9f51abe7 100644 --- a/src/server/hot_reload.rs +++ b/src/server/hot_reload.rs @@ -7,7 +7,7 @@ use std::{path::PathBuf, sync::Arc}; pub use crate::hot_reload::{find_rsx, DiffResult}; use crate::CrateConfig; -pub use dioxus_rsx_interpreter::{error::RecompileReason, CodeLocation, SetRsxMessage}; +pub use dioxus_rsx_interpreter::{error::Error, CodeLocation, SetRsxMessage}; pub use proc_macro2::TokenStream; pub use std::collections::HashMap; pub use std::sync::Mutex; @@ -130,7 +130,7 @@ pub async fn hot_reload_handler( err = read_err => { if let Some(Ok(err)) = err { if let Message::Text(err) = err { - let error: RecompileReason = serde_json::from_str(&err).unwrap(); + let error: Error = serde_json::from_str(&err).unwrap(); log::error!("{:?}", error); if state.update.send("reload".to_string()).is_err() { break; From 8ff50df3a5dc14b90b15fd84122a12436326144a Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Wed, 15 Jun 2022 13:29:35 -0500 Subject: [PATCH 142/459] preserve whitespace in rsx --- src/server/hot_reload.rs | 37 ++++++++++++++++--------------------- src/server/mod.rs | 29 ++++++++++++++++++++++------- 2 files changed, 38 insertions(+), 28 deletions(-) diff --git a/src/server/hot_reload.rs b/src/server/hot_reload.rs index a9f51abe7..f79a7a50e 100644 --- a/src/server/hot_reload.rs +++ b/src/server/hot_reload.rs @@ -15,6 +15,7 @@ pub use std::time::SystemTime; pub use std::{fs, io, path::Path}; pub use std::{fs::File, io::Read}; pub use syn::__private::ToTokens; +use syn::spanned::Spanned; use tokio::sync::broadcast; pub struct HotReloadState { @@ -91,17 +92,16 @@ pub async fn hot_reload_handler( if let Ok(old) = syn::parse_file(&v) { if let DiffResult::RsxChanged(changed) = find_rsx(&new, &old) { for (old, new) in changed.into_iter() { - if let Some(hr) = get_min_location( + let hr = get_location( k.strip_prefix(&state.watcher_config.crate_dir).unwrap(), old.to_token_stream(), - ) { - let rsx = new.to_string(); - let msg = SetRsxMessage { - location: hr, - new_text: rsx, - }; - messages.push(msg); - } + ); + let rsx = new.to_string(); + let msg = SetRsxMessage { + location: hr, + new_text: rsx, + }; + messages.push(msg); } } } @@ -159,16 +159,11 @@ pub async fn hot_reload_handler( }) } -pub fn get_min_location(path: &Path, ts: TokenStream) -> Option { - ts.into_iter() - .map(|tree| { - let location = tree.span(); - let start = location.start(); - CodeLocation { - file: path.display().to_string(), - line: start.line as u32, - column: start.column as u32 + 1, - } - }) - .min_by(|cl1, cl2| cl1.line.cmp(&cl2.line).then(cl1.column.cmp(&cl2.column))) +pub fn get_location(path: &Path, ts: TokenStream) -> CodeLocation { + let span = ts.span().start(); + CodeLocation { + file: path.display().to_string(), + line: span.line as u32, + column: span.column as u32 + 1, + } } diff --git a/src/server/mod.rs b/src/server/mod.rs index 8a98fd9d9..3397beac6 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -7,6 +7,7 @@ use axum::{ Router, }; use notify::{RecommendedWatcher, Watcher}; +use syn::spanned::Spanned; use std::{path::PathBuf, sync::Arc}; use tower::ServiceBuilder; @@ -93,16 +94,30 @@ pub async fn startup_hot_reload(config: CrateConfig) -> Result<()> { DiffResult::RsxChanged(changed) => { log::info!("reloading rsx"); for (old, new) in changed.into_iter() { - if let Some(hr) = get_min_location( + let hr = get_location( &path.strip_prefix(&crate_dir).unwrap().to_path_buf(), old.to_token_stream(), - ) { - let rsx = new.to_string(); - let _ = hot_reload_tx.send(SetRsxMessage { - location: hr, - new_text: rsx, - }); + ); + // get the original source code to preserve whitespace + let span = new.span(); + let start = span.start(); + let end = span.end(); + let mut lines: Vec<_> = src + .lines() + .skip(start.line - 1) + .take(end.line - start.line + 1) + .collect(); + if let Some(first) = lines.first_mut() { + *first = first.split_at(start.column).1; } + if let Some(last) = lines.last_mut() { + *last = last.split_at(end.column).0; + } + let rsx = lines.join("\n"); + let _ = hot_reload_tx.send(SetRsxMessage { + location: hr, + new_text: rsx, + }); } } } From edc31dfc031025a6a7893da39fe3278fa053d2c7 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Wed, 15 Jun 2022 13:58:24 -0500 Subject: [PATCH 143/459] better error messages --- src/server/hot_reload.rs | 45 +++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/src/server/hot_reload.rs b/src/server/hot_reload.rs index f79a7a50e..2011b8958 100644 --- a/src/server/hot_reload.rs +++ b/src/server/hot_reload.rs @@ -86,22 +86,36 @@ pub async fn hot_reload_handler( } } } - let mut new = String::new(); - file.read_to_string(&mut new).expect("Unable to read file"); - if let Ok(new) = syn::parse_file(&new) { - if let Ok(old) = syn::parse_file(&v) { - if let DiffResult::RsxChanged(changed) = find_rsx(&new, &old) { + let mut new_str = String::new(); + file.read_to_string(&mut new_str).expect("Unable to read file"); + if let Ok(new_file) = syn::parse_file(&new_str) { + if let Ok(old_file) = syn::parse_file(&v) { + if let DiffResult::RsxChanged(changed) = find_rsx(&new_file, &old_file) { for (old, new) in changed.into_iter() { let hr = get_location( k.strip_prefix(&state.watcher_config.crate_dir).unwrap(), old.to_token_stream(), ); - let rsx = new.to_string(); - let msg = SetRsxMessage { + // get the original source code to preserve whitespace + let span = new.span(); + let start = span.start(); + let end = span.end(); + let mut lines: Vec<_> = new_str + .lines() + .skip(start.line - 1) + .take(end.line - start.line + 1) + .collect(); + if let Some(first) = lines.first_mut() { + *first = first.split_at(start.column).1; + } + if let Some(last) = lines.last_mut() { + *last = last.split_at(end.column).0; + } + let rsx = lines.join("\n"); + messages.push(SetRsxMessage { location: hr, new_text: rsx, - }; - messages.push(msg); + }); } } } @@ -131,9 +145,16 @@ pub async fn hot_reload_handler( if let Some(Ok(err)) = err { if let Message::Text(err) = err { let error: Error = serde_json::from_str(&err).unwrap(); - log::error!("{:?}", error); - if state.update.send("reload".to_string()).is_err() { - break; + match error{ + Error::ParseError(parse_error) => { + log::error!("parse error:\n--> at {}:{}:{}\n\t{:?}", parse_error.location.file, parse_error.location.line, parse_error.location.column, parse_error.message); + }, + Error::RecompileRequiredError(reason) => { + log::info!("{:?}", reason); + if state.update.send("reload".to_string()).is_err() { + break; + } + } } } } else { From 8e33b8e02711cc4108f4d05d2cf95d647ad697d7 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Thu, 16 Jun 2022 09:11:02 -0500 Subject: [PATCH 144/459] improve speed when reloading the site --- src/server/hot_reload.rs | 91 +++++++++++++++++++++-------- src/server/mod.rs | 120 +++++++++++++++++++++------------------ 2 files changed, 132 insertions(+), 79 deletions(-) diff --git a/src/server/hot_reload.rs b/src/server/hot_reload.rs index 2011b8958..14f9ffbc6 100644 --- a/src/server/hot_reload.rs +++ b/src/server/hot_reload.rs @@ -2,12 +2,13 @@ use axum::{ extract::{ws::Message, Extension, TypedHeader, WebSocketUpgrade}, response::IntoResponse, }; +use dioxus_rsx_interpreter::SetRsxMessage; use std::{path::PathBuf, sync::Arc}; pub use crate::hot_reload::{find_rsx, DiffResult}; use crate::CrateConfig; -pub use dioxus_rsx_interpreter::{error::Error, CodeLocation, SetRsxMessage}; +pub use dioxus_rsx_interpreter::{error::Error, CodeLocation, SetManyRsxMessage}; pub use proc_macro2::TokenStream; pub use std::collections::HashMap; pub use std::sync::Mutex; @@ -19,7 +20,7 @@ use syn::spanned::Spanned; use tokio::sync::broadcast; pub struct HotReloadState { - pub messages: broadcast::Sender, + pub messages: broadcast::Sender, pub update: broadcast::Sender, pub last_file_rebuild: Arc>, pub watcher_config: CrateConfig, @@ -32,32 +33,76 @@ pub struct FileMap { impl FileMap { pub fn new(path: PathBuf) -> Self { + log::info!("Searching files for changes since last compile..."); fn find_rs_files(root: PathBuf) -> io::Result> { let mut files = HashMap::new(); if root.is_dir() { - let mut handles = Vec::new(); for entry in fs::read_dir(root)? { if let Ok(entry) = entry { let path = entry.path(); - handles.push(std::thread::spawn(move || find_rs_files(path))); + files.extend(find_rs_files(path)?); } } - for handle in handles { - files.extend(handle.join().unwrap()?); - } } else { if root.extension().map(|s| s.to_str()).flatten() == Some("rs") { - let mut file = File::open(root.clone()).unwrap(); - let mut src = String::new(); - file.read_to_string(&mut src).expect("Unable to read file"); - files.insert(root, src); + if let Ok(mut file) = File::open(root.clone()) { + let mut src = String::new(); + file.read_to_string(&mut src).expect("Unable to read file"); + files.insert(root, src); + } } } Ok(files) } - Self { - last_updated_time: SystemTime::now(), + + let last_updated_time = SystemTime::now(); + let result = Self { + last_updated_time, map: find_rs_files(path).unwrap(), + }; + log::info!("Files updated"); + result + } + + pub fn update(&mut self, path: PathBuf) { + log::info!("Updating files that changed since last compile..."); + self.last_updated_time = SystemTime::now(); + self.update_inner(path); + log::info!("Files updated"); + } + + fn update_inner(&mut self, path: PathBuf) { + if path.is_dir() { + if let Ok(files) = fs::read_dir(path) { + for entry in files { + if let Ok(entry) = entry { + if let Ok(md) = entry.metadata() { + if let Ok(time) = md.modified() { + if time < self.last_updated_time { + return; + } + } + } + let path = entry.path(); + self.update(path); + } + } + } + } else { + if path.extension().map(|s| s.to_str()).flatten() == Some("rs") { + if let Ok(mut file) = File::open(path.clone()) { + if let Ok(md) = file.metadata() { + if let Ok(time) = md.modified() { + if time < self.last_updated_time { + return; + } + } + } + let mut src = String::new(); + file.read_to_string(&mut src).expect("Unable to read file"); + self.map.insert(path, src); + } + } } } } @@ -70,7 +115,6 @@ pub async fn hot_reload_handler( ws.on_upgrade(|mut socket| async move { log::info!("🔥 Hot Reload WebSocket connected"); { - log::info!("Searching files for changes since last run..."); // update any files that changed before the websocket connected. let mut messages = Vec::new(); @@ -123,16 +167,14 @@ pub async fn hot_reload_handler( } } - for msg in &messages { - if socket - .send(Message::Text(serde_json::to_string(msg).unwrap())) - .await - .is_err() - { - return; - } + let msg = SetManyRsxMessage(messages); + if socket + .send(Message::Text(serde_json::to_string(&msg).unwrap())) + .await + .is_err() + { + return; } - log::info!("Updated page"); } let mut rx = state.messages.subscribe(); @@ -149,8 +191,7 @@ pub async fn hot_reload_handler( Error::ParseError(parse_error) => { log::error!("parse error:\n--> at {}:{}:{}\n\t{:?}", parse_error.location.file, parse_error.location.line, parse_error.location.column, parse_error.message); }, - Error::RecompileRequiredError(reason) => { - log::info!("{:?}", reason); + Error::RecompileRequiredError(_) => { if state.update.send("reload".to_string()).is_err() { break; } diff --git a/src/server/mod.rs b/src/server/mod.rs index 3397beac6..19791fd79 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -6,6 +6,7 @@ use axum::{ routing::{get, get_service}, Router, }; +use dioxus_rsx_interpreter::SetRsxMessage; use notify::{RecommendedWatcher, Watcher}; use syn::spanned::Spanned; @@ -67,67 +68,75 @@ pub async fn startup_hot_reload(config: CrateConfig) -> Result<()> { .unwrap_or_else(|| vec![PathBuf::from("src")]); let mut watcher = RecommendedWatcher::new(move |evt: notify::Result| { - if let Ok(evt) = evt { - for path in evt.paths { - let mut file = File::open(path.clone()).unwrap(); - if path.extension().map(|p| p.to_str()).flatten() != Some("rs") { - continue; - } - let mut src = String::new(); - file.read_to_string(&mut src).expect("Unable to read file"); - if src.is_empty() { - continue; - } - // find changes to the rsx in the file - if let Ok(syntax) = syn::parse_file(&src) { - let mut last_file_rebuild = last_file_rebuild.lock().unwrap(); - if let Some(old_str) = last_file_rebuild.map.get(&path) { - if let Ok(old) = syn::parse_file(&old_str) { - match find_rsx(&syntax, &old) { - DiffResult::CodeChanged => { - log::info!("reload required"); - if chrono::Local::now().timestamp() > last_update_time { - let _ = reload_tx.send("reload".into()); - last_update_time = chrono::Local::now().timestamp(); + if chrono::Local::now().timestamp() > last_update_time { + if let Ok(evt) = evt { + let mut messages = Vec::new(); + for path in evt.paths { + let mut file = File::open(path.clone()).unwrap(); + if path.extension().map(|p| p.to_str()).flatten() != Some("rs") { + continue; + } + let mut src = String::new(); + file.read_to_string(&mut src).expect("Unable to read file"); + if src.is_empty() { + continue; + } + // find changes to the rsx in the file + if let Ok(syntax) = syn::parse_file(&src) { + let mut last_file_rebuild = last_file_rebuild.lock().unwrap(); + if let Some(old_str) = last_file_rebuild.map.get(&path) { + if let Ok(old) = syn::parse_file(&old_str) { + match find_rsx(&syntax, &old) { + DiffResult::CodeChanged => { + log::info!("reload required"); + let _ = reload_tx.send("reload time".into()); + break; } - } - DiffResult::RsxChanged(changed) => { - log::info!("reloading rsx"); - for (old, new) in changed.into_iter() { - let hr = get_location( - &path.strip_prefix(&crate_dir).unwrap().to_path_buf(), - old.to_token_stream(), - ); - // get the original source code to preserve whitespace - let span = new.span(); - let start = span.start(); - let end = span.end(); - let mut lines: Vec<_> = src - .lines() - .skip(start.line - 1) - .take(end.line - start.line + 1) - .collect(); - if let Some(first) = lines.first_mut() { - *first = first.split_at(start.column).1; + DiffResult::RsxChanged(changed) => { + log::info!("reloading rsx"); + for (old, new) in changed.into_iter() { + let hr = get_location( + &path + .strip_prefix(&crate_dir) + .unwrap() + .to_path_buf(), + old.to_token_stream(), + ); + // get the original source code to preserve whitespace + let span = new.span(); + let start = span.start(); + let end = span.end(); + let mut lines: Vec<_> = src + .lines() + .skip(start.line - 1) + .take(end.line - start.line + 1) + .collect(); + if let Some(first) = lines.first_mut() { + *first = first.split_at(start.column).1; + } + if let Some(last) = lines.last_mut() { + *last = last.split_at(end.column).0; + } + let rsx = lines.join("\n"); + messages.push(SetRsxMessage { + location: hr, + new_text: rsx, + }); } - if let Some(last) = lines.last_mut() { - *last = last.split_at(end.column).0; - } - let rsx = lines.join("\n"); - let _ = hot_reload_tx.send(SetRsxMessage { - location: hr, - new_text: rsx, - }); } } } + } else { + // if this is a new file, rebuild the project + *last_file_rebuild = FileMap::new(crate_dir.clone()); } - } else { - // if this is a new file, rebuild the project - *last_file_rebuild = FileMap::new(crate_dir.clone()); } } + if !messages.is_empty() { + let _ = hot_reload_tx.send(SetManyRsxMessage(messages)); + } } + last_update_time = chrono::Local::now().timestamp(); } }) .unwrap(); @@ -313,7 +322,7 @@ async fn ws_handler( _: Option>, Extension(state): Extension>, ) -> impl IntoResponse { - ws.on_upgrade(|mut socket| async move { + ws.max_send_queue(1).on_upgrade(|mut socket| async move { let mut rx = state.update.subscribe(); let reload_watcher = tokio::spawn(async move { loop { @@ -335,7 +344,7 @@ async fn ws_handler( } if let Some(file_map) = &state.last_file_rebuild { let mut write = file_map.lock().unwrap(); - *write = FileMap::new(state.watcher_config.crate_dir.clone()); + write.update(state.watcher_config.crate_dir.clone()); } } // ignore the error @@ -346,6 +355,9 @@ async fn ws_handler( { break; } + + // flush the errors after recompling + rx = rx.resubscribe(); } } }); From 22e40c6bc1f35f0a3c9a6ec9d225f7c4fe029fff Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Thu, 16 Jun 2022 10:21:28 -0500 Subject: [PATCH 145/459] removed debugging messages --- src/server/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 19791fd79..bf9299022 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -89,7 +89,7 @@ pub async fn startup_hot_reload(config: CrateConfig) -> Result<()> { match find_rsx(&syntax, &old) { DiffResult::CodeChanged => { log::info!("reload required"); - let _ = reload_tx.send("reload time".into()); + let _ = reload_tx.send("reload".into()); break; } DiffResult::RsxChanged(changed) => { From a79046f36a39a20cc4e43f8e3d83df46e23b4fa5 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Thu, 16 Jun 2022 13:13:06 -0500 Subject: [PATCH 146/459] use build manager instead of rebuilding in the ws handler --- src/server/hot_reload.rs | 53 +++--------------- src/server/mod.rs | 115 ++++++++++++++++++++++----------------- 2 files changed, 72 insertions(+), 96 deletions(-) diff --git a/src/server/hot_reload.rs b/src/server/hot_reload.rs index 14f9ffbc6..6a2a58ba0 100644 --- a/src/server/hot_reload.rs +++ b/src/server/hot_reload.rs @@ -6,6 +6,7 @@ use dioxus_rsx_interpreter::SetRsxMessage; use std::{path::PathBuf, sync::Arc}; +use super::BuildManager; pub use crate::hot_reload::{find_rsx, DiffResult}; use crate::CrateConfig; pub use dioxus_rsx_interpreter::{error::Error, CodeLocation, SetManyRsxMessage}; @@ -21,7 +22,7 @@ use tokio::sync::broadcast; pub struct HotReloadState { pub messages: broadcast::Sender, - pub update: broadcast::Sender, + pub build_manager: Arc, pub last_file_rebuild: Arc>, pub watcher_config: CrateConfig, } @@ -63,48 +64,6 @@ impl FileMap { log::info!("Files updated"); result } - - pub fn update(&mut self, path: PathBuf) { - log::info!("Updating files that changed since last compile..."); - self.last_updated_time = SystemTime::now(); - self.update_inner(path); - log::info!("Files updated"); - } - - fn update_inner(&mut self, path: PathBuf) { - if path.is_dir() { - if let Ok(files) = fs::read_dir(path) { - for entry in files { - if let Ok(entry) = entry { - if let Ok(md) = entry.metadata() { - if let Ok(time) = md.modified() { - if time < self.last_updated_time { - return; - } - } - } - let path = entry.path(); - self.update(path); - } - } - } - } else { - if path.extension().map(|s| s.to_str()).flatten() == Some("rs") { - if let Ok(mut file) = File::open(path.clone()) { - if let Ok(md) = file.metadata() { - if let Ok(time) = md.modified() { - if time < self.last_updated_time { - return; - } - } - } - let mut src = String::new(); - file.read_to_string(&mut src).expect("Unable to read file"); - self.map.insert(path, src); - } - } - } - } } pub async fn hot_reload_handler( @@ -115,10 +74,11 @@ pub async fn hot_reload_handler( ws.on_upgrade(|mut socket| async move { log::info!("🔥 Hot Reload WebSocket connected"); { - // update any files that changed before the websocket connected. + // update any rsx calls that changed before the websocket connected. let mut messages = Vec::new(); { + println!("Finding updates since last reload..."); let handle = state.last_file_rebuild.lock().unwrap(); let update_time = handle.last_updated_time.clone(); for (k, v) in handle.map.iter() { @@ -165,6 +125,7 @@ pub async fn hot_reload_handler( } } } + println!("finished"); } let msg = SetManyRsxMessage(messages); @@ -192,8 +153,8 @@ pub async fn hot_reload_handler( log::error!("parse error:\n--> at {}:{}:{}\n\t{:?}", parse_error.location.file, parse_error.location.line, parse_error.location.column, parse_error.message); }, Error::RecompileRequiredError(_) => { - if state.update.send("reload".to_string()).is_err() { - break; + if let Err(err) = state.build_manager.build(){ + log::error!("{}", err); } } } diff --git a/src/server/mod.rs b/src/server/mod.rs index bf9299022..5742c86ee 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -20,18 +20,43 @@ use tokio::sync::broadcast; mod hot_reload; use hot_reload::*; +pub struct BuildManager { + config: CrateConfig, + reload_tx: broadcast::Sender<()>, +} + +impl BuildManager { + fn build(&self) -> Result<()> { + log::info!("Start to rebuild project..."); + builder::build(&self.config)?; + // change the websocket reload state to true; + // the page will auto-reload. + if self + .config + .dioxus_config + .web + .watcher + .reload_html + .unwrap_or(false) + { + let _ = Serve::regen_dev_page(&self.config); + } + let _ = self.reload_tx.send(()); + Ok(()) + } +} + struct WsReloadState { - update: broadcast::Sender, - last_file_rebuild: Option>>, - watcher_config: CrateConfig, + update: broadcast::Sender<()>, } pub async fn startup(config: CrateConfig) -> Result<()> { if config.hot_reload { - startup_hot_reload(config).await + startup_hot_reload(config).await? } else { - startup_default(config).await + startup_default(config).await? } + Ok(()) } pub async fn startup_hot_reload(config: CrateConfig) -> Result<()> { @@ -40,10 +65,14 @@ pub async fn startup_hot_reload(config: CrateConfig) -> Result<()> { let dist_path = config.out_dir.clone(); let (reload_tx, _) = broadcast::channel(100); let last_file_rebuild = Arc::new(Mutex::new(FileMap::new(config.crate_dir.clone()))); + let build_manager = Arc::new(BuildManager { + config: config.clone(), + reload_tx: reload_tx.clone(), + }); let hot_reload_tx = broadcast::channel(100).0; let hot_reload_state = Arc::new(HotReloadState { messages: hot_reload_tx.clone(), - update: reload_tx.clone(), + build_manager: build_manager.clone(), last_file_rebuild: last_file_rebuild.clone(), watcher_config: config.clone(), }); @@ -51,9 +80,6 @@ pub async fn startup_hot_reload(config: CrateConfig) -> Result<()> { let crate_dir = config.crate_dir.clone(); let ws_reload_state = Arc::new(WsReloadState { update: reload_tx.clone(), - - last_file_rebuild: Some(last_file_rebuild.clone()), - watcher_config: config.clone(), }); let mut last_update_time = chrono::Local::now().timestamp(); @@ -71,6 +97,7 @@ pub async fn startup_hot_reload(config: CrateConfig) -> Result<()> { if chrono::Local::now().timestamp() > last_update_time { if let Ok(evt) = evt { let mut messages = Vec::new(); + let mut needs_rebuild = false; for path in evt.paths { let mut file = File::open(path.clone()).unwrap(); if path.extension().map(|p| p.to_str()).flatten() != Some("rs") { @@ -88,9 +115,8 @@ pub async fn startup_hot_reload(config: CrateConfig) -> Result<()> { if let Ok(old) = syn::parse_file(&old_str) { match find_rsx(&syntax, &old) { DiffResult::CodeChanged => { - log::info!("reload required"); - let _ = reload_tx.send("reload".into()); - break; + needs_rebuild = true; + last_file_rebuild.map.insert(path, src); } DiffResult::RsxChanged(changed) => { log::info!("reloading rsx"); @@ -132,6 +158,12 @@ pub async fn startup_hot_reload(config: CrateConfig) -> Result<()> { } } } + if needs_rebuild { + log::info!("reload required"); + if let Err(err) = build_manager.build() { + log::error!("{}", err); + } + } if !messages.is_empty() { let _ = hot_reload_tx.send(SetManyRsxMessage(messages)); } @@ -221,11 +253,13 @@ pub async fn startup_default(config: CrateConfig) -> Result<()> { let (reload_tx, _) = broadcast::channel(100); + let build_manager = BuildManager { + config: config.clone(), + reload_tx: reload_tx.clone(), + }; + let ws_reload_state = Arc::new(WsReloadState { update: reload_tx.clone(), - - last_file_rebuild: None, - watcher_config: config.clone(), }); let mut last_update_time = chrono::Local::now().timestamp(); @@ -242,8 +276,10 @@ pub async fn startup_default(config: CrateConfig) -> Result<()> { let mut watcher = RecommendedWatcher::new(move |_: notify::Result| { log::info!("reload required"); if chrono::Local::now().timestamp() > last_update_time { - let _ = reload_tx.send("reload".into()); - last_update_time = chrono::Local::now().timestamp(); + match build_manager.build() { + Ok(_) => last_update_time = chrono::Local::now().timestamp(), + Err(e) => log::error!("{}", e), + } } }) .unwrap(); @@ -322,43 +358,22 @@ async fn ws_handler( _: Option>, Extension(state): Extension>, ) -> impl IntoResponse { - ws.max_send_queue(1).on_upgrade(|mut socket| async move { + ws.on_upgrade(|mut socket| async move { let mut rx = state.update.subscribe(); let reload_watcher = tokio::spawn(async move { loop { - let v = rx.recv().await.unwrap(); - if v == "reload" { - log::info!("Start to rebuild project..."); - if builder::build(&state.watcher_config).is_ok() { - // change the websocket reload state to true; - // the page will auto-reload. - if state - .watcher_config - .dioxus_config - .web - .watcher - .reload_html - .unwrap_or(false) - { - let _ = Serve::regen_dev_page(&state.watcher_config); - } - if let Some(file_map) = &state.last_file_rebuild { - let mut write = file_map.lock().unwrap(); - write.update(state.watcher_config.crate_dir.clone()); - } - } - // ignore the error - if socket - .send(Message::Text(String::from("reload"))) - .await - .is_err() - { - break; - } - - // flush the errors after recompling - rx = rx.resubscribe(); + rx.recv().await.unwrap(); + // ignore the error + if socket + .send(Message::Text(String::from("reload"))) + .await + .is_err() + { + break; } + + // flush the errors after recompling + rx = rx.resubscribe(); } }); From 815bdcdf0032a37518ee1611d9b0cd08bd2c79f3 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Thu, 16 Jun 2022 13:23:45 -0500 Subject: [PATCH 147/459] clean up logs --- src/server/hot_reload.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/hot_reload.rs b/src/server/hot_reload.rs index 6a2a58ba0..a0eb43e08 100644 --- a/src/server/hot_reload.rs +++ b/src/server/hot_reload.rs @@ -78,7 +78,7 @@ pub async fn hot_reload_handler( let mut messages = Vec::new(); { - println!("Finding updates since last reload..."); + log::info!("Finding updates since last compile..."); let handle = state.last_file_rebuild.lock().unwrap(); let update_time = handle.last_updated_time.clone(); for (k, v) in handle.map.iter() { @@ -125,7 +125,7 @@ pub async fn hot_reload_handler( } } } - println!("finished"); + log::info!("finished"); } let msg = SetManyRsxMessage(messages); From 2908e53d1b55d6d5664d1b27046d53966d42bd5e Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Fri, 17 Jun 2022 14:50:05 -0500 Subject: [PATCH 148/459] add delay before reading the changed file --- src/server/mod.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 1eb159ae5..16401aa85 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -95,6 +95,8 @@ pub async fn startup_hot_reload(config: CrateConfig) -> Result<()> { let mut watcher = RecommendedWatcher::new(move |evt: notify::Result| { if chrono::Local::now().timestamp() > last_update_time { + // Give time for the change to take effect before reading the file + std::thread::sleep(std::time::Duration::from_millis(100)); if let Ok(evt) = evt { let mut messages = Vec::new(); let mut needs_rebuild = false; @@ -105,9 +107,6 @@ pub async fn startup_hot_reload(config: CrateConfig) -> Result<()> { } let mut src = String::new(); file.read_to_string(&mut src).expect("Unable to read file"); - if src.is_empty() { - continue; - } // find changes to the rsx in the file if let Ok(syntax) = syn::parse_file(&src) { let mut last_file_rebuild = last_file_rebuild.lock().unwrap(); From 7025bd43aab4e98c8fe1b5907f51c19117efc814 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Mon, 20 Jun 2022 15:44:14 -0500 Subject: [PATCH 149/459] use line!, col!, and row! instead of panic location --- src/server/hot_reload.rs | 2 +- src/server/mod.rs | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/server/hot_reload.rs b/src/server/hot_reload.rs index a0eb43e08..7c9a6957e 100644 --- a/src/server/hot_reload.rs +++ b/src/server/hot_reload.rs @@ -97,7 +97,7 @@ pub async fn hot_reload_handler( if let DiffResult::RsxChanged(changed) = find_rsx(&new_file, &old_file) { for (old, new) in changed.into_iter() { let hr = get_location( - k.strip_prefix(&state.watcher_config.crate_dir).unwrap(), + k, old.to_token_stream(), ); // get the original source code to preserve whitespace diff --git a/src/server/mod.rs b/src/server/mod.rs index 16401aa85..8cdd76373 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -121,10 +121,7 @@ pub async fn startup_hot_reload(config: CrateConfig) -> Result<()> { log::info!("reloading rsx"); for (old, new) in changed.into_iter() { let hr = get_location( - &path - .strip_prefix(&crate_dir) - .unwrap() - .to_path_buf(), + &path.to_path_buf(), old.to_token_stream(), ); // get the original source code to preserve whitespace From f8014f307b7ae0ac53a9415e4849d35b4a286fc3 Mon Sep 17 00:00:00 2001 From: Demonthos <66571940+Demonthos@users.noreply.github.com> Date: Tue, 21 Jun 2022 10:19:42 -0500 Subject: [PATCH 150/459] depend on dioxus master until next release --- Cargo.toml | 2 +- src/server/hot_reload.rs | 4 ++-- src/server/mod.rs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index f5afe80db..59a840d77 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -51,7 +51,7 @@ zip = "0.6.2" tower = "0.4.12" syn = { version = "1.0" } -dioxus-rsx-interpreter = { path = "../dioxus/packages/rsx_interpreter" } +dioxus = { git = "https://github.com/dioxuslabs/dioxus/", features = ["hot_reload"] } proc-macro2 = { version = "1.0", features = ["span-locations"] } diff --git a/src/server/hot_reload.rs b/src/server/hot_reload.rs index 7c9a6957e..ea9c64fc7 100644 --- a/src/server/hot_reload.rs +++ b/src/server/hot_reload.rs @@ -2,14 +2,14 @@ use axum::{ extract::{ws::Message, Extension, TypedHeader, WebSocketUpgrade}, response::IntoResponse, }; -use dioxus_rsx_interpreter::SetRsxMessage; +use dioxus::rsx_interpreter::SetRsxMessage; use std::{path::PathBuf, sync::Arc}; use super::BuildManager; pub use crate::hot_reload::{find_rsx, DiffResult}; use crate::CrateConfig; -pub use dioxus_rsx_interpreter::{error::Error, CodeLocation, SetManyRsxMessage}; +pub use dioxus::rsx_interpreter::{error::Error, CodeLocation, SetManyRsxMessage}; pub use proc_macro2::TokenStream; pub use std::collections::HashMap; pub use std::sync::Mutex; diff --git a/src/server/mod.rs b/src/server/mod.rs index 8cdd76373..387355ee9 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -6,7 +6,7 @@ use axum::{ routing::{get, get_service}, Router, }; -use dioxus_rsx_interpreter::SetRsxMessage; +use dioxus::rsx_interpreter::SetRsxMessage; use notify::{RecommendedWatcher, Watcher}; use syn::spanned::Spanned; From abded864c315400c1b7b0b1f80af9bf182a2b9c1 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Tue, 28 Jun 2022 09:59:05 -0500 Subject: [PATCH 151/459] update hot_reload to hot-reload --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 59a840d77..42de2ba4c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -51,7 +51,7 @@ zip = "0.6.2" tower = "0.4.12" syn = { version = "1.0" } -dioxus = { git = "https://github.com/dioxuslabs/dioxus/", features = ["hot_reload"] } +dioxus = { git = "https://github.com/dioxuslabs/dioxus/", features = ["hot-reload"] } proc-macro2 = { version = "1.0", features = ["span-locations"] } From c9ac828ec773ad37f5fa5c12cfc610e9506d6ab8 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Tue, 28 Jun 2022 10:00:02 -0500 Subject: [PATCH 152/459] fix path seperator --- src/server/hot_reload.rs | 9 ++++++--- src/server/mod.rs | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/server/hot_reload.rs b/src/server/hot_reload.rs index ea9c64fc7..d34f079f5 100644 --- a/src/server/hot_reload.rs +++ b/src/server/hot_reload.rs @@ -97,6 +97,7 @@ pub async fn hot_reload_handler( if let DiffResult::RsxChanged(changed) = find_rsx(&new_file, &old_file) { for (old, new) in changed.into_iter() { let hr = get_location( + &state.watcher_config.crate_dir, k, old.to_token_stream(), ); @@ -150,7 +151,7 @@ pub async fn hot_reload_handler( let error: Error = serde_json::from_str(&err).unwrap(); match error{ Error::ParseError(parse_error) => { - log::error!("parse error:\n--> at {}:{}:{}\n\t{:?}", parse_error.location.file, parse_error.location.line, parse_error.location.column, parse_error.message); + log::error!("parse error:\n--> at {}:{}:{}\n\t{:?}", parse_error.location.file_path, parse_error.location.line, parse_error.location.column, parse_error.message); }, Error::RecompileRequiredError(_) => { if let Err(err) = state.build_manager.build(){ @@ -182,10 +183,12 @@ pub async fn hot_reload_handler( }) } -pub fn get_location(path: &Path, ts: TokenStream) -> CodeLocation { +pub fn get_location(crate_path: &Path, path: &Path, ts: TokenStream) -> CodeLocation { let span = ts.span().start(); + let relative = path.strip_prefix(crate_path).unwrap(); CodeLocation { - file: path.display().to_string(), + file_path: relative.display().to_string(), + crate_path: crate_path.display().to_string(), line: span.line as u32, column: span.column as u32 + 1, } diff --git a/src/server/mod.rs b/src/server/mod.rs index 387355ee9..4bb08170e 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -121,6 +121,7 @@ pub async fn startup_hot_reload(config: CrateConfig) -> Result<()> { log::info!("reloading rsx"); for (old, new) in changed.into_iter() { let hr = get_location( + &crate_dir, &path.to_path_buf(), old.to_token_stream(), ); From c54d4677302a6bafcd9185fd3340fb59f94c6047 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Wed, 29 Jun 2022 16:40:23 +0800 Subject: [PATCH 153/459] feat: set `port` configurable --- src/cli/cfg.rs | 5 +++++ src/cli/serve/mod.rs | 2 +- src/server/mod.rs | 14 ++++++-------- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/cli/cfg.rs b/src/cli/cfg.rs index 73f9570d4..9fe453c49 100644 --- a/src/cli/cfg.rs +++ b/src/cli/cfg.rs @@ -40,6 +40,11 @@ pub struct ConfigOptsServe { #[clap(parse(from_os_str))] pub target: Option, + /// Port of dev server + #[clap(long)] + #[clap(default_value_t = 8080)] + pub port: u16, + /// Build a example [default: ""] #[clap(long)] pub example: Option, diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index 5511845cb..5528ebade 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -69,7 +69,7 @@ impl Serve { Serve::regen_dev_page(&crate_config)?; // start the develop server - server::startup(crate_config.clone()).await?; + server::startup(self.serve.port, crate_config.clone()).await?; Ok(()) } diff --git a/src/server/mod.rs b/src/server/mod.rs index 387355ee9..096b07cc0 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -50,16 +50,16 @@ struct WsReloadState { update: broadcast::Sender<()>, } -pub async fn startup(config: CrateConfig) -> Result<()> { +pub async fn startup(port: u16, config: CrateConfig) -> Result<()> { if config.hot_reload { - startup_hot_reload(config).await? + startup_hot_reload(port, config).await? } else { - startup_default(config).await? + startup_default(port, config).await? } Ok(()) } -pub async fn startup_hot_reload(config: CrateConfig) -> Result<()> { +pub async fn startup_hot_reload(port: u16, config: CrateConfig) -> Result<()> { log::info!("🚀 Starting development server..."); let dist_path = config.out_dir.clone(); @@ -179,7 +179,6 @@ pub async fn startup_hot_reload(config: CrateConfig) -> Result<()> { } // start serve dev-server at 0.0.0.0:8080 - let port = "8080"; log::info!("📡 Dev-Server is started at: http://127.0.0.1:{}/", port); let file_service_config = config.clone(); @@ -242,7 +241,7 @@ pub async fn startup_hot_reload(config: CrateConfig) -> Result<()> { Ok(()) } -pub async fn startup_default(config: CrateConfig) -> Result<()> { +pub async fn startup_default(port: u16, config: CrateConfig) -> Result<()> { log::info!("🚀 Starting development server..."); let dist_path = config.out_dir.clone(); @@ -289,8 +288,7 @@ pub async fn startup_default(config: CrateConfig) -> Result<()> { .unwrap(); } - // start serve dev-server at 0.0.0.0:8080 - let port = "8080"; + // start serve dev-server at 0.0.0.0 log::info!("📡 Dev-Server is started at: http://127.0.0.1:{}/", port); let file_service_config = config.clone(); From f4ed207649e8dbcb36092f5db58834edded7c0de Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Wed, 6 Jul 2022 00:22:40 +0800 Subject: [PATCH 154/459] feat: commit code --- src/server/hot_reload.rs | 6 +++--- src/server/mod.rs | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/server/hot_reload.rs b/src/server/hot_reload.rs index ea9c64fc7..6f494dfc7 100644 --- a/src/server/hot_reload.rs +++ b/src/server/hot_reload.rs @@ -34,7 +34,7 @@ pub struct FileMap { impl FileMap { pub fn new(path: PathBuf) -> Self { - log::info!("Searching files for changes since last compile..."); + log::info!("🔮 Searching files for changes since last compile..."); fn find_rs_files(root: PathBuf) -> io::Result> { let mut files = HashMap::new(); if root.is_dir() { @@ -61,7 +61,7 @@ impl FileMap { last_updated_time, map: find_rs_files(path).unwrap(), }; - log::info!("Files updated"); + // log::info!("Files updated"); result } } @@ -78,7 +78,7 @@ pub async fn hot_reload_handler( let mut messages = Vec::new(); { - log::info!("Finding updates since last compile..."); + log::info!("🔮 Finding updates since last compile..."); let handle = state.last_file_rebuild.lock().unwrap(); let update_time = handle.last_updated_time.clone(); for (k, v) in handle.map.iter() { diff --git a/src/server/mod.rs b/src/server/mod.rs index 096b07cc0..75134a1ac 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -27,7 +27,7 @@ pub struct BuildManager { impl BuildManager { fn build(&self) -> Result<()> { - log::info!("Start to rebuild project..."); + log::info!("🪁 Rebuild code"); builder::build(&self.config)?; // change the websocket reload state to true; // the page will auto-reload. @@ -118,7 +118,7 @@ pub async fn startup_hot_reload(port: u16, config: CrateConfig) -> Result<()> { last_file_rebuild.map.insert(path, src); } DiffResult::RsxChanged(changed) => { - log::info!("reloading rsx"); + log::info!("🪁 reloading rsx"); for (old, new) in changed.into_iter() { let hr = get_location( &path.to_path_buf(), @@ -269,7 +269,7 @@ pub async fn startup_default(port: u16, config: CrateConfig) -> Result<()> { .unwrap_or_else(|| vec![PathBuf::from("src")]); let mut watcher = RecommendedWatcher::new(move |_: notify::Result| { - log::info!("reload required"); + // log::info!("🚧 reload required"); if chrono::Local::now().timestamp() > last_update_time { match build_manager.build() { Ok(_) => last_update_time = chrono::Local::now().timestamp(), From baab2b9b4f56f120735fd602d2cf923a6988e2f7 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 6 Jul 2022 00:45:22 -0400 Subject: [PATCH 155/459] feat: use local bundle strategy --- .gitignore | 3 +- Cargo.toml | 6 +- build.rs | 50 + extension/dist/.gitignore | 2 + extension/package-lock.json | 4436 +++++++++++++++++++++++++---------- extension/package.json | 42 +- extension/server/.gitignore | 3 + extension/src/extension.ts | 139 -- extension/src/main.ts | 184 ++ src/cli/autoformat/mod.rs | 4 +- src/cli/mod.rs | 5 + src/cli/version.rs | 76 + src/main.rs | 5 + 13 files changed, 3604 insertions(+), 1351 deletions(-) create mode 100644 build.rs create mode 100644 extension/dist/.gitignore create mode 100644 extension/server/.gitignore delete mode 100644 extension/src/extension.ts create mode 100644 extension/src/main.ts create mode 100644 src/cli/version.rs diff --git a/.gitignore b/.gitignore index 2e049011e..5d6f4db1c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /target Cargo.lock -.idea/ \ No newline at end of file +.idea/ +.DS_Store diff --git a/Cargo.toml b/Cargo.toml index 9f85a89c2..506f14543 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,10 +46,8 @@ flate2 = "1.0.22" tar = "0.4.38" tower = "0.4.12" -dioxus-rsx = { path = "../../dioxus/packages/rsx" } -dioxus-autofmt = { path = "../../dioxus/packages/autofmt" } -# dioxus-rsx = { git = "https://github.com/dioxuslabs/dioxus.git", branch = "jk/rsx-refactor" } -# dioxus-autofmt = { git = "https://github.com/dioxuslabs/dioxus.git", branch = "jk/rsx-refactor" } +dioxus-rsx = { git = "https://github.com/dioxuslabs/dioxus.git" } +dioxus-autofmt = { git = "https://github.com/dioxuslabs/dioxus.git" } [[bin]] path = "src/main.rs" diff --git a/build.rs b/build.rs new file mode 100644 index 000000000..15935e2da --- /dev/null +++ b/build.rs @@ -0,0 +1,50 @@ +//! Construct version in the `commit-hash date channel` format + +use std::{env, path::PathBuf, process::Command}; + +fn main() { + set_rerun(); + set_commit_info(); + if option_env!("CFG_RELEASE").is_none() { + println!("cargo:rustc-env=POKE_RA_DEVS=1"); + } +} + +fn set_rerun() { + println!("cargo:rerun-if-env-changed=CFG_RELEASE"); + + let mut manifest_dir = PathBuf::from( + env::var("CARGO_MANIFEST_DIR").expect("`CARGO_MANIFEST_DIR` is always set by cargo."), + ); + + while manifest_dir.parent().is_some() { + let head_ref = manifest_dir.join(".git/HEAD"); + if head_ref.exists() { + println!("cargo:rerun-if-changed={}", head_ref.display()); + return; + } + + manifest_dir.pop(); + } + + println!("cargo:warning=Could not find `.git/HEAD` from manifest dir!"); +} + +fn set_commit_info() { + let output = match Command::new("git") + .arg("log") + .arg("-1") + .arg("--date=short") + .arg("--format=%H %h %cd") + .output() + { + Ok(output) if output.status.success() => output, + _ => return, + }; + let stdout = String::from_utf8(output.stdout).unwrap(); + let mut parts = stdout.split_whitespace(); + let mut next = || parts.next().unwrap(); + println!("cargo:rustc-env=RA_COMMIT_HASH={}", next()); + println!("cargo:rustc-env=RA_COMMIT_SHORT_HASH={}", next()); + println!("cargo:rustc-env=RA_COMMIT_DATE={}", next()) +} diff --git a/extension/dist/.gitignore b/extension/dist/.gitignore new file mode 100644 index 000000000..1287e9bd7 --- /dev/null +++ b/extension/dist/.gitignore @@ -0,0 +1,2 @@ +** +!.gitignore diff --git a/extension/package-lock.json b/extension/package-lock.json index 5de12fb6d..c671ca72c 100644 --- a/extension/package-lock.json +++ b/extension/package-lock.json @@ -1,92 +1,82 @@ { - "name": "dioxusstudio", + "name": "dioxus", "version": "0.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "dioxusstudio", + "name": "dioxus", "version": "0.0.1", "license": "MIT", + "dependencies": { + "vsce": "^2.9.2" + }, "devDependencies": { - "@types/node": "^12.12.0", - "@types/vscode": "^1.32.0", - "@typescript-eslint/eslint-plugin": "^4.16.0", - "@typescript-eslint/parser": "^4.16.0", - "eslint": "^7.21.0", - "typescript": "^4.3.5" + "@types/node": "^18.0.2", + "@types/vscode": "^1.68.1", + "@typescript-eslint/eslint-plugin": "^5.30.5", + "@typescript-eslint/parser": "^5.30.5", + "cross-env": "^7.0.3", + "esbuild": "^0.14.27", + "eslint": "^8.19.0", + "eslint-config-prettier": "^8.5.0", + "ovsx": "^0.5.1", + "prettier": "^2.6.2", + "tslib": "^2.3.0", + "typescript": "^4.7.4", + "vsce": "^2.7.0" }, "engines": { - "vscode": "^1.32.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "node_modules/@babel/highlight": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.8.tgz", - "integrity": "sha512-4vrIhfJyfNf+lCtXC2ck1rKSzDwciqF7IWFhXXrSOUC2O5DrVp+w4c6ed4AllTxhTkUP5x2tYj41VaxdVMMRDw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "vscode": "^1.68.1" } }, "node_modules/@eslint/eslintrc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", - "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", "dev": true, "dependencies": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.4", + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" }, "engines": { @@ -94,21 +84,21 @@ } }, "node_modules/@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.4", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" }, "engines": { @@ -116,48 +106,49 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, "node_modules/@types/node": { - "version": "12.12.35", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.35.tgz", - "integrity": "sha512-ASYsaKecA7TUsDrqIGPNk3JeEox0z/0XR/WsJJ8BIX/9+SkMSImQXKWfU/yBrSyc7ZSE/NPqLu36Nur0miCFfQ==", + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.2.tgz", + "integrity": "sha512-b947SdS4GH+g2W33wf5FzUu1KLj5FcSIiNWbU1ZyMvt/X7w48ZsVcsQoirIgE/Oq03WT5Qbn/dkY0hePi4ZXcQ==", "dev": true }, "node_modules/@types/vscode": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.33.0.tgz", - "integrity": "sha512-JSmGiValbrcG5g20jjCfKakLiuWyrcjVezj+SEAEZ4klXQktE5EtowuGlkLVqbkiBK4iY5wy/4yW8OjecuHnjQ==", + "version": "1.68.1", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.68.1.tgz", + "integrity": "sha512-fXlaq13NT5yHh6yZ3c+UxXloTSk34mIvsNFYyQCeO5Po2BLFAwz7EZT4kQ43B64/aPcnAenyWy3QasrTofBOnQ==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.16.1.tgz", - "integrity": "sha512-SK777klBdlkUZpZLC1mPvyOWk9yAFCWmug13eAjVQ4/Q1LATE/NbcQL1xDHkptQkZOLnPmLUA1Y54m8dqYwnoQ==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.5.tgz", + "integrity": "sha512-lftkqRoBvc28VFXEoRgyZuztyVUQ04JvUnATSPtIRFAccbXTWL6DEtXGYMcbg998kXw1NLUJm7rTQ9eUt+q6Ig==", "dev": true, "dependencies": { - "@typescript-eslint/experimental-utils": "4.16.1", - "@typescript-eslint/scope-manager": "4.16.1", - "debug": "^4.1.1", + "@typescript-eslint/scope-manager": "5.30.5", + "@typescript-eslint/type-utils": "5.30.5", + "@typescript-eslint/utils": "5.30.5", + "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.15", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -165,50 +156,26 @@ } } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.16.1.tgz", - "integrity": "sha512-0Hm3LSlMYFK17jO4iY3un1Ve9x1zLNn4EM50Lia+0EV99NdbK+cn0er7HC7IvBA23mBg3P+8dUkMXy4leL33UQ==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.16.1", - "@typescript-eslint/types": "4.16.1", - "@typescript-eslint/typescript-estree": "4.16.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, "node_modules/@typescript-eslint/parser": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.16.1.tgz", - "integrity": "sha512-/c0LEZcDL5y8RyI1zLcmZMvJrsR6SM1uetskFkoh3dvqDKVXPsXI+wFB/CbVw7WkEyyTKobC1mUNp/5y6gRvXg==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.5.tgz", + "integrity": "sha512-zj251pcPXI8GO9NDKWWmygP6+UjwWmrdf9qMW/L/uQJBM/0XbU2inxe5io/234y/RCvwpKEYjZ6c1YrXERkK4Q==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "4.16.1", - "@typescript-eslint/types": "4.16.1", - "@typescript-eslint/typescript-estree": "4.16.1", - "debug": "^4.1.1" + "@typescript-eslint/scope-manager": "5.30.5", + "@typescript-eslint/types": "5.30.5", + "@typescript-eslint/typescript-estree": "5.30.5", + "debug": "^4.3.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -217,29 +184,55 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.16.1.tgz", - "integrity": "sha512-6IlZv9JaurqV0jkEg923cV49aAn8V6+1H1DRfhRcvZUrptQ+UtSKHb5kwTayzOYTJJ/RsYZdcvhOEKiBLyc0Cw==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.5.tgz", + "integrity": "sha512-NJ6F+YHHFT/30isRe2UTmIGGAiXKckCyMnIV58cE3JkHmaD6e5zyEYm5hBDv0Wbin+IC0T1FWJpD3YqHUG/Ydg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.16.1", - "@typescript-eslint/visitor-keys": "4.16.1" + "@typescript-eslint/types": "5.30.5", + "@typescript-eslint/visitor-keys": "5.30.5" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.5.tgz", + "integrity": "sha512-k9+ejlv1GgwN1nN7XjVtyCgE0BTzhzT1YsQF0rv4Vfj2U9xnslBgMYYvcEYAFVdvhuEscELJsB7lDkN7WusErw==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "5.30.5", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@typescript-eslint/types": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.16.1.tgz", - "integrity": "sha512-nnKqBwMgRlhzmJQF8tnFDZWfunXmJyuXj55xc8Kbfup4PbkzdoDXZvzN8//EiKR27J6vUSU8j4t37yUuYPiLqA==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.5.tgz", + "integrity": "sha512-kZ80w/M2AvsbRvOr3PjaNh6qEW1LFqs2pLdo2s5R38B2HYXG8Z0PP48/4+j1QHJFL3ssHIbJ4odPRS8PlHrFfw==", "dev": true, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -247,21 +240,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.16.1.tgz", - "integrity": "sha512-m8I/DKHa8YbeHt31T+UGd/l8Kwr0XCTCZL3H4HMvvLCT7HU9V7yYdinTOv1gf/zfqNeDcCgaFH2BMsS8x6NvJg==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.5.tgz", + "integrity": "sha512-qGTc7QZC801kbYjAr4AgdOfnokpwStqyhSbiQvqGBLixniAKyH+ib2qXIVo4P9NgGzwyfD9I0nlJN7D91E1VpQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.16.1", - "@typescript-eslint/visitor-keys": "4.16.1", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "@typescript-eslint/types": "5.30.5", + "@typescript-eslint/visitor-keys": "5.30.5", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -273,36 +266,51 @@ } } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.16.1.tgz", - "integrity": "sha512-s/aIP1XcMkEqCNcPQtl60ogUYjSM8FU2mq1O7y5cFf3Xcob1z1iXWNB6cC43Op+NGRTFgGolri6s8z/efA9i1w==", + "node_modules/@typescript-eslint/utils": { + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.5.tgz", + "integrity": "sha512-o4SSUH9IkuA7AYIfAvatldovurqTAHrfzPApOZvdUq01hHojZojCFXx06D/aFpKCgWbMPRdJBWAC3sWp3itwTA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.16.1", - "eslint-visitor-keys": "^2.0.0" + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.30.5", + "@typescript-eslint/types": "5.30.5", + "@typescript-eslint/typescript-estree": "5.30.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.5.tgz", + "integrity": "sha512-D+xtGo9HUMELzWIUqcQc0p2PO4NyvTrgIOK/VnSH083+8sq0tiLozNRKuLarwHYGRuA6TVBQSuuLwJUDWd3aaA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.30.5", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -312,9 +320,9 @@ } }, "node_modules/acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -336,44 +344,35 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/array-union": { "version": "2.1.0", @@ -384,19 +383,57 @@ "node": ">=8" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/azure-devops-node-api": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.1.1.tgz", + "integrity": "sha512-XDG91XzLZ15reP12s3jFkKS8oiagSICjnLwxEYieme4+4h3ZveFOFRA4iYIG40RyHXsiI0mefFYYMFIJbMpWcg==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" } }, "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, "node_modules/brace-expansion": { @@ -421,6 +458,52 @@ "node": ">=8" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -431,9 +514,9 @@ } }, "node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", @@ -446,22 +529,57 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">= 6" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" } }, - "node_modules/chalk/node_modules/color-convert": { + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -473,54 +591,45 @@ "node": ">=7.0.0" } }, - "node_modules/chalk/node_modules/color-name": { + "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/chalk/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -535,22 +644,90 @@ "node": ">= 8" } }, - "node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" } }, "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -575,74 +752,488 @@ "node": ">=6.0.0" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, "dependencies": { - "ansi-colors": "^4.1.1" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" }, "engines": { - "node": ">=8.6" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz", + "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.48.tgz", + "integrity": "sha512-w6N1Yn5MtqK2U1/WZTX9ZqUVb8IOLZkZ5AdHkT6x3cHDMVsYWC7WPdiLmx19w3i4Rwzy5LqsEMtVihG3e4rFzA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "esbuild-android-64": "0.14.48", + "esbuild-android-arm64": "0.14.48", + "esbuild-darwin-64": "0.14.48", + "esbuild-darwin-arm64": "0.14.48", + "esbuild-freebsd-64": "0.14.48", + "esbuild-freebsd-arm64": "0.14.48", + "esbuild-linux-32": "0.14.48", + "esbuild-linux-64": "0.14.48", + "esbuild-linux-arm": "0.14.48", + "esbuild-linux-arm64": "0.14.48", + "esbuild-linux-mips64le": "0.14.48", + "esbuild-linux-ppc64le": "0.14.48", + "esbuild-linux-riscv64": "0.14.48", + "esbuild-linux-s390x": "0.14.48", + "esbuild-netbsd-64": "0.14.48", + "esbuild-openbsd-64": "0.14.48", + "esbuild-sunos-64": "0.14.48", + "esbuild-windows-32": "0.14.48", + "esbuild-windows-64": "0.14.48", + "esbuild-windows-arm64": "0.14.48" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.48.tgz", + "integrity": "sha512-3aMjboap/kqwCUpGWIjsk20TtxVoKck8/4Tu19rubh7t5Ra0Yrpg30Mt1QXXlipOazrEceGeWurXKeFJgkPOUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.48.tgz", + "integrity": "sha512-vptI3K0wGALiDq+EvRuZotZrJqkYkN5282iAfcffjI5lmGG9G1ta/CIVauhY42MBXwEgDJkweiDcDMRLzBZC4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.48.tgz", + "integrity": "sha512-gGQZa4+hab2Va/Zww94YbshLuWteyKGD3+EsVon8EWTWhnHFRm5N9NbALNbwi/7hQ/hM1Zm4FuHg+k6BLsl5UA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.48.tgz", + "integrity": "sha512-bFjnNEXjhZT+IZ8RvRGNJthLWNHV5JkCtuOFOnjvo5pC0sk2/QVk0Qc06g2PV3J0TcU6kaPC3RN9yy9w2PSLEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.48.tgz", + "integrity": "sha512-1NOlwRxmOsnPcWOGTB10JKAkYSb2nue0oM1AfHWunW/mv3wERfJmnYlGzL3UAOIUXZqW8GeA2mv+QGwq7DToqA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.48.tgz", + "integrity": "sha512-gXqKdO8wabVcYtluAbikDH2jhXp+Klq5oCD5qbVyUG6tFiGhrC9oczKq3vIrrtwcxDQqK6+HDYK8Zrd4bCA9Gw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.48.tgz", + "integrity": "sha512-ghGyDfS289z/LReZQUuuKq9KlTiTspxL8SITBFQFAFRA/IkIvDpnZnCAKTCjGXAmUqroMQfKJXMxyjJA69c/nQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.48.tgz", + "integrity": "sha512-vni3p/gppLMVZLghI7oMqbOZdGmLbbKR23XFARKnszCIBpEMEDxOMNIKPmMItQrmH/iJrL1z8Jt2nynY0bE1ug==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.48.tgz", + "integrity": "sha512-+VfSV7Akh1XUiDNXgqgY1cUP1i2vjI+BmlyXRfVz5AfV3jbpde8JTs5Q9sYgaoq5cWfuKfoZB/QkGOI+QcL1Tw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.48.tgz", + "integrity": "sha512-3CFsOlpoxlKPRevEHq8aAntgYGYkE1N9yRYAcPyng/p4Wyx0tPR5SBYsxLKcgPB9mR8chHEhtWYz6EZ+H199Zw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.48.tgz", + "integrity": "sha512-cs0uOiRlPp6ymknDnjajCgvDMSsLw5mST2UXh+ZIrXTj2Ifyf2aAP3Iw4DiqgnyYLV2O/v/yWBJx+WfmKEpNLA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.48.tgz", + "integrity": "sha512-+2F0vJMkuI0Wie/wcSPDCqXvSFEELH7Jubxb7mpWrA/4NpT+/byjxDz0gG6R1WJoeDefcrMfpBx4GFNN1JQorQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.48.tgz", + "integrity": "sha512-BmaK/GfEE+5F2/QDrIXteFGKnVHGxlnK9MjdVKMTfvtmudjY3k2t8NtlY4qemKSizc+QwyombGWTBDc76rxePA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.48.tgz", + "integrity": "sha512-tndw/0B9jiCL+KWKo0TSMaUm5UWBLsfCKVdbfMlb3d5LeV9WbijZ8Ordia8SAYv38VSJWOEt6eDCdOx8LqkC4g==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.48.tgz", + "integrity": "sha512-V9hgXfwf/T901Lr1wkOfoevtyNkrxmMcRHyticybBUHookznipMOHoF41Al68QBsqBxnITCEpjjd4yAos7z9Tw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.48.tgz", + "integrity": "sha512-+IHf4JcbnnBl4T52egorXMatil/za0awqzg2Vy6FBgPcBpisDWT2sVz/tNdrK9kAqj+GZG/jZdrOkj7wsrNTKA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.48.tgz", + "integrity": "sha512-77m8bsr5wOpOWbGi9KSqDphcq6dFeJyun8TA+12JW/GAjyfTwVtOnN8DOt6DSPUfEV+ltVMNqtXUeTeMAxl5KA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.48.tgz", + "integrity": "sha512-EPgRuTPP8vK9maxpTGDe5lSoIBHGKO/AuxDncg5O3NkrPeLNdvvK8oywB0zGaAZXxYWfNNSHskvvDgmfVTguhg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.48.tgz", + "integrity": "sha512-YmpXjdT1q0b8ictSdGwH3M8VCoqPpK1/UArze3X199w6u8hUx3V8BhAi1WjbsfDYRBanVVtduAhh2sirImtAvA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.48.tgz", + "integrity": "sha512-HHaOMCsCXp0rz5BT2crTka6MPWVno121NKApsGs/OIW5QC0ggC69YMGs1aJct9/9FSUF4A1xNE/cLvgB5svR4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.21.0.tgz", - "integrity": "sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", + "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", "dev": true, "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.0", + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", "esquery": "^1.4.0", "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.20", - "minimatch": "^3.0.4", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -650,47 +1241,25 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, "node_modules/eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", - "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", @@ -703,94 +1272,76 @@ "node": ">=8.0.0" } }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" }, "engines": { - "node": ">=6" + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" }, "funding": { "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" } }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, "engines": { "node": ">=10" } }, - "node_modules/eslint/node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "dependencies": { + "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": ">=4.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint/node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/esquery": { @@ -806,26 +1357,35 @@ } }, "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { - "estraverse": "^4.1.0" + "estraverse": "^5.2.0" }, "engines": { "node": ">=4.0" } }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", @@ -844,6 +1404,15 @@ "node": ">=0.10.0" } }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -851,20 +1420,31 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" }, "engines": { - "node": ">=8" + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/fast-json-stable-stringify": { @@ -876,18 +1456,27 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "node_modules/fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "dependencies": { "reusify": "^1.0.4" } }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -926,33 +1515,85 @@ } }, "node_modules/flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", "dev": true }, "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -964,24 +1605,24 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.16.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", + "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", "dev": true, "dependencies": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" @@ -991,16 +1632,16 @@ } }, "node_modules/globby": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", - "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" }, "engines": { @@ -1010,28 +1651,94 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, "engines": { - "node": ">= 4" + "node": ">= 0.4.0" } }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true, "engines": { "node": ">= 4" @@ -1056,7 +1763,7 @@ "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "engines": { "node": ">=0.8.19" @@ -1065,7 +1772,7 @@ "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "dependencies": { "once": "^1.3.0", @@ -1078,28 +1785,37 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { "is-extglob": "^2.1.1" @@ -1120,23 +1836,16 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -1151,9 +1860,29 @@ "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/keytar": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", + "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^4.3.0", + "prebuild-install": "^7.0.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -1167,10 +1896,19 @@ "node": ">= 0.8.0" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dev": true, + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "node_modules/lru-cache": { @@ -1185,6 +1923,37 @@ "node": ">=10" } }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -1195,22 +1964,46 @@ } }, "node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=8" + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -1219,22 +2012,85 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/node-abi": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.22.0.tgz", + "integrity": "sha512-u4uAs/4Zzmp/jjsD9cyFYDXeISfUWaAVWshPmDZOFOv4Xl4SbzTXm53I04C2uRueYJ+0t5PEtLH/owbn2Npf/w==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "dependencies": { "wrappy": "1" @@ -1257,6 +2113,26 @@ "node": ">= 0.8.0" } }, + "node_modules/ovsx": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/ovsx/-/ovsx-0.5.1.tgz", + "integrity": "sha512-3OWq0l7DuVHi2bd2aQe5+QVQlFIqvrcw3/2vGXL404L6Tr+R4QHtzfnYYghv8CCa85xJHjU0RhcaC7pyXkAUbg==", + "dev": true, + "dependencies": { + "commander": "^6.1.0", + "follow-redirects": "^1.14.6", + "is-ci": "^2.0.0", + "leven": "^3.1.0", + "tmp": "^0.2.1", + "vsce": "^2.6.3" + }, + "bin": { + "ovsx": "lib/ovsx" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -1269,10 +2145,53 @@ "node": ">=6" } }, + "node_modules/parse-semver": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", + "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", + "dev": true, + "dependencies": { + "semver": "^5.1.0" + } + }, + "node_modules/parse-semver/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/parse5": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", + "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", + "dev": true, + "dependencies": { + "entities": "^4.3.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -1296,10 +2215,16 @@ "node": ">=8" } }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "engines": { "node": ">=8.6" @@ -1308,6 +2233,32 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dev": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -1317,13 +2268,29 @@ "node": ">= 0.8.0" } }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, "engines": { - "node": ">=0.4.0" + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "node_modules/punycode": { @@ -1335,10 +2302,25 @@ "node": ">=6" } }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/queue-microtask": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz", - "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -1355,10 +2337,60 @@ } ] }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, "engines": { "node": ">=8" @@ -1367,15 +2399,6 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -1433,10 +2456,36 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, "node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -1469,6 +2518,65 @@ "node": ">=8" } }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -1478,83 +2586,22 @@ "node": ">=8" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" + "safe-buffer": "~5.2.0" } }, "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" @@ -1573,60 +2620,63 @@ } }, "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/table": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", - "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, "dependencies": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=6" } }, - "node_modules/table/node_modules/ajv": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.1.tgz", - "integrity": "sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1640,15 +2690,15 @@ } }, "node_modules/tslib": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", - "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", "dev": true }, "node_modules/tsutils": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz", - "integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "dependencies": { "tslib": "^1.8.1" @@ -1660,6 +2710,33 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -1673,18 +2750,32 @@ } }, "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-rest-client": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz", + "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==", + "dev": true, + "dependencies": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" } }, "node_modules/typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -1694,6 +2785,18 @@ "node": ">=4.2.0" } }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "node_modules/underscore": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.4.tgz", + "integrity": "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==", + "dev": true + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -1703,12 +2806,138 @@ "punycode": "^2.1.0" } }, - "node_modules/v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", "dev": true }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/vsce": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.9.2.tgz", + "integrity": "sha512-xyLqL4U82BilUX1t6Ym2opQEa2tLGWYjbgB7+ETeNVXlIJz5sWBJjQJSYJVFOKJSpiOtQclolu88cj7oY6vvPQ==", + "dev": true, + "dependencies": { + "azure-devops-node-api": "^11.0.1", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.9", + "commander": "^6.1.0", + "glob": "^7.0.6", + "hosted-git-info": "^4.0.2", + "keytar": "^7.7.0", + "leven": "^3.1.0", + "markdown-it": "^12.3.2", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "semver": "^5.1.0", + "tmp": "^0.2.1", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.4.23", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" + }, + "bin": { + "vsce": "vsce" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/vsce/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/vsce/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/vsce/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/vsce/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/vsce/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/vsce/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/vsce/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/vsce/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -1736,218 +2965,241 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3" + } } }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.8.tgz", - "integrity": "sha512-4vrIhfJyfNf+lCtXC2ck1rKSzDwciqF7IWFhXXrSOUC2O5DrVp+w4c6ed4AllTxhTkUP5x2tYj41VaxdVMMRDw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } - } - }, "@eslint/eslintrc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", - "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", "dev": true, "requires": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, - "@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.4", + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.4", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, "@types/node": { - "version": "12.12.35", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.35.tgz", - "integrity": "sha512-ASYsaKecA7TUsDrqIGPNk3JeEox0z/0XR/WsJJ8BIX/9+SkMSImQXKWfU/yBrSyc7ZSE/NPqLu36Nur0miCFfQ==", + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.2.tgz", + "integrity": "sha512-b947SdS4GH+g2W33wf5FzUu1KLj5FcSIiNWbU1ZyMvt/X7w48ZsVcsQoirIgE/Oq03WT5Qbn/dkY0hePi4ZXcQ==", "dev": true }, "@types/vscode": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.33.0.tgz", - "integrity": "sha512-JSmGiValbrcG5g20jjCfKakLiuWyrcjVezj+SEAEZ4klXQktE5EtowuGlkLVqbkiBK4iY5wy/4yW8OjecuHnjQ==", + "version": "1.68.1", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.68.1.tgz", + "integrity": "sha512-fXlaq13NT5yHh6yZ3c+UxXloTSk34mIvsNFYyQCeO5Po2BLFAwz7EZT4kQ43B64/aPcnAenyWy3QasrTofBOnQ==", "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.16.1.tgz", - "integrity": "sha512-SK777klBdlkUZpZLC1mPvyOWk9yAFCWmug13eAjVQ4/Q1LATE/NbcQL1xDHkptQkZOLnPmLUA1Y54m8dqYwnoQ==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.5.tgz", + "integrity": "sha512-lftkqRoBvc28VFXEoRgyZuztyVUQ04JvUnATSPtIRFAccbXTWL6DEtXGYMcbg998kXw1NLUJm7rTQ9eUt+q6Ig==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.16.1", - "@typescript-eslint/scope-manager": "4.16.1", - "debug": "^4.1.1", + "@typescript-eslint/scope-manager": "5.30.5", + "@typescript-eslint/type-utils": "5.30.5", + "@typescript-eslint/utils": "5.30.5", + "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.15", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.16.1.tgz", - "integrity": "sha512-0Hm3LSlMYFK17jO4iY3un1Ve9x1zLNn4EM50Lia+0EV99NdbK+cn0er7HC7IvBA23mBg3P+8dUkMXy4leL33UQ==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.16.1", - "@typescript-eslint/types": "4.16.1", - "@typescript-eslint/typescript-estree": "4.16.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" } }, "@typescript-eslint/parser": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.16.1.tgz", - "integrity": "sha512-/c0LEZcDL5y8RyI1zLcmZMvJrsR6SM1uetskFkoh3dvqDKVXPsXI+wFB/CbVw7WkEyyTKobC1mUNp/5y6gRvXg==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.5.tgz", + "integrity": "sha512-zj251pcPXI8GO9NDKWWmygP6+UjwWmrdf9qMW/L/uQJBM/0XbU2inxe5io/234y/RCvwpKEYjZ6c1YrXERkK4Q==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.16.1", - "@typescript-eslint/types": "4.16.1", - "@typescript-eslint/typescript-estree": "4.16.1", - "debug": "^4.1.1" + "@typescript-eslint/scope-manager": "5.30.5", + "@typescript-eslint/types": "5.30.5", + "@typescript-eslint/typescript-estree": "5.30.5", + "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.16.1.tgz", - "integrity": "sha512-6IlZv9JaurqV0jkEg923cV49aAn8V6+1H1DRfhRcvZUrptQ+UtSKHb5kwTayzOYTJJ/RsYZdcvhOEKiBLyc0Cw==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.5.tgz", + "integrity": "sha512-NJ6F+YHHFT/30isRe2UTmIGGAiXKckCyMnIV58cE3JkHmaD6e5zyEYm5hBDv0Wbin+IC0T1FWJpD3YqHUG/Ydg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.16.1", - "@typescript-eslint/visitor-keys": "4.16.1" + "@typescript-eslint/types": "5.30.5", + "@typescript-eslint/visitor-keys": "5.30.5" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.5.tgz", + "integrity": "sha512-k9+ejlv1GgwN1nN7XjVtyCgE0BTzhzT1YsQF0rv4Vfj2U9xnslBgMYYvcEYAFVdvhuEscELJsB7lDkN7WusErw==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.30.5", + "debug": "^4.3.4", + "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.16.1.tgz", - "integrity": "sha512-nnKqBwMgRlhzmJQF8tnFDZWfunXmJyuXj55xc8Kbfup4PbkzdoDXZvzN8//EiKR27J6vUSU8j4t37yUuYPiLqA==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.5.tgz", + "integrity": "sha512-kZ80w/M2AvsbRvOr3PjaNh6qEW1LFqs2pLdo2s5R38B2HYXG8Z0PP48/4+j1QHJFL3ssHIbJ4odPRS8PlHrFfw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.16.1.tgz", - "integrity": "sha512-m8I/DKHa8YbeHt31T+UGd/l8Kwr0XCTCZL3H4HMvvLCT7HU9V7yYdinTOv1gf/zfqNeDcCgaFH2BMsS8x6NvJg==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.5.tgz", + "integrity": "sha512-qGTc7QZC801kbYjAr4AgdOfnokpwStqyhSbiQvqGBLixniAKyH+ib2qXIVo4P9NgGzwyfD9I0nlJN7D91E1VpQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.16.1", - "@typescript-eslint/visitor-keys": "4.16.1", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "@typescript-eslint/types": "5.30.5", + "@typescript-eslint/visitor-keys": "5.30.5", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.5.tgz", + "integrity": "sha512-o4SSUH9IkuA7AYIfAvatldovurqTAHrfzPApOZvdUq01hHojZojCFXx06D/aFpKCgWbMPRdJBWAC3sWp3itwTA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.30.5", + "@typescript-eslint/types": "5.30.5", + "@typescript-eslint/typescript-estree": "5.30.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.16.1.tgz", - "integrity": "sha512-s/aIP1XcMkEqCNcPQtl60ogUYjSM8FU2mq1O7y5cFf3Xcob1z1iXWNB6cC43Op+NGRTFgGolri6s8z/efA9i1w==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.5.tgz", + "integrity": "sha512-D+xtGo9HUMELzWIUqcQc0p2PO4NyvTrgIOK/VnSH083+8sq0tiLozNRKuLarwHYGRuA6TVBQSuuLwJUDWd3aaA==", "dev": true, "requires": { - "@typescript-eslint/types": "4.16.1", - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", - "dev": true - } + "@typescript-eslint/types": "5.30.5", + "eslint-visitor-keys": "^3.3.0" } }, "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, @@ -1963,35 +3215,26 @@ "uri-js": "^4.2.2" } }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "array-union": { "version": "2.1.0", @@ -1999,16 +3242,43 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true + "azure-devops-node-api": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.1.1.tgz", + "integrity": "sha512-XDG91XzLZ15reP12s3jFkKS8oiagSICjnLwxEYieme4+4h3ZveFOFRA4iYIG40RyHXsiI0mefFYYMFIJbMpWcg==", + "dev": true, + "requires": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } }, "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, "brace-expansion": { @@ -2030,6 +3300,32 @@ "fill-range": "^7.0.1" } }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2037,77 +3333,92 @@ "dev": true }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", "dev": true, "requires": { - "color-name": "1.1.3" + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + } + }, + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -2119,19 +3430,59 @@ "which": "^2.0.1" } }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dev": true, "requires": { - "ms": "^2.1.1" + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" } }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", "dev": true }, "dir-glob": { @@ -2152,174 +3503,344 @@ "esutils": "^2.0.2" } }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, "requires": { - "ansi-colors": "^4.1.1" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" } }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "entities": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz", + "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==", + "dev": true + }, + "esbuild": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.48.tgz", + "integrity": "sha512-w6N1Yn5MtqK2U1/WZTX9ZqUVb8IOLZkZ5AdHkT6x3cHDMVsYWC7WPdiLmx19w3i4Rwzy5LqsEMtVihG3e4rFzA==", + "dev": true, + "requires": { + "esbuild-android-64": "0.14.48", + "esbuild-android-arm64": "0.14.48", + "esbuild-darwin-64": "0.14.48", + "esbuild-darwin-arm64": "0.14.48", + "esbuild-freebsd-64": "0.14.48", + "esbuild-freebsd-arm64": "0.14.48", + "esbuild-linux-32": "0.14.48", + "esbuild-linux-64": "0.14.48", + "esbuild-linux-arm": "0.14.48", + "esbuild-linux-arm64": "0.14.48", + "esbuild-linux-mips64le": "0.14.48", + "esbuild-linux-ppc64le": "0.14.48", + "esbuild-linux-riscv64": "0.14.48", + "esbuild-linux-s390x": "0.14.48", + "esbuild-netbsd-64": "0.14.48", + "esbuild-openbsd-64": "0.14.48", + "esbuild-sunos-64": "0.14.48", + "esbuild-windows-32": "0.14.48", + "esbuild-windows-64": "0.14.48", + "esbuild-windows-arm64": "0.14.48" + } + }, + "esbuild-android-64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.48.tgz", + "integrity": "sha512-3aMjboap/kqwCUpGWIjsk20TtxVoKck8/4Tu19rubh7t5Ra0Yrpg30Mt1QXXlipOazrEceGeWurXKeFJgkPOUg==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.48.tgz", + "integrity": "sha512-vptI3K0wGALiDq+EvRuZotZrJqkYkN5282iAfcffjI5lmGG9G1ta/CIVauhY42MBXwEgDJkweiDcDMRLzBZC4g==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.48.tgz", + "integrity": "sha512-gGQZa4+hab2Va/Zww94YbshLuWteyKGD3+EsVon8EWTWhnHFRm5N9NbALNbwi/7hQ/hM1Zm4FuHg+k6BLsl5UA==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.48.tgz", + "integrity": "sha512-bFjnNEXjhZT+IZ8RvRGNJthLWNHV5JkCtuOFOnjvo5pC0sk2/QVk0Qc06g2PV3J0TcU6kaPC3RN9yy9w2PSLEA==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.48.tgz", + "integrity": "sha512-1NOlwRxmOsnPcWOGTB10JKAkYSb2nue0oM1AfHWunW/mv3wERfJmnYlGzL3UAOIUXZqW8GeA2mv+QGwq7DToqA==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.48.tgz", + "integrity": "sha512-gXqKdO8wabVcYtluAbikDH2jhXp+Klq5oCD5qbVyUG6tFiGhrC9oczKq3vIrrtwcxDQqK6+HDYK8Zrd4bCA9Gw==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.48.tgz", + "integrity": "sha512-ghGyDfS289z/LReZQUuuKq9KlTiTspxL8SITBFQFAFRA/IkIvDpnZnCAKTCjGXAmUqroMQfKJXMxyjJA69c/nQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.48.tgz", + "integrity": "sha512-vni3p/gppLMVZLghI7oMqbOZdGmLbbKR23XFARKnszCIBpEMEDxOMNIKPmMItQrmH/iJrL1z8Jt2nynY0bE1ug==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.48.tgz", + "integrity": "sha512-+VfSV7Akh1XUiDNXgqgY1cUP1i2vjI+BmlyXRfVz5AfV3jbpde8JTs5Q9sYgaoq5cWfuKfoZB/QkGOI+QcL1Tw==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.48.tgz", + "integrity": "sha512-3CFsOlpoxlKPRevEHq8aAntgYGYkE1N9yRYAcPyng/p4Wyx0tPR5SBYsxLKcgPB9mR8chHEhtWYz6EZ+H199Zw==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.48.tgz", + "integrity": "sha512-cs0uOiRlPp6ymknDnjajCgvDMSsLw5mST2UXh+ZIrXTj2Ifyf2aAP3Iw4DiqgnyYLV2O/v/yWBJx+WfmKEpNLA==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.48.tgz", + "integrity": "sha512-+2F0vJMkuI0Wie/wcSPDCqXvSFEELH7Jubxb7mpWrA/4NpT+/byjxDz0gG6R1WJoeDefcrMfpBx4GFNN1JQorQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.48.tgz", + "integrity": "sha512-BmaK/GfEE+5F2/QDrIXteFGKnVHGxlnK9MjdVKMTfvtmudjY3k2t8NtlY4qemKSizc+QwyombGWTBDc76rxePA==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.48.tgz", + "integrity": "sha512-tndw/0B9jiCL+KWKo0TSMaUm5UWBLsfCKVdbfMlb3d5LeV9WbijZ8Ordia8SAYv38VSJWOEt6eDCdOx8LqkC4g==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.48.tgz", + "integrity": "sha512-V9hgXfwf/T901Lr1wkOfoevtyNkrxmMcRHyticybBUHookznipMOHoF41Al68QBsqBxnITCEpjjd4yAos7z9Tw==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.48.tgz", + "integrity": "sha512-+IHf4JcbnnBl4T52egorXMatil/za0awqzg2Vy6FBgPcBpisDWT2sVz/tNdrK9kAqj+GZG/jZdrOkj7wsrNTKA==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.48.tgz", + "integrity": "sha512-77m8bsr5wOpOWbGi9KSqDphcq6dFeJyun8TA+12JW/GAjyfTwVtOnN8DOt6DSPUfEV+ltVMNqtXUeTeMAxl5KA==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.48.tgz", + "integrity": "sha512-EPgRuTPP8vK9maxpTGDe5lSoIBHGKO/AuxDncg5O3NkrPeLNdvvK8oywB0zGaAZXxYWfNNSHskvvDgmfVTguhg==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.48.tgz", + "integrity": "sha512-YmpXjdT1q0b8ictSdGwH3M8VCoqPpK1/UArze3X199w6u8hUx3V8BhAi1WjbsfDYRBanVVtduAhh2sirImtAvA==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.48", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.48.tgz", + "integrity": "sha512-HHaOMCsCXp0rz5BT2crTka6MPWVno121NKApsGs/OIW5QC0ggC69YMGs1aJct9/9FSUF4A1xNE/cLvgB5svR4g==", + "dev": true, + "optional": true + }, "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "eslint": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.21.0.tgz", - "integrity": "sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", + "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", "dev": true, "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.0", + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", "esquery": "^1.4.0", "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.20", - "minimatch": "^3.0.4", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", - "dev": true - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true } } }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "requires": {} + }, "eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { - "esrecurse": "^4.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "eslint-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", - "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "eslint-visitor-keys": "^2.0.0" }, "dependencies": { "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true } } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, + "espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "requires": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, "esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", @@ -2330,20 +3851,28 @@ }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } }, "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "estraverse": "^4.1.0" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } } }, "estraverse": { @@ -2358,6 +3887,12 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2365,17 +3900,27 @@ "dev": true }, "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, "fast-json-stable-stringify": { @@ -2387,18 +3932,27 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "requires": { "reusify": "^1.0.4" } }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -2428,87 +3982,156 @@ } }, "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true + }, + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "dev": true + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", "dev": true }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" } }, "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.16.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", + "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } }, "globby": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", - "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" - }, - "dependencies": { - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - } + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "htmlparser2": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, "import-fresh": { @@ -2524,13 +4147,13 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "requires": { "once": "^1.3.0", @@ -2543,22 +4166,31 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -2573,23 +4205,16 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, "json-schema-traverse": { @@ -2601,7 +4226,23 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "keytar": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", + "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "dev": true, + "requires": { + "node-addon-api": "^4.3.0", + "prebuild-install": "^7.0.1" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true }, "levn": { @@ -2614,10 +4255,19 @@ "type-check": "~0.4.0" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "lru-cache": { @@ -2629,6 +4279,33 @@ "yallist": "^4.0.0" } }, + "markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dev": true, + "requires": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true + } + } + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -2636,40 +4313,106 @@ "dev": true }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node-abi": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.22.0.tgz", + "integrity": "sha512-u4uAs/4Zzmp/jjsD9cyFYDXeISfUWaAVWshPmDZOFOv4Xl4SbzTXm53I04C2uRueYJ+0t5PEtLH/owbn2Npf/w==", + "dev": true, + "requires": { + "semver": "^7.3.5" + } + }, + "node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "dev": true }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "requires": { "wrappy": "1" @@ -2689,6 +4432,20 @@ "word-wrap": "^1.2.3" } }, + "ovsx": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/ovsx/-/ovsx-0.5.1.tgz", + "integrity": "sha512-3OWq0l7DuVHi2bd2aQe5+QVQlFIqvrcw3/2vGXL404L6Tr+R4QHtzfnYYghv8CCa85xJHjU0RhcaC7pyXkAUbg==", + "dev": true, + "requires": { + "commander": "^6.1.0", + "follow-redirects": "^1.14.6", + "is-ci": "^2.0.0", + "leven": "^3.1.0", + "tmp": "^0.2.1", + "vsce": "^2.6.3" + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -2698,10 +4455,46 @@ "callsites": "^3.0.0" } }, + "parse-semver": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", + "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", + "dev": true, + "requires": { + "semver": "^5.1.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "parse5": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", + "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", + "dev": true, + "requires": { + "entities": "^4.3.0" + } + }, + "parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "requires": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + } + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, "path-key": { @@ -2716,46 +4509,125 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dev": true, + "requires": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + } + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, "queue-microtask": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz", - "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true + } + } + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "resolve-from": { @@ -2788,10 +4660,22 @@ "queue-microtask": "^1.2.2" } }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -2812,73 +4696,56 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true + }, + "simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "requires": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "safe-buffer": "~5.2.0" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "strip-json-comments": { @@ -2888,52 +4755,54 @@ "dev": true }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } }, - "table": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", - "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, "requires": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "ajv": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.1.tgz", - "integrity": "sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" } }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -2944,18 +4813,41 @@ } }, "tslib": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", - "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", "dev": true }, "tsutils": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz", - "integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" } }, "type-check": { @@ -2968,15 +4860,38 @@ } }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, + "typed-rest-client": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz", + "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==", + "dev": true, + "requires": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, "typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true + }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "underscore": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.4.tgz", + "integrity": "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==", "dev": true }, "uri-js": { @@ -2988,12 +4903,116 @@ "punycode": "^2.1.0" } }, - "v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", "dev": true }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "vsce": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.9.2.tgz", + "integrity": "sha512-xyLqL4U82BilUX1t6Ym2opQEa2tLGWYjbgB7+ETeNVXlIJz5sWBJjQJSYJVFOKJSpiOtQclolu88cj7oY6vvPQ==", + "dev": true, + "requires": { + "azure-devops-node-api": "^11.0.1", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.9", + "commander": "^6.1.0", + "glob": "^7.0.6", + "hosted-git-info": "^4.0.2", + "keytar": "^7.7.0", + "leven": "^3.1.0", + "markdown-it": "^12.3.2", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "semver": "^5.1.0", + "tmp": "^0.2.1", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.4.23", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -3012,7 +5031,23 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true }, "yallist": { @@ -3020,6 +5055,25 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3" + } } } } diff --git a/extension/package.json b/extension/package.json index f884637c8..3e4ca4b83 100644 --- a/extension/package.json +++ b/extension/package.json @@ -12,10 +12,10 @@ "url": "https://github.com/DioxusLabs/cli" }, "engines": { - "vscode": "^1.32.0" + "vscode": "^1.68.1" }, "categories": [ - "Other" + "Programming Languages" ], "activationEvents": [ "onCommand:extension.htmlToDioxusRsx", @@ -23,7 +23,7 @@ "onCommand:extension.formatRsx", "onCommand:extension.formatRsxDocument" ], - "main": "./out/extension", + "main": "./out/main", "contributes": { "commands": [ { @@ -45,18 +45,32 @@ ] }, "scripts": { - "vscode:prepublish": "npm run compile", - "compile": "tsc -p ./", - "lint": "eslint . --ext .ts,.tsx", - "watch": "tsc -watch -p ./", - "package": "vsce package" + "vscode:prepublish": "npm run build-base -- --minify", + "package": "vsce package -o rust-analyzer.vsix", + "build-base": "esbuild ./src/main.ts --bundle --outfile=out/main.js --external:vscode --format=cjs --platform=node --target=node16", + "build": "npm run build-base -- --sourcemap", + "watch": "npm run build-base -- --sourcemap --watch", + "lint": "prettier --check . && eslint -c .eslintrc.js --ext ts ./src ./tests", + "fix": "prettier --write . && eslint -c .eslintrc.js --ext ts ./src ./tests --fix", + "pretest": "tsc && npm run build", + "test": "cross-env TEST_VARIABLE=test node ./out/tests/runTests.js" }, "devDependencies": { - "@types/node": "^12.12.0", - "@types/vscode": "^1.32.0", - "@typescript-eslint/eslint-plugin": "^4.16.0", - "@typescript-eslint/parser": "^4.16.0", - "eslint": "^7.21.0", - "typescript": "^4.3.5" + "@types/node": "^18.0.2", + "@types/vscode": "^1.68.1", + "@typescript-eslint/eslint-plugin": "^5.30.5", + "@typescript-eslint/parser": "^5.30.5", + "cross-env": "^7.0.3", + "esbuild": "^0.14.27", + "eslint": "^8.19.0", + "typescript": "^4.7.4", + "eslint-config-prettier": "^8.5.0", + "ovsx": "^0.5.1", + "prettier": "^2.6.2", + "tslib": "^2.3.0", + "vsce": "^2.7.0" + }, + "dependencies": { + "vsce": "^2.9.2" } } diff --git a/extension/server/.gitignore b/extension/server/.gitignore new file mode 100644 index 000000000..f42761bea --- /dev/null +++ b/extension/server/.gitignore @@ -0,0 +1,3 @@ +** +!Readme.md +!.gitignore diff --git a/extension/src/extension.ts b/extension/src/extension.ts deleted file mode 100644 index 44d5b8f16..000000000 --- a/extension/src/extension.ts +++ /dev/null @@ -1,139 +0,0 @@ -import * as vscode from 'vscode'; -import { spawn } from "child_process"; - -export function activate(context: vscode.ExtensionContext) { - - - function translate(component: boolean) { - const editor = vscode.window.activeTextEditor;// Get the active text editor - if (!editor) return; - - const html = editor.document.getText(editor.selection); - if (html.length == 0) { - vscode.window.showWarningMessage("Please select HTML fragment before invoking this command!"); - return; - } - - let params = ["translate"]; - if (component) params.push("--component"); - params.push("--raw"); - params.push(html); - - const child_proc = spawn("dioxus", params); - - let result = ''; - child_proc.stdout?.on('data', data => result += data); - - child_proc.on('close', () => { - if (result.length > 0) editor.edit(editBuilder => editBuilder.replace(editor.selection, result)); - }); - - child_proc.on('error', (err) => { - vscode.window.showWarningMessage(`Errors occurred while translating. Make sure you have the most recent Dioxus-CLI installed! \n${err}`); - }); - } - - function autoformat_selection() { - const editor = vscode.window.activeTextEditor;// Get the active text editor - if (!editor) return; - - const unformatted = editor.document.getText(editor.selection); - if (unformatted.length == 0) { - vscode.window.showWarningMessage("Please select rsx invoking this command!"); - return; - } - - let args = ["fmt", "--raw", unformatted.toString()]; - const child_proc = spawn("dioxus", args); - let result = ''; - - child_proc.stdout?.on('data', data => result += data); - - child_proc.on('close', () => { - if (result.length > 0) editor.edit(editBuilder => editBuilder.replace(editor.selection, result)); - }); - - child_proc.on('error', (err) => { - vscode.window.showWarningMessage(`Errors occurred while translating. Make sure you have the most recent Dioxus-CLI installed! \n${err}`); - }); - } - - - function autoformat_document(document: vscode.TextDocument) { - // check the settings to make sure format on save is configured - // const formatOnSave: string | undefined = vscode.workspace.getConfiguration('rust').get('formatOnSave'); - - if (document.languageId === "rust" && document.uri.scheme === "file") { - const active_editor = vscode.window.activeTextEditor;// Get the active text editor - - if (active_editor?.document.fileName === document.fileName) { - const text = document.getText(); - - console.error(text); - - const child_proc = spawn("dioxus", ["fmt", "-f", text]); - - let result = ''; - - child_proc.stdout?.on('data', data => result += data); - - type RsxEdit = { - formatted: string, - start: number, - end: number - } - - child_proc.on('close', () => { - - if (result.length > 0) { - let decoded: RsxEdit[] = JSON.parse(result); - - console.log("Decoded edits: ", decoded); - - // Get the active text editor - const cur_editor = vscode.window.activeTextEditor; - - - // even if we build an empty edit stream, it tries to save the editor - // this makes sure the editor is actually saved - if (decoded.length > 0 && cur_editor == active_editor) { - active_editor.edit(editBuilder => { - - for (let edit of decoded) { - console.log("Handling Edit: ", edit); - - let start = document.positionAt(edit.start - 1); - let end = document.positionAt(edit.end + 1); - const range = new vscode.Range(start, end); - - editBuilder.replace(range, `{ ${edit.formatted} }`); - // editor.edit(editBuilder => editBuilder.replace(range, `{ ${edit.formatted} }`)).then((could_be_applied) => { - // }); - // editor.edit(editBuilder => editBuilder.replace(range, `{ ${edit.formatted} }`)).then((could_be_applied) => { - // console.log("Edit applied: ", could_be_applied); - // }); - } - }) - } - } - }); - - child_proc.on('error', (err) => { - vscode.window.showWarningMessage(`Errors occurred while translating. Make sure you have the most recent Dioxus-CLI installed! \n${err}`); - }); - } - } - } - - context.subscriptions.push( - vscode.commands.registerCommand('extension.htmlToDioxusRsx', () => translate(false)), - vscode.commands.registerCommand('extension.htmlToDioxusComponent', () => translate(true)), - vscode.commands.registerCommand('extension.formatRsx', () => autoformat_selection()), - vscode.commands.registerCommand('extension.formatRsxDocument', () => { - const editor = vscode.window.activeTextEditor;// Get the active text editor - if (!editor) return; - autoformat_document(editor.document); - }), - vscode.workspace.onDidSaveTextDocument(autoformat_document) - ); -} diff --git a/extension/src/main.ts b/extension/src/main.ts new file mode 100644 index 000000000..156d45565 --- /dev/null +++ b/extension/src/main.ts @@ -0,0 +1,184 @@ +import * as vscode from 'vscode'; +import { spawn } from "child_process"; + +let serverPath: string = "dioxus"; + +export async function activate(context: vscode.ExtensionContext) { + let somePath = await bootstrap(context); + + if (somePath == undefined) { + await vscode.window.showErrorMessage('Could not find bundled Dioxus-CLI. Please install it manually.'); + return; + } else { + serverPath = somePath; + } + + context.subscriptions.push( + vscode.commands.registerTextEditorCommand('editor.action.clipboardPasteAction', onPasteHandler), + vscode.commands.registerCommand('extension.htmlToDioxusRsx', translateBlock), + vscode.commands.registerCommand('extension.htmlToDioxusComponent', translateComponent), + vscode.commands.registerCommand('extension.formatRsx', fmtSelection), + vscode.commands.registerCommand('extension.formatRsxDocument', formatRsxDocument), + vscode.workspace.onWillSaveTextDocument(fmtDocument) + ); +} + + +function translateComponent() { + translate(true) +} + +function translateBlock() { + translate(false) +} + +function translate(component: boolean) { + const editor = vscode.window.activeTextEditor; + + if (!editor) return; + + const html = editor.document.getText(editor.selection); + if (html.length == 0) { + vscode.window.showWarningMessage("Please select HTML fragment before invoking this command!"); + return; + } + + let params = ["translate"]; + if (component) params.push("--component"); + params.push("--raw", html); + + const child_proc = spawn(serverPath, params); + + let result = ''; + child_proc.stdout?.on('data', data => result += data); + + child_proc.on('close', () => { + if (result.length > 0) editor.edit(editBuilder => editBuilder.replace(editor.selection, result)); + }); + + child_proc.on('error', (err) => { + vscode.window.showWarningMessage(`Errors occurred while translating. Make sure you have the most recent Dioxus-CLI installed! \n${err}`); + }); +} + +function onPasteHandler() { + // check settings to see if we should convert HTML to Rsx + if (vscode.workspace.getConfiguration('dioxus').get('convertOnPaste')) { + convertHtmlToRsxOnPaste(); + } +} + +function convertHtmlToRsxOnPaste() { + const editor = vscode.window.activeTextEditor; + if (!editor) return; + + // get the cursor location + const cursor = editor.selection.active; + + // try to parse the HTML at the cursor location + const html = editor.document.getText(new vscode.Range(cursor, cursor)); +} + +function formatRsxDocument() { + const editor = vscode.window.activeTextEditor; + if (editor) { + fmtDocument(); + } +} + +function fmtSelection() { + const editor = vscode.window.activeTextEditor; + if (!editor) return; + + const unformatted = editor.document.getText(editor.selection); + + if (unformatted.length == 0) { + vscode.window.showWarningMessage("Please select rsx invoking this command!"); + return; + } + + const child_proc = spawn(serverPath, ["fmt", "--raw", unformatted.toString()]); + let result = ''; + + child_proc.stdout?.on('data', data => result += data); + + child_proc.on('close', () => { + if (result.length > 0) editor.edit(editBuilder => editBuilder.replace(editor.selection, result)); + }); + + child_proc.on('error', (err) => { + vscode.window.showWarningMessage(`Errors occurred while translating. Make sure you have the most recent Dioxus-CLI installed! \n${err}`); + }); +} + +function fmtDocument() { + const editor = vscode.window.activeTextEditor; + const document = editor?.document; + if (!document) return; + + // check the settings to make sure format on save is configured + if (document.languageId === "rust" && document.uri.scheme === "file") { + const active_editor = vscode.window.activeTextEditor; + + if (active_editor?.document.fileName === document.fileName) { + const text = document.getText(); + const child_proc = spawn("dioxus", ["fmt", "-f", text]); + + let result = ''; + child_proc.stdout?.on('data', data => result += data); + + type RsxEdit = { + formatted: string, + start: number, + end: number + } + + child_proc.on('close', () => { + if (result.length > 0) { + let decoded: RsxEdit[] = JSON.parse(result); + + if (decoded.length > 0) { + active_editor.edit(editBuilder => { + decoded.map((edit) => { + editBuilder.replace(new vscode.Range( + document.positionAt(edit.start), + document.positionAt(edit.end) + ), edit.formatted); + }); + }, { + undoStopAfter: false, + undoStopBefore: false + }) + } + } + }); + + child_proc.on('error', (err) => { + vscode.window.showWarningMessage(`Errors occurred while translating. Make sure you have the most recent Dioxus-CLI installed! \n${err}`); + }); + } + } +} + + +// I'm using the approach defined in rust-analyzer here +// +// We ship the server as part of the extension, but we need to handle external paths and such +// +// https://github.com/rust-lang/rust-analyzer/blob/fee5555cfabed4b8abbd40983fc4442df4007e49/editors/code/src/main.ts#L270 +async function bootstrap(context: vscode.ExtensionContext): Promise { + + const ext = process.platform === "win32" ? ".exe" : ""; + const bundled = vscode.Uri.joinPath(context.extensionUri, "server", `dioxus${ext}`); + const bundledExists = await vscode.workspace.fs.stat(bundled).then( + () => true, + () => false + ); + + // if bunddled doesn't exist, try using a locally-installed version + if (!bundledExists) { + return "dioxus"; + } + + return bundled.fsPath; +} diff --git a/src/cli/autoformat/mod.rs b/src/cli/autoformat/mod.rs index 3008411db..5c1532d58 100644 --- a/src/cli/autoformat/mod.rs +++ b/src/cli/autoformat/mod.rs @@ -15,7 +15,7 @@ pub struct Autoformat { impl Autoformat { pub fn autoformat(self) -> Result<()> { if let Some(raw) = self.raw { - if let Some(inner) = dioxus_autofmt::fmt_block(&raw) { + if let Some(inner) = dioxus_autofmt::fmt_block(&raw, 0) { println!("{}", inner); } else { // exit process with error @@ -25,7 +25,7 @@ impl Autoformat { } if let Some(file) = self.file { - let edits = dioxus_autofmt::get_format_blocks(&file); + let edits = dioxus_autofmt::fmt_file(&file); let as_json = serde_json::to_string(&edits).unwrap(); println!("{}", as_json); } diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 92e05eaa9..efd72b3cd 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -7,6 +7,7 @@ pub mod create; pub mod serve; pub mod tool; pub mod translate; +pub mod version; use crate::{ cfg::{ConfigOptsBuild, ConfigOptsServe}, @@ -59,6 +60,10 @@ pub enum Commands { /// Clean output artifacts. Clean(clean::Clean), + /// Print the version of this extension + #[clap(name = "version")] + Version(version::Version), + /// Format some rsx #[clap(name = "fmt")] Autoformat(autoformat::Autoformat), diff --git a/src/cli/version.rs b/src/cli/version.rs new file mode 100644 index 000000000..3c77ba419 --- /dev/null +++ b/src/cli/version.rs @@ -0,0 +1,76 @@ +use super::*; + +/// Build the Rust WASM app and all of its assets. +#[derive(Clone, Debug, Parser)] +#[clap(name = "version")] +pub struct Version {} + +impl Version { + pub fn version(self) -> VersionInfo { + version() + } +} + +use std::fmt; + +/// Information about the git repository where rust-analyzer was built from. +pub struct CommitInfo { + pub short_commit_hash: &'static str, + pub commit_hash: &'static str, + pub commit_date: &'static str, +} + +/// Cargo's version. +pub struct VersionInfo { + /// rust-analyzer's version, such as "1.57.0", "1.58.0-beta.1", "1.59.0-nightly", etc. + pub version: &'static str, + + /// The release channel we were built for (stable/beta/nightly/dev). + /// + /// `None` if not built via rustbuild. + pub release_channel: Option<&'static str>, + + /// Information about the Git repository we may have been built from. + /// + /// `None` if not built from a git repo. + pub commit_info: Option, +} + +impl fmt::Display for VersionInfo { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", self.version)?; + + if let Some(ci) = &self.commit_info { + write!(f, " ({} {})", ci.short_commit_hash, ci.commit_date)?; + }; + Ok(()) + } +} + +/// Returns information about cargo's version. +pub const fn version() -> VersionInfo { + let version = match option_env!("CFG_RELEASE") { + Some(x) => x, + None => "0.0.0", + }; + + let release_channel = option_env!("CFG_RELEASE_CHANNEL"); + let commit_info = match ( + option_env!("RA_COMMIT_SHORT_HASH"), + option_env!("RA_COMMIT_HASH"), + option_env!("RA_COMMIT_DATE"), + ) { + (Some(short_commit_hash), Some(commit_hash), Some(commit_date)) => Some(CommitInfo { + short_commit_hash, + commit_hash, + commit_date, + }), + _ => None, + }; + + VersionInfo { + version, + release_channel, + commit_info, + } +} diff --git a/src/main.rs b/src/main.rs index 72558741e..f72cb7666 100644 --- a/src/main.rs +++ b/src/main.rs @@ -54,6 +54,11 @@ async fn main() -> Result<()> { log::error!("format error: {}", e); } } + + Commands::Version(opt) => { + let version = opt.version(); + println!("{}", version); + } } Ok(()) From 719e48c0a5f36cad505d2b0b6dd4a2bc9b212a6e Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Wed, 6 Jul 2022 16:16:16 +0800 Subject: [PATCH 156/459] feat: beautify console --- Cargo.toml | 3 ++- src/cli/mod.rs | 6 +----- src/lib.rs | 4 +++- src/server/mod.rs | 45 ++++++++++++++++++++++++++++++++++++++++++--- 4 files changed, 48 insertions(+), 10 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 42de2ba4c..fa14b36b7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dioxus-cli" -version = "0.1.4" +version = "0.1.5" authors = ["Jonathan Kelley"] edition = "2021" description = "CLI tool for developing, testing, and publishing Dioxus apps" @@ -14,6 +14,7 @@ license = "MIT/Apache-2.0" clap = { version = "3.0.14", features = ["derive"] } thiserror = "1.0.30" wasm-bindgen-cli-support = "0.2.79" +colored = "2.0.0" # features log = "0.4.14" diff --git a/src/cli/mod.rs b/src/cli/mod.rs index d639d28a7..b456d4705 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -27,7 +27,7 @@ use std::{ /// Build, bundle, & ship your Dioxus app. #[derive(Parser)] -#[clap(name = "dioxus")] +#[clap(name = "dioxus", version)] pub struct Cli { #[clap(subcommand)] pub action: Commands, @@ -35,10 +35,6 @@ pub struct Cli { /// Enable verbose logging. #[clap(short)] pub v: bool, - // // note: dioxus is still roughly compatible with trunk - // /// Path to the Trunk config file [default: Trunk.toml] - // #[clap(long, parse(from_os_str), env = "TRUNK_CONFIG")] - // pub config: Option, } #[derive(Parser)] diff --git a/src/lib.rs b/src/lib.rs index 6d009c18c..9956989b7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,5 @@ +pub const DIOXUS_CLI_VERSION: &'static str = "0.1.5"; + pub mod builder; pub mod server; pub mod tools; @@ -19,4 +21,4 @@ pub use error::*; pub mod logging; pub use logging::*; -pub mod hot_reload; +pub mod hot_reload; \ No newline at end of file diff --git a/src/server/mod.rs b/src/server/mod.rs index 446d9d75c..886088fd9 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -6,11 +6,12 @@ use axum::{ routing::{get, get_service}, Router, }; +use colored::Colorize; use dioxus::rsx_interpreter::SetRsxMessage; use notify::{RecommendedWatcher, Watcher}; use syn::spanned::Spanned; -use std::{path::PathBuf, sync::Arc}; +use std::{path::PathBuf, process::Command, sync::Arc}; use tower::ServiceBuilder; use tower_http::services::fs::{ServeDir, ServeFileSystemResponseBody}; @@ -180,7 +181,7 @@ pub async fn startup_hot_reload(port: u16, config: CrateConfig) -> Result<()> { } // start serve dev-server at 0.0.0.0:8080 - log::info!("📡 Dev-Server is started at: http://127.0.0.1:{}/", port); + print_console_info(port, &config); let file_service_config = config.clone(); let file_service = ServiceBuilder::new() @@ -290,7 +291,7 @@ pub async fn startup_default(port: u16, config: CrateConfig) -> Result<()> { } // start serve dev-server at 0.0.0.0 - log::info!("📡 Dev-Server is started at: http://127.0.0.1:{}/", port); + print_console_info(port, &config); let file_service_config = config.clone(); let file_service = ServiceBuilder::new() @@ -348,6 +349,44 @@ pub async fn startup_default(port: u16, config: CrateConfig) -> Result<()> { Ok(()) } +fn print_console_info(port: u16, config: &CrateConfig) { + print!( + "{}", + String::from_utf8_lossy( + &Command::new(if cfg!(target_os = "windows") { + "cls" + } else { + "clear" + }) + .output() + .unwrap() + .stdout + ) + ); + + let mut profile = if config.release { "Release" } else { "Debug" }.to_string(); + if config.custom_profile.is_some() { + profile = config.custom_profile.as_ref().unwrap().to_string(); + } + let hot_reload = if config.hot_reload { "RSX" } else { "Normal" }; + let workspace = config.workspace_dir.to_str().unwrap().to_string(); + + println!( + "{} @ v{}\n", + "Dioxus".bold().green(), + crate::DIOXUS_CLI_VERSION + ); + println!( + "\t> Local: {}", + format!("https://localhost:{}/", port).blue() + ); + println!("\t> Profile: {}", profile.green()); + println!("\t> Hot Reload: {}", hot_reload.green()); + println!("\t> Workspace: {}", workspace.yellow()); + + println!("\n{}", "Server startup completed.".bold()); +} + async fn ws_handler( ws: WebSocketUpgrade, _: Option>, From b2c5141fa6f62b4eaf3e4918dc5b6e29c2209785 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Wed, 6 Jul 2022 17:36:14 +0800 Subject: [PATCH 157/459] feat: commit code --- src/server/mod.rs | 46 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 886088fd9..b1e527b86 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -369,22 +369,54 @@ fn print_console_info(port: u16, config: &CrateConfig) { profile = config.custom_profile.as_ref().unwrap().to_string(); } let hot_reload = if config.hot_reload { "RSX" } else { "Normal" }; - let workspace = config.workspace_dir.to_str().unwrap().to_string(); + let tools_str = format!( + "{:?}", + config + .dioxus_config + .application + .tools + .clone() + .unwrap_or_default() + .iter() + .map(|d| d.0.clone()) + .collect::>() + ); + let crate_root = crate::cargo::crate_root().unwrap(); + let custom_html_file = if crate_root.join("index.html").is_file() { + "Custom [index.html]" + } else { + "Default" + }; + let url_rewrite = if config + .dioxus_config + .web + .watcher + .index_on_404 + .unwrap_or(false) + { + "True" + } else { + "False" + }; println!( "{} @ v{}\n", "Dioxus".bold().green(), - crate::DIOXUS_CLI_VERSION + crate::DIOXUS_CLI_VERSION, ); println!( - "\t> Local: {}", + "\t> Local : {}", format!("https://localhost:{}/", port).blue() ); - println!("\t> Profile: {}", profile.green()); - println!("\t> Hot Reload: {}", hot_reload.green()); - println!("\t> Workspace: {}", workspace.yellow()); + println!("\t> NetWork : {}", "use --host to expose".white().dimmed()); + println!(""); + println!("\t> Profile : {}", profile.green()); + println!("\t> Hot Reload : {}", hot_reload.cyan()); + println!("\t> Enabled Tools : {}", tools_str.yellow()); + println!("\t> Index Template : {}", custom_html_file.green()); + println!("\t> URL Rewrite : {}", url_rewrite.purple()); - println!("\n{}", "Server startup completed.".bold()); + println!("\n{}", "Server startup completed.\n".bold()); } async fn ws_handler( From 9e64b5dde88609d43ac14cccc571b39318356c05 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Wed, 6 Jul 2022 17:46:46 +0800 Subject: [PATCH 158/459] feat: commit code --- src/server/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index b1e527b86..87448cda9 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -416,7 +416,7 @@ fn print_console_info(port: u16, config: &CrateConfig) { println!("\t> Index Template : {}", custom_html_file.green()); println!("\t> URL Rewrite : {}", url_rewrite.purple()); - println!("\n{}", "Server startup completed.\n".bold()); + println!("\n{}\n", "Server startup completed.".green().bold()); } async fn ws_handler( From 8dbf571891bad849eb54c57bddd3849f1c02e8bf Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Wed, 6 Jul 2022 18:11:25 +0800 Subject: [PATCH 159/459] feat: commit console print --- src/server/mod.rs | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 87448cda9..93e81ea33 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -11,7 +11,7 @@ use dioxus::rsx_interpreter::SetRsxMessage; use notify::{RecommendedWatcher, Watcher}; use syn::spanned::Spanned; -use std::{path::PathBuf, process::Command, sync::Arc}; +use std::{path::PathBuf, process::Command, sync::Arc, net::UdpSocket}; use tower::ServiceBuilder; use tower_http::services::fs::{ServeDir, ServeFileSystemResponseBody}; @@ -408,17 +408,41 @@ fn print_console_info(port: u16, config: &CrateConfig) { "\t> Local : {}", format!("https://localhost:{}/", port).blue() ); - println!("\t> NetWork : {}", "use --host to expose".white().dimmed()); + println!( + "\t> NetWork : {}", + format!( + "http://{}:{}/", + get_ip().unwrap_or(String::from("0.0.0.0")), + port + ).blue() + ); println!(""); println!("\t> Profile : {}", profile.green()); println!("\t> Hot Reload : {}", hot_reload.cyan()); println!("\t> Enabled Tools : {}", tools_str.yellow()); println!("\t> Index Template : {}", custom_html_file.green()); - println!("\t> URL Rewrite : {}", url_rewrite.purple()); + println!("\t> URL Rewrite [index_on_404] : {}", url_rewrite.purple()); println!("\n{}\n", "Server startup completed.".green().bold()); } +fn get_ip() -> Option { + let socket = match UdpSocket::bind("0.0.0.0:0") { + Ok(s) => s, + Err(_) => return None, + }; + + match socket.connect("8.8.8.8:80") { + Ok(()) => (), + Err(_) => return None, + }; + + match socket.local_addr() { + Ok(addr) => return Some(addr.ip().to_string()), + Err(_) => return None, + }; +} + async fn ws_handler( ws: WebSocketUpgrade, _: Option>, From 81b712ec0baab63186769cfa62b1962bfd90af24 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Wed, 6 Jul 2022 21:08:46 +0800 Subject: [PATCH 160/459] feat: commit code --- src/server/mod.rs | 44 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 93e81ea33..c5b438768 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -11,7 +11,7 @@ use dioxus::rsx_interpreter::SetRsxMessage; use notify::{RecommendedWatcher, Watcher}; use syn::spanned::Spanned; -use std::{path::PathBuf, process::Command, sync::Arc, net::UdpSocket}; +use std::{net::UdpSocket, path::PathBuf, process::Command, sync::Arc}; use tower::ServiceBuilder; use tower_http::services::fs::{ServeDir, ServeFileSystemResponseBody}; @@ -270,12 +270,17 @@ pub async fn startup_default(port: u16, config: CrateConfig) -> Result<()> { .clone() .unwrap_or_else(|| vec![PathBuf::from("src")]); - let mut watcher = RecommendedWatcher::new(move |_: notify::Result| { - // log::info!("🚧 reload required"); - if chrono::Local::now().timestamp() > last_update_time { - match build_manager.build() { - Ok(_) => last_update_time = chrono::Local::now().timestamp(), - Err(e) => log::error!("{}", e), + let mut watcher = RecommendedWatcher::new(move |info: notify::Result| { + if info.is_ok() { + let info = info.unwrap(); + if chrono::Local::now().timestamp() > last_update_time { + match build_manager.build() { + Ok(_) => { + last_update_time = chrono::Local::now().timestamp(); + print_rebuild_info(info.paths); + } + Err(e) => log::error!("{}", e), + } } } }) @@ -414,7 +419,8 @@ fn print_console_info(port: u16, config: &CrateConfig) { "http://{}:{}/", get_ip().unwrap_or(String::from("0.0.0.0")), port - ).blue() + ) + .blue() ); println!(""); println!("\t> Profile : {}", profile.green()); @@ -426,6 +432,28 @@ fn print_console_info(port: u16, config: &CrateConfig) { println!("\n{}\n", "Server startup completed.".green().bold()); } +fn print_rebuild_info(paths: Vec) { + print!( + "{}", + String::from_utf8_lossy( + &Command::new(if cfg!(target_os = "windows") { + "cls" + } else { + "clear" + }) + .output() + .unwrap() + .stdout + ) + ); + + for path in paths { + let path = path.strip_prefix(crate::crate_root().unwrap()).unwrap().to_path_buf(); + log::info!("Updated {}", format!("{}", path.to_str().unwrap()).green()); + } + log::info!("Project rebuild done.") +} + fn get_ip() -> Option { let socket = match UdpSocket::bind("0.0.0.0:0") { Ok(s) => s, From 61c06ea5987ada72528d7625380c69a0cea5c5d2 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Wed, 6 Jul 2022 21:23:35 +0800 Subject: [PATCH 161/459] feat: commit console log --- src/builder.rs | 6 +++++- src/cli/build/mod.rs | 2 +- src/cli/serve/mod.rs | 2 +- src/server/hot_reload.rs | 2 +- src/server/mod.rs | 36 ++++++++++++++++++------------------ 5 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 02add84ad..f69ce3637 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -13,7 +13,7 @@ use std::{ }; use wasm_bindgen_cli_support::Bindgen; -pub fn build(config: &CrateConfig) -> Result<()> { +pub fn build(config: &CrateConfig, quiet: bool) -> Result<()> { // [1] Build the project with cargo, generating a wasm32-unknown-unknown target (is there a more specific, better target to leverage?) // [2] Generate the appropriate build folders // [3] Wasm-bindgen the .wasm fiile, and move it into the {builddir}/modules/xxxx/xxxx_bg.wasm @@ -52,6 +52,10 @@ pub fn build(config: &CrateConfig) -> Result<()> { cmd.arg("--verbose"); } + if quiet { + cmd.arg("--quiet"); + } + if config.custom_profile.is_some() { let custom_profile = config.custom_profile.as_ref().unwrap(); cmd.arg("--profile"); diff --git a/src/cli/build/mod.rs b/src/cli/build/mod.rs index 661f17a5a..f857bfc13 100644 --- a/src/cli/build/mod.rs +++ b/src/cli/build/mod.rs @@ -34,7 +34,7 @@ impl Build { match platform.as_str() { "web" => { - crate::builder::build(&crate_config)?; + crate::builder::build(&crate_config, false)?; } "desktop" => { crate::builder::build_desktop(&crate_config, false)?; diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index 5528ebade..62843d653 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -40,7 +40,7 @@ impl Serve { match platform.as_str() { "web" => { - crate::builder::build(&crate_config)?; + crate::builder::build(&crate_config, false)?; } "desktop" => { crate::builder::build_desktop(&crate_config, true)?; diff --git a/src/server/hot_reload.rs b/src/server/hot_reload.rs index 0338dacc5..3b7812834 100644 --- a/src/server/hot_reload.rs +++ b/src/server/hot_reload.rs @@ -154,7 +154,7 @@ pub async fn hot_reload_handler( log::error!("parse error:\n--> at {}:{}:{}\n\t{:?}", parse_error.location.file_path, parse_error.location.line, parse_error.location.column, parse_error.message); }, Error::RecompileRequiredError(_) => { - if let Err(err) = state.build_manager.build(){ + if let Err(err) = state.build_manager.rebuild(){ log::error!("{}", err); } } diff --git a/src/server/mod.rs b/src/server/mod.rs index c5b438768..6b0b90a68 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -27,9 +27,9 @@ pub struct BuildManager { } impl BuildManager { - fn build(&self) -> Result<()> { - log::info!("🪁 Rebuild code"); - builder::build(&self.config)?; + fn rebuild(&self) -> Result<()> { + log::info!("🪁 Rebuild project"); + builder::build(&self.config, true)?; // change the websocket reload state to true; // the page will auto-reload. if self @@ -158,7 +158,7 @@ pub async fn startup_hot_reload(port: u16, config: CrateConfig) -> Result<()> { } if needs_rebuild { log::info!("reload required"); - if let Err(err) = build_manager.build() { + if let Err(err) = build_manager.rebuild() { log::error!("{}", err); } } @@ -274,7 +274,7 @@ pub async fn startup_default(port: u16, config: CrateConfig) -> Result<()> { if info.is_ok() { let info = info.unwrap(); if chrono::Local::now().timestamp() > last_update_time { - match build_manager.build() { + match build_manager.rebuild() { Ok(_) => { last_update_time = chrono::Local::now().timestamp(); print_rebuild_info(info.paths); @@ -433,19 +433,19 @@ fn print_console_info(port: u16, config: &CrateConfig) { } fn print_rebuild_info(paths: Vec) { - print!( - "{}", - String::from_utf8_lossy( - &Command::new(if cfg!(target_os = "windows") { - "cls" - } else { - "clear" - }) - .output() - .unwrap() - .stdout - ) - ); + // print!( + // "{}", + // String::from_utf8_lossy( + // &Command::new(if cfg!(target_os = "windows") { + // "cls" + // } else { + // "clear" + // }) + // .output() + // .unwrap() + // .stdout + // ) + // ); for path in paths { let path = path.strip_prefix(crate::crate_root().unwrap()).unwrap().to_path_buf(); From 14a2ec306eb64e1ad8a5a293c0225dbfd1d29487 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Wed, 6 Jul 2022 22:37:27 +0800 Subject: [PATCH 162/459] feat: commit code --- src/server/mod.rs | 62 +++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 35 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 6b0b90a68..ba9a853f6 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -181,7 +181,7 @@ pub async fn startup_hot_reload(port: u16, config: CrateConfig) -> Result<()> { } // start serve dev-server at 0.0.0.0:8080 - print_console_info(port, &config); + print_console_info(port, &config, vec![]); let file_service_config = config.clone(); let file_service = ServiceBuilder::new() @@ -270,15 +270,14 @@ pub async fn startup_default(port: u16, config: CrateConfig) -> Result<()> { .clone() .unwrap_or_else(|| vec![PathBuf::from("src")]); + let watcher_config = config.clone(); let mut watcher = RecommendedWatcher::new(move |info: notify::Result| { + let config = watcher_config.clone(); if info.is_ok() { - let info = info.unwrap(); + print_console_info(port, &config, info.unwrap().paths); if chrono::Local::now().timestamp() > last_update_time { match build_manager.rebuild() { - Ok(_) => { - last_update_time = chrono::Local::now().timestamp(); - print_rebuild_info(info.paths); - } + Ok(_) => last_update_time = chrono::Local::now().timestamp(), Err(e) => log::error!("{}", e), } } @@ -296,7 +295,7 @@ pub async fn startup_default(port: u16, config: CrateConfig) -> Result<()> { } // start serve dev-server at 0.0.0.0 - print_console_info(port, &config); + print_console_info(port, &config, vec![]); let file_service_config = config.clone(); let file_service = ServiceBuilder::new() @@ -354,7 +353,7 @@ pub async fn startup_default(port: u16, config: CrateConfig) -> Result<()> { Ok(()) } -fn print_console_info(port: u16, config: &CrateConfig) { +fn print_console_info(port: u16, config: &CrateConfig, changed: Vec) { print!( "{}", String::from_utf8_lossy( @@ -369,6 +368,14 @@ fn print_console_info(port: u16, config: &CrateConfig) { ) ); + // for path in &changed { + // let path = path + // .strip_prefix(crate::crate_root().unwrap()) + // .unwrap() + // .to_path_buf(); + // log::info!("Updated {}", format!("{}", path.to_str().unwrap()).green()); + // } + let mut profile = if config.release { "Release" } else { "Debug" }.to_string(); if config.custom_profile.is_some() { profile = config.custom_profile.as_ref().unwrap().to_string(); @@ -404,11 +411,18 @@ fn print_console_info(port: u16, config: &CrateConfig) { "False" }; - println!( - "{} @ v{}\n", - "Dioxus".bold().green(), - crate::DIOXUS_CLI_VERSION, - ); + if changed.len() <= 0 { + println!( + "{} @ v{}\n", + "Dioxus".bold().green(), + crate::DIOXUS_CLI_VERSION, + ); + } else { + println!( + "Project Reloaded: {}\n", + format!("Changed {} files.", changed.len()).purple().bold() + ); + } println!( "\t> Local : {}", format!("https://localhost:{}/", port).blue() @@ -432,28 +446,6 @@ fn print_console_info(port: u16, config: &CrateConfig) { println!("\n{}\n", "Server startup completed.".green().bold()); } -fn print_rebuild_info(paths: Vec) { - // print!( - // "{}", - // String::from_utf8_lossy( - // &Command::new(if cfg!(target_os = "windows") { - // "cls" - // } else { - // "clear" - // }) - // .output() - // .unwrap() - // .stdout - // ) - // ); - - for path in paths { - let path = path.strip_prefix(crate::crate_root().unwrap()).unwrap().to_path_buf(); - log::info!("Updated {}", format!("{}", path.to_str().unwrap()).green()); - } - log::info!("Project rebuild done.") -} - fn get_ip() -> Option { let socket = match UdpSocket::bind("0.0.0.0:0") { Ok(s) => s, From 3551d1b6a0aeeebc3d52e5399f4f0e70703df325 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Wed, 6 Jul 2022 22:44:50 +0800 Subject: [PATCH 163/459] feat: commit code --- src/server/mod.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index ba9a853f6..d6efab958 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -94,14 +94,16 @@ pub async fn startup_hot_reload(port: u16, config: CrateConfig) -> Result<()> { .clone() .unwrap_or_else(|| vec![PathBuf::from("src")]); + let watcher_config = config.clone(); let mut watcher = RecommendedWatcher::new(move |evt: notify::Result| { + let config = watcher_config.clone(); if chrono::Local::now().timestamp() > last_update_time { // Give time for the change to take effect before reading the file std::thread::sleep(std::time::Duration::from_millis(100)); if let Ok(evt) = evt { let mut messages = Vec::new(); let mut needs_rebuild = false; - for path in evt.paths { + for path in evt.paths.clone() { let mut file = File::open(path.clone()).unwrap(); if path.extension().map(|p| p.to_str()).flatten() != Some("rs") { continue; @@ -157,7 +159,7 @@ pub async fn startup_hot_reload(port: u16, config: CrateConfig) -> Result<()> { } } if needs_rebuild { - log::info!("reload required"); + print_console_info(port, &config, evt.paths); if let Err(err) = build_manager.rebuild() { log::error!("{}", err); } From b642dcd739a0403837ca43cd661d8d24ac22012d Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Wed, 6 Jul 2022 22:45:08 +0800 Subject: [PATCH 164/459] fix: format code --- src/builder.rs | 4 +++- src/lib.rs | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index f69ce3637..4feb87839 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -433,7 +433,9 @@ fn build_assets(config: &CrateConfig) -> Result> { let temp = entry.path(); if temp.is_file() { let suffix = temp.extension(); - if suffix.is_none() { continue; } + if suffix.is_none() { + continue; + } let suffix = suffix.unwrap().to_str().unwrap(); if suffix == "scss" || suffix == "sass" { // if file suffix is `scss` / `sass` we need transform it. diff --git a/src/lib.rs b/src/lib.rs index 9956989b7..1b651acee 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -21,4 +21,4 @@ pub use error::*; pub mod logging; pub use logging::*; -pub mod hot_reload; \ No newline at end of file +pub mod hot_reload; From f57dc5212b37bcc799feded01468c0251f60822a Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Wed, 6 Jul 2022 23:01:39 +0800 Subject: [PATCH 165/459] fix: change local `https` to `http` --- src/server/mod.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index d6efab958..3ecce6c26 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -427,7 +427,7 @@ fn print_console_info(port: u16, config: &CrateConfig, changed: Vec) { } println!( "\t> Local : {}", - format!("https://localhost:{}/", port).blue() + format!("http://localhost:{}/", port).blue() ); println!( "\t> NetWork : {}", @@ -444,8 +444,14 @@ fn print_console_info(port: u16, config: &CrateConfig, changed: Vec) { println!("\t> Enabled Tools : {}", tools_str.yellow()); println!("\t> Index Template : {}", custom_html_file.green()); println!("\t> URL Rewrite [index_on_404] : {}", url_rewrite.purple()); + println!(""); - println!("\n{}\n", "Server startup completed.".green().bold()); + if changed.len() <= 0 { + log::info!("{}", "Server startup completed.".green().bold()); + } else { + log::info!("{}", "Project rebuild completed.".green().bold()); + } + } fn get_ip() -> Option { From 7860f8b931ecf7d5757433f53868561929d95e74 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Thu, 7 Jul 2022 23:03:30 +0800 Subject: [PATCH 166/459] feat: commit code --- Cargo.toml | 1 + src/builder.rs | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index fa14b36b7..7e982bc78 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,6 +36,7 @@ regex = "1.5.4" chrono = "0.4.19" anyhow = "1.0.53" hyper = "0.14.17" +loading = "0.3.0" axum = { version = "0.5.1", features = ["ws", "headers"] } tower-http = { version = "0.2.2", features = ["fs", "trace"] } diff --git a/src/builder.rs b/src/builder.rs index 4feb87839..0dce6d71d 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -6,7 +6,7 @@ use crate::{ }; use std::{ fs::{copy, create_dir_all, remove_dir_all, File}, - io::Read, + io::{Read, BufRead}, panic, path::PathBuf, process::Command, @@ -42,8 +42,9 @@ pub fn build(config: &CrateConfig, quiet: bool) -> Result<()> { .arg("build") .arg("--target") .arg("wasm32-unknown-unknown") - .stdout(std::process::Stdio::inherit()) - .stderr(std::process::Stdio::inherit()); + .arg("--message-format=json") + .stdout(std::process::Stdio::piped()) + .stderr(std::process::Stdio::piped()); if config.release { cmd.arg("--release"); @@ -74,7 +75,14 @@ pub fn build(config: &CrateConfig, quiet: bool) -> Result<()> { ExecutableType::Example(name) => cmd.arg("--example").arg(name), }; + let loading = loading::Loading::default(); + loading.text("Building"); let output = cmd.output()?; + for i in output.stdout.lines() { + // println!("{:?}", i); + } + loading.success("OK"); + loading.end(); if !output.status.success() { log::error!("Build failed!"); From 5edcb9238c33c253ca62831bbd8947d4e8b49c05 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Fri, 8 Jul 2022 09:26:05 +0800 Subject: [PATCH 167/459] feat: cargo format struct --- src/builder.rs | 26 ++++++++++++++++++-------- src/cargo.rs | 25 +++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 0dce6d71d..a662f8a20 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -77,18 +77,28 @@ pub fn build(config: &CrateConfig, quiet: bool) -> Result<()> { let loading = loading::Loading::default(); loading.text("Building"); - let output = cmd.output()?; - for i in output.stdout.lines() { - // println!("{:?}", i); + let mut child = cmd.spawn()?; + let out = child.stdout.take().unwrap(); + let mut out = std::io::BufReader::new(out); + let mut s = String::new(); + let mut n = 0; + while let Ok(_) = out.read_line(&mut s) { + // 进程退出后结束循环 + if let Ok(Some(_)) = child.try_wait() { + break; + } + println!("\n{}\n", s); + loading.text(format!("Building {}", n)); + n += 1; } loading.success("OK"); loading.end(); - if !output.status.success() { - log::error!("Build failed!"); - let reason = String::from_utf8_lossy(&output.stderr).to_string(); - return Err(Error::BuildFailed(reason)); - } + // if !output.status.success() { + // log::error!("Build failed!"); + // let reason = String::from_utf8_lossy(&output.stderr).to_string(); + // return Err(Error::BuildFailed(reason)); + // } // [2] Establish the output directory structure let bindgen_outdir = out_dir.join("assets").join("dioxus"); diff --git a/src/cargo.rs b/src/cargo.rs index 251e9d848..9994d5be5 100644 --- a/src/cargo.rs +++ b/src/cargo.rs @@ -1,4 +1,6 @@ //! Utilities for working with cargo and rust files +use serde::Serialize; + use crate::error::{Error, Result}; use std::{ env, fs, @@ -90,3 +92,26 @@ impl Metadata { Err(Error::CargoError("InvalidOutput".to_string())) } } + +#[derive(Serialize, Debug, Clone)] +pub struct CargoFormatInfo { + pub reason: CargoFormatReason, + #[serde(default)] + pub package_id: String, + #[serde(default)] + manifest_path: String, + #[serde(default)] + message: Option +} + +#[derive(Serialize, Debug, Clone)] +pub enum CargoFormatReason { + #[serde(rename = "compiler-message")] + CompilerMessage, + #[serde(rename = "compiler-artifact")] + CompilerArtifact, + #[serde(rename = "build-script-executed")] + BuildScriptExecuted, + #[serde(rename = "build-finished")] + BuildFinished, +} \ No newline at end of file From 0a2bac87154f8c867fc0427fabe21ce04fd3b026 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sat, 9 Jul 2022 00:28:00 +0800 Subject: [PATCH 168/459] feat: commit code --- src/builder.rs | 21 +++++++++++++-------- src/cargo.rs | 10 ++++++---- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index a662f8a20..bdb82fc45 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -2,11 +2,11 @@ use crate::{ config::{CrateConfig, ExecutableType}, error::{Error, Result}, tools::Tool, - DioxusConfig, + CargoFormatInfo, DioxusConfig, }; use std::{ fs::{copy, create_dir_all, remove_dir_all, File}, - io::{Read, BufRead}, + io::{BufRead, Read}, panic, path::PathBuf, process::Command, @@ -80,16 +80,21 @@ pub fn build(config: &CrateConfig, quiet: bool) -> Result<()> { let mut child = cmd.spawn()?; let out = child.stdout.take().unwrap(); let mut out = std::io::BufReader::new(out); - let mut s = String::new(); - let mut n = 0; - while let Ok(_) = out.read_line(&mut s) { + let mut content = String::new(); + while let Ok(_) = out.read_line(&mut content) { // 进程退出后结束循环 if let Ok(Some(_)) = child.try_wait() { break; } - println!("\n{}\n", s); - loading.text(format!("Building {}", n)); - n += 1; + let content = content.split('\n').collect::>(); + for json in content { + let d = serde_json::from_str::(&json); + if let Ok(d) = d { + println!("\n{:#?}\n", d); + } else { + println!("\n\n{:?}\n\n", json); + } + } } loading.success("OK"); loading.end(); diff --git a/src/cargo.rs b/src/cargo.rs index 9994d5be5..6c5085066 100644 --- a/src/cargo.rs +++ b/src/cargo.rs @@ -1,5 +1,5 @@ //! Utilities for working with cargo and rust files -use serde::Serialize; +use serde::{Serialize, Deserialize}; use crate::error::{Error, Result}; use std::{ @@ -93,7 +93,7 @@ impl Metadata { } } -#[derive(Serialize, Debug, Clone)] +#[derive(Serialize, Deserialize, Debug, Clone)] pub struct CargoFormatInfo { pub reason: CargoFormatReason, #[serde(default)] @@ -101,10 +101,12 @@ pub struct CargoFormatInfo { #[serde(default)] manifest_path: String, #[serde(default)] - message: Option + target: Option, + #[serde(default)] + message: Option, } -#[derive(Serialize, Debug, Clone)] +#[derive(Serialize, Deserialize, Debug, Clone)] pub enum CargoFormatReason { #[serde(rename = "compiler-message")] CompilerMessage, From eb0145173d0f8d5db715875d3213499172e89ea8 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sat, 9 Jul 2022 00:32:23 +0800 Subject: [PATCH 169/459] feat: add `indicatif` crate --- Cargo.toml | 2 +- src/builder.rs | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 7e982bc78..a50a06fde 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,7 +36,7 @@ regex = "1.5.4" chrono = "0.4.19" anyhow = "1.0.53" hyper = "0.14.17" -loading = "0.3.0" +indicatif = "0.16.2" axum = { version = "0.5.1", features = ["ws", "headers"] } tower-http = { version = "0.2.2", features = ["fs", "trace"] } diff --git a/src/builder.rs b/src/builder.rs index bdb82fc45..ed0921cd1 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -75,8 +75,6 @@ pub fn build(config: &CrateConfig, quiet: bool) -> Result<()> { ExecutableType::Example(name) => cmd.arg("--example").arg(name), }; - let loading = loading::Loading::default(); - loading.text("Building"); let mut child = cmd.spawn()?; let out = child.stdout.take().unwrap(); let mut out = std::io::BufReader::new(out); @@ -96,8 +94,6 @@ pub fn build(config: &CrateConfig, quiet: bool) -> Result<()> { } } } - loading.success("OK"); - loading.end(); // if !output.status.success() { // log::error!("Build failed!"); From dfe571df1a6260f31eff5f3e83113c448786e3b1 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sat, 9 Jul 2022 10:09:25 +0800 Subject: [PATCH 170/459] feat: commit prettier_build --- Cargo.toml | 2 +- src/builder.rs | 58 ++++++++++++++++++++++++++++++++------------------ src/cargo.rs | 27 ----------------------- 3 files changed, 38 insertions(+), 49 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index a50a06fde..7e982bc78 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,7 +36,7 @@ regex = "1.5.4" chrono = "0.4.19" anyhow = "1.0.53" hyper = "0.14.17" -indicatif = "0.16.2" +loading = "0.3.0" axum = { version = "0.5.1", features = ["ws", "headers"] } tower-http = { version = "0.2.2", features = ["fs", "trace"] } diff --git a/src/builder.rs b/src/builder.rs index ed0921cd1..5ef084326 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -2,11 +2,14 @@ use crate::{ config::{CrateConfig, ExecutableType}, error::{Error, Result}, tools::Tool, - CargoFormatInfo, DioxusConfig, + DioxusConfig, }; +use cargo_metadata::Message; +use loading::Loading; use std::{ + collections::HashMap, fs::{copy, create_dir_all, remove_dir_all, File}, - io::{BufRead, Read}, + io::Read, panic, path::PathBuf, process::Command, @@ -75,25 +78,7 @@ pub fn build(config: &CrateConfig, quiet: bool) -> Result<()> { ExecutableType::Example(name) => cmd.arg("--example").arg(name), }; - let mut child = cmd.spawn()?; - let out = child.stdout.take().unwrap(); - let mut out = std::io::BufReader::new(out); - let mut content = String::new(); - while let Ok(_) = out.read_line(&mut content) { - // 进程退出后结束循环 - if let Ok(Some(_)) = child.try_wait() { - break; - } - let content = content.split('\n').collect::>(); - for json in content { - let d = serde_json::from_str::(&json); - if let Ok(d) = d { - println!("\n{:#?}\n", d); - } else { - println!("\n\n{:?}\n\n", json); - } - } - } + prettier_build(cmd).unwrap(); // if !output.status.success() { // log::error!("Build failed!"); @@ -342,6 +327,37 @@ pub fn build_desktop(config: &CrateConfig, is_serve: bool) -> Result<()> { Ok(()) } +fn prettier_build(mut cmd: Command) -> anyhow::Result<()> { + let loading = Loading::default(); + let mut record: HashMap = HashMap::new(); + let mut command = cmd.spawn()?; + let reader = std::io::BufReader::new(command.stdout.take().unwrap()); + for message in cargo_metadata::Message::parse_stream(reader) { + match message.unwrap() { + Message::CompilerMessage(_msg) => { + // println!("{:#?}", msg); + } + Message::CompilerArtifact(artifact) => { + record.insert(artifact.package_id.to_string(), artifact.target.name); + } + Message::BuildScriptExecuted(script) => { + let package_id = script.package_id.to_string(); + if let Some(name) = record.get(&package_id) { + loading.text(format!("[{}] build done", name)); + } + } + Message::BuildFinished(finished) => { + if finished.success { + } else { + std::process::exit(1); + } + } + _ => (), // Unknown message + } + } + Ok(()) +} + pub fn gen_page(config: &DioxusConfig, serve: bool) -> String { let crate_root = crate::cargo::crate_root().unwrap(); let custom_html_file = crate_root.join("index.html"); diff --git a/src/cargo.rs b/src/cargo.rs index 6c5085066..251e9d848 100644 --- a/src/cargo.rs +++ b/src/cargo.rs @@ -1,6 +1,4 @@ //! Utilities for working with cargo and rust files -use serde::{Serialize, Deserialize}; - use crate::error::{Error, Result}; use std::{ env, fs, @@ -92,28 +90,3 @@ impl Metadata { Err(Error::CargoError("InvalidOutput".to_string())) } } - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct CargoFormatInfo { - pub reason: CargoFormatReason, - #[serde(default)] - pub package_id: String, - #[serde(default)] - manifest_path: String, - #[serde(default)] - target: Option, - #[serde(default)] - message: Option, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub enum CargoFormatReason { - #[serde(rename = "compiler-message")] - CompilerMessage, - #[serde(rename = "compiler-artifact")] - CompilerArtifact, - #[serde(rename = "build-script-executed")] - BuildScriptExecuted, - #[serde(rename = "build-finished")] - BuildFinished, -} \ No newline at end of file From 98134cfe1ce33d12ab1dcba2fa1ca71b05e8a682 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sat, 9 Jul 2022 10:09:44 +0800 Subject: [PATCH 171/459] feat: commit Cargo.lock --- .gitignore | 1 - Cargo.lock | 4684 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 4684 insertions(+), 1 deletion(-) create mode 100644 Cargo.lock diff --git a/.gitignore b/.gitignore index 2e049011e..6b39d31a9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ /target -Cargo.lock .idea/ \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 000000000..086673b7a --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,4684 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aes" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", + "opaque-debug 0.3.0", +] + +[[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.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704" + +[[package]] +name = "arrayref" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "async-channel" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-task" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30696a84d817107fc028e049980e09d5e140e8da8f1caeb17e8e950658a3cea9" + +[[package]] +name = "async-trait" +version = "0.1.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atk" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd" +dependencies = [ + "atk-sys", + "bitflags", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps 6.0.2", +] + +[[package]] +name = "atomic-waker" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "axum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2cc6e8e8c993cb61a005fab8c1e5093a29199b7253b05a6883999312935c1ff" +dependencies = [ + "async-trait", + "axum-core", + "base64 0.13.0", + "bitflags", + "bytes", + "futures-util", + "headers", + "http", + "http-body", + "hyper", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "sha-1 0.10.0", + "sync_wrapper", + "tokio", + "tokio-tungstenite", + "tower", + "tower-http 0.3.4", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4d047478b986f14a13edad31a009e2e05cb241f9805d0d75e4cba4e129ad4d" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http", + "http-body", + "mime", +] + +[[package]] +name = "backtrace" +version = "0.3.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11a17d453482a265fd5f8479f2a3f405566e6ca627837aaddb85af8b1ab8ef61" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" +dependencies = [ + "byteorder", + "safemem", +] + +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + +[[package]] +name = "base64ct" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a32fd6af2b5827bce66c29053ba0e7c42b9dcab01835835058558c10851a46b" + +[[package]] +name = "binary-install" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5bc5f8c50dd6a80d0b303ddab79f42ddcb52fd43d68107ecf622c551fd4cd4" +dependencies = [ + "curl", + "dirs 1.0.5", + "failure", + "flate2", + "hex", + "is_executable", + "siphasher", + "tar", + "zip 0.5.13", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "blake2b_simd" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +dependencies = [ + "block-padding", + "byte-tools", + "byteorder", + "generic-array 0.12.4", +] + +[[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]] +name = "block-padding" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +dependencies = [ + "byte-tools", +] + +[[package]] +name = "blocking" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc" +dependencies = [ + "async-channel", + "async-task", + "atomic-waker", + "fastrand", + "futures-lite", + "once_cell", +] + +[[package]] +name = "bumpalo" +version = "3.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" + +[[package]] +name = "bzip2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "cache-padded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" + +[[package]] +name = "cairo-rs" +version = "0.15.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc" +dependencies = [ + "bitflags", + "cairo-sys-rs", + "glib", + "libc", + "thiserror", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8" +dependencies = [ + "glib-sys", + "libc", + "system-deps 6.0.2", +] + +[[package]] +name = "camino" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "869119e97797867fd90f5e22af7d0bd274bd4635ebb9eb68c04f3f513ae6c412" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.12", + "serde", + "serde_json", +] + +[[package]] +name = "cargo_toml" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5809dd3e6444651fd1cdd3dbec71eca438c439a0fcc8081674a14da0afe50185" +dependencies = [ + "serde", + "serde_derive", + "toml", +] + +[[package]] +name = "cc" +version = "1.0.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +dependencies = [ + "jobserver", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfg-expr" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7" +dependencies = [ + "smallvec", +] + +[[package]] +name = "cfg-expr" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db" +dependencies = [ + "smallvec", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time 0.1.44", + "winapi", +] + +[[package]] +name = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array 0.14.5", +] + +[[package]] +name = "clap" +version = "3.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190814073e85d238f31ff738fcb0bf6910cedeb73376c87cd69291028966fd83" +dependencies = [ + "atty", + "bitflags", + "clap_derive", + "clap_lex", + "indexmap", + "once_cell", + "strsim 0.10.0", + "termcolor", + "textwrap", +] + +[[package]] +name = "clap_derive" +version = "3.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759bf187376e1afa7b85b959e6a664a3e7a95203415dba952ad19139e798f902" +dependencies = [ + "heck 0.4.0", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "cocoa" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" +dependencies = [ + "bitflags", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" +dependencies = [ + "bitflags", + "block", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "colored" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59" +dependencies = [ + "atty", + "lazy_static", + "winapi", +] + +[[package]] +name = "colored" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd" +dependencies = [ + "atty", + "lazy_static", + "winapi", +] + +[[package]] +name = "combine" +version = "4.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a604e93b79d1808327a6fca85a6f2d69de66461e7620f5a4cbf5fb4d1d7c948" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" +dependencies = [ + "cache-padded", +] + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "convert_case" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb4a24b1aaf0fd0ce8b45161144d6f42cd91677fd5940fd431183eb023b3a2b8" + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" + +[[package]] +name = "core-graphics" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +dependencies = [ + "bitflags", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" +dependencies = [ + "bitflags", + "core-foundation", + "foreign-types", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "crypto-common" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5999502d32b9c48d492abe66392408144895020ec4709e549e840799f3bb74c0" +dependencies = [ + "generic-array 0.14.5", + "typenum", +] + +[[package]] +name = "cty" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" + +[[package]] +name = "curl" +version = "0.4.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d855aeef205b43f65a5001e0997d81f8efca7badad4fad7d897aa7f0d0651f" +dependencies = [ + "curl-sys", + "libc", + "openssl-probe", + "openssl-sys", + "schannel", + "socket2", + "winapi", +] + +[[package]] +name = "curl-sys" +version = "0.4.55+curl-7.83.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23734ec77368ec583c2e61dd3f0b0e5c98b93abe6d2a004ca06b91dd7e3e2762" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", + "winapi", +] + +[[package]] +name = "darling" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" +dependencies = [ + "darling_core 0.10.2", + "darling_macro 0.10.2", +] + +[[package]] +name = "darling" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +dependencies = [ + "darling_core 0.13.4", + "darling_macro 0.13.4", +] + +[[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 0.9.3", + "syn", +] + +[[package]] +name = "darling_core" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" +dependencies = [ + "darling_core 0.10.2", + "quote", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +dependencies = [ + "darling_core 0.13.4", + "quote", + "syn", +] + +[[package]] +name = "data-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + +[[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", + "subtle", +] + +[[package]] +name = "dioxus" +version = "0.2.4" +source = "git+https://github.com/dioxuslabs/dioxus/#baaa1752d3ccd5918fc472b1071b95a12b019687" +dependencies = [ + "dioxus-core", + "dioxus-core-macro", + "dioxus-desktop", + "dioxus-hooks", + "dioxus-html", + "dioxus-router", + "dioxus-rsx", + "dioxus-rsx-interpreter", + "dioxus-web", +] + +[[package]] +name = "dioxus-cli" +version = "0.1.5" +dependencies = [ + "anyhow", + "atty", + "axum", + "binary-install", + "cargo_metadata", + "cargo_toml", + "chrono", + "clap", + "colored 2.0.0", + "convert_case", + "dioxus", + "dirs 4.0.0", + "fern", + "flate2", + "fs_extra", + "futures", + "headers", + "html_parser", + "hyper", + "loading", + "log", + "notify", + "proc-macro2", + "regex", + "reqwest", + "serde", + "serde_json", + "syn", + "tar", + "thiserror", + "tokio", + "toml", + "tower", + "tower-http 0.2.5", + "walkdir", + "wasm-bindgen-cli-support", + "zip 0.6.2", +] + +[[package]] +name = "dioxus-core" +version = "0.2.1" +source = "git+https://github.com/dioxuslabs/dioxus/#baaa1752d3ccd5918fc472b1071b95a12b019687" +dependencies = [ + "backtrace", + "bumpalo", + "futures-channel", + "futures-util", + "fxhash", + "indexmap", + "log", + "longest-increasing-subsequence", + "once_cell", + "serde", + "slab", + "smallvec", +] + +[[package]] +name = "dioxus-core-macro" +version = "0.2.1" +source = "git+https://github.com/dioxuslabs/dioxus/#baaa1752d3ccd5918fc472b1071b95a12b019687" +dependencies = [ + "dioxus-rsx", + "dioxus-rsx-interpreter", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dioxus-desktop" +version = "0.2.3" +source = "git+https://github.com/dioxuslabs/dioxus/#baaa1752d3ccd5918fc472b1071b95a12b019687" +dependencies = [ + "core-foundation", + "dioxus-core", + "dioxus-html", + "dioxus-interpreter-js", + "dioxus-rsx-interpreter", + "dunce", + "futures-channel", + "interprocess", + "log", + "mime_guess", + "serde", + "serde_json", + "thiserror", + "tokio", + "webbrowser", + "wry", +] + +[[package]] +name = "dioxus-hooks" +version = "0.2.1" +source = "git+https://github.com/dioxuslabs/dioxus/#baaa1752d3ccd5918fc472b1071b95a12b019687" +dependencies = [ + "dioxus-core", + "futures-channel", + "log", +] + +[[package]] +name = "dioxus-html" +version = "0.2.1" +source = "git+https://github.com/dioxuslabs/dioxus/#baaa1752d3ccd5918fc472b1071b95a12b019687" +dependencies = [ + "dioxus-core", + "enumset", + "euclid", + "keyboard-types", + "serde", + "serde_repr", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "dioxus-interpreter-js" +version = "0.2.1" +source = "git+https://github.com/dioxuslabs/dioxus/#baaa1752d3ccd5918fc472b1071b95a12b019687" +dependencies = [ + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "dioxus-router" +version = "0.2.3" +source = "git+https://github.com/dioxuslabs/dioxus/#baaa1752d3ccd5918fc472b1071b95a12b019687" +dependencies = [ + "futures-channel", + "futures-util", + "log", + "rsx-prelude", + "serde", + "serde_urlencoded", + "thiserror", + "url", +] + +[[package]] +name = "dioxus-rsx" +version = "0.0.0" +source = "git+https://github.com/dioxuslabs/dioxus/#baaa1752d3ccd5918fc472b1071b95a12b019687" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dioxus-rsx-interpreter" +version = "0.1.0" +source = "git+https://github.com/dioxuslabs/dioxus/#baaa1752d3ccd5918fc472b1071b95a12b019687" +dependencies = [ + "dioxus-core", + "dioxus-hooks", + "dioxus-html", + "dioxus-rsx", + "dioxus-ssr", + "lazy_static", + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn", +] + +[[package]] +name = "dioxus-ssr" +version = "0.2.1" +source = "git+https://github.com/dioxuslabs/dioxus/#baaa1752d3ccd5918fc472b1071b95a12b019687" +dependencies = [ + "dioxus-core", +] + +[[package]] +name = "dioxus-web" +version = "0.2.1" +source = "git+https://github.com/dioxuslabs/dioxus/#baaa1752d3ccd5918fc472b1071b95a12b019687" +dependencies = [ + "anyhow", + "console_error_panic_hook", + "dioxus-core", + "dioxus-html", + "dioxus-interpreter-js", + "dioxus-rsx-interpreter", + "futures-channel", + "futures-util", + "fxhash", + "gloo-timers", + "js-sys", + "log", + "once_cell", + "serde-wasm-bindgen", + "serde_json", + "smallstr", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "dirs" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901" +dependencies = [ + "libc", + "redox_users 0.3.5", + "winapi", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users 0.4.3", + "winapi", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dunce" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "453440c271cf5577fd2a40e4942540cb7d0d2f85e27c8d07dd0023c925a67541" + +[[package]] +name = "encoding_rs" +version = "0.8.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enum-as-inner" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73" +dependencies = [ + "heck 0.4.0", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "enumset" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4799cdb24d48f1f8a7a98d06b7fde65a85a2d1e42b25a889f5406aa1fbefe074" +dependencies = [ + "enumset_derive", +] + +[[package]] +name = "enumset_derive" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea83a3fbdc1d999ccfbcbee717eab36f8edf2d71693a23ce0d7cca19e085304c" +dependencies = [ + "darling 0.13.4", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "euclid" +version = "0.22.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b52c2ef4a78da0ba68fbe1fd920627411096d2ac478f7f4c9f3a54ba6705bade" +dependencies = [ + "num-traits", + "serde", +] + +[[package]] +name = "event-listener" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" + +[[package]] +name = "failure" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" +dependencies = [ + "backtrace", + "failure_derive", +] + +[[package]] +name = "failure_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "fake-simd" +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 = "fern" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bdd7b0849075e79ee9a1836df22c717d1eba30451796fdc631b04565dd11e2a" +dependencies = [ + "colored 1.9.3", + "log", +] + +[[package]] +name = "field-offset" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "filetime" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94a7bbaa59354bc20dd75b67f23e2797b4490e9d6928203fb105c79e448c86c" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.2.13", + "windows-sys", +] + +[[package]] +name = "flate2" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[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 = "fs_extra" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" + +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + +[[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-lite" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[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 = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "gdk" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8" +dependencies = [ + "bitflags", + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a" +dependencies = [ + "bitflags", + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps 6.0.2", +] + +[[package]] +name = "gdk-sys" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps 6.0.2", +] + +[[package]] +name = "gdkx11-sys" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps 6.0.2", + "x11", +] + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[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.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "gimli" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" + +[[package]] +name = "gio" +version = "0.15.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-io", + "gio-sys", + "glib", + "libc", + "once_cell", + "thiserror", +] + +[[package]] +name = "gio-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps 6.0.2", + "winapi", +] + +[[package]] +name = "glib" +version = "0.15.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "once_cell", + "smallvec", + "thiserror", +] + +[[package]] +name = "glib-macros" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a68131a662b04931e71891fb14aaf65ee4b44d08e8abc10f49e77418c86c64" +dependencies = [ + "anyhow", + "heck 0.4.0", + "proc-macro-crate 1.1.3", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "glib-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4" +dependencies = [ + "libc", + "system-deps 6.0.2", +] + +[[package]] +name = "gloo-timers" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fb7d06c1c8cc2a29bee7ec961009a0b2caa0793ee4900c2ffb348734ba1c8f9" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gobject-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a" +dependencies = [ + "glib-sys", + "libc", + "system-deps 6.0.2", +] + +[[package]] +name = "gtk" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0" +dependencies = [ + "atk", + "bitflags", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "once_cell", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps 6.0.2", +] + +[[package]] +name = "gtk3-macros" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24f518afe90c23fba585b2d7697856f9e6a7bbc62f65588035e66f6afb01a2e9" +dependencies = [ + "anyhow", + "proc-macro-crate 1.1.3", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "h2" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3" + +[[package]] +name = "headers" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cff78e5788be1e0ab65b04d306b2ed5092c815ec97ec70f4ebd5aee158aa55d" +dependencies = [ + "base64 0.13.0", + "bitflags", + "bytes", + "headers-core", + "http", + "httpdate", + "mime", + "sha-1 0.10.0", +] + +[[package]] +name = "headers-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" +dependencies = [ + "http", +] + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "heck" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hex" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.3", +] + +[[package]] +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +dependencies = [ + "libc", + "match_cfg", + "winapi", +] + +[[package]] +name = "html_parser" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec016cabcf7c9c48f9d5fdc6b03f273585bfce640a0f47a69552039e92b1959a" +dependencies = [ + "pest", + "pest_derive", + "serde", + "serde_derive", + "serde_json", + "thiserror", +] + +[[package]] +name = "http" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "http-range-header" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" + +[[package]] +name = "httparse" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" + +[[package]] +name = "httpdate" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" + +[[package]] +name = "hyper" +version = "0.14.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42dc3c131584288d375f2d07f822b0cb012d8c6fb899a5b9fdb3cb7eb9b6004f" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" +dependencies = [ + "http", + "hyper", + "rustls", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "id-arena" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" + +[[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 = "indexmap" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" +dependencies = [ + "autocfg", + "hashbrown", +] + +[[package]] +name = "inotify" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" +dependencies = [ + "bitflags", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "interprocess" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c58ec7fbda1df9a93f587b780659db3c99f61f4be27f9c82c9b37684ffd0366" +dependencies = [ + "blocking", + "cfg-if", + "futures", + "intmap", + "libc", + "once_cell", + "spinning", + "thiserror", + "winapi", +] + +[[package]] +name = "intmap" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae52f28f45ac2bc96edb7714de995cffc174a395fb0abf5bff453587c980d7b9" + +[[package]] +name = "ipconfig" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "723519edce41262b05d4143ceb95050e4c614f483e78e9fd9e39a8275a84ad98" +dependencies = [ + "socket2", + "widestring", + "winapi", + "winreg 0.7.0", +] + +[[package]] +name = "ipnet" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" + +[[package]] +name = "is_executable" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "302d553b8abc8187beb7d663e34c065ac4570b273bc9511a50e940e99409c577" +dependencies = [ + "winapi", +] + +[[package]] +name = "itoa" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" + +[[package]] +name = "javascriptcore-rs" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c" +dependencies = [ + "bitflags", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps 5.0.0", +] + +[[package]] +name = "jni" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24967112a1e4301ca5342ea339763613a37592b8a6ce6cf2e4494537c7a42faf" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "keyboard-types" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7668b7cff6a51fe61cdde64cd27c8a220786f399501b57ebe36f7d8112fd68" +dependencies = [ + "bitflags", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "kqueue" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d6112e8f37b59803ac47a42d14f1f3a59bbf72fc6857ffc5be455e28a691f8e" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8367585489f01bc55dd27404dcf56b95e6da061a256a666ab23be9ba96a2e587" +dependencies = [ + "bitflags", + "libc", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "leb128" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" + +[[package]] +name = "libayatana-appindicator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0379d22a323947cb27b4dbe3b14fc1dcde07c9e9c3eca52ddf97ca0819c28cc4" +dependencies = [ + "glib", + "gtk", + "gtk-sys", + "log", +] + +[[package]] +name = "libc" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" + +[[package]] +name = "libz-sys" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "loading" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "676420b03272176423578148eee61319e893422694f6d96a394841cb0901357f" + +[[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 = "longest-increasing-subsequence" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3bd0dd2cd90571056fdb71f6275fada10131182f84899f4b2a916e565d81d86" + +[[package]] +name = "lru-cache" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + +[[package]] +name = "matches" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" + +[[package]] +name = "matchit" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73cbba799671b762df5a175adf59ce145165747bb891505c43d09aefbbf38beb" + +[[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 = "mime" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + +[[package]] +name = "mime_guess" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "miniz_oxide" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" +dependencies = [ + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys", +] + +[[package]] +name = "native-tls" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "ndk" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d64d6af06fde0e527b1ba5c7b79a6cc89cfc46325b0b2887dffe8f70197e0c3c" +dependencies = [ + "bitflags", + "jni-sys", + "ndk-sys 0.2.2", + "num_enum", + "thiserror", +] + +[[package]] +name = "ndk" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" +dependencies = [ + "bitflags", + "jni-sys", + "ndk-sys 0.3.0", + "num_enum", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-glue" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3648f3609716eb7dbf5f5b5d4b84fcd67dd4c34efcdb12e4a6c0929c2ac48349" +dependencies = [ + "lazy_static", + "libc", + "log", + "ndk 0.4.0", + "ndk-context", + "ndk-macro 0.2.0", + "ndk-sys 0.2.2", +] + +[[package]] +name = "ndk-glue" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d0c4a7b83860226e6b4183edac21851f05d5a51756e97a1144b7f5a6b63e65f" +dependencies = [ + "lazy_static", + "libc", + "log", + "ndk 0.6.0", + "ndk-context", + "ndk-macro 0.3.0", + "ndk-sys 0.3.0", +] + +[[package]] +name = "ndk-macro" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d" +dependencies = [ + "darling 0.10.2", + "proc-macro-crate 0.1.5", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ndk-macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c" +dependencies = [ + "darling 0.13.4", + "proc-macro-crate 1.1.3", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ndk-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1bcdd74c20ad5d95aacd60ef9ba40fdf77f767051040541df557b7a9b2a2121" + +[[package]] +name = "ndk-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "notify" +version = "5.0.0-pre.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "553f9844ad0b0824605c20fb55a661679782680410abfb1a8144c2e7e437e7a7" +dependencies = [ + "bitflags", + "crossbeam-channel", + "filetime", + "fsevent-sys", + "inotify", + "kqueue", + "libc", + "mio", + "serde", + "walkdir", + "winapi", +] + +[[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 = "num_enum" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" +dependencies = [ + "proc-macro-crate 1.1.3", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num_threads" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" +dependencies = [ + "libc", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "object" +version = "0.28.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "openssl" +version = "0.10.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb81a6430ac911acb25fe5ac8f1d2af1b4ea8a4fdfda0f1ee4292af2e2d8eb0e" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835363342df5fba8354c5b453325b110ffd54044e588c539cf2f20a8014e4cb1" +dependencies = [ + "autocfg", + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "os_str_bytes" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa" + +[[package]] +name = "pango" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f" +dependencies = [ + "bitflags", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps 6.0.2", +] + +[[package]] +name = "parking" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" + +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +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 0.2.13", + "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 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", + "subtle", +] + +[[package]] +name = "pbkdf2" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271779f35b581956db91a3e55737327a03aa051e90b1c47aeb189508533adfd7" +dependencies = [ + "digest 0.10.3", + "hmac", + "password-hash", + "sha2", +] + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + +[[package]] +name = "pest" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +dependencies = [ + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pest_meta" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d" +dependencies = [ + "maplit", + "pest", + "sha-1 0.8.2", +] + +[[package]] +name = "pin-project" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78203e83c48cffbe01e4a2d35d566ca4de445d79a85372fc64e378bfc812a260" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "710faf75e1b33345361201d36d04e98ac1ed8909151a017ed384700836104c74" +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 = "pkg-config" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" + +[[package]] +name = "ppv-lite86" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" + +[[package]] +name = "proc-macro-crate" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +dependencies = [ + "toml", +] + +[[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-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quote" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[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", +] + +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom 0.2.7", +] + +[[package]] +name = "raw-window-handle" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41" +dependencies = [ + "cty", +] + +[[package]] +name = "redox_syscall" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" + +[[package]] +name = "redox_syscall" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" +dependencies = [ + "getrandom 0.1.16", + "redox_syscall 0.1.57", + "rust-argon2", +] + +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom 0.2.7", + "redox_syscall 0.2.13", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi", +] + +[[package]] +name = "reqwest" +version = "0.11.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92" +dependencies = [ + "base64 0.13.0", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-rustls", + "hyper-tls", + "ipnet", + "js-sys", + "lazy_static", + "log", + "mime", + "native-tls", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-native-tls", + "tokio-rustls", + "tokio-util", + "tower-service", + "trust-dns-resolver", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg 0.10.1", +] + +[[package]] +name = "resolv-conf" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +dependencies = [ + "hostname", + "quick-error", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin", + "untrusted", + "web-sys", + "winapi", +] + +[[package]] +name = "rsx-prelude" +version = "0.1.0" +source = "git+https://github.com/dioxuslabs/dioxus/#baaa1752d3ccd5918fc472b1071b95a12b019687" +dependencies = [ + "dioxus-core", + "dioxus-core-macro", + "dioxus-hooks", + "dioxus-html", + "dioxus-rsx-interpreter", +] + +[[package]] +name = "rust-argon2" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb" +dependencies = [ + "base64 0.13.0", + "blake2b_simd", + "constant_time_eq", + "crossbeam-utils", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustls" +version = "0.20.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033" +dependencies = [ + "log", + "ring", + "sct", + "webpki", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9" +dependencies = [ + "base64 0.13.0", +] + +[[package]] +name = "ryu" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" + +[[package]] +name = "safemem" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" +dependencies = [ + "lazy_static", + "windows-sys", +] + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "sct" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "security-framework" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1" +dependencies = [ + "serde", +] + +[[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.138" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1578c6245786b9d168c5447eeacfb96856573ca56c9d68fdcf394be134882a47" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfc62771e7b829b517cb213419236475f434fb480eddd76112ae182d274434a" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde_derive" +version = "1.0.138" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "023e9b1467aef8a10fb88f25611870ada9800ef7e22afce356bb0d2387b6f27c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2ad84e47328a31223de7fed7a4f5087f2d6ddfe586cf3ca25b7a165bc0a5aed" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha-1" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" +dependencies = [ + "block-buffer 0.7.3", + "digest 0.8.1", + "fake-simd", + "opaque-debug 0.2.3", +] + +[[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 0.10.3", +] + +[[package]] +name = "sha1" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c77f4e7f65455545c2153c1253d25056825e77ee2533f0e41deb65a93a34852f" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.3", +] + +[[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 = "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.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" + +[[package]] +name = "slab" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" + +[[package]] +name = "smallstr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e922794d168678729ffc7e07182721a14219c65814e66e91b839a272fe5ae4f" +dependencies = [ + "smallvec", +] + +[[package]] +name = "smallvec" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" + +[[package]] +name = "socket2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "soup2" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0" +dependencies = [ + "bitflags", + "gio", + "glib", + "libc", + "once_cell", + "soup2-sys", +] + +[[package]] +name = "soup2-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf" +dependencies = [ + "bitflags", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps 5.0.0", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spinning" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d4f0e86297cad2658d92a707320d87bf4e6ae1050287f51d19b67ef3f153a7b" +dependencies = [ + "lock_api", +] + +[[package]] +name = "strsim" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "syn" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8" + +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "unicode-xid", +] + +[[package]] +name = "system-deps" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e" +dependencies = [ + "cfg-expr 0.9.1", + "heck 0.3.3", + "pkg-config", + "toml", + "version-compare 0.0.11", +] + +[[package]] +name = "system-deps" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a45a1c4c9015217e12347f2a411b57ce2c4fc543913b14b6fe40483328e709" +dependencies = [ + "cfg-expr 0.10.3", + "heck 0.4.0", + "pkg-config", + "toml", + "version-compare 0.1.0", +] + +[[package]] +name = "tao" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df895eb66ff23d1824055114d6fbdd2c297bf70ad85349a4adaee0f8b2a860d1" +dependencies = [ + "bitflags", + "cairo-rs", + "cc", + "cocoa", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dispatch", + "gdk", + "gdk-pixbuf", + "gdk-sys", + "gdkx11-sys", + "gio", + "glib", + "glib-sys", + "gtk", + "instant", + "lazy_static", + "libayatana-appindicator", + "libc", + "log", + "ndk 0.4.0", + "ndk-glue 0.4.2", + "ndk-sys 0.2.2", + "objc", + "parking_lot 0.11.2", + "raw-window-handle", + "scopeguard", + "serde", + "tao-core-video-sys", + "unicode-segmentation", + "windows", + "windows_macros", + "x11-dl", +] + +[[package]] +name = "tao-core-video-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271450eb289cb4d8d0720c6ce70c72c8c858c93dd61fc625881616752e6b98f6" +dependencies = [ + "cfg-if", + "core-foundation-sys", + "libc", + "objc", +] + +[[package]] +name = "tar" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "tempfile" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +dependencies = [ + "cfg-if", + "fastrand", + "libc", + "redox_syscall 0.2.13", + "remove_dir_all", + "winapi", +] + +[[package]] +name = "termcolor" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "textwrap" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" + +[[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 = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi", +] + +[[package]] +name = "time" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72c91f41dcb2f096c05f0873d667dceec1087ce5bcf984ec8ffb19acddbb3217" +dependencies = [ + "itoa", + "libc", + "num_threads", + "time-macros", +] + +[[package]] +name = "time-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" + +[[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.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439" +dependencies = [ + "bytes", + "libc", + "memchr", + "mio", + "num_cpus", + "once_cell", + "parking_lot 0.12.1", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "winapi", +] + +[[package]] +name = "tokio-macros" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.23.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +dependencies = [ + "rustls", + "tokio", + "webpki", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06cda1232a49558c46f8a504d5b93101d42c0bf7f911f12a105ba48168f821ae" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite", +] + +[[package]] +name = "tokio-util" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" +dependencies = [ + "serde", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aba3f3efabf7fb41fae8534fc20a817013dd1c12cb45441efb6c82e6556b4cd8" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-range-header", + "httpdate", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c530c8675c1dbf98facee631536fa116b5fb6382d7dd6dc1b118d970eafe3ba" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-range-header", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160" +dependencies = [ + "cfg-if", + "log", + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7" +dependencies = [ + "once_cell", +] + +[[package]] +name = "trust-dns-proto" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c31f240f59877c3d4bb3b3ea0ec5a6a0cff07323580ff8c7a605cd7d08b255d" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna", + "ipnet", + "lazy_static", + "log", + "rand", + "smallvec", + "thiserror", + "tinyvec", + "tokio", + "url", +] + +[[package]] +name = "trust-dns-resolver" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ba72c2ea84515690c9fcef4c6c660bb9df3036ed1051686de84605b74fd558" +dependencies = [ + "cfg-if", + "futures-util", + "ipconfig", + "lazy_static", + "log", + "lru-cache", + "parking_lot 0.12.1", + "resolv-conf", + "smallvec", + "thiserror", + "tokio", + "trust-dns-proto", +] + +[[package]] +name = "try-lock" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" + +[[package]] +name = "tungstenite" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d96a2dea40e7570482f28eb57afbe42d97551905da6a9400acc5c328d24004f5" +dependencies = [ + "base64 0.13.0", + "byteorder", + "bytes", + "http", + "httparse", + "log", + "rand", + "sha-1 0.10.0", + "thiserror", + "url", + "utf-8", +] + +[[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + +[[package]] +name = "ucd-trie" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89570599c4fe5585de2b388aab47e99f7fa4e9238a1399f707a02e356058141c" + +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" + +[[package]] +name = "unicode-ident" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" + +[[package]] +name = "unicode-normalization" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6" +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-xid" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[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", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version-compare" +version = "0.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" + +[[package]] +name = "version-compare" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "waker-fn" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" + +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + +[[package]] +name = "walrus" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eb08e48cde54c05f363d984bb54ce374f49e242def9468d2e1b6c2372d291f8" +dependencies = [ + "anyhow", + "id-arena", + "leb128", + "log", + "walrus-macro", + "wasmparser 0.77.0", +] + +[[package]] +name = "walrus-macro" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e5bd22c71e77d60140b0bd5be56155a37e5bd14e24f5f87298040d0cc40d7" +dependencies = [ + "heck 0.3.3", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + +[[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.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.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-cli-support" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4016fbd42224de21aab2f009aeaec61067d278a298ba7f8f7f8d40fbffea0822" +dependencies = [ + "anyhow", + "base64 0.9.3", + "log", + "rustc-demangle", + "serde_json", + "tempfile", + "walrus", + "wasm-bindgen-externref-xform", + "wasm-bindgen-multi-value-xform", + "wasm-bindgen-shared", + "wasm-bindgen-threads-xform", + "wasm-bindgen-wasm-conventions", + "wasm-bindgen-wasm-interpreter", + "wit-text", + "wit-validator", + "wit-walrus", +] + +[[package]] +name = "wasm-bindgen-externref-xform" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f33c8e2d3f3b6f6647f982911eb4cb44998c8cca97a4fe7afc99f616ebb33a73" +dependencies = [ + "anyhow", + "walrus", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-multi-value-xform" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7015b54357604811162710d5cf274ab85d974fe1e324222dd5b2133afdefe9b9" +dependencies = [ + "anyhow", + "walrus", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be" + +[[package]] +name = "wasm-bindgen-threads-xform" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6961b838d9a9c121ba4a1eea1628014cc759469e3defb42bbac9c5ed0f65be14" +dependencies = [ + "anyhow", + "walrus", + "wasm-bindgen-wasm-conventions", +] + +[[package]] +name = "wasm-bindgen-wasm-conventions" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0a0eca38fe89471f57d6903f3e17e732d2d6f995a7af5b23f27df7fee0f0d18" +dependencies = [ + "anyhow", + "walrus", +] + +[[package]] +name = "wasm-bindgen-wasm-interpreter" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b1c9fb7f71137840932bbb853ef1f83d68c88584b716c9bbae38675c9fb8b86" +dependencies = [ + "anyhow", + "log", + "walrus", + "wasm-bindgen-wasm-conventions", +] + +[[package]] +name = "wasmparser" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a950e6a618f62147fd514ff445b2a0b53120d382751960797f85f058c7eda9b9" + +[[package]] +name = "wasmparser" +version = "0.77.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b35c86d22e720a07d954ebbed772d01180501afe7d03d464f413bb5f8914a8d6" + +[[package]] +name = "wast" +version = "21.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b1844f66a2bc8526d71690104c0e78a8e59ffa1597b7245769d174ebb91deb5" +dependencies = [ + "leb128", +] + +[[package]] +name = "web-sys" +version = "0.3.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webbrowser" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a3cffdb686fbb24d9fb8f03a213803277ed2300f11026a3afe1f108dc021b" +dependencies = [ + "jni 0.19.0", + "ndk-glue 0.6.2", + "url", + "web-sys", + "widestring", + "winapi", +] + +[[package]] +name = "webkit2gtk" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29952969fb5e10fe834a52eb29ad0814ccdfd8387159b0933edf1344a1c9cdcc" +dependencies = [ + "bitflags", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup2", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3" +dependencies = [ + "atk-sys", + "bitflags", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pango-sys", + "pkg-config", + "soup2-sys", + "system-deps 6.0.2", +] + +[[package]] +name = "webpki" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d8de8415c823c8abd270ad483c6feeac771fad964890779f9a8cb24fbbc1bf" +dependencies = [ + "webpki", +] + +[[package]] +name = "webview2-com" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb8e90ac2d9ce39cdb70017aaec641be09fbdd702b7b332b9896d053eb469524" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows", + "windows_macros", +] + +[[package]] +name = "webview2-com-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1515c6c82fcee93f6edaacc72c8e233dbe4ff3ca569dce1901dfc36c404a3e99" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "webview2-com-sys" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92160310b3322397e4ff8a8285a7429d73a07a68fda44ee80879605b93e53f76" +dependencies = [ + "regex", + "serde", + "serde_json", + "thiserror", + "windows", + "windows-bindgen", +] + +[[package]] +name = "widestring" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" + +[[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-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[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" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b749ebd2304aa012c5992d11a25d07b406bdbe5f79d371cb7a918ce501a19eb0" +dependencies = [ + "windows_aarch64_msvc 0.30.0", + "windows_i686_gnu 0.30.0", + "windows_i686_msvc 0.30.0", + "windows_x86_64_gnu 0.30.0", + "windows_x86_64_msvc 0.30.0", +] + +[[package]] +name = "windows-bindgen" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "944c545fcae9dd66488308f8b69aa3ba34f53714416ecfcdcbbfa4b6821e27c6" +dependencies = [ + "windows_quote", + "windows_reader", +] + +[[package]] +name = "windows-sys" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +dependencies = [ + "windows_aarch64_msvc 0.36.1", + "windows_i686_gnu 0.36.1", + "windows_i686_msvc 0.36.1", + "windows_x86_64_gnu 0.36.1", + "windows_x86_64_msvc 0.36.1", +] + +[[package]] +name = "windows_aarch64_msvc" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29277a4435d642f775f63c7d1faeb927adba532886ce0287bd985bffb16b6bca" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + +[[package]] +name = "windows_gen" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30dff4d91d22520628bb94b66f2bb313cb16a09a515a32320a84a1b449bc94c0" +dependencies = [ + "windows_quote", + "windows_reader", +] + +[[package]] +name = "windows_i686_gnu" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1145e1989da93956c68d1864f32fb97c8f561a8f89a5125f6a2b7ea75524e4b8" + +[[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.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4a09e3a0d4753b73019db171c1339cd4362c8c44baf1bcea336235e955954a6" + +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + +[[package]] +name = "windows_macros" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62ae44ab917e9005fe710d99d52d227ca0164b10a09be90649142cc3fab825d3" +dependencies = [ + "syn", + "windows_gen", + "windows_quote", + "windows_reader", +] + +[[package]] +name = "windows_quote" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71f02c51a77e6248c1206aaa920802c32d50a05205e229b118d7f3afd3036667" + +[[package]] +name = "windows_reader" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e44e6df0da993cda589c5ac852272fbb2a0ead67a031a017dd3eac11528a2d72" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca64fcb0220d58db4c119e050e7af03c69e6f4f415ef69ec1773d9aab422d5a" + +[[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.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08cabc9f0066848fef4bc6a1c1668e6efce38b661d2aeec75d18d8617eebb5f1" + +[[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.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" +dependencies = [ + "winapi", +] + +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi", +] + +[[package]] +name = "wit-parser" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f5fd97866f4b9c8e1ed57bcf9446f3d0d8ba37e2dd01c3c612c046c053b06f7" +dependencies = [ + "anyhow", + "leb128", + "wit-schema-version", +] + +[[package]] +name = "wit-schema-version" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfee4a6a4716eefa0682e7a3b836152e894a3e4f34a9d6c2c3e1c94429bfe36a" + +[[package]] +name = "wit-text" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33358e95c77d660f1c7c07f4a93c2bd89768965e844e3c50730bb4b42658df5f" +dependencies = [ + "anyhow", + "wast", + "wit-writer", +] + +[[package]] +name = "wit-validator" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c11d93d925420e7872b226c4161849c32be38385ccab026b88df99d8ddc6ba6" +dependencies = [ + "anyhow", + "wasmparser 0.59.0", + "wit-parser", + "wit-schema-version", +] + +[[package]] +name = "wit-walrus" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad559e3e4c6404b2a6a675d44129d62a3836e3b951b90112fa1c5feb852757cd" +dependencies = [ + "anyhow", + "id-arena", + "walrus", + "wit-parser", + "wit-schema-version", + "wit-writer", +] + +[[package]] +name = "wit-writer" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2ad01ba5e9cbcff799a0689e56a153776ea694cec777f605938cb9880d41a09" +dependencies = [ + "leb128", + "wit-schema-version", +] + +[[package]] +name = "wry" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5676092e1a33448ed0f268717bcbb2e928354b78f4c1f60f3d43641eedea0d9" +dependencies = [ + "block", + "cocoa", + "core-graphics", + "gdk", + "gio", + "glib", + "gtk", + "http", + "jni 0.18.0", + "libc", + "log", + "objc", + "objc_id", + "once_cell", + "serde", + "serde_json", + "tao", + "thiserror", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows", + "windows_macros", +] + +[[package]] +name = "x11" +version = "2.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd0565fa8bfba8c5efe02725b14dff114c866724eff2cfd44d76cea74bcd87a" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea26926b4ce81a6f5d9d0f3a0bc401e5a37c6ae14a1bfaa8ff6099ca80038c59" +dependencies = [ + "lazy_static", + "libc", + "pkg-config", +] + +[[package]] +name = "xattr" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" +dependencies = [ + "libc", +] + +[[package]] +name = "zip" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815" +dependencies = [ + "byteorder", + "bzip2", + "crc32fast", + "flate2", + "thiserror", + "time 0.1.44", +] + +[[package]] +name = "zip" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf225bcf73bb52cbb496e70475c7bd7a3f769df699c0020f6c7bd9a96dcf0b8d" +dependencies = [ + "aes", + "byteorder", + "bzip2", + "constant_time_eq", + "crc32fast", + "crossbeam-utils", + "flate2", + "hmac", + "pbkdf2", + "sha1", + "time 0.3.11", + "zstd", +] + +[[package]] +name = "zstd" +version = "0.10.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f4a6bd64f22b5e3e94b4e238669ff9f10815c27a5180108b849d24174a83847" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "4.1.6+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94b61c51bb270702d6167b8ce67340d2754b088d0c091b06e593aa772c3ee9bb" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "1.6.3+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc49afa5c8d634e75761feda8c592051e7eeb4683ba827211eb0d731d3402ea8" +dependencies = [ + "cc", + "libc", +] From 526a88cab16045cf6b8acba75471cc62f17dca10 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sat, 9 Jul 2022 14:16:19 +0800 Subject: [PATCH 172/459] feat: commit code --- Cargo.lock | 66 +++++++++++++++++++++++++++++----- Cargo.toml | 4 +-- src/builder.rs | 73 +++++++++++++++++++++++-------------- src/cli/serve/mod.rs | 36 ++++++++----------- src/server/mod.rs | 86 +++++++++++++++++++++++++++++++++++--------- 5 files changed, 190 insertions(+), 75 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 086673b7a..4c4720564 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -396,9 +396,9 @@ dependencies = [ [[package]] name = "cargo_metadata" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" +checksum = "3abb7553d5b9b8421c6de7cb02606ff15e0c6eea7d8eadd75ef013fd636bec36" dependencies = [ "camino", "cargo-platform", @@ -590,6 +590,21 @@ dependencies = [ "cache-padded", ] +[[package]] +name = "console" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28b32d32ca44b70c3e4acd7db1babf555fa026e385fb95f18028f88848b3c31" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "regex", + "terminal_size", + "unicode-width", + "winapi", +] + [[package]] name = "console_error_panic_hook" version = "0.1.7" @@ -872,7 +887,7 @@ dependencies = [ "headers", "html_parser", "hyper", - "loading", + "indicatif", "log", "notify", "proc-macro2", @@ -1101,6 +1116,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "453440c271cf5577fd2a40e4942540cb7d0d2f85e27c8d07dd0023c925a67541" +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + [[package]] name = "encoding_rs" version = "0.8.31" @@ -1906,6 +1927,17 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "indicatif" +version = "0.17.0-rc.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4017d0ce94b8e91e29d2c78ed891e57e5ec3dc4371820a9d96abab4af09eb8ad" +dependencies = [ + "console", + "number_prefix", + "unicode-width", +] + [[package]] name = "inotify" version = "0.9.6" @@ -2145,12 +2177,6 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" -[[package]] -name = "loading" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "676420b03272176423578148eee61319e893422694f6d96a394841cb0901357f" - [[package]] name = "lock_api" version = "0.4.7" @@ -2469,6 +2495,12 @@ dependencies = [ "libc", ] +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + [[package]] name = "objc" version = "0.2.7" @@ -3525,6 +3557,16 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "terminal_size" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "textwrap" version = "0.15.0" @@ -3893,6 +3935,12 @@ 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 = "unicode-xid" version = "0.2.3" diff --git a/Cargo.toml b/Cargo.toml index 7e982bc78..da2467fc2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,14 +29,14 @@ notify = { version = "5.0.0-pre.13", features = ["serde"] } html_parser = "0.6.2" binary-install = "0.0.2" convert_case = "0.5.0" -cargo_metadata = "0.14.1" +cargo_metadata = "0.15.0" tokio = { version = "1.16.1", features = ["full"] } atty = "0.2.14" regex = "1.5.4" chrono = "0.4.19" anyhow = "1.0.53" hyper = "0.14.17" -loading = "0.3.0" +indicatif = "0.17.0-rc.11" axum = { version = "0.5.1", features = ["ws", "headers"] } tower-http = { version = "0.2.2", features = ["fs", "trace"] } diff --git a/src/builder.rs b/src/builder.rs index 5ef084326..d164e5418 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -4,19 +4,26 @@ use crate::{ tools::Tool, DioxusConfig, }; -use cargo_metadata::Message; -use loading::Loading; +use cargo_metadata::{diagnostic::Diagnostic, Message}; +use indicatif::{ProgressBar, ProgressStyle}; +use serde::Serialize; use std::{ - collections::HashMap, fs::{copy, create_dir_all, remove_dir_all, File}, io::Read, panic, path::PathBuf, process::Command, + time::Duration, }; use wasm_bindgen_cli_support::Bindgen; -pub fn build(config: &CrateConfig, quiet: bool) -> Result<()> { +#[derive(Serialize, Debug, Clone)] +pub struct BuildResult { + pub warnings: Vec, + pub elapsed_time: u128, +} + +pub fn build(config: &CrateConfig, quiet: bool) -> Result { // [1] Build the project with cargo, generating a wasm32-unknown-unknown target (is there a more specific, better target to leverage?) // [2] Generate the appropriate build folders // [3] Wasm-bindgen the .wasm fiile, and move it into the {builddir}/modules/xxxx/xxxx_bg.wasm @@ -78,13 +85,7 @@ pub fn build(config: &CrateConfig, quiet: bool) -> Result<()> { ExecutableType::Example(name) => cmd.arg("--example").arg(name), }; - prettier_build(cmd).unwrap(); - - // if !output.status.success() { - // log::error!("Build failed!"); - // let reason = String::from_utf8_lossy(&output.stderr).to_string(); - // return Err(Error::BuildFailed(reason)); - // } + let warning_messages = prettier_build(cmd)?; // [2] Establish the output directory structure let bindgen_outdir = out_dir.join("assets").join("dioxus"); @@ -122,8 +123,7 @@ pub fn build(config: &CrateConfig, quiet: bool) -> Result<()> { .unwrap(); }); if bindgen_result.is_err() { - log::error!("Bindgen build failed! \nThis is probably due to the Bindgen version, dioxus-cli using `0.2.79` Bindgen crate."); - return Ok(()); + return Err(Error::BuildFailed("Bindgen build failed! \nThis is probably due to the Bindgen version, dioxus-cli using `0.2.79` Bindgen crate.".to_string())); } // check binaryen:wasm-opt tool @@ -193,8 +193,10 @@ pub fn build(config: &CrateConfig, quiet: bool) -> Result<()> { } let t_end = std::time::Instant::now(); - log::info!("🏁 Done in {}ms!", (t_end - t_start).as_millis()); - Ok(()) + Ok(BuildResult { + warnings: warning_messages, + elapsed_time: (t_end - t_start).as_millis() + }) } pub fn build_desktop(config: &CrateConfig, is_serve: bool) -> Result<()> { @@ -327,27 +329,46 @@ pub fn build_desktop(config: &CrateConfig, is_serve: bool) -> Result<()> { Ok(()) } -fn prettier_build(mut cmd: Command) -> anyhow::Result<()> { - let loading = Loading::default(); - let mut record: HashMap = HashMap::new(); +fn prettier_build(mut cmd: Command) -> anyhow::Result> { + let mut warning_messages: Vec = vec![]; + + let pb = ProgressBar::new_spinner(); + pb.enable_steady_tick(Duration::from_millis(200)); + pb.set_style( + ProgressStyle::with_template("{spinner:.dim.bold} {wide_msg}") + .unwrap() + .tick_chars("/|\\- "), + ); + pb.set_message("Start to build project"); + let mut command = cmd.spawn()?; let reader = std::io::BufReader::new(command.stdout.take().unwrap()); for message in cargo_metadata::Message::parse_stream(reader) { match message.unwrap() { - Message::CompilerMessage(_msg) => { - // println!("{:#?}", msg); + Message::CompilerMessage(msg) => { + let message = msg.message; + match message.level { + cargo_metadata::diagnostic::DiagnosticLevel::Error => { + log::error!("Build Failed: {}", message.message); + std::process::exit(1); + } + cargo_metadata::diagnostic::DiagnosticLevel::Warning => { + warning_messages.push(message.clone()); + } + _ => {} + } } Message::CompilerArtifact(artifact) => { - record.insert(artifact.package_id.to_string(), artifact.target.name); + pb.set_message(format!("Compiling {} ", artifact.package_id)); + pb.tick(); } Message::BuildScriptExecuted(script) => { - let package_id = script.package_id.to_string(); - if let Some(name) = record.get(&package_id) { - loading.text(format!("[{}] build done", name)); - } + let _package_id = script.package_id.to_string(); } Message::BuildFinished(finished) => { if finished.success { + pb.finish_and_clear(); + println!("Done in"); } else { std::process::exit(1); } @@ -355,7 +376,7 @@ fn prettier_build(mut cmd: Command) -> anyhow::Result<()> { _ => (), // Unknown message } } - Ok(()) + Ok(warning_messages) } pub fn gen_page(config: &DioxusConfig, serve: bool) -> String { diff --git a/src/cli/serve/mod.rs b/src/cli/serve/mod.rs index 62843d653..93770b6ed 100644 --- a/src/cli/serve/mod.rs +++ b/src/cli/serve/mod.rs @@ -38,31 +38,25 @@ impl Serve { .clone() }); - match platform.as_str() { - "web" => { - crate::builder::build(&crate_config, false)?; - } - "desktop" => { - crate::builder::build_desktop(&crate_config, true)?; + if platform.as_str() == "desktop" { + crate::builder::build_desktop(&crate_config, true)?; - match &crate_config.executable { - crate::ExecutableType::Binary(name) - | crate::ExecutableType::Lib(name) - | crate::ExecutableType::Example(name) => { - let mut file = crate_config.out_dir.join(name); - if cfg!(windows) { - file.set_extension("exe"); - } - Command::new(crate_config.out_dir.join(file).to_str().unwrap()) - .stdout(Stdio::inherit()) - .output()?; + match &crate_config.executable { + crate::ExecutableType::Binary(name) + | crate::ExecutableType::Lib(name) + | crate::ExecutableType::Example(name) => { + let mut file = crate_config.out_dir.join(name); + if cfg!(windows) { + file.set_extension("exe"); } + Command::new(crate_config.out_dir.join(file).to_str().unwrap()) + .stdout(Stdio::inherit()) + .output()?; } - return Ok(()); - } - _ => { - return custom_error!("Unsoppurt platform target."); } + return Ok(()); + } else if platform != "web" { + return custom_error!("Unsoppurt platform target."); } // generate dev-index page diff --git a/src/server/mod.rs b/src/server/mod.rs index 3ecce6c26..b20d84db3 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -6,6 +6,7 @@ use axum::{ routing::{get, get_service}, Router, }; +use cargo_metadata::diagnostic::Diagnostic; use colored::Colorize; use dioxus::rsx_interpreter::SetRsxMessage; use notify::{RecommendedWatcher, Watcher}; @@ -15,7 +16,7 @@ use std::{net::UdpSocket, path::PathBuf, process::Command, sync::Arc}; use tower::ServiceBuilder; use tower_http::services::fs::{ServeDir, ServeFileSystemResponseBody}; -use crate::{builder, serve::Serve, CrateConfig, Result}; +use crate::{builder, serve::Serve, BuildResult, CrateConfig, Result}; use tokio::sync::broadcast; mod hot_reload; @@ -27,9 +28,9 @@ pub struct BuildManager { } impl BuildManager { - fn rebuild(&self) -> Result<()> { + fn rebuild(&self) -> Result { log::info!("🪁 Rebuild project"); - builder::build(&self.config, true)?; + let result = builder::build(&self.config, true)?; // change the websocket reload state to true; // the page will auto-reload. if self @@ -43,7 +44,7 @@ impl BuildManager { let _ = Serve::regen_dev_page(&self.config); } let _ = self.reload_tx.send(()); - Ok(()) + Ok(result) } } @@ -61,6 +62,8 @@ pub async fn startup(port: u16, config: CrateConfig) -> Result<()> { } pub async fn startup_hot_reload(port: u16, config: CrateConfig) -> Result<()> { + let first_build_result = crate::builder::build(&config, false)?; + log::info!("🚀 Starting development server..."); let dist_path = config.out_dir.clone(); @@ -159,9 +162,22 @@ pub async fn startup_hot_reload(port: u16, config: CrateConfig) -> Result<()> { } } if needs_rebuild { - print_console_info(port, &config, evt.paths); - if let Err(err) = build_manager.rebuild() { - log::error!("{}", err); + match build_manager.rebuild() { + Ok(res) => { + print_console_info( + port, + &config, + PrettierOptions { + changed: evt.paths, + warnings: res.warnings, + elapsed_time: res.elapsed_time, + }, + ); + } + Err(err) => { + log::error!("{}", err); + std::process::exit(1); + } } } if !messages.is_empty() { @@ -183,7 +199,15 @@ pub async fn startup_hot_reload(port: u16, config: CrateConfig) -> Result<()> { } // start serve dev-server at 0.0.0.0:8080 - print_console_info(port, &config, vec![]); + print_console_info( + port, + &config, + PrettierOptions { + changed: vec![], + warnings: first_build_result.warnings, + elapsed_time: first_build_result.elapsed_time, + }, + ); let file_service_config = config.clone(); let file_service = ServiceBuilder::new() @@ -246,6 +270,8 @@ pub async fn startup_hot_reload(port: u16, config: CrateConfig) -> Result<()> { } pub async fn startup_default(port: u16, config: CrateConfig) -> Result<()> { + let first_build_result = crate::builder::build(&config, false)?; + log::info!("🚀 Starting development server..."); let dist_path = config.out_dir.clone(); @@ -276,10 +302,20 @@ pub async fn startup_default(port: u16, config: CrateConfig) -> Result<()> { let mut watcher = RecommendedWatcher::new(move |info: notify::Result| { let config = watcher_config.clone(); if info.is_ok() { - print_console_info(port, &config, info.unwrap().paths); if chrono::Local::now().timestamp() > last_update_time { match build_manager.rebuild() { - Ok(_) => last_update_time = chrono::Local::now().timestamp(), + Ok(res) => { + last_update_time = chrono::Local::now().timestamp(); + print_console_info( + port, + &config, + PrettierOptions { + changed: info.unwrap().paths, + warnings: res.warnings, + elapsed_time: res.elapsed_time, + }, + ); + } Err(e) => log::error!("{}", e), } } @@ -297,8 +333,16 @@ pub async fn startup_default(port: u16, config: CrateConfig) -> Result<()> { } // start serve dev-server at 0.0.0.0 - print_console_info(port, &config, vec![]); - + print_console_info( + port, + &config, + PrettierOptions { + changed: vec![], + warnings: first_build_result.warnings, + elapsed_time: first_build_result.elapsed_time, + }, + ); + let file_service_config = config.clone(); let file_service = ServiceBuilder::new() .and_then( @@ -355,7 +399,14 @@ pub async fn startup_default(port: u16, config: CrateConfig) -> Result<()> { Ok(()) } -fn print_console_info(port: u16, config: &CrateConfig, changed: Vec) { +#[derive(Debug, Default)] +pub struct PrettierOptions { + changed: Vec, + warnings: Vec, + elapsed_time: u128, +} + +fn print_console_info(port: u16, config: &CrateConfig, options: PrettierOptions) { print!( "{}", String::from_utf8_lossy( @@ -413,7 +464,7 @@ fn print_console_info(port: u16, config: &CrateConfig, changed: Vec) { "False" }; - if changed.len() <= 0 { + if options.changed.len() <= 0 { println!( "{} @ v{}\n", "Dioxus".bold().green(), @@ -422,7 +473,9 @@ fn print_console_info(port: u16, config: &CrateConfig, changed: Vec) { } else { println!( "Project Reloaded: {}\n", - format!("Changed {} files.", changed.len()).purple().bold() + format!("Changed {} files.", options.changed.len()) + .purple() + .bold() ); } println!( @@ -446,12 +499,11 @@ fn print_console_info(port: u16, config: &CrateConfig, changed: Vec) { println!("\t> URL Rewrite [index_on_404] : {}", url_rewrite.purple()); println!(""); - if changed.len() <= 0 { + if options.changed.len() <= 0 { log::info!("{}", "Server startup completed.".green().bold()); } else { log::info!("{}", "Project rebuild completed.".green().bold()); } - } fn get_ip() -> Option { From 78c78548e80c1be44589409f3b99f065aa77c781 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sat, 9 Jul 2022 16:41:53 +0800 Subject: [PATCH 173/459] feat: commit prettier_build --- src/builder.rs | 2 +- src/server/mod.rs | 42 +++++++++++++++++++++++++----------------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index d164e5418..33ce411f6 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -368,7 +368,7 @@ fn prettier_build(mut cmd: Command) -> anyhow::Result> { Message::BuildFinished(finished) => { if finished.success { pb.finish_and_clear(); - println!("Done in"); + log::info!("Build done."); } else { std::process::exit(1); } diff --git a/src/server/mod.rs b/src/server/mod.rs index b20d84db3..5cd5cdcb7 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -342,7 +342,7 @@ pub async fn startup_default(port: u16, config: CrateConfig) -> Result<()> { elapsed_time: first_build_result.elapsed_time, }, ); - + let file_service_config = config.clone(); let file_service = ServiceBuilder::new() .and_then( @@ -434,18 +434,6 @@ fn print_console_info(port: u16, config: &CrateConfig, options: PrettierOptions) profile = config.custom_profile.as_ref().unwrap().to_string(); } let hot_reload = if config.hot_reload { "RSX" } else { "Normal" }; - let tools_str = format!( - "{:?}", - config - .dioxus_config - .application - .tools - .clone() - .unwrap_or_default() - .iter() - .map(|d| d.0.clone()) - .collect::>() - ); let crate_root = crate::cargo::crate_root().unwrap(); let custom_html_file = if crate_root.join("index.html").is_file() { "Custom [index.html]" @@ -494,15 +482,35 @@ fn print_console_info(port: u16, config: &CrateConfig, options: PrettierOptions) println!(""); println!("\t> Profile : {}", profile.green()); println!("\t> Hot Reload : {}", hot_reload.cyan()); - println!("\t> Enabled Tools : {}", tools_str.yellow()); println!("\t> Index Template : {}", custom_html_file.green()); println!("\t> URL Rewrite [index_on_404] : {}", url_rewrite.purple()); println!(""); + println!( + "\t> Build Time Use : {} millis", + options.elapsed_time.to_string().green().bold() + ); + println!(""); - if options.changed.len() <= 0 { - log::info!("{}", "Server startup completed.".green().bold()); + if options.warnings.len() == 0 { + log::info!("{}\n", "A perfect compilation!".green().bold()); } else { - log::info!("{}", "Project rebuild completed.".green().bold()); + log::warn!( + "{}\n", + format!( + "There were {} warning messages during the build: ", + options.warnings.len() - 1 + ) + .yellow() + .bold() + ); + for info in &options.warnings { + if info.message == format!("{} warnings emitted", options.warnings.len() - 1) { + continue; + } + if let Some(val) = info.rendered.clone() { + log::warn!("{}", val); + } + } } } From 8613518c40e722f5e9abfbb53ed7df034ab2b7a3 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sat, 9 Jul 2022 20:00:17 +0800 Subject: [PATCH 174/459] feat: commit code --- src/server/mod.rs | 58 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 5cd5cdcb7..614e8fa7a 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -495,7 +495,7 @@ fn print_console_info(port: u16, config: &CrateConfig, options: PrettierOptions) log::info!("{}\n", "A perfect compilation!".green().bold()); } else { log::warn!( - "{}\n", + "{}", format!( "There were {} warning messages during the build: ", options.warnings.len() - 1 @@ -504,13 +504,63 @@ fn print_console_info(port: u16, config: &CrateConfig, options: PrettierOptions) .bold() ); for info in &options.warnings { - if info.message == format!("{} warnings emitted", options.warnings.len() - 1) { + let message = info.message.clone(); + if message == format!("{} warnings emitted", options.warnings.len() - 1) { continue; } - if let Some(val) = info.rendered.clone() { - log::warn!("{}", val); + let mut console = String::new(); + for span in &info.spans { + let file = &span.file_name; + let line = (span.line_start, span.line_end); + let line_str = if line.0 == line.1 { + line.0.to_string() + } else { + format!("{}~{}", line.0, line.1) + }; + let code = span.text.clone(); + // let span_info = format!( + // "[{}: {}]: {} --> {}", + // file, + // if line.0 == line.1 { + // line.0.to_string() + // } else { + // format!("{}~{}", line.0, line.1) + // }, + // if code.len() == 1 { + // code.get(0).unwrap().text.trim().blue().bold().to_string() + // } else { + // format!("\n{}",code.iter() + // .enumerate() + // .map(|(_i, s)| format!("\t{}\n", s.text).blue().bold().to_string()) + // .collect::()) + // }, + // message.yellow().bold() + // ); + let span_info = if code.len() == 1 { + let code = code.get(0).unwrap().text.trim().blue().bold().to_string(); + format!( + "[{}: {}]: '{}' --> {}", + file, + line_str, + code, + message.yellow().bold() + ) + } else { + let code = code + .iter() + .enumerate() + .map(|(_i, s)| format!("\t{}\n", s.text).blue().bold().to_string()) + .collect::(); + format!("[{}: {}]:\n{}", file, line_str, code) + }; + console = format!("{console}\n\t{span_info}"); } + println!("{console}"); } + println!( + "\n{}\n", + "Resolving all warnings will help your code run better!".yellow() + ); } } From bfaa8e3c74aa82d2ad6a5b917af98f9e6cc729f8 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sat, 9 Jul 2022 20:54:16 +0800 Subject: [PATCH 175/459] feat: commit code --- src/server/mod.rs | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/src/server/mod.rs b/src/server/mod.rs index 614e8fa7a..e5bffc17e 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -518,24 +518,6 @@ fn print_console_info(port: u16, config: &CrateConfig, options: PrettierOptions) format!("{}~{}", line.0, line.1) }; let code = span.text.clone(); - // let span_info = format!( - // "[{}: {}]: {} --> {}", - // file, - // if line.0 == line.1 { - // line.0.to_string() - // } else { - // format!("{}~{}", line.0, line.1) - // }, - // if code.len() == 1 { - // code.get(0).unwrap().text.trim().blue().bold().to_string() - // } else { - // format!("\n{}",code.iter() - // .enumerate() - // .map(|(_i, s)| format!("\t{}\n", s.text).blue().bold().to_string()) - // .collect::()) - // }, - // message.yellow().bold() - // ); let span_info = if code.len() == 1 { let code = code.get(0).unwrap().text.trim().blue().bold().to_string(); format!( @@ -551,7 +533,7 @@ fn print_console_info(port: u16, config: &CrateConfig, options: PrettierOptions) .enumerate() .map(|(_i, s)| format!("\t{}\n", s.text).blue().bold().to_string()) .collect::(); - format!("[{}: {}]:\n{}", file, line_str, code) + format!("[{}: {}]:\n{}\n#:{}", file, line_str, code, message) }; console = format!("{console}\n\t{span_info}"); } From d543ea19d0f2647a795b1cd32c243f0591e5f8f1 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sat, 9 Jul 2022 22:02:33 +0800 Subject: [PATCH 176/459] feat: commit some thing --- src/builder.rs | 9 ++++----- src/main.rs | 10 +++++----- src/server/mod.rs | 1 - 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 33ce411f6..31b99b5f4 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -195,7 +195,7 @@ pub fn build(config: &CrateConfig, quiet: bool) -> Result { let t_end = std::time::Instant::now(); Ok(BuildResult { warnings: warning_messages, - elapsed_time: (t_end - t_start).as_millis() + elapsed_time: (t_end - t_start).as_millis(), }) } @@ -339,7 +339,7 @@ fn prettier_build(mut cmd: Command) -> anyhow::Result> { .unwrap() .tick_chars("/|\\- "), ); - pb.set_message("Start to build project"); + pb.set_message("💼 Waiting to strart build the project..."); let mut command = cmd.spawn()?; let reader = std::io::BufReader::new(command.stdout.take().unwrap()); @@ -349,8 +349,7 @@ fn prettier_build(mut cmd: Command) -> anyhow::Result> { let message = msg.message; match message.level { cargo_metadata::diagnostic::DiagnosticLevel::Error => { - log::error!("Build Failed: {}", message.message); - std::process::exit(1); + return Err(anyhow::anyhow!(message.rendered.unwrap_or("Unknown".into()))); } cargo_metadata::diagnostic::DiagnosticLevel::Warning => { warning_messages.push(message.clone()); @@ -368,7 +367,7 @@ fn prettier_build(mut cmd: Command) -> anyhow::Result> { Message::BuildFinished(finished) => { if finished.success { pb.finish_and_clear(); - log::info!("Build done."); + log::info!("👑 Build done."); } else { std::process::exit(1); } diff --git a/src/main.rs b/src/main.rs index 099ff74c0..39b360f7d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,31 +9,31 @@ async fn main() -> Result<()> { match args.action { Commands::Translate(opts) => { if let Err(e) = opts.translate() { - log::error!("translate error: {}", e); + log::error!("🚫 Translate failed: {}", e); } } Commands::Build(opts) => { if let Err(e) = opts.build() { - log::error!("build error: {}", e); + log::error!("🚫 Build project failed: {}", e); } } Commands::Clean(opts) => { if let Err(e) = opts.clean() { - log::error!("clean error: {}", e); + log::error!("🚫 Clean project failed: {}", e); } } Commands::Serve(opts) => { if let Err(e) = opts.serve().await { - log::error!("serve error: {}", e); + log::error!("🚫 Serve startup failed: {}", e); } } Commands::Create(opts) => { if let Err(e) = opts.create() { - log::error!("create error: {}", e); + log::error!("🚫 Create project failed: {}", e); } } diff --git a/src/server/mod.rs b/src/server/mod.rs index e5bffc17e..8f50a6cc3 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -176,7 +176,6 @@ pub async fn startup_hot_reload(port: u16, config: CrateConfig) -> Result<()> { } Err(err) => { log::error!("{}", err); - std::process::exit(1); } } } From dfcf4e1f88e6f8296a5691e13bd6a5122c64996d Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sat, 9 Jul 2022 22:17:32 +0800 Subject: [PATCH 177/459] feat: change default config --- README.md | 2 +- src/assets/dioxus.toml | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a939dfcaf..f8515f390 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@
-

📦✨ dioxus-cli

+

📦✨ Dioxus CLI

Tooling to supercharge dioxus projects

diff --git a/src/assets/dioxus.toml b/src/assets/dioxus.toml index a5e849bfb..5c4f49f98 100644 --- a/src/assets/dioxus.toml +++ b/src/assets/dioxus.toml @@ -19,6 +19,8 @@ asset_dir = "public" # HTML title tag content title = "dioxus | ⛺" +index_on_404 = true + [web.watcher] watch_path = ["src"] @@ -45,10 +47,12 @@ script = [] binaryen = { wasm_opt = true } # use sass auto will auto check sass file and build it. -[application.tools.sass] + + +# [application.tools.sass] # auto will check the assets dirs, and auto to transform all scss file to css file. -input = "*" +# input = "*" # or you can specify some scss file -> css file # input = [ @@ -57,4 +61,4 @@ input = "*" # "/css/test.scss" # ] -source_map = true \ No newline at end of file +# source_map = true \ No newline at end of file From c97d7f263a4e785db533f726c80aee548d6f1cc0 Mon Sep 17 00:00:00 2001 From: YuKun Liu <41265098+mrxiaozhuox@users.noreply.github.com> Date: Sat, 9 Jul 2022 22:21:21 +0800 Subject: [PATCH 178/459] feat: commit code --- src/assets/dioxus.toml | 2 +- src/assets/index.html | 5 ++--- src/cli/create/mod.rs | 1 + 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/assets/dioxus.toml b/src/assets/dioxus.toml index 5c4f49f98..649aa2c3c 100644 --- a/src/assets/dioxus.toml +++ b/src/assets/dioxus.toml @@ -17,7 +17,7 @@ asset_dir = "public" [web.app] # HTML title tag content -title = "dioxus | ⛺" +title = "Dioxus | An elegant GUI library for Rust" index_on_404 = true diff --git a/src/assets/index.html b/src/assets/index.html index 87d447816..ed3d48135 100644 --- a/src/assets/index.html +++ b/src/assets/index.html @@ -9,10 +9,9 @@
- + String { .clone() .unwrap_or_else(|| "dioxus | ⛺".into()); - html.replace("{app_title}", &title) + replace_or_insert_before("{app_title}", &title, " Date: Wed, 21 Jun 2023 17:27:01 -0700 Subject: [PATCH 370/459] fix some errors not being reported --- src/builder.rs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index d81408740..c06fb945d 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -380,7 +380,17 @@ fn prettier_build(cmd: subprocess::Exec) -> anyhow::Result> { ); pb.set_message("💼 Waiting to start build the project..."); - let stdout = cmd.stream_stdout()?; + struct StopSpinOnDrop(ProgressBar); + + impl Drop for StopSpinOnDrop { + fn drop(&mut self) { + self.0.finish_and_clear(); + } + } + + StopSpinOnDrop(pb.clone()); + + let stdout = cmd.detached().stream_stdout()?; let reader = std::io::BufReader::new(stdout); for message in cargo_metadata::Message::parse_stream(reader) { match message.unwrap() { @@ -388,9 +398,11 @@ fn prettier_build(cmd: subprocess::Exec) -> anyhow::Result> { let message = msg.message; match message.level { cargo_metadata::diagnostic::DiagnosticLevel::Error => { - return Err(anyhow::anyhow!(message - .rendered - .unwrap_or("Unknown".into()))); + return { + Err(anyhow::anyhow!(message + .rendered + .unwrap_or("Unknown".into()))) + }; } cargo_metadata::diagnostic::DiagnosticLevel::Warning => { warning_messages.push(message.clone()); @@ -407,7 +419,6 @@ fn prettier_build(cmd: subprocess::Exec) -> anyhow::Result> { } Message::BuildFinished(finished) => { if finished.success { - pb.finish_and_clear(); log::info!("👑 Build done."); } else { std::process::exit(1); From 1e5c2207363ee0c1fc2f3ff73e8675dffa7dda97 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Sat, 24 Jun 2023 10:25:24 -0700 Subject: [PATCH 371/459] expose wry background color option --- packages/desktop/src/cfg.rs | 10 ++++++++++ packages/desktop/src/webview.rs | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/packages/desktop/src/cfg.rs b/packages/desktop/src/cfg.rs index d7f1b5dfa..619a6801a 100644 --- a/packages/desktop/src/cfg.rs +++ b/packages/desktop/src/cfg.rs @@ -23,6 +23,7 @@ pub struct Config { pub(crate) custom_head: Option, pub(crate) custom_index: Option, pub(crate) root_name: String, + pub(crate) background_color: Option<(u8, u8, u8, u8)>, } type DropHandler = Box bool>; @@ -50,6 +51,7 @@ impl Config { custom_head: None, custom_index: None, root_name: "main".to_string(), + background_color: None, } } @@ -137,6 +139,14 @@ impl Config { self.root_name = name.into(); self } + + /// Sets the background color of the WebView. + /// This will be set before the HTML is rendered and can be used to prevent flashing when the page loads. + /// Accepts a color in RGBA format + pub fn with_background_color(mut self, color: (u8, u8, u8, u8)) -> Self { + self.background_color = Some(color); + self + } } impl Default for Config { diff --git a/packages/desktop/src/webview.rs b/packages/desktop/src/webview.rs index 5d3acf44f..0b7152cfd 100644 --- a/packages/desktop/src/webview.rs +++ b/packages/desktop/src/webview.rs @@ -64,6 +64,10 @@ pub fn build( webview = webview.with_browser_accelerator_keys(false); } + if let Some(color) = cfg.background_color { + webview = webview.with_background_color(color); + } + // These are commented out because wry is currently broken in wry // let mut web_context = WebContext::new(cfg.data_dir.clone()); // .with_web_context(&mut web_context); From 9fbeb84921434eb34d91472d486cfbd694b54a28 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Mon, 26 Jun 2023 08:53:45 -0700 Subject: [PATCH 372/459] update to git dioxus --- Cargo.lock | 53 ++++++++++++++++++++++++++++++++++++++--------- Cargo.toml | 10 ++++----- src/server/mod.rs | 16 ++++++++------ 3 files changed, 58 insertions(+), 21 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 863ae5823..b0a98d3c8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -400,6 +400,15 @@ dependencies = [ "jobserver", ] +[[package]] +name = "cfg-expr" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bbc13bf6290a6b202cc3efb36f7ec2b739a80634215630c8053a313edf6abef" +dependencies = [ + "smallvec", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -727,8 +736,7 @@ dependencies = [ [[package]] name = "dioxus-autofmt" version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "935ac336dd077436505f2eda7b7b81515093e8a3fb352ac514cd6901dbd302e7" +source = "git+https://github.com/DioxusLabs/dioxus#11c9abcf7ce731ccb4a44c52de383c090ab319af" dependencies = [ "dioxus-rsx", "prettier-please", @@ -795,8 +803,7 @@ dependencies = [ [[package]] name = "dioxus-core" version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4d15b0bb9c58d015b2295f240600dd76e427758377569fa33783afc295706a" +source = "git+https://github.com/DioxusLabs/dioxus#11c9abcf7ce731ccb4a44c52de383c090ab319af" dependencies = [ "bumpalo", "bumpslab", @@ -814,8 +821,7 @@ dependencies = [ [[package]] name = "dioxus-html" version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7682a6615e4e5a460cd3293ce420451abffb719c84c4b54e297b17365f601fb4" +source = "git+https://github.com/DioxusLabs/dioxus#11c9abcf7ce731ccb4a44c52de383c090ab319af" dependencies = [ "async-trait", "dioxus-core", @@ -831,11 +837,11 @@ dependencies = [ [[package]] name = "dioxus-rsx" version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8544632e20f462a64f26502c91e7cf6ae3b30d82956e70543644d2c16b6659d" +source = "git+https://github.com/DioxusLabs/dioxus#11c9abcf7ce731ccb4a44c52de383c090ab319af" dependencies = [ "dioxus-core", "internment", + "krates", "proc-macro2", "quote", "serde", @@ -1011,6 +1017,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + [[package]] name = "flate2" version = "1.0.26" @@ -1680,6 +1692,18 @@ dependencies = [ "libc", ] +[[package]] +name = "krates" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "942c43a6cba1c201dfe81a943c89fa5c9140b34993e0c027f542c80b92e319a7" +dependencies = [ + "cargo_metadata", + "cfg-expr", + "petgraph", + "semver", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -2180,6 +2204,16 @@ dependencies = [ "sha2", ] +[[package]] +name = "petgraph" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +dependencies = [ + "fixedbitset", + "indexmap", +] + [[package]] name = "pin-project" version = "1.0.12" @@ -2454,8 +2488,7 @@ dependencies = [ [[package]] name = "rsx-rosetta" version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "593810f58a97e3a45e23b84437d5323c2420b46f73cf38fe49133eb59a7524bb" +source = "git+https://github.com/DioxusLabs/dioxus#11c9abcf7ce731ccb4a44c52de383c090ab319af" dependencies = [ "convert_case", "dioxus-autofmt", diff --git a/Cargo.toml b/Cargo.toml index 499f5170e..7dca72934 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -77,11 +77,11 @@ ctrlc = "3.2.3" # dioxus-rsx = "0.0.1" gitignore = "1.0.7" -dioxus-rsx = { version = "0.0.3" } -dioxus-html = { version = "0.3", features = ["hot-reload-context"] } -dioxus-core = { version = "0.3", features = ["serialize"] } -dioxus-autofmt = "0.3.0" -rsx-rosetta = { version = "0.3" } +dioxus-rsx = { git = "https://github.com/DioxusLabs/dioxus" } +dioxus-html = { git = "https://github.com/DioxusLabs/dioxus", features = ["hot-reload-context"] } +dioxus-core = { git = "https://github.com/DioxusLabs/dioxus", features = ["serialize"] } +dioxus-autofmt = { git = "https://github.com/DioxusLabs/dioxus" } +rsx-rosetta = { git = "https://github.com/DioxusLabs/dioxus" } open = "4.1.0" [[bin]] diff --git a/src/server/mod.rs b/src/server/mod.rs index 8e5861270..4f19f00d2 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -150,10 +150,10 @@ pub async fn startup_hot_reload( let dist_path = config.out_dir.clone(); let (reload_tx, _) = broadcast::channel(100); - let map = FileMap::::new(config.crate_dir.clone()); - // for err in errors { - // log::error!("{}", err); - // } + let FileMapBuildResult { map, errors } = FileMap::::create(config.crate_dir.clone()).unwrap(); + for err in errors { + log::error!("{}", err); + } let file_map = Arc::new(Mutex::new(map)); let build_manager = Arc::new(BuildManager { config: config.clone(), @@ -219,10 +219,11 @@ pub async fn startup_hot_reload( let mut map = file_map.lock().unwrap(); match map.update_rsx(&path, &crate_dir) { - UpdateResult::UpdatedRsx(msgs) => { + + Ok( UpdateResult::UpdatedRsx(msgs) )=> { messages.extend(msgs); } - UpdateResult::NeedsRebuild => { + Ok(UpdateResult::NeedsRebuild) => { match build_manager.rebuild() { Ok(res) => { print_console_info( @@ -242,6 +243,9 @@ pub async fn startup_hot_reload( } return; } + Err(err) => { + log::error!("{}", err); + } } } for msg in messages { From 42011b7aa7b27509d130716c7395a537c94cd921 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Mon, 26 Jun 2023 13:12:42 -0700 Subject: [PATCH 373/459] improve dioxus create --- Cargo.lock | 1701 ++++++++++++++++++++++++++++---------- Cargo.toml | 4 +- src/cli/cfg.rs | 4 +- src/cli/create/mod.rs | 110 ++- src/cli/mod.rs | 1 - src/cli/translate/mod.rs | 2 +- src/server/mod.rs | 6 +- 7 files changed, 1328 insertions(+), 500 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b0a98d3c8..707a02b6e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,14 +19,13 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aes" -version = "0.7.5" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" dependencies = [ "cfg-if", "cipher", "cpufeatures", - "opaque-debug", ] [[package]] @@ -35,20 +34,51 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.10", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if", + "const-random", + "getrandom 0.2.10", "once_cell", "version_check", ] [[package]] name = "aho-corasick" -version = "1.0.1" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" dependencies = [ "memchr", ] +[[package]] +name = "aho-corasick" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +dependencies = [ + "memchr", +] + +[[package]] +name = "aligned" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80a21b9440a626c7fc8573a9e3d3a06b75c7c97754c2949bc7857b90353ca655" +dependencies = [ + "as-slice", +] + [[package]] name = "alloc-no-stdlib" version = "2.0.4" @@ -64,6 +94,12 @@ dependencies = [ "alloc-no-stdlib", ] +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + [[package]] name = "android_system_properties" version = "0.1.5" @@ -73,12 +109,67 @@ dependencies = [ "libc", ] +[[package]] +name = "anstream" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is-terminal", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd" + +[[package]] +name = "anstyle-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "anstyle-wincon" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" +dependencies = [ + "anstyle", + "windows-sys 0.48.0", +] + [[package]] name = "anyhow" version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +[[package]] +name = "anymap2" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c" + [[package]] name = "arrayref" version = "0.3.7" @@ -91,6 +182,15 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +[[package]] +name = "as-slice" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516" +dependencies = [ + "stable_deref_trait", +] + [[package]] name = "async-compression" version = "0.3.15" @@ -113,7 +213,7 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.22", ] [[package]] @@ -217,9 +317,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.0" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" [[package]] name = "base64ct" @@ -237,7 +337,7 @@ dependencies = [ "dirs 1.0.5", "failure", "flate2", - "hex", + "hex 0.3.2", "is_executable", "siphasher", "tar", @@ -301,10 +401,31 @@ dependencies = [ ] [[package]] -name = "bumpalo" -version = "3.12.1" +name = "bstr" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8" +checksum = "a246e68bb43f6cd9db24bea052a53e40405417c5fb372e3d1a8a7f770a564ef5" +dependencies = [ + "memchr", + "once_cell", + "regex-automata", + "serde", +] + +[[package]] +name = "btoi" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd6407f73a9b8b6162d8a2ef999fe6afd7cc15902ebf42c5cd296addf17e0ad" +dependencies = [ + "num-traits", +] + +[[package]] +name = "bumpalo" +version = "3.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" [[package]] name = "bumpslab" @@ -357,6 +478,43 @@ dependencies = [ "serde", ] +[[package]] +name = "cargo-generate" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7b2f627381dc7523340c606559dddf6083cb2e6134368381da5778638f906d8" +dependencies = [ + "anyhow", + "clap", + "console", + "dialoguer", + "env_logger", + "git2", + "gix-config", + "heck 0.4.1", + "home", + "ignore", + "indicatif", + "liquid", + "liquid-core", + "liquid-derive", + "liquid-lib", + "log", + "names", + "paste", + "path-absolutize", + "regex", + "remove_dir_all", + "rhai", + "sanitize-filename", + "semver", + "serde", + "tempfile", + "thiserror", + "toml 0.7.5", + "walkdir", +] + [[package]] name = "cargo-platform" version = "0.1.2" @@ -388,7 +546,7 @@ checksum = "e72c3ff59e3b7d24630206bb63a73af65da4ed5df1f76ee84dfafb9fee2ba60e" dependencies = [ "serde", "serde_derive", - "toml", + "toml 0.5.11", ] [[package]] @@ -417,13 +575,13 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.24" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" +checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" dependencies = [ + "android-tzdata", "iana-time-zone", "js-sys", - "num-integer", "num-traits", "time 0.1.45", "wasm-bindgen", @@ -432,61 +590,61 @@ dependencies = [ [[package]] name = "cipher" -version = "0.3.0" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "generic-array", + "crypto-common", + "inout", ] [[package]] name = "clap" -version = "3.2.25" +version = "4.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" +checksum = "34d21f9bf1b425d2968943631ec91202fe5e837264063503708b83013f8fc938" dependencies = [ - "atty", - "bitflags", + "clap_builder", "clap_derive", - "clap_lex", - "indexmap", "once_cell", +] + +[[package]] +name = "clap_builder" +version = "4.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "914c8c79fb560f238ef6429439a30023c862f7a28e688c58f7203f12b29970bd" +dependencies = [ + "anstream", + "anstyle", + "bitflags", + "clap_lex", "strsim", - "termcolor", - "textwrap", ] [[package]] name = "clap_derive" -version = "3.2.25" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" +checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" dependencies = [ "heck 0.4.1", - "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.22", ] [[package]] name = "clap_lex" -version = "0.2.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" -dependencies = [ - "os_str_bytes", -] +checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" [[package]] -name = "codespan-reporting" -version = "0.11.1" +name = "colorchoice" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "colored" @@ -512,15 +670,37 @@ dependencies = [ [[package]] name = "console" -version = "0.15.5" +version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60" +checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" dependencies = [ "encode_unicode", "lazy_static", "libc", "unicode-width", - "windows-sys 0.42.0", + "windows-sys 0.45.0", +] + +[[package]] +name = "const-random" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368a7a772ead6ce7e1de82bfb04c485f3db8ec744f72925af5735e29a22cc18e" +dependencies = [ + "const-random-macro", + "proc-macro-hack", +] + +[[package]] +name = "const-random-macro" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d7d6ab3c3a2282db210df5f02c4dab6e0a7057af0fb7ebd4070f30fe05c0ddb" +dependencies = [ + "getrandom 0.2.10", + "once_cell", + "proc-macro-hack", + "tiny-keccak", ] [[package]] @@ -553,9 +733,9 @@ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cpufeatures" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" +checksum = "03e69e28e9f7f77debdedbaafa2866e1de9ba56df55a8bd7cfc724c25a09987c" dependencies = [ "libc", ] @@ -581,13 +761,19 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.15" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" dependencies = [ "cfg-if", ] +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + [[package]] name = "crypto-common" version = "0.1.6" @@ -600,12 +786,12 @@ dependencies = [ [[package]] name = "ctrlc" -version = "3.2.5" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbcf33c2a618cbe41ee43ae6e9f2e48368cd9f9db2896f10167d8d762679f639" +checksum = "2a011bbe2c35ce9c1f143b7af6f94f29a167beb4cd1d29e6740ce836f723120e" dependencies = [ "nix", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -619,15 +805,15 @@ dependencies = [ "openssl-probe", "openssl-sys", "schannel", - "socket2", + "socket2 0.4.9", "winapi", ] [[package]] name = "curl-sys" -version = "0.4.61+curl-8.0.1" +version = "0.4.63+curl-8.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14d05c10f541ae6f3bc5b3d923c20001f47db7d5f0b2bc6ad16490133842db79" +checksum = "aeb0fef7046022a1e2ad67a004978f0e3cacb9e3123dc62ce768f92197b771dc" dependencies = [ "cc", "libc", @@ -639,47 +825,12 @@ dependencies = [ ] [[package]] -name = "cxx" -version = "1.0.94" +name = "cvt" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" +checksum = "d2ae9bf77fbf2d39ef573205d554d87e86c12f1994e9ea335b0651b9b278bcf1" dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn 2.0.15", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", + "cfg-if", ] [[package]] @@ -702,7 +853,7 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.22", ] [[package]] @@ -713,20 +864,32 @@ checksum = "29a358ff9f12ec09c3e61fef9b5a9902623a695a46a917b07f269bff1445611a" dependencies = [ "darling_core", "quote", - "syn 2.0.15", + "syn 2.0.22", ] [[package]] name = "data-encoding" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" +checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" + +[[package]] +name = "dialoguer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59c6f2989294b9a498d3ad5491a79c6deb604617378e1cdc4bfc1c1361fe2f87" +dependencies = [ + "console", + "shell-words", + "tempfile", + "zeroize", +] [[package]] name = "digest" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", @@ -754,6 +917,7 @@ dependencies = [ "atty", "axum", "binary-install", + "cargo-generate", "cargo_metadata", "cargo_toml", "chrono", @@ -774,7 +938,7 @@ dependencies = [ "headers", "html_parser", "hyper", - "hyper-rustls", + "hyper-rustls 0.23.2", "indicatif", "lazy_static", "log", @@ -792,12 +956,13 @@ dependencies = [ "tar", "thiserror", "tokio", - "toml", + "toml 0.5.11", + "toml_edit", "tower", "tower-http 0.2.5", "walkdir", "wasm-bindgen-cli-support", - "zip 0.6.5", + "zip 0.6.6", ] [[package]] @@ -809,7 +974,7 @@ dependencies = [ "bumpslab", "futures-channel", "futures-util", - "indexmap", + "indexmap 1.9.3", "log", "longest-increasing-subsequence", "rustc-hash", @@ -879,6 +1044,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + [[package]] name = "either" version = "1.8.1" @@ -914,25 +1085,44 @@ dependencies = [ [[package]] name = "enumset" -version = "1.0.13" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b025475ad197bd8b4a9bdce339216b6cf3bd568bf2e107c286b51613f0b3cf" +checksum = "e875f1719c16de097dee81ed675e2d9bb63096823ed3f0ca827b7dea3028bbbb" dependencies = [ "enumset_derive", ] [[package]] name = "enumset_derive" -version = "0.7.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c2852ff17a4c9a2bb2abbca3074737919cb05dc24b0a8ca9498081a7033dd6" +checksum = "e08b6c6ab82d70f08844964ba10c7babb716de2ecaeab9be5717918a5177d3af" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.22", ] +[[package]] +name = "env_logger" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "equivalent" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1" + [[package]] name = "errno" version = "0.3.1" @@ -1056,13 +1246,27 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" dependencies = [ "percent-encoding", ] +[[package]] +name = "fs_at" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15550ecca96ea332ec143fb450701074143b70d358e50b32b1f847ccff2e1cf7" +dependencies = [ + "aligned", + "cfg-if", + "cvt", + "libc", + "nix", + "windows-sys 0.48.0", +] + [[package]] name = "fs_extra" version = "1.3.0" @@ -1134,7 +1338,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.22", ] [[package]] @@ -1190,9 +1394,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", "libc", @@ -1201,9 +1405,24 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" + +[[package]] +name = "git2" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b989d6a7ca95a362cf2cfc5ad688b3a467be1f87e480b8dad07fee8c79b0044" +dependencies = [ + "bitflags", + "libc", + "libgit2-sys", + "log", + "openssl-probe", + "openssl-sys", + "url", +] [[package]] name = "gitignore" @@ -1214,6 +1433,232 @@ dependencies = [ "glob", ] +[[package]] +name = "gix-actor" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc22b0cdc52237667c301dd7cdc6ead8f8f73c9f824e9942c8ebd6b764f6c0bf" +dependencies = [ + "bstr 1.5.0", + "btoi", + "gix-date", + "itoa", + "nom", + "thiserror", +] + +[[package]] +name = "gix-config" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fbad5ce54a8fc997acc50febd89ec80fa6e97cb7f8d0654cb229936407489d8" +dependencies = [ + "bstr 1.5.0", + "gix-config-value", + "gix-features 0.28.1", + "gix-glob", + "gix-path", + "gix-ref", + "gix-sec", + "log", + "memchr", + "nom", + "once_cell", + "smallvec", + "thiserror", + "unicode-bom", +] + +[[package]] +name = "gix-config-value" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d09154c0c8677e4da0ec35e896f56ee3e338e741b9599fae06075edd83a4081c" +dependencies = [ + "bitflags", + "bstr 1.5.0", + "gix-path", + "libc", + "thiserror", +] + +[[package]] +name = "gix-date" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b96271912ce39822501616f177dea7218784e6c63be90d5f36322ff3a722aae2" +dependencies = [ + "bstr 1.5.0", + "itoa", + "thiserror", + "time 0.3.22", +] + +[[package]] +name = "gix-features" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b76f9a80f6dd7be66442ae86e1f534effad9546676a392acc95e269d0c21c22" +dependencies = [ + "gix-hash 0.10.4", + "libc", + "sha1_smol", + "walkdir", +] + +[[package]] +name = "gix-features" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf69b0f5c701cc3ae22d3204b671907668f6437ca88862d355eaf9bc47a4f897" +dependencies = [ + "gix-hash 0.11.3", + "libc", +] + +[[package]] +name = "gix-fs" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b37a1832f691fdc09910bd267f9a2e413737c1f9ec68c6e31f9e802616278a9" +dependencies = [ + "gix-features 0.29.0", +] + +[[package]] +name = "gix-glob" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93e43efd776bc543f46f0fd0ca3d920c37af71a764a16f2aebd89765e9ff2993" +dependencies = [ + "bitflags", + "bstr 1.5.0", +] + +[[package]] +name = "gix-hash" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a258595457bc192d1f1c59d0d168a1e34e2be9b97a614e14995416185de41a7" +dependencies = [ + "hex 0.4.3", + "thiserror", +] + +[[package]] +name = "gix-hash" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0dd58cdbe7ffa4032fc111864c80d5f8cecd9a2c9736c97ae7e5be834188272" +dependencies = [ + "hex 0.4.3", + "thiserror", +] + +[[package]] +name = "gix-lock" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c693d7f05730fa74a7c467150adc7cea393518410c65f0672f80226b8111555" +dependencies = [ + "gix-tempfile", + "gix-utils", + "thiserror", +] + +[[package]] +name = "gix-object" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df068db9180ee935fbb70504848369e270bdcb576b05c0faa8b9fd3b86fc017" +dependencies = [ + "bstr 1.5.0", + "btoi", + "gix-actor", + "gix-features 0.28.1", + "gix-hash 0.10.4", + "gix-validate", + "hex 0.4.3", + "itoa", + "nom", + "smallvec", + "thiserror", +] + +[[package]] +name = "gix-path" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32370dce200bb951df013e03dff35b4233fc7a89458642b047629b91734a7e19" +dependencies = [ + "bstr 1.5.0", + "thiserror", +] + +[[package]] +name = "gix-ref" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e909396ed3b176823991ccc391c276ae2a015e54edaafa3566d35123cfac9d" +dependencies = [ + "gix-actor", + "gix-features 0.28.1", + "gix-hash 0.10.4", + "gix-lock", + "gix-object", + "gix-path", + "gix-tempfile", + "gix-validate", + "memmap2", + "nom", + "thiserror", +] + +[[package]] +name = "gix-sec" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8ffa5bf0772f9b01de501c035b6b084cf9b8bb07dec41e3afc6a17336a65f47" +dependencies = [ + "bitflags", + "dirs 4.0.0", + "gix-path", + "libc", + "windows 0.43.0", +] + +[[package]] +name = "gix-tempfile" +version = "5.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71a0d32f34e71e86586124225caefd78dabc605d0486de580d717653addf182" +dependencies = [ + "gix-fs", + "libc", + "once_cell", + "parking_lot", + "tempfile", +] + +[[package]] +name = "gix-utils" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ca284c260845bc0724050aec59c7a596407678342614cdf5a1d69e044f29a36" +dependencies = [ + "fastrand", +] + +[[package]] +name = "gix-validate" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d092b594c8af00a3a31fe526d363ee8a51a6f29d8496cdb991ed2f01ec0ec13" +dependencies = [ + "bstr 1.5.0", + "thiserror", +] + [[package]] name = "glob" version = "0.3.1" @@ -1221,10 +1666,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] -name = "h2" -version = "0.3.18" +name = "globset" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" +checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" +dependencies = [ + "aho-corasick 0.7.20", + "bstr 1.5.0", + "fnv", + "log", + "regex", +] + +[[package]] +name = "h2" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" dependencies = [ "bytes", "fnv", @@ -1232,7 +1690,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap", + "indexmap 1.9.3", "slab", "tokio", "tokio-util", @@ -1245,9 +1703,15 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash", + "ahash 0.7.6", ] +[[package]] +name = "hashbrown" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" + [[package]] name = "headers" version = "0.3.8" @@ -1318,6 +1782,12 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + [[package]] name = "hmac" version = "0.12.1" @@ -1327,6 +1797,15 @@ dependencies = [ "digest", ] +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys 0.48.0", +] + [[package]] name = "hostname" version = "0.3.1" @@ -1393,10 +1872,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] -name = "hyper" -version = "0.14.26" +name = "humantime" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" dependencies = [ "bytes", "futures-channel", @@ -1409,7 +1894,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.4.9", "tokio", "tower-service", "tracing", @@ -1425,10 +1910,23 @@ dependencies = [ "http", "hyper", "log", - "rustls", + "rustls 0.20.8", "rustls-native-certs", "tokio", - "tokio-rustls", + "tokio-rustls 0.23.4", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7" +dependencies = [ + "http", + "hyper", + "rustls 0.21.2", + "tokio", + "tokio-rustls 0.24.1", ] [[package]] @@ -1446,26 +1944,25 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.56" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" +checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows", + "windows 0.48.0", ] [[package]] name = "iana-time-zone-haiku" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ - "cxx", - "cxx-build", + "cc", ] [[package]] @@ -1493,14 +1990,31 @@ dependencies = [ [[package]] name = "idna" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ "unicode-bidi", "unicode-normalization", ] +[[package]] +name = "ignore" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492" +dependencies = [ + "globset", + "lazy_static", + "log", + "memchr", + "regex", + "same-file", + "thread_local", + "walkdir", + "winapi-util", +] + [[package]] name = "indexmap" version = "1.9.3" @@ -1508,16 +2022,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +dependencies = [ + "equivalent", + "hashbrown 0.14.0", ] [[package]] name = "indicatif" -version = "0.17.3" +version = "0.17.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cef509aa9bc73864d6756f0d34d35504af3cf0844373afe9b8669a5b8005a729" +checksum = "8ff8cc23a7393a397ed1d7f56e6365cba772aba9f9912ab968b03043c395d057" dependencies = [ "console", + "instant", "number_prefix", "portable-atomic", "unicode-width", @@ -1543,6 +2068,15 @@ dependencies = [ "libc", ] +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + [[package]] name = "instant" version = "0.1.12" @@ -1554,19 +2088,19 @@ dependencies = [ [[package]] name = "internment" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a798d7677f07d6f1e77be484ea8626ddb1566194de399f1206306820c406371" +checksum = "161079c3ad892faa215fcfcf3fd7a6a3c9288df2b06a2c2bad7fbfad4f01d69d" dependencies = [ - "hashbrown", + "hashbrown 0.12.3", "parking_lot", ] [[package]] name = "io-lifetimes" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ "hermit-abi 0.3.1", "libc", @@ -1575,14 +2109,14 @@ dependencies = [ [[package]] name = "ipconfig" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd302af1b90f2463a98fa5ad469fc212c8e3175a41c3068601bfa2727591c5be" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2", + "socket2 0.5.3", "widestring", - "winapi", - "winreg", + "windows-sys 0.48.0", + "winreg 0.50.0", ] [[package]] @@ -1609,6 +2143,18 @@ dependencies = [ "once_cell", ] +[[package]] +name = "is-terminal" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" +dependencies = [ + "hermit-abi 0.3.1", + "io-lifetimes", + "rustix", + "windows-sys 0.48.0", +] + [[package]] name = "is-wsl" version = "0.4.0" @@ -1654,9 +2200,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.61" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" dependencies = [ "wasm-bindgen", ] @@ -1704,6 +2250,16 @@ dependencies = [ "semver", ] +[[package]] +name = "kstring" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3066350882a1cd6d950d055997f379ac37fd39f81cd4d8ed186032eb3c5747" +dependencies = [ + "serde", + "static_assertions", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -1718,9 +2274,37 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.143" +version = "0.2.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc207893e85c5d6be840e969b496b53d94cec8be2d501b214f50daa97fa8024" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" + +[[package]] +name = "libgit2-sys" +version = "0.15.2+1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a80df2e11fb4a61f4ba2ab42dbe7f74468da143f1a75c74e11dee7c813f694fa" +dependencies = [ + "cc", + "libc", + "libssh2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", +] + +[[package]] +name = "libssh2-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", +] [[package]] name = "libz-sys" @@ -1734,15 +2318,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "link-cplusplus" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" -dependencies = [ - "cc", -] - [[package]] name = "linked-hash-map" version = "0.5.6" @@ -1751,15 +2326,72 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "liquid" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f68ae1011499ae2ef879f631891f21c78e309755f4a5e483c4a8f12e10b609" +dependencies = [ + "doc-comment", + "liquid-core", + "liquid-derive", + "liquid-lib", + "serde", +] + +[[package]] +name = "liquid-core" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79e0724dfcaad5cfb7965ea0f178ca0870b8d7315178f4a7179f5696f7f04d5f" +dependencies = [ + "anymap2", + "itertools", + "kstring", + "liquid-derive", + "num-traits", + "pest", + "pest_derive", + "regex", + "serde", + "time 0.3.22", +] + +[[package]] +name = "liquid-derive" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc2fb41a9bb4257a3803154bdf7e2df7d45197d1941c9b1a90ad815231630721" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.22", +] + +[[package]] +name = "liquid-lib" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2a17e273a6fb1fb6268f7a5867ddfd0bd4683c7e19b51084f3d567fad4348c0" +dependencies = [ + "itertools", + "liquid-core", + "once_cell", + "percent-encoding", + "regex", + "time 0.3.22", + "unicode-segmentation", +] [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" dependencies = [ "autocfg", "scopeguard", @@ -1767,12 +2399,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" [[package]] name = "longest-increasing-subsequence" @@ -1791,9 +2420,9 @@ dependencies = [ [[package]] name = "lua-src" -version = "544.0.1" +version = "546.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "708ba3c844d5e9d38def4a09dd871c17c370f519b3c4b7261fbabe4a613a814c" +checksum = "8cb00c1380f1b4b4928dd211c07301ffa34872a239e590bd3219d9e5b213face" dependencies = [ "cc", ] @@ -1831,6 +2460,15 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + [[package]] name = "mime" version = "0.3.17" @@ -1873,23 +2511,23 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] name = "mlua" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea8ce6788556a67d90567809c7de94dfef2ff1f47ff897aeee935bcfbcdf5735" +checksum = "07366ed2cd22a3b000aed076e2b68896fb46f06f1f5786c5962da73c0af01577" dependencies = [ - "bstr", + "bstr 0.2.17", "cc", "futures-core", "futures-task", @@ -1918,6 +2556,15 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "names" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bddcd3bf5144b6392de80e04c347cd7fab2508f6df16a85fc496ecd5cec39bc" +dependencies = [ + "rand", +] + [[package]] name = "native-tls" version = "0.2.11" @@ -1959,10 +2606,19 @@ dependencies = [ ] [[package]] -name = "notify" -version = "5.1.0" +name = "normpath" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ea850aa68a06e48fdb069c0ec44d0d64c8dbffa49bf3b6f7f0a901fdea1ba9" +checksum = "ec60c60a693226186f5d6edf073232bfb6464ed97eb22cf3b01c1e8198fd97f5" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "notify" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "729f63e1ca555a43fe3efa4f3efdf4801c479da85b432242a7b726f353c88486" dependencies = [ "bitflags", "crossbeam-channel", @@ -1974,17 +2630,7 @@ dependencies = [ "mio", "serde", "walkdir", - "windows-sys 0.42.0", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", + "windows-sys 0.45.0", ] [[package]] @@ -2006,6 +2652,15 @@ dependencies = [ "libc", ] +[[package]] +name = "num_threads" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" +dependencies = [ + "libc", +] + [[package]] name = "number_prefix" version = "0.4.0" @@ -2014,40 +2669,35 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "object" -version = "0.30.3" +version = "0.30.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" +checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.17.1" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" - -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "open" -version = "4.1.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16814a067484415fda653868c9be0ac5f2abd2ef5d951082a5f2fe1b3662944" +checksum = "3a083c0c7e5e4a8ec4176346cf61f67ac674e8bfb059d9226e1c54a96b377c12" dependencies = [ "is-wsl", + "libc", "pathdiff", ] [[package]] name = "openssl" -version = "0.10.52" +version = "0.10.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56" +checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" dependencies = [ "bitflags", "cfg-if", @@ -2066,7 +2716,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.22", ] [[package]] @@ -2077,9 +2727,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.87" +version = "0.9.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e" +checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6" dependencies = [ "cc", "libc", @@ -2096,12 +2746,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "os_str_bytes" -version = "6.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" - [[package]] name = "parking_lot" version = "0.12.1" @@ -2114,15 +2758,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.7" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.2.16", + "redox_syscall 0.3.5", "smallvec", - "windows-sys 0.45.0", + "windows-targets 0.48.0", ] [[package]] @@ -2136,6 +2780,30 @@ dependencies = [ "subtle", ] +[[package]] +name = "paste" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" + +[[package]] +name = "path-absolutize" +version = "3.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f1d4993b16f7325d90c18c3c6a3327db7808752db8d208cea0acee0abd52c52" +dependencies = [ + "path-dedot", +] + +[[package]] +name = "path-dedot" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d55e486337acb9973cdea3ec5638c1b3bcb22e573b2b7b41969e0c744d5a15e" +dependencies = [ + "once_cell", +] + [[package]] name = "pathdiff" version = "0.2.1" @@ -2156,15 +2824,15 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pest" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e68e84bfb01f0507134eac1e9b410a12ba379d064eab48c50ba4ce329a527b70" +checksum = "f73935e4d55e2abf7f130186537b19e7a4abc886a0252380b59248af473a3fc9" dependencies = [ "thiserror", "ucd-trie", @@ -2172,9 +2840,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b79d4c71c865a25a4322296122e3924d30bc8ee0834c8bfc8b95f7f054afbfb" +checksum = "aef623c9bbfa0eedf5a0efba11a5ee83209c326653ca31ff019bec3a95bfff2b" dependencies = [ "pest", "pest_generator", @@ -2182,22 +2850,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c435bf1076437b851ebc8edc3a18442796b30f1728ffea6262d59bbe28b077e" +checksum = "b3e8cba4ec22bada7fc55ffe51e2deb6a0e0db2d0b7ab0b103acc80d2510c190" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.22", ] [[package]] name = "pest_meta" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "745a452f8eb71e39ffd8ee32b3c5f51d03845f99786fa9b68db6ff509c505411" +checksum = "a01f71cb40bd8bb94232df14b946909e14660e33fc05db3e50ae2a82d7ea0ca0" dependencies = [ "once_cell", "pest", @@ -2211,27 +2879,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 1.9.3", ] [[package]] name = "pin-project" -version = "1.0.12" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.12" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.22", ] [[package]] @@ -2254,9 +2922,9 @@ checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] name = "portable-atomic" -version = "0.3.19" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26f6a7b87c2e435a3241addceeeff740ff8b7e76b74c13bf9acb17fa454ea00b" +checksum = "767eb9f07d4a5ebcb39bbf2d452058a93c011373abf6832e24194a1c3f004794" [[package]] name = "ppv-lite86" @@ -2299,10 +2967,16 @@ dependencies = [ ] [[package]] -name = "proc-macro2" -version = "1.0.56" +name = "proc-macro-hack" +version = "0.5.20+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb" dependencies = [ "unicode-ident", ] @@ -2315,9 +2989,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.26" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" dependencies = [ "proc-macro2", ] @@ -2349,7 +3023,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.10", ] [[package]] @@ -2393,35 +3067,57 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.10", "redox_syscall 0.2.16", "thiserror", ] [[package]] name = "regex" -version = "1.8.1" +version = "1.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370" +checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" dependencies = [ - "aho-corasick", + "aho-corasick 1.0.2", "memchr", "regex-syntax", ] [[package]] -name = "regex-syntax" -version = "0.7.1" +name = "regex-automata" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" + +[[package]] +name = "regex-syntax" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" + +[[package]] +name = "remove_dir_all" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23895cfadc1917fed9c6ed76a8c2903615fa3704f7493ff82b364c6540acc02b" +dependencies = [ + "aligned", + "cfg-if", + "cvt", + "fs_at", + "lazy_static", + "libc", + "normpath", + "windows-sys 0.45.0", +] [[package]] name = "reqwest" -version = "0.11.17" +version = "0.11.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13293b639a097af28fc8a90f22add145a9c954e49d77da06263d58cf44d5fb91" +checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" dependencies = [ - "base64 0.21.0", + "base64 0.21.2", "bytes", "encoding_rs", "futures-core", @@ -2430,7 +3126,7 @@ dependencies = [ "http", "http-body", "hyper", - "hyper-rustls", + "hyper-rustls 0.24.0", "hyper-tls", "ipnet", "js-sys", @@ -2440,14 +3136,14 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls", + "rustls 0.21.2", "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "tokio", "tokio-native-tls", - "tokio-rustls", + "tokio-rustls 0.24.1", "tokio-util", "tower-service", "trust-dns-resolver", @@ -2457,7 +3153,7 @@ dependencies = [ "wasm-streams", "web-sys", "webpki-roots", - "winreg", + "winreg 0.10.1", ] [[package]] @@ -2470,6 +3166,32 @@ dependencies = [ "quick-error", ] +[[package]] +name = "rhai" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd29fa1f740be6dc91982013957e08c3c4232d7efcfe19e12da87d50bad47758" +dependencies = [ + "ahash 0.8.3", + "bitflags", + "instant", + "num-traits", + "rhai_codegen", + "smallvec", + "smartstring", +] + +[[package]] +name = "rhai_codegen" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db74e3fdd29d969a0ec1f8e79171a6f0f71d0429293656901db382d248c4c021" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "ring" version = "0.16.20" @@ -2525,9 +3247,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustix" -version = "0.37.19" +version = "0.37.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" +checksum = "b96e891d04aa506a6d1f318d2771bcb1c7dfda84e126660ace067c9b474bb2c0" dependencies = [ "bitflags", "errno", @@ -2550,10 +3272,22 @@ dependencies = [ ] [[package]] -name = "rustls-native-certs" -version = "0.6.2" +name = "rustls" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" +checksum = "e32ca28af694bc1bbf399c33a516dbdf1c90090b8ab23c2bc24f834aa2247f5f" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" dependencies = [ "openssl-probe", "rustls-pemfile", @@ -2567,7 +3301,17 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" dependencies = [ - "base64 0.21.0", + "base64 0.21.2", +] + +[[package]] +name = "rustls-webpki" +version = "0.100.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b" +dependencies = [ + "ring", + "untrusted", ] [[package]] @@ -2591,6 +3335,16 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "sanitize-filename" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c502bdb638f1396509467cb0580ef3b29aa2a45c5d43e5d84928241280296c" +dependencies = [ + "lazy_static", + "regex", +] + [[package]] name = "schannel" version = "0.1.21" @@ -2606,12 +3360,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" -[[package]] -name = "scratch" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" - [[package]] name = "sct" version = "0.7.0" @@ -2624,9 +3372,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.8.2" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" +checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" dependencies = [ "bitflags", "core-foundation", @@ -2637,9 +3385,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" +checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" dependencies = [ "core-foundation-sys", "libc", @@ -2656,9 +3404,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.162" +version = "1.0.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71b2f6e1ab5c2b98c05f0f35b236b22e8df7ead6ffbf51d7808da7f8817e7ab6" +checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d" dependencies = [ "serde_derive", ] @@ -2675,20 +3423,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.162" +version = "1.0.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a0814352fd64b58489904a44ea8d90cb1a91dcb6b4f5ebabc32c8318e93cb6" +checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.22", ] [[package]] name = "serde_json" -version = "1.0.96" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" +checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3" dependencies = [ "itoa", "ryu", @@ -2703,7 +3451,16 @@ checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.22", +] + +[[package]] +name = "serde_spanned" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +dependencies = [ + "serde", ] [[package]] @@ -2741,16 +3498,28 @@ dependencies = [ ] [[package]] -name = "sha2" -version = "0.10.6" +name = "sha1_smol" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" + +[[package]] +name = "sha2" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" dependencies = [ "cfg-if", "cpufeatures", "digest", ] +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -2787,6 +3556,17 @@ version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +[[package]] +name = "smartstring" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" +dependencies = [ + "autocfg", + "static_assertions", + "version_check", +] + [[package]] name = "socket2" version = "0.4.9" @@ -2797,12 +3577,28 @@ dependencies = [ "winapi", ] +[[package]] +name = "socket2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "spin" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "static_assertions" version = "1.1.0" @@ -2827,9 +3623,9 @@ dependencies = [ [[package]] name = "subtle" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "syn" @@ -2844,9 +3640,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.15" +version = "2.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" +checksum = "2efbeae7acf4eabd6bcdcbd11c92f45231ddda7539edc7806bd1a04a03b24616" dependencies = [ "proc-macro2", "quote", @@ -2904,12 +3700,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "textwrap" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" - [[package]] name = "thiserror" version = "1.0.40" @@ -2927,7 +3717,17 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.22", +] + +[[package]] +name = "thread_local" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +dependencies = [ + "cfg-if", + "once_cell", ] [[package]] @@ -2943,12 +3743,16 @@ dependencies = [ [[package]] name = "time" -version = "0.3.21" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc" +checksum = "ea9e1b3cf1243ae005d9e74085d4d542f3125458f3a81af210d901dcd7411efd" dependencies = [ + "itoa", + "libc", + "num_threads", "serde", "time-core", + "time-macros", ] [[package]] @@ -2957,6 +3761,24 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" +[[package]] +name = "time-macros" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" +dependencies = [ + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -2974,9 +3796,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.28.0" +version = "1.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f" +checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" dependencies = [ "autocfg", "bytes", @@ -2986,7 +3808,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.4.9", "tokio-macros", "windows-sys 0.48.0", ] @@ -2999,7 +3821,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.22", ] [[package]] @@ -3018,11 +3840,21 @@ version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ - "rustls", + "rustls 0.20.8", "tokio", "webpki", ] +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.2", + "tokio", +] + [[package]] name = "tokio-tungstenite" version = "0.17.2" @@ -3058,6 +3890,40 @@ dependencies = [ "serde", ] +[[package]] +name = "toml" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebafdf5ad1220cb59e7d17cf4d2c72015297b75b19a10472f99b89225089240" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266f016b7f039eec8a1a80dfe6156b633d208b9fccca5e4db1d6775b0c4e34a7" +dependencies = [ + "indexmap 2.0.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + [[package]] name = "tower" version = "0.4.13" @@ -3149,20 +4015,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.24" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" +checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.22", ] [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" dependencies = [ "once_cell", ] @@ -3265,10 +4131,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] -name = "unicode-ident" -version = "1.0.8" +name = "unicode-bom" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "63ec69f541d875b783ca40184d655f2927c95f0bffd486faa83cd3ac3529ec32" + +[[package]] +name = "unicode-ident" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" [[package]] name = "unicode-normalization" @@ -3305,12 +4177,12 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" dependencies = [ "form_urlencoded", - "idna 0.3.0", + "idna 0.4.0", "percent-encoding", ] @@ -3320,6 +4192,12 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + [[package]] name = "vcpkg" version = "0.2.15" @@ -3353,7 +4231,7 @@ dependencies = [ "leb128", "log", "walrus-macro", - "wasmparser 0.77.0", + "wasmparser", ] [[package]] @@ -3370,11 +4248,10 @@ dependencies = [ [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] @@ -3398,9 +4275,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.84" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -3408,24 +4285,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.84" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.22", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-cli-support" -version = "0.2.84" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d4780c659b883a19ddb7ced365db19f7f45cd182d832ee14de2b7ef52e88a9f" +checksum = "d21c60239a09bf9bab8dfa752be4e6c637db22296b9ded493800090448692da9" dependencies = [ "anyhow", "base64 0.9.3", @@ -3441,16 +4318,13 @@ dependencies = [ "wasm-bindgen-threads-xform", "wasm-bindgen-wasm-conventions", "wasm-bindgen-wasm-interpreter", - "wit-text", - "wit-validator", - "wit-walrus", ] [[package]] name = "wasm-bindgen-externref-xform" -version = "0.2.84" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d154c3843bf3b635b602ad41b56f505f8f1a25f8a0133fca4bbd0918d74efdc" +checksum = "bafbe1984f67cc12645f12ab65e6145e8ddce1ab265d0be58435f25bb0ce2608" dependencies = [ "anyhow", "walrus", @@ -3458,9 +4332,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.34" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" +checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" dependencies = [ "cfg-if", "js-sys", @@ -3470,9 +4344,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.84" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3480,22 +4354,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.84" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.22", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-multi-value-xform" -version = "0.2.84" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00a577fbd4be358ef8095432189b5c2e6b6e71f5081797c2032572f77d65d26" +checksum = "581419e3995571a1d2d066e360ca1c0c09da097f5a53c98e6f00d96eddaf0ffe" dependencies = [ "anyhow", "walrus", @@ -3503,15 +4377,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.84" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" +checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" [[package]] name = "wasm-bindgen-threads-xform" -version = "0.2.84" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa93941bae037b7b4fac4ecfc132294b828036c5990a806d0e6fd9284297d94" +checksum = "e05d272073981137e8426cf2a6830d43d1f84f988a050b2f8b210f0e266b8983" dependencies = [ "anyhow", "walrus", @@ -3520,9 +4394,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-wasm-conventions" -version = "0.2.84" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8f5de325048d945c90600fdf66b13521f3340d85971287775c36aa99c04466b" +checksum = "0e9c65b1ff5041ea824ca24c519948aec16fb6611c617d601623c0657dfcd47b" dependencies = [ "anyhow", "walrus", @@ -3530,9 +4404,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-wasm-interpreter" -version = "0.2.84" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f695df44962e3a107436282232a2daa185b8453c16be8ddfb637cd2601f31128" +checksum = "7c5c796220738ab5d44666f37205728a74141c0039d1166bcf8110b26bafaa1e" dependencies = [ "anyhow", "log", @@ -3555,30 +4429,15 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.59.0" +version = "0.77.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a950e6a618f62147fd514ff445b2a0b53120d382751960797f85f058c7eda9b9" - -[[package]] -name = "wasmparser" -version = "0.77.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35c86d22e720a07d954ebbed772d01180501afe7d03d464f413bb5f8914a8d6" - -[[package]] -name = "wast" -version = "21.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b1844f66a2bc8526d71690104c0e78a8e59ffa1597b7245769d174ebb91deb5" -dependencies = [ - "leb128", -] +checksum = "5fe3d5405e9ea6c1317a656d6e0820912d8b7b3607823a7596117c8f666daf6f" [[package]] name = "web-sys" -version = "0.3.61" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" +checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" dependencies = [ "js-sys", "wasm-bindgen", @@ -3605,9 +4464,9 @@ dependencies = [ [[package]] name = "widestring" -version = "0.5.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" +checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8" [[package]] name = "winapi" @@ -3640,6 +4499,21 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04662ed0e3e5630dfa9b26e4cb823b817f1a9addda855d973a9458c236556244" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + [[package]] name = "windows" version = "0.48.0" @@ -3796,6 +4670,15 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +[[package]] +name = "winnow" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca0ace3845f0d96209f0375e6d367e3eb87eb65d27d445bdc9f1843a26f39448" +dependencies = [ + "memchr", +] + [[package]] name = "winreg" version = "0.10.1" @@ -3806,67 +4689,13 @@ dependencies = [ ] [[package]] -name = "wit-parser" -version = "0.2.0" +name = "winreg" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f5fd97866f4b9c8e1ed57bcf9446f3d0d8ba37e2dd01c3c612c046c053b06f7" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "anyhow", - "leb128", - "wit-schema-version", -] - -[[package]] -name = "wit-schema-version" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfee4a6a4716eefa0682e7a3b836152e894a3e4f34a9d6c2c3e1c94429bfe36a" - -[[package]] -name = "wit-text" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33358e95c77d660f1c7c07f4a93c2bd89768965e844e3c50730bb4b42658df5f" -dependencies = [ - "anyhow", - "wast", - "wit-writer", -] - -[[package]] -name = "wit-validator" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c11d93d925420e7872b226c4161849c32be38385ccab026b88df99d8ddc6ba6" -dependencies = [ - "anyhow", - "wasmparser 0.59.0", - "wit-parser", - "wit-schema-version", -] - -[[package]] -name = "wit-walrus" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad559e3e4c6404b2a6a675d44129d62a3836e3b951b90112fa1c5feb852757cd" -dependencies = [ - "anyhow", - "id-arena", - "walrus", - "wit-parser", - "wit-schema-version", - "wit-writer", -] - -[[package]] -name = "wit-writer" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ad01ba5e9cbcff799a0689e56a153776ea694cec777f605938cb9880d41a09" -dependencies = [ - "leb128", - "wit-schema-version", + "cfg-if", + "windows-sys 0.48.0", ] [[package]] @@ -3878,6 +4707,12 @@ dependencies = [ "libc", ] +[[package]] +name = "zeroize" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" + [[package]] name = "zip" version = "0.5.13" @@ -3894,9 +4729,9 @@ dependencies = [ [[package]] name = "zip" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e92305c174683d78035cbf1b70e18db6329cc0f1b9cae0a52ca90bf5bfe7125" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" dependencies = [ "aes", "byteorder", @@ -3908,7 +4743,7 @@ dependencies = [ "hmac", "pbkdf2", "sha1", - "time 0.3.21", + "time 0.3.22", "zstd", ] diff --git a/Cargo.toml b/Cargo.toml index 7dca72934..de3644f9f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ license = "MIT/Apache-2.0" [dependencies] # cli core -clap = { version = "3.0.14", features = ["derive"] } +clap = { version = "4.2", features = ["derive"] } thiserror = "1.0.30" wasm-bindgen-cli-support = "0.2" colored = "2.0.0" @@ -83,6 +83,8 @@ dioxus-core = { git = "https://github.com/DioxusLabs/dioxus", features = ["seria dioxus-autofmt = { git = "https://github.com/DioxusLabs/dioxus" } rsx-rosetta = { git = "https://github.com/DioxusLabs/dioxus" } open = "4.1.0" +cargo-generate = "0.18.3" +toml_edit = "0.19.11" [[bin]] path = "src/main.rs" diff --git a/src/cli/cfg.rs b/src/cli/cfg.rs index 20ed7c40e..30ca89ce9 100644 --- a/src/cli/cfg.rs +++ b/src/cli/cfg.rs @@ -4,7 +4,7 @@ use super::*; #[derive(Clone, Debug, Default, Deserialize, Parser)] pub struct ConfigOptsBuild { /// The index HTML file to drive the bundling process [default: index.html] - #[clap(parse(from_os_str))] + #[arg(long)] pub target: Option, /// Build in release mode [default: false] @@ -37,7 +37,7 @@ pub struct ConfigOptsBuild { #[derive(Clone, Debug, Default, Deserialize, Parser)] pub struct ConfigOptsServe { /// The index HTML file to drive the bundling process [default: index.html] - #[clap(parse(from_os_str))] + #[arg(short, long)] pub target: Option, /// Port of dev server diff --git a/src/cli/create/mod.rs b/src/cli/create/mod.rs index c448e66d1..86a5e0a3f 100644 --- a/src/cli/create/mod.rs +++ b/src/cli/create/mod.rs @@ -1,14 +1,9 @@ use super::*; -use crate::custom_error; +use cargo_generate::{GenerateArgs, TemplatePath}; -/// Build the Rust WASM app and all of its assets. #[derive(Clone, Debug, Default, Deserialize, Parser)] #[clap(name = "create")] pub struct Create { - /// Init project name - #[clap(default_value = ".")] - name: String, - /// Template path #[clap(default_value = "gh:dioxuslabs/dioxus-template", long)] template: String, @@ -16,69 +11,66 @@ pub struct Create { impl Create { pub fn create(self) -> Result<()> { - if Self::name_valid_check(self.name.clone()) { - return custom_error!("❗Unsupported project name: '{}'.", &self.name); - } + let mut args = GenerateArgs::default(); + args.template_path = TemplatePath { + auto_path: Some(self.template), + ..Default::default() + }; - let project_path = PathBuf::from(&self.name); - - if project_path.join("Dioxus.toml").is_file() || project_path.join("Cargo.toml").is_file() { - return custom_error!("🧨 Folder '{}' is initialized.", &self.name); - } - - log::info!("🔧 Start: Creating new project '{}'.", self.name); - - let output = Command::new("cargo") - .arg("generate") - .arg("--help") - .stdout(Stdio::piped()) - .stderr(Stdio::piped()) - .output()?; + let path = cargo_generate::generate(args)?; + // first run cargo fmt + let mut cmd = Command::new("cargo"); + let cmd = cmd.arg("fmt").current_dir(&path); + let output = cmd.output().expect("failed to execute process"); if !output.status.success() { - log::warn!("Tool is not installed: cargo-generate, try to install it."); - let install_output = Command::new("cargo") - .arg("install") - .arg("cargo-generate") - .stdout(Stdio::inherit()) - .stderr(Stdio::inherit()) - .output()?; - if !install_output.status.success() { - return custom_error!("Try to install cargo-generate failed."); - } + log::error!("cargo fmt failed"); + log::error!("stdout: {}", String::from_utf8_lossy(&output.stdout)); + log::error!("stderr: {}", String::from_utf8_lossy(&output.stderr)); } - let generate_output = Command::new("cargo") - .arg("generate") - .arg(&self.template) - .arg("--name") - .arg(&self.name) - .arg("--force") - .stdout(Stdio::piped()) - .stderr(Stdio::inherit()) - .output()?; + // then format the toml + let toml_paths = [path.join("Cargo.toml"), path.join("Dioxus.toml")]; + for toml_path in &toml_paths { + let toml = std::fs::read_to_string(toml_path)?; + let mut toml = toml.parse::().map_err(|e| { + anyhow::anyhow!( + "failed to parse toml at {}: {}", + toml_path.display(), + e.to_string() + ) + })?; - if !generate_output.status.success() { - return custom_error!("Generate project failed. Try to update cargo-generate."); + toml.as_table_mut().fmt(); + + let as_string = toml.to_string(); + let new_string = remove_tripple_newlines(&as_string); + let mut file = std::fs::File::create(toml_path)?; + file.write_all(new_string.as_bytes())?; } - let mut dioxus_file = File::open(project_path.join("Dioxus.toml"))?; - let mut meta_file = String::new(); - dioxus_file.read_to_string(&mut meta_file)?; - meta_file = meta_file.replace("{{project-name}}", &self.name); - meta_file = meta_file.replace("{{default-platform}}", "web"); - File::create(project_path.join("Dioxus.toml"))?.write_all(meta_file.as_bytes())?; + // remove any tripple newlines from the readme + let readme_path = path.join("README.md"); + let readme = std::fs::read_to_string(&readme_path)?; + let new_readme = remove_tripple_newlines(&readme); + let mut file = std::fs::File::create(readme_path)?; + file.write_all(new_readme.as_bytes())?; - println!(); - log::info!("💡 Project initialized:"); - log::info!("🎯> cd ./{}", self.name); - log::info!("🎯> dioxus serve"); + log::info!("Generated project at {}", path.display()); Ok(()) } - - fn name_valid_check(name: String) -> bool { - let r = Regex::new(r"^[a-zA-Z][a-zA-Z0-9\-_]$").unwrap(); - r.is_match(&name) - } +} + +fn remove_tripple_newlines(string: &str) -> String { + let mut new_string = String::new(); + for char in string.chars() { + if char == '\n' { + if new_string.ends_with("\n\n") { + continue; + } + } + new_string.push(char); + } + new_string } diff --git a/src/cli/mod.rs b/src/cli/mod.rs index a27b1b794..0d9174bdf 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -17,7 +17,6 @@ use crate::{ }; use clap::{Parser, Subcommand}; use html_parser::Dom; -use regex::Regex; use serde::Deserialize; use std::{ fs::{remove_dir_all, File}, diff --git a/src/cli/translate/mod.rs b/src/cli/translate/mod.rs index 3056a6c77..67067db31 100644 --- a/src/cli/translate/mod.rs +++ b/src/cli/translate/mod.rs @@ -22,7 +22,7 @@ pub struct Translate { pub raw: Option, /// Output file, stdout if not present - #[clap(parse(from_os_str))] + #[arg(short, long)] pub output: Option, } diff --git a/src/server/mod.rs b/src/server/mod.rs index 4f19f00d2..a63a7e6b7 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -150,7 +150,8 @@ pub async fn startup_hot_reload( let dist_path = config.out_dir.clone(); let (reload_tx, _) = broadcast::channel(100); - let FileMapBuildResult { map, errors } = FileMap::::create(config.crate_dir.clone()).unwrap(); + let FileMapBuildResult { map, errors } = + FileMap::::create(config.crate_dir.clone()).unwrap(); for err in errors { log::error!("{}", err); } @@ -219,8 +220,7 @@ pub async fn startup_hot_reload( let mut map = file_map.lock().unwrap(); match map.update_rsx(&path, &crate_dir) { - - Ok( UpdateResult::UpdatedRsx(msgs) )=> { + Ok(UpdateResult::UpdatedRsx(msgs)) => { messages.extend(msgs); } Ok(UpdateResult::NeedsRebuild) => { From eb631f4077288cd438b952d4c18d46eef6fb26ba Mon Sep 17 00:00:00 2001 From: Jason Schein Date: Mon, 26 Jun 2023 17:29:49 -0700 Subject: [PATCH 374/459] Update fermi badge links. (#1109) --- packages/fermi/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/fermi/README.md b/packages/fermi/README.md index f04ec5961..f276dbff5 100644 --- a/packages/fermi/README.md +++ b/packages/fermi/README.md @@ -9,22 +9,22 @@
- - + Crates.io version - - + Download - + docs.rs docs - + CI status From 8a2f9f3fcb37e63b64a92a6ce01511b5137dd122 Mon Sep 17 00:00:00 2001 From: marc2332 Date: Wed, 28 Jun 2023 00:15:00 +0200 Subject: [PATCH 375/459] feat(docs): Improved shared state, use_effect and use_memo docs --- docs/guide/src/en/SUMMARY.md | 2 + docs/guide/src/en/async/use_effect.md | 32 +++++++++++ .../guide/src/en/interactivity/memoization.md | 23 ++++++++ .../src/en/interactivity/sharing_state.md | 13 +++-- examples/shared_state.rs | 54 +++++++++++++++++++ packages/hooks/src/useeffect.rs | 25 ++++++--- packages/hooks/src/usememo.rs | 28 ++++++---- 7 files changed, 158 insertions(+), 19 deletions(-) create mode 100644 docs/guide/src/en/async/use_effect.md create mode 100644 docs/guide/src/en/interactivity/memoization.md create mode 100644 examples/shared_state.rs diff --git a/docs/guide/src/en/SUMMARY.md b/docs/guide/src/en/SUMMARY.md index 62ef5adf7..a44439200 100644 --- a/docs/guide/src/en/SUMMARY.md +++ b/docs/guide/src/en/SUMMARY.md @@ -21,10 +21,12 @@ - [Hooks & Component State](interactivity/hooks.md) - [User Input](interactivity/user_input.md) - [Sharing State](interactivity/sharing_state.md) + - [Memoization](interactivity/memoization.md) - [Custom Hooks](interactivity/custom_hooks.md) - [Dynamic Rendering](interactivity/dynamic_rendering.md) - [Routing](interactivity/router.md) - [Async](async/index.md) + - [UseEffect](async/use_effect.md) - [UseFuture](async/use_future.md) - [UseCoroutine](async/use_coroutine.md) - [Spawning Futures](async/spawn.md) diff --git a/docs/guide/src/en/async/use_effect.md b/docs/guide/src/en/async/use_effect.md new file mode 100644 index 000000000..711492500 --- /dev/null +++ b/docs/guide/src/en/async/use_effect.md @@ -0,0 +1,32 @@ +# UseEffect + +[`use_effect`](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_effect.html) provides a future that executes after the hooks have been applied. + +Whenever the hooks dependencies change, the future will be re-evaluated. This is useful to syncrhonize with external events. + +If a future is pending when the dependencies change, the previous future will be allowed to continue + +> The `dependencies` is tuple of references to values that are `PartialEq + Clone`. + +```rust, no_run +#[inline_props] +fn Profile(cx: Scope, id: &str) -> Element { + let name = use_state(cx, || "Default name"); + + // Only fetch the user data when the id changes. + use_effect(cx, (id,), |(id,)| async move { + let user = fetch_user(id).await; + name.set(user.name); + }); + + render!( + p { "{name}" } + ) +} + +fn app(cx: Scope) -> Element { + render!( + Profile { id: "dioxusLabs" } + ) +} +``` diff --git a/docs/guide/src/en/interactivity/memoization.md b/docs/guide/src/en/interactivity/memoization.md new file mode 100644 index 000000000..cc67c02c4 --- /dev/null +++ b/docs/guide/src/en/interactivity/memoization.md @@ -0,0 +1,23 @@ +# Memoization + +[`use_memo`](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_memo.html) let's you memorize values and therefore save computation time. This is useful for expensive calculations. + +```rust, no_run +#[inline_props] +fn Calculator(cx: Scope, number: usize) -> Element { + let bigger_number = use_memo(cx, (number,), |(number,)| { + // This will only be calculated when `number` has changed. + number * 100 + }): + + render!( + p { "{bigger_number}" } + ) +} + +fn app(cx: Scope) -> Element { + render!( + Calculator { number: 0 } + ) +} +``` diff --git a/docs/guide/src/en/interactivity/sharing_state.md b/docs/guide/src/en/interactivity/sharing_state.md index 75ace8973..3f9b3cdc2 100644 --- a/docs/guide/src/en/interactivity/sharing_state.md +++ b/docs/guide/src/en/interactivity/sharing_state.md @@ -11,6 +11,7 @@ Suppose we want to build a meme editor. We want to have an input to edit the mem > Of course, in this simple example, we could write everything in one component – but it is better to split everything out in smaller components to make the code more reusable, maintainable, and performant (this is even more important for larger, complex apps). We start with a `Meme` component, responsible for rendering a meme with a given caption: + ```rust {{#include ../../../examples/meme_editor.rs:meme_component}} ``` @@ -24,12 +25,14 @@ We also create a caption editor, completely decoupled from the meme. The caption ``` Finally, a third component will render the other two as children. It will be responsible for keeping the state and passing down the relevant props. + ```rust {{#include ../../../examples/meme_editor.rs:meme_editor}} ``` + ![Meme Editor Screenshot: An old plastic skeleton sitting on a park bench. Caption: "me waiting for a language feature"](./images/meme_editor_screenshot.png) -## Using Context +## Using Shared State Sometimes, some state needs to be shared between multiple components far down the tree, and passing it down through props is very inconvenient. @@ -39,7 +42,7 @@ Suppose now that we want to implement a dark mode toggle for our app. To achieve Now, we could write another `use_state` in the top component, and pass `is_dark_mode` down to every component through props. But think about what will happen as the app grows in complexity – almost every component that renders any CSS is going to need to know if dark mode is enabled or not – so they'll all need the same dark mode prop. And every parent component will need to pass it down to them. Imagine how messy and verbose that would get, especially if we had components several levels deep! -Dioxus offers a better solution than this "prop drilling" – providing context. The [`use_context_provider`](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_context_provider.html) hook is similar to `use_ref`, but it makes it available through [`use_context`](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_context.html) for all children components. +Dioxus offers a better solution than this "prop drilling" – providing context. The [`use_shared_state_provider`](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_shared_state_provider.html) hook is similar to `use_ref`, but it makes it available through [`use_shared_state`](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_shared_state.html) for all children components. First, we have to create a struct for our dark mode configuration: @@ -48,19 +51,21 @@ First, we have to create a struct for our dark mode configuration: ``` Now, in a top-level component (like `App`), we can provide the `DarkMode` context to all children components: + ```rust {{#include ../../../examples/meme_editor_dark_mode.rs:context_provider}} ``` As a result, any child component of `App` (direct or not), can access the `DarkMode` context. + ```rust {{#include ../../../examples/meme_editor_dark_mode.rs:use_context}} ``` -> `use_context` returns `Option>` here. If the context has been provided, the value is `Some(UseSharedState)`, which you can call `.read` or `.write` on, similarly to `UseRef`. Otherwise, the value is `None`. +> `use_shared_state` returns `Option>` here. If the context has been provided, the value is `Some(UseSharedState)`, which you can call `.read` or `.write` on, similarly to `UseRef`. Otherwise, the value is `None`. For example, here's how we would implement the dark mode toggle, which both reads the context (to determine what color it should render) and writes to it (to toggle dark mode): + ```rust {{#include ../../../examples/meme_editor_dark_mode.rs:toggle}} ``` - diff --git a/examples/shared_state.rs b/examples/shared_state.rs new file mode 100644 index 000000000..1072ce50d --- /dev/null +++ b/examples/shared_state.rs @@ -0,0 +1,54 @@ +#![allow(non_snake_case)] + +use dioxus::prelude::*; + +fn main() { + dioxus_desktop::launch(App); +} + +struct DarkMode(bool); + +#[rustfmt::skip] +pub fn App(cx: Scope) -> Element { + use_shared_state_provider(cx, || DarkMode(false)); + + render!( + DarkModeToggle {}, + AppBody {} + ) +} + +pub fn DarkModeToggle(cx: Scope) -> Element { + let dark_mode = use_shared_state::(cx).unwrap(); + + let style = if dark_mode.read().0 { + "color:white" + } else { + "" + }; + + cx.render(rsx!(label { + style: "{style}", + "Dark Mode", + input { + r#type: "checkbox", + oninput: move |event| { + let is_enabled = event.value == "true"; + dark_mode.write().0 = is_enabled; + }, + }, + })) +} + +fn AppBody(cx: Scope) -> Element { + let dark_mode = use_shared_state::(cx).unwrap(); + + let is_dark_mode = dark_mode.read().0; + let answer = if is_dark_mode { "Yes" } else { "No" }; + + render!( + p { + "Is Dark mode enabled? {answer}" + } + ) +} diff --git a/packages/hooks/src/useeffect.rs b/packages/hooks/src/useeffect.rs index f9ef70b84..b52b89c3c 100644 --- a/packages/hooks/src/useeffect.rs +++ b/packages/hooks/src/useeffect.rs @@ -9,17 +9,30 @@ use crate::UseFutureDep; /// If a future is pending when the dependencies change, the previous future /// will be allowed to continue /// -/// - dependencies: a tuple of references to values that are PartialEq + Clone +/// - dependencies: a tuple of references to values that are `PartialEq` + `Clone` /// /// ## Examples /// -/// ```rust, ignore +/// ```rust, no_run /// /// #[inline_props] -/// fn app(cx: Scope, name: &str) -> Element { -/// use_effect(cx, (name,), |(name,)| async move { -/// set_title(name); -/// })) +/// fn Profile(cx: Scope, id: &str) -> Element { +/// let name = use_state(cx, || "Default name"); +/// +/// use_effect(cx, (id,), |(id,)| async move { +/// let user = fetch_user(id).await; +/// name.set(user.name); +/// }); +/// +/// render!( +/// p { "{name}" } +/// ) +/// } +/// +/// fn app(cx: Scope) -> Element { +/// render!( +/// Profile { id: "dioxusLabs" } +/// ) /// } /// ``` pub fn use_effect(cx: &ScopeState, dependencies: D, future: impl FnOnce(D::Out) -> F) diff --git a/packages/hooks/src/usememo.rs b/packages/hooks/src/usememo.rs index 8cc5540e6..f99d1e893 100644 --- a/packages/hooks/src/usememo.rs +++ b/packages/hooks/src/usememo.rs @@ -2,21 +2,31 @@ use dioxus_core::ScopeState; use crate::UseFutureDep; -/// A hook that provides a callback that executes after the hooks have been applied +/// A hook that provides a callback that executes if the dependencies change. +/// This is useful to avoid running computation-expensive calculations even when the data doesn't change. /// -/// Whenever the hooks dependencies change, the callback will be re-evaluated. -/// -/// - dependencies: a tuple of references to values that are PartialEq + Clone +/// - dependencies: a tuple of references to values that are `PartialEq` + `Clone` /// /// ## Examples /// -/// ```rust, ignore +/// ```rust, no_run /// /// #[inline_props] -/// fn app(cx: Scope, name: &str) -> Element { -/// use_memo(cx, (name,), |(name,)| { -/// expensive_computation(name); -/// })) +/// fn Calculator(cx: Scope, number: usize) -> Element { +/// let bigger_number = use_memo(cx, (number,), |(number,)| { +/// // This will only be calculated when `number` has changed. +/// number * 100 +/// }): +/// +/// render!( +/// p { "{bigger_number}" } +/// ) +/// } +/// +/// fn app(cx: Scope) -> Element { +/// render!( +/// Calculator { number: 0 } +/// ) /// } /// ``` pub fn use_memo(cx: &ScopeState, dependencies: D, callback: impl FnOnce(D::Out) -> T) -> &T From a3978d60a898088c68376c51b39c30452c78b854 Mon Sep 17 00:00:00 2001 From: marc2332 Date: Wed, 28 Jun 2023 00:17:36 +0200 Subject: [PATCH 376/459] update --- examples/shared_state.rs | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/examples/shared_state.rs b/examples/shared_state.rs index 1072ce50d..6cd4d874e 100644 --- a/examples/shared_state.rs +++ b/examples/shared_state.rs @@ -21,23 +21,13 @@ pub fn App(cx: Scope) -> Element { pub fn DarkModeToggle(cx: Scope) -> Element { let dark_mode = use_shared_state::(cx).unwrap(); - let style = if dark_mode.read().0 { - "color:white" - } else { - "" - }; - - cx.render(rsx!(label { - style: "{style}", - "Dark Mode", - input { - r#type: "checkbox", - oninput: move |event| { - let is_enabled = event.value == "true"; - dark_mode.write().0 = is_enabled; - }, + render!(input { + r#type: "checkbox", + oninput: move |event| { + let is_enabled = event.value == "true"; + dark_mode.write().0 = is_enabled; }, - })) + }) } fn AppBody(cx: Scope) -> Element { From 90f80e4dc26ad6d7a7f536793bdbf8cf7465e03f Mon Sep 17 00:00:00 2001 From: Jon Kelley Date: Tue, 27 Jun 2023 17:40:41 -0700 Subject: [PATCH 377/459] Fix `cargo doc` by using a fixed variant of interprocess (#1129) * fix docs compilation * dont change random codeblock --- packages/hot-reload/Cargo.toml | 2 +- packages/hot-reload/src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/hot-reload/Cargo.toml b/packages/hot-reload/Cargo.toml index 50c4114a7..b53a87809 100644 --- a/packages/hot-reload/Cargo.toml +++ b/packages/hot-reload/Cargo.toml @@ -16,7 +16,7 @@ dioxus-rsx = { workspace = true } dioxus-core = { workspace = true, features = ["serialize"] } dioxus-html = { workspace = true, features = ["hot-reload-context"] } -interprocess = { version = "1.2.1" } +interprocess-docfix = { version = "1.2.1" } notify = "5.0.0" chrono = { version = "0.4.24", default-features = false, features = ["clock"] } serde_json = "1.0.91" diff --git a/packages/hot-reload/src/lib.rs b/packages/hot-reload/src/lib.rs index 69f132fa3..48ee50a59 100644 --- a/packages/hot-reload/src/lib.rs +++ b/packages/hot-reload/src/lib.rs @@ -10,7 +10,7 @@ use dioxus_rsx::{ hot_reload::{FileMap, FileMapBuildResult, UpdateResult}, HotReloadingContext, }; -use interprocess::local_socket::{LocalSocketListener, LocalSocketStream}; +use interprocess_docfix::local_socket::{LocalSocketListener, LocalSocketStream}; use notify::{RecommendedWatcher, RecursiveMode, Watcher}; pub use dioxus_html::HtmlCtx; From 98fc15315220389e4c0a76903d7516be84d5331e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Esp=C3=ADn?= Date: Wed, 28 Jun 2023 16:32:42 +0200 Subject: [PATCH 378/459] Fix: Remove play button from guide example (#1118) * fix: Remove play button from guide example * Update index.md * update other examples --- .../advanced-guides/06-subscription-api.md | 4 +- .../advanced-guides/10-concurrent-mode.md | 10 +- .../__unused/advanced-guides/11-arena-memo.md | 4 +- .../en/__unused/advanced-guides/12-signals.md | 20 ++-- .../__unused/advanced-guides/13-subtrees.md | 4 +- .../advanced-guides/custom-renderer.md | 40 ++++--- .../src/en/__unused/advanced-guides/rsx.md | 12 +- .../en/__unused/advanced-guides/testing.md | 4 +- .../src/en/__unused/attribute_spreading.md | 7 +- docs/guide/src/en/__unused/composing.md | 31 ++--- docs/guide/src/en/__unused/fanout.md | 6 +- docs/guide/src/en/__unused/index.md | 8 +- docs/guide/src/en/__unused/localstate.md | 23 ++-- docs/guide/src/en/__unused/memoization.md | 4 +- docs/guide/src/en/__unused/model_pattern.md | 11 +- docs/guide/src/en/async/spawn.md | 6 +- docs/guide/src/en/async/use_coroutine.md | 25 ++-- docs/guide/src/en/async/use_future.md | 10 +- .../src/en/best_practices/antipatterns.md | 6 +- .../src/en/best_practices/error_handling.md | 27 ++--- .../src/en/contributing/walkthrough_readme.md | 6 +- docs/guide/src/en/custom_renderer/index.md | 30 ++--- .../en/describing_ui/component_children.md | 8 +- .../src/en/describing_ui/component_props.md | 34 +++--- docs/guide/src/en/describing_ui/components.md | 6 +- docs/guide/src/en/describing_ui/index.md | 58 +++++---- .../en/describing_ui/special_attributes.md | 9 +- .../guide/src/en/fullstack/getting_started.md | 6 +- .../src/en/fullstack/server_functions.md | 2 +- docs/guide/src/en/getting_started/desktop.md | 2 +- .../src/en/getting_started/hot_reload.md | 2 +- docs/guide/src/en/getting_started/liveview.md | 12 +- docs/guide/src/en/getting_started/mobile.md | 6 +- docs/guide/src/en/getting_started/ssr.md | 6 +- docs/guide/src/en/getting_started/tui.md | 4 +- docs/guide/src/en/getting_started/web.md | 2 +- docs/guide/src/en/index.md | 7 +- .../src/en/interactivity/custom_hooks.md | 14 +-- .../src/en/interactivity/dynamic_rendering.md | 13 +-- .../src/en/interactivity/event_handlers.md | 12 +- docs/guide/src/en/interactivity/hooks.md | 20 ++-- docs/guide/src/en/interactivity/router.md | 12 +- .../src/en/interactivity/sharing_state.md | 21 ++-- docs/guide/src/en/interactivity/user_input.md | 8 +- docs/guide/src/pt-br/async/spawn.md | 6 +- docs/guide/src/pt-br/async/use_coroutine.md | 16 +-- docs/guide/src/pt-br/async/use_future.md | 6 +- .../src/pt-br/best_practices/antipatterns.md | 4 +- .../pt-br/best_practices/error_handling.md | 18 +-- docs/guide/src/pt-br/custom_renderer/index.md | 110 +++++++++--------- .../pt-br/describing_ui/component_children.md | 8 +- .../pt-br/describing_ui/component_props.md | 28 ++--- .../src/pt-br/describing_ui/components.md | 6 +- docs/guide/src/pt-br/describing_ui/index.md | 16 +-- .../pt-br/describing_ui/special_attributes.md | 4 +- .../src/pt-br/getting_started/desktop.md | 2 +- .../guide/src/pt-br/getting_started/mobile.md | 2 +- docs/guide/src/pt-br/getting_started/ssr.md | 8 +- docs/guide/src/pt-br/getting_started/tui.md | 4 +- docs/guide/src/pt-br/getting_started/web.md | 2 +- docs/guide/src/pt-br/index.md | 2 +- .../src/pt-br/interactivity/custom_hooks.md | 2 +- .../pt-br/interactivity/dynamic_rendering.md | 8 +- .../src/pt-br/interactivity/event_handlers.md | 10 +- docs/guide/src/pt-br/interactivity/hooks.md | 14 +-- docs/guide/src/pt-br/interactivity/router.md | 8 +- .../src/pt-br/interactivity/sharing_state.md | 14 +-- .../src/pt-br/interactivity/user_input.md | 4 +- docs/posts/release-0-2-0.md | 36 +++--- docs/posts/release.md | 34 +++--- .../src/guide/custom_renderer_pt-br.md | 30 ++--- docs/reference/src/guide/rsx_in_depth.md | 20 ++-- .../reference/src/guide/rsx_in_depth_pt-br.md | 20 ++-- docs/reference/src/platforms/desktop.md | 2 +- 74 files changed, 503 insertions(+), 503 deletions(-) diff --git a/docs/guide/src/en/__unused/advanced-guides/06-subscription-api.md b/docs/guide/src/en/__unused/advanced-guides/06-subscription-api.md index 19ec66563..1d53a8d61 100644 --- a/docs/guide/src/en/__unused/advanced-guides/06-subscription-api.md +++ b/docs/guide/src/en/__unused/advanced-guides/06-subscription-api.md @@ -2,7 +2,7 @@ Yew subscriptions are used to schedule update for components into the future. The `Context` object can create subscriptions: -```rust +```rust, no_run fn Component(cx: Component) -> DomTree { let update = cx.schedule(); @@ -19,7 +19,7 @@ The subscription API exposes this functionality allowing hooks and state managem some state or event occurs outside of the component. For instance, the `use_context` hook uses this to subscribe components that use a particular context. -```rust +```rust, no_run fn use_context(cx: Scope) -> I { } diff --git a/docs/guide/src/en/__unused/advanced-guides/10-concurrent-mode.md b/docs/guide/src/en/__unused/advanced-guides/10-concurrent-mode.md index 6bbebbeed..b92897157 100644 --- a/docs/guide/src/en/__unused/advanced-guides/10-concurrent-mode.md +++ b/docs/guide/src/en/__unused/advanced-guides/10-concurrent-mode.md @@ -4,7 +4,7 @@ Concurrent mode provides a mechanism for building efficient asynchronous compone To make a component asynchronous, simply change its function signature to async. -```rust +```rust, no_run fn Example(cx: Scope) -> Vnode { rsx!{
"Hello world!"
} } @@ -12,7 +12,7 @@ fn Example(cx: Scope) -> Vnode { becomes -```rust +```rust, no_run async fn Example(cx: Scope) -> Vnode { rsx!{
"Hello world!"
} } @@ -20,7 +20,7 @@ async fn Example(cx: Scope) -> Vnode { Now, logic in components can be awaited to delay updates of the component and its children. Like so: -```rust +```rust, no_run async fn Example(cx: Scope) -> Vnode { let name = fetch_name().await; rsx!{
"Hello {name}"
} @@ -39,7 +39,7 @@ Instead, we suggest using hooks and future combinators that can safely utilize t As part of our Dioxus hooks crate, we provide a data loader hook which pauses a component until its async dependencies are ready. This caches requests, reruns the fetch if dependencies have changed, and provides the option to render something else while the component is loading. -```rust +```rust, no_run async fn ExampleLoader(cx: Scope) -> Vnode { /* Fetch, pause the component from rendering at all. @@ -61,7 +61,7 @@ async fn ExampleLoader(cx: Scope) -> Vnode { } ``` -```rust +```rust, no_run async fn Example(cx: Scope) -> DomTree { // Diff this set between the last set // Check if we have any outstanding tasks? diff --git a/docs/guide/src/en/__unused/advanced-guides/11-arena-memo.md b/docs/guide/src/en/__unused/advanced-guides/11-arena-memo.md index ca44a6b7e..49fedda11 100644 --- a/docs/guide/src/en/__unused/advanced-guides/11-arena-memo.md +++ b/docs/guide/src/en/__unused/advanced-guides/11-arena-memo.md @@ -10,7 +10,7 @@ https://dmitripavlutin.com/use-react-memo-wisely/ This behavior is defined as an attribute implicit to user components. When in React land you might wrap a component with `react.memo`, Dioxus components are automatically memoized via an implicit attribute. You can manually configure this behavior on any component with "nomemo" to disable memoization. -```rust +```rust, no_run fn test() -> DomTree { html! { <> @@ -42,7 +42,7 @@ fn test_component(cx: Scope, name: String) -> Element { Take a component like this: -```rust +```rust, no_run fn test(cx: Scope) -> DomTree { let Bundle { alpha, beta, gamma } = use_context::(cx); html! { diff --git a/docs/guide/src/en/__unused/advanced-guides/12-signals.md b/docs/guide/src/en/__unused/advanced-guides/12-signals.md index c7012a119..df13b91d8 100644 --- a/docs/guide/src/en/__unused/advanced-guides/12-signals.md +++ b/docs/guide/src/en/__unused/advanced-guides/12-signals.md @@ -10,7 +10,7 @@ By default, Dioxus will only try to diff subtrees of components with dynamic con Your component today might look something like this: -```rust +```rust, no_run fn Comp(cx: Scope) -> DomTree { let (title, set_title) = use_state(cx, || "Title".to_string()); cx.render(rsx!{ @@ -24,7 +24,7 @@ fn Comp(cx: Scope) -> DomTree { This component is fairly straightforward – the input updates its own value on every change. However, every call to set_title will re-render the component. If we add a large list, then every time we update the title input, Dioxus will need to diff the entire list, over, and over, and over. This is **a lot** of wasted clock-cycles! -```rust +```rust, no_run fn Comp(cx: Scope) -> DomTree { let (title, set_title) = use_state(cx, || "Title".to_string()); cx.render(rsx!{ @@ -47,7 +47,7 @@ Many experienced React developers will just say "this is bad design" – but we We can use signals to generate a two-way binding between data and the input box. Our text input is now just a two-line component! -```rust +```rust, no_run fn Comp(cx: Scope) -> DomTree { let mut title = use_signal(cx, || String::from("Title")); cx.render(rsx!(input { value: title })) @@ -56,7 +56,7 @@ fn Comp(cx: Scope) -> DomTree { For a slightly more interesting example, this component calculates the sum between two numbers, but totally skips the diffing process. -```rust +```rust, no_run fn Calculator(cx: Scope) -> DomTree { let mut a = use_signal(cx, || 0); let mut b = use_signal(cx, || 0); @@ -71,7 +71,7 @@ fn Calculator(cx: Scope) -> DomTree { Do you notice how we can use built-in operations on signals? Under the hood, we actually create a new derived signal that depends on `a` and `b`. Whenever `a` or `b` update, then `c` will update. If we need to create a new derived signal that's more complex than a basic operation (`std::ops`) we can either chain signals together or combine them: -```rust +```rust, no_run let mut a = use_signal(cx, || 0); let mut b = use_signal(cx, || 0); @@ -83,7 +83,7 @@ let c = a.with(b).map(|(a, b)| *a + *b); If we ever need to get the value out of a signal, we can simply `deref` it. -```rust +```rust, no_run let mut a = use_signal(cx, || 0); let c = *a + *b; ``` @@ -94,7 +94,7 @@ Calling `deref` or `deref_mut` is actually more complex than it seems. When a va Sometimes you want a signal to propagate across your app, either through far-away siblings or through deeply-nested components. In these cases, we use Dirac: Dioxus's first-class state management toolkit. Dirac atoms automatically implement the Signal API. This component will bind the input element to the `TITLE` atom. -```rust +```rust, no_run const TITLE: Atom = || "".to_string(); const Provider: Component = |cx|{ let title = use_signal(cx, &TITLE); @@ -104,7 +104,7 @@ const Provider: Component = |cx|{ If we use the `TITLE` atom in another component, we can cause updates to flow between components without calling render or diffing either component trees: -```rust +```rust, no_run const Receiver: Component = |cx|{ let title = use_signal(cx, &TITLE); log::info!("This will only be called once!"); @@ -130,7 +130,7 @@ By default, Dioxus is limited when you use iter/map. With the `For` component, y Dioxus automatically understands how to use your signals when mixed with iterators through `Deref`/`DerefMut`. This lets you efficiently map collections while avoiding the re-rendering of lists. In essence, signals act as a hint to Dioxus on how to avoid un-necessary checks and renders, making your app faster. -```rust +```rust, no_run const DICT: AtomFamily = |_| {}; const List: Component = |cx|{ let dict = use_signal(cx, &DICT); @@ -146,7 +146,7 @@ const List: Component = |cx|{ Apps that use signals will enjoy a pleasant hybrid of server-side and client-side rendering. -```rust +```rust, no_run ``` diff --git a/docs/guide/src/en/__unused/advanced-guides/13-subtrees.md b/docs/guide/src/en/__unused/advanced-guides/13-subtrees.md index 0108186eb..d7a8ba1d7 100644 --- a/docs/guide/src/en/__unused/advanced-guides/13-subtrees.md +++ b/docs/guide/src/en/__unused/advanced-guides/13-subtrees.md @@ -22,13 +22,11 @@ The desktop renderer comes pre-loaded with the window and notification subtree p Subtrees also solve the "bridging" issues in React where two different renderers need two different VirtualDoms to work properly. In Dioxus, you only ever need one VirtualDom and the right renderer plugins. - ## API Due to their importance in the hierarchy, Components – not nodes – are treated as subtree roots. - -```rust +```rust, no_run fn Subtree

(cx: Scope

) -> DomTree { diff --git a/docs/guide/src/en/__unused/advanced-guides/custom-renderer.md b/docs/guide/src/en/__unused/advanced-guides/custom-renderer.md index 194fff54a..b14243dae 100644 --- a/docs/guide/src/en/__unused/advanced-guides/custom-renderer.md +++ b/docs/guide/src/en/__unused/advanced-guides/custom-renderer.md @@ -22,7 +22,7 @@ For reference, check out the WebSys renderer as a starting point for your custom The current `RealDom` trait lives in `dioxus-core/diff`. A version of it is provided here (but might not be up-to-date): -```rust +```rust, no_run pub trait RealDom<'a> { fn handle_edit(&mut self, edit: DomEdit); fn request_available_node(&mut self) -> ElementId; @@ -32,7 +32,7 @@ pub trait RealDom<'a> { For reference, the "DomEdit" type is a serialized enum that represents an atomic operation occurring on the RealDom. The variants roughly follow this set: -```rust +```rust, no_run enum DomEdit { PushRoot, AppendChildren, @@ -51,12 +51,11 @@ enum DomEdit { The Dioxus diffing mechanism operates as a [stack machine](https://en.wikipedia.org/wiki/Stack_machine) where the "push_root" method pushes a new "real" DOM node onto the stack and "append_child" and "replace_with" both remove nodes from the stack. - ### An example For the sake of understanding, lets consider this example – a very simple UI declaration: -```rust +```rust, no_run rsx!( h1 {"hello world"} ) ``` @@ -64,7 +63,7 @@ To get things started, Dioxus must first navigate to the container of this h1 ta When the renderer receives this instruction, it pushes the actual Node onto its own stack. The real renderer's stack will look like this: -```rust +```rust, no_run instructions: [ PushRoot(Container) ] @@ -75,7 +74,7 @@ stack: [ Next, Dioxus will encounter the h1 node. The diff algorithm decides that this node needs to be created, so Dioxus will generate the DomEdit `CreateElement`. When the renderer receives this instruction, it will create an unmounted node and push into its own stack: -```rust +```rust, no_run instructions: [ PushRoot(Container), CreateElement(h1), @@ -85,8 +84,10 @@ stack: [ h1, ] ``` + Next, Dioxus sees the text node, and generates the `CreateTextNode` DomEdit: -```rust + +```rust, no_run instructions: [ PushRoot(Container), CreateElement(h1), @@ -98,9 +99,10 @@ stack: [ "hello world" ] ``` + Remember, the text node is not attached to anything (it is unmounted) so Dioxus needs to generate an Edit that connects the text node to the h1 element. It depends on the situation, but in this case we use `AppendChildren`. This pops the text node off the stack, leaving the h1 element as the next element in line. -```rust +```rust, no_run instructions: [ PushRoot(Container), CreateElement(h1), @@ -112,8 +114,10 @@ stack: [ h1 ] ``` + We call `AppendChildren` again, popping off the h1 node and attaching it to the parent: -```rust + +```rust, no_run instructions: [ PushRoot(Container), CreateElement(h1), @@ -125,8 +129,10 @@ stack: [ ContainerNode, ] ``` + Finally, the container is popped since we don't need it anymore. -```rust + +```rust, no_run instructions: [ PushRoot(Container), CreateElement(h1), @@ -137,8 +143,10 @@ instructions: [ ] stack: [] ``` + Over time, our stack looked like this: -```rust + +```rust, no_run [] [Container] [Container, h1] @@ -164,7 +172,7 @@ Like most GUIs, Dioxus relies on an event loop to progress the VirtualDOM. The V The code for the WebSys implementation is straightforward, so we'll add it here to demonstrate how simple an event loop is: -```rust +```rust, no_run pub async fn run(&mut self) -> dioxus_core::error::Result<()> { // Push the body element onto the WebsysDom's stack machine let mut websys_dom = crate::new::WebsysDom::new(prepare_websys_dom()); @@ -194,7 +202,7 @@ pub async fn run(&mut self) -> dioxus_core::error::Result<()> { It's important that you decode the real events from your event system into Dioxus' synthetic event system (synthetic meaning abstracted). This simply means matching your event type and creating a Dioxus `VirtualEvent` type. Your custom event must implement the corresponding event trait. Right now, the VirtualEvent system is modeled almost entirely around the HTML spec, but we are interested in slimming it down. -```rust +```rust, no_run fn virtual_event_from_websys_event(event: &web_sys::Event) -> VirtualEvent { match event.type_().as_str() { "keydown" | "keypress" | "keyup" => { @@ -224,7 +232,7 @@ These custom elements are defined as unit structs with trait implementations. For example, the `div` element is (approximately!) defined as such: -```rust +```rust, no_run struct div; impl div { /// Some glorious documentation about the class property. @@ -235,8 +243,8 @@ impl div { // more attributes } ``` -You've probably noticed that many elements in the `rsx!` and `html!` macros support on-hover documentation. The approach we take to custom elements means that the unit struct is created immediately where the element is used in the macro. When the macro is expanded, the doc comments still apply to the unit struct, giving tons of in-editor feedback, even inside a proc macro. +You've probably noticed that many elements in the `rsx!` and `html!` macros support on-hover documentation. The approach we take to custom elements means that the unit struct is created immediately where the element is used in the macro. When the macro is expanded, the doc comments still apply to the unit struct, giving tons of in-editor feedback, even inside a proc macro. ## Compatibility @@ -252,7 +260,7 @@ The best hooks will properly detect the target platform and still provide functi This particular code _will panic_ due to the unwrap on downcast_ref. Try to avoid these types of patterns. -```rust +```rust, no_run let div_ref = use_node_ref(cx); cx.render(rsx!{ diff --git a/docs/guide/src/en/__unused/advanced-guides/rsx.md b/docs/guide/src/en/__unused/advanced-guides/rsx.md index 062246490..169a57875 100644 --- a/docs/guide/src/en/__unused/advanced-guides/rsx.md +++ b/docs/guide/src/en/__unused/advanced-guides/rsx.md @@ -5,11 +5,14 @@ Many modern frameworks provide a domain-specific-language for declaring user-int With Dioxus, we actually ship two different macros – a macro that mimics JSX (the `html!` macro) and a macro that mimics Rust's native nested-struct syntax (the `rsx!` macro). These macros simply transform their inputs into NodeFactory calls. For instance, this html! call: -```rust + +```rust, no_run html!(

"hello world"
) ``` + becomes this NodeFactory call: -```rust + +```rust, no_run |f| f.element( dioxus_elements::div, // tag [], // listeners @@ -18,6 +21,7 @@ becomes this NodeFactory call: None // key ) ``` + The NodeFactory API is fairly ergonomic, making it a viable option to use directly. The NodeFactory API is also compile-time correct and has incredible syntax highlighting support. We use what Rust calls a "unit type" – the `dioxus_elements::div` and associated methods to ensure that a `div` can only have attributes associated with `div`s. This lets us tack on relevant documentation, autocomplete support, and jump-to-definition for methods and attributes. ![Compile time correct syntax](../images/compiletimecorrect.png) @@ -28,7 +32,7 @@ The html! macro supports a limited subset of the html standard. Rust's macro par However, writing HTML by hand is a bit tedious – IDE tools for Rust don't support linting/autocomplete/syntax highlighting. We suggest using RSX – it's more natural for Rust programs and _does_ integrate well with Rust IDE tools. -```rust +```rust, no_run let name = "jane"; let pending = false; let count = 10; @@ -50,7 +54,7 @@ When helpful, the Dioxus VSCode extension provides a way of converting a selecti It's also a bit easier on the eyes than HTML. -```rust +```rust, no_run dioxus::ssr::render_lazy(rsx! { div { p {"Hello, {name}!"} diff --git a/docs/guide/src/en/__unused/advanced-guides/testing.md b/docs/guide/src/en/__unused/advanced-guides/testing.md index 2f0f97b67..87e72309c 100644 --- a/docs/guide/src/en/__unused/advanced-guides/testing.md +++ b/docs/guide/src/en/__unused/advanced-guides/testing.md @@ -2,7 +2,7 @@ To test your Rust code, you can annotate any function with the `#[test]` block. In VSCode with RA, this will provide a lens to click and run the test. -```rust +```rust, no_run #[test] fn component_runs() { assert!(true) @@ -11,7 +11,7 @@ fn component_runs() { This will test your Rust code _without_ going through the browser. This is ideal for squashing logic bugs and ensuring components render appropriately when the browsers's DOM is not needed. If you need to run tests in the browser, you can annotate your blocks with the `#[dioxus::test]` block. -```rust +```rust, no_run #[dioxus::test] fn runs_in_browser() { // ... diff --git a/docs/guide/src/en/__unused/attribute_spreading.md b/docs/guide/src/en/__unused/attribute_spreading.md index fcf799f3d..9bbb30698 100644 --- a/docs/guide/src/en/__unused/attribute_spreading.md +++ b/docs/guide/src/en/__unused/attribute_spreading.md @@ -1,6 +1,6 @@ In the cases where you need to pass arbitrary element properties into a component – say to add more functionality to the `` tag, Dioxus will accept any quoted fields. This is similar to adding arbitrary fields to regular elements using quotes. -```rust +```rust, no_run rsx!( Clickable { @@ -13,7 +13,7 @@ rsx!( For a component to accept these attributes, you must add an `attributes` field to your component's properties. We can use the spread syntax to add these attributes to whatever nodes are in our component. -```rust +```rust, no_run #[derive(Props)] struct ClickableProps<'a> { attributes: Attributes<'a> @@ -26,4 +26,5 @@ fn clickable(cx: Scope>) -> Element { "Any link, anywhere" } )) -} \ No newline at end of file +} +``` diff --git a/docs/guide/src/en/__unused/composing.md b/docs/guide/src/en/__unused/composing.md index 06648a4c1..82435d6f3 100644 --- a/docs/guide/src/en/__unused/composing.md +++ b/docs/guide/src/en/__unused/composing.md @@ -1,6 +1,6 @@ # Thinking in Reactively -We've finally reached the point in our tutorial where we can talk about the theory of Reactivity. We've talked about defining a declarative view, but not about the aspects that make our code *reactive*. +We've finally reached the point in our tutorial where we can talk about the theory of Reactivity. We've talked about defining a declarative view, but not about the aspects that make our code _reactive_. Understanding the theory of reactive programming is essential to making sense of Dioxus and writing effective, performant UIs. @@ -15,7 +15,7 @@ This section is a bit long, but worth the read. We recommend coffee, tea, and/or ## Reactive Programming -Dioxus is one of a handful of Rust libraries that provide a "Reactive Programming Model". The term "Reactive programming" is a classification of programming paradigm – much like functional or imperative programming. This is a very important distinction since it affects how we *think* about our code. +Dioxus is one of a handful of Rust libraries that provide a "Reactive Programming Model". The term "Reactive programming" is a classification of programming paradigm – much like functional or imperative programming. This is a very important distinction since it affects how we _think_ about our code. Reactive programming is a programming model concerned with deriving computations from asynchronous data flow. Most reactive programs are comprised of datasources, intermediate computations, and a final result. @@ -33,7 +33,7 @@ In Reactive Programming, we don't think about whether or not we should reevaluat In Rust, our reactive app would look something like: -```rust +```rust, no_run fn compute_g(t: i32, seconds: i32) -> bool { t > seconds } @@ -55,7 +55,7 @@ The Dioxus VirtualDom provides us a framework for reactive programming. When we If we represented the reactive graph presented above in Dioxus, it would look very similar: -```rust +```rust, no_run // Declare a component that holds our datasources and calculates `g` fn RenderGraph(cx: Scope) -> Element { let seconds = use_datasource(SECONDS); @@ -83,11 +83,11 @@ fn RenderT(cx: Scope, seconds: i32, constant: i32) -> Element { With this app, we've defined three components. Our top-level component provides our datasources (the hooks), computation nodes (child components), and a final value (what's "rendered"). -Now, whenever the `constant` changes, our `RenderT` component will be re-rendered. However, if `seconds` doesn't change, then we don't need to re-render `RenderG` because the input is the same. If `seconds` *does* change, then both RenderG and RenderT will be reevaluated. +Now, whenever the `constant` changes, our `RenderT` component will be re-rendered. However, if `seconds` doesn't change, then we don't need to re-render `RenderG` because the input is the same. If `seconds` _does_ change, then both RenderG and RenderT will be reevaluated. Dioxus is "Reactive" because it provides this framework for us. All we need to do is write our own tiny units of computation and Dioxus figures out which components need to be reevaluated automatically. -These extra checks and algorithms add some overhead, which is why you see projects like [Sycamore](http://sycamore-rs.netlify.app) and [SolidJS](http://solidjs.com) eliminating them altogether. Dioxus is *really* fast, so we're willing to exchange the added overhead for improved developer experience. +These extra checks and algorithms add some overhead, which is why you see projects like [Sycamore](http://sycamore-rs.netlify.app) and [SolidJS](http://solidjs.com) eliminating them altogether. Dioxus is _really_ fast, so we're willing to exchange the added overhead for improved developer experience. ## How do we update values in our dataflow graph? @@ -104,7 +104,7 @@ Technically, the root props of the VirtualDom are a third datasource, but since For local state in hooks, Dioxus gives us the `use_hook` method which returns an `&mut T` without any requirements. This means raw hook values are not tracked by Dioxus. In fact, we could write a component that modifies a hook value directly: -```rust +```rust, no_run fn app(cx: Scope) -> Element { let mut count = cx.use_hook(|_| 0); cx.render(rsx!{ @@ -118,7 +118,7 @@ fn app(cx: Scope) -> Element { However, when this value is written to, the component does not know to be reevaluated. We must explicitly tell Dioxus that this component is "dirty" and needs to be re-rendered. This is done through the `cx.needs_update` method: -```rust +```rust, no_run button { onclick: move |_| { *count += 1; @@ -130,7 +130,7 @@ button { Now, whenever we click the button, the value will change and the component will be re-rendered. -> Re-rendering is when Dioxus calls your function component *again*. Component functions will be called over and over throughout their lifetime, so they should be mostly side-effect free. +> Re-rendering is when Dioxus calls your function component _again_. Component functions will be called over and over throughout their lifetime, so they should be mostly side-effect free. ### Understand this! @@ -146,9 +146,9 @@ To make app-global state easier to reason about, Dioxus makes all values provide In these cases, App-Global state needs to manually track which components need to be re-generated. -To regenerate *any* component in your app, you can get a handle to the Dioxus' internal scheduler through `schedule_update_any`: +To regenerate _any_ component in your app, you can get a handle to the Dioxus' internal scheduler through `schedule_update_any`: -```rust +```rust, no_run let force_render = cx.schedule_update_any(); // force a render of the root component @@ -179,9 +179,9 @@ From here, Dioxus computes the difference between these trees and updates the Re ## Suppressing Renders -So, we know how to make Dioxus render, but how do we *stop* it? What if we *know* that our state didn't change and we shouldn't render and diff new nodes because they'll be exactly the same as the last time? +So, we know how to make Dioxus render, but how do we _stop_ it? What if we _know_ that our state didn't change and we shouldn't render and diff new nodes because they'll be exactly the same as the last time? -In these cases, you want to reach for *memoization*. In Dioxus, memoization involves preventing a component from rendering again if its props didn't change since the last time it attempted to render. +In these cases, you want to reach for _memoization_. In Dioxus, memoization involves preventing a component from rendering again if its props didn't change since the last time it attempted to render. Visually, you can tell that a component will only re-render if the new value is sufficiently different than the old one. @@ -196,7 +196,7 @@ Visually, you can tell that a component will only re-render if the new value is This is why when you `derive(Props)`, you must also implement the `PartialEq` trait. To override the memoization strategy for a component, you can simply implement your own PartialEq. -```rust +```rust, no_run struct CustomProps { val: i32, } @@ -215,7 +215,7 @@ However, for components that borrow data, it doesn't make sense to implement Par You can technically override this behavior by implementing the `Props` trait manually, though it's unsafe and easy to mess up: -```rust +```rust, no_run unsafe impl Properties for CustomProps { fn memoize(&self, other &Self) -> bool { self != other @@ -224,6 +224,7 @@ unsafe impl Properties for CustomProps { ``` TLDR: + - Dioxus checks if props changed between renders - If props changed according to PartialEq, Dioxus re-renders the component - Props that have a lifetime (ie `<'a>`) will always be re-rendered diff --git a/docs/guide/src/en/__unused/fanout.md b/docs/guide/src/en/__unused/fanout.md index 20c4c9974..63b7d3403 100644 --- a/docs/guide/src/en/__unused/fanout.md +++ b/docs/guide/src/en/__unused/fanout.md @@ -6,7 +6,7 @@ One of the most reliable state management patterns in large Dioxus apps is `fan- With `fan-out`, our individual components at "leaf" position of our VirtualDom are "pure", making them easily reusable, testable, and deterministic. For instance, the "title" bar of our app might be a fairly complicated component. -```rust +```rust, no_run #[derive(Props, PartialEq)] struct TitlebarProps { title: String, @@ -26,7 +26,7 @@ fn Titlebar(cx: Scope) -> Element { If we used global state like use_context or fermi, we might be tempted to inject our `use_read` directly into the component. -```rust +```rust, no_run fn Titlebar(cx: Scope) -> Element { let title = use_read(cx, TITLE); let subtitle = use_read(cx, SUBTITLE); @@ -41,7 +41,7 @@ For many apps – this is a fine pattern, especially if the component is a one-o To enable our titlebar component to be used across apps, we want to lift our atoms upwards and out of the Titlebar component. We would organize a bunch of other components in this section of the app to share some of the same state. -```rust +```rust, no_run fn DocsiteTitlesection(cx: Scope) { let title = use_read(cx, TITLE); let subtitle = use_read(cx, SUBTITLE); diff --git a/docs/guide/src/en/__unused/index.md b/docs/guide/src/en/__unused/index.md index 1732afdae..d1863a465 100644 --- a/docs/guide/src/en/__unused/index.md +++ b/docs/guide/src/en/__unused/index.md @@ -4,16 +4,15 @@ Every app you'll build with Dioxus will have some sort of state that needs to be In this chapter, we'll cover the various ways to manage state, the appropriate terminology, various patterns, and some problems you might run into. - ## The Problem Why do people say state management is so difficult? What does it mean? -Generally, state management is the code you need to write to ensure that your app renders the *correct* content. If the user inputs a name, then you need to display the appropriate response – like alerts, validation, and disable/enable various elements on the page. Things can quickly become tricky if you need loading screens and cancellable tasks. +Generally, state management is the code you need to write to ensure that your app renders the _correct_ content. If the user inputs a name, then you need to display the appropriate response – like alerts, validation, and disable/enable various elements on the page. Things can quickly become tricky if you need loading screens and cancellable tasks. -For the simplest of apps, all of your state can enter the app from the root props. This is common in server-side rendering – we can collect all of the required state *before* rendering the content. +For the simplest of apps, all of your state can enter the app from the root props. This is common in server-side rendering – we can collect all of the required state _before_ rendering the content. -```rust +```rust, no_run let all_content = get_all_content().await; let output = dioxus::ssr::render_lazy(rsx!{ @@ -27,7 +26,6 @@ With this incredibly simple setup, it is highly unlikely that you'll have render However, most of your apps will store state inside of the Dioxus VirtualDom – either through local state or global state. - ## Your options To deal with complexity, you have a couple of options: diff --git a/docs/guide/src/en/__unused/localstate.md b/docs/guide/src/en/__unused/localstate.md index 2a20d77d4..fbc04272a 100644 --- a/docs/guide/src/en/__unused/localstate.md +++ b/docs/guide/src/en/__unused/localstate.md @@ -6,7 +6,7 @@ The first step to dealing with complexity in your app is to refactor your state Let's say we're managing the state for a list of Todos. Whenever we edit the todo, we want the list to update. We might've started building our app but putting everything into a single `use_ref`. -```rust +```rust, no_run struct Todo { contents: String, is_hovered: bool, @@ -29,7 +29,7 @@ cx.render(rsx!{ As shown above, whenever the todo is hovered, we want to set its state: -```rust +```rust, no_run todos.write()[0].is_hovered = true; ``` @@ -37,7 +37,7 @@ As the amount of interactions goes up, so does the complexity of our state. Shou Instead, let's refactor our Todo component to handle its own state: -```rust +```rust, no_run #[inline_props] fn Todo<'a>(cx: Scope, todo: &'a Todo) -> Element { let is_hovered = use_state(cx, || false); @@ -53,16 +53,15 @@ fn Todo<'a>(cx: Scope, todo: &'a Todo) -> Element { Now, we can simplify our Todo data model to get rid of local UI state: -```rust +```rust, no_run struct Todo { contents: String, } ``` -This is not only better for encapsulation and abstraction, but it's only more performant! Whenever a Todo is hovered, we won't need to re-render *every* Todo again – only the Todo that's currently being hovered. +This is not only better for encapsulation and abstraction, but it's only more performant! Whenever a Todo is hovered, we won't need to re-render _every_ Todo again – only the Todo that's currently being hovered. - -Wherever possible, you should try to refactor the "view" layer *out* of your data model. +Wherever possible, you should try to refactor the "view" layer _out_ of your data model. ## Immutability @@ -72,7 +71,7 @@ In these scenarios consider breaking your `use_ref` into individual `use_state`s You might've started modeling your component with a struct and use_ref -```rust +```rust, no_run struct State { count: i32, color: &'static str, @@ -85,17 +84,17 @@ let state = use_ref(cx, State::new) The "better" approach for this particular component would be to break the state apart into different values: -```rust +```rust, no_run let count = use_state(cx, || 0); let color = use_state(cx, || "red"); let names = use_state(cx, HashMap::new); ``` -You might recognize that our "names" value is a HashMap – which is not terribly cheap to clone every time we update its value. To solve this issue, we *highly* suggest using a library like [`im`](https://crates.io/crates/im) which will take advantage of structural sharing to make clones and mutations much cheaper. +You might recognize that our "names" value is a HashMap – which is not terribly cheap to clone every time we update its value. To solve this issue, we _highly_ suggest using a library like [`im`](https://crates.io/crates/im) which will take advantage of structural sharing to make clones and mutations much cheaper. When combined with the `make_mut` method on `use_state`, you can get really succinct updates to collections: -```rust +```rust, no_run let todos = use_state(cx, im_rc::HashMap::default); todos.make_mut().insert("new todo", Todo { @@ -106,5 +105,3 @@ todos.make_mut().insert("new todo", Todo { ## Moving on This particular local patterns are powerful but is not a cure-all for state management problems. Sometimes your state problems are much larger than just staying local to a component. - - diff --git a/docs/guide/src/en/__unused/memoization.md b/docs/guide/src/en/__unused/memoization.md index 9bd0e8b24..4baa73be9 100644 --- a/docs/guide/src/en/__unused/memoization.md +++ b/docs/guide/src/en/__unused/memoization.md @@ -1,11 +1,10 @@ - ## Memoization Dioxus uses Memoization for a more efficient user interface. Memoization is the process in which we check if a component actually needs to be re-rendered when its props change. If a component's properties change but they wouldn't affect the output, then we don't need to re-render the component, saving time! For example, let's say we have a component that has two children: -```rust +```rust, no_run fn Demo(cx: Scope) -> Element { // don't worry about these 2, we'll cover them later let name = use_state(cx, || String::from("bob")); @@ -25,4 +24,3 @@ Dioxus memoizes owned components. It uses `PartialEq` to determine if a componen > This means you can always rely on props with `PartialEq` or no props at all to act as barriers in your app. This can be extremely useful when building larger apps where properties frequently change. By moving our state into a global state management solution, we can achieve precise, surgical re-renders, improving the performance of our app. Borrowed Props cannot be safely memoized. However, this is not a problem – Dioxus relies on the memoization of their parents to determine if they need to be rerendered. - diff --git a/docs/guide/src/en/__unused/model_pattern.md b/docs/guide/src/en/__unused/model_pattern.md index e66b6981c..c9bf9f6b5 100644 --- a/docs/guide/src/en/__unused/model_pattern.md +++ b/docs/guide/src/en/__unused/model_pattern.md @@ -1,12 +1,10 @@ - - ## Using UseRef with "models" One option for state management that UseRef enables is the development of a "model" for your components. This particular pattern enables you to model your state with regular structs. For instance, our calculator example uses a struct to model the state. -```rust +```rust, no_run struct Calculator { display_value: String, @@ -18,7 +16,7 @@ struct Calculator { Our component is really simple – we just call `use_ref` to get an initial calculator state. -```rust +```rust, no_run fn app(cx: Scope) -> Element { let state = use_ref(cx, Calculator::new); @@ -30,7 +28,7 @@ fn app(cx: Scope) -> Element { In our UI, we can then use `read` and a helper method to get data out of the model. -```rust +```rust, no_run // Our accessor method impl Calculator { fn formatted_display(&self) -> String { @@ -49,7 +47,7 @@ cx.render(rsx!{ To modify the state, we can setup a helper method and then attach it to a callback. -```rust +```rust, no_run // our helper impl Calculator { fn clear_display(&mut self) { @@ -64,4 +62,3 @@ cx.render(rsx!{ } }) ``` - diff --git a/docs/guide/src/en/async/spawn.md b/docs/guide/src/en/async/spawn.md index b29f63ebf..2f86ad159 100644 --- a/docs/guide/src/en/async/spawn.md +++ b/docs/guide/src/en/async/spawn.md @@ -2,11 +2,11 @@ The `use_future` and `use_coroutine` hooks are useful if you want to unconditionally spawn the future. Sometimes, though, you'll want to only spawn a future in response to an event, such as a mouse click. For example, suppose you need to send a request when the user clicks a "log in" button. For this, you can use `cx.spawn`: -```rust +```rust, no_run {{#include ../../../examples/spawn.rs:spawn}} ``` -> Note: `spawn` will always spawn a *new* future. You most likely don't want to call it on every render. +> Note: `spawn` will always spawn a _new_ future. You most likely don't want to call it on every render. Calling `spawn` will give you a `JoinHandle` which lets you cancel or pause the future. @@ -14,6 +14,6 @@ Calling `spawn` will give you a `JoinHandle` which lets you cancel or pause the Sometimes, you might want to spawn a background task that needs multiple threads or talk to hardware that might block your app code. In these cases, we can directly spawn a Tokio task from our future. For Dioxus-Desktop, your task will be spawned onto Tokio's Multithreaded runtime: -```rust +```rust, no_run {{#include ../../../examples/spawn.rs:tokio}} ``` diff --git a/docs/guide/src/en/async/use_coroutine.md b/docs/guide/src/en/async/use_coroutine.md index 537e27ea4..8d4b8f99a 100644 --- a/docs/guide/src/en/async/use_coroutine.md +++ b/docs/guide/src/en/async/use_coroutine.md @@ -8,7 +8,7 @@ Like regular futures, code in a coroutine will run until the next `await` point The `use_coroutine` hook allows you to create a coroutine. Most coroutines we write will be polling loops using async/await. -```rust +```rust, no_run fn app(cx: Scope) -> Element { let ws: &UseCoroutine<()> = use_coroutine(cx, |rx| async move { // Connect to some sort of service @@ -26,7 +26,7 @@ For many services, a simple async loop will handle the majority of use cases. However, if we want to temporarily disable the coroutine, we can "pause" it using the `pause` method, and "resume" it using the `resume` method: -```rust +```rust, no_run let sync: &UseCoroutine<()> = use_coroutine(cx, |rx| async move { // code for syncing }); @@ -58,7 +58,7 @@ The future must be `'static` – so any values captured by the task cannot carry You can use [to_owned](https://doc.rust-lang.org/std/borrow/trait.ToOwned.html#tymethod.to_owned) to create a clone of the hook handle which can be moved into the async closure. -```rust +```rust, no_run let sync_status = use_state(cx, || Status::Launching); let sync_task = use_coroutine(cx, |rx: UnboundedReceiver| { let sync_status = sync_status.to_owned(); @@ -73,7 +73,7 @@ let sync_task = use_coroutine(cx, |rx: UnboundedReceiver| { To make this a bit less verbose, Dioxus exports the `to_owned!` macro which will create a binding as shown above, which can be quite helpful when dealing with many values. -```rust +```rust, no_run let sync_status = use_state(cx, || Status::Launching); let load_status = use_state(cx, || Status::Launching); let sync_task = use_coroutine(cx, |rx: UnboundedReceiver| { @@ -88,10 +88,9 @@ let sync_task = use_coroutine(cx, |rx: UnboundedReceiver| { You might've noticed the `use_coroutine` closure takes an argument called `rx`. What is that? Well, a common pattern in complex apps is to handle a bunch of async code at once. With libraries like Redux Toolkit, managing multiple promises at once can be challenging and a common source of bugs. -With Coroutines, we can centralize our async logic. The `rx` parameter is an Channel that allows code external to the coroutine to send data *into* the coroutine. Instead of looping on an external service, we can loop on the channel itself, processing messages from within our app without needing to spawn a new future. To send data into the coroutine, we would call "send" on the handle. +With Coroutines, we can centralize our async logic. The `rx` parameter is an Channel that allows code external to the coroutine to send data _into_ the coroutine. Instead of looping on an external service, we can loop on the channel itself, processing messages from within our app without needing to spawn a new future. To send data into the coroutine, we would call "send" on the handle. - -```rust +```rust, no_run use futures_util::stream::StreamExt; enum ProfileUpdate { @@ -119,13 +118,11 @@ cx.render(rsx!{ }) ``` - > Note: In order to use/run the `rx.next().await` statement you will need to extend the [`Stream`] trait (used by [`UnboundedReceiver`]) by adding 'futures_util' as a dependency to your project and adding the `use futures_util::stream::StreamExt;`. - For sufficiently complex apps, we could build a bunch of different useful "services" that loop on channels to update the app. -```rust +```rust, no_run let profile = use_coroutine(cx, profile_service); let editor = use_coroutine(cx, editor_service); let sync = use_coroutine(cx, sync_service); @@ -143,9 +140,9 @@ async fn editor_service(rx: UnboundedReceiver) { } ``` -We can combine coroutines with [Fermi](https://docs.rs/fermi/latest/fermi/index.html) to emulate Redux Toolkit's Thunk system with much less headache. This lets us store all of our app's state *within* a task and then simply update the "view" values stored in Atoms. It cannot be understated how powerful this technique is: we get all the perks of native Rust tasks with the optimizations and ergonomics of global state. This means your *actual* state does not need to be tied up in a system like Fermi or Redux – the only Atoms that need to exist are those that are used to drive the display/UI. +We can combine coroutines with [Fermi](https://docs.rs/fermi/latest/fermi/index.html) to emulate Redux Toolkit's Thunk system with much less headache. This lets us store all of our app's state _within_ a task and then simply update the "view" values stored in Atoms. It cannot be understated how powerful this technique is: we get all the perks of native Rust tasks with the optimizations and ergonomics of global state. This means your _actual_ state does not need to be tied up in a system like Fermi or Redux – the only Atoms that need to exist are those that are used to drive the display/UI. -```rust +```rust, no_run static USERNAME: Atom = |_| "default".to_string(); fn app(cx: Scope) -> Element { @@ -169,7 +166,7 @@ fn Banner(cx: Scope) -> Element { Now, in our sync service, we can structure our state however we want. We only need to update the view values when ready. -```rust +```rust, no_run use futures_util::stream::StreamExt; enum SyncAction { @@ -198,7 +195,7 @@ async fn sync_service(mut rx: UnboundedReceiver, atoms: AtomRoot) { Coroutine handles are automatically injected through the context API. You can use the `use_coroutine_handle` hook with the message type as a generic to fetch a handle. -```rust +```rust, no_run fn Child(cx: Scope) -> Element { let sync_task = use_coroutine_handle::(cx); diff --git a/docs/guide/src/en/async/use_future.md b/docs/guide/src/en/async/use_future.md index 864dd5acb..c7b262c61 100644 --- a/docs/guide/src/en/async/use_future.md +++ b/docs/guide/src/en/async/use_future.md @@ -4,21 +4,20 @@ For example, we can make an API request (using [reqwest](https://docs.rs/reqwest/latest/reqwest/index.html)) inside `use_future`: -```rust +```rust, no_run {{#include ../../../examples/use_future.rs:use_future}} ``` The code inside `use_future` will be submitted to the Dioxus scheduler once the component has rendered. -We can use `.value()` to get the result of the future. On the first run, since there's no data ready when the component loads, its value will be `None`. However, once the future is finished, the component will be re-rendered and the value will now be `Some(...)`, containing the return value of the closure. +We can use `.value()` to get the result of the future. On the first run, since there's no data ready when the component loads, its value will be `None`. However, once the future is finished, the component will be re-rendered and the value will now be `Some(...)`, containing the return value of the closure. We can then render that result: -```rust +```rust, no_run {{#include ../../../examples/use_future.rs:render}} ``` - ## Restarting the Future The `UseFuture` handle provides a `restart` method. It can be used to execute the future again, producing a new value. @@ -27,7 +26,6 @@ The `UseFuture` handle provides a `restart` method. It can be used to execute th Often, you will need to run the future again every time some value (e.g. a prop) changes. Rather than calling `restart` manually, you can provide a tuple of "dependencies" to the hook. It will automatically re-run the future when any of those dependencies change. Example: - -```rust +```rust, no_run {{#include ../../../examples/use_future.rs:dependency}} ``` diff --git a/docs/guide/src/en/best_practices/antipatterns.md b/docs/guide/src/en/best_practices/antipatterns.md index 873af6e39..771ffe75f 100644 --- a/docs/guide/src/en/best_practices/antipatterns.md +++ b/docs/guide/src/en/best_practices/antipatterns.md @@ -8,7 +8,7 @@ Fragments don't mount a physical element to the DOM immediately, so Dioxus must Only Component and Fragment nodes are susceptible to this issue. Dioxus mitigates this with components by providing an API for registering shared state without the Context Provider pattern. -```rust +```rust, no_run {{#include ../../../examples/anti_patterns.rs:nested_fragments}} ``` @@ -16,7 +16,7 @@ Only Component and Fragment nodes are susceptible to this issue. Dioxus mitigate As described in the [dynamic rendering chapter](../interactivity/dynamic_rendering.md#the-key-attribute), list items must have unique keys that are associated with the same items across renders. This helps Dioxus associate state with the contained components and ensures good diffing performance. Do not omit keys, unless you know that the list will never change. -```rust +```rust, no_run {{#include ../../../examples/anti_patterns.rs:iter_keys}} ``` @@ -30,4 +30,4 @@ Suppose you have a struct `User` containing the field `username: String`. If you Every time you update the state, Dioxus needs to re-render the component – this is inefficient! Consider refactoring your code to avoid this. -Also, if you unconditionally update the state during render, it will be re-rendered in an infinite loop. \ No newline at end of file +Also, if you unconditionally update the state during render, it will be re-rendered in an infinite loop. diff --git a/docs/guide/src/en/best_practices/error_handling.md b/docs/guide/src/en/best_practices/error_handling.md index afbb45417..fad8f1c10 100644 --- a/docs/guide/src/en/best_practices/error_handling.md +++ b/docs/guide/src/en/best_practices/error_handling.md @@ -4,23 +4,21 @@ A selling point of Rust for web development is the reliability of always knowing However, we haven't talked about error handling at all in this guide! In this chapter, we'll cover some strategies in handling errors to ensure your app never crashes. - - ## The simplest – returning None Astute observers might have noticed that `Element` is actually a type alias for `Option`. You don't need to know what a `VNode` is, but it's important to recognize that we could actually return nothing at all: -```rust +```rust, no_run fn App(cx: Scope) -> Element { None } ``` -This lets us add in some syntactic sugar for operations we think *shouldn't* fail, but we're still not confident enough to "unwrap" on. +This lets us add in some syntactic sugar for operations we think _shouldn't_ fail, but we're still not confident enough to "unwrap" on. > The nature of `Option` might change in the future as the `try` trait gets upgraded. -```rust +```rust, no_run fn App(cx: Scope) -> Element { // immediately return "None" let name = cx.use_hook(|_| Some("hi"))?; @@ -31,7 +29,7 @@ fn App(cx: Scope) -> Element { Because Rust can't accept both Options and Results with the existing try infrastructure, you'll need to manually handle Results. This can be done by converting them into Options or by explicitly handling them. -```rust +```rust, no_run fn App(cx: Scope) -> Element { // Convert Result to Option let name = cx.use_hook(|_| "1.234").parse().ok()?; @@ -46,8 +44,7 @@ fn App(cx: Scope) -> Element { } ``` -Notice that while hooks in Dioxus do not like being called in conditionals or loops, they *are* okay with early returns. Returning an error state early is a completely valid way of handling errors. - +Notice that while hooks in Dioxus do not like being called in conditionals or loops, they _are_ okay with early returns. Returning an error state early is a completely valid way of handling errors. ## Match results @@ -55,14 +52,13 @@ The next "best" way of handling errors in Dioxus is to match on the error locall To do this, we simply have an error state built into our component: -```rust +```rust, no_run let err = use_state(cx, || None); ``` Whenever we perform an action that generates an error, we'll set that error state. We can then match on the error in a number of ways (early return, return Element, etc). - -```rust +```rust, no_run fn Commandline(cx: Scope) -> Element { let error = use_state(cx, || None); @@ -83,7 +79,7 @@ fn Commandline(cx: Scope) -> Element { If you're dealing with a handful of components with minimal nesting, you can just pass the error handle into child components. -```rust +```rust, no_run fn Commandline(cx: Scope) -> Element { let error = use_state(cx, || None); @@ -110,8 +106,7 @@ To get started, consider using a built-in hook like `use_context` and `use_conte At the "top" of our architecture, we're going to want to explicitly declare a value that could be an error. - -```rust +```rust, no_run enum InputError { None, TooLong, @@ -123,7 +118,7 @@ static INPUT_ERROR: Atom = |_| InputError::None; Then, in our top level component, we want to explicitly handle the possible error state for this part of the tree. -```rust +```rust, no_run fn TopLevel(cx: Scope) -> Element { let error = use_read(cx, INPUT_ERROR); @@ -137,7 +132,7 @@ fn TopLevel(cx: Scope) -> Element { Now, whenever a downstream component has an error in its actions, it can simply just set its own error state: -```rust +```rust, no_run fn Commandline(cx: Scope) -> Element { let set_error = use_set(cx, INPUT_ERROR); diff --git a/docs/guide/src/en/contributing/walkthrough_readme.md b/docs/guide/src/en/contributing/walkthrough_readme.md index 9165d65a8..5334630c9 100644 --- a/docs/guide/src/en/contributing/walkthrough_readme.md +++ b/docs/guide/src/en/contributing/walkthrough_readme.md @@ -6,7 +6,7 @@ This walkthrough will take you through the internals of the Hello World example We start will a hello world program. This program renders a desktop app with the text "Hello World" in a webview. -```rust +```rust, no_run {{#include ../../../../../examples/readme.rs}} ``` @@ -16,7 +16,7 @@ We start will a hello world program. This program renders a desktop app with the Before the Rust compiler runs the program, it will expand all macros. Here is what the hello world example looks like expanded: -```rust +```rust, no_run {{#include ../../../examples/readme_expanded.rs}} ``` @@ -40,7 +40,7 @@ Before we dive into the initial render in the virtual dom, we need to discuss wh The Virtual Dom roughly looks like this: -```rust +```rust, no_run pub struct VirtualDom { // All the templates that have been created or set durring hot reloading pub(crate) templates: FxHashMap>>, diff --git a/docs/guide/src/en/custom_renderer/index.md b/docs/guide/src/en/custom_renderer/index.md index b531593dc..3b6888b0d 100644 --- a/docs/guide/src/en/custom_renderer/index.md +++ b/docs/guide/src/en/custom_renderer/index.md @@ -25,7 +25,7 @@ Dioxus is built around the concept of [Templates](https://docs.rs/dioxus-core/la The `Mutation` type is a serialized enum that represents an operation that should be applied to update the UI. The variants roughly follow this set: -```rust +```rust, no_run enum Mutation { AppendChildren, AssignId, @@ -58,7 +58,7 @@ Whenever a `CreateElement` edit is generated during diffing, Dioxus increments i For the sake of understanding, let's consider this example – a very simple UI declaration: -```rust +```rust, no_run rsx!( h1 {"count: {x}"} ) ``` @@ -68,7 +68,7 @@ The above rsx will create a template that contains one static h1 tag and a place The template will look something like this: -```rust +```rust, no_run Template { // Some id that is unique for the entire project name: "main.rs:1:1:0", @@ -118,7 +118,7 @@ After the renderer has created all of the new templates, it can begin to process When the renderer starts, it should contain the Root node on the stack and store the Root node with an id of 0. The Root node is the top-level node of the UI. In HTML, this is the `
` element. -```rust +```rust, no_run instructions: [] stack: [ RootNode, @@ -130,7 +130,7 @@ nodes: [ The first mutation is a `LoadTemplate` mutation. This tells the renderer to load a root from the template with the given id. The renderer will then push the root node of the template onto the stack and store it with an id for later. In this case, the root node is an h1 element. -```rust +```rust, no_run instructions: [ LoadTemplate { // the id of the template @@ -153,7 +153,7 @@ nodes: [ Next, Dioxus will create the dynamic text node. The diff algorithm decides that this node needs to be created, so Dioxus will generate the Mutation `HydrateText`. When the renderer receives this instruction, it will navigate to the placeholder text node in the template and replace it with the new text. -```rust +```rust, no_run instructions: [ LoadTemplate { name: "main.rs:1:1:0", @@ -180,7 +180,7 @@ nodes: [ Remember, the h1 node is not attached to anything (it is unmounted) so Dioxus needs to generate an Edit that connects the h1 node to the Root. It depends on the situation, but in this case, we use `AppendChildren`. This pops the text node off the stack, leaving the Root element as the next element on the stack. -```rust +```rust, no_run instructions: [ LoadTemplate { name: "main.rs:1:1:0", @@ -210,7 +210,7 @@ nodes: [ Over time, our stack looked like this: -```rust +```rust, no_run [Root] [Root,

""

] [Root,

"count: 0"

] @@ -229,7 +229,7 @@ Like most GUIs, Dioxus relies on an event loop to progress the VirtualDOM. The V The code for the WebSys implementation is straightforward, so we'll add it here to demonstrate how simple an event loop is: -```rust, ignore +```rust, no_run, ignore pub async fn run(&mut self) -> dioxus_core::error::Result<()> { // Push the body element onto the WebsysDom's stack machine let mut websys_dom = crate::new::WebsysDom::new(prepare_websys_dom()); @@ -259,7 +259,7 @@ pub async fn run(&mut self) -> dioxus_core::error::Result<()> { It's important to decode what the real events are for your event system into Dioxus' synthetic event system (synthetic meaning abstracted). This simply means matching your event type and creating a Dioxus `UserEvent` type. Right now, the virtual event system is modeled almost entirely around the HTML spec, but we are interested in slimming it down. -```rust, ignore +```rust, no_run, ignore fn virtual_event_from_websys_event(event: &web_sys::Event) -> VirtualEvent { match event.type_().as_str() { "keydown" => { @@ -308,7 +308,7 @@ The `RealDom` is a higher-level abstraction over updating the Dom. It uses an en Let's build a toy renderer with borders, size, and text color. Before we start let's take a look at an example element we can render: -```rust +```rust, no_run cx.render(rsx!{ div{ color: "red", @@ -380,19 +380,19 @@ To help in building a Dom, native-core provides the State trait and a RealDom st Native Core cannot create all of the required methods for the State trait, but it can derive some of them. To implement the State trait, you must implement the following methods and let the `#[partial_derive_state]` macro handle the rest: -```rust, ignore +```rust, no_run, ignore {{#include ../../../examples/custom_renderer.rs:derive_state}} ``` Lets take a look at how to implement the State trait for a simple renderer. -```rust +```rust, no_run {{#include ../../../examples/custom_renderer.rs:state_impl}} ``` Now that we have our state, we can put it to use in our RealDom. We can update the RealDom with apply_mutations to update the structure of the dom (adding, removing, and changing properties of nodes) and then update_state to update the States for each of the nodes that changed. -```rust +```rust, no_run {{#include ../../../examples/custom_renderer.rs:rendering}} ``` @@ -404,7 +404,7 @@ For most platforms, the layout of the Elements will stay the same. The [layout_a To make it easier to implement text editing in rust renderers, `native-core` also contains a renderer-agnostic cursor system. The cursor can handle text editing, selection, and movement with common keyboard shortcuts integrated. -```rust +```rust, no_run {{#include ../../../examples/custom_renderer.rs:cursor}} ``` diff --git a/docs/guide/src/en/describing_ui/component_children.md b/docs/guide/src/en/describing_ui/component_children.md index 02be25cd5..7e329abbc 100644 --- a/docs/guide/src/en/describing_ui/component_children.md +++ b/docs/guide/src/en/describing_ui/component_children.md @@ -2,13 +2,13 @@ In some cases, you may wish to create a component that acts as a container for some other content, without the component needing to know what that content is. To achieve this, create a prop of type `Element`: -```rust +```rust, no_run {{#include ../../../examples/component_element_props.rs:Clickable}} ``` Then, when rendering the component, you can pass in the output of `cx.render(rsx!(...))`: -```rust +```rust, no_run {{#include ../../../examples/component_element_props.rs:Clickable_usage}} ``` @@ -20,12 +20,12 @@ Then, when rendering the component, you can pass in the output of `cx.render(rsx Rather than passing the RSX through a regular prop, you may wish to accept children similarly to how elements can have children. The "magic" `children` prop lets you achieve this: -```rust +```rust, no_run {{#include ../../../examples/component_children.rs:Clickable}} ``` This makes using the component much simpler: simply put the RSX inside the `{}` brackets – and there is no need for a `render` call or another macro! -```rust +```rust, no_run {{#include ../../../examples/component_children.rs:Clickable_usage}} ``` diff --git a/docs/guide/src/en/describing_ui/component_props.md b/docs/guide/src/en/describing_ui/component_props.md index 9c5cd4be3..947ec5f70 100644 --- a/docs/guide/src/en/describing_ui/component_props.md +++ b/docs/guide/src/en/describing_ui/component_props.md @@ -7,6 +7,7 @@ Just like you can pass arguments to a function, you can pass props to a componen Component props are a single struct annotated with `#[derive(Props)]`. For a component to accept props, the type of its argument must be `Scope`. Then, you can access the value of the props using `cx.props`. There are 2 flavors of Props structs: + - Owned props: - Don't have an associated lifetime - Implement `PartialEq`, allow for memoization (if the props don't change, Dioxus won't re-render the component) @@ -14,17 +15,17 @@ There are 2 flavors of Props structs: - [Borrow](https://doc.rust-lang.org/beta/rust-by-example/scope/borrow.html) from a parent component - Cannot be memoized due to lifetime constraints - ### Owned Props Owned Props are very simple – they don't borrow anything. Example: -```rust +```rust, no_run {{#include ../../../examples/component_owned_props.rs:Likes}} ``` You can then pass prop values to the component the same way you would pass attributes to an element: -```rust + +```rust, no_run {{#include ../../../examples/component_owned_props.rs:App}} ``` @@ -36,18 +37,19 @@ Owned props work well if your props are easy to copy around – like a single nu Rust allows for something more efficient – borrowing the String as a `&str` – this is what Borrowed Props are for! -```rust +```rust, no_run {{#include ../../../examples/component_borrowed_props.rs:TitleCard}} ``` We can then use the component like this: -```rust +```rust, no_run {{#include ../../../examples/component_borrowed_props.rs:App}} ``` + ![Screenshot: TitleCard component](./images/component_borrowed_props_screenshot.png) -Borrowed props can be very useful, but they do not allow for memorization so they will *always* rerun when the parent scope is rerendered. Because of this Borrowed Props should be reserved for components that are cheap to rerun or places where cloning data is an issue. Using Borrowed Props everywhere will result in large parts of your app rerunning every interaction. +Borrowed props can be very useful, but they do not allow for memorization so they will _always_ rerun when the parent scope is rerendered. Because of this Borrowed Props should be reserved for components that are cheap to rerun or places where cloning data is an issue. Using Borrowed Props everywhere will result in large parts of your app rerunning every interaction. ## Prop Options @@ -57,13 +59,13 @@ The `#[derive(Props)]` macro has some features that let you customize the behavi You can create optional fields by using the `Option<…>` type for a field: -```rust +```rust, no_run {{#include ../../../examples/component_props_options.rs:OptionalProps}} ``` Then, you can choose to either provide them or not: -```rust +```rust, no_run {{#include ../../../examples/component_props_options.rs:OptionalProps_usage}} ``` @@ -71,13 +73,13 @@ Then, you can choose to either provide them or not: If you want to explicitly require an `Option`, and not an optional prop, you can annotate it with `#[props(!optional)]`: -```rust +```rust, no_run {{#include ../../../examples/component_props_options.rs:ExplicitOption}} ``` Then, you have to explicitly pass either `Some("str")` or `None`: -```rust +```rust, no_run {{#include ../../../examples/component_props_options.rs:ExplicitOption_usage}} ``` @@ -85,13 +87,13 @@ Then, you have to explicitly pass either `Some("str")` or `None`: You can use `#[props(default = 42)]` to make a field optional and specify its default value: -```rust +```rust, no_run {{#include ../../../examples/component_props_options.rs:DefaultComponent}} ``` Then, similarly to optional props, you don't have to provide it: -```rust +```rust, no_run {{#include ../../../examples/component_props_options.rs:DefaultComponent_usage}} ``` @@ -99,13 +101,13 @@ Then, similarly to optional props, you don't have to provide it: It is common for Rust functions to accept `impl Into` rather than just `SomeType` to support a wider range of parameters. If you want similar functionality with props, you can use `#[props(into)]`. For example, you could add it on a `String` prop – and `&str` will also be automatically accepted, as it can be converted into `String`: -```rust +```rust, no_run {{#include ../../../examples/component_props_options.rs:IntoComponent}} ``` Then, you can use it so: -```rust +```rust, no_run {{#include ../../../examples/component_props_options.rs:IntoComponent_usage}} ``` @@ -115,7 +117,7 @@ So far, every Component function we've seen had a corresponding ComponentProps s `inline_props` allows you to do just that. Instead of typing the "full" version: -```rust +```rust, no_run #[derive(Props, PartialEq)] struct TitleCardProps { title: String, @@ -130,7 +132,7 @@ fn TitleCard(cx: Scope) -> Element { ...you can define a function that accepts props as arguments. Then, just annotate it with `#[inline_props]`, and the macro will turn it into a regular Component for you: -```rust +```rust, no_run #[inline_props] fn TitleCard(cx: Scope, title: String) -> Element { cx.render(rsx!{ diff --git a/docs/guide/src/en/describing_ui/components.md b/docs/guide/src/en/describing_ui/components.md index 9da0d6605..2b72fcaf2 100644 --- a/docs/guide/src/en/describing_ui/components.md +++ b/docs/guide/src/en/describing_ui/components.md @@ -4,7 +4,7 @@ Just like you wouldn't want to write a complex program in a single, long, `main` A component is a Rust function, named in UpperCammelCase, that takes a `Scope` parameter and returns an `Element` describing the UI it wants to render. In fact, our `App` function is a component! -```rust +```rust, no_run {{#include ../../../examples/hello_world_desktop.rs:component}} ``` @@ -12,13 +12,13 @@ A component is a Rust function, named in UpperCammelCase, that takes a `Scope` p A Component is responsible for some rendering task – typically, rendering an isolated part of the user interface. For example, you could have an `About` component that renders a short description of Dioxus Labs: -```rust +```rust, no_run {{#include ../../../examples/components.rs:About}} ``` Then, you can render your component in another component, similarly to how elements are rendered: -```rust +```rust, no_run {{#include ../../../examples/components.rs:App}} ``` diff --git a/docs/guide/src/en/describing_ui/index.md b/docs/guide/src/en/describing_ui/index.md index 808e6af3c..8e5b3fe8f 100644 --- a/docs/guide/src/en/describing_ui/index.md +++ b/docs/guide/src/en/describing_ui/index.md @@ -1,35 +1,42 @@ # Describing the UI -Dioxus is a *declarative* framework. This means that instead of telling Dioxus what to do (e.g. to "create an element" or "set the color to red") we simply *declare* what we want the UI to look like using RSX. +Dioxus is a _declarative_ framework. This means that instead of telling Dioxus what to do (e.g. to "create an element" or "set the color to red") we simply _declare_ what we want the UI to look like using RSX. You have already seen a simple example of RSX syntax in the "hello world" application: -```rust +```rust, no_run {{#include ../../../examples/hello_world_desktop.rs:component}} ``` -Here, we use the `rsx!` macro to *declare* that we want a `div` element, containing the text `"Hello, world!"`. Dioxus takes the RSX and constructs a UI from it. +Here, we use the `rsx!` macro to _declare_ that we want a `div` element, containing the text `"Hello, world!"`. Dioxus takes the RSX and constructs a UI from it. ## RSX Features RSX is very similar to HTML in that it describes elements with attributes and children. Here's an empty `div` element in RSX, as well as the resulting HTML: -```rust +```rust, no_run {{#include ../../../examples/rsx_overview.rs:empty}} ``` + ```html
``` - ### Attributes Attributes (and [listeners](../interactivity/index.md)) modify the behavior or appearance of the element they are attached to. They are specified inside the `{}` brackets, using the `name: value` syntax. You can provide the value as a literal in the RSX: -```rust + +```rust, no_run {{#include ../../../examples/rsx_overview.rs:attributes}} ``` + ```html -
+ ``` > Note: All attributes defined in `dioxus-html` follow the snake_case naming convention. They transform their `snake_case` names to HTML's `camelCase` attributes. @@ -40,26 +47,27 @@ Attributes (and [listeners](../interactivity/index.md)) modify the behavior or a Dioxus has a pre-configured set of attributes that you can use. RSX is validated at compile time to make sure you didn't specify an invalid attribute. If you want to override this behavior with a custom attribute name, specify the attribute in quotes: -```rust +```rust, no_run {{#include ../../../examples/rsx_overview.rs:custom_attributes}} ``` + ```html - - + ``` ### Interpolation Similarly to how you can [format](https://doc.rust-lang.org/rust-by-example/hello/print/fmt.html) Rust strings, you can also interpolate in RSX text. Use `{variable}` to Display the value of a variable in a string, or `{variable:?}` to use the Debug representation: -```rust +```rust, no_run {{#include ../../../examples/rsx_overview.rs:formatting}} ``` + ```html
-
ES
-
42
-
{}
+
ES
+
42
+
{}
``` @@ -67,14 +75,15 @@ Similarly to how you can [format](https://doc.rust-lang.org/rust-by-example/hell To add children to an element, put them inside the `{}` brackets after all attributes and listeners in the element. They can be other elements, text, or [components](components.md). For example, you could have an `ol` (ordered list) element, containing 3 `li` (list item) elements, each of which contains some text: -```rust +```rust, no_run {{#include ../../../examples/rsx_overview.rs:children}} ``` + ```html
    -
  1. First Item
  2. -
  3. Second Item
  4. -
  5. Third Item
  6. +
  7. First Item
  8. +
  9. Second Item
  10. +
  11. Third Item
``` @@ -82,7 +91,7 @@ To add children to an element, put them inside the `{}` brackets after all attri You can render multiple elements at the top level of `rsx!` and they will be automatically grouped. -```rust +```rust, no_run {{#include ../../../examples/rsx_overview.rs:manyroots}} ``` @@ -95,9 +104,10 @@ You can render multiple elements at the top level of `rsx!` and they will be aut You can include arbitrary Rust expressions as children within RSX that implements [IntoDynNode](https://docs.rs/dioxus-core/0.3/dioxus_core/trait.IntoDynNode.html). This is useful for displaying data from an [iterator](https://doc.rust-lang.org/stable/book/ch13-02-iterators.html#processing-a-series-of-items-with-iterators): -```rust +```rust, no_run {{#include ../../../examples/rsx_overview.rs:expression}} ``` + ```html DIOXUS0123456789 ``` @@ -106,9 +116,10 @@ You can include arbitrary Rust expressions as children within RSX that implement In addition to iterators you can also use for loops directly within RSX: -```rust +```rust, no_run {{#include ../../../examples/rsx_overview.rs:loops}} ``` + ```html
0
1
@@ -122,9 +133,10 @@ In addition to iterators you can also use for loops directly within RSX: You can also use if statements without an else branch within RSX: -```rust +```rust, no_run {{#include ../../../examples/rsx_overview.rs:ifstatements}} ``` + ```html
true
-``` \ No newline at end of file +``` diff --git a/docs/guide/src/en/describing_ui/special_attributes.md b/docs/guide/src/en/describing_ui/special_attributes.md index 7bed1ef94..4ba7a40f1 100644 --- a/docs/guide/src/en/describing_ui/special_attributes.md +++ b/docs/guide/src/en/describing_ui/special_attributes.md @@ -8,8 +8,7 @@ If you're working with pre-rendered assets, output from templates, or output fro For example, shipping a markdown-to-Dioxus converter might significantly bloat your final application size. Instead, you'll want to pre-render your markdown to HTML and then include the HTML directly in your output. We use this approach for the [Dioxus homepage](https://dioxuslabs.com): - -```rust +```rust, no_run {{#include ../../../examples/dangerous_inner_html.rs:dangerous_inner_html}} ``` @@ -17,21 +16,21 @@ For example, shipping a markdown-to-Dioxus converter might significantly bloat y > > If you're handling untrusted input, make sure to sanitize your HTML before passing it into `dangerous_inner_html` – or just pass it to a Text Element to escape any HTML tags. - ## Boolean Attributes Most attributes, when rendered, will be rendered exactly as the input you provided. However, some attributes are considered "boolean" attributes and just their presence determines whether they affect the output. For these attributes, a provided value of `"false"` will cause them to be removed from the target element. So this RSX wouldn't actually render the `hidden` attribute: -```rust +```rust, no_run {{#include ../../../examples/boolean_attribute.rs:boolean_attribute}} ``` + ```html
hello
``` -Not all attributes work like this however. *Only the following attributes* have this behavior: +Not all attributes work like this however. _Only the following attributes_ have this behavior: - `allowfullscreen` - `allowpaymentrequest` diff --git a/docs/guide/src/en/fullstack/getting_started.md b/docs/guide/src/en/fullstack/getting_started.md index 8e753e2c9..9511b8a6c 100644 --- a/docs/guide/src/en/fullstack/getting_started.md +++ b/docs/guide/src/en/fullstack/getting_started.md @@ -39,7 +39,7 @@ tokio = { version = "*", features = ["full"] } Now, set up your Axum app to serve the Dioxus app. -```rust +```rust, no_run {{#include ../../../examples/server_basic.rs}} ``` @@ -72,7 +72,7 @@ web = ["dioxus-web"] Next, we need to modify our `main.rs` to use either hydrate on the client or render on the server depending on the active features. -```rust +```rust, no_run {{#include ../../../examples/hydration.rs}} ``` @@ -95,7 +95,7 @@ To do this, we must remove the serve_dioxus_application and replace it with a cu The only thing we need to change on the client is the props. `dioxus-fullstack` will automatically serialize the props it uses to server render the app and send them to the client. In the client section of `main.rs`, we need to add `get_root_props_from_document` to deserialize the props before we hydrate the app. -```rust +```rust, no_run {{#include ../../../examples/hydration_props.rs}} ``` diff --git a/docs/guide/src/en/fullstack/server_functions.md b/docs/guide/src/en/fullstack/server_functions.md index b9d40ed2c..57883885a 100644 --- a/docs/guide/src/en/fullstack/server_functions.md +++ b/docs/guide/src/en/fullstack/server_functions.md @@ -20,7 +20,7 @@ cargo add serde Next, add the server function to your `main.rs`: -```rust +```rust, no_run {{#include ../../../examples/server_function.rs}} ``` diff --git a/docs/guide/src/en/getting_started/desktop.md b/docs/guide/src/en/getting_started/desktop.md index b24215218..42fe5c1a2 100644 --- a/docs/guide/src/en/getting_started/desktop.md +++ b/docs/guide/src/en/getting_started/desktop.md @@ -72,6 +72,6 @@ cargo add dioxus-desktop Edit your `main.rs`: -```rust +```rust, no_run {{#include ../../../examples/hello_world_desktop.rs:all}} ``` diff --git a/docs/guide/src/en/getting_started/hot_reload.md b/docs/guide/src/en/getting_started/hot_reload.md index 2ebf5e4aa..b14de30a4 100644 --- a/docs/guide/src/en/getting_started/hot_reload.md +++ b/docs/guide/src/en/getting_started/hot_reload.md @@ -36,7 +36,7 @@ For more information about hot reloading on native platforms and configuration o Add the following to your main function: -```rust +```rust, no_run fn main() { hot_reload_init!(); // launch your application diff --git a/docs/guide/src/en/getting_started/liveview.md b/docs/guide/src/en/getting_started/liveview.md index 54f792e74..56847cab5 100644 --- a/docs/guide/src/en/getting_started/liveview.md +++ b/docs/guide/src/en/getting_started/liveview.md @@ -1,18 +1,17 @@ # Liveview -Liveview allows apps to *run* on the server and *render* in the browser. It uses WebSockets to communicate between the server and the browser. +Liveview allows apps to _run_ on the server and _render_ in the browser. It uses WebSockets to communicate between the server and the browser. Examples: + - [Axum Example](https://github.com/DioxusLabs/dioxus/tree/master/packages/liveview/examples/axum.rs) - [Salvo Example](https://github.com/DioxusLabs/dioxus/tree/master/packages/liveview/examples/salvo.rs) - [Warp Example](https://github.com/DioxusLabs/dioxus/tree/master/packages/liveview/examples/warp.rs) - ## Support Liveview is currently limited in capability when compared to the Web platform. Liveview apps run on the server in a native thread. This means that browser APIs are not available, so rendering WebGL, Canvas, etc is not as easy as the Web. However, native system APIs are accessible, so streaming, WebSockets, filesystem, etc are all viable APIs. - ## Setup For this guide, we're going to show how to use Dioxus Liveview with [Axum](https://docs.rs/axum/latest/axum/). @@ -50,17 +49,14 @@ tokio = { version = "1.15.0", features = ["full"] } Now, set up your Axum app to respond on an endpoint. - -```rust +```rust, no_run {{#include ../../../examples/hello_world_liveview.rs:glue}} ``` - And then add our app component: -```rust +```rust, no_run {{#include ../../../examples/hello_world_liveview.rs:app}} ``` And that's it! - diff --git a/docs/guide/src/en/getting_started/mobile.md b/docs/guide/src/en/getting_started/mobile.md index 2f93b807c..72d597f51 100644 --- a/docs/guide/src/en/getting_started/mobile.md +++ b/docs/guide/src/en/getting_started/mobile.md @@ -5,8 +5,8 @@ Build a mobile app with Dioxus! Example: [Todo App](https://github.com/DioxusLabs/example-projects/blob/master/ios_demo) ## Support -Mobile is currently the least-supported renderer target for Dioxus. Mobile apps are rendered with either the platform's WebView or experimentally through [WGPU](https://github.com/DioxusLabs/blitz). WebView doesn't support animations, transparency, and native widgets. +Mobile is currently the least-supported renderer target for Dioxus. Mobile apps are rendered with either the platform's WebView or experimentally through [WGPU](https://github.com/DioxusLabs/blitz). WebView doesn't support animations, transparency, and native widgets. Mobile support is currently best suited for CRUD-style apps, ideally for internal teams who need to develop quickly but don't care much about animations or native widgets. @@ -59,7 +59,7 @@ simple_logger = "*" Edit your `lib.rs`: -```rust +```rust, no_run use dioxus::prelude::*; fn main() { @@ -73,4 +73,4 @@ fn app(cx: Scope) -> Element { } }) } -``` \ No newline at end of file +``` diff --git a/docs/guide/src/en/getting_started/ssr.md b/docs/guide/src/en/getting_started/ssr.md index 7a1954191..080efbb6d 100644 --- a/docs/guide/src/en/getting_started/ssr.md +++ b/docs/guide/src/en/getting_started/ssr.md @@ -39,19 +39,19 @@ tokio = { version = "1.15.0", features = ["full"] } Now, set up your Axum app to respond on an endpoint. -```rust +```rust, no_run {{#include ../../../examples/hello_world_ssr.rs:main}} ``` And then add our endpoint. We can either render `rsx!` directly: -```rust +```rust, no_run {{#include ../../../examples/hello_world_ssr.rs:endpoint}} ``` Or we can render VirtualDoms. -```rust +```rust, no_run {{#include ../../../examples/hello_world_ssr.rs:second_endpoint}} ``` diff --git a/docs/guide/src/en/getting_started/tui.md b/docs/guide/src/en/getting_started/tui.md index 4e8d36cf9..504c01212 100644 --- a/docs/guide/src/en/getting_started/tui.md +++ b/docs/guide/src/en/getting_started/tui.md @@ -29,7 +29,7 @@ cargo add dioxus-tui Then, edit your `main.rs` with the basic template. -```rust +```rust, no_run {{#include ../../../examples/hello_world_tui.rs}} ``` @@ -41,6 +41,6 @@ cargo run Press "ctrl-c" to close the app. To switch from "ctrl-c" to just "q" to quit you can launch the app with a configuration to disable the default quit and use the root TuiContext to quit on your own. -```rust +```rust, no_run {{#include ../../../examples/hello_world_tui_no_ctrl_c.rs}} ``` diff --git a/docs/guide/src/en/getting_started/web.md b/docs/guide/src/en/getting_started/web.md index e8a1f3da2..32d4d3d0f 100644 --- a/docs/guide/src/en/getting_started/web.md +++ b/docs/guide/src/en/getting_started/web.md @@ -52,7 +52,7 @@ cargo add dioxus-web Edit your `main.rs`: -```rust +```rust, no_run {{#include ../../../examples/hello_world_web.rs}} ``` diff --git a/docs/guide/src/en/index.md b/docs/guide/src/en/index.md index 332d5957b..bbebb0bc9 100644 --- a/docs/guide/src/en/index.md +++ b/docs/guide/src/en/index.md @@ -4,7 +4,7 @@ Dioxus is a portable, performant, and ergonomic framework for building cross-platform user interfaces in Rust. This guide will help you get started with writing Dioxus apps for the Web, Desktop, Mobile, and more. -```rust +```rust, no_run fn app(cx: Scope) -> Element { let mut count = use_state(cx, || 0); @@ -18,7 +18,7 @@ fn app(cx: Scope) -> Element { Dioxus is heavily inspired by React. If you know React, getting started with Dioxus will be a breeze. -> This guide assumes you already know some [Rust](https://www.rust-lang.org/)! If not, we recommend reading [*the book*](https://doc.rust-lang.org/book/ch01-00-getting-started.html) to learn Rust first. +> This guide assumes you already know some [Rust](https://www.rust-lang.org/)! If not, we recommend reading [_the book_](https://doc.rust-lang.org/book/ch01-00-getting-started.html) to learn Rust first. ## Features @@ -31,9 +31,10 @@ Dioxus is heavily inspired by React. If you know React, getting started with Dio ### Multiplatform -Dioxus is a *portable* toolkit, meaning the Core implementation can run anywhere with no platform-dependent linking. Unlike many other Rust frontend toolkits, Dioxus is not intrinsically linked to WebSys. In fact, every element and event listener can be swapped out at compile time. By default, Dioxus ships with the `html` feature enabled, but this can be disabled depending on your target renderer. +Dioxus is a _portable_ toolkit, meaning the Core implementation can run anywhere with no platform-dependent linking. Unlike many other Rust frontend toolkits, Dioxus is not intrinsically linked to WebSys. In fact, every element and event listener can be swapped out at compile time. By default, Dioxus ships with the `html` feature enabled, but this can be disabled depending on your target renderer. Right now, we have several 1st-party renderers: + - WebSys (for WASM): Great support - Tao/Tokio (for Desktop apps): Good support - Tao/Tokio (for Mobile apps): Poor support diff --git a/docs/guide/src/en/interactivity/custom_hooks.md b/docs/guide/src/en/interactivity/custom_hooks.md index f3acec269..d075bb632 100644 --- a/docs/guide/src/en/interactivity/custom_hooks.md +++ b/docs/guide/src/en/interactivity/custom_hooks.md @@ -10,13 +10,13 @@ To avoid repetition, you can encapsulate business logic based on existing hooks For example, if many components need to access an `AppSettings` struct, you can create a "shortcut" hook: -```rust +```rust, no_run {{#include ../../../examples/hooks_composed.rs:wrap_context}} ``` Or if you want to wrap a hook that persists reloads with the storage API, you can build on top of the use_ref hook to work with mutable state: -```rust +```rust, no_run {{#include ../../../examples/hooks_composed.rs:use_storage}} ``` @@ -34,7 +34,7 @@ Inside the initialization closure, you will typically make calls to other `cx` m Here is a simplified implementation of the `use_state` hook: -```rust +```rust, no_run {{#include ../../../examples/hooks_custom_logic.rs:use_state}} ``` @@ -42,7 +42,7 @@ Here is a simplified implementation of the `use_state` hook: Here is an implementation of the `use_context` and `use_context_provider` hooks: -```rust +```rust, no_run {{#include ../../../examples/hooks_custom_logic.rs:use_context}} ``` @@ -54,13 +54,13 @@ When writing a custom hook, you should avoid the following anti-patterns: This version of use_state may seem more efficient, but it is not cloneable: -```rust +```rust, no_run {{#include ../../../examples/hooks_anti_patterns.rs:non_clone_state}} ``` If we try to use this hook in an async block, we will get a compile error: -```rust +```rust, no_run fn FutureComponent(cx: &ScopeState) -> Element { let my_state = my_use_state(cx, || 0); cx.spawn({ @@ -76,7 +76,7 @@ fn FutureComponent(cx: &ScopeState) -> Element { But with the original version, we can use it in an async block: -```rust +```rust, no_run fn FutureComponent(cx: &ScopeState) -> Element { let my_state = use_state(cx, || 0); cx.spawn({ diff --git a/docs/guide/src/en/interactivity/dynamic_rendering.md b/docs/guide/src/en/interactivity/dynamic_rendering.md index 5c7ba1314..8d91650c3 100644 --- a/docs/guide/src/en/interactivity/dynamic_rendering.md +++ b/docs/guide/src/en/interactivity/dynamic_rendering.md @@ -6,7 +6,7 @@ Sometimes you want to render different things depending on the state/props. With To render different elements based on a condition, you could use an `if-else` statement: -```rust +```rust, no_run {{#include ../../../examples/conditional_rendering.rs:if_else}} ``` @@ -18,7 +18,7 @@ You may have noticed some repeated code in the `if-else` example above. Repeatin We can improve this example by splitting up the dynamic parts and inserting them where they are needed. -```rust +```rust, no_run {{#include ../../../examples/conditional_rendering.rs:if_else_improved}} ``` @@ -26,18 +26,17 @@ We can improve this example by splitting up the dynamic parts and inserting them Since `Element` is a `Option`, components accepting `Element` as a prop can inspect its contents, and render different things based on that. Example: -```rust +```rust, no_run {{#include ../../../examples/component_children_inspect.rs:Clickable}} ``` You can't mutate the `Element`, but if you need a modified version of it, you can construct a new one based on its attributes/children/etc. - ## Rendering Nothing To render nothing, you can return `None` from a component. This is useful if you want to conditionally hide something: -```rust +```rust, no_run {{#include ../../../examples/conditional_rendering.rs:conditional_none}} ``` @@ -58,7 +57,7 @@ For this, Dioxus accepts iterators that produce `Element`s. So we need to: Example: suppose you have a list of comments you want to render. Then, you can render them like this: -```rust +```rust, no_run {{#include ../../../examples/rendering_lists.rs:render_list}} ``` @@ -66,7 +65,7 @@ Example: suppose you have a list of comments you want to render. Then, you can r Because of how common it is to render a list of items, Dioxus provides a shorthand for this. Instead of using `.iter`, `.map`, and `rsx`, you can use a `for` loop with a body of rsx code: -```rust +```rust, no_run {{#include ../../../examples/rendering_lists.rs:render_list_for_loop}} ``` diff --git a/docs/guide/src/en/interactivity/event_handlers.md b/docs/guide/src/en/interactivity/event_handlers.md index e1057f98b..4c77cef1e 100644 --- a/docs/guide/src/en/interactivity/event_handlers.md +++ b/docs/guide/src/en/interactivity/event_handlers.md @@ -8,7 +8,7 @@ Event handlers are similar to regular attributes, but their name usually starts For example, to handle clicks on an element, we can specify an `onclick` handler: -```rust +```rust, no_run {{#include ../../../examples/event_click.rs:rsx}} ``` @@ -33,7 +33,7 @@ Some events will trigger first on the element the event originated at upward. Fo If you want to prevent this behavior, you can call `stop_propagation()` on the event: -```rust +```rust, no_run {{#include ../../../examples/event_nested.rs:rsx}} ``` @@ -43,25 +43,25 @@ Some events have a default behavior. For keyboard events, this might be entering In some instances, might want to avoid this default behavior. For this, you can add the `prevent_default` attribute with the name of the handler whose default behavior you want to stop. This attribute can be used for multiple handlers using their name separated by spaces: -```rust +```rust, no_run {{#include ../../../examples/event_prevent_default.rs:prevent_default}} ``` Any event handlers will still be called. -> Normally, in React or JavaScript, you'd call "preventDefault" on the event in the callback. Dioxus does *not* currently support this behavior. Note: this means you cannot conditionally prevent default behavior based on the data in the event. +> Normally, in React or JavaScript, you'd call "preventDefault" on the event in the callback. Dioxus does _not_ currently support this behavior. Note: this means you cannot conditionally prevent default behavior based on the data in the event. ## Handler Props Sometimes, you might want to make a component that accepts an event handler. A simple example would be a `FancyButton` component, which accepts an `on_click` handler: -```rust +```rust, no_run {{#include ../../../examples/event_handler_prop.rs:component_with_handler}} ``` Then, you can use it like any other handler: -```rust +```rust, no_run {{#include ../../../examples/event_handler_prop.rs:usage}} ``` diff --git a/docs/guide/src/en/interactivity/hooks.md b/docs/guide/src/en/interactivity/hooks.md index 083f04b49..6851aacbf 100644 --- a/docs/guide/src/en/interactivity/hooks.md +++ b/docs/guide/src/en/interactivity/hooks.md @@ -14,9 +14,10 @@ Hooks allow us to create state in our components. Hooks are Rust functions that For example, you might have seen the counter example, in which state (a number) is tracked using the `use_state` hook: -```rust +```rust, no_run {{#include ../../../examples/hooks_counter.rs:component}} ``` + ![Screenshot: counter app](./images/counter.png) Every time the component's state changes, it re-renders, and the component function is called, so you can describe what you want the new UI to look like. You don't have to worry about "changing" anything – just describe what you want in terms of the state, and Dioxus will take care of the rest! @@ -25,9 +26,10 @@ Every time the component's state changes, it re-renders, and the component funct You can use multiple hooks in the same component if you want: -```rust +```rust, no_run {{#include ../../../examples/hooks_counter_two_state.rs:component}} ``` + ![Screenshot: app with two counters](./images/counter_two_state.png) ## Rules of Hooks @@ -36,7 +38,7 @@ The above example might seem a bit magic, since Rust functions are typically not But how can Dioxus differentiate between multiple hooks in the same component? As you saw in the second example, both `use_state` functions were called with the same parameters, so how come they can return different things when the counters are different? -```rust +```rust, no_run {{#include ../../../examples/hooks_counter_two_state.rs:use_state_calls}} ``` @@ -51,17 +53,20 @@ This is only possible because the two hooks are always called in the same order, These rules mean that there are certain things you can't do with hooks: ### No Hooks in Conditionals -```rust + +```rust, no_run {{#include ../../../examples/hooks_bad.rs:conditional}} ``` ### No Hooks in Closures -```rust + +```rust, no_run {{#include ../../../examples/hooks_bad.rs:closure}} ``` ### No Hooks in Loops -```rust + +```rust, no_run {{#include ../../../examples/hooks_bad.rs:loop}} ``` @@ -75,9 +80,8 @@ Thankfully, there is another hook for that, `use_ref`! It is similar to `use_sta Here's a simple example that keeps a list of events in a `use_ref`. We can acquire write access to the state with `.with_mut()`, and then just `.push` a new value to the state: -```rust +```rust, no_run {{#include ../../../examples/hooks_use_ref.rs:component}} ``` > The return values of `use_state` and `use_ref` (`UseState` and `UseRef`, respectively) are in some ways similar to [`Cell`](https://doc.rust-lang.org/std/cell/) and [`RefCell`](https://doc.rust-lang.org/std/cell/struct.RefCell.html) – they provide interior mutability. However, these Dioxus wrappers also ensure that the component gets re-rendered whenever you change the state. - diff --git a/docs/guide/src/en/interactivity/router.md b/docs/guide/src/en/interactivity/router.md index 4133e5e53..c5f8c7c36 100644 --- a/docs/guide/src/en/interactivity/router.md +++ b/docs/guide/src/en/interactivity/router.md @@ -4,7 +4,6 @@ In many of your apps, you'll want to have different "scenes". For a webpage, the To unify these platforms, Dioxus provides a first-party solution for scene management called Dioxus Router. - ## What is it? For an app like the Dioxus landing page (https://dioxuslabs.com), we want to have several different scenes: @@ -20,12 +19,11 @@ The Dioxus router makes it easy to create these scenes. To make sure we're using cargo add dioxus-router ``` - ## Using the router Unlike other routers in the Rust ecosystem, our router is built declaratively. This makes it possible to compose our app layout simply by arranging components. -```rust +```rust, no_run rsx!{ // All of our routes will be rendered inside this Router component Router { @@ -43,7 +41,7 @@ We can fix this one of two ways: - A fallback 404 page -```rust +```rust, no_run rsx!{ Router { Route { to: "/home", Home {} } @@ -54,10 +52,9 @@ rsx!{ } ``` - - Redirect 404 to home -```rust +```rust, no_run rsx!{ Router { Route { to: "/home", Home {} } @@ -72,8 +69,7 @@ rsx!{ For our app to navigate these routes, we can provide clickable elements called Links. These simply wrap `` elements that, when clicked, navigate the app to the given location. - -```rust +```rust, no_run rsx!{ Link { to: "/home", diff --git a/docs/guide/src/en/interactivity/sharing_state.md b/docs/guide/src/en/interactivity/sharing_state.md index 75ace8973..4c97e53bf 100644 --- a/docs/guide/src/en/interactivity/sharing_state.md +++ b/docs/guide/src/en/interactivity/sharing_state.md @@ -11,7 +11,8 @@ Suppose we want to build a meme editor. We want to have an input to edit the mem > Of course, in this simple example, we could write everything in one component – but it is better to split everything out in smaller components to make the code more reusable, maintainable, and performant (this is even more important for larger, complex apps). We start with a `Meme` component, responsible for rendering a meme with a given caption: -```rust + +```rust, no_run {{#include ../../../examples/meme_editor.rs:meme_component}} ``` @@ -19,14 +20,16 @@ We start with a `Meme` component, responsible for rendering a meme with a given We also create a caption editor, completely decoupled from the meme. The caption editor must not store the caption itself – otherwise, how will we provide it to the `Meme` component? Instead, it should accept the current caption as a prop, as well as an event handler to delegate input events to: -```rust +```rust, no_run {{#include ../../../examples/meme_editor.rs:caption_editor}} ``` Finally, a third component will render the other two as children. It will be responsible for keeping the state and passing down the relevant props. -```rust + +```rust, no_run {{#include ../../../examples/meme_editor.rs:meme_editor}} ``` + ![Meme Editor Screenshot: An old plastic skeleton sitting on a park bench. Caption: "me waiting for a language feature"](./images/meme_editor_screenshot.png) ## Using Context @@ -43,24 +46,26 @@ Dioxus offers a better solution than this "prop drilling" – providing context. First, we have to create a struct for our dark mode configuration: -```rust +```rust, no_run {{#include ../../../examples/meme_editor_dark_mode.rs:DarkMode_struct}} ``` Now, in a top-level component (like `App`), we can provide the `DarkMode` context to all children components: -```rust + +```rust, no_run {{#include ../../../examples/meme_editor_dark_mode.rs:context_provider}} ``` As a result, any child component of `App` (direct or not), can access the `DarkMode` context. -```rust + +```rust, no_run {{#include ../../../examples/meme_editor_dark_mode.rs:use_context}} ``` > `use_context` returns `Option>` here. If the context has been provided, the value is `Some(UseSharedState)`, which you can call `.read` or `.write` on, similarly to `UseRef`. Otherwise, the value is `None`. For example, here's how we would implement the dark mode toggle, which both reads the context (to determine what color it should render) and writes to it (to toggle dark mode): -```rust + +```rust, no_run {{#include ../../../examples/meme_editor_dark_mode.rs:toggle}} ``` - diff --git a/docs/guide/src/en/interactivity/user_input.md b/docs/guide/src/en/interactivity/user_input.md index e39dbcde5..6470588e5 100644 --- a/docs/guide/src/en/interactivity/user_input.md +++ b/docs/guide/src/en/interactivity/user_input.md @@ -6,11 +6,12 @@ Interfaces often need to provide a way to input data: e.g. text, numbers, checkb With controlled inputs, you are directly in charge of the state of the input. This gives you a lot of flexibility, and makes it easy to keep things in sync. For example, this is how you would create a controlled text input: -```rust +```rust, no_run {{#include ../../../examples/input_controlled.rs:component}} ``` Notice the flexibility – you can: + - Also display the same contents in another element, and they will be in sync - Transform the input every time it is modified (e.g. to make sure it is upper case) - Validate the input every time it changes @@ -23,9 +24,10 @@ As an alternative to controlled inputs, you can simply let the platform keep tra Since you don't necessarily have the current value of the uncontrolled input in state, you can access it either by listening to `oninput` events (similarly to controlled components), or, if the input is part of a form, you can access the form data in the form events (e.g. `oninput` or `onsubmit`): -```rust +```rust, no_run {{#include ../../../examples/input_uncontrolled.rs:component}} ``` + ``` Submitted! UiEvent { data: FormData { value: "", values: {"age": "very old", "date": "1966", "name": "Fred"} } } -``` \ No newline at end of file +``` diff --git a/docs/guide/src/pt-br/async/spawn.md b/docs/guide/src/pt-br/async/spawn.md index 95f7e2e3f..3c00934cf 100644 --- a/docs/guide/src/pt-br/async/spawn.md +++ b/docs/guide/src/pt-br/async/spawn.md @@ -2,7 +2,7 @@ Os **"hooks"** `use_future` e `use_coroutine` são úteis se você quiser gerar incondicionalmente o `Future`. Às vezes, porém, você desejará apenas gerar um `Future` em resposta a um evento, como um clique do mouse. Por exemplo, suponha que você precise enviar uma solicitação quando o usuário clicar em um botão "log in". Para isso, você pode usar `cx.spawn`: -```rust +```rust, no_run {{#include ../../../examples/spawn.rs:spawn}} ``` @@ -14,7 +14,7 @@ No entanto, como você normalmente precisa de uma maneira de atualizar o valor d Para tornar isso um pouco menos detalhado, o Dioxus exporta a macro `to_owned!` que criará uma ligação como mostrado acima, o que pode ser bastante útil ao lidar com muitos valores. -```rust +```rust, no_run {{#include ../../../examples/spawn.rs:to_owned_macro}} ``` @@ -24,6 +24,6 @@ Calling `spawn` will give you a `JoinHandle` which lets you cancel or pause the Às vezes, você pode querer gerar uma tarefa em segundo plano que precise de vários _threads_ ou conversar com o hardware que pode bloquear o código do seu aplicativo. Nesses casos, podemos gerar diretamente uma tarefa Tokio do nosso `Future`. Para Dioxus-Desktop, sua tarefa será gerada no tempo de execução Multi-Tarefado do Tokio: -```rust +```rust, no_run {{#include ../../../examples/spawn.rs:tokio}} ``` diff --git a/docs/guide/src/pt-br/async/use_coroutine.md b/docs/guide/src/pt-br/async/use_coroutine.md index cd7cbff11..d7edbd8cc 100644 --- a/docs/guide/src/pt-br/async/use_coroutine.md +++ b/docs/guide/src/pt-br/async/use_coroutine.md @@ -8,7 +8,7 @@ Assim como os `Futures` regulares, o código em uma corrotina Dioxus será execu A configuração básica para corrotinas é o _hook_ `use_coroutine`. A maioria das corrotinas que escrevemos serão _loops_ de pesquisa usando `async`/`await`. -```rust +```rust, no_run fn app(cx: Scope) -> Element { let ws: &UseCoroutine<()> = use_coroutine(cx, |rx| async move { // Connect to some sort of service @@ -26,7 +26,7 @@ Para muitos serviços, um _loop_ assíncrono simples lidará com a maioria dos c No entanto, se quisermos desabilitar temporariamente a corrotina, podemos "pausá-la" usando o método `pause` e "retomá-la" usando o método `resume`: -```rust +```rust, no_run let sync: &UseCoroutine<()> = use_coroutine(cx, |rx| async move { // code for syncing }); @@ -56,7 +56,7 @@ Você deve ter notado que o encerramento `use_coroutine` recebe um argumento cha Usando corrotinas, temos a oportunidade de centralizar nossa lógica assíncrona. O parâmetro `rx` é um canal ilimitado para código externo à corrotina para enviar dados _para_ a corrotina. Em vez de fazer um _loop_ em um serviço externo, podemos fazer um _loop_ no próprio canal, processando mensagens de dentro de nosso aplicativo sem precisar gerar um novo `Future`. Para enviar dados para a corrotina, chamaríamos "send" no _handle_. -```rust +```rust, no_run enum ProfileUpdate { SetUsername(String), SetAge(i32) @@ -84,7 +84,7 @@ cx.render(rsx!{ Para aplicativos suficientemente complexos, poderíamos criar vários "serviços" úteis diferentes que fazem um _loop_ nos canais para atualizar o aplicativo. -```rust +```rust, no_run let profile = use_coroutine(cx, profile_service); let editor = use_coroutine(cx, editor_service); let sync = use_coroutine(cx, sync_service); @@ -104,7 +104,7 @@ async fn editor_service(rx: UnboundedReceiver) { Podemos combinar corrotinas com `Fermi` para emular o sistema `Thunk` do **Redux Toolkit** com muito menos dor de cabeça. Isso nos permite armazenar todo o estado do nosso aplicativo _dentro_ de uma tarefa e, em seguida, simplesmente atualizar os valores de "visualização" armazenados em `Atoms`. Não pode ser subestimado o quão poderosa é essa técnica: temos todas as vantagens das tarefas nativas do Rust com as otimizações e ergonomia do estado global. Isso significa que seu estado _real_ não precisa estar vinculado a um sistema como `Fermi` ou `Redux` – os únicos `Atoms` que precisam existir são aqueles que são usados para controlar a interface. -```rust +```rust, no_run static USERNAME: Atom = |_| "default".to_string(); fn app(cx: Scope) -> Element { @@ -128,7 +128,7 @@ fn Banner(cx: Scope) -> Element { Agora, em nosso serviço de sincronização, podemos estruturar nosso estado como quisermos. Só precisamos atualizar os valores da _view_ quando estiver pronto. -```rust +```rust, no_run enum SyncAction { SetUsername(String), } @@ -155,7 +155,7 @@ async fn sync_service(mut rx: UnboundedReceiver, atoms: AtomRoot) { Para obter valores de uma corrotina, basta usar um identificador `UseState` e definir o valor sempre que sua corrotina concluir seu trabalho. -```rust +```rust, no_run let sync_status = use_state(cx, || Status::Launching); let sync_task = use_coroutine(cx, |rx: UnboundedReceiver| { to_owned![sync_status]; @@ -172,7 +172,7 @@ let sync_task = use_coroutine(cx, |rx: UnboundedReceiver| { Os identificadores de corrotina são injetados automaticamente por meio da API de contexto. `use_coroutine_handle` com o tipo de mensagem como genérico pode ser usado para buscar um _handle_. -```rust +```rust, no_run fn Child(cx: Scope) -> Element { let sync_task = use_coroutine_handle::(cx); diff --git a/docs/guide/src/pt-br/async/use_future.md b/docs/guide/src/pt-br/async/use_future.md index 85f435e35..1e7030ddf 100644 --- a/docs/guide/src/pt-br/async/use_future.md +++ b/docs/guide/src/pt-br/async/use_future.md @@ -4,7 +4,7 @@ Por exemplo, podemos fazer uma solicitação de API dentro de `use_future`: -```rust +```rust, no_run {{#include ../../../examples/use_future.rs:use_future}} ``` @@ -14,7 +14,7 @@ Podemos usar `.value()` para obter o resultado do `Future`. Na primeira execuç Podemos então renderizar esse resultado: -```rust +```rust, no_run {{#include ../../../examples/use_future.rs:render}} ``` @@ -26,6 +26,6 @@ O identificador `UseFuture` fornece um método `restart`. Ele pode ser usado par Muitas vezes, você precisará executar o `Future` novamente toda vez que algum valor (por exemplo, uma prop) mudar. Ao invés de `.restart` manualmente, você pode fornecer uma tupla de "dependências" para o gancho. Ele executará automaticamente o `Future` quando qualquer uma dessas dependências for alterada. Exemplo: -```rust +```rust, no_run {{#include ../../../examples/use_future.rs:dependency}} ``` diff --git a/docs/guide/src/pt-br/best_practices/antipatterns.md b/docs/guide/src/pt-br/best_practices/antipatterns.md index 53fa71df0..fa57ba125 100644 --- a/docs/guide/src/pt-br/best_practices/antipatterns.md +++ b/docs/guide/src/pt-br/best_practices/antipatterns.md @@ -8,7 +8,7 @@ Os fragmentos não montam um elemento físico no DOM imediatamente, então o Dio Apenas os nós Componente e Fragmento são suscetíveis a esse problema. O Dioxus atenua isso com componentes fornecendo uma API para registrar o estado compartilhado sem o padrão _Context Provider_. -```rust +```rust, no_run {{#include ../../../examples/anti_patterns.rs:nested_fragments}} ``` @@ -16,7 +16,7 @@ Apenas os nós Componente e Fragmento são suscetíveis a esse problema. O Dioxu Conforme descrito no capítulo de renderização condicional, os itens da lista devem ter _keys_ exclusivas associadas aos mesmos itens nas renderizações. Isso ajuda o Dioxus a associar o estado aos componentes contidos e garante um bom desempenho de diferenciação. Não omita as _keys_, a menos que você saiba que a lista é estática e nunca será alterada. -```rust +```rust, no_run {{#include ../../../examples/anti_patterns.rs:iter_keys}} ``` diff --git a/docs/guide/src/pt-br/best_practices/error_handling.md b/docs/guide/src/pt-br/best_practices/error_handling.md index 938322234..7e027e9d0 100644 --- a/docs/guide/src/pt-br/best_practices/error_handling.md +++ b/docs/guide/src/pt-br/best_practices/error_handling.md @@ -8,7 +8,7 @@ No entanto, não falamos sobre tratamento de erros neste guia! Neste capítulo, Observadores astutos podem ter notado que `Element` é na verdade um alias de tipo para `Option`. Você não precisa saber o que é um `VNode`, mas é importante reconhecer que não poderíamos retornar nada: -```rust +```rust, no_run fn App(cx: Scope) -> Element { None } @@ -18,7 +18,7 @@ Isso nos permite adicionar um pouco de açúcar sintático para operações que > A natureza de `Option` pode mudar no futuro à medida que a característica `try` for atualizada. -```rust +```rust, no_run fn App(cx: Scope) -> Element { // immediately return "None" let name = cx.use_hook(|_| Some("hi"))?; @@ -29,7 +29,7 @@ fn App(cx: Scope) -> Element { Como o Rust não pode aceitar opções e resultados com a infraestrutura _try_ existente, você precisará manipular os resultados manualmente. Isso pode ser feito convertendo-os em `Option` ou manipulando-os explicitamente. -```rust +```rust, no_run fn App(cx: Scope) -> Element { // Convert Result to Option let name = cx.use_hook(|_| "1.234").parse().ok()?; @@ -52,13 +52,13 @@ A próxima "melhor" maneira de lidar com erros no Dioxus é combinar (`match`) o Para fazer isso, simplesmente temos um estado de erro embutido em nosso componente: -```rust +```rust, no_run let err = use_state(cx, || None); ``` Sempre que realizarmos uma ação que gere um erro, definiremos esse estado de erro. Podemos então combinar o erro de várias maneiras (retorno antecipado, elemento de retorno etc.). -```rust +```rust, no_run fn Commandline(cx: Scope) -> Element { let error = use_state(cx, || None); @@ -79,7 +79,7 @@ fn Commandline(cx: Scope) -> Element { Se você estiver lidando com alguns componentes com um mínimo de aninhamento, basta passar o identificador de erro para componentes filhos. -```rust +```rust, no_run fn Commandline(cx: Scope) -> Element { let error = use_state(cx, || None); @@ -106,7 +106,7 @@ Para começar, considere usar um _hook_ embutido como `use_context` e `use_conte No "topo" de nossa arquitetura, queremos declarar explicitamente um valor que pode ser um erro. -```rust +```rust, no_run enum InputError { None, TooLong, @@ -118,7 +118,7 @@ static INPUT_ERROR: Atom = |_| InputError::None; Então, em nosso componente de nível superior, queremos tratar explicitamente o possível estado de erro para esta parte da árvore. -```rust +```rust, no_run fn TopLevel(cx: Scope) -> Element { let error = use_read(cx, INPUT_ERROR); @@ -132,7 +132,7 @@ fn TopLevel(cx: Scope) -> Element { Agora, sempre que um componente _downstream_ tiver um erro em suas ações, ele pode simplesmente definir seu próprio estado de erro: -```rust +```rust, no_run fn Commandline(cx: Scope) -> Element { let set_error = use_set(cx, INPUT_ERROR); diff --git a/docs/guide/src/pt-br/custom_renderer/index.md b/docs/guide/src/pt-br/custom_renderer/index.md index 68881382a..195f9d6ca 100644 --- a/docs/guide/src/pt-br/custom_renderer/index.md +++ b/docs/guide/src/pt-br/custom_renderer/index.md @@ -21,7 +21,7 @@ Como referência, confira o interpretador `javascript` ou o renderizador `tui` c O tipo "DomEdit" é uma `enum` serializada que representa uma operação atômica que ocorre no `RealDom`. As variantes seguem aproximadamente este conjunto: -```rust +```rust, no_run enum DomEdit { PushRoot, AppendChildren, @@ -48,7 +48,7 @@ O mecanismo de diferenciação Dioxus opera como uma [máquina de pilha] (https: Para fins de compreensão, vamos considerar este exemplo – uma declaração de interface do usuário muito simples: -```rust +```rust, no_run rsx!( h1 {"hello world"} ) ``` @@ -56,7 +56,7 @@ Para começar, o Dioxus deve primeiro navegar até o contêiner dessa tag h1. Pa Quando o renderizador recebe essa instrução, ele empurra o `Node` real para sua própria pilha. A pilha do renderizador real ficará assim: -```rust +```rust, no_run instructions: [ PushRoot(Container) ] @@ -67,7 +67,7 @@ stack: [ Em seguida, o Dioxus encontrará o nó `h1`. O algoritmo `diff` decide que este nó precisa ser criado, então o Dioxus irá gerar o DomEdit `CreateElement`. Quando o renderizador receber esta instrução, ele criará um nó desmontado e o enviará para sua própria pilha (_stack_): -```rust +```rust, no_run instructions: [ PushRoot(Container), CreateElement(h1), @@ -80,7 +80,7 @@ stack: [ Em seguida, Dioxus vê o nó de texto e gera o DomEdit `CreateTextNode`: -```rust +```rust, no_run instructions: [ PushRoot(Container), CreateElement(h1), @@ -95,7 +95,7 @@ stack: [ Lembre-se, o nó de texto não está anexado a nada (ele está desmontado), então o Dioxus precisa gerar um _Edit_ que conecte o nó de texto ao elemento `h1`. Depende da situação, mas neste caso usamos `AppendChildren`. Isso remove o nó de texto da _stack_, deixando o elemento `h1` como o próximo elemento na linha. -```rust +```rust, no_run instructions: [ PushRoot(Container), CreateElement(h1), @@ -110,7 +110,7 @@ stack: [ Chamamos `AppendChildren` novamente, retirando o nó `h1` e anexando-o ao pai: -```rust +```rust, no_run instructions: [ PushRoot(Container), CreateElement(h1), @@ -125,7 +125,7 @@ stack: [ Finalmente, o contêiner é aberto, pois não precisamos mais dele. -```rust +```rust, no_run instructions: [ PushRoot(Container), CreateElement(h1), @@ -139,7 +139,7 @@ stack: [] Com o tempo, nossa _stack_ ficou assim: -```rust +```rust, no_run [] [Container] [Container, h1] @@ -165,7 +165,7 @@ Como a maioria das GUIs, o Dioxus conta com um _loop_ de eventos para progredir O código para a implementação do `WebSys` é direto, então vamos adicioná-lo aqui para demonstrar como um `loop` de eventos é simples: -```rust +```rust, no_run pub async fn run(&mut self) -> dioxus_core::error::Result<()> { // Push the body element onto the WebsysDom's stack machine let mut websys_dom = crate::new::WebsysDom::new(prepare_websys_dom()); @@ -195,7 +195,7 @@ pub async fn run(&mut self) -> dioxus_core::error::Result<()> { É importante que você decodifique os eventos reais do seu sistema de eventos no sistema de eventos sintético do Dioxus (entenda sintético como abstraído). Isso significa simplesmente combinar seu tipo de evento e criar um tipo Dioxus `UserEvent`. No momento, o sistema `VirtualEvent` é modelado quase inteiramente em torno da especificação HTML, mas estamos interessados em reduzi-lo. -```rust +```rust, no_run fn virtual_event_from_websys_event(event: &web_sys::Event) -> VirtualEvent { match event.type_().as_str() { "keydown" => { @@ -233,7 +233,7 @@ Esses elementos personalizados são definidos como estruturas de unidade com imp Por exemplo, o elemento `div` é (aproximadamente!) definido assim: -```rust +```rust, no_run struct div; impl div { /// Some glorious documentation about the class property. @@ -262,7 +262,7 @@ O `RealDom` é uma abstração de nível superior sobre a atualização do Dom. Vamos construir um renderizador de exemplo com bordas, tamanho e cor do texto. Antes de começarmos, vamos dar uma olhada em um elemento de exemplo que podemos renderizar: -```rust +```rust, no_run cx.render(rsx!{ div{ color: "red", @@ -280,50 +280,50 @@ No diagrama a seguir, as setas representam o fluxo de dados: [![](https://mermaid.ink/img/pako:eNqdVNFqgzAU_RXJXizUUZPJmIM-jO0LukdhpCbO0JhIGteW0n9fNK1Oa0brfUnu9VxyzzkXjyCVhIIYZFzu0hwr7X2-JcIzsa3W3wqXuZdKoele22oddfa1Y0Tnfn31muvMfqeCDNq3GmvaNROmaKqZFO1DPTRhP8MOd1fTWYNDvzlmQbBMJZcq9JtjNgY1mLVUhBqQPQeojl3wGCw5PsjqnIe-zXqEL8GZ2Kz0gVMPmoeU3ND4IcuiaLGY2zRouuKncv_qGKv3VodpJe0JVU6QCQ5kgqMyWQVr8hbk4hm1PBcmsuwmnrCVH94rP7xN_ucp8sOB_EPSfz9drYVrkpc_AmH8_yTjJueUc-ntpOJkgt2os9tKjcYlt-DLUiD3UsB2KZCLcwjv3Aq33-g2v0M0xXA0MBy5DUdXi-gcJZriuLmAOSioKjAj5ld8rMsJ0DktaAJicyVYbRKQiJPBVSUx438QpqUCcYb5ls4BrrRcHUTaFizqnWGzR8W5evoFI-bJdw)](https://mermaid-js.github.io/mermaid-live-editor/edit#pako:eNqdVNFqgzAU_RXJXizUUZPJmIM-jO0LukdhpCbO0JhIGteW0n9fNK1Oa0brfUnu9VxyzzkXjyCVhIIYZFzu0hwr7X2-JcIzsa3W3wqXuZdKoele22oddfa1Y0Tnfn31muvMfqeCDNq3GmvaNROmaKqZFO1DPTRhP8MOd1fTWYNDvzlmQbBMJZcq9JtjNgY1mLVUhBqQPQeojl3wGCw5PsjqnIe-zXqEL8GZ2Kz0gVMPmoeU3ND4IcuiaLGY2zRouuKncv_qGKv3VodpJe0JVU6QCQ5kgqMyWQVr8hbk4hm1PBcmsuwmnrCVH94rP7xN_ucp8sOB_EPSfz9drYVrkpc_AmH8_yTjJueUc-ntpOJkgt2os9tKjcYlt-DLUiD3UsB2KZCLcwjv3Aq33-g2v0M0xXA0MBy5DUdXi-gcJZriuLmAOSioKjAj5ld8rMsJ0DktaAJicyVYbRKQiJPBVSUx438QpqUCcYb5ls4BrrRcHUTaFizqnWGzR8W5evoFI-bJdw) -[//]: # '%% mermaid flow chart' -[//]: # 'flowchart TB' -[//]: # ' subgraph context' -[//]: # ' text_width(text width)' -[//]: # ' end' -[//]: # ' subgraph state' -[//]: # ' direction TB' -[//]: # ' subgraph div state' -[//]: # ' direction TB' -[//]: # ' state1(state)-->color1(color)' -[//]: # ' state1-->border1(border)' -[//]: # ' text_width-.->layout_width1(layout width)' -[//]: # ' linkStyle 2 stroke:#ff5500,stroke-width:4px;' -[//]: # ' state1-->layout_width1' -[//]: # ' end' -[//]: # ' subgraph p state' -[//]: # ' direction TB' -[//]: # ' state2(state)-->color2(color)' -[//]: # ' color1-.->color2' -[//]: # ' linkStyle 5 stroke:#0000ff,stroke-width:4px;' -[//]: # ' state2-->border2(border)' -[//]: # ' text_width-.->layout_width2(layout width)' -[//]: # ' linkStyle 7 stroke:#ff5500,stroke-width:4px;' -[//]: # ' state2-->layout_width2' -[//]: # ' layout_width2-.->layout_width1' -[//]: # ' linkStyle 9 stroke:#00aa00,stroke-width:4px;' -[//]: # ' end' -[//]: # ' subgraph hello world state' -[//]: # ' direction TB' -[//]: # ' state3(state)-->border3(border)' -[//]: # ' state3-->color3(color)' -[//]: # ' color2-.->color3' -[//]: # ' linkStyle 12 stroke:#0000ff,stroke-width:4px;' -[//]: # ' text_width-.->layout_width3(layout width)' -[//]: # ' linkStyle 13 stroke:#ff5500,stroke-width:4px;' -[//]: # ' state3-->layout_width3' -[//]: # ' layout_width3-.->layout_width2' -[//]: # ' linkStyle 15 stroke:#00aa00,stroke-width:4px;' -[//]: # ' end' -[//]: # ' end' +[//]: # "%% mermaid flow chart" +[//]: # "flowchart TB" +[//]: # " subgraph context" +[//]: # " text_width(text width)" +[//]: # " end" +[//]: # " subgraph state" +[//]: # " direction TB" +[//]: # " subgraph div state" +[//]: # " direction TB" +[//]: # " state1(state)-->color1(color)" +[//]: # " state1-->border1(border)" +[//]: # " text_width-.->layout_width1(layout width)" +[//]: # " linkStyle 2 stroke:#ff5500,stroke-width:4px;" +[//]: # " state1-->layout_width1" +[//]: # " end" +[//]: # " subgraph p state" +[//]: # " direction TB" +[//]: # " state2(state)-->color2(color)" +[//]: # " color1-.->color2" +[//]: # " linkStyle 5 stroke:#0000ff,stroke-width:4px;" +[//]: # " state2-->border2(border)" +[//]: # " text_width-.->layout_width2(layout width)" +[//]: # " linkStyle 7 stroke:#ff5500,stroke-width:4px;" +[//]: # " state2-->layout_width2" +[//]: # " layout_width2-.->layout_width1" +[//]: # " linkStyle 9 stroke:#00aa00,stroke-width:4px;" +[//]: # " end" +[//]: # " subgraph hello world state" +[//]: # " direction TB" +[//]: # " state3(state)-->border3(border)" +[//]: # " state3-->color3(color)" +[//]: # " color2-.->color3" +[//]: # " linkStyle 12 stroke:#0000ff,stroke-width:4px;" +[//]: # " text_width-.->layout_width3(layout width)" +[//]: # " linkStyle 13 stroke:#ff5500,stroke-width:4px;" +[//]: # " state3-->layout_width3" +[//]: # " layout_width3-.->layout_width2" +[//]: # " linkStyle 15 stroke:#00aa00,stroke-width:4px;" +[//]: # " end" +[//]: # " end" Para ajudar na construção de um DOM, o núcleo nativo fornece quatro `traits`: `State`, `ChildDepState`, `ParentDepState` e `NodeDepState` e uma estrutura `RealDom`. O `ChildDepState`, `ParentDepState` e `NodeDepState` fornecem uma maneira de descrever como algumas informações em um nó se relacionam com as de seus parentes. Ao fornecer como construir um único nó a partir de suas relações, o native-core derivará uma maneira de atualizar o estado de todos os nós para você com `#[derive(State)]`. Depois de ter um estado, você pode fornecê-lo como genérico ao `RealDom`. `RealDom` fornece todos os métodos para interagir e atualizar seu novo dom. -```rust +```rust, no_run use dioxus_native_core::node_ref::*; use dioxus_native_core::state::{ChildDepState, NodeDepState, ParentDepState, State}; use dioxus_native_core_macro::{sorted_str_slice, State}; @@ -455,7 +455,7 @@ struct ToyState { Agora que temos nosso estado, podemos colocá-lo em uso em nosso DOM. Você pode atualizar o DOM com `update_state` para atualizar a estrutura do dom (adicionando, removendo e alterando as propriedades dos nós) e então `apply_mutations` para atualizar o `ToyState` para cada um dos nós que foram alterados. -```rust +```rust, no_run fn main(){ fn app(cx: Scope) -> Element { cx.render(rsx!{ diff --git a/docs/guide/src/pt-br/describing_ui/component_children.md b/docs/guide/src/pt-br/describing_ui/component_children.md index 433213616..9663dca19 100644 --- a/docs/guide/src/pt-br/describing_ui/component_children.md +++ b/docs/guide/src/pt-br/describing_ui/component_children.md @@ -2,13 +2,13 @@ Em alguns casos, você pode desejar criar um componente que atue como um contêiner para algum outro conteúdo, sem que o componente precise saber qual é esse conteúdo. Para conseguir isso, crie uma _prop_ do tipo `Element`: -```rust +```rust, no_run {{#include ../../../examples/component_element_props.rs:Clickable}} ``` Então, ao renderizar o componente, você pode passar a saída de `cx.render(rsx!(...))`: -```rust +```rust, no_run {{#include ../../../examples/component_element_props.rs:Clickable_usage}} ``` @@ -20,12 +20,12 @@ Então, ao renderizar o componente, você pode passar a saída de `cx.render(rsx Em vez de passar o `RSX` através de uma _prop_ regular, você pode querer aceitar filhos da mesma forma que os elementos podem ter filhos. O prop "mágico" `children` permite que você consiga isso: -```rust +```rust, no_run {{#include ../../../examples/component_children.rs:Clickable}} ``` Isso torna o uso do componente muito mais simples: basta colocar o `RSX` dentro dos colchetes `{}` – e não há necessidade de uma chamada `render` ou outra macro! -```rust +```rust, no_run {{#include ../../../examples/component_children.rs:Clickable_usage}} ``` diff --git a/docs/guide/src/pt-br/describing_ui/component_props.md b/docs/guide/src/pt-br/describing_ui/component_props.md index 7d3b8e976..4cb5a50ca 100644 --- a/docs/guide/src/pt-br/describing_ui/component_props.md +++ b/docs/guide/src/pt-br/describing_ui/component_props.md @@ -19,13 +19,13 @@ Existem 2 tipos de estruturas Props: _Props_ próprios são muito simples – eles não emprestam nada. Exemplo: -```rust +```rust, no_run {{#include ../../../examples/component_owned_props.rs:Likes}} ``` Você pode então passar valores de _prop_ para o componente da mesma forma que você passaria atributos para um elemento: -```rust +```rust, no_run {{#include ../../../examples/component_owned_props.rs:App}} ``` @@ -37,13 +37,13 @@ Possuir _props_ funciona bem se seus _props_ forem fáceis de copiar – como um Rust permite algo mais eficiente – emprestar a `String` como um `&str` – é para isso que servem as _props emprestadas_! -```rust +```rust, no_run {{#include ../../../examples/component_borrowed_props.rs:TitleCard}} ``` Podemos então usar o componente assim: -```rust +```rust, no_run {{#include ../../../examples/component_borrowed_props.rs:App}} ``` @@ -57,13 +57,13 @@ A macro `#[derive(Props)]` tem alguns recursos que permitem personalizar o compo Você pode criar campos opcionais usando o tipo `Option<…>` para um campo: -```rust +```rust, no_run {{#include ../../../examples/component_props_options.rs:OptionalProps}} ``` Em seguida, você pode optar por fornecê-los ou não: -```rust +```rust, no_run {{#include ../../../examples/component_props_options.rs:OptionalProps_usage}} ``` @@ -71,13 +71,13 @@ Em seguida, você pode optar por fornecê-los ou não: Se você quiser exigir explicitamente uma `Option`, e não uma _prop_ opcional, você pode anotá-la com `#[props(!optional)]`: -```rust +```rust, no_run {{#include ../../../examples/component_props_options.rs:ExplicitOption}} ``` Então, você tem que passar explicitamente `Some("str")` ou `None`: -```rust +```rust, no_run {{#include ../../../examples/component_props_options.rs:ExplicitOption_usage}} ``` @@ -85,13 +85,13 @@ Então, você tem que passar explicitamente `Some("str")` ou `None`: Você pode usar `#[props(default = 42)]` para tornar um campo opcional e especificar seu valor padrão: -```rust +```rust, no_run {{#include ../../../examples/component_props_options.rs:DefaultComponent}} ``` Então, da mesma forma que _props_ opcionais, você não precisa fornecê-lo: -```rust +```rust, no_run {{#include ../../../examples/component_props_options.rs:DefaultComponent_usage}} ``` @@ -99,13 +99,13 @@ Então, da mesma forma que _props_ opcionais, você não precisa fornecê-lo: É comum que as funções Rust aceitem `impl Into` em vez de apenas `SomeType` para suportar uma ampla gama de parâmetros. Se você quiser uma funcionalidade semelhante com _props_, você pode usar `#[props(into)]`. Por exemplo, você pode adicioná-lo em uma prop `String` – e `&str` também será aceito automaticamente, pois pode ser convertido em `String`: -```rust +```rust, no_run {{#include ../../../examples/component_props_options.rs:IntoComponent}} ``` Então, você pode usá-lo assim: -```rust +```rust, no_run {{#include ../../../examples/component_props_options.rs:IntoComponent_usage}} ``` @@ -115,7 +115,7 @@ Até agora, todas as funções `Component` que vimos tinham uma _struct_ `Compon `inline_props` permite que você faça exatamente isso. Em vez de digitar a versão "completa": -```rust +```rust, no_run #[derive(Props, PartialEq)] struct TitleCardProps { title: String, @@ -130,7 +130,7 @@ fn TitleCard(cx: Scope) -> Element { ...você pode definir uma função que aceita _props_ como argumentos. Então, basta anotá-lo com `#[inline_props]`, e a macro irá transformá-lo em um componente regular para você: -```rust +```rust, no_run #[inline_props] fn TitleCard(cx: Scope, title: String) -> Element { cx.render(rsx!{ diff --git a/docs/guide/src/pt-br/describing_ui/components.md b/docs/guide/src/pt-br/describing_ui/components.md index d33585cea..91123b5f8 100644 --- a/docs/guide/src/pt-br/describing_ui/components.md +++ b/docs/guide/src/pt-br/describing_ui/components.md @@ -4,7 +4,7 @@ Assim como você não gostaria de escrever um programa complexo em uma única e Um componente é uma função Rust, nomeada em _UpperCammelCase_, que recebe um parâmetro `Scope` e retorna um `Element` descrevendo a interface do usuário que deseja renderizar. Na verdade, nossa função `App` é um componente! -```rust +```rust, no_run {{#include ../../../examples/hello_world_desktop.rs:component}} ``` @@ -12,13 +12,13 @@ Um componente é uma função Rust, nomeada em _UpperCammelCase_, que recebe um Um Componente é responsável por alguma tarefa de renderização – normalmente, renderizando uma parte isolada da interface do usuário. Por exemplo, você pode ter um componente `About` que renderiza uma breve descrição do Dioxus Labs: -```rust +```rust, no_run {{#include ../../../examples/components.rs:About}} ``` Em seguida, você pode renderizar seu componente em outro componente, da mesma forma que os elementos são renderizados: -```rust +```rust, no_run {{#include ../../../examples/components.rs:App}} ``` diff --git a/docs/guide/src/pt-br/describing_ui/index.md b/docs/guide/src/pt-br/describing_ui/index.md index 8da134903..212e67921 100644 --- a/docs/guide/src/pt-br/describing_ui/index.md +++ b/docs/guide/src/pt-br/describing_ui/index.md @@ -4,7 +4,7 @@ Dioxus é uma estrutura _declarativa_. Isso significa que, em vez de dizer ao Di Você já viu um exemplo simples ou sintaxe `RSX` no aplicativo "hello world": -```rust +```rust, no_run {{#include ../../../examples/hello_world_desktop.rs:component}} ``` @@ -14,7 +14,7 @@ Aqui, usamos a macro `rsx!` para _declarar_ que queremos um elemento `div`, cont O RSX é muito semelhante ao HTML, pois descreve elementos com atributos e filhos. Aqui está um elemento `div` vazio no RSX, bem como o HTML resultante: -```rust +```rust, no_run {{#include ../../../examples/rsx_overview.rs:empty}} ``` @@ -26,7 +26,7 @@ O RSX é muito semelhante ao HTML, pois descreve elementos com atributos e filho Para adicionar filhos a um elemento, coloque-os dentro dos colchetes `{}`. Eles podem ser outros elementos ou texto. Por exemplo, você pode ter um elemento `ol` (lista ordenada), contendo 3 elementos `li` (item da lista), cada um dos quais contém algum texto: -```rust +```rust, no_run {{#include ../../../examples/rsx_overview.rs:children}} ``` @@ -44,7 +44,7 @@ Você também pode "agrupar" elementos envolvendo-os em `Fragment {}`. Isso não > Nota: você também pode renderizar vários elementos no nível superior de `rsx!` e eles serão agrupados automaticamente – não há necessidade de um `Fragment {}` explícito lá. -```rust +```rust, no_run {{#include ../../../examples/rsx_overview.rs:fragments}} ``` @@ -60,7 +60,7 @@ Você também pode "agrupar" elementos envolvendo-os em `Fragment {}`. Isso não Os atributos também são especificados dentro dos colchetes `{}`, usando a sintaxe `name: value`. Você pode fornecer o valor como um literal no RSX: -```rust +```rust, no_run {{#include ../../../examples/rsx_overview.rs:attributes}} ``` @@ -79,7 +79,7 @@ Os atributos também são especificados dentro dos colchetes `{}`, usando a sint Dioxus tem um conjunto pré-configurado de atributos que você pode usar. O RSX é validado em tempo de compilação para garantir que você não especificou um atributo inválido. Se você quiser substituir esse comportamento por um nome de atributo personalizado, especifique o atributo entre aspas: -```rust +```rust, no_run {{#include ../../../examples/rsx_overview.rs:custom_attributes}} ``` @@ -91,7 +91,7 @@ Dioxus tem um conjunto pré-configurado de atributos que você pode usar. O RSX Da mesma forma que você pode [formatar](https://doc.rust-lang.org/rust-by-example/hello/print/fmt.html) Rust _strings_, você também pode interpolar no texto RSX. Use `{variable}` para exibir o valor de uma variável em uma _string_, ou `{variable:?}` para usar a representação `Debug`: -```rust +```rust, no_run {{#include ../../../examples/rsx_overview.rs:formatting}} ``` @@ -107,7 +107,7 @@ Da mesma forma que você pode [formatar](https://doc.rust-lang.org/rust-by-examp Você pode incluir expressões Rust arbitrárias dentro do RSX, mas deve escapá-las entre colchetes `[]`: -```rust +```rust, no_run {{#include ../../../examples/rsx_overview.rs:expression}} ``` diff --git a/docs/guide/src/pt-br/describing_ui/special_attributes.md b/docs/guide/src/pt-br/describing_ui/special_attributes.md index e196f667b..01bfe9b25 100644 --- a/docs/guide/src/pt-br/describing_ui/special_attributes.md +++ b/docs/guide/src/pt-br/describing_ui/special_attributes.md @@ -8,7 +8,7 @@ Se você estiver trabalhando com itens pré-renderizados, modelos ou uma bibliot Por exemplo, enviar um conversor de markdown para Dioxus pode aumentar significativamente o tamanho final do aplicativo. Em vez disso, você desejará pré-renderizar sua remarcação para HTML e, em seguida, incluir o HTML diretamente em sua saída. Usamos essa abordagem para a [página inicial do Dioxus](https://dioxuslabs.com): -```rust +```rust, no_run {{#include ../../../examples/dangerous_inner_html.rs:dangerous_inner_html}} ``` @@ -22,7 +22,7 @@ A maioria dos atributos, quando renderizados, serão renderizados exatamente com Portanto, este RSX não renderizaria o atributo `hidden`: -```rust +```rust, no_run {{#include ../../../examples/boolean_attribute.rs:boolean_attribute}} ``` diff --git a/docs/guide/src/pt-br/getting_started/desktop.md b/docs/guide/src/pt-br/getting_started/desktop.md index 5c6940b96..70f71aa1a 100644 --- a/docs/guide/src/pt-br/getting_started/desktop.md +++ b/docs/guide/src/pt-br/getting_started/desktop.md @@ -35,6 +35,6 @@ cargo add dioxus-desktop Edite seu `main.rs`: -```rust +```rust, no_run {{#include ../../../examples/hello_world_desktop.rs:all}} ``` diff --git a/docs/guide/src/pt-br/getting_started/mobile.md b/docs/guide/src/pt-br/getting_started/mobile.md index edcfbfba7..66a17272b 100644 --- a/docs/guide/src/pt-br/getting_started/mobile.md +++ b/docs/guide/src/pt-br/getting_started/mobile.md @@ -59,7 +59,7 @@ simple_logger = "*" Edite seu `lib.rs`: -```rust +```rust, no_run use dioxus::prelude::*; fn main() { diff --git a/docs/guide/src/pt-br/getting_started/ssr.md b/docs/guide/src/pt-br/getting_started/ssr.md index ddb02a289..ebf478163 100644 --- a/docs/guide/src/pt-br/getting_started/ssr.md +++ b/docs/guide/src/pt-br/getting_started/ssr.md @@ -16,7 +16,7 @@ Ao trabalhar com frameworks web que requerem `Send`, é possível renderizar um Se você quer apenas renderizar `rsx!` ou um VirtualDom para HTML, confira os documentos da API. É bem simples: -```rust +```rust, no_run // We can render VirtualDoms let mut vdom = VirtualDom::new(app); let _ = vdom.rebuild(); @@ -61,7 +61,7 @@ tokio = { version = "1.15.0", features = ["full"] } Agora, configure seu aplicativo Axum para responder em um _endpoint_. -```rust +```rust, no_run use axum::{response::Html, routing::get, Router}; use dioxus::prelude::*; @@ -83,7 +83,7 @@ async fn main() { E, em seguida, adicione nosso _endpoint_. Podemos renderizar `rsx!` diretamente: -```rust +```rust, no_run async fn app_endpoint() -> Html { Html(dioxus_ssr::render_lazy(rsx! { h1 { "hello world!" } @@ -93,7 +93,7 @@ async fn app_endpoint() -> Html { Ou podemos renderizar `VirtualDoms`. -```rust +```rust, no_run async fn app_endpoint() -> Html { fn app(cx: Scope) -> Element { cx.render(rsx!(h1 { "hello world" })) diff --git a/docs/guide/src/pt-br/getting_started/tui.md b/docs/guide/src/pt-br/getting_started/tui.md index deaf060b6..ba4e2ecda 100644 --- a/docs/guide/src/pt-br/getting_started/tui.md +++ b/docs/guide/src/pt-br/getting_started/tui.md @@ -23,7 +23,7 @@ cargo add dioxus-tui Em seguida, edite seu `main.rs` com o modelo básico. -```rust +```rust, no_run {{#include ../../../examples/hello_world_tui.rs}} ``` @@ -35,7 +35,7 @@ cargo run Pressione "ctrl-c" para fechar o aplicativo. Para mudar de "ctrl-c" para apenas "q" para sair, você pode iniciar o aplicativo com uma configuração para desativar o sair padrão e usar a raiz TuiContext para sair por conta própria. -```rust +```rust, no_run {{#include ../../../examples/hello_world_tui_no_ctrl_c.rs}} ``` diff --git a/docs/guide/src/pt-br/getting_started/web.md b/docs/guide/src/pt-br/getting_started/web.md index ffb322a25..47991b595 100644 --- a/docs/guide/src/pt-br/getting_started/web.md +++ b/docs/guide/src/pt-br/getting_started/web.md @@ -64,7 +64,7 @@ Adicione um `index.html` para o `Trunk` usar. Certifique-se de que seu elemento Edite seu `main.rs`: -```rust +```rust, no_run {{#include ../../../examples/hello_world_web.rs}} ``` diff --git a/docs/guide/src/pt-br/index.md b/docs/guide/src/pt-br/index.md index 121f3ef45..e3d32ebc2 100644 --- a/docs/guide/src/pt-br/index.md +++ b/docs/guide/src/pt-br/index.md @@ -4,7 +4,7 @@ Dioxus é uma estrutura portátil, de alto desempenho e ergonômica para a construção de interfaces de usuário multiplataforma no Rust. Este guia irá ajudá-lo a começar a escrever aplicativos Dioxus para a Web, Desktop, Mobile e muito mais. -```rust +```rust, no_run fn app(cx: Scope) -> Element { let mut count = use_state(cx, || 0); diff --git a/docs/guide/src/pt-br/interactivity/custom_hooks.md b/docs/guide/src/pt-br/interactivity/custom_hooks.md index 881a0946a..c2ac570c4 100644 --- a/docs/guide/src/pt-br/interactivity/custom_hooks.md +++ b/docs/guide/src/pt-br/interactivity/custom_hooks.md @@ -8,7 +8,7 @@ Para evitar a repetição, você pode encapsular a lógica de negócios com base Por exemplo, se muitos componentes precisam acessar uma _struct_ `AppSettings`, você pode criar um gancho de "atalho": -```rust +```rust, no_run {{#include ../../../examples/hooks_composed.rs:wrap_context}} ``` diff --git a/docs/guide/src/pt-br/interactivity/dynamic_rendering.md b/docs/guide/src/pt-br/interactivity/dynamic_rendering.md index 2298735e5..58c120926 100644 --- a/docs/guide/src/pt-br/interactivity/dynamic_rendering.md +++ b/docs/guide/src/pt-br/interactivity/dynamic_rendering.md @@ -6,7 +6,7 @@ Para renderizar diferentes elementos com base em uma condição, você pode usar uma instrução `if-else`: -```rust +```rust, no_run {{#include ../../../examples/conditional_rendering.rs:if_else}} ``` @@ -16,7 +16,7 @@ Para renderizar diferentes elementos com base em uma condição, você pode usar Como `Element` é uma `Option`, os componentes que aceitam `Element` como _prop_ podem realmente inspecionar seu conteúdo e renderizar coisas diferentes com base nisso. Exemplo: -```rust +```rust, no_run {{#include ../../../examples/component_children_inspect.rs:Clickable}} ``` @@ -26,7 +26,7 @@ Você não pode modificar o `Element`, mas se precisar de uma versão modificada Para renderizar nada, você pode retornar `None` de um componente. Isso é útil se você deseja ocultar algo condicionalmente: -```rust +```rust, no_run {{#include ../../../examples/conditional_rendering.rs:conditional_none}} ``` @@ -47,7 +47,7 @@ Para isso, o Dioxus aceita iteradores que produzem `Element`s. Então precisamos Exemplo: suponha que você tenha uma lista de comentários que deseja renderizar. Então, você pode renderizá-los assim: -```rust +```rust, no_run {{#include ../../../examples/rendering_lists.rs:render_list}} ``` diff --git a/docs/guide/src/pt-br/interactivity/event_handlers.md b/docs/guide/src/pt-br/interactivity/event_handlers.md index 2143dba4a..12aad321e 100644 --- a/docs/guide/src/pt-br/interactivity/event_handlers.md +++ b/docs/guide/src/pt-br/interactivity/event_handlers.md @@ -8,7 +8,7 @@ Os manipuladores de eventos são semelhantes aos atributos regulares, mas seus n Por exemplo, para manipular cliques em um elemento, podemos especificar um manipulador `onclick`: -```rust +```rust, no_run {{#include ../../../examples/event_click.rs:rsx}} ``` @@ -29,7 +29,7 @@ Para saber o que os diferentes tipos de eventos fornecem, leia os [documentos do Quando você tem, por exemplo um `button` dentro de um `div`, qualquer clique no `button` também é um clique no `div`. Por esta razão, Dioxus propaga o evento click: primeiro, ele é acionado no elemento alvo, depois nos elementos pai. Se você quiser evitar esse comportamento, você pode chamar `cancel_bubble()` no evento: -```rust +```rust, no_run {{#include ../../../examples/event_click.rs:rsx}} ``` @@ -39,7 +39,7 @@ Alguns eventos têm um comportamento padrão. Para eventos de teclado, isso pode Em alguns casos, você pode querer evitar esse comportamento padrão. Para isso, você pode adicionar o atributo `prevent_default` com o nome do manipulador cujo comportamento padrão você deseja interromper. Este atributo é especial: você pode anexá-lo várias vezes para vários atributos: -```rust +```rust, no_run {{#include ../../../examples/event_prevent_default.rs:prevent_default}} ``` @@ -51,13 +51,13 @@ Quaisquer manipuladores de eventos ainda serão chamados. Às vezes, você pode querer criar um componente que aceite um manipulador de eventos. Um exemplo simples seria um componente `FancyButton`, que aceita um manipulador `on_click`: -```rust +```rust, no_run {{#include ../../../examples/event_handler_prop.rs:component_with_handler}} ``` Então, você pode usá-lo como qualquer outro manipulador: -```rust +```rust, no_run {{#include ../../../examples/event_handler_prop.rs:usage}} ``` diff --git a/docs/guide/src/pt-br/interactivity/hooks.md b/docs/guide/src/pt-br/interactivity/hooks.md index 5f918f623..c5dd85d41 100644 --- a/docs/guide/src/pt-br/interactivity/hooks.md +++ b/docs/guide/src/pt-br/interactivity/hooks.md @@ -14,7 +14,7 @@ Para lógica com estado, você pode usar _hooks_. _Hooks_ são funções Rust qu Por exemplo, você pode ter visto o exemplo do contador, no qual o estado (um número) é rastreado usando o _hook_ `use_state`: -```rust +```rust, no_run {{#include ../../../examples/hooks_counter.rs:component}} ``` @@ -26,7 +26,7 @@ Toda vez que o estado do componente muda, ele é renderizado novamente e a funç Você pode usar vários _hooks_ no mesmo componente se quiser: -```rust +```rust, no_run {{#include ../../../examples/hooks_counter_two_state.rs:component}} ``` @@ -38,7 +38,7 @@ O exemplo acima pode parecer um pouco mágico, já que as funções Rust normalm Mas como Dioxus pode diferenciar entre vários _hooks_ no mesmo componente? Como você viu no segundo exemplo, ambas as funções `use_state` foram chamadas com os mesmos parâmetros, então como elas podem retornar coisas diferentes quando os contadores são diferentes? -```rust +```rust, no_run {{#include ../../../examples/hooks_counter_two_state.rs:use_state_calls}} ``` @@ -54,19 +54,19 @@ Essas regras significam que há certas coisas que você não pode fazer com _hoo ### Sem Hooks em Condicionais -```rust +```rust, no_run {{#include ../../../examples/hooks_bad.rs:conditional}} ``` ### Sem Hooks em Closures -```rust +```rust, no_run {{#include ../../../examples/hooks_bad.rs:closure}} ``` ### Sem Hooks em Loops -```rust +```rust, no_run {{#include ../../../examples/hooks_bad.rs:loop}} ``` @@ -80,7 +80,7 @@ Felizmente, existe outro _hook_ para isso, `use_ref`! É semelhante ao `use_stat Aqui está um exemplo simples que mantém uma lista de eventos em um `use_ref`. Podemos adquirir acesso de escrita ao estado com `.write()`, e então apenas `.push` um novo valor para o estado: -```rust +```rust, no_run {{#include ../../../examples/hooks_use_ref.rs:component}} ``` diff --git a/docs/guide/src/pt-br/interactivity/router.md b/docs/guide/src/pt-br/interactivity/router.md index 382befddb..398546c0c 100644 --- a/docs/guide/src/pt-br/interactivity/router.md +++ b/docs/guide/src/pt-br/interactivity/router.md @@ -26,7 +26,7 @@ dioxus-router = { version = "*" } Ao contrário de outros roteadores no ecossistema Rust, nosso roteador é construído de forma declarativa. Isso torna possível compor o layout do nosso aplicativo simplesmente organizando os componentes. -```rust +```rust, no_run rsx!{ Router { Route { to: "/home", Home {} } @@ -41,7 +41,7 @@ Podemos corrigir isso de duas maneiras: - Uma página 404 de _fallback_ -```rust +```rust, no_run rsx!{ Router { Route { to: "/home", Home {} } @@ -53,7 +53,7 @@ rsx!{ - Redirecionar 404 para _Home_ -```rust +```rust, no_run rsx!{ Router { Route { to: "/home", Home {} } @@ -67,7 +67,7 @@ rsx!{ Para que nosso aplicativo navegue nessas rotas, podemos fornecer elementos clicáveis chamados Links. Eles simplesmente envolvem elementos `` que, quando clicados, navegam no aplicativo para o local determinado. -```rust +```rust, no_run rsx!{ Link { to: "/home", diff --git a/docs/guide/src/pt-br/interactivity/sharing_state.md b/docs/guide/src/pt-br/interactivity/sharing_state.md index dba11f17c..b9b829c0c 100644 --- a/docs/guide/src/pt-br/interactivity/sharing_state.md +++ b/docs/guide/src/pt-br/interactivity/sharing_state.md @@ -12,7 +12,7 @@ Por exemplo, suponha que queremos construir um editor de memes. Queremos ter uma Começamos com um componente `Meme`, responsável por renderizar um meme com uma determinada legenda: -```rust +```rust, no_run {{#include ../../../examples/meme_editor.rs:meme_component}} ``` @@ -20,13 +20,13 @@ Começamos com um componente `Meme`, responsável por renderizar um meme com uma Também criamos um editor de legendas, totalmente desacoplado do meme. O editor de legendas não deve armazenar a legenda em si – caso contrário, como iremos fornecê-la ao componente `Meme`? Em vez disso, ele deve aceitar a legenda atual como um suporte, bem como um manipulador de eventos para delegar eventos de entrada para: -```rust +```rust, no_run {{#include ../../../examples/meme_editor.rs:caption_editor}} ``` Finalmente, um terceiro componente renderizará os outros dois como filhos. Ele será responsável por manter o estado e passar os _props_ relevantes. -```rust +```rust, no_run {{#include ../../../examples/meme_editor.rs:meme_editor}} ``` @@ -46,19 +46,19 @@ A Dioxus oferece uma solução melhor do que esta "perfuração com hélice" – Primeiro, temos que criar um _struct_ para nossa configuração de modo escuro: -```rust +```rust, no_run {{#include ../../../examples/meme_editor_dark_mode.rs:DarkMode_struct}} ``` Agora, em um componente de nível superior (como `App`), podemos fornecer o contexto `DarkMode` para todos os componentes filhos: -```rust +```rust, no_run {{#include ../../../examples/meme_editor_dark_mode.rs:context_provider}} ``` Como resultado, qualquer componente filho de `App` (direto ou não), pode acessar o contexto `DarkMode`. -```rust +```rust, no_run {{#include ../../../examples/meme_editor_dark_mode.rs:use_context}} ``` @@ -66,6 +66,6 @@ Como resultado, qualquer componente filho de `App` (direto ou não), pode acessa Por exemplo, aqui está como implementaríamos a alternância do modo escuro, que lê o contexto (para determinar a cor que deve renderizar) e grava nele (para alternar o modo escuro): -```rust +```rust, no_run {{#include ../../../examples/meme_editor_dark_mode.rs:toggle}} ``` diff --git a/docs/guide/src/pt-br/interactivity/user_input.md b/docs/guide/src/pt-br/interactivity/user_input.md index 1afbce439..94a091e38 100644 --- a/docs/guide/src/pt-br/interactivity/user_input.md +++ b/docs/guide/src/pt-br/interactivity/user_input.md @@ -6,7 +6,7 @@ As interfaces geralmente precisam fornecer uma maneira de inserir dados: por exe Com entradas controladas, você fica diretamente responsável pelo estado da entrada. Isso lhe dá muita flexibilidade e facilita manter as coisas em sincronia. Por exemplo, é assim que você criaria uma entrada de texto controlada: -```rust +```rust, no_run {{#include ../../../examples/input_controlled.rs:component}} ``` @@ -24,7 +24,7 @@ Como alternativa às entradas controladas, você pode simplesmente deixar a plat Como você não tem necessariamente o valor atual da entrada não controlada no estado, você pode acessá-lo ouvindo os eventos `oninput` (de maneira semelhante aos componentes controlados) ou, se a entrada for parte de um formulário, você pode acessar os dados do formulário nos eventos do formulário (por exemplo, `oninput` ou `onsubmit`): -```rust +```rust, no_run {{#include ../../../examples/input_uncontrolled.rs:component}} ``` diff --git a/docs/posts/release-0-2-0.md b/docs/posts/release-0-2-0.md index 7aed2fda6..7901ee8b0 100644 --- a/docs/posts/release-0-2-0.md +++ b/docs/posts/release-0-2-0.md @@ -20,12 +20,11 @@ Thanks to these amazing folks for their code contributions: - [@oovm](https://github.com/oovm) - [@6asaaki](https://github.com/6asaaki) - Just over two months in, and we already a ton of awesome changes to Dioxus! Dioxus is a recently-released library for building interactive user interfaces (GUI) with Rust. It is built around a Virtual DOM, making it portable for the web, desktop, server, mobile, and more. Dioxus looks and feels just like React, so if you know React, then you'll feel right at home. -```rust +```rust, no_run fn app(cx: Scope) -> Element { let mut count = use_state(cx, || 0); @@ -39,7 +38,7 @@ fn app(cx: Scope) -> Element { # What's new? -A *ton* of stuff happened in this release; 550+ commits, 23 contributors, 2 minor releases, and 6 backers on Open Collective. +A _ton_ of stuff happened in this release; 550+ commits, 23 contributors, 2 minor releases, and 6 backers on Open Collective. Some of the major new features include: @@ -52,12 +51,10 @@ Some of the major new features include: We also fixed and improved a bunch of stuff - check out the full list down below. - ## A New Renderer: Your terminal! When Dioxus was initially released, we had very simple support for logging Dioxus elements out as TUI elements. In the past month or so, [@Demonthos](https://github.com/Demonthos) really stepped up and made the new crate a reality. - ![Imgur](https://i.imgur.com/GL7uu3r.png) The new TUI renderer even supports mouse movements, keyboard input, async tasks, borders, and a ton more. @@ -66,15 +63,13 @@ The new TUI renderer even supports mouse movements, keyboard input, async tasks, - - ## New Router We totally revamped the router, switching away from the old yew-router approach to the more familiar [React-Router](http://reactrouter.com). It's less type-safe but provides more flexibility and support for beautiful URLs. -Apps with routers are *really* simple now. It's easy to compose the "Router", a "Route", and "Links" to define how your app is laid out: +Apps with routers are _really_ simple now. It's easy to compose the "Router", a "Route", and "Links" to define how your app is laid out: -```rust +```rust, no_run fn app(cx: Scope) -> Element { cx.render(rsx! { Router { @@ -97,7 +92,7 @@ fn app(cx: Scope) -> Element { We're also using hooks to parse the URL parameters and segments so you can interact with the router from anywhere deeply nested in your app. -```rust +```rust, no_run #[derive(Deserialize)] struct Query { name: String } @@ -122,7 +117,7 @@ Managing state in your app can be challenging. Building global state management Fermi uses the concept of "Atoms" for global state. These individual values can be get/set from anywhere in your app. Using state with Fermi is basically as simple as `use_state`. -```rust +```rust, no_run // Create a single value in an "Atom" static TITLE: Atom<&str> = |_| "Hello"; @@ -152,7 +147,8 @@ fn Child(cx: Scope) -> Element { For internal components, explicitly declaring props structs can become tedious. That's why we've built the new `inline_props` macro. This macro lets you inline your props definition right into your component function arguments. Simply add the `inline_props` macro to your component: -```rust + +```rust, no_run #[inline_props] fn Child<'a>( cx: Scope, @@ -174,9 +170,9 @@ You won't be able to document each field or attach attributes so you should refr ## Props optional fields -Sometimes you don't want to specify *every* value in a component's props, since there might a lot. That's why the `Props` macro now supports optional fields. You can use a combination of `default`, `strip_option`, and `optional` to tune the exact behavior of properties fields. +Sometimes you don't want to specify _every_ value in a component's props, since there might a lot. That's why the `Props` macro now supports optional fields. You can use a combination of `default`, `strip_option`, and `optional` to tune the exact behavior of properties fields. -```rust +```rust, no_run #[derive(Props, PartialEq)] struct ChildProps { #[props(default = "client")] @@ -207,16 +203,15 @@ Under the hood, we have a new string interning engine to cache commonly used tag Overall, Dioxus apps are even more snappy than before. - Before and after: ![Before and After](https://imgur.com/byTBGlO.png) - ## Dioxus Desktop Window Context A very welcome change, thanks AGAIN to [@mrxiaozhuox](https://github.com/mrxiaozhuox) is support for imperatively controlling the desktop window from your Dioxus code. A bunch of new methods were added: + - Minimize and maximize window - Close window - Focus window @@ -240,10 +235,9 @@ Unlike its counterpart, `Trunk.rs`, the dioxus-cli supports running examples and Working with async isn't the easiest part of Rust. To help improve things, we've upgraded async support across the board in Dioxus. - First, we upgraded the `use_future` hook. It now supports dependencies, which let you regenerate a future on the fly as its computed values change. It's never been easier to add datafetching to your Rust Web Apps: -```rust +```rust, no_run fn RenderDog(cx: Scope, breed: String) -> Element { let dog_request = use_future(cx, (breed,), |(breed,)| async move { reqwest::get(format!("https://dog.ceo/api/breed/{}/images/random", breed)) @@ -263,7 +257,7 @@ fn RenderDog(cx: Scope, breed: String) -> Element { Additionally, we added better support for coroutines. You can now start, stop, resume, and message with asynchronous tasks. The coroutine is automatically exposed to the rest of your app via the Context API. For the vast majority of apps, Coroutines can satisfy all of your state management needs: -```rust +```rust, no_run fn App(cx: Scope) -> Element { let sync_task = use_coroutine(cx, |rx| async move { connect_to_server().await; @@ -313,6 +307,7 @@ We've covered the major headlining features, but there were so many more! - Right-click menus are now disabled by default ## Fixes + - Windows support improved across the board - Linux support improved across the board - Bug in Calculator example @@ -329,6 +324,7 @@ A ton more! Dioxus is now much more stable than it was at release! - The ContextAPI no longer uses RC to share state - anything that is `Clone` can be shared ## Community Additions + - [Styled Components macro](https://github.com/Zomatree/Revolt-Client/blob/master/src/utils.rs#14-27) [@Zomatree](https://github.com/Zomatree) - [Dioxus-Websocket hook](https://github.com/FruitieX/dioxus-websocket-hooks) [@FruitieX](https://github.com/FruitieX) - [Home automation server app](https://github.com/FruitieX/homectl) [@FruitieX](https://github.com/FruitieX) @@ -363,5 +359,3 @@ If you're interested in building an app with Dioxus, make sure to check us out o - [Reddit](http://reddit.com/r/dioxus/) - [Discord](https://discord.gg/XgGxMSkvUM) - [Twitter](http://twitter.com/dioxuslabs) - - diff --git a/docs/posts/release.md b/docs/posts/release.md index 171664dd3..06aca2ef5 100644 --- a/docs/posts/release.md +++ b/docs/posts/release.md @@ -20,7 +20,7 @@ Dioxus is designed to be familiar for developers already comfortable with React To give you an idea of what Dioxus looks like, here's a simple counter app: -```rust +```rust, no_run use dioxus::prelude::*; fn main() { @@ -112,8 +112,8 @@ Semantically, TypeScript-React and Rust-Dioxus are very similar. In TypeScript, ```tsx type CardProps = { - title: string, - paragraph: string, + title: string; + paragraph: string; }; const Card: FunctionComponent = (props) => { @@ -122,7 +122,7 @@ const Card: FunctionComponent = (props) => { ); }; @@ -130,7 +130,7 @@ const Card: FunctionComponent = (props) => { In Dioxus, we would define the same component in a similar fashion: -```rust +```rust, no_run #[derive(Props, PartialEq)] struct CardProps { title: String, @@ -176,14 +176,14 @@ $ cd dioxus_example We then add a dependency on Dioxus to the `Cargo.toml` file, with the "desktop" feature enabled: -```rust +```rust, no_run [dependencies] dioxus = { version = "*", features = ["desktop"] } ``` We can add our counter from above. -```rust +```rust, no_run use dioxus::prelude::*; fn main() { @@ -203,14 +203,13 @@ fn app(cx: Scope) -> Element { And voilà! We can `cargo run` our app - ![Simple Counter Desktop App](/static/counter.png) ## Support for JSX-style templating Dioxus ships with a templating macro called RSX, a spin on React's JSX. RSX is very similar to regular struct syntax for Rust so it integrates well with your IDE. If used with [Rust-Analyzer](https://github.com/rust-analyzer/rust-analyzer) (not tested anywhere else) RSX supports code-folding, block selection, bracket pair colorizing, autocompletion, symbol renaming — pretty much anything you would expect from writing regular struct-style code. -```rust +```rust, no_run rsx! { div { "Hello world" } button { @@ -222,7 +221,7 @@ rsx! { If macros aren't your style, you can always drop down to the factory API: -```rust +```rust, no_run LazyNodes::new(|f| { f.fragment([ f.element(div, [f.text("hello world")], [], None, None) @@ -245,9 +244,9 @@ To make it easier to work with RSX, we've built a small [VSCode extension](https Many of the Rust UI frameworks are particularly difficult to work with. Even the ones branded as "ergonomic" are quite challenging to in comparison to TSX/JSX. With Dioxus, we've innovated on a number of Rust patterns to deliver a framework that is actually enjoyable to develop in. -For example, many Rust frameworks require you to clone your data in for *every* closure and handler you use. This can get really clumsy for large apps. +For example, many Rust frameworks require you to clone your data in for _every_ closure and handler you use. This can get really clumsy for large apps. -```rust +```rust, no_run div() .children([ button().onclick(cloned!(name, date, age, description => move |evt| { /* */ }) @@ -258,8 +257,7 @@ div() Dioxus understands the lifetimes of data borrowed from `Scope`, so you can safely return any borrowed data without declaring explicit captures. Hook handles all implement `Copy` so they can be shared between listeners without any ceremony. - -```rust +```rust, no_run let name = use_state(cx, || "asd"); rsx! { div { @@ -272,7 +270,7 @@ rsx! { Because we know the lifetime of your handlers, we can also expose this to children. No other Rust frameworks let us share borrowed state through the tree, forcing use of Rc/Arc everywhere. With Dioxus, all the Rc/Arc magic is tucked away in hooks, and just beautiful borrowed interfaces are exposed to your code. You don't need to know how Rc/RefCell work to build a competent Dioxus app. -```rust +```rust, no_run fn app(cx: Scope) -> Element { let name = use_state(cx, || "asd"); cx.render(rsx!{ @@ -294,8 +292,7 @@ fn Button<'a>(cx: Scope<'a, Childprops<'a>>) -> Element { } ``` -There's *way* more to this story, but hopefully we've convinced you that Dioxus' DX somewhat approximates JSX/React. - +There's _way_ more to this story, but hopefully we've convinced you that Dioxus' DX somewhat approximates JSX/React. ## Dioxus is perfected for the IDE @@ -335,9 +332,10 @@ We take the performance of Dioxus seriously. Instead of resolving to "good enoug Dioxus is humbly built off the work done by [Dodrio](https://github.com/fitzgen/dodrio), a now-archived research project by fitzgen exploring the use of bump allocators in UI frameworks. -Dioxus is *substantially* more performant than many of the other Rust DOM-based UI libraries (Yew/Percy) and is *significantly* more performant than React - roughly competitive with InfernoJS. While not as performant as libraries like SolidJS/Sycamore, Dioxus imposes roughly a ~3% overhead over DOM patching, so it's *plenty* fast. +Dioxus is _substantially_ more performant than many of the other Rust DOM-based UI libraries (Yew/Percy) and is _significantly_ more performant than React - roughly competitive with InfernoJS. While not as performant as libraries like SolidJS/Sycamore, Dioxus imposes roughly a ~3% overhead over DOM patching, so it's _plenty_ fast. ## Works on Desktop and Mobile + We’ve mentioned before that Dioxus works practically anywhere that Rust does. When running natively as a desktop or mobile app, your Dioxus code will run on its own thread, not inside of a web runtime. This means you can access hardware, file system, and platform APIs directly without needing to go through a shim layer. In our examples, we feature a [file explorer app](https://github.com/DioxusLabs/example-projects/tree/master/file-explorer) and [WiFi scanner app](https://github.com/DioxusLabs/example-projects/tree/master/wifi-scanner) where platform access occurs inside an asynchronous multithreaded coroutine. This solves the problem faced by React Native and other cross-platform toolkits where JavaScript apps incur a massive performance penalty with substantial maintenance overhead associated with platform API shims. A desktop app: diff --git a/docs/reference/src/guide/custom_renderer_pt-br.md b/docs/reference/src/guide/custom_renderer_pt-br.md index fb40504a7..eada5f0a6 100644 --- a/docs/reference/src/guide/custom_renderer_pt-br.md +++ b/docs/reference/src/guide/custom_renderer_pt-br.md @@ -21,7 +21,7 @@ Para referência, confira o interpretador JavaScript ou o renderizador TUI como O tipo "DomEdit" é uma enumeração serializada que representa uma operação atômica que ocorre no `RealDom`. As variantes seguem aproximadamente este conjunto: -```rust +```rust, no_run enum DomEdit { PushRoot, AppendChildren, @@ -48,7 +48,7 @@ O mecanismo de diferenciação do Dioxus opera como uma [máquina de pilha] (htt Por uma questão de compreensão, vamos considerar este exemplo - uma declaração de interface do usuário muito simples: -```rust +```rust, no_run rsx!( h1 {"hello world"} ) ``` @@ -56,7 +56,7 @@ To get things started, Dioxus must first navigate to the container of this h1 ta When the renderer receives this instruction, it pushes the actual Node onto its own stack. The real renderer's stack will look like this: -```rust +```rust, no_run instructions: [ PushRoot(Container) ] @@ -67,7 +67,7 @@ stack: [ Em seguida, o Dioxus encontrará o nó `h1`. O algoritmo `diff` decide que este nó precisa ser criado, então o Dioxus irá gerar o DomEdit `CreateElement`. Quando o renderizador receber esta instrução, ele criará um nó desmontado e o enviará para sua própria pilha: -```rust +```rust, no_run instructions: [ PushRoot(Container), CreateElement(h1), @@ -80,7 +80,7 @@ stack: [ Em seguida, Dioxus vê o nó de texto e gera o DomEdit `CreateTextNode`: -```rust +```rust, no_run instructions: [ PushRoot(Container), CreateElement(h1), @@ -95,7 +95,7 @@ stack: [ Lembre-se, o nó de texto não está anexado a nada (ele está desmontado), então o Dioxus precisa gerar um `Edit` que conecte o nó de texto ao elemento `h1`. Depende da situação, mas neste caso usamos `AppendChildren`. Isso remove o nó de texto da pilha, deixando o elemento `h1` como o próximo elemento na linha. -```rust +```rust, no_run instructions: [ PushRoot(Container), CreateElement(h1), @@ -110,7 +110,7 @@ stack: [ Chamamos `AppendChildren` novamente, retirando o nó `h1` e anexando-o ao pai: -```rust +```rust, no_run instructions: [ PushRoot(Container), CreateElement(h1), @@ -125,7 +125,7 @@ stack: [ Finalmente, o contêiner é aberto, pois não precisamos mais dele. -```rust +```rust, no_run instructions: [ PushRoot(Container), CreateElement(h1), @@ -139,7 +139,7 @@ stack: [] Com o tempo, nossa pilha ficou assim: -```rust +```rust, no_run [] [Container] [Container, h1] @@ -165,7 +165,7 @@ Como a maioria das GUIs, o Dioxus conta com um `loop` de eventos para progredir O código para a implementação do `WebSys` é direto, então vamos adicioná-lo aqui para demonstrar como um `loop` de eventos é simples: -```rust +```rust, no_run pub async fn run(&mut self) -> dioxus_core::error::Result<()> { // Push the body element onto the WebsysDom's stack machine let mut websys_dom = crate::new::WebsysDom::new(prepare_websys_dom()); @@ -195,7 +195,7 @@ pub async fn run(&mut self) -> dioxus_core::error::Result<()> { É importante que você decodifique os eventos reais do seu sistema de eventos no sistema de eventos sintético do Dioxus (significado sintético abstraído). Isso significa simplesmente combinar seu tipo de evento e criar um tipo Dioxus `UserEvent`. No momento, o sistema `VirtualEvent` é modelado quase inteiramente em torno da especificação HTML, mas estamos interessados em reduzi-lo. -```rust +```rust, no_run fn virtual_event_from_websys_event(event: &web_sys::Event) -> VirtualEvent { match event.type_().as_str() { "keydown" => { @@ -234,7 +234,7 @@ Esses elementos personalizados são definidos como `unit struct` com implementa Por exemplo, o elemento `div` é (aproximadamente!) definido assim: -```rust +```rust, no_run struct div; impl div { /// Some glorious documentation about the class property. @@ -263,7 +263,7 @@ O `RealDom` é uma abstração de nível superior sobre a atualização do DOM. Vamos construir um renderizador de brinquedo com bordas, tamanho e cor do texto. Antes de começarmos, vamos dar uma olhada em um elemento de exemplo que podemos renderizar: -```rust +```rust, no_run cx.render(rsx!{ div{ color: "red", @@ -315,7 +315,7 @@ flowchart TB Para ajudar na construção de um Dom, o núcleo nativo fornece quatro características: `State`, `ChildDepState`, `ParentDepState` e `NodeDepState` e uma estrutura `RealDom`. -```rust +```rust, no_run use dioxus_native_core::node_ref::*; use dioxus_native_core::state::{ChildDepState, NodeDepState, ParentDepState, State}; use dioxus_native_core_macro::{sorted_str_slice, State}; @@ -447,7 +447,7 @@ struct ToyState { Agora que temos nosso estado, podemos colocá-lo em uso em nosso DOM. Nós podemos atualizar o DOM com `update_state` para atualizar a estrutura do `DOM` (adicionando, removendo e alterando as propriedades dos nós) e então `apply_mutations` para atualizar o `ToyState` para cada um dos nós que foram alterados. -```rust +```rust, no_run fn main(){ fn app(cx: Scope) -> Element { cx.render(rsx!{ diff --git a/docs/reference/src/guide/rsx_in_depth.md b/docs/reference/src/guide/rsx_in_depth.md index 75e1f4a98..1a76f7c41 100644 --- a/docs/reference/src/guide/rsx_in_depth.md +++ b/docs/reference/src/guide/rsx_in_depth.md @@ -2,7 +2,7 @@ The RSX macro makes it very easy to assemble complex UIs with a very natural Rust syntax: -```rust +```rust, no_run rsx!( div { button { @@ -30,7 +30,7 @@ In this section, we'll cover the `rsx!` macro in depth. If you prefer to learn t Attributes must come before child elements -```rust +```rust, no_run div { hidden: "false", "some text" @@ -57,7 +57,7 @@ The `render` function provides an **extremely efficient** allocator for VNodes a Sometimes, writing `cx.render` is a hassle. The `rsx! macro will accept any token followed by a comma as the target to call "render" on: -```rust +```rust, no_run cx.render(rsx!( div {} )) // becomes render!(div {}) @@ -67,7 +67,7 @@ render!(div {}) Sometimes, you might not want to render an element given a condition. The rsx! macro will accept any tokens directly contained with curly braces, provided they resolve to a type that implements `IntoIterator`. This lets us write any Rust expression that resolves to a VNode: -```rust +```rust, no_run rsx!({ if enabled { render!(div {"enabled"}) @@ -79,7 +79,7 @@ rsx!({ A convenient way of hiding/showing an element is returning an `Option`. When combined with `and_then`, we can succinctly control the display state given some boolean: -```rust +```rust, no_run rsx!({ a.and_then(rsx!(div {"enabled"})) }) @@ -87,7 +87,7 @@ rsx!({ It's important to note that the expression `rsx!()` is typically lazy - this expression must be _rendered_ to produce a VNode. When using match statements, we must render every arm as to avoid the `no two closures are identical` rule that Rust imposes: -```rust +```rust, no_run // this will not compile! match case { true => rsx!(div {}), @@ -105,7 +105,7 @@ match case { Again, because anything that implements `IntoIterator` is valid, we can use lists directly in our `rsx!`: -```rust +```rust, no_run let items = vec!["a", "b", "c"]; cx.render(rsx!{ @@ -117,7 +117,7 @@ cx.render(rsx!{ Sometimes, it makes sense to render VNodes into a list: -```rust +```rust, no_run let mut items = vec![]; for _ in 0..5 { @@ -135,7 +135,7 @@ However, with lists, Dioxus does not exactly know how to determine which element In these cases, it is vitally important to specify a "key" alongside the element. Keys should be persistent between renders. -```rust +```rust, no_run fn render_list(cx: Scope, items: HashMap) -> DomTree { render!(ul { {items.iter().map(|key, item| { @@ -156,7 +156,7 @@ There have been many guides made for keys in React, so we recommend reading up t ### Complete Reference -```rust +```rust, no_run let text = "example"; cx.render(rsx!{ diff --git a/docs/reference/src/guide/rsx_in_depth_pt-br.md b/docs/reference/src/guide/rsx_in_depth_pt-br.md index 82c4f9298..4c981bd0a 100644 --- a/docs/reference/src/guide/rsx_in_depth_pt-br.md +++ b/docs/reference/src/guide/rsx_in_depth_pt-br.md @@ -2,7 +2,7 @@ A macro RSX facilita muito a montagem de interfaces de usuário complexas com uma sintaxe Rust muito natural: -```rust +```rust, no_run rsx!( div { button { @@ -30,7 +30,7 @@ Nesta seção, abordaremos a macro `rsx!` em profundidade. Se você preferir apr Os atributos devem vir antes dos elementos filhos -```rust +```rust, no_run div { hidden: "false", "some text" @@ -57,7 +57,7 @@ A função `render` fornece um alocador **extremamente eficiente** para `VNodes` Às vezes, escrever `cx.render` é um aborrecimento. O `rsx!` macro aceitará qualquer token seguido por uma vírgula como destino para chamar "render" em: -```rust +```rust, no_run cx.render(rsx!( div {} )) // becomes render!(div {}) @@ -67,7 +67,7 @@ render!(div {}) Às vezes, você pode não querer renderizar um elemento dada uma condição. O `rsx!` macro aceitará quaisquer tokens contidos diretamente com chaves, desde que resolvam para um tipo que implemente `IntoIterator`. Isso nos permite escrever qualquer expressão Rust que resolva para um `VNode`: -```rust +```rust, no_run rsx!({ if enabled { render!(div {"enabled"}) @@ -79,7 +79,7 @@ rsx!({ Uma maneira conveniente de ocultar/mostrar um elemento é retornar um `Option`. Quando combinado com `and_then`, podemos controlar sucintamente o estado de exibição dado alguns booleanos: -```rust +```rust, no_run rsx!({ a.and_then(rsx!(div {"enabled"})) }) @@ -87,7 +87,7 @@ rsx!({ É importante notar que a expressão `rsx!()` é tipicamente tardia - esta expressão deve ser _renderizada_ para produzir um `VNode`. Ao usar declarações de `match`, devemos renderizar todos os braços para evitar a regra 'não há dois fechamentos idênticos' que o Rust impõe: -```rust +```rust, no_run // this will not compile! match case { true => rsx!(div {}), @@ -105,7 +105,7 @@ match case { Novamente, porque qualquer coisa que implemente `IntoIterator` é válida, podemos usar listas diretamente em nosso `rsx!`: -```rust +```rust, no_run let items = vec!["a", "b", "c"]; cx.render(rsx!{ @@ -117,7 +117,7 @@ cx.render(rsx!{ Às vezes, faz sentido renderizar `VNodes` em uma lista: -```rust +```rust, no_run let mut items = vec![]; for _ in 0..5 { @@ -135,7 +135,7 @@ No entanto, com listas, Dioxus não sabe exatamente como determinar quais elemen Nesses casos, é de vital importância especificar uma "chave" ao lado do elemento. As chaves devem ser persistentes entre as renderizações. -```rust +```rust, no_run fn render_list(cx: Scope, items: HashMap) -> DomTree { render!(ul { {items.iter().map(|key, item| { @@ -156,7 +156,7 @@ Existem muitos guias feitos para chaves no React, então recomendamos a leitura ### Referência Completa -```rust +```rust, no_run let text = "example"; cx.render(rsx!{ diff --git a/docs/reference/src/platforms/desktop.md b/docs/reference/src/platforms/desktop.md index dcdcca778..30fe698ff 100644 --- a/docs/reference/src/platforms/desktop.md +++ b/docs/reference/src/platforms/desktop.md @@ -21,7 +21,7 @@ $ cargo add dioxus --features desktop Edit your `main.rs`: -```rust +```rust, no_run // main.rs use dioxus::prelude::*; From bf0247a7dc84aeafd2f91656f1e7bcc5b19298de Mon Sep 17 00:00:00 2001 From: marc2332 Date: Wed, 28 Jun 2023 20:01:28 +0200 Subject: [PATCH 379/459] tweaks --- docs/guide/src/en/async/use_effect.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/docs/guide/src/en/async/use_effect.md b/docs/guide/src/en/async/use_effect.md index 711492500..8b82828db 100644 --- a/docs/guide/src/en/async/use_effect.md +++ b/docs/guide/src/en/async/use_effect.md @@ -2,11 +2,14 @@ [`use_effect`](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_effect.html) provides a future that executes after the hooks have been applied. -Whenever the hooks dependencies change, the future will be re-evaluated. This is useful to syncrhonize with external events. +Whenever the hooks [dependencies](#dependencies) change, the future will be re-evaluated. This is useful to syncrhonize with external events. -If a future is pending when the dependencies change, the previous future will be allowed to continue -> The `dependencies` is tuple of references to values that are `PartialEq + Clone`. +## Dependencies + +You might want to call `use_effect` only when some value changes. For example, you might want to fetch a user's data only when the user id changes. You can provide a tuple of "dependencies" to the hook. It will automatically re-run the future when any of those dependencies change. + +Example: ```rust, no_run #[inline_props] @@ -29,4 +32,4 @@ fn app(cx: Scope) -> Element { Profile { id: "dioxusLabs" } ) } -``` +``` \ No newline at end of file From fb227943ae777fad14cf3377f65c58e9d9f6cd56 Mon Sep 17 00:00:00 2001 From: xinglixing <64331680+xinglixing@users.noreply.github.com> Date: Wed, 28 Jun 2023 12:10:18 -0700 Subject: [PATCH 380/459] Fix: bump liveview salvo version to 0.44.1. (#1224) (#1130) --- packages/liveview/Cargo.toml | 4 ++-- packages/liveview/examples/salvo.rs | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/liveview/Cargo.toml b/packages/liveview/Cargo.toml index 515d0ec54..4400541ea 100644 --- a/packages/liveview/Cargo.toml +++ b/packages/liveview/Cargo.toml @@ -37,7 +37,7 @@ warp = { version = "0.3.3", optional = true } axum = { version = "0.6.1", optional = true, features = ["ws"] } # salvo -salvo = { version = "0.37.7", optional = true, features = ["ws"] } +salvo = { version = "0.44.1", optional = true, features = ["ws"] } once_cell = "1.17.1" # actix is ... complicated? @@ -51,7 +51,7 @@ tokio = { workspace = true, features = ["full"] } dioxus = { workspace = true } warp = "0.3.3" axum = { version = "0.6.1", features = ["ws"] } -salvo = { version = "0.37.7", features = ["affix", "ws"] } +salvo = { version = "0.44.1", features = ["affix", "ws"] } tower = "0.4.13" [features] diff --git a/packages/liveview/examples/salvo.rs b/packages/liveview/examples/salvo.rs index 015892702..9cb8c7115 100644 --- a/packages/liveview/examples/salvo.rs +++ b/packages/liveview/examples/salvo.rs @@ -20,7 +20,8 @@ fn app(cx: Scope) -> Element { async fn main() { pretty_env_logger::init(); - let addr: SocketAddr = ([127, 0, 0, 1], 3030).into(); + let addr = "127.0.0.1:3030"; + let acceptor = TcpListener::new(addr).bind().await; let view = LiveViewPool::new(); @@ -31,7 +32,7 @@ async fn main() { println!("Listening on http://{}", addr); - Server::new(TcpListener::bind(addr)).serve(router).await; + Server::new(acceptor).serve(router).await; } #[handler] From a9d7b4d32a6fcfc1963023129f64cbfb14a19d19 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 28 Jun 2023 17:21:23 -0700 Subject: [PATCH 381/459] Prepare CLI for move into mainline --- .../cli/.github}/workflows/build.yml | 0 .../cli/.github}/workflows/docs.yml | 0 .../cli/.github}/workflows/main.yml | 0 .gitignore => packages/cli/.gitignore | 0 {.vscode => packages/cli/.vscode}/settings.json | 0 Cargo.lock => packages/cli/Cargo.lock | 0 Cargo.toml => packages/cli/Cargo.toml | 0 Dioxus.toml => packages/cli/Dioxus.toml | 0 README.md => packages/cli/README.md | 0 build.rs => packages/cli/build.rs | 0 {docs => packages/cli/docs}/.gitignore | 0 {docs => packages/cli/docs}/book.toml | 0 {docs => packages/cli/docs}/src/SUMMARY.md | 0 {docs => packages/cli/docs}/src/cmd/README.md | 0 {docs => packages/cli/docs}/src/cmd/build.md | 0 {docs => packages/cli/docs}/src/cmd/clean.md | 0 {docs => packages/cli/docs}/src/cmd/serve.md | 0 {docs => packages/cli/docs}/src/cmd/translate.md | 0 {docs => packages/cli/docs}/src/configure.md | 0 {docs => packages/cli/docs}/src/creating.md | 0 {docs => packages/cli/docs}/src/installation.md | 0 {docs => packages/cli/docs}/src/introduction.md | 0 {docs => packages/cli/docs}/src/plugin/README.md | 0 .../cli/docs}/src/plugin/interface/command.md | 0 .../cli/docs}/src/plugin/interface/dirs.md | 0 .../cli/docs}/src/plugin/interface/log.md | 0 .../cli/docs}/src/plugin/interface/network.md | 0 .../cli/docs}/src/plugin/interface/os.md | 0 .../cli/docs}/src/plugin/interface/path.md | 0 {examples => packages/cli/examples}/README.md | 0 {examples => packages/cli/examples}/plugin/init.lua | 0 .../cli/examples}/plugin/interface.lua | 0 {extension => packages/cli/extension}/.eslintrc.js | 0 {extension => packages/cli/extension}/.gitignore | 0 {extension => packages/cli/extension}/DEV.md | 0 {extension => packages/cli/extension}/LICENSE.txt | 0 {extension => packages/cli/extension}/README.md | 0 .../cli/extension}/dist/.gitignore | 0 .../cli/extension}/package-lock.json | 0 {extension => packages/cli/extension}/package.json | 0 .../cli/extension}/server/.gitignore | 0 {extension => packages/cli/extension}/src/main.ts | 0 .../cli/extension}/static/icon.png | Bin {extension => packages/cli/extension}/tsconfig.json | 0 rustfmt.toml => packages/cli/rustfmt.toml | 0 {src => packages/cli/src}/assets/autoreload.js | 0 {src => packages/cli/src}/assets/dioxus.toml | 0 {src => packages/cli/src}/assets/index.html | 0 {src => packages/cli/src}/builder.rs | 0 {src => packages/cli/src}/cargo.rs | 0 {src => packages/cli/src}/cli/autoformat/mod.rs | 0 {src => packages/cli/src}/cli/build/mod.rs | 0 {src => packages/cli/src}/cli/cfg.rs | 0 {src => packages/cli/src}/cli/clean/mod.rs | 0 {src => packages/cli/src}/cli/config/mod.rs | 0 {src => packages/cli/src}/cli/create/mod.rs | 0 {src => packages/cli/src}/cli/mod.rs | 0 {src => packages/cli/src}/cli/plugin/mod.rs | 0 {src => packages/cli/src}/cli/serve/mod.rs | 0 {src => packages/cli/src}/cli/tool/mod.rs | 0 {src => packages/cli/src}/cli/translate/mod.rs | 0 {src => packages/cli/src}/cli/version.rs | 0 {src => packages/cli/src}/config.rs | 0 {src => packages/cli/src}/error.rs | 0 {src => packages/cli/src}/lib.rs | 0 {src => packages/cli/src}/logging.rs | 0 {src => packages/cli/src}/main.rs | 0 .../cli/src}/plugin/interface/command.rs | 0 {src => packages/cli/src}/plugin/interface/dirs.rs | 0 {src => packages/cli/src}/plugin/interface/fs.rs | 0 {src => packages/cli/src}/plugin/interface/log.rs | 0 {src => packages/cli/src}/plugin/interface/mod.rs | 0 .../cli/src}/plugin/interface/network.rs | 0 {src => packages/cli/src}/plugin/interface/os.rs | 0 {src => packages/cli/src}/plugin/interface/path.rs | 0 {src => packages/cli/src}/plugin/mod.rs | 0 {src => packages/cli/src}/plugin/types.rs | 0 {src => packages/cli/src}/server/mod.rs | 0 {src => packages/cli/src}/server/proxy.rs | 0 {src => packages/cli/src}/tools.rs | 0 {tests => packages/cli/tests}/main.rs | 0 {tests => packages/cli/tests}/svg.html | 0 {tests => packages/cli/tests}/test.html | 0 83 files changed, 0 insertions(+), 0 deletions(-) rename {.github => packages/cli/.github}/workflows/build.yml (100%) rename {.github => packages/cli/.github}/workflows/docs.yml (100%) rename {.github => packages/cli/.github}/workflows/main.yml (100%) rename .gitignore => packages/cli/.gitignore (100%) rename {.vscode => packages/cli/.vscode}/settings.json (100%) rename Cargo.lock => packages/cli/Cargo.lock (100%) rename Cargo.toml => packages/cli/Cargo.toml (100%) rename Dioxus.toml => packages/cli/Dioxus.toml (100%) rename README.md => packages/cli/README.md (100%) rename build.rs => packages/cli/build.rs (100%) rename {docs => packages/cli/docs}/.gitignore (100%) rename {docs => packages/cli/docs}/book.toml (100%) rename {docs => packages/cli/docs}/src/SUMMARY.md (100%) rename {docs => packages/cli/docs}/src/cmd/README.md (100%) rename {docs => packages/cli/docs}/src/cmd/build.md (100%) rename {docs => packages/cli/docs}/src/cmd/clean.md (100%) rename {docs => packages/cli/docs}/src/cmd/serve.md (100%) rename {docs => packages/cli/docs}/src/cmd/translate.md (100%) rename {docs => packages/cli/docs}/src/configure.md (100%) rename {docs => packages/cli/docs}/src/creating.md (100%) rename {docs => packages/cli/docs}/src/installation.md (100%) rename {docs => packages/cli/docs}/src/introduction.md (100%) rename {docs => packages/cli/docs}/src/plugin/README.md (100%) rename {docs => packages/cli/docs}/src/plugin/interface/command.md (100%) rename {docs => packages/cli/docs}/src/plugin/interface/dirs.md (100%) rename {docs => packages/cli/docs}/src/plugin/interface/log.md (100%) rename {docs => packages/cli/docs}/src/plugin/interface/network.md (100%) rename {docs => packages/cli/docs}/src/plugin/interface/os.md (100%) rename {docs => packages/cli/docs}/src/plugin/interface/path.md (100%) rename {examples => packages/cli/examples}/README.md (100%) rename {examples => packages/cli/examples}/plugin/init.lua (100%) rename {examples => packages/cli/examples}/plugin/interface.lua (100%) rename {extension => packages/cli/extension}/.eslintrc.js (100%) rename {extension => packages/cli/extension}/.gitignore (100%) rename {extension => packages/cli/extension}/DEV.md (100%) rename {extension => packages/cli/extension}/LICENSE.txt (100%) rename {extension => packages/cli/extension}/README.md (100%) rename {extension => packages/cli/extension}/dist/.gitignore (100%) rename {extension => packages/cli/extension}/package-lock.json (100%) rename {extension => packages/cli/extension}/package.json (100%) rename {extension => packages/cli/extension}/server/.gitignore (100%) rename {extension => packages/cli/extension}/src/main.ts (100%) rename {extension => packages/cli/extension}/static/icon.png (100%) rename {extension => packages/cli/extension}/tsconfig.json (100%) rename rustfmt.toml => packages/cli/rustfmt.toml (100%) rename {src => packages/cli/src}/assets/autoreload.js (100%) rename {src => packages/cli/src}/assets/dioxus.toml (100%) rename {src => packages/cli/src}/assets/index.html (100%) rename {src => packages/cli/src}/builder.rs (100%) rename {src => packages/cli/src}/cargo.rs (100%) rename {src => packages/cli/src}/cli/autoformat/mod.rs (100%) rename {src => packages/cli/src}/cli/build/mod.rs (100%) rename {src => packages/cli/src}/cli/cfg.rs (100%) rename {src => packages/cli/src}/cli/clean/mod.rs (100%) rename {src => packages/cli/src}/cli/config/mod.rs (100%) rename {src => packages/cli/src}/cli/create/mod.rs (100%) rename {src => packages/cli/src}/cli/mod.rs (100%) rename {src => packages/cli/src}/cli/plugin/mod.rs (100%) rename {src => packages/cli/src}/cli/serve/mod.rs (100%) rename {src => packages/cli/src}/cli/tool/mod.rs (100%) rename {src => packages/cli/src}/cli/translate/mod.rs (100%) rename {src => packages/cli/src}/cli/version.rs (100%) rename {src => packages/cli/src}/config.rs (100%) rename {src => packages/cli/src}/error.rs (100%) rename {src => packages/cli/src}/lib.rs (100%) rename {src => packages/cli/src}/logging.rs (100%) rename {src => packages/cli/src}/main.rs (100%) rename {src => packages/cli/src}/plugin/interface/command.rs (100%) rename {src => packages/cli/src}/plugin/interface/dirs.rs (100%) rename {src => packages/cli/src}/plugin/interface/fs.rs (100%) rename {src => packages/cli/src}/plugin/interface/log.rs (100%) rename {src => packages/cli/src}/plugin/interface/mod.rs (100%) rename {src => packages/cli/src}/plugin/interface/network.rs (100%) rename {src => packages/cli/src}/plugin/interface/os.rs (100%) rename {src => packages/cli/src}/plugin/interface/path.rs (100%) rename {src => packages/cli/src}/plugin/mod.rs (100%) rename {src => packages/cli/src}/plugin/types.rs (100%) rename {src => packages/cli/src}/server/mod.rs (100%) rename {src => packages/cli/src}/server/proxy.rs (100%) rename {src => packages/cli/src}/tools.rs (100%) rename {tests => packages/cli/tests}/main.rs (100%) rename {tests => packages/cli/tests}/svg.html (100%) rename {tests => packages/cli/tests}/test.html (100%) diff --git a/.github/workflows/build.yml b/packages/cli/.github/workflows/build.yml similarity index 100% rename from .github/workflows/build.yml rename to packages/cli/.github/workflows/build.yml diff --git a/.github/workflows/docs.yml b/packages/cli/.github/workflows/docs.yml similarity index 100% rename from .github/workflows/docs.yml rename to packages/cli/.github/workflows/docs.yml diff --git a/.github/workflows/main.yml b/packages/cli/.github/workflows/main.yml similarity index 100% rename from .github/workflows/main.yml rename to packages/cli/.github/workflows/main.yml diff --git a/.gitignore b/packages/cli/.gitignore similarity index 100% rename from .gitignore rename to packages/cli/.gitignore diff --git a/.vscode/settings.json b/packages/cli/.vscode/settings.json similarity index 100% rename from .vscode/settings.json rename to packages/cli/.vscode/settings.json diff --git a/Cargo.lock b/packages/cli/Cargo.lock similarity index 100% rename from Cargo.lock rename to packages/cli/Cargo.lock diff --git a/Cargo.toml b/packages/cli/Cargo.toml similarity index 100% rename from Cargo.toml rename to packages/cli/Cargo.toml diff --git a/Dioxus.toml b/packages/cli/Dioxus.toml similarity index 100% rename from Dioxus.toml rename to packages/cli/Dioxus.toml diff --git a/README.md b/packages/cli/README.md similarity index 100% rename from README.md rename to packages/cli/README.md diff --git a/build.rs b/packages/cli/build.rs similarity index 100% rename from build.rs rename to packages/cli/build.rs diff --git a/docs/.gitignore b/packages/cli/docs/.gitignore similarity index 100% rename from docs/.gitignore rename to packages/cli/docs/.gitignore diff --git a/docs/book.toml b/packages/cli/docs/book.toml similarity index 100% rename from docs/book.toml rename to packages/cli/docs/book.toml diff --git a/docs/src/SUMMARY.md b/packages/cli/docs/src/SUMMARY.md similarity index 100% rename from docs/src/SUMMARY.md rename to packages/cli/docs/src/SUMMARY.md diff --git a/docs/src/cmd/README.md b/packages/cli/docs/src/cmd/README.md similarity index 100% rename from docs/src/cmd/README.md rename to packages/cli/docs/src/cmd/README.md diff --git a/docs/src/cmd/build.md b/packages/cli/docs/src/cmd/build.md similarity index 100% rename from docs/src/cmd/build.md rename to packages/cli/docs/src/cmd/build.md diff --git a/docs/src/cmd/clean.md b/packages/cli/docs/src/cmd/clean.md similarity index 100% rename from docs/src/cmd/clean.md rename to packages/cli/docs/src/cmd/clean.md diff --git a/docs/src/cmd/serve.md b/packages/cli/docs/src/cmd/serve.md similarity index 100% rename from docs/src/cmd/serve.md rename to packages/cli/docs/src/cmd/serve.md diff --git a/docs/src/cmd/translate.md b/packages/cli/docs/src/cmd/translate.md similarity index 100% rename from docs/src/cmd/translate.md rename to packages/cli/docs/src/cmd/translate.md diff --git a/docs/src/configure.md b/packages/cli/docs/src/configure.md similarity index 100% rename from docs/src/configure.md rename to packages/cli/docs/src/configure.md diff --git a/docs/src/creating.md b/packages/cli/docs/src/creating.md similarity index 100% rename from docs/src/creating.md rename to packages/cli/docs/src/creating.md diff --git a/docs/src/installation.md b/packages/cli/docs/src/installation.md similarity index 100% rename from docs/src/installation.md rename to packages/cli/docs/src/installation.md diff --git a/docs/src/introduction.md b/packages/cli/docs/src/introduction.md similarity index 100% rename from docs/src/introduction.md rename to packages/cli/docs/src/introduction.md diff --git a/docs/src/plugin/README.md b/packages/cli/docs/src/plugin/README.md similarity index 100% rename from docs/src/plugin/README.md rename to packages/cli/docs/src/plugin/README.md diff --git a/docs/src/plugin/interface/command.md b/packages/cli/docs/src/plugin/interface/command.md similarity index 100% rename from docs/src/plugin/interface/command.md rename to packages/cli/docs/src/plugin/interface/command.md diff --git a/docs/src/plugin/interface/dirs.md b/packages/cli/docs/src/plugin/interface/dirs.md similarity index 100% rename from docs/src/plugin/interface/dirs.md rename to packages/cli/docs/src/plugin/interface/dirs.md diff --git a/docs/src/plugin/interface/log.md b/packages/cli/docs/src/plugin/interface/log.md similarity index 100% rename from docs/src/plugin/interface/log.md rename to packages/cli/docs/src/plugin/interface/log.md diff --git a/docs/src/plugin/interface/network.md b/packages/cli/docs/src/plugin/interface/network.md similarity index 100% rename from docs/src/plugin/interface/network.md rename to packages/cli/docs/src/plugin/interface/network.md diff --git a/docs/src/plugin/interface/os.md b/packages/cli/docs/src/plugin/interface/os.md similarity index 100% rename from docs/src/plugin/interface/os.md rename to packages/cli/docs/src/plugin/interface/os.md diff --git a/docs/src/plugin/interface/path.md b/packages/cli/docs/src/plugin/interface/path.md similarity index 100% rename from docs/src/plugin/interface/path.md rename to packages/cli/docs/src/plugin/interface/path.md diff --git a/examples/README.md b/packages/cli/examples/README.md similarity index 100% rename from examples/README.md rename to packages/cli/examples/README.md diff --git a/examples/plugin/init.lua b/packages/cli/examples/plugin/init.lua similarity index 100% rename from examples/plugin/init.lua rename to packages/cli/examples/plugin/init.lua diff --git a/examples/plugin/interface.lua b/packages/cli/examples/plugin/interface.lua similarity index 100% rename from examples/plugin/interface.lua rename to packages/cli/examples/plugin/interface.lua diff --git a/extension/.eslintrc.js b/packages/cli/extension/.eslintrc.js similarity index 100% rename from extension/.eslintrc.js rename to packages/cli/extension/.eslintrc.js diff --git a/extension/.gitignore b/packages/cli/extension/.gitignore similarity index 100% rename from extension/.gitignore rename to packages/cli/extension/.gitignore diff --git a/extension/DEV.md b/packages/cli/extension/DEV.md similarity index 100% rename from extension/DEV.md rename to packages/cli/extension/DEV.md diff --git a/extension/LICENSE.txt b/packages/cli/extension/LICENSE.txt similarity index 100% rename from extension/LICENSE.txt rename to packages/cli/extension/LICENSE.txt diff --git a/extension/README.md b/packages/cli/extension/README.md similarity index 100% rename from extension/README.md rename to packages/cli/extension/README.md diff --git a/extension/dist/.gitignore b/packages/cli/extension/dist/.gitignore similarity index 100% rename from extension/dist/.gitignore rename to packages/cli/extension/dist/.gitignore diff --git a/extension/package-lock.json b/packages/cli/extension/package-lock.json similarity index 100% rename from extension/package-lock.json rename to packages/cli/extension/package-lock.json diff --git a/extension/package.json b/packages/cli/extension/package.json similarity index 100% rename from extension/package.json rename to packages/cli/extension/package.json diff --git a/extension/server/.gitignore b/packages/cli/extension/server/.gitignore similarity index 100% rename from extension/server/.gitignore rename to packages/cli/extension/server/.gitignore diff --git a/extension/src/main.ts b/packages/cli/extension/src/main.ts similarity index 100% rename from extension/src/main.ts rename to packages/cli/extension/src/main.ts diff --git a/extension/static/icon.png b/packages/cli/extension/static/icon.png similarity index 100% rename from extension/static/icon.png rename to packages/cli/extension/static/icon.png diff --git a/extension/tsconfig.json b/packages/cli/extension/tsconfig.json similarity index 100% rename from extension/tsconfig.json rename to packages/cli/extension/tsconfig.json diff --git a/rustfmt.toml b/packages/cli/rustfmt.toml similarity index 100% rename from rustfmt.toml rename to packages/cli/rustfmt.toml diff --git a/src/assets/autoreload.js b/packages/cli/src/assets/autoreload.js similarity index 100% rename from src/assets/autoreload.js rename to packages/cli/src/assets/autoreload.js diff --git a/src/assets/dioxus.toml b/packages/cli/src/assets/dioxus.toml similarity index 100% rename from src/assets/dioxus.toml rename to packages/cli/src/assets/dioxus.toml diff --git a/src/assets/index.html b/packages/cli/src/assets/index.html similarity index 100% rename from src/assets/index.html rename to packages/cli/src/assets/index.html diff --git a/src/builder.rs b/packages/cli/src/builder.rs similarity index 100% rename from src/builder.rs rename to packages/cli/src/builder.rs diff --git a/src/cargo.rs b/packages/cli/src/cargo.rs similarity index 100% rename from src/cargo.rs rename to packages/cli/src/cargo.rs diff --git a/src/cli/autoformat/mod.rs b/packages/cli/src/cli/autoformat/mod.rs similarity index 100% rename from src/cli/autoformat/mod.rs rename to packages/cli/src/cli/autoformat/mod.rs diff --git a/src/cli/build/mod.rs b/packages/cli/src/cli/build/mod.rs similarity index 100% rename from src/cli/build/mod.rs rename to packages/cli/src/cli/build/mod.rs diff --git a/src/cli/cfg.rs b/packages/cli/src/cli/cfg.rs similarity index 100% rename from src/cli/cfg.rs rename to packages/cli/src/cli/cfg.rs diff --git a/src/cli/clean/mod.rs b/packages/cli/src/cli/clean/mod.rs similarity index 100% rename from src/cli/clean/mod.rs rename to packages/cli/src/cli/clean/mod.rs diff --git a/src/cli/config/mod.rs b/packages/cli/src/cli/config/mod.rs similarity index 100% rename from src/cli/config/mod.rs rename to packages/cli/src/cli/config/mod.rs diff --git a/src/cli/create/mod.rs b/packages/cli/src/cli/create/mod.rs similarity index 100% rename from src/cli/create/mod.rs rename to packages/cli/src/cli/create/mod.rs diff --git a/src/cli/mod.rs b/packages/cli/src/cli/mod.rs similarity index 100% rename from src/cli/mod.rs rename to packages/cli/src/cli/mod.rs diff --git a/src/cli/plugin/mod.rs b/packages/cli/src/cli/plugin/mod.rs similarity index 100% rename from src/cli/plugin/mod.rs rename to packages/cli/src/cli/plugin/mod.rs diff --git a/src/cli/serve/mod.rs b/packages/cli/src/cli/serve/mod.rs similarity index 100% rename from src/cli/serve/mod.rs rename to packages/cli/src/cli/serve/mod.rs diff --git a/src/cli/tool/mod.rs b/packages/cli/src/cli/tool/mod.rs similarity index 100% rename from src/cli/tool/mod.rs rename to packages/cli/src/cli/tool/mod.rs diff --git a/src/cli/translate/mod.rs b/packages/cli/src/cli/translate/mod.rs similarity index 100% rename from src/cli/translate/mod.rs rename to packages/cli/src/cli/translate/mod.rs diff --git a/src/cli/version.rs b/packages/cli/src/cli/version.rs similarity index 100% rename from src/cli/version.rs rename to packages/cli/src/cli/version.rs diff --git a/src/config.rs b/packages/cli/src/config.rs similarity index 100% rename from src/config.rs rename to packages/cli/src/config.rs diff --git a/src/error.rs b/packages/cli/src/error.rs similarity index 100% rename from src/error.rs rename to packages/cli/src/error.rs diff --git a/src/lib.rs b/packages/cli/src/lib.rs similarity index 100% rename from src/lib.rs rename to packages/cli/src/lib.rs diff --git a/src/logging.rs b/packages/cli/src/logging.rs similarity index 100% rename from src/logging.rs rename to packages/cli/src/logging.rs diff --git a/src/main.rs b/packages/cli/src/main.rs similarity index 100% rename from src/main.rs rename to packages/cli/src/main.rs diff --git a/src/plugin/interface/command.rs b/packages/cli/src/plugin/interface/command.rs similarity index 100% rename from src/plugin/interface/command.rs rename to packages/cli/src/plugin/interface/command.rs diff --git a/src/plugin/interface/dirs.rs b/packages/cli/src/plugin/interface/dirs.rs similarity index 100% rename from src/plugin/interface/dirs.rs rename to packages/cli/src/plugin/interface/dirs.rs diff --git a/src/plugin/interface/fs.rs b/packages/cli/src/plugin/interface/fs.rs similarity index 100% rename from src/plugin/interface/fs.rs rename to packages/cli/src/plugin/interface/fs.rs diff --git a/src/plugin/interface/log.rs b/packages/cli/src/plugin/interface/log.rs similarity index 100% rename from src/plugin/interface/log.rs rename to packages/cli/src/plugin/interface/log.rs diff --git a/src/plugin/interface/mod.rs b/packages/cli/src/plugin/interface/mod.rs similarity index 100% rename from src/plugin/interface/mod.rs rename to packages/cli/src/plugin/interface/mod.rs diff --git a/src/plugin/interface/network.rs b/packages/cli/src/plugin/interface/network.rs similarity index 100% rename from src/plugin/interface/network.rs rename to packages/cli/src/plugin/interface/network.rs diff --git a/src/plugin/interface/os.rs b/packages/cli/src/plugin/interface/os.rs similarity index 100% rename from src/plugin/interface/os.rs rename to packages/cli/src/plugin/interface/os.rs diff --git a/src/plugin/interface/path.rs b/packages/cli/src/plugin/interface/path.rs similarity index 100% rename from src/plugin/interface/path.rs rename to packages/cli/src/plugin/interface/path.rs diff --git a/src/plugin/mod.rs b/packages/cli/src/plugin/mod.rs similarity index 100% rename from src/plugin/mod.rs rename to packages/cli/src/plugin/mod.rs diff --git a/src/plugin/types.rs b/packages/cli/src/plugin/types.rs similarity index 100% rename from src/plugin/types.rs rename to packages/cli/src/plugin/types.rs diff --git a/src/server/mod.rs b/packages/cli/src/server/mod.rs similarity index 100% rename from src/server/mod.rs rename to packages/cli/src/server/mod.rs diff --git a/src/server/proxy.rs b/packages/cli/src/server/proxy.rs similarity index 100% rename from src/server/proxy.rs rename to packages/cli/src/server/proxy.rs diff --git a/src/tools.rs b/packages/cli/src/tools.rs similarity index 100% rename from src/tools.rs rename to packages/cli/src/tools.rs diff --git a/tests/main.rs b/packages/cli/tests/main.rs similarity index 100% rename from tests/main.rs rename to packages/cli/tests/main.rs diff --git a/tests/svg.html b/packages/cli/tests/svg.html similarity index 100% rename from tests/svg.html rename to packages/cli/tests/svg.html diff --git a/tests/test.html b/packages/cli/tests/test.html similarity index 100% rename from tests/test.html rename to packages/cli/tests/test.html From 01aec9f062b75ad198ae9e7b501c52b7324bfd1c Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 28 Jun 2023 17:24:09 -0700 Subject: [PATCH 382/459] remove fleet cruft --- .fleet/settings.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .fleet/settings.json diff --git a/.fleet/settings.json b/.fleet/settings.json deleted file mode 100644 index e69de29bb..000000000 From f1dbf033b9e21fcd6930fc69692e283306b51419 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 28 Jun 2023 17:38:08 -0700 Subject: [PATCH 383/459] Add cli to workspace --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index 9320b7783..84c28b054 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,6 +2,7 @@ members = [ "packages/dioxus", "packages/core", + "packages/cli", "packages/core-macro", "packages/router", "packages/html", From ec0fce3aef6c7b678b19f513a590713a87370539 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 28 Jun 2023 17:39:03 -0700 Subject: [PATCH 384/459] Update install location for CLI --- packages/cli/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/cli/README.md b/packages/cli/README.md index 5a4f32a4b..6f0826e10 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -2,7 +2,7 @@

📦✨ Dioxus CLI

Tooling to supercharge Dioxus projects

-**dioxus-cli** (inspired by wasm-pack and webpack) is a tool for getting Dioxus projects up and running. +**dioxus-cli** (inspired by wasm-pack and webpack) is a tool for getting Dioxus projects up and running. It handles all build, bundling, development and publishing to simplify web development. @@ -14,7 +14,7 @@ cargo install dioxus-cli ``` ### Install from git repository ``` -cargo install --git https://github.com/DioxusLabs/cli +cargo install --git https://github.com/DioxusLabs/dioxus dioxus-cli ``` ### Install from local folder ``` @@ -22,7 +22,7 @@ cargo install --path . --debug ``` -## Get Started +## Get Started Use `dioxus create project-name` to initialize a new Dioxus project.
@@ -40,4 +40,4 @@ dioxus create hello --template gh:dioxuslabs/dioxus-template Dioxus CLI will use `Dioxus.toml` file to Identify some project info and switch some cli feature. -You can get more configure information from [Dioxus CLI Document](https://dioxuslabs.com/cli/configure.html). \ No newline at end of file +You can get more configure information from [Dioxus CLI Document](https://dioxuslabs.com/cli/configure.html). From d00b10e83ec9b75eb776b6093686e661d50d23b3 Mon Sep 17 00:00:00 2001 From: marc2332 Date: Thu, 29 Jun 2023 14:14:29 +0200 Subject: [PATCH 385/459] tweaks --- docs/guide/src/en/async/use_effect.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide/src/en/async/use_effect.md b/docs/guide/src/en/async/use_effect.md index 8b82828db..4980e2d20 100644 --- a/docs/guide/src/en/async/use_effect.md +++ b/docs/guide/src/en/async/use_effect.md @@ -7,7 +7,7 @@ Whenever the hooks [dependencies](#dependencies) change, the future will be re-e ## Dependencies -You might want to call `use_effect` only when some value changes. For example, you might want to fetch a user's data only when the user id changes. You can provide a tuple of "dependencies" to the hook. It will automatically re-run the future when any of those dependencies change. +You can make the future re-run when some value changes. For example, you might want to fetch a user's data only when the user id changes. You can provide a tuple of "dependencies" to the hook. It will automatically re-run the future when any of those dependencies change. Example: From 20c088b9903a619a32b19e0e2bc9b289610a3783 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Esp=C3=ADn?= Date: Thu, 29 Jun 2023 17:17:10 +0200 Subject: [PATCH 386/459] fix: Remove conflicting rustfmt config for cli (#1135) --- packages/cli/rustfmt.toml | 8 -------- packages/cli/src/config.rs | 24 +++++++++++++----------- 2 files changed, 13 insertions(+), 19 deletions(-) delete mode 100644 packages/cli/rustfmt.toml diff --git a/packages/cli/rustfmt.toml b/packages/cli/rustfmt.toml deleted file mode 100644 index 39b98f125..000000000 --- a/packages/cli/rustfmt.toml +++ /dev/null @@ -1,8 +0,0 @@ -version = "Two" -edition = "2021" - -imports_granularity = "Crate" -#use_small_heuristics = "Max" -#control_brace_style = "ClosingNextLine" -normalize_comments = true -format_code_in_doc_comments = true diff --git a/packages/cli/src/config.rs b/packages/cli/src/config.rs index 9c87e266e..438fa252e 100644 --- a/packages/cli/src/config.rs +++ b/packages/cli/src/config.rs @@ -188,17 +188,19 @@ impl CrateConfig { let output_filename = { match &manifest.package.as_ref().unwrap().default_run { - Some(default_run_target) => { - default_run_target.to_owned() - }, - None => { - manifest.bin.iter().find(|b| b.name == manifest.package.as_ref().map(|pkg| pkg.name.clone())) - .or(manifest.bin.iter().find(|b| b.path == Some("src/main.rs".to_owned()))) - .or(manifest.bin.first()) - .or(manifest.lib.as_ref()) - .and_then(|prod| prod.name.clone()) - .expect("No executable or library found from cargo metadata.") - } + Some(default_run_target) => default_run_target.to_owned(), + None => manifest + .bin + .iter() + .find(|b| b.name == manifest.package.as_ref().map(|pkg| pkg.name.clone())) + .or(manifest + .bin + .iter() + .find(|b| b.path == Some("src/main.rs".to_owned()))) + .or(manifest.bin.first()) + .or(manifest.lib.as_ref()) + .and_then(|prod| prod.name.clone()) + .expect("No executable or library found from cargo metadata."), } }; let executable = ExecutableType::Binary(output_filename); From f4e1d78d7a36873b76539b9a3302f8436246ae7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Esp=C3=ADn?= Date: Thu, 29 Jun 2023 17:27:54 +0200 Subject: [PATCH 387/459] fix(docs): Fix dioxus-hooks crate description (#1134) --- packages/hooks/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/hooks/Cargo.toml b/packages/hooks/Cargo.toml index 19d5e53bd..c239da698 100644 --- a/packages/hooks/Cargo.toml +++ b/packages/hooks/Cargo.toml @@ -3,7 +3,7 @@ name = "dioxus-hooks" version = "0.3.1" authors = ["Jonathan Kelley"] edition = "2018" -description = "Dioxus VirtualDOM renderer for a remote webview instance" +description = "Basic useful hooks for Dioxus." license = "MIT/Apache-2.0" repository = "https://github.com/DioxusLabs/dioxus/" homepage = "https://dioxuslabs.com" From 2b47602c2761ff58abca7951db4a6b1b9955667c Mon Sep 17 00:00:00 2001 From: Sean L <66246285+sean-tocaboca@users.noreply.github.com> Date: Fri, 30 Jun 2023 13:31:59 +0200 Subject: [PATCH 388/459] Update README.md Fixed incorrect tailwind url --- examples/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/README.md b/examples/README.md index 3963d186d..93530ba30 100644 --- a/examples/README.md +++ b/examples/README.md @@ -40,7 +40,7 @@ cargo run --example hello_world [all_css](./all_css.rs) - You can specify any CSS attribute -[tailwind](./tailwind.rs) - You can use a library for styling +[tailwind](./tailwind/) - You can use a library for styling ## Input Handling From c84e028bd6121d52bf41f750fb6365e4994ebfa3 Mon Sep 17 00:00:00 2001 From: Nolan Darilek Date: Tue, 30 May 2023 12:09:20 -0500 Subject: [PATCH 389/459] Add richer API for describing global shortcut accelerators. --- examples/shortcut.rs | 2 +- packages/desktop/src/desktop_context.rs | 13 ++----- packages/desktop/src/shortcut.rs | 49 ++++++++++++++++--------- 3 files changed, 37 insertions(+), 27 deletions(-) diff --git a/examples/shortcut.rs b/examples/shortcut.rs index d98a69ad6..0d8ffae81 100644 --- a/examples/shortcut.rs +++ b/examples/shortcut.rs @@ -8,7 +8,7 @@ fn main() { fn app(cx: Scope) -> Element { let toggled = use_state(cx, || false); - use_global_shortcut(cx, KeyCode::S, ModifiersState::CONTROL, { + use_global_shortcut(cx, "ctrl+s", { to_owned![toggled]; move || toggled.modify(|t| !*t) }); diff --git a/packages/desktop/src/desktop_context.rs b/packages/desktop/src/desktop_context.rs index 6af6401f3..d4519399d 100644 --- a/packages/desktop/src/desktop_context.rs +++ b/packages/desktop/src/desktop_context.rs @@ -6,8 +6,6 @@ use crate::create_new_window; use crate::eval::EvalResult; use crate::events::IpcMessage; use crate::query::QueryEngine; -use crate::shortcut::IntoKeyCode; -use crate::shortcut::IntoModifersState; use crate::shortcut::ShortcutId; use crate::shortcut::ShortcutRegistry; use crate::shortcut::ShortcutRegistryError; @@ -18,6 +16,7 @@ use dioxus_core::VirtualDom; #[cfg(all(feature = "hot-reload", debug_assertions))] use dioxus_hot_reload::HotReloadMsg; use slab::Slab; +use wry::application::accelerator::Accelerator; use wry::application::event::Event; use wry::application::event_loop::EventLoopProxy; use wry::application::event_loop::EventLoopWindowTarget; @@ -237,15 +236,11 @@ impl DesktopContext { /// Linux: Only works on x11. See [this issue](https://github.com/tauri-apps/tao/issues/331) for more information. pub fn create_shortcut( &self, - key: impl IntoKeyCode, - modifiers: impl IntoModifersState, + accelerator: Accelerator, callback: impl FnMut() + 'static, ) -> Result { - self.shortcut_manager.add_shortcut( - modifiers.into_modifiers_state(), - key.into_key_code(), - Box::new(callback), - ) + self.shortcut_manager + .add_shortcut(accelerator, Box::new(callback)) } /// Remove a global shortcut diff --git a/packages/desktop/src/shortcut.rs b/packages/desktop/src/shortcut.rs index e5cc05315..06287b7bd 100644 --- a/packages/desktop/src/shortcut.rs +++ b/packages/desktop/src/shortcut.rs @@ -1,4 +1,4 @@ -use std::{cell::RefCell, collections::HashMap, rc::Rc}; +use std::{cell::RefCell, collections::HashMap, rc::Rc, str::FromStr}; use dioxus_core::ScopeState; use dioxus_html::input_data::keyboard_types::Modifiers; @@ -57,11 +57,9 @@ impl ShortcutRegistry { pub(crate) fn add_shortcut( &self, - modifiers: impl Into>, - key: KeyCode, + accelerator: Accelerator, callback: Box, ) -> Result { - let accelerator = Accelerator::new(modifiers, key); let accelerator_id = accelerator.clone().id(); let mut shortcuts = self.shortcuts.borrow_mut(); Ok( @@ -111,12 +109,6 @@ impl ShortcutRegistry { let mut shortcuts = self.shortcuts.borrow_mut(); shortcuts.clear(); let _ = self.manager.borrow_mut().unregister_all(); - // prevent CTRL+R from reloading the page which breaks apps - let _ = self.add_shortcut( - Some(ModifiersState::CONTROL), - KeyCode::KeyR, - Box::new(|| {}), - ); } } @@ -144,22 +136,45 @@ pub struct ShortcutHandle { pub shortcut_id: ShortcutId, } +pub trait IntoAccelerator { + fn accelerator(&self) -> Accelerator; +} + +impl IntoAccelerator for (dioxus_html::KeyCode, ModifiersState) { + fn accelerator(&self) -> Accelerator { + Accelerator::new(Some(self.1), self.0.into_key_code()) + } +} + +impl IntoAccelerator for (ModifiersState, dioxus_html::KeyCode) { + fn accelerator(&self) -> Accelerator { + Accelerator::new(Some(self.0), self.1.into_key_code()) + } +} + +impl IntoAccelerator for dioxus_html::KeyCode { + fn accelerator(&self) -> Accelerator { + Accelerator::new(None, self.into_key_code()) + } +} + +impl IntoAccelerator for &str { + fn accelerator(&self) -> Accelerator { + Accelerator::from_str(self).unwrap() + } +} + /// Get a closure that executes any JavaScript in the WebView context. pub fn use_global_shortcut( cx: &ScopeState, - key: impl IntoKeyCode, - modifiers: impl IntoModifersState, + accelerator: impl IntoAccelerator, handler: impl FnMut() + 'static, ) -> &Result { let desktop = use_window(cx); cx.use_hook(move || { let desktop = desktop.clone(); - let id = desktop.create_shortcut( - key.into_key_code(), - modifiers.into_modifiers_state(), - handler, - ); + let id = desktop.create_shortcut(accelerator.accelerator(), handler); Ok(ShortcutHandle { desktop, From 4ab8519af647638729281c04324fb0d453f7e570 Mon Sep 17 00:00:00 2001 From: Miles Murgaw Date: Fri, 30 Jun 2023 10:13:46 -0400 Subject: [PATCH 390/459] replace: broken test with working test --- packages/cli/src/cli/autoformat/mod.rs | 30 ++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/cli/autoformat/mod.rs b/packages/cli/src/cli/autoformat/mod.rs index 2bed439cd..24362b8d3 100644 --- a/packages/cli/src/cli/autoformat/mod.rs +++ b/packages/cli/src/cli/autoformat/mod.rs @@ -157,7 +157,33 @@ fn collect_rs_files(folder: &PathBuf, files: &mut Vec) { } } -#[test] +#[tokio::test] +async fn test_auto_fmt() { + let test_rsx = r#" + // + + rsx! { + + div {} + } + + // + // + // + + "# + .to_string(); + + let fmt = Autoformat { + check: false, + raw: Some(test_rsx), + file: None, + }; + + fmt.autoformat().await.unwrap(); +} + +/*#[test] fn spawn_properly() { let out = Command::new("dioxus") .args([ @@ -181,4 +207,4 @@ rsx! { .expect("failed to execute process"); dbg!(out); -} +}*/ From 2c8c601579ea6866245c6a840a28829ff84a669e Mon Sep 17 00:00:00 2001 From: Miles Murgaw Date: Fri, 30 Jun 2023 10:48:38 -0400 Subject: [PATCH 391/459] fix: clippy --- packages/cli/src/builder.rs | 8 +++--- packages/cli/src/cargo.rs | 2 +- packages/cli/src/cli/autoformat/mod.rs | 4 +-- packages/cli/src/cli/create/mod.rs | 14 +++++------ packages/cli/src/cli/mod.rs | 26 ++++++++++---------- packages/cli/src/cli/translate/mod.rs | 6 ++--- packages/cli/src/config.rs | 2 +- packages/cli/src/plugin/interface/command.rs | 3 ++- packages/cli/src/plugin/interface/fs.rs | 2 +- packages/cli/src/plugin/interface/path.rs | 7 +++--- packages/cli/src/plugin/mod.rs | 14 +++++------ packages/cli/src/server/mod.rs | 14 +++++------ packages/cli/src/tools.rs | 6 ++--- 13 files changed, 54 insertions(+), 54 deletions(-) diff --git a/packages/cli/src/builder.rs b/packages/cli/src/builder.rs index 05935fa59..6f50fc49d 100644 --- a/packages/cli/src/builder.rs +++ b/packages/cli/src/builder.rs @@ -50,7 +50,7 @@ pub fn build(config: &CrateConfig, quiet: bool) -> Result { log::info!("🚅 Running build command..."); let cmd = subprocess::Exec::cmd("cargo"); let cmd = cmd - .cwd(&crate_dir) + .cwd(crate_dir) .arg("build") .arg("--target") .arg("wasm32-unknown-unknown") @@ -152,7 +152,7 @@ pub fn build(config: &CrateConfig, quiet: bool) -> Result { "-o", target_file.to_str().unwrap(), ]; - if config.release == true { + if config.release { args.push("-Oz"); } binaryen.call("wasm-opt", args)?; @@ -192,7 +192,7 @@ pub fn build(config: &CrateConfig, quiet: bool) -> Result { config_path, ]; - if config.release == true { + if config.release { args.push("--minify"); } @@ -215,7 +215,7 @@ pub fn build(config: &CrateConfig, quiet: bool) -> Result { depth: 0, }; if asset_dir.is_dir() { - for entry in std::fs::read_dir(&asset_dir)? { + for entry in std::fs::read_dir(asset_dir)? { let path = entry?.path(); if path.is_file() { std::fs::copy(&path, out_dir.join(path.file_name().unwrap()))?; diff --git a/packages/cli/src/cargo.rs b/packages/cli/src/cargo.rs index d8501e8de..b52fa4b09 100644 --- a/packages/cli/src/cargo.rs +++ b/packages/cli/src/cargo.rs @@ -55,7 +55,7 @@ impl Metadata { /// TODO @Jon, find a different way that doesn't rely on the cargo metadata command (it's slow) pub fn get() -> Result { let output = Command::new("cargo") - .args(&["metadata"]) + .args(["metadata"]) .output() .map_err(|_| Error::CargoError("Manifset".to_string()))?; diff --git a/packages/cli/src/cli/autoformat/mod.rs b/packages/cli/src/cli/autoformat/mod.rs index 24362b8d3..6671b17e9 100644 --- a/packages/cli/src/cli/autoformat/mod.rs +++ b/packages/cli/src/cli/autoformat/mod.rs @@ -1,5 +1,5 @@ use futures::{stream::FuturesUnordered, StreamExt}; -use std::{fs, process::exit}; +use std::{fs, process::exit, path::Path}; use super::*; @@ -135,7 +135,7 @@ async fn autoformat_project(check: bool) -> Result<()> { Ok(()) } -fn collect_rs_files(folder: &PathBuf, files: &mut Vec) { +fn collect_rs_files(folder: &Path, files: &mut Vec) { let Ok(folder) = folder.read_dir() else { return }; // load the gitignore diff --git a/packages/cli/src/cli/create/mod.rs b/packages/cli/src/cli/create/mod.rs index 86a5e0a3f..b2323d0a2 100644 --- a/packages/cli/src/cli/create/mod.rs +++ b/packages/cli/src/cli/create/mod.rs @@ -11,9 +11,11 @@ pub struct Create { impl Create { pub fn create(self) -> Result<()> { - let mut args = GenerateArgs::default(); - args.template_path = TemplatePath { - auto_path: Some(self.template), + let args = GenerateArgs { + template_path: TemplatePath { + auto_path: Some(self.template), + ..Default::default() + }, ..Default::default() }; @@ -65,10 +67,8 @@ impl Create { fn remove_tripple_newlines(string: &str) -> String { let mut new_string = String::new(); for char in string.chars() { - if char == '\n' { - if new_string.ends_with("\n\n") { - continue; - } + if char == '\n' && new_string.ends_with("\n\n") { + continue; } new_string.push(char); } diff --git a/packages/cli/src/cli/mod.rs b/packages/cli/src/cli/mod.rs index 0d9174bdf..9145e25bd 100644 --- a/packages/cli/src/cli/mod.rs +++ b/packages/cli/src/cli/mod.rs @@ -19,6 +19,7 @@ use clap::{Parser, Subcommand}; use html_parser::Dom; use serde::Deserialize; use std::{ + fmt::Display, fs::{remove_dir_all, File}, io::{Read, Write}, path::PathBuf, @@ -71,19 +72,18 @@ pub enum Commands { Plugin(plugin::Plugin), } -impl Commands { - pub fn to_string(&self) -> String { +impl Display for Commands { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - Commands::Build(_) => "build", - Commands::Translate(_) => "translate", - Commands::Serve(_) => "serve", - Commands::Create(_) => "create", - Commands::Clean(_) => "clean", - Commands::Config(_) => "config", - Commands::Plugin(_) => "plugin", - Commands::Version(_) => "version", - Commands::Autoformat(_) => "fmt", + Commands::Build(_) => write!(f, "build"), + Commands::Translate(_) => write!(f, "translate"), + Commands::Serve(_) => write!(f, "serve"), + Commands::Create(_) => write!(f, "create"), + Commands::Clean(_) => write!(f, "clean"), + Commands::Config(_) => write!(f, "config"), + Commands::Plugin(_) => write!(f, "plugin"), + Commands::Version(_) => write!(f, "version"), + Commands::Autoformat(_) => write!(f, "fmt"), } - .to_string() } -} +} \ No newline at end of file diff --git a/packages/cli/src/cli/translate/mod.rs b/packages/cli/src/cli/translate/mod.rs index 67067db31..81f0da3e6 100644 --- a/packages/cli/src/cli/translate/mod.rs +++ b/packages/cli/src/cli/translate/mod.rs @@ -39,7 +39,7 @@ impl Translate { // Write the output match self.output { - Some(output) => std::fs::write(&output, out)?, + Some(output) => std::fs::write(output, out)?, None => print!("{}", out), } @@ -48,7 +48,7 @@ impl Translate { } pub fn convert_html_to_formatted_rsx(dom: &Dom, component: bool) -> String { - let callbody = rsx_rosetta::rsx_from_html(&dom); + let callbody = rsx_rosetta::rsx_from_html(dom); match component { true => write_callbody_with_icon_section(callbody), @@ -114,7 +114,7 @@ fn determine_input(file: Option, raw: Option) -> Result } if let Some(file) = file { - return Ok(std::fs::read_to_string(&file)?); + return Ok(std::fs::read_to_string(file)?); } // If neither exist, we try to read from stdin diff --git a/packages/cli/src/config.rs b/packages/cli/src/config.rs index 438fa252e..6324f725f 100644 --- a/packages/cli/src/config.rs +++ b/packages/cli/src/config.rs @@ -184,7 +184,7 @@ impl CrateConfig { None => crate_dir.join("public"), }; - let manifest = cargo_toml::Manifest::from_path(&cargo_def).unwrap(); + let manifest = cargo_toml::Manifest::from_path(cargo_def).unwrap(); let output_filename = { match &manifest.package.as_ref().unwrap().default_run { diff --git a/packages/cli/src/plugin/interface/command.rs b/packages/cli/src/plugin/interface/command.rs index 641fe328a..14a2650fe 100644 --- a/packages/cli/src/plugin/interface/command.rs +++ b/packages/cli/src/plugin/interface/command.rs @@ -2,6 +2,7 @@ use std::process::{Command, Stdio}; use mlua::{FromLua, UserData}; +#[derive(Debug, Clone, Copy)] enum StdioFromString { Inherit, Piped, @@ -41,7 +42,7 @@ impl UserData for PluginCommander { let stdout = args.1; let stderr = args.2; - if cmd.len() == 0 { + if cmd.is_empty() { return Ok(()); } let cmd_name = cmd.get(0).unwrap(); diff --git a/packages/cli/src/plugin/interface/fs.rs b/packages/cli/src/plugin/interface/fs.rs index a2e169ae2..5668dbe33 100644 --- a/packages/cli/src/plugin/interface/fs.rs +++ b/packages/cli/src/plugin/interface/fs.rs @@ -58,7 +58,7 @@ impl UserData for PluginFileSystem { let file = PathBuf::from(args.0); let target = PathBuf::from(args.1); let res = extract_zip(&file, &target); - if let Err(_) = res { + if res.is_err() { return Ok(false); } Ok(true) diff --git a/packages/cli/src/plugin/interface/path.rs b/packages/cli/src/plugin/interface/path.rs index 510ead409..dcc9071b5 100644 --- a/packages/cli/src/plugin/interface/path.rs +++ b/packages/cli/src/plugin/interface/path.rs @@ -18,10 +18,11 @@ impl UserData for PluginPath { methods.add_function("parent", |_, path: String| { let current_path = PathBuf::from(&path); let parent = current_path.parent(); - if parent.is_none() { - return Ok(path); + + if let Some(parent) = parent { + Ok(parent.to_str().unwrap().to_string()) } else { - return Ok(parent.unwrap().to_str().unwrap().to_string()); + Ok(path) } }); methods.add_function("exists", |_, path: String| { diff --git a/packages/cli/src/plugin/mod.rs b/packages/cli/src/plugin/mod.rs index 8c8233fbb..481dd0984 100644 --- a/packages/cli/src/plugin/mod.rs +++ b/packages/cli/src/plugin/mod.rs @@ -151,14 +151,12 @@ impl PluginManager { } } } + } else if let Ok(index) = name_index.get::<_, u32>(info.name.clone()) { + let _ = manager.set(index, info.clone()); } else { - if let Ok(index) = name_index.get::<_, u32>(info.name.clone()) { - let _ = manager.set(index, info.clone()); - } else { - let _ = manager.set(index, info.clone()); - index += 1; - let _ = name_index.set(info.name, index); - } + let _ = manager.set(index, info.clone()); + index += 1; + let _ = name_index.set(info.name, index); } } Err(_e) => { @@ -172,7 +170,7 @@ impl PluginManager { lua.globals().set("manager", manager).unwrap(); - return Ok(()); + Ok(()) } pub fn on_build_start(crate_config: &CrateConfig, platform: &str) -> anyhow::Result<()> { diff --git a/packages/cli/src/server/mod.rs b/packages/cli/src/server/mod.rs index a63a7e6b7..e7c62db82 100644 --- a/packages/cli/src/server/mod.rs +++ b/packages/cli/src/server/mod.rs @@ -631,7 +631,7 @@ fn print_console_info(ip: &String, port: u16, config: &CrateConfig, options: Pre "\t> Network : {}", format!("http://{}:{}/", ip, port).blue() ); - println!(""); + println!(); println!("\t> Profile : {}", profile.green()); println!("\t> Hot Reload : {}", hot_reload.cyan()); if let Some(proxies) = proxies { @@ -644,14 +644,14 @@ fn print_console_info(ip: &String, port: u16, config: &CrateConfig, options: Pre } println!("\t> Index Template : {}", custom_html_file.green()); println!("\t> URL Rewrite [index_on_404] : {}", url_rewrite.purple()); - println!(""); + println!(); println!( "\t> Build Time Use : {} millis", options.elapsed_time.to_string().green().bold() ); - println!(""); + println!(); - if options.warnings.len() == 0 { + if options.warnings.is_empty() { log::info!("{}\n", "A perfect compilation!".green().bold()); } else { log::warn!( @@ -718,9 +718,9 @@ fn get_ip() -> Option { }; match socket.local_addr() { - Ok(addr) => return Some(addr.ip().to_string()), - Err(_) => return None, - }; + Ok(addr) => Some(addr.ip().to_string()), + Err(_) => None, + } } async fn ws_handler( diff --git a/packages/cli/src/tools.rs b/packages/cli/src/tools.rs index 75ed226ce..98d4f9dbe 100644 --- a/packages/cli/src/tools.rs +++ b/packages/cli/src/tools.rs @@ -320,11 +320,11 @@ impl Tool { } pub fn extract_zip(file: &Path, target: &Path) -> anyhow::Result<()> { - let zip_file = std::fs::File::open(&file)?; + let zip_file = std::fs::File::open(file)?; let mut zip = zip::ZipArchive::new(zip_file)?; if !target.exists() { - let _ = std::fs::create_dir_all(target)?; + std::fs::create_dir_all(target)?; } for i in 0..zip.len() { @@ -332,7 +332,7 @@ pub fn extract_zip(file: &Path, target: &Path) -> anyhow::Result<()> { if file.is_dir() { // dir let target = target.join(Path::new(&file.name().replace('\\', ""))); - let _ = std::fs::create_dir_all(target)?; + std::fs::create_dir_all(target)?; } else { // file let file_path = target.join(Path::new(file.name())); From 2ef62a9160e9ecb5a2545fadc48adffa864a5d1c Mon Sep 17 00:00:00 2001 From: Miles Murgaw Date: Fri, 30 Jun 2023 10:50:09 -0400 Subject: [PATCH 392/459] fix: rustfmt --- packages/cli/src/cli/autoformat/mod.rs | 2 +- packages/cli/src/cli/mod.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/cli/autoformat/mod.rs b/packages/cli/src/cli/autoformat/mod.rs index 6671b17e9..257e237f2 100644 --- a/packages/cli/src/cli/autoformat/mod.rs +++ b/packages/cli/src/cli/autoformat/mod.rs @@ -1,5 +1,5 @@ use futures::{stream::FuturesUnordered, StreamExt}; -use std::{fs, process::exit, path::Path}; +use std::{fs, path::Path, process::exit}; use super::*; diff --git a/packages/cli/src/cli/mod.rs b/packages/cli/src/cli/mod.rs index 9145e25bd..4ad4fcd89 100644 --- a/packages/cli/src/cli/mod.rs +++ b/packages/cli/src/cli/mod.rs @@ -86,4 +86,4 @@ impl Display for Commands { Commands::Autoformat(_) => write!(f, "fmt"), } } -} \ No newline at end of file +} From 60b25e9c2f32fb8524dfbf08c736aaba836aaf06 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Fri, 30 Jun 2023 08:54:08 -0700 Subject: [PATCH 393/459] add on unmount hook --- packages/hooks/src/lib.rs | 3 ++ packages/hooks/src/use_on_unmount.rs | 78 ++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 packages/hooks/src/use_on_unmount.rs diff --git a/packages/hooks/src/lib.rs b/packages/hooks/src/lib.rs index 1e718eda3..ff94fec1e 100644 --- a/packages/hooks/src/lib.rs +++ b/packages/hooks/src/lib.rs @@ -21,6 +21,9 @@ macro_rules! to_owned { )*} } +mod use_on_unmount; +pub use use_on_unmount; + mod usecontext; pub use usecontext::*; diff --git a/packages/hooks/src/use_on_unmount.rs b/packages/hooks/src/use_on_unmount.rs new file mode 100644 index 000000000..528491746 --- /dev/null +++ b/packages/hooks/src/use_on_unmount.rs @@ -0,0 +1,78 @@ +/// Creats a callback that will be run before the component is removed. This can be used to clean up side effects from the component (created with use_effect) +/// +/// Example: +/// ```rust +/// use dioxus::prelude::*; + +/// fn main() { +/// dioxus_web::launch(app) +/// } + +/// fn app(cx: Scope) -> Element { +/// let state = use_state(cx, || true); +/// render! { +/// for _ in 0..100 { +/// h1 { +/// "spacer" +/// } +/// } +/// if **state { +/// render! { +/// child_component {} +/// } +/// } +/// button { +/// onclick: move |_| { +/// state.set(!*state.get()); +/// }, +/// "Unmount element" +/// } +/// } +/// } + +/// fn child_component(cx: Scope) -> Element { +/// let original_scroll_position = use_state(cx, || 0.0); +/// use_effect(cx, (), move |_| { +/// to_owned![original_scroll_position]; +/// async move { +/// let window = web_sys::window().unwrap(); +/// let document = window.document().unwrap(); +/// let element = document.get_element_by_id("my_element").unwrap(); +/// element.scroll_into_view(); +/// original_scroll_position.set(window.scroll_y().unwrap()); +/// } +/// }); + +/// use_on_unmount(cx, { +/// to_owned![original_scroll_position]; +/// /// restore scroll to the top of the page +/// move || { +/// let window = web_sys::window().unwrap(); +/// window.scroll_with_x_and_y(*original_scroll_position.current(), 0.0); +/// } +/// }); + +/// render!{ +/// div { +/// id: "my_element", +/// "hello" +/// } +/// } +/// } +/// ``` +pub fn use_on_unmount(cx: &ScopeState, destroy: D) { + cx.use_hook(|| LifeCycle { + ondestroy: Some(destroy), + }); +} + +struct LifeCycle { + ondestroy: Option, +} + +impl Drop for LifeCycle { + fn drop(&mut self) { + let f = self.ondestroy.take().unwrap(); + f(); + } +} From 81d32800f890d6e0eaae449f6066607114a6dd89 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Fri, 30 Jun 2023 12:46:47 -0700 Subject: [PATCH 394/459] fix widget events with form event updates --- packages/rink/src/hooks.rs | 2 +- packages/rink/src/lib.rs | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/rink/src/hooks.rs b/packages/rink/src/hooks.rs index 55a9274aa..8c46d1d44 100644 --- a/packages/rink/src/hooks.rs +++ b/packages/rink/src/hooks.rs @@ -60,7 +60,7 @@ impl EventData { pub struct FormData { pub value: String, - pub values: HashMap, + pub values: HashMap>, pub files: Option, } diff --git a/packages/rink/src/lib.rs b/packages/rink/src/lib.rs index d4e64cc49..22467337a 100644 --- a/packages/rink/src/lib.rs +++ b/packages/rink/src/lib.rs @@ -20,7 +20,6 @@ use std::{ }; use std::{rc::Rc, sync::RwLock}; use style_attributes::StyleModifier; -use taffy::Taffy; pub use taffy::{geometry::Point, prelude::*}; use tokio::select; use tui::{backend::CrosstermBackend, layout::Rect, Terminal}; From 6512c153dd0ded101eb818f35cda87af99f26a31 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Fri, 30 Jun 2023 12:48:25 -0700 Subject: [PATCH 395/459] Fix merge errors --- examples/shortcut.rs | 2 +- packages/desktop/src/desktop_context.rs | 1 + packages/desktop/src/element.rs | 15 ++++++--------- packages/desktop/src/lib.rs | 16 +++++++++------- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/examples/shortcut.rs b/examples/shortcut.rs index 0d8ffae81..53c3aace3 100644 --- a/examples/shortcut.rs +++ b/examples/shortcut.rs @@ -1,5 +1,4 @@ use dioxus::prelude::*; -use dioxus_desktop::tao::keyboard::ModifiersState; use dioxus_desktop::use_global_shortcut; fn main() { @@ -8,6 +7,7 @@ fn main() { fn app(cx: Scope) -> Element { let toggled = use_state(cx, || false); + use_global_shortcut(cx, "ctrl+s", { to_owned![toggled]; move || toggled.modify(|t| !*t) diff --git a/packages/desktop/src/desktop_context.rs b/packages/desktop/src/desktop_context.rs index a82a6cee8..1caa0da64 100644 --- a/packages/desktop/src/desktop_context.rs +++ b/packages/desktop/src/desktop_context.rs @@ -72,6 +72,7 @@ pub struct DesktopService { pub(crate) views: Rc>>, } +/// A handle to the [`DesktopService`] that can be passed around. pub type DesktopContext = Rc; /// A smart pointer to the current window. diff --git a/packages/desktop/src/element.rs b/packages/desktop/src/element.rs index 94db28f0b..0de5304ba 100644 --- a/packages/desktop/src/element.rs +++ b/packages/desktop/src/element.rs @@ -1,20 +1,17 @@ -use std::rc::Rc; - use dioxus_core::ElementId; use dioxus_html::{geometry::euclid::Rect, MountedResult, RenderedElementBacking}; -use wry::webview::WebView; -use crate::query::QueryEngine; +use crate::{desktop_context::DesktopContext, query::QueryEngine}; /// A mounted element passed to onmounted events pub struct DesktopElement { id: ElementId, - webview: Rc, + webview: DesktopContext, query: QueryEngine, } impl DesktopElement { - pub(crate) fn new(id: ElementId, webview: Rc, query: QueryEngine) -> Self { + pub(crate) fn new(id: ElementId, webview: DesktopContext, query: QueryEngine) -> Self { Self { id, webview, query } } } @@ -37,7 +34,7 @@ impl RenderedElementBacking for DesktopElement { let fut = self .query - .new_query::>>(&script, &self.webview) + .new_query::>>(&script, &self.webview.webview) .resolve(); Box::pin(async move { match fut.await { @@ -64,7 +61,7 @@ impl RenderedElementBacking for DesktopElement { let fut = self .query - .new_query::(&script, &self.webview) + .new_query::(&script, &self.webview.webview) .resolve(); Box::pin(async move { match fut.await { @@ -90,7 +87,7 @@ impl RenderedElementBacking for DesktopElement { let fut = self .query - .new_query::(&script, &self.webview) + .new_query::(&script, &self.webview.webview) .resolve(); Box::pin(async move { diff --git a/packages/desktop/src/lib.rs b/packages/desktop/src/lib.rs index fc574dfc0..779122b9c 100644 --- a/packages/desktop/src/lib.rs +++ b/packages/desktop/src/lib.rs @@ -18,12 +18,11 @@ mod webview; use crate::query::QueryResult; pub use cfg::Config; +pub use desktop_context::DesktopContext; pub use desktop_context::{ use_window, use_wry_event_handler, DesktopService, WryEventHandler, WryEventHandlerId, }; -use desktop_context::{ - DesktopContext, EventData, UserWindowEvent, WebviewQueue, WindowEventHandlers, -}; +use desktop_context::{EventData, UserWindowEvent, WebviewQueue, WindowEventHandlers}; use dioxus_core::*; use dioxus_html::MountedData; use dioxus_html::{native_bind::NativeFileEngine, FormData, HtmlEvent}; @@ -253,9 +252,11 @@ pub fn launch_with_props(root: Component

, props: P, cfg: Config) .base_scope() .consume_context::() .unwrap() - .query; + .query + .clone(); - let element = DesktopElement::new(element, view.webview.clone(), query); + let element = + DesktopElement::new(element, view.desktop_context.clone(), query); Rc::new(MountedData::new(element)) } else { @@ -278,7 +279,8 @@ pub fn launch_with_props(root: Component

, props: P, cfg: Config) .base_scope() .consume_context::() .unwrap() - .query; + .query + .clone(); query.send(result); } @@ -324,7 +326,7 @@ pub fn launch_with_props(root: Component

, props: P, cfg: Config) view.dom.handle_event(event_name, data, id, event_bubbles); } - send_edits(view.dom.render_immediate(), &view.webview); + send_edits(view.dom.render_immediate(), &view.desktop_context.webview); } } From cf1b801e7dfb2da4c9a5d3ce212c56455bef5172 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Fri, 30 Jun 2023 12:49:21 -0700 Subject: [PATCH 396/459] fix shadowing issue --- packages/rink/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/rink/src/lib.rs b/packages/rink/src/lib.rs index 22467337a..91b8112e6 100644 --- a/packages/rink/src/lib.rs +++ b/packages/rink/src/lib.rs @@ -22,7 +22,7 @@ use std::{rc::Rc, sync::RwLock}; use style_attributes::StyleModifier; pub use taffy::{geometry::Point, prelude::*}; use tokio::select; -use tui::{backend::CrosstermBackend, layout::Rect, Terminal}; +use tui::{backend::CrosstermBackend, Terminal}; use widgets::{register_widgets, RinkWidgetResponder, RinkWidgetTraitObject}; mod config; @@ -176,7 +176,7 @@ pub fn render( if !to_rerender.is_empty() || updated { updated = false; - fn resize(dims: Rect, taffy: &mut Taffy, rdom: &RealDom) { + fn resize(dims: tui::layout::Rect, taffy: &mut Taffy, rdom: &RealDom) { let width = screen_to_layout_space(dims.width); let height = screen_to_layout_space(dims.height); let root_node = rdom @@ -218,7 +218,7 @@ pub fn render( } else { let rdom = rdom.read().unwrap(); resize( - Rect { + tui::layout::Rect { x: 0, y: 0, width: 1000, From 5c7b1a742fb7300efef9388eb408838ac9df35ca Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Fri, 30 Jun 2023 12:49:37 -0700 Subject: [PATCH 397/459] remove debug regression --- packages/dioxus-tui/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dioxus-tui/src/lib.rs b/packages/dioxus-tui/src/lib.rs index 50a08945f..8804336be 100644 --- a/packages/dioxus-tui/src/lib.rs +++ b/packages/dioxus-tui/src/lib.rs @@ -45,7 +45,7 @@ pub fn launch_cfg_with_props(app: Component, props: Props let mut dioxus_state = dioxus_state.write().unwrap(); // Find any mount events - let mounted = dbg!(find_mount_events(&muts)); + let mounted = find_mount_events(&muts); dioxus_state.apply_mutations(&mut rdom, muts); From a6e87cf3400a79f3f1d41a6a3ee45d599a3adc77 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Fri, 30 Jun 2023 12:56:22 -0700 Subject: [PATCH 398/459] fix tests --- packages/hooks/Cargo.toml | 1 + packages/hooks/src/lib.rs | 2 +- packages/hooks/src/use_on_unmount.rs | 6 +----- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/hooks/Cargo.toml b/packages/hooks/Cargo.toml index 19d5e53bd..87adebbe4 100644 --- a/packages/hooks/Cargo.toml +++ b/packages/hooks/Cargo.toml @@ -21,3 +21,4 @@ log = { workspace = true } futures-util = { workspace = true, default-features = false } dioxus-core = { workspace = true } dioxus = { workspace = true } +web-sys = { version = "0.3.64", features = ["Document", "Window", "Element"] } diff --git a/packages/hooks/src/lib.rs b/packages/hooks/src/lib.rs index ff94fec1e..de9409650 100644 --- a/packages/hooks/src/lib.rs +++ b/packages/hooks/src/lib.rs @@ -22,7 +22,7 @@ macro_rules! to_owned { } mod use_on_unmount; -pub use use_on_unmount; +pub use use_on_unmount::*; mod usecontext; pub use usecontext::*; diff --git a/packages/hooks/src/use_on_unmount.rs b/packages/hooks/src/use_on_unmount.rs index 528491746..1fa4449c1 100644 --- a/packages/hooks/src/use_on_unmount.rs +++ b/packages/hooks/src/use_on_unmount.rs @@ -4,10 +4,6 @@ /// ```rust /// use dioxus::prelude::*; -/// fn main() { -/// dioxus_web::launch(app) -/// } - /// fn app(cx: Scope) -> Element { /// let state = use_state(cx, || true); /// render! { @@ -60,7 +56,7 @@ /// } /// } /// ``` -pub fn use_on_unmount(cx: &ScopeState, destroy: D) { +pub fn use_on_unmount(cx: &dioxus_core::ScopeState, destroy: D) { cx.use_hook(|| LifeCycle { ondestroy: Some(destroy), }); From 4f22fe3ca8c5b36aecd2c8e04493403bd9659757 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Fri, 30 Jun 2023 13:59:48 -0700 Subject: [PATCH 399/459] Stub out files and RFD on ios --- packages/desktop/Cargo.toml | 4 +- packages/desktop/src/file_upload.rs | 13 ++++-- packages/desktop/src/lib.rs | 29 ++++++------- packages/desktop/src/mobile_shortcut.rs | 55 +++++++++++++++++++++++++ packages/desktop/src/shortcut.rs | 21 ++++++++-- 5 files changed, 101 insertions(+), 21 deletions(-) create mode 100644 packages/desktop/src/mobile_shortcut.rs diff --git a/packages/desktop/Cargo.toml b/packages/desktop/Cargo.toml index e2ee6ff3b..d5bc040a7 100644 --- a/packages/desktop/Cargo.toml +++ b/packages/desktop/Cargo.toml @@ -37,9 +37,11 @@ dunce = "1.0.2" slab = { workspace = true } futures-util = { workspace = true } -rfd = "0.11.3" urlencoding = "2.1.2" +[target.'cfg(not(target_os = "ios"))'.dependencies] +rfd = "0.11.3" + [target.'cfg(target_os = "ios")'.dependencies] objc = "0.2.7" objc_id = "0.1.1" diff --git a/packages/desktop/src/file_upload.rs b/packages/desktop/src/file_upload.rs index 1b24ffc55..c7bb113c8 100644 --- a/packages/desktop/src/file_upload.rs +++ b/packages/desktop/src/file_upload.rs @@ -1,9 +1,10 @@ -use std::{path::PathBuf, str::FromStr}; +#![allow(unused)] use serde::Deserialize; +use std::{path::PathBuf, str::FromStr}; #[derive(Debug, Deserialize)] -pub(crate) struct FileDiologRequest { +pub(crate) struct FileDialogRequest { #[serde(default)] accept: Option, multiple: bool, @@ -12,7 +13,13 @@ pub(crate) struct FileDiologRequest { pub bubbles: bool, } -pub(crate) fn get_file_event(request: &FileDiologRequest) -> Vec { +#[cfg(target_os = "ios")] +pub(crate) fn get_file_event(_request: &FileDialogRequest) -> Vec { + vec![] +} + +#[cfg(not(target_os = "ios"))] +pub(crate) fn get_file_event(request: &FileDialogRequest) -> Vec { let mut dialog = rfd::FileDialog::new(); let filters: Vec<_> = request diff --git a/packages/desktop/src/lib.rs b/packages/desktop/src/lib.rs index 779122b9c..fe5c862ed 100644 --- a/packages/desktop/src/lib.rs +++ b/packages/desktop/src/lib.rs @@ -16,6 +16,9 @@ mod shortcut; mod waker; mod webview; +#[cfg(any(target_os = "ios", target_os = "android"))] +mod mobile_shortcut; + use crate::query::QueryResult; pub use cfg::Config; pub use desktop_context::DesktopContext; @@ -120,15 +123,15 @@ pub fn launch_with_props(root: Component

, props: P, cfg: Config) // Intialize hot reloading if it is enabled #[cfg(all(feature = "hot-reload", debug_assertions))] - { + dioxus_hot_reload::connect({ let proxy = proxy.clone(); - dioxus_hot_reload::connect(move |template| { + move |template| { let _ = proxy.send_event(UserWindowEvent( EventData::HotReloadEvent(template), unsafe { WindowId::dummy() }, )); - }); - } + } + }); // We start the tokio runtime *on this thread* // Any future we poll later will use this runtime to spawn tasks and for IO @@ -304,7 +307,7 @@ pub fn launch_with_props(root: Component

, props: P, cfg: Config) EventData::Ipc(msg) if msg.method() == "file_diolog" => { if let Ok(file_diolog) = - serde_json::from_value::(msg.params()) + serde_json::from_value::(msg.params()) { let id = ElementId(file_diolog.target); let event_name = &file_diolog.event; @@ -359,15 +362,12 @@ fn create_new_window( dom.base_scope().provide_context(desktop_context.clone()); - let id = desktop_context.webview.window().id(); - - // We want to poll the virtualdom and the event loop at the same time, so the waker will be connected to both - WebviewHandler { + // We want to poll the virtualdom and the event loop at the same time, so the waker will be connected to both + waker: waker::tao_waker(proxy, desktop_context.webview.window().id()), desktop_context, dom, - waker: waker::tao_waker(proxy, id), - web_context, + _web_context: web_context, } } @@ -375,9 +375,10 @@ struct WebviewHandler { dom: VirtualDom, desktop_context: DesktopContext, waker: Waker, - // This is nessisary because of a bug in wry. Wry assumes the webcontext is alive for the lifetime of the webview. We need to keep the webcontext alive, otherwise the webview will crash - #[allow(dead_code)] - web_context: WebContext, + + // Wry assumes the webcontext is alive for the lifetime of the webview. + // We need to keep the webcontext alive, otherwise the webview will crash + _web_context: WebContext, } /// Poll the virtualdom until it's pending diff --git a/packages/desktop/src/mobile_shortcut.rs b/packages/desktop/src/mobile_shortcut.rs new file mode 100644 index 000000000..29149b55b --- /dev/null +++ b/packages/desktop/src/mobile_shortcut.rs @@ -0,0 +1,55 @@ +#![allow(unused)] + +use super::*; +use wry::application::accelerator::Accelerator; +use wry::application::event_loop::EventLoopWindowTarget; + +pub struct GlobalShortcut(); +pub struct ShortcutManager(); + +impl ShortcutManager { + pub fn new(target: &EventLoopWindowTarget) -> Self { + Self() + } + + pub fn register( + &mut self, + accelerator: Accelerator, + ) -> Result { + Ok(GlobalShortcut()) + } + + pub fn unregister(&mut self, id: ShortcutId) -> Result<(), ShortcutManagerError> { + Ok(()) + } + + pub fn unregister_all(&mut self) -> Result<(), ShortcutManagerError> { + Ok(()) + } +} + +use std::{error, fmt}; + +/// An error whose cause the `ShortcutManager` to fail. +#[non_exhaustive] +#[derive(Debug)] +pub enum ShortcutManagerError { + AcceleratorAlreadyRegistered(Accelerator), + AcceleratorNotRegistered(Accelerator), + InvalidAccelerator(String), +} + +impl error::Error for ShortcutManagerError {} +impl fmt::Display for ShortcutManagerError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> { + match self { + ShortcutManagerError::AcceleratorAlreadyRegistered(e) => { + f.pad(&format!("hotkey already registered: {:?}", e)) + } + ShortcutManagerError::AcceleratorNotRegistered(e) => { + f.pad(&format!("hotkey not registered: {:?}", e)) + } + ShortcutManagerError::InvalidAccelerator(e) => e.fmt(f), + } + } +} diff --git a/packages/desktop/src/shortcut.rs b/packages/desktop/src/shortcut.rs index e3ef9fbad..5f46682e8 100644 --- a/packages/desktop/src/shortcut.rs +++ b/packages/desktop/src/shortcut.rs @@ -6,12 +6,25 @@ use slab::Slab; use wry::application::{ accelerator::{Accelerator, AcceleratorId}, event_loop::EventLoopWindowTarget, - global_shortcut::{GlobalShortcut, ShortcutManager, ShortcutManagerError}, keyboard::{KeyCode, ModifiersState}, }; use crate::{desktop_context::DesktopContext, use_window}; +#[cfg(any( + target_os = "windows", + target_os = "macos", + target_os = "linux", + target_os = "dragonfly", + target_os = "freebsd", + target_os = "netbsd", + target_os = "openbsd" +))] +use wry::application::global_shortcut::{GlobalShortcut, ShortcutManager, ShortcutManagerError}; + +#[cfg(any(target_os = "ios", target_os = "android"))] +pub use crate::mobile_shortcut::*; + #[derive(Clone)] pub(crate) struct ShortcutRegistry { manager: Rc>, @@ -21,6 +34,7 @@ pub(crate) struct ShortcutRegistry { type ShortcutMap = Rc>>; struct Shortcut { + #[allow(unused)] shortcut: GlobalShortcut, callbacks: Slab>, } @@ -98,8 +112,9 @@ impl ShortcutRegistry { if let Some(callbacks) = shortcuts.get_mut(&id.id) { callbacks.remove(id.number); if callbacks.is_empty() { - if let Some(shortcut) = shortcuts.remove(&id.id) { - let _ = self.manager.borrow_mut().unregister(shortcut.shortcut); + if let Some(_shortcut) = shortcuts.remove(&id.id) { + #[cfg(not(target_os = "ios"))] + let _ = self.manager.borrow_mut().unregister(_shortcut.shortcut); } } } From e77a14dbf792c545e5108b4bd8cbce656cfbb99a Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Fri, 30 Jun 2023 13:59:59 -0700 Subject: [PATCH 400/459] Remove RFD from input crate --- packages/html/Cargo.toml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/html/Cargo.toml b/packages/html/Cargo.toml index 5a9a51aa8..95c2252e0 100644 --- a/packages/html/Cargo.toml +++ b/packages/html/Cargo.toml @@ -22,7 +22,6 @@ keyboard-types = "0.6.2" async-trait = "0.1.58" serde-value = "0.7.0" tokio = { workspace = true, features = ["fs", "io-util"], optional = true } -rfd = { version = "0.11.3", optional = true } [dependencies.web-sys] optional = true @@ -53,7 +52,13 @@ serde_json = "1" [features] default = ["serialize"] -serialize = ["serde", "serde_repr", "euclid/serde", "keyboard-types/serde", "dioxus-core/serialize"] +serialize = [ + "serde", + "serde_repr", + "euclid/serde", + "keyboard-types/serde", + "dioxus-core/serialize", +] wasm-bind = ["web-sys", "wasm-bindgen"] -native-bind = ["tokio", "rfd"] +native-bind = ["tokio"] hot-reload-context = ["dioxus-rsx"] From 365869806401655851f219e325d0d1a9e0dad7e4 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Fri, 30 Jun 2023 14:39:38 -0700 Subject: [PATCH 401/459] put webview in rc --- packages/desktop/src/desktop_context.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/desktop/src/desktop_context.rs b/packages/desktop/src/desktop_context.rs index 1caa0da64..92d49fd4e 100644 --- a/packages/desktop/src/desktop_context.rs +++ b/packages/desktop/src/desktop_context.rs @@ -52,7 +52,7 @@ pub(crate) type WebviewQueue = Rc>>; /// ``` pub struct DesktopService { /// The wry/tao proxy to the current window - pub webview: WebView, + pub webview: Rc, /// The proxy to the event loop pub proxy: ProxyType, @@ -94,7 +94,7 @@ impl DesktopService { shortcut_manager: ShortcutRegistry, ) -> Self { Self { - webview, + webview: Rc::new(webview), proxy, event_loop, query: Default::default(), From a3169ac17b23e25f2f38f35fe65dc31ae867a57f Mon Sep 17 00:00:00 2001 From: Torstein Grindvik Date: Sun, 2 Jul 2023 15:19:03 +0200 Subject: [PATCH 402/459] Change missing trailing comma span to point to span where comma is missing from Signed-off-by: Torstein Grindvik --- packages/core-macro/Cargo.toml | 1 + packages/core-macro/tests/rsx.rs | 5 +++++ packages/core-macro/tests/rsx/trailing-comma-0.rs | 13 +++++++++++++ .../core-macro/tests/rsx/trailing-comma-0.stderr | 5 +++++ packages/rsx/src/element.rs | 7 +++++-- 5 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 packages/core-macro/tests/rsx.rs create mode 100644 packages/core-macro/tests/rsx/trailing-comma-0.rs create mode 100644 packages/core-macro/tests/rsx/trailing-comma-0.stderr diff --git a/packages/core-macro/Cargo.toml b/packages/core-macro/Cargo.toml index 2f9eef4d4..0b238bbc4 100644 --- a/packages/core-macro/Cargo.toml +++ b/packages/core-macro/Cargo.toml @@ -22,6 +22,7 @@ dioxus-rsx = { workspace = true } # testing [dev-dependencies] +dioxus = { workspace = true } rustversion = "1.0" trybuild = "1.0" diff --git a/packages/core-macro/tests/rsx.rs b/packages/core-macro/tests/rsx.rs new file mode 100644 index 000000000..f4037f928 --- /dev/null +++ b/packages/core-macro/tests/rsx.rs @@ -0,0 +1,5 @@ +#[test] +fn rsx() { + let t = trybuild::TestCases::new(); + t.compile_fail("tests/rsx/trailing-comma-0.rs"); +} diff --git a/packages/core-macro/tests/rsx/trailing-comma-0.rs b/packages/core-macro/tests/rsx/trailing-comma-0.rs new file mode 100644 index 000000000..e4735907e --- /dev/null +++ b/packages/core-macro/tests/rsx/trailing-comma-0.rs @@ -0,0 +1,13 @@ +// Given an `rsx!` invocation with a missing trailing comma, +// ensure the stderr output has an informative span. + +use dioxus::prelude::*; + +fn main() { + rsx! { + p { + class: "foo bar" + "Hello world" + } + }; +} diff --git a/packages/core-macro/tests/rsx/trailing-comma-0.stderr b/packages/core-macro/tests/rsx/trailing-comma-0.stderr new file mode 100644 index 000000000..168466572 --- /dev/null +++ b/packages/core-macro/tests/rsx/trailing-comma-0.stderr @@ -0,0 +1,5 @@ +error: missing trailing comma + --> tests/rsx/trailing-comma-0.rs:9:20 + | +9 | class: "foo bar" + | ^^^^^^^^^ diff --git a/packages/rsx/src/element.rs b/packages/rsx/src/element.rs index 466200eca..0fe6b93ee 100644 --- a/packages/rsx/src/element.rs +++ b/packages/rsx/src/element.rs @@ -76,11 +76,14 @@ impl Parse for Element { if content.peek(Ident) && content.peek2(Token![:]) && !content.peek3(Token![:]) { let name = content.parse::()?; - let ident = name.clone(); let name_str = name.to_string(); content.parse::()?; + // The span of the content to be parsed, + // for example the `hi` part of `class: "hi"`. + let span = content.span(); + if name_str.starts_with("on") { attributes.push(ElementAttrNamed { el_name: el_name.clone(), @@ -127,7 +130,7 @@ impl Parse for Element { // todo: add a message saying you need to include commas between fields if content.parse::().is_err() { - missing_trailing_comma!(ident.span()); + missing_trailing_comma!(span); } continue; } From cb7334386529ac54da39db202b2ef0f1fd5351a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Esp=C3=ADn?= Date: Sun, 2 Jul 2023 19:04:49 +0200 Subject: [PATCH 403/459] fix: Fix stop_propagation example (#1143) --- packages/core/src/events.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/events.rs b/packages/core/src/events.rs index a5b33f6b1..ce958db40 100644 --- a/packages/core/src/events.rs +++ b/packages/core/src/events.rs @@ -53,7 +53,7 @@ impl Event { /// rsx! { /// button { /// onclick: move |evt: Event| { - /// evt.cancel_bubble(); + /// evt.stop_propagation(); /// } /// } /// } From fb2669c3be5800ff9ab9a8ca680283021bdda445 Mon Sep 17 00:00:00 2001 From: marc2332 Date: Sun, 2 Jul 2023 22:41:00 +0200 Subject: [PATCH 404/459] improved shared state example --- examples/shared_state.rs | 89 +++++++++++++++++++++++++++------------- 1 file changed, 61 insertions(+), 28 deletions(-) diff --git a/examples/shared_state.rs b/examples/shared_state.rs index 6cd4d874e..2d5f6f125 100644 --- a/examples/shared_state.rs +++ b/examples/shared_state.rs @@ -1,44 +1,77 @@ #![allow(non_snake_case)] +use std::collections::HashMap; + use dioxus::prelude::*; fn main() { dioxus_desktop::launch(App); } -struct DarkMode(bool); +#[derive(Default)] +struct CoolData { + data: HashMap, +} + +impl CoolData { + pub fn new(data: HashMap) -> Self { + Self { data } + } + + pub fn view(&self, id: &usize) -> Option<&String> { + self.data.get(id) + } + + pub fn set(&mut self, id: usize, data: String) { + self.data.insert(id, data); + } +} #[rustfmt::skip] pub fn App(cx: Scope) -> Element { - use_shared_state_provider(cx, || DarkMode(false)); + use_shared_state_provider(cx, || CoolData::new(HashMap::from([ + (0, "Hello, World!".to_string()), + (1, "Dioxus is amazing!".to_string()) + ]))); render!( - DarkModeToggle {}, - AppBody {} - ) -} - -pub fn DarkModeToggle(cx: Scope) -> Element { - let dark_mode = use_shared_state::(cx).unwrap(); - - render!(input { - r#type: "checkbox", - oninput: move |event| { - let is_enabled = event.value == "true"; - dark_mode.write().0 = is_enabled; - }, - }) -} - -fn AppBody(cx: Scope) -> Element { - let dark_mode = use_shared_state::(cx).unwrap(); - - let is_dark_mode = dark_mode.read().0; - let answer = if is_dark_mode { "Yes" } else { "No" }; - - render!( - p { - "Is Dark mode enabled? {answer}" + DataEditor { + id: 0 + } + DataEditor { + id: 1 + } + DataView { + id: 0 + } + DataView { + id: 1 } ) } + +#[inline_props] +fn DataEditor(cx: Scope, id: usize) -> Element { + let cool_data = use_shared_state::(cx).unwrap().read(); + + let my_data = &cool_data.view(&id).unwrap(); + + render!(p { + "{my_data}" + }) +} + +#[inline_props] +fn DataView(cx: Scope, id: usize) -> Element { + let cool_data = use_shared_state::(cx).unwrap(); + + let oninput = |e: FormEvent| cool_data.write().set(*id, e.value.clone()); + + let cool_data = cool_data.read(); + let my_data = &cool_data.view(&id).unwrap(); + + render!(input { + oninput: oninput, + value: "{my_data}" + }) +} From 052ae145bfb9fda38f72b43341d6059255282a61 Mon Sep 17 00:00:00 2001 From: marc2332 Date: Sun, 2 Jul 2023 23:00:26 +0200 Subject: [PATCH 405/459] updated docs --- docs/guide/src/en/async/use_effect.md | 22 ++++++++++--------- .../guide/src/en/interactivity/memoization.md | 8 ++----- packages/hooks/src/useeffect.rs | 21 ++++++++++-------- packages/hooks/src/usememo.rs | 8 ++----- 4 files changed, 28 insertions(+), 31 deletions(-) diff --git a/docs/guide/src/en/async/use_effect.md b/docs/guide/src/en/async/use_effect.md index 4980e2d20..bd73453a9 100644 --- a/docs/guide/src/en/async/use_effect.md +++ b/docs/guide/src/en/async/use_effect.md @@ -4,7 +4,6 @@ Whenever the hooks [dependencies](#dependencies) change, the future will be re-evaluated. This is useful to syncrhonize with external events. - ## Dependencies You can make the future re-run when some value changes. For example, you might want to fetch a user's data only when the user id changes. You can provide a tuple of "dependencies" to the hook. It will automatically re-run the future when any of those dependencies change. @@ -13,23 +12,26 @@ Example: ```rust, no_run #[inline_props] -fn Profile(cx: Scope, id: &str) -> Element { - let name = use_state(cx, || "Default name"); +fn Profile(cx: Scope, id: usize) -> Element { + let name = use_state(cx, || None); // Only fetch the user data when the id changes. - use_effect(cx, (id,), |(id,)| async move { - let user = fetch_user(id).await; - name.set(user.name); + use_effect(cx, (id,), |(id,)| { + to_owned![name]; + async move { + let user = fetch_user(id).await; + name.set(user.name); + } }); + let name = name.get().clone().unwrap_or("Loading...".to_string()); + render!( p { "{name}" } ) } fn app(cx: Scope) -> Element { - render!( - Profile { id: "dioxusLabs" } - ) + render!(Profile { id: 0 }) } -``` \ No newline at end of file +``` diff --git a/docs/guide/src/en/interactivity/memoization.md b/docs/guide/src/en/interactivity/memoization.md index cc67c02c4..72a709bcc 100644 --- a/docs/guide/src/en/interactivity/memoization.md +++ b/docs/guide/src/en/interactivity/memoization.md @@ -8,16 +8,12 @@ fn Calculator(cx: Scope, number: usize) -> Element { let bigger_number = use_memo(cx, (number,), |(number,)| { // This will only be calculated when `number` has changed. number * 100 - }): - + }); render!( p { "{bigger_number}" } ) } - fn app(cx: Scope) -> Element { - render!( - Calculator { number: 0 } - ) + render!(Calculator { number: 0 }) } ``` diff --git a/packages/hooks/src/useeffect.rs b/packages/hooks/src/useeffect.rs index b52b89c3c..aec1f9c9a 100644 --- a/packages/hooks/src/useeffect.rs +++ b/packages/hooks/src/useeffect.rs @@ -14,25 +14,28 @@ use crate::UseFutureDep; /// ## Examples /// /// ```rust, no_run -/// /// #[inline_props] -/// fn Profile(cx: Scope, id: &str) -> Element { -/// let name = use_state(cx, || "Default name"); +/// fn Profile(cx: Scope, id: usize) -> Element { +/// let name = use_state(cx, || None); /// -/// use_effect(cx, (id,), |(id,)| async move { -/// let user = fetch_user(id).await; -/// name.set(user.name); +/// // Only fetch the user data when the id changes. +/// use_effect(cx, (id,), |(id,)| { +/// to_owned![name]; +/// async move { +/// let user = fetch_user(id).await; +/// name.set(user.name); +/// } /// }); /// +/// let name = name.get().clone().unwrap_or("Loading...".to_string()); +/// /// render!( /// p { "{name}" } /// ) /// } /// /// fn app(cx: Scope) -> Element { -/// render!( -/// Profile { id: "dioxusLabs" } -/// ) +/// render!(Profile { id: 0 }) /// } /// ``` pub fn use_effect(cx: &ScopeState, dependencies: D, future: impl FnOnce(D::Out) -> F) diff --git a/packages/hooks/src/usememo.rs b/packages/hooks/src/usememo.rs index f99d1e893..d3d991ccc 100644 --- a/packages/hooks/src/usememo.rs +++ b/packages/hooks/src/usememo.rs @@ -16,17 +16,13 @@ use crate::UseFutureDep; /// let bigger_number = use_memo(cx, (number,), |(number,)| { /// // This will only be calculated when `number` has changed. /// number * 100 -/// }): -/// +/// }); /// render!( /// p { "{bigger_number}" } /// ) /// } -/// /// fn app(cx: Scope) -> Element { -/// render!( -/// Calculator { number: 0 } -/// ) +/// render!(Calculator { number: 0 }) /// } /// ``` pub fn use_memo(cx: &ScopeState, dependencies: D, callback: impl FnOnce(D::Out) -> T) -> &T From 4c37d5c2100d012b954603b9d916a1482c3773b7 Mon Sep 17 00:00:00 2001 From: Cameron VanHouzen Date: Mon, 3 Jul 2023 11:13:57 -0400 Subject: [PATCH 406/459] Update web.md (#1145) Fix typo in web.md --- docs/guide/src/en/getting_started/web.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide/src/en/getting_started/web.md b/docs/guide/src/en/getting_started/web.md index 32d4d3d0f..b29b8d691 100644 --- a/docs/guide/src/en/getting_started/web.md +++ b/docs/guide/src/en/getting_started/web.md @@ -17,7 +17,7 @@ Examples: The Web is the best-supported target platform for Dioxus. -- Because your app will be compiled to WASM you have access to browser APIs through [wasm-bingen](https://rustwasm.github.io/docs/wasm-bindgen/introduction.html). +- Because your app will be compiled to WASM you have access to browser APIs through [wasm-bindgen](https://rustwasm.github.io/docs/wasm-bindgen/introduction.html). - Dioxus provides hydration to resume apps that are rendered on the server. See the [fullstack](fullstack.md) getting started guide for more information. ## Tooling From 62e87d1dfa7b964b7fcecc68e02628250e3daff3 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Mon, 3 Jul 2023 08:17:31 -0700 Subject: [PATCH 407/459] fix playwrite tests --- playwrite-tests/fullstack/Cargo.toml | 2 +- playwrite-tests/fullstack/src/main.rs | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/playwrite-tests/fullstack/Cargo.toml b/playwrite-tests/fullstack/Cargo.toml index 1e39f06b2..a11bfa461 100644 --- a/playwrite-tests/fullstack/Cargo.toml +++ b/playwrite-tests/fullstack/Cargo.toml @@ -16,6 +16,6 @@ serde = "1.0.159" execute = "0.2.12" [features] -default = ["web"] +default = [] ssr = ["axum", "tokio", "dioxus-fullstack/axum"] web = ["dioxus-web"] diff --git a/playwrite-tests/fullstack/src/main.rs b/playwrite-tests/fullstack/src/main.rs index 9497bbbfc..c44a0c0ae 100644 --- a/playwrite-tests/fullstack/src/main.rs +++ b/playwrite-tests/fullstack/src/main.rs @@ -25,14 +25,10 @@ fn main() { .unwrap() .wait() .unwrap(); - execute::shell("cargo run --features ssr --no-default-features") - .spawn() - .unwrap(); + execute::shell("cargo run --features ssr").spawn().unwrap(); true })); - PostServerData::register().unwrap(); - GetServerData::register().unwrap(); tokio::runtime::Runtime::new() .unwrap() .block_on(async move { From 0ec30345d4253c1766e02db5d74ede20402e680c Mon Sep 17 00:00:00 2001 From: Benedikt Terhechte Date: Tue, 4 Jul 2023 14:47:36 +0200 Subject: [PATCH 408/459] add required dependency --- packages/desktop/Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/desktop/Cargo.toml b/packages/desktop/Cargo.toml index d5bc040a7..1453e9e66 100644 --- a/packages/desktop/Cargo.toml +++ b/packages/desktop/Cargo.toml @@ -48,6 +48,7 @@ objc_id = "0.1.1" [target.'cfg(target_os = "macos")'.dependencies] core-foundation = "0.9.3" +objc = "0.2.7" [features] default = ["tokio_runtime", "hot-reload"] From 6a705b6a0e05ea21cba04cb3df73512d22dc4bc5 Mon Sep 17 00:00:00 2001 From: Benedikt Terhechte Date: Tue, 4 Jul 2023 14:47:45 +0200 Subject: [PATCH 409/459] add functionality --- packages/desktop/src/cfg.rs | 19 +++++++++++ packages/desktop/src/lib.rs | 64 ++++++++++++++++++++++++++++++++----- 2 files changed, 75 insertions(+), 8 deletions(-) diff --git a/packages/desktop/src/cfg.rs b/packages/desktop/src/cfg.rs index 619a6801a..07281e364 100644 --- a/packages/desktop/src/cfg.rs +++ b/packages/desktop/src/cfg.rs @@ -11,6 +11,17 @@ use wry::{ // pub(crate) type DynEventHandlerFn = dyn Fn(&mut EventLoop<()>, &mut WebView); +/// The behaviour of the application when the last window is closed. +#[derive(Copy, Clone, Eq, PartialEq)] +pub enum WindowCloseBehaviour { + /// Default behaviour, closing the last window exits the app + LastWindowExitsApp, + /// Closing the last window will not actually close it, just hide it + LastWindowHides, + /// Closing the last window will close it but the app will keep running so that new windows can be opened + CloseWindow, +} + /// The configuration for the desktop application. pub struct Config { pub(crate) window: WindowBuilder, @@ -24,6 +35,7 @@ pub struct Config { pub(crate) custom_index: Option, pub(crate) root_name: String, pub(crate) background_color: Option<(u8, u8, u8, u8)>, + pub(crate) last_window_close_behaviour: WindowCloseBehaviour, } type DropHandler = Box bool>; @@ -52,6 +64,7 @@ impl Config { custom_index: None, root_name: "main".to_string(), background_color: None, + last_window_close_behaviour: WindowCloseBehaviour::LastWindowExitsApp, } } @@ -89,6 +102,12 @@ impl Config { self } + /// Sets the behaviour of the application when the last window is closed. + pub fn with_close_behaviour(mut self, behaviour: WindowCloseBehaviour) -> Self { + self.last_window_close_behaviour = behaviour; + self + } + /// Set a file drop handler pub fn with_file_drop_handler( mut self, diff --git a/packages/desktop/src/lib.rs b/packages/desktop/src/lib.rs index fe5c862ed..4d5f42ad4 100644 --- a/packages/desktop/src/lib.rs +++ b/packages/desktop/src/lib.rs @@ -20,7 +20,7 @@ mod webview; mod mobile_shortcut; use crate::query::QueryResult; -pub use cfg::Config; +pub use cfg::{Config, WindowCloseBehaviour}; pub use desktop_context::DesktopContext; pub use desktop_context::{ use_window, use_wry_event_handler, DesktopService, WryEventHandler, WryEventHandlerId, @@ -121,6 +121,8 @@ pub fn launch_with_props(root: Component

, props: P, cfg: Config) let proxy = event_loop.create_proxy(); + let window_behaviour = cfg.last_window_close_behaviour; + // Intialize hot reloading if it is enabled #[cfg(all(feature = "hot-reload", debug_assertions))] dioxus_hot_reload::connect({ @@ -176,18 +178,33 @@ pub fn launch_with_props(root: Component

, props: P, cfg: Config) Event::WindowEvent { event, window_id, .. } => match event { - WindowEvent::CloseRequested => { - webviews.remove(&window_id); + WindowEvent::CloseRequested => match window_behaviour { + cfg::WindowCloseBehaviour::LastWindowExitsApp => { + webviews.remove(&window_id); - if webviews.is_empty() { - *control_flow = ControlFlow::Exit + if webviews.is_empty() { + *control_flow = ControlFlow::Exit + } } - } + cfg::WindowCloseBehaviour::LastWindowHides => { + let Some(webview) = webviews.get(&window_id) else { + return; + }; + hide_app_window(&webview.desktop_context.webview); + } + cfg::WindowCloseBehaviour::CloseWindow => { + webviews.remove(&window_id); + } + }, WindowEvent::Destroyed { .. } => { webviews.remove(&window_id); - if webviews.is_empty() { - *control_flow = ControlFlow::Exit; + if matches!( + window_behaviour, + cfg::WindowCloseBehaviour::LastWindowExitsApp + ) && webviews.is_empty() + { + *control_flow = ControlFlow::Exit } } _ => {} @@ -411,3 +428,34 @@ fn send_edits(edits: Mutations, webview: &WebView) { // todo: use SSE and binary data to send the edits with lower overhead _ = webview.evaluate_script(&format!("window.interpreter.handleEdits({serialized})")); } + +/// Different hide implementations per platform +#[allow(unused_variables)] +fn hide_app_window(webview: &WebView) { + #[cfg(target_os = "windows")] + { + use wry::application::platform::windows::WindowExtWindows; + webview.window().set_visible(false); + webview.window().set_skip_taskbar(true); + } + + #[cfg(target_os = "linux")] + { + use wry::application::platform::unix::WindowExtUnix; + webview.window().set_visible(false); + } + + #[cfg(target_os = "macos")] + { + // webview.window().set_visible(false); has the wrong behaviour on macOS + // It will hide the window but not show it again when the user switches + // back to the app. `NSApplication::hide:` has the correct behaviour + use objc::runtime::Object; + use objc::{msg_send, sel, sel_impl}; + objc::rc::autoreleasepool(|| unsafe { + let app: *mut Object = msg_send![objc::class!(NSApplication), sharedApplication]; + let nil = std::ptr::null_mut::(); + let _: () = msg_send![app, hide: nil]; + }); + } +} From 44025db5b06e98700ede630687a708b17bd6fb5d Mon Sep 17 00:00:00 2001 From: Benedikt Terhechte Date: Tue, 4 Jul 2023 14:48:05 +0200 Subject: [PATCH 410/459] add to example --- examples/window_focus.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/window_focus.rs b/examples/window_focus.rs index 59b4d5166..79a5e5044 100644 --- a/examples/window_focus.rs +++ b/examples/window_focus.rs @@ -2,9 +2,12 @@ use dioxus::prelude::*; use dioxus_desktop::tao::event::WindowEvent; use dioxus_desktop::use_wry_event_handler; use dioxus_desktop::wry::application::event::Event as WryEvent; +use dioxus_desktop::{Config, WindowCloseBehaviour}; fn main() { - dioxus_desktop::launch(app); + let cfg = Config::new().with_close_behaviour(WindowCloseBehaviour::CloseWindow); + + dioxus_desktop::launch_cfg(app, cfg); } fn app(cx: Scope) -> Element { From 4b800af30019c39e2d0423d6c0f755ebaa1bb47c Mon Sep 17 00:00:00 2001 From: Miles Murgaw Date: Tue, 4 Jul 2023 16:56:38 -0400 Subject: [PATCH 411/459] fix: clippy --- playwrite-tests/fullstack/src/main.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/playwrite-tests/fullstack/src/main.rs b/playwrite-tests/fullstack/src/main.rs index c44a0c0ae..98caadbb6 100644 --- a/playwrite-tests/fullstack/src/main.rs +++ b/playwrite-tests/fullstack/src/main.rs @@ -53,6 +53,7 @@ struct AppProps { count: i32, } +#[allow(unused)] fn app(cx: Scope) -> Element { let mut count = use_state(cx, || cx.props.count); let text = use_state(cx, || "...".to_string()); From c14b942fdad8fed3ed87a1df42bc7af160103a2c Mon Sep 17 00:00:00 2001 From: Miles Murgaw Date: Wed, 5 Jul 2023 12:50:01 -0400 Subject: [PATCH 412/459] fix: doc typos - trigger CI --- .../guide/src/en/contributing/project_structure.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/guide/src/en/contributing/project_structure.md b/docs/guide/src/en/contributing/project_structure.md index 0f4fa64c8..38b6cbde4 100644 --- a/docs/guide/src/en/contributing/project_structure.md +++ b/docs/guide/src/en/contributing/project_structure.md @@ -4,15 +4,15 @@ There are many packages in the Dioxus organization. This document will help you ## Renderers -- [Desktop](https://github.com/DioxusLabs/dioxus/tree/master/packages/desktop): A Render that Runs Dioxus applications natively, but renders them with the system webview -- [Mobile](https://github.com/DioxusLabs/dioxus/tree/master/packages/mobile): A Render that Runs Dioxus applications natively, but renders them with the system webview. This is currently a copy of the desktop render -- [Web](https://github.com/DioxusLabs/dioxus/tree/master/packages/Web): Renders Dioxus applications in the browser by compiling to WASM and manipulating the DOM -- [Liveview](https://github.com/DioxusLabs/dioxus/tree/master/packages/liveview): A Render that Runs on the server, and renders using a websocket proxy in the browser -- [Rink](https://github.com/DioxusLabs/dioxus/tree/master/packages/rink): A Renderer that renders a HTML-like tree into a terminal -- [TUI](https://github.com/DioxusLabs/dioxus/tree/master/packages/dioxus-tui): A Renderer that uses Rink to render a Dioxus application in a terminal +- [Desktop](https://github.com/DioxusLabs/dioxus/tree/master/packages/desktop): A renderer that runs Dioxus applications natively, but renders them with the system webview. +- [Mobile](https://github.com/DioxusLabs/dioxus/tree/master/packages/mobile): A renderer that runs Dioxus applications natively, but renders them with the system webview. This is currently a copy of the desktop renderer. +- [Web](https://github.com/DioxusLabs/dioxus/tree/master/packages/Web): Renders Dioxus applications in the browser by compiling to WASM and manipulating the DOM. +- [Liveview](https://github.com/DioxusLabs/dioxus/tree/master/packages/liveview): A renderer that runs on the server, and renders using a websocket proxy in the browser. +- [Rink](https://github.com/DioxusLabs/dioxus/tree/master/packages/rink): A renderer that renders a HTML-like tree into a terminal. +- [TUI](https://github.com/DioxusLabs/dioxus/tree/master/packages/dioxus-tui): A renderer that uses Rink to render a Dioxus application in a terminal. - [Blitz-Core](https://github.com/DioxusLabs/blitz/tree/master/blitz-core): An experimental native renderer that renders a HTML-like tree using WGPU. - [Blitz](https://github.com/DioxusLabs/blitz): An experimental native renderer that uses Blitz-Core to render a Dioxus application using WGPU. -- [SSR](https://github.com/DioxusLabs/dioxus/tree/master/packages/ssr): A Render that Runs Dioxus applications on the server, and renders them to HTML +- [SSR](https://github.com/DioxusLabs/dioxus/tree/master/packages/ssr): A renderer that runs Dioxus applications on the server, and renders them to HTML. ## State Management/Hooks From a5aa7db3da425bd79afdc64eda53cf029c6430dd Mon Sep 17 00:00:00 2001 From: Miles Murgaw Date: Wed, 5 Jul 2023 12:52:54 -0400 Subject: [PATCH 413/459] fix: trigger it now? --- packages/desktop/headless_tests/events.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/desktop/headless_tests/events.rs b/packages/desktop/headless_tests/events.rs index 0281969ec..f0f31c4ea 100644 --- a/packages/desktop/headless_tests/events.rs +++ b/packages/desktop/headless_tests/events.rs @@ -20,6 +20,7 @@ pub(crate) fn check_app_exits(app: Component) { Config::new().with_window(WindowBuilder::new().with_visible(false)), ); + // Stop deadman's switch should_panic.store(false, std::sync::atomic::Ordering::SeqCst); } From df41c81d14e412067e3c19095766711e8b493f85 Mon Sep 17 00:00:00 2001 From: Miles Murgaw Date: Wed, 5 Jul 2023 12:55:18 -0400 Subject: [PATCH 414/459] fix: add playwright tests to CI workflow --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1a4b156cd..b44aab843 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,6 +13,7 @@ on: - lib.rs - Cargo.toml - Makefile.toml + - playwrite-tests/** pull_request: types: [opened, synchronize, reopened, ready_for_review] From 1a5936afda988b62c825b9543cf7d13d00a581da Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 5 Jul 2023 11:31:09 -0700 Subject: [PATCH 415/459] Add iOS example to mainline! --- Cargo.toml | 2 + examples/ios_demo/.gitignore | 10 + examples/ios_demo/Cargo.toml | 51 +++++ examples/ios_demo/README.md | 9 + examples/ios_demo/mobile.toml | 8 + examples/ios_demo/src/lib.rs | 261 ++++++++++++++++++++++ examples/ios_demo/src/style.css | 379 ++++++++++++++++++++++++++++++++ 7 files changed, 720 insertions(+) create mode 100644 examples/ios_demo/.gitignore create mode 100644 examples/ios_demo/Cargo.toml create mode 100644 examples/ios_demo/README.md create mode 100644 examples/ios_demo/mobile.toml create mode 100644 examples/ios_demo/src/lib.rs create mode 100644 examples/ios_demo/src/style.css diff --git a/Cargo.toml b/Cargo.toml index 9c679c853..c2d8c34a0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,11 +34,13 @@ members = [ # Full project examples "examples/tailwind", "examples/PWA-example", + # "examples/ios_demo", # Playwrite tests "playwrite-tests/liveview", "playwrite-tests/web", "playwrite-tests/fullstack", ] +exclude = ["examples/ios_demo"] # dependencies that are shared across packages [workspace.dependencies] diff --git a/examples/ios_demo/.gitignore b/examples/ios_demo/.gitignore new file mode 100644 index 000000000..419513ee1 --- /dev/null +++ b/examples/ios_demo/.gitignore @@ -0,0 +1,10 @@ +# Rust +target/ +**/*.rs.bk + +# tauri-mobile +.cargo/ +/gen + +# macOS +.DS_Store diff --git a/examples/ios_demo/Cargo.toml b/examples/ios_demo/Cargo.toml new file mode 100644 index 000000000..8034ec8d8 --- /dev/null +++ b/examples/ios_demo/Cargo.toml @@ -0,0 +1,51 @@ +[package] +name = "rustnl-ios" +version = "0.1.0" +authors = ["Jonathan Kelley "] +edition = "2018" + +[lib] +crate-type = ["staticlib", "cdylib", "rlib"] + +[[bin]] +name = "rustnl-ios-desktop" +path = "gen/bin/desktop.rs" + +[package.metadata.cargo-android] +app-activity-name = "com.example.rustnl_ios.MainActivity" +app-dependencies = [ + "androidx.webkit:webkit:1.6.1", + "androidx.appcompat:appcompat:1.6.1", + "com.google.android.material:material:1.8.0", +] +project-dependencies = ["org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21"] +app-plugins = ["org.jetbrains.kotlin.android"] +app-permissions = ["android.permission.INTERNET"] +app-theme-parent = "Theme.MaterialComponents.DayNight.DarkActionBar" +vulkan-validation = false + +[package.metadata.cargo-android.env-vars] +WRY_ANDROID_PACKAGE = "com.example.rustnl_ios" +WRY_ANDROID_LIBRARY = "rustnl_ios" +WRY_ANDROID_KOTLIN_FILES_OUT_DIR = "/app/src/main/kotlin/com/example/rustnl_ios" + +[package.metadata.cargo-apple.ios] +frameworks = ["WebKit"] + +[dependencies] +anyhow = "1.0.56" +log = "0.4.11" +im-rc = "15.1.0" +dioxus = { path = "../../packages/dioxus" } +dioxus-desktop = { path = "../../packages/desktop" } + +[target.'cfg(target_os = "android")'.dependencies] +android_logger = "0.9.0" +jni = "0.19.0" +paste = "1.0" + +[target.'cfg(not(target_os = "android"))'.dependencies] +env_logger = "0.9.0" + +[target.'cfg(target_os = "ios")'.dependencies] +core-foundation = "0.9.3" diff --git a/examples/ios_demo/README.md b/examples/ios_demo/README.md new file mode 100644 index 000000000..ebe26fa16 --- /dev/null +++ b/examples/ios_demo/README.md @@ -0,0 +1,9 @@ +# wry + +## iOS + +Must run Xcode on rosetta. Goto Application > Right Click Xcode > Get Info > Open in Rosetta. + +If you are using M1, you will have to run `cargo build --target x86_64-apple-ios` instead of `cargo apple build` if you want to run in simulator. + +Otherwise, it's all `cargo apple run` when running in actual device. diff --git a/examples/ios_demo/mobile.toml b/examples/ios_demo/mobile.toml new file mode 100644 index 000000000..062cf8a35 --- /dev/null +++ b/examples/ios_demo/mobile.toml @@ -0,0 +1,8 @@ +[app] +name = "rustnl-ios" +stylized-name = "Rustnl Ios" +domain = "example.com" +template-pack = "wry" + +[apple] +development-team = "34U4FG9TJ8" diff --git a/examples/ios_demo/src/lib.rs b/examples/ios_demo/src/lib.rs new file mode 100644 index 000000000..a45de6c2b --- /dev/null +++ b/examples/ios_demo/src/lib.rs @@ -0,0 +1,261 @@ +use anyhow::Result; +use dioxus::prelude::*; +use dioxus_elements::input_data::keyboard_types::Key; +#[cfg(target_os = "android")] +use wry::android_binding; + +pub fn main() -> Result<()> { + init_logging(); + + dioxus_desktop::launch(app); + Ok(()) +} + +fn app(cx: Scope) -> Element { + cx.render(rsx! { + div { "Hello World!" } + }) +} + +// #[derive(PartialEq, Eq, Clone, Copy)] +// pub enum FilterState { +// All, +// Active, +// Completed, +// } + +// #[derive(Debug, PartialEq, Eq, Clone)] +// pub struct TodoItem { +// pub id: u32, +// pub checked: bool, +// pub contents: String, +// } + +// pub fn app(cx: Scope<()>) -> Element { +// let todos = use_state(cx, im_rc::HashMap::::default); +// let filter = use_state(cx, || FilterState::All); +// let draft = use_state(cx, || "".to_string()); +// let todo_id = use_state(cx, || 0); + +// // Filter the todos based on the filter state +// let mut filtered_todos = todos +// .iter() +// .filter(|(_, item)| match **filter { +// FilterState::All => true, +// FilterState::Active => !item.checked, +// FilterState::Completed => item.checked, +// }) +// .map(|f| *f.0) +// .collect::>(); +// filtered_todos.sort_unstable(); + +// let active_todo_count = todos.values().filter(|item| !item.checked).count(); +// let active_todo_text = match active_todo_count { +// 1 => "item", +// _ => "items", +// }; + +// let show_clear_completed = todos.values().any(|todo| todo.checked); + +// let selected = |state| { +// if *filter == state { +// "selected" +// } else { +// "false" +// } +// }; + +// cx.render(rsx! { +// section { class: "todoapp", +// style { include_str!("./style.css") } +// header { class: "header", +// h1 {"todos"} +// input { +// class: "new-todo", +// placeholder: "What needs to be done?", +// value: "{draft}", +// autofocus: "true", +// oninput: move |evt| { +// draft.set(evt.value.clone()); +// }, +// onkeydown: move |evt| { +// if evt.key() == Key::Enter && !draft.is_empty() { +// todos.make_mut().insert( +// **todo_id, +// TodoItem { +// id: **todo_id, +// checked: false, +// contents: draft.to_string(), +// }, +// ); +// *todo_id.make_mut() += 1; +// draft.set("".to_string()); +// } +// } +// } +// } +// section { +// class: "main", +// if !todos.is_empty() { +// rsx! { +// input { +// id: "toggle-all", +// class: "toggle-all", +// r#type: "checkbox", +// onchange: move |_| { +// let check = active_todo_count != 0; +// for (_, item) in todos.make_mut().iter_mut() { +// item.checked = check; +// } +// }, +// checked: if active_todo_count == 0 { "true" } else { "false" }, +// } +// label { r#for: "toggle-all" } +// } +// } +// ul { class: "todo-list", +// filtered_todos.iter().map(|id| rsx!(TodoEntry { +// key: "{id}", +// id: *id, +// todos: todos, +// })) +// } +// (!todos.is_empty()).then(|| rsx!( +// footer { class: "footer", +// span { class: "todo-count", +// strong {"{active_todo_count} "} +// span {"{active_todo_text} left"} +// } +// ul { class: "filters", +// for (state, state_text, url) in [ +// (FilterState::All, "All", "#/"), +// (FilterState::Active, "Active", "#/active"), +// (FilterState::Completed, "Completed", "#/completed"), +// ] { +// li { +// a { +// href: url, +// class: selected(state), +// onclick: move |_| filter.set(state), +// prevent_default: "onclick", +// state_text +// } +// } +// } +// } +// show_clear_completed.then(|| rsx!( +// button { +// class: "clear-completed", +// onclick: move |_| todos.make_mut().retain(|_, todo| !todo.checked), +// "Clear completed" +// } +// )) +// } +// )) +// } +// } +// footer { class: "info", +// p { "Double-click to edit a todo" } +// p { "Created by ", a { href: "http://github.com/jkelleyrtp/", "jkelleyrtp" }} +// p { "Part of ", a { href: "http://todomvc.com", "TodoMVC" }} +// } +// }) +// } + +// #[derive(Props)] +// pub struct TodoEntryProps<'a> { +// todos: &'a UseState>, +// id: u32, +// } + +// pub fn TodoEntry<'a>(cx: Scope<'a, TodoEntryProps<'a>>) -> Element { +// let is_editing = use_state(cx, || false); + +// let todos = cx.props.todos.get(); +// let todo = &todos[&cx.props.id]; +// let completed = if todo.checked { "completed" } else { "" }; +// let editing = if **is_editing { "editing" } else { "" }; + +// cx.render(rsx!{ +// li { +// class: "{completed} {editing}", +// div { class: "view", +// input { +// class: "toggle", +// r#type: "checkbox", +// id: "cbg-{todo.id}", +// checked: "{todo.checked}", +// oninput: move |evt| { +// cx.props.todos.make_mut()[&cx.props.id].checked = evt.value.parse().unwrap(); +// } +// } +// label { +// r#for: "cbg-{todo.id}", +// ondblclick: move |_| is_editing.set(true), +// prevent_default: "onclick", +// "{todo.contents}" +// } +// button { +// class: "destroy", +// onclick: move |_| { cx.props.todos.make_mut().remove(&todo.id); }, +// prevent_default: "onclick", +// } +// } +// is_editing.then(|| rsx!{ +// input { +// class: "edit", +// value: "{todo.contents}", +// oninput: move |evt| cx.props.todos.make_mut()[&cx.props.id].contents = evt.value.clone(), +// autofocus: "true", +// onfocusout: move |_| is_editing.set(false), +// onkeydown: move |evt| { +// match evt.key() { +// Key::Enter | Key::Escape | Key::Tab => is_editing.set(false), +// _ => {} +// } +// }, +// } +// }) +// } +// }) +// } + +#[cfg(target_os = "android")] +fn init_logging() { + android_logger::init_once( + android_logger::Config::default() + .with_min_level(log::Level::Trace) + .with_tag("rustnl-ios"), + ); +} + +#[cfg(not(target_os = "android"))] +fn init_logging() { + env_logger::init(); +} + +#[cfg(any(target_os = "android", target_os = "ios"))] +fn stop_unwind T, T>(f: F) -> T { + match std::panic::catch_unwind(std::panic::AssertUnwindSafe(f)) { + Ok(t) => t, + Err(err) => { + eprintln!("attempt to unwind out of `rust` with err: {:?}", err); + std::process::abort() + } + } +} + +#[cfg(any(target_os = "android", target_os = "ios"))] +fn _start_app() { + main().unwrap(); +} + +#[no_mangle] +#[inline(never)] +#[cfg(any(target_os = "android", target_os = "ios"))] +pub extern "C" fn start_app() { + #[cfg(target_os = "android")] + android_binding!(com_example, rustnl_ios, _start_app); + #[cfg(target_os = "ios")] + _start_app() +} diff --git a/examples/ios_demo/src/style.css b/examples/ios_demo/src/style.css new file mode 100644 index 000000000..ab9dbd7a9 --- /dev/null +++ b/examples/ios_demo/src/style.css @@ -0,0 +1,379 @@ +html, +body { + margin: 0; + padding: 0; +} + +button { + margin: 0; + padding: 0; + border: 0; + background: none; + font-size: 100%; + vertical-align: baseline; + font-family: inherit; + font-weight: inherit; + color: inherit; + -webkit-appearance: none; + appearance: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif; + line-height: 1.4em; + background: #f5f5f5; + color: #4d4d4d; + min-width: 230px; + max-width: 550px; + margin: 0 auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-weight: 300; +} + +:focus { + outline: 0; +} + +.hidden { + display: none; +} + +.todoapp { + background: #fff; + margin: 130px 0 40px 0; + position: relative; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), + 0 25px 50px 0 rgba(0, 0, 0, 0.1); +} + +.todoapp input::-webkit-input-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +.todoapp input::-moz-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +.todoapp input::input-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +.todoapp h1 { + position: absolute; + top: -155px; + width: 100%; + font-size: 100px; + font-weight: 100; + text-align: center; + color: rgba(175, 47, 47, 0.15); + -webkit-text-rendering: optimizeLegibility; + -moz-text-rendering: optimizeLegibility; + text-rendering: optimizeLegibility; +} + +.new-todo, +.edit { + position: relative; + margin: 0; + width: 100%; + font-size: 24px; + font-family: inherit; + font-weight: inherit; + line-height: 1.4em; + border: 0; + color: inherit; + padding: 6px; + border: 1px solid #999; + box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2); + box-sizing: border-box; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.new-todo { + padding: 16px 16px 16px 60px; + border: none; + background: rgba(0, 0, 0, 0.003); + box-shadow: inset 0 -2px 1px rgba(0, 0, 0, 0.03); +} + +.main { + position: relative; + z-index: 2; + border-top: 1px solid #e6e6e6; +} + +.toggle-all { + text-align: center; + border: none; + /* Mobile Safari */ + opacity: 0; + position: absolute; +} + +.toggle-all+label { + width: 60px; + height: 34px; + font-size: 0; + position: absolute; + top: -52px; + left: -13px; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} + +.toggle-all+label:before { + content: '❯'; + font-size: 22px; + color: #e6e6e6; + padding: 10px 27px 10px 27px; +} + +.toggle-all:checked+label:before { + color: #737373; +} + +.todo-list { + margin: 0; + padding: 0; + list-style: none; +} + +.todo-list li { + position: relative; + font-size: 24px; + border-bottom: 1px solid #ededed; +} + +.todo-list li:last-child { + border-bottom: none; +} + +.todo-list li.editing { + border-bottom: none; + padding: 0; +} + +.todo-list li.editing .edit { + display: block; + width: 506px; + padding: 12px 16px; + margin: 0 0 0 43px; +} + +.todo-list li.editing .view { + display: none; +} + +.todo-list li .toggle { + text-align: center; + width: 40px; + /* auto, since non-WebKit browsers doesn't support input styling */ + height: auto; + position: absolute; + top: 0; + bottom: 0; + margin: auto 0; + border: none; + /* Mobile Safari */ + -webkit-appearance: none; + appearance: none; +} + +.todo-list li .toggle { + opacity: 0; +} + +.todo-list li .toggle+label { + /* + Firefox requires `#` to be escaped - https://bugzilla.mozilla.org/show_bug.cgi?id=922433 + IE and Edge requires *everything* to be escaped to render, so we do that instead of just the `#` - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7157459/ + */ + background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23ededed%22%20stroke-width%3D%223%22/%3E%3C/svg%3E'); + background-repeat: no-repeat; + background-position: center left; +} + +.todo-list li .toggle:checked+label { + background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23bddad5%22%20stroke-width%3D%223%22/%3E%3Cpath%20fill%3D%22%235dc2af%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22/%3E%3C/svg%3E'); +} + +.todo-list li label { + word-break: break-all; + padding: 15px 15px 15px 60px; + display: block; + line-height: 1.2; + transition: color 0.4s; +} + +.todo-list li.completed label { + color: #d9d9d9; + text-decoration: line-through; +} + +.todo-list li .destroy { + display: none; + position: absolute; + top: 0; + right: 10px; + bottom: 0; + width: 40px; + height: 40px; + margin: auto 0; + font-size: 30px; + color: #cc9a9a; + margin-bottom: 11px; + transition: color 0.2s ease-out; +} + +.todo-list li .destroy:hover { + color: #af5b5e; +} + +.todo-list li .destroy:after { + content: '×'; +} + +.todo-list li:hover .destroy { + display: block; +} + +.todo-list li .edit { + display: none; +} + +.todo-list li.editing:last-child { + margin-bottom: -1px; +} + +.footer { + color: #777; + padding: 10px 15px; + height: 20px; + text-align: center; + border-top: 1px solid #e6e6e6; +} + +.footer:before { + content: ''; + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 50px; + overflow: hidden; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), + 0 8px 0 -3px #f6f6f6, + 0 9px 1px -3px rgba(0, 0, 0, 0.2), + 0 16px 0 -6px #f6f6f6, + 0 17px 2px -6px rgba(0, 0, 0, 0.2); +} + +.todo-count { + float: left; + text-align: left; +} + +.todo-count strong { + font-weight: 300; +} + +.filters { + margin: 0; + padding: 0; + list-style: none; + position: absolute; + right: 0; + left: 0; +} + +.filters li { + display: inline; +} + +.filters li a { + color: inherit; + margin: 3px; + padding: 3px 7px; + text-decoration: none; + border: 1px solid transparent; + border-radius: 3px; +} + +.filters li a:hover { + border-color: rgba(175, 47, 47, 0.1); +} + +.filters li a.selected { + border-color: rgba(175, 47, 47, 0.2); +} + +.clear-completed, +html .clear-completed:active { + float: right; + position: relative; + line-height: 20px; + text-decoration: none; + cursor: pointer; +} + +.clear-completed:hover { + text-decoration: underline; +} + +.info { + margin: 65px auto 0; + color: #bfbfbf; + font-size: 10px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-align: center; +} + +.info p { + line-height: 1; +} + +.info a { + color: inherit; + text-decoration: none; + font-weight: 400; +} + +.info a:hover { + text-decoration: underline; +} + +/* + Hack to remove background from Mobile Safari. + Can't use it globally since it destroys checkboxes in Firefox +*/ +@media screen and (-webkit-min-device-pixel-ratio:0) { + + .toggle-all, + .todo-list li .toggle { + background: none; + } + + .todo-list li .toggle { + height: 40px; + } +} + +@media (max-width: 430px) { + .footer { + height: 50px; + } + + .filters { + bottom: 10px; + } +} From 2ad85c9b28efe7126e2dae685707a3f3d847d7aa Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 5 Jul 2023 12:06:24 -0700 Subject: [PATCH 416/459] Add a custom index.html for the viewport stuff --- examples/ios_demo/src/index.html | 12 + examples/ios_demo/src/lib.rs | 243 +++----------------- examples/ios_demo/src/style.css | 379 ------------------------------- packages/desktop/src/lib.rs | 40 ++-- 4 files changed, 71 insertions(+), 603 deletions(-) create mode 100644 examples/ios_demo/src/index.html delete mode 100644 examples/ios_demo/src/style.css diff --git a/examples/ios_demo/src/index.html b/examples/ios_demo/src/index.html new file mode 100644 index 000000000..9679d1786 --- /dev/null +++ b/examples/ios_demo/src/index.html @@ -0,0 +1,12 @@ + + + + Dioxus app + + + + +
+ + + diff --git a/examples/ios_demo/src/lib.rs b/examples/ios_demo/src/lib.rs index a45de6c2b..a85282bb7 100644 --- a/examples/ios_demo/src/lib.rs +++ b/examples/ios_demo/src/lib.rs @@ -1,225 +1,44 @@ use anyhow::Result; use dioxus::prelude::*; -use dioxus_elements::input_data::keyboard_types::Key; -#[cfg(target_os = "android")] -use wry::android_binding; pub fn main() -> Result<()> { init_logging(); - dioxus_desktop::launch(app); + // Right now we're going through dioxus-desktop but we'd like to go through dioxus-mobile + // That will seed the index.html with some fixes that prevent the page from scrolling/zooming etc + dioxus_desktop::launch_cfg( + app, + // Note that we have to disable the viewport goofiness of the browser. + // Dioxus_mobile should do this for us + Config::default().with_custom_index(include_str!("index.html").to_string()), + ); + Ok(()) } fn app(cx: Scope) -> Element { - cx.render(rsx! { - div { "Hello World!" } - }) + let items = use_state(cx, || vec![1, 2, 3]); + + render! { + div { + h1 { "Hello, Mobile"} + div { margin_left: "auto", margin_right: "auto", width: "200px", padding: "10px", border: "1px solid black", + button { + onclick: move|_| { + let mut _items = items.make_mut(); + let len = _items.len() + 1; + _items.push(len); + }, + "Add item" + } + for item in items.iter() { + div { "- {item}" } + } + } + } + } } -// #[derive(PartialEq, Eq, Clone, Copy)] -// pub enum FilterState { -// All, -// Active, -// Completed, -// } - -// #[derive(Debug, PartialEq, Eq, Clone)] -// pub struct TodoItem { -// pub id: u32, -// pub checked: bool, -// pub contents: String, -// } - -// pub fn app(cx: Scope<()>) -> Element { -// let todos = use_state(cx, im_rc::HashMap::::default); -// let filter = use_state(cx, || FilterState::All); -// let draft = use_state(cx, || "".to_string()); -// let todo_id = use_state(cx, || 0); - -// // Filter the todos based on the filter state -// let mut filtered_todos = todos -// .iter() -// .filter(|(_, item)| match **filter { -// FilterState::All => true, -// FilterState::Active => !item.checked, -// FilterState::Completed => item.checked, -// }) -// .map(|f| *f.0) -// .collect::>(); -// filtered_todos.sort_unstable(); - -// let active_todo_count = todos.values().filter(|item| !item.checked).count(); -// let active_todo_text = match active_todo_count { -// 1 => "item", -// _ => "items", -// }; - -// let show_clear_completed = todos.values().any(|todo| todo.checked); - -// let selected = |state| { -// if *filter == state { -// "selected" -// } else { -// "false" -// } -// }; - -// cx.render(rsx! { -// section { class: "todoapp", -// style { include_str!("./style.css") } -// header { class: "header", -// h1 {"todos"} -// input { -// class: "new-todo", -// placeholder: "What needs to be done?", -// value: "{draft}", -// autofocus: "true", -// oninput: move |evt| { -// draft.set(evt.value.clone()); -// }, -// onkeydown: move |evt| { -// if evt.key() == Key::Enter && !draft.is_empty() { -// todos.make_mut().insert( -// **todo_id, -// TodoItem { -// id: **todo_id, -// checked: false, -// contents: draft.to_string(), -// }, -// ); -// *todo_id.make_mut() += 1; -// draft.set("".to_string()); -// } -// } -// } -// } -// section { -// class: "main", -// if !todos.is_empty() { -// rsx! { -// input { -// id: "toggle-all", -// class: "toggle-all", -// r#type: "checkbox", -// onchange: move |_| { -// let check = active_todo_count != 0; -// for (_, item) in todos.make_mut().iter_mut() { -// item.checked = check; -// } -// }, -// checked: if active_todo_count == 0 { "true" } else { "false" }, -// } -// label { r#for: "toggle-all" } -// } -// } -// ul { class: "todo-list", -// filtered_todos.iter().map(|id| rsx!(TodoEntry { -// key: "{id}", -// id: *id, -// todos: todos, -// })) -// } -// (!todos.is_empty()).then(|| rsx!( -// footer { class: "footer", -// span { class: "todo-count", -// strong {"{active_todo_count} "} -// span {"{active_todo_text} left"} -// } -// ul { class: "filters", -// for (state, state_text, url) in [ -// (FilterState::All, "All", "#/"), -// (FilterState::Active, "Active", "#/active"), -// (FilterState::Completed, "Completed", "#/completed"), -// ] { -// li { -// a { -// href: url, -// class: selected(state), -// onclick: move |_| filter.set(state), -// prevent_default: "onclick", -// state_text -// } -// } -// } -// } -// show_clear_completed.then(|| rsx!( -// button { -// class: "clear-completed", -// onclick: move |_| todos.make_mut().retain(|_, todo| !todo.checked), -// "Clear completed" -// } -// )) -// } -// )) -// } -// } -// footer { class: "info", -// p { "Double-click to edit a todo" } -// p { "Created by ", a { href: "http://github.com/jkelleyrtp/", "jkelleyrtp" }} -// p { "Part of ", a { href: "http://todomvc.com", "TodoMVC" }} -// } -// }) -// } - -// #[derive(Props)] -// pub struct TodoEntryProps<'a> { -// todos: &'a UseState>, -// id: u32, -// } - -// pub fn TodoEntry<'a>(cx: Scope<'a, TodoEntryProps<'a>>) -> Element { -// let is_editing = use_state(cx, || false); - -// let todos = cx.props.todos.get(); -// let todo = &todos[&cx.props.id]; -// let completed = if todo.checked { "completed" } else { "" }; -// let editing = if **is_editing { "editing" } else { "" }; - -// cx.render(rsx!{ -// li { -// class: "{completed} {editing}", -// div { class: "view", -// input { -// class: "toggle", -// r#type: "checkbox", -// id: "cbg-{todo.id}", -// checked: "{todo.checked}", -// oninput: move |evt| { -// cx.props.todos.make_mut()[&cx.props.id].checked = evt.value.parse().unwrap(); -// } -// } -// label { -// r#for: "cbg-{todo.id}", -// ondblclick: move |_| is_editing.set(true), -// prevent_default: "onclick", -// "{todo.contents}" -// } -// button { -// class: "destroy", -// onclick: move |_| { cx.props.todos.make_mut().remove(&todo.id); }, -// prevent_default: "onclick", -// } -// } -// is_editing.then(|| rsx!{ -// input { -// class: "edit", -// value: "{todo.contents}", -// oninput: move |evt| cx.props.todos.make_mut()[&cx.props.id].contents = evt.value.clone(), -// autofocus: "true", -// onfocusout: move |_| is_editing.set(false), -// onkeydown: move |evt| { -// match evt.key() { -// Key::Enter | Key::Escape | Key::Tab => is_editing.set(false), -// _ => {} -// } -// }, -// } -// }) -// } -// }) -// } - #[cfg(target_os = "android")] fn init_logging() { android_logger::init_once( @@ -250,6 +69,10 @@ fn _start_app() { main().unwrap(); } +use dioxus_desktop::Config; +#[cfg(target_os = "android")] +use wry::android_binding; + #[no_mangle] #[inline(never)] #[cfg(any(target_os = "android", target_os = "ios"))] diff --git a/examples/ios_demo/src/style.css b/examples/ios_demo/src/style.css deleted file mode 100644 index ab9dbd7a9..000000000 --- a/examples/ios_demo/src/style.css +++ /dev/null @@ -1,379 +0,0 @@ -html, -body { - margin: 0; - padding: 0; -} - -button { - margin: 0; - padding: 0; - border: 0; - background: none; - font-size: 100%; - vertical-align: baseline; - font-family: inherit; - font-weight: inherit; - color: inherit; - -webkit-appearance: none; - appearance: none; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -body { - font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif; - line-height: 1.4em; - background: #f5f5f5; - color: #4d4d4d; - min-width: 230px; - max-width: 550px; - margin: 0 auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - font-weight: 300; -} - -:focus { - outline: 0; -} - -.hidden { - display: none; -} - -.todoapp { - background: #fff; - margin: 130px 0 40px 0; - position: relative; - box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), - 0 25px 50px 0 rgba(0, 0, 0, 0.1); -} - -.todoapp input::-webkit-input-placeholder { - font-style: italic; - font-weight: 300; - color: #e6e6e6; -} - -.todoapp input::-moz-placeholder { - font-style: italic; - font-weight: 300; - color: #e6e6e6; -} - -.todoapp input::input-placeholder { - font-style: italic; - font-weight: 300; - color: #e6e6e6; -} - -.todoapp h1 { - position: absolute; - top: -155px; - width: 100%; - font-size: 100px; - font-weight: 100; - text-align: center; - color: rgba(175, 47, 47, 0.15); - -webkit-text-rendering: optimizeLegibility; - -moz-text-rendering: optimizeLegibility; - text-rendering: optimizeLegibility; -} - -.new-todo, -.edit { - position: relative; - margin: 0; - width: 100%; - font-size: 24px; - font-family: inherit; - font-weight: inherit; - line-height: 1.4em; - border: 0; - color: inherit; - padding: 6px; - border: 1px solid #999; - box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2); - box-sizing: border-box; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.new-todo { - padding: 16px 16px 16px 60px; - border: none; - background: rgba(0, 0, 0, 0.003); - box-shadow: inset 0 -2px 1px rgba(0, 0, 0, 0.03); -} - -.main { - position: relative; - z-index: 2; - border-top: 1px solid #e6e6e6; -} - -.toggle-all { - text-align: center; - border: none; - /* Mobile Safari */ - opacity: 0; - position: absolute; -} - -.toggle-all+label { - width: 60px; - height: 34px; - font-size: 0; - position: absolute; - top: -52px; - left: -13px; - -webkit-transform: rotate(90deg); - transform: rotate(90deg); -} - -.toggle-all+label:before { - content: '❯'; - font-size: 22px; - color: #e6e6e6; - padding: 10px 27px 10px 27px; -} - -.toggle-all:checked+label:before { - color: #737373; -} - -.todo-list { - margin: 0; - padding: 0; - list-style: none; -} - -.todo-list li { - position: relative; - font-size: 24px; - border-bottom: 1px solid #ededed; -} - -.todo-list li:last-child { - border-bottom: none; -} - -.todo-list li.editing { - border-bottom: none; - padding: 0; -} - -.todo-list li.editing .edit { - display: block; - width: 506px; - padding: 12px 16px; - margin: 0 0 0 43px; -} - -.todo-list li.editing .view { - display: none; -} - -.todo-list li .toggle { - text-align: center; - width: 40px; - /* auto, since non-WebKit browsers doesn't support input styling */ - height: auto; - position: absolute; - top: 0; - bottom: 0; - margin: auto 0; - border: none; - /* Mobile Safari */ - -webkit-appearance: none; - appearance: none; -} - -.todo-list li .toggle { - opacity: 0; -} - -.todo-list li .toggle+label { - /* - Firefox requires `#` to be escaped - https://bugzilla.mozilla.org/show_bug.cgi?id=922433 - IE and Edge requires *everything* to be escaped to render, so we do that instead of just the `#` - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7157459/ - */ - background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23ededed%22%20stroke-width%3D%223%22/%3E%3C/svg%3E'); - background-repeat: no-repeat; - background-position: center left; -} - -.todo-list li .toggle:checked+label { - background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23bddad5%22%20stroke-width%3D%223%22/%3E%3Cpath%20fill%3D%22%235dc2af%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22/%3E%3C/svg%3E'); -} - -.todo-list li label { - word-break: break-all; - padding: 15px 15px 15px 60px; - display: block; - line-height: 1.2; - transition: color 0.4s; -} - -.todo-list li.completed label { - color: #d9d9d9; - text-decoration: line-through; -} - -.todo-list li .destroy { - display: none; - position: absolute; - top: 0; - right: 10px; - bottom: 0; - width: 40px; - height: 40px; - margin: auto 0; - font-size: 30px; - color: #cc9a9a; - margin-bottom: 11px; - transition: color 0.2s ease-out; -} - -.todo-list li .destroy:hover { - color: #af5b5e; -} - -.todo-list li .destroy:after { - content: '×'; -} - -.todo-list li:hover .destroy { - display: block; -} - -.todo-list li .edit { - display: none; -} - -.todo-list li.editing:last-child { - margin-bottom: -1px; -} - -.footer { - color: #777; - padding: 10px 15px; - height: 20px; - text-align: center; - border-top: 1px solid #e6e6e6; -} - -.footer:before { - content: ''; - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 50px; - overflow: hidden; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), - 0 8px 0 -3px #f6f6f6, - 0 9px 1px -3px rgba(0, 0, 0, 0.2), - 0 16px 0 -6px #f6f6f6, - 0 17px 2px -6px rgba(0, 0, 0, 0.2); -} - -.todo-count { - float: left; - text-align: left; -} - -.todo-count strong { - font-weight: 300; -} - -.filters { - margin: 0; - padding: 0; - list-style: none; - position: absolute; - right: 0; - left: 0; -} - -.filters li { - display: inline; -} - -.filters li a { - color: inherit; - margin: 3px; - padding: 3px 7px; - text-decoration: none; - border: 1px solid transparent; - border-radius: 3px; -} - -.filters li a:hover { - border-color: rgba(175, 47, 47, 0.1); -} - -.filters li a.selected { - border-color: rgba(175, 47, 47, 0.2); -} - -.clear-completed, -html .clear-completed:active { - float: right; - position: relative; - line-height: 20px; - text-decoration: none; - cursor: pointer; -} - -.clear-completed:hover { - text-decoration: underline; -} - -.info { - margin: 65px auto 0; - color: #bfbfbf; - font-size: 10px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - text-align: center; -} - -.info p { - line-height: 1; -} - -.info a { - color: inherit; - text-decoration: none; - font-weight: 400; -} - -.info a:hover { - text-decoration: underline; -} - -/* - Hack to remove background from Mobile Safari. - Can't use it globally since it destroys checkboxes in Firefox -*/ -@media screen and (-webkit-min-device-pixel-ratio:0) { - - .toggle-all, - .todo-list li .toggle { - background: none; - } - - .todo-list li .toggle { - height: 40px; - } -} - -@media (max-width: 430px) { - .footer { - height: 50px; - } - - .filters { - bottom: 10px; - } -} diff --git a/packages/desktop/src/lib.rs b/packages/desktop/src/lib.rs index fe5c862ed..a8b0fc3ba 100644 --- a/packages/desktop/src/lib.rs +++ b/packages/desktop/src/lib.rs @@ -34,6 +34,7 @@ pub use eval::{use_eval, EvalResult}; use futures_util::{pin_mut, FutureExt}; use shortcut::ShortcutRegistry; pub use shortcut::{use_global_shortcut, ShortcutHandle, ShortcutId, ShortcutRegistryError}; +use std::cell::Cell; use std::rc::Rc; use std::task::Waker; use std::{collections::HashMap, sync::Arc}; @@ -154,18 +155,10 @@ pub fn launch_with_props(root: Component

, props: P, cfg: Config) let shortcut_manager = ShortcutRegistry::new(&event_loop); - let web_view = create_new_window( - cfg, - &event_loop, - &proxy, - VirtualDom::new_with_props(root, props), - &queue, - &event_handlers, - shortcut_manager.clone(), - ); - - // By default, we'll create a new window when the app starts - queue.borrow_mut().push(web_view); + // move the props into a cell so we can pop it out later to create the first window + // iOS panics if we create a window before the event loop is started + let props = Rc::new(Cell::new(Some(props))); + let cfg = Rc::new(Cell::new(Some(cfg))); event_loop.run(move |window_event, event_loop, control_flow| { *control_flow = ControlFlow::Wait; @@ -193,8 +186,27 @@ pub fn launch_with_props(root: Component

, props: P, cfg: Config) _ => {} }, - Event::NewEvents(StartCause::Init) - | Event::UserEvent(UserWindowEvent(EventData::NewWindow, _)) => { + Event::NewEvents(StartCause::Init) => { + // + let props = props.take().unwrap(); + let cfg = cfg.take().unwrap(); + + let handler = create_new_window( + cfg, + &event_loop, + &proxy, + VirtualDom::new_with_props(root, props), + &queue, + &event_handlers, + shortcut_manager.clone(), + ); + + let id = handler.desktop_context.webview.window().id(); + webviews.insert(id, handler); + _ = proxy.send_event(UserWindowEvent(EventData::Poll, id)); + } + + Event::UserEvent(UserWindowEvent(EventData::NewWindow, _)) => { for handler in queue.borrow_mut().drain(..) { let id = handler.desktop_context.webview.window().id(); webviews.insert(id, handler); From 4343abf76d0b3f6b23355def1d607ab3c6381861 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 5 Jul 2023 12:20:00 -0700 Subject: [PATCH 417/459] Add better instructions --- examples/ios_demo/README.md | 36 ++++++++++++++++++++++++++++----- examples/ios_demo/ios_demo.png | Bin 0 -> 1261241 bytes 2 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 examples/ios_demo/ios_demo.png diff --git a/examples/ios_demo/README.md b/examples/ios_demo/README.md index ebe26fa16..b9ca33fe4 100644 --- a/examples/ios_demo/README.md +++ b/examples/ios_demo/README.md @@ -1,9 +1,35 @@ -# wry +# Dioxus Mobile demo -## iOS +## How this project was generated -Must run Xcode on rosetta. Goto Application > Right Click Xcode > Get Info > Open in Rosetta. +Right now, Dioxus supports mobile targets including iOS and Android. However, our tooling is not mature enough to include the build commands directly. -If you are using M1, you will have to run `cargo build --target x86_64-apple-ios` instead of `cargo apple build` if you want to run in simulator. +This project was generated using [tauri-mobile](https://github.com/tauri-apps/tauri-mobile). We have yet to integrate this generation into the Dioxus-CLI. The open issue for this is [#1157](https://github.com/DioxusLabs/dioxus/issues/1157). + +## Running on iOS + +First, you'll want to make sure you have the appropriate iOS targets installed. + +The two targets you'll use the most are: + +- `aarch64-apple-ios-sim` +- `aarch64-apple-ios` + +These can be added using +- `rustup target add aarch64-apple-ios-sim` +- `rustup target add aarch64-apple-ios` + +From there, you'll want to get a build of the crate using whichever platform you're targeting (simulator or actual hardware). For now, we'll just stick with the simulator: +- `cargo build --target aarch64-apple-ios-sim` + +Then, you'll want to open XCode. This might take awhile if you've never opened XCode before. The command you want to use is: +- `cargo apple open` + +This will open XCode with this particular project. + +From there, just click the "play" button with the right target and the app should be running! + +![ios_demo](ios_demo.png) + +Note that clicking play doesn't cause a new build, so you'll need to keep rebuilding the app between changes. The tooling here is very young, so please be patient. If you want to contribute to make things easier, please do! We'll be happy to help. -Otherwise, it's all `cargo apple run` when running in actual device. diff --git a/examples/ios_demo/ios_demo.png b/examples/ios_demo/ios_demo.png new file mode 100644 index 0000000000000000000000000000000000000000..2f48c65caf084555c99f7c338cf98e3743700497 GIT binary patch literal 1261241 zcmeFYWpo`ovmm-1+c7gU+i}b>Gc!ZX%#7O*Gc!Aen3g#`cr2$B*aN&o;HDgXdw3H=cSQR8f8 z0svsEEQEy>B!z{E6&&qMEv!ud0Ew`~WGDsYBTV0Sk6AoA5_IYu_9Hsq@5q{m9br-u z9|BR0h>O(~`!Tc?RYa;u%g`a!3WhY16|Ex-`~2yLNOLPAAQctAVPW^4cYeDV=VmsW zaGm6R=RD}Td1pTOAdurQunn&c<}0JvNWQw5fP#lL*^K~3s{o~v4Tr6*o0NiqiwlkX zqsAvW<{pg2;vz+U|LOkz{VV#TKP@3Z;Zv{V3#~3?ZxJ%VRv5)EKz1o|*ZPe06}g^Z z3Z)>fNV99aa^W}Q_=H02sLb#%cr&tcSU~33o|F=R_=L<`43PnHSopWll2kudII>u# zpO)#qAz!bAj(%i+C`#toq|B3a=J&2WnfSe3M`dH4j%4Z{516`soYlSegM){S_#Y%0 zB?h6NIKOUVMXTpC911>d18^eZ{e?}{hqA)6wpB{>=HPE?m#&z{4%{J!7EB?aChTjc zLdZrF#>3JL1e09*;iWM{MlC6%m&$SWrA$wxX7h~SRKUcO_}N*%m4W3@ z!d(K^yNLpcUw`@q`9diPQpWlg=u-@VLuNx;LvjmpE+HZMS=z&=1I9Pun*sCzC!3hf zP=o<|jL^D%D3>Ua!pMOEpO7(>0_sV?hu~}dQeyFT5g>)O6!5=87YL9_z*Yn<2#YGf zs2~yqT4rbE%uYcbex5_%4SdQmI3&1*6zefg`DoP}Tum_+s9_Jlhhgwl-lVXnPe-!z z8{L$8__PY4=UdfxzsdK2!4v-B6KZ($jNp&FluvA*AuwX3#3U8U6oZPDR47Ub=fjUh z)&%czbo2P~YRo^U`mu?(Wxq}-niIOixU;%5x8mzW*$TO4Ut~W|lO0}Q!-|0$1v~t- zXRJv9ZT%8{$>lEZLp{T+l=M zO18%AE1Qw=v67=`y3c+R3}g(h{Y2R2+mdv%X-8OxB8tJ=#ZOZppiBSC^(CmxMDlAOGP zA~7yHp)&SKGHY1MSoup@xx1wKdM2#ySsA%CEo_nnLONG#xw;|j;j7y?#Cej>V z6SpGNC2~O&Pf=B=Q8`*ww@^FBQ?(@~Iu~z-^A_Hn=@sIY?=>R45LQ|=yH>J5cdv0I z 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

+79KnL!tm+)pz&3^*v*($feJDT24 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

|{P6?6SnoRecx#`Y^-Hi}2T}8Sql{c8c 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 xyOtd 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%0D;OzPpSf44Je+RNRd*R;P^=Gn>m}07WA4~}w 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ຠ$zS6z>{UY&&hp7?_!?KMqO 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%0A&+0ri{zlJ7@i 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 ^;{B!o`^srzI>ayF*rSNo8hjpLSd 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%0Dh=RJ!gW+^TopIF{9XNJLxw`*9 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 z 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 z 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 jd#+UW@l`(j_`njxgN@xNA+q?pU literal 0 HcmV?d00001 From 2ce8ded74da29cb8c9889023f2399bc553779933 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 5 Jul 2023 12:49:41 -0700 Subject: [PATCH 418/459] FIx desktop for android --- examples/ios_demo/Cargo.toml | 1 + examples/ios_demo/README.md | 10 ++++++++++ examples/ios_demo/src/lib.rs | 4 ++-- packages/desktop/Cargo.toml | 3 ++- packages/desktop/src/file_upload.rs | 20 ++++++++++++++++++-- packages/desktop/src/shortcut.rs | 10 +++++++++- 6 files changed, 42 insertions(+), 6 deletions(-) diff --git a/examples/ios_demo/Cargo.toml b/examples/ios_demo/Cargo.toml index 8034ec8d8..76b4fbc6e 100644 --- a/examples/ios_demo/Cargo.toml +++ b/examples/ios_demo/Cargo.toml @@ -38,6 +38,7 @@ log = "0.4.11" im-rc = "15.1.0" dioxus = { path = "../../packages/dioxus" } dioxus-desktop = { path = "../../packages/desktop" } +wry = { version = "0.27.2" } [target.'cfg(target_os = "android")'.dependencies] android_logger = "0.9.0" diff --git a/examples/ios_demo/README.md b/examples/ios_demo/README.md index b9ca33fe4..a6877b276 100644 --- a/examples/ios_demo/README.md +++ b/examples/ios_demo/README.md @@ -33,3 +33,13 @@ From there, just click the "play" button with the right target and the app shoul Note that clicking play doesn't cause a new build, so you'll need to keep rebuilding the app between changes. The tooling here is very young, so please be patient. If you want to contribute to make things easier, please do! We'll be happy to help. + +## Running on Android + +Again, we want to make sure we have the right targets installed. + +The common targets here are +- aarch64-linux-android +- armv7-linux-androideabi +- i686-linux-android +- x86_64-linux-android diff --git a/examples/ios_demo/src/lib.rs b/examples/ios_demo/src/lib.rs index a85282bb7..bf433beb1 100644 --- a/examples/ios_demo/src/lib.rs +++ b/examples/ios_demo/src/lib.rs @@ -1,5 +1,7 @@ use anyhow::Result; use dioxus::prelude::*; +#[cfg(target_os = "android")] +use wry::android_binding; pub fn main() -> Result<()> { init_logging(); @@ -70,8 +72,6 @@ fn _start_app() { } use dioxus_desktop::Config; -#[cfg(target_os = "android")] -use wry::android_binding; #[no_mangle] #[inline(never)] diff --git a/packages/desktop/Cargo.toml b/packages/desktop/Cargo.toml index d5bc040a7..59d0df937 100644 --- a/packages/desktop/Cargo.toml +++ b/packages/desktop/Cargo.toml @@ -39,7 +39,8 @@ slab = { workspace = true } futures-util = { workspace = true } urlencoding = "2.1.2" -[target.'cfg(not(target_os = "ios"))'.dependencies] + +[target.'cfg(any(target_os = "windows",target_os = "macos",target_os = "linux",target_os = "dragonfly", target_os = "freebsd", target_os = "netbsd", target_os = "openbsd"))'.dependencies] rfd = "0.11.3" [target.'cfg(target_os = "ios")'.dependencies] diff --git a/packages/desktop/src/file_upload.rs b/packages/desktop/src/file_upload.rs index c7bb113c8..d09783bcf 100644 --- a/packages/desktop/src/file_upload.rs +++ b/packages/desktop/src/file_upload.rs @@ -13,12 +13,28 @@ pub(crate) struct FileDialogRequest { pub bubbles: bool, } -#[cfg(target_os = "ios")] +#[cfg(not(any( + target_os = "windows", + target_os = "macos", + target_os = "linux", + target_os = "dragonfly", + target_os = "freebsd", + target_os = "netbsd", + target_os = "openbsd" +)))] pub(crate) fn get_file_event(_request: &FileDialogRequest) -> Vec { vec![] } -#[cfg(not(target_os = "ios"))] +#[cfg(any( + target_os = "windows", + target_os = "macos", + target_os = "linux", + target_os = "dragonfly", + target_os = "freebsd", + target_os = "netbsd", + target_os = "openbsd" +))] pub(crate) fn get_file_event(request: &FileDialogRequest) -> Vec { let mut dialog = rfd::FileDialog::new(); diff --git a/packages/desktop/src/shortcut.rs b/packages/desktop/src/shortcut.rs index 5f46682e8..ffc64a232 100644 --- a/packages/desktop/src/shortcut.rs +++ b/packages/desktop/src/shortcut.rs @@ -113,7 +113,15 @@ impl ShortcutRegistry { callbacks.remove(id.number); if callbacks.is_empty() { if let Some(_shortcut) = shortcuts.remove(&id.id) { - #[cfg(not(target_os = "ios"))] + #[cfg(any( + target_os = "windows", + target_os = "macos", + target_os = "linux", + target_os = "dragonfly", + target_os = "freebsd", + target_os = "netbsd", + target_os = "openbsd" + ))] let _ = self.manager.borrow_mut().unregister(_shortcut.shortcut); } } From 5506c568c068d397935925e6b5fc67fe9d268f07 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 5 Jul 2023 13:44:24 -0700 Subject: [PATCH 419/459] move to newer wry --- examples/ios_demo/Cargo.toml | 6 ++- examples/ios_demo/src/lib.rs | 60 ++++++----------------- examples/ios_demo/src/lib_old.rs | 84 ++++++++++++++++++++++++++++++++ packages/desktop/Cargo.toml | 8 +-- packages/desktop/src/lib.rs | 20 ++++---- packages/hot-reload/Cargo.toml | 2 +- 6 files changed, 119 insertions(+), 61 deletions(-) create mode 100644 examples/ios_demo/src/lib_old.rs diff --git a/examples/ios_demo/Cargo.toml b/examples/ios_demo/Cargo.toml index 76b4fbc6e..1d97fbddb 100644 --- a/examples/ios_demo/Cargo.toml +++ b/examples/ios_demo/Cargo.toml @@ -37,8 +37,10 @@ anyhow = "1.0.56" log = "0.4.11" im-rc = "15.1.0" dioxus = { path = "../../packages/dioxus" } -dioxus-desktop = { path = "../../packages/desktop" } -wry = { version = "0.27.2" } +dioxus-desktop = { path = "../../packages/desktop", default-features = false, features = [ + "tokio_runtime", +] } +wry = { version = "0.28.0" } [target.'cfg(target_os = "android")'.dependencies] android_logger = "0.9.0" diff --git a/examples/ios_demo/src/lib.rs b/examples/ios_demo/src/lib.rs index bf433beb1..37ce2328b 100644 --- a/examples/ios_demo/src/lib.rs +++ b/examples/ios_demo/src/lib.rs @@ -1,52 +1,13 @@ use anyhow::Result; -use dioxus::prelude::*; #[cfg(target_os = "android")] use wry::android_binding; -pub fn main() -> Result<()> { - init_logging(); - - // Right now we're going through dioxus-desktop but we'd like to go through dioxus-mobile - // That will seed the index.html with some fixes that prevent the page from scrolling/zooming etc - dioxus_desktop::launch_cfg( - app, - // Note that we have to disable the viewport goofiness of the browser. - // Dioxus_mobile should do this for us - Config::default().with_custom_index(include_str!("index.html").to_string()), - ); - - Ok(()) -} - -fn app(cx: Scope) -> Element { - let items = use_state(cx, || vec![1, 2, 3]); - - render! { - div { - h1 { "Hello, Mobile"} - div { margin_left: "auto", margin_right: "auto", width: "200px", padding: "10px", border: "1px solid black", - button { - onclick: move|_| { - let mut _items = items.make_mut(); - let len = _items.len() + 1; - _items.push(len); - }, - "Add item" - } - for item in items.iter() { - div { "- {item}" } - } - } - } - } -} - #[cfg(target_os = "android")] fn init_logging() { android_logger::init_once( android_logger::Config::default() .with_min_level(log::Level::Trace) - .with_tag("rustnl-ios"), + .with_tag("android-taurio"), ); } @@ -68,17 +29,28 @@ fn stop_unwind T, T>(f: F) -> T { #[cfg(any(target_os = "android", target_os = "ios"))] fn _start_app() { - main().unwrap(); + stop_unwind(|| main().unwrap()); } -use dioxus_desktop::Config; - #[no_mangle] #[inline(never)] #[cfg(any(target_os = "android", target_os = "ios"))] pub extern "C" fn start_app() { #[cfg(target_os = "android")] - android_binding!(com_example, rustnl_ios, _start_app); + android_binding!(com_example, android_taurio, _start_app); #[cfg(target_os = "ios")] _start_app() } + +pub fn main() -> Result<()> { + init_logging(); + + use dioxus::prelude::*; + fn app(cx: Scope) -> Element { + render!("hello dioxus") + } + + dioxus_desktop::launch(app); + + Ok(()) +} diff --git a/examples/ios_demo/src/lib_old.rs b/examples/ios_demo/src/lib_old.rs new file mode 100644 index 000000000..bf433beb1 --- /dev/null +++ b/examples/ios_demo/src/lib_old.rs @@ -0,0 +1,84 @@ +use anyhow::Result; +use dioxus::prelude::*; +#[cfg(target_os = "android")] +use wry::android_binding; + +pub fn main() -> Result<()> { + init_logging(); + + // Right now we're going through dioxus-desktop but we'd like to go through dioxus-mobile + // That will seed the index.html with some fixes that prevent the page from scrolling/zooming etc + dioxus_desktop::launch_cfg( + app, + // Note that we have to disable the viewport goofiness of the browser. + // Dioxus_mobile should do this for us + Config::default().with_custom_index(include_str!("index.html").to_string()), + ); + + Ok(()) +} + +fn app(cx: Scope) -> Element { + let items = use_state(cx, || vec![1, 2, 3]); + + render! { + div { + h1 { "Hello, Mobile"} + div { margin_left: "auto", margin_right: "auto", width: "200px", padding: "10px", border: "1px solid black", + button { + onclick: move|_| { + let mut _items = items.make_mut(); + let len = _items.len() + 1; + _items.push(len); + }, + "Add item" + } + for item in items.iter() { + div { "- {item}" } + } + } + } + } +} + +#[cfg(target_os = "android")] +fn init_logging() { + android_logger::init_once( + android_logger::Config::default() + .with_min_level(log::Level::Trace) + .with_tag("rustnl-ios"), + ); +} + +#[cfg(not(target_os = "android"))] +fn init_logging() { + env_logger::init(); +} + +#[cfg(any(target_os = "android", target_os = "ios"))] +fn stop_unwind T, T>(f: F) -> T { + match std::panic::catch_unwind(std::panic::AssertUnwindSafe(f)) { + Ok(t) => t, + Err(err) => { + eprintln!("attempt to unwind out of `rust` with err: {:?}", err); + std::process::abort() + } + } +} + +#[cfg(any(target_os = "android", target_os = "ios"))] +fn _start_app() { + main().unwrap(); +} + +use dioxus_desktop::Config; + +#[no_mangle] +#[inline(never)] +#[cfg(any(target_os = "android", target_os = "ios"))] +pub extern "C" fn start_app() { + #[cfg(target_os = "android")] + android_binding!(com_example, rustnl_ios, _start_app); + #[cfg(target_os = "ios")] + _start_app() +} diff --git a/packages/desktop/Cargo.toml b/packages/desktop/Cargo.toml index 59d0df937..f83864afc 100644 --- a/packages/desktop/Cargo.toml +++ b/packages/desktop/Cargo.toml @@ -15,13 +15,13 @@ keywords = ["dom", "ui", "gui", "react"] dioxus-core = { workspace = true, features = ["serialize"] } dioxus-html = { workspace = true, features = ["serialize", "native-bind"] } dioxus-interpreter-js = { workspace = true } -dioxus-hot-reload = { workspace = true, optional = true } +# dioxus-hot-reload = { workspace = true, optional = true } serde = "1.0.136" serde_json = "1.0.79" thiserror = "1.0.30" log = { workspace = true } -wry = { version = "0.27.2" } +wry = { version = "0.28.0" } futures-channel = { workspace = true } tokio = { workspace = true, features = [ "sync", @@ -51,12 +51,12 @@ objc_id = "0.1.1" core-foundation = "0.9.3" [features] -default = ["tokio_runtime", "hot-reload"] +default = ["tokio_runtime"] tokio_runtime = ["tokio"] fullscreen = ["wry/fullscreen"] transparent = ["wry/transparent"] tray = ["wry/tray"] -hot-reload = ["dioxus-hot-reload"] +# hot-reload = ["dioxus-hot-reload"] [dev-dependencies] dioxus-core-macro = { workspace = true } diff --git a/packages/desktop/src/lib.rs b/packages/desktop/src/lib.rs index a8b0fc3ba..8b3bcf181 100644 --- a/packages/desktop/src/lib.rs +++ b/packages/desktop/src/lib.rs @@ -123,16 +123,16 @@ pub fn launch_with_props(root: Component

, props: P, cfg: Config) let proxy = event_loop.create_proxy(); // Intialize hot reloading if it is enabled - #[cfg(all(feature = "hot-reload", debug_assertions))] - dioxus_hot_reload::connect({ - let proxy = proxy.clone(); - move |template| { - let _ = proxy.send_event(UserWindowEvent( - EventData::HotReloadEvent(template), - unsafe { WindowId::dummy() }, - )); - } - }); + // #[cfg(all(feature = "hot-reload", debug_assertions))] + // dioxus_hot_reload::connect({ + // let proxy = proxy.clone(); + // move |template| { + // let _ = proxy.send_event(UserWindowEvent( + // EventData::HotReloadEvent(template), + // unsafe { WindowId::dummy() }, + // )); + // } + // }); // We start the tokio runtime *on this thread* // Any future we poll later will use this runtime to spawn tasks and for IO diff --git a/packages/hot-reload/Cargo.toml b/packages/hot-reload/Cargo.toml index b53a87809..fd388c8ad 100644 --- a/packages/hot-reload/Cargo.toml +++ b/packages/hot-reload/Cargo.toml @@ -16,7 +16,7 @@ dioxus-rsx = { workspace = true } dioxus-core = { workspace = true, features = ["serialize"] } dioxus-html = { workspace = true, features = ["hot-reload-context"] } -interprocess-docfix = { version = "1.2.1" } +interprocess-docfix = { version = "1.2.2" } notify = "5.0.0" chrono = { version = "0.4.24", default-features = false, features = ["clock"] } serde_json = "1.0.91" From ea3b199eb226089d7eb83b4ce593d1b63e6ad108 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 5 Jul 2023 14:35:08 -0700 Subject: [PATCH 420/459] Android build working too --- Cargo.toml | 2 +- examples/ios_demo/ios_demo.png | Bin 1261241 -> 0 bytes examples/ios_demo/src/index.html | 12 --- examples/ios_demo/src/lib_old.rs | 84 ------------------ examples/{ios_demo => mobile_demo}/.gitignore | 0 examples/{ios_demo => mobile_demo}/Cargo.toml | 20 ++--- examples/{ios_demo => mobile_demo}/README.md | 1 + .../{ios_demo => mobile_demo}/mobile.toml | 4 +- examples/{ios_demo => mobile_demo}/src/lib.rs | 22 +++-- packages/desktop/src/lib.rs | 20 ++--- 10 files changed, 40 insertions(+), 125 deletions(-) delete mode 100644 examples/ios_demo/ios_demo.png delete mode 100644 examples/ios_demo/src/index.html delete mode 100644 examples/ios_demo/src/lib_old.rs rename examples/{ios_demo => mobile_demo}/.gitignore (100%) rename examples/{ios_demo => mobile_demo}/Cargo.toml (76%) rename examples/{ios_demo => mobile_demo}/README.md (99%) rename examples/{ios_demo => mobile_demo}/mobile.toml (64%) rename examples/{ios_demo => mobile_demo}/src/lib.rs (70%) diff --git a/Cargo.toml b/Cargo.toml index c2d8c34a0..fcf4b9921 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,7 +40,7 @@ members = [ "playwrite-tests/web", "playwrite-tests/fullstack", ] -exclude = ["examples/ios_demo"] +exclude = ["examples/mobile_demo"] # dependencies that are shared across packages [workspace.dependencies] diff --git a/examples/ios_demo/ios_demo.png b/examples/ios_demo/ios_demo.png deleted file mode 100644 index 2f48c65caf084555c99f7c338cf98e3743700497..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1261241 zcmeFYWpo`ovmm-1+c7gU+i}b>Gc!ZX%#7O*Gc!Aen3g#`cr2$B*aN&o;HDgXdw3H=cSQR8f8 z0svsEEQEy>B!z{E6&&qMEv!ud0Ew`~WGDsYBTV0Sk6AoA5_IYu_9Hsq@5q{m9br-u z9|BR0h>O(~`!Tc?RYa;u%g`a!3WhY16|Ex-`~2yLNOLPAAQctAVPW^4cYeDV=VmsW zaGm6R=RD}Td1pTOAdurQunn&c<}0JvNWQw5fP#lL*^K~3s{o~v4Tr6*o0NiqiwlkX zqsAvW<{pg2;vz+U|LOkz{VV#TKP@3Z;Zv{V3#~3?ZxJ%VRv5)EKz1o|*ZPe06}g^Z z3Z)>fNV99aa^W}Q_=H02sLb#%cr&tcSU~33o|F=R_=L<`43PnHSopWll2kudII>u# zpO)#qAz!bAj(%i+C`#toq|B3a=J&2WnfSe3M`dH4j%4Z{516`soYlSegM){S_#Y%0 zB?h6NIKOUVMXTpC911>d18^eZ{e?}{hqA)6wpB{>=HPE?m#&z{4%{J!7EB?aChTjc zLdZrF#>3JL1e09*;iWM{MlC6%m&$SWrA$wxX7h~SRKUcO_}N*%m4W3@ z!d(K^yNLpcUw`@q`9diPQpWlg=u-@VLuNx;LvjmpE+HZMS=z&=1I9Pun*sCzC!3hf zP=o<|jL^D%D3>Ua!pMOEpO7(>0_sV?hu~}dQeyFT5g>)O6!5=87YL9_z*Yn<2#YGf zs2~yqT4rbE%uYcbex5_%4SdQmI3&1*6zefg`DoP}Tum_+s9_Jlhhgwl-lVXnPe-!z z8{L$8__PY4=UdfxzsdK2!4v-B6KZ($jNp&FluvA*AuwX3#3U8U6oZPDR47Ub=fjUh z)&%czbo2P~YRo^U`mu?(Wxq}-niIOixU;%5x8mzW*$TO4Ut~W|lO0}Q!-|0$1v~t- zXRJv9ZT%8{$>lEZLp{T+l=M zO18%AE1Qw=v67=`y3c+R3}g(h{Y2R2+mdv%X-8OxB8tJ=#ZOZppiBSC^(CmxMDlAOGP zA~7yHp)&SKGHY1MSoup@xx1wKdM2#ySsA%CEo_nnLONG#xw;|j;j7y?#Cej>V z6SpGNC2~O&Pf=B=Q8`*ww@^FBQ?(@~Iu~z-^A_Hn=@sIY?=>R45LQ|=yH>J5cdv0I z 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

+79KnL!tm+)pz&3^*v*($feJDT24 zK>cmwlN-`3R8Kk5kEa**nWI# z{XRmM6bkg*LZ1xWe

%1Mel;ZglTG9jxw8x^Q*##QDxaC;75HIydmJWGmvUIG_m z5@A#O4PJ-qM^ACPlJuT->uC|=j7_?2s}M$Jj+0Ul7nO2`3qd*;UVNJS_ABrisBC6D ze!Mv;Ej-g4NUQ`gKhrnFqrI9Kuau|C-coi}nO35NB|Y@pDS~4z&e~UXd5APFeiXIG zN$AjrR-4}5`yi5`c!qPztDPUCyf-zGxBcg;3;`h)-0d<->CEl&PnyOl)2}w<=W;$ zu6W!X;Dc0o4E*|p`|V1eu;t!Yo4vtxpTgI)#V4!v@`|hRdxi3)PYc6x$AA7fHlV8v zq?f&_2RE=%@?&Ccfsn1Z>6)VPm~q*N*XqwWUlrto{O5CS+fZ*jJS8IED5+_xkK!hj zC^Y9N(uEeiQTvCDzKb}<27`Ff-rt_%Y5`g_g|`54R&u{xv>yGfVSX)?_fm4zcOx&R zQzBxwqb5yEZ`A^t{^bDaR7Hra^{3W4c7J5jpXNSuEqXtP5Kh)Dy|zA-t6c_6D2tob zy4iUg?$}Mt?ndX@{;vKK1x=Z>SE-Apd)#1&1UPIGo^+<#_U3r2Qot}UV>9K}EmOTO z+otqg6$oSKWvk=^*FEJLfUVs@zM_0vyH6#45TJchaK+N)OuOld$)(B+d^%>Y^UPzz z|C*wabfD8zy@FY_$CqvY=Lki={jbZI;N;09wSuOiGiadI{ke9J3y#+{{J2KIkA>+n z{<5Y+oI@GL+;b}VOZA&)(T9{Uu-56}tCxPa3q^n9Ym+c;NS^?lHcCMGae8VU!O!`M zbjdg(7S)%j1Ej@W)VZkB%OC{9)P~BDiBBV^w6~S4^dxY&%cw?4F zwsXH9J{!XW9&lr{VN>d#mHoes`rPrUP`g=uiHM%n%J-KAaI=}xvElnMLM4_~UJ4`W z#A`b2H?)nHq5tBkyIib=93?xk zuQisLNV%)139v!wydgkKiqh>m>==G9Z#qqXO#V%W;C^3pvdR-avt&w~HS?bDvpeej z;f6e)w0qC+R$jxmolfN|KR(Q#_Dr)#1!2E;lj1N?u-ctK+8$3_aZ6sizejmBcx~RT z;gcbeUtek|YW|n0Jk}jIUTPf0<2(&)vM2*IFIE&!U+WjS!lREpd92ZK+v3;b8)GA~ zKYMNnErXZ3Y^HVwn4<#U4-#A-YA>fow4=PROO;%2KNXec^n9D5u(=c8U07tXC@Nq$ zr=2mQmiLZf26n>`e7^x*hkVu3|dtISop;=TxWec)udil}~Scz4hj# zU%4V;=KJw!r;jb!Tp8WPwbX$t^r5BX*-|S^=B54WJ~qP2XL-g715ya}l7=y%aQdm@ zsp%&>$+f_rnuU4b^BG43#LToE9B(d!fPCKbsyg|iwYUZztr)xn`!TS<-pdMm*aD(q zdLHY)6~HD(186|4pqeo?+X3iZ#{d_(p-uHEmavaX)fE6`t`U+3;q}5ylD68b6BQvW zd#_H4q%+U^_Y)ol{IKj;$E3Urg!AVH`~Zxx5$L#UP=e#HH1^SjU=XXo?AL48)fxmp))|@6i>%xX`OT%go2e{|Bb}@79CsyvL^^a&x{LbDixpnfR&Qz;$65Vx6R? zm98M;{oaR5R&!X%X=OemO+n1ZfJ{_%FN^Z8%rqpd{E*$gh7-gV#NAIpn?p+3gqXm0 zQ}NNp?ggy8*tF_$YR3xDw6{kN+5{(S9+2W>Fd8ZJRpdAN6LhLtZ25 zUcL{z=bh)w3|JT=%M!K=0x*ZaPW9iOC%!hO-@hN>zqK+d_yCJwJ-Xm# z52+pU?}L<`$$lz!fA?QTdBq1xf{10>Y*%b$UwT&6wtHU6*qS1@38K(8$QKHkSj<4Y zWhwLL%wCS-mikf4a4nnkg4@p?o@4*)E$y(lsU^U_{ika?na`nEH=RGiQzYPr4f`wR zuW&_5b1e4<FrBlN@;Y7Kg|*w_vcthr+s967h=@?O7AI2bIvl&TTfKAmjNeJ z*y(8AV{w3yqCM)-t;Of34wXO;J3J4R-Ej_Mz5U_RQvN;*BnCxmD1g>Gq6igTs#N(2 zyIm^V6xef9H2U>omzna*vRZnF^Vx;PfQ*~0d*?PN8Qva+j7d8@jMwALw;sA}xpZ$k z%siS&C=eDUpb(3&ldyWD2KHd#I(ye|XXWhl)ugoNLLM>zXW$JCn5P0EUX&iBI3O39 zG@|j&(!Gt%ef0a*w)1j6SxE7|PtuD?u*f+t^dJ2SmX1304tT$G`!*%|T2J zE_EIR$)Ac5H+i7songmm8r5I-k5Ie8yPk(Ud#=vsz3Qzy&rL7Z_CC+z+!7?TnOTl*Q%`uRlgL{=4|@9u+F^m-4z{U`Xj8X z2&at&s3|kw4hD$I6o(E8JJ)P?e{3Pzj3)-WT05%WSkfQgn53BUspw4HK&b+D|G|3E zk<4$4n%BAQPzrgPq61gVOZjg3OG}9OnNWVBlM;K74_f##x!l`hI9ply$Y3c;;K7rG ztERnm$x?CCRaS|sqme%}vcoDeh;1KiN0ybm9m4wQLdQ7Gvm|V~OqJ)dI$}9XN6%_} zvOI_RJ0;|ip?l0JxELTo7i#9UZTO+-aI{2eV7maFZhvDZ$?Evs}M z7Cvo`tOwRc?6|D&eh3O=`8;poTV;S;}FT*~{!@Tn5swR=uns%IfV zD3Ha)pd%mptt@fZ?_W9!JYa#)%Hmjdi0De^2^P;y2D&rq8Le;DA51#f=1EKyCC{+@ zc`C~u;B~LRh`Mzq_oG$sPU$M`47sA}P%(e$d3t++ZybZJZtw5VY!^`ki(8qJEpCEc zVhP^6@%zSf{)Zb_ag^84&0j-)@w<;V;&y`-0N}8uxY{grKUoz`*c=vvVmlmIrTq6j zlnxw=r)B3!$DVPV`|2NHFi@%cSpMwFE&!k5`jbPG-~N$b-dBJfV7KTuLV03;o*QhJ{1D zPq&WyJ`jAFCX{jPE$d`@7H@&TBgo|_+`lZh*n}ak(UmJo|ICT}(U9kdShu4*Uwbp^ znwsIYetmFy)JODr?$#^D_pU1&KV!;p>n z@niPf3~+hftecNi?0Q|2+{(d$8MJCIOLeK0n7HvhvaJDos_}0R{ZBNt`RqW}r3;U) za7sM*#eMcmdKq2t`4`%JiXt&Xd2-$-Cu6mD%XlPf3K3mHs*-o2x`s59;R8aWDhib) z$Kb088=Iw@TD%5zlxEmyoEDom)>@TR(9T3XO-R4<;KQD`PS6ruWL-V@Mc= z%s;Aq7E$>C!)V#bB@K)%92A+9SgW%&!FAJJ=eKVDvuv2X^j+JJU&#${gpUZyRy$_4 zHKbe(fV9?rmFx*V6A&WH|lAXjnxlimWl)ahvot|v$tK)gA- zvPFH(RK+@K6{-0R^v6Dc@#Y6eaem7K7qPT;%c9Z5r9%{X{K*mIwqikT@C}{$X_O{^ z{ko)>+DqNS6$Z`z@HEbFa|FgJwY~R*j79w|Gndi}ik|B|#*ZFcb$!T2seEXXhueIa z4lF}tWOA5N>JJQYxt?6~i;XTQ+0|Ybzikm0z@3KIz5juAse(bkW%?j~%&fAqQ!Y2K zt57bROWVwS(okkFjY%ym&s`o{RZ@QH%cX^ZffW|BgNv zKD-GuGrhYL{Nq{XLvNYu2JdEUGh=+F&~}-z@>`P8A0gP7fEQzdd0nwF{$1=gJ1=vb z;tk1N+Moh_HVc`7V7zOv#159fwIJoaU=3SDN0fbybL!L*R~nKqvom#%HQ`%4MXm&U zh~69Pj1w#v781!6q^ev-nI71KI|L7VV`$%7@5=w5jZP3H!~ z<6BWKpgf#a#a`HL-YL`Pg%=?54|&@gpO8kDyt4BWq)dD)H;pGE{&0e(7f#=Q2{w^( zRc8f+4ZHAA{I)*U9y_ackI8lDdI^ayJY;48*y`KxwsiO&XF$&54GW*3a)4Ma6#SBz zm2&LaS~|6onT*`UCg3|V=@%Co?#UJYGfF4P(<$++&ICx(g`&^cUH;Fw@pnw&xyEqv z&1kXex4t`BfltlsngbaSZzzoOPe{mOLUeSnVe{Le)Q2-=xGA9j2M=KU zeaN{Vr}mTq-H!60+oG1155&*i(DZoVB*gt+&p30kVm&`@?pqsIrZH;ejw?BVjCpc| zJ8_$3VvAT;4AvjxWbpfys7LL|l^f>VyEmtf>3-IyC@oCEUfcfRyWXfM9Gzqym<+O~ zL8iN+aT>Ge2Bpue(518r#ioRs!&6#~_S*(@u`xmM=+8>E9l+o%#JR&$=3dLjCCXNy z+>5~a8=4Jr<+tZ!$^={t zc)1_d|ECJV$LT@0Eay*(c|4l$A7CH2bTq)JYy2=N>9}^Ble*5oZX&C&?<1Z%zBx%& z*K1UJ30CV4u2k)iwp#}&hx`XMfp7X#9wV2us_n@!p4U*~zvOlvXtG~bWG*qUllScj zeBXJ^)5iJB!43OynQ^gf8@_GzK>yjNk*kEZeKt?}-k4ccvC)EhH$mS~H|5eb zOklrTc59?ZSqfjF%*#_@PXJg!myh{I!Dnl&t@^-@WuTf1QU23Y^Y0_P;>WOa4h|*& z15^7vA#MNt`~QybMJt@2DXEAk_Z!t2!Lc*{}Uh1vN1D21f#(to-ZzXSDHUlQB|?b3%DOB z|85R>`436w!EmB3Z<(ZADG>L3FB$x;5`|fcf8Cz426v5S)=LR^1M{w+U2iQA@@alv zYje>l%EzSm$*ODDACPTt($~cUxN#3Z>2F&uee4lWPL$Jo$h*5BwDlp%2bGv|`g&AZ zXPMbm$avbg_XmZmujB1hxoxInzD0YAa%nx8Vos=eo*dcy<0n;OIwt83aYobFNXu2K z&1lo~^==B|IS}N5ZWhZ&jlWG40DUCslo(cLgn*b4!t8SSUkUABZ{&ZSJP!xMP9$K@ ztX<6SjI>N%7;Z}K##i1BJ?*Wbv|yz7Mw$i1UN)i{tG7ES#;^4g49)FmRjs46bM1~a zt6R8_zXfIKsI)8yxkWEOKpLsnQB+X)PAGxhrcYlk>WGV06r;qYJM2BO3em$$(Bg^m<(Q}sP z7h~tO_9WH8MDlK$ll+NZRsm;u55$>BOI8NX8(j;pA~RK#w3cOM;ElhR3&OZ$y5uL_ zO{xF})iHBXIeP5JxOvh+c7L`^!{E{|Gs8WpUEnP!O6oP>2C|iEoh$g5{8kn+WMriD zmG%*&%|Li@dtIw4w(jvZxvq! z;@>~a-I`(N&E2k6BY&Q1573jdkAogWDIcUR4T{4TzY|AHU?GswHVCULchms#R^L3W?c@=$+1 zQo0m=O@n@aig)b!{NTdOQviRd8}--BzP=RV7=10Ue*CA$!XYto)+8?Biw$4`|uU zkr!oSyK72oO{^+9LzaNOCWa^xH}B*C_p2nKTYQ&SVc!r@Kndj#F9Vt~#)CfSr7I%Ti{k}kijx8`@V9i8W!75&EUP~pstVfM7VVV!d*G3H@TmviS32Se|*8_(+Q zFq&P7Vh+I6u@i(Tki7LY7kT-!N`Cxozgf*Upy?CAbK7YCsAMSxqP#kv_%o(wbdGvy zkhCvfDdtrySKH;f%gwI1!j=kiF7|MrIvn+jm0ubf;S2Iar1z>zTtnxiaT;`8n~LG|9=9~AMg0iBlNxQstmO3n}#V%)I#Nq zM&d|bhDqltKOaj}MT~(sROW3K{iHny%*N|Q>j@Efy(O|xenggcVE}FUv}-)X8t#!3 z=HoR2?&^rU6B`1z!DNJgauW^#cXWv3qKz7)N?{|pl$C&mC~mx-JxG9+F67i@+Ddkm zU*a>acc$^_FqGPo6aYVe>Xx;rzkL3Tt^-#jAD*!Jq)4{RbMQBl1GkKmj_?Ca9#V-J zku@MrzH&85ZMYSGPuOj-dTVXB@miYUmAdS&`?u0{neKRqoV>3ro8rH|^ZDjEue^ea z&PJVbhhcVyJ4-JU z9V4p-Jp>x5q=|C(wO=+4#wD@4*%p+Px=YKzjvO7!WKIqIBMhUVZ*PSpp!TFAcW9^a;j-q3 zFP|6jFpl5C98AA8tGSW?h;HmW$NzP&%wDDoRX_GR|MWjY-#@(VPdwz2V&G&bV!S(* zsv<37fL5}>atdl|Dee}qZfQsD=Sn4Hvzl^U)ihlY8Luj&=X+qUM~jiXZ6ZG_3RZCI zZrq8!)6v2N^Zy$3bs<0QqWg+aLO6Eenhhr5^S&JiGDR!#<@ZJn$iv2$vw>iZazkKp z+;5JFWu!d{VE@>POw!BE+L*!z1US6nbm=|Q3D>yd0d;>dhmSI1>GFu{miD6V63 zgEgO96Sb3}n2>oNq@hMM0)p=XAMk0Z$`X&&mFKY009}lUKZKN<-Pee%#c*3}-l38} zypDSgC|B8Mk_R)Kxmyr+muiaB~TAs$k7qNVUyY1ef z1=eAE_f)b~!#>ZDAm&IB=;R~J7?{_?m|(yY$Isj4|J#KfR+_m^XHOR#swSKjYT zOXle*Jw}JmA?7fTh>(7p2)@lWlhGPP*K-bwL$t$LUaUJf-eo83utINSHUz~MC*0)J zUi^b?J=Mdd_j`X^+}8e?_NPR}3zFgWm-@Mow+Y^RdyMV= zf6=&SkMrCApYfh9z%4+3qxaF11$Mib_&vMF@o%{W3}imXqRsts=CTFuB)ScMJhxb( z>&NVtAnl{J*)6u)(E+6liJJp3z`=Vc&S0`k#S$zZ{e{@cCBfwJ0}ZjxS8u`(i}@1O zY_JAe1Z||f_CDHuQ~zTzggl7f{ zb6GmO`x*6)nL!ZjbukfDUOME#+Jlwg|OL~gCvO!iKn_3dz;*brpF8abAh1uWcjIo~ zV#_I)-&I!$NyD=+VxkcS9vnu<%T|0%3GGmn{(2n7laE+1BeiuC%BT=jj+cyzl&3_5 z2zIqn~3!{-Hjv(YuQaFCY;V*tB6c%2*>N*=FAKgMs9|z&EeN725 z!_=D%OFZ=BXx+NeODsqT%_d~)m>tFU_=H%tQu>Sf3^SUyrNhzMe2{tGn;)pO)D9UH`QbPDnhx$PTn5gcw632?03C`g&b0^K7 zXQPzqrNrVh(e`jZpn=;OXuxTK+u*)NL5b{61+bwsESg^d6U5}bnxSLk$Xs2BSSTdL zv~txN;-13*RVUYGDD|BCT9cO>)IjO*Cvsprip?^TFw)p|&S`YJ#8qdyL$zT%1f@!K zZ@%L(P8wv&-A9w`IHD+-_XV`bdIDJywAbIY5nw9JmlVD&V_qx0fqd0;L-Y;&gk_fD zVfVI+hw@iuDBg@$fbC5Sl*Z*>*Z;eTxglrsEPhF@1%~Il{tgikM`sxl01Nmww6@Q; zR2%hi9{jV3$0Xc1u=PQ9p%6}_TQ%o00qjDkSm6A%fVt#zx*wUH^`4`hmj!fSqDigOGGcry4rO5PIq=RP->oR=4W2<`m zQCQP%H$Ai$>UXi0#={+l=a!!xY!Lnl>e((wp^ywKgyAsDu4NHgRpnLFZF*Th36oF*4u2>IoQF-tzWpp0?>dQGkkSf%*(e zfMS~Ed3egZeNlE-Vqq&PA8BZBughcwsr^Z)_q-k<+l1%-C=#}u$K6O!M7@T61xpUd zeyDL-3QaImnlmzAzWwZ$s5VZ`+5gvZ@XNS{bHF6meaatfvO(nU-@hJyz zA8qAPRuVo@-bT@rM+SAHixx)So#`y%r;Rv2zQ=lpjZ$E-{{qdL7C)P5KKJ3 z!LEwG1{^{Y31QurhzrRD(Hi3;2s9k`Edf3tx*w@oyFK3CIv_RcP~u%ZHQW{p!h>EWny+JVm0{Y zqB__{gQTgD!)Cg5rW@)r0B)GK2En)Zf4k9ELN>FMMQ0@~I^A(FzX!V%ZQbR2Hbc&& zK}NRMIkDR93`zy4c;C_}^N1*CD(EA^FCJA^Q~@HlXfNkrk&YR9x4wga=arT4hbBs! z&JhLJZN}JNKe1yF$kc02jsG%e<-5WHt;B%)TA+u~+Mm!o%T5aq!x2O5!dIoY zI@M0@vbL0!+bH-lk>k^6RtvfmO}jms)%3z<=y$8#AWjNDcpeR2eQM+!$9V_jwc$0l zS})*FZcod0UkX2tviuPmd%3~{7_EG{a-HjU!ZZD~(CNI-*>3oVG2{{~BCbju7^nH$ zQJ-G=PXDXY;Xs=;9cEnoC^=2pSKh4BXZK3)+v5MrYj0aRvTrhWJbQYzm;6kWCHT}} zaj*{DvdW{2oh2?-h^>SxMnZK&CEirJ!EM!`CPTAfe=rVbkj%+1?e>fD+mP%fHbCKs zizb+QD8V1AZ%Qikp9eXuyfyL5iSAk`6-BIM_6TLI&;1OO^htT9Wg*fqBt))2y91gl zH;F^y%93H~hzxVNoQmu)B@uFAdn3g#b>T@yv`W)v;%B$mtRNqvWGkByp(w3t1Zv~< zK%Kc++k$Gu2T9O#|IXH#x1gzzA2QI{ydURWsp%pq>?`YtG@x#x=jjz@Ma_nSdq<)k z8rP46&KMmPm?-Ruj|wU7X!=Blyx`Dp&!nMuW3yR#9SfQ&G>s4QThsSNvpx1Z(PcyW zm0Hmz>_+m%i6S;&KVZ{NNkDjz9G0_W#)fjrB65c>t1p5qX!bZ3aFrOoj{0Z=HFQ)*0xrTPA?Ia0CeKo4oNL0fNV!@GbZxx40Nv5UkC54S(!gL3 z3Y+L}u=*g4q88#8``Hgja}t8|s4=Xo=pG@m9WPuE*SMY9L}>1a?-dTClcy-z^Z0%6 zbqP4HM2NT2m>dD9$5b750d&-%Y_vOm}Z9o<2z834f^?|N|dAHMUy z{o_gqyQNA@uUQsy9O3++wvc{6v-dc)K{*TpWn`g?@uUXD%tf=;O~QSXbP$C`-H5g2QYdd{`kQKT+8rVKA4b z{f^T>(s!Ru|Dz1wxie3yXSP=r8dp}G5xcB2LpV&`b;FD(G4 zAwA#PO<5p6Eu>do$Q-flD$^4<2R`g5x}S=RZ*SbmBb5U6=bO`a`Rb#0iatXO(%{6Q zT&33)=w=q6$uPOgn4r%ku<|ZHDB47Te<7jJ9HF0jnAW9vPeN(+Ad&T^JyIkUYm(~L z;qODUi<4c=(3R7g)olN0ZB1{=x)rU?70XK8M{l#S*|_BbWPmY5n!Hl9)`ahXCnS)b z!KvAB3C$3!Zz)^J6_GFH;Lks$sI6bYs07_HD3Mr_Nb4>hQo(B*uU^K(>%E%EHnv50 z(Ei$QeN$T$q;jx2KBT@&YwfVVQg}#VY!^gAHy(x4A&WI5-22iTbC%I#WK^Gw1jM~@ z@Mos$m#cIrTt|_Ge}2R8uDT)vQc}uyl`6KYUcVU{QjeEZyGi?#BPU#mB}bg^WxS0;XG(G=m)gw1OaIe zht%%E8)Nh0N!-ekafzqB&5?zA1gVlOv|R0gN+D$Rp`>p`b}GHJs4B14TJ-r`!Z>%X z$4}K%ykr8x%Pr?{QQaN{j1sRtI9luK$PqD{6E!l&)!~5bA^~Vf11fWSg-RX8w~@f> zj1?{MFu=EJ3uw9LM=m1|(y@tf*+(%62)CCHjNvvRKC1~b26!rX`oMWTEJ0{^&W?ue zKpWXeC0tM!t91K$K`J*v%{R9&esAf?aWe@}@~xRjG~s{rR#_&U+`J7Cn|Wc}vip%g zqMRoo_pfD2vA^D+aSRls*(@|@7tGWJsLpZCmPzG8WJaoF+0vtdw0=A{a?USD!4vH7T z-HI0vR%bvRg44!L5I4zX>dZ(iP>_$u-?s<(jk39o?7|5vY9Xw^QfOULDGOMnX$@dZ zWN}S9-BABR@Q|TQ_laGJPN@4zQ8}C5P4dcTY|+O-FqD{Of!7;Fu6~)jx4^$kwv{8>(>IZYVX$jtuwPs@e10nlmG!Y^rH%%d-c(Zmt~& zI@_}*S#YYyx@L2j14gb-PXMz+;h@j)XdhcxkvcS=GB`5z(r)$NIv5tDP@kNq&p>VW zZ!_&30qTg5_2I2IG7%hlVOQH8b-@B0A7R{usbh}#)$OP)&w_nQrujUle;fZ{Jvfg= z0hdtA+Es?i>G(+6YGnl-1w%XY=8u>U2cI%g#_h^o%ACfUD$!%0*OwORH}aU~d^C3x zNlug}vYUGz_-AO1(VKf{b+QfU%I_emHc6Y0cA$5}L4H4mY4@DXriCR|z{yn7w9||& zH)T;BgX9xmuf8#WK8GvlsJpQi|B@O`E8G!quZ@gF5aP?}ZL zVb;;io5+LsNw=$0EUD|-&-h?A(~q8TLk2v579RooQulX{(`J^Fnjb~4Gi|E29OvI* zdmVoNm-{1LfiYF{LC~xUoM(GGX^)Gvij;8hNl?E@jNWU~SQWOZUi(6jpRDT4WNLhf zw426x%jO+H#Peg7P0V&Q_t69ife8=1oI)$pNtTB^yxxtsH7#qNQT1)0_O%-t;o(v8 zv3I@~NxQrm2(?m&ZiZ>$fVStq?<33clbe<~LCaAa6H!*)8+5H5F7^<-hEI9ZwaA=X?a z=@u)v1Ys^tr;DgcDwR4a$d)GC$DM`<;W8iUs(c$)XJdd%hFKiEk@nkEja7Z8+BonL zCkSpR)5G>QI(n2v`GHBZaR^E*!tV>#gpa~rKoQid>q~qo7#u>glkOCQ#D_4QgY6a^ zb=;XNI=szSRzMvQdtDLJB__8Zw3>i0z-xmf>gQBXfZQH@MBrPb$Q>{5+klcsp!>qY zz?Ay<-IA{wgt)|uN_GOumlkI=32`PzqT2j^61h~gIn9_LoJfL0q65CFKnchuQr&J- zAGERCzw&71LKT87U+QHs2`Ps6Y;8(KJY_OoFx2WtHtlDNZ@Nq(pZidPj<)98HOtJn zz@+O9v~Oa{`9ZZx$nSyh?c|(JF1un zXwxL=oG@j>;Vj`0Lo&mo-W%laOJk^~H_p=#yVE=8zMs@-LG|Bn3rJ&flss0&P2R`t zh2suxD$BFie;Elv6eUil+fz*WmVddMPNAURzvufLJ^jR9kDk%$+W&lYVZSCPxtufY z1raC)@cZAuL$5EU3hc*>JyMI9=)VTN#}C_1ZTzM)9ES}7Dc9`PAihTHQr@9PV4j*^ zdK%2AAs}iEhQj++sY?4dvjXmGD0oNB z5#157_J)5oJUm!_LK8NyLE4%i5_y$Z?y(*XZ-w+**h(N=w)vEUbvA-l^VeV=h$mf* zvx`1nv?cA6#$x%m2rycW(~%X_lviLD?VrJv`owVM(ni^M8GTyE3corC9u=1T=O_;GQM9@oNAOtle%)c(|)3eODGrd#bQlT<_Ri%GBt~q_gf4;G8{-LLCOZ!k_va7qdluRPH1Lv>vmB_dZ=8hQL@yc-VhfWX(T|vUZ5MNG z5{w&tcC|eA2mE2Do`qfi=cV>k_RQ)cUI%~&NWUN zj2^`lqlrMpOr=2tWg>Z!X)ciU6*&YTTgcfV8&a zAq~c0)o)Tuu!-Q!)}Yfl{%DC^qCVBI$w-$hQeRZy)>7nWf9*@6#a1Vvc-`3uB!V9% zAL=&K$7)X482VTzKBS?Q=7fWPuz`8dB%?$u(2uA}OeovwggVV_g;QgmJO*;l4q zXLpi&-{6e|#MTVQNH5fB5-(ih;gxH4P)iGAGJXGAD}K;41c|1h5xU#1gN+*(O@BAN zHNq}mpWdO(BR?JaQCOJLhTSMg62{g;=Xdm^-}ao+e&;$9qaIwgSjW$mWqR|(gNrdwGMi2xo+0yZaaYX{mRr7x@SjA+Ek0SHNIpu)XvS_w z$@HCB{_?e3;l`5Ei!p4zdemj*qx5QzzB=SRGYfz1$bJw;ok@hUdE5jqDW02V6?U0?s(WYGf?-d)wI6Fj>CP!Bd2ih3`LvPz^h-j z&>5JjZTL*KYXB6#&y%1#9G8v+-E2z)z8HSni%Z9+Q1)J$trS~Fk z?AL?GTbZ;=)jpi*oUcX>vN(n>pbnRl3|$~k`iLvvS-*AKf`oBWgoQAA1z3A9;xK?_ zKTvA4NUiqRV^h9p93_iaSs>_zG93ofJH@B9dnvovq&XZ4HBsw}jx0aTMDcrEpQ@#5 z4#!M%msnd}i`wig=*hoRaABoj3v6D>#bVJh92ir0K{6<`S3-9vCX_z?*VlVSe>u?~ zCsb8=!z9VCgaiZ$9$20cH56nA_IMxT?2Wh!PzQY8k6Q}u1AOt!QqRF?cpBL!RR=| z0)SG1HVv!d6D_<(Y;hghx)QrBC`i{z41&mBu$d?T$Om<(Y(|@a3gQsBqSxbDQ}lEn z>M8dL+12)-$xE0-8UW5eNkiZOi2HJ-9S)>+Cb5z8$bw+yTT5CT{x-oBqOytVrCIsP6CCPY zBYKt&mg~<<(754#vtwI3UuSW)toRu84t&6wY-3XMzbYaM?p zz-d#f{Gwvu6qu8w{vNqiKY9vz#5wcHRUmE~Wr2ho$zM@=)4#FdF}44L^vY_Nb^s4& zWQ)Jc-G5hU<7FhvB(28YhH)f;qyvaw&+NT=<{r&-CdJut_3`Ej@-__PJN&4wSgL;` z`kbx7wo-Sjw07CjV41b|2NiIfH5TiRJ7X+t051)&Z0c%n( z?^VAfYuEqbG7UvUv3g6#`xMCJLwfZ-9yiH*2ot!waIFysXI?i`$stRUs^H|(vykw- z!w|?MAh#kN!bVX)yO5z_8(7F?S?Pf_Y=7YdHRvPWyL5SKlg6ANY!-9Kf*_wd+v&;M z30cESCk!`=32)Ngh48cTDQY(o0+=E9%Rw(z!G@hCocHVs5XdhvX!Q)dD~M%)+U??+ zy;GLSeA_aoq+7NaAc$QM85(!`0$GT?^7)#=_M_Z5SDUi>fLB_t=X4-#WVbq8-wRws zdjiU;>r_d%!z0vq%nV9Qki2mFsRh%WRFEB66uy(l1EJjuWC$}Ch)8!{>3VDLQjySw z^ux*ZU&9RoojxTgqTL@lz0qRFXA{=T6L%IGi-KZbs=V-LMEs;*Uhn!T`CDapms$lD zZwbl#9RFu_WI&|LfDdndpzzhdjIx1B=Mla@$(8=bTj`ho?Q~|ybRPSf$Y*m?uGHGK zsPL%ls6d*?X_$mlA)>BV%o!uNQR>S^G%-Y#2O} zCc`V`f`8NQ<||>S{Xl@P{lu@x1R-blt|C1z6Miw;^J>}{-<%12@@R<+MDKy03t6~c z6hrHSba}g-cJX?pqz2Im=KgRCem$b-AfNPJky8e=DPw$I0N=GtjH+)&j}llX>GPp< z4bNBK??H81gbR`QG*H_tj4v5zSgaVaCdn!|8~D!fSRu$SEHq~^(veTkz{CzR(t1U= zGOAPRH98EZdYjowyqQ6vC8s-d(=c&sI9G9q2Lt;Dq^TU0m;hmkq(tX%wq&*Xk%W17 z+K$&fKw+Iz-5KHkXjxo~U3D0ppBhpQ7_sV_b|UFmaT3;!V@yb$>aXKeGB_(mfq17d z?wZectu;-58FF!r##7s%b^YsKw~b^^Sc-?qM;=oVoNOLWdGadHPm=AWXqcTM@@Ly5 zIS`;RuDwjPO}jfi=JJ3U!oLpW5i)#f-s}(Ow7P9Yblt!w!iN?6E2yhXS=%~JVx3QO z+$aw?Y#7_0mXvjx_9d*Bp@iYc@yRIMBbxMNxlcSoZHj)Bb6M0GCYy**K;rqm2iqWo zz!_(bZv=HR?L*X@3gG%Uo?eGts2YCRQ$)c6X&oNaF>6n1dWbVL6JE+$c-H)=DEyqr zMuxd-8Qgis3@OmjU%!T=D%y}_TVK#I``QE# zUQqCm-NyA{^+$6l6;uHc(sARcE~R>}A7Sxd7Dld%v?$^-<;W26_IBcY9D(I#lI9$| zM|qex6QariIi{vU@RTBMcp=z_7=ky_c1&;X;WHGwlZqvng( zltcTf4W8c3QXowui05FA-wHP~|I%11GEJ5A2P{lYu%wJKP;2{%80tdTA#@O4xvAQq z;ffS-f;YGDuzVX}_MPUSrfc2VCmd>x`(QORqm2lyLEZyg?{vO;gn~A58p;xV5shXX z5kX`m4XnJ>d&Jf#wn|M}oBw^8Te`+O0-BN#bh3>c#P0Gg#htZ*c;ak-YS4Dzj<`M~ zA*udOxIl*o@g;ax6fEhZ)4}cm$;YLFIQ@yPMrmn}=G2D1(Nw!#zuR1`~*KGJx&!;Q`3 z=TgAEzDabn>1Xx7BWE=zCh%3trwqhpq2mk!Q&&Ztre_1;k9u zi7A7xc0l)tysAMG2e3Qm>nD-w!7N^k-Ah?NW+V7gh}GlMGdvK(#QCbZU>C3M5bElF zN{0_gLUV%Z5qU9fq%buxVbGnXM`bvoIc9MesA=b$&>0+{lr0j)GFR{$1`Y~yFvzY; zgUANTV~0>aI(!;Fo}d=QxJ>_~Ml?t5q=23|A$8&!Jk;w&70x`{0Zm7;>UBp+3_8;! zYg~4l?hHp#^*ls%D>-H6oUZe_b=b^b$N?sSW{zchz#&%6wO%ZOIdh1PnK>f$?f73P zu%9w5U7A*{#rDdgf+76sot8hJCXVQ&xwwB3wPSpZbWcIZFI@v0<1{cK@wpnAG~7x1 zUARei6b*!U0#Lj2fTJ*G*{!sbQ1z}`(DFGQb&9MnG^%GDV^8@eJ~q!kd4W~V^> zCjwb!dP$Hrk|{CuUdH{$IT%OV#@xe1g!r?Z>pupzPgkm_?OY}vO-;A`g9J^(wZ`pR z9=lR{@6+*ye>;PQhXY#Pd=qLkCEA-euN4W!zqoFs_-AI*>_55A_TaS6!GDWCha>kT z4nfpND`mYSW8|0#Yw_4wq2=bZYJ@RYP76()c)fD0D%R6@G+oj|a=mCe5A7iJ^N-~f zgRQ9C#+jk~-I;qY3KNPAN2^OlN6l5N*g_dl>ZL4c2GL~iHi#8;27G!ab6GeskXf}z zFnl1fz>5kZsX^!~q9h?eg<*!xLaL-NBiW06wkH{*DiCdrDW1$A&kQa9tXWlthY`LH z_&9sNuC(_0oj12J1F|J`#{(=Ie|b40aP%%8~z}tJUHMc zG*x->vx375KOXOkwzcP@^k?ZSP~Zd1Ij1<`LYOz&?@C62c1m3`a-B57EFENO10E;;3|}9>B8h|7t6CVuM?r(QN@c6?W4qh z7LyWsA0`F{v3NbyY<~^YUdCG#S7-0E-H7fQp`+wx%k?x&VC$wSO(|KowRPB30xcyk zp`Gy(p7B0QbMwm?k^G8G$smnec$E#1A!9wt&B%;|q6mvK-t<|R0fw6Jh}gz|L# zN|i42?;%g^L=|Rd)(k{z3q&&{qm3HQx==4>@Bv+c0vKRhCGE_IG?Cyir%?rd_J^#C z>tilqlfaHq?r1UFJ>pAGpmlhsB6}`K4<^Uob{eT>YxqQZVuP2lf3ow}H5pn`tlzDN zbvoi@>5-~?*vc%iL6PTA&HV7kN!F)wQaS&eeJ@Bt&m(B2w4a~e5e*( z*FJOC1(-^?rLmAA!Xn>siCb=jT^cQ`)s->HzU7ZtSR6fuSDxiMfn%6Nn+icg!>3}T z3WD7<@a4^KQ|g!=o>x$6A%j+FlL+Gjr2yoQofUEQ58`~crVMesiS8;GAVX0B+$Omt zt`+9P!^D^D+rs?mawX*WPt)e`*ii#KfX7F6{caHii+`AT=omXbriCXc;Foy8?Wgvk zcyrhWwxxC_Ohb(i#?d0_Fz!4SMJhm z-yqUSDZA{wu$_$yGJAN(dIfBFRD2a)2R&YUWf~?~jMV99v9s+L|4>>}pp7tMYL@oD zaN{*&PNtwFN4vbO%r_VqR zj(*>sr@zIUul}J$qgi|(jUO8P7DPRGQ)`SMKC7SRvAcun% zE1lt-g(U|^jEGO&CBN;o-$n`VHk~2{@7hDDq?>^j`C=Z5wq){9h;HahTQ>XQTJGQV z^At7Gj6Igk=lADQ$h$kX`Rh0A)t|J_=+tt`Z8?iN@?uq;p6%R-ZV>yP&PwDQ1;a}Q zp79|(UsCcg-_{dAVxb8az~nR==16{p8jxC}Q9hh6BDo^tA&tPryw_2`zO`d?Bz?y2 z0n^eQb!fYDH7aXp4Fwd}kh_r7gwhMMijFi7k^b&sd*Uhnd(``yG1P*|!S}#=3d}LE zomASXo!x9J{3SLK3z(l%x}&47J;1FRPk`TO%Rh|{7E66%O0;!}b_1TemLe$sp1c~4 z4_-X{5HOl~++<1=JK9ujuYOo1JF<(~&~;aw8(eKS6kZoh$&CJ&^M3FQ^`n*>Ifg#o zWb`BQl~sLm-pJh6{h$WL21?QM@dvSF;%(id>9xSR5Lo*AG_f-s@+A02ZRHmwP;As< zP;tvjHq5X^^b;)e9eLq$mB(niy_(hBG}+`<$<|c#`tBX7-yE@`6>p2p|1#;{M{(dx zt%=eTIE_X|)S5gEA4wsy;I<3t0pO)M+!&D7n!!Q&vy=#%Do z6^AJHg~|~=nYAac%A04l3F*PAyH~HEg0}zO4SA8X{g^+?K{fY7LUQS|6F-Y9$}x+5 zJ5cuzvqW@S!*XMNDMmdkK(%Inglm$8SuVFqD59hE8BQnzPQ9?@)o|lw#;I=^R@BwP zKR>J|=!Kc7#K|ATgEb5EzqEwHgb@~?OI?*EgvL$<_O>9DA^&#*T9le6!^isKilP`1 zkc&gj&*@j8x2+FQa9l#9w<4pH(9~5`D(g}Hdp3;&7!-dx+SmMQ$PBX4-A7hC3MEx? zlpdp1&u|2B3M-OyW}nE(dJVR5C0wnkLO!`)N+((X>Y2}3EEM(_4PlR_83hOB%dJbc zvOB}ysjswsW=}j`xB`2d4yDS)jRvzcTp}9=AYsOw3|W+AjH#QLILWlP?Z);y*6r7VZ>>SA#F6LXr>WVpfz866}2o3qE2^rbd zyhpJtGRaC%nU+7^Q`A%rogJUp>_%A*`%kVxf!gny!!sKZTzm61|I>1Wo7Ei%kK ze3er`su4&#FJpc7>|aa44i}WtaF^hK*@e-<|I9ZZQU8*-2+}p<#?Y=tfH*4i@=ZC2 zu6*VP#{U$997&y1|3B@R*dd5g#os1lBO`5V`Fcs8&)c6QWn|}HUrespl2ug|$v42K>zp>sN46jRaV1!X=U$Q7KiMlssU!7qjDw zr9C!xp4LHTR=Los6~}wcK_0o(DPBmh2V&{P6AWsCTJKiKIkhNj9&Zj_L$RRJkgXai zu!IWZ(&oTNah5lqRS~E052S}xdk&2^CIibAV78;1w`^RU@Av()f`!E<{cDX|o66 z(PHZH{>|(Zmz8V?{WPadfOV8+qMAWj)q60VO}M%JQo^y`TO6`|2plW?P>GT1Fq=_# z(Pg5mqPcE;2jy}gmNKdUU%#rlT`*`Kj6slJxk5viG@~>hFo*1p>XK%T-J5-bJ#OAl zKiNKZ|HtR+h+k*0KsCfuae_L*IRPwqw%J5OAR+1_97VvaVXtZ?X=I-P*6H=M-Z+}) z-ge-E0^QHDtsg^f-)DL+L3f*V$4f_xSU;Q7XbSN{G4k(_B$Pheo7sI|(r8@*6jk1@r1egJ5^9EU6k`b9@AsHif8%UQtSLLJ* z3R=$oS1)8IgVm?@u)G-51-7UB{+{ww|4jI|_D?|E(!(&H#ISaf8iv z*^NFx+JH$5wjK-KX&R9Y60u~xIRAv9?ap6?xB>5+1Wc4@j_oI_o)=PjgcF8l^@or=8O7GZ#u!!vvTU zl+gRK*+6$^uH)-F9u{}WyTxNqIC28mX8Jd`Lw9T6efy78r2g^vd;2ZdiYb9KZ{gY3 zKJov+A4d}=lJEH+agd?CEh)Tj_it#)|3Q2(TbzKA*m>7PsMRxlhsiXJnk~cW9D$C zt~O)6GWk}fawWbB6%dK%#`PrrI^w}HE}|B1>vD-K%d3_W``}mk5gze6pOSdQDnc682cx+1nQ9j0%G1$yLyuC7b`X^u;7VWvL$oN)GVh;bEK*eS?5E2 zs%*9;;-$|?0N;@JdrrB(n>ezhwIm+b##XUml1!zDzqt)(F#kt9WO3(H_lQn^G2SR! zoxDR>GMK*nHTm?>QYYjfG{kYGq>#w00DV3L#dlgU-}k)g;y$(Mo>S=9qFVF2`88~` zvPV;lYYl=vqNLm;;vRvHQPc?<(e6$qqloc0e!`a9=S{`}m`Bnh<=Q6`=QVDPv2Tx~ zk-v0kP=FRsi&}+e#ODED`rCv)r4b$1GlQN`6j@ho>n{=DYu*_NrA#lD3~wwIx*Z>n z0diLVnhg6vXHIY?byH9eFAjthGy&wUPqkcRUx<`67kL;2$LR~Lf=_(L9g$}37JDk6 ziuQ|jy$4Vw96fOQp(k5D!byF0jO$k;GvV$x9`Yidy;S4B!8i>GcC7%#K)!XE`n7g#+VIV#;m;SNjbHwmEcWO&-_Fq0 zBKmK|Jnj;QfgL)^Xn4S&@zjFz)vUIjEjUl9#gId4%F;5g?JvR|4mz`6IUlB{zhsns^Jh zeF66`e%KXrZ-0+W5c z`^gix7NSd=e_Gyna!3{86qyTM&7%CZ?X$WMCa4R{TDsrBFNkQdh)&9OT+n<`&5`Ns zm;MAwzrFFv=@S=6SQ-C3^iTc_T~gjk#SA++nwi%@r?1tD06+Y{rmJqNZx&XJ6h2Pb z$+JNIsz1pmwmk`a;oARJ%Q6%l-*L`)X(+1i9Pui3J_;_{+Q~D;b&9~04?bf~NijUj z&tF~$`S~(EB-L=ORAj6l2P5}Fx5ZBho)@gx0!yWhun&JPM;bAUt2E-a$8y8po$EO9 zjPVGGT_M+ zsho2!NxJ=q zZl^h)ibbr{kjG6FUu>|9hHSf4!-vt0ofq+MB4ud9B5~IG4*%JSy*E1Jnz+>Uy6%F2 z8mzczdjFrGqm#y>{bc`X;`|3~K7KHJ`CpFfy)z5fUg-(ZuZ4d;)bH*4^Ks+G(4F^{ z)-faj=bwKk4f9#}dA;ghwNPf%JK{W50V^ox6)$2)M zdyxl@ZbWOG49-B&6!wuuhz)Pm`ig0_j;1Boq~C>Ccy-g^2MUn3hAEJ6EG-jC%4K^0 zNGPUPwACl21no@dvK#tHUkSiE0l93`Ocnu)+x5}m&Q!wg6hIFBkx$rNb##6VfX__(cKkY%auU;4AfM zLx1#_{ZmqM#LBv0mHr+0^lATXt|1M;VtZa7jZjd4oc(lC)KJaFvwgj9e?)zKweLM_ z@l>`fE9k~b`q9jg=Ulw2N3F#!#H8D6(Q4nv#ts@a^qOBR@-xI$i_v9yAiq%2>Vn+a zQ4o3+7x{rN@OH2Y0Rt}+K@gyAa$4@Z4C;3sn3Gl0ujeD*@-W!*iJ%$Fe&DuLdcsRGr0XYVq4lIym>Fwt}wsIdT?2IFT5e>Ziq65vxGItgkBXSd| zcQetHni(P^#Of9MsX0_TGyw!Q)La=$4t&7$C^ofQ#lmARu+Mu7{JGu5e(7k$NtH58 z)d_b6h4WFcIfS^-Nr(Xlr@AZ#DtU%e`wb3>O=ka#Jc8}ECB?Y#)4^@>5)~3ICmAJL z{$9#a?nbKuwHMcAni!ATD4qKzukqf+iJl(olg?|kG)fRKnj0BEvXdCqfU+_mSf{TQ z*3in%DE+d9eh~5@D)Fe=efk+UV#JKQyB*v!579RH6nI^^V;3fO-zQ*Ej`Vo5*e6i? z)H-*%U76j!wfpHmg2{FFjBD;v7rWwuzz77NJ_X<<0zsQ>=-JpEtj0_*1Ze7%H$ zA#3PO()|nmf%@Gy=Zo@3v!B;N0xZj6E)N1`Lrl(!?Pq(Pjw6#RljWW5HO3sjKmSTZ zX?`u^bqPG2_`e6f$+(tK0ga~Y?LVQWlNlj+=&-=R3uNN1TmM(gu#*?8Mof|R&h~tGedux zugxSMCc4x77>81oa)k$dl@A+|B#qy(`Mw}Us^Kx@?QJeIM}%5BaJJIVHv!v?d@gH~ zqrDNQTYv_UbX1)~K!%Aj?h#7!1UUL#RaO}-g_kwUkA+OLO;ScQmK(e@01wU>rj)ek zcYxu61a-|Dva4D-btGTP?@&5tE@Hlaf3Cwnrj&=RaVB7vnQQ8!+}vHTWESjQY7&%n zEipIx`Z%dLK2J`2#BJDY1X^D$5yxqXc}p5;QxEKOgL8)UHmidbWX?*8nk?$87m*-jVEquNXLloBbGA2vz)^`28->uA% zHo3SA?}Wc6apwt$j5Vl^#t|^GGwD9@BQX0_G-;-5q$><(@H+F?Bd|Y1D6|5lF-v|m zilNnO(PZP+A~HY#a3<-95Az+ZjJw@0tSOfF(n~-)(Hh4q8+%+_<1Dm*h)SF22h$FL z+dusXj{p;%{=SJ*F1=xd(bq;@_uh2MP!NFoD5Km4#6+zRmIb-rIe6)|oB$N6{OXJ! zMOxvoax>S@t1KpVZ*y}&f!E$#OR+XBQ$ja9&n4VGf~zyNcgjn?Fz@wJ8uZ}fW=X`n zb72nYdah6C@Af_E6u+?3NNyWDmjaH<2iN|6W~M1N<{$H&DYqY*jq?>D3$dW(NjmWnws=)&c%Y`PgND-)8=!3I1PnR{i^N>i!9C zUConSn4{-?>NIJ5edOEL{fAUXSspcB?Hxs}mBe8_%YbvTHgtLvzjovsKg8Oo=qF)t ztZSMA1VOwV@(6ZVVWSY7@-UxvXMr~u@dBjet z{dXA%1II1KwPVdez2YsJc+;4L#Mg2APb;mMzFN12G)j?C)njJwAj`NK+F}iDZNQwn zX~~~yg7C~#X#1xZR-DYx(mjC`0Bfsf{?=yJLzeWnV+0@`q@aVwl7>Ej+=FBZ!#REk zy!=|yYv?R5UmR`h;~yQ((~V9WoV11Xv|HaNm?8u&nWj-{mX|v{>~&Ixz@D-e5m8_Wpi+w zev@15@H3hM=4MN{!rF7Y&3oLIKdh^ULwsq2kfsLX#VD=s9GmWoj~H=k0Er6q``6d+ zfLrVi&4@km^|ZPwF;j3vSbKjlejcY3X5t4-F=VqUMJt{^frhLamcLfV8te^fu-@mf z6X+l{BWpXgfYT{byZ_ zADp~7jI}nxX>+T8}}0HE+J#SA(Lx0EC$O#bH3)2a@%e-;R;A9AG23_ zRXBPBDStIt`iT*FSV6~0DE?Cv{q^;_ANl)tO|tGTRAydi`poX;_nFDrRloPJ;&ap8!&cv z$}Mu3vZbjRfy&^yHkL2fi>Ufn03Gm8?R-%06k8aThIBcW69 z6x6|XbKJI3U7uWz#0eh=NC*(wjd-IA883ZfZ7FO^R1=0(1dh|WZ{Qwac&t$}}? zdg7?#Sj!(B?352nX15$4Fx}W5l8BShfvxlo7tT32^Lo~nw`qC0f9zTi7wwXf5op-& z>DP{LgXk*g&4+rpJmWfVe%|aY8Cj9Ql{em1_#=L`G#zLMh$pTW>r-?HP7|?=2{bnq zdOZb5P&UbHG`jXHCU(QGPr&v>63E6SZmlvPV&_<$u73q+N15y4gApEZhzG>M}R>48L8QHg#HJ=dO#)aE*W z;x-gvmdxNb)uHvUFPZ0cini?)1d#Nid80B5fI+~PG8L2}uDS~5&qq_prmWzMy{Rn|Y3>&N}gY3q>`X!(E`S2+$Oq0gtEe*n?q-Mb2WPIGKILG&+ za$B#xJh*-(K@+bd=fq?Eg3fp8Ho5=P+9(M#j{W$rH{bj6GYcVFC-o%g_$XhKlofp) zG^v}E*)LQ~?JHWQDuIgp@%w|xSFiFMEeUg!^m^kbVRMl^Ng98;{0CSX6xm68{WgER zPoG?Nooj;^=HIq(2JIjnrm;EXJDXv%uG`j#-CZnu^RX`E9J`YTORr>WK$squQSW-+ z`32!#!yGw_%hdagq{dtLi&Vv$z%2?kx{vkOAIM2Rc*!u9fg95$Z@qPt+Im|w8~N3S zuw`OWCHnQIi1#?d9ADlM#0N55mq`wdd^tr+fjeikvU?|0!>mK}Z}Fi*mh_{S&m=5JMk=_5mKvekJ2vvQW`?hZ4%VLc08^qng*iYiW!(?5h$uH1c9!kNLfy zK}DwS0@3x9oSUls`wmYy>z{PlGw%X{5zNUP;AXrnR(?v3;S#-8*-z1zB7yLA&aJ`4 z(5>5~bnOTAIikp=cE);5N_`~&+mZ~=esgo^M{2dPf+6R38~v928IO;yU8B-d32Vn4DDduC1CHn^WJbu_IBJe1?or60%Q6hV*~xU7FNsZt?>>ODUEGtrPi`% zzlhfN(?JLNH@X5C!-Bg@`y$LJc9$)Xs{nlNdx61vS$?13ysYFRi4q??m~L&<+wq6E zZc?clTTUbMTm{$K#Y4RCJAw7@Y{w276*pH)!lv!_&9dwl{LpMIy9-mj<0Dy~tiyi$k| zdL2kqO!j9EKmPHiw-UdyWR=a1KK1hv{Nd37(TZGJhHsm^KF7lnxHwDsF|OA^G#RK6 z5v7(~VvdMb;awCAscHL*X;@#uNXZ%J2jAt@z0r~H(Wj+<-T3wPn(itVcO2fEXIm;+ zL!Iga^7W4Qh(|y|q)+Z@f3pC@IPU|c<7O1)ces#8QJm*(29)**#kcD8aJrS*!rdDaNKW)sc+2+gU%ET(oJ+ro0%=QjedtdBIlWPc3}bNW*3{<1A`EgQ6A zx>J1fAVz;1vd(; ze<)KhV=pAkFVW9cjnh-%jdN~$ z0o*{*Lm$ z&GPiTaG+0V(F)&iiH)+|T!d+dw^e^$=)T#agxUX#nb4gjc$P~Z)8|4-fDmt6SL45N z-u{n5Q2Y0h>xFLv&lNg#di!QX2~IA(ZL<&uuWT&{Lj1})(~F~Dc8!d@2^Iv4^@&yd z_6{SOn7cq|U61&skJ|H>YT{?Kjj4%h=-mnv$=UU!Yh%*e(~xNdwOr)V#Th3`$}wnt zE=c-hbgzgk?^iHw5ksSR9%ofu`-e(43C!|BgTG7yjhw9X5m8`LdRWO&zd=H8;Yzpz za|)z}pxV5tPj~oEjgQMjwEspL7_4 zSid0VW3HhT||EmSi?6FwVWqXqftGdum8&MZ4<5uX5#`HmZV)cRVnHhMIiHDAMm}_YP%T ziH<2>LGe4uDsbpZ!IHyxr>3u7elY7}+|v?0PW`RhQrocRte%0$rZmay_9wXNxu?(ZPeYRy z9WQk0yJ@(!VH3B)o;9^!UG=lI!aDE#QnJNMNUrbVG&vTq-_#GOBi zO+6K5>PYMqVF=;*O}93>QkU7ybsAM<;u_A0;DbI5VOO!G>vSza4%W) z9ZMPR;*9G;){tF$OuZ8Zq;gJIF6|uKYi=D`_q_8K`~6MC>WR~lQ)q;n0wY5z=qt^& zk}o;3&TRP5uUiOe0>O@todyEaK&3{YlN~31;#*%7J%-{G-*>IfHkSby@R#b8nMEx8 z-W$TIDd*-7YJm=t{w|_&9yc%^;}HEc=s`fU_{(pY-(js0*hrxYNX)@1$&`XEcu{=Z ze1AL-JIeZrWWn!ulNPUEy-X^bY4|mde95h?*$3ctHFke{0~7^q?Kl|7J2-Vb%bjq$ zyOc`<4FBX5)^IR+!Mx=ogSDvMCM?1AY6GwC?@wXk!a6Woe;Wza|dZ zbJ-?gX*jt*a<5yu(Z5Eu|A5Izqxle*uLT<>Won+7YzuPQ3~u3$(|1-VbLp)vWJm_c zAu5sUXj;4X?bMMRJ*8jP7j2!w{3E6s3B8ir;9JV)rjzge4=LW}LX3_nLOpa)vCG+Fs7tT2W`%ve zc2+6-)2f$wP)%lH%S&EPPJKA<3_G$&Y~+INrw-mq> zFdwK-K-do%>F0GD9K1FAz+qGDi4}VDEF2iEbny#)a7o+i0c&;$kdvA%(Hp3+A*IWL zSS@71&>adCF>58^;$H@x=7VT+H50zSmBv$KAUbBOtugZ#G9As6SqJu#ZF2qU$x>Oe zn1ESfATgM^wN{ftph2R^z`f{hT7%LR`?nTZDRfo<$BDe)`%A!b*S%L5+plbeja zpL;*7ri_F%;H^xasJK3=Qpp(O)dT&i!H3j-iL8s}bIZ`}sDhWBl7132%J1W@%M?Zu z4pX{!Rv8ho@0+$78z&0@Nxv-mF=f_&R~E3g3e&> z=A@0-fmeH5*pi*P8#lk(ai;v3Tq%v=-_qCSjD;HJs8l$L1!K(UP)1 zjzE;Ay9)}=S=>?B(_IwgH9#!(bByW>uBr;dPnW&Vx;UfOVNoncmw{4+oaJJ!>Xns- zoqfzcB~@1C5+awc`KgZ3ptM9E03X#_&Q^+k*2Tp(%jM)(P3n~}ST|^JMpWiCy;#sM z?ta*BC$GZ~Gxn5(pXFDGRzW9cPF)*)+Jj_%3DJHSblU#O?&$rEQ4zEQ;#UzDF%23$ z1ZP_Ov@GYB!r>nW(2|?;B44o=DqPhl=VedrPcnI-n}q%F@JB>8RUulI% z>hTtzbH`a`wI61q4!f8f8uLz$pI**H7+r|jqqLGtKC&gA41d4#z=b^WB#`BN7CMj1 zJATivU?(i}1w;RnQGV46F2_Y6Z9k`zYa{jS=8M1&wBF-&1SRY1aw|H|yD75$xVH07 z!~b)yZH*6aR$iBb?ERp(`qi~}d=H-{?wxJ3Ct2VzxS-9b)d*X7Opk@}bAT0V-s&8P z*OMV>B^1>ae$Rlih}oNSvCa_`9ZJi`PkTjszHI{rgsR+4?)w`K-KSUn$Mola2dl0@ zXQ&}s0qVh{d&%+}ZDP&=$11WlAn>x`qMR!qK~OW}-Q^?~`fOca?-E|#e={ahOK5J( zp@&BeL5%OwH&-!{utX#fnp&1BG5+K!VSKh3wDG75fJ?mfy+bF|tLu|9N{PER?kx5nb$0^jgldk2-M{IVr4%vke9UA-YSL*QICD zc=wke2uJh7=9AvI)ll;^J$9bNW@W+oG*eY&cRA8C`x9M%Xd1oCH!K$kQ^%oiJLAhs zo?V3nV~|obVI_wK0>&di)=l=HE2DgY5;o|2)lsCWjz_OQ>+JAVN@IEEo$Xgasd`L^ zOzcCSPr#=g!Z0?Re(saR8aygT?The5dKLpw?I z^Q-=*)Cs%l$@UmI;r%Oc1{4b{n$y%LPy=xaas9*v_9h9?ddFHkyj+q#24YR z;EnSZy1#~x{Ce*p3M#!l11&Jvepz%-LzYt|Iuv=POEcqdWoNmZ)CpG)*wWbkfyCzn zUkfr$p$@ne0BtG>yQ$-sA>E#rkQL|Eo&PJ55ALod?N7_DruFu2DksgiYZ_)pIAIs8 z5Ja#!Ueia>JcIamaUm;M-h&s0&-#3sx4Ek(jzP_RnN>2LvgGkA%|r~p91oe1YLO~> zj8Unsp}r1WFh>J~7^KDnjvwoMPIwv`BK&=!b-AfE#J^hv&x`-T0!r_(4@)P#MN>L@ zl|3`&5%lL3ND7qQI>*^FM{2%5cX_{u!`dTN)dZ$@(ys0Qy$5B(u=6a;Jkaxp=hX%M z@eRacL9pfo++ja4&=#h5GgVvT@R?{qHTIIH8CL(A>%}7-tI0YJ{j(EJM$|dPa`q-$ z;y}-F+xEktX4iup@W4Byz{=Hz~N2$Zx%l=^HW{7P)NG+z=fKWBqzLRwHN4*5m)XitPNP zo%Fb*!Yz3LLCQbw^-{3OD(ZboY0PFny3@YDaiB3Iuub<)q|{>OOQ=VaWO#{c8cuB^ zx+BJS_0-&1TbBuERyBoW^%rL;wHN zP78b-F&7wH#}TH+WIHj{;(q)dztn+Z`!)0AO(4aCd{Uamy*G)I} z``&$zjD$Fi>iyHtUWw%-Srlu;uOvp!i0nB5I@hJ`f`<*fBfd8U42+oTndhiO4PctQ zX>G1gJ9G91KUceK)~vGV<1lm=ObO_T-AOeF(mJDm^z+(Jt=$vH-1O{Cx=Nz(4Nv0- zZNL?1+wuJ1&E8K^+?HbjV$e9C#n6euD2K~CUWRR%< z=G+qRfu$fw$ODBrC;(=!{-H`-JksB*wuz`i=Zi1PeJ{A4!Qg&g3vjNJA*KVFJ(J?d&V{+I%crh9*7GA4M&s&HuHa7B31S5ui&mG>7lvB%wMI-dp{%Q zji!AWs~RQUS-Z-5ON5Ty#^q$Y1~ykmqdrEpG~nz0_WlSGqINm`>XHnNse(w+N+`nR{yv9JzAf-hz88n&zJ1z=^m( z6gYf-=XuWgJ9>OvbF!RS)6&6e*Dt@r2v)8g z71Z>c5R1#a;;1@CEhN&Lb{fh*N3Bb8pE%rX;1a_xoYGTw+ENw1@93r#dX1FLfA&?c z({ttgS*{i_XfIy_bO5y}^erx2N)S-(L~?8o0og+Gdar8Rjc*Vt6)lCwF#b8liq+D7 z_Ry{o2UBb?cCt_AdBwn|C1xxjr`FWXL%_ug98UQLGeLk|H~cNo_?Zyzb{oed%{E39Qp5cr z+{YdDz2oB!BRF7NX6`GS*_bK&<@OnDp}+FuWUfUx_myVC^Q3?D(ueC@z(XyIts4Fw zHBgpb8B)-e5S)AH=nm9NekYjwnrTSnmx#xzkU9fp&<#-Z_W^d$uB8I~lp=z81Ru$J zk=cKYTcG*^_fokYpSqwt!A9#6lUYUJhgEUqNlseK)0X_ptS@=((`3|yuS-wH$xRR6 z!)afn9t1x%WsaZ45}Uru&|%)KS7KT3-#Sq`55GiTkMpKhZvr-Ni@{%5<(R_uC1cJg zn3};rlf+hx8O-=x`Sqb`=$qxTN_?_Nag-OKldqJk9{A%T+ISEwtL4A2x{eUAE{!^6 zHVYV1#tt|lqQoDiyIBjw>^&`*+>g0&#i>0d5N07@(AM~I^qX@#hg*k1hVx{Zgx}=n zW%2;3bljZhs3SYqN8_~ZEWpTIynQ|_aDwinYoIfc9Dq^(>KUMc@;o!@{$QZ>&VJl` z-9dyxCXi=~%Y*g}X)Y9+D-i#)fNqAV>#iD7d6C<#B7m(b4t=%@u_QqY?Yt+Wc1ozJtu})n~^FbvG9Sf7WP9yp3M)r=ZYBUe18rua< zMHW@tyVK3OJ;9;QKaN;|80m2xRVPsk3&@Jl5?4ECzgK*f`AjDN!;XgSp_4y}RU*p6 zA=1;T-Pi9Nti^dW(!m>$M#7FFd}r^n5bD&dp|C}x-ugahMi^)mbZgeU8ZC?VBN!V1!PXTG^H z;9n7D#sSb-zo_wH9GX^)ET_e-=HF!@UT%#uhtO|P>X|k=+>J@zlvvxP%I@j55} zNdlOG7P^2+>ptjRP)Gi7;R(+pK zSBKr|l&)8_m$>Vq1D0kPY%*Gv*;V%k(E)hCJms@r<_v7{kK^Zn=XExb_mrfe7l);md84->2>;u-o%x z^dPrm1k2(scdio5?OoUH0xS4NA zFp22O-<(KL4LBw2%xNK!I}MwAZ$BojwW6nK#v9o8`yYa<{ul@x^|poST{nBM&~({2 zvyz+c`1PPWYN*nx!xw+LfcFHn%?BZz}aDg-3O2L#h^mrUkjiS$M z^0BRb-B7p-ZZGb;O;_sHia#GgdRIHNLleUo0R(>cs#lPG(-dZGJ_Wm-ar*||=H-Ic zL>9aJuJ(k}Tt{l{$Ra0>p1PKKs6E*6-)+DD`#p!oC-eZRX@Dzq>=tf5{>#u>9kfd$ zH5mOR{v#8o_OIEhU%tUf5)#WfXkWU(`LuyO{4q8&qDdPueK$|;g`VwG4e(-afdQqu zWMf3bcSSR4PX_5}OE13)FVq2@VBT$pNs|Ae&zYHg4GqQ9dFeb+B(` zK&KH8P`%{1^jktRYr+g>eL_BI zJvmuzrV_vFZ=R7d(dyn-*Gxm8XptpMK zqukSMsViE$0|GOXIjbP4E)UiBc)b|F{Oo2T5v*KY8|5T0d@;h(*!tpByp8g5i<-E0 z>5j!{1}?P<5)S$BH(>60s{gfakSrw<8Q{>hdo_KdgdlY+>v%@huQeAaDJYu{A%p}9 zH(5YDpKM}z%fHJanGL&I-k<{S;Ut~AfM)9-SZU==HT4Gis#lO6cl1GC4U=egWR}5c zN0`F1Q}%oWnx5k2pjbdygLt}a)}jt?gFLt%wZGd9Jh5>>3E9S6;^{gtVk*s`{Jmjn zC-BX}@%2WLQ{RsK8sB7g{BOJ`Z4P$QIOjsuLB%|#Edk&-Y8Px59v{Pd$(tnlc!th8f8gO!ejfQ3L-uh{7Bvkg)iWQFy@PR4b3!R`&#B>RPzD@ik^ z$QP&T$`U{GcR_nS{6bfW+b%Grwc~vNXwoT6a~)BQ8U22|emA3~??Q~a4BXpKTlwi; z&5VlyaAMjp)Q|b?GZu+Gq|}j*T!S_VAX=Lf0tll1u}u$} zKJ8VS$j!Q{IS$o4a}Mob4kcpLI=ZoBy>MQCTvn3?)0uZmUB!r^%CYWaOsfM}M*yl~ z)K7n+D8{{RUriJ0-uLjo!Q$@MposWbR1aYX*DW1(Y_4B$n_G&QDehbUNxy6w$tv8R zqIIfiz`XqkE1cgOgpZo4Ym35 zpFpN7(vd&G5PI3r?hnK@ryTShkaj^|n3`Up!%Vf=G;Rbsjr*2V?r%nS0C(Dex=EMK zmK+!*hfvUmZ_uiB@toiXwjcNztxF6PD3$~ASq7<{`B6*|dL@|QCXJn5CHMRUaIMqL z{z}8*xhQor+(DK{w7l-0hr~8gTC76zN}|c${3W;{FG%-~oAS1z%UVt)ss#2hgZp&; z1aB2|1+cKhHhI)ZAatKdl{1J@JHzvM1dh1xo{_&tXk3cfl%#o-XNY`j2SJ9I&Oq2> z|2{Dx2#;B>m#oj+Nv6f{mzOO4FQ$4OQM^r_F@x!MPk@iO<7bJMMNL#2b2*bBXwonO zmZ8P%_bh*j8XRIr__ee>TEqlF9lL_Se5Qv6&fc zQ$F(^jF7bXc)%Z&%?Mn#iRXBT{jQr@A}8n3P&?oq=6tEQz%8ogDS-iE=>Q>XtCbEI zeqy3$A+k!HZm%oQJtW<&z4EtINRhMuCdCg=)iF1I)7YbbCcZh4iYN^VsA5bpuY$xun z-FmX(Xtu?-cw@%u>MsCo$Yp?{{8F-H7~U!PmU(Rr9#A?%A@5WjROpCrI)Bd(Y>3WF zLA|AnE+?fTU!5f0N6k`WJ{)7UE-vsIctUpf;i`6Z_&|KXv6L1-dG`^hp7`r#N%SJg zt|OUnFlyk_=tJB*-s>0JbUxm)8EvROcx7HHs!BUXH%?%pQ=TN}rW0rjY0{1iUlycoh=!ws>e|6>GztK{uI~W=Kg)(J_tSEloZQQfnut z?3g^e21*hy-P8YV)F1c5;IG$;I29wlXLsJ{eXH_9IlC zU91obykOS+IG-@M7uu1AGU(jA3I3F|8}D0c7l-^MJ(!X3YhU^r=$DP@b1gwo%qHPU z4ZJk8qv^~Po7{cSX&Ei^!%HTTaVC$_(7J4AtzD8-42ecrT5^Wb%SVId5ctxjvISJC zRuiZpRkq9E%F}E@onr(y5iws6g60+Yvp%%GPq6_B{NJ5805QLk?sRoT;R!JO2K^Z(Hn?Aph_Xu}8b zmPMxY1`2d>>|5V+`XTN7L{USOM*$><=_*u=RufX@u8OG@2SIv*ESR=i%?=DZa%!UV30Z%AcZCfGv$$ovKj9^1jeKUXz1}B)4hGZK?)yVG zZz_)L)A4o3Xz0TFd?dNqXCdsoC9-#jws;??VD+I#di>i863KN(~%+0V+qnh2xaNdM@ z%yOx$6?-&zpp}Gn6yOu-Y}#$9HI996nLqI}^JhG6x&!^20FIqJ#OTZ!VA-ZFGXTys z%Jb&c@$<6O-#u8Kml?m)K$D9*{?E>K;8$a=m;O)g(V|5}!eRQ}p5L;UV=s`!yTP@vX&&tX{++s6~It()*w>D{5I=duWbG+ zr=*L#{$-j|nhI8>0-; zc2y&uPNCRW_n7RM77qJu{PP`_;v8wMwY?iru^LB%e%tl~EvuGn%t6j5ErVhznUlU> ztftr~vOL&y_Y&ZpC#9grepyUc>Mkm395Y?gsdg#clXCs|_$J896Weuljtxc1z2KLB zwPFZG*``-zHilsBkWItIx%36eFZ=FM0P}3UhYhifQT&&P+e)@lHOx5P&p&j(I=)TZ@ znv#?EJ?;_{z>M<7^_`0kI;4u!%|X|NLX#Z;U(e4rVv?@aJ+4f=0_KVj-Rk}Hy^Rcu#l+F06ngz;s)g}(p} z3$a!`=63mq-%gn&0L9YV(Jdm#(%#J)fk#3EeLgDJk;AX6?CZ|I1#VN}z^<#=b$Cxx z<#JLfJA=c5CjB1W>4BEu4e(9vA$XYOTJ>|fB=;^k*V^Jg^F~{IEo*n6NBT2dp|@T6 zJ?o~7on_nl*Bo~x1p(4=&sILa+586N#Vy_w7i_RK!FgZ}oBLiUX^8T|Ul-DyJmf`I zdMQD$+5Wv?fA#3~PrhWK3?&~uAAn)N-)Lwph>jCYDtZ$}*O z8E?)v2Vf=^=6B{JL*%%>=Q9C4upr-2fXf%wKbK5l;=B%_*hk@F?2o0Ia>R;zuYw=0 zG@rhjT$lkaKi9J(iBij*jfLwAzFm1I7EO}69(;G&iDFeCshs0_{df2qB^sadHhHuZ zS| zR`iEvobJHSOl#GF`RFI9Puj#RwhTG$NXQT?S~d9!Pd0V6G;Z4pv{ZC!bOpNYBv^!> ze~}{)VR2%lVQK+RiyWy?s;9oi$Y}z_b{p7 zi{~r?Nl&%sUT}F3JRWR)q^_Jf2O^tWKez%FWUS)Bo3fP$%iWqth_bC&u`zgn}yZ!1ew>o4y5O zL07%cZ&~~bk3?TXwY$WhBm+2+#AbYjXJZJ^zhI`qYm@KSYGo5~K7dEt-loffknAGH z=}@Ta&na=VFKw35^Q@kJ?0%n1VJcMh-|?eLUIH`{u|mL|I&37p_a5pXHVGM4XYn%K zofE(qJUx4O7^9^k))hiOXM5dX-}LHNwj4Z^*m#T~_s|Q+uoD7Y6qb&Bm%6OR)oF*d z^5VpfB|nX)Yp=|Vpezf|uxj1tF4p>~N2T8+2WbSzh>$kq+cyFfcNE_Ahm`pBg80JvqUjPeO3s)mY$Yei(K9XIW8#RLd(*H4Js2A{MHVN;ci6 zl(B#lx&(*mrd)lLp$utN@W28!Bne7{Xo_geCkS=Q!_&z)!i%oNMO6NAv}d;c4?k~_ zmq;lba;(k0Jzz>?++qOPK-ly2yM0aBBY`7ra}6_ zUy+EP=Zw4T3>S<1T7thhJO6HTD6}{e0cyg`teHiEbc(E&5GT`529sqYoJy=(CdRc% z8^dyzPW<^|2X8wVlHBZlvkc=O*9J~cXNC8U?iECVPA7}>x2xW;VP!yA8D!wbyKhK| z^8l6M0*7>5kaG-!>9h%26^oJ59|2>>tgztg(iG!-WO{_j*6?(2cyf z(ue@X5CHHQGlL9j1FI~-jWXZH(UZVb0^s7uaClvVY77Q(XOP3nu^=BNcM4LYBb~wj2)Z|TH zc#t?!gT-Ljb))e5KW4D+o$I@FA_(cr=cX@&U|qU#^1T9|xnmHntmLWyZH-sQ$kIC6 zj=?~M_iO0^P#@}rH7_<(*B4`Jn%N?kThin_3}OP^Cc9jirbMR(}%?yvXdT-@|(vglU0?w4x~65m!0p@wob>W>Ykji)g> z7S~2Z^CWT40ZjuO)!w1tli~-;9l|HLP*A7*FY(U~ZSsLvYGx0nlvw3HwaLwM9RwgP zA6>N%@Y3F(wHPPhbm`lT3$2LujMxaH;d4I&y9~w_X!Quep4+_NEQTMjhWhcjiM=1x zbrACZlltOYpZ_!XW$Dkkf@hCwebXB(is^krm37$>xq``}uc@!(Y0Gg2t07k>Onpqd z-LhBcyUbH!p9sQI^2X&N`rruQlmKmoouBRIV@}$m$A7(Nu;tWSr6LYXg&p1WJ?UTR zi-@to;+wETJ58iKW-AHpj=dP$=ASH~+R_j{2u6q<#OBczVz2!AXMPSoIktc}X%Xdh zV$S;PY;Pv6SZbFUGB1m!uB%`=OUe~q`-pv!%I1Hw8LO( z#0Wp!bive}dP*Rq(E*c_#{?ze1RJqlu&a)tos9UhyeOFET%a8fBy2YHtF4U>GH&t| z8q3VlQ{nb`*&KiVFCd6-an1TrPq(Gnu6NCD-}zZrv!rERYwz2+qdXzcA9ByS6{E8X zCJ0TMN&FrL9i7*Xqbp6ZYK9ETGSE4;qy}dZMrqH36oFzf2VdI&3nSyLF~R8@zQZ

6b=ZGzV$D82{M4&G3*0-pTf12ypjNH&`gT8ya^E(;fmfd#LGQgV2 zy!5b8sRoAJ9o3Tz$aiU;)I65ioe#&jQ`K?eMmq5#IQHT38CsS z(FJ{7H32RK0M(KDNaukW*!8RmsnD{+#uy~ZLetOHa0V97ez>$5Jcf{neSt{HI`#7@B^NU2vj`MU~#;s6F3UPk6Yg^J z;Bb(QR&1n%)dwAuCk7ZzJwo7FnWx<3#mNvQR(hDGgl>v{-<4%^8m4NVZNg!3?ke}g z;?7_rNH>en!+TYsk5#}ukkv#bf9~Ve?0EOM22$ddn`n5Sk7#!sQfued`?O{4y7U9u!6!4;#F^$Y8!WSe;`4X}iH~9;w4E*~1}i z`TI#rE`shXv4Q*L1+1?miMTZA&NoUxWo@$D@3UfVRai_<{+Ey>-Ds^Xl(oK|504BR z;h0-fr446iVD5v&d81U0Y}0Hs8yoS+fZpEc8!E34tMZwH(P7;_$o+Kb6%p|9Gc$IF z#_=}8Q1B0->ixL$@9R?F9+-T_jlEM3v{$1UL_&Pbr;`<=dKn%?6fj>t?k%DV_1%8k z&4ezl#v%l=;Z39YHd_V^IaBXoG#zZ}(nQc8R|d}1=ss9glZ%}fuP0%2ALJPX@e$~0 z6r^<1Ltgaf1pSAg*Aod**i)$Vkc(L=FO88v}?X&CEZcE-1hLnw?lWXXTydF)y+7u23B#g;7~@QSC^rw$R<69>aNd zjsj=B{tE-G|E3ON%ipVXs$=#s0XpDj`oTW)I%xfg7IAq$@WGfGhLFHkx(V`fJ9Qkr zmtvgp_ie2@=C8cSVBY^0ss8)Bm9R(Yk1ju(llvTt*4n6nK3bZ9qNLp+SUS|LdyYu=5 zJ?w3t-T!#HPhiYR>RkIF!0sXbQ~HAE-fr3ic!3B07&#wE?|Vpj5G{QD!BiRiNyQ~q zm$`*+X#I^vY%Qb#?0&dK8U;KFpX9p>mVT*&VaqBe|B`3deq&2I|KRK>240j?g8DDD zsgYVU0W`bO7bYw|n47}ZOKR_b8bBFj8`=pb^2f-V$;&%@ldqRcDWgs5^SRBy(uS#F z;<={&$GPQ*rsBqj(5J-kp2mUe-S1}W+$@OG4hRj5Pi8fn;EJvWi zj^?*|OR>+0I!s^dAEE_TKc8<+!3g~RyYVK@ehzu9J7PB#4xwGtlvh@l=cY2AuI{QW z2+=LT;>g-Y#LouN>V~`5vbCPwU|P~RSgIr`>`?oe8Cy5vID>2^-c2rGsQnG&JMPU} zD1`akSDm7$se&hK=OLA8l=vu3EyaB@o-ipq;0bL5)0Kq&8D~0)=)@tbPqnTnj^5;D*^qIh>c)B(f z(q|E+^2TNS;x_N93#(-zssgq%WpkMHsvo=55!rse3Gtjl3dQ=Tc#EFS(@CK72h8dQ zGg7hje-H9mv<4zax1LjW+tb$4Yp*pG?TS z$RZ`IbTk;_{`+zUykv26g}k1AOfAA(tSjW!I_=1_TPZ(to@I2-&_=U=O;e-4)gp)a zm*XYr_rj{aj{e3Tap_TmFvLES0CK|S_O{U3&_{gHmjwRXi>nXwqG<}-!}0+o=6Q+Q zu;O9A+SRX`eN}P%n~OT0^;ga28>`5+Slc+S+d7i4RJD8_P6dV|?aA&)$|E2oQ7&E4 zspm;0a7=qlGz@fLBEFr-zg7lvN3l7~I3~@?4?8#3FkI!WO+i%y#J6|i`i~}#6aZCs z98{KvV{#+TO{*U*RiZ$M)oQVs3v9NNJ|+$edo@wq+xp`=b5=7xw8F-#Ts!Bs1#C$= z_A^@sMN!_K)t7%BK5;o7(NQ|ncK+h10r|=8hf0@WrGti-_@MMBWxrrEYqRHZY+3&Hs}&J=mvgI99#4~zatM9jDY5oF=`|YM8{5K?>g!2#_^-ySDmJ@n*bC6)^fos4;3)e9xv zO=m7Hrj{8>1eQ_i@*1hNfxo~tc<2R$rCnob)BzB>E|)mj?PKu++!ZH#aglTpWwltS zX92rzr)ul4jb&AYP-k5>p8zUKl-HP{LYtc_lWcElE@&vhePuT$Fg(y6x57q2$xKE{=LXN7a8ff{jk3M;qx8stWN^dlrnyaxM}(lAcwq-_G#oD zzZM?I;@W*dGn!W}f-2qfPbqXRxZr=zjPIb?AJ@)`PNgTY-E!2SEgKr#^nR9hFI_31 zripG0UP)WlGO1Qtw&o!kHjFrT)J{j8d^9rWl?OseAI}fE8{+B10s(}bx}9e=oNux- zoN935>U7DK{hr)b{qpqL zP@db$BYv)nWyj8MYBQjqQIrFy=aD&NQOJ=be6tJq%WHEyfk(+(H|6BHyvz^-`i(bV z&BA`Qjv_Jp@ti7f>=E7Oob0xn_T3Y4Hk7dDk^winHQ-=#X3J6P9d!X*>H4Y<07UtH z!k27m%`Olb`EypJF5JX}Uoc~hgTxkBEDJ?L|XZ736TIc`! zOEToVFL>2U+5Ot+yG( z8nuFxPu3?*#4N{?p0_>@z!#)NIhW0%?a4g9n4E}qe^ZTla`7l7xcf*rZqZH2Ygv2P zG%sDU0;e&qi3;>p$n=OV267Nvk4!@l)l-S(gJ;AW9Jx4zY!hz^JXZXFy8t)Glw z`+&|~z{4EA2?n9_e@Fb|tq)0usX%^M>V~czhx<}Du5q{} zSXdZ!S$!YL9Q1v?nv<9>BJ|Je%1akq#_P{-kLEjczut(y2~jc)k_zt9uTwnG*=4%> zMEod!k)-3?S?QTgSkR?#Z*Kf`Fc*a${+8K@a~;|DX}~3kncYVPuGRkNSAJe&8{D=s zT@@94+vwW3PqU!})(yYP=uO~ZVsiLYXh&+FOlcXD=iw2T9s<5?=W3k)!O+Ytu(|yH z>$Qk{Y?GJwrLMcA@xqMu`(Y*Q_;qfDmbwLydt&RGf!Dv#kK2at#mzFDghjO?xOoIl zBDt;HUryRMUl2b}FhOjqX#l-5-QJ?TC~R}y=4>|Wo|5T`RtGUHf*!rl|=OAk&@pOOT zieQEot*&q93_+jLXn5Q>wGtr6?PXY_^XCYEV0!q&}y?7|GeL~z0OQor=x!z}B z9@V7s!55Em$-)_l!;EBTPEyxvVog+#`F&#nWtH?L4rcDHYcxa zYz_(!G_Ova`F#cbD(HK&t&FlVH>_~I)m@e5Q)qMB?di7JMHc*9xf11iKS!2tngIY) z5!8$!gAVObXS6?UD&y|MLUVWdHz73Z&mC(wq#>AM=rgVTiUb|9C93JoJS|+?RG2mh zAoa3K>u<-?59*$r{_^=hmY?WLOq^%t69^!I@zw*g9~~#cDE_Q;uS=r^mHJDH_4IH+ zNJyvlXaWDGC1q6tT*PQ5?)pS%3h9B1?;UxZl6KBm=tOOv=2ZKMR}DOgtaeKYk&~5Y>Si*xos3HC<079~u(}B@r-Jbx4HEyn)t-2NS=I0f3-l zneD(Bx|?0~zC$(F>{muFDd4RXl){nM@e_x6h6Bd0T}#r!(Ru4gU2`9b!7RRzmMrj>B~z#?_Xb7?NogywuzWWT$&Ksn6bL>nDqhV zYw+T_*mKfv@8^+^J{D&Rh0|-IcWx>Qj>t+Sc zX7clutaaElAo=oe!9690dkL(xI_f@ovoz$C+NmOhR}Ft!r|L-zYoe|03&Bxy{P8X3 z5if2eEBqp?gmX++8yyd1aoRFE*^Wn_m8%Xw1Vvi(`Dq3Vi8l7YaMk5Mkw;@^DLFt z1`v+M8O)u@^>>a_2E!&0h%|ms7-|BpSPtvkVW+Oe?au zybnUV&ve`gYl_{L@&=snSig0jd)$WY{fdY!kJ@D^W)yF*6UtW=v*rJWB)QuF= zcTsY!Ns~g8Uo(?rONPM-uI=*K|L6;Of3pnfDa>%TlEYL^AMeSzG%=g{8LM(U-JS4V zhfXH2qw3k_?j`#+AyZ`k27f1vHr{ucYp8Y{2ZIQ0PQ;x#3HdwnAl;xl7K<&q|{ zWBP|y;_=eR-p;&(6*cW8bz^+of2RbZ`&Dr8*K*}q?N z3bLCFRP1%H0U)+>&_|T{-qY1e(8extt;*w(PyM^nnyfn$({j`rG@tv-wK>I+nWG$( zb83yt{5S*LruHM_yD%7x<^-R0r%*JJ)h@{E^buDZ*pJ=xJ(_cFrUXig;VeDQlUq;p zAjDObVyo+(gd`Y&?TRGF57~M4a^^m^cWc!5n>;p$I$8Ql@HcT@i8lnYJ#={)2gt*; zOV!aq&z`X6+CHEE%m1MYyMBQ>=3~-u|3(!bl4Rg}S<*symz9@)I%Wrx%Y5M~IP`F_ zKS}(l{;+F7lHpRSI^mZ1ll&_$cnvvn%d!FFCmb0+H{*hG{kMl-uhTyn&qr1(NgJuy z0l8UdJF#cNkT;T&L3`vPa4orc$)uaeRED|oBiueWEO7zle|Loy=)jIgltIVATXT!V(IDfa+cGwO4R5@vok0^XdH7Q6gyvik)aL6@ocP^LA zNR+bH7w2cw=o5z$!brj8SGi2T?^_O;0E-bYDIKIo@%PUmGkKzturDd~|tuQk}b%Q&Fl zrz$>zEquE+&o54w25O2o?Z$9N>#E>PKZrTi*l;hFi<9PNT8*1_RH;%vEl^TO__PzC z`9OSQ@7#$1@!YZOWBk+>Bu||A#@r#0ibD~6XpIUS+dJ_1uc|d{pC@^Eab>Ezs(X`$ zu|;PNUSC<@cs=$mO(>Y3>%~}iK^K>#T9z45ZZ?J;-yjv~F4o4QRFfo{Dw`-}gHEVj zpgJ8>0`TVx%I59JfGYym49cezz$mgs`tSV`cF-HJ6 zzg79!58;8map{*Ie$EHW=TD`#{$SZH|C#XmfwJhN&g!04PndBft>~|GzxD@w??xWy zasL@=rw8w=&9ovYxrz%2dNFYVy{WkF`uFZ6YOv~Q7Wa<#PUqi3UR_90BlA9AWTx^T z#s=ql;ix1M?<}B^1*^2S=^Y%354mklK0?sQ2*Td>-R-gl*O6>rj_&#+^gYO4uh7>_ zJiW3t!D*(Z6PQAGl@=A>{f7`L^xSRX7d_?<#{?W_m-asmV*?DhTm){(BLj$HOFnuq zdUWW#?X`iHPdAQ1Gce%LBh1TrdiQ6Wk9YP#CY`NOHEUqi9ROa4epCA1IO9(wcKee8 z=gtU2W9Tk@Aa(K0CDj4_o`bY%C8O)I{pesWrD|aO`p4y$OeYpp%)XM%8)3x#GN1W0 z=RcX>XnXV3dxPtWi?qu0(f;X`>TUW;#OWLl^Ifx7Fu|@J8fE7Wq?VXAXjT>qr-pB(1XtF^beC3<6e*g$}LQ&_&E z!Up#P-Pqb*{0CjlNJ#~}!#kCu!i12CBfIX4-h-PBUa_Or9GewPPOIgC?&80vGgf9A zw%c7!j)0&fr%}ZoJE3a#;y`wWnQk;x;p890v588LD?8)X+mL>_il_(v+BH^w8zm29 z$tMPlUda>QYK0)%ZkubqJuY8RD<|cZf!IY*4(m^^8QM5V`r%rjAf9Q8`*Y?8**3mU zzVyiW%6fi=7~9P+N}OC|9H6VZrgimR2mp3>4kC9jR~S=IVCf0l9_IfZHSrh{GKMna zD~K31pxNcIZ{dD>s@pON2ezn|$i9KfREF(#hOt%IeIvWZfW{U-1}SL$eb6?6NSv9o z&*c1>hkOJG==nyNu9bii{zP3L(Y%D4jTnCvZW|Y+!qa+Mkve- z_Fq5@KR-3ck}m*RWb>S^tka}IrSgxdZbDC=jhS} z`rUQu?*!mOR|#EdYMQK*e@Bet$VHe)l?E_JZ|=jS*D>8`Vmj3rVBn{YvPFxdDmCn$VPAFOw&j18dxw|HAo*>R7C+)y2I{y}hHcdnm;IjNn6L8eD$0*P zZcv%C=VyL210TjqAiF8&rKRSX(oIv`gpUHCi($S&g3Y8qaY;i3tjQuEG;ndnl_t#3 z>Yh#;Z})Sf5jf1&Nc0wj%UrwkZI#h@Dqm&G3;7NpJwpTzX4l$)x1BiVk1p99oEdaq z&XD43+z+)8SzT&e79CrD>=Eo9s%>NC`iMYMVv&31|MYVIwpjv3hN9fJ28X_U%avQqtX(KY#SNlm^lr<~Aoq=iu@^?$JX9~RvU2NY&gJ;KmK$#0j`g`~R-CCH z6q)aify~)IBv4q?m9yDgP~;@o$e}{zDNYl{49KH;w6w3&JFy8KSC~rYVfbeHxDd-b zeL6;o_ZGhAj|$2bl5!gM32vQxr7PD6SSUpYk98CK8P1hAHuIOC%%dt@VRQ6Lp(T5V z{d%v2q7yqJTjOGU3HlGqeXzHm6aQ85J|9|6Hoi_Lb?SG_`e-S0?K)MwyvSl?$-t}y zS>)Q@Ia#W{G)zI5ah_}r&`5dSKkDE1iCj4itYbWN@`I5`2YW*qBW9l-qSUMWd#fre z=Bg@QHJ-1v!)H0HG#hBPcR5^<n&AA|d+7 z3$~VfY-B8Lpv32rVwNb5oPQ&t^tX>gOZo4R7CG+!Lm~gy=F+mvznH0ii*@GfXw5*Q z%q`v%4_~dk+IfG%pU-*Y3u5p7SR2>ooHL%ucjmQS4erMKExH9IjZNn}H&W_PJ}9~i zjBYbZpL`tXaYAo9Md}B=)-HjP2eT#Wx9e1r4?ik;^&JJzQocn}puqR2*C)6tGxyjN zt@;IIU?p%;t#l!Yu%)(%M{S$9pu~5gwkK<$CnS5|@W&GhdCHG{N{W0z7oq??^=*=~ zjG#M1;UkExodQ&Y;JwnqKpGo3u{l6h)J7j3dx81#hSwK1inXb+7v+0FkkI1wr=F9f z4-p)%8g&fc76$1)7Z!PavlZx$TSI*j>knbP;%hy)66BrO_^@rL_ez&Wab*;fzf*ex zuV`|6ENEA#sZ_SW3we>j>g6P&b2{X{p;aR&m-0xGfZjw9O~df|6v-poV@gqNQ(gM< zznjSMX=wKY^dy7|a>Yh*On3Uur%hSyG}T{un8DRrFJ*IY_;skwlV%Q$&(B_2Xcc}| zr;)_Fe8cg|)?b!nyWs8ZjEpEw{jHn(*Q5tu?Ct|)<^zo$cXp&*k81Z+4ZSH>K6~3f`yPp1v z5@G&VB>hefw+io!QnzeDcD@aG<!pgJua&91T^C{r%p0CTl<)V zf+-lnZr&$u6$S|Kc+M_W&?O>DD6 z^Edol_dRZG9(u5D?I^w;9o%WJ-6Y;VbaOghRJOWJSiZ>OQF?5_My-f}pAir>ZK$HR z8cIoAzuIO>UG#hOkIXq67OJbRwZH4xP+}qlju!=}G-WwXR>@F5t$VvF`IA2Mpi||* zdo%xouD6bB`d|CURZvh$MCp=LQa~Cu(t%Pc5|RoNknY+TAx=KDC}2>cgmg;|q(K-+ zGhlRXbPUGE_wBjQ?>?V%pY!|MJ$(3>*RI!fJ?rWTk35jHbcb}N?OH#|+!E|#8V~#N zi5Oe()>B8XQYC{mWuv2QkG~Gy#yj0b&cllq zn}*J)_YqjwJ{F{@$v}1J%AxFf=E_m$nw3%R+hWJQKiagE8SlU|Lnd34z+Vz$K&u0@ znv(fd*m!V55uA{yeaXrd;gsEfk7AMXS`v@4pIC_04iFaYP*hO>)Ap-oC_vFxDn|cyGC#5Heb5p6HDzIFdd7Dy3wnMqrKZ95=>OUX(FG z{WP8_>#7^cTXv~#@`zesHZQh z&K*%6_Cfkjdr$kzu>Dy-dFIs1Ng=e&bT&Hin=mE9?9JGl+#@H0Ei7VB#7b$({aWKf z=p?NNWo5%%%bbeZrSx$+4QG4Po_rRGTTerR$M$#USiJPOFI-RCI2m}{&GJ0P#86sz zzHYeNZ^Bm}I3Fk~=~9w3w!yxszH~5lCe^ShuCf_yTJF24i z)5UlCenfvi*cECo&=%76`Gx)fCmFUi69Cz3J;bjs!t}4}!N3<8hur=6Nqz1i*;Es> z_`8k#eq{S*sfS+>IK4i!a08GN%v2@_{|nHQ{dO*)Tdr+^r$P34(=}lwusfkWYV+L; z0?X3SvRU9FPwez^{vJy#8Zc@9s9zldnMY*^3cMMQSb?4_ycT?rte0GyK0_s#Kxk&k zNRhm*qhiX`i5ztu*7C|1QiLz8SeJYXf4z`Wx$3#yO!nIEGKIGP^@I`l*bzbRF-sV& zKziMZkm`f~{4v`~GtM?fjrD%k+?&tAaOGW2J96DVNuz<%qmbV9fm6$zR<2j?_`LO= zG(V?pD0Zb_x)z_rboH+ohSRxHxX&cQQDCEzTs?g_xN*^ZQn#8R{s05Q6DSx?N1YTW z3#led5F0F~tGUx8E#dCFlSNq9%1>^@oC$YK7ME2Awr&cP2;a!!vffKfnk3iMi8-(z zYaJHRu-Uyv2y95DajGVl!T0M8yUM!HZHbsysC7m$313&)ahj-bFg%_)YBH5`ow>dh zBWTipyDQ+Rcp7>}CbjhbEDz#PuNoUhPY%`1)27)}({W3P-zc-1%ep|{b8J#Vb6V1;~ z&5gc5yPn!o$@624!uA@#0Pj!dVRM313Ch|D$jY~Bsc&-bUtP@DMi8m^g_30P}0E9vMjtV=FmTI_x zpk`)agku&H>jseU!*5mtqSauyONEvO2`i-ba(qZYno>b8yzka6Q}%$^6`~trt{=8h z#d_i7ruuH^MVG_}XbLOJy(>kZ3SZluR#$GIya3^qqLs=i@s>E*JZDE}@Gc{Ho#iJ@ z*`Q_fhrH6@BZE*jmjOgCD-UMNNej_4? z5j13w6~eM+q4pT_r5y(0hT^NLL z_dGOxz4as0`rgB(a}OID<769FQ&o+7MrE^?j$JJ)nS5{(Nr>ZKn+`XGp2y|aJMF%? zZUZ(#1E&It^0DBv!T3$%CACFiWh26i6RO`)!FjLtCVBMqGKJ26dMvoZhdejA&>6p0 zugqFPuofFRvRhe*XK+bbXbJGM6aQQymr95dPNxoI01Ik3$B)PzGgIcG zB!z%&Tf^?{@QabWP0-#Hh*1`g@ty7YxQGnX0AujCgf+6pY{r3QU7nSrO#u0r)pjQ8 zNCg=}#9--hif#TqR1}qf07E&f&61*_3t_07w6_=fHIjxUd8JbGIF_8p%SyH1vdIVN zx8uSTMN<5a($D9kvOfN40*gEDJ!JG@^5a~CsZx~uOZ!JZLRy!1w@>tauX*t=yVU1W z+w<&8n10Sk`){_1P!3>5ZDP}QIe+L{Td^IBKkJxVJws- zjxaU!n9301{IuHy-Cxo^MEi;4v57HnP9q!*m?m-?t7H=4xVc<-HL2Qgl^qQt^KI;*B~w}) ztTs`{T}~03_QU~4`S@PY*{ZC>DsPJ&v64|muRmC$2Y2TeeH)-$G@B?}kitJwxrUPP zUH-LJ?mQ;E)Ehyi5%RQ9+&}sW<7uSVNWHAX4PM(vf}@`|E>u1kyej@?O}VAcN4VF` zb*2AvBKQjTXmM+bBqOcWf$@7gzx6NhstD2mW3_A6@{_Q|pRwx?2&{kAD@jzSpBn== zb@Ry4&W=_64w*;$eg@v_+*9%~DCLN!_|j&^{lK%n6$Z4&CWF=b`}y;e)8Js0;lLR` z={qZXrU8otyM~=HTGyT$HL1IMEWhHL=ha9Ypf9_qTH#JeX*GI^>`NHssJ} zG}imczQ?oGuu-OD=f8Y|QJ~QI?0d%yt_|00JIR`jq+g;e{A~jNe!gmyG01*w@B9Uq z%lolqO}pmfV`g<@5>}(JsCP~d>9f33j-3*4-mx$)B9wzb5u5pJU%8Yu1pVZ>{PSaO zd>YR?-DfZjKU=RfR6%=aJ_`S8rw80prbHw^y0hlSu9=Gvqtcmt>j_tf4 zbmBL_W+IQFW5OA$l3S9%PtNXkSjUG=NlKxG+Pirx2~--3v`s>y2?P`LxM9d{k}YWh z9pYEO*Wyr%xyFv1s7EmkBjm3|j2vMRC>U`5=b2kTfI@iGhj)4}l>9d>DH*+IY8{Hr z%J?pP5FUC_KvcghFlyU)RS!1X3t!sLPui)tJK!cL75G8f-_5+y&&s^&r7PRVMeh(% zkRUpiu}f{9Vl1XEXHslq)+#^|C+b7MQ~B5{ z;25B9@kXzClumPwdd*qz)$xU-Y%bMGY!r!E*yky@8mD}cHtBcz69g;bUUxm4hOD@r ziLa2K#wk&CA11DNaD;VG-r0KqU39T;6%uM_wJw8c2a+RKdXH)NuiR&iwVg2pk@H|X zODR|6@}iG7ldgM(cYH7WD4J*Yaq;%^5AJz#$p+sRD!dKLqMn52*<_j0-aY=b5Wjib%kKst zS^DRkHne3sd^|P!;fg;Og0Huc^F}|l=!lrkLi3~1A`2V8TZfKe;gQc$WrIxuH;QWJ zQx@d`9;-K5obhUJf1ArS=JV}!!uRiX5MsvCf)+v;soMnKuz>V}Q*1icyY9FhNi=u) zZXQeyT$XJ4v6wFE0rvBdhAvYX%=EFqlf6G3yI?^9WLpr`^~cDRW=A)#YQvdJ!WNP~ z%YwtxHo#Ot|MFgn>o^q<4|w-zsHJO_Hxhmjf8f6`2AqB_-lk}@(f|%dxa8&SZTx>xOS45%R|{NsDM z(C#_pSe=+5M?>|*+Dsxka#gzrdI4%xUquK5^n&&6?9OhbZsBtG z5WtpIlhN^uR0DUpxse8U#rSwQ1zNzDJ>9JBoUm@gXC}xF{{x;WPX3HT6H$KbCTay8ZS()59r*Awf9TQnaby#knUQhcR z7!oRV32r1?Xk#{9a-;bE6kQy8RYSbM2zq#c{^6(<=%BPuG{&E}jprg4H6n zek2VWJb3ZXj?QrBLc>>;;?U>x)~n*b(flsMypc$&94*@f>N^U%Eul^WVQmrn2kN62 z4{?YA%<)rOtNnb zo1Ke38POc&Aoy0oPoQJ*H^ffIP9lFOPCB_7qf!IR!#e8ywnT!fl%-IatGo$s8s2Do z*icwfs3w#A(^$1yT>BVpz>w)1|$CBvMBHKlV45b^&d(y@7^B{E=Q?X}BZuZu!lT9S2(TsHNB> zW;!WyZI1dg_tjhHPrjg8MK8INs8wTffj-L25yl96;IRcLPkPYgJ#d@QSC@bvW*j*? z(XBW=6&sWSx8c<_tFE%xN$Spl2@x*>YpB$D#^bHxWLYXc`%aWp+kEytp_9Z{K3vZHwbNyQ*D1{09mt;f zjjcvM%ug}&)s*&3!3~Pk_zC#&dUhI3Y~+6Eu5T0M)MX26%fOSy^*{W5-MDj`I)GQJ z-&UF;O8DZk@g!31(zT=WZ%2q1063ya(%`YuhyOwtSgALMWs*8FlO`|fJBq1Q-wnw8 zfb|W(mz5M?1JR%dNxmp=UOP8s>j>gZy%OJBjV(#33oQI{(78otLEO&z)I3}bKBPnG zRGP~xRx3;i?+v|R_gap8VUyr}R)irTOWtR6fxK34R!NW2#QG6wGcZ#K;sW_-BRdZ6 z!-nWdc0L|7ELSDyEc>$6;XfgRFo*!BPhFr-mpz)g0*~s0(dpE@Gu5sZlvhn-;hKh0?!5;>&Q|%Gl;$8Bs7*2;j%>2KC}5~pDQL@HWSoIp^V)Lj#7~Z>$7=Nkl5)z})Lw-ah^kL?=SgO8jcvf?nJPCg z7j1B9HU*-aU#C_yn;(YX52sZbkKhh6rbms`3I|zQ%HfllgK~@rf&^$oon>iT zyLKs$VGZU6x6hq)PVn8nbcK2?VMq`BGkZOGKa;^gSfpIOAwXM|m{SvIL-VBVhu*Ov z?@kli??7qluNR7c7cHyboK-_UE%%xEn*)F5aI(C331<;ki2ruXLr1K4f;S2MV`q0wnj8SRKXHvswl2G7|1A z#B1g9z zdcleC#nLdBf=*B^-LVO_4`(6iwd#k>#5j2EO?QQ0&aRG91tki0nr^B6l4t`?#Ku^? z={{R_C*N~TX|w3rvFq$1A_$s_o;bod-;c$}ADmGhB6l}3iidbB@=B!d<(rNla7H@YmEWhN{QL=H)(@{kx@|9sQ2$ zQD^n#u!-{Wkk;4bFAmnJ1%Q?Kd3aQ9^i`jYG(tT6tUtfPp` zN+`hL+j(q%w=tD<{}MyrpXd)hzPtHzxQIq^Sz&zj;++CjA3xZ(*4wyLROq+2 zc#P@ZvjRFfxoMK$%wdLA(hiIDX~X0%q8J0Xdv}o#!6`k6sDjw+Souu0t{C+DZfN+I zoUJBuQsLuq0gp(wHO~u2L65zz{KeZ@)bsPW2sGNz6T_oJo8kL3M|g(u>jwjS-m;r$ zm4B6?5Y72ZU=S+;s6G3eX+aj0fV4xKzxRmd&*X~woWC#guh0Ik+`b#q9GzGsD5&HyBxv;B1@0VWSa?}tS^SkI%q>+!pKovHmU<~Sosp0ZD!a#BZ ziN|x=$!eo!S5tVlQ?Vzr>hZ_7F+!(@)29OpVpM7Nbq5?AM;V;lHT-tmcAA)2+|a#p z?nNtqH_|9v^l(lV<$cs?mWkjaR>#I14^kZBF6i;@e2{VI0hBgoe$Kg-Db_*xVvj>x zmkLaKZtTD^x!xSX$+b#3?HhHZ^piZku`qI3eMy9IuX5(|reW4H+7Y`bBZJy8!$L2(>c*hBv~ZrPiWC;R ztXl;!oilw3lbUt?j2~pQcuSWlwiPo+3xit!FR76W}UwjbeXrBt9K%uR3^4d ze95n%D15WCU~;sICqD-gzwWQ2Xo5Q;{&PC@_XtCi3Bb zD+;i4q^eM=nDINP0ix(6r0+{^OmqzIrLV!NJ@?{J^bX^&yZZ@*c0qZkPJr^W3FwarAR>=p*OeLnn8<1z4K?5MN_>=R2Ms zJL%76kz4~_bb|={twrN&ND*UA%@3yW%G!5*NW_2xpJKh&|f_O&0`{A zset_HwcQ)Bbc8~nVr~tvR+Lp1sr|)X7kvZvjPbJ`52KM@0rLQ4gWgRa7parIH2mT5 z}ytj}rGh)1~`Q=p)fg0*$ zbH~SH-(#1)qVaVbxCGoZc1+rse!NQ_nwIc+;$hMEhu8ZD@oiEGz{l24BrjcA9AYBnTIxHvhy`TA~Ce}tZ*`MX`a6uMHS>kqH3Mq^tAo?wBT-6F#U}AzMeC zR-(d!!uj*LAp6eKk1hER34h4DH@?5^;loDbvffc&XjhI9O~kq=r|g^2e}}nfDbHVe z@IO6K%~oGfULB}J_X|dHhPps^47i`3>?87DnqqKxD2q^F$+C2uk;6`6TfLlQ^`j%@ zA7-piID94Z${l+)^}7j#ct%|27SP(1uAH;ECzHUnU2yc9KgAWu^5NA|- zNuepyCoU8uQ0CC49064T_ZdK(IH^7ypd$Z{E2*?=4S6Uhw-0POiHV8QUeCUs&P9OR zB-#MB&jqLPOUPseohG@}couTJUeNkTY-tzV|L~pmBP+@-;D(2G^peP1zVy7B0jrX1 zCSk+mg)7D#A={-t=u3_Z>wBGP3q)?wF_n+KPlTLUl;@bU#Bdcwdp;@>qKbe$fJ`zp zFd?jjn;dsfhK_{(jE?z7&o?vwz}D!R^t37d_13!J7h|FqKe~TAKE22^+r4AR^>Qs; zW4*(Q-Nc}Kr?W829J=-w6x#izUDoVKt^)-VgptNVq%%`ZOiHY+(gROENc+!N#$s|) zvLPsmKc}uIzE4N-U}|N;5i3rR#fw+&9CE%ordl`&6>HXbGVPS&34*x^J2a{B@uu27 z$4Pr2@yJFU7Jyt;ajg$BVusSXpMS|*afAbKD|9Ov&7&{*I_7`*)3O_g+*)%t*eLjJug zk78V(g+Db%_}c=FfJo!qMq$>b%Eg|mPoG?8X1a8()m*ArdfH(tr?47uUEWFvF!UiS zD;Wxfh!5ioZVI99a~ zyXQxfJHY8PxvNIvQ!k}420J>C3=~| z*)2pEhU_**$He2jH;0RPvFx1LSI*2GQ9(tV;J`vo;&OnkF`A+7rA@-KBinGX=M)kq z)3^QMkx7(n*Yv-ZG9CUbytSIAR9`rBJ8DgV>G|}5r7Wc&03-#HmX6{9eFy}oK>3M= zvyO!pp5xQ*756ysdQsR`TgEOS+LQDf+S~K{+XMbLa&qsXFt&xkla(7W@@!|)%uq}A zh0!+xm+Ci}X%b#?e3UXyhn?h?drn^($#tTdH(vsibI*)TiY(2!Cz@1U#0UD@Dqf%^ zyjOljd8&ZgKC6jP(;pJjYjspwGoz8}GInm0-FBu{5{q&4vDaIgdsH31x7B4!oy`8^ z-s1pF8u9zfiUT8VX@`kQ4bM=Cn(-?Uq#)PckQTu1?2I~4-1i}C2tV_0AP>E$-^})n zM6Ex-ZHfhM^C=EY9?p56In^K*G5#ty1LqLCk!kpf)0iJ z3Gz;yUP}YHzxTrH=Pv<{gaAMcq&BAyW#UZ;YhyZ>w0JxAPwA}< zCH4OouYiXs<2JF{jR@qS*&P##6CG;>S;J3528~sQ zjrz;T(aD;S)x)$Yn(FPhI8)>OXQa_++QT_yjjR7ec{Kyr6@Q)qZ(Vw?WC`Q-Kt`^A zaL#Yz^}R1~+{6vPp=osWS>=aK>0JRYj4wSGXyu(aWabbXlxe|&uX)Zxu5du#yDD|O zl7X;3+?=*B5ixtVm(y3)uj1wT6^JvdUmD2LoMRY_#L0=3*y(cA^X1_}=hl_sSyYtz z&8+GzrjXt!rq14ncr_S){l>xVk4m~}4^ow%%8oi|bF1Ee=F7fftkp!XUPI~$6UOa6 z(GCjVy%@Isz|rLKldL`ds7gsSCA|xI%?Zx(fV2*6`by&UAHfYEs0#^LjRwZSldsF% z4nN-`w~X z67gN__8;#Edd*awn)ROi!d@$qA%$*ZETwNUE0uR17(`wk%?GANS@}R@i;?mjv+O?< zwyV7bR|zerQHy0kzl1-;zloDr8H|rZH_&#ec7}GexV2K!$q4f*uyKvYG+QhQ?EP$w zLv3ebPclCt8{|Yy*;EH+)g=!_A*Jn9N{yP*4e3mSEFNLYfeXH*&J216mn;@*`gOvX zvnfZAYA0=a|HU2xgdExBhs~Qq8Q-XXx}>>Cn-284=5x7qo_{zh&u6;x*CD_QolCfU z|LE@nDsYdP>^1%g88$vRGi`eYyZBKK>PL_hI)m)nqB8Kdj+k64WrN9)~J| zV_GiZlf6-THQbX<(b|qXb{Vf+7cGc{b+Q>l`Df+D1g8T4fu~i3b*%W|EWk=S!)5N^ z{G`>CgU51da;N3oM;WI-BWad~^B*q(VV+B^4B(iwH;B^|aGansU+87-kfZ6N9znbb zF48?p*Tzh%f}XiZbaQCj$=P_thPKekw7SQ8ezAM^U<^xL^MD#@NC=&&Q}pPJFSgAq zz%stEyttpAY<Jg={_52iU3w=Ns6J6Rvz4KnK>&CDc4S zIyi0oXJWiZ!F66HdF6lb^^v2SojjfvgvZA7n2 z7h7A)n557m=$g{5hR`xO^=jHTmkC^a1E#QFG>%6tQ?HJ1oUYy^jGjkHq0~(9QVegK z*0W>Yq$u7v8N^hSly`ot>`b*$`Sol7$?Y|18DCqrh%4~F>vyLVk5oPP_~+|`RwVpL z_0;Xe^T`sR&r1*FI!QYrKEoAL%b$8_a4YY}mwSHu6~?{qHbG8ZzY@BsbsW)kYrfE( zb8*ayw)%qbo^#(5BumLTqPy_phpS$lH&WhlwtWE9j!kZF39j0@x_{eCX8W&hH^+b8 zfdD%TTl#Id^B+{FXzrcmW12q_sHZFZjer06KV9sz)_l$NcdyaJ2%zk;aoUD8i9-hc z^IusEt(F0LAi+PaoJk22sUJ|t#ElVl$A9V!%Vmj~j<233kAs@( z3>T}Ped?+MSFbd@ucE^U2v4MA@-3Q{+IimYjW+d;%P_!-smhXk&jwvdqnEJ(hvHj) zi!nFv9$`to8B_5l2$b0QHcp%dY=3o-nh)f)s1t~<8taKnq?togq0Tgq_lMB-muZ_C zOYvM`Bm7lk-aJ_iT=nh!wwlU$v6cd%Kdd_!xhlUTx@3T7j2UNSvJW3DP z?WVTX-U2SQStm=InF9{@wpF{MCn@+Zt|QU2BI(`n?Tid^@#;ZBWqV z;(iMSn$AiBkMRe7W%Xx^2HQU!(nmp+$!?zpEUOX86?6d|74C|AH6-M+ z-%&-CyS1YPrfG?q`^8vM(&SCTpUcs}ohR*Q@)hD1)yW0xD<8ZadM(@=pBSVmFxFp0 z>YuFL*rd)Ix4f_0s~D=c-`cYb z&9u6v-ten7m7!E->sPVfbi?*TVMR0M+^jn#tA+sdrD-tj%>aDG%;%dQg-bTt+V1z* z1O$h?0bj^yM;0FZHki1~_Q+jgqPqn$;6tg+FUdWY=pgZ$WMYc=;78D_K^(R;{oa&I zQH4afO(wfu5lHXu@7n=~*R&p!YGp?jfOWx!wpBkU7{>z@% z6Fg~d_^&qBtri;gmf_Mpz*fO_E4M%74=Tu$Scql#)6Ga8$-g`QBY#7Oa#P}hn9(6K zSb0cHVYexE@yN~k)gp-l>cuSFohZyZLX+MFoDj#4->jlZ8zxeiXPJYcxNHh`r6Q`2 zzKIx+Vt2##T*}(2dan1rIfGZ_LwCFye{DwB)BcbjJOgtz@O9GRG!H?HDwdLtG<;h* zx9EVTag)O5g14&!A8}OQfX|)ytd0mtYi+7M>#FvWuW%O|@CKj>ug$4i1<>(g(rzc1 zT-HFCkA{xo%)Rp7X;LvHV;hNXwO`4@zPNQ!nsMvs>Mg?BtBi-8He3)C=&1pxGB+7= zr*xJJBg^WVs#$a2B>Sb_zkcqemdi8K8ttAVmApB@e7^pj65ySd(~c$$hoxXT4{ zeF>9I?LX$c%`8jWuYdgHNMt@4P-QJ3Pu{;NxsuYRRNvKe0LJa==CV$wr960USX}M6lk}k@ix^EOyk6w>In>ofSLpPGep_oHF zbZ*-N_&FGS0AOi9i5EEZ!7n$|q5#?^wdT%?-2TB!n;#A77(HURmpSM=zD@6?f6&xq zWTh?fmw6p;6<|j{G`Pm7@VsEej<~pqTDdW9&&@JE#G@F+Y#$KI`z5@{bF^O-|cNgob;5%!%O)%U2bPY<$GETVe@AKlxff3O7-%WHU!R zdlCA4UV;;H%xgKT4@#UrLX7)vi^Hl%N|16JHS}JRmDTuhzKQr`th8HaQ-q&uQZ-rH z*S=fa*(yi5#<1T4lu|@-I(-)MDLI#ibm&werj#~Y@!1#1y{{u-5upx@G(URty{219FHh{S~TBf`8TuWD{@W z1EAQjPN#}@o%0H<8s+>L;&`9KCs-dRxjCFR0Hlt?WgNw6+s*wAx!@;aOr^A zRN4k5{j<1@#^(-|ZGW?6_-7^WsPx8ug}e02ca~`oO4i{n6YZ(9vvQGo{#F4q7XUTy zt3tVTrU`e~I=%iup`)-_TOXwR_&^w19K2MD-7z0+8D6fU_d1%WoAsQ)@1G~CDk|!D zNWlbLl-%*zG&t^w9jyZy!Xl76-M=wQtDlt{(k5SA(3;l-Ab44iFawnq%rmbo-4{N( z6fgm1n-T9xm4D}bbtqZy9NU%xFiC`#ys!SNKfCHHz2CXgz)Pv}9&K=v{9kzAX-KI5 z%ddWn*FUmIbeoU6u-ux1-b~Wg?X7_g^w~`hP=`QwhRPSW6(@4=7~$SjbX`}XRK~`l zz`nA2_KZar{#2bgcyumkga2@6`mz;e`y{tCsctUv1#H&$tXteJZMmj@vFL4WHL;rGR z&eSHj%2EMwa~no1s_9M4hFlkGlQl1iW`B`Oese)~k~+ZX1A_#1GAAuJO5zv@!rc7z>ku4Ipy(x{fx>w?Pc#lt)f^2{N{KhE%J1EL%^PY_O&4AtG zjb7nSggpCMx%c+R5oaJQ=dWOcqp!>NhpL`PRtFvUn$9XLY`rfqSvS?T{vFpKQ$@3b z+uh4JODXs1e!B~VVZ8@Dt&q~)DL4P;%Z!wVK~0^f&3p9WudIZGrOrZA+NQ#JEuS0R zUf_~mePsZ8tmsPl>&to7bdJEz=VNo(X)33QV$u?OF1x1{OWOWuHwT`yabbwCQdbeS z1wDA?If+S2?Bh4p!1|JM-L1}?ASnD#0OAjx9qe10#Wvu}R=s_gg>HyUKFm_`%cw1$ ze{GO+>6*VrKP=+qUU5-`RU-UY8y`V3v%^=&-1U z9cSu)Yx*yb*t$ae!?*%3s6V}?z_7291dhx|c zNxux)(m2PxCaRwj0h(fW*dowg3_@?{%riZpTfODy=qAHcOX1~IquR4vrn+8fk+BBo zU?v;_tmIIEj{N3;!|8)x?>P5qj%Kz?@b<|aE;8U&5_b++1(3-J5a^Lm)~6HTy9YqI zUms+a2s;Z)3-RE%ss%vsmSy?=ELR(`5Q}{$f`u>HmspR;yy z83g_EjT96oq6E8=)LfjEmrhtYNWr2`(q=i5jxrj~E?xM8%SqZrb0Vl;Db0M3poS~g z1;wG7!_Okv5dEoAMTOQCO5q`>Uc#q`Tj3Y?dV3{-#f8(_?8Pm@QJ*~ajbgJL-mJmW zlieE-AlfK1F{SoSg=+P~!fKHep8CjTxxJRw&uvO7!Wua?GrmBa&I?jbcI%;&%=F$( zdlw$|({W+*>i%ZwyDGc8J>wn*N7EoCM2Ar_g zk5`!fGtKOOv(3n_uI6oxuk#7eB#MofZ#&jyW%fnC7mq#nnAyyH>TB9!`$I{4jU$a) z&{cun)EC6$2&5baup8}R(pk&^%DGFoQXN8dd14ggyHNoT0H{|fI@Q%0>y1{PA^i&Y z?kIEJiBl1L^7GSri5k*fxiR*{r%Mi}#eR?B4@h>gdZA#reRkm3| z67Ou4^OzRzop=eC(XUTcdW(4w&ZAfRV)7sdRH2$O4)0j3L$V63Yo97p8cOmY_B{c{ z*VyyUPN^RlxN_`Ad4s>}G+Z%Zg)1j;rUmx4_VvosWhB~L*lYC{`1R}8;aGe+!`mbk zq$h7FRMjSo${P4)R|QrLBrK@Bx%TXkhoenI9S)y8UTn2_967VZH6o?8oba3-Hu^w$ zAIJuv_i5UPU%WQNB9S{2`lM(6tG`1UIMby#w3spJ{(Fa~bOJe#Bwsl$WS6{rv}Byk z*)sPB4{H!kiTry*xfByhrM?&gmT*d;u{HqjEGAJ@zgz!Th5g@vygwyH#d3b8B(clf z(cbgj#cnen+(tEv62{*fuaUD8+$y!~O9?$m+UC_WUP$n_&!dzSYiJI`ian)z$2EL8J6?{F46T~#=wi5)~0nZVT6a?mBE zH8WCMTwARG`?+18^jk6VWhN)QdH)$`YuQ8Sbk~VL)PP>l1=BAD{Fdz0-dLk=UdT%V> zP$UmUW(R7?$3d?v&k+1`!o$XjtqOK#w&^;tQa<$X)n_i25uX4nmq|MOWTM=2;Weu% zkE&NC=V(c!%S=P9%T#HWm}O<&uXI__j<=qTI?Q{?MulO^TSpM=Eyc+heogMO7}C*vm&qq|#EI zEgRoM2hR~7V2DDyu4c_l<^qXDKI7cG0%K)P!~r}7z@-ME;Jx)IN>$zm(}zX9hl9GG zj;G|;53$w2qOQ?jmo>)$)H~r<1j?;K0)u2Yv-ni4$q^;DXXJmjlZ^%4CFt%)0)GcA zjOqj!?y?t=@ni^X?=UVJf#(uWti(k7ub?{5BsY zyXu_1v^~hbL?~Oh$#HkFT_)$n=S=(K>CU?*+WzCb0~$-kAXVn!dO6)BjR%HL9CA%d zR6HVWxWG+}F@@;S?y~P6n+o85Asp9=HDwg9w-wC328>7F+V3(;N(3YnPyEqGDZc}g|ti5evb&Cn4c9lW;$N@2wrz&{6!zP>{v$DrF{L(w-R^fVFTbiE7r~JXaB0d%x z;r*AJIxee!Zv(oT{{T<4fLe7j%ANmv&;GyNnTqxNOwj@JeL%1$84^_X_H$df!0GU9 z@5(4`qm93`twwZ{vvHA+G1{;FFno7Ll=Phc1lFwbPsE!r1K}uDN;rl<6g(VhK|Jhh zQt%k{!_x$!B#2ie@uTW#a=1*iTo#Pkgq2^64+UCT8kLAx=JI3*N;3R$A^dhr_CF}VX*cP?U zO6IS`+kZzi!51l6v!y$ruwL~KU>{}Ac`e0&Ra?dFrLc0u8Cii^4s_U8=B0%wJOr4K zw$0A4hqO0kB^o;yQ1woT{;5Fdv?fDmKPo1cZC`rxfRLinaWMU+&ia9GgNmz9(8Lc< zc;HE`gX~`~+`MZ~H~mqfm>Sm&AdE#v#i9Q*fTYMRsYsO!sHuee@Lx6a>DX`-^ho&} zYJ+}U+FjgAzy6IDTsP3o8L=bjyUf%TIHRt(|As2CH*@HuTemAH9jdy$AbL3K9JoEL z-Zg&2Nz*h6k{%}FA3{2UrnfwDDp(FJu&WvL*UDYbRBIxtoi?(wYEI~Les*|sElM%J z42p~!7;X2eSH8AjCg97uas;my^-7ZY+xw$sJ3xJBV7G<9PZ32G>#_b{yw?9a6a)+~ zIliJ-1cY1ihZVmir(YOSKWS;c3wX*szsBu+!`k&yK~E>*5XbG&RnFWZfJWaKyy4iW@f0$9>N#EW zDE1Eh?nhbYo(GbRtSwDfXMz^`SUcTj$^|=0Dh_B^Peoocd0%DUfpgwC z_20g)eR= z3nEHS*@%&<%*eznoKm#{5Uha>`9jsW?a_=L{C#_9v`4K%AJdtRADWr;PXqBG^%r$E zQ}9U^EYNFSMQ|cDPY^C+qiej$^P3y7D5H8yZsT?CLH_$NWCYg?^-o*j`FPMt9&VyO zw_*Dy&B>bMMMj&(M>EFfTIRALRVs8jO4NYtt4?%YShv{sM{r9}B@Djke9<4q)zWez zz9_;nf6&nJyEdGqZb-1otc5;bMq}niugFuECnwn z$rg+;`*{ML*dlN}Keva;P~~Cut=Z>hEp4aQ_r)$+HK+VrpVRuo^oaeE^tNmWDEq7u zC>G}m;*D=kGz%wIX_ceNt;U_+ig|eKYFU9du-!*~}+1OM_ufs1CTgUmy?QiSxkPQkj z5zyIe#!~pgEg+4OTmfqT1>fNvlb+PNE*05Ltry92)p!i~5ql8h7|?@|-` zAk+XWxk#vcZ>zIA9L%(##vRQc-52%mD4HaXCEP&2^VJo=^qA%gh5jBP{{621l8JdM z(b1X3rY-o^h_=ecDP2N_n5T6V{`I3VW*ASmKPQp8@%G{H^dqigA_^<78n2jXoI+r_ zsO!UpLG$pKkzb4$U_)A5Jy_FYzs_gjGu{xY(g>i+iwg7tL=3u+r1TKT?=A$e0_)}FdhBtV zw(r^gN__eA#|K}x#vZG`&{A)=9ZLSJ&;F)5(nrN=2pf;;rP)Z@&-5m5N~?(RB2LG3fKkjn_Lb|0%84G5Pj0=Me!y{pKgh^}uo~ECHA*E^j&6CN}{} zATk^nh#u_{StxjWAX#;Kgz9PU!Xb_io)*zIRY=t+drv=G8`*4B@ZK(aKB8Krz;vtPioh;VjaGJoU+bum`l@~{c?#Qt!^RcX|H%(@){@vWXcgB&OEr;K>DZ{^R zK&8dABXk0vq(o>tk()CZr!`Yloqm0zg-wzT^}rK&5;fL&6J*?UHM#}1*2HfDy`V3YeaZlt2fdXyGs*6ptH3GCW971K7`=99k!)?t#O(p|_OR_F$D z7ZzrPw9yfWpSCMvUgh^r$G%|JEdZAJy3{+H%kRoE!D7;@=aa=T9lwzuBVojn%7~Da zI+DI}yn|*!=IQJkI6Q;BCj&)zrgFVN-?A6>7ZSFY2IUdFMrv;fvX{!bj1c3a4`1T< z-=+yT^=}WQ4gd(EuJ3Umbv#thw-K1}DI0`A+D9MV{)6!iv<&gFBqb%+qu{@JS<9D0 zcKr*0zKC~$PT0jErY5c3zO6p>aQ5;e=G)rg61iUwh2h|VTNQ-ItDr=${%w0Sr`#!7 zy%pXYstr50vRIz7vK_qU@OCJhMv+5#K-r^kFM(^C_Mtg zWa{k5ehlKN-o!=Eyau?x6RI3j?liedlz!9#_Kc|n}4Ned?-fkGX& zTwA}FLT{^m%o8Qd_Nl|FZBh}jV)gi?cnfwmwcewZoVtGiJmh*r?d`bal3O(XmT;PwZ$eD;tO+{CkG=2U5+XQ@8vz6ceyf3HUKGvyo$vdxFh{1p z5%;BiahFZ^T+_d7Mp4ITI>4hha2V8n^U-tCj-b~tXpJQ9OMXPalRt$ttK}-l-ktIC zPWjY*>hNEcczEfG3dAd&Ad2OGM~J{XP^3=LAb!Pfh?o!V|E+y?Y9^TB2@pG&eq(gJ zF|dEu{rFh-0Xzi+^Fe8Zhx%oAtoxz!{ayj}3&?CFBVx(rsOQqDs;7N0dD_Bk{pyT( z(%;ps$8eIuXkT#IRGRW$kEL1Cki93M%CI$plyc_g1)Dy;JM=nAEY+%uM*st9#CZ5X zm5k%nj2EWEr9$Eqc?WCdyH|HsbSP3^w(XIT@5SC1yQ5KM9cU8xlruUyC-XYyLi)LX z7TLR=nP>&&mX=SPtu1Plk7XE_{(4S!8XJ9|=-umVY-_nhc5-34svuUasz+9Jr5b9j zzE*yBP8TAA7kiP@tF^gK7d1hxcPnmf)icZcC1O9OW5i0+0!_qX#1tbpsusAxs{IVc z`VYp+s}3OZEhD?6YzUKBUq`ett5R_N)5ZjTDX9S2nD+ST1#%!(yBB@rMXCRrF~>}|v>pO8DLz(AUR!T%nN zvbG0bO~2n4e365Am-W|Uto#0NXrBG+;f|)`zAT7XYE60((hwB?KTrSntN(c51Kr>9 zB@a%ec;o0Us}Y$yYX5;n({XoFR}niU3xTV#nJML%6X%+yCg9Gf){e|Bo-DuRg8G^# zbZ3jg)mkT`HmnP&1xDrg1knAcslsz)yg)_iY0zqU91zVJU z@7t(l)v%{(U$*a7iK^KJk5AjEy`~hle+_8vMv(usoZfBm2q#QfSUXq9Ht=h3B$JF* z;in1?Yafnysh(u407?TcaCie(`!s%O(S+yHyuIBuPo-Z+vrd9NrvtBRKq#TjXil*VOm$*2u; za~gc3{{d9j_JJGBZF2MUZ`SqQk3iobhh#s>p5ai>TTJsG$MsKJ>qy1FhgxucBQxAa z9-LRRuOF+8okEjSH7_TM_txcwT$$))bfLD1GyFKdib6AHC=3jD*j|sC&wZdN&?$=t z?0?EpcFKOL8v*6=9@p3lPQ(H^=i)|ap$D3bzmbTZ#EK2zEcR0@ZK=!p0*A@qQ^V~y z)h9D519CAw%X*sevApLVe$`*04YjpX=^;BKsXM_p% zuREDwi+9)5ba88+TFge4Ym9aj_MIPD)m-m?YTH>A`yAO6)A@oR@#mP)R+`G6MHzLA zx*INA;k`W{v)%m5=CNg^@R3mzoLuiSgjtpS z0+4Qg*8}zW1_x!$>g`JB5s`}=801pl(`1IVE>E;4pl)Vgv5nsiJl#H#|6VRGU*4kq zd!3}2$cT1Ljp>qJ`z=h=$g|1g>b=G2YM%4vu|d>wIQL0Qqm#(1lP@P53+X{NPks6i z2&c!Z)N0Cl9vwsHcrt|kG`&`D-W}L&pXK9!AQr|(=!)l(^(VJ!F@pfUSQNzpRhoY# z-(;dpdNxxacuw&+bo#1T5G^OzPZs4)O5}X3lt_UdsB&Kmj`Y=KfRnVJehmY;X>QB( ztM!MWn9s)d3i~Iuz~D&f#Tc%chI^I)rG0xgHp~;-5mr`#Hr>QF|LdTDGeADS#~xV| z@~6~#8y(rr-(UHgsr|QUHD|M{+kentni81I84SY+IL~6uX|#lHbPSk=2T+ zG4*wJCUAKRI!|S?`;f(QJD5#I9nL8`IP7T)(9OEHnhN8#KJrs3tfeJy z%vk+85L@dN@r|`k+Zm~{RRTKuL}pN1=~C*~9kK=o$`Hq$wTqS=k;2?u#)w*&`L?I{ zpZ{?VU;eOy&)~OaWcVFkAzS@0GtNgo7y0=xPp(!JdcW>a*l)VMq@7tICCzj&Nl8m> zB9T@1mvWtpD+cYieUNN%Rb^6FW+&V1cBIgJFc3VW?espybhvM0C?-koSf4UtD2rmT z#TvnX-ESH*@!F?m?F$b3fY*tkaEMwEmN$d*<-ny*@D!sKT4+?oi14W+FPI{hl-%Vc z9|qdK6fv<+_8VK5x4XHa=NzA(Dtg{he2AZ( z+!P{R((?@r_#1+{qOM0jXtelB&u(~rnEySDeTO~MzxUschFM=s{{Pp}klmw@ae0ID z?4Z>_zmJy5M{w{HB^jmp$2^^DSHag3k8E;IE0j%+Dj@3{tIERTQEX`@GGu{idWEb? zLBR}|Tqic0*iv8f+*Iw2EL?W3{qrvR#@w`ziO!)4RfY6wp556FV|Y(Pwa=z*Eb=1+ zxme;@Wg_Qu@yU9`bxg)S<`2qkWId%6rxSJF{V-qWV&#df>?Is)(@fFAt*Jv^5-H|P z50!#xklc8Zok=$!Kf>On!w+vrmUqvp`5U+rs6d1*aLQ%G7%Oh=~C z^C&DU#|G_~ zB%vvQp9AqL*5-Lv+NaFTt$Em@da*0pCkh}t8rpR^uql7u+NjQ}E-Ajwo;qW;Ixq0g z+^C(d|n3 z#as?k14S3Q<-&Y7Wgso*XkKh2yhC+^SVT}(gAC9Dmlk!7Rn&0G)H}4Y2!=i=1v(}-(DHnuj6nw(TAo(yZcd+hSAoIe#A`or5xHCyBTl&dOo`UBX__CO z-+{@E%;5yzYksg=aJw!Zt)-F`$ol709kf380X9lap;fSzSc+GddAPE=rFSpi60hr5 z;bIW0pdG>ct*-|<9FZTJeW@Q4mf#Br@J>fLb%ZB#k5js}h+u;6j{TjNTxN2g5Hax& zKQ}V|PlsJkpzkw`MgyG#g_T>B+qlogQmU>eoKXu}#V>Nbucs$gEnD|4`~2ea$;ME! zd*pfb=;1ON#&`kjb6+pd>l7Q`h$=rZ@8;9?^GPw+o9;?ZBEf6NwJuvlIQSq02|$Sw`xY)Yr~_FFslZF1eRWo#>aJgf-mPUk0- zd-DM0&Hdm5KOx^|=9GU2?(Z;y(e==@hx2a)38@8B#>Y1D^22IBTqD&#)Dl%aA~&=e zQ0hWx8F@s^E0E>l5Z|M#Dba16Kl)l+)+G2og$EvxzTYU!se_$Cq^3tXv!>mqxy%s8! zOybC(JX|bp6x+p$Sr3MGsTu>a#)J6bF`)DM=@4CA?kydDxaZCyEO&i>iAl3OHF8Jj+MxWMOR^*k{Em@TDgG){vwpzwg55ow74YGF34&JIewb=vll!E!U z=PWY@Pf>pRb*1pB2iT=a=i9qh@iEcLrJw#RN()IJUSOpPNv-;k;#;g$u_=tV+4O3l zxYE_0rtaHFrUK-m6R^Muo%T~!_yg+8H%)6nA`F)vF*$NKmc62J6#dAFUWGaZRPKKET2sdK zm*gGOmj53|`4|iR?T>5QDytYq>`#&BFJ$UGv#=>;D%~)8kWctGsCvYYaq2^@MYYs?4^=B^4=-W>5{_B zPZx5{NnlmeTz%M;+GP}^YjTtHx^$CgC(am@1GSFY2KHJHZ?u9%&A|Eh6;c;wxeNO_ zKw|I4Od1KzOH?~my8e1H_#J33!iy!O@+h>SM#~EXQvbdMPM^)v74_T zaf3fp#{^LXJ?;1CU=`VH@ow9#SF^Zyf^94Vxoq%FB|^r&B`-8tV+4b{LKUtzNPlwi zTC+U~ubv3$9#wgis$M`h5y4(8E^bImw0_4y^gbka*>C*VqMAZ zG(xvChNR`L-Nquh_JzC1w>;C3s|Hp9kR|z^$TW?~!lwwgE zFDF!~%ElkD3%^oUOLjdeXpNUj)g5(I|Axs2Z^k3{n9V50>7~@+&)T;?QvD%EC16Ap zg=FO_pI`f$h~*=|-1j+Oex3b%0<;txD$Ll&el7;mgd3LqhzC1&W>;;-;K&)X(kgQC zDxgCe)Rty}DNGEz|#GT7{v^F9~LFoiT85y@0HK{mc%9h8`e2DZv| z@jK6}tx^=xFgACD(XVsUC}^JSpBHa_Zmg$?G}B$DRf$9UN==qtZrhP{d-$+(ar)rW zTr@tKF|k>e_maW{hP$1{v%rUimNR^J+(gq7L3$ZM_)#Ix^vVC3J+4N){mjeXj&-Vd zhg5_&uV8HFo6Qt;$4<8ze0A@d%FU=}RyLRvq^r$_3{92{Fe9<4E`sf<>koRTW(TfF z)NR`lbv!+3LBX0>>oCaio2DLL4cC)c#?XRp03$hj*_jO5i0mp~@G%u`;C{Vs!A-vR zWsYyRi(~z(7$;&@U~(z)yGYn+`|jPq-MChXIfNn_@l_jY zgRuFE+25!Vz3g6i+a94(H97o7r}@OZWl#nUC&4#?Gv)i}4*Ud52@r}I@ch&(H?IDr zrFf^T6qWvZ=oc5@@5p$@j`&nLW+nKOb?2)(BPQ`$l%D*p2K!D;FiIDe_E6bRknm{M z?Gl*po>w0PNdD4J)y4OzE)~D*HmHLt!!3_&^wj24cp|8PQLK%RnpfUh z^QW>}DSRd$nlP`f6E$;isQgQ{>d^)`D;zEGyj1V8w zw(&1uh{-(VwXb&y*hQAYp68FGU!x%FS$#;{#Kr!HZ+;%VtQJc>)6S#ep5X%qC~jd2 z!P-;e{oyd^#=qZ38d2q#8Nzx0Fwp>m8*&rr0~V z{q~<;>R*5Q>(`IXk0QF{30?XRdL7;rf@@hp3j>a=6z8-!x~=9r$3!CMP3ANA%6EZ0 z4!hvEuzfO{%SZ_#JQ^1-hkqWM=-A3#hI}PO#S;r^tZ`H2=*58{NAaj_;z^-txr}-| z{kegjA`zSMMg$^0;i(0kH-lVWuf*wWGgi`qaLLzq+Ao&8^gMyVN9*3M9{S)%b;8z` zf#I-#>&Nb6x3hQ9dOJk`T0W~1i%#`v$I4LV5d_h*5WV9^1~b)Px0Q@}recP!Yk(!e z_1P=vbpKXTwG9D3GB`EZP`t_J=Qre7lE9?+FhZ*H%iz9jz-m(b$ym;%5jF~9~* z*_F#}zQHlnP8;}Wo8Hze`#baSf+yqG_tSfm+2}az|4ke zp~0HSHF{JSb7`v9#MHLD@I+c{?|eBXvf9ZGAjMJ~@(&8G9K7ax;{DbRl{FZ&e+cUt_tI{Y4 z3!Pyk5{lviGC?kJWf(WHxeSseztki~f`Q7|M>0;CN=v2Em9;bLP&4??#x6R-ff#iP zx(e<4RklaJnA8uuV%#T!c5s4TKKggQO9SlSt9UjZ_VW{9@hf+OeUnYq?Cg5Nv&7+n z<6NQ2A-^Si;zcW_qh0Jfm2D`UeFwfr5%JlFzb>sd=#v#4LcZGK;kzUol*#B;fX> zX+=C{WmYeZxR~6 z!CJqtqqr7I)IF`jDt_XuqK!V7 za5Bar5FaB}qaT5ziIy3Jarwl)C-;t}pO4J|qrXzSoB+W*#Z((wisFNL$Z5_J(0OPdrY?{08!28rzHWh4#0?92mSZkyRdpMF= zMfPMLEK+j_oEr8XXC2mIxm3gKPje}?6rL8hz~dv|^G{@)&e0OD zMH6&I#;-OHYj%4;EsKfZ)VNbSHtLj~h`lt_(4^CB*8aM14bXWBHI&K%{XE<)?CzC>2T^1J__Y-QC@N{qVLmsv-UAG;V<0e=$nExCx z{#LcSza5gv>AV}wGnOXrVA>k(R~EDX8xuie#-RHj-bwQqQiPJIi?99Mek|X;k&#on z;Fjk?UYDbkEt$u-9U|;-Gn-N2_T2_4x~}VS@{Z`~w zCmX*UprUg(E*#)!w(i)Oh&yq74{St)lT%TAaMJk?R2{f%9gSZ{8m@!w0zEfx15P6M<0Iz4;0MJmEL&9uiWzd%;0i)TqB2ft@!L?u^Zo_Ch-TVV&WY?G(3MCXP@soVJ_IbYte~SGa>yYk-1-p=hk7%VR(zt z4u@dcCxY9EXi;P)elCy)_mXJJg=ACw-QH;IhiN*Rpw-*$*Ujy6E4RaLsAq#7%ld!Vh@#lQ?u_ZwC=Ri+!{@Ea-z(dc4kruh-8l6cY$%Bv9FRi|Y>??ZLQjMB(|j^x z*!NsXY$W3xI+-d@I_wbQf_ahbSWl6YCT8(?{WXQuWU&LUTbV2TSd&L-aGK>dXh>Q& zqoIgnnKo_+7@SnQkJ{RHWO0X08$mO1FL$GaPebrwkB8-;9JN*-b#j_yDg~;&Mh=~o z1|$j_8ym~&{ffLJMec6SEOv&|6W-u?o|!&`xhyIYG0V&UW{&v5vp|~Ed{XNVTwi*F zDMF(t1lI8|;q6pT+l`h}uc8vY`xv1N;I#kiP6mEnU;MXl`0oN9NS7VU#pZw=}NXT*Fhil`qy$8Fg~ zP0)MSe!kA8_--#TBCBp|O_e9(kxBula(d;Lo_Tx<;Z^TOO5E=cabN4Zy<(Q2HZAYZ zGj(qK?DTdzajt~9R)wxay|2Gn`;$x)o~4V+@^YD9_pt%IX}?SncG=B5-n@KX27s}f z@75LnBl6qh(RGwZ+-@>MWc<#zK>65%a8=jO<>xjorBhDVO--7@?MnN0%6u~cr{R=* z%hOx4pt@HV4;v#2>Ry|v*deAjxBY8Dtp*w?+-?eF0^aWEnIj+2QVn3KeYwya86sx% z9MhOfGW`>wC&30$#MUm;ceA!gBWwZUY02h^lyos6836=Gc~&Pu@@KQEgxz308OMU+ z@CVg-U&Od(vUDMM19`uGN>erVWO8Oh1!%-<{>UeIqev}d()S^CyVUEx$C)O_a8pqu z4d)6ylSUwv5UP8}>;`sa2m+6k_DJv!lnS!Z)1Bl!9houD`uEiXJn@MrFkH81dHN_sr9LlO-=T;g?=4)&> z@b#SH@WKT@ >CB{02DnanTjk4XyYmLulL?;=)mS?Xc8NR=QfV+^m}OBn-OZa#J* zvz2i&dkFz5wA_2L0*&Rf@BShoZL6`IJagMlLWE;>7l>ww1kr!4@PEG&`IZ^5{GvOpagq|?HmSNtWo8sR$ zaaHxZIqAhPTaE5$BUxyuC#(f52~osTb!e1sX-9{!l9gq>;9dn z9SOau358XLsGUyboyai>*Teu#(yyL#QSz6gDyL!Cnh9%+q0~~=v6roee!KY*Et~n_ z;lOr+%VMC<-tO&{EAdFkVcfS7aV`cogItHM*{Wy1(o@(d{5GXXq^36aWLC)gjH>}#8Icio-d!Wnr}vvq&@<3qY$+ld2A^kE zw)axD=NjQjO52Z>Faa{P3?pK%G5KuKk?dm{=xdk(YQM3*9b;pGEEuzeK3g?|Kjphj ze$nWS--?U5gJ~g_+D=m`Z!2``p*3=L|uC;qa2lwYJ`JZeQ zgmY}t$C2FVf<*S4=a##xCXz1K00OZ3a~!8-bC&{bbe1W`ybKn4(sp z9@iLTwnwnto?+O0R2j;};}Y=+uK%cK?lm1J50Zo>Zs$=rFL|b-;lTDeZ&xc#l;Pj~ z4JPO_vBoA_5_%%$^2pC~kyvLg=8}9{+Pi9)vmvdUQVn0BnmKi*G8a2TAQ^nb7E=5( zHc^8wmHwo&Yg@YIq0~Cq}r(xZ;Go@x4* zm$+dZr{$*=dO{-j^WcfYmMD&#i?lK`#TB(&AnvP}Dcn-U%=(U>XN5IIN)PT39Ca<{ z@Dej7!6MW7>~u97?AI*lLfD418{2Mjtkpb+dGO$Zar7t2n`vNaD}Exy(CcrHBD*7u z!InaC8Ir;^=ZWRq9%EGh$fN+O1}VXDpj@@zO~=$99TuwCMXO3>&6PUeLHP1;we$yi zeVIBY^8@14PeeCQVik}^tfBe3?am>Jo(0ADbCbE$$y=g0!Y!ltQO40$x5vuNBp@V` zoPUGdS zo$J|saIpdd+{2MspD4qMbrCA7D1sTo!-?sQqV(?yD@Ep(2MVLo*-sHGSgVEh#TWh|gDDJ%kxkYJB>8Uul;QtLBo< zY;3ALvKz=ir|Z+j84epLJoilkCnUI2#)mQacbYY?d*7#qvHbmS6k;Hn`}v z#YA30mQNc0jz1BI@G^o&YPiy<7o8;ZTK%D51ta0hFo*D%HI(wJIA+D+Fob82?R2Nj zR)0d|%KFbRqNH;M$|?`4s>iRJdU0)2^>zs7uZzhm?pX*$kjib(e&arQooc73>~=)E zxqk3xnKo;<_95w^(D78OzwjYnS!o&h#pX+L>I)S;!Y0*H&8-=OzF0=8tJ?b0XTe`xHijL;z5UHW#~#I%ID#u-?=P=zTv_>=rwWLfQM>= z3_&P45PIb|2c84l!m7QlT>MN=5xc-vp_#*-kE&){*N6{^*SF(xAeUuN!Da3iH)(C| zjCPZC0V!j*?R&%85c{p_&mIYdtWxWq0@{klZ_UhtOV-DHy15fCSjNiM)P7U`FuIdo zDc9lMFV0DWCcrb>v2q*&Pa*I%r)aOpohk8D`jJ@4k*|6;>m=|3i6^}VWEpC@9zS8M zVvq1;HkiXN9#47`{~y6RgZ?w-9bGSqzE^=(jkHqfa>f&KzTv_A0wQKEF}6-SKjkwX^M~?GMxLj3$gteLhjILXMv3)j*BI1k+3x zwf1M9Y-RSV@#z$M{n-|aYQz*3x0L^)hKWGGeX5N)uZGu8=uY5k-dSE={0DAirk+6_ zLt}3Qi%kP3o6UjnLH}%GCo4L}B$85u$!GNewKVLqbwv)~IG$LzLT>)$Uw(*vHlrB< zqe_0w*_q+7X2jv+ z)lD`f*_^hp;uJ`i!j=@rXFWekP39;aB~=x@;XK{bP!k#LeIkp8F(C(d8p<4vqZ4_q z%yp1opGgE~ENpf`2qANKUXc3wjcTW6Y)GUB^HB0jw-ovl9&+{vd9?T~Ou28J@+#U< z?L)ZTBwBj*4;p)jzWz@i>UU&Elit%yQVHWHmaz+==fn}zGG}>D&i8W3Ma-4|dToPw zf)^)sJZdnxfgKbnt~y{>71CXIGHudPW5`%BlXKdgbLH~k)Zx2k26*^R zG)lc!^;9#lck(7}Z)H9y8813dyyrFAlJ`b(Gx=%Eslh4jdQ%>kMP8^0P+Dfo7nSc! z3ri(5r|wf3PCRdEfDCvQ+G;}x7fZ2bfkh9sga3#tEce$YLfwt>qu#9 zF8dH|pb1i2FQoIWty$ngK%uMUqW^;6g5t>Tb=*Xbc_V&f`S~rja)ioJ{^6>2+fgIx z*1F1{UTcI&q&*3r3%()xA^F1AZbfU*L1fI+>$q+G7O1^3d@J5gnysF-8y(#DdMCJC zwxtKTW4csYK^U`0cMdH>UvYlh%~j2QRgK|RVe;~(y;nPGE6I*{q8aY%p?D4ZWXC4a z`!;c3FLGm@r=%D}b?|~wSIagG*d9MV+ZmHT6Sajudf>d;t$@CIfPcwXKj1rm)uLIU ze@~*FNt^t2hrdQB$nEA7+J3;_`_7EMgxdGg0D`+d7ZB*u25sy;<6ZaFYV&SvH_Kr@ z{kx(43-jmazFz{b46NWb7W*NQ?81ksdOKO}y8E(NM|gAg+3|L*P`rjIN9_^5Gz1x| zJU$M({#cXiJ6805qp)1gt}qa6d} zv z__+YEE_o%Udg*1ct%rl0;N~@*DEIA)2#ni^K7A&xNXc}9077%!=0mN3V&1!!2~*D3 zPIryZ@}*>_VJy*RLY^U2UazqAE`b(Kis)%fl=E!Vpy0Y4aKW@+K0XdN8i{KyI^Unk z2b4>$n4!0>e+CVCpQWzI`&~i(k^!}@0~|zkW=GI&ykL&9+&Jt~1P zaUxu5^D(1*=w?_+rB=QMJ8FLgWgLAXz_+)nM310K%IG0y5|Pna5_?gWb4uk2VA)Fr znUunuXy+9NyVc{~wdW>>4ifASxdl9`Po{LR-yVQu#S=vDMN<{JmL-7yDwMFr3{C@Ui=Y*(?OATe*68s z!uKqj_LV`+h$Izg{7qZEr;|uBb7XhUf^GBA5j#bY%sF0N1VyNatq5w?=vI4G zlu?t@{ls_HIF+XvK^my!*Y%WdGDC!;B@WU80$b0nwh9-!Qw184K5rvn9Z~J+T*Hp> zaQO8VX7*e4bALp)3>4WY3w&a8Y*+o91G*flY}nyNxYPm&*PUu~n>}6$XuC?(vV_qx z9?;I)3tC;emc!djZ0$7|UW8?ye zMPrTO(SMOk2Nxk@3cBbi*E7o}qwtUuQ525u9w&?zNI3;y?qnP!I7H+bfh{-`#`Q#C z*I&UY-WR==3&i41`m51s9@nuk#Q-W__nbi2dFfcOcI3qHO=V*R?VMBNiZ45MvsDe{ zB{iqlUOwc?LeSK8hb1nMLD`6F4XG2UnQ^`V0`v$oT#uGEmPSJ}7WrAx!W{0=sewcb zm$a4b$viO84XuN|1kK#-H}b)oTWJJ>YE!ra76fY1=ncQ`Uq+zM-qlEP-JSMU#|u#lXSeeR!*0`u)!dRC zG$j(Z{{DnEnhvw|sKFCdnBGl5I(ccO3#9Iy?gt~17J~gF$$h`!#K*3iV1J)6yJxPS zBjl}oKw6CD$7khC?U+a*YmBHcVx@j%BqecPgWUB`vo7I4p*d?R}p1yNkBrYE(@A{Ckjs*Z~JfKb%Gx7 zbcR|w#u$~y9n+FrC1_i#&Dm><#Uhnw_$}yVAR8GAEia?0_p%{cuJLT0vHlm9y%0qD zwzM#>)uD9eb+OKeu_Nf@qsM<}fy*!Yh?kUb|IW71BRKw9Rx0vK!w2OUvH{zC!j-L&@*{KacuRGIJyJBU5mgWwP#tBCxr4MlU(;g|`a?JuWHA9|8W zd}Qw(S7`(YOJLlwuLk~3TFGA?s`K*kd69&<^hlA%1aB?MGW)#HXG8Pan(h6hKK3~6 zW2T%i8AudpTOx>~40R)g!!Hs+*9az)wx=ZfPyf2SC-)rj^$_Sa=O%M|9!iH#unfmV zq$!Xui8(UZijVL&HQ7>FucZyvu92NHI#6bK?#VPSzb|B-$()qoS+6Bla#uRjcEYl) zyrw6QV0^E(1vKJvT^t#7jU&4^1ef!5PNpv^1tPnIX5;a$99M1rig`hLPLOTEx_wlehNBaD1z4}F8d>{gRZ;utCLM&Vln3JNp zFyI;*75U~Ao7Wq@Rabzqc=Xb|98ye-R7YN*n`HUx_efa;GdB3)r@6QpCgIic0HEoR zuby@~_lyHJB}}dcX_}`dwf+mo4fvcMU=x%D`>W>7?= zdXuvSHf}@NvAxYeLAN7=DHX+L;)aPXKcSe@`IOpB)|!>Ij=|75mX$<@B;aiuFOsd2 zxu&()$fg)(R8SHEe@CAGmDmi2|KTNEvNIQ~?*qG_pQkj9p}GF5jjRb%^`4vxk~iP? zDBO>(Wt(6U_!Xp97=Mql>L*SFdM(CxJ_lA;rQ1LHwhSp(zPGMY<_cF6YD5;lubGq~ z!xuCWD`abpy$6zMiG9+#4g89QS^3x2HbBIu(Z?fO;twnC{J?}_Dwzd#y2>MN7yd1& zwz<4pYI0s9-__M(i(<^532)7@5|r&+?XcXpPYw*DFaRK$DfGT_ zrps5&tnkE%1|oG6^N|yEe&tjL^D|TSqdz!1Yjgk1NB6CcgJ6|tB+jp+Xk5nj!@hE5 zMu5{FD8;$B*8Q?(Z^cxRt)8O@&%*+20KdNq_+#JOcj?3lcI}NmbUP|L$oALsgTc?t z>e8P^k_(CYZ4&Rhl{`|MC27?6!_L*HHp|=M<8Zq+1Mmfl3<=)tMcb-$=*dB>4R$@W z4`GeZk~UMR`h96&_OVLy!dqcQi|iHMnohaY19nHK0pf7f%ID_QE1Pew)^s8X!oOaf z%i)b^wtC|}1i73ij2Ju9hJpLjNMf}Dqn;Cpx{|X#5rp?{2m0#bM0TSXb&cSwZw@G4 z&*41lBhOn@5+DRn!K$VpOPg}dzT0*SdcqwzP9oI~o=-kWUhjGU?f+Oz!zzJ3Z4OCT z-aRLVwmbJz(82Q%yxQ7LyJcaXhzh+v_3BJ^k?Nm#>?L<1T3^-^tj>CT zIumVmxfm#g7Za=KPeyqfgGB?azpSzK{wR0;i_OLPd5n6Dk(`tvofKW%PsWw?u29@7 zom_4K!i^6hxD3E`4=g|I^|`z}e+A?=zw4@iD_6zs0vW*dmhZwvC3bVd?AnN82*@R44udLxHIyJo?vPF1zn zu#j$je}jlK*30AD_U#la?>_-o6FNTNln;zQ0bW)}=SoVUZgB@_JbKJcnI!L!&ICcT z;NSc&aExLDxe;b$!E`r-F)xCR2?;d$ty$cp=f;00pI>({lJeskCaJ0(fxs{lHxj%<+*rpe<{RzZaLe8 zVyrJZ2iD5iS1^)k;LX4Au?!k0fAV2kokdKJx*XlqlXoTe$mKFVn@AJx_7)}O2q!6b zj#me;U^L4F6Xw^?M?W)s*S?aB1LLqpkrGE$Ah))Rx*A&trTf+r5B=LYbu zun8m^hU|Yn>DcR4q>v-$v#x^8@G@_;z&BfNd(AI3OfH`O@{8U(y%`_f(ca9Fedn^| z*j?rQ6rNpg@$4c)AjoS;{reV~hQnsT7<_~JE~!=Yu>Difr;i^oAJ>@K10zJ@WrQ#@;$As&{Pz zHbD#!P&$Mml$35z=@t=@?ieJbVJH!$VJK-Bkq$wIMpC-FJBMND8km4@`+Lth>pS23 z{_*k8ti_rIvuE$;dG7nVudrdLWSOvHgruFW$Qih(t=y$ zKV58N?vW7DY@cw3B}yCjL-}5@8@#pv!KPfCJ>opB8x~5M^b~L8YgTOc(gT$YcR5KwC+RJ6MYqe*`fdz=uS8Yloow@A>vDbRUlvS(e;JkW$!g|;Ei`fq zv*$)bOZ~hcKiR4N132Hiew{)EQvRLhsp6{ByyrZH@iTQAfu~VaiIgw7$I?cB%%~%4 ztFCa!_%i|Wd_aBj?14zvszliUM2LTkI2O6c2nK`U!BYpH0j~0Awoz~S7MvzO^57Vf~OhaNWdWgE)k)T zAwH4)q>VklbCf9dL!Y6zs%UZ+tUZg+!o0+VWl~fnp&4o14io%fyk23554%hO81z=;*+9((xjEr23wkdh*hn#8ybj3)mJ5F(pVH%Z_BY5 z58Dsjh_GvPP@Jvufq@3eEh6P1nF6l*sQ?!V%rPH3%}fKWM$fH&_48zLT#qTkHfRAm z9zsDQ`+kBt0o`v}`IAzZQnrn%)Pt!+Ug{VOwlNpgQ}G3@<5_Cs!Q$WEr7d2$N(Ig4 z<_GvM>(P^%Ql|;fMmNh1+F{X2W9N>?m-n4tb}(iti?$p!SPN8(5M9VED^L*r&VhK- z5c)x`wBEfj5c6Or6BrteJy&yKDFbrb7Y3g{)J#dLEqhMl zn_9g0B)(l%4ZSJfO9JKNe6{9IWeFdHT!s-l|1CwBSIo-{ydd4tFX+ck3n&y{ zHZ>4?4)jWeQFFo)QX77`JCoy%W4am9+NjM*xAShMG#0FNUU7X+zP_62< z)HST7+9biSk#Qyqd;;BgYXr*l=SDU3aiMtdfzI0wZXEG%H5 z?y{Tr(7LgO`u+&u)6_}=`C^X$LH|FHF;4N*ac=V^s#)V7Du%9y>sf{jr=RuNFC_HT z(=$`%V#b3bib|}PE-)>sBh$$mbUtF-#^o}T0)H$-vCe77e`M@{5al@+^7K&NFBc{QXCLS9yzNE5+4Q>4Uh<&(G%Gq8X?Y^wC1O z_(YPoG$OdScA3+OY|!>v#;4p&BLA*=L;(RmUoPdn+&~wW%RDh4!(=YOe*@ESXXkFY z4#iimNfy`sw8_IZY)h6la!-eS@uA{sDKnYp<_=*r9mDcgS8zH-QU7Bbb2_5FFJlxZ zT;nMEFo`iHf8Y>*_?j`6%4QRiZz6UQUeiyV^rKi9DCp@#7gu695UX)87n|rfx|SAb z8?6;JC0DI;=Xeb(YQsH0nw(q9IHuh9!o{TBGlV2{SHc6p%A?16^tfh)PUJy#lLw2$ z-c|2-#p>i6XYLwHZ^Vk(kj2)z4D<91z1_^b&iippie-L#pNW~wHMzsR(DUsSUSK%7 z-LH%;QgC!lRNP|mf;-D5zVmcvN0oT1AiznPH<;JA(a*_QN(4Y# z2*fph_oLJb-E6t(!&cVBdLx{-%iXXPXHMJ^qp+-CjTrkc@}SeElR0sv{momqnO+8;~JONerbjJ8!V*$D#R&7{kV zCZOdKH*HIH^ZOH9dwEx0>fevTzoy+=^fz_}di-D9u-Z5=GbyKhQR?AB?;lRkgn@7U zI$al3OFO$gVX~bc#p1o5dpYk@??0PsVzsf=B|Nh7v5;|Q^tNA0PExtRmCI6;be!#5 zg~ZPLjh$cacV-Dky>$5=@4ImV=mlI3O?ly6T}j|_a;IjzN4}nwN%}_Lj&}r6zUf+d zAGpMSdB5(#c-gOAAN!>`sogn?=C?XMc_FTA+r-aRgufSDC?rrCFpoh&@^_k&*b6R1 z0Cu)%;WC-ePoaKh5TDu~2xxim{X^N0B!dMwGYHLXR_OYZNMe;Gs!7FAxAx001@T+i z^ghZ~jG7bBv0W3EGF zwXno=O8yiPtD^`Cqf~cnIvto%Gel;h%GN165G&Vn-l>sX1m&pOY{2_(x5UpJo4l}J zs2n65kG=R)uqz??)S)yzG-OulxwB`BA?=s(!n$w~&CSBPoMVtNZt zaFf+1sJ@Wt&%CVut;^lz+Q<&0{L$1X_OSug;GCe4xzRBL2xaVhjYKOsGhIVmEXWze zu1?nq_)(#j=G&-CD!zc8h7gIe#chMSJi20QD++o<_suKQpD{bzSbP{?>;{HXa&%03 zPep(qb5+qzXOhF8s6jd^z0ft&2ObF$X}Yqv-J|HHAD)tn{dHY|g7#MBA_dCT@2a-t z7z}c6S*2Duzs(oc{mC0o13T6&`O5TsmKkw28Cz@2j((WD@=%FmpGls@(G9x#ut#ci z!o7HEVhmzZCR<3tzKRe@29?XRG+CNOP^X@C?!ROQTI3JYMf*Sm|#&J zoBck6V>jF8J#Or`CejlnZRhX0AUr{I#-Og$f&{*S@S)yN6)V0s~{1f!;zEZzy zpzPaCc|kV1oD>u4s3hBJyAO{hy!#Tl_dZEl^{%^ZeAE4=E%USgIQ&j4oq}e%=wYQl zP0KxmRcEzjPh4u7@L+FbkWDXO2u5=>DPrgNHVl;*Z(l$B$wCk*@EkkR8v4_I&Nl}Bxd$zD~#4=?IQm1-1i;o z#~Aux->;Yh+>{N~6y}xsd|eP%c)%%<;=m;ucU;DcW@Id8o!n7fa_*u>lEcow5Ke9F z^zXcCWaBG)vHVKmlR&{fP^jd|T$No3{q(!^PP1E@TJrP0?9Y&piJ}+DgAiZ{>!G2} zIm&c{m5Y!yo*r-!zvOh_u-MP4KAtc6LGkb&w)&6Yh;NdzJE}C{hFob6{Dyz; z+BHnej%t?Lc6BrL48Aq07u3K^Y~H_3BFF+&iY(RdrJ~enP9XOE8T+|Z&fO0VawZJ- zP#7lllYfK#RMA8id;Z6brL&Hbebs?5ZFJf!U()=5s?S79_$j@ZSsIh+SYNx}bMu2| zo($4%l8TbjAKhN3idA!0y|*-{`}Y6Vl1SX(DmXE3oq$ERn_N-L5Q#p;cRiLRBMsAB zKZXjr{`o#G+4#(1elgL5-u|G~$pZe(s{ZUpE3!8+@1*ErWf9-)Z18lpcDLdZAefF7 zE53o$pIQP0Qzi*Q_YU3utOUp?hKEj8~U3s4< ze$afSlSWysC`D#d5__DEFb%EmlswJHNlL{&QFgH_fhv_ar$2LASL$yJ1TlJ3Ca+$wxr+WAdLL2KVeo?qTDM{T2qM0PURyJllS;kE<7~Nj_p~yyzI+&O%#bAZ`r) z$eUR6F2qqhoFFM4aGy#69rkA`vUFY~-Lf{-Wm}LHJ&!78rbjVwXGEwn5SJ_ER@8}1 zGww;yC5*@iIFU_VN6d~`)DrhWKtDQzK!>xvv0jItt!Z_^krUnG+zq6pVeSvShK^Zp z#q9<3Mllm7;TvSOVGj6aIAIf0Z%%skUW+ZNv z6j2I)IAEin|9;N(x)kdqP{479A3pWj3$)4k_p$Y#zG{p1#`Lv@Umv`*Iw>q+FX{we zPh~yD50A0=&-S*xn^mp^H!DO}oG2?wHJ`*~%PQ}VYHf!oU^=w7ZRS~aK!;$S9{^oe zg#_P_W8(9=J5b?doR!h2GTv5}lK*M^(-yrfxJ0bw`s7mm?#ieR6{0?G1>xG9CD<2%VR8c6Y>ClzI z66PHyt@(oX>V~9G1WTr~-0S|K+kGWo)tNGRq9-H|FY__0UarwgXn&G9stem=%dd;R zm#0hkEPV=v9AloVV$A*KW z$2JGUt>D(rUpGS~Dltz6V5p24Mo=(R$#edKSVEJ=9uYVO-I=W`E( zF6*zZyjC@HJ1J}k6MMGVp7LjNCH)r3;=J}eUS7oE(ZU&ieR(%Uw=A>67#ZTujhZJ^ zXS%;<2yf*o3a%f33>@Otj(!d$+hI@_I#Y%PHCzqtmMITDl$0bXO$TuJkjoAkEiPT= zHb-qM36Iz z#*T8-l2HU(k*q1wcXNyS7*VLvs&c z&JazJ3E9A5OXMH<+si&~{8CzfDg`&R6{=$P117M znAWfUhIw?TKc$Y&ET!G|q`T|vwFBnJkoEDQR{_!@*VGz*d1uN$%3NA$d_C&^4!~G7 z<|8QkHOaf6yOAf6yY&Iy`$@52=Tz(L#zmmuAe-%QbY}Q8L`7S?t4fP(YaFRl%G0<-lIbsayVckpTWFYp2d2dpC zUfy0yb86BvS_~e8LoF5!Jv|h7!_aJN2yxyjUf$&c)n3vtl02Y-@MP&MPli=|O@x(M zl;);ap(g7aO?p@ALB#{llZ8H5>sQ*wHWN<{hqZUQ>W3Pgu&3yoI{!Mz{NFkRogIiMNPNasO}C`Ty)x z#CNt{Jo5SME>X>R_QhVqh0L#HV?u-0%J`(UO_jK!aw0!2N!l&U*d@n=zh{CSznZIw z-{RTe<7GvDrJ&hX83s2c*v}K0M_;ZL%W` zTOhwH3HN+XnY-$&z{ndgi_UsthKniumR>KUZx-XD>;2OXtuUpNU6J{rv~e~d?_yA5 zzXTcf3b?d%Kw<23j1IU$GlV5KuBUU@Jjo=#c)2okDj~Rni3nZ}@xqA#vF5ypc)FK{+sUK|gbGG9fKQGt`PH(ATE&Tg%Zo5KLGZ*W_ ze*vd_VB|*c&(`6M6_pU!ydSRA4o6#7c>h)g-6*$b!zc~cFIf7DK8Zh{&w^3k;xq|sp-7hGmn^3{DS`3TluvZuxPBj481-Sf!UD!z_62T$QTrW#Dc zkb7H7JCYl)`-(Gf5?pOIl+-%%r!-#c<_6`dfmze;lYdxnGgDw$ga8OkE4We&JIFAV zc*aP*J`y%}eH%um70MnZ`K`KnHX&3c5_H&bnD3N)0 zonvZ@`9!6vFD)VdA1>*dXPC(t=}Z;P=~$iHZ_$$7)1znkRba`dFHYD?M5#}aC0f|3 zdZOyGE$W-7OezPqV2YTZIU{FI_`L?yOsg*xS*-2*X+z9TVyW0&&6(8yP?O~=ayNn7 zoL`@qcHQGzHuH~6yOSuTE?VNOBzrQ&Sz7xee@CO)uS+9BsiCd6LwuprGM;1IY<~D{ z^~RpBpey8evLduPw0*N%%zr*5gP}v#cv05$i>$3KdN_rdtgX-erYD&KiA$ZQvSAm5 z&|`nAld<$B?TF|M`b<2*?oq7Q%j5Y<%a=~fWcz9;Vf%6)J4=0dftdOZ)7i%R^^!iR zIeK7va~>8```$3;@U^qW4hJgsST+a{UqL+u|{L zj8SQ*Ki8iV(PV0w7TZvp47c>?76Rxs2EsweK-WrL(;4FU>oLK!<>}xb(T^zURk8l_ z%^?_66#DMIj8^R9*kq4i{%12b&oFcnrVi*Kt0d#u);jw7QebFq0)uQ9eq{pMLGb0sXA zQHj^duZ}{BibiH@XiUvva@caP#hA7K2OkOleGa~N?q+*I>0yyMDm=v;F#h_ya9(K6 z8&mw0iKicCH2`Z4=`&bd^$L~w%XbuQCSA5)?iCJp<%;Rx^7>X9Lw~Klk|3=v7)5aLptBbmg_=wEZ&!)A7unX$yGvQwy0` z%QZ942UQhZbl*<7+)~(X8kDSuK*fn>;U*rm_=InkWiK`LAb!#cAr9gM!OtlFJql zc;vKh$Y0oKQ8gb%@FV+QO0MsW4^0De0c+X6TKNzxG=FXL17@y4uBiDQSvqSYFV{9J%RSXP@VVy7+Fb%3JIR85bYWeQ z)C*c_B6g?fhg?*AQF~be@+`qMBkpVZ&I`4~r&A9y1z4MjHeo#rLn;eaBO5EIl06PcKEmCkj-|@?PS;j$K!^&iH@5i1B5q8@u%z=XqV_!( zDTn{$^OCf<=Aoqo8)|9^8cgb%_-%c#iyUQ$s55efRNDIb_?BxS?-mJa7Ce0Nxg;sW z;#4(Q486@5O8MhO+Rz#gnd!%<_*< zxQw5hH5eB2lP)CPX-^XV*d$K?X9+>IQ>xJP#HtZ{Ezj7%?l}M~t9>21vWp{mztsv0 zz-Gf==A%hM^k8_uFF^Q#on5p|`$li^Np})VN}~Jj%#7B!Z1lQ~@1Z_$a|pUwjpE5k z!&Kk?_;1}i;H<@PeJ936Q~8XP>{*3>5`8yQKCv{IoKdWDI{imh6rS!-n;mTO0`fhH z&a&<11K*7-j)u6O9*42O=>1?UuaS3q3p6n#@1t>|+}z3Kza1AsT%{@l?<-ekJbOyy zZ~J{}`g?vPSCqPYlosy53}vQ!n5*Z%f|xW|vJ;;h#iN(@v1WNJYssFkiXUk4%gow5 zLY{}MfyaWQ&h9x@d-wXs8<9CkXnjsxcX-!MT^n7{XlEqM1**ojfn6JWGN8rMU-Vp_ zeJkKBs~ybD4*94sfy$@xd`7E;TH%<)HlA(QDgJ+G+k_W(WB=QCFY0XB!s5hvw|rT$aaWGExI75S*HVLT zwQ&NJ)Lq8(tg`we6%rNM1A5$(Uu~AMvB!S~O+Rl9S40WB^)*>F3b5tXy%pS$a~X@MHT+<0uDhtg)%XmdRx=%Wo$ zh$-EtuKN{H1ak(ze8RB;4#FXp>0uJ8a-d8ztuS;-1)o+}>lx1JCcC1H2d>IF zV2A6w|MmhfaB39#OZ2O2zC1|+9Wvrq81o*SY1icp1?&O-PBlSr$7GfXVrHDPBm@;;HasyX)o%`a40Oj#gQKS72!)$@IJn-vOes8!084301 z61!+_Matf1-*_fS+ zC7gJTpEm=H86zZ8gApzM9)|QM>}zUT!a~#uw;>*c`GdACBsTVRw%BlznS5nA2@n|u)m?9InI3eFM{kAA%7rl@39oY+mtX_;@$7@ZHH!7#&*RfEv#6m;OL+u47#d1XRJa< z(vZs8q|5OqylG)>h=zmhR-M~X??i3&w+^9Ob82P+!Zd@gGr|!4QekKRP-+~RTap%KY!HV5z&HtI0x?aHjKI~sZM-^O%Y~HwZFaV5B7Pt+ zGcAm#zVFj{!we>zdjqhT3$(&gz@OAlpj*pW+2agq5y$z9&;F4Dz_(W)culyK{R*m? zhsZ=sJ&`a8AXz`Q!POpu&(d+lT>$p7%P5sU3PiBQY!1K>2on-KuGOt8!!wVX;(6GU zx9RH6i!4|ogV1)!XZW1%yRI-Q8UQ7Z8;%b8h1IqsAR$hSNJ+9`=IzOX@+-qb-*e$B zi(&A-YG)+^$!%T-5x`{XCF(;~I8ce`E!qf1GN!$8SceBZ1GKxHg+ku~OEg(+6j)w~ zv(SipB!irXn8~KrXTGP{12#FCQ?tA=uQchyLQ+W-j@#qGgYS792?C$Cb&GkORB~#` zB42s3_%Hfz*rk_bFxfIHe_7}QjWT!f8%hARH*4)+ette37;TnbQt5a9dz7ho z>-`gC2k>_KFxdQjqJR0JrCsJ^g5!HhQK|Yp%h|f-fo7_8?X6mmqRBUBGlMsxpA{N%a&WeW4gHy5u&HkJVI&44kq}k~^AJj1} zZ3})tJO2sL;dnRG3p&^@q)s}{+wbpc6z|Bj*&XQen#E|(rDlD68irhl<|MrZXQG5Y}I(XSFX@tONGKj@zhR8E8 z%dMT+P=3OKgl`dw9^bcnRq=maNWZBnnqa~KpMHKzU|6^I%CfR2^kKy+9G(26EqlPV*PPzu;lndruRqX za0luQBhXy)fws@=ap3WXYTl}i4$6$`dG{iE1zGU<@&QUx;q6??n^w%kUHV!0@$=oz zv=mP1ZH3(_zT60Xiku<;y$U3LKR_n(ACb+Cm!C`|u-m%Lsh7B+tNDP_2(Y`ahe41O z)T`8sQHS?JJDcOd&N2H5OyV3>(Nuqcuva*s(5y*`sY&2#3o>!XyfrU z6COG~7dc3X7zqhA|2W-um?}B93SaXp)n8m!Rw}fT%?~5h*?&Kvy-R4435Ku56vHuF zA(~=>l7C_exsQ6KF;&J|DgH-}(^NYo~*9i0hJESLDg9BRtQVfG%rP@qH zmw0niBD~+Z?Rpq=Obqhy{bhYn#@2ox2{9az<1^vEyP{-BsLsscTp>@+AhP;a-1~{8y;n1XpgeYGm zKzABp5*v1y+FJPfpW*(n25cXc5F7t~%nO(y4Ddu2n- z6_Be#o)YPG-ukT{CtrDenHqsKsogQ&m5hif&dx``pCw(Ex;!llkisKjm*ClQSD%nm zH0>#l$#(ej*Lwq#d?7|P0&sj_?21Q7z-5g|E|5N(59A>BJAB>`xWXbEo6kOg6EpCu zYLbxtWP1n|Z#6k@K=h2Ow=L;UDl9a|hVG20QuH*=D|(DDW9PY(2#vg8UNk+S3HaV9 zF)xs7l-Bo$r?huisd+0_QO_4nevG*L2Cgv^+nu9{5s(2#PLQ`Bchl_b`=W+z~K?gthW1`#bAMGqQN(^KOut&jR-Md3TvoF0An(Uy#58~!9 zuqmt|4ZE1h1<>O>Ktk{Cy|4%^khohPJ;~C<<&i%`a0-X=yJKvM`;=u3p#BZw2H*wJz&dm#d9+Msf+vdv?gh}zFPPooA zv?7D$$<|p85jW&bfzY=m4{8eqKqjQhJFJ(99b;w|MExA8KHD%T#HaKps+R4{qzOCD zB%Y-TID5a=-Cn`(LnF8OUee3DCiuB}T&Aah_e!Y2=fAR8RTCs$e#iR>%`WQVeWWC` zs0aSfRkZNpMacJ<#1PoHnB2xMZ9+g$GK^gQhL^%9(*?gOlhxYV()M`ck;9tw{r7Qdry5+iBI3i7kzo;u*M(EsPh*pYnu^T9>5I@p= z&JobYZMO224An57X{J8L(urZ52Ha&x`fBhimLx&X;8*Z!I;zj)(xv_qgBoJ(w%`K3 z%3;M@#x*9b_`WMF?--)_{KBof$zBPP4U+*PSv1D-G(`p^-7Qt$JHoCUf<8743~B9z zw8|0y*zqy_p3PK!ozMdTMaxXhbF%2F?oQF+qy9e>Kh!knZ{B*A;9VNK#U93hRq;!h zFy8e3!ZwIGE-;jfqL4P8cJ5Zp3=mHCm(sinI2*j#Qnb3gW7#J{kkAuud|e)X;MDc?V0UocfLsfl#@p#Z)^(_R}{y;>=1(8xqX|=!Qn@^f#kv zBU4v`#l>efgDKeN za0cf(`S$VqAi^0n)gqCoUN3w1p5ljaXm{_-LxX1>HjHQb2J zV}6e}U)5mW7I|Wvw1g^hUzI1Vm{z*qi*=+|wOSBzV;Cvi6nl~7BKOYgmi0iYRhq!b zkh<_pyYWx>AK3U^FJKs%l20Z)S#_hVHtg3b^XqeC1MIS(#y zGR9ax1^a^z@yvuR0ZYeGT0@BBq+B{9jm}d))+s2%nYC|o$F2l2sj?3U8$ZnAfp0w{ zUiZctGJ=l^QGt>>zlk-q_k@imt%eb2jXYMydy3nji2Kgc39*V#qNTdK7TGLgY`CL> zvR2wc`i8S)9hRaSJQuwc6(Y|csl;EZB8)<1AD%IaoQgW_NnWgvt<10qU|YWml+WJD zR|ki4aK?2Ne*(i0n;=$|yYG{|=}WnEXCl9={oEW--LT2e;ITn+CarnWcS!+X?AQxa z-1(skaBq775k-8IQzTm?0hp^*yN)!}VR!_$^D@}&Eb?Ku@ccRXS&|bDN%3_~Yx_|j zju&mbAFt|jWsr%1Ep`gARFX)Yysq0WD*ikK@AokfeDbist)-M>-2!8XRy6I_&s$d7z2UIv2a^iQ=E_St&oM*iWy93(T z*r+ycY1O5Hk~7A-leI$InUL^A<{>LRa!h@=?`mdV}@PX9Z8-% zi8rZXLJ7yL$sP#*2zo)kn&6rM z>vih!_|0VbEB$AI_zGmM0-JG#-&eIauMTZlS$Ml&A{Auu8YS~z2UrdcmK=u zN9IFsL~a8ZE4d{<_QsA^vO*Z*nsFPvUr}0- zdLQVwT7280gnM-(y#56_klvVg!nH}2GKIFwvw^7ZjMD^qo@OyE-fH#z4#byNl~R5_ zjkq=yD8@;W*Wq4ZVxRQ2`rMfN-guk!{|B`ATcf%wep=f0l^sJzipD8^Pmg*t%!hgb4j;*uwUkLRW@3&$Q-qMYg1wfD}Hv)kP3@W39cnG)~a1KO=N3>L19MCJAO ziEZvO1rgV1`t{=1#6{~JSGSnd7aII~e`$V?#QzB+XYU1IS0}8I(fHid)HZmhhdpyx zr10gJNp7pYoqAI0 z`ssGxF4ncOi>y9GZW|Wrxy~rkQy94p2*HD!N=5$;W(DbQc^w4eUC!Ds@QE$Sn@d-{ zW~{Uz8gCpC7HnCKYNcvSUxn>iO!_5WFro^#^$Mi-0{Sej3<_MyZ}@Qkr5K9gE%wO% z>g-a9Z&-9j$7*YeO?bKVnd6-1N~2D8$`cn{-_z&l1VxvYu)o)RK5U&O*EP4`u`sZx zAfY@ZUV-S3-K}1jJlg=clTLDGdq$Gut+>ypaXy6BJFhHUC$k~z58z(}Nt6{=ebWyN z($5Z|AgiV(kntUwF6pdk>7ynFcOxE~-M&dk_pdxxY=YL*u9uOCW*n6JhLx1hPYcDL zrrwZu9wkTlsU;j6`s~L_hC)8ELi5ZWg-o??8HCJ}g&LG{TI2S&wJS(C#FAaJA1^7e z`2$|$>qJI$Qwr6!t?o=@HG1Hz1kchKM+b^tU00Rgoc$i9VRpJzPprH2YiB2cE379e%IH6B#;*wVYLmXmm-%*D$$+>&gAJy2{KYF&&oc!f{g*h-PN5~>38GsH zSUf@&k6HiEg7ZJWlm#u*CgY3|X~|7>$mWfWxn!fJ)H&>0&DD7?8NUOCeqWXmR zeQ`g5iQ|Ydp03zsMJJHAV~FJTajP_V2g6o6g|6p8oes+ym(vON4ApeF#~?f!GA)#) zzeoTk9aK_|L%Z5TyO_fdr(B&ud!Umj*bZ{HX35jN%&{7WGP#N?x9GHeAlzM*xmTJ> zX&Qx^6nHkS_o8cSB)h^-=hh=x(3M?zXW+P!_S02KwII|>w&J*Por@3e-c+eIhp}T* zn}GwphjE;f#t9q#cfqUQyS|w03n=;L(&EJgIt4p#(FWLmR9dUDUO%FB!ey~i{JC_A zYCffQllv}yI(v5L~0KCRQ)T%>kYh-ve>?RSy(&UQ{aL5>f3D4OJTpYu$xM-gd zhVDCl0s3`Y@jDH`|8!XmW1oct65bj0(<3ZaNWDTEe&AlC=U;p(KefX_xzoBXLOePV2%tARItyIzfV%G9YlBg&+AArFN}uMPBS znnJsb-Wm;4D%l<5AR@9B1rJ!iVtXID!7N=(yY(=vxdX&E5mO=iu61qpwT5|rf#%%^ zJ#zamG7X;*j4Etw!$sTO?cK{!(~z*cI_wsA?as9gnE5`Qz1D2^04BZdF@TYQo?5J+NzS z00?054;u5GeSfq>N`B^-nmI>_8GxUAZ-Ws~9b)eOsNlv|!0>7W#B}eUg5uc8#?Dkv z!t$!7jDLsU&x|_!sCF)MnlrE1)4)KJs&tA_J zpwRY-wMTXTSrz}sArkn);>j{?MpIZ1>8lc_P7E7oGjii5c$;kcd|fs*dx|{+n*CdJ zeb>jYyT)5;k*y5X%!?V>wdk{I#Fxf{vd$$7WIy_hdtx;d^612B6lwf?yR(T;V~3{l zi5aKV8ykpM9bu3dXuc+l2T0~k*_F^*%vIG*Db4%}^WFv@Ge^3b`MB5bS?AH4EZvy& zSO&jG`4+LP*Bx(8``f^k={t=3-q4o@b&kDUqcICIfwDe+24lWqFqx3D_qm}rRr>LB z^K1N%M~h2pcCU6DhZcJ>!J#t16%RjpxP1NgS>McBh^nbYcoY#5YXW~R_0-(rriFsX zsQ3=c3;{#HpUd#CGJ+z%nYi0{Lrzy9^;g_Oc#_Z*+RE3&Bu>PL-3`&(k^ihc!s|_I z0KYUR-D_0Sa=bg%!#v9S%E}k{;A&{^N?2?-Fytaom{ll;%zj|b3Sl&U9ZZ-a2>!7= zOC1Vh$z5`12x=W|p209E6FAOXI z=U%IK`?0m+>K>Y<_EaKU;o-OWkH(-yg0=NU4`R`Kzk3AAH6IzwFBCq+N< zu$oyrP9JWi#o(@_U?p6|m`3~x%%6i^-0j!Y-4(4`;Vd4xRdtbtakeKNkfpJyw}bi6^}H)H_3@WNDHaT#`n%l8H`KZLpC*4dEZy-@ z`=RZ8c1aoXH7m6XSUFMug+<9TAzW6Bz)1Z!hA=6CVp(q?CId2>*Mg4Yp=Mt@oP<^% zq@E5TV3ceyr0)n!ecdh=l??awU~wZMAF zcGh%&slG}1td=usskwQ1CPi58e@=sk1@t%6KK;*eP}Rnr^S{gn{_9u>e)VYy<-0~s z+qA!umbQMe$qsKiR7qcMMqd;g_GI%wrj@J$zSai#Hh+cte)L<{UfTVwK2$s?Z8h!r zicfK=-QCCESOarfId^*e1SaaT80?!Sxp%b4Q?u`m_sw{rCLMV8&{Lv)q*Z#QJ&b%~ z0n$9Vj&=Xf_z)9mQp1zFcWWK@=!C^i#+0=efwS@b-nIou?b$q z3;PR-xWsF&C1;iqlPOS*+FC@*n8C0U;bAi96065sB42VFuYM}wp>+zXth*V2HJ;0e zJY`Ss(w_(V@1|J)E~A!FrWXBG%4S^dd`Ux#lh>#6>xiq4HAYn6q93+^-9&Od4QUC} zX3hv+c*M&c`!a}NMzlTc{rfo}x8U7xH>A0S7HKEwSJ}nuR`G~W3xB9eop)%m-uKng zL!?aZ!5xpQXir0bM>jAW5k-D04UrtZHM<%J$<+KUIT*`tS+4nlkWmvWwz2!|N&J}J zq>oW?cCQ*Cx=8+&klr_by+#lE-+7a|iEpDeRI~;AhHo;2DME3z!v{r=Y1zLb%p@No zQo*ldjNg#)ahF9aNg6csZe(!gq{W3$Qc`T;taeVu%^(H3=Am5|2d9QreCiT`y%X%Q zRDX5>)kBJiPAKn#SgM-k29I_64sph<99sKdfjbSygP%o=*+?&5Q!+cNJHQ0NadfWz ze0kN?a;pMEqO!q$IOnEk5$#NOY8)44k3ImSe*g(M0v`HV^7}ROE`7}6l52nk9rweS z{WnL>b30YUSAbk{9l+Q)W5SG@EV`oMYta(DrN8&=G?l#k>HcM0P^9>YC?Vk7S@Qo^ zk;8P2uV3V)-_1vJO?AEdUQIK~>Au3UVsV=E(V2?UjF$MC7GDPEnzmR-Q(@{5TD)?o zZy}hm9JLD?n%g~Ve2}?+`b&0s3v&!#B({9&DPatgbYeUWjYk9u!V?Y;mroZc6t`ar z2g^xX_fypYq)STx2#nLK*z5*2VOEf0q#8EAp8fs?CEWPywx&V5y$89;Q|&ypZ-?Za zDCJy!POYr3VM6vtJZbRZmS9h|`0{JqQ_D=j>N)T`N2xC~@7|lJSRr;!L5QK)*IBVxs)&+1qHD#Ol@`&RvX*V}F{Mf8AK!N3V{hOGaz-Q2hSf-?WGcfEl|^R#_5a-pjTlYaGELzegV zRY}vV-DsgJyMe*9dYD-k1+n;MV$NyI6zBegs_=}LHh7{aS4>vwbt9RliJv=i@@JaZ z%MB)#$$&`hc}`#MV4Iaq>cXj`r`pu3O~yIuAGS5BP{#Q=qM>d`7o0ygdL zILP^d+^U;Qw@yJMf7RO6(F>M5otQADS{IeYom?i;>-Jcetvw zlMmd()ZXy67gqsi!n?D?TzJ`LLh^$*oHqa->nK1&MjLr=&e&`KxG71tUN04*>A)uTPLwy>{$fOc zX8)u_^zQ)-?6PlzK50gZy2#vRb{2Xf|L(u`-G5a(|9KhizH{J1Pn*!0)w=4_Yl$|At+sfgtRmR3?VI@ zLk=QJcjo|tbl1?`LpMX6Kl^$2K6~$V-sgOBvHUW+xaPjDUsi|Lq?43QtaRd}#5o$Y zHB#tf+6maFUJpKZBAOAiKmGBw^9YS9?(sh$`K7sM@Q39)mG>1_u2!>`S(Ug2-o3(4 zDTj4k7MH14<8|-FE>>ct&Bk3UGS#$YX{ypRd$PYJWGFZKQsX=%E3*&DvM01K#x<$y zb1ZGoCk*CO{pqY>2<5xzv-6_Gq4X?a4l4muOWgh`=er(j;yE4xvYfTO_2E-G`nu-^ z2Wc7CsgLK`rsjXjJiY{}Ycd{gQQdE^yh9>t9)xA+;k08TZY^HD|S8j$Z<39$Q~_$&IClk*_HKheMB{j8bO2ojL;gnPgj=lAFI{BOHz}1OQmB6=2^IR0 zTv7bM<394zH4l(nQ-YrP8tCy;g3x>=j`G^DETLpdcK<1wUEz|Q)2`Mm*o6-MC4Wa2 z6is=IHi+b1o%5=W1a5^Iw!^4GI^vXHk{V1_&fjD5l*+Gdb+i+KXeuo3NtrUOr&DEv zPH*Ty7n^d}-^la>y$|6bumtH|i;r@2aPT|Qms57S{2$J)bN4zu^~+H&>!&ykJBltI zzarL@hjcu$$Y>H!d~bYUZW!OaeSxO+O>nhsEEx)E18|;0ptrGTieJi-lFQh?pjhRp zzSrMpW8G12gH|@pI!hzPZ`^!8Hk{3Q^Z-Y$ZccSUa9aTOD7RXy+>*#xJtsW$p(~4! zkV;H{{u&=XSp5zY?+zE3OXSESPUmyXYPg*9I0W+Cy6Y9X8TNl8q|)askqGFsN%?== z!NA1PERaw~DAoYSLx@t_|GxQ{`ufl5G>};aqq&=p!yr!t$9xndwbTolb%fB8U^QUcwRW zZry9Cxd(>^%3_;f{J7N-!oY0BBx7mg(=zP5k!0<1vmWo8BZTL+-414E0p&!g4P-Ws zV@L_&0tFgYX-E!a3zTHy-q(s2a9t8GXeVuzIgVhwrueaN8OV>i{Xc3w~-4iIU~;vx|3;%{BJRD*%xdYd-dd%ol0LgF!#AUN_J> zv9uh}{`j+E%um_VCa;e4lJxeCXH?#3wU@LN<-7{}LXU9SH?QqvcD%(v1TQ!xzHT5J zJqA@`obKc^8Byy1;8^_M1ZX@Hlt_M;(@#PimFRkRYwUZzj20(;m z00E@eo1FIRo*5`KRu*J^2&p)e66crIEm=H*EQLMreDxFtgS|@^gZ={QaX=w47C(*p;qGSFS0ILt~-dbH%&LgI*r8Q zC&xSv%{Q0%a?Ab0rt#_pR3ipWw#wLMqQA!2=KEzv^xo|uJ4cY$wgb;CVpno6 zyH1qT^or4Z&s8wx7Ev;!wtZGiZp;37!9{-E#-n~nf6iQVEPwuk@@UcXj-Q`QWgs$L z6wx&~{w70>$Tv%p2i}ka`E53DO;W6K=b>K7FBVct(#FSCRvDx}90Q_##P5KsCToVH z;XS;uWSd-MZovqKwv;G|x2Ve7?vdoAY-4}&Sb0ytw%-lNE$D!zA`;xPzrKH02=GNe znr(h+5Tvn3?1pWQ+>wsaLheUQ92_v9RJ}T22^@V6G_xh>yG;ImFYC|vJ5q27w?|~r zpTuN9^sGQl`5R;Ikc!~uuUPBSFAuLBoA2XH#ByKmRHsuwkB8v;>z{#73SU61#Jp3S z$68P4NZH7L`TaqtPUi?~)*WajgeoZiE|aG;?~W?ucG`H)a=FUkt<7;=r6Uzh_K!1$ zM8XHiO;6;-imrL6H!AoadFB5-*Uv!r8JW>Q=TGV(IfxuiAv)kazbv1Ge1k(?rVM9G zz@g(<-$=>p6e2>RR-B1lFKwq$=(R$W1jnVQ0aZ$;yXcBVb~?#Lr&_jPjdDZ;0CT6s zK^7F9w5`=)q!>DJD>?sUG;ngr>XUtCPMsQj z3%Ri$8I)@vsv^y21N3t&PxceozkE2U(!&-Jg+0gJP_mE|&E3x!Z;{)5PTRDGpI7GZ^0&i8p>*)e8X?QBz?D!TBlzC98R@Zuw>`EZRBD1Rx-vf zqf zPu+e#thKB%Q5{{=wJ?A}k+V#Qrd%ck(gU|s=XLS7cB_HK3_L;hF?)Bs)bnyZ>gERG zqOl&1ChG`%`>;+w*|AyLd@I2-`640drNXKy1t3(IVA1F&KBe$SM#Lzj7po@y7T86r zgzmSQfo~;8S6g^McuV#2^)FF3J4Y@N3nAtv!Tk%5HWO;Q7`C3c_VFPrs@V8&dwjpC zh+mKH&T|09=*GTVE1nxZyQ&zm<1slZLB*qQS7_Q4p{L_KZpV}bGk=E7`T${|VH8`{ zgd}>iA?^l)3{Lb|^y1{XeP``l(1snNs6yco~8~WWrIj%HoS( zP&vI~_L2q>f@K?WFqE^lk4?5W76Sro;?XQ_OVhz^v(tUeJgCJxy{^jAz*_ajw$VQ#J4+k-mw5Z**E13kSRUxsA9w4;ffoxDYkI= z-cQgg%g{(+^ZCQoYcd2^73vqEdk)*TAG>HBG)Z zc1DiUIj%B3rI`<%{JTn_tv^Wo<{g&-y$jbCsza9W?j+ViCVz0x~J0oEC1;qgZ$rH?-y1~&+?}pH`8g; z41KbBu+?QaOdKuCBs@uY!hHz!8?&jgt&RlSi-8)#oa|>-nHakQ)VPCUyeoFQJN ztQN=)B2fzc{^g>M5sDTZkqbv>5rnqllz68S9ITzCoWx8ZdKG0|a)YgNMoyM7H$CTd z$)=dI6V_lQE$YJUT&_E>iilD&S5i{N5n7H9)+6I4bMYIYe_!i_Z}A}gDc6%Y$B19? zyw=jI)}%>2=G^EY!H|#H(sfMKt13uCj?3M8yZh#&GFtAKuj0$iAw6u>i2{oavS?De zSwDQ?*XcI)@?37|^%rX?efLLcFl5N0I9=u-=CmwQ45xeVqP5au?qnnjgs2ckc+}m~ zte_v<7I&mEv4sJ8?tKty*hw1+R%3B^y0ZhYD?77gO^t`$ESlN;hY1+>+Y11`L9+;f zwp@*KIoz8i-$2(^z(@8q|>K#?p zO`>qtiP1ac;!X9>Gx0TMHr=YYe=NpiGmmLln{f9f`k`mD=5~g+`>g~!PmX%2VZ59w zfggLXZ<`+w!~w&8M}OVm*a4hpbM7|aQ#WLEdQCU<& z)!T0##`m3Z^=MKQC^M*J>a|B6KR!O!iJ;{#T|CW|+xJ2pQbhm8PlOF?!~?ujwhiM> zi*w?WKI!(8p{z176tk}ma(+U<=0;%T6ZRt+ZL=F6pYdEeVvq3D_kRp^b&@)G`@Vr* z5l6nbF)}qG`3@zIc8iZERT#j3#{F)dpBLSumUOLzaWt*ml=QtI!&$@X19keq>v)bh zMZB2sw{%`|hO37x`nbee)|B2?2gCKQc1cB`07JJ$EDyEV2-!}OkS-~gKmHFjuuBsd zmEEqNK->h@HZ}eLnJwljKXoK;OD06F_FLIP7+3rV#I(>SD07v9D%)B2+B12@R*2*o z@J{5XNf|mT4cu${lSrj$Fvi%RJxbi&-HrLp1!diG(aSUNw1KBMQ)SbqRTx!dWq1t4 z@ASa8RxO^vCyZ403|&6_D?L5$RWn_e_zVnKpt0cp+^YZ2a{b?bgh%+?8Uz{fbBOi@ zGEjMS&^8GQa>1ZP^ROj(O60P$9zoqh_}a#4XEsQ<(@`{P^7{#OD0HP{&*s48J#67L zxZVJ{<9uj32SWPk2V+B^MX@eKa_!Sg!ukZOMLnhsVipZuiwo9*rNFkIXeZ{P1CMFzbtG z98rZHk6wiSUlSIa?i6kAiR0?D!Cxfweb4r&Hp#{A`Y}A{D{@1{--X`;9qe=C7DZX4 zxxqCR4f7-9!?vA~`iu=iW1>%KdO-WasDjUzorH0K7ju?*#l++*7|Xs^cnJ>_ZqFby zy^r4kvUm1{4hI1&H*Pk72^nMzteZB4%PT^sA{b3?z4jZ~M?|Ne2+RyNygt-%ni`m6 zHE0l(U_hKsS(yTi*+GHeI0**fgco3->IUNTtzMELUr0W}G@`*{rFdQbh9Oj75Ren4 zytLYoo<>$M2<;>YzQO8}^VKq8uKC}c-l!Wl{WYyB`}U@_K3(~AL}NIfRjbG{#}UT0?#b(6guch5Gjg`# zmM<0ucjqNZK zk!+Dv%oe&TU+&d|%t&9^sTVz@epX&2H79=IV1m0r|JC-mk2LH;uoJ?WZ)2h)$^;3WdmeqBJ?| zO)A^3epC)u>eC}5+`}hOzk4AV7;ID+&)^E?i+&{YfwVUhP;=J zQ7c1I=RoRo+vexd{1TDYpJHvFI{!ww@58&!zKj=W%W^Lk)-6accvR1OU3LM?-MY*i zvlYgHc?gjk5R$zzC`C}%rgNDd{veAB$V_g2DQ{70k4=?M=)gA0A)ZAB{wR@xxuQP} z#NHVO-_3j3xQOiuDm7tIXXwj2^v(tNK7W~CUh{deJvJB566D5w975DG1*5L7z(tJbUVh=z56k8*w&>ivSTtAxcTF+uMCaKJx(8VEId2it8Vt5<%rAH zGFH-8psN8;4sWY*+Ls`{nfK4sIslh)C!jD^?JTxh0Z0(O$lgMyHy4`D2Zj{q!==q$ zfZ8X&K`rR$uLw`5HFm|4gs1`8T}k@$=PjN4$*E#!-nLToiZjs37n(04{6DPt58V3< z?{17Ro=Y#$_|W{%`TXBo_di#0UT%ylPuVDTi$%!N`uGlM=f?=+qlTwE#z~9l5<-EXuK-ef{FsEIR}M z!{+$69q}j5z_8z9hZK!?LR%84Z68=KbuV}7(|eOe-vLmK`o-0ey$+79HF)~1<|H}) zR_yMzm#~9>ZyJy8>PK0uzMijDi>XD4#=nR{Q}F60Vl-w`dhWS*M~ue6)3)^AvOWU+UV9$%

|{P6?6SnoRecx#`Y^-Hi}2T}8Sql{c8c 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 xyOtd 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%0D;OzPpSf44Je+RNRd*R;P^=Gn>m}07WA4~}w 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ຠ$zS6z>{UY&&hp7?_!?KMqO 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%0A&+0ri{zlJ7@i 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 ^;{B!o`^srzI>ayF*rSNo8hjpLSd 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%0Dh=RJ!gW+^TopIF{9XNJLxw`*9 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 z zvGaz*<1&Gn!&Qftl)G8Wy2_|GMWI76z$Dd`K@K^wRr#ZO?S9>p599>RZUrM{i#$3l ziKo$QhI4@3#McR1{#Xq2P#5!{V7X?}jNT2q_$WBDH=sKc{-KFC=h@-#-9;&jC(w0x zXW_OSAX0z1GacY_+Upb^R4zHCV1ZY?R!$w0#m&W~&sF@$?$-;R?0h*uCCbk4lo@*b zG6-+5fH&H)JnUl%7kMJGzg%R&+TF3->=S21d;L1x29lwDZltW+BG*DH#;IskSZ7h| zmLF}F!M@%qcZiRPbKZr(vZ-!cnP+?N`B51iHM6^|-qs%dq`R7*1+S;}I-E7`|JbPk z@Zw?**JiGn96mTHTlb0k>`dZF zmdI>nKR$YCgvj}~X~>`TV8;!h!<-NP1c>si6F%J&tDO%g+%wEklZeK(Zt!s_1ujM5 z8iw)ZPiH@jmi^-BA0pzr8h*UpTeIf}W;>&nH-Re=CipWg+ejAUa$}*0(HITx?Sdom zJ>VcRLZfmzHOnBjVygMh{jDrdq1EL+C7p5B3gUE)^8qnV*5i`&+9X+Ac%_MXQ$iEW zKcJsQ+$R)PaT0lOvEJt0K=dwGa{VB;Pf8LbRSa1otuc8d}3@_lqVq-C=({nSTM z_6vTXKylQ-=N)!HSlkIDn&DMxL>y6{Zv{Y*Q?`wGm#?dkRftUuM!FPmR$u%O%x3-r zFtIVS%65}-@O5mP*#9w^l+@D^ymVK!+?t8Ps=(3|ChPxg>~>?uC>t6&gy(&}la_QH z`wkEAF}}JJL(Y0>-;`Q|w{m>xafK=8j;jI=;^~_1MRgS*a8ClpWfp8OerBj|{A-ad zAlag7=Y@6sXe!^VBi-kr1sxK;jbpjfl&@ zJ=q-VP*Zv6#$V;5k{woAELc7HTVeulNu;A`cBq?mq_om$KAs91zynRR-{Yx_6{%}m z?a~PdwiIXOL)%vChv=+Zj;wh}py;gfNK5|dYOybLykl% z^g6JqDZH)KHqyr+)Hd>}@x^h!vX~VRZhTLykX#Z-CU>-a;MnNO=B(A{^mS`Nvd}hm zgNSJU^Bv6=j#w&R3!||o!`u(K>{m(3*ZC%lb@q=lBAZ_;b`m`M*S76Z8GR@8yk+EL zs8rD=QZP$ZKaS;`jEw3dy(*G}fROn-J@KvD4MAYEUk%J9`?^y6WIMdBG7_>bQU+mC z$sl?Xoa?bob)4|SP_1I#McTxi%|Hg@j5B$C-@g ze79N@O#M8Napk%wTSbi2m+zjht9iK~&`f&9RiB>W=lBvDgATZ~ywDaMX zH#XvM5cdu1U6S8kF^(r#8cZwt;*P+wBLGkY>V9QR60uQ&rd{X`iEXUPaYxDS{n!ty zVZ-G$N#z^`257KO#k_z-cHOYpa-euCKUpCb-IgO{75;{3xXBGF8$TFs@5c3&IvD5I;I;V)sH6 zue`25nIzOu4;wAItYH(xj}Ph&YCkOuu!{oh4j$vil*dk|oWCE37NhJSzVC?~zO}9g zrfCs){kzrRC&ijMf~y6bv)F2e96^GQ*cf}@kgr}#5F zZx6%@dCwQSp>`km#G3GiYU)EaED6f${_2;A!r%NTHT#^I+-)~jdEu|%B+W#&VfiK~ zKaXppT-4&WqikDmj5jc5_Ph*2&+|qDboh{3+OitJM6J{_oPrHJmhEyup#U9@2*Jpu zB|jZkK{0ZgJXF_RO`~uRy$nK+D2-hV*1k;AEVb)rcq9krESs@c=K7jC_QlGExv$z? zI1p*4YhNPbET3&dPjG0<#CG%ZHK%>*0y;VTkpTVPCdK9XuT1IjH!=YG1Ao%t`g~}>9WYEI%)UZKI52eIE)XP#E{p2ZMStq| z$0cuRK-MRoktO*n?o)e3gnOJ-taGz)E=tmzr0zd~m*xn5({H@kVbf?0 z40@!TT(gUx{m>0_VS5_V32YyYY1oKt&frL@zSUtMBTeSo2aHjs|E|| zNMh!+Q_}F8Xz5m4F%H`z4Oe`vGh9}vNhIdU`-Ug*pjh;^0Ot|#W<2D3;}#OSM*w-^ z<+Wy*E#C1pwJ}OrG-0itF7|m$U*Dl-Sqv+?1x*Q%3c|xC!8)R#tY%SiSp%meIrlp$ zg^mF&R|MmbICM#H3Td$ni1j)Tng`W&MJ!(9Z%+dTX*F;`67Y7uP}$pGg}(`wqjzX! z#9j%M=_}>quscx8C+41^1w$`d%258K@(mSnY|t|1LZ_lA<%O1>S^b)pwP5Gt0pt9@ zs>rB}La)_iJN$X`{BqqDT3CSFXBlmWEbWmevD9O|Y8UAHX{W=-$T{S~UrVE&q~hM< zWj+-3?YWn&{^9tN33$8Az-V-GL%YrSjJz$vSI%gYV#2YRu>Bj?>yh9GcNcg&dgzTn zu#T$%n3wUgFW+E($yxv0iFwi$@hG(dyIB<+79jxm+8X3T(O@Q6AT&AmEU?jdpPY_^FJ8x*@hAz|hh~ig? zcQ$XKxgOOOD7-cz`9`WkL5Ik@zhE!Jt4Hpn!rQ~PHTLpGeT?)VetZIJQVH zOx3#Y?9!dreYpOXl+vp!0D1a7C@RslGm3`fvdh!dVFD#GW^dZxvPqc&ESLb)M}%1r z2(XT%@fR4SG#R~*!6r2eQaMoEMQMqOm_?!qi0m7 zK7^p~d*it_#?}o*loH-qZ(x%-4KX6qoxGPn6^IVhujlkjQ@_Y~!qAIqitCZQX56tW z(-4MqG0XPe9V~E-a!3zQ1ft#dl*zqX%;j0|mR_nv#vS_9o}XY6OK3|`^wI@0k->RcUjxWw+ z0MwH9;re$4Y0G9WPR>;Q5ej!?z9vW)8GtlsapL4v;_6D5BF`p)38Fwq{kAgdpi0DH z?0d!PLxY+_eM|g!xR8{vG}{HzXt_VE#(>2Bbc(~?p~bf)WJe*3I%rf^7=0ku3X}GR zw1wniMb948+-7@5uBay0H&$(>7;iwMaQw64USc-*T`0rBkEIc@q7OLD1|r8VE~faJ zHNnNgeTs+YCZh%_cTuceROaVP7aDyJSaqMQO>2WXFH03RNmD^>pg6e&6elh5H4OA? z3?GI@9{St!6+3fwzy)k?F?SmrFlW^+wp+Y8Al*Exip)R$ZY4U^3{I5bsR53V11T7P z=l+fBK3zZ5f=0LA#oxTCPF|3_-q!s&@<;u}c?U_`b)+E9yN(6G^t=0r1G;z!j4KRJ z+uWZSnl5ew^-R^Qp;79v8m|aY%m6j_(PB~*N0-BMpq7cqJCRGCyNoPmpxpuFoIje; znX8vdBRTt}+We)MB~mV7EPceR$$bd=5GcY0;3#0MeWCz-GeAGT8BTS8KieYUV37DJ zCE2OB8z}Q{_?%L{o=~xtbb6s|`3irhKxQIXcB1xt&VNk%_2ggz-=@>l&g02E_Cb>C zi1_-Zh-_>r$l@6&b?1mId#UNytjBg6zvqls`q4VlO%)R{^a5?ER3axQkv-IeeKW;c zYj-tNvCT>KA_!(dz1;dmw&pN9|Gf8=FysjJkxJ-zz=$;sJz_8S(f+lzCpb=QPbQ2~ zV52&sml0En^0k^|({hw6i_&P^UMK(}&-s;_#*)8QXJll!5~(s?i?f>1k6SV?=VN9> zG3palJ}sMSx@tfZPWwEU_d~AYf~`JQvL^-kpwxR~VW}#;VS?&^${v=lU)8T_c>b{M z3`I?fx&4qn86FS0mP9yLmZ?A1Xk?aVDLoWs$kfP;^k9yJVwKpKT?WN-b`@v~C3Pl2 z7rx6=JcgaNOP$`}Bmq_gj)@L90vpK^A;~WC$M}ATSFrjC6LyToQ}8QLZalQDELZ7> z!?Oaqt4jpWZ6`Tvr513~m){-E_mibyWR_vvSXcY9^JwY59&yIFl1R1b2~N8NrF(*slaG#H)Wt(gk2S)2tP_m%a{sZ&Z&XNV4=$IX=hDXj7ve9>tX^V z=slb3RZXBQ9xjfO6 zZg=qE>Ok~K@U|x|BHj`3Y38{^_UgK`nN!}k0cASqnWVmTWXw|4fuK3iNgPp~0X77Q zOR4S!JBc&?np31nERGZ1F|r+T94=?YR5QE>faCAOi&zfnly`TEQ;=~_t964Tyo+a_ z9>}v*WpYz322gAV1~TTeE@y}`pUj7gb+O+GjA(Gz@_h8(gyKG(=hlI|*NQKB(5Z-w zPWC)7ojs{P-z$W-XT|Bf_}aDPYnPEx|1|{fgP1|DV$T>(ElBK?V_2t};MQWqN8afd z)4wKI@4c}!h_;UMTq0hkHKWVqvkUrt9TBB>2#RC5tek{If!8BpFBl3dZhkJB6ZNz? zEb~0q;^inlsBciC7eOibY2KIXtTZel45g%9hk>V#ZNW6_41>KUrK!s)H_$u`F_jh4CYdZdA(zfgEQk@a zYWLx1HIuo10Bsjh%4f=GqtlKa$}dZl_x~2S)jya5pvK{QObDF>3+iY!`TxDLC_uBYmYoz2?Jfn8chEX!l8#>#-~dSMn; z=rc11orbmJ7}xE&Gt!U_cvrW8;#`rCvs-|%W>GQ9iz4|ErR+?NbOI}U7}Cv( zr7v6N7CHp$!;5_(t;wjdQ*$|4TsIrH>bKD@qz%k;P&}U4sJH-JP*bsShn`jcWS?$ioqI!!{Mjn$h9L4vjRzd z9rwefGkVpVo)|$QL_9mo)(f=Z^p6AD{hu4A$psq@Iqz^un#Eei?OPVQ=WHtjug(j^ zait3~hebB8qg28PrVk~uD{?*OmRx}8T&An?%5C-g-t(~P0hf4xg@{lXsAGR%}dce3}C-brW|^l`RdEn9KWw4gQgV9RKH zR%l>ICwwTJO-UYkI=Du)m+Li9Z@;d|otrimaGXtzP9!&CLmx^hbD_j*>mpv|?O_Wz zq2RSR-_ff9&?Cm?G|PdwAz)Y!3wS5$q)%B#`o*9*%-A7WwnKV%d08Vn{An2W9@!r^ z67_-W441+>TWKSR3p#e4ZM6#3rMQrjT|XeFj``;7DZF%OE!VvLfm6Q!ufO~++Hpn$ z*!*|WpPTw7l+jDWZ8W6S3D(NLpuWzhArJ)DC>r8rM-2>BKx)!&DEc9UGUtF3CloNN zvFZx-dKQbmM;DK)=#wRDz(OOOGGiT?sKY5k~sA zI9;=YqF`+j1^fwuUb#`kuVJ#!L*TfSh*(}WRP_z8-JzbxiF<-{ z1Q79DVJuOf;uAMuH~CfQdqf7-r?tGm6+?ETziCcX?+oQ*I_Q#DxyoH`35vl32&f!2foKH4F053b=dSY6wKWQ>ac z#JL{@b6KoKS>!N??cEo1@aK`fQa0jsqjuQiNpfAH5=SORB@l^Np$r{P~SeB#3Ebp-(T%g_8cdj@DdgIT^VvXVF3v|XIr>`mrO26)5 z95%+j?lQC6wUp*v2P;a+lTUpuo0EL6x`(j4@sjY@1l_*Iz!yP-JG=snMinJY3)Q?V zYOA8LF``2!WnaB@(u8I3{pD)dEWn&xfeH9wJ0A&rh@x+BZo1_NA}V8@;?xV-vI$`N z3&eIUWy$%U>y0LlKLHOCZq+=y_mO<{tUr~cb4#hmJ$nSOTun>M0(@xp%DPp@BqRME zv4S~8X-RfGFh}j7;)I#6l*CYlvJJos&=FU!iNDNVvn2uNE^KZw5h%nSVmM9t#+W%} zowg$d@ptUpk?>CbmVZEd_Lk1#PThL?FgFpu%a$IYxp@h9H>3CUmLs8OYsyJAtba{p zL%wkm%^Vj%k`j>aDzwP9WCeVdZHz=X%qCGxZ!5Ejc%;KVjT^~` zL5}p<^0PFjt)}a0M@h5wY28mTy)7_yN1|D#qWUEArOy;%^MK~C;`P33Zp;#)O6rr4 zx#;Yz_Lo7^6WrF6^W^f!CLSv{sWHm)O6p#JJwU&TzTLOqBI(6DQedazH4*--!I$HhfpV%5as_W$N8ZC4xB?#s9 z+14Tz9TnVc&Z3c8{c@9k;*~;~1@VwVQB+3#>~wZlb?dh&Dn6fFDt#uYfmJE6sY9*- z3F>vebxr$U3kkCyEj>M(%NNdn;r5y66N3Urjw4Tc@v#ei4-{O#Re#F!$zwG;erJy< zttpE*aGz#AyrDVR2UaM=O`p2v-h}_e5l*fylKb=5SQ)GG?K*&z3D$omhif|OX?!7r)L8h!lg|1!y23*ZUxziL>_58QJ zmQ&y4oEL2{G8m`xxNV43|6C)vpoExq2Q$o{`ek8{dA)D6<)ns(0qSr=dwa7 zG=E7*ufjrI09F5Ui;_pbiNC(w&K}}j#`kMHz2oooBH@iwLf7k`^<%-KB`W%eeF>Bk z@p-L(U>s^EXWf(}Rq5eB&@%2@`zyNCc=SVoZ;J5wE8WsqTgSdg+p)*8V^UavME_mG z^J##tz)E|%)hb2eiHrd*?HEIWr|Q;$q{#U^FbG#xf4VTQoU|!Y`2=uy1zmsAH9D#_ zZD73On#}Dx$`f5HotQiq-Q{w|gB``#0%wbHXcDz>eX7|e6#;pn0FIPW>6|Uhi~ke@ zSM}pLgc3H-s{Uz*{2zz$7{iBAyGo24^%PX|end=&7ORLj4#ElrA0GG5=-($QC}J zh12A~MdCf$Seb}cDZP)jj_&9*e?5|gf8E<=yl*r@iBh=)+!HHG+3#d>_2057OXJ)P zd#)40Qy+3Nh(yy4Wa$_92LJ=)!hYtgjjORO~Q=OLT zwdC&1hPTZVoB$BDP04gCMJ~ttKgL@gYu$285A8AMwASjsYu%Y{z*_ME_|c%`u;{MQl~T@h^#jKxDb*d1^5Y85vF7UwWPX zi`;wzkeiu6iPC2(b1{!YAN%5bf-?VrmUfFXxnlzAk zqhrhc#K(Ju$Vz!93?4#d4ZtUwg~8#4av~1xDA_cl5RXlzF99JKjCfWxRAMp4C}~si z;pY^ZUs8{hKwI))Q$8@B+ecsFafZJJ3E(d$rH4R&_bD53XrA0)PjEzO3HL$gm{^~Y z8>9}YoArIXr)e9Um#yAsIbvG0^UPtUOCf2!Sh&B^p#1}`s8a)okHZ;g6g+VN)KkeEJw`nyH=Hw2Rp zW&l)X)F;^ecMqu#0f_!(TrM}ETj%>D(c#l5lq7g*YYVUhB^WD(Qjk1gCFM;|BuN*! zO6D-Np!?(j^rNspk|LSk*LJj5f+6p(u0HEcfTKsuHpecX6RKNs0$^E_#V?P0T;CJ$ zup8?|N|&TRiqry6CEGbmj|gHMbk6kxcKTmIk3O#mDA@y; zsX%nfJH>t^nqM->&iow2`aOc?1~1f96^F#OPHpF`+n{(zx6)GAJP0lwYUPDpZCDI)?(Bj*1hfVOFWi@X`#L`CzL++Mlrb zd4R;@G(vpeIcmksckCsXsy(|D)17AJ;TNuVq%-=1$q#%}|7n^ole}iXt~*DF$TY5# zWgqeq;dvLo9peLsIQmO2@X%m~LmQ!Qqn*!$?>3A_A+JL-4;pLswcX0aB9Atz2#Zfw zBHS5|NwPR_-RA^<*~WXlucfvgWV{*N7|bbux`_U=!W|c4W*%HKH*F)b(KnDSEW~ZT zHXwP_6mTZ-wEI|=w35l7fult%6&8}H3cbvWJp($hhPg>eOh3M`yRm#dys%GD^1eAG}QqrFs=`W&Cu z$ufUYxoKAtU}*cS;xxT;we9N$z$Q848$X=ZX|Jn!0To#iV5YF4I*#ippE+B4GVpx) zDfpLD<~CoeiVsXNX%&iq(=YMObZ|9@?z{Xvekb_O8=n3-UAzqqde-q%3yQ$0-OHf< zP|9RhbkqD8_}lSvC%z$KUoj*Y0;>x|e-Gks>I*~{0vTWzF$`pege)7seBI&s(vwAuURPc-i<9X&6Dk z2VfG@)CDX}-z;uDNQUWp?kjCKJv)s^>1QiNy(0K>8ee?VpKu;>WT)9bKN?VT^ zmU`JejeL-(66>ZeQd&tQO$fsLX!`+vxO*SU3{{FSnp3p7npPoAFx?9JTWEcG3(NOf zFtc8vIGi9d;r1Y&WllFpfi&(zK>hQYoqye@JuMigh9)(gt|}Wf;w17%kqKR?l0d6U zXH%_I4RD&cxQEgUUB`p+--vHcQUpUzcu#lJFGVj|uGC#QP0`ygj;(wmT9G*s!?0Vw zh@QBnMjuUV|0P?vcW`_GA9GTZ_ui!L?h(KAFe7lFrGnO91|&oDGO{r4haw$2vv~p@L9^X?SsmP-5i)n)}eEWu$nza5VyBm!K}a>Sra4Y*PFM<48_$;L;&OMJAT9qDW?P6uE}t}iW*0~OCX<_tr3+#g>Lr6_v} zeDM*n`$<|rRj=%w;?jA>K=sC^*V){Dmu&Le`<=d$Egq+#zgrnAK5qp$j`4EX5yb)m zGG5uA`Qyir*k#jot@B5O$J;)-pV?hXc%h`@>xUZ7ROP}4>y`!p9+cd9!RHH;boiVk zE1d!y;7%EY;M0a8dFr#()_LK3y%~y9%Jry%R{x?Cz*$nlD5p8UJi@1?Cbrir4S0j% zCUi+V)hHPW9x?rr_T+IPa6PIx=F~QKknkd4H)hQ!W71-{4WUT)I$2G@{wM)AS}fO_ z3KSfE?3(T%wFachB~gz=Ah&APKMS4HifS0JX4SEf>?XZ^?Fm17eh;c@^SM)w3cU;% zIPM!LfpZ9msd!NEuW~tn&A+sRv*Yku?yE=Kn&X0g&h`C(z!8oQvU@Y<1k~$qmdy?v zdLSb-X&XwWZy#Ju0xrj2JECFoxxOynuZu*3n0Kj?kT@Pc8-2k3x{iG^LjD^io;~6{2B=2Z%M@Y^0RLXiC){%a=ogHcE2Rh z6ec*NHeUaZXAZcx5_b>rqVNS5lv}dP0cTOy?t}CEu|LMO$Z=kkMfR9ObYvo$Z}UKc z+vUr%3`UscSailziYJ)ma=iNb#zS;{UpQ6|vI>OwIa@_Wf0TwN175xAJqwZjN7SLI z`w1Q<J%!Hxo}rw18+cAi8@=G05d%(Q z!jCX|K{{MeH52cb=O@^`766So5kN}Sd$|6}lOXq}mk^J^T+d5Li4KrIf-to;D+Zp9 zpxx0KbN8NoUY7@mUz;PdTd&c`HcW>fM80y57@u~B$0V==JZ>MdDYzXwkLL|&k8VdM zpE2R0(JzBV?b!QW$ov;@nh=$&ByT*LKU_mY=LkT5m_l}eQv!5#O5jBvy%Ha3eHvsk z{IZ{R1fTznz5)5$)_FVNbZ}z_>U|9mH~1w9*oxy|{rFG~LLNye)uRhPUeDb+9yEMk z;APD=n%DzTuCz^4xKW(w732wN)ie_OuI$uUIr-jO?lbG_ z`whULUJ6a&fW%kKDbRcEmskpT+lq?@qLOFS{0^7ah6;AipZt60Lp-vof{y7tmm-P6Gl?bi5Z9{ ztp@8v7%}>6FH+Yxeu#EvJVJEL#3sQCxi%b6eS4*-Po{FIcZFN%)7w2XR!y0rbshlM zXb?Lky$kN$rIvNS2ALX_V8{Xj#^-@09a!Annj(OoSk*#6{o6zO(ivy_SYd8A&Iv1h zVBz5a=Y5mC^5JK+dJ9wagYe{&x8M#>a$;+gdj4sl=Z`OEL-XG>?Cp=4azBH;3q?vO z%)eAhwv1M7F{W40nVh{;{yGkpYmt!xX22cuyiX)pbYc@9@p$pS#}eh~Yd@Lb~IW{KbP5S0RAr{NjVhKw5- zRRbgrh1=>+y8kZ5|JE+#q+hm^ybHGPV!3$0{Zy8t=rj-xdd9}6h}8ZlJ<200sydet zf{@}eO2m8J4>7M$(F5kVE3Zh4W5A3zS9l%&FBv(87)%Di83QLsA8a~+Y(fLO7dqrY z7LyPr!>TRzx#=ZA0~pqv;-(0n3Cd!8XeMMlrn#cpW7qper!^Sh4;vFKk($A#GU{QJ#ZRCT8uh7)j5@3_JBMSa*;WaiAzm&`l-fu-R zlPs_0^$5vp9xIxvZT^paBv5T6XE=)YKCK!A5Z0$MaFl{$VY)p-CQPq+hyfQM257kY zUpxDLm&^DA9!6DM<`yyGJMMJ)2x}ps=v(Ht`)g7R8bsba>8I5PUFPVNavf4w_@X6{ zGl8F*GmKlh2TT@>O4Rs@cI6cZGa_Ml?MZ4LuAhNSTH7}`p}X9zlC|Oc)g4D}#K_3q zq~+uOP*&rq;+wFgh_2WwT&!<#%PzftecOZUfD9fd+3gqcC{uQND(I_vIqqE>FCf#> z&vl3MqrU2tmnakgtCeFa>!K(#tyCJoov>Yn|+!Mx*zH(8v^@7l%7ELC*{)x zm|=WGVI?M_x*-%h_-<3TjQ$)SKarNOBq?W$KAJ2NFNl;6*G(T9e`DToXbyn@8?tX^Tjm?$zoZ)Qmv34$}sJ%WzMcuYfWt@!W zg-1|X5tFDhi;W!xJ?qjY!gHo&Rc}C7xV+L8j=!~p_89^<tbxIv~a)CSZ`8m5ZCUhqEHMJadu%m za%m%AJDqa4#uesgnyiQfqh97I^Yl7@Z94sKo@?LG(5*Sw0ghX znW%$!d=YCNuDr_hVHb{4rE?`4;=t9zle=Y@%NiIW*pqyUr+^Yg^s+pb7Zee?ZWOW% z7^v?3=uiD&9x0hmnnvF3+{uFVrVTpBR<8TIMqI+ZPOeg;MU#pH!eohy40`Av+;Qv7 zf5EW-D)!UiJB=ddhOMRSu6<3V_^t|pD_02tF>rVItO5vrcyvC1d;s|P*h@LT@v_oz zeMFnr(0go44y^O(rH*&FFpd-fl&WgLAIrOK0CPy_(5gwF@$v}N)mgWXzVU98^h$Go zEwzt;B|XZ`*tvKIZbw$`CSn1a+A`;S3KFI`@$Ef!G7^a!ln89^h3WbLlojmoG$2{) z&7_@NQ(oPB#Vey<8j!2=&^Ab^-BjOuh+}flXj)F8cDQ;>U;>S-A~LlEz2>4{xv~f< zyu&pzR0ISB{b`8}8R*iU&;lswXLPc+s2p!9L#Q{b353#h=;9Y*4UHTac27-WM{ofb z?3*n3?_izF(p>$#^G1bx-_BrXb%q|DMW?RUxB}-QqMf42&RnMS0rUBooG|7$;Nr2_ zt)q}d-uQig5*~=dy1>wJEjfx@q{tQ+09!B9IXPP1O|RK_kku+9VsHF{^%MU6_+jDl ztYYUDmh?70jZm4B2(Ro%VjlU0$H9*klb3>0H`@7~$JgsIGJ5tN{odB$1e;)c&d|gZ zF1J#BAlp752^&Z*sT)JJdXLl41ywJ~atP+Sjz)f=u41G~A1z9qh^X9ouGBo(jCBgv z|5&vADmZkH58w3#hDc;9%IM7saDMv){bMMsOyaHJ!=_-DPAw*@duBgbO!6L!T_li^ zCTKCMJurDTX!sc(?Cl6bA-=<3#W0dYs*cLIo}cWGU4Bmex-;^!J4~$UY^Xs1A|~y+ z@t&l>&SZl|XhDB%AGbNkQbriAYFCgeVD(BfMZx2fK#nZ6(;W2282r*?&Rp)X+-0Y7 zC9OB(S4_@?h}-Rq?-*;nmymm;{*M_)jGUjlSt8Nd+AWFet_dvcv3O7;BD^!eCb$4~ z`=tH5e?jTv!|)+_cLAu2fa-dLG`j0@Y-9$1hwf2c+U{^B2enbf!M?iEZqe*mw3eGN z;p|mYR2;;Y$_br&GULJPty3R{;DG*-}dfE;adLT zE>N1sOJ=VT$>BoWnQ?528!p^-ftYC1T_l6i0aa_CF=!Bo8JkgxdQsGo!{w{`&SKmw z$;{dzKZf5{tl>OFXJP!s8x$$h^_RBv*?Pl;C5iBQHDQe?AdyYShitxrBF2U6+-K@N z$-)IADev!I01>ANxeKbSl5@b6qewK74!HGF5b$hd{p`3NA#e7y2E(uRbz$6@Tsikb5xagEE}DFV8WUd#TF-TAHP-`~Jv z%3DWPL*rEkTE)x{$~b4sDD^l=oK_i)rlh2DgiXd2G%dMLhR0z5+$8j@FaAW6`T%^) z&>dZOqU`4)@nwR*J4yV!Bi-JkoxX;O$*WgVHZvsT!X!9F7?-|nQQ73o9A2tUZMmu} zer{G~)Ouh#(4th$2mzoazkan;Wj4HS8~)<#!Aq#(fqE_K7P`!SVQy6IP+a;D?>3uj zshE??QyRzw{>fgN@7&xYkxw`+`??O9|3wU@0i1so)o6O+Yq3YUp-w@BuEKz@WkVRj z$oYek6_GfXv4Q`o)@$m724f`hMnGp?A*I7eJl)_M(=>5LJU3~N9epy7J%B*GzZvl_ z1Y%s1yXPgfjw6y0Ba@jL9f+J6q_F>CPQ9}szBbCp6sP!g*dLQ0w%Imf+ktsT&dNM5 zck5{*MP66_opV1?s&}wjo}k<1nJQw=NS~_c%r+$Y3cvM!t4;3@DZBA4@ym>l!7_bF zKyG`|WqU|tqwmG*^}?+s8tJa|{I1scnth+xZb(k`f`NZhvL=_ghQV})*RRsQMsfms z9cze?2JV{`ZYK_$-undxsb!l;zCDj+{{s)v2EgCF1a7-(tINxRafVK-=|SAAwtx#8 zXs(ceZ%kVj*Hs<^?ZQc1mu3IypGDA5Vt^6wgBvQP{L!teo3DpgjdG^Cd$9*l%DB#{ zPqpm20iv(KRZOu1a4&rV5P#oHdHjg8?C0BkFDf!)PPAoIr+j}Mb=7eMY!%{*6hWqL zw6CLAfeNTCTA$w=o^_iL9!U$ml6~zY!j||j7yXfzpY@$5aYQc9?nb?yDwyK=L-0r; zzRUuAz0{p8^ie%c3vScR-ljE?{PC zZrSMzblv!B=zA{3QdDly{OQ*e&o+nd$cA$FOhb{RP|RSs9l4C7h0xRTSxKQJl`y3P zw(i#xT2fOb@Wcd1~yxQOAy8x=euE&lkuh>Jx-H}es=1p;$}co zYvSfN%C^AkV>--#qZq9svVw~o7Yuv>3Uvi*q@b1bvjwCExdRT?LG2w4&TP?joOIn9^wew>7r*7<1i@-E@LGji6_x+|WKzH9N!ujiZIG_l4 zPIK<=8^hpS=Re;QCQ;i|F}8OnaS0it#oQ10DD)gv99n7L3@YV%Xglbj5Hb!UdT;jk z&$hKsfN0D&@Y05zACHo+2Em1|S5o-rK77U>d6biEW5LsQ2Gfn6Ns}8+We^kvTJxz~SiN4;uFH$=2%@d^t7beeItVZXL2&P#=?QDh z`H%JOA03xucX51~?BDkKv(whN8u)ftp)gfT+5%rjJ2|Pa>A}b*z`tuvQ#cr>EL#8h zP;8%-+Ayp>u)KWszd$E-!|!_UW!d#ooU2`NFiO3NeOCjZ-F}}v6ySAq#d~epI?JPd z4aO(gpXe`-TD$!5sqH)7IPT?sI}QC!n_Skgu__F2MWQnz_pO5b^$V6K;Vqn0Y`LCG zDjhAu`2%614>ys`G@OfnoQ?l;gG<1_ao^1Eo7Fraf*27G#+OTxWj4y%9(r^&zsTlU zZb$keK?X|xInX)?nEDorSd_b*7f-sHMy<|mDK3G_ZeaN&sJ%nV$)f{w^H~`agng%A zZ9>|D`<Nm{^!T{}yDUWrX8DYj{>9$>4nHqrY0;mT zpck{(TUnE$aNoOPZ-&ZO{y@bW{ENLw=(#tTZr@&FhzH>1I`=tQNo>b!*$&^x$;lag z_i_5{Fn=6m=S-5k=Bl;*jF%XSi18-~C{&jV=P(kO8RL@!;F~()qUY7$!r-C}(I!m7 zr;S+Hk%%MY_1p0J|H1|Y2FdOFZM8aiF4`ipZ%M0*sv%NdJ462$dNZ@4G8Q?nu zmT3ic?9Cw@N%bs}o5F(|?w-m7uk*h#|8cnCkzb$s2zXimTBWTA0Gl5!W!lrCriGUVzA`NRX%1J;0++#|8;F)Wyi19CcUEW zafE>*O8qh>JIn495QcI6;IC0{+Zj6X;;%wh$)@aq=;)s~WSDDp@n!)6s(dm@RxPcp zncuzB)Tmzg33OD3J*cq%62G|@*7G{9qPMB|1UM3bsn}vtxBr4Cpt*Y;zQjzE2#6|( z%7LweWOn32MEecM=YH@ha!%$C;|9L8=NhpW)z~>h~ArnVoI8VBY3` zGeWhg&R+cvSn>G=YWxnPSSKV!Vh7ubPYY%{A`qFXjtNVJD=VZ}W+#g-L=6hX$go^Beni>0qbWV*2522;5TQxb z-Y8M5?LLx=*sd>|KGJq5{Ol8#<96N!AH~|k0_DZ>A)}9kXRnbGgCDjw#w&mY$x2`YUk@7`PnIMG=)#*G+m$zwbiOm8EQ| z1Um0;1r1$FLuUdB z9VQKL-q%9Eg!Q$_FA#;xkjLTa%&{RjVC_+A%C0yygs;C-c%D5$nNMKzARcdQ%YUxN z;1b{0BSEbK+&!+%JyP7gFj&z8bspF)c}Lg4)=xC2(79ovWL2x%k$~_>eX8Fs5%2uF zE!~LIiG5=nuNU8q6uErU

n*{dAQ13CLj9({AfUSICK{Aag8q?jy>yFMo*D|0)(= z5;HZ{@wXLJuij4%8yt%m#4@q5soWho7c|x_EwGLtmIg%=cADJ8#3?C{4~F4yj#Dzr zX-ueSUINbM(qe~W&C3;4mOgCO`vvs-jG2#x`(-p(0s5@KiV8Ww8sTMUxWFnxPD<_^ zn67MFt6zxb^4sZP1W=`x0=7Y<$oZMk(N`{P$<==Noyy~t^$t1-t^^gVBwrl5z2-Bl zZZ8{EE_A+IJ?tn!o0Z#tp#-yfEStNMwQF3%t@Myl$j~AM57W4Y4KNdzo zOe(G94Z8VROzEKEQep*dNWY}$PX+4S6ueHB&n<bPk~6~Wvy+Qul7IINM~ZIV+I@6*04nY5Une%;A;ke8gtSYo>ZjsWeMxo z=!%wQ+}BbRrX%l#kL%ZOcl)iv!W;OAsk>ByY>a{!k#TJfOq$8x7!gd6XpavgIdC@G z@`KSFf_;W$`lO`zjg08Xg!F*IH+j8Mi3DTWjv@fUgi2hIPHRdw%geeqq)c0*UxG!=I|H{t6oKh=0qQy zR^$X2v3?T;J8NSK=c5*|YU`TpL!n-o*|@OfS?&3Mm}+945aXU+yJu)q_~j1l*{_Yw zoU(}0W4fKD*`O}xACBV?YqA09JAKG;Mp7iHlK3Cv?0*Tbz2Y~Bkjo_Aj)>?$!@%Ug z7l9XXx45g&@&ohfvyqWJpZZ7dGjKmY2-iD$3sdyi)k=Y#0k=f~vvem72Uj8_E0Xtp ztpdBFY=q~k?@`2nPrP649yxmM!8#ctl_te4Lm?%J^`6Qz zG5c{gv&j%qonZQXuFDmBHWq#NflU=cZ}VF(#8jEBhJ>HKD*}yKn#eCc1wFu)-_^Y{zJl>!rKqv%=pH z^gN`V$)Fdoax?43)xmgsc%-l!FA_KK;Vojh_aVa`YFCnTaZ{YlicgskE8mU}Ykegu zs=cjv_+L6|dp_6fo+E`pqX{x+#QFCRjh~U7cn0p}1&GivKt50M5(Ry7uO36tM-H@-U7Ai75CdWea(qJ+s8h=Uv8-}f z8oqXbRP+K2o!H`~S@_ig3VHLvG_*e!bU~~AId>aMCFM*ORvyX0#eq}n6B7j+rI@kq znwl5NNR*0R7(DjumyPE6=9ignQsfugnQ5!ZDz?hktjVq3!Z~6NifYb+0<}g|v%I(a zAY+P(8)2T?jqgKuoGG3-J-#FMV*zRZyd-f$P%;nx3e^`5j|^z$o3yb0ZJ+!@v3(o; z23TvxiX+PawM1#`6v}0-ppW0fTLhws#YwPb@Y_$EB*9_jK<49g zsgtDx5S`8vN%@Y;T$?ChfFzkx#2x{elj2N;rToA!2<^jlR-`#w!rtQH!H%*h7WNzx z8aX+S8Jrbe(XnkM99c8A>zyuH<;_E%+f1BRkA= zV5tlB1^D<{TW@SQXQkvmsI+7P zIp|=NYX7mcy}NF7j>DgFk*!m${kQx0Z&ogZNUOA*xsSx46Li4cuKKlWhzn`(^i_&WguZso?@bcWVHg{4z$l(f zDuL-J%bovOC;z+g{W^)^nt5y&>{l7eTz*bJSwJXnz&{KJHGcF_DLHYp4g2E@0q(_Q z9-fUse@MK?CuNUMA+}K`>R~jr6g8w$z5Ve()ifa9h(=O^FhFDNnR!dgJD9Hj-EEaHZZkR=0Uwnh z%n}lf8K^5~EWm9P{zh4c_!rdkwXgN0_vTR#6Ps}|{ z-AFq+Bj!qQjt+@yZdg_X$K9Rnj6h}~>jYl{la{B6XCb}qM$N!uT2<}Ju^-dI(B8yE0Aks+R=T~*IMxU|0~(^SZdtspSF*`3&=+R0QeELKk9rW zZp_h`DazfZZM5XMYN`O|_!^Dam}-s^uAT=FJs$(afRqvcFnv^Q+^swlQt8+OONc7EsQG)-=3ljobeJyfb2vf0$x;+1?+>bx+fHl1H7x z%dM4upMqJ&SIKj(iw@JXy-oElQ;M=%;z2pnMWSv$36h)O7^pz9ySrPR1#|!b&f|Co z079l56*yk;A;aeX=0mRfmySmgOWS8CY_uknig_R<6lwLw+b!Lj<3MB`=_jnFG6n+W zZ%C1h#D|JSg1j#kY5JZs!+Oh@NsQ7m%v_A5Y&YDqNsR}V{@CPvB$+-?Zv!&4BAAZv z`+?c-e$3y8^1r^ml2PK`9B{P&UG+%IQr6#8#O|DI0cfN{dmN2@p#appN#CiWFMMHz zp*5~_{6WFx3yOYD>U=7SY7$6!UXb!}9DN02D}26%6}Q@|ZIMv#SR(%Tr$WuB1x*_& z%Uf?$wIxnqOa<_v1)>2h&%6wnH92yfVj#gL%Q7;`pze0H7{|Q2OeL-Ru3f3D81hBf znDNwmBNg|po($?j#n%zVKc|0v{+$17 zcZylw?srYq$F@~t}`;+ z^1b?_L-txGhpO$xY;|ZnNw;N8H9=FGUXX5posqP(fbq*?g$41kI4BNl0Zg?2AxW}g zavTy3*c5hy(2=_brRN9SBqe6@ac_$HbHgX18&oP1&ceJFvekF&R;IrFdM6l?b`(i1 zhd2D=>qFQN85>2#ofh)pFZHZm%_rzEmxWh_lC?!tUn+(lK9G~xcz9EDBGn+ihnNk` z^7vX#HVG1izqRe4o>88Yy?A*)@<>wo?IV`8JAeP@r9S8o|0K+=!eB=RqNnZ@zr+3g z)1MCsJaO%NqQIUp!M7jjIj|!_j?eJ*LVQ>pI~}f38BeY78dNMxkWzzRSTR93q&i+4 z$+2%3dG3w+dJb_8qtm?5-{STQd<`5o2t{mAvKt(TSyJHxii2|4P&kB}5m$2`rBSFH z?7cy#V>6lokk$c}BB!heA`(i+i}fr8hIhNFOa8STlzRCa-f|}o2*nonx(!}jVh4I1 zoQicQAd_L_dDoicPSZ4A8ArF>Tis40i+66AIgNhj;Whm~Ue>?f-1ZWVV6~Ib4&e^D zg0yamuN9I&`)T)^@nvyoDr(QL+P3o)`4nFImbBT?$xn4jqL&#Uj4v)}e}2K|q+x2o z-rbs5hQ${<($i29s8ykIEI61oMkM;ios4nfqWn>E>H(esiLX>8ItF>Vi*o)bn^@H*KJEJ{y776J2I6 zj2u67lRMj9ei`i<6&1deR7UHh4wByZ`|Fc91U1r|+RYO(5hK4+7|8tb(|>%WM~89@ z5QBLMp1>knJtrDn#Ct;Q7%wet$}H*LW*;`R)~%T^D~uuMcs{-tG4Bh<(bq-|D+N!M zw0Q}P-X~DIz1T2HwdjB_9Jc5e*fkO8aa?CE~FgNlhZm_rnuxc(c zbM4WrxqVr3W&3<(t~r}M2L?1ZNt?(7=B|m+<7XxFy2I^ilIcmq+!?W%jyGr~=g26P zo1z8|rI!7PhbBv8JpA-^Z(iR-5k(5#%yR$tD*N|C3x_s7)nI<(x)YwV0KI6k7b4B{ zw}or}KsWEE`?p|?oU&IFxaOJL`_}3$CCLi77Mc&_j2C|kQ2-c1O6!Dl8({q}JPqn0 zKZ7FzgcC;`pKF-Px{}YG4@Dfjb%Do!#S_Ke8(v0$u$uWRNRW@P`Zylj(rS;GfgUT$gbU}{JojcyOl$Nh2Ih^l&`3~$@?Xt`$nN!;%5LHn#wM8 zk9ety<3;%=@bxmYVd-t@QLg&JaL>+Grvdu{l6Os9z&b^c1jGsX?yqJ6D1_F5cen5M zf0U2zufoh*4?iU7c?%0+KFx@pplPCOV%A_B#WU5GL2QgVmlqwZ>`*Bbb~Ph~6y+4R z@X^N9$8X^%4M~QBM$?YO66ik`-ZR1*X_wW~p2utUo#EfFTBt9IqEFrJx}&9G+g#tGhY|$A(dJS0SiVe z^DUXrc@B!kXoi9rX`>%WvFG%hAv(C)ZO1%DNy0rswKni?@Vc_DHwy!?%6RTeo(8jK zZgVz6RYj|zZHlksYYFrWdVZaqek{*167%(X^g%XA->B$1ckA;4AXHPYQ@FE|nDZpk zl`y8=p`gs|j~BKAxpgGXW^;DV2(mjgEP(y-(|;ThTX?tTcKJWYHOWED?jkIS;O0Up z3lSuko4r9C+(cFuo=9!6(T@hPTIm8-OjypuBCy)dzVJFklUGDwD4}y7qDRn!iG`zn zQi|ey+^!G_nQL|{KkDP5f8tn(>neEg-qs1?fs#p(`vj|fJ^S4exFx?(FGP9ePfSj3 zgv~DGHfyH_lV*K5KoQ3TTQtw2 zU!aj<0s2M%dDKb0)W(VEFsZbt+_1XvA#Lc58o1vf&yGSlcD%r8-`q`a$p}sR@yw5s zT2aN&WWQMJN!vt4~7@6i&7dtOTrq<$~4HOvl& zJE5S(ECfyC{wo^i8j%sYjIcRHr)8nOFb zbyQs{`|AGrDpzqL%s7-UB6%r-b-)rb8b(1W?MFeeXSs%f#7Ku11E#!bB8k%jf|hcj z(^S)#N5)Xi2;m;oMHxL?HFrb~le1KxVc0 zCr?##P3(>e_zTk5l^Al^xA*6kG(!$Z&)c+(COfRC{0ZLJ^PEB(Yo*x+tqSfiyF)`@ zqP;{|3oq`f4Smvy?$`ibnec+ z!sHPuzRJ+@w zJl`6=`+j9ni-c5%UdNKwfHe>e$EwWMDR6FXx3wEh?mFKXA&j-&zyz*GR?SyU zmw=rmg~J}8miwR6{^u#@+sH%2p!_23jOkV3QB>CG6LxFnj)0(rY=KL2D=YA~c7y!R zM@iwKU9q&=CJMT#FsscNHZ}G`s&owlYyM&w-u?I(Bu)IqkKw4B`>O-3yDU2Zm8pC| z#WUmqo@>G+G6;QiQW2$)SZKAo5pag@`JCZE{;Nak>U)XKgsKo?oQ{QXqNp)!yG&KP zh&Ys)_=Xb>6cPMQ@Z(b!*{P&Mle=FQx*L!$R_tXESdi$7$q_dS-Uy_g6>lQ!Od@fc zoW_ zW~nDevSk&=RdJ-cVP--z`|o$9!rkK3!3W1XDe)?Haq9;(wM>%~aWtPMdO7C19nsE@ zbP~>E)rNyT-5*T-v)mT;k=UA+?bHi9d+*_Q%a6tn9eC!8hc#^xIW#J`{)(D91eU^j zhhK=$H8;_4^;oHx&wda_z4vq=M+r!4pHbIT0>Z)$Ch_}i7IGJi(*}~b)RFh4ALoQa zmKZQ3A~Gq*Z^U^y-8tyrsZQN4((bjs=w4!x^xNw3AXY8%zyPs79 zt#7iR@#I2=VSIp6B9*Nv5E^{dbzuApjw~a(A^xurxAR-zctgKF_qOS=`sJ( zuZdh<_GkG3TtSZ3={asITx2uGrg|~Xev(x9E;&2wDw`reCj&%;?Rm+$qoMyOy`b60 zXwO`zQb&h$tY_6^jV%>{DsFm4+Y)55N+0j zd-W);jdv;3>%6Anvv==P8hYNE(c-nrhhUDG1ZF#GR*dvEq)Tw=9fuM^ER7y3TOnj< zPOe;5FSdJboA)osn|CH~dvS_5EGdfDo2(y`jSzHp#XrK#JBX7RM45J_Z6@h^cs=b2 zId7bl)z9v5%-N>&W2GYH#ak)~N8F=ckeT#_wDtz;@bpnDBmc2ef8fP|{?f9&P%(Z| z>B|bPW*ouDa7gF1ds9&djOw!V&aI1G@o}btJy^4IB4xn>iNZsH==qjxuk({wD1vq8 zg_Mj!8a9fO(I9j(A+9#$AzFc56OZ~K0k3JA4mvPlLj=}}@f+jOhzxH{h}&-pqs%Z8 zulJfIU3Zs33{*UA$)s6!En}nhz zS$TB-AA4^Z7iGJJkG?7j1}!Bql%gOYqBKL7luCDu5)x7(NJ%p^BHe-@&Crd)&`3)6 zF!a#f=N|We@9lZtea^@8>3s6XZw%zQ@Aa&8tt--9K*CACmT6KH2VnE;9?pejQRq9R zO;G!DU>!K`KwX`(U9uddL+(VyCnR)sPCE=J4%9mDbl55{C4#JCXiK#j?9K_4mndq8R(@nx6e4jMLtUS9m5Luj4e zdbEZaE!jpmr6H#XKjdG^MB#o^v}j#a0FmnB6Q8Cg;vVBQugAAqca%EsuM8Rwn_T%H zhlK#=L*Xl`b~`kLUztloUg9CsRw9cj%S1xAeT=#y3?@;&cb!MG*MBlpn8-}-4!_;! z3Y9DcMbehA1I{i&%15bD4=s~lc#gnp>(vXCZV|`&w$JBe7_yS7xKYA|;-jg{(Ftf@ zF{qydMlHySAfY+hV*i0`=LjsQ$Q@mc+(i7eXCFC)(mxq@TH+Z`2tC{Kn7WB4IlWhT zTzj<@>B&sP4`I_DXNZX9$MGjXrj_#tAj7&`QWb&)A4NU;)^#PdP=i41mm% znqTtuXZzy=fVWuj>*#$4@^y?}G&pe(k#JPJvcPhNLl;-;?zc{l-1f4Ijvx=V!lwbn zwePQGM|*c3G+dl1)#LgD^H@GwXLQ8577dS@=U>$RX}fV3z^e9>KS8`YI#zUNx|~{UWv(zh{`oj4*%vfcnWd1Oq-T|>vJtQ16{GqZN$z&B(>j$e#{5FGi0_jb51_W&bl4W~a%!hfId zzDajt9M~OeVUV=g3zygI;joRGCfBrOv&QYp_$}9%AkVM*YL|u(Pz> zz5FpOfpd9p*g(0qhtB5vrScD)xp$yVr~Hxgf6d>Vd**Sb>8&<=MwjFB446o*zCcdAiFa}oQ|r>-tc4SQ%Y_b`EE*HJISFi$|WX9*j~22 zZoWHBJ$_SpCyt3hQt&6X99fyBml_V1tJ2JLW{ULzfhR9j`K8{4uQgUxIulN7=!;T& z;Q!g3D&lRnzMMEbk&r}LUsgBz<0E<;@Ws*=UV!YxIm610(Nee43MC2s6Ttn*{B6Nz zoo_l{a5z+=G`J7Qg%%|}$x6)iz^8rS{A9yGzY%NUx%-3Ay@)1vXJ2{-8zvC{#Qc+i zWSt~RL*MzX@bOZ5c3RpG!j%=VFKqRDc`9XV9cAis4!^=A zoQ%l6-`hNhZJhs;i3SgkhUPsX;1<7(HU1@KQBs)0JW7B~m@o~r&Q?I??Cj|7W>kJR z=5ra!bCtxvgz{DB@HG4~clb=L?T z$tXR`$yV%^*Bl&3ia+&toi=@luqDZ-R@>J^r>DnDSKE!1E@PXmY=h}~b3ipIU=m61 z=gilj%{(q@_O1--ma8+VB5`!oL%Wu`hcv%bqgL&bala`?39%$PuFo8$A5mL#!*57V zjG3c=9!fzPbR%L@3fd{ALIJI(#`)PYZ4V81bTj4j7e=meG2?q-r&AvZ&DXZgY{Y^h zSxImO{tM`NlKKASk=h(05+KQ}|3a3n;O~8#F#aWC_zqLC;SaCkm+OF!mV(WTh#?#V z`qMsbE@bIx7d=j4sL#Z9sNlLR@aZm!th$DO2hChb%p~pbYDyZH*m55;YTlj5uT<&n zR57To^VO)yuMDwjwuvd}`7qcG`~`jzUa#Nuyo^u0BngJ zVX1mTX2$Ti;h=6q5t!z@TQL=xJ~Sz=l|+5u0(I^LXjo#95&_*n;*w}U;(vceoee9# zf^_{_Vc41kp&HBeC+j<{K7l#omL-af_3Gb#33Udzl!;$OGf4PV9v9TCKjWQrh!klZ z(zeLo%~p0}wJIMqIY0ejxHqVAut?DJ75L&#rBHV_mmf|09{az`+f<0SXK7DFa^A# z7CmO)4P2UCH-DVRfBfj$em5p#(s7)<{4mo>xV~1OKE}_oX07~O7v+qXowUd-z^tn38{y+@m6wq%N+}+TDHR4$3GKzdk!jpT%*na&byuKxC}y;TW4n*9vir& zL@Dqleekoa_L-D{ZWDW~rORkS3~;)fTt~QF#sNuS;5tj?#p+7w^n^@%Bcf@ zYEMocRTH``Ni6qD5WY*m%8|j(*kT!^`IhEr&aK(Jmy73znLyF6sd*OoYSp%EWuy9Jq)I^Bvr-Rk*i2QezZD%QSWZ~<+ZK5LYF2Zwgmp) zdatG1m)Y`>oE^VXJU+|a$_||8p8D?fbunbpxxbMoSauvQV#LG>k?36|kPsiXD8e)R z>&Xqai>u7_$o3eaqrAV0A0hRI(v)w>HkYb0N(a;xyDhX`-5Q0VD-Rja0Tad;NyE5a(}B_YX zAfN5Io|l$u72_{kD@6Hz9^w00?(1mxjaMsc<>LiUaI;`x!aQQ)1YZml#NCCKQoZ}- zSdxDEeIs~Kn%)|}!b=oP$d4vsxw6eK-3C(1gjs0T%g3z?yqHf13*85;Uf66(kPTPa zFCOo7g<#f$xw~z?7zNk#@0YO(f-Y#~5fUhQ!uNsuh@*Wt^TnpWNG09n3$9ig74`f{ z^Q@$PeBOz0dc9WI_t|l#FriQCdhgT@mJ1dcf8-Q;cdIk|C3e{3pe*pv{jGE^5B=n= zR`=$GXNsB#*yhB-&%ly$-e+*d-Uuj&whrRIx{Z4NwWrS(W!bQkv~g&040;jH15y9h zncV^9gJ<%=N4og4w!V+XwLCxmq@Z^y*d{HasdQ9_o-He9QE{78zBT+|kK6e8)t)vL znEnLTN(cHu;aq~!A3hdnXiwC=2Q_NqlD6bgz>duBa~v)-wkcoORn&R~*qF z!`+#1@f+W&(n$A&_*SwWkN70la=DsGd?7rFb-n4SsxS!C9=bOyP0#8w?NA@ROlhAR z3J2+~yApl`Jv&l~wGxcv#~i;^N-F%AR^(?n8hZdyaef?NY4jJI^6^%2hW<3GGwBz4vS$WPv%ZdnCXfKfsZlLADxn;{`-;hM0A5@RqT;HJis0a#53U+@{AyMAf`ZBodVCOI0uB znKPd~$(Z`~m%Q%&Ha5tcneU5t5yBOs_|Z zJU>P^h_I&}{DC=#ad6TPm-~50qkvm~nIsCh5eaTh^+jyzs|M)|79?Bvrgl&;jBF&d zd*ae9`8Y#0=EAptHpSucYQmA~B1iop3i)(a@ZHL z-InDIKBz#ZRI)j48PU#ii|Gf^0&Du7F!$Yb2jDwY5pT-3sLw_sTl2jmj#2a^6?E4r2;Au{%W0P5^*Dn} zn}bR;pW`8+8sGRrvZ@hR_nVxD4t#|ZX@4YeQOf?O$o{UR*owPH-&?~w_x1owK6<>U!_;ghGFcu2G` zx^|*%R$K=1*e2XPmj~%@hJoHvINn`W$Qosy?gvo8=a@Cnl@R3|yldfSB4CGThuPcgw9?bwNRz7uF*QHa;X^~TZB_D9T zc}{{Y|G!@ohEiaou5LRQc2|vAKf;Wy{69zi|NIW&>)56)U2MKXaJ{k#m#FD*`Iw0H zvc#ub&OI(uk>856qgbh8uKXoyN#y4NY!{+%xG~wH@=|R??t$)Y;S5+Ce|)tsEA!+! zmJ#Pb<6g>8W+Wq}jT-J4uHP?n%rMF^e#zjh^|J77R4o-Eds8k-Q?_|9r!@RwA$Yex zvKSbWXV%vbuGt=W$v}3Q?(%hB*15;-!0BoOmupv|yM(n1WT{sXf+P?mwnJ!D^_u8} z$*c7lfPd_@n(3`?Eq8E?+8V-HiQ6K!?tEqB8nhN5AHmc@%NEIf`yz)kEuv?Ycgs^sq{$;Be`H8n>y9I;nu_}9JAa_5wD#n8n z1SMKLzUe((D`IU)L&s*aPJX$&6XeR?>T^UFTJ%*S*p zfxde?S&D217(L z-xgoLIPJM`YPLvj#mWWc1*e#@?@vekQfFQWj~%8nxRVVHa}L9a{HCv{z^cH#AedWrNr2KqW$F_ z(k9)NLS?&e5Z33sUq6nZNYePeKb_ATweMn_OCcPZn@$CNxxI~*QTiSp@#q4Ez78)! zqiIlSN+N6;)yzoZUHkX#xo0=iOoj$`Pw)VS!ucB0OTvcSc9Cct(pcT*ud*gxmFcG} ztR#_iFg{Pp-zJ)4Y0%6lUJ1P^yZcC>!W z;Em?4s+7?If$YknAb!`wQ=EsD5s(&|m=+qCo!v3?Z9WXPb2!pi54G@lOV#7hR6bf? z+KHz|{Qh7lkw_Nf=R18O?p)>tmJ*ibYA9Q?!Oz0Vl2)Xar`VM_gyZwImH$$u#8asO z+vrQ>)`36R3*Z%q|6?zZPK@`7QBCJAl_$V!m~)Q&gn(+;{QJjCT$aP1WW+CrutunU z^m!DVnx4a+A?6d<=*d3^g7n(18}Ab1rA-$SjRffA3*5L)(65^>YUgVvA0(>Xq?Y{zFfF;%snCwtjkc!wGz-#{T~0Jene1*rQZIiz^}kG+KoT78|&g*=+nXX z$mjVfHXBebJiOuujqzP{E0|Dz>M_J_*VbV{NL=XVrD5A5oW4lbCt~}rjJ0~+zAxBW z$HFs2tP%ne%-F2iBu%-!@oDf@TE8*6y(n_wd<P346;PL0QaNX!~g95fLM=9YCQ1gztM z*sO0t9^rtj6SMIyIJ>&D;jWN|^H24wjKUc@KCR)Lszn=ov64Npix0e@Q!36E_>GSX ze_+wn(Dx%=!j19an=)Z^Yq0h69g&NHw* z-u2>zV&Va@{*~HfFCQA0ulf5&{Z}^d#lB2gmi#=eYCplT2a{?qT?yE}EO9xeT9CmL zOv$rqcrL#WYW1|S9a_!L#t55`*Em23%C$;__VOJ*P(5&#d-1MP&8oclQk~4=tE4Ng zCp{FKT=&tfoCgk^e`{a>^h0wQ9oiY`@hYAznO~%xi}B^jY1WT=WKejgQz)z|c#$u8 zT(a~o*u}T60hUp3c-BD{Bf^a#I*}8v4ii^!?JE~$jW^mYsI1j2Ff?f`(U;# z%Pw~Y65OxYIeh*UE2H&8>ndsD_R~fQn!g9$6^?^;x#eYNA6#?MKi>^$wZh-h==wZA z!+H}0r)eDeNNTd}5y36oa_3$f=>m)krUT3c7#W$Zp)gT;vTL4?_9gZvzj+BeZO(jp zMYU6^#>fSeEf-=z+2HBn70yrIVB{)X6gizGyk5LhGquOTJ3DjZ6QelfGFQJ!0Frmg zDShJtShXvI^^M=g8bC*saOs>3zxcWaJ`9nah+1T{T?JRgfDCU;HNlsremOHiJu7;2 zBM)2?zJOuGU#mM;y@>D%1~4=HC;n*bFgn|W96DNisjh9y5eLV%sSYX*%ZEyZ zcWY%pEX(Az|F%N^W`Bxi5x1p;Nz!@gEN&C_=p256S$sj6zX+;&|M}v{SfP(|AX?pN zu@?8eYQ)tLA6d%|bCt~FnDwKV_YI_dZz~WqyUTkORUK36*)kE}OuOniCr>-~_1tBt0j3 z&(O)JTAG2HZ+Mv_i2|6+aJ%i`nW%p7jpikgn>tk5L?EcDSlb{ZiJJdWS-rUpEk}Oy zmvseM7hf41+ir_XY2?UjTqR+MvLq%j;p@$g(q`NOcoHU~O>9ta{=1|~I0k<-p=+Y>o%-Qo)KK{&EPS>{Kz`P$&xaSaAg{qC-|R~XrGEEWP3^T6e5O1aode%5TPZ;Bwq&`*f3 z6OMx9#xs7+$+ws&a^r2Vwm>c9DU#XfkAsWLL|x;mRPW)# zYf=+DHqxt$~y9F|BktVZrS-~gVRQlo|zc8 zL*q4)&PjSAmAjNAoZ@sH>@7-oCYHlKd|a`sP2DZ-`MZh~gFbbH4=Mw~Xq{&|$~n%1 z);cpW3Cnr?4D5*0ncE%oktjXI?d%tE4H-fD@ zXu497!EIk>O`+LqIG^1Vy?nZKirbmO*%4j+-|d#qZ;r3H?c4_8|K|9nE;7@RzNN zBxNt}lI#dMogXb)D0XZKCjBn5^h5Fm?4BM$0-)uWoegiwZM5g85AM|iDH%s?GSHVT z`2`x|gp9VXEiJAz4(e#oFN# z=sp&3qh{nHgENpQCkYHnBs%oVohLi>Nl`=@;G{8fS&(uEGGQe9<)xLJX1#3M#vbMJ`(JM029d@iglHZJ0FS|Z&_Ot8kXK#B~ zU-7*&%@i(|<}e!WF{APInG<`RO$I|;RGNZ;PuBtufw*lU0UODCq5xc+OuGj|R_0oX z3&O4`Z;SpXmUePt`3 z1kP|v<#h?GYOT=b_bc*)Ruz*AClAP^vXTRldY}MX*M(UPR?q?MFQHKQH@`cL)q|`* zm$2TpS%BLysrZdR;_EN%Y!bLdieOp!h6AImMskqhC>bLcdJ?;iSOe~c%aa@K@7E-D zGUvLFu_JPNptIVyFVt$l2^xTsxdqiZ0($$aRYRGXnK)vUv%y?FB4p z3jLMffu3lgVJd8=Ql@hZzj(6!dJB~hRo4}#8%UYgS+^+1GyUsH|6=CYq9}Ghe0F@G z?2QS^L05(+YjEII2Q!>ADh-txhWknMzOWi$JaOG^r<&~1&Y@-sZYSJ=*Alx7eZLIZ zpr}U&1UDr^-I4H9Dm^ukS4%dK$fo%&E{Vl0tB}j_>U>(m)>?TQ;RPXB;whVGZhZQR zs4TOdrMIOumei)`Xvh)u2Le7?V=v&%%1C5`{SJ%yW-AtsUKw!IWmi%VEG3T9y zuV6~dXJ+)6xdM>|6J?zS^m@YAvb|%_6od~ZgCOJ5m7Lt@Szv*7&ZGzS67!Ym9oY&) z63pv2TIQwmR5oBbd-?vdx8lNbxEW|81hC3oc~4nu}Qburb?K zTG*0EnzjzR&^kq>w)f|Dcx3a#M9wR7 z83rYa@n3SV^ZHy-WF~mHtieVCaU3yPZWTF4q)JV^ zBZ9$_03yj}K;#+u}4^Xn$h&Dw0KFAXCYnkt-!;OG=IP7UzR)ULbs^I1;^f&)}|% z*X5nj8lu4}Md|)vn^Xri2tqW?Sj7I$FPoU2^@;@xBKYnwJW)aa+=Wba55SxX{GS6vCFjXYj z+165ixVg0lI2YFGt7gvuFexC^Bkt)vX~6$a)bsh94+M4EI>~838J@nmkwer#d+~ zjFWr1%<87?Wg~uFDIy}+P4@gMweX<5v-JssKBZ&t(5j9+vpcv|i<0_yg}`dJnp7>_ z?osE9vV#Do&?Uq9ZUeSL7~a@T3XWYqY*ils*~yD%*x~SeifnM`MKSahOt!#%$=pBG zb?O>g_=sGGL>xT2a!g1H5 z%a`A(URw~}vrjqEl{WM2!{^6IyXRe zg3XR&-q~jkgI6iq30k~(CCIjfs z9v0-pNiZR|R%I&gi2_Z-`1cr8sqo2WExkIOZA0bvVXJq4U%LX71?O^|i|J$bI62`X znURIh8Ex{6G7svnE{`$JnimBkM>}|4)5^BRmT4M$Lx73w#IekxN*RG`962)U{iu~4 z?~x!){w(8ZOTDw<5Xh!w<#jzY8DEcysM~li~R> z5T(B#F~Ws7UY!e&(fR$Zh>=y8?*TlsZ?`VR9ZEospKF(zMUYZ?-)j5O1*W=B-xz5x zS5X_!02Gp!B`n=zxMnH}dNSJMCpQMjA>*p`XBz6v1#XsAJhB@M-q-N$ysU!f5R+KO z0`Ta>)fjkLN8OL6GEJNnU|n%vvoMfPx=S+mD{hg|QMLRGbXPLNzQZ$M`Gs*K=X89Ey@{5L#TZ24Uh^xCzKUI-)_fuJ%ap`6&_`YNDlXwtGTuHKGzxFcYvz`cq*&5 zUV?xhDc8TGg?qATbZgl;H@|#)r4~Ux*uZd8;#KIghAvyH7e;XhD1cTDwbt??Qi!Ie zdB@C{E-*y2K6?8}>i zCurKa#2LonKUcDzWHtCL&y)sMzB*KI)ooW|1%2Z9m5PjuZ;4&wz5w0#-B{ErPjG(! zjApSm+C%6=ygso3P#1XC7>a%p}(j|4tju8@ANs4(D}PId=zvbfsw z$mXmoQc&RGe1^FW9H~HNNW$nc_zf@o3KwC76M!?L+WD>jd;>Y~UOr{G&3j%%5>Z)0 ztS-dxx6bPWD=V+?@buX zg)#>X++H@I0&kcnSe0i#)mfqZbdQ-YBbQQxB6|^$e>@0=?p>L$v#bn=JDkVi*Rd@* zWJyxZD^ zqWtJ{Iaayyz`8Rowt2cE&YtF}0fc z3mOgsFND@&ZD(^;hxOVWB@d6_o<+WySBfn}G2Zv_AH=`uT#ES4Z@D!m9K~Auc0c)9 z6ilC+sAm-7p9N$sb^`OCRRU?*>pb~-PIT}NTU<_qskl$&FR>)rh{r#E9hk6ryihj- z-1oKvo9<`Jx&p%Vq0p*5t?rd!KRva2EUg2m9I3u=mroGwB0t(Fm+jV_wpe zz^-V;k&c_V)PC%X=C}*ljsL>e^fiv#McpVS%DqURGWAEL(D+>(H@VnO?Twjf(U*{h%+#} znV{$YTo{(p3~amHxd*|1ENri==PK@&g-~=u{wuVeU0PHKrjrrvN%T&G%T51hK=V)- zEAj>Z$XZvlD+TS2EIUvrIYaGEMw`M+9E^L}d5(SV6Qz zUxj6~D@`%c;o_?ffAz9Zm6Y-TF2k9CYuLB;c>=JVuYWO@)!-^<@l+Td1<+78*vUC; z{=jX0bOwU_EG6zeWMQREzDZQgfUBM>4-=4z(T3Z|V1Z!E8r=>vX`K9xXnQ(lwHt+1OuV|<$E zo8(JJ!T4~AXU8MYjZT2e?cRZ?@r$dJMuipA?k+%iQrU3Pydy#&kgZC$@k40CS$J0E z?#u`JnxLKoCnfO(fG~KBuM58e!0#SE9Vcd#ntfv!ySrfe^>Q2xc}MR`p#8sosjB+` z))!a?vg8nfW(HjQYhVGM-Ow{vGVOly6}zS0twTV0H&F<*+XCRVv~(GeV&MGy0g|03 zHyfe7b)er?Qq9~J5SKb&3gv4g^u5>$^KcrRgOjpkBIa7g(%u$6Nq3gk5@Lh6>R9f~ z^^WTlmPgfgaP{0HXfE-6D!F;ZaiB`T#U!a`;r>1!ao8bUcg<0FvTzKsRq<=NmdK?) zi}1hNA5l}H&Dwzy0(l;w7U=r5L#G^QnWo>usQ*&^o=HKMdTd$Gp`Yf|YXO=NJDLWx zaff&e90{1aAI`bYYM0>#2`i=z%*aJ9Jm-hJIhO_7hg})SNQvE4sZ8(}>f(#aRB`T^ z`n>A;pv%omf%0{ml_(%X6fu!+3FDSTLj_vu!#a*#A50yXx%ZL4+InZpO^Dz@U)>g~ zAU0ZNt%EwLM%85{{3aCjYqIIm})JsyV zbzk(W1zQ{pj<%K$6;5q&_Xy4P;EQ~udi*Mm8U10dfpqO+u&4QZ;v#e5_(AQW@bzsE z;eM@YZALD&RE7mk-O65ga=2B@;yZ&LeTc`YZQ+}mQImwa<&&2*O8ty|+Y?!k46W|- z-sVfDn5)#*w!LutGpBs@wO%ITNcTJ$>O*l!AZ-e%yUbNS>yN)RSM-@{rxds}jEhYY)8Sk1Ok&YZXA?E<|jm^-O@lX|>!{j2@HX zgu3p5IWz{`BN&DTa87NHy7;(T2j8(fJ|f6)Hy_$B?#7JT2jf^e*_i1kqN?$gu3d7| zmT9_n`0#_F{_aJxfbh@-D1J{7V z$CVcXK|dq94CktTl5|4ay)At*+v{z@6e>8+La9ZdSmi4m`9dm|^R$KqTK;|)?TYrD z_`-<5Mbz|ib1Zhz*>SluzcTzt6y}y{nnX?_SR-}IPG(qV-Iu@s6H$~FLi1#y@2NF+ z<9@tbSD#yB1&xi7@27m*w68aO@mVENjg56dHAR{1YR%v81R(7p9n*;+&Sig`qa|yc z!}JH%u4e2YMv*Dc>5q^8b;MM00G5;;rqDAv+~1ZU{JwQe%akZJa2G%{LsTji{4*b~ z^zSYY2wF8T-kO%{Y5qzK*T5;5B<7Y)qv6|*qxRw;khK^N=$Y?@k)8)Pi4bs84J-!H zib)eBZ2CI@Nfy$}DaZh6>y0XS)*(d(MTS7#cVS(}u18ELBkB{peomg%x%fw3Hx_8-ZjtORQbEi2JuBIzmWIHn2bMllq_ba#C- zEjN;cskwRYD}M-Tvd2X5RUSC6D zKYc0o4IF0UrVv*yj9L4ES>M3>Pj-E+ zyq0le`4s>50syisig@kcJ&t#6}EBN zVBR(%^zrbuGDijwFJt+u4yWK9zzL$#t|pZm5c_RpETYDJWp9~BHOWFv=XyzIOUn7s zuexY>!~#ORl^0NtNK*nXWk*YN1t>yj-MRdQD*}iuNSKb1(#Df!eK69Ukw>9!;vFG- zaj;4HM>0XeTbp8({za{o91B!HWM+-I>NXrnc;S15)c&#%z!TsySS zcO-Ec){~~j_P0&zM0HIrdj(S9_0Xs~1|CzO%((w40odW$pzA<{XIa>au73B}V z`V(^YhNZcqyVsBiY8Z-yQ0Ew-lt-;29cH+CVsolH?_;$6%reKeZP3rUr0yuTP>*-X z@jls81TC#Hht)gfYdW;L_l%VXv+KjI504U#5WChz|$lYwCp1#HKO6& zZ-OG4{c?WjUMWXh6os6%($o`^>R2NPpd;z&VZX*6%iO|LGK7buVBuk~DtTgyiqj_x zVwzlt`{^jzDdr5#+2fw(Lra;;6IlSP-~IVS%TRFAb4<6;y?mMW7jCh%@inb!b87X0 zS4<5$hpZ8y2R~!$6X02g%^xRjGu(D&e7W+_!$+ZuE;jvLBjU)H z{fOaYca_8VQ79kUlb91#S$D)`5*l5Xr@EAbfN!j-YY)Al6qvAAX^_>)BV#J)yv_fr zg^h6Zlk$8hmC*o01m(?yyct2|Zt(;Z?m^e>NF0I$ghc#UHK+4KKA z;@>qG&yy|?NCbsrsmOQmOlk6c-VDIlPGb^wI`&yUstZs|_1#ri>(1!@2j9Bh&y;HcWFqQ;Hn3gd9? z)o9PyE;@uDlbucOaGN~TFeQU? z_L!DYDFx}!Y?F)p)JaV=`B`qSz0gY`Ij3Km>5y^5;~#`0(~>~<-mSnJt>C6u zm^S{8UQZZrSHFF`vyDyYtvT%iAMGM!kn`C!;-R&6Ucuj{J>j=sHx{von^+z7e44r% zL1{V=_U6tq4*;&^=YnN{cI={xK4<&C?@z`yLC2Y>`k+PIAUOn3Xp@hgnUxb8R zQ}jfb@KJ5^jmumx%ebukV;O5IA5;LvYGjEq1llzW)_lb8@B5BX8#>S+f;}TrR{?;u zo}DE%=S3HHAR70Io8=EKz36);BFOiF?ce;ukRsGSO0f#I6lXynkHuj3Ix}njqBPI? zTYfO5l-V9qlJInKw~i3X<U zIe$V)6kzJGCjk^{f2SH~_3y`$9$B@X=<Z9O^uWj!r zd3m0^lDHP#AbB2XCFf&P9EfDfXGFA@n#ajb6dH&W%F^(^2yx5HR}8gTBPho=2}Cr=o>^#XpQjMRA-g!0#$Wza z%~g|KI)4tPV>r!A-^ECn60Fx;HoepHe?Qi#Og!YGC5>o*So9Uy7T0q> zjuu^$rP#&4p0ri>nbyDQ@w~?)TRI}`s_he9wi%{5(t5lEOfPcu^5DW}0p9GZ8rK_^ zMj(z8#vvm*$VL_i3@64sA_wATEKX9e0?XG-A-@=blur~%{GTSsG{w#FjAk_gd0e<>732lD^TLA5cP*_gt6yDAEOJ zhrprdJ!gI3y}$JXqQ4a($tNRbrr1}gX9e};t)n}*pTsQJmhPZtNT^-;Qg@p=8YyW( zTdTm(!g%QTDu~d&Pu*%WD7NoQlOOeoltCR=PrNN9HFBbNz!_12%T_zepcL1ZYz)S3lwE6Wo8jE z?$VJNpc*mhBO@XW$|1CUgd zlQ(}8$^I=Y0|qzdIO@f$Re&jqW@g!jM0ds!J$1G3czKT_`QphFp2{iH_IGXaijhp{ zwa3FxirZm|2|R=D_$In5U^S)fv1!P%RULJdZ;WH$BlN4iHZ#5WG26@h*bzK3-#Akr zg2#`Fi_4%btt1caOvYHZhR*`|5TT2%hZL)%-a3cH?nr5kkQaAJN^p_()f2C0_){yO z6r^1D3$j64Fjs)Jr}Jvjmm&^H)RFxLXXIv)${&52=ep!a5g$~G{~CB?EY*Q`|Nh97 zv1GaA(JXp2}9buD9sYsP?zGmPv&XG2tP){F8Zx=z)zZAI{ev zR~pBcp#FJTJteSslsPs4oO}9Age_rbnoL84A}w7AXI)$n+{wbUah1(33&iH``a?p=x8)TECm*iP~DV{j(x@yHt=uYD+&vmmgWARXc``PtrM zmJEJ!u#qwZh~M&s+AmX}ZbGd=G(!j0RfS>fe^;1l|A0_JvT!yfJ5OsI#wAzkJhis?!1S1O;%=eD@NkLX z1@uAwvL<2L^o?&3UxvX*(#18%nwI~8qJ*Ht$|uPE)zp>O+Y>8!$$!+#YQle&QV*b9 zcN<~-^v6g4Dy7ueQo28v{x3{*N(q!w3ryVq?@#ytxj)_i_M`)n^8ZKm(YVMRELa~e z;!&@>IeP>Yp`V9>}o9GT;_hkZkIhUT>-k>?K4p74C^(Fk!IV^03{JucAi*rdh zOam{^%4=UWc#h~(&#==)MuMpBC4xVe(ccCzD)V}lCMK%AUX!^z}E|21mM@WTqDAog+_Qe&jM zxt0il7MG!$PgQ`T0>(Jh`ItC}9PWmsImtWbf>=D3f!J|vflx+~ENrChG9Z@A*INju=&!`bjqHBJ{xdWIIu!T$@Ul8KEpugc14nmJhP1Lf zfEhO9zQp%z(U3n~4x+NI#n^M4T7;Rr8SGS0de_&K`X5D`9w$2VFXvtWEb-eTDy1%~ zzIvKz_VZ?Y1mlG{r7v}$+LTV=oWnY%<0#+7t3Hd#Oh|8Prt1`%%mUg*w-45 zAaJ=(%Z{5%WM{qwHplMKN_?|Env82et$BWz(73s*Z?WYVc~@!4=9O+;S`&qfPc+x+ zEX2ofOw+$AKv}+a6JA!dSPnuFGq2txcd}duph;!vPoD7%Ks1@y`;AQHGjief{rt(@ z`LvN?sPwu>urvhtUR@b?wzC-ISREHKt(odvY;K^J6XftbI=Tr!>m_vm-)Wf z=>5;hCtL=2BfenfUY8I3^g(RhmoHJH@F#HGqL#Cfg(=*)!*0;>M8okTodyeuj^OK# z&sarg=`mns0w}+-^3&UXgHdg}RH)mr)6^??bfkxQd-^fu3y^(RMM?(W+OxPD^H^(i zVU)0n;rN>rFxrN3%B^4rZN z7j%hj)KV@Q=0Oo3!DYl~{X-3L1c(U{pev!$r=4LjmVIV1lEzVi6@B zeUGzl_odcythbk+pPyr9IQn#PAt+9fck&6aHz-V+3{<~GEAZqeYtD1PuV4gpHY>Id za?KaK;-WosWEY0}w}UMTKZC0C7X2~e%FiX(qJOwlr;vZNZGcu%D~oGiifs!OR&AfL zx}9rq#%gn`9^BO*gD_@ z^lWGuG|YkCTiuHj^>(HwYvr~tcYPY?9tQ9kigNg~Qz8^@dk@_XE7r#kmWWNen1Mu@ zJZVzoW!7P_N)V|T>op2s^KD6}9%62-|v^}hb%-OInL5;gq(!zBd zM_pwR{3}U1Rd+>*qul}|rq}WL21fw#$;XEyG6E-u$`ymxK4M(LQ znpG04DiKcgi4Y7`3raF#Qg#T7eERC<94T5;<9l!0}AdK%GFZ4$#8{>${Mt;Vm+D;sdP-{LWDZ{Kb+< zc!JL2#pV$$PufuN$S_G0vUTqQiEW5{EU=NE)x{@Xj&l}7X4CrN{wDpn({plfot1J^ zd*gObj`-C;JV-haFD*F1!%nmkiM@+S#>9j=8s~{Twib2Pi6Z&8$f^SIPuHRb0)`#xk4Bgk;y3iUYpJVa4Hf}2U$3uA){=mAAWOo8LOB9l_6bb)GE1NB9E$#g;Cl?i} zp2ryj&LYQjlhTB@lG1TiMB9p**}~CR+)${QZibOR=nniGNApX_1{@7{L6@%Y+{Wj~ z@1T+gw+v*|9v8~G0Tz&ViC!8h-6QPS9d)^8wTHQj_?+HUW*v8t>vXUTfF*0f*;hl>2Tpc(Ue`$Pxm5wi*c<*ed$@euZ%nOXAKa`JF zsJhVHoW=bIkn4jG`Z|l9KH}#V`497BS4P5@V}~yp`=;jIr{gy_gB!);mIpXwYbfzEuQ`cbaI60nuQ zR!WDKw{-^<*t*W}qSN_qp~n<9fu+_En+g#RhSB%ob!)-?ial8pDEwsmJOGa<0QJrqgHC zhSrf1GI2Xv&nhh>ZJm!O;cq45|2E-<_%%nHJ}wrL0?>tHavWuLr?ZO6<0O7n+vB>Y z)S*XCPN8TU8vtqQdpu%70yX;f{Cmf}9mNL#KLXNl#HK|QiU7Fy|3LthsAx$~jpCuD zl9|!n3>0;B2<2dP&z~Y1Um&1g5R;b=HM)lYhSfVXX;b#|E|Y!ZiA50&zu^35V718gL&K~U7&$Ni z0k<>Y0p(&sydK$pLA0%#Le7#PFs}8J6-Q?`-Z6kF;i9szkM*w7Y zJVrI*>dwZlAaLffy3g}w3_GLBVbSFa=$+JhMlQH~{b22NFA##6$g%Pwb`1S-YSJQ2 ztV7SR3`t-*(n*3OTlaJxU{h&l_b&Z$ObhXdLVe(2hd?o*>MJT82^Zpc-0tHh3NjbZ zUuo#hT_j?r!}Bg70tGibCCI8@4I*QJx*ze$tBuqTk-AV_3g#+L? zKWkFKqs^l^r16PC_FUVywAq z_piu?2G$CcmqevT%}x|;-b%d8zNjSQ1eODCpXs_gzz0XGyg8f~*-sSMP-fzu5*prc zs{-dQ(xHV+X%H*W>64r|{6#vXaDT+g&$uab+Zll=ga0lNU}jMyG-M!sZS*}Avs{pWR!>k50^aEDbJYR@M`1vGCLQH z9^aal3y4_Cze@;YS?}>SB5;Zx^LHQ8ONYs#*uGX0n0u4p)YB!*D~i1+p6miqR-6(5 zwC=q^cjQ19UaDJ+P!L5nB@ypQjH7IZkO1AczckUrUW>a-D2DzMQII~^+8ZB|hd&kot_?^T%o%yP_hUW_; z>-kv`@_-^@lCu7FJx)~#;h&NO_AtdT=m8S6nAb+-gW!OjZFsvEwNnQ7`Eoqc+wG6s zSZwXwIqp&K+y%+?yCyb4kEZ#H=X*apK7(jM1`soR^zJroUw*aJb5jYn=7$w}wXSHgAJy`P0RdpR)BilC7o-k9$^X ze1LW??hH?2bT#za;?F!=)2j*@Abo%yDLpyGa;mT_4fiqf$J-eLMDS4a$!Z|W-aCHo zMdP<`4~GX60cIsl|L|7x1g=X%#pnC9QrRYaQlb$uSof(Y6F*~jTU0O1vUYu!*`7F zq4a?lS6gYAb^1~xmrUXXH_;z)ixY-K=?Tbcdc@wlN#j+0N6c!dVnE6xn)uyK@u*z6 zYx7z1?)ceqOdrr=p8kO@uJd&@W2wo<<_I|7m{#u{PcOXm*26wZPUf*0?eRGlVS4$~ zyB-vqv#$H@ z`s|=LU3U|y9jNPxi6g;g$zaDJ8Lr1!7`0-3)Yd;PDQ)tB$eacr3;l+l82I6Q_r|$j zuD@u|YuRaa*}z%U-~ILI&mU`cSm@DprkYCt-lhO(Yz>06q3jdxV3yXqPu${IG6J&e% zqofXiwW%bnP|6eBXR?c7`E6}*V1p5&z{Y@Oi+Ozp)gB^f43LcSa2$gREe)KdH#GsU zZ349kVuBMv%<&~Z%X#tso75KX}hcV0U8jdLcB2d8j-XoG-iR!gv z1a0!b*z4x|zTynqVVgw94vnvE8zNmAC>~6OayY4#IoLSG#3vn7XRyW`eVMJ981JyW zW2m<_+tg$aZnFQj=Qr_C8I>#5ZmTLTEGP?e+DPlu9{CSG3v z(&5rP9L0;NH2G91%HOSd|ILsC5Jk!qHDY_DQw)0X_) zlvKF!NpJwIS(;u3m|sPxU{l59|efFxvUQfn(479(CcA#KTD zM0>`;m>fjl<=flQ%Ev@|y@Hm5c@ckOq?X99R~l}7uK1CUK-h=Bye#67?@q&M@teA^ zfmIupQ9pLWyp#Pf_;_+dhK)m?NO=%uNq2vw1#!`XU8kII7&m=|-t}9rz=D%xc=&65 z{#t|sQeZ|yH16dk7M%mhbt*fwzaRa%THjC6;!7?>=o8BNgG={|p!V|*0Ydc4;Gj+c zVE*bM4l;V)S+9Nc0&KtAvKF$!JxmfgoJNn4uY*{uY@|)L5Ff!2ns+?wE84L8nxN_7 z4Kk8vY&TBAo_wXdm8A>H2Hso1>Jn&ZK4uufP#1o<^ZR*Kc@DV9|9Spb&^4USr(R1xjo0Uf6*wHBfX^15eGV2&RDS z5GoEd%wsOC%lw1j3~=3KDQv5w@w`EzFJJsr2mpK;JMm+(wt0DLNlIl{r8jJBCdkH^ zwim-(b$1qP4N?mAJvmkkrj7h@&L>DNk&f5jXw0yq9AQK|*qta#Ws~xV-N8j8U`!*Q zLMcv)Ri#bhyrdm6VwXS9Sl%IvC2QvrkWU|^9U9E-qZQ6bP7MsI4U2zjsnn+K-SzR@ zSVGiRB(E@|-HYt;<2H-5jB^K{FeaPNjcTujGbjL4w8+xS5-piMk_Ln!awyDfq;c;E z&yaMsr7-1CK?a8aHJ}{9S21mu0O;sJRaGb$x6}9>0q)0Klr_7l=lUDd_LVSr*qdp= z*z$QBT{uyja(S;&socyRSHb43F*;r_Wr)k2)K`yrv-^s~)@D*?{}C*-VzgU%?d?Af zx<8M-0jwLso-5;7gGhQAI+4PpzDy!)HAgHir*p0sMye5}LLnT2k>*%2l}r@#7ydsr zVFO{*!U8x|>_h#6vtCLJZ4u*lhssQzPQvrLz<4|~nbf;3uxuug@1*j<8$z+qU|0o7 z#qDuDC4A(Wm1BylPRT@*jkqgpld1k4ZR0pvR)>zZc8ko}8bPc{Jc)J014%ZjdnP7Q ziqZ?k$C}~A`S}l@FEL!B34-%nlj8dOtQMfUF6@=Jv=d1~_)-8q|LE^0f1dN`^$%`< zQ*S)L@4XbL+%MBuN5>O#(k?yo*`Ti60t-8RRLc}6<4JPpW^WG?$hGpetU;HB)p4u$a6Na#)bu3A}?z z>kdM$1E{tXU=!sg^n!SKM^XLp_N(h?Ltt7RVRnc0ybixfG% z&szTVhNETzQ=0R$(`9zwbqWU9w=hcnq2TD8W|oKHVdmb&s*h_`Dmmy=C3vtod=8!B z4`OqWp#GA*!3j#;)xfy!d9fHNdeoB_MH3CsZryU@Gx_d*OE@?2`GFaqD0{Xqp|4TI z0rK&u$aaSd41Ez5QU*V%CKSPz^a%Jq1w<$P8VaHrv|b6aE031mg-n-1{~TQ6pvQszQ46crLs5 zaAb*Wt8g*yha@O~ByP1pAqZ-xhq(JEp|$<3Rg0em~S&M!@{c0r$hOTt(DzEudGRM=LWJ20aHB56FhnG!}ok{E$B>iz9nP zu)hyDuQ@3EpbJ zPdq!^9DAp&@2%TD<9l^+le7AbjrZ5gC&TK%5_qgYqdP>R1 z8G(5SC}z7@Y$X0{@|T^SKppnAv+ebL;R)eJJ!fgh!j%gl%(-A}QAMkBlyYZ&=<(|!UHlZ8eMgAO1s<@K%%JWxpK=j6m!pfTD%sk=Pg z%rj5W&SijbK`@=TlolTha`0XVKuQv84|uPC2FgPov@5#}TDR6j%_#mDuqA6jR`yJOt2&&J_L!&J zB()aY8RD{=tfnCpEJhIiGoS^3vX%a7%3ReKHZ1hS0fRMCX9Eu5f}`KlaNwZF3*pQm zRli64IWRj64!3}7nLmfW!0Ln&mCCYxJ(t(&W0sTzYqXT&^`B?UYnPRO^1J8e~-*VrwG50gsGI*iSZJs93QKC)YjY`q5QX zy4+Z?*t8Jluw$~Zk~F}L#31rL3_h143w8>O{2p5BKN&y7{)Y8+K$FPHUD0UymukNU zK5J^|NPk&OUtbU{sm|kA{=YF1%|JK-{$O-Q3Z50@28=Ljf`AsAF%b*hlW|@hZz3kt?X%k@Js87b{btNgnB3=h|<v#?n|eUc0X1W|TnH_YW}%LLi%YhV(g?gy zO}dTVHa;*BCksVpeM`2=uEzUZGZb4tDl5W8lhv4o!{UUpIs~St?Q2^xfce~#>PE%I zDv{e%;?x3|vu*JEBKT`*C-K~%9!?IH2_QDC=D9R_(=K`>?-gT8D#fX-8SaZg+{Cw7 z3+IDs9z`vxj9}uCZ(&oLSCBQm;9(~V{)zn={(|nH(qiGEiRQ*yJgb(#DJ@PS*_+7}9 z;?oQDQ34qq-txoksvvc)=M$NGI$3>wri1q0W(?`)lL|iH;#E{|emj=mtAc@C%v9$p zcO(~-0(evZ_$y@j`vabUNCJcN1E){#BJ8>3?ONjwx5&B$dn(3B&|duB@>7 zb1>mT9$4e7LQAEC;HYF^2sKl{%3pHrNEL#dp^vRGMovfAhoZS)9HTADN z;@SY<*!yyyzu0$d7qJ_!afMW@&Ar9IEwXAw#}H`*fPx~MX7i(scfL-0iQk~apQOXI=|yIi@^F%%8_V|=`P2m9 znFFICkEyZ+5}eTAuDr>iu)1CmdefcNF1u3pPQ&vp#r{*+(80G*BEqRbSlDoF1Z)ec zE-Za8FV2{&ag1{@t$LK4LCsY+bFjJ@_Md5`t<)>6;xG=cr&9}fkxBr?x7-~r$uayh z$KZU}%&_nnztfaTdbKWaKL5@iI3UyPVwQ=JM?ogMniCA`{q8&wYV`m#KAb~n{lZr~ zK;tv`lrjF~Vz{?G6)+98mqivHcfe)ik=;ofemE7hJ_DxRS`!^jSiNfmhl0`LZSUwd zu_?c(d>LS*EIbu@PdfHl*$}1^BHcT^=t_4-`Q!VSUD=7Rf3p zmO2YW4x*?EzMbJtz@hl|571W}evQqh)t{}dpJgfvhU!S(vn=-jjpHFy$2-y~1zmEEe{6@OSOhJfwmaf#lP7Q~(`xcA%Cj5*a|?Mo`}Hf<&s$WBhp zmnu^AqpXi_Vz83W7@{>i8;=(V3~P1B%d z3--e&z30XX8JGQT%*f0^VMEU&SWm#Bg83*}Fj<#;Lx;jq#eG|G^sn|$lC>_sDA$IK z{a(rwAh~{tKh!)60Xd+aSBvhy%0kYD=%50Ku-QjVvqNDh0_bHc&C(domOv~vo{9I& zdS|9VckTQ0HpU^h$YxB)6I8h&_X!G>TMxp@E>~OPp@-2)VF^(NjQC~%JgEU9 z0ZJjOA%-%EY@hi6k}tT|QN7PYf#s}7k&R>@`?`4yra6(T^Zl8~^zd-NV&W5jRLT@Z z=nMLv?j#gcX6_i9wX!m8U81YbZDf|&0C}PD&=AzZsC8>Qzk2~IxW^gD$He85Sa2q_ z05I)DyJvRXLQPZl*V(&&A^iEQj()6yAPo4U&zu2N`NY}mG2IytMKEFGo3CfM+SUa* zU7p3lJ1=M2J=&lqr+6K`;@Po)(&_ubww6ID#T)PMYgvXS)qmPXK#b)ry4=ZsV4i#vDMO zYugRY2STr&zgW#z<;GZPZNXK&cu9bgiY{H(Okoyv^ z_`@+8R_IwdM}1_TgvhPMnO)E2n(}fPpUH{l?M=hpO8ja7({DW9q}UoCuStpK&1{I| zXqD81_O&R%eY-xUivCte`@ieE`nq50`q*uXFi|W+mad91%2l`9s&Kv;RidlgkLW61 zR^59{8k*?wD352)2G<`0Z>DoGLq$_Z+T_ffE&T%mTMuq0)I@hlE3LY2rf)+;^noP# zC2kdC-&uV;c_^z31iLe-CTU>Bs2FCgur-kUAvRf^lgXu5IfcL6+$Wy7?1;)RV`{SJ z9YvG6gJ$l1JqstB(5EoT1p%_)B5E~WwVy-zQZ2;XtcpHA84Zn`WWN7?EU)RIBTYf% zi~mP-of87b{@;Z;TM3JSmyR9rmfG+ zOgTwM1B!vh%g>AT9enNI1|JRTkVY=Of-ATYw)z*%h@gi#`vLdnpTQA;hsb3K3)3nq$c91DEq$hQP zpbF*7aZF?mN$e0Bl#Egb&^Xd=E2M;d9$^=)UcD#{@7=HjeZQ6BMw!lO5xZ%=T)FmKGo|)+rSXZbvLFJ{|a+LQA;dq(PJmhgDeIy5R!j)G}K+K`@WsC-W2gJsV8si)L zVeHV|lUD~DBi&p{`^kPdhBGwSLr z1j;`*O}NQI0`V-jfWDaj>G2$6Dej9q`lLQn@}O z>D!^CHiVIGj>DrE ztHe@)tWm9s$p?;~Itul_{~qVBv7jSc{z~?$qHsk2z2twOmi($7ZKVcq`hCvfs(c!g zO!9ggS8(g;2FmZxslY0~MH43tF;_=(NYDuQ#yy93pT63PHh}HkZnIKs@KBnaMd2BWi9})vtf09D(%$%%rsk*dJXL zK;~pP2`byE)2;x&k$C#>`X@Ewcod7$3Mj7g)$=~icrc^r7^!lG>f8cHU~FZBrD8%P zkoEGrlMc8FBg?x?JoYsBJ$Nj}t+Ozfn_J9APzk z00#J|0{13`7>YtqGzKZAEnx?$;f?L56EmpZ&f>8{7D*vJX>2(0Gp-$#P9UUPOL@~p z%60)v<7q$z$j+ncIkO{VDp5Bk6}8MIzhu6x3uOQ#ps06;K7(%=ed<;ZrHJ5WkV3$r;Oyh}m zK!U+a_gP|nwf+00u)59#&%o)Q;0-i?`U}`MdT70>4Mtnu5jYoC5pU>_*y5Jr)mfbb zF%aGrrKQm3P$KT`XHd<|Lt#O!z<7>SBXU6t*vxp%Pu(VyBa;o5`yt^oh{aA>mXH@S zo2>PFBJ~reZjewe=*a$yQ5!{j?$~fE%g#rSs4arLl=X_@LPGF(_7ohgRt%hx!R?oDG;4x$t%Rg(6W0wbX|+xp{Q)? ztpvtB14ijz(7!isES2TXVXX;T*v~2ts`c$dHrVkCGWahuTBF{fU4?KUI^BAENrO7Z z>EJ2MCG{HHmejE;Tt^l@o%$?jSo%Vg*>8u)tNLa2Zks(RCBDVnA$xwhq$xz2EBcSv ztW*q)Uv=KaRK*Yed}Dc+>|Yh09|V4&5Z<;7_P*)#4FB&Y>}BNo2-~ z?fQ58q+ohB`hbE;VRQ`D)Mq4i(W@^!s_(*m{fMte9y;S@+Al2x<~D!l@jP88k#_kX z3t&A@*c2AOtHqP;TQj0jR5+<`zjGLTR);vN8w~wU5SF|-?bLs`HA|N|nv%iJBNkL5 zpSAN61XN~dF`hb-+MI+L04&TplLaPk+eJqsL06|JvITR;JbiFJ6i3;4a>>m5z^PmW zD!i^LYPvSuc0WgiojU?5!p{Km3@;tui^Gvr+fGZG3|%DC)DCE;Es?cY^1J}FoEMZy zhO2?Xn*;SV(9@H!mGc1ynl*y9-IG1Q?DO<=W%s&nyz#xjYW!)pEbJ4&+gBA2^EI3&mr05ZWFelk(aK;do5PR|Z+8|#H9q9#_xkBYF2V9Hc zU`6kE_seE~4EIn=LoBFA$ z9+*hj*42#nsX+Fpk9#_Xn;2rQ_$)N3|dqU z^9Bgt>Gazj;~IZBP6ZLr4}m)JG8tQuH>^}lXWC=4q{zBVvnnNq_7G&P4#G>ds8Y6^ z-~DX>^sBBQfa%7nWJ%`$X8iQcDg0;<*uSmcAEB6C)9O0}DaA2AN-)@zy9c@}O$UI? zB!oi&WwDG>k;!35*#%{hG#WXL9Q)bEbzr?v0Epv!dlvOG>rJrAv;@GE72*B+WKvRn zW)hfm4)kURI63>lDl)P9`W;{;(66X9m+ePz)L=YGj6Fre-uvRDhWh=;)# zE>k878*d$6r)bu9HEWdWmC{@H`7zVVMlo}JFZVM>Qq6BhBSE=F0o>4K_Hz*wf~Doh z`r1=S#vke|vmGNA<@THPL#MYO<9DBpPK$G- zSJ+8R1uYJ925XyU-u`#gW8{i;klNBwY7UDonIiP%tB7|)Hw}HsvbKi|WEUI_^-Y!C zLMYGwSgo$;dtZZ~#_g5$XQk&L2KrtliK7XoUK>dhPQqavhw(*`P(-REOkfgT7~&92 zQlRkMw8amff-}J%`P3U8HBNXXFZu&UOV`a*YsQ~$QNg%KaEjksCa~}JME6B}F9{I?Ecq(~Vm^|3@b(E%=%* z*7_V?5je>2)z35k-`wSY?_1A>>S*?9uFh6LgUkW&)I-NO;BHs=8)*w4P}LY->WuZ? zHwNQ*3N*_M!f)GuWQBi5iAfH3W<^KnMfHL6J}1cz36omFYnY6yG^g|ySQ|e7?%v;_v0r3%+ne%T zhCt>?LFj-2RY63ouL$#jR4`+L79DHd+-o~seNi9$5@jdNsqfJnC%c!4C8y;@5m_0~ z#iT%Xn%&k|P;=)-RXl2mQiinXAETLGXDx-!XPJA}!HP*RP9CZq zx&BDD!cJL-5~Q5k*}JSrB#CNryeO-k0Sywq|7?(4qjT_Fh~$J;kiM-8&JPI6&Li-5 zN|l5UQC{7KS$ElVr7fQZeem*WOBR+iS;$aHh;{>FcLk?@9!;H|AUIbLSNInNmIEI8 zGtQd`+6liVyHlYQg3yvu7I+usmaBzA>PB*i@OBs6j5yO$BF=|Rqp#Wc2y1b$NU`8# zEl{nv_IyzR!3qUILPAY1gvp5A;Ax4xly*{l!|RgA3~Xobn2R&%bks2TISDo22V4JL z&~T=`aXz2zkNFcUj>qLKE`LAyYvDLEqe>kmY%(nO@YnEfn6;GldI>QH;@|3wA==v! zpKF>w-PH@Xgkhybz_jSrtU|Zsseq7fW5ZHa)n_31MQAwm>4Rl#-QaT-YupJ9Z!7(A zE4CGLwyo?I+yy&fV;{*JFZK4JNCO{)6h%{9SZlh(W)`03DFH#?h(>|SJQ|fq;Uy`v zZezz+lKUMYqA=v6*&`}0*C)wB%=TU>4dKSaQwp50iL1r-$YVtlXlvCU>9&jGyyI2j zifV)I_D3eGuSL&43zjWB$naes6v*rEa9a@mM|||xeNsy!Mj4-liwz|Y0z9-uYP=9w zCN;4}-+eBkVNGe~1K?%2PJD!a_5P#b5Taf^I6w~o(FF0R&FZPG4%Gk5W`&&k(~yo2 z9v8QZYZx&dPJ)SVZjxmzEy%3ds++oU(nbryvTZ%>{7!Xq%15oF3t}hVa1D`(Ph|qr z%31`tMJw*RwAb7(z|*pF84i|B754LdpoV?Fc%T8JKjx=5pFC2S!trOBO!`FHBtikLsiJTrx~vW4D}`%jNUI+0gz+4 zmr`c>D!OY)IK{7Ih1N$%n9(xHe-G7H>E8!ld5l9O7y8=ygfRXU-W^MVw$G3KdU)Xt zza#M39;?~nL4O$c_zoZXeGMs}@7M=I2dJ#Riu+&{zuNe7A=~gVi+i>kW=gML>8436 z(*B@3=uGVRw6}=S8X8phPQmnfQK?Ho@A(yQczLmouYYCSAGYur;laG9jAx&aEjt`8 z^LO~Z9C-NLXW}Vcmq{4T5q>bJw(mQm204Fdc{@Q}MiAT{##J5~?#LExy9l+|%H)nwdST7A1(dIK`gN=(%_-IS5s&XOIjbm<~Te;1EhXxuxT zoS*ZjjpTy+YBCd`!<#T#)xEo(s>dFDw0O#AlOX>*dqkA5X+{%}uabzrm;b3cYUJ4JQabTj?lQ(|E`u%zgb@ z&p4b%2~&?5YMk?r~W z#I(`Z2Bu4){G_46kEy6KPsrGP*OrwxJwT~Kn4aU;h*XMLZo5>1V6H8`n)>(fx7&4iY2qM}|;UsS>~qt}G95fPY)(9f9u zxn&?IySBm1I-S{vuevlR5(LMU|MI_>3T#0Vpr3gx;P#bTa)Aw9P!IE8yYk~>)UMoc zgq!?&gp8DawQA$u5@p+{XE_`lE}Q=8!*ClTQz6uw@<3ey#+@MGO$bBudLg4b0#_{Q z<9apZ*UieHK81&ccq0gQz!F;|`cUG3xaO4~%ai2vRbw-;WVB3VYgtu<8_%>{MwzOh zCI=5P?m!b2J_|AzlxjE!=# z+HjOJaNSG-(#SucuCPL0H?&b|N;wopuxfs*0snobD)lAyH*s@6gmB5mi-m}=uhdzHOH8rlX>>PJaE&094jM<(0a z>A~dEuS-*+Nh$o~f4s?!Jgl$jp$PT$-eWd5iqQXOq7(j#`m5^Ru?$e9QOxg>{C-3J zdchxeQN^q=W}?kosCSfwxmsw5=l5QpbW8{WvGc!RIm-oTpiGo@2Hr> z&xu4>7e%^fw_^yK78FI+uar$bo*Y>zJU^rHYz~B~BOc7|Wr>7KC{tx%xrBd+6J1Hf zgYiSWIuk0!Y1RVJZ03wu7)@Q$s|&ayIPim;fbZTJ(MmGazeyfF{+?9OF16QK=@WOW zNA;DGG`rK>1<}1QcG&$V?M9GTY=c2734P7UzVb(=ghb&Fx`YyWguFHP`7IXReiwfH z_4$mBu*9mR$iqd2Y9E*ov?W$3*}3(oZLq+s$oZnEiEOljvXD&e{QN$dF9&EqDamm; zK3Nu3D|3@JY5gJ$Yj7gJIiAH3`ngeLHPue}Tzb@GL2x5Pp=il;-TPI8k^lSlCKJ;W zBerksk`A>S@RZ@?CK_&{EB8?|t|-w3xs|W8A&N!XR@%|a_@CulM##u>^AGN@-hNd8 zCdRo&+={nAT#L&+RLr=%3X>HYM4Ph+&Hsml;1hr`0to>PN_&~*ITQoKgG=EMEz%f(`dbMF>p-(wU z1WxV_68l!hdyhm2K*v=RA+Y2od88DR@3;N9EXRJZOcF}%GoZ4#<^R@;c3`q9CV5+L-aFw#}Be>^*4 zWxAov+ma5=Cv87pnUuWMGIP6%)vkwnb^=R+au(_WHqA@In8kAabddrZ$MM~Xxn zzF5ysv#hf#F)ay`^y<>8BqI9!;pI1bf;0D~R{t;pt0W};hir(0uSTIFM4(NK_}(R5 zQMv3`Wg`2;hxWksTxi=WFV$(T`se|FiLs3+ zy&@a=RRIl?SHnLoVKYgbgJ_5qaTV;}PLuaeU;r=|)wwayA@#NLe);_y|M}v_QmCu% zcoN?A=hdeyA=W=O9(AXpW`_UyA|XXvTuOWZhrk;j+oZ=4Qly~$I|k?VO(TOPofk@Jzv^g1yImw7yLbMcnwyY~M4@^(BC zKJEmc6KTyufC%FvMkKLmTDjd`%Q-HP2wzBj2Zl1Bse1=l&y{7C1ETSRSOYfyU5oC2 zZa#Og`J!;C8!@Bn_RDdUf6p0zecOQsg6G)L$YjfOIpBDGQN)Cj>*j)pIdkN4?XR;I zxg+*!)fxt+!`GGiw)~00don*;&9_D}at_V&jnDc69!wG1?vUqC(tK=PV_G$Bnrk;? zd^(Q~P{s6CuW@Ui-VY}{5m4`*4^G(;1MMn@-S3hi#+2VY$U>=(Hpbjl9o23&lQVht zMk=2_9SZaUEi?m}V^BNH>lZm=2?sP1oY|L#n>9fGf})0bzxTEETYZ9G3eN6I?Z)Y={QV-mXxY^AjaSn%y}*aQ*oe|0|z(1kAduZOpS1o4i; z(|c${yGisR0*L;verS6v)K^+HdEu2b!H;Ara1WaW@f?42F#9Z$1%uRerW&00x^6te zz5J`G)Qb<^9@gk?ZQAZjdC3aBHNcFG=^RhA@HS(A>-?lRpQYtMxe6JBOla*U_J!LZ zO>7TLnHD%aPMFwQ((CSc^Y+V6;X zkH~0N$?8(+9|-i+;wzmVc9z98JMGW?>r-PU|7inSHKs`a_c`lHKR`@}0Nj*BD6m0m zC@+ETxe{s!MbX6|!JprHch>J!dYMBlOk^)r5w1a?^k5>@ES3;~GZ4Zmf)BH9U#P0D zkZXAOF5_A4o?n_*C|m*JQgWAK)W3t*v|Ke<*fu;~S-#D&gBbGNJWHfE*x-^I!st3u zG5*0+siQ>)&ve<)^gciSDFF!3(gb+)od=~7?%E{nY(!8Aj=pq>C*ZS3TXjg+4DB}Z ztV6j~6z8U&&kWr)PIlUV5RzyTwL@$fZ-4LXh~rbFZI%FYmw2*kYJZuUG~<69zEB!5 zmc)s|iMkR5rav+ufwE8QnyFuSfUd@4*>rwX&e17B7J4+@CXwESeBHK1798v#9ofi< zLm|K|&R_tVmO__zRY*IcnG)_5!qf3q>m4i*e5F?<%E(Z-Py2MZq=Zg8_dZ+$@BM%)Ze}?{9;Vv1jILF-{<-Me(=|~ttY#2g-eI{ z<)j8h9Ldg>jhqCXhqjF;D^?(sOk*WSG3GshOMDo(QI<`|K-Z!gRDMqVkrOy}J73If zy-?~mU@cAaYDK#OhW5VB@995GU5P$cWd!b{fI%Lhafbo`Mr&vp2f$C*s(LuN+}}_h z0gXdnc1FBOyt+o`gq(%>cO%2BvDE+)gZsg@Rqw2UyX6U}!B(eu0rN&gck!0Z**N;V zR}I;-DN*BZ=>0RnjW2g*tbiP-geSS+0+_y;DxFZJ1fQ#tno%9AaGp`w29LvcowZeW zuK=U$JUwa_w7f-tCe_QjukwwvthCC_;}@!`vG4RX9NC?I;y+ptR%51Wh%9pYep+f< zb-fnQ0mcfaM(j4fpxjdzr-#g|ZeTjoa3I8I?dOKD0l8MdvB((3$qH{%GLThox)^jk zJVW)}Vf}^QR@*>iAR60=ip!fKPtIxlSu;3LT;aSQ?UQeo_MfE0c|e|RkWn65rvz|H zd$fgUF^i7)2)ATK3LM8kB@oS8C-1}a!y%IU!=v?IS`5rWsRd!&0M9ehem-fIlX0?M z6yt{oPU}-}-DAA!(f-+@>_T}lo;iH}rN73aZAg=qmN51MDIEgT#~SRn>NwodQn|kk zckh#(PTBF+ z^-I|Ej|>54ul`E`VnmFEk6FWXx$B16By~+qk|(z#I!swR*cSsA2%R32?ewry3nr(> zJhfaEPlz7B?dv(BPV9*zx8DP9HdsZgkOBNU2c?a45G^g1D&1PJP4KZ9CT(3_H~|@{ zFb8eFYrfNXXr#IO_S7VP;4&sfZ?lj{Zh5Q0riy+=!K84H#hiSRAb&CfD`_nLac^be z(@JT05ImGr?GGJRmXPc5e*9)EZ1FfZ=_*V~+5f)023oOp+Y@jvAAy*X1dV$8cQMGX zgY5kj%>Wo63Z|%SqsynEzv1&qFVo0D z2<|-uj>b)e4T?5aYXf&t?Vis+YjxH2N2dhY9p=IEOIHG3_5}6L@s_G6I8{X%R{tQ@dLM9kaXhPxLZ9eP$Kt;Ra~gt)T}LqB z{aFzL5B1Gc#A?3fb{Pj!CG-JLyyIfdXl~X|3cEU5DzDvU#_M-|!S7C)Ww%9mchCkR z&z{r*@S17;$x6z|R*WOC7_U#wUb@O9O`{lEV9p)yupZbsv?&r_Y(vYf?m3$4ZdsbQ zB+>$yMTvH@+bnAO1t3I}4sH8huKND6BiJ^|URN?>D(pfHHrsjW47fh>0^4dteJGPh%gpRjG7(djWxB^{M-G0)NH4liIhH>`9O9w-LwTQ0@m-!^)jJ zCc<=cjz7xh-?I^xwmoNS8#GMAqnOAVOMMquBg=G!@5mE5`UdZi3(q5s!Ugx>|Iqc7 zVO4Hh+Xh=OXp!!c?(Xi8ZloI}r4h+RcZY;@H%Q8&8>G7%q*M9ka-aR4ea=4LPp%7v z#q-QL#<<5FSDo_Q)~v7i;6D+#`zbkxViG4Roi0D-ne-~oe4U@C^33evu+4m2 zb2+^A6y6d_G}|j1p9tFQ|Gh^Y00&2Rs$~{gapBt91GLJ~C$wa}u`N~3b&#>e%5!zaIBB8!2 zGt=%P?nWJrDh6KPcqcAWyO}juh_*@Vv;os-$UzKKr4%HlFF^-Y1_iH}&lVkoiNxH7qjaVs*kFsb9>EX2|WV2M6 zs1{3u--uj<*?+yd2_FE3Xp7sR+P@?D$tlc94*z}ILpHvHchNSkdnI-0Cb@4a(eFVh zu(S+)Lyp4tH;+tj)l(#Dw{ARccJiE9awfH9)KMTX1wG(Y!PgM2GhY@5L4k>&trj3x zp>Gr$|5$F{`Otc+`|0(9=C|enPj=h+`Xrs&ILQI`=O=|Z`mJ6&J9!!M#(f9UFij(D zz|)d%=R*pw85_O55=fGK@ya9M=UJYB%|qCaBJL3B^4^F8n>p3FXxQamZN#oe-s!Ff zo@~xOyE^f?KxjJwPl?oNQAEW+1Y(vQ=!Uq-Kj}G#VpwQ!OCv>jAJg4a?}(^KD-_rb z`1W9K2~$}1tl!5tm(IgZg(C==lij@+AJP|x$m!JuqJ+k# z4=`*+|GY`JTfthgH9@c9zjI5NsJ8up@wZ#@|M~^MXHDk|OPmY8@^$fF4#e_r3%c?{ zc(P~-!_PnetW-XH{RzjAV0Eae2XE<2($|?_U1%syJ=~t;c-~ry*z3Sq!KpT?o88?va4N~uOoF8F{Lf?7rX@4ngK3xs8 zZbtcvLJ$k1Yghn!kqnUOmZ2B0N|os~kNsw%VGHeWE7?|$ithlvH?1xsCD}gg&W02> zM*ofmvFpTGB*Ue48ImSy6<&;sJaFm6P*&SiS z^a9-DTiE;)4L}`F(bHG*bQm8bzHcXexxF};OHSJB6_ndt2a18urMlWdP|(&zXW*_2 z!P#$%AoIn-!r#81Ybsm=3584767WIVM9g**XX8c~LGb`F)-p#kfDJhYOpkPp;!;4J z(3}Dy9=$1!(-31wJ7C8MXp`9JN;t(DlemHYsyWd0tii{Seva%VYJ$U-mUJODWRwnY zdm)#dpr>Mp`Hm1(&z@qp1EmHKhumriP7mPyr4Io%RoUscE!^pf3s?-=cV!>*XQ)lh zk2YuDtE5GT$><{6D4r0+({ayMibQOC>fvV(NKFf-e~GxnG;xyO9b*z-*S^cj15pt& zMm6;NqC=f}MjF{&yR$3;-!ujbxNC8;w<4y^X-~7JnxOPO)`1Hv;RG8zT|OJ85g{JBg(<9ijAU4yFoWTh zrZ&cVkO4c;?By{#`w4MI@dIHdeys6t2|Ey;3NhA%{Sg_7*2x~Ml2H~k%(V);P8pY=CAsP3l+-jaZ0k_G0E zrvodj|97AKg$gwiKhhN<3rKz9qfAB-WQRiQ`Z`Q-!0$7a&pJ%BU6fP{WCd_<(0n4{ z4IF$C*?(LBc2rWpoUco7lmtN%AOqsPb2eUtIS9+M$1MRd5RFa4M!Y5WQ)K4!br7{$ zg&sCx`wsB66l!}82O5A$#bEdZkmp7LIeyp~c=x`#S1t(WrsF@wFfyD2|2dc3`$rn~ zW6PlP(AV?5C{3_CXy%XX0fP^Ih8zE_MK?eciWmCxn~{H8MS!Me@*F-B|5Jl;!I$_G zvj>qHQIkPX<3(UeRKqqPweexm)l3V_sJh)X)8L1v;e~#>#T9mI_4?V=dUFB};=+-u z@X)@v0rjU$YPPYn=xTv-9=AcFY*zGNq%_N++I7C`n2bBJ zpCAPA#GwTy4DG^w$2$jH1U~3+0~)W)S5QT}?Wi#jRc74@MN-#U)_|zvbY>b3C{eCP#2-d{}Po1vw zM2!_vm`GlZ2l7ccg?UtbV!+S=6fnTj&8#iQw$Kr>A5K}BK-6B^9mH+TO=mRlSbW96 z9>8KU&0Rc5*VDRxlKDauyIkiPm%M>jvaT0BsegAlMW>9B@$eC=Qzr8Ti|AtiJ z%g_C($*V_s6u%j!mz1cER#{kh0NnoqIQE*qGK^pBins*B~bPUoXQ72k>;gT zBSRbMs31?{AxUfebH9g9(9Bw}S}arW`Xbh*)6J{$_mAX=@bFg<;Bv?SiVjLD(?7@l zU%n{Y&q$bzdo3rG5t1U=$f5ei@czXC#f`g#1bb_P zBYR^)t9Y@FdYWJkWr7-GK5>Xd=<(rjI1 z56JQEx#~4kz4U|UWt1dnB5nceLtQb<#6|)6E zWWLosQzh5LkJ&HFm@OO#U}_Gl&8msIOa4tydysS*`wK9aM_ysO_J_;ov)VIElA@hr zi>nz{qLZe{k!?B*vW&dia)Sw|GJc)qiP2zssC}&QD?SEgt|b{U&O`k4dN7w1Hws1T z+Cy9){PAKh-V4*r#un2r2^e_sM_q>Wj zbpBouLw7-fYK3RCBk|fo9T_#CVhU?BAwAme%!2Rg8@%WC1|c7ueb?#YMn4tIe83ai zOnZklP8Dzx4ZnW7p%=1_2YciQawi$V0Ll|r4a4-;r!rg|s6&G8 zuXbw1XgkWPeiYHs)3*6d4*5QDw=s^2a$ zp}3%~@{8K6D(;tG^6v$*7T2qT+#|u)6>Iq==sb;l0h`E#Cy%MH@xM)jJw){}(9tYv zHkE?|fxU5%H9(QOaxY7!_Tlhk>QR3%g+98n3#UbhLAx@AnD{ES_?y3ZR18UczG+Ku z6#xvi|KI-B@sFshjQcw?l5zTP9j28ZcYQdxS4%;JDSH$Zx=-YDCd>xV#%UWf{9Gfv z-^PBw;~VJ&29G>ITkm|Typ7UR0_GCq-JYfy<-IZ^ItNlX0YCVo$OKG{w?32b)fMp8 zMENAfgs*I?VG<%%&mu0A7z@p3~QV z)_Fz-6LH7cP|tV#yuD;_n$HjbR_uMX)F_enCkd_jJLF`BJ=f!1JWQOYHM zUrjd|qVCPO04{+s7r=3>@Bl5nia6FoFZfKlS&gXGGCRf_7loZ3TSj|rbX<+_zE)w)9>Bj~>AAQ;sTb9p;zJ$C-S z5p!MOkRNfp&F0-)v2EO)@YqG+#~%>D@tph4H#S{iWX@=Kv`3fB|H~h< zJ1@PKbYC49MFs$)$Q60(;wLxxcS@=iql@E=9|SgN{nHTB*-3+-7~B6zz52a+wGsS` zW5$l=J@DF#ud`btbuBY|kYnK`(6&B&oWgtd=1y5u?$r{j1g8r83}!j zK?g)+yBW$FPzW{mug^a*hU!gfPKDJr>{N|f86lDdlZjyRbfG}r?zZlxsOK4_O{4&q=R zqwih-m)Ut`{#Q2!1BFMV05ArYtuQYz%7?hN|6Bshk&a-9uFj;fCMgj+OPj}3U=&2l zS%`cmW1;p_uCx>`Es6V$M}cOnW;bcJD!Fd*w-P(U<3#Gy@-x(Pn1#hB$>7N57$@g| zv%M*XD1R($!yE&49HO)|5JtEIq6$vkoYG5bXQ>xlx6)K6WSzVke|`2vqCPjyA}6&m zlawe`V3XMgz5}b+nmxzFvF!)YdJ0)Rv?Z$vXi59&`w`NqF;^)-tL=J_+vb)wtWJk+LqX z&0yJasK`~5Y1kMG{IAz+4D87f+$|=g?vBauxLqXEy&N`Sc|#hr0}Om?SRz#3u|Nx~ zcLUpY1BiZGU(x{g!+yQpMc=QInx=BhFOkf2+{x%&5yRThMbjMB*JPHfUAwgpmi)|U z57Ilsn=Ubo=0jSS`y7aGuX{{l|0*W`hLRAf|9Dt=ie}G>#-eX zT8x`bHS-JijGdo&Ar^(~`R1h4!b%kKvEhxw7Ffi5iAzWzxeY>|r`=m%?iH3?OY&9z`=ySK=Q>6lgGd)l+8L9LgN;`(Kb3g?*7Xu%rWg5N|{-8!0%l{w~=#?RryfpYU_K^&Gxc zg&}Q?$X<*wLcbl5%+gZI!%p9YTTsNdlDC%tEX71Gq~Pp{$gBx&WVT7ItVo3ebeI`G ztl!`{3@|-qw$ok*p2M=hh}C?e8ui4KkJ5%1ErKOlH}0dH=@vkLJF4{8P5~e-qitOw zmUNAce>nh5BjsxRBiT}lp|J?q4uk+YPGZKZ!&0%R22h$O%rZtzyjG9=lnze+9($16 zG*Su%lH8o4v1j)9AwpW%eBcDEr^_p~^-=0UpEw4bh* za?P2gQah#r)DZ8O30-0KLw!I?wPe?^tco(TA*rc+3i+HZ4;hK@tfAxMMyROF1HO|x zTaoVuX_)CeuP`&!F1A(7Xn%%^MVRA}dsZgUxy`6{Tj+(oAtZCZjzrSF9=)?P5=ry* zCIke?)A3wFAwU^fg?}R@@GTMeJ5MdSH!)n|x0Kmbg2}%tw7a3NzwWUhrdN6BCIwHduz}zXy@2Onl@D4HcjVte^_Pn+nMQF>Bm%jZ!6i1_~Cxm z|24N%KlS0-BxV%2}J>~lD>}{%DJGkT+ z@>qL;Q;6nwo7pmhehGgzTZf zY|?I}SIFR4h>RW;BK;SY3|OL~KDv98?lnSY~Mt?rY3XfPA9`lB*->b?!gqY zmZXCTB%}5S(6`JrwW>t1{AVK~>Bm_1rLZyG{!zK)+wI;TeIoY&DVi931zzcBvSPc5 zXxSE+qE-e2+W`o|yDR1VLt}wh%KZ7lKF)79R4~EwrC0;(jZC>G7j4KBxU!xU(|dz4 zd|VZDMjWiq9wUr%t%ZoQCd@`g<(6m`m@K^_VOr;roB?=rK!B^7kz_K;S&t(R@a3qC z7<^T!CK6vlsiQtAB{exeiO_W31yJZ04_`7D`dvOJyM=|P_O5}{NE<0AbTenhINcLK z;A0>)Jcj7a<=&Kntr@jz?zb8=p`Wm16EoFKzHtH)JMF`@S+SMxgO~evpka4q713u>V`boKLm{_Jt?+eHQYS zCIlPlqXr;ttMB4=-8{E^vKx*9IVad$Tx(fAl^LGTA7{XK+BYY)G>T}MOt{$*dF`5U zvbe@4l~RE=I9y+-Fk>O>#1}fjixU`rTupugFO_&qa-i0&m=|%$>$EwM8jGhz`i1}Y zi`fhKPvP9o6C$T9ubR6GOSymQQLE5w94hsR2?Ts~+rB&R(IJgZgK1LL^ycU>rAK*<#R_?+c#@DU)ZIw!E5t|cePsEKpt(@n4zIS zDoCCE*Nd=X*_l$9k+Qemk_-iV?YxFOWeY$%J`QCnh>kdxnl$R^8wkS>?CIb3DE%fe zf$TISWNftmq`2Cxfqk>@Up|y(tamT*a2!me^<>K}lA<{GeyWnvP!~SKIezj0NE;u% z{+m)`WCuZoury=Vq+wRO_TSQ$+UsBu6S{40zvU5RIz!evqN95N!m* zJ>ML|#Q}^(lw}eZ8jQ3;%r~Q=z;nPltVq4e>Zi#3VhWu(OgNn^1jxp2VP-nL)uh1J zM<)X~*4LAL6iIG^d5HrTAJx)`fnt;pa+ulFSV3NTp=n4ZC^#WLV%c<}hO!OtM6EHN zF3y!OSDzUZGqX8!Z*2(lw-=v#GFMNbj%P$vMIvoqBw`fU%W%sjF?a6ayRPtQq-{ab z6=W%~rLZkxCFdt^r_(SQc>8@)5#Qh%jE6Y*pDj#`^)ze9kWs9i!c5s_(t%CQVyiAl z2A(KNh*_{=B38brYdJ4bf{8ULDtYQ8>R-)<=7j&4FKMKL$UDcL5l=Iz8Eb@P(&6s2 zK1n+?3Cqs#)*ms-GxIw6QoA|ja)#hcvZ17&g4Ql?^c_U|vV|k+T5}d&Oq97_{yFc4^fWa@{0r{k^%~526Fm~>E<2scfoVt zJjbU|97!sUu5RKPd0I`a-cy~Ht12O%n)QZMC5~4r*xGQk1mY&*Ya}<{+I>iRFvR^o zY1eRIgG0Qgl^P||$Xktg9Eff}vu2Kth=El6dGSvWS=B*%USt2MoxSW#2LxIkRfh9Z z`+kC=#kwV*oRmmjbzhQJ@&zTn(<*0_*Ur?6QSop$V^S|rxo8fUts4|MoSeuBv`8;) zJ{M*pGcu&VD}QSusfM?CI>$M4_BL$uza1yvk{~!pwVB%)6amM{SBdUBa=35ruT3ia zWi$Bcf}qPU{{}wj20!qAu(KSI4S-~-`4!%O0?DY4NbrY(--E(?Ngk9C4Is^|KOU;w zOiEWG#q_F^84?J_V4nwqJP=utQZSjo5m!<3u2cBZ=O_`hiLAoHs$|eBXG%fKZlWD0 zzB!TTMs7?S6b<}^-KCaqjw8HN=>eIA16-#YGAFjp$2E<>N0I^d?@EC`LhFI1WD)x| z5oL4(mL@=c(Gy957mhCMdz$rb?SYjs8FQj^c}I(ycsSk+iIts=cQgAIz<#|roHox3 zI27)G{gg2TEzn`IE!bPSnQkbE7FN+PqxD|`XQ_k>&^Vqg`y$8todEX}Ha>u*G27Ym zVA~ZL4^&p6Q`?ZEF#uKL1`Y?i5|i<))(n`MWU{C|GrWH_pwC(z;8+0p<_$R{!LCW7 zS2~mz-1g}v3Ea5q3{5{CsZuhDye^BYUF@E)+e&x0g=OAIPXOcn^(1u}F-$dXX>efJ zGKh`iO|m0s_Z#a>6QVRSNNe)C6Y$maJ)P8J&aaZKN~z=k4-Mle{2k7}JS}k%fqt`dz+%P#LpeO-N7h8J6|raSnYuO1($W$6 z#5$+mF!?Vp0MFVez51Riroe+Hnc;ei@lTRE4{*f(-MRd0POe6MxJr-Aupfu^CRJ#` z$##VKS0XV5V?}TXwyUCFM$#Ig37ML#Mu2#tu%xM15ll_AMd-OX_6!HiA{9GZuUCyxeRpEgB52eUfW0M>suYK3@Q42B>yQe- zf*eA|mA+1~1qyN9{<-O6eY-Ayc*1leVF#1VLtNS7PLvp4Z6UHD{0(zz?9*4&Y>6+* z;96i1@e8jB!oQi)!#($e%Y5nV(-!c)laD@sWDLx#iVmAvK-oxudpjvsI~y*|#zNmh zBqB_Z3KkO!=b)>LhjFF^q#{;7K1PxR6bs0us{XHEm#yyXhWn^J-7snTM2_+<0Edm8 zUL_$3bI!c6`XZgY2=Lx9y1IEKtJMR55})I#*aZqwWjXU{@3`2uv2Fb#(zZY6z5_u{ zm;0lYCF=GzL=*H)KfcL(m^tK^D24FAjZr7*dDXvjLKY+f)*s$QrIoM)F%AUx`n44q z!(NtE=`g5r2f)E=t5_wmm6?W!eUhm7LUGb@))bz$Qsg|&^Vn%nxHO8(#?KnOGiUR8jwnp zQwUSd=z6PwuMN(Dr&g864_C1?FQjWId~MB|hJag1S_PhJ>q#KPbqrz6M#?o?Jl9Uy zO>xOMgDhM8@icI$08yc{Ta!Vojy;M?XZRe>sXhkbnv@z^y#enhllY5(h4fl;`yw6g zq!-eQs_g0-X=GCJ;n$T&U$u`oGGMNmAB61|9WUA!yBLjTr{(?hCS`TRfH?RkYsdl-qRiIMTrKe{72GDu`lf&Eo97S42Ba;pRM1xmb`iF zOr=Indb~cRchZ?~lm8zWSnr?X{A)lCqkN2a_&+c(l94!|;jb5Vep!KPzYjX+G>v&2 zB0{gLOtal(%4t*tAiR!8`5IM${)w~_Wc9e^iV;}K%(5H-o18=T%o8EIlo8Q zTricB+JHTw$=52_4#hakYqucJgUa~ObLUHfma(|M=xnRE_i$v$C_oNUynyH1gf0Nb z2HlVfrz!!+drb^V+1GnHL&ZyZ4R~tQT0+N7TTmgEK~bx z(ICL0YlC_12q401N9bNBO5a$JOFO_UvPL~QG`rh-+)b#zI!y6W)23)k7k^w+bXEMw zXedy2<|cIcCqik8b)}S(tFG3&bv^4a$rrs2u)K=Uiiu9=CsB!ePYQItC13zDnl)SV zxmt?H@`Q1|=Zo&12)arC!n{a{8qssWr9RVnp%puE)3mmzZ06M#&InEP)$! z^_;R88JB&&8iYaEiIZJ8)OZUVctbLpciIDgVd|wuPKRHVIPH&;+A2?EXCot1mq;(L z&!lj5h!IY`eUdnuQN}X)zvhZ+3?JEa8{S_(>N{5xX7@YC2Y(Aq+a4hM^U_y#nuOCZ zg|S(OW_=byfylXT^t`dS`myqB-U`tFKA(Dq$Aq6Q4y0bbzwC+rw6=<)yC4S23|Qx67S= zuG*KG91an45JldFPYb^p{(JHAS^vR&*&=Eql;U=&2a3d@cDBE375{aVFC{(~1wpU; zQ(*y6JP5p>DbSB|*{~)3Q8e|)jrXzGEMt@9cYgvDbsf3O`=To23wSB2_IW^R8Je+< zl=~KW_CB^*>WZyP{m^i03|o?Qn{uw~@jxl1rm4cyt%n8`*`JO8ces?yOK1@mOERt` zL$`4X>(d~i{Rm0cu(kcGb?q}_;`(jq397S9Rg&Ej?v$d z-+bhAqs%+MCaF{g=C7&1``G!ZJ^iE2$l)SpKn_+J5+tD1h)1*$0r3anV8Cb68_{)cZ)qDI*%4n3q*JK~8PuBohAU%Z%Yp&ni{+fny zAHiBEo|9104B{;#9~B)459(OV3AdMvtbU32xqPn`pwAytQ5SaF3|O};TGacdQ#4LqaIMAXDxc@A$( z5M3=!mP`2Q-N7u6ucR!+`=J!HmAl^DX3(?U@O7D)$CWG8u7bK+J0E!_gxIv5ZZIBo zNkGoMJNw;lTe^96xQon&FJs*0Y`f4Vo|H$rrXoraGxHU$$6Cna6Z(u(6vvGOC1A^QP$_ac9W8x!r%gFZ#d&_Ta&ju89;S8=j1Gr5}j%I83Ur(shB_+7#tfiA%T>@U~ zA=Ew+hv$M~jA^IjRibRCr?Ax4O+T#9eUf!cel2 z)|p>P*vyvdks2d|QJVFSLDom`vmAm;s!4oU7a^1cN-vL7%NZ8XExuU<9B*06sfOP` z&U&t^tGys;N6OT&jE6U;gU+I!3gdr&_q#`1s6>KodvnV^@XIT zAlWhoGEl9$($1wRQs_|Vz1|a*t|@vD9t)0*)eW$3Q*3;zH{=b3^K|K9B2a$~4VvFp z_{tUQ034MEn3sQYnqKYY4ev1&-Qu8TD&2w)SjlO)-T%BFUQB75(^TEM=Mj1Yhe{dg zs`xUx|8>4@zHVob_<`aEtk)iBA{e)E)`)xl5xt@#e!Bd?*x57nZ)FUqs~ ztdCX#Qg4aTU>0wGe6kRzH0%r}bNJv%v?8=0U`*w6C55qY-V1Y+_PXjIL}K!dT<~0I zj8Sl(9q%Jg&>2%LsY0g0J>fGJk}O`P%0%M~RD)3jq9I?FOjB%5v|#(ig4qkeUA`zk zB3=bM)S;3EN$%#dIE1+7mY*#V#DTC(Q7e_>gRnXLQ-?)zh7Vf+&N_n+IqwB|px^9) z$!e|X9toOq6z++0!Wlo1y1s%L0YA?mZ2sm$blK5(a$e@`iD1#p!x7zbSVmQf#Eo4= zaJk_4S}G&MZuU@bo3u%N+lT?Tr|ya|Zy0{FngCdv5nuJEw=8-O&^#&0!If~E%!}|& zfRoiJ`NDS=e!N0F#!Po?j-kAF)+MOWRC*6ccdW((yv|q7gkyHP#ohNb*Pp(D3-*oa za8g=eqlYG`R8yLW?n-3ft|qOE@Lj99MgAJMTIbL4@{%&7?yoOaxnj5XK*m(Ys#_I9 zG^6px#5oc7)(?wU!3SICP=C{nB4^JJp&wBhABndiU_B-|jAQo#o#2LbDZ#^0hg zpbmo$mi*{OCs?L#CmB>iWL>;Kc)uD^Bx`P6B(czSw!<)dXZGt;z9inI<&}(zM|Rx8W<-70&*&b3eNZ z(^@kl@UDkxqxI-v;JOYi7AmzpbRQ!Z9eH*;#}x~rh$p&g0HP?x4e*8-h_!Bi{|Jm-2tWEG3GRfANsh4|@4x?#4+g#n)rMn#5{326u+_MOJ_@TmKT)bi z4YkZEPl~)d5V$zm-YH=PD1JpU=eUi zwRFsggz|#PJ0L}?=n!zZXn}HIF7jG0i)JD^CWr%SdDWh>c$Ql%IG@G`K)n7vz01bZ z!UGY@z%y>8%vGjDB4C*6>Dnu!r&J0GSxuvId*alpYMI+aIlBr$!1BV+Yv1br;R2+B z04F^0nOiN?7~g_Y>z><0J|(6mLhNBt!_w?J%S#PZ$hA^8=ohtHPU6an(MzWQp;R-> zGfkW{ah(A72)$8Ns2=S)cL;k&auX}(-(B|=4d#a&1UrlgmN&w; zg+#54c(#`!R+X4H`%&>4m6->#1|1$Bbggqb)Fyl}Vy=Sa`U%KFQSZKbuH<+!1|qt7 zMtvMkYjD`|Yl$TX`YC*?sj7GK=6eQ=4wAC|#q=@>^lPb{W)AfD_RoB|r>?$ZomX=x zVuwBz5B(NiuO;%>kwzVq^kKy6G%4karsL0D#)slz8~b)nO~XghGLy2QDgc9&PNDbX91m3(Jr} zc=0RsC!594FGXZKxy#-`Vi)PDhp%U}STx#3QUi&io+%_x5Wjd15XE_1KPBTL>NE;SLH@PZ8V|T7dCjar#VXse zg6uib?*xSZn9x&N=4ibhBtzE+7?sUyTVp~%t(QvX1sr#6zO)LBOE9j|zw=nbtx}?y z!2K#5x9ok_?M=(z?W%$a!QC>V0>qbhKKVBjWnMKS3A`5-5p*gkd?4gv7tvjgl`cnz zdQ=*=xwgMr3ACzzGv}pGXcO?Pgz(poz~>qOnOjiWYKL0s-_D+7B75cwQs^ZJ-URT{ zT=yz?F2%I7FYf_@FU%VJbL7U)Ay826is2be3*&zCQVx@pIqo z%cVp1lquO7jAW)*v9t9?(9k3b9TlPp`hr&bpev;-(QN4GK`OFMG2 zZaBnReV#BYEQRbT<88i_a5I#Yu)b^D>rr>c3!-MHvkRgjp}!r&(k~GqY+lVTJ0Gdy zx7%K$)b`jhnp?=e5Td1iAycl7=XjD=cK+RLK*VabTjN%wtj6Nnn|7k~8m$N9!PZY# zUd?x&zvcM#AwI+U_~kD3>ttWO!V#l(1E%4b;p^>A6qW$rc21Qtw+r-yINuiui=iD4 zth4*k+4si{|11Z8oh(orw&8sS7TAgIiBO3suu#JaPYwJTO}N?80nc0>)E=2NN@{`WYF!$Y zERNZ-uDq@l8EtVc={YT*%t}=or>W(JCd0+#$=B1)EMM&VIYE&;>8IqA3xWEfZa0MO z65=pwx#SHCr7-3vdu5Wm^+(C(?8B@oWG!~r6G?Za74;Z@`^B+H;jYA_k-ZFi+tcF1|;&!eocd`4L`c*&B54TxH7K2D-qz^Df%45sWOasB3Ji2HA~Xx!d>< z8S4VNzQ1$K8C;2ol>}f#`Uz$p=F$#M3i`FJT`2S{HFDo@Bmo=F3pdt zYoJ$xeIRrE+Y@jG<)C#iOYFS$98T*N#p^iUUR0ovXHMv30p+ z>cW3tXK&#qL)xGap<=lmhI_?QWQ-v$Hf{MdvXK&n`!6z0r|gesr_eaTn`}TI@hbiSQm%=xp@!z znZ)kV0`$=0W4t#7+U0|_%>QeX%HNb`dYMqQ#pv{;$eK!*4*KJ-;z8i#EXph%+dD^T9+2Kggc&VO1%TtpVy%g=N*{tlD3!9^J zYzWK~j!C&+1A-s0p`4;X67)ZqeC3*_{p-Yo+YHMJTnduNUMt{IC`NVW{l}$1^N5rf zO&K5aWOUXTptl(3Q}_fDKbp5%dw`Zzgd}J|zJ27FbqE{dvtz#VqfN`F?~#g zly#2btLA)$s{5So_@#)$wA0T-vrxXhd9ZwvBKrlz&3dLosY%^cAqljQYqybQnzpt#ZA)eTbXjO%j7bjD=pzF0b^Ihnxv|LVB{l~d&cDwj%Wgg*46 zq^uW<05uwrj31ly)78EPZIg@Bx_QbU#0fgvs6rPes3-i?$nOYl8nsYDvXQS7Qe*F! zF9US5JJMarAnk*AMl;GQ8cZW=GI)k0NgUb3Z=_C`a*Voy6=*l=u8{Y=--mVxqzPJK z?YzdVnv^Ve3W6TYzs-}v`hxNr!&sf{6}|2M9XX${kO!@tJMCf4=nxM2#clW-IWZ`l-EH9<;4s0$YB7pVxM z1J5oi!G`0N=ZxiWalh7pR3HPlwY&d0>Wra?zL5v&S@0Y=MmDAR6v5X;HZeRk+5@qQ zpv)SKh{VdgX26K*1N(3dSZXS>*^vslM;lG9M>j54W|&O1k%W_ZY4|&zp&$Z&2K&j&kWbv&c+Qd_}LN zVLF_yTMLqOD#zt{{E1E1-@I|zrr4`9eKB*_ZIN^Q_NOIixG3h5@ziXez)+Or$v zWu{;sZP$Y{JPSQ;59dE7KO2pbaNg3;=dxJEaXwiBZSQu7qz$bQJG@KV> z#j{VMTy7J)b0h-Z7`z!D--rHDLd&t>auE4$??Uu=%QBM0~Ju)>Z}DkOj7L39fe3tJ#T8XPV`aOPuKYqtYOtXW*; z3Jj1@>SJBh%&4Fr_$3tb<@~Fi*qExU)>DVsvWtAq0fT<-GgqSRZ7a{tIK<;^n$oj{ z`UTFjq`e_44?w{&6hJVSQs2@b>BSu74Z%5~I8O@J0DR`tGDn~78J~29}RlQUo=OA<@5&)Qe#Dd8&XDt^MxhTKTh45?*rpG#9jerN{9~G zDe9|%rrhhXHAZmc3Y1CTJ>5$rO(K@)n>Te@k60IC5@zw#LV<|90=-tl>1Lc%3S2^6GoHRdja=g&_&O9uW)(#7EB|bgp4UgnsCnLVQ*t!xM#4syE84Gk0!!I;c2Q z4o>p+kb4_DCfkCb^7#AD3>^0oehgYZbT-ikBh1!aI#z{>DE5((^BOs>r({;MY7;NA zd?Y=7)~K8JmHb~7d<)0^>`~*JvXn^*w0AEP@xTA=LH>R`c0nH@(6t|8$ML^k+!W47 zB>wgYN$`<&eA|tIpBH4lH*+~o_heMuLHyI1*zru2;_AKz+z~$^J;`KHqHhUW9Wz6U zlHX&Q6uBM4+YT#IsU>sJCE^idi#uT})3NLV%2xYt9uj+3iLQ`0@EUN54;;GIt zIO#bH6AkisV|2qS8A*gGfsoZq{PekH=jzFgjKLm2l8P zKa^PHi0}NPv$ur+!dpG$j$jGv2FpUR5Qnvz!R)$m52Hy7H&d)tWayo*q({fO`o0rOdzFZRR#tbL5(sEkoAc&(g^$*|}B7G2~)G)-XCyjj1< z$h5%atfP7F24i3tLIwA_v3y|C)$1oYTKM6HB82!}3tS#3hURjH`4I%81Y(nM&6^dY zH`~=}A6iKm$14dpUCPrz*$5Tz3^NH#cN($c^VrDNDE0}v+s+oLM&5jh%xC0Re+Gl+ ziX~q}xoi$3an%`1p+NSWAJX0U=+};h8DwGH4hKW=^1AUF?|>*SsDK(Pu<}?{Fnnz7 zX544P{yX;8t7OV@?0JU|U7r8>!2rV5)`*htYIc7uv8l~gP|zStKL*97xW}HZD*(2V z7RU|qlFo6+oi18xptXHPr=_tul%`#afOZIc(Gy(>+{wMk@=~yDcqkON*^y6v^!2Rd zvxf>&3dNqEN)|9As#Y?-<;!g)`o#c8n3h)zbxw*a3r!d!I#K zTDocl=a_Dju^ry1y&{1Ilyum`sV9U!cHe1d?2D@+FO)qrMlp2=r5-*ax+)rTI!o^B zY%jIGQ`{yOh&oJ1!K(TY^0y1;&jR?F5RPbiQYX9hjubtr$NQ6IO2c!j=zC+mX>*nZ zDNicpEE1+`Ik{N#q|Xqn(P0(pu5mqnIu2p6Rj%Wyx3$2l0=!v}ga_-n2$?KO0CWJU>858X(zM91%Xv`&~U`7z_=4 z4bL9kmi3rW^mM{K(J_21Q(N4vBF)0Z8-?|pmxmcEKPf067&@izF4oU3QC=cP&VsIj$c(P>+KUJO%`~@t-lfU!*FQQOm@qa=7&2CL?Gg zyQT;XY9o87Cw%E&O^xR|LmYK^Wb+!mpgm@#ooLYG{J9gG84vM`5H4ytuibX*dq;E~}( ze!9AQW6rHM6YTP@ndT<7==v@PBR z`t21yiTmcUNEtl9i`-3Q2?Y#=$XbB+1#C=5_0|J_vWK0k|$k{Vui+RnO768h3Esg_mX+|2yfYx$6rkr|F? zfn?;9RUuR59jQYK1!jBepwljqL#`U84}7k?2?g1c3cr(#M)TJs-om+ZA;D1M=dV;q zj@7hn;xHh+r#;8{jJ#9`UmN^Fy zHQ+FLlDj0CqS!TGsCv&31f8meR9esD{JXHdrA1xFB?F|F$XDgFhXig3We0S(dxp1GlKekU@a;V4Pc(+C{VTm0*`x8Rv8* zzndsjzq2DAKC79@G`-?3Q9^-tX0#HC4%veU<-?jmgx=m5bJ@>cOrA3o2+-p!o&a8A z(?BvGu41(0i$Chqw<}{%(&p@Y=3bO(;E1krp6f2eE-0OskUc7U)&W`hepTV+XUl8% ze7~c7mKn+2P(6EFMX1@{q*I2w?!RjVmd`nH5l1 z+wm7}rUu-bJ42fo^k@geK!uBrcwUrDx%A`+<-II~zurs3JKA&TOitgUNB_w3m+%OpCsOEsLu92&Lt z(Zk(|;YnF7B52mmLZ|%3FU1oACW3$X__K2Q$~~bfk|ir`yZY}#?t@BNuBp5tR3vi1QwfN+}3 zFdZ`F&oW4jZld^!^gMR`?7Q9{tU^OkyQ!**g>U?J9d&dQYYD|(+`f+fIN{nhb-v% z$B0w<6BJ984p#pj^?fQtKkECPEpL7W{Vb%^=pX%TI;@}NZRNhdyy$ue8_hZQ{ohcX zg4AFvXWORN-uJgl2`odL*&bj;Knt^kf$bIMO6=Nz9YI2@FA{hD1fLEMi|N4Y5KIPJ z25-PxeBGbG@UD9;^Ryk=tGsCq{|L*OM#1G9dLNL>^6$^*=HH3v(OgcP5V3yzwBIL0 z@y(NC(@{~X=-M_VFxEif#Xjn$H`s2+1H-+VyH(8Ao~b7!73iAahwlV)h7I9m6%sc6Bm?87A>+WGw;` zI2KBQRrClpr~k*-TZcvY?cd)vC=HU51BlYyB_V^P(n!bv(jC%>beA-OBHi5~(k&oe zGIYn#`RwtW@A-In&hPotxV#+Z-ur&XTCZg+OS+sOev+RN9yY*$x&+b=-zErHkwC5hEMZ!;KrM`ekMO=L zcN9C6y1$`K3I3y(CqfxP@FSoO*%T#1MpP$5Mg{PrOK_Oi+n3a^qznBuUH+-6iM$4> zzhT%4om{p^zz6l$QUADEewWqeB;XBEzr1mf!Q!4%54Hqd_bpS9c4+4^cR3leGs$1! zpsL$4I|tupwU*PouUW$;5)`nMqu{=-xkAB=r+c*@*8{A8>w*jOi3&j4vETo$(N0VI ziXuwuyrXefWU*rXie#*Jh3H%_7*Yg^rVhjE>2$36$B?>^TQwAWX z-Il3iC3(k`Fv0y!Tc9t>c)l@=tHfq78`>x6>Ybf;SfVe2+Nj;Ec2vHu|J7k{iRv}X z7*n8)peuo|fCa)PJnrCL$F^%|acU|rT&^j_mIHMIi9d0}3L-+eu)Z$5ZJP5A;sW|x zWBR{bwlvg&1(T$r%WDpGjX}kh$0jqc$#r{!pbP-eHg< z{Kx)#*^tMG>D__K1YP`+oDcc+YOQ+hi_xYU6nY`7Z{3gT25v~ev(rg~In`3RxA1~H zBul{hrYi0eQ5L!PZoUM(z4p+OpV!{NnyBGqC8(9m`j5_;o8(sQynGLfIGA~GW|NKo zRVR7b_<{1>tdSDvvm8}12GLc>avJrBg>DUJDOiE})wFIkEqL;?XFyQvS7!?(QIJO5 zwB@x`gM)LwU5XO0A=e2yc@-Zc*QUtSF?MJ5s)*bi^7Df%k%moRQdqzYrj?2Pco&VJ z{2W#U7?*Zo*F`EcSIDbol(%*9DiQN3@eUyHF-4vL&9m$2Hx%Ir$67j+-IH?v&o?ZkMSC$(u`9r32a%p!@X*d#a0R3AwAzYV++UPUtSH4&nN1oG6igzYxaQF zvbTNxHElBep>1%=IQH*(x2Q3jiKXJUmiC;{V~zu)5_-zIS=2PVOb>Mb))mGt|>{KpTuqPy?~ zz~Br>R0>V{BKi!rAG&Bpr4kRPL2QUp%8Xww>Xd;NHLk`HAQNboaNm=L2~lG^P@%rN zUk}03_xBL%HS(QTzroJxVk_3!5Y#q=@Ba+K78BHkU-B|vi!+6Y`egSF8O$_9_Z|5q z=m1}o+RC@$#bYsq^2e=;5(j5GV+U4YIe4oQnrFKH^zJfrV2gB8?=1MIQ)nl;>A^PS zts4TGbN%;Z{r~mw1pj_`IKNUQ6%ub@WlgvBdaSjq28_XJg-^;KKI_>)i~(I`P_A5zIsWT zECA_Z&7M7jaW-D&4_A=&RX8r7kFAtRe4kHm*M{r~%-CbJbHUMQS5)+RoEBcxKFWVSf@RzbBDzm@lq88mYstc_E29dN$79 z5$`-o6Yb$P2Bu{NP38u3P}aZTMe=rivq=$D zuLy3@4|8dzbm{YAYY|iqvuT$}a(XdeEv$o3*G<=#oUi?J<@2vQ$;$(qvI#ss)QGsp z@2I5iw_7sy5Yla|Hz0@RH|}Ga$U?=DNXGeY%pVJh5^&?1DqgGE`u)xmTz>pOsyhoW zbfk49bRQ5#@JOb`Na$&{M)XH_PAgz>wWHY5a< zx=LP0#wTrtyZrn*d1~oDy$?V;azo%pJ`<}V1=3uL^5Z8eK#&ZM`9!JV5>T;2A>%+h zu6l&z_y9;3hLNzuF?fUJ)-TesJVg>SXU9F;7<67zHrk>V3$KkG$2DCTIs-!qJEK3< zX0%q~gL3SI)Pr=o7$lm`9MJJLv|PjkTQ6aPiDO4dIwS60HFiM%j>mBwB9S-ZW|fZD zL5Eh+#m@DWRSmcVyOAicqWkzNSiHa9)7(Fre3j#DQgzE%U-a(cQ>Dzs)fJIz=Tq?1 z>NI~3@Yl>4*u4F{ig-00>W^-`}Q9U|YU#?f?kKl}`B!*l)6 z%A35)@lDuu34C-WWJIje<;N^RT84EuaISh{>B}$jy-@gdg5w%C4No~Tc=Zo;XlDJQ z%)oI_h~=rD$2jG_I=1_TgvX8KB!Qd(1!vumGHS$f7t`8+eR*0| z3d&bPkE0Vl7?ZHwl=slCSAEYpj>tt|pZ7qyMdd^$QVX^<@`*a~E<~j2y@H zD?&xd_CwNJD?uLZKjGd#t^g@nTI-bb?KRSZif2|BIS_>O({$~ZrO^{0R#NJCCtb#q zQZ;QXdrmFMlX+ZV2@wO7ckNsu&zo$xp z&w6LxUwFIu-ti^%Z4H8%!HlZx?QPfIg_+FCbH_ zwCeHW@9{*=;jH$x=x&r4cvx%O3=3_^lkQl&=`(nuPoDF`ABFeQWpr{^^wB)G`7|Zy zQYTuGuu6hvW`FP~XXdP)KC1muVH17x&-&MY9%Zgu7jQ5UoCUR`nGe~(e;wr@IiBIm}V8=xbin-f>Zjig1;-ji8`HPjTDt z5)W995c78}$Zf)5|>^X(N=GC?A^ulHH5*)53ehz|O!JU9ZQ z>IZ0$zx4_T9(hc7a~*q5>^?yjj_;lI8VM^QWmgBeb^~+gv&XNnysp6+Hi}w(DTwUH z3AOEC;))!Si2iH<7M30Y8*KlO5!XodnN;scRlphSa=jy#eW!FCFktfMHK#n>Ptlz~ zX7+Tu_eV^sxB<*<6KS2xb+r|vzRAYT_u5Tk4{jb>Sh>Ewk`)iwdQj91?8=&8Kl;gZ zJJ04vr`a)ZnKhZ!_FoY;?)tI=K%U?)t>QP&$g2y7zi`}-^yrGBJry21`*o}NQK?H2 zDZtS#QB#~kohOG=VqM!%ys`_A^~d}#cWXqLt|YcVe>nT8nj;E^0cT*;xjf0r$@46OT0+U9p*Nq@ej$NlL1IWVj^FsB1Wp z@=w3j=@>kDUaGFnf6d*uUAq&EK56LYIrY3J?x?DFUw>*z>efM0pR|7>h}8yWxO;aA zIq|AJU$D6I@`kb9rdc*EBCl67G;SruloT>8WJ{D(Tqb6-V^B+gYS|#l{x0LGCEs6^ zz3@Dhik|T?OTr$}qVq0DxJE~pz2DQE|Jb!Fnf6s*n)N4gXKHp&5A48|{yvt*AZW6| zug)(Lo4)EHqPzHdak2I0Wj`W~Xis^}vw7=lyQ)fFqW6{E&Ly?;d|%xi%AvYSyx?uj z?cIS>AOPy*grPQBPRa5-HMm!V zA1Ft&O}SF|pZ|6-4mNgRe5`JoEX^z`r9k?B{@~wY=LOuGc!3)|>?Ea6aeyb>DkiS+ zAj2YKc3#Ikz+D+Vv-Yjp6#yeP)UT@)t>=!eiu3zQoF}gc8in#bR8DyqDR(a-fC{fj z;p}iLiihgKt1lnv6C1uiYiT3Y)k4X z82ilra~U&)&1ZgomZ3ocmMbB?u5wp>6vhI0v`RA85-577C?Y2}XI}Og2exkRAhFth zo45B3SlDnsWTWPS*O9@XM_0wkZi)}(Bm;7Cp-Q?w@~-3Z>bW+oH7$ISEE|{ni_RM)8=dfL5xG)97ZttyxsZsMe=i+kg2KS#e+YJc#WKx$MAF&%Afo~79*$DWi0@J7 z{pZtom59IBO*;S+tW9eNnm=A0{|q(9#sa!y;&fb0FfD;m@M8GT1!1{y3eMe1-AD;8 zR!&%;_Eq3%z#N0;p_*sKJrg4M6aZ3&`JdD>Y~DO2>dG)0y1z2u5Hs7fZk} zIj6<7deRQsTPoC7d<0%TdEM0^$SH_X4B=Unh+PROdTKsvPL$2L|#%nN)QFhyZ=G)jCHdzyZA?REaz_8f*#Y7H*ICoilT%$9H`n z^x^yhIrX}#+3ojAc|}BUg~dxGvk5NK>4c<}Cd2|(gqqL&27V%I& z?O%)7t@H=CXa%&sY~#Cn9g|g;yi-bO+`NY%?7JiXUObjL17g!Ag1_gJ%6Z1|{ScMd zLg+<**(~bIg~cat13q@I+HZ<=Bow#(Rkz%v{(*HX;vx3$a!-qAI&BEoV-;y5JikJ@$cJ7__xB)qg z=+bHubNMewO9Fs;tn(XWH|m&*Bw82d@7~`g*lKXF7*rZfVK%rjIJGkwt%NIXql}YK zv6oakr!+>1%R#3X2f^_c4@;_?^zrkI@g~Vo`9Br_G=GghW&k6WOwL_SEOO1jJOX3R zx`6@r9h>bxf_x&^JGDHUr?+#r-u5S7cP3o3u^q!@`r_7lclVq}gv#VbC%{Yh!MPp!%iZ0b~`sG2X= zQm=9{rwF1LBwlOYfw5GEyDd_`PO5MKFBe*?4`b7rE~}-6JyEQ5Vo%dYfXhn+i_B$g z#~&(45>mHubUx|mE&{~*F+2@xas}(a(C_ZWSmf-ec32YXZd%fvC zKgtrhG;v1GCHXN!De-KdQ~(jn;wc*5hO1|mU8(|>;I8P^seDbS57Z5qlw*PahIR0RF4E2O2xb~(Z5?P`e&3vNDzZ9!phY^oZxc=|Q`TiEe9fE$l-X_z%p z%;^Ajt%^r`^9}Z=5|#m*xB=BWE@O3^q(evGP4=Ctmb(5OQeo$I&6-(TAiP1Ol7n>A%US=b7KK(Y+$z|4sR%0W`^oGOV=1 zfY$m2=R`5ywfOoYrZKmWA7__w}u$Zor zl!$)|GfR`~Abd4@R9RJ_D?0)1k?1#aZm0tnTCcbg8*Dz*IqlWV4 zQ(V5oz4YP!*YWe^$RZP2d|2As!}<7un)WcQ7&a!c6shfy2tvrJ`fZ^S=O=`jDu%E& zQGYBk<cio)K39zV$VSa8PrYSXD*o z=N&%g~HRT22bq0mBRz zj1;5Tfv3(_v&W5Ulmb@3mtyjQRxJ{5O`P(1JIGfv=5C zYN01fWx)d!nwY#)3LGpo@F0e$R$0=c=79kQ-P0Fxzt;nSb(1WvHRs!PXd=)S@6@zL1cicx*)Ry9N2S{Jx#l2WTI*@RiPvIyX)xisgL-X%aCTwjBabM+6 zqQ|unQtXfObR48bKL`=yMAvRiw-I{K<^;2Yq}q*8&qxX`-$=C6EA04R{*{}#2utYI z%jhUeQzZoMC^_@>yvz(AUZ7l*aUI`F{*ii1ppXrLQ0T_jEUWGj_J7ok+IhJa$DN1S z5$DjgK)IbpT^0H;w}3U-?#qB#Z*~kL<0Iu-3V)_k3TG8nt}wPsEe=+($Hg9kAHCnE zOasY~`hIiK6zEG9bd<*p^MhU;9k$A5ew^r1F45%DcS{Ot71!d-W>OpLe8c0i7cQc| z5Y#Hx@sG^1xCHwbA%oC~Z>I!2)VF-$4@JXo?E>p8HYg1H)C|PCGC^F0MwF!It~bR; zWX2DJ@vEDqpsRo*AK<%iVliJ0sFijzMQJ+yg_ykSfa~lq*Qxh$-D019xKO1VF!Ym^ zqI3r5D)zP_yO)%s@+^!Jz2e_9faDLD|zh1K+I~8KDgjSO6x{=&2 znkGb9k89qs5L#sXdOg4SqRyio3)GSZ{6G~w%^i1hoOaW}c^QW{Dl`NjICiFI;XR(7 zc4PGy`fX*zw}~h*l&yKg}KOWvW0uk_E^N}w{v66Jns2@{qNGMSoIF~6eG0eQG_R_w7i@OM1e}5 zO08=aD2Km+?N)qfn<*y2?fpmgd%DXaY&`B~AwO4V$HABoL5^;q7f_cko=OxEWRi0y z1p6H48T0Z7iF@*OZ&QH#!X_ewuyTtCV!h}EAzTO+f;9Eg4Vo2dq*gdTd3;W(y3GQA zD+z=7y7wKfa~WAT6Ij6GU!>f4!kHj5YBPr)IHg{~$880%2@VkW&-(P+b1~5-qQQS@ zr|uj3{~<*E?VNctO$D@5i7Z`y5pu}IfPsS^PW5PrCKqUkQB5HYLSS0T3<}@t3O|Ms zUgUP`XDXOCGT~TYw1`Bcfs1SL{zMsrmO>n-fGQYRwN=+uVK`eX&4EZFF{c7mr3R`u z;oxZB@y?Eq(AJ4%&N;bV|w@cb75Hjw{LJ|g@#}1VIFw&gaKE5zO zsr54II{o-Ik8^mWP&wP<<3%mP|SAH6lP=Z(VDj2K25eryaKyfiiYhgeKN^ z3&JU+?xZ(~r|1)1CH&>hYA~xGXfhI9AQlg3-2oy61jimC_1f+H6eBV|sI?X6`Pntf zSlXqr0tDmhj<7m~r`uqUnmg+=DK2B^&tLKt>xyx0!N8g&xY~Eyt}vgP^rXFcr!=Ey zz1hj`NixA%HAImde+;3wdAsZ2s|XcV=<8suxCRv-b2G}cT{?TF|9pl2=Wqg>lX%`p z^EBbJE|JNPkKHxcN~595rVo_t2qq#b!G1{*5#I}=kKrB*y~uQlzW&JWK3U#tOTet9 zzAUlL1%jQTp``a;FBe9*#oUhSi7Ly1v$~Mqfd|FMg~eVd3YSCA7Vw5>De$6mJ0fB< z9tn^`SibgDd@rhM3(Lcuh_5&TI=-1lW+P-nW;EQrDZUy$Z|*bG@(cP(3@b%euOl>4 z$ndpkLnUtCzzcM}vHy>|fXEKi@V`I}F9B!sAHVq@1IfPyVnkWLcl&6=EE5OFg#zEn zFYnh;#COU;j#{oDfQ1g2e#cgn#NMXGMXYQ!?fSATKBk;3P%nXX`cYylg(}@Ci&hY> z5p{bckF@RW11>|c;I>V8&!zQ(XZldMRU8yuFW$6H`*e{`L_;3D)m0sUv}DmkQ*wAM z3$ka-x?MQ6V>WfT1#Vc7Yf6~=<%N3H>kQ&c+R zTQsGbeG+ze@uCdbO%NMdC2Uxglt#~_FQJ#@V1bliQb~STYJ6=a38P}XM-c=L9>N=KtUjrO)XfZ;UY4y;rn*sir^+kxQ*te2};1s zDaEKaaq0t3K`m5xv1ugIbM3iHf`+wOJUF}erD%hC6shhh3dJNGYX>ct zRY~KtTB8i2s7w6cWx%*JwWZ{~uo}eV|^BcNI-iSaAOvkSlwWLG-#GhmCb(a@Z_NvTyp3ks9na?nym4J#j`ZkuyhwrL$!){Mn;Nc(96+KpZ}*<4>J60WE%A$Hn3u zXRBQO6|m$d66P=m23(%00B1)2A>!wq<7$GFu|913-z~@+J}GWHanBTrCq}2Js&Ww4 zn2x-_3mlW^Bl*w7=uHTaK(Y#*7`6PvJy;-B2Qk1yC~Nzgb8#55bvPhb(zR{**?Yf9>tbZb$5>JkvI)G zM*G(DwBdgr16fI>0Jo@l=qCl2q3G_zG2PV1w{PEG0%1OJ&Qp$a6o9SuCJJq;E2Y2X z6I3wq7@~M2UbrQ8z5TAKPSJ*7-a0f@1NxOZ(!&ju#}p^uP)Z-vjv_tiudWsqt|VI6 zwS3>og&kxVrBk8jHNkH}r*lJkJ8j(}hM83<1h#DeTCVZXYS6PH_! zntld$>z+L=FUSnUVwZ|v9k1|qriY`eMH1a&+B2#1K(?q4MtW$Gn!#==f6^h~$v>_c zh*=01(HTBVf=Eh@%M(DgQqUECl&#YUyvfUFn>Y2`Ha$IOH79 z1Oc{~8OaY-HuxC~;_DWt5#71>ZH#*<)4c@X%TH3$@VYa43IlZ9 znbw+8-97o<11B{?Vod5Ms2qE>NY4CGyI_)rJ z^XgK0m6-k*5f4VIDm1F{@uzajT=VEu#7))1#NV z9k|}-D2w)j?C-(|Y*`j6#cakcM;E&w_c-Y4Ec^Qe)t`u{_GGa6Gdb%|m3rvBqb0X% zYc;eQ|53RIvz)uc>SvRtxaLxumRMc<&`gLq7J~8kw0lv^p~4TUMW<=SkB^|D$6&_^ z&DQ#c)OA};nfCuvUB9{0PIA)&XUKa_1c);JpX)cXMt0;+HJUYxxKl^4mS>eq3QZb) zKXDPv=AWrP_Fa{{+YKIUW;^+1@T~QUKZzD4(E%HxLP^6eLePp@aOs;D*6(*y#aJ$N zq~_|D8%O$0h`G79Jep;d;FMpeM_9RllTJY4F|H@%ehCFg!ky}_QvQ~a zOaFV=8TwHxxM0!mk>wL4mS8H?>Ogs5siALvt~Om4Oj-5-25XUK-{pyWnI&Gon95|klE4-(Fg83%8N+A0(c))m151u3^1#_mYOJl_Fh&LDpq{zh64)s z8Bzf`=`DQ_5$O8}CH9PT0*D9vlxh5)$hu9~Dqua60_-k3+F$#D3T_ZA`BO%IupmHN zgmodK7b&N4#a)+Oau``o!L6T!A6P+gph+PT&>18x2{!^`Tn!6#2^c-Dk{1y!he`lW zdoJ^U1GfK3uP4~m%RCZ#=}Qb@M~s^kHMr{_tUS-BYOqcQCRY8i@hT1|3w}NzfrRQusJl4glo%Hc7-;4gIg*aqMK(lo?!-9tgn6OJxL^E{QM z^-Xkcu71NbE`DHDxaEvu#j4@_U^G|hb~c>aPh}TzLZduX5A;x+j8h${EHbR`eYI?Lm5FgP;bdaK!_gV!L`BA zL~13AB8J|~TmOThK4EXSGkZ;)`$q_o&~ z{=u-32WzBi1T770HwBLPaOeTZCY4jaIE;Z6N;*Q4FVW0>Fj$B44qZSGwrfs(VGERL z8XT_kMCW1&ox@x;d}t-^0k%`l+y3*rx}Ae(HLH_*vxA2=Oi1j?a2Qc-T-M=<7S(n^ z)od=d@A}*-&|akCtDG4|v6w0@kx^mB{G32xBVf@?nnx2hFGwFlbA@FRDzVEabZb(7cHpyXD-NxAWq1 zUY(Tub}tDWoQzK?l%B{I%|VqRb7=oxCX{!UvPFfhcJg+769p_vwM&BqI(5b@O)!ml z-bC*`_41S}SOT}U5dSSMwy82bxc|Fs4o7Cy1zGjJ6-or2mNI=r@!u1_9~8G@1oH&% z%tbCyBz)SX?P!*u<%m(47uLGsz&=KWSmZdr%ui#Hf`{o3OL!1Tz!jN!T|KV2$gjlE zJ@@Y6vhY1Tx47RhpQvx&=gk}8P8@Bw{^e8!NB`C0*Wb`Z<~_m&HTlou8#mS;w?~U#C*6u#2A$+ZGC5QG4A+^nMV-ebm~<@P zaxRvEZni6>nvOdf76#W+VcA4ooc*=5>|JC3MdqXxAY7ImRT(<~eK(A=2^)e+X= zVA;jFaJKhlDdmxFh!ZFzCsc{IL+^IQ4M@$TMvI`tx;1~6p;48DP2dJMvaTSGKnt_R zFQSx#+GbV@OzRcr7eL*rcm?E1HSf&KLW%%H1>}O7*@n7hu5yrrqUnJX5RZ(36p_=+ zG}e(Q6|hO{2UGs*AMI~;>cg|?FHQ$MJvtMSjY{cyiOy|J^6_C)3hbR6$65SYx(jnr z?kw9wr1J5WMgsM`WN?3u|MFJOJJQK^5f$40uhUMNI3rmLD!tw|vH~lcGa2#U`HrIH zTq9EMEGE;ypaMm2_=v~YPwbR2F3tZjEBw3IR_D1T{Q(276oWlDa+!jLdy!e1B+M=3 zSwXo>GO*svIL^pTPXBl_`_QAt$r#e!dxFMlzPNb;6VVM>mdSRTcXn8`#16<|WrVXh zQ(}cuo%^K~2Nw&gk(oJgdgPY}7chcv>yZ;Em0!wW-Pl{USY-a6iOOC8NQ_A<)0gIXo@vL64SH0lu@UOKzV@dqHw5#aDvB)Si2Lui$ndjo67YH5JOG8J%lrK58SbsoPw!?Y zNcN33sd^pmo@d0i!>xG&u{B`CV)gk5 zjhO?bR-vf1_qRH3F9WGISmZ<)fSJ=2+o~f4h*e-7^cl5l3mFn1#%X5r>qeyIOXY`| z53(0Q>%elpRh8DzY_hEdhQ?GqeuJYxMfO<_IoOVt9jEtO+tqph z1B0*lwKj=Tu8z_K39fUIwR+2Cpu_zb*SeSzDoNoLz5(gD6`>vHC1kg=y@zaa)+uFk z_qj%_l@svAHWtW_s~wmsW@|9qEvSMJ{M5)6st4&TTRxW_16v69Tu~pN3nxIFOP`s$ z+L|NKK{F7a3qC0fR_u3E`=*i_qb+oKidZpf)1Adq4)tT?pEjG^82i1c9>AGxL4yxu z%mTL>F}Yy2R*&}pWtVZ$A&~YB+*WMx*YF=8(ji2xa4Fiqi{L7*@dZZd8hwOQbKJIH8CJ_2EOQ)k z6*D(AT)9OIZvwn*lFJTX89FKh8-;E!%y)4&axH{Pce#SHV*6Y3%kMHrC|k1BS$?t=Zv?#ozRG*>ky!Potm|DLIWb#=v%mD53jXGG&q z^z3Cmz`~z5K~fL3KR{(6;>_N674S%=)}LW=ed$dk)140a7xz%mNPfa)qX13UfcBkt zw#?O6!36HE+QBG1Hi85~i1nF7KfUhKXJYDuO5HnK43pv7VXnMfVcOKB=bzo|wUs11;DOURk% z1bC!+kfK%c2O%^B=|-q;K`LwqwAX(;Ky+M`~S%mq&h?MQoAf`pxcTQ4gph;xuy3;G|}2r7SO z?OM*fBg@VKcM(_L0C|-uI^n&*jSDS!S=4|u5=Ce)B0@E3_oHjT$NXm&zJ|KU*Avqe zr;r3C*@7(YoxL`rb!4!h#3Hy=_(YT{2q)%?Sl&O$9L+Ms*it}fHp#5UU|5V{J{pC4 z{eV$_8a0xoI7bHF$_=sV-gwiC#1n1;JmCQ{r)!Jie7qwQ;|%yRDnR4l4tTi#Vinqb zfF>{M-E$s)q(EHFT@n*9V%QdxWSjC8CcDw>BCn^ovYz4Vpt)pXrOvYufZJ@_`YL~9 z-0Z#OQg`#QG{)wiH|D=8n{Tx^(C_B)2T7hkryrBXB-z_0td8Q?NfR&|j%ho}Y4`hb z%q7U$n%@g}*5}l{snKD0#qk>CgkUEMaWocngoB!7Z(mZ0 zeGJWv@;yvfRVpLdCS$5w90U_;OeI|v#!Jx~9Yl|8CE81~3>8{4Bn=d1yW*6NiFsKa zT9-s<<^#Elgi}iU63&zhRyi~Z1n>i0d#4D~@Th8OqMnxEaK8gIiHamr)3wMygmmrq zZq8I^EgfTlNAI4R)ZaqgHy6k%=fpF#eF}5z`7Ei``GLoo_s2*^G}l}k)28Uw2HyZA#&#`q5g8N$vqv4qUvSsPJIjRz%d&w;;5K_!7$zlfJ) zA-q$~yUu}4US$bn{3EDO8h$R%hF>C4hwJcwc?_Yg@a-)uhj+~j@5U@A$+a38@h zj|ySK50u0yG-~K0wl<3`a`Fqvs>ZA-OC@?9ziTy1Fj6_`pk>>nXY%)l2gp$(0L_Dx zP|mH=T~m$$)RDCGvUs<1r~1!)yVQ-LGCfA+*h%P1lQ@uKQ z_IU|A_C!@ z?tNQ`TFT zKwt>NHdA8nA+ou8Hd}fxQk}1x^%TpKEB`G^iMl=efXRMpuSKUTq$vR(KQQtx8h|hX zun_ZrDXx^}SWC3-MXuVLm}lI8R=$DfxSH6jcya zg|~}yPYB^@lVMv3}=btiF#>e0eoZ=3j1!+WvP8O4UL;C{~ za4x;F_W!gaK*n^E0mZWHPJ#*^5ecOIae{w;umwCIh3#0`U{85>XbrInTN%^KKYk0@ zQ>W&y+~dZFupN)sqdtvdM2Q><9`DwpIfmC(mJX95)`x?j3u4pkOn7 zn0)sc5hB8vY%{QnM2k?xmjZwX_mLbsuo7e8e%;L%+;1|yugs05_FcEta8s>0_6NS{x`+4S{*UI?-X; z#?Tf!5Sbk(>($xUiFJx=7!}as%~k`!vK1pgz*#Gq_lnq}<<$E77b6+1%f$?T8JJ#qU8P1cn zi0XT2OemXQfZvnq$*|GOQE~NBN48%Si)&xvGr#-~a?=I?T>z4K(7e z){|I+zUWT%_`K8JLg06L_mYkyHOEH$S}(sPfsUbvGL0}WPxQpTHh<}e3fWul z9OOn5V-^noyv}OYKB-JTD|p~gK}jG*vCqQy^we-0qwcxC5CV$pox}%Tx8F-(pF84s zTP4`7o~M3|TGWSjgy5&DcU$dIfXkW4-;>{~i*@KF_gj!z@;VMW-H+jD8ap0#_eEwd zo3$jIfaD*{wO44sKhQhKIHtuvW#I4T@>{hSXt!(*ZJjuf8(c3rlAFND5RNhbBl5P? z9U=Wl?KSFJ3MpL#WRKln-sd%J&8q>1^E%CGUosr4az_2YFi)tA*^G^jtZ}t?3m*n4 zZS!kvKY^^`SIN*nR|qK-a-88>%PTF0nXm*&q8Ai6wSE-Z0;#qib#L%(l@E6(*Vw^- zyc5%?Hr9)9L-Y!yj$0&qcF2l93A?$Fl$L1I&o$8664d>gG*^x51RB>sLVKhjcq_xi zk?(Vujh1KVqe8YC)5AB0hN}NH0Rpg4{~M>T`}iRftJK$&+SI{a=>d;lWsg`G!j>n^ zeJ4tRi59)fQ$5-0N!=ym3&ojyYFt_y4hdSXgk!( zwYk_d@Xc$GFtYmj3-rm)gE=hE;N7-3!bJrLz(YJ&>}b*9_Nium;7maLps&f>VQj1 zw^ePemMxx+oI6O8;gOq*zT-lt)P`tfMiJ40gL;tshOyi-PNe-(R(0Yq*M{apDG6Qp zj}@<93c4E%h34fRW3e@s)7zx(%e4rSInc&vL?Yvn8G(5>%x-$bP*0hLT<`^^5i3S0 zrkfqRJ@>A1}H@9pi|3$kyE6F+Ag))xk{m%v~!h(ke zU;=zD=*pti*$|1n0e*d+jx!EwuQDr^MS^%Xsuyg}(Y`|VrkxSpK;Rt(&8PpKgkr;6 z2C>Z=7jUr^*%u?vh00w5 z_-vGXYRQ2$;k16G5L%I^a93tP0>fngyE!qpeqoFyJ?sY+ZjblGa|5}l+{9;`*nve& zM-SxwB%OYH{!El--K56E;{Qo{1y?Ml?nA3ChdokpNv~pPc?1U6nAU| z=7HXvBCd!2&TZ?sK7(f02VDLXm%j;ju&3nJKjN??;J{E(KSrIhkc)abs;;he06)ybZdwZHc z9;H10A2iUA8(x7)BNwG}7u3;7A-Z<>OHbVzY^pDesH?)#+o6}ZhDT!Ju(Djh zMr5!{IWPoaMs}LP{s1u2VipSy+nsr%(T2bgJ8c~*?oy# zAdP+)7-}32*+}bnju>Yh6)w>apSd)3*F0(=#nSeNv&B;Eab?mLZkCgqnS~KhMEc@W zkZnLFQS5^JbdnG6s~<_Ti+lGLd7YuWnSLM=6Ft*!&Yu&GV`|x5P2zz_6eL1h;&x5Cuoe6 z*C^r{#e=VFCL1c7_H*%tTwyfn*e>lgRUrR%wFaMNxv^e?z&pzc2(%icOX;7Ck|tb4 zCR@VFH-$R#$!hz&1?$;ud2=zSBLd6dwkJb$P2P$jB0UQ&f?}jgqX2B@knp2uI6?x5-$H&`RpSF8U~gK-nwx`3pkGeIe@P1#~G=Q?f46ZPcUQI zWXq;U-iMO5F=UnF*h=SOSwywu%MwRz1ny%x=UFNg0(V}wMa#4OpdK<4YEu(5SHA{6 zgeS;gVC2iKjGjQMHn?A-v&52otkMG4+sr)nO%a1?ey2AKvoq=IuOA4KRwa5TxqIPJ zD(<}cnPkIkSi)`hB^sJ*ghper}C3Asyq{0veA&2xPf04{wLXv>rb*>3*n=K#V?z9 z5O%i3Jl;i>T-kiy{bs-F)rnwe_ssaXDOtq{Qmw63_u<3=fr`e!j5R21y9h_jKdc;3@P9QvO3h0gdsbkc5cgx{8*ZsN z`A0vB+QRU&RlbYGAIh#jYE4VFqEzbkmIgG(saMDII&1fhimBw|r{kEuH|)z^f!h=XqAF&wZI@;-@~M@|%!{U3firJ=VyR z`ziJB_dV+^GpYB9cad zV%lSGwDa6XL)*LYzGu6USNICV}oTU)E@AnDcK|9_!&3R8HuwU*z*oax=Kg zR3xoBRn7;FA6$%m$eCIWLb;U&#wnAU0BYZYU6Av=)F0pXZwME76s|$(^8bWz6`hi3 z+Yd@E`Lej_x$2(96uB9m4#hQ=XU_AEttw2E^%Yc3<_gZ=S0GvuI64aXmWUd%=-xX& z4~+KkeE>EQxGftbLgoU3)Z%Vq^1kVN|40J?vzf`UGkungbn=KK{m;!%nf$|1k0h}O5V zd3=A8`3%l~3(|luzu&2K8pKoD$~TttE03IMMyuLQ5}s#-r>J5TdyUr%QDY>HhQe+xk17~wZ%8~0qyHD3U1`xEC~uxY!-Ood_Ktn z2-(r_Mw-0G9XDLtU_xiE3PO}e1dGeHq4qh%x`*-(zL^PmXO0B7-)J&K67@)A)UMXJ zKhw7y$-O3&fSa+;kNlSpJ`LRdq6tvJQB(my?7DR=;<|FvO6}#=we))$Q4%U&T*@!$ zbO&h?qPYjSqCv0jqNRPvet7tWGN7~U^XE6%4{07|NUQDLRM3o&!nmJ~Lm7b$^?oS5 zuRF)(x>dK+CD+7Lb9&(^ew32HWmb@IIkiH%J&6$5K)p#tdB^8HHufzsQB+Q~I}$XO zC;eI=CnVx&8S3Y%RekMLHr#?QIS44GtrL zJo3^C?H5GHFTrY5JQ86fFdX;5)uMKhmz6=NQ?|ET_Pe# z4<(W+L&wnFAR%4S@ZEFHz4x5YJ@@zg{^UG9M~B&aueILw227-vaJ(nGnOZa``D;{= z@z{;ipbb*rtw6M;T(;N22I9f6N#j+~^{v2%iz*tK%2ek)Ki@wRR_+qFC8_!4Za^fu z`^ZcY5@Ua;2*_2n1DR^!8q2*Qs;9FdOrP?L>m}1%cG~Jq0O`1J$5ZM%ZK;;hD|AP3 z$%AojOyJ$Pdo8>6VpZ8~L{dXG32$LsyJjQfBsH_uo zo>Xr;J`x>5x_uaeMCYWrCHtYOo(&f<62**Cm-0JOqR6*-D&bt5&59ew1$?FoT-Q^G zQw&N49h4tTBN);k8$YEIdGmZYXX-%L2G zv>%s@J^(fEMR`F+_HL6%eEjRLG}K)dx!^q6U9wpSit-1+&=|L3JDPA>;ZH{K$;#;t zsEzoauBTwLl5O~EQZ(8%;SWPFz!ZR^&LLhUUnvnD8x;Uq`9y8x{#_sqQ@K6g!X=wS zmxbOHH4;OSk48<8R4L)7IF*$?QdTyZ5PKK~6S8AzQ!dyds}NBiKv;1T9TGN0 z6CB)}9~gNlND_SrIK7`&V=Iy{-is!_E`f<*3Z0SCB&Ux|8MGPTnL34mmpV^pnI=oJ zNqDV8GHhyYHH!J%k3vS*fs>yeeVCVDbe{_nO*3kI?j15~F>Gvy%O>oFyDC35mTsI!}*!PMiyEU{hqUp{GHUx z4i*(+$A)1;F_AQ~BU(GJ>k0`s$63%++hQA6Fd@r{uoFHVnA7en^IH_asBPE z{qZrA#c)_D1dh+6>Kt36SXRL5%P~7EQdUy_Y7w6r>({6Ien5sG5bt6zXxRI^luS^^ zrRY=Tiy|7aeb?e!7g&D@X@IQB0q2jn^ii=zqoLt#EQZ71aOxyx>AZG+viT5x)mSeZ z9G>qcApc^e{$yj>d&HG{zTb*vXnb=Aej;reTFT3;I={ zJ!#Cknd$Hy#fIp78&w7$7BF}#kb2!W5OeL6S0|KO{Km99k1OGuOPjS-pB=si$WHfx z0P_JE;-SR;6KRQP@y)$CNQ!|aQ)N=!H-a{ci=Ep7OPY{oSEKvOmb@sv=YbLu(3F*T zrnpn8O&dv+SGZKK;W)aD{HVXQrRm{k@bDkMP^l~uKd#We z{2isan+-Y@?86|B@=&=M$c9(-m~AcHfq=JI{SN^LR9hQW}n?!ee6sG_K<=t;I{j|X}!YO5`ZxLnM9 zTDdh9FIi~pnVvIKm<1XQQq?805%ilt%uEy+cHcY{qQIofNCD< zL*<#;>#4(pH^pK8#vY?W6witZN4UFRahaLuILMy%y`^NRnLdiIA(lHV%l{%gT50fT zxn%?glQ{9|x|~`8>wh|hf4?=lLO5t~GS>vI^KZF9O`H;`DEFp$nUwzet;B2zg&jx8 z#tT{mp?RwUG9pC!rq=~sb`wI8MD9mwxoShh`N7JK6H%JbZo?Y4{lf&B#KY?f0=_JG z`Z z`dssA)_ak0PKMx%EmhYts9Sx<#rY-7RL>wq00S9%C2`Fn34soBvo;hF%zal~RI!#J zM4|Id^RK#WC4@KUFD2?n49Xb%Q3vWDWsDerQt%RsaQbmp3me<`uBa^^~kg`}{cP6Y!?!wueo+ z^p|5~PYxT;?~)@dyOMu84;-`Hww|t+Xl%!B=(9mws)%~3IMj7*1j+z5LWF)5=D_kn z_Mpmf{?yZJZ#lXW7?TZv6}@L(aqZ6ASTvbKX&dL~XI~r`{UYf^+xJJ%Bfwg&F1#41 zN-^VUlCJktUetT&57H>!S@s!|bQ)eSQt* zClsep9?Q?M)vR2F*gcBq%{8*Daa-5goT^(5R|(<$0L&aeObeI71N#A3unf`6?0=+g z!8kQt%lJKZnBA61#Ol$#PX%L8QrI8bOdnuJ1PszxV*EL;rKlQgerRuZXArR2h~ro~ zB0sn|TFN*Wh9&uY#e}g@JOp`YSf8VMCDic3I-Mp|0*_F%3Us2y+`Gp@q%2 zM83M%JMuO;=Sp|~Q5=miDcT41?Y_51knPOw3a~s>lwA23J9!=2)UYjKpBtV*_aK%n$~S;{hLhyVayfpKlt^r=Ihm zWv>v0X?0qIwv^KXuPaZvw=mSXRd?dnQFIfRh z2`35@r2IhOodYnqXR{M4-h#+_SLOd<*+(bs{xUZ~6t1A!iA}HX2kw0y>WOt7mmssn!`~ZBC(;?6>5ywIyx6{hD0@NKZ6&wd~KW+n0{>o3Fo3 zGd8k>HTw!&>Hn~KUfLQ$!%_o<%*so42NRuMM5n74^gQAC&+-0G@ukO+CSq;YOFs;Z z;xMJYxDroAX3xjiZc^^|S!j;QluJGyOswocTgM16p4&iAeA}|_MYiY=ql-_M<>!;yFiB`i>>E}wq%`3 zsrqwzNI`DUos0k(4uXyWSwEI6^+mIxIj6F$$(#$=XysNQX-iu0P4pEPz1N-iYwzTp zJ))zl=p8dNYzo83ThSh=F9y2RK-0hTzKZ7Q-#(SUvdU|@fVmly+E8>j35x#O<^S9D z_dFmci*|2%(HRqp?z}VfNGM3l2H_P&flor8*vea*t5DgE^_JNeO2l$sRsi46Ads_D zK2`1Nqx(^NRss>K#Iu{gHvuIi7HJ_Vb}H^>MyH zJpdDN>HDIGN@y0 z|I&h>jtrh9A{u=N5Z-&(^wjoYlTNku6yK*}RMCkCGR4KgM$hbg75Fzt%W@*iB-(1V z=UiOvmt&)k0EX-W&CuMgC;ed8NeM|GXbmucKysnob)#TI){hn4rP)N=hoa#ISGi6D z%xaff89SFW3yO!@0PYg!yPt3T)vzE8+3daj+%X6vEsH7fzhS^}zwGMJ4@=&l)l8;U zMJlra;OAUv>8Y&o+eQekLu9N^_#iq^Vs!4|#T>PL8H9D4q2AZc+$V6DuKvi7;O*qt zePz>fg&G>sXiIL30H;p4U2e+TXXv&vkDK~#X9hYF@WPe;94{F3Rd(!uzsm~G2?@41 z4&2tq{+L>E$Vbk}zqxxW;NiZA6VDE{sC6(&3O?CK8E>`Y-hHIliEA<(H_7O~GxjG-=phU(MC}*o#d996;c3z^n6|b) zS~Kq9b&;-A!tB|$HEQ<>%FYY*q*$*02-Y%8DDFDFEAxDnpb(X1f^l8D^`qT#2Q`2Be>}6Xnz=?u&7;v&57&F)yz^@b2Xzt zWVp`}V(7Y*DX%E7jjD`(`wApW_jj1hE<^$(*k`x_Chd2093Xypw&^!r7W)Bz8+uJI ztIdKTXssQz%nfxNwz-~@2Eq&T+%h0eDyksg+`J(o-?_LG_QpMQThkr0lN{{czA9=| z1DyhDxT*a4=5RHDuWj=V&SntL!CUNew^GBLKnio*rpGaS_ByLbap7SMu31HPa&#ip zD9~$UsS~W$soDpKRxW_YxHE&$yaPZuHAt>!bT*y9PY<_=%&#wsUbP+;lUsMiNZ*iM z<(@$zWmDeQ%B?&Wrs62wb6TGu5)4ytJNUJl*g2;dLc({z%tB!d5Yx;J(WI4c{^2v%aUC8Pc|sCThCC|xL7IW@%@cHRTpPKREwx!)w#9H#U1{Rryp^}T z?mT_N__?j$ps-d&$^K#D_jSnP&@OKi@3-b1!&b;<=)~=sog;Irc@N6bnhoxJ!S0dr zm44}z#FYQt?49mVW2~J}?q;-ek*w9w$E2!GcMImbc@;jR<@k`7#=pE^g5-zU)M|TE z3VRo#lsjBTGDAEJI;fW)3b8^PxSO2$=Oj%w8$b(eV_OnJrZ<0Wc?@5NxUF(Vxn*vpV+A@D~4V z+W!;Wmct8B(&u1>HE6>&Zw^u*Slss4M*9it{Ej+|rB61Nd$T&is=&9V#yW$~VYo@VwvJ(3xA;8q3+HRB zTObERd+cC+eAvf#mdN-eg)z6Hoy=~ha2lD4UAOX;Lzm?q6BgF(_HQ&h4D7YsWVkGn zPKDBnGgD9Qg@oT@52n9Xq{*x(Bp1{<7zJUup(T59gvpURoh6-GEN|mX5%*7lEf^7u zX)=2>+eQzgsriJh6@LQ%=`_kQGvYpOrO~@_+GmnR1J%h2BvXUDJ=o3+STkg7Ja&B1 z`jog=`o0-CqH!98YWD%pO3F#6#%SW1sMaHe%Xs=m4TA@!*3ZL%nb$C3Lu)*Efxv4r zC~Rcr1-ix@MN*k}pAtao$cTBZT&qFnszCe9_rQMajO;|Y^C67iDaH%A>$%{}3RBsZ zpLIrHa3ic*K5@;XXzzDfDlfkW#%;qn0^mE!^+*CEnLhZrj={}^c~q;Fo1PZ25<8iA zK($~N+Dq2TGJ6Dya!WGjr|#u zaO8{iq3J3rtoBbLl;SM-1t92vIQML|0|YjR&gM0uz>FfyO&S`?^DRt(TBY@KKcr z^ENA_;+)KjEZb75PfSS&ROZa>(C>TJU&;fGGg!P(mV6fKoGCB%^*PPDLkm%}NsK72 za|C89oPT)EwnB1oRnE#Q7A1S`A!2EZiDs@hi1-}2BdN*kT zUE>Hmu%RJfNAS@=;GBvSU+ic83CZ3OkpB6{7NgQED?@HVT!N5ZRE?1WQD`LR1wEJA7u)5`qn9GEBP ztYm*iplfwlzLXYa^L41PFLn?C%MyKw>zJNu*VTC7k0+A=Jm}pJowc=GMfJxv7p8Z( zW802EKu>7V_?Cz68S+QG`U9Bc_ADg1a(o$*0izynPkq;ug|Xnq7g`fvR%8!Wg#&R4)j*vSJg|B^YF=r8MxZKG#}ri_4O zf=cqxi`b3&RmP47cC?XUU1O<1i5TC;kvyukOV4Px^UT>RkMgn|vL^SWYi>NNXUYEb zA|rgL)wfos)zIqNO&Lg%KG3eull;GJEiKX7IN zH8rP6uv_TI8pf7`6y^BXn01N|OMO(W?p$duF_dGiNV+QlbZ`1>{70~tfP+G%c|I>A zcr0ojuu86SQR3|%N=&nI zA7;p|w6aC+A zzP4F#U(rMMF70wQ(`KPRarp@0`Te|Y>?n~VHs#(}=3&-y;!hXA4=F4M*1JD;j+rOx z0c@~;s`z2ihcT#NHsfr~(#Oa9eCKCCHV;{D+fa9^cYLWuQFNedi)gQ9+VcAjdAY6E z1Dy$C+;9k!_{-@X5aG!>X?`l0KTMvqNb{p;xTa5dZo!O0Vi}sqQb|*S%XcSWL6(I6P(P%HZ0q z&5vahP1#>(pOh+A_UZk7SqF~2|3wD*%y9Iaj^(#ZI&)s0^HAf5j*ze*X-*-gUG<(m zkZJYI>HWK*awNLW^I*S+Yc7M;MyRfuz_L*ES#}_)#E990be=RTWA5v$D2&-Q*_-Fa z`AyYmU-^Y50sC5swvl5vxpD+!_CN*9ksUusJeqCJ#KulMD&$N$jOUsBlSC5Ai{-f8|-?6nUe|_KAcJSjxsM=T0+b{$0#J>lgf1mrFwLeFBO+H7;AH3{c(QGQm z564=F$?C6Or@LWToDlb#5W2At`_L#<^}*Boi-lA|3>W=EjF01kRVO|_=EA_&u7*iq zk@0nauAe&}glX<(-ikg1Zt~k1Zt&N{d2sem6JQEX4@&C%q+{ffZHc+-d-O9Q$GKY~ zWKn?@p>wsl0w~6fy`k4>1iuYa=1jVccNGVn=K*Ko2VDI&H$tPAGW>j56|L<^nsf(b zJoi+w4&wmAPg8hO>|n#{Xx0$1%2$t&0;AQaRbV-7|4veM3!|6Pu&_517WoR{#?&Ex z)V)=gf@7h1%eZhyp$>)eVyaRvoqID;dKdsR=CxCdg9}pB<=w5M7)*Sx7Q;h^$ng2C zH;p{S+GIwmN;@w;zyw2*Tt`bLz$D%W8mCuZ0C41vml^NB+;Y__%676_*dqeept(43SR@_?wDuOTttEP$g5L zA7%%rqpvLlGr&U`I_!3~Hd=a*k>_J#$#Mh|iJrp0Z3}Ph$y=Rk4kqsDyLlGh6j2-b zRUSq<2Zi+5)hoid%*x;X{T=+{QG9MqHlwy~xUQ%5MyP|r&;7w;f$}y-!d=fQGqb2@ zLifWR>*A@polx~T_A#3W3(Cr;qA?pR_)H7?*Tqg*7;KHBj9YwfS}2}0l`t>Fr~^0a z8Ef@^F1MhnFk-J#yjYV&UGX_UxL`PrP8#tUsg3qe#KRw!g7cKrx z^Ka-gEzW5sK%dF}|JFzph<~q<*eeCRXNi8|fi|N&R!q%bwDpnq>2^y3>#_ZKCErQK zb)lJ!wid4~SFwJ}F)IA35aA~92)B+^hiw<22Z`Tn zvu=YaLp$b}dF^ZlUrzOz9V*C@hf|Fc{WVH>i7iq(<~KJ%Qa;YS-1&Co3SI{z<v7va7vKwtSyR(VvDuq-upFpJNoP$4&nY@|HH`4pkJ=`k8MEF zFi_RFYTo)Is#4D^4jH-ws53?scWlEG;#3VzJPk&R=g0QN%o{vk*lbGdf(+uq^laEr zNfirnLIf$j+3XNUW&P}*vbN;lvU$KHz8Y?UT9lJ+xGq$uUh zpoO1hZ;k#2fBQ)==h?`}g7amcwSXs`;vDHep%K2zTKyp<=fLJt;`VqF_}}MWn;xv_ zIS0m!Ket~%Ll9l6&IJrSi{5*qA;%BTDqhhLqzvHS{PpK$=V{2jhRfI zorD_isw#W#x((@B#wnTBi}y76UAO=<>30imMQIodA!QY1(@?Z!hO1lhZid9ll-GuO zS-5IyteyPN!i_ge6<>6F`s!~8v-;SbRCuU}Z%&s^r&OTIv>YyyC+MA4taRJCA?00* z1wTFEOh(ToQKL-0)4r?gJ6wK_pZ~|6l^zEj3v76Motl`;$rSIHZ6kGDr`-yuFYZ*W zPu6@92y*9Zc{j=*qM-Dc@3bQYpTVWX@~rMWc(s2!LrS*7&~kDh+jcmHo>)^nv=Lpk z*eQHjCAB)ZtLe%WS{ez@fnJgr#|jJLAKTtxa)Ac)D5t@A@v^a{Y8lGXuC|Jxhg=fW zDA99iHdIr6fmn;@Q8L3jR>ty7WEPP`5;KmRONqe{5}oLQYC;`4nkjoSm=6AJ{gN}#Ix#}fk@4U6zU$^6`yXPk;7~`uy=am zF8QJ#pAyt+0()T*uBf|y=umP(R>ybX8VtwiHCF0ViYa=h%KB7?*$S5`oEOIE=d-uu zqXhbQS|R5 zh>qjUuE>s8eZcvYU@h!c{;_LquB&KJ>abX`^R?o~t)C}rUJ2wJ1AC`c_#D|21UgEl z0fcTeJ;L6xHClVcOWV6x@wv-cIv)?4qau91?>j4<`aO0|Ht5e!DGqrmXfENcV&DDS zeqCirM?H$95^bXKt(H%KsdDP&ad*F-2+LRHSr5CGcp+(-VMaH=g%W^mrBA+Z#S1bb zi_jwt5)gVB$z3Z4t{`7Vg2xu74!hs-Nu?adWyv^-1W}6Ulh-&N)CvNyLyL4~97W=0 zCZORPRn0n$k(S#Y-H13n?BaR*Yx79J3oEQV|O^Fya~WS zddp{SJ^rh71Vo?nQ+zo|*_MowB2SB#pABycSS&A|1pPitK8Qg)`M-TI_Wci2dTn_# z#i1GzF5q<<%|;%nf9--QP1ieCk;b$y)P=Wylg{>2q36CEZQp~;Cfxg@l%*BJ4zVQC zGnX(ToeBMIKsshB=<5-5Q(-Tt90KJ=v2zHKuyM)4S@&pFn&nff$g~6`XS3{5?D!xZ z+fO-fmchK|!vgq~%Q3 zU{cH?8-H5$|xSDOOGP#(I0N8hQgi0Lk_TZ^4Jyc>37-rCi>uV+ zs$PU+NuaLBP8(OwYH|c>FfapX49ur-g~_&Keh6d=D^~gZ=04Z=ztXdL#8PK++J@iE`CfEg zx=@~jX-+MV1Lg52lxA|jZI)4)XcTRdXvuC$O0-8}+AP&>7ym9wJ>1Lu?3ZlGew)ME zx%#wkvDk^@t0Zm>*af4EXJW+v=&;%d$esa~cznlAKXL6Z6kmF{=-RUhJl`IIQDXRh zo#!ZZ8w;9B@q75)46=|!`?QMTdsyJ!X0lqldb>HL530<*s3&iEVoon~O2JM(Pfp}S zR-;U>TEqTZ-y6bibgFRm_YyQn27@TcDrib*RM+?}cE#}2qb=_Po`fHz*J|ywR!8=~td4LzB9U`-9sD*pYiS8QJtd}n zZ>cEFNmdO|;QYI^BwxLJe(7zXTm)b()205@{?8@+bI$Nz40#=jzU}*vO2sK?Z#YXO zQpCECJtH(^w?YqrHKz3V-K|UbrWf1#Bg!uTSfkd*k2eK)>S7hv{mt6otPW$5sN0>j z!R#=wXoz`36T{)90{;q@ z$1)J>n*u7QkO?_X_rJPfyU~=u#V~( z;5uuNnef2Z>b8Cm)iLC-CEA#JWH$~+H}$U?1s%T%55=QJse}hH^RlE>xz&OfA0?a@KjLrr33i=YecJ3W zee}(Kbt^rsz~slU5z{&?vP=Z#w(|AE;6#R<@sOT=PISMg$vgAJvF?)qg^0=4=&WDn z9GK7)#&{b;g(4if>`6^aX~7MxN?eI+9gcNzC;5m?jO^Cphs%reX^8*kp755b85_I4fj&o=5s( zeB`zKxMhY#Ecx8q-D5r61k<8afwhXZo~^Qc^GRR|gD=QSbX!+x8)9Pg_4T%yN}T@z z>j1}J@YkDf*I2$WsXA^Qgn+wP#npGAZqaU)k;{v~_I%3M36*V^o8XxnePD>%RJ#WzW|X0Q|wMFnK| z9$RCI4B~Xg;ST}x;KJZ$oV^gM%1}R95x7pBb)~kdzu_K*e0C*R0=Wiu&guX#1q}2O8+di4Ab(d&Ir0F94Iac_41_36?O} z5Y6II3j|_vL4VsWCQClUrdo-jZ9j>E;h%rzk?zl8c=HS<-x!a{8yn7p zjIIEA(B8rGLw{}tJdaY@Sdi74CG0R!B_u2^+sfH>hO~U^ZM36TQH71p^m2RNx+Kr2 z%*2FROpHBvd8nKt*b)h{=wWBk&X=hqZ7?G$T~GI#|zH8n*yx;-?yG z{5DMvGilbn@6T!~mD#6WH4L=ZKWZ-yCl{#vBJi#lFi;Wep|}WF32t-|I=L0$xFWoW zHtOf1M8$fk<10YTmRrPSLw8HUq3}cDyI&CQ2}d$zj{TLP>)bhA&N+bv%EmP=|?hu zqp*lD;%q-kPnLTNs+F|e&wKxW+w;1GMVZ@mPIS(^7Xa(7x@sQ4_ zL^7rU(y889)Fc%J3tnSS*msOBEEek~wjWvvy-K?W2IB+X7IYcBmV<~JE(GIkeRGec zgS%RDg#M17<4+)+;J@cu;Tgr&mV3|Q@ip`Sb}_dEFb4aTn)`2*HnExn%T&j!>Rc#g z3&YZDv5pd&7khC|=-13PhMb6x z-Un8rjZTS2ETxKx1s0inH-T&MGh>kE`rA2GOfqu^G)V#~SU*xBB72_l=5}8O9WYba z6QqMy&4^CY#p=ix%kd1Ty4P$|>ZbA)a9z_LKzu^$;nVd1Nmp1HMQBKGD_s!3UZxG= z1hO_i zBRJnnnZx*{kiQHKFF0VcB7F(vqJ~?_c|*1l?VK z;ww`c>US8h9-s1JBQvT+?o)z95n5z4Do?TIxAlt?ZJN*)^m~<2>hj@=ky5p#?(}H! zmPhfTBk5guh=eM^*2V$(t!#CZ)WF1qWRKAGtsta0w7G=P$F33Iby-LwgN;>ejD>3o zDJ!e6p=8=GeA%?|*6$#)%10G3Fv63^%`AP=zVER8YwqB zKqL;Z6fW$dsu7`n!$<4K!ti@-RM-`;rzgntQ)MucrW@g~u~xzj)bFNIQIV^TsA~Da zD2>*5>Ur&buwN0dz0O$62?UF=SRR?V&=L_Yn=*4FmxZchVN%SI*%>^^>R4(rN z2VhCZm0bfvzG=1bi=9ca?&{6dT+I71qO^u2u-j(1!p8%4R$4SfhSUS8C8Rilp4!F* z;T3{LY4~Yd5NE*%AA33PX1Wq0<7EZOMV}6@c-y7j2{A8wVpG9ka^uw8qCmF-mW6?L zz+=?2eEv?(7)gu}c2VNMN(435pb>(ra#CEJFtFIdmsw?KDA*tUdU4cm{_WlTb9wMB zhHQpt7f>lW00f3+Me}RW1uxhzn6iAJ>K+j1gj-Kqtd|GL9PFTkn1$>iUs?xT9+eA> zju&sNeI1_CV6QhH5xfYH!w^;5m-wHA+_AIa*iN8{p-_6Bz61?9$l^DBE<~BN$!;9m zD=@xXa;~5O;IX40(=AkfJM;trrIupN0<>YhVoXK0s~-dfvTsF7oREwREtWYp4AeS2 z+Bxhk6htcbmY?G^Hh%2ga&XrB3kaUn6xki7blwjV`ZwQYPDh=A5xPj_8V997lIN&W znvnVZV_^FnkF_3i+QAwluLKbBZ^=U9-Z6KVO0@4*Gf$U(CAwo8X?bw8geP*jsd_6IePOdfAtY38PgGH)ssO=BZV{JKkkqC)gREy=| z_p5b@33Ss?IT&{FoGaG}D+{3q$_luzpWj<^t0KE!A2x&3T^~|S{HR9?aspUFsv_}) zP=D8}5FbNHHyF!K?X>N|>yxEt^=?kMY#{rAHqVDR#gy(@eKCe#_6(C1`RRKgJ~dn3 zKRbdjmDk2mV?L2G@j#Ch#euIF=g!$8t|T*fXlZ|9o(E=L)@~GX5Us|?d^3eTD!_Uau^|#idQm+n8_?x37CrCF5mv{JxDix`PpXF(ksK1X+A1h z=$iYZXIU@p?aQD^AggXoSzY$)Uh^cIz%Y?!QZNWxc?=;Q}lNx zWmXEYt9d&tf9=mMV~_v0U#~$!kl$$7N0)LN$lb(-rLtTL@8h{QH(zB>iZ=%PEGHg2 zC5P&jPw6sgOD{BA7p1)qx61v^txaQNp}&}k@Oh{*pb>mN&AAdKSrJEO5xI&Q>Ihkw z{8-_!e6x2axhzej#I}4&K=Chs-sZgD+G$$|e)J5t2{qhg$e(veEd$0ewzsXq@Y^Ji zL~jFRLPh^UX#lQR6J?Zg$8s03oRH5_n?7ZVDPn;{!@(TFQLbLz$6HyXfG#odE#y%N z#N=Yf=^B&AmxT4bKCXkH^p#n$#ZZz`Kmr%X?(Rl&y8m_`{x!FAFmHWnIOALYvRO}M zO%~7l>@?a8BFt+_D-CDb;60ew#<}3gWK6NQsK%4~jX_eA&5ww~f&^WS8q~%>W74M| ze>u^3LSn$zBM0<0pJT}ph!BK8KAs`h?_^52yT1s%BU33ejYHm8hT9VAn%(`vk zlvUnofdF55*G{FCW)l(l zJIrmYk>R>yP{w2VBJ(U!@5fmo#;TQ2eAkLdQj)zN56f3Vh>Z_FGTDZsdd$Kz6~h^? zl)fyesAQ6j3gL4r*RwoSraGe`edZ$ZNj)VV7~Lmt0OtUgZ~pk$QJ1symAdb%n9bv3 zhO)<~0#g+l>o5_ATJV^6Z*`f5ekZ2#`sPtKGB7bE(55kCq0M=HsmoQ;VScEp%kyTe z3)l{Q#3hyPx%$8Qd*vA*OG+UDfkQvv%7wZzU#6_NkrTztJtmttRyYo`A2Ta6mB+hd zVXerBaX*dyTrpYgs#dchDPG}F_q6(C!>do8YP!H|6bZyjXAjQ#=G5jCBSOUxIxN?9 zgz+dXD@7Pgr88PAa>5<(9HM7wzP9}M)ZaHo=GQ0|X2EOPXJtkyiJYYz*D@-=_qu-} zKVFlOSmU7WF@b4P=(T1$`PDXPcz(9_&4j=+N5J zd*$IRpwaDV%LjPPD{Sk~VC-IO2RN$M0Q6k}GiL1zr&2vyH&jxaup~U){==Vg2afo(+sQgsXwh0N`A^nQ{Od~%RZat%D%AQNRDMbYT9K;s(EHnbs*z85Q>}-K ze8%9h>e3E~m!abL6-VgA`hY9HZ%aY4ANuZ4GAhb$eZ#fB00@Zd@(9$`YIi4RAdnS$rd?mZ@W>l zBvZZXwA^fhtDMp;Q|i@*L5AEAy>lkSSx8yx_)t;6F7MpT*X3&w@ZbOhBWvT6mFce+ zNh#@`J1cub&t8lX*Wb2z|W-5Ey-yFfV_JL{li4U4yo}a`!s-7ckd?V`v3kgKLeF%=M&ZVgobCDPt#G4Lt@k%hf?uLS)I_%dSs&kGI^ep~@0X*x z0x%C@$+$YuzKFdhN;?_~da`yrL?TYacVHPP>kBsBp8zd+5Ps`#FWtY(Gn*imWiqys zqxU}AEW#Wi*FN$wbY<(?W?6Z8RS3%Fw9Kf5#F~wb(5o%*=Uix}w{O`vyuYh2LTU{= zB|kd=0+oSE!ud{J#n$Ym*JwjDjflPuqVEA0i~g5nKD}(+^8~bxTqs8P z!Y^^jsV|P+ikBiB=M>j?T2Z8D%fi7g76!XX`Zx-PrIr*u3Ff+1q*nG@Gg>$M`bn#?_scGPVc`(rN>%igqBTsZz*pluqYqgY46(sHph4g()c^alQ9{l^f-h&niQ1Y?C^LeaSom(c+NgA8+2O_9U2vswqOe-Uob5|;6{^UGF1%T zcDfd-BdL|(3)yo0K_W=m(Lfd!O55HX5~faaK=^z7*t9$Jg;_+;dcPlJ_omX^8sS7o z42z%~v%g$^;VhjiS18($kVvhjwD)x=iay=5@lIj_C(>^ccd1X~`rp1o5g~xJr6tS# z0FN>J^-qoeeDD7{!WLoJ$N2YJREbgC)(mZS^Mp<{V|1xwI@wKwVNZv8oB3CRLmP zc*quwXf;k$vVf|mUD>y}Cv(iJ_FsR-Grl072Ham~>#d@iPi}B_5?0ho)ZGz26iT%d}XNN^oCnTj(NbZj<;_sAD+s;S23zrfLQ_qtR2h%sai|Wr|K%1K0r#y6J zSrxOA+O>yqc06wyom?P^y_>q^z9`;%cVxCSLe;?P#&4q_++QCSo;_!Xm1k$%Jr1SO z`ioda;Lj=lTJFu<%xrZiS{^&bjBVn8dbqMf?I_XoIIlFasPSM*v+bp2&(d$`?$ z=HTqxH*(zhRjAWSa+rS4-afXoP`+xs$Bi^$8uje;f22mJ#XtXUOEKkWImBn=NsFoB z;OcYV1rvyDbiYN{;RgoS<(AY=a=oDWYO}Mw`Ou0tOy04xRn z(-+`_k2hs~v{Hr&`#J>bVz4ApvG%aDvFa`tH``GWqbN@G^ihS44J{X2J z2hVZjRe*4<$NXf`c;`;D1Xes_GjBJ4OBP}E6B9mcQL?dpf$V=OJ8joea14v zvqsCVb-erjZ!duU4uSgRhO3IOx!=m1oG`Xvq7M%C8BmfBoHiKUPI|ZJjpR_yd6P|; z?<5}>wR#hO&{U7S;V&&AOj`~yKGrl%Lsr-f-rC>zQgI^0RTPueSSuU3_aJq<_y3JESo!>K#?|s-nL6KIvTgd?#kZzC^P&#CW5E!~!L8&37TUxqXKwua^x`z^^8wOAs-v`g< zoa6VLv)23jiv2b{QiLqd^n+}rMEw5;@3^QI?`S`OI;g& zlpIk`(0%GYPMjQnNG648piqyt091ddw|Mf^Fvx9CoC|&s^xkaQ9nW+1ggimtB2ZVu z8kFXps36F<_k{sh&6?U`a(z4V%Dom4&BdS;OBWJEQ=yINlNDyz`wn-T7GG;30O#^y z`FMgY0I{XT9_Qz!DFDw@z0^nfdifi!BW1cKP&kKOOmam=8Sbr8?UGSeecT9?~RrE z@EJIdy#P0Fp#wYh5Ml>#ZKV0bb8(iM@*rOzj*|pkb>`aA*!@S6ZZezIm=WN8rx_Ic zzB4xMi?agwTFVQ;TD&diuIL5~&5UVGxeN!~;?_C97j+64tjm1~@Ne z(0qR3nDH{!P#mIQs*bkzE=^{1Ww*-l34(7@{Y?oI*8qBgl7I9BmETpJ|0|GZfSzDo z{VYMT+|_m{JEi}8Q2oictJ%z^l7K8Zq6-xhO6Z-|Y0s@$JcO-x&LexLk#@bI4Dg3r z6R$CqdfZh%_C15>^f=sQw9Z6XqBjQ_;HT0R)j?2G4qjO$FOW8JO5|E83V%01YJRCL z1nq+2bUnlL#aFFFKd89BgI96{&xVJ2tYQVnvE)9;5f2S4NaJL{<_JD9nY z8BGDvnF&_2bbei|sJ0`hV^*{WYwGEJW zk8=OpMTI5Z%b@`vD%#QS0-A>>adhF`<=B-3Kk=>JjkZ%o+g1(T&WCn>7s37V=KURS z$wwnK;BP}U)38+VoEP>P&x)tTaQ0J+`Oj}GF8Wh7fQHU2|E0(Xx1)BlK-2C~$ zdNZ6*HKA{HnTlRP){#L&S*jVzN#MJl!qY_# zsqxAIVZEKLB)z#kQxaj@RA>{eaw?dk>HErb4e^R;G)gw#y4Tf-H)Xt5R^TC0?b^=T z0%!n|fD%8Ja9L85%LT~QPi$4pWm5mSV*DF8^y0mafayr?v`tGf=e%~nF@v0lG@qt} zTl6aWT7X>+=jD2{+7aMk;u&Ea63Mzrm|V?R((U7dvN;>g>NH#L1H7Ipw|i19PQNPx z9xe{_AP^;4U}D7jcoi5;WKW6t4(;w@0Ej3=5dq}G+~BXw;T1OxxM@r1N4S}gXt`v2 z%hTh6_d!`(oP}xBNz@}_n!Y$nrvF0VOTqnTpMqY4#!H)?03}3Lph5bMoNwJwcDrw zSG|PZ?{(oHYcG?>I39ZtggBbyiIpt8Kz)7uEsbT)X>E?9&lL^j6P5IX1yON-Cy+Y06 z87?%%+m{PMQxbjW3@az6qlo%$53@bA63Gwx-(*)Z9m@kL; zi27FR+ET1+mIzm4R|r3L=+IO;z;|5kh&DI8Eer|w# zT(La>r&7s?szB<$DZt-6ZhZ6i3tf7q)z+?s_8rzM|w11WEJ_q>2L7v&qIy<#v8zFrxOs^MpIv;cLHsuu5Zc+F{SrV z;;eb%C}8$gHiw5z)Kt+da#>WNNUGQ3{T3aU!+^*S`73WNzzj@jquzaB6mVr2&2d~E zo$_(+=x*<*j=Ys1IkRPAcmT|J1WXh|cS$3P+PVr5M&}^e*D}3I!mHAd!@IKuG!a9} zm;(e*-hP6bv<#FN9Ya6N!oHytaeBcf4KYedt@}|ixOAhaME;-*n^t`K+*x`-SaVnZ zB{h#eP9JXdvH;TI)Di4EP~9M$E3LHao+?eo>Iya{7)qD46y1# zGe{12!|@bQJYuInrmYyp>C+xS-Z&UxB^^#VwW#K3Z88>+FDLDTYCWWe22$xV&>rRPq8|0PVrS& zgdza1L#wfZ7fI%PI)UW}_gaa?gvuwp2*f;u&3KT)X^-6zpN?rgK~Mx7-&-oet>Tir zQfyq&tIz8=(bi)WgcnZaozRNOQz|09r`9-ki5LzjHOwXeDU$a5^C`p z?j)DSa06Jca)oS4A@L9=lG5y^ADmju}>$<>DqJasBgSW-!R?RKw_643lB!} zo@HT^#iL(U5}ya)dVo|>ryo)!RnlETHF#Zn0rwbcK@jl)Lj>4)%>1yO*-M-n>55W! zM9dTgyNr>5qghl{uDAmpz@Xxh>u0;^W_@X?fP0ByrDZBRkF)1kmXEhwK0}H_i$x1?ok$`RR8d>n!k8O(Fg8$0E_5dQg zo9vb1uX{1>neNnaI|Hpoe@1Wz8!^gl%@VB^w}KUn{@Ub8_GY5_vn5pp{=o=4_5Sm% za>2dN{^}GAICJh3v+KNP+sT3@wT2r2v(g+Z;FID#g)QQ@MyE>TlOe&1-8@?u&}bp_ z1Vm_Qh?zKBSvg}RXsh)b?}D`#5e*NZc`G-kDo@*!ne*1^6YxO9qkgOd6V8=88|pmL zTZGFg{d2YBHiuk4e3ETtCwa<2MVnUfRtpT4($I# zp?ReM6xz&1s*3VzGkmrTy*4m`a$7plg{dQR8J&fFvkbN!yHRf`^}y^8zp;2_`P=lq zp`1nC>j>~cbqIeWx?rtBO9cy#15Y6@j8m@HDD~zr7e)0q|8iZS6*;bR9u{lZ9>spb zO@pcXQyGDw;0kR;6J{jlB5>4yq$5;K732flcyO++NnVPU>+33K;meK5SDok^`q=QuA=@~rR05v zHtnQjtN-M%kLnK1#}hg)tIF;0<_DA&>u&IRfMByIy+C`zJpG9jcRA%-;{|DC;#eiN z)PA+wKqodpo_&d&sPaM7tH^?%cr%v*&aK}Q>IlTXvBfE;`&m;SN^wC{$KTycy=oji z8O*{z;L}#xVo0G>zQZ5_tU^xCMCD3BQc+7YhY4 zW`(L{z29JvtHr)qd3%LeuG_rg`1S1=1%Oz}7`KB?(K8%iI;d21lJZkzKHVqTaRw8K zei^Q%Yyyf@?gMr;Gedx2E%l5PqeCa^4hV_S(pC(z7M_Tm}G`zasG;`xGTym6h% z;Pp~8?!Bs1%^%S;o8n?qYvr6sv@$^6Zz?P7CjnZAUJHoeb)faH1eo3^1Ga>IrsQe1 zi4{BS7xQf6);OGmQSng>hRQTt-0a&%*jSzKgm=$}p^kO<5Z%Ms^kAuUf-H&EP`z90 z0u-F`6tFr8a+ia$DnQ%uApH4n?h(LZuLGNwT=w;9Vkecae$w#|1b|**>0mt%G6+)J zqKM

u2Lwpd%_RH|rVAQ?-rOPS+k-O!JdfgqaA&b@Es1JBB#{BiIGW+}4~Ybb6g3 zmcV>u;#Jt1%Zp4dok0J!#$4004lbUcHtIl~mY8Y5@iOiEJRlG?h~8c^bj0;ZjeD#i z!)lPgRepk%rJcp8AL~xhu>2^E_zXG@7pX2_*!GOdz$SubUcf*H>17l zwi=3%C;f>1ps;T+kF#C1aZQPldKtTDYt5gDBP#uWG^g8lG> z0f4m}n}u|ff5BScC10;v3G2c8dS5v{2$ks*SkeUZWg!H>u(#?OujHsM{p#S#p@CFB zQSb0pGHLT(`rq5PhJ`~Y4gw8(X~4(Wa}w8ZDK^TmskS7Etq&oo5|=nSMc3zET#(8U zA3!K3NEUl#gtny8$=!iDKy2V@fM<|OUH9|y@LQ3N``LsIUh+b-y^V8ymQ_t@%cVz> z5D6jQ@E4!b&DAY!XXp%XS~YP}$xg`5vWaG9Qs%9*d3Z`^<39gH^s zZ&N0uQz62W&5X)I}c$vbPZwN>T=l3e7D=B_@C%FXTJ%10PCY z1Ss_icw2^S(zYXU<79*uwg$0j2z~}oQmo*;uQ+4(Di`$=bkaF{UF^E|MCqmFi@PAr zTe{#SwnYTwlQ|Bo7t>_hPhQ{hLoD`f8|!L{iC`)2Ilr#}&oB-TyCUHCqv(}B#_=Kx zF7*_^1gJay^6T~eZ#)0GUi(O{Zrk0ap)Y^jwiGvnwGMEUJjaQxEy0}m0GY=@+zV%R zEs)wl0pFfXPBy(ywX5RLUmMOT*elWJ*t|z`fY};nAO0wce+A;RC5cJlr3Mjof_&X0 z6EyBg8IomzN#glR+?I{-Gt_7Bc8a=X^CGn@N0!S8B63{x9XrYmfGpRqtmdxVAd^fn z7FvET?pkbMj)ZK_LZVU3``eDt2U1wM{AOFI$7fj)UP2QeDxXXW)U4(^vDO64I9SBd zwKk(}BK^W$EA{lx1fU!fuM#g!#IAb*t@{T*{)4lH!(caUU7NEQ1`M|QbS|TW#~DX= z*%kGaEOMz1(eT8p9IFFDIkj0->9R5D=x8-m`iH$#bW}LixT5EFleuM+W}#DI@pf4| zuHvSy>;f<_*Dcp*0lXloFp3Y4B3h)!R_C&(Lm2bi3Jj0XOHZ;7FLTaw@q4WV3%~)< z3nFS>=s6YElyjP(q}eIKML3D(jGW`?t3BFFHL2LF`HsEXLj~c>p$NK%y$s?-(jsX*}A5_Mu0&v{l@+{!U8r-_VEGK6PIplv~mbwi111QK% z9x!)3D>72b!4&$QFgbR#Tql^C3C!CrHwvQm`8c%vfogHcT*ZX4%73PZa!mu`b6N%T z7M_srKX5pI@x43`pEfsMe?HAR;{sw2eb`?fo@>WC->g;YwL?C z!Yy+z0x0yjf=cPlD;N}8*MY|vwsz)XzXQ0{qiVQ6DeZ2|>8GlQe8*n4Vh|enr*Fk| zx@Upc(1U{+QX?cShaK$t{l^TDB+9<|f>0NBS+tGiG{D<%irz6jmkN!?J~W1i9_r?n z$dXcjnw}s15`?%Sxd^U(zNvBLCk*HbgkAh+6qU%xg1V0z>A7n zxaa|68tB*Bhv)|&zRe7rDAIk#ixXH_g7HGRub>?=vY#Nl3;N>sud~O^(zx2 zo#_&iPpq`~*6~DhCv`Z2oTKBcZz^nnyVyINy+b+YKEs1xek#j9jEp{dT(>PQIsNO6 z15QP10JVn|_fnfM%1wqKw&|bgb0Id+B`)Q3RoMImZ~=IiTM3dE45pgQemh7`5kEG@ z8$j(`{Zv3oc$|ksKiO0dcKQCXL{+jBGl? zI7Tpu=XfjS7y~R{D%`MFF4>REO9K*KV2I)&#%w_Kr3y`09Rl6{n?EP#uDJ9TyWT%k zekPvTd#ohpr7~`v!fsCAuG{Vx6so%=^jYSLZayn|>P)fS>rd7AnXXT-o4H!zY!&e1 z*yg_m7ng2La$=dRJGl7RTFnVgG5)Gq3XhW6rbUZdCQ?D%d}7gowi=)z4P4t<8|KrrUfH zcBWZ8Y2Bb5intEmhBCQu6~MEG%rKM}Nf}z{t}CP>238u%c~*J7FMu6V- z^#pQH1h&R&SS=II$+L3Lb1G&JAn=r%ol@E>AK&p@0vR1g*n17;z7;(P47LAqxIQuh zsMSZV92)=+Y@v8SJ$C@OipzPny;O-({c>al_nx`MoGxtPkR*H}l1#h1gd8|OePC}e zFO^qjzv@yDf_h~eoQ9_r0C5 z2U@>Q%duMH(OOxdIl*FBkQw9xC7yHdv=>noqiAd8oks24Z#FKyawN<2m))&+9#7gP zE#Vv^0I4W-Mfd#s*4{UZy*$xaLBLPj63`Gb<0VtsQyC>O8ahgrcNZY$Xwib`1Q6Ud z7#&1Ve#am#Kqd0^&^Ou|6I{TYM%xxYm=3qL;&`Hx_AF=V1g&iEX%(F+aQdxr_qDaR z3Qd`YET;$ON0OiQfm_JiyitjDz?h-cJ8Uc1x1vL3f;IqLmxSNtun<>PM9=w;E&S^? z9t^_T>s0##wr22S)A}vof6)UTTV27{; z6jUlvP;6sDFNY~KHLAAPX=d3~4oxA~2{n$mr_QmM;m?j7G{2<1oz+h2ZFzT_6*Y`U zv82!DGWx=o4qM%JZNXoXYT~u()cq|;e?o*H?s*4!p=enrCvuPXs*QZre*$_!JXf;p z;%S%J$NOVZ>&x**oIgHWbJRT9X>3t4TyGXLRq!xh5CY%(0euEt(?RfY5kyy*zFBF~Q(z|}&;sxa1wVnBl0)@WTJ_8>Ar)V#ky1e(?B z>5re~uFQ5WFJvyoa7^X|={#R=nHb+GWDjO1v=i4S2VUXA)XuPPys58|`dlcIqz&;hDyIl{Y!!CqF$Ot@40=4wu&DXYEY z(p#HOxsuO?de$_D^&h3I*|3|OUldOM1n7udE{vSw55~l4@v$&&yaB$vBEzVo9d5m) zh99hVdo_sse?R{FOEKOXTEg1qT}HF}S3mqb9{QS?qJ9GD$B?Z_Oh>?>piX}XHG(Nd zs5Fo2EZuJxf?*_>TYQnsNSA_^yf9RCR-R@RW=E28`{gz-+89u|PktkO?)tv3e z6s?|P_(H;h1&Lukkg{Uh&GqQ7wE#1b$P6>xAS*3$)p$h>&sHY#KI4s zl=aZ$xzkHXujqdgI-PS=vfh!orYh`JnX?(!+H( zfFS9050asAZ!DN&j?Zd5`xZ8FcD$j-uZam3G23x`zOCnndklC&_3;NfsxMDhu-n<+ z0%Ji6ZK}0;>Wl8L>hklSg$jqJ-Lm5Cy-cs=W#{FGRf>o3KoCKPfWb%(;53xzE&taR z|9iO<^ksJ6+MK%R0<+0R%wg)65=(?+aa#z&SoU{xEPXtw8Bzhc{Xb}PN6en;mpO7d zkcC#Hn4Q190}xJpEH@4ygTK+J$Y;X|ZsidUe>}Gza>==ZQ)*O~MAzY#*BoU9W{Ch!FSU2>s*5^+df)E@x z95HbI2<5-m`9?EH9Ej&{@q`+8uRi;LLrY5tC=j$mP0(tRG}a2I_#Dqe?kS3SS5+qj zr!Hh>h10+@P;{e1h04Bas;Qz|(pw#}i&^bPi#@l+VE5zE>r#(Z&mWU)mB|I-s|tR} z6a%B^5zkwuHriF7nOQ1N+2#AlX+$usJD67hYboo%BKP$~F|lY|YF|6RgQ9jA&^N3u zn$b*V*4_F}RRPm%o(J6Oc5?tv?Zi85Et(0sLU?*iV?}&o-c2=dt$fueYd+EGS=3gq zXkt?*+HNv@fIaqTdxAyecwWk4sVizf6bOZXE&Dru0wDhvTpE-b&Xj?(^G_b1-yF9~ z3(x_pAANv6TnEi|8MrEMPfH9k@fY+2dL1lyX=V$^QQAvy7z>eH$vG{0*M@3@&@X*Q z6gqLK_MC2%uj(w-yBvoj@O=|s-+EaKad;~I7UCekFQTxVcUWsR_w{MV(i{Bfhp{B; zoti=vg{ngLMmpWdeXY}y8&uO2t=La^N*BTrz1Oev3OSSXmydoZz&&&tkL1=hMA1go znIs6g8RPyC!?O`DGB`8D4{m+P`1i_m?_cLEa7P`X{dZca>~bYm!46csAYDNWGqFdy-$S? zNzfabH4^-y#%B|$D(s$Lq&fk933W!er6)s&v4+jpjINt;Y8bh-R@HwMsp7fE%rw&5 z!Em2A_8>Lb-jPcbw(MBA{|IToy1tBHPBV&+mmZlyazBs^Rvz8aj%$_`Wb=tzSLv9c$4zNED^ID+gaQ9l4X<1WNc3>h08 zjwL*TUy$Q@_5~(XyjfDDY7MB7UK}aCNd?kzdMCi%1bOxaPbezcS#%A5a!}PE^Mo~g z0V$S#xG=1)qZBmCiMQKI zjC!N$cphq6S|-Rf_r$mhIMlEjMca-o52XsEa4?@0c&RY<%WB6r0Evsw;g#A-IVmQ8 zf%ori{nstTg8}%uHXH)O=md+k%fEPpoIE|)j|jy|jy9Np$E*vIUUx%u8E~-BH+B;; zuneB|BMf=B8%9eE&YWiKJINAV&wwuauPJ4}8krZTKa_>E?~(Lm(Vo566MQof6X|J@ zrNwzCpOmVbw4SLZG&CHX`Q9T+sfcp&j05NlE{7vzSD&yRbT1P4dkuH;iXrKJpC{WR zcgj^|1!@HA*0&Vv>14^IA1PRuF5zo_jY<%&=azq3^d%foY3MT)J^WtupVzH{@cL~} zzgKx2o#BeD{}JMzM$G+6u4};_b(Hldtq)e4(&m)YSD3 z+*q;QEq)3Nkyl~UYVIS6O>9tZhS@qBakva~6O?r~vy}>EXeWIdSQsr@Jgcec)Q=Z* zS&QL3*1yfCCr%xG2(n@6Ww&!#8^&cZmyJs$m`!0**XpVWj0AMtn9jp9PJNB7 z!w-+z7T*#g8ZnpXW|5g<%46HnR5C<A-L|6m#to7)0h10z;xBZ+L z9A^i)zK*t-(-e8wMXq>XqNmPzS7XSdTBk?{PX@vxP?w!%TY^^4^A1+}`=!<0eQ8hn zqE{fkqc?wx%#X}B8qg};%15+>T12x!5B_!g6q8*g$}6@kE5uiyeI5_Ib~K?KbpMIw z(R3AQ{=0677CbD?AXA zAw`NwhYJO6iY~yQS-c-HGC~_`WgOHUq@xdL^fp3UoYsdAfuT;>07Gcj zrB_h2ShtBse?@tY#?H-obx(mT5@ z`r0n}@JFq7o^8n4hIw^DHUQky`xMbBmgeKI9GkN{;=RD|@6f$2_1bFQQ?<6cXu6vWkwM+x1@M=@G&kCPH4|0A@871q z1}#m|7G3-3kBttNr!qQR^2d+prt0w~qj622TB(*Z(mHP^0M-MglO#j17$QZuo% z)EQebGu}VwrKY#`l7k3KOv1McyZrQK>Fo&}%?DVSrV~xQZvS;4iPJtaz^KC?Zv8F? zgfQGz`rjcu{wsucU5R-A2w^Mf*Pd20=2F^`CdSd=9AYjD4Rho7>fqyNa)S(rNSe3W zUe6&tZLieI#=J$nOjQkh=ocQi8RN5z3rDL`^)Q9PoswoT)&zYD-VbTsl^Xy+elJF-Jgan zD+vAAjy^3fEL&zzGaTxx6~7BTQCGGR@>tiQQ8uH zPZWt9-&J4LzI`4iGU<`MnfHD>mOo5ktt|waQ$oTx@*lAMIT zbm4wy2940$25E52Asj0dXVF6GbSxJUhkijascmAcaKc&wF)q}u7&;%#d+$R$I~jG1 z?xazbx{arjYHjR!3LhCh@b&B;f8{uAhx@`MRYUQ?HOvn8D5YkCY zTg?>^2dVB>klv}_zU)(T@7?L2-WFFVds!dXZ%O4}o1OkfrTKtL-o=Pm&XrT2J8q@L zN#L#S9L{+AwnFcFRjC1=~!&V>wjDCkHQxJ?Wlz*r5_da1N3Lnwc<#(N~Lbj9|c?|s)hmZy8xn9{T`pW#Z+KnoA zm%?qU>Y}Jvr=$-BauuZ$f-ri<>PmAJwppx?ox;z5JFBr^JU1G?sdQfjF+bTb*1ulr z4ZSA89Rx-siG`+PWB}4Y3YotEcoPQ1)%)Sp60P1K*;zH!Ev3-(g*4mnIITx-u8sd5XU6lkxj? z`#}NAF3S*;LfZltEf{YT8+y^d9=o3i9XfgMHv$L$X z&K-<~LwF*B3&t#j6$^zlG~2p>&OZd2VJ^Jw_6dNWtDM%=jpow;8S0el+{JK(sckke z(&WemQX{V)ou0*oefHkg;`%Az$ErM%t6W(RsvwRycwt~W6 zIbFF7y)<}jIzG%&liJ{p7FJc1evjwn?VmZd!*Z1sNXPMjdv6h*rY(C39)tHGQ zh5Nl6c`eX5ed;eib4@%0_wOUQfc|qwBrfM?pnLtojY0d*1^)Gts~{MD@-rbVDG9oN zgf8d?ee-F*qDxDdj1qyK_qUOq&J3x+9u;pvXATJQovOo=8~GjL5vuN9Sk=cB6dF-> zdZ9fDSVA|g0-2{8R6hzbIgV12M)?I#tAL>mf$=$j_v^z{ul;V(73*u(Fi@+M>2VTRZYA>VP2A>5M0M?)P2gk8(URM> z>s?x;LkH=?jc70A=yb6n3#D%+Q9#~|8}xK9P%NdvX(#3M`{wEiwTZ!U>NY!nR@1mc z9TmGO(SZ?l`=rIcoh@^!S7T(<-b!W2m# z$W9nR7U)A&6&&`V-KBTO)00xe#N%5;7?odpqkZ*VP>M}TeVu7DL;0A219yI-hM@;d z0sA$kpMmnio697M(LH_tXET2&z_KIA^2aU!a_k3Rv3}*z|EI1fCcVnB7r0n*|H!d5 zLtk@|Pc6{FV{{|4V?InQFvHVlqDL;CaD)uYhFl&S!{;NqwCo4FNj%?@l1GS!l@e0f z3)~O%uC6$RINc z2QW(1jse^7Qg`%7qIp{E*ON1$^`ASq_qSS1S>2v^_ER1hSQPit z3Kh0Zm83>^PCnuRTNQUh8mEc49LrpYr!iZRFhy_TML=Wjbb2+1PjLE%*MA+_w4eQ> zuFQ5vmc>4$+-oBY7Oq4g&i#dhi{9O{5%T1IKa&lB8i2v+2MKPefcG}3#yE@);n!V2i^W!Ots~pRgn|e`CKjr4Bh-E`==csTh_^e@= zuzA~{fI$>o6H?@|gX^EaUi1ZM2kk3QWt(ihFRD9~;{FlcZ(TkiuoO4ixl-DkjucU0(n-8kmwh3`La;%8et(Z%@eYn+9Be}Si#IQ`_VBj!cr%EV*-v)b$W7t z6yZXCF{muCNKs!w8f2oH@1p?8Vh9MTBbREXzX64_5-)1RQ+Xqvu}=kU^>ns{qYfF4 zH&O;4d_U}=p}?Jr3FYz(8|X(U#56AkmYyk5l@r&+?bt(2lZ zU?`M(dGpkrUizzK+WTd(D)zZAj&v^6Y1}@NmJ>dKPC&7iw-_$eAB^xmJ$$;!&c)E; zFQDX;OQ|O4kO`rAYdEkB!`N5Hbzu!ShNpr3d_mOC9jyU%G1P2F6R2YiuBivkUu^kq zGu31v!z=A&7?BL^B8BcZgPxg5KBdT~`#C^<5{}qF?`&mJKcKqpnNLHHW^**$XMCbz zqnGYg&Zbpz_|~T{Y0PDj)-#jzZ`i%8nBfC<3Y7~=)Ol@iDDCd%28pSD?_;fF>#^2b zFYtqt;V)5`f2N{iGA}Q@+`_oBt=@cUV34W$^`L5SF*f$osn~z6mpwgEJt4yc=5a>7 z`rqF?zj?jbG=C|L%6X@0{gTRhV~uewJ8y|U@+QTU{7`@kh}n6|G)o;jf9XLIw)d#a z-8gH|Z9vfHln>RadRPi1aW11|fuxjzH0yMyUocZ)&k5z4L-Lz5n>H%clGRrq(xa~o zlOG$mVWcne4hTn^^?5xhuI{i?nJ})YU@i^9I7d<_j#!npq)l=gp9xY@vt1;Y-xj^x zFgp4^^2qC@Dg0~EZS%5<^Ib=~)LP5o{>H8Mz?_)~3lcV|KbQSm%6je1lOF*w08f#< zFHt0~;6yI22X!s3-OUFQih6T_Nt&2|N%2&FrmdknzQ|@-(7ewkUN(#}%4N=R;IKrb z>SRenH3z-enFp9jWgDJIMJ<^vWo~gRF=DkyPk-H)+Lxq4J^>IWle79%lv;?5FrqtX(v&;(PWaUC5rM$!%Co?F%)2li*ZEN4!S%#}kiS>(|X zuel!oR(|h?fPXC8lL~yn9l@GhFE;~<)5MQ!4!Y~ z=$NA?kR*2hTewOB+^f!XFZ?6$N5_A#I zDYr}_!hNdOqgz&(#2`}FWFu5CMSJ03Fe0-={YQvimDatR5eE3-9$$&nns!RTT<*UE?^W z&NMaHGaJX_oUAD+2B$_7378XcnJ&m4J}FI3-(Bfotxps(Ps`V`wm$u?%un`o-fjXR z_xCyaSGu$%?G>^u|EYI8vLMlS%~*b)Vy)8dEhZjWQiIESFE^uf$${->!OC8ik?qF0 zW-}oHj)WFk4!s)o?dEBlOS4$uUU2Wf`-T+4d6JB~@KI&mdh6r#>ll^$%sMuuOvk!mr&9Vq_`fiMQU zNz*w+ql?8}xZsr~g)`jPy%ziub_2pnU6+ z>p}}_XS5i4FbYpy%WFCExIzykM8~k76~jH=7^lSpOjfGw_qxg)PEa%3pISfa>qBY8 zW5*mRv`}(sCgf4tLWCreF`ty=MB3tZ6)@p{FWe zlLBCQ_V2i7&nPH1mdHZ~gtIm70Z=>gSuoY&B3uQuB-co)cnT5rDI`mGXT^1)wA3gF zH?S{)P$ffPum^=7wS-rY$0;|NJiGufV6Bl5(C^KzqZY%fJu`N*g?2wN7|rx)Srxy8 zCFk#QvOA!wEJoOI7pK~|t=czv-rF}T=}&nlu&&s+=ybTAd?88U)zibQ37MD;(4MRi zX>>`oN0O}rzPS7KdaD1U9Rw32j7|rm&+0iuZ#7|-0#hDLQ{1m4lgBc8e)mnFp3YWCzA^ z){&Dx=bw3q#-X>Dl7A=qXI1%8^hOk(7R^WyDX>qbiEs4v`FUL~ zhE<#WxJ566PJ?AA!y<}L2lHuYHUvo~p=bu&43;m-w`~41U~x`hqh46^YOy( zvjwpG_3c>OyiFe$1Hp^Kk&(H%6VHZ&oyOs$7lqcDDpdW%Ue$-2@VXzyYzRlg#OSYv zmo+jyT28zI#numy8GQ;o&5zYql{JzE%j)&yl=B%_*!3dn>$=~fiH2hyY77H5tb=d= zIy?V7H$Hs*xcYLFQ`P2~h*U{&*cqbEduVYc_<;`MU%~!>1}po3^_51Va(`UGI#C zBc}C?f(Nadm%<`LyYUp?nm}}Rm2eT$~cSpd8yY}9-EIJszVI-Y&2e6miH#| zPXBDZN6O88vspRSI7R8t4N-Oi92$b9>w49eIR2Yi zgKtgNLQ12zz%6<(BD_?1@``dR9~wv_8nlvw3RR`CzweJu#P;Z;GJ@eB9ur6fuK05~ z!`4Thz=cB%L6fhIm%qfWuO!<(1q3dVx&Sl*@TlcRHnCTxrEw^dYj1IT-W5#{L(Ihx zPbJS2a~Q@BpYA_r_k(YfF zSKzZ;aKxVp*`JRGALT;e2H;V{*&`~vKFj)wG+VyzkJO6K{kLT571Nu&)zd}26@gim z@a&Eb+1`W1>ldehxfhX5eSM}*AG~Q23?3vzsoAQ1(r29-5cX1`~6fKcZx-W%{>Pl00 z2Qzh+Kz~%#$%^&|IL5Ot_Ix_9h*?RbFiFMzFaX%6(aEu2zL47 z`F+l%|8NFl7gyKn_G7l*Y01z?MrUUk!Q%?x+H9VOy4oEi3+(EL?YA>b*cV13IGo?Q z6%-;2J)B1QnipPXX(Q;&>eE-U>pHYI7}C7fS#IYX9)d($&>;+G3jnixVPqh~twKv5 zHs`h&Ce8WdiWOzQh$M@f&Lc5QNXni1_MQvZpVrAPIgZE&r@IPrqPHGfUuq&fUu{;G z>TLFGb&i)Hn;TE>vDqw&|3k$=pH>s-(H%?V=X=H}F55M=22IR)Bcbe{>jVCMhSb16 zf1fZ)7d;8C91+?r$yelOkJ{7ExqE_%_w0Sg9&EAy$1`Z{j)4f*8^f)iwdLpaa%X#= zI^L&%pq<$uC^DDNN;A(q-JO}rYp=Ec>H1Jps+1)z#J38#4|5cNz2IGcux9^u#z%A_Wg5?_c+A##DPx zaTn}fH6uQ&py@6wZPr2nMo80&{vpT4vRrpL;BeGpbP7yd(epGQ7dDB%GV;okvySH? z{-U#CmKg6AUOuMtSnlM=^=F!yQgUm)Y2#~STW_1)w3@PQwynf|oZ^YBB!Zfth-d95 zNj#4I)!JsntG+Aehs8fnOGoP+&Ht-Rfq7!>-Hrw37BhP9p3M#Lz=^+zbxFg-<{vvu z7^Kc9rY)>1q_sZ_(pE}ynwP-LeRK16&ZMK+S$jGZ8EU^{PSRu4g%-ef5bSE=jKh~8 zM$VlTGg1+*$Ito|k2oJf^Rh_slDC1baIud&?8jd z{SkkZ9JuFG?5fjBQm}#;5%Rm-a{%sOmgD0c5bb%cfYUT`RmfiT{--ka^a`#xs21Pa z-j!3>>z%4E>i_RG>OQzJ6G%3 ze9bTz16&pWsQKGvVM%)}>II|zPNV&RGIngt23On~0f(k~9!*r~0)Dh8ho59aEY9UQ zvpRjn3onH&ozLD^G=MaOWJIyTM#$!yt*lopnOxqXf%82Q`bhI;Nf5dQN%j9KM#{6OIm6)SaJT`EKnMh?i48p5Tpi?ZWWbok#6Z2 zKm~^GPAL&-q+z7HJBQApyT6UkbG~!V^`1XO(Tll8`0c&cy4M|$QMEV=#l*>km=t)J zKTDEdBL7&n$)jGkJifstM$7@H&GKuHwS2+tJ(W8PWdF&hous;LP6iTbT5mF~Yb5q@ z2k>o6-$*iWEU|uMTI5)K#-w&-5VdJK;2R7Tut$wSF0YOeO2FhsX&qURV#R<-N@C`4 z%*ec$8kBs|<;cYJ^^j0)QETEr49`Ktte|mbnITOvSwZ`WH`md29Hk&ReTNu4J1L}n zybU&uD`;lNLD4a}o1Q`-oO$6uS(5#G{EZrSPC9-&Rhcbjtnv)w4G z9Q9t@id|=m4~>`UgPr?{)J&}gA2QzcWJk~BU=?yjEn&Ct)&1XFe_2$w@=}sb^_d8} ztAU!j9&X9%eLiArt)Pz@lO-dth^leqkpjL)Bk-(F)`q#)T{GEuy}_RI{)S9OyK|Nu zM(=1bV8v`VmsnZ2W<+dt2uGsI_}}VNi_ibB&PD5{bIH4g+KK5K7y^m#nj_*|%LTx| z7eOMO(d_%LYYvT8`_fFnBQ8gMF^hgfY2|hB+xeH1Budi>BXY_gdVQtr!6nMTA;mE9 zZ-Y4e$`i@BwL%*?<(fY9o!P~_4gF*8xt}Sqdr@Ny3B}l>Os9|nV^;EJ4vt`dtX~yP zO^QW1#48;7MLlAWC3@H)cbR_9JFK&JMs8ojRafy(e?%rj*9Vm6 zs(5y-SN;XsmyY2;Y_CZFsGv+jr!i)-QoZqa@la_;?!LB6CsN(={*;m-Q~1==^A0T; ziuv)lvFs)HxK}vNI?LIk56=G(RahaRl9pE@I+2|G;*9^*?f=&-c(;t@ZnD!n{ARB< zq4A!m-1th5CCi4!H6zJk#-#Sbm%`^F_+1MZtDLpzTV{GZ>ix9zpv6fJEfD2oG5~l~ z!ASzAVxf57XjkUNv}McaDV<5DC}i>BMcfNrt>)uNBwjp$l;V1us`5hkU#Huknno@e z(hsvX7c{V#S-FWju^+3rLp>~6sb%%UcP{}QK%A6tZd$$XJ5GvOD%<*u&k&(j< zn;*|B<8(^x_MbP3`rjwZXbRdXhHEh zB5wq4VNz6az+|AJ(l>bb-y4kVr6+kKXLoGaOdI?;c5Kv;aF7$X{$ktBf;T*$KgwiK zTOJStOoHV~EPSy@&A+DhKfbJ}m_Mvz{lKOK1UMDiuI8VuA)xpvk2tH>ear4@OIsv~9%rs^1k}oSWT$!4meb&u|6lDhENfq&wwfs>LB<#GeBhJX1i0&{1uV<1l z7q9^&<_to`7mz&2?cMYcXtZ|9b=6_X3-e>SZuEmTO4Z~3BLU$!pL`hqFi*o$rP0mF>zM_ic{dKCN2@9el+0^+5ZDYA{!i*_AvWDk z?KX^4%XU}glKtt&r;7yaVX)9|2j$qCvJ`Pb*J!rAVI%@EXm{>se8ClXv8ije<~Ze{ zA+Q{4@OGsq$$kI5t;o{Pp-WFy^SVXDQhf8zq3NP{K0GLWhlw~6>a&24x+6RIXZ{cg z#g-4wsmrrCmALk6EbeZsaUpxMhlDV&y*<56fivuVWXq0MWJ|Tp@t-1xW z?2e|R&c@6p)%*<0Te@j$uKdWcF^M_k2Q7$y+{9Yv6$7yby}r#6_0=4;>@}Ks@M#mt zzn9Mj{U59Q)d!+Oq7|tmAlP=I$kFP$77v0)M+@tXVbeC}3s^ZUvSz1miZXlp1rWvSb!fiu-a7@h1K|rbN$tRVn_daL@6^V%=hGDnTYwW=s~yrJTtY zg?10F`cl~Xt+brE&stINuY-`H*c(gwro&sdXKUHn0i1PXR(=(9(7(sf*Z|{Q2dqPh z?|)%V>KN7t?0$DXc5747h~f(42fI=Cl-M=~ zuaj-YM^h;S)cc~obTQ-fm|$LXI|H}%G27Rzin}aD=^<~w>K?3ql%p6n%pGfLQnFcH zd0CjI*zRSVSU%&@$*1FVGboM~87QCQY`Q0HpRQcD$UOew+1);&c)w>D+z5N+8K2~8 z+*&_$);%oAjQ>rEKDF6)x2iCS7^$Hs&_gkuvlxI~P&?hDP3+bo1&z-yqOAK&tr7OW zSXTd(zp{`&9Z{@<%s`C!xe=SssRONi$j*uWr7TX$Hko*%6A)DgOsx})JlxbiS7G9AG^E2%-~0vCra}jq|`R9 z6}3_wlLM{|mP~e{i)jF%q7x&BpaOVCI2Z|@gIO+scpRp=xp^q%u5m{Q;`?{7o{pf9aamY4=x;XXpGy{KgHjoWoUZ*rk06meScb9%{6! zJkB!T`{F<7^;Rc-=ZY}4HyShC!3g*u#3Silrr+#8;7$0ocIN1rH$m8PFAWF<1#htp z&)5l4toglj%wU@HD58$}}hT47*-BvGTNG4)tQEU1-_EVxuUj#a37wW!y^=00s*P8@j zX;NBOOZNCC&!G?=D3q*#1f9~Re0`6x~V&&m7m@ z5BR2>_2uSQH1#Krz0;4YtqraTEU(;ME@zY@&K8-umKtf^h_<1;^W7wgm}{qs$6~$o zAlU+=8K-%Coik-@C&{|t`LQ+M`Ob7raYaMvkfFy|XUpwH@Sqk|2Pq(c_d8%ok%UlE z|9f5i_iu%pG&^AA%9e>>%DhR$BMgl05}}z1E>k#SqlE05H+KrXZ-4hWZoaP(=QnnR zOE%(i^K__jByOxPzdA3i@tUExNrOMPtxEAx*(|`!;Dz*3cIV!T?u#~)Vh7z8e%W83 z&8;a_lev})CFu}5U-^sVX5$#UTYe$4jVF;3l=e7o!ahOI0pqH8cdA^PmgA4Up0F*^ zOij)Umk)HyG5GM|u$;>hfj$(DXQ?_ZdBmZKz_`e?-lT6aJJ9Pegt9^p_`^oGPud_FYyJzm)H*~&C|1gIIxbxJOQxAtZS?$rFj-yE0}1tT z>8ZpMwv65qWR{lW^zh32t9mOxoI*_SguTkkt!0EavHh{mYtYBN{(yH?O@pRu^awD5 zi1qDD^ooq@HU)YbO&D&03Ev}Bmxt-3sG_MJ#)^{dvR7q9wCGFf{C#KL?Y^P`2#M>9 z-fPsU4#MMd;O37R)0;Wl%NTq~P{5{Srjq<7F9baPh%Pl+kX<>-*=J&;jlQ@_!mdXL zYqm+vzaJpTv9(foR%#k}|2C#{H%H++`{BqdhGlH?nnM&oZ2;hk%b`$0>)xIUf4udW z?o4A!y!_d}q~tN_yA>Xz4GhP)pQ$AR!q->gNhvMHO=t-z-yY17k=43AVGK-zyl*9< z4l{imz-!+k#RFx8;GMp1jRtMFf)3=qOAAL&*nR`CU=rtXG~V1Rk%f8Y`m8B*@@_du z0OV1LapOr8g}D&{}RDsn7g2qh%~{!s2D4DS3@GF3{)& z0bO21bb(XC(_5+{-WER0_I~xIpX9oot%ybxR8{#Q9sfLDCloYd*ZT(^B zPa9Qn ztI2E@KE++WPsJt*)RTUg#m}m-BOFB=7-9QDqZ4>8_<;M-2ATHJ96BpafS3?2>d4}| zz_S}$3q5+jlPKBjqS1FMOphE`TMviyxGN}`FMq=+E|TskZRd_7Kh$bPt=Vz!YZhaL z_+T&C2wj#4Sg8Dn;EFkeH+8*Id}`+_^zFdYY*S`roYU%*5-!1z{K7`R3M9LJwtUZ$ zP-5)@jAOC^HcKZ;2R%vedbqszmcM|~?@`%xK@=LW^gB}m$3DpT zV38(*U+dQuDLk4VNc$}gR{P=i3^QoyAWaJ^S7$2MxcA>uT+jW3;rET;c@}bk3=L*{ zYTbf2#>OjWvR`$in=TZxrVL}W;%oNBGAk1N9qkrW)TLKm$)FR9vxD4e`*l8~Tgi6n z$u~|nJ>@y$=U1R9$n9Oqh)^``=eMw=gJ5!^Jlid!L;c7J9S)Xc#KP~@dSpP(yT@A* zHV(_n>Hz^Bet(u=5>ZTR<4DoCWhy;7#i&V)B9bi))O z-gqzrP7u9zkcR92gQwf)fbomuQxLLfb=J)3F^Ai3OBrZQSq=Vz+2c;|i+MlEnshU} zB`2@X;MGbM?pEN|+p`}}RBTCP5SkEEUIG=YvRS8MK#W9!KHI^GU#W(rQo@Frto~CD zfvuoEBAap&OyTd&EKoy8^hA|UD-~tYVgXeDd$xFMO%Cyc<~?SguT}a#*jnm+Ng^?L z*Hsb-D2sTY0@6)@SFHjvQT>tJXA9KS@^UDJ55X^|rS$B_C@f~=qB&#=dUZmJiHDcp z>9UuLzT!pNPwwi;;`^`lPFl+H1spv0iP^||rbQG)I*>5neAJ>kVw!N~pd$32JQLjw zNl*K=0=K34gD=!>DGc>?-#{rkBS%`dQo0(ZhUutT&OeZe&iGjAzvgVWo#smsF7O!@ z>T#N@lS!!b0%HH%!*ga;E?;WKFVr#rISiw|gOQ~jNkicJx};Hx|EWjmd;MIeWT^ow zNXKT89vgn_u5T5Y*kSORLiYh?l?q(<~tPP`YI=8Q&CeU zo}m0~V9QwoIbz_I0D@lNMQ=0%f!NM6J34`OBid=H`d-qu8}l^m`qE+l`kkx5c9-e5 zJd%~_>r3Psl}5%&)ovSHDwETrXbEE=Awar|4oh(772Prtz2O_zD7BkWm8TK@eQyZE z)ORgD*AvVE)!nlUx=?oGLgRiq9SXXfF_Y{hp~@#Xtl^ywVXXjSgQiJzUZb2Q; zCttV&MXge$OzB_ck}<*UZdw96i#u}xhU!0LiSXN{}sCogQeot zAf8?Yt^29-qe;ya*b=Lb46q}{9^#~#)6!Gt$=??8$JblOWEHT6%d+p*uy3wUA|=9v-B0>BVe9^4?MRL0 zR9u~jf&O0m7mP=%0dLJarH)GBzR#fcL0-XS^8=E7k6Y`L-EIk<`Kbx{uXt0jOe}nP z)C$@&(`5euN`Y=K-iGZoYh9u45Rx%lWXysWI@J!gS4B~4uCq?!)pr}%=(VNnY8 zSez-ioG!)W^*9$jWIMAe`(>`)uw+vsF}TU4Z&S~~U8-0@quPQqyJ#a_y~)d4G(G@& z7}Uz+|7`jCj_{p;2MO4gQyL|FgG#B-4uqe!?%>nEmD2d~iihg-!D$FH-{RBg>p-&S zOhMBYA?jeuT_ea1KTh z!l%1i=e|54D!ZlqM%4F^PnyBOs$5OPGe;cu zDxU*G`B>;lJ#O?wg8J#y3Uq~UMD5RvCT4B(y-(c;M&fvlcOZ(esdcN8Y zq@RwtIQBLOIm#-7y_~wf$YBuAg>IW|A}H52WMhe&?k_(x?n}jXp!=kamnPH3z}B;x z#=iD$@9vY`KmJa$1pkcncKF6P;A+_(R1!(LagjLyhP`!_V#8*=!7(b@&W01CGw<&3 zSF*fiAP6CQ{&NPA-85IPvU!%@>^A-KI|A5=L!h`{n~^Gg4{x@I%XF_G#S4Gdnj&&c757k)PtvGcHBMNWS;CYy6`M#CZ_45XmFFg*wy&bu` z@A_=YvEN<5ZAWTVg?hJdFsq3wEl8_B1>(QZ8BH+HF}mjOrHGl;lol-F5~Kv5P51ar zCRX&(SLBt5xArbc%6_Y)3+e}Qexo(*hcRU2L8pQ`Du+#1a*TQFHMmpbak zW8UwaXr?MDQJttAb0y(+)HL(g7Iw+Hu031-JRrmDGIjF*k=ef&!_8*^Gynk*u|3e0 z#8Phs1nP79V>TJnu#5ERBf%HtSw$DVX{4}*lieIEM4ibO-6Pi2o%Gxu`*Gfa2fzNr$G7a49HcbGh83x`L&@G+wYx3<2m3h z#|Kh|lUEZNjOzCU?dOyZK3i!$BogO$c!BeGb)Q;^!4oAd1YC(e15o0ea2j^fNPS`T z$Uq^UhegB@mo5VK6*9AdI{coEa19Xk~U}gmD0O1ePs^leTBoW(cGj8vcE1Twz*Ck3sqG)|mOj7l zqOU8}p15Nq-whY=#=dNNGGXA0eRYrn>{`;r3+q1^qyoE-g!EM<>f>Dht0`7G^f?ba z!K>uY^D=9~t{N!dj~h1QI=XDMCKp|=`a0S&PZ#}J>93`pgkyD=LEchp^7EaXaZLz| z1xF&c_r6Jj6;Xu8?cxj6Mnh&sungA6G#l;muj}`<#=(U|wIUj!AHR(RJ}lQ<{Q#%gYd5 zOqMw4shJQ;h!@fo{lZ_0+QHJmbu1%T0%C^fEn;G60 z7Jv^wmsSX&{Kh0{sPGQs8e>GgSm1og1X?6tZ3qQb@&qhl%0}C!V~%Fb3O+Z$4@E4_ z4?oB=ENfJEJKSTvx3QCZnix5e*L0GkGdwg46u$(T~4!GsU5%bD3P$0Fjp|r zOWhAsRsH*IO+fdG(T>+Eh)jrcC`uA<4W!ht>08FL%_hq+%-{SV;C52Tqu%wULE$>}cj>P%`Kk@+XgMgQs9?;OBO35b#C#M`l6N(&7KGs6kvoAxmwkE?Z zHhJXr3p+WgBMAZ&C?oE%Xunq&AKPk95Kuh%d!QszbHI0c`?^2GV-b<2b3QRD>uHV^ zMiNf)5z@|Aw~K9+0=qiBA=*Y()!Q2QHC^=VmlJ$1wrvN&CJ0Cf^vt++Vb7JP%v!6} zz8f`OBD})L(O`u)N&rwFH0)a?n>DtT6OD=lojmqpQb>#tbVrT_A+uU#XMG#}_`eb>* zkal>;)hxP*^*jVYkAYj`DTuoRkY=1iSAXV-+9^Bpl}C$g^n4NIZpYQgLzQ|lYah2R zq*bBF(U`#?Xoy$K&Wzh@UK>2>JhZK$XKy{%k6w7(-VCyYT!!sx<|)44+-MfKXjjR_ zJ>J&WK>~~oXIRJc{uXO2OROSV*B!Xz^Zn86j25TXd3n2}0aYV@i&6poE;6S{*A^&POwKJ;Lg$?o}b0cLaQMdxjv{cLjA zW!XT~c}wd;EVd07R}m{bar~4f4!umfM1LyTHIqfzvQVqR;rag|kS#U5o2BRuNxCYM zxiKy>$Yxo8YW~)0nMLw&4|nE|#$;{wJ*yYjdd6D-wZFbQsa9c7wcEn7_M$pvw3&Bx z{)&nMt*sHroiDJxIqko?1ylM8t9`d{@oU21?NFY3VjaB6PIOA5Lml8E5LbGAzdQ+ag%yhQTLUPHd){;j#Xb~HOf z5lUH%WdV0T_U$$IoV8ft(8kEa02q|K+pizp4?2{@&`K53QvsLEliru(uGu^ev}UqeVN$btm^Q;H5Fw@c8AaoKrN zK%cn=mU0nQPZ<|kKmPGVdk>ew^VraF-F(iBUy@6IeQEuMZ4P-4lU~AYScQ$&Hq3a{ zI{~V17Gv-%ONV$)0vY|Yqy$R}*L7BAanCfU86m3urTvgV>K~SMx9H6+Vk=GMQMuQ_ zItX&xM-pkDPTU0ju1(qX9-^DJ)v~sO#?CqS4uYP|X`?(BO1Hakb^;OOf3 zR5)`kfyL0Z>FV-`;N1v6njhdfce6dX*_ar+{#_gPs=}CmD%?!rjfrG*SbQ0rBDfQa zyxS#wNbBnmbaAKG8IaSuT8Yh8k*lH=xhc*e`x=KF1lY4*)EPtWAHQ%eG_0v@vEEy3 zpK0dUyRh)V@(DHCEsynmia5yRtPDO6UA#wKnj{-JNVE^x3o#3-=n6g#kM6*HjHtOA zfE@F|Ly1ql4o2rcQ%*U1S84Vy;DCoVZMR^>Hd-CI`eVQREzET|3s;!&d)1kVTrbjn ztEkWSk$YcGh`@q%h~$1KE^oXN#OJL4jf(mBGu#%HDckD#*r6iM@W41s$ZqzKm0!#E z#g~Oq+6%A!8Gflgg-aztSoraRloA9SLj9a8mO)*WF=!1u^nGL`pAvR;cA?Wn-^+UP zv?gAqE5xy@nD&uX=x#Jjiw@Tyk$t^H9HlkWQ%8UOFe&yI)p$kBDIL);R+6>(ArQf2 zb#8jBsTn0N#TxSN{tt=4e{~_)XnT)%xdo4F>@I_JGU0)} z)fNDVg|Na47&T4MxA3cY=~1@V zO8hiU`sIw@0;F@J3SP`pk2S%iG9D1l=xoo{oRM+8 z+Xh6(l%joOd4F+z)FHKWzmcy)ivx8Od&YOG_28zl4|D`28jtv1I{@iI6P@{+u^>Ay z{I#)qr^U9a>|_asEhHj^eaBL}*wM!0&0puTTU=NHF>J3LKoAifje5;T+LG{{Vt%K-}f}T?`|580nPXg9TVClB!p7a^Y`7bSYJCF=!q^eb6o{-_Fg}Ylwb#OeU1>E zLw{xYCcaviO=q*t{%G9Ds&J=s>)XxXJg8w+8})bi81MBMagGW6W@qQH_-rSqn-K&{bp@WIwQ%a@36&~EeEf9?T!a1Q`9&hmfW z1DXj>b-q11_ri5cg_eYGl_M_m5KQ>@aCNtgkLkje3E;bWj(RhD-l3Sgp?Yt`86>4H zF?CM7MLzEFxpGgyu2x`Kpzco~OF>9(xwE3TmfYgECJTA8&IPg!Gqz6$fSvQFEXWfh zPkr?+_7qUC9Wu{!_rmYK)SKF1OWOnUa+*U|&_USxr8G~Z(^hYicSsvU#)Z**7@=~A<@6vo z%z0!~!-pgrWDFDwt2`|`t-U~z%2F!X~tf)4FsLpw%U|-5t zNsW)7KKf~dMPt~f&j5|pML$&JX<2K1mwBOv-0e^38K10HPBVM^-Q0Ud_*_sG4HRt{ zB@{jKT`699ZCM+3AF0%QJJ_h%@ZiI9bsMlJsV4ie9s~(rq_JrIr`^a1F}UzVXmn7( zgc&>jHXWw>QbDR&U%fzlu{98m#hfWOqdxpdx<~GR3R?TxwEV*Zh2O5-e$1m|iX>B> zFN1}T#9Fd?9h#libC?H{9A}nXuEIPnew7UTxsSmt^tjvk8LTHA!a@KiFWxZbo5vMe zO?~V5+pmd^bf20rV0fuv{t#1=X-lsl06B@FOMnmGpr`I+>iCDKw~Tp62gBsy8akE zjMPjRN=^~Vd!HTMVXaqdDOW6_g%Zbi?onXE3XyCyZPv5?0 zh$S=%>-*oK0_X2g@t_f}p3Snk@s)ZNy1EcPL-U2#GJO*A!;zKytW64*X^czonoGo2eqi|+l#VB^qu5HY4=OM5XvSC%s-ZCvktI?^Lw`#HosZ1U%_ zzsT<{K}@}hC6{?TPVP2r$lgAqVivh^!UZ5AC&9~o{;%UMJ}cvjdF;EH*SfErV8k4| z@*p$(;+foI*-W*i5GDbd4sPQLKI&*IX`N(Pp;vcst+^c<<8$mqks8Kt3U|wpdgllG zDOxd3+}wir$HhSp1V}~x?8|qWjjB;eda!uCLuKd%Y&&O1ZJJw9+E8~+xAp$8v&C~^ zaYxrHp{Ig8BG&kN=)B~oE~u<6mjhjw5O$`s_^R40CLr65UA${qy=}2*uwRt6!6kfq zOm9tHp@op+cN{FbB`3n~h}}?-z$i$-Y=WudUde|w!V#_;hYh2V&q}6pN$>L$fxUnU zBiuUbtBSxi%1Fe_wls?^(NcyE!pzm$#*8RUB0O9l!u8mBa%~0pDOYRq@WjjAH_1MEg_+joR#4A?Tu%OY-=e1Wg?#MYRE7k2nY4fNT?^%33_7U*6ewqaX{<%hQfR(8+@UEh&H-M zvjDi?Z}bd&DLXWM5Gm@2k(!bgK0Pp4MmO*4xeLLP^6NV+b;skaB;O`O78nO1+2)5N z#8OC|8pRa?5b;;I(IAQ1&?MjXn9{)l**)bRG`&$BjAnwfHtPO@-xS>&l{mN<&A{d~d>fx!9uH|UHh(_m zyyt_{PeDS>^=#MgODcU?3xiZfaL9`Lk??9_A$9Gf_V`xEhu%HjQc`WAr{|`7GN(K* z(5zNEYP80}#xD6TLg_PQqJ=)$zl=ZJ3t)W7ZDB96UA?@CG#6wr*l_sQ-!`_P3_08;QTp=rXUuE5jr^23h^k!pCEGtm) zBJU`;31wW6v?X$wqZCDy$=?ei2kDE%Ak}YnKPPz{tLxXF>@?ykg?>6!7|GX=_$9&R zGwTAl*~HakzxK~`9QfF_vc5rLOStDj^FEcj-QoaBjdR;Q@WJVu{Y`rcy&E5n%T4Yf zcFO(@uQOt9IP!FVC0h(vnCEbFa+LZc=TUWq!82UVLQMC{9gUvcUkt-^1ikUkSwTpM ziXJ)pIKG-4VVF}_EW{%@NI=pEyk_ZxyHA%ymY8!8gcriUe9Yyq8Y})eaeOLQitE?{ z=0~sBx@{5#aUJQJk#S%xAF*K)+-wIn%^q`i^{G!Ij1{D=t*JAH6AWkLW>~mgNwTSa{-i&`;&x4?Au#z1vb1da@qf_B z4{85Y9RbUtFe-PHjT{YI`Hp6NPvd%r2$yh`P{`QVi*&JU9Fws=J)%kdagv}V5yBY} z=;0$G{=^!z`mlzxbF70ymPCfn#`N}wQ2n@tf`|hf8&-x`V z-^9A(_h%N%=JSGtD@9AbGrcV3^h}kh^HJrQoD)y(+W_;`{gPB42VRa#zw#4RolW

?Y4*K>NO3(S63&wO#5wZ^4urW!pS?BFv1`ikA4Z__x3}eXlVne z`6_-FRyzGea+?$ff>-tnN#OzMpf)ipB`4M$=2^WL$omY0qA?D5=Ae{$ zOpfK;^(#UdaR=r`do|nKADM+lxra0F&yl~JJ_**H!JZ96U*Pa9`y=Srv8`R|e-WgT#Jd)Uk z=A5tWylDPiZlZ-%jBbBUMS!hAQ9=nl1XB^!BJa)hu`RTv;a~D1`Az*JVYZcah%#S2 zHv96Y`}GdqNaad$0?kagD`-Q*oM6>d^T(;-rQlfC@y+e<#Ube(kY9OzQ3gohVbR%S zT0K3x<5l+MW#&cph5Vu8cXjdkpmtcSve?%-pM#|p(S&n<;O|}#k?F)bp=OlyK1EHY z)v6OP(Uy;Iw>ut^{Q;-*8nA*7eN|;6+E{PGfCg{Id)UqaSj0J6fMdF}Kr|_GwHq>M z<*`qW@I42#n(W90QM#)b*eNkW%6%Tr%tRH6{m-s1=fubPID?aC`oA)|^J8TFWBE7Plf zgcV|_T4|eY`w4yo`+46j=c^L2YD%D^6CQDVRM$LX>JV!&JJR~%ac!XBVE;_w{As|F z8>6jNwL`LFaW0qH^TY((SG@*oE3_g_+LiHyUpGrvnXdu6=$oC!CQ)F@`iU(ba$(6{ z-#T>L2BExgCn3ZL5^I-Z@t8WsnX7IouGF2agz~w=)O|sM#_iv1e2xCEgX6ws%DOR_ zEj}J}%-u`~QeQumot8>dk!2>BY?5|b=}CSgTQ-cS>;&XPkHs)wb{j-*S?dgIk}jWV z0-a8|%G@wB_S!~Co>F%lkP`?|JN*T{> z&RU*E2hZ3zkX~*CyZtkMKhCsZAla;-iwf$dN(RyYn4ZRp@6LM2M>Zvp@E3~0WTw2h z|1Lq=4U7-t!N-G_rR%P#l1-TgoAdkC$jkgmlls`{%z~=*pNBMh`3o&UcCSqBwDnv8 zDs`SepmWkdEL&~)_)bY`_X!@x4;6x$4}ZiYF$&~Ha~*Eb)>B0WO}1p{+Gm)nXr^lS zS^;lZY|(gFIPwH!#+_KkWCl#S>08yEW+BqPv+RG>)l}S>7hL$=9*8zqH6duq%Uj^Q zzkGW5Ub(#!(7gh_cH^vu7XHKiGsd|=p00uEpS;Lfe~4S!iJ8v1`WLaCr>@#2I*;}Q zvuixzD}voyR(niQdo^-^c~@KGmHC8@dOwvZ z!{mWr76stE&U}=TqI$>n&>)nMCo<&5%m#j%Y~Ao6bLuDKUc-E1$3`h5Z`Qr%u-jDXEXy7qF*0Z&5xSt$4O0V=~#YMnpsT~-FSGGs|M%fycmBRymRU0s$T{dschVXAyZhC|JAz}1V z84i?z#&TyymGHM=dlyE1sYwH9=yja-#-q?_H?TTeO%GAjGEa|FcNJvhXa1_|_eYS# zBxcGSeK4&3wd^YWvDc4)+HLW~(W1j?e>>L;q2OkQ@`*^ZzjxZNRgEZsM+$Ro%4S9jTWtcl13BGkjb#C>k>yMPlxwQwK~V2zINSh zpdet%3GDcF0H>od70vq)KwoN_#QJ*zy)0^F=jV{XWA}TxA4I=R2q?e&@q)I4fi4R2 zGFI%>D~!<4HFt#7<~4K!kY2B#z&`_-a_;q!O$1bTphI^fv>TU8 zBBl?1$Y`>_(91?s?IO@bv(w^*Mur3*b;IyEL25X7W+LqrX5%2QS- zzEzDM6Jg0T&VW@&(uf-?UBO8fnWBj*c(m)QWTv84CureKR@jH-DdS z5}ey&3Ji51-FyJfoV=Q1;AUisev!pl*P36s9M8L_3varpSh&aOKq&idEIuiY1?06W0D&q|rx`TFd6!c8szU66cbN3leU;C*z1YdTw0D*E z7Z3R%Wbh{XAQ*{q`PVtigJtI*1*-ng>Yfyb2^0O_!#A6Pjp})W_MV{7mNS0xFKZ&|Ba`*nR7@T~&I2#@*$g-hXA;Pb2qsO16xXIOG z@T*A@r6|J>7U`pMfuklAqBrUcc1*Ob>en6TjD{c+Ub|EcZ^`4KorY;1{wq$yIT|HyKjc3hqHV?!;wZE(T))ThK$k?=BRa+M)?s_r90lO`8iLOCT#~ zkwuuxNuKR6h_TmAtbaihB-n3K++rtG##fS05@4UU>z!U(&kZ2y9II7S%lW{z?0?VP{Q#Vv>>W(b*y=gnU?&s9_yR4*y%?=G7{7e461I4-X{8ZO8L zZj$+2kKX@99{yXy1ZKJ|3?LO3k9%Trqcb^_jx)`^SSU@ z=K7(Zh|~Nc*dI?5LEt76o#cw?xhE@yVmSLkAL7OjA~tPOS+NbT-NpCz-Z# zgBnzA`C3W&)yqG5x?dg>nzfn#*lGb}E}`+Dc|heY%_vMCfV9?FizS`?IH|nY>ts7c zt(brSinSmsHv>TT7YvI<3;lESbviXWw6CO-LvWG~WjV9bZS#fk4g2o|rbh%7&Lu*Y z?IJazp|FvX4cLJd^-l8xNFxRERIKW7L<8lzn$Ocn z73Cf)d{(VOYWdxY(^cWhdh=La+Gr+?IOP!B48OE8rDtkqy)omn=iQ0!s(xiU^=(Go zAaivKvo|oy3T*ZcwKS?&+MD%34k{iPzwikZ#7Vm?#~HbVKWqPmN`BAe`27pzMNz<` zfO+{)8EeC$SW42k)Z!nt*H`C`6lTnHRWaj(gg-UTIf|jgv7=ISkT0Kbtij;#$^{`@ z24cfuktg20x3TJEc(>k3(|sD%S;l^FIrc*Frf?eCce2SZ((3P4Pga1dgq-{zE-0ID;$qVi{akCy7iJRlk zCjK4gZkgL%mu3-#y9fVy`jzC5<40>+9Lann=^%plHl&h3j%)dLS)1i?<#qq|O9A75z)i77hdh#{T&A zG3@$y%~#|i4e59hEIb~>T=#km?oqn%if?M+H4~xSXZIGTJ^a70$T)`ec2L6#&%Oqf zzOwvfUJQZ3^J@vJ>%v^ir%!klU2A9JL&34B`?&)V^*i{Y%zu+|vOgevaR}t#S)y>+M$j93K~Tt`?~UL^K!C7pBOo&(?D< zTj_IE@)VKf%@@PDq}-iV9)+!=>VjgDoq_@8qDj=WO7!+mVCxZ4^mXlYgXi2DIwmxn{R0pa`~if@0&jUdPX zoil>T$4=%|2jOzUaHm#E2WgP9o>ve;i0*=A@=1D(k(oxL(Nd9S1g8-tDeop7UZgKN z;?&3N;qA-eHla-t_}H92_r+`e2UI%oLSBz8Hr)~zifZm~UBPkFPD$jGE5f*ZrtS|8 zlcZKAw$GZihf58H!JJB&3B**=Ow6x%JdBgL@zbq#H6PH_cecbhGL)62FxmThXa0#@lP~x# zuFnB=7+id{`98lWfvl4XHbuRkPnn=PyVUwv6UA5s~(GaT7|y;Y*5{8L=G0 zj9qW7DZYoh`>2*<7Gprn(1X@M1Hp5=SZ+s44FZU)EW@XARu3Dzf1E6W;I{%|rcg_E z8_y^lIa8q#13}_U+miz5Sq~-4{k0UMO50 zSzV7rI94YSUSM+8^g*E8HT!OFL3b0KJq%JXF92PScP(YcDEFg=fZ~GPv|ihxHN3XlW+a8?9k-wig=NtD8a=T zviRFpr8B(s6oS-ewjdZy|9|YgXIPVK*9EAe0-_+Gbcj-=_YMiYLqtWI^d=CR(jg!y zCA3KIAYG(M@4ZX!U8+E&cL*i(;5p};w|q0#{Fr|;zv2~=nCHoT?|bdF_g)K#7!pso z-rV*FlD%1fQ1h-^Zy_4+2cEZ|EAPhir^raZ7E+0eF)uX?&v0 zs>bg6X&_L%<1EW5*`)*DJFpedFw`^+B0`+0FiFO_hJes>W}-s-XV69Pp(0cAiVePD z4S1<#y7@`y1M=kuJRyeHm30!|8z;I|7U}1VNio~)h_L$y+TAT{2kLlP=^3olU?zCl zm}z@}KlN0)KO?o3soSFT@h$^(_m=?7i`OFS(IRLzPI$D*J9+0O0Uio0$7EKqDW8E$ zk$!@Njt}`AHyWu}9btK2q=(=TR5!%g3`zFU)naP7XSfn`AbMPX!BQK0nAy(MSdrs8 zXPs9k93Ok6ujBkR#<$PMNi%VN#q%(P!bV3X)+;KNQQX$Sci$v*X^Txg z)f@NMR?!#dr8_dg^K(shW?Y-T!#$-$Zc2jL~c%su^XPVK|$+9D({bC znXxCn-zS?)h#_-}?V#MEd4XRuyq$>}Y`)knp(5tFI)E&uwaBc%Od^+2o!!bY(aiS` zM-JPUgwjN%gn~qgL!JIaK8n*>O~fFYJK{rM5q%1`7>%mBWA)}QC*u^Jc}07lwd0G` zKf;b__)gH6j{rp{v5D{yfXkjxU;3InD5=AG*YONFgl*gcULkRH`!H1lI#ZTpBSNG} zZ$76my()_;k5Ta4lbx@G%<4NmpOy5ej}-6&mim5rFvq@3VQ$RV{ng64DWcZ`Tc5@{ zX>=3%#n;}9{c7R75M1eB2lC$U&JeV|c)esBNa zCVL`8@g*?QGa2cnc)TRfvq=SsXi?kSyc#&6@9w^cv-s+_6EHtX40|S>Y;w6o+PK^9 z>0JIQouUEYJj@%JrD=7vwd&U7!KX{_6BE?|UeS)d#pV8i*verBN!*3jC%vGf<)_RS z*L325HPJ+zfy^~2$PT*B1BiWqh^Ies8ld;72rxgp7H;^q1vVCRKM+fRul`CspIsaF zzUcHGh3rP&fA7(N=Q^!?@ct#w`gJow5iznly#J&Fz_P;u;KQewp>@*6Q(1%u9B5R` z8t`1@J$9@}bz_qZap@qp5P~Aw49M}EiLe+fp9+$(Fv>Y)UD=I?!I9&W!`!%;=)*;p~y5A#3aszWd1EdYr5IgUs@eZQ&j`# z3TADR_h++SJ&E(bAuWs8SAV5>*9h;Q{cd<5^MM};RF^-ZN>k6u+PMTKcDOJD#lG#h z7bo9+PMd?A#5ndOXd`i$>+TbIt0ar@Z}E7<<}05X-E+E-oX44Jopx+{A65q9*^VOt z*L6*F5(q7P;F}XTFgXxh5^wh(g-K)!-A|-{AkB2lVupB$XcuGjvn!#ej^#(wKc=Ij zTsOp?w!*SbDlZO&T3twYa`GLzs+$Io5m8P?=$%HqOnNrG<9Hs8$_dhF|5MyONTEvzzRY%z!945W)S3 zP3`zxmlpN>xqAA2yhL7h!u_e^z|AzT7=r5nu*_`cZ{0W{B@#(r-(*`xgy`WeQcje; zLFBKsxk^Yb&76cCX}kJd#aQ$)39bT-nFR-9UZS!#fSy}!&MFSm-t^h{cq?Voznea( zTfnbdK&#}vGIJ;GT}8dbdlh0S5hwgUH$`z?A~QeWO+4Vo{T&`9K=eqO2?){>hE<3* z&z~uPa9D#0CvG*p%L5k+V_=3ZK#|A|2@FgF+$B8sN^E}gibV*dnxdTV3X9S1`nSPEnIQz&cvR@*tyPOvDV8!g?fQf7R zQ#$b}(g)-#8sDGRrpF2m`g00*rxz7JldOtjJ$g%*M*%s^Leg+00 zHQzYMqB8)qQ)|s4rTI#xqyl|2#8Ak`c7x>SG-L}xzqmap)-TRn5+CyT2Zw8q=7dH( zXvG^IOBTpkyK^37Q9;J4^JUf!adZ91t%axVN6MZ{u}8xE#j4=&wMbX=^0oBv|LmGS z;5w1|7R-O&f1>f}oDD>U3U-xh5=h1BYMa~nRE}Emg4<(a%5pfWo5sb}UaHQxt2p($ ztf~G8NYvKT9i^-v(Gft> zp2yq~>d5YbSDBu1Q8<-uzp(#?>@Deb>*y^KUOW=ONOp9k<|}3XY&oPlxh)6c^jc&O zssEel`CHiFDsa3sTqkdgj+M7lR}t@)&s*>~c1?}1zROSFLC>zy@UKwLt9oS2tudZ) zdhNZR(V&9_IbClgsQ%^e$t>G4AAFBLck2Glo3?l74MkVOReDJ;ZEO3~-mh){r-@8Mn=h0V=;vo8@-Er(^WbN)-G)G**J?Ygq zrlxN_QcyW-Wx{junLmYzFfr^>zWuk=B1omQ9X2B36_dgRD>=4!qr0PWzbK}oI^LYA zaPR7L846HtG$0DP|0SuE!?6b)z`ZXU9Jeu|o!)_Oo1y#%AR!EsB0n#J>Ya+j*QgA9 z3h7`-M;LW%O7V$4N#baNhS`OTm_c6je?5;)jEW>7?~toMrmXzSlj;z#9AR^>9IS zndIElJeKYrB2-joe?ettEM^DKxhUiF^VYSqbU(ZitQh*PKC>UdIMe01pJI#sJ<->O zkvqONY=mxnc(ulF0KISUF(8QNu8>`QvjGq(@Sb&Hy3+tXx>c$`zx`=ATY6>?(e^98 zRH*eL-~?ylo-DEbPbip>^RYm&z)dVf6Fo7nL87fBKIa|WIsaf9WaY}Q1E?}BBVl!{ zzMzNXUyb9p<%kF}IxVh;zlt4!I{MJj+>il!IF^y9EHKofKMCd7a1Nlw)wZH3?b{Y$ ziN)f>>(M1oe_;xT>x*S4{6h*S(S=tby3ixFhu??8_Gs~aI6SiM+ibRGsD|fTot`#_ z0eo#mgwIec=q!rOQGfp_WVktJIxEC+MSd*^EH;$YD&|WHeZPqMD!TdI#NBnM6_ulT zG5Q+bTvFb#QL8Fhs^LuZ>A|nVU1@@Zi}bp;ySQk4^H*Z=eA@M&TUZMxRly1E#cPuf0aN<2)# z5aT_(zY^D+eh28!!l^L)+Uh1{LOOSR`jJV(4q`2;T*WY+_o|?S#0RHX2_HT_T{Cj9 ziK?4HkGRLOx$$jP?ld$MKS&(?Or??}Z_MEky)$Xe58oo`{Sqh~-WtC~6bFh3>r*Z7 zv5RT;@1a2Ux#;B#GwDl{lHYr`J%R>@1>pmhN{efcOp*7bbdd(og@ zHT80BfU>bCtSyr$diVU{fzX_S!&f2%@8Fh>->Z){-e3!!ubTDyzfi=O-C~hljKD>BZrJC(-qcTj1{_PNnrSvkXT z8qAJs|IE+e`IcqvNf;mQ>9qqn&{%Tv{7tBqd4JLzTen+k3c8nxgi{|@+YL5H4AnYC z$;)xtrpwbh$j1qgFLkKU|1_1*3h=Qn;4A|@c$OCS!3Y?pxtcWd3duHoOA@1yuv#3m zxzfEvOnJmkJ`|nE-F{&3AL$SxR?~C|sFNBaxfo6fM zI{Z)XM@3~%qQ?L&4m-uhOVm6-cX`)U)!Xcf%#D{#9!6_rs`MVo7<9a7PuiU%*FrRm za@g&W?CY8(wH?mlrCnET9o^9?hQecpWh+^$(h_W+G6r_ZVXgE5+$k)QqK(@rq>iWBPJ9E zDsNY)+WD&(>|(!hk`d4Kv;ejb2FVrkUIAz%*KA}@E!!n{&Y`oeZ1kt8vW>i=Ee$MC zssy)DA;k)p!DF+ycI)a8`)C_V+2Z|=bOIU8Eiru0X5WC}h<4>+9uJjI&NSvZOWnsf z{wUt;9PQEygSAdi-l?js3f&Pbpj&@lQH4t`gX?Ue)&kHrR{*4KPd+z@lJ`hg5X*UE z$j%$)8kV`pQuVw3Ui-A~K|#(*v!-_|;vam{Lo`R+Nl%MHkUaD`dtE{4@YhO|!}6gb zDB9bxn2RDq=%qB+cQeFhS{GJ#c)#u0Mm=(VlX|^70c1Z6;ISR3HW}h_@b3visVAKf z0=N88_AAR2C_RxNA;Rk~qPYnTbfDYMF26Lksn&`orFnmg-Q5l;q zP{GLiU?q{Q>@A+Bq{nS6{q z0(TIE0v^Qvav)IMr<*qS1eC;2OH}6+Y4ilL7En%*^Qi#eN_4EBwynUK)q}X=@_Umj#qK7d}4_oOTR$9at!>`_Vl+AmcX9MPhA4T&+_{?TtWC`P1jR);|ultAEXjrgDJ2L`)c#q7OPf1=}in9tW8ktO<=QO=$FX0XhX+Os=0%Cd&- zL5~r_%!u|ngR)7PCzAFOOI$n2xWtUG+=p#$*Bq*x)RU#f(A%C>*ZzV)K{%}qqI!cC zIQtb2|F(1=C%rZMeo%@5?5RFR!c+~?tSBEu+&^JjkRB1oTc7m#$u=A<-auLYgoT3t z4t&#)l%i%|HkI`1mu9&sD)vgI(|>aTM5#2({woU_DwdVmO~V%y@xe?NzVb!=rIH6d z?Q&z?8lBrz7RQWOa*(NUN+9}+&7l2mDZU!CP%DL_VLiQUnh1W*78ytF2cIHI)gi4& zV7Oq~0s|v9bH6-65x8iMRyVf>k?Aej3WK)$|E2>@f5T%SDpvW{Y+ zdEuI5*e1DzoLlQv)U~O18b7(eL?!K}C4C_|E15qsAFF?{L=1y_8rPtI8=T)Q24-#Y z>Mp|WZbX60YMwLkCvg7v`7pp2d9T^fQD z4(lfHoYG7*)tPpG8jOF3a-SfzVsj*hJv5+ZG_Bx0^O52%wF(HlKWxF)b?_q5VcDR& zrHhrDOc?#>l!Dl^gOfU$b)OytXr{DYwI2LY-&~0_u*U0zW&<-xEOVG9c*Sj4Ui%on ze*3hjcU9Rq$?R0|X_%W!<}WClptqcPp9n!Sg(GaUW4Dt)Gp{9Eo1I;gHo^rf@W93B z*Ypa@M-E?MR<_;LBLp61)K`H%;PL$yo!47s2Vp2250Rcvh~*JC z1JQx~*HDF#Y&F#xSZOHJ@33;yxpERw=CnAW;J6T>oY~Mg>OjS-b{^c0N7Ktgm6BiN z+2o$y)GDT~CF9MGD9SYJCaP_oz{5<+kf!chMwZ>DhFgXD%|-4##dJjkvcWg6CKzI~ zPg0J(Akef=5yibRV`RXLY`OGY6A!mFSkT%P^;scAF5m^Zvl>Iops>$!m^dSRadW^u zQPS4Z43&XI3(OU>?!_F(hW=ysGC7H3PnR?oXfgfC_M5nIy6zq>aU`S1S>L`@!1yJB z(3eD|!M{TYu)qu-J#-yiGIFj7a&>*wbe|YVs&>odCH4pe%iP+2K3AqEB6ytp`ERvO zGQiy9M9!!%0UmA9iY7`iwt?hLv1(%(GvzOFi8FbU)X{yY z?g{QtmMS}Dbg2iwrtFur&HAJ6o{G((*ar(o z9u1~(rcT$Bp@BvuV#sqeFj|rbw7f9Q-?wa*#v2|0BsP8zHR|m2<#jkoaracMx^!nK zk6c#tXz6DQB#a#R@&@+^lTHTai_LhGWKF!b=^s1idY8ix>6hnaj&?7J7cp$S964J{ zwL?Dn$+^+~zkoF1+qPAU{*FJGb28^=cPUdRc$>m|F}NTc-e*d8Y1pnN-E#DX%TUe( zWkEaN=9zR9e4j2ceS;lV4_vmEwdQY)w8-L#&zm;FPgEmwR1|rGRE-rG85LutR1|M< zaFgyu?+C&6o;q8yuF@aV0qQSF*#eID1Ok64$T1FS)>5{9`{z_`EH=Z0RfRpBJ_I6(r5+FIs zjM#zaQp|ByPS=`QuBL1TPjhfp{}Tg|eb`|qVbY$=gr@n+J)kC^R(i*d>auA{up$>@i+dMe}>UvX6{xv_g<7Zjo>yI4MMl^MC z8`C%5&}Zlzk4;Q|$5Ta%fX-S8Jb@$}KxQW(IQVc-8nxfU2`%y*W7S(NQTAR@>^LKA zId&=ab2i{TRxvgh?_+H;->8_eQ_V}^*?f4zT(l?%u~8!-um|h>s&z;mSkNZ|rh@Vm zo}ZTYQ-~fWN;G`(WLm1M-`YaafzIp`_$-Nn{+GG|vD62l{@mJh~3Tv1) z!8SrC2??07k5ta-$4^uB$I~NAA;tl-EMd=|NRe&>-ex0sNRPC3KNFyx_08unpa@yk ziZAL)#BHtJwU|h6U?p0GyCjKjGaIF+;FVZnbKO)^A;TJQ;gRb{x5co8M8<{qs*S{) z^U{=WR&&8iU06{hE!Sk3Qt9R@)d33%ou{PU4DV? z^gJ0uSWL<8=T`5Ra_`JS^HSq(hr7N3HYyunOl8^J zMMf(NV;7SM*VUv$K=N>J{0O`GoJF98lA zAV*6~jCE=82+u|9dS$TV_=LAX`bLodxmG}7cT^)Zw0B?ii3_hkvSNS7GNcjwCE_Ci zH26!~qpr74V|EnS^J#-qU~~au8}`=|l;Zej?fxs_ku?0^_J9C_!(Ap}^rWm>!w_q* zBLh=IKQe*zUCS*v8Zi2-@LT{1yGA``eLcD?6GQ4bMFftB1nq?zRKVir0n^8CjhM?m zRGdi|cPi_MEU6xBt+M5EVW4;VTLnA2$$Wwvsgd%x3UDn^k!i0E*72Tpj@lFF2P0Nv zY%gjV)Y`kgE=ZS`v$(xI(=iHIsT1DQndjcT?vFG6i1>?H|5vK)yX6!6b7~g=51sX) z0AqsOzMac(1_7>1vT)o+mkl?}^EJ%ZG!+@i1xdXQkO{l_jCD~xJNO0F(6{&Z%@pfG zI;n{08crFQGK()wM!W$D8cV?2P8k>r^hgjfQ%VqWNI!T?K!g_|)2r5$$L>sNS3`r; zzzRU-FTH>fFEji51$a(bhz%a4bAs2}Il6Yg(~)ly4;al~CcYWL-`_J&Uky}9Hhb3{%2!CzM`EV`9OK47iQ%&780 zkVewb_!YbE8K3`Dv5eJoE@0BA7yEISKk_R;>H2By{?9HPl7G_KdUAH+ehr`P{=jE; ztefo|TYJ#dc1Z1g;VVm8LO_jKCjB4Exqrc#br4BQe zHCrluU>=A8>$=8ZP0Xgstd+6*K<#{Fzt}-9pxkyEMEbvU%(C4+4PTOn?1wv!L%fEK z$(AyQ5-}bM>d9L8f;jX#d)SH9wxaLNADfd6U@XW-0~H59Hk{}WD4cIK7VX@>xZHtr zQo|32DxPje@qL^NWVfXc8x3pIdLr;XVUJ64xa6(Abfs39so^1FtV4tQUhQo<>4lH% zo9lO|-He5;%4G!|Cj16$Tj(+0*mb)M2~vTEV=3;E?b?!7qy#^Wv+Px*W@?hxc`e3) zTrQxGD)`KvTkpj3J%!q?|4W%?R*@S?3L(C|BeqfaY`!ud#E+r`GaJumcz@rhNvoE1 zJTnnDuYCrFAx+niLJmux0IzfzOa@DjXRy$a5aOSV!jPJ9!C!zl^;b`7*~C3NyUMK! z%O9h;M{O3*I8L|6@I0<5%~2`FKZzFbCNlW#Q}Al;ExZj^*Yx&QVp%_z# zr)(+p*HxT@ajXsdRlG>=X^z`(pzm9T9{u+M-XOl&(5Ur&CF|VbG=p7)|J@^Y=NM1d zy0SQ>{k-Y*;n6$g%X01b0-_%v&h- zz-%?BpLaz(X4l4iAeEa9-Tm#IeXHV=G{YbMLJ$Eco zY1mUL=7(z-VXLpSIL7x_+d!8l9aFY#9y&IBUN^c;RK~RuLEOUuF#4r%a4<^Ebtu?# zZIRNhZpb^T3XtB&VUA?VDX5rc**R5iDQs7ypNVi)o>hEGLl^eD6zn*EIkEDl!<8Pr zq|#keHk1Z6=K0t}!q@K8Uv#+8gYCI5zsH362EQ*C0DZ@$Ai=sdob#pCm7KB|1V03$ zy&)+L=<*^_0%1{B77771JMN2P+LRIDzz=c6dJWRF4raxw&1R*g!)lVw*~w3S?SM}k zN0@W!93-CWA?&yxduKAGdJcoA%UXO7H1c$iG}FdvJZk@A5Ki{=R>E!wwP=U8J#TeF zlVt=SRjEqF;nKMv5hCEDeiu;Q`D+mZ`Mrl&opF=z$-2k=;6G2ormxph@fB9E6T&;e z0+iP)Eau9vT?-|Fzsiv%e2D05W4dyp``v z+Nb+|_igkk@UFh+I9Ml*?jyw=zjxcV1(UEVDT8zqIM9o-C@AI-3g6mCZxlgY`V(Uh z+-&+LFhpz}GnVc;9|$FGiJ%FRE4Z@c)wf+usJT)O?mp-6b{30)mM@Ghf<{Ja*p( z>l}C^qf3r{Q=JbVi}sex1y&w480Q8}1u-KQ*?z_WY_9t;(Cv=fHea{kd+56cfvA=y z2fF#L%FOKg$05iNIGM9 z0=Ox2x%V=0rAXhQ#3Q|A(7Q)dpVV~u#a8x^)a&WVm{7ZH%sBxj&eA+bjn)}g)O18x zEpIyBoO)BD2djvWUS?vc)@Vmzvx6lgT2X_BBH^Xl>PL$URrkvcHRsQcQW3%b){eON zr0ImEQo^q6Mj5T1F`ai zblK-aS~oP7Y`Z)4nX#Y^qpw2^7}kR1`Yt6MN3)TtRzV$%nDm!DjaDm(HYe^V zcr%Yy5=@$DWO;^}kJ=)WItZwRLlqTUPe0s6R;;X~q5-<c2Uv$rhwRFfHb+F(Y$Zk5om+W(unzzG!ey{9heZ*6JN#ut!*Y^jlV`Co&}UzbjK-v=-w$^jbs z*^>dyOG|!k-1n~MmEctj4fDDock^lS@-U6ZmYHJNDsrBMq9}|af6*itrwu5syLe8! z506{^+^Rf(sRax`g1m{6oav6|KC;Ki#7MnSoR#L`urX#TU!?2AqY#Vmm!&I=rrt7! z-JYi=qd|1q)|Ldrb7I}wg%+N23L`u3HFT_kL;J}G{W)q$-<%d479&&5yqSVUS%D(m z)T{PKLyyDsEreJk!YQ9DQcMD;!5iHcrM#%0I-@LXeAx!7%$H}mc1k&^S2qdl35lEh zl=%J!y#Uv`j<`Y0Tpz~9V0tW75nmi#`rhcd~48rT=z6ykT2 zgOf_sXHxz$#@#W?vif%*lj#Zp@54FxWqBw#;nV9;CVqv*5ejU2ZzE#8hX#R^%1x)n z(b65L3k_e_a)Is_&78+_=STb#nI5YHl}9rymQ^~4oK#Yz@apk(z31{|#w5gn#kstp z*Y}-rXI#4O);^oidkjh5U@y{oFpZ3}(iA&goz2Z~KeHS45p-eb4s7@>OHE|?kaxJGGq!y7%uT=!%a8<8bAVy_z|{i>CWf6=M$A^a1*e1eh;43> z%&ShKyWXA{o&FSTa4e_fMsy5*Hc}}omNgKiK;}k-FP`O5oX7pZ<_@3v&b^o_gs)ro zT^0mx|D^&zuRR*Dc~u%KXwqJO!e!nHtR%T+f%GHJsBRJCLO$gv;dsbDVvvy zl9Kgs%q>ODQ5=Xi9*yzBcmmpy3_T5YLAf>i-w8i*O|$?IE)P0r*nve*O=JRl3z_To$EHpomr!_O&SVPn$z9Tl71R%_{kCE<(oE|7Ij0JmVW~3t;chDT zocoLo$_{hYdpI-yGs=lY{5eYNUPl#y4`HCp68pgpg~gu|O;dKzjgy~cIN#b;JCqV{zcz>~_i*Y`UmxL^xKt88%*;FY z&>>^MeU0Az@#5IB=Wfkmv`R48W_@%wVL6<`QJ;eNN?F|TNGdEHY{PKc63K~b4Pc}J zzs-O)Yj%I^C~RF14#;;*;1@gVBoGdp~I5V zdRaJfc~nkaIT9^lc}*%rH9>;ET!bK=jqhVAWIXX$e_BDg_h}DBX@HTt9w!*a7u{Sy zv;#8peDB>X43|iWJQQ#1oA5E567gDf8WK4(@3Lt*OnEJvUl5wwC5l!X@aOaUj7(} zNj)*A>v>&ahl@VsCNebcmRRCvIp&&6oirZ3&Ut8?1OXeJX|uKDk!7e@I7j^ok*Xq^?e^l3ja~X4gQ;%tS zsWddQ;rxasx-f1Fr4^yz=+&;slm&&OM=Xywr-%^$2F(8KDmii=px>Xfeyx5-bsp32 zGOUCQ_z_>-w;VsO2_Q-b(stEMJTTGqkq&cu=NZv@&-kA5`ql=tlg1mCPlBR?5S0CP{L5&;g6^X3Lt`sQLY%;9cYe%YhGAti2*7ALia>+lU6#OHRCZ z4N#;IjI7RH6vM+rng)$`MBHnW>0@Gai^!$f7oR?aG~6APoFCdrR$wFDW&&AdM1S%m|bj(5jTk1WXPNBD4(aBWty%k+>lYf5ysuAwL#&4&$3B0O086Se~|RL2eY^f!i_FVuQdY5qIjWmd34Eo!oiOfR&=R~b#Qkm)zxsx{yu zhK*Z(9F9SoZ`B4zrNd&^*SpNmuIz>xIJHk79py4FLIyCmFvkY$F%!5pdeAq#OYKJ! z=qt-5+PY7VJ%iArQLdQwbL5G-=T+MpvJeYQ`eOih8ZE}`ws%IE+W3Z&8xwNoa`0X< zl@v|o165B=7`C}`0HmhT7X6C>ply+ofG}9w8r1X3p8d}QAB6PKEp6c5pZ|Rh?5!j` z4ZOs4@2vC}{A%5Y0g*rBFchfb<5 zUViTk9uW5I!uNFCg@!kro;K0&%R0i0usxQVnHy$*?>%RNxcaI3iqPt!!bd!M7 z@?uh8&8?0198H;b*G=%m^;twLOk+9pek0m8l`fV+7@_)As6k{5q+0B96+NHn=F%Uj zRMt6t(=F{PkohP06N%erL zD6FymSB%<8+Z$&bxm2xCsZ@#9bCT4D2jTQ8o6-?n{CxWK>XEZOc<#K#lPL4|1??tf zh|V|to==oR?k4*}rV7s=C$||nKlW-N@*C=Qm?=3N^bNQ~@Bk+|6qs%n9kw9}AVd;= zbbD*2IQp0@E+6mWW)`iwu;(|1-!i2ZYw@9U5|ql?J(tcL3NojFjSSawWk3Fr#TyH@7nK~m9J)s<^!+c`9qbnlEfwXufeRG^!o!P|=de$a(R z4^vL``0Xbr%jXkME%l_iF$+Z9u38@}UwC5B=N)Ma>?@yFPF{Lq+D@QAQ!rZLh?Tzb zzysmzc_l)-cNxhU66no~&y5K@3xKCpfTc~Y9v^V(5jY#IbieLx+)THBw)v7*n&<%9 zAYpt(eXs*)67y&6x+vIoUWf+l5PHLM_hK7Zowi;cJTPikt8Tbre>x_OkJF#G%QeL| zl51CzGG=v;uR!X@28-9CZnq|PR+vq!M9hN+WS}yoFOlAB=2sz>FGq-!PxWg38V2`vHSjqOWY=%nWR8EnNT&><~Zc7mt>2c!??1A zdz)%MebH$k6&Tm5mJzfjw*Lhw+YWxc<|-?qp_;T*f*(qVxWilUG~OfuUrt2FHZo7- z^{>}cIeNVBYVF_rIImjJ`0e(kpfImF5BfnaUO^?57E8nK_n|hwWBe%U*)QLF^z7%(?#gu>7 zX5V&t$Q*m=PLR#V)#YnQnjx)oGWvvKBQ-9mx-X=S!!SjD^POKtIx}(g_CmR8#aLRq zc4)cm$yna&Y{>ZmM48vZHu7rCMKCMTuG;UhlVEp?Snvw@&5W~e;(7VU19x3Ifz-QD z8z=TzIZ20V*d5nbTd5?otjqesL#~fjzMG!&c&H|38c#;cR2VJK06mez@(^_KVTWMD z&|6pJzf_j~zJv|m8=`Z7-pE=`<5|;uW&kM%-%DYdE(k|iVLMju2J?pX6~uOSvTP#7 zBfG)t;CUO!hWqZ-qV|+UszoOJWR81gd|@RMf3bPe%9>%@GcM6%dQG* z{y4_Bo~4T#8nyQWrYm4t$segqf?g{NK8v4c)NsDrCdOqQP=5I$3vBR)B4hNeWz4IU z(W0nnPt$^iv>k;I!l;@@q3I7T^$ZJw3xb`4#hSu!0v~ngQt0WbsxCaY+?UyTrCbzy zLbN>`w*IZ%`dHR(yi2{syCZF;m@*|jFUG5s)4fzKjOf&Ys)o9Dk-5eSC3v1LXua~x z=l_4v|C3uFk(xPv++vVv)~ZK z22Qe~tzTy;b5`?-S9`jdVGGkgJ6<=iUT&S(EGULemGEIw&gA_1h2!%dkdX(CsB)5q z-XPB)(-tLI&L6l^u%2>_Gsd^l&#sySlX6x6M%K(E&25JFfS|yfX3vNa4V3D?nGd;; zCO``-P7QK-$Y=MnF6_WAwe#H3>#`5yk}NK&8qd?-Z)A9}xF`Eq%|1d`H7PDk^r{N5 zf1W%{#hh*N?ey1*p|$GWL)(dOQy0AOd&2IUss9|NY4~-t|AFlRrm>{Z``{T)K=6N1PZ` zveN(jf8l9UWj73e(c$dLipKde>)z{U3JKt?=0XBg)J}Gtm-c$hUGCRM;XUKZJ~4px zv;DUc8`kg_)_`#R9(DP{+)Lfsk;&5e7H3O^j~ffpQw=7aVXD@zi&Tod`tn9L^;}dB z)&`&xZ{VR=DAvkJ-p(o5_ILhAGR`*>z2`5=4u`TD_-ZSrALk#*OB9cGuZ@ThCx^Rz zli8RSTZvv4J1xI3;x=n97m90yr&L2lHi#{EUbD--yS*acDcS++?D~crTU83RMk%j9OYw=sA<~U1^P2 zD7FaGDgZVuZxd_~oflPmzIOTxwS@0E^toWNH1#h*_pF9`H(~WuM-t^Xm8dUX@nFgJ zB@w0xCRJIyUBP-8o0Ui%Nl26BI>&MG6&Gp~(7nV0QreDsV{QG!?FLmqoB}N3i2Mgm z8GaU?ZgU}@&=8|)U08XlMmuU<`j*+;(6G7mXgn<}rL?}icZEFhuEPk9*K+>E z{QXzpB_C-eBEA{WQ|0#s+|8=7|M6x{iS{7C{?#ozP4zRD+y0f=!h;{4&1lo^NqO*b z)?SRSy*gEY{{ce&S%TDzG!I{l$5qAKI{|ECB?1&Gr|3SNk35E4Ik=k^p9wyJE5_e8 zy7>&YNC6-Ft${k8u~p8S$mcFny6oGi)y~T5ay_?k5ZTdxlbkSlT9Wype5|mQ{oQdZ zbF~xn**LmbQ5*B&l0YH#w2f&PPk+}}#@O+{86Gl`Td{B6DWX3x5MquyDB)gxVyQq* zV-xZ%1JTzUDB| zxdWXjp~rnQZh2`vtO^RX3_b@!YMh^4-+BJymCXfd*7mpw&pnyY@)#SYRsG`;K_@g@vKsr(dUXT#Ruc85 zjT>h;wTWa=%Nb*c*UQW|-g6lKjcF5VjCckB@3S?j!& z;JE3)se(;oZ|J@fEx{P>1=@`|`2v>=$~3Ac5PR>KGFk7f7acc- z3`_#*a%1=}cCf~R$`3?p)(01=Grm>aV_ltnABeJgl|5^*oQ=u1fQTkLjccQ>-8_}s zp8gkGc~}0!oX7PjO%{RY0v0O4x{%*U_FnzkJUCq5D{2)3$WACH2*4A}(cl={J?w_~ z6T8yBki*3Ji*e_dSK$D^%~()&u=hyU_de^{df(D>_1s6!We%d&)qykAU!(XV$`D5W=kaZ9U9*&Q1l~7QXrU=!^x7YhKt{dtz$ZD%F|Wd z&UNbaw<}@8OLpzevGxV=M_)tNRY2c)*Uf8&#Lk4KGC~Q|Kv%l~Bix--#G=F>&Hi&s z89uztQGYn>h(=*V0h75S@EpzdMIu7{{fSdD2Aaad(D&1`*BOF|7+;D1Cz1qaEAC7t`}z?v~fuLZdygt7e@vEf^8+}^k^>skhX3Aw0@|X zYy`-jl9wq+WT-cOjL-`FrWa^-GKIh8SwejqFF8y#w*_XcSs@n4pMuOV0@1WX>v|+g z+eD~5rncG*uqO(qd%QTkP7MTayD!cJH`@O6Xe?^+?j-o?kYF;(nbNk7CFxI`cpbb-Mpg`KrV@r!YCv5QvZUmreMr{YNx&ELFo4(;A5|F z=Ekk+H&2!({N*Osfwy{pvb8S1{w!;0I@lrbR)|z(xz6=xm8TI3T)!2RHltH;{aMq4 zIF#3KMGo2&j9-7n|8IYd=SY7N4289)+hUQLLc2ok%JYj@f!eNE+Gu2U&P}ETEN+i6 zwVL?U2i>zDWQ_ZBmZb_POW#Lk*G2Dd)#a<_9KCj)(4pl9detfb*>-3rwYR6v+2{{P z6p}-+C$?ypw+AUGV51AMDOlD?rPn`ioOZ_4T!x9}>u>EJb+mBhwWGiuoAwObSQ@lk z6}tOV@>d_b8yHxN%H@xJZ*EkY4}?wmN9J3IS!ZJ%L!Q7lO+c!gUfs$ph_C+@9KOgH z{`wJ(l8@Dk=@+^@bo@Wqd(Wt-nyp<_Ktu%u41i<=K_rRfAgv-nqT~z$l9S|2iwKD1 z*kmMUnw+6Qa?Y^{3N$(AZkq19c;9`#v%kI1xMSQO_uMe{ukKY{T~%w1T2-^2Ip_1V z6AP{i3&dEi?TQ=GqtLp&#U)7e!5Y@2`z-I(*?j+U6pwhfIibtzY+x*KB!4Ft+ zO(H;CVf3P0`o^Mv?QsgZODkm7b>2DJ-9(DRIDxuQlG_5ZaRzY362w;ErE=(6aBFya z0h^fvVVqdp#csT9sHwL)Ph*duDX)f9oVR78U?lJCx8~E!Fi%-`lFE_xedCSw z)*Eg)L0>^niRsSO#?^v_ensG_VMir7G$a6fKkm$xo2K!waa3-bWyRPJ94zbAND;np zv9OWj65~+b3VWB+yg=A(hqgNzYv`@h`fZpwwzwBya^0fk!Y4hB18!wY`}1Gr)G+Gi zD!Z3lo%Lg&%pHrc14kfD&rBeh*qlJf+{S)lw|!q=f?9O~bE_L&~iRL?gPr;)<1Z9LOe>v&=5N?&9%J7(dr#e1UX2Et_@EsZ0%b4L_ zks0dN{#C{Sd%YajM92;>w0T9 zHn8!w)d=moM<-h^RZ}^M!F>8sk-bL|+HukG`vO&^jBeaG4?`LBd-#{AE3_u!ylpjW zWSQdXG7X`Um2=!3zp}f25?0mymMfUQhdo`Axe$5b2W}B}ex;*y(Qzu+b4fq(<6Nz! z?qw`(L_qO@OMM;YrJlppBqXdf;u@Y;vL_U0S-yn%hO9~*CQ<>gJOiUsy9(787rnyE^i!JUysla~n$@vx-_;iWi?s!;0|_uR=;UAi_-I;9 z54^jdfihOfYL%Uayf|rS)j%5=f~^Nsg3fu*Z2u%yn~y2#=c2fbdgG$Um76VTv)bq< zz@`K)wTQ638&w)H@orDqFS&4|RM^zaOHUR8WyOFFLz zo}@J~Rds;Q5NXBXnQr_+Re|bQ0oc`wYJ4fZwCSkt1YnEMpb`+0*PVhwXLaDi&tp>0 zfwF9Aa?sbv?W!qPcG~GOSHv_{W9HL`YM%SCB_Tf4s^Yt{c~rp|*MJ|?2QVm^TY96k z$V%w=IN)b(-~*(5i>3c(Z2#ZTTH4fYF@XAFa|yc;{e4)B7f3)~$P&TQ^`gOD0`Tlq z*ZI+}IBVE<_e_;rUt2_(1Os$;jI^io>)Gl>nt9wloBeQfV=&^(yv6lL29 zK6(Bay2J2jEBqHy*~NeX5Y^q9?~(<|?KmcyykMek+vfR3Iv3P-cWn3RQaD zb{VC8sco{E`+INqCws=t7F&xrBG;dCin}^BPd-f$-0dfEZIUT}sWs;!eY;nyZNl&s zy7qU$Az#W(?c<0?7q#MtR!z=f>JTb@7)QUgDuqsG=r#$1PCEWq*=b!pa3}x7#e8A; z{Vx-7@{Ds0AMnlEfZs=!QRCezJ__nL^PS8$QU7kIx`#1Dp257`@lY-T3qa2IG3z z5jH=Eta~DpL&xCyoKE2fv{eH$aJvLx&|%@!u@Jp4TE9HG`wKi;eB`?DsXvHKed`fk z&{_18X4%%Rwu|mrrmxevlbascZEz02bISbcup?%(qMu8FU9;4+S_Eh2(=o!nWMS{Ia&xG0PhLs9{+ACjT}Qhu&K!iWA`0!0{w?t`Iia8%g0*}6h|RiQ>~ejyVeB

vsny}m&w^hq#v4f~)r$pVB)jzQTnSaVn${Ly0mFueIH@P$tVzsm9^8{m$%nX@W- zzu5=q0)P)@AYIvUMHMq{}9)f?Y-j6fVzt`m?u-b>auKF0F)>%kA8O`aZ z0(&vZ_2InmcGpgojb|mLfpnsZ!PKYBkwFg1l8XXv0(~i7PcwDntymX1=5Fv5Ym|_+ z&^xPpl~d2GRXKg4C*Sbn>qzVs=*VelAjp8CUCzwZUliwp#@Kla=&JX5CdNDmsHvO)4 ztf?z<++}Jt*kJB$pvuuQs{c!Df{+aDJ%v!RD1#VQPfM1AVT;(Aj#CJC=KYwXBsTb< zHBs70lGtc6D(BvA>(c8NWg>s@#Z4`ZiIhAQ(l!*XRDxW8+cVt6oVs-IkCyO3c~+fM zfvzDnkr}Z~z^=jYl;xgEki-L%ciGcG$4Ph4yi`vG9Ig-{`5oC!W__;5RQ{~jx0dT$ zAR&4nNJ>FIKW>lG{CH74)k@@BeS=u-YyP(qyY`2r_lwD4m0>@g z8I)-8cf{XYRh)+PyS%{dMXL_Z3GB->v6$aCDNui2FK;nBx>b(g)&c(;1+QNn*(H(+B)^)1-ARSJcNUJrV zdW1Q-k;d>EbR9MlDvo;%QksJ?JI-gb*pxJP^!xOX2Q|eJ$ny_?x!!e>2Z#y23ZoZf zOfM$s0>DMGR+=YZ@~X`6>djdK`slSC0oGRldGV&4Att&v^w7PXm`_|(%xn|spn~Le zBR-vj!R_eo{@LTwsX4w#l5$LUs2L)oB7aQ!C_QSiXygl2rME4kVC<`6Y~j#Rc!;u9 z`JBAzH)OJ))6x|+XUy}*o5Epov>s6njT2Y-C16HLCk zy0TpExMMk2#Rjl9r=@hAMJT|~h`3EZf<3o4Rbr#lJ1@Q&b1n>2jLbvg#T)n*y!M;# zd`H=S)*j+7Nren3R8rYZIqb|Q^s2wKM$bP-_R;(2D>Bwbw(+iIBoIeaj{d^dm0tmd zxIz52x5Rnm4T10y{$DZ0+o3o1s|jp1+o|p97#9F3_cP(c*Vpl^IzXx*>%;!G57Br* zPnf*6bpTPtZIP)FlA8csXrTNm{ST<(%O-;N3~79pDsyJZwqpSO)VS~EE(8cDPUi#E zuKuJs_FSj$Q`~gN>VvONuk%PP0OIJ7-2%pb!5(zuG#U)R=8CF$3PsYp4mXa$%eTx9 z#i6x$F}~~o@1UwDK#7;DUNoHzO?5K>!VaUlA6icxOg#L0^FiUKDAs$=E=P27Ncl2@ z=s8(pYYZ0rc6=T2=!t8q^WhuDxui#C>ASrt#33tLg7Cnb4#Y0qJnHwh9Nxp4$wgHO z<&4$LI`W1LoQhmN#d>h~sM<&`tI#t98s1E=GA*xQ7SIpoOR;#Z%}k=mx20h@W5<*E z@1za?;z9net@IkcOn!=s_?oHs+WK3KxQsvnH;ZP~59ari{!nJ}v$-ky9Q}#=B{Heg zoP@}VUM*_;zT#bA1VQwN%rgT5TdzlDd3mi|7oHKjF*gjJovM$Q^Bmf5#TIN9JW|S* zAQ2S2|5?X@$J2)G>51t5cFV6w*`kjCjiIE#WXBon9olctww`8S=i% z>fnPu#i69cTLl%yQkH)@B%8HM$lzMmAziW9=f@1E+T@3GR_4nNCf&LIB*J`GgG=5F zv|#k1<*#p6=au(!Ev~uo%Sai7H*=HiWS1~!wc~?=OFN?X*^NF_6P?MR)EQ$#UzL*g9ae#Bz668%2qcNvSdUP%#u7gjNE~<6-F~iJ~WA|vt?!j)WbWiVY z(^(qLo2ND9Z@-LXT?ny1200C9auv`LO_&u)-OCZV{o~VFA*@+SGdc2h^#k1$4qYSd zV+EV7(B1lID|Mv3vXw?e*9(5;G--iW0Y47&3_lXm{5$$Y6KIQni>3T;^Wk6SN^5S! zYXka$6*b+EA5zu1`KR?WDn{iK+A&^&cN_1=AKv45cZACMCOT1Vuwd~Zsd{1H@Nu+aQdKqR`9%Q`FS2cjZK(3+JOh}{?;D=>8z!Zd z3})IVn@yl+Q(gY&Wjr)ob++Oq1Ulc;*fA_IlZ;7jkUZ6zI%1lzlk6}~z zDY(_oMo@!%FB1o39TdrbhijWBi<(E0OxByyN$S3Q5^#>u3e-|6V#*C-u{rv{BY6!O^hRScpX37t?H?<5qT&#ZEJ-tbPY zSJ9D+%jgbKXOQ!Y$Wt2Q2)UAUQRe%@N5ihL{G)nxrU7-!+%RRgqmPcYv!wxZ)JHMh zPX`L0Rp`g2y_KjgNCw}q`1ic|fAc*4)7<&!B=J+v#3o#yFyvA5Mxi#B@Du)%Qw41c zRFy9U`F6a1h?e*b7oD+6Guvc3Uw5N88ND#apIUNly4tM~c%KMJtrqNhU&U}lnGXV9 zw1POL981-_T*1_%T)suu(`Jm|be_lY-T)ns+}EzbF6{8&9`ohp!TfS8Ys;1A9lWVpYY%YG&6|&313o%t zpbe8BDS5wK=VgxV(Glq{#COHr&iQgdSgNRJUzd-aMMuul33XI>?i6k8)L-sx{`9{m zt2FE3gJ3s&4+y9pQ(6vgaje{;B1k`+c6j5jjVvx;5&YoHkn=RwgXXazL9gp`KUt}z zPuo4+@UF743dkjY!JcQ9X|BrVPQCseW$%|`^R8~R1ZlJz&$hLvi`8zD3>Gh3JMOTT z!LL(OH=Lco8{K`cli$)QQom1C@h0U7hPY5ObbWxu_U;-{(OEG3dzSORxxD@fE-QOO zI)ZEL6b9XDugQhl>r`%`da`GI5+ow&I%LjId-_aDbOpCE0RG;my1jf# z#8g4(TA{A-@ap@RF;%6KvQNvCEn47K%w-M*EjVT0%(e58X7Xka4 zNztDzmuBTP(5!6>qZMVL^;jj_q}_Md^gIkvl8NE07y4^PkoW;w-`s~DWnHeqI~tx( z56+g|Dn<2Bz|t`95a7*F#z?wxrVpBH0hWg6;N_0sG#T$!9D>j@(sl!eGD)U`300+> zeV=_VK%aXveavOrz#Md2Z&UzV9bBWdB-n*+gn{LgfGoG97Y$IsT06Y)jZsEJybAweLp6A8ItL>0K*VfFxml%%YrC!6^pY?^M z+^qVYZplEg+T4z5;=Sn7UzF3&xg1Y5aCvY;qqNH3GH%EEcb1{!6n`qGXuNz`?-Gln zJP;E#XKY-cDUiCq{1mVGm&WeW#*WO+k!v<1Pp_PY1f}PKgzAv2e~zp$MkRMN{_z## zty}vdS%JpR|7YG@49LqKW815q61>-Nu2GPk#6OXbNp$}fj>^idftMr10tp7T zF!M%ub5lIn^9tZnuSNZ_1G&{+dOY^GC31y-N$zEs{r-O7Cr+GNOrfkwL7^S-`67j3 z2gX&Zt5pSnm&LJUDUbpAxgE5bK?ta3rz}5CEeyzd49tm7Fy?fr8 z=eu*yC8~6m&J1^r4iDE60guhcnO=43@e3`1#@xI-ThIzm7h(%JE>ucK^(j_K*5G+p z9ETO~i`k9j^E*Xxeq2AJt+;W~gl^O#Hyz!b+miLbUSbtI2Ces=nGcH_ieDxU_er4T zlHw2nRgXI2`x|UY`i5VDOT{oT-7fUMtAl3mXS8X3n|UR>4i6Gd!T;!hLsxH7Ib2<# z!{)pmM<}*H_veowIoD_*Y1V^F7G&Zo9zxJ}MX+xlJ+vRI*}SEGYE+-w69L@TM=AUR zf#qSJJttF1%S{lt=x_gG5h9k~!Wg#Ny#W*fbr@4D9#5cL$S6pLT3A1@p< zcu6K!UoHB>sP?9iv~AMov-dg_0)z`u72I`s1ztj}^07`~E;;7=Y>Zm_nJFdKI=hn6 zb^hfPuC<8NDKFyBY;fveQ7b0qCi8SThvv~VV*GLwi59EmF+blxjO?CWcUWFyYDcLX zJ1m&`$W1+U4CD|Mk)Jrn2HK--iAX@uCBJpb>|H4!>_oxHTm(ZQ(3VTvuP= zj(~|_=5Tn&Ho__J-uW=woQTYJt{+0W4e7up-6XpUhtb{i&q=r2L?nd+w|6`+y~j#v z;AMvgr+e-^N)t?JC}3>=s4r&F^~tS?^2ye57uht>h#>aRoTOE`z0}HXCzI`7DGdMC zE$qCKf>lnlNrkU_>c)$uD6xg}X`@__`9r;JtJ;xA@?Q2087b~M;bOuWxvd-ZxY1;?`bs?b=ZE-i=k~WBBq=StdGMcV-?YXg=Sdz+PNUG2Js4Jq@~miUf6k-F$?U zkTV!x@ga8Ji{{TqT{aD6xii}e-s5lauOfH4Z_D!;?nC2OM_=ysu)N3ZM(UN#6%!@t z+3ajm@WN)a#zR{1XEni_UoDlHAG(x}cGhC1cqTq>XwkASPzPJQ*uUAEDZLS)ih^Vs0PilueHH!_&pEIz1*}sq3+uzb9 zt^fFX<(LWBLK5;@3sm#^=&^_NkZXBAl!oz*Tw1~HQw3%W8}T^mP*ug;UE}vtRlhnR zHzrX5&gnQ5us{PDM$jezzh+Aov|sG8V|CN`ZL04VLc!f9h9*G3&=@cqb|nHMEevp6 z>IN)M9ZdL`mv{ciz#LZ2~u0^ZbnT)xd1L<&3bR7BeETYwnwZM zjGM-wC0F`PJ*au?WIU5^$+}ky*3R&zvSZQe|(+7tUyRll3=|!3c>?3(3^VOv)<*Au@@j4>$sg>SBSbsJ+=8g)J@^KFqipXh)7p$I(HT;> zdX1p-#Bf9}&BDi&6A!7E&h13;1NJVxsP&6uX~Kw*z5LCtV35ca&pQ0|Ir|(B;&5s5 ztIN;|6r`gCDOH(DqA~HntRD(#Q-j~R#SN@Li}1U(uh(W|R=`RoHJbO)7Aq9a~L4+lO82rvfTEzg| zpmQJ=b3NxT{%&q6Nv!J#^;gO7jRY|PG}$EWduq3zAc9el(JRuMmn!sdAciQw!IZhe(u&vlp(M!*>3 z)6BuJ2m?b0`w^;G?)n!L(}vI9Ky6)k^h7$B8r|&c_c68ay)w{~hFItkKr^Vjb|a)A zpYn4u$#1jQn>#f(Tqy@a<85+BCicJ|BU2>C@48qrXGKaB>a@AC;u)?}Qj z8ZZqR%Szp2YI76U3Q4*-HYc?9Q%AJJyM)jcGn;yVKR5{O@ZNj9M86kK6Pg3*IA*^1cv0;c&7^Io+j&(i`f)-$TSltK2h1 zd+iD&MJC4CZMYX@&?n=lewdl#d#mwo9*D%Osya_k#f^;DN`vs}RxWa z+VKG$p&b&4oSe>zh6l3NKjI+bn zDi<86GyXPyxENB+W9@|3W%tW(vb#-EeblL^Z4I-QXZj1%@RCg|1P7zCi3 z!WKkA&!yB~PY9|Em+ZW_;|OzL46hBVhTatIiaNVC!cCsHcA6cRkr-LF)9aL!{tqqy zD6O8;ApcRfoakM0l0^VqMqFDzT+h;iM0vFRz>1Gr9h^`nn@0iM-Wg~>!w?J^_B{hb z2#>ZI1)6<~)?nPL=u6ZquRcG20=3NCZz{lz%B`@yJUa?^Ys%7N zvS-3>Nf@%HBX`XEfBlNaZ26@Lo{0O$_$K!&h2k_Ht^iaioQ6Sa`VOgKoF^v6*11z3 zWDE(F36~`^>lnY&7M?Tt>px~bmx^}R1tls?o~xAvPDRhwexML!&s3fcTrAUuliz1A z+%uimZeufeF{(apnDP4_@6KHa*{kq!>_ zGf8lPm+&kjmMA6yhgDf3ezU3hge#@rg3;V=LvQA+k2*L4IF=CxH!IBjO}?`=AmEYv$m*MG(#42E=?5jsYJ-_ZTw?olFy_9h2o7hspwj@!1ivAn~tbb;+$ zoYnqrJ6r~z{j$n3rb*UXft>8F;H9P}F`*R4(QkAwD+$Cr-A99hl)+4)?997+YbBj#x$WPf5r)Xu$ZEsO)1#@{ zrW_l1%^)f={rda~#T5$V?xiNvTqPkc`=UjGJ|Qjm`%(1X{Y@3>flvO(KEBf*DSb1B zUsg`z_pbm#L_feNhwRx0XQOwQyc<%)TvV`S(B$E{Z|4C?SYxTHae(G=cTxQwt(aQg z&X}MxbO>wP!o@Pr#1J*FYZHCT_t9!<#dr7a@KnShYuYm~8hcfqLJ{AGi0co0&@}d? zuUZX3z=E#$6XS+&wc(={A1>dl%0x{b7G9s&Yj~`hI!9Iya9HofJXcL`8Fdc3o$o;V zvFuTnGYOxX_`%bOnmeQAt%+RvSHuyXl5?2;x694^V?;^Xu+h07sS)Fykm5adiUGV{ z;?&GN_=%z4$w}1nt?X0RrNDI0*ieADSweoo^8BT7zVxO^*IZ}@XsgQWG0#NS36F_w z*9g7KTyrSpmNF`#T)<=_LS)xKisqZ1XRNqc@gOBCOR*6`Ch5a?Y?@TX`0YW0aeXZ>UD{zmeG!G%?!?i^9AO_;g3C5nAJ&;y3JOE7UOUFzoqJ z&Ef)LV>GLw)yURXQZ#oT2aogkhfSftj)GB;X+~@1@T)wYGiBxPMaeCca={u1Rq|)a zes+I$qiqU9!uiW5l+xGxA^g3O*KA#ol4v9`$r5rR}pz@mz1-oMH@+J<4kv4Sm! zVaS>e4XDk(Eb&bvk6L|NkB>s=NkHh&*XNb?BM5*HIj$Bkxq=yb1w1j0i^y}u`k*>Q zd~%NeOAvh$wttmo-kp%=MMCGwKFJblsy6P5;B1@zF{X_k4Lc(EQFIja-uiT!*k-h3 zl9CKhci5)MZrKp;=0tn&W6x%a50H|*-JJ*SJO{2BUDb<`a`vxjYS%{^DE$OUoF?AM z=d1jfJR#?=9&Nyn-Ah0Cpobbad5@&x zWou<=M3j8iSl%bN+^wOQMH6ponhC~oB+a7P;yqCA_}){e)-|}ndHwf8fum7DpdcsW z(Dq}#gmM2BeQB_I-f`Gwl~*rSJ5XsDrQ7LiP0#h0WVMY zz$h>EB>r{O``|hjjntv*J9%nNlx*+yYTN!%|KW5P8HlA=B-LI%Z$S>U=1onxB|aS) z=6!N~dz-*hq1=j`IlBD6{gxHs&m0#vRwOTHSc#| zg0V3fve<$-u5kp(~vU!CTqmO zpLT?>wtOg*$ngHzP37oYw?Z`YcD~+B?DV$aw)q8DDxZh&lRjzFUNmqewea2j>T_FJ zvXF8(BA~mLMnp~gqzI-Xe&9#4@zt24Ziw?Qp!%QQp@X;TH(41i9dDc-NAg7@cJvgW;y8PVU~r|M601tGzyQ<~;%_D$c!wmHSO%eQ>>$P|euiDU9((Kd5-qS^dqXC&%{{=1|>n zV^dK9#%hhGeq6WMRZNNqgM%kFlHTL?e01}gNV>`MUKKY7YSN3JVCaFf@mm z1e#b9QS6R9mJoL&OJ0E*T2BR>ejQ3GkM9@}Gz&@xj;bLv+Sp=H_pR=m*|iP>pE<(* zWYUV5^hk3VJE2dl2OG)^MzndSqA5{bI|t*^;*L>F+v%t4GrtqQoCt(J4$tAytCBD$ zLiR}7gu{GGv?-uZiF(@*MA>8 zoQCpm|MGleKBy&Uyg^;rt^@${lHtYRsdN*66WlSlkeN{Y|9lF<7*w^Hz83dJ@nh@v zL_Q|27eJg!eNWWsFv`j1v;1pM>TaU$G0IYN=o=~~`lGey=y#>!2hQ_08qVFX2{@b; zS1E$JT}Bt2^yi)r(IrQJNcl~(Y(Z){an^Dr2w)EB@%s6MCT;rZ?U}Q1O2hO|+q$8N zA+JCF)_kAU8(wo?ooJE8mCT-599G=wn|~rllq|^ItNTl1wZx=07JT`~kTXOs1kt#J zR73*qD)XyTlFf4N)3&NacBY*p7;C!N6MGilT-UpZ=+sE82^iJrAJ9^C^r*czr~T3B zH=~nNv#(QQw=35m>jw+EA^ZVr)8xzL@27JS1b=L67j+g7!` z&_UPV7WY3qK7YSR_3UL86)I^SYl%lA5+rdTR2JxYItC8oRO-bwPKEamoOGsPhx%Z; zz8R~(Gw@#0yAtZ>4Pspun+uxGs@-CNc%H0cy%s%jfYvIG^&Y5z1|m7Fu!g=Br}XDR z-q7TrW`9xbqaRy|aD{hH)l$TK85)gmHfJ4_KK3$7*zEqeRfXnfczv0jYXlW*e)@z> zY+mM8?`_m3(-d>mi05tP4b=kYYF6SNK{B})I64En-)c*0^l*z$}7e|0y-Qb(Cku^y`^ zw%dJ+@L&^s(#@y1mXi{=aGU;E#qM3WWy*k@FmWT9_*%~VcbajbM2I7mE0gztTs@g^ zuER@i1mBL-MFPZ;$x(jglR=;5OxOVrH$rMPp{utk_CFo|+anzs;K3ash@$wKGDJd63*%b4zZz8Ou}r6$-s7<+{{gWE$OW%c+EZy@6T)q_fz z-@3JBXECM%*YbJH};(LD0|WFIF2 zC57atW8?k#w#vTOwF|zp6^gKyirsyDqgcbXHeo8C66(*nRiqUz!dg#?Gny;wX+b?y)+5hOW?Wo5Mp}iz%=vfsGu0{-ywnzov@N;4341; zj%RDfL_hN)H*`A^zzkK}uca%%ON)*>9e1>U!e{v&rlwaowAqkMs*=tN%Bv(Tk>6hl z>sV**a=k%k{pZ1~jo;o_bW@_%V&>VJ*OHp=pIsOOcYpyWi8rDjQIHqjXM7_B*D*${ zr3O{W(Dhn?W8;2t zG^}Gh-)@+TO{EE9&uroS`XDz*OU?ygt>YcJRs*p%rHzV?kBd~+rT^RNTHFe{y!-L+ zAd%O+576nw21`)buQyVfg<-$==81%K(RhU; zv2FeY{knTTmFT{nx5)W**atfIgSLvYI<*sp4v`#!M!4FhcFK4X70zw@JD%T3bti}B zsy&U=Zmpd>AnPDnBZ%4^&!(0)mTVGXC7TNSv8~yqcN%k>s$hk{tF;7>iYGN|8%dfYRz+e?p>sWdXIQe)_||@auny z9QY@L>^hL(e{spJh<~y3fjRj!I9t3ZR&kW5zQvZov30e+F`!^k2hLf;|AUKJ-1lu7 zG^ylRCUhwZM}GC$spzKkMB0R{u?W58lHh4i-$O8?0#lDp0T| zIbE|Kg2D77>NtpM3PUVNx{ab`f>qms_NI;Pw?k@2aul$IS z@Zrce1qwEHO4rfOz@X(X$(lwL zy-~dBafT;a9PEzRvRv@ZyJZ2+#FYi&hoi_j+s=pb-MuvW=+9c~`#N-wi{F%p8sZHU z5W2t55Txa|cv9n+-S&1&faCq>$cxu)EV~UujhiTfc&l%{d!b3=1WC#uY4ZCI+H6J= z^*=S^*rY6*vNkjK6LR~IpAf=77#g`?289UWJuVV&bC*QvUpL;KSd^}J#*3|AOqMqhb6bvq6)-slZ0t30el zi%LB(m9oQys%Y^FOl8EZhxNBPv#XWc$)&@(aBY{tm8C7QBE>^^4{BK4Y`uicD)}^m z$)-Wv-qw7QKLT8ITrARQ&$JD?Oh~Pj%D0^Yg_mujnyORPr^PTOLzP<(VPU{%Ok5YK zGHSH3LcemifkA2LA79jpTz4w)U!7vAP61^>$E(t$_f*-_1T&cvrD088HErywq|7Xq zpH(O0@&o_iE;qc3yB)RT^!rz(`s~?0MDV@|W4V|N$?e&^J0V>Mcm{9;H9aJeE}i;2(+-a%mDt4v`CU<{y|{AE~=56@*EbTA0A!;tNT%dsG+U~7qrKC znL92|X@)vbSK$38`>nWeMoS;}78V+J>lZcV>0UKr$kmu=<+AGBgPGDE^Dv%f&q4)Z zB$0RKzAU$xo<-0s8tR|?1@%@&mw?A3lh zJZRXy2R)u!@zQOQt=hK=)$-xkaNv@JMnubXcP@u_tD0ZF3Bi3sa;B*{r^@bioX$r~ z1gH*B;<)S^8++?<@n=64P+EodvCK;pm-aMA{C?pUG%`H*i)KkXNsju_68_18gu~Yo z<*%t-oOZiP^t_4BwbVL;pfDqMNE_XWh+LAd2mxbjV)iC)c^K%##=0Vaq;b>&$I8Ws zesbe`^Wu|a5C`+wjip;@cl1=fOavP|RiF8{XYkz_^U|Gobn?~r!iItFc`Iob+?)Hc z68OYJ^hjBnntEk4aJaiYkaMnS$o)tvz1BZOWNwBs!gVdZnBRJJo7{R}PI8BjrfjAH zqe0-kcF}*h9`QIl)Z$nqf}SpYbbXh`WHsQEn2&f`9ZhmsqgY)8}<|8P8sLKgj_7vc7foiQ{2a`KGFE)QKOorkc%G=JIvB z?W!Bk(DtSInnFe7MQ%gn3`dNT20LVr;>Av$>#wg{n8KH%f)SNh7Ha&jDem{fM~Bk8 zsmH8Z?%XMJ$cVVGT*mjXYGxtC5kKgse+EU)rpKkT8nC5fm)H9@RrA=x7!b3EUzznf zb*Cd+#O2KB_V(*5&HEpKggNY4b>C!?n?EjD+KMFM(D@AynPeio=RD|lq0w1(1Jvrm zh)d4l1WkaIYThce6(_v($w5wMvxwI2K7-a>U3(ERMMpKYz`pE0Xnms43FNBj_s50( zSLEd11`h;`&!t!QfzD$!>S)m3yV4s&X!tB0i(c=GQF^65lqRgorQc%1>sFd`5;NGa zy;!w~T$dUI^Gw4|r*!*V;5E~h{A&|-9>of=ri%t8B7bU-*f6iN*vmbz*KAXjR?E3R zeLU>q7z8oo*N&F#a5QAFXDSuEbvl%Le{&GG`x}&KZide;x6l#I9HljNA+=qdtQ$396h&q&uI@PzmarR zODaKc?4O#vx>RpYe?d^wpxWT{nK02TvzYN-t^(x2LER|rE_dkA&^rOwo3rI)(wnw- z6Z{_k2oV-z^(iaIRsJPtn;e)&a%kaX0^$X+N1v{11y>Y}e72@a6MvUE$O(X~i&_t+ zp39=TSNX(zzDp+SPJy=fyKi;jpFR^d>$)ynWt9$xl`a&R6c8ID zX#Gn^@;x>o1sGhpg;PI(dtJ@6*8QY=+C6Yx7=d2xIh>wM<~J(I%m&LVwvPvCRn?mU zc$BZrN4*ab(I#fsh0?x`s~6i_gGpr?%3~mwyg!=~9CPy(7;P{};00H{bT1F@bs-Z- zSilPHpv--If!^_7T|1UdsInDrdK^mPr%d8?VylGjN4c1Q7abB8oUP@7Hil0 z{Pj@;L!T8n4i?9Q=}_5&iHEL`8uwM{t4U24wlZI#d({bxh36HY?)w9bL( zp+_ql$sPp49ow!XX2508lyAs1FmnU(%TOc8bl0NTs>7PT{_{^f%O&+V68I~l4vd;l z#$F!kH4F8@_8@q-TDQLlNa#5dX)3u;u#XPtv}cEUP8Rjm*usx&J9QS&|IIo+ILg04 z-pa+z4XM1qs{=f)hJb0&N6~VD?*ZRyM<@djvEg~E@o&3d+UIg>NoC6`Rs$fz@91g0 z%A9$}?Gi*1r><2u<5sq|o7BnAxmR!51n0~0fHOIaLoON87Xe0FAZNP8S-@ZFo`GLH zBh-NxIXyKH$ck2SoTL3FO#Svg8Jp0=$Q1g?ZE>5hpEcC^>&p4QFKW7w2V1ou1?GEF zRjEV!4a@2iBv~u^sg{FE)o@M+52nZoUA6wuDjokVT;l25D`(1AA8!Q2OH-ZFb-(@H z3Yup>ig2ENEGx0>)c4l-t9PWmC@d+5VazGJOTh185FNvsov7Yq(K8lL0j6^?cjKm; zoJD_BNhRQsdnQ@w4hHvEa@Hw-jdf8%FK0GbhvbZ#PG}^w<|tQO=&7$dJl=;w(oAm4 zQJXYfR~Ol>5{i>TZUZ4wz@RtJpr}O_j_Wxf^xYm!yT2+TP)R+g= zQR|VZ4-RK;{OU4yW7P8L$bUkgM(J=u9mKiuR6zDf(`z@SIqJgFBi}B>w|B;&k#At> z=*-Fa5?=27-48ux+p)7)UC9AJOBELx;&J;qn&BEOD`tV60VuQO>bRpnBv|;-54asC zM3V~w!;V4vgY%S}hl{P7#6{!t=H@iZ+id!Cck5r0ThNGm*NI`#$6FJ%B>n#OrMe@J zno$h%PqgnZG}=`|Bfshu&nfFF+9fg@5li9`rjAnR{u~I}q{^BG{RnFENuRVJRcYybd-*n>5qED3AaRBF&+1Cym%* zyq#ZBq#X7EFU1vRIYs)=@ysy{7B$m8Q!1$Pp}I`|-9qmVqbs&i$X-{?B?<@ZVQU*< zkZosUN$Y>HnRpuzv4* z(fq*Q2@0i0Z`Q}I5lJ8`Ved;_-{9X+<^DgabMLN1ERkfxzfz@3i>$tO`Zms#_xd2g zXDv5!FRTOQT1qt`=~m*swO${H;8`{yCNL{ ziOEy!1$&|cbp^v0V=PJe+bnW zg{-xy&!rKnGxU9l643sD=0ywv5W^mz{&HlcZPDa)zUMf|KOM_?L|%ulU7V`>Pp5wX z%4_XX|9yn$M-@>fJV+OI$`w26iRiCwL4HP}1X~PzFWTwj(|a;!^1^A@TANeW(-V#r zld+5LE5xSzi_I^&U7c*$M9J?c*@$G6x+Y5P!(q@SM2S6HNJt2R%;UjfH+E;`B}BSK z!PLc6QbtU=d!}M-!7p-As!rxdn zOk29Q3;B=lVWKT&Jpaf^sSJ+}JO0OaYB%pe zzIFZ*_+YoS(bbso5DA=++{H?j`821=;KaJ}O=S!rH$UMV5&-V-BW~Zb$%>C3OT-RH zNMf0kUYWic*GzIzSZnpXp*t~fv*MZd**cJ`&#px0QCMuy^$YJ!KS)et+PCP*WU0Qg z7c{Gy<$Davl2|A{QSyNlpZG_JIKSa`BnQKXFTY2GukNgc4Mx0b|7C=RH=An$M=c}; zq8jQ|($ajfCLy@}i-=kq&lQ-%J03F2774Au5W(0gR3M0sokgixF;ZT&zeCU<;n35Mxh=DozO`u_AK3?W2} zv`Lt*ho_>*jd!w#pymC|xc!*+C%$MhM$8RTEa+MJ`QoJ+60ffF=!za)hVC>(*AHk? zJfx-|v!?Y*$+U>}%{98s<5IeWH)`%ZA`*LiYFwCU*M72sOX>7E(wMidnn2v^^8HwW zL(I3qC&b={6ZM93v@@rRKXE7SWb=)5Nr6om9;8rx>H1w`>Bx9U8qOTsQAVJiSBSJ` z{bQUUGtK;dTcG{V=TYMBEz}VCw2dMq*@L=FHru5-T&lI2+A`>KxC*stQQW zx)Jrk9%bg@DoV~ODth$nL4hHBzTGOh&EKXuL(r>I=zAr}xPM5^yulPGrlg3^FydlI zNB3)+V{;pVUP)i&wL-3SU*&V0d$E@vb9iZ``=bl(%)2uJ<&82%Vef6>blNYScoecH zQ19?A^FSVI&EVs)zsIrSA;xn?)KkH3(>2N7=HhW81&X-vV~T5b93BoWq~FkY+iM-h zUJG7R9gb70=~ugXx5rELcC5aV%?O#KAx6+L0|qyClAzbk-crOlYExn1hldc?j!}{| zBisK{M}Rr~>I`qYCVD)ZHGqlVZ}diNBU+EsD+~e}4do$CZJKw8zI;={&ivyH7cR|sU;2C=d9)7jblJ()u3FK;Uh%FQ`M^EQ(v{IPROD1$ zDGR*dN!^MG8M?Fw@NX?h1@2_PUaXg8IgCA7XZ%JSaWn2=+!&nhqX9%#G;w!q%W_y9 z?CfDxt94(Ao_+PkXI(IG$_&tCcWr!w5f*~}?j@_v^94froM`M)Wq{4d`!&%8QoroQJcnBu-i$_IWO{N=#wmzAU!dK9+Hlkd6J zyw`<%k4pTyd(9+KtvE6^I8xAC!Qs5x?o+GlNi6qk{a<$PgCzlyZal%8T~UW{YpN%{-K1B%r*0khD;K(u5WNEh>S1JCFA-aTiVE-eo|d8o zHFfpjn*9Eu5;OT`zO(a|>zS;VmxI*{XGt7hUOHI$q+WCp?`99QL-?JJ(~Hog_^2Lg zhF*o^Y&WPg>-kQ*TUa3Ew26*bf?l=DyY9NiE)KHRK&LFgVlDD@_65Y#K;J7D8 z3%kRYSlVPWXE{0QnL4lUdq*`iZL*gtT}!qM29YIlzpfhUb_L5> zast)B-4GdLYRy!-bmq7DG_rms#; zX3~$>Pj6zt2uOBOVj+5A?7;GvnH?)R`7TH<<3ZRor&gRvikSRq)XvU@k5z3w#VL#V?S7FuYBsgTsqK7kQLZ> z1+wLnOTIyLOjNN2_R_yHy+NcMiH8Gmgy?RcML=cg>Df?OP7k@PxMi(ySq*c#m2aEU zWZ#Aw$CPTV`1ExY#hO}1bu?datV8|K%d{_BvPkrCrWA5TEtM7B#seQFIK(QwBwzQj zm-umfIck!eAo2d2rEC{muwvBH_)^Mt=&MN)8G=ar;XUDSI*WQ~Wn=|tmP%o~F~R!z z(b8LnZ(mXLmt(_NS7V@5C&eoRz(Rq;s0feQ;kwnPk+rH$&%>tGCSOMX^DAc)rJk^%q}%UJe#pxh3sqzb^j3FVJ7zF_=Hw`f4m`D`W}I&XBPQ=! zjk@b84+0qI64k+pb8R=A2oSMH3=>Ol`g--i-`X}p`D~Ybd6}F?P$?_nd!oVtF43+ZUy9j_cIj?5W+hn+%-*6m>u`y;duV{FRNS-PUDHB^ad6@V+^XY|%ndcbSW-=Qh1 zCnE@g*J$~ojcxE981=5c@HNb-m4QNt4*cD}w};CPAx}td!qx}9w9DKya8#k?(%y>c zU-dq1H(BfOxiHZ?|wp9SGbAG?#q`=nIKY$Ignv>U*i3GI_iWw~&AvG}u*N05iJ`Q{w zjKv|<)bf2hZ8j7@0I)08)os?XZNE;spa;MbYh8vpw|PCfm)C&%rzYzcZ$yp9Bj@sB z%WA*0%~T&8`5n!(j|j*4DGS-YZJ7w z5e<&sI}0Pfnjd+e#$idML7u(N4xAN!%BXn2yHfu&3Op`0P*n+gJd8p@5{Igth_uh^M1xvXCM$uII*J9u1fSyB>eHAMJ33pN-D02?x z)(1`kmf>62T($dneA1z`g zoec|_=Rum_=?H2v;!Fed6_Rm84bW@I2>fQTG^KrJZ?YkO?~DIMV_MgrBeVM>mUACn zPSwV6p8mP2i)qx`$^BnzF{O8B8f&)C=14B3?_(=DHU?moIg?in7sou!fM`20DbEiNWPEEKV>%_x2}bEg$2^nu6Dnyo#fNhtO7QJoqHpw z4^QdmvQ_$8uH$^lZ+n}l1P_^?@O=IHW5N$5`L}D%8y@*+_1z(lkmlWR2k{ovt$$|5 z5P1p#TTcdS$Qnd&KZySBiQPe zxV?Q@8|$tahj8+d<}O_3E3+*Dzt1h2b1cwsi170_yj)M2o*GpQ+iEr;)H(_;I+1ab zHv6N)6%=&_%E)(an?A2umt%BweT22}hzM1K?n;jGrK5lDW_ii;TK=2}(+A69;erko z%`B-=&9|o)WhiEvWEs`k#1{J!0)n(b(Xwu|mu3&Fwk=(Kh8tg3QU(zQ$j&t zNIz^?A{g^0S`l?-?PojJ>cv!i<8g+{pcAe5OPrrHyFla1HC=w!Bm@g*xXqir^arvm zoH?F;`S2Qz&sX!iIlSHN6z+K1ZpW0q9n~`~aIXWIit(+_@ZDLc{Y*r+IVbg#5UsSv zt@|7J4d>Ebg>M6;9qD-RI)QfTC;g}_T-O)h>RxEL{^rA~Nb1`Z^ZhF@I~gJAHs(%> zQ;ltnOTvfUVpCI<&#DpfO_`Oewdtq*Z^|1_;eeLkj6B1P*(@oO4!1JB-a$(kO|c|` z-CWfwi&m%9Nn9s{$MZ^!f+h{rK~AkjCRMu6f@aH~mo9{G2}eXx`1cf76`7iOeu*jp zjEF{$tj)wX?EB~&ZQV|Hq*$i^qOaL_hIS`Fd{(_LWt~_(v1@$yuyxCfVq~Z@TAx%- zZl#s`i&or|hpvZ@>2D1rr5rph{wjWR91D}%)VXsYBs$Yln$$QnoixEduP2lZo0hg0y+M7utDly#oJB>vM5%A{oKWU^P=5Kx&$7Vr`_y!n0{ zeBBg_k23y7K>2D}>DYYtN!EZ2jf^^$Pu?=HpRoV6kH^FQr=%wtgEOANLj^&mEr~8C z)EELmw{QH59uI?uIQ>Zd=mpUUi+>$@Yb5j$x(DIgPqPTf&jKIT7gGAO_Z+J$29ZzY zE-1++u|M-)RI|vA|K+syfeb1)AH+6(EvidM?ZOJed|?b)Ooao&rTJA5f} zw~pSZgL*b5#>5imS#ed!fNh%y{sQktbB!WggZt@4W-bfI< zHRJ@4h7*FLF&s$6+E>sb*)$MhBX#s6eK0I)dkhDEvFCE!78>wRhTn<}ezYBe=X0mI z-y_f7d?wtpMh`{F35zGMzeCRMb1Qm32O0+mjpw!z zZXR26Q@qW%@=n!%MU7%8r?p~fQ_^~2f$vIY2YKipN*Qah$b9~zA(*#6n}F)+zIaVy z(JvuopexToj}WU2*-G~ zqpX86IlEC1cbQ!oo%_S}RMCpSM@tdzbu9MpPq#4Cu0qaNN59UOIPy z9;eVO^#hVHp}j~Ioo8nnD*t_s-N&anJm7O(#>Vewi&`$Av_S)#c8<ztielW@;n_ zf1aUaJbp3tC}E}u&nF(4`z&Bi^p*3@cZ?hUX5!c%L|4I$J4>dsB@!|yj&?irZhrH& zF#-91XaPWHt8xQlAGqsfDdmc1E(I8Lf6Qrd{~VAef_QAMTuk-2Q=fat=8uG)rAH{S z4R1Qtv!HEHIZyjqSbRn|Sr2IQf#`zo#xD9=*C-doJT3;iw-L|;%jWlXB(tAp(AHa0 zzD`oAfz=-Jeu!oN8ScK3yV0}oUa~@DAbP^^x3>nTep|R6=iZ<&s=rbF@Wq=;`ET!Q z0tVb)nR5o(EIAYtHn}a5xJ%jtVv(+GJHxPs3r!%oGKrOvg+(fU6gtU| zFvtDTD3@sIzZXyX{kN&cVX}y&c}xsh!+86OwTq#|`y6t0IcwM50AZ4updM3Yh2-Ug zS~<;J_8wHG_ok-K=u3ClZoWpNlXakn*A%OFUL<#h{j(h(ED{{)1byCaR{v?Hsth3= zw&M{o_LR$nXimuA99Ui-W;7&TkDt$x(t5zKvLBD`{vr5v37yiFy>jm?d|w6rB?dgq zRPWt(d3On2s=~mo?1B`}Fpqg+vpj$ZnV+VX(R)_p zmdcLVmO0b$qew-J^n+wq&>QfJJ9sDnp{np8X7u4TnnS60T<~HkvQJPKTv$oWp;SNH zCjY~=PHeW2o|X55sqZcS@J=t|Hl%Jm8I8g{N8oaVo%0pWKvXuPiwxWM zwf880K!r16zvKjnnRFPQBx206yjH)wtyQ!Mke!$p!KDq)5L`>dHMz}t!<@uaYZly;g znalXu*k#o;Vx2xk=+a|g=;iqF5-8CJ?IxK~yK!ECm{{N16HZVNdM~65g8Rv2e0laxrM+U4OCxG8hYHh|4=*CB{orGT-HL$; zcQrd%CnNZ;b|`MH-0CcL@JJP*oy!n3L^LpoESwM74qzdlet>nSwdL4+w_SKh%#IIWAh6ZYE8oSMZh ztQ!?`IPYyDu`^r=;7;!*sI5xm$n7um3*fzD1wJGQsS{B)tN)q5`xz%Uol z#!zMlzK*g>l=g+?ONHC(qAMPDw#iHq@zcqG)jYtgtI};H8D8+OypC5XObk+^BB2U7 zi=bcMjS@41+*BPYliyhhNf^dqpV`Gp^FObE7Rc_bRpU>e zdz_y(OQ6H+?lGbZi-alp-b9o+oe^!6ux7BHjr~N88YFc|U-iWEVSGPteX3X?838}r zMCgpEYsj^`F}Uw6P%TOt7b~%wDTQS= ztDZDuZ1w|DI^LW1dhP6iGT%?n%SJ0Rt`?e`ia5!dwE+g5G_2(Q`+@$QY^XNY58hX$ ziA=qJHjV!Tw<8&*Sb6yqzrN4t5bq#o{WIZUL|FsL%#CubqMu)<#{r|qS%x`(-T&yt zRea~nA%4TfXYkW?Cz(xy9D!sH=h8XAwb^}!P5y;kOn&fu?#mp%s`d#yr=F0l?0 zW$u*^DVv5Y@kUT8Lh3?}Wo09bk{Z34PrXj>hpbNAqmE9rJPrn_x63Z-28olI_n5Sr zU(kC0DrWSq*6Fl*%UE9+)Mal44c^43mH#=M%>0?@<*fT*3R6~W5u>?CK9db@hFD@h z)H0%hp?G}U(=OhjVRkk0WybZQ=liynP9DT2^RUKGso414KjJ}#Bt*3K>8c=oS6}DT z1(bS|vI^|!+avHY8T%{UcgFyWvPM>!@57LgX+-wKpsSnuupi1b2O>TnlLhJj8P`NI2 z6yzfpD^!blTuw8b7b;PdzH}6gsFxxZXhOmCdfw3Bt&b4x;sYef8?E>>5RJN{#hkHx zW?Pl0wEL8z1Ci?a5v|D)om(vV=^&~tmOVWoG@xx>V&2WTR7p*r{@c+rXX~C+uA63m zjIe&?v0A4PSoEJ@jmCWN#pKFl4({r}jZ9k~WQe^3?@RZRWxBK91lG$!pNLf|q(#C- zzr-l69)o<+*XhuTg=+I}O`e{tdEb4@jH^-_Opix!Ez_<+0atzT2v0au)1x*0eEVD- zhZ3)y^&cDcp)P;c2~rXd_^~e7<7yAmK*3(~{m+bkSI_TIE|36RC-VZ9fG|1F1&rDZ z4QTXhHxd!H>MjrB%RR)P&FshqUzR~9Vxu%TKIt5{lPF!l>0^W=!vx^&e^RdcafSk; z8rvQlJ+H<-l*cq{RXk0$)`pND7n3+m89cNb6W;oZxL|l#3TWD9Eva=>E}&K@`PxC(K3LSMFP*wI6ZAG5FZqsu8elG7lY&s1 z9e=u!%Hw)Ub*A>%RBuD1#~XO;hJwpf5Zic!qTt$-&%iJfPX{s$0k&5V?Gd-3hjyJ- zVTaSib1{7DKa=2mQo8QpC{RzExMtQ$u*7*2pZi}C1VEs5m~&1?n@PXro6x0OHsczs zk9#{=f(v83v?FZ3>4Wm4{u@d%QjW}{QeDmmmK5)cS~TR=CEQGvwKk?_$6OX1QbLre zQ=r}=%b4UYbUeFDq(Se*_>4Xy|1TQ3)@A)0HJxusW5%LYV2d88tgMB>GdP<@%x%S1 zx0?f&x+dNsjYLWh^Py=);Aa?NbLq?dkQ+s}c7Tnw%P#B0WGl;juzmG?1(8Z_T;MYD z9hZC0oKfNW(%T&{!Fadp&RkwYOKw))nS7dwW$i5eVT_ojs@8GA`qBY{GDkS5^)UW~ zO}p%mii{R`+f>9-w>==@-j->mfryIV~i&~OetsqS7v1Cb5?{)n3clwlky4)>f-j!~DB z+t2?>pY_>+s3QgjD~J8|bPXzHoXvdg4v}uNvyzxydlm8<(}oxB2pgO?N1Rri0KDaL zu!pMq68po!hsO(;anM=ApT+iXuWLLh&Qte%4A`D~Ad;`3s1#f*9ed{=sgDP{z50^_FZ<2U?qh=#oVq~Hv z#~Ua*jc9-30cuTr%Rc{)Wcc7^l`g-B?%-jJ9^)nAS4-gYs7?(WQ{|C&g!?!D9Q$SM zYm!g~ti7!I;DLM|g@kkCOql~ zlJnB#tl!SQQUa@tq#u&CoP&7gLI(ywkv#BmWlabma* zu2iHdOQ%)}K>Z{E2D^RU^-9IrY>uj#Cp7JXeYh|9xp(rT_#S@7l^r;9?;o=UQ_eTD z0&J%Diz9UqTkX$wF|04T#-g51N%%jf^dBqzXD$7|b;X?xD~I2F(P9WEEEf`~6q{O@ zREbay{Jpp-=)yuwu+=TRShO{#S`^x4x*T~#G&`FSz~gKHW_T||v??w$ap*DPrNzhq!>_A`)6-)<=>YoN%Hod?gQY#T`1?=2 zL5stBIqVpd7`h`7D7|Idsb*Op6@(w05g9~naXaTXNN)Wc+sBqPEGsWQHZ_X0GL^Cb zlBr~Tkv?W>`?ZC`OuvDziQ^EeOU%0kWI!H*?^6?h50FT?`GYU+62#WO$L|8l0mj_8-myEjLWr6ZCH*xV?F``~K zH?MVNj@+zg<#9>3>v;@n8ivyNH0BSK*Efwie%&|C-w3R7M|Af~T2BkwS$k2OruVLI zzT-N`;%*d-xgFg&bHF2Y87E!J>c2O2xN8cHYT1pl8Q=7&>1RpZSl`{?DwmDd(-uIw7O#UrmeV zYE_IGd-l4r>qG=iBgkA!DS<6AX>X_B>T>b%&8u(C-A;1n4N+B8Y*Q1<1 zM-k*9ai6S zb3-Kx#m|x3V%|IBP-A!duk&;@<4@><^%4IB)IRj@SwMTn!AoXT6nWC8Dk)-r>#jDf zQb0kRq8?ThoO}yAT&&P`5sK75ng5}WGZ9q6W!E+dVLtGma6Cp(O|rcn4u=ug@AAtv z6-1Iu0oF@9bdFEEl`KYdjn#9-1roe z@AFb1-4M)Zf|sKpKlJTQ%Tf$>SW*p${)>qyt@kSSf-H6Tb)s7TRAH{ld)Pc0m^B9E zVq+Q{bWFkdO7Zshd*k-ZMuejJL{QIsoJG*3&>BTJ>7}$60|jjU&V@(d#PTY_ANUIU zL?~kH-8auiiYniuQWm5=Bjs2yuo^2=Q>oh&eLC9E_hYfKC($Df6^ zytfnWHZr0-X;oO2hwWrD%VNl0psq)3Yp;1W30%zQUoQxGNx8mM!;T&H9eDms*Ivo0 zftIpZB{M2{SasO1YeN-{H?iHv1Leq^vfR+ z$)aOCg%Yv0ok(=AJUA;=NUsrJF-^-vJA|l3&V>*xP6r2Y+NFykK>LYY)-u zLBbv9GKJN-?DU|IORYC{{H5>Oole?4Xk(x4WRi&DyFBZ?OK}+8V;UvyxGPUBCjr&1_b8w-dtfO@CA#-IVeJ0Uoa&|`z zIvT-T^ymTi23u#4t z?@OgtBIVt68J)#@SkB2{)dZQIjA>0{Uvli?ew3_lnqBus4&!bPUK&r&*{QQ=y>yzj zSvP$8Om5*Tra4J^h{wU3(i6B4U_)%e5E`uHt{z4pi)Lh{D3vli3=$Y!>Wc3ObN3VDx;(~ zbK&T8R$q$~$Vzu;cLO3nZ-k<8M0WlmBf!2KwAn(VmC`z6uKTb9pb=}qlEo~BpjN184BC)KTZ_MlDt5>UOl9Wf{TxeHE zYQM?-mj%-vyKm&GiHt6Stey~8MKw{xdsr|`&$;drq^2|`f)XXbpny?c6h6+ZLFE9T zu6wnHZ+Y||IeWRznY-m@eOuG z*blD-sP(0+Mp`k>>6VH3jaOL1+;k6JZ{D+PL8nhEZ7$k+%i7<4cCFkSX}GHbG1R&Q zQ7;Y4q~pSKJXhk}-?Uy-lGL}^+6ssg!K+PkCsIea5-e=GI7w7A2lYK(u8JI4r%9mm z#{?L`zeBKn^&pzC7nk6NC2-NhU6>gKx9ze_6&T)H-_r7~*KqF)C;sya znh=jNV>n(yl!kYcSAHaZ5P|INNg=} z=|_jhuzNcJ;1$yNF5OAOIc$4H^aQU>vk$tdq6f@vx;l%a-k+zA`BD}!1H0bC*W-tc z=%*Xbuh=}aKK_MYDIgk-@&VxiBahpOGgoV1sH*4njQZ3I@bllw^K#{NZcX?#^z|lu z^a+JJ*p&*}Aq*OIMXZh=mxPK4#>!dK#Eh~uiBF-7NsM`e+2d9?eA@P?f1K?z;oHWZuzVBilb{@ktjJhiZBK^MGH71FUxEVzVLtoKYGv z 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 jd#+UW@l`(j_`njxgN@xNA+q?pU diff --git a/examples/ios_demo/src/index.html b/examples/ios_demo/src/index.html deleted file mode 100644 index 9679d1786..000000000 --- a/examples/ios_demo/src/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - Dioxus app - - - - -

- - - diff --git a/examples/ios_demo/src/lib_old.rs b/examples/ios_demo/src/lib_old.rs deleted file mode 100644 index bf433beb1..000000000 --- a/examples/ios_demo/src/lib_old.rs +++ /dev/null @@ -1,84 +0,0 @@ -use anyhow::Result; -use dioxus::prelude::*; -#[cfg(target_os = "android")] -use wry::android_binding; - -pub fn main() -> Result<()> { - init_logging(); - - // Right now we're going through dioxus-desktop but we'd like to go through dioxus-mobile - // That will seed the index.html with some fixes that prevent the page from scrolling/zooming etc - dioxus_desktop::launch_cfg( - app, - // Note that we have to disable the viewport goofiness of the browser. - // Dioxus_mobile should do this for us - Config::default().with_custom_index(include_str!("index.html").to_string()), - ); - - Ok(()) -} - -fn app(cx: Scope) -> Element { - let items = use_state(cx, || vec![1, 2, 3]); - - render! { - div { - h1 { "Hello, Mobile"} - div { margin_left: "auto", margin_right: "auto", width: "200px", padding: "10px", border: "1px solid black", - button { - onclick: move|_| { - let mut _items = items.make_mut(); - let len = _items.len() + 1; - _items.push(len); - }, - "Add item" - } - for item in items.iter() { - div { "- {item}" } - } - } - } - } -} - -#[cfg(target_os = "android")] -fn init_logging() { - android_logger::init_once( - android_logger::Config::default() - .with_min_level(log::Level::Trace) - .with_tag("rustnl-ios"), - ); -} - -#[cfg(not(target_os = "android"))] -fn init_logging() { - env_logger::init(); -} - -#[cfg(any(target_os = "android", target_os = "ios"))] -fn stop_unwind T, T>(f: F) -> T { - match std::panic::catch_unwind(std::panic::AssertUnwindSafe(f)) { - Ok(t) => t, - Err(err) => { - eprintln!("attempt to unwind out of `rust` with err: {:?}", err); - std::process::abort() - } - } -} - -#[cfg(any(target_os = "android", target_os = "ios"))] -fn _start_app() { - main().unwrap(); -} - -use dioxus_desktop::Config; - -#[no_mangle] -#[inline(never)] -#[cfg(any(target_os = "android", target_os = "ios"))] -pub extern "C" fn start_app() { - #[cfg(target_os = "android")] - android_binding!(com_example, rustnl_ios, _start_app); - #[cfg(target_os = "ios")] - _start_app() -} diff --git a/examples/ios_demo/.gitignore b/examples/mobile_demo/.gitignore similarity index 100% rename from examples/ios_demo/.gitignore rename to examples/mobile_demo/.gitignore diff --git a/examples/ios_demo/Cargo.toml b/examples/mobile_demo/Cargo.toml similarity index 76% rename from examples/ios_demo/Cargo.toml rename to examples/mobile_demo/Cargo.toml index 1d97fbddb..d22269a0c 100644 --- a/examples/ios_demo/Cargo.toml +++ b/examples/mobile_demo/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "rustnl-ios" +name = "mobile-demo" version = "0.1.0" authors = ["Jonathan Kelley "] edition = "2018" @@ -8,11 +8,11 @@ edition = "2018" crate-type = ["staticlib", "cdylib", "rlib"] [[bin]] -name = "rustnl-ios-desktop" +name = "mobile-demo-desktop" path = "gen/bin/desktop.rs" [package.metadata.cargo-android] -app-activity-name = "com.example.rustnl_ios.MainActivity" +app-activity-name = "com.example.mobile_demo.MainActivity" app-dependencies = [ "androidx.webkit:webkit:1.6.1", "androidx.appcompat:appcompat:1.6.1", @@ -25,9 +25,9 @@ app-theme-parent = "Theme.MaterialComponents.DayNight.DarkActionBar" vulkan-validation = false [package.metadata.cargo-android.env-vars] -WRY_ANDROID_PACKAGE = "com.example.rustnl_ios" -WRY_ANDROID_LIBRARY = "rustnl_ios" -WRY_ANDROID_KOTLIN_FILES_OUT_DIR = "/app/src/main/kotlin/com/example/rustnl_ios" +WRY_ANDROID_PACKAGE = "com.example.mobile_demo" +WRY_ANDROID_LIBRARY = "mobile_demo" +WRY_ANDROID_KOTLIN_FILES_OUT_DIR = "/app/src/main/kotlin/com/example/mobile_demo" [package.metadata.cargo-apple.ios] frameworks = ["WebKit"] @@ -35,12 +35,12 @@ frameworks = ["WebKit"] [dependencies] anyhow = "1.0.56" log = "0.4.11" -im-rc = "15.1.0" +wry = "0.28.0" dioxus = { path = "../../packages/dioxus" } -dioxus-desktop = { path = "../../packages/desktop", default-features = false, features = [ +dioxus-desktop = { path = "../../packages/desktop", features = [ "tokio_runtime", -] } -wry = { version = "0.28.0" } +], default-features = false } + [target.'cfg(target_os = "android")'.dependencies] android_logger = "0.9.0" diff --git a/examples/ios_demo/README.md b/examples/mobile_demo/README.md similarity index 99% rename from examples/ios_demo/README.md rename to examples/mobile_demo/README.md index a6877b276..7ea4303b8 100644 --- a/examples/ios_demo/README.md +++ b/examples/mobile_demo/README.md @@ -43,3 +43,4 @@ The common targets here are - armv7-linux-androideabi - i686-linux-android - x86_64-linux-android + diff --git a/examples/ios_demo/mobile.toml b/examples/mobile_demo/mobile.toml similarity index 64% rename from examples/ios_demo/mobile.toml rename to examples/mobile_demo/mobile.toml index 062cf8a35..3b8777250 100644 --- a/examples/ios_demo/mobile.toml +++ b/examples/mobile_demo/mobile.toml @@ -1,6 +1,6 @@ [app] -name = "rustnl-ios" -stylized-name = "Rustnl Ios" +name = "mobile-demo" +stylized-name = "Mobile Demo" domain = "example.com" template-pack = "wry" diff --git a/examples/ios_demo/src/lib.rs b/examples/mobile_demo/src/lib.rs similarity index 70% rename from examples/ios_demo/src/lib.rs rename to examples/mobile_demo/src/lib.rs index 37ce2328b..3a910661d 100644 --- a/examples/ios_demo/src/lib.rs +++ b/examples/mobile_demo/src/lib.rs @@ -1,13 +1,22 @@ use anyhow::Result; #[cfg(target_os = "android")] use wry::android_binding; +use wry::{ + application::{ + event::{Event, StartCause, WindowEvent}, + event_loop::{ControlFlow, EventLoop, EventLoopWindowTarget}, + window::WindowBuilder, + }, + http::Response, + webview::{WebView, WebViewBuilder}, +}; #[cfg(target_os = "android")] fn init_logging() { android_logger::init_once( android_logger::Config::default() .with_min_level(log::Level::Trace) - .with_tag("android-taurio"), + .with_tag("mobile-demo"), ); } @@ -37,7 +46,7 @@ fn _start_app() { #[cfg(any(target_os = "android", target_os = "ios"))] pub extern "C" fn start_app() { #[cfg(target_os = "android")] - android_binding!(com_example, android_taurio, _start_app); + android_binding!(com_example, mobile_demo, _start_app); #[cfg(target_os = "ios")] _start_app() } @@ -46,11 +55,12 @@ pub fn main() -> Result<()> { init_logging(); use dioxus::prelude::*; - fn app(cx: Scope) -> Element { - render!("hello dioxus") - } - dioxus_desktop::launch(app); + dioxus_desktop::launch(|cx| { + cx.render(rsx! { + "hello world!" + }) + }); Ok(()) } diff --git a/packages/desktop/src/lib.rs b/packages/desktop/src/lib.rs index 8b3bcf181..a8b0fc3ba 100644 --- a/packages/desktop/src/lib.rs +++ b/packages/desktop/src/lib.rs @@ -123,16 +123,16 @@ pub fn launch_with_props(root: Component

, props: P, cfg: Config) let proxy = event_loop.create_proxy(); // Intialize hot reloading if it is enabled - // #[cfg(all(feature = "hot-reload", debug_assertions))] - // dioxus_hot_reload::connect({ - // let proxy = proxy.clone(); - // move |template| { - // let _ = proxy.send_event(UserWindowEvent( - // EventData::HotReloadEvent(template), - // unsafe { WindowId::dummy() }, - // )); - // } - // }); + #[cfg(all(feature = "hot-reload", debug_assertions))] + dioxus_hot_reload::connect({ + let proxy = proxy.clone(); + move |template| { + let _ = proxy.send_event(UserWindowEvent( + EventData::HotReloadEvent(template), + unsafe { WindowId::dummy() }, + )); + } + }); // We start the tokio runtime *on this thread* // Any future we poll later will use this runtime to spawn tasks and for IO From 10a3b228f6e5967fbdb3a1cc3323818c00e44f72 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 5 Jul 2023 15:19:26 -0700 Subject: [PATCH 421/459] Add some logging and debug --- examples/mobile_demo/src/index.html | 12 +++++++ examples/mobile_demo/src/lib.rs | 52 ++++++++++++++++++++--------- packages/core/src/arena.rs | 2 +- 3 files changed, 49 insertions(+), 17 deletions(-) create mode 100644 examples/mobile_demo/src/index.html diff --git a/examples/mobile_demo/src/index.html b/examples/mobile_demo/src/index.html new file mode 100644 index 000000000..b0e6290e1 --- /dev/null +++ b/examples/mobile_demo/src/index.html @@ -0,0 +1,12 @@ + + + + Dioxus app + + + + +

+ + + diff --git a/examples/mobile_demo/src/lib.rs b/examples/mobile_demo/src/lib.rs index 3a910661d..9d533e52d 100644 --- a/examples/mobile_demo/src/lib.rs +++ b/examples/mobile_demo/src/lib.rs @@ -1,15 +1,8 @@ use anyhow::Result; +use dioxus::prelude::*; +use dioxus_desktop::Config; #[cfg(target_os = "android")] use wry::android_binding; -use wry::{ - application::{ - event::{Event, StartCause, WindowEvent}, - event_loop::{ControlFlow, EventLoop, EventLoopWindowTarget}, - window::WindowBuilder, - }, - http::Response, - webview::{WebView, WebViewBuilder}, -}; #[cfg(target_os = "android")] fn init_logging() { @@ -54,13 +47,40 @@ pub extern "C" fn start_app() { pub fn main() -> Result<()> { init_logging(); - use dioxus::prelude::*; - - dioxus_desktop::launch(|cx| { - cx.render(rsx! { - "hello world!" - }) - }); + // Right now we're going through dioxus-desktop but we'd like to go through dioxus-mobile + // That will seed the index.html with some fixes that prevent the page from scrolling/zooming etc + dioxus_desktop::launch_cfg( + app, + // Note that we have to disable the viewport goofiness of the browser. + // Dioxus_mobile should do this for us + Config::default().with_custom_index(include_str!("index.html").to_string()), + ); Ok(()) } + +fn app(cx: Scope) -> Element { + let items = cx.use_hook(|| vec![1, 2, 3]); + + log::debug!("Hello from the app"); + + render! { + div { + h1 { "Hello, Mobile"} + div { margin_left: "auto", margin_right: "auto", width: "200px", padding: "10px", border: "1px solid black", + button { + onclick: move|_| { + println!("Clicked!"); + items.push(items.len()); + cx.needs_update_any(ScopeId(0)); + println!("Requested update"); + }, + "Add item" + } + for item in items.iter() { + div { "- {item}" } + } + } + } + } +} diff --git a/packages/core/src/arena.rs b/packages/core/src/arena.rs index caa863adf..ec9cf1684 100644 --- a/packages/core/src/arena.rs +++ b/packages/core/src/arena.rs @@ -22,7 +22,7 @@ pub(crate) struct ElementRef { pub template: Option>>, } -#[derive(Clone, Copy)] +#[derive(Clone, Copy, Debug)] pub enum ElementPath { Deep(&'static [u8]), Root(usize), From 60a873a49c04081b50f82ce01535827c02a86677 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 5 Jul 2023 15:20:54 -0700 Subject: [PATCH 422/459] leave hotreload --- Cargo.toml | 1 - packages/desktop/Cargo.toml | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index fcf4b9921..b1e2de8d4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,7 +34,6 @@ members = [ # Full project examples "examples/tailwind", "examples/PWA-example", - # "examples/ios_demo", # Playwrite tests "playwrite-tests/liveview", "playwrite-tests/web", diff --git a/packages/desktop/Cargo.toml b/packages/desktop/Cargo.toml index f83864afc..ceb54e8f7 100644 --- a/packages/desktop/Cargo.toml +++ b/packages/desktop/Cargo.toml @@ -15,7 +15,7 @@ keywords = ["dom", "ui", "gui", "react"] dioxus-core = { workspace = true, features = ["serialize"] } dioxus-html = { workspace = true, features = ["serialize", "native-bind"] } dioxus-interpreter-js = { workspace = true } -# dioxus-hot-reload = { workspace = true, optional = true } +dioxus-hot-reload = { workspace = true, optional = true } serde = "1.0.136" serde_json = "1.0.79" @@ -51,12 +51,12 @@ objc_id = "0.1.1" core-foundation = "0.9.3" [features] -default = ["tokio_runtime"] +default = ["tokio_runtime", "hot-reload"] tokio_runtime = ["tokio"] fullscreen = ["wry/fullscreen"] transparent = ["wry/transparent"] tray = ["wry/tray"] -# hot-reload = ["dioxus-hot-reload"] +hot-reload = ["dioxus-hot-reload"] [dev-dependencies] dioxus-core-macro = { workspace = true } From b5ccb560382a7fa81fe542f4e9b199d2396774a8 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 5 Jul 2023 15:33:25 -0700 Subject: [PATCH 423/459] Fix clippy --- packages/desktop/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/desktop/src/lib.rs b/packages/desktop/src/lib.rs index a8b0fc3ba..17e3d388c 100644 --- a/packages/desktop/src/lib.rs +++ b/packages/desktop/src/lib.rs @@ -193,7 +193,7 @@ pub fn launch_with_props(root: Component

, props: P, cfg: Config) let handler = create_new_window( cfg, - &event_loop, + event_loop, &proxy, VirtualDom::new_with_props(root, props), &queue, From f2c1c05792cc365058b2cbf038b420d140b1d62f Mon Sep 17 00:00:00 2001 From: traxys Date: Mon, 3 Jul 2023 15:13:35 +0200 Subject: [PATCH 424/459] Add a helper macro for properties & async The to_owned macro is helpful to handle hooks with async components, but when using properties it can be problematic because `cx` will be moved in the async block, and will result in a compilation error. This adds a new helper that allows to make either hooks or properties owned. --- packages/hooks/src/lib.rs | 41 +++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/packages/hooks/src/lib.rs b/packages/hooks/src/lib.rs index 1e718eda3..21795a9d6 100644 --- a/packages/hooks/src/lib.rs +++ b/packages/hooks/src/lib.rs @@ -1,24 +1,53 @@ #[macro_export] -/// A helper macro for using hooks in async environements. +/// A helper macro for using hooks and properties in async environements. /// /// # Usage /// /// -/// ```ignore +/// ``` +/// # use dioxus::prelude::*; +/// # +/// # #[derive(Props, PartialEq)] +/// # struct Props { +/// # prop: String, +/// # } +/// # fn Component(cx: Scope) -> Element { +/// /// let (data) = use_ref(cx, || {}); /// /// let handle_thing = move |_| { -/// to_owned![data] +/// to_owned![data, cx.props.prop]; /// cx.spawn(async move { /// // do stuff /// }); -/// } +/// }; +/// # handle_thing(()); +/// # None } /// ``` macro_rules! to_owned { - ($($es:ident),+) => {$( + // Rule matching simple symbols without a path + ($es:ident $(, $($rest:tt)*)?) => { #[allow(unused_mut)] let mut $es = $es.to_owned(); - )*} + $( to_owned![$($rest)*] )? + }; + + // We need to find the last element in a path, for this we need to unstack the path part by + // part using, separating what we have with a '@' + ($($deref:ident).* $(, $($rest:tt)*)?) => { + to_owned![@ $($deref).* $(, $($rest)*)?] + }; + + // Take the head of the path and add it to the list of $deref + ($($deref:ident)* @ $head:ident $( . $tail:ident)+ $(, $($rest:tt)*)?) => { + to_owned![$($deref)* $head @ $($tail).+ $(, $($rest)*)?] + }; + // We have exhausted the path, use the last as a name + ($($deref:ident)* @ $last:ident $(, $($rest:tt)*)? ) => { + #[allow(unused_mut)] + let mut $last = $($deref .)* $last .to_owned(); + $(to_owned![$($rest)*])? + }; } mod usecontext; From 1f3f72edc30e98fc0e61d1f940e49828beb1dc76 Mon Sep 17 00:00:00 2001 From: marc2332 Date: Thu, 6 Jul 2023 17:23:37 +0200 Subject: [PATCH 425/459] updated --- docs/guide/src/en/async/use_effect.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/docs/guide/src/en/async/use_effect.md b/docs/guide/src/en/async/use_effect.md index bd73453a9..f509921fc 100644 --- a/docs/guide/src/en/async/use_effect.md +++ b/docs/guide/src/en/async/use_effect.md @@ -1,14 +1,12 @@ # UseEffect -[`use_effect`](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_effect.html) provides a future that executes after the hooks have been applied. - -Whenever the hooks [dependencies](#dependencies) change, the future will be re-evaluated. This is useful to syncrhonize with external events. +[`use_effect`](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_effect.html) let's you run a callback that returns a future, only it's [dependencies](#dependencies) change. This is useful to syncrhonize with external events. ## Dependencies -You can make the future re-run when some value changes. For example, you might want to fetch a user's data only when the user id changes. You can provide a tuple of "dependencies" to the hook. It will automatically re-run the future when any of those dependencies change. +You can make the callback re-run when some value changes. For example, you might want to fetch a user's data only when the user id changes. You can provide a tuple of "dependencies" to the hook. It will automatically re-run it when any of those dependencies change. -Example: +## Example ```rust, no_run #[inline_props] @@ -24,6 +22,12 @@ fn Profile(cx: Scope, id: usize) -> Element { } }); + // Because the dependencies are empty, this will only run once. + // An empty tuple is always equal to an empty tuple. + use_effect(cx, (), |()| async move { + println!("Hello, World!"); + }); + let name = name.get().clone().unwrap_or("Loading...".to_string()); render!( From 4abf996b864154fa0f72fa23f2fa5b0145a45010 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Thu, 6 Jul 2023 10:57:52 -0700 Subject: [PATCH 426/459] fix clippy hinting around trait --- packages/desktop/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/desktop/src/lib.rs b/packages/desktop/src/lib.rs index 1e5069c9d..cb295a853 100644 --- a/packages/desktop/src/lib.rs +++ b/packages/desktop/src/lib.rs @@ -442,7 +442,7 @@ fn send_edits(edits: Mutations, webview: &WebView) { } /// Different hide implementations per platform -#[allow(unused_variables)] +#[allow(unused)] fn hide_app_window(webview: &WebView) { #[cfg(target_os = "windows")] { From 47513e8b9e7ec1b1478b34c9df4f9fffd1bea90c Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Thu, 6 Jul 2023 12:43:04 -0700 Subject: [PATCH 427/459] Use boxes instead of bumpslab for hooks --- packages/core/src/arena.rs | 5 +---- packages/core/src/scope_arena.rs | 3 +-- packages/core/src/scopes.rs | 17 ++++++++--------- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/packages/core/src/arena.rs b/packages/core/src/arena.rs index ec9cf1684..04ffb50d1 100644 --- a/packages/core/src/arena.rs +++ b/packages/core/src/arena.rs @@ -4,7 +4,6 @@ use crate::{ innerlude::DirtyScope, nodes::RenderReturn, nodes::VNode, virtual_dom::VirtualDom, AttributeValue, DynamicNode, ScopeId, }; -use bumpalo::boxed::Box as BumpBox; /// An Element's unique identifier. /// @@ -110,9 +109,7 @@ impl VirtualDom { // Drop all the hooks once the children are dropped // this means we'll drop hooks bottom-up - for hook in scope.hook_list.get_mut().drain(..) { - drop(unsafe { BumpBox::from_raw(hook) }); - } + scope.hooks.get_mut().clear(); // Drop all the futures once the hooks are dropped for task_id in scope.spawned_tasks.borrow_mut().drain() { diff --git a/packages/core/src/scope_arena.rs b/packages/core/src/scope_arena.rs index 548329354..a8a7319aa 100644 --- a/packages/core/src/scope_arena.rs +++ b/packages/core/src/scope_arena.rs @@ -38,8 +38,7 @@ impl VirtualDom { node_arena_2: BumpFrame::new(0), spawned_tasks: Default::default(), render_cnt: Default::default(), - hook_arena: Default::default(), - hook_list: Default::default(), + hooks: Default::default(), hook_idx: Default::default(), shared_contexts: Default::default(), borrowed_props: Default::default(), diff --git a/packages/core/src/scopes.rs b/packages/core/src/scopes.rs index 5601d57fe..2e4bf3651 100644 --- a/packages/core/src/scopes.rs +++ b/packages/core/src/scopes.rs @@ -15,7 +15,7 @@ use rustc_hash::{FxHashMap, FxHashSet}; use slab::{Slab, VacantEntry}; use std::{ any::{Any, TypeId}, - cell::{Cell, RefCell}, + cell::{Cell, RefCell, UnsafeCell}, fmt::{Arguments, Debug}, future::Future, ops::{Index, IndexMut}, @@ -170,8 +170,7 @@ pub struct ScopeState { pub(crate) height: u32, - pub(crate) hook_arena: Bump, - pub(crate) hook_list: RefCell>, + pub(crate) hooks: RefCell>>>, pub(crate) hook_idx: Cell, pub(crate) shared_contexts: RefCell>>, @@ -641,18 +640,18 @@ impl<'src> ScopeState { #[allow(clippy::mut_from_ref)] pub fn use_hook(&self, initializer: impl FnOnce() -> State) -> &mut State { let cur_hook = self.hook_idx.get(); - let mut hook_list = self.hook_list.try_borrow_mut().expect("The hook list is already borrowed: This error is likely caused by trying to use a hook inside a hook which violates the rules of hooks."); + let mut hooks = self.hooks.try_borrow_mut().expect("The hook list is already borrowed: This error is likely caused by trying to use a hook inside a hook which violates the rules of hooks."); - if cur_hook >= hook_list.len() { - hook_list.push(self.hook_arena.alloc(initializer())); + if cur_hook >= hooks.len() { + hooks.push(Box::new(UnsafeCell::new(initializer()))); } - hook_list + hooks .get(cur_hook) .and_then(|inn| { self.hook_idx.set(cur_hook + 1); - let raw_box = unsafe { &mut **inn }; - raw_box.downcast_mut::() + let raw_ref = unsafe { &mut *inn.get() }; + raw_ref.downcast_mut::() }) .expect( r###" From 3a1b22aec26e68a4af664f765d2e88156f7c02c0 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Fri, 7 Jul 2023 12:04:09 -0700 Subject: [PATCH 428/459] Use linear scans on contexts --- packages/core/src/scopes.rs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/core/src/scopes.rs b/packages/core/src/scopes.rs index 2e4bf3651..56ca77608 100644 --- a/packages/core/src/scopes.rs +++ b/packages/core/src/scopes.rs @@ -11,7 +11,7 @@ use crate::{ }; use bumpalo::{boxed::Box as BumpBox, Bump}; use bumpslab::{BumpSlab, Slot}; -use rustc_hash::{FxHashMap, FxHashSet}; +use rustc_hash::FxHashSet; use slab::{Slab, VacantEntry}; use std::{ any::{Any, TypeId}, @@ -173,7 +173,7 @@ pub struct ScopeState { pub(crate) hooks: RefCell>>>, pub(crate) hook_idx: Cell, - pub(crate) shared_contexts: RefCell>>, + pub(crate) shared_contexts: RefCell)>>, pub(crate) tasks: Rc, pub(crate) spawned_tasks: RefCell>, @@ -347,7 +347,9 @@ impl<'src> ScopeState { pub fn has_context(&self) -> Option { self.shared_contexts .borrow() - .get(&TypeId::of::())? + .iter() + .find(|(k, _)| *k == TypeId::of::()) + .map(|(_, v)| v)? .downcast_ref::() .cloned() } @@ -364,8 +366,13 @@ impl<'src> ScopeState { while let Some(parent_ptr) = search_parent { // safety: all parent pointers are valid thanks to the bump arena let parent = unsafe { &*parent_ptr }; - if let Some(shared) = parent.shared_contexts.borrow().get(&TypeId::of::()) { - return shared.downcast_ref::().cloned(); + if let Some(shared) = parent + .shared_contexts + .borrow() + .iter() + .find(|(k, _)| *k == TypeId::of::()) + { + return shared.1.downcast_ref::().cloned(); } search_parent = parent.parent; } @@ -398,7 +405,7 @@ impl<'src> ScopeState { self.shared_contexts .borrow_mut() - .insert(TypeId::of::(), Box::new(value)); + .push((TypeId::of::(), Box::new(value))); value2 } From 1489492ec4c920a211d50b27a70830ccf9962711 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Fri, 7 Jul 2023 12:18:15 -0700 Subject: [PATCH 429/459] Reuse existing slots in provide context --- packages/core/src/scopes.rs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/core/src/scopes.rs b/packages/core/src/scopes.rs index 56ca77608..2b9f32f8d 100644 --- a/packages/core/src/scopes.rs +++ b/packages/core/src/scopes.rs @@ -401,13 +401,21 @@ impl<'src> ScopeState { /// } /// ``` pub fn provide_context(&self, value: T) -> T { - let value2 = value.clone(); + let mut contexts = self.shared_contexts.borrow_mut(); - self.shared_contexts - .borrow_mut() - .push((TypeId::of::(), Box::new(value))); + // If the context exists, swap it out for the new value + for ctx in contexts.iter_mut() { + // Swap the ptr directly + if let Some(ctx) = ctx.1.downcast_mut::() { + std::mem::swap(ctx, &mut value.clone()); + return value; + } + } - value2 + // Else, just push it + contexts.push((TypeId::of::(), Box::new(value.clone()))); + + value } /// Pushes the future onto the poll queue to be polled after the component renders. From a8a8188e7b0768ed06ae5edbf68d30b255e8ae89 Mon Sep 17 00:00:00 2001 From: Miles Murgaw Date: Fri, 7 Jul 2023 21:15:13 -0400 Subject: [PATCH 430/459] fix: readme awesome link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9a1c347c9..28f27cd23 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ - + Awesome Page From 3f74b10e7ccc56410269afd8db63d45b3ca0b998 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Fri, 7 Jul 2023 18:17:42 -0700 Subject: [PATCH 431/459] Feat: add dx as a package and move plugin to feature --- Cargo.toml | 2 +- packages/cli/Cargo.toml | 34 ++++++++++++++++++------------ packages/cli/src/cli/build/mod.rs | 3 +++ packages/cli/src/cli/mod.rs | 5 ++++- packages/cli/src/cli/plugin/mod.rs | 2 ++ packages/cli/src/lib.rs | 1 + packages/cli/src/main.rs | 12 ++++++++--- packages/cli/src/server/mod.rs | 15 ++++++++++--- 8 files changed, 52 insertions(+), 22 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b1e2de8d4..9b36a1fef 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -62,7 +62,7 @@ dioxus-tui = { path = "packages/dioxus-tui" } rink = { path = "packages/rink" } dioxus-native-core = { path = "packages/native-core" } dioxus-native-core-macro = { path = "packages/native-core-macro" } -dioxus-rsx-rosetta = { path = "packages/rsx-rosetta" } +rsx-rosetta = { path = "packages/rsx-rosetta" } dioxus-signals = { path = "packages/signals" } dioxus-hot-reload = { path = "packages/hot-reload" } dioxus-fullstack = { path = "packages/fullstack" } diff --git a/packages/cli/Cargo.toml b/packages/cli/Cargo.toml index de3644f9f..7d4a88fd2 100644 --- a/packages/cli/Cargo.toml +++ b/packages/cli/Cargo.toml @@ -9,7 +9,6 @@ license = "MIT/Apache-2.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] - # cli core clap = { version = "4.2", features = ["derive"] } thiserror = "1.0.30" @@ -58,10 +57,7 @@ flate2 = "1.0.22" tar = "0.4.38" zip = "0.6.2" tower = "0.4.12" - syn = { version = "1.0", features = ["full", "extra-traits"] } - - proc-macro2 = { version = "1.0", features = ["span-locations"] } lazy_static = "1.4.0" @@ -72,21 +68,31 @@ mlua = { version = "0.8.1", features = [ "async", "send", "macros", -] } +], optional = true } ctrlc = "3.2.3" -# dioxus-rsx = "0.0.1" gitignore = "1.0.7" - -dioxus-rsx = { git = "https://github.com/DioxusLabs/dioxus" } -dioxus-html = { git = "https://github.com/DioxusLabs/dioxus", features = ["hot-reload-context"] } -dioxus-core = { git = "https://github.com/DioxusLabs/dioxus", features = ["serialize"] } -dioxus-autofmt = { git = "https://github.com/DioxusLabs/dioxus" } -rsx-rosetta = { git = "https://github.com/DioxusLabs/dioxus" } open = "4.1.0" cargo-generate = "0.18.3" toml_edit = "0.19.11" +# dioxus-rsx = "0.0.1" + +dioxus-autofmt = { workspace = true } +rsx-rosetta = { workspace = true } +dioxus-rsx = { workspace = true } +dioxus-html = { workspace = true, features = ["hot-reload-context"] } +dioxus-core = { workspace = true, features = ["serialize"] } + +[features] +default = [] +plugin = ["mlua"] + +# install path dx and dioxus as the same command +# so, they're not really aliases +# eventually dx will defer to the right version of dioxus +[[bin]] +path = "src/main.rs" +name = "dioxus" [[bin]] path = "src/main.rs" - -name = "dioxus" +name = "dx" diff --git a/packages/cli/src/cli/build/mod.rs b/packages/cli/src/cli/build/mod.rs index 8fbe132ae..b4df33a42 100644 --- a/packages/cli/src/cli/build/mod.rs +++ b/packages/cli/src/cli/build/mod.rs @@ -1,3 +1,4 @@ +#[cfg(feature = "plugin")] use crate::plugin::PluginManager; use super::*; @@ -38,6 +39,7 @@ impl Build { .clone() }); + #[cfg(feature = "plugin")] let _ = PluginManager::on_build_start(&crate_config, &platform); match platform.as_str() { @@ -69,6 +71,7 @@ impl Build { )?; file.write_all(temp.as_bytes())?; + #[cfg(feature = "plugin")] let _ = PluginManager::on_build_finish(&crate_config, &platform); Ok(()) diff --git a/packages/cli/src/cli/mod.rs b/packages/cli/src/cli/mod.rs index 4ad4fcd89..0dff0feff 100644 --- a/packages/cli/src/cli/mod.rs +++ b/packages/cli/src/cli/mod.rs @@ -68,6 +68,7 @@ pub enum Commands { Config(config::Config), /// Manage plugins for dioxus cli + #[cfg(feature = "plugin")] #[clap(subcommand)] Plugin(plugin::Plugin), } @@ -81,9 +82,11 @@ impl Display for Commands { Commands::Create(_) => write!(f, "create"), Commands::Clean(_) => write!(f, "clean"), Commands::Config(_) => write!(f, "config"), - Commands::Plugin(_) => write!(f, "plugin"), Commands::Version(_) => write!(f, "version"), Commands::Autoformat(_) => write!(f, "fmt"), + + #[cfg(feature = "plugin")] + Commands::Plugin(_) => write!(f, "plugin"), } } } diff --git a/packages/cli/src/cli/plugin/mod.rs b/packages/cli/src/cli/plugin/mod.rs index d838a84a5..812c3ae1c 100644 --- a/packages/cli/src/cli/plugin/mod.rs +++ b/packages/cli/src/cli/plugin/mod.rs @@ -1,3 +1,5 @@ +#![cfg(feature = "plugin")] + use super::*; /// Build the Rust WASM app and all of its assets. diff --git a/packages/cli/src/lib.rs b/packages/cli/src/lib.rs index 13758a828..2d5f6dfcb 100644 --- a/packages/cli/src/lib.rs +++ b/packages/cli/src/lib.rs @@ -21,4 +21,5 @@ pub use error::*; pub mod logging; pub use logging::*; +#[cfg(feature = "plugin")] pub mod plugin; diff --git a/packages/cli/src/main.rs b/packages/cli/src/main.rs index f3c5c6e48..f2007aa43 100644 --- a/packages/cli/src/main.rs +++ b/packages/cli/src/main.rs @@ -1,6 +1,10 @@ use anyhow::anyhow; use clap::Parser; -use dioxus_cli::{plugin::PluginManager, *}; +use dioxus_cli::*; + +#[cfg(feature = "plugin")] +use dioxus_cli::plugin::PluginManager; + use Commands::*; #[tokio::main] @@ -9,14 +13,15 @@ async fn main() -> anyhow::Result<()> { set_up_logging(); - let dioxus_config = DioxusConfig::load() + let _dioxus_config = DioxusConfig::load() .map_err(|e| anyhow!("Failed to load `Dioxus.toml` because: {e}"))? .unwrap_or_else(|| { log::warn!("You appear to be creating a Dioxus project from scratch; we will use the default config"); DioxusConfig::default() }); - PluginManager::init(dioxus_config.plugin) + #[cfg(feature = "plugin")] + PluginManager::init(_dioxus_config.plugin) .map_err(|e| anyhow!("🚫 Plugin system initialization failed: {e}"))?; match args.action { @@ -45,6 +50,7 @@ async fn main() -> anyhow::Result<()> { .config() .map_err(|e| anyhow!("🚫 Configuring new project failed: {}", e)), + #[cfg(feature = "plugin")] Plugin(opts) => opts .plugin() .await diff --git a/packages/cli/src/server/mod.rs b/packages/cli/src/server/mod.rs index e7c62db82..23ac291e9 100644 --- a/packages/cli/src/server/mod.rs +++ b/packages/cli/src/server/mod.rs @@ -1,4 +1,4 @@ -use crate::{builder, plugin::PluginManager, serve::Serve, BuildResult, CrateConfig, Result}; +use crate::{builder, serve::Serve, BuildResult, CrateConfig, Result}; use axum::{ body::{Full, HttpBody}, extract::{ws::Message, Extension, TypedHeader, WebSocketUpgrade}, @@ -29,6 +29,10 @@ use tower_http::{ cors::{Any, CorsLayer}, ServiceBuilderExt, }; + +#[cfg(feature = "plugin")] +use plugin::PluginManager; + mod proxy; pub struct BuildManager { @@ -63,9 +67,10 @@ struct WsReloadState { pub async fn startup(port: u16, config: CrateConfig, start_browser: bool) -> Result<()> { // ctrl-c shutdown checker - let crate_config = config.clone(); + let _crate_config = config.clone(); let _ = ctrlc::set_handler(move || { - let _ = PluginManager::on_serve_shutdown(&crate_config); + #[cfg(feature = "plugin")] + let _ = PluginManager::on_serve_shutdown(&_crate_config); std::process::exit(0); }); @@ -146,6 +151,7 @@ pub async fn startup_hot_reload( log::info!("🚀 Starting development server..."); + #[cfg(feature = "plugin")] PluginManager::on_serve_start(&config)?; let dist_path = config.out_dir.clone(); @@ -426,6 +432,8 @@ pub async fn startup_default( elapsed_time: res.elapsed_time, }, ); + + #[cfg(feature = "plugin")] let _ = PluginManager::on_serve_rebuild( chrono::Local::now().timestamp(), e.paths, @@ -459,6 +467,7 @@ pub async fn startup_default( }, ); + #[cfg(feature = "plugin")] PluginManager::on_serve_start(&config)?; let cors = CorsLayer::new() From 9fe7dc9b9199202d7d12174f50e5c6aac438bb3d Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Fri, 7 Jul 2023 18:28:07 -0700 Subject: [PATCH 432/459] clippy --- packages/cli/src/server/mod.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/cli/src/server/mod.rs b/packages/cli/src/server/mod.rs index 23ac291e9..6575875f7 100644 --- a/packages/cli/src/server/mod.rs +++ b/packages/cli/src/server/mod.rs @@ -422,6 +422,8 @@ pub async fn startup_default( match build_manager.rebuild() { Ok(res) => { last_update_time = chrono::Local::now().timestamp(); + + #[allow(clippy::redundant_clone)] print_console_info( &watcher_ip, port, From 32d4472bfd2c2654ba75146e8ba9cbd284cbef5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Esp=C3=ADn?= Date: Sat, 8 Jul 2023 18:04:27 +0200 Subject: [PATCH 433/459] fix: Remove duplicated doc links and improved some descriptions (#1167) --- packages/autofmt/Cargo.toml | 1 - packages/cli/Cargo.toml | 3 +-- packages/core-macro/Cargo.toml | 2 -- packages/core/Cargo.toml | 4 ---- packages/desktop/Cargo.toml | 6 ++---- packages/dioxus-tui/Cargo.toml | 5 +---- packages/dioxus/Cargo.toml | 5 ++--- packages/fermi/Cargo.toml | 3 +-- packages/fullstack/Cargo.toml | 3 --- packages/hooks/Cargo.toml | 3 +-- packages/hot-reload/Cargo.toml | 5 +---- packages/html/Cargo.toml | 1 - packages/interpreter/Cargo.toml | 2 -- packages/liveview/Cargo.toml | 6 +----- packages/mobile/Cargo.toml | 4 +--- packages/native-core-macro/Cargo.toml | 3 --- packages/native-core/Cargo.toml | 2 -- packages/rink/Cargo.toml | 3 --- packages/router/Cargo.toml | 2 -- packages/ssr/Cargo.toml | 5 +---- packages/web/Cargo.toml | 5 ++--- 21 files changed, 14 insertions(+), 59 deletions(-) diff --git a/packages/autofmt/Cargo.toml b/packages/autofmt/Cargo.toml index 1c947dc21..183d471e9 100644 --- a/packages/autofmt/Cargo.toml +++ b/packages/autofmt/Cargo.toml @@ -7,7 +7,6 @@ description = "Autofomatter for Dioxus RSX" license = "MIT/Apache-2.0" repository = "https://github.com/DioxusLabs/dioxus/" homepage = "https://dioxuslabs.com" -documentation = "https://dioxuslabs.com" keywords = ["dom", "ui", "gui", "react"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/packages/cli/Cargo.toml b/packages/cli/Cargo.toml index 7d4a88fd2..4a3c0b36c 100644 --- a/packages/cli/Cargo.toml +++ b/packages/cli/Cargo.toml @@ -4,10 +4,9 @@ version = "0.3.1" authors = ["Jonathan Kelley"] edition = "2021" description = "CLI tool for developing, testing, and publishing Dioxus apps" +repository = "https://github.com/DioxusLabs/dioxus/" license = "MIT/Apache-2.0" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] # cli core clap = { version = "4.2", features = ["derive"] } diff --git a/packages/core-macro/Cargo.toml b/packages/core-macro/Cargo.toml index 0b238bbc4..92408725a 100644 --- a/packages/core-macro/Cargo.toml +++ b/packages/core-macro/Cargo.toml @@ -7,9 +7,7 @@ description = "Core macro for Dioxus Virtual DOM" license = "MIT/Apache-2.0" repository = "https://github.com/DioxusLabs/dioxus/" homepage = "https://dioxuslabs.com" -documentation = "https://dioxuslabs.com" keywords = ["dom", "ui", "gui", "react"] -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [lib] proc-macro = true diff --git a/packages/core/Cargo.toml b/packages/core/Cargo.toml index 3fd0c62cf..48391456d 100644 --- a/packages/core/Cargo.toml +++ b/packages/core/Cargo.toml @@ -7,12 +7,8 @@ description = "Core functionality for Dioxus - a concurrent renderer-agnostic Vi license = "MIT/Apache-2.0" repository = "https://github.com/DioxusLabs/dioxus/" homepage = "https://dioxuslabs.com" -documentation = "https://dioxuslabs.com" keywords = ["dom", "ui", "gui", "react"] - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] # Bumpalo is used as a micro heap backing each component bumpalo = { version = "3.6", features = ["collections", "boxed"] } diff --git a/packages/desktop/Cargo.toml b/packages/desktop/Cargo.toml index 20d01e227..05c746a52 100644 --- a/packages/desktop/Cargo.toml +++ b/packages/desktop/Cargo.toml @@ -3,13 +3,11 @@ name = "dioxus-desktop" version = "0.3.0" authors = ["Jonathan Kelley"] edition = "2018" -description = "Dioxus VirtualDOM renderer for a remote webview instance" +description = "WebView renderer for Dioxus" license = "MIT/Apache-2.0" repository = "https://github.com/DioxusLabs/dioxus/" -homepage = "https://dioxuslabs.com" -documentation = "https://dioxuslabs.com" +homepage = "https://dioxuslabs.com/docs/0.3/guide/en/getting_started/desktop.html" keywords = ["dom", "ui", "gui", "react"] -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] dioxus-core = { workspace = true, features = ["serialize"] } diff --git a/packages/dioxus-tui/Cargo.toml b/packages/dioxus-tui/Cargo.toml index 1b225a005..ec8e29d32 100644 --- a/packages/dioxus-tui/Cargo.toml +++ b/packages/dioxus-tui/Cargo.toml @@ -5,13 +5,10 @@ authors = ["Jonathan Kelley, @dementhos"] edition = "2021" description = "TUI-based renderer for Dioxus" repository = "https://github.com/DioxusLabs/dioxus/" -homepage = "https://dioxuslabs.com" -documentation = "https://dioxuslabs.com" +homepage = "https://dioxuslabs.com/docs/0.3/guide/en/getting_started/tui.html" keywords = ["dom", "ui", "gui", "react", "terminal"] license = "MIT/Apache-2.0" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] dioxus = { workspace = true } dioxus-core = { workspace = true, features = ["serialize"] } diff --git a/packages/dioxus/Cargo.toml b/packages/dioxus/Cargo.toml index 456a10085..b6bfe6536 100644 --- a/packages/dioxus/Cargo.toml +++ b/packages/dioxus/Cargo.toml @@ -3,11 +3,10 @@ name = "dioxus" version = "0.3.2" authors = ["Jonathan Kelley", "Dioxus Labs", "ealmloff"] edition = "2021" -description = "Core functionality for Dioxus - a concurrent renderer-agnostic Virtual DOM for interactive user experiences" +description = "Portable, performant, and ergonomic framework for building cross-platform user interfaces in Rust" license = "MIT OR Apache-2.0" repository = "https://github.com/DioxusLabs/dioxus/" -homepage = "https://dioxuslabs.com" -documentation = "https://dioxuslabs.com" +homepage = "https://dioxuslabs.com/docs/0.3/guide/en/index.html" keywords = ["dom", "ui", "gui", "react", "wasm"] rust-version = "1.65.0" diff --git a/packages/fermi/Cargo.toml b/packages/fermi/Cargo.toml index 40bbb1b40..aede371cc 100644 --- a/packages/fermi/Cargo.toml +++ b/packages/fermi/Cargo.toml @@ -7,10 +7,9 @@ description = "Global state management for Dioxus" license = "MIT/Apache-2.0" repository = "https://github.com/DioxusLabs/dioxus/" homepage = "https://dioxuslabs.com" -documentation = "https://dioxuslabs.com" keywords = ["dom", "ui", "gui", "react", "state-management"] -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + [dependencies] dioxus-core = { workspace = true } diff --git a/packages/fullstack/Cargo.toml b/packages/fullstack/Cargo.toml index 167476909..a6a1d29fe 100644 --- a/packages/fullstack/Cargo.toml +++ b/packages/fullstack/Cargo.toml @@ -6,11 +6,8 @@ description = "Fullstack Dioxus Utilities" license = "MIT/Apache-2.0" repository = "https://github.com/DioxusLabs/dioxus/" homepage = "https://dioxuslabs.com" -documentation = "https://dioxuslabs.com" keywords = ["dom", "ui", "gui", "react", "ssr", "fullstack"] -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] # server functions server_fn = { git = "https://github.com/leptos-rs/leptos", rev = "15a4e54435eb5a539afb75891292bcccd2cc8e85", default-features = false, features = ["stable"] } diff --git a/packages/hooks/Cargo.toml b/packages/hooks/Cargo.toml index c239da698..6a3205c68 100644 --- a/packages/hooks/Cargo.toml +++ b/packages/hooks/Cargo.toml @@ -7,9 +7,8 @@ description = "Basic useful hooks for Dioxus." license = "MIT/Apache-2.0" repository = "https://github.com/DioxusLabs/dioxus/" homepage = "https://dioxuslabs.com" -documentation = "https://dioxuslabs.com" keywords = ["dom", "ui", "gui", "react"] -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + [dependencies] dioxus-core = { workspace = true } diff --git a/packages/hot-reload/Cargo.toml b/packages/hot-reload/Cargo.toml index fd388c8ad..c16dd5468 100644 --- a/packages/hot-reload/Cargo.toml +++ b/packages/hot-reload/Cargo.toml @@ -4,13 +4,10 @@ version = "0.1.1" edition = "2021" license = "MIT/Apache-2.0" repository = "https://github.com/DioxusLabs/dioxus/" -homepage = "https://dioxuslabs.com" +homepage = "https://dioxuslabs.com/docs/0.3/guide/en/getting_started/hot_reload.html" description = "Hot reloading utilites for Dioxus" -documentation = "https://dioxuslabs.com" keywords = ["dom", "ui", "gui", "react", "hot-reloading"] -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] dioxus-rsx = { workspace = true } dioxus-core = { workspace = true, features = ["serialize"] } diff --git a/packages/html/Cargo.toml b/packages/html/Cargo.toml index 95c2252e0..a44b22a77 100644 --- a/packages/html/Cargo.toml +++ b/packages/html/Cargo.toml @@ -7,7 +7,6 @@ description = "HTML Element pack for Dioxus - a concurrent renderer-agnostic Vir license = "MIT/Apache-2.0" repository = "https://github.com/DioxusLabs/dioxus/" homepage = "https://dioxuslabs.com" -documentation = "https://dioxuslabs.com" keywords = ["dom", "ui", "gui", "react"] [dependencies] diff --git a/packages/interpreter/Cargo.toml b/packages/interpreter/Cargo.toml index b54a61e44..dd310ce41 100644 --- a/packages/interpreter/Cargo.toml +++ b/packages/interpreter/Cargo.toml @@ -10,8 +10,6 @@ homepage = "https://dioxuslabs.com" documentation = "https://docs.rs/dioxus" keywords = ["dom", "ui", "gui", "react", "wasm"] -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] wasm-bindgen = { workspace = true, optional = true } js-sys = { version = "0.3.56", optional = true } diff --git a/packages/liveview/Cargo.toml b/packages/liveview/Cargo.toml index 4400541ea..28a4e4a06 100644 --- a/packages/liveview/Cargo.toml +++ b/packages/liveview/Cargo.toml @@ -3,15 +3,11 @@ name = "dioxus-liveview" version = "0.3.1" edition = "2021" repository = "https://github.com/DioxusLabs/dioxus/" -homepage = "https://dioxuslabs.com" -documentation = "https://dioxuslabs.com" +homepage = "https://dioxuslabs.com/docs/0.3/guide/en/getting_started/liveview.html" keywords = ["dom", "ui", "gui", "react", "liveview"] description = "Build server-side apps with Dioxus" license = "MIT/Apache-2.0" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] thiserror = "1.0.38" log = { workspace = true } diff --git a/packages/mobile/Cargo.toml b/packages/mobile/Cargo.toml index 6d900d704..c5a8f8239 100644 --- a/packages/mobile/Cargo.toml +++ b/packages/mobile/Cargo.toml @@ -5,11 +5,9 @@ authors = ["Jonathan Kelley"] edition = "2018" description = "Mobile-compatible renderer for Dioxus" repository = "https://github.com/DioxusLabs/dioxus/" -homepage = "https://dioxuslabs.com" -documentation = "https://dioxuslabs.com" +homepage = "https://dioxuslabs.com/docs/0.3/guide/en/getting_started/mobile.html" keywords = ["dom", "ui", "gui", "react"] license = "MIT/Apache-2.0" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] dioxus-desktop = { workspace = true } diff --git a/packages/native-core-macro/Cargo.toml b/packages/native-core-macro/Cargo.toml index 1f06f601e..82b2dc4a6 100644 --- a/packages/native-core-macro/Cargo.toml +++ b/packages/native-core-macro/Cargo.toml @@ -6,14 +6,11 @@ description = "Build natively rendered apps with Dioxus" license = "MIT/Apache-2.0" repository = "https://github.com/DioxusLabs/dioxus/" homepage = "https://dioxuslabs.com" -documentation = "https://dioxuslabs.com" keywords = ["dom", "ui", "gui", "react"] - [lib] proc-macro = true -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] syn = { version = "1.0.11", features = ["extra-traits", "full"] } quote = "1.0" diff --git a/packages/native-core/Cargo.toml b/packages/native-core/Cargo.toml index 1d5a09a59..5ead1740d 100644 --- a/packages/native-core/Cargo.toml +++ b/packages/native-core/Cargo.toml @@ -6,10 +6,8 @@ license = "MIT/Apache-2.0" repository = "https://github.com/DioxusLabs/dioxus/" homepage = "https://dioxuslabs.com" description = "Build natively rendered apps with Dioxus" -documentation = "https://dioxuslabs.com" keywords = ["dom", "ui", "gui", "react"] - [dependencies] dioxus-core = { workspace = true, optional = true } diff --git a/packages/rink/Cargo.toml b/packages/rink/Cargo.toml index a820a85ed..a51659dc7 100644 --- a/packages/rink/Cargo.toml +++ b/packages/rink/Cargo.toml @@ -6,12 +6,9 @@ edition = "2021" description = "TUI-based renderer for Dioxus" repository = "https://github.com/DioxusLabs/dioxus/" homepage = "https://dioxuslabs.com" -documentation = "https://dioxuslabs.com" keywords = ["dom", "ui", "gui", "react", "terminal"] license = "MIT/Apache-2.0" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] dioxus-html = { workspace = true } dioxus-native-core = { workspace = true, features = ["layout-attributes"] } diff --git a/packages/router/Cargo.toml b/packages/router/Cargo.toml index df6e1000a..7015c3243 100644 --- a/packages/router/Cargo.toml +++ b/packages/router/Cargo.toml @@ -6,9 +6,7 @@ description = "Cross-platform router for Dioxus apps" license = "MIT/Apache-2.0" repository = "https://github.com/DioxusLabs/dioxus/" homepage = "https://dioxuslabs.com" -documentation = "https://dioxuslabs.com" keywords = ["dom", "ui", "gui", "react", "wasm"] -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] dioxus = { workspace = true} diff --git a/packages/ssr/Cargo.toml b/packages/ssr/Cargo.toml index ed1d443ea..98e127be0 100644 --- a/packages/ssr/Cargo.toml +++ b/packages/ssr/Cargo.toml @@ -6,12 +6,9 @@ edition = "2018" description = "Dioxus render-to-string" license = "MIT/Apache-2.0" repository = "https://github.com/DioxusLabs/dioxus/" -homepage = "https://dioxuslabs.com" -documentation = "https://dioxuslabs.com" +homepage = "https://dioxuslabs.com/docs/0.3/guide/en/getting_started/ssr.html" keywords = ["dom", "ui", "gui", "react", "ssr"] -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] dioxus-core = { workspace = true, features = ["serialize"] } askama_escape = "0.10.3" diff --git a/packages/web/Cargo.toml b/packages/web/Cargo.toml index daa296bb8..09645ccc6 100644 --- a/packages/web/Cargo.toml +++ b/packages/web/Cargo.toml @@ -3,11 +3,10 @@ name = "dioxus-web" version = "0.3.2" authors = ["Jonathan Kelley"] edition = "2018" -description = "Dioxus VirtualDOM renderer for the web browser using websys" +description = "Web renderer for Dioxus using websys" license = "MIT/Apache-2.0" repository = "https://github.com/DioxusLabs/dioxus/" -homepage = "https://dioxuslabs.com" -documentation = "https://dioxuslabs.com" +homepage = "https://dioxuslabs.com/docs/0.3/guide/en/getting_started/web.html" keywords = ["dom", "ui", "gui", "react", "wasm"] [dependencies] From f59cacb2a072298bfec708541e998710bbdeae15 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Sat, 8 Jul 2023 14:24:01 -0700 Subject: [PATCH 434/459] Get wasm bundling working --- Cargo.toml | 2 + packages/cli/Cargo.toml | 2 +- packages/cli/extension/dist/.gitignore | 2 - packages/cli/extension/server/.gitignore | 3 - packages/cli/extension/src/main.ts | 282 ------------------ packages/{cli => }/extension/.eslintrc.js | 0 packages/{cli => }/extension/.gitignore | 0 packages/extension/.vscode/launch.json | 7 + packages/extension/Cargo.toml | 16 + packages/{cli => }/extension/DEV.md | 0 packages/{cli => }/extension/LICENSE.txt | 0 packages/{cli => }/extension/README.md | 0 .../{cli => }/extension/package-lock.json | 35 +++ packages/{cli => }/extension/package.json | 12 +- packages/extension/src/build.js | 23 ++ packages/extension/src/lib.rs | 34 +++ packages/extension/src/main.ts | 277 +++++++++++++++++ packages/{cli => }/extension/static/icon.png | Bin packages/{cli => }/extension/tsconfig.json | 10 +- packages/rsx-rosetta/Cargo.toml | 4 +- 20 files changed, 414 insertions(+), 295 deletions(-) delete mode 100644 packages/cli/extension/dist/.gitignore delete mode 100644 packages/cli/extension/server/.gitignore delete mode 100644 packages/cli/extension/src/main.ts rename packages/{cli => }/extension/.eslintrc.js (100%) rename packages/{cli => }/extension/.gitignore (100%) create mode 100644 packages/extension/.vscode/launch.json create mode 100644 packages/extension/Cargo.toml rename packages/{cli => }/extension/DEV.md (100%) rename packages/{cli => }/extension/LICENSE.txt (100%) rename packages/{cli => }/extension/README.md (100%) rename packages/{cli => }/extension/package-lock.json (99%) rename packages/{cli => }/extension/package.json (94%) create mode 100644 packages/extension/src/build.js create mode 100644 packages/extension/src/lib.rs create mode 100644 packages/extension/src/main.ts rename packages/{cli => }/extension/static/icon.png (100%) rename packages/{cli => }/extension/tsconfig.json (61%) diff --git a/Cargo.toml b/Cargo.toml index 9b36a1fef..29288a9cc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,7 @@ members = [ "packages/core", "packages/cli", "packages/core-macro", + "packages/extension", "packages/router", "packages/html", "packages/hooks", @@ -74,6 +75,7 @@ futures-channel = "0.3.21" futures-util = { version = "0.3", default-features = false } rustc-hash = "1.1.0" wasm-bindgen = "0.2.79" +html_parser = "0.7.0" # This is a "virtual package" # It is not meant to be published, but is used so "cargo run --example XYZ" works properly diff --git a/packages/cli/Cargo.toml b/packages/cli/Cargo.toml index 7d4a88fd2..8e323b74b 100644 --- a/packages/cli/Cargo.toml +++ b/packages/cli/Cargo.toml @@ -25,7 +25,7 @@ fs_extra = "1.2.0" cargo_toml = "0.11.4" futures = "0.3.21" notify = { version = "5.0.0-pre.16", features = ["serde"] } -html_parser = "0.6.2" +html_parser.workspace = true binary-install = "0.0.2" convert_case = "0.5.0" cargo_metadata = "0.15.0" diff --git a/packages/cli/extension/dist/.gitignore b/packages/cli/extension/dist/.gitignore deleted file mode 100644 index 1287e9bd7..000000000 --- a/packages/cli/extension/dist/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -** -!.gitignore diff --git a/packages/cli/extension/server/.gitignore b/packages/cli/extension/server/.gitignore deleted file mode 100644 index f42761bea..000000000 --- a/packages/cli/extension/server/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -** -!Readme.md -!.gitignore diff --git a/packages/cli/extension/src/main.ts b/packages/cli/extension/src/main.ts deleted file mode 100644 index adaed0a7d..000000000 --- a/packages/cli/extension/src/main.ts +++ /dev/null @@ -1,282 +0,0 @@ -import * as vscode from 'vscode'; -import { spawn } from "child_process"; -import { TextEncoder } from 'util'; - -let serverPath: string = "dioxus"; - -export async function activate(context: vscode.ExtensionContext) { - let somePath = await bootstrap(context); - - if (somePath == undefined) { - await vscode.window.showErrorMessage('Could not find bundled Dioxus-CLI. Please install it manually.'); - return; - } else { - serverPath = somePath; - } - - context.subscriptions.push( - // vscode.commands.registerTextEditorCommand('editor.action.clipboardPasteAction', onPasteHandler), - vscode.commands.registerCommand('extension.htmlToDioxusRsx', translateBlock), - vscode.commands.registerCommand('extension.htmlToDioxusComponent', translateComponent), - vscode.commands.registerCommand('extension.formatRsx', fmtSelection), - vscode.commands.registerCommand('extension.formatRsxDocument', formatRsxDocument), - vscode.workspace.onWillSaveTextDocument(fmtDocumentOnSave) - ); -} - - -function translateComponent() { - translate(true) -} - -function translateBlock() { - translate(false) -} - -function translate(component: boolean) { - const editor = vscode.window.activeTextEditor; - - if (!editor) return; - - const html = editor.document.getText(editor.selection); - if (html.length == 0) { - vscode.window.showWarningMessage("Please select HTML fragment before invoking this command!"); - return; - } - - let params = ["translate"]; - if (component) params.push("--component"); - params.push("--raw", html); - - const child_proc = spawn(serverPath, params); - - let result = ''; - child_proc.stdout?.on('data', data => result += data); - - child_proc.on('close', () => { - if (result.length > 0) editor.edit(editBuilder => editBuilder.replace(editor.selection, result)); - }); - - child_proc.on('error', (err) => { - vscode.window.showWarningMessage(`Errors occurred while translating. Make sure you have the most recent Dioxus-CLI installed! \n${err}`); - }); -} - -function onPasteHandler() { - // check settings to see if we should convert HTML to Rsx - if (vscode.workspace.getConfiguration('dioxus').get('convertOnPaste')) { - convertHtmlToRsxOnPaste(); - } -} - -function convertHtmlToRsxOnPaste() { - const editor = vscode.window.activeTextEditor; - if (!editor) return; - - // get the cursor location - const cursor = editor.selection.active; - - // try to parse the HTML at the cursor location - const html = editor.document.getText(new vscode.Range(cursor, cursor)); -} - -function formatRsxDocument() { - const editor = vscode.window.activeTextEditor; - if (!editor) return; - fmtDocument(editor.document); -} - -function fmtSelection() { - const editor = vscode.window.activeTextEditor; - if (!editor) return; - - const unformatted = editor.document.getText(editor.selection); - - if (unformatted.length == 0) { - vscode.window.showWarningMessage("Please select rsx invoking this command!"); - return; - } - - const fileDir = editor.document.fileName.slice(0, editor.document.fileName.lastIndexOf('\\')); - - const child_proc = spawn(serverPath, ["fmt", "--raw", unformatted.toString()], { - cwd: fileDir ? fileDir : undefined, - }); - let result = ''; - - child_proc.stdout?.on('data', data => result += data); - - child_proc.on('close', () => { - if (result.length > 0) editor.edit(editBuilder => editBuilder.replace(editor.selection, result)); - }); - - child_proc.on('error', (err) => { - vscode.window.showWarningMessage(`Errors occurred while translating. Make sure you have the most recent Dioxus-CLI installed! \n${err}`); - }); -} - -function fmtDocumentOnSave(e: vscode.TextDocumentWillSaveEvent) { - // check the settings to make sure format on save is configured - const dioxusConfig = vscode.workspace.getConfiguration('dioxus', e.document).get('formatOnSave'); - const globalConfig = vscode.workspace.getConfiguration('editor', e.document).get('formatOnSave'); - if ( - (dioxusConfig === 'enabled') || - (dioxusConfig !== 'disabled' && globalConfig) - ) { - fmtDocument(e.document); - } -} - -function fmtDocument(document: vscode.TextDocument) { - try { - if (document.languageId !== "rust" || document.uri.scheme !== "file") { - return; - } - - const [editor,] = vscode.window.visibleTextEditors.filter(editor => editor.document.fileName === document.fileName); - if (!editor) return; // Need an editor to apply text edits. - - const fileDir = document.fileName.slice(0, document.fileName.lastIndexOf('\\')); - const child_proc = spawn(serverPath, ["fmt", "--file", document.fileName], { - cwd: fileDir ? fileDir : undefined, - }); - - let result = ''; - child_proc.stdout?.on('data', data => result += data); - - /*type RsxEdit = { - formatted: string, - start: number, - end: number - }*/ - - child_proc.on('close', () => { - if (child_proc.exitCode !== 0) { - vscode.window.showWarningMessage(`Errors occurred while formatting. Make sure you have the most recent Dioxus-CLI installed!\nDioxus-CLI exited with exit code ${child_proc.exitCode}\n\nData from Dioxus-CLI:\n${result}`); - return; - } - /*if (result.length === 0) return; - - // Used for error message: - const originalResult = result; - try { - // Only parse the last non empty line, to skip log warning messages: - const lines = result.replaceAll('\r\n', '\n').split('\n'); - const nonEmptyLines = lines.filter(line => line.trim().length !== 0); - result = nonEmptyLines[nonEmptyLines.length - 1] ?? ''; - - if (result.length === 0) return; - - const decoded: RsxEdit[] = JSON.parse(result); - if (decoded.length === 0) return; - - // Preform edits at the end of the file - // first (to not change previous text file - // offsets): - decoded.sort((a, b) => b.start - a.start); - - - // Convert from utf8 offsets to utf16 offsets used by VS Code: - - const utf8Text = new TextEncoder().encode(text); - const utf8ToUtf16Pos = (posUtf8: number) => { - // Find the line of the position as well as the utf8 and - // utf16 indexes for the start of that line: - let startOfLineUtf8 = 0; - let lineIndex = 0; - const newLineUtf8 = '\n'.charCodeAt(0); - // eslint-disable-next-line no-constant-condition - while (true) { - const nextLineAt = utf8Text.indexOf(newLineUtf8, startOfLineUtf8); - if (nextLineAt < 0 || posUtf8 <= nextLineAt) break; - startOfLineUtf8 = nextLineAt + 1; - lineIndex++; - } - const lineUtf16 = document.lineAt(lineIndex); - - // Move forward from a synced position in the text until the - // target pos is found: - let currentUtf8 = startOfLineUtf8; - let currentUtf16 = document.offsetAt(lineUtf16.range.start); - - const decodeBuffer = new Uint8Array(10); - const utf8Encoder = new TextEncoder(); - while (currentUtf8 < posUtf8) { - const { written } = utf8Encoder.encodeInto(text.charAt(currentUtf16), decodeBuffer); - currentUtf8 += written; - currentUtf16++; - } - return currentUtf16; - }; - - - type FixedEdit = { - range: vscode.Range, - formatted: string, - }; - - const edits: FixedEdit[] = []; - for (const edit of decoded) { - // Convert from utf8 to utf16: - const range = new vscode.Range( - document.positionAt(utf8ToUtf16Pos(edit.start)), - document.positionAt(utf8ToUtf16Pos(edit.end)) - ); - - if (editor.document.getText(range) !== document.getText(range)) { - // The text that was formatted has changed while we were working. - vscode.window.showWarningMessage(`Dioxus formatting was ignored since the source file changed before the change could be applied.`); - continue; - } - - edits.push({ - range, - formatted: edit.formatted, - }); - } - - - // Apply edits: - editor.edit(editBuilder => { - edits.forEach((edit) => editBuilder.replace(edit.range, edit.formatted)); - }, { - undoStopAfter: false, - undoStopBefore: false - }); - - } catch (err) { - vscode.window.showWarningMessage(`Errors occurred while formatting. Make sure you have the most recent Dioxus-CLI installed!\n${err}\n\nData from Dioxus-CLI:\n${originalResult}`); - }*/ - }); - - child_proc.on('error', (err) => { - vscode.window.showWarningMessage(`Errors occurred while formatting. Make sure you have the most recent Dioxus-CLI installed! \n${err}`); - }); - } catch (error) { - vscode.window.showWarningMessage(`Errors occurred while formatting. Make sure you have the most recent Dioxus-CLI installed! \n${error}`); - } -} - - - -// I'm using the approach defined in rust-analyzer here -// -// We ship the server as part of the extension, but we need to handle external paths and such -// -// https://github.com/rust-lang/rust-analyzer/blob/fee5555cfabed4b8abbd40983fc4442df4007e49/editors/code/src/main.ts#L270 -async function bootstrap(context: vscode.ExtensionContext): Promise { - - const ext = process.platform === "win32" ? ".exe" : ""; - const bundled = vscode.Uri.joinPath(context.extensionUri, "server", `dioxus${ext}`); - const bundledExists = await vscode.workspace.fs.stat(bundled).then( - () => true, - () => false - ); - - // if bunddled doesn't exist, try using a locally-installed version - if (!bundledExists) { - return "dioxus"; - } - - return bundled.fsPath; -} diff --git a/packages/cli/extension/.eslintrc.js b/packages/extension/.eslintrc.js similarity index 100% rename from packages/cli/extension/.eslintrc.js rename to packages/extension/.eslintrc.js diff --git a/packages/cli/extension/.gitignore b/packages/extension/.gitignore similarity index 100% rename from packages/cli/extension/.gitignore rename to packages/extension/.gitignore diff --git a/packages/extension/.vscode/launch.json b/packages/extension/.vscode/launch.json new file mode 100644 index 000000000..5c7247b40 --- /dev/null +++ b/packages/extension/.vscode/launch.json @@ -0,0 +1,7 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [] +} \ No newline at end of file diff --git a/packages/extension/Cargo.toml b/packages/extension/Cargo.toml new file mode 100644 index 000000000..09dd98ac9 --- /dev/null +++ b/packages/extension/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "dioxus-ext" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +wasm-bindgen.workspace = true +dioxus-autofmt.workspace = true +rsx-rosetta.workspace = true +html_parser.workspace = true + + +[lib] +crate-type = ["cdylib", "rlib"] diff --git a/packages/cli/extension/DEV.md b/packages/extension/DEV.md similarity index 100% rename from packages/cli/extension/DEV.md rename to packages/extension/DEV.md diff --git a/packages/cli/extension/LICENSE.txt b/packages/extension/LICENSE.txt similarity index 100% rename from packages/cli/extension/LICENSE.txt rename to packages/extension/LICENSE.txt diff --git a/packages/cli/extension/README.md b/packages/extension/README.md similarity index 100% rename from packages/cli/extension/README.md rename to packages/extension/README.md diff --git a/packages/cli/extension/package-lock.json b/packages/extension/package-lock.json similarity index 99% rename from packages/cli/extension/package-lock.json rename to packages/extension/package-lock.json index c671ca72c..60ce37622 100644 --- a/packages/cli/extension/package-lock.json +++ b/packages/extension/package-lock.json @@ -9,6 +9,7 @@ "version": "0.0.1", "license": "MIT", "dependencies": { + "dioxus-ext": "./pkg", "vsce": "^2.9.2" }, "devDependencies": { @@ -18,6 +19,7 @@ "@typescript-eslint/parser": "^5.30.5", "cross-env": "^7.0.3", "esbuild": "^0.14.27", + "esbuild-plugin-wasm": "^1.1.0", "eslint": "^8.19.0", "eslint-config-prettier": "^8.5.0", "ovsx": "^0.5.1", @@ -728,6 +730,10 @@ "node": ">=8" } }, + "node_modules/dioxus-ext": { + "resolved": "pkg", + "link": true + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -1119,6 +1125,19 @@ "node": ">=12" } }, + "node_modules/esbuild-plugin-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/esbuild-plugin-wasm/-/esbuild-plugin-wasm-1.1.0.tgz", + "integrity": "sha512-0bQ6+1tUbySSnxzn5jnXHMDvYnT0cN/Wd4Syk8g/sqAIJUg7buTIi22svS3Qz6ssx895NT+TgLPb33xi1OkZig==", + "dev": true, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "individual", + "url": "https://ko-fi.com/tschrock" + } + }, "node_modules/esbuild-sunos-64": { "version": "0.14.48", "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.48.tgz", @@ -3014,6 +3033,13 @@ "dependencies": { "buffer-crc32": "~0.2.3" } + }, + "pkg": { + "name": "dioxus-ext", + "version": "0.1.0" + }, + "src/pkg/dioxus-ext": { + "extraneous": true } }, "dependencies": { @@ -3485,6 +3511,9 @@ "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", "dev": true }, + "dioxus-ext": { + "version": "file:pkg" + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -3695,6 +3724,12 @@ "dev": true, "optional": true }, + "esbuild-plugin-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/esbuild-plugin-wasm/-/esbuild-plugin-wasm-1.1.0.tgz", + "integrity": "sha512-0bQ6+1tUbySSnxzn5jnXHMDvYnT0cN/Wd4Syk8g/sqAIJUg7buTIi22svS3Qz6ssx895NT+TgLPb33xi1OkZig==", + "dev": true + }, "esbuild-sunos-64": { "version": "0.14.48", "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.48.tgz", diff --git a/packages/cli/extension/package.json b/packages/extension/package.json similarity index 94% rename from packages/cli/extension/package.json rename to packages/extension/package.json index 11b32ec88..4f4293465 100644 --- a/packages/cli/extension/package.json +++ b/packages/extension/package.json @@ -24,6 +24,10 @@ "onCommand:extension.formatRsxDocument" ], "main": "./out/main", + "extensionKind": [ + "ui", + "workspace" + ], "contributes": { "commands": [ { @@ -73,7 +77,7 @@ "scripts": { "vscode:prepublish": "npm run build-base -- --minify", "package": "vsce package -o rust-analyzer.vsix", - "build-base": "esbuild ./src/main.ts --bundle --outfile=out/main.js --external:vscode --format=cjs --platform=node --target=node16", + "build-base": "node src/build.js", "build": "npm run build-base -- --sourcemap", "watch": "npm run build-base -- --sourcemap --watch", "lint": "prettier --check . && eslint -c .eslintrc.js --ext ts ./src ./tests", @@ -88,15 +92,17 @@ "@typescript-eslint/parser": "^5.30.5", "cross-env": "^7.0.3", "esbuild": "^0.14.27", + "esbuild-plugin-wasm": "^1.1.0", "eslint": "^8.19.0", - "typescript": "^4.7.4", "eslint-config-prettier": "^8.5.0", "ovsx": "^0.5.1", "prettier": "^2.6.2", "tslib": "^2.3.0", + "typescript": "^4.7.4", "vsce": "^2.7.0" }, "dependencies": { + "dioxus-ext": "./pkg", "vsce": "^2.9.2" } -} \ No newline at end of file +} diff --git a/packages/extension/src/build.js b/packages/extension/src/build.js new file mode 100644 index 000000000..de0dffdb9 --- /dev/null +++ b/packages/extension/src/build.js @@ -0,0 +1,23 @@ +// build.ts +import('esbuild').then((esbuild) => { + import('esbuild-plugin-wasm').then((wasmLoader) => { + // "build-base": "esbuild ./src/main.ts --bundle --outfile=out/main.js --external:vscode --format=cjs --platform=node --target=node16", + esbuild.build({ + entryPoints: ['src/main.ts'], + outfile: 'out/main.js', + bundle: true, + platform: 'node', + target: 'node16', + format: 'esm', + external: ['vscode'], + plugins: [ + wasmLoader.wasmLoader({ + mode: 'embedded' + }) + ] + }); + }); +}); + + + diff --git a/packages/extension/src/lib.rs b/packages/extension/src/lib.rs new file mode 100644 index 000000000..2dc069aa3 --- /dev/null +++ b/packages/extension/src/lib.rs @@ -0,0 +1,34 @@ +//! This file exports functions into the vscode extension + +use wasm_bindgen::prelude::*; + +#[wasm_bindgen] +pub fn greeet() { + // +} + +#[wasm_bindgen] +pub fn format_rsx(raw: String) -> String { + let block = dioxus_autofmt::fmt_block(&raw, 0); + block.unwrap() +} + +#[wasm_bindgen] +pub fn translate_rsx(contents: String, component: bool) -> String { + // Ensure we're loading valid HTML + let dom = html_parser::Dom::parse(&contents).unwrap(); + + let callbody = rsx_rosetta::rsx_from_html(&dom); + + // Convert the HTML to RSX + let out = dioxus_autofmt::write_block_out(callbody).unwrap(); + + out +} + +// rsx! { +// div {} +// div {} +// div {} +// div {} div {} +// } diff --git a/packages/extension/src/main.ts b/packages/extension/src/main.ts new file mode 100644 index 000000000..ac2255268 --- /dev/null +++ b/packages/extension/src/main.ts @@ -0,0 +1,277 @@ +import * as vscode from 'vscode'; +import { translate_rsx } from 'dioxus-ext'; + + +export async function activate(context: vscode.ExtensionContext) { + + + context.subscriptions.push( + vscode.commands.registerCommand('extension.htmlToDioxusRsx', () => translate(false)), + vscode.commands.registerCommand('extension.htmlToDioxusComponent', () => translate(true)), + // vscode.commands.registerCommand('extension.formatRsx', fmtSelection), + // vscode.commands.registerCommand('extension.formatRsxDocument', formatRsxDocument), + // vscode.workspace.onWillSaveTextDocument(fmtDocumentOnSave) + ); +} + +function translate(component: boolean) { + const editor = vscode.window.activeTextEditor; + + if (!editor) return; + + const html = editor.document.getText(editor.selection); + if (html.length == 0) { + vscode.window.showWarningMessage("Please select HTML fragment before invoking this command!"); + return; + } + + const out = translate_rsx(html, component); + + if (out.length > 0) { + editor.edit(editBuilder => editBuilder.replace(editor.selection, out)); + } else { + vscode.window.showWarningMessage(`Errors occurred while translating, make sure this block of HTML is valid`); + } + + // const params = ["translate"]; + // if (component) params.push("--component"); + // params.push("--raw", html); + + // const child_proc = spawn(serverPath, params); + + // let result = ''; + // child_proc.stdout?.on('data', data => result += data); + + // child_proc.on('close', () => { + // if (result.length > 0) editor.edit(editBuilder => editBuilder.replace(editor.selection, result)); + // }); + + // child_proc.on('error', (err) => { + // vscode.window.showWarningMessage(`Errors occurred while translating. Make sure you have the most recent Dioxus-CLI installed! \n${err}`); + // }); +} + + + +// function formatRsxDocument() { +// const editor = vscode.window.activeTextEditor; +// if (!editor) return; +// fmtDocument(editor.document); +// } + +// function fmtSelection() { +// const editor = vscode.window.activeTextEditor; +// if (!editor) return; + +// const unformatted = editor.document.getText(editor.selection); + +// if (unformatted.length == 0) { +// vscode.window.showWarningMessage("Please select rsx invoking this command!"); +// return; +// } + +// const fileDir = editor.document.fileName.slice(0, editor.document.fileName.lastIndexOf('\\')); + +// const child_proc = spawn(serverPath, ["fmt", "--raw", unformatted.toString()], { +// cwd: fileDir ? fileDir : undefined, +// }); +// let result = ''; + +// child_proc.stdout?.on('data', data => result += data); + +// child_proc.on('close', () => { +// if (result.length > 0) editor.edit(editBuilder => editBuilder.replace(editor.selection, result)); +// }); + +// child_proc.on('error', (err) => { +// vscode.window.showWarningMessage(`Errors occurred while translating. Make sure you have the most recent Dioxus-CLI installed! \n${err}`); +// }); +// } + +// function fmtDocumentOnSave(e: vscode.TextDocumentWillSaveEvent) { +// // check the settings to make sure format on save is configured +// const dioxusConfig = vscode.workspace.getConfiguration('dioxus', e.document).get('formatOnSave'); +// const globalConfig = vscode.workspace.getConfiguration('editor', e.document).get('formatOnSave'); +// if ( +// (dioxusConfig === 'enabled') || +// (dioxusConfig !== 'disabled' && globalConfig) +// ) { +// fmtDocument(e.document); +// } +// } + +// function fmtDocument(document: vscode.TextDocument) { +// try { +// if (document.languageId !== "rust" || document.uri.scheme !== "file") { +// return; +// } + +// const [editor,] = vscode.window.visibleTextEditors.filter(editor => editor.document.fileName === document.fileName); +// if (!editor) return; // Need an editor to apply text edits. + +// const fileDir = document.fileName.slice(0, document.fileName.lastIndexOf('\\')); +// const child_proc = spawn(serverPath, ["fmt", "--file", document.fileName], { +// cwd: fileDir ? fileDir : undefined, +// }); + +// let result = ''; +// child_proc.stdout?.on('data', data => result += data); + +// /*type RsxEdit = { +// formatted: string, +// start: number, +// end: number +// }*/ + +// child_proc.on('close', () => { +// if (child_proc.exitCode !== 0) { +// vscode.window.showWarningMessage(`Errors occurred while formatting. Make sure you have the most recent Dioxus-CLI installed!\nDioxus-CLI exited with exit code ${child_proc.exitCode}\n\nData from Dioxus-CLI:\n${result}`); +// return; +// } + +// }); + +// child_proc.on('error', (err) => { +// vscode.window.showWarningMessage(`Errors occurred while formatting. Make sure you have the most recent Dioxus-CLI installed! \n${err}`); +// }); +// } catch (error) { +// vscode.window.showWarningMessage(`Errors occurred while formatting. Make sure you have the most recent Dioxus-CLI installed! \n${error}`); +// } +// } + + + +// // I'm using the approach defined in rust-analyzer here +// // +// // We ship the server as part of the extension, but we need to handle external paths and such +// // +// // https://github.com/rust-lang/rust-analyzer/blob/fee5555cfabed4b8abbd40983fc4442df4007e49/editors/code/src/main.ts#L270 +// async function bootstrap(context: vscode.ExtensionContext): Promise { + +// const ext = process.platform === "win32" ? ".exe" : ""; +// const bundled = vscode.Uri.joinPath(context.extensionUri, "server", `dioxus${ext}`); +// const bundledExists = await vscode.workspace.fs.stat(bundled).then( +// () => true, +// () => false +// ); + +// // if bunddled doesn't exist, try using a locally-installed version +// if (!bundledExists) { +// return "dioxus"; +// } + +// return bundled.fsPath; +// } + + +// function onPasteHandler() { +// // check settings to see if we should convert HTML to Rsx +// if (vscode.workspace.getConfiguration('dioxus').get('convertOnPaste')) { +// convertHtmlToRsxOnPaste(); +// } +// } + +// function convertHtmlToRsxOnPaste() { +// const editor = vscode.window.activeTextEditor; +// if (!editor) return; + +// // get the cursor location +// const cursor = editor.selection.active; + +// // try to parse the HTML at the cursor location +// const html = editor.document.getText(new vscode.Range(cursor, cursor)); +// } + +/*if (result.length === 0) return; + +// Used for error message: +const originalResult = result; +try { + // Only parse the last non empty line, to skip log warning messages: + const lines = result.replaceAll('\r\n', '\n').split('\n'); + const nonEmptyLines = lines.filter(line => line.trim().length !== 0); + result = nonEmptyLines[nonEmptyLines.length - 1] ?? ''; + + if (result.length === 0) return; + + const decoded: RsxEdit[] = JSON.parse(result); + if (decoded.length === 0) return; + + // Preform edits at the end of the file + // first (to not change previous text file + // offsets): + decoded.sort((a, b) => b.start - a.start); + + + // Convert from utf8 offsets to utf16 offsets used by VS Code: + + const utf8Text = new TextEncoder().encode(text); + const utf8ToUtf16Pos = (posUtf8: number) => { + // Find the line of the position as well as the utf8 and + // utf16 indexes for the start of that line: + let startOfLineUtf8 = 0; + let lineIndex = 0; + const newLineUtf8 = '\n'.charCodeAt(0); + // eslint-disable-next-line no-constant-condition + while (true) { + const nextLineAt = utf8Text.indexOf(newLineUtf8, startOfLineUtf8); + if (nextLineAt < 0 || posUtf8 <= nextLineAt) break; + startOfLineUtf8 = nextLineAt + 1; + lineIndex++; + } + const lineUtf16 = document.lineAt(lineIndex); + + // Move forward from a synced position in the text until the + // target pos is found: + let currentUtf8 = startOfLineUtf8; + let currentUtf16 = document.offsetAt(lineUtf16.range.start); + + const decodeBuffer = new Uint8Array(10); + const utf8Encoder = new TextEncoder(); + while (currentUtf8 < posUtf8) { + const { written } = utf8Encoder.encodeInto(text.charAt(currentUtf16), decodeBuffer); + currentUtf8 += written; + currentUtf16++; + } + return currentUtf16; + }; + + + type FixedEdit = { + range: vscode.Range, + formatted: string, + }; + + const edits: FixedEdit[] = []; + for (const edit of decoded) { + // Convert from utf8 to utf16: + const range = new vscode.Range( + document.positionAt(utf8ToUtf16Pos(edit.start)), + document.positionAt(utf8ToUtf16Pos(edit.end)) + ); + + if (editor.document.getText(range) !== document.getText(range)) { + // The text that was formatted has changed while we were working. + vscode.window.showWarningMessage(`Dioxus formatting was ignored since the source file changed before the change could be applied.`); + continue; + } + + edits.push({ + range, + formatted: edit.formatted, + }); + } + + + // Apply edits: + editor.edit(editBuilder => { + edits.forEach((edit) => editBuilder.replace(edit.range, edit.formatted)); + }, { + undoStopAfter: false, + undoStopBefore: false + }); + +} catch (err) { + vscode.window.showWarningMessage(`Errors occurred while formatting. Make sure you have the most recent Dioxus-CLI installed!\n${err}\n\nData from Dioxus-CLI:\n${originalResult}`); +}*/ +// import { TextEncoder } from 'util'; diff --git a/packages/cli/extension/static/icon.png b/packages/extension/static/icon.png similarity index 100% rename from packages/cli/extension/static/icon.png rename to packages/extension/static/icon.png diff --git a/packages/cli/extension/tsconfig.json b/packages/extension/tsconfig.json similarity index 61% rename from packages/cli/extension/tsconfig.json rename to packages/extension/tsconfig.json index 32dda5bc9..e6e715d85 100644 --- a/packages/cli/extension/tsconfig.json +++ b/packages/extension/tsconfig.json @@ -2,11 +2,17 @@ "compilerOptions": { "module": "commonjs", "target": "es2021", - "lib": ["ES2021"], + "lib": [ + "ES2021" + ], "outDir": "out", "sourceMap": true, "strict": true, "rootDir": "src" }, - "exclude": ["node_modules", ".vscode-test"] + "exclude": [ + "node_modules", + ".vscode-test" + // "src/pkg" + ] } diff --git a/packages/rsx-rosetta/Cargo.toml b/packages/rsx-rosetta/Cargo.toml index 5a096d56a..eef6b2499 100644 --- a/packages/rsx-rosetta/Cargo.toml +++ b/packages/rsx-rosetta/Cargo.toml @@ -15,7 +15,7 @@ keywords = ["dom", "ui", "gui", "react"] [dependencies] dioxus-autofmt = { workspace = true } dioxus-rsx = { workspace = true } -html_parser = "0.6.3" +html_parser.workspace = true proc-macro2 = "1.0.49" quote = "1.0.23" syn = { version = "1.0.107", features = ["full"] } @@ -27,4 +27,4 @@ convert_case = "0.5.0" # eventually more output options [dev-dependencies] -pretty_assertions = "1.2.1" \ No newline at end of file +pretty_assertions = "1.2.1" From b5312732ba4db3267a0ad204f885642e08a93b35 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Sat, 8 Jul 2023 18:53:43 -0700 Subject: [PATCH 435/459] Get wasm loading in extension --- Cargo.toml | 2 +- packages/extension/.vscode/launch.json | 39 +- packages/extension/.vscode/tasks.json | 20 + packages/extension/package-lock.json | 2460 ++++++++++++++++++------ packages/extension/package.json | 25 +- packages/extension/pkg/package.json | 14 + packages/extension/src/build.js | 23 - packages/extension/src/lib.rs | 7 - packages/extension/src/main.ts | 24 +- packages/extension/tsconfig.json | 4 +- packages/extension/webpack.config.js | 66 + 11 files changed, 2080 insertions(+), 604 deletions(-) create mode 100644 packages/extension/.vscode/tasks.json create mode 100644 packages/extension/pkg/package.json delete mode 100644 packages/extension/src/build.js create mode 100644 packages/extension/webpack.config.js diff --git a/Cargo.toml b/Cargo.toml index 29288a9cc..d69a74828 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -74,7 +74,7 @@ slab = "0.4.2" futures-channel = "0.3.21" futures-util = { version = "0.3", default-features = false } rustc-hash = "1.1.0" -wasm-bindgen = "0.2.79" +wasm-bindgen = "0.2.87" html_parser = "0.7.0" # This is a "virtual package" diff --git a/packages/extension/.vscode/launch.json b/packages/extension/.vscode/launch.json index 5c7247b40..fd57822df 100644 --- a/packages/extension/.vscode/launch.json +++ b/packages/extension/.vscode/launch.json @@ -1,7 +1,34 @@ +// A launch configuration that compiles the extension and then opens it inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 { - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [] -} \ No newline at end of file + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ], + "outFiles": [ + "${workspaceFolder}/out/**/*.js" + ] + // "preLaunchTask": "${defaultBuildTask}" + }, + { + "name": "Extension Tests", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" + ], + "outFiles": [ + "${workspaceFolder}/out/test/**/*.js" + ], + "preLaunchTask": "${defaultBuildTask}" + } + ] +} diff --git a/packages/extension/.vscode/tasks.json b/packages/extension/.vscode/tasks.json new file mode 100644 index 000000000..3b17e53b6 --- /dev/null +++ b/packages/extension/.vscode/tasks.json @@ -0,0 +1,20 @@ +// See https://go.microsoft.com/fwlink/?LinkId=733558 +// for the documentation about the tasks.json format +{ + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "watch", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never" + }, + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} diff --git a/packages/extension/package-lock.json b/packages/extension/package-lock.json index 60ce37622..6d3a8b27f 100644 --- a/packages/extension/package-lock.json +++ b/packages/extension/package-lock.json @@ -18,20 +18,34 @@ "@typescript-eslint/eslint-plugin": "^5.30.5", "@typescript-eslint/parser": "^5.30.5", "cross-env": "^7.0.3", - "esbuild": "^0.14.27", - "esbuild-plugin-wasm": "^1.1.0", "eslint": "^8.19.0", "eslint-config-prettier": "^8.5.0", "ovsx": "^0.5.1", "prettier": "^2.6.2", + "ts-loader": "^9.4.4", "tslib": "^2.3.0", "typescript": "^4.7.4", - "vsce": "^2.7.0" + "vsce": "^2.7.0", + "webpack": "^5.88.1", + "webpack-cli": "^5.1.4" }, "engines": { "vscode": "^1.68.1" } }, + "dist": { + "version": "0.1.0", + "extraneous": true + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", @@ -72,6 +86,64 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -107,6 +179,32 @@ "node": ">= 8" } }, + "node_modules/@types/eslint": { + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.0.tgz", + "integrity": "sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, "node_modules/@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -309,10 +407,212 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, "node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -321,6 +621,15 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -346,6 +655,15 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -460,6 +778,38 @@ "node": ">=8" } }, + "node_modules/browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -493,6 +843,12 @@ "node": "*" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -515,6 +871,26 @@ "node": ">=6" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001513", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001513.tgz", + "integrity": "sha512-pnjGJo7SOOjAGytZZ203Em95MRM8Cr6jhCXNF/FAXTpCTRTECnqQWLpiTRqrFtdYcth8hf4WECUpkezuYsMVww==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -575,12 +951,35 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, "node_modules/ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -599,6 +998,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, "node_modules/commander": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", @@ -813,6 +1218,12 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/electron-to-chromium": { + "version": "1.4.454", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.454.tgz", + "integrity": "sha512-pmf1rbAStw8UEQ0sr2cdJtWl48ZMuPD9Sto8HVQOq9vx9j2WgDEN6lYoaqFvqEHYOmGA9oRGn7LqWI9ta0YugQ==", + "dev": true + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -822,6 +1233,19 @@ "once": "^1.4.0" } }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/entities": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz", @@ -834,372 +1258,31 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/esbuild": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.48.tgz", - "integrity": "sha512-w6N1Yn5MtqK2U1/WZTX9ZqUVb8IOLZkZ5AdHkT6x3cHDMVsYWC7WPdiLmx19w3i4Rwzy5LqsEMtVihG3e4rFzA==", + "node_modules/envinfo": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", + "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", "dev": true, - "hasInstallScript": true, "bin": { - "esbuild": "bin/esbuild" + "envinfo": "dist/cli.js" }, "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "esbuild-android-64": "0.14.48", - "esbuild-android-arm64": "0.14.48", - "esbuild-darwin-64": "0.14.48", - "esbuild-darwin-arm64": "0.14.48", - "esbuild-freebsd-64": "0.14.48", - "esbuild-freebsd-arm64": "0.14.48", - "esbuild-linux-32": "0.14.48", - "esbuild-linux-64": "0.14.48", - "esbuild-linux-arm": "0.14.48", - "esbuild-linux-arm64": "0.14.48", - "esbuild-linux-mips64le": "0.14.48", - "esbuild-linux-ppc64le": "0.14.48", - "esbuild-linux-riscv64": "0.14.48", - "esbuild-linux-s390x": "0.14.48", - "esbuild-netbsd-64": "0.14.48", - "esbuild-openbsd-64": "0.14.48", - "esbuild-sunos-64": "0.14.48", - "esbuild-windows-32": "0.14.48", - "esbuild-windows-64": "0.14.48", - "esbuild-windows-arm64": "0.14.48" + "node": ">=4" } }, - "node_modules/esbuild-android-64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.48.tgz", - "integrity": "sha512-3aMjboap/kqwCUpGWIjsk20TtxVoKck8/4Tu19rubh7t5Ra0Yrpg30Mt1QXXlipOazrEceGeWurXKeFJgkPOUg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true }, - "node_modules/esbuild-android-arm64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.48.tgz", - "integrity": "sha512-vptI3K0wGALiDq+EvRuZotZrJqkYkN5282iAfcffjI5lmGG9G1ta/CIVauhY42MBXwEgDJkweiDcDMRLzBZC4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.48.tgz", - "integrity": "sha512-gGQZa4+hab2Va/Zww94YbshLuWteyKGD3+EsVon8EWTWhnHFRm5N9NbALNbwi/7hQ/hM1Zm4FuHg+k6BLsl5UA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.48.tgz", - "integrity": "sha512-bFjnNEXjhZT+IZ8RvRGNJthLWNHV5JkCtuOFOnjvo5pC0sk2/QVk0Qc06g2PV3J0TcU6kaPC3RN9yy9w2PSLEA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.48.tgz", - "integrity": "sha512-1NOlwRxmOsnPcWOGTB10JKAkYSb2nue0oM1AfHWunW/mv3wERfJmnYlGzL3UAOIUXZqW8GeA2mv+QGwq7DToqA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.48.tgz", - "integrity": "sha512-gXqKdO8wabVcYtluAbikDH2jhXp+Klq5oCD5qbVyUG6tFiGhrC9oczKq3vIrrtwcxDQqK6+HDYK8Zrd4bCA9Gw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.48.tgz", - "integrity": "sha512-ghGyDfS289z/LReZQUuuKq9KlTiTspxL8SITBFQFAFRA/IkIvDpnZnCAKTCjGXAmUqroMQfKJXMxyjJA69c/nQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.48.tgz", - "integrity": "sha512-vni3p/gppLMVZLghI7oMqbOZdGmLbbKR23XFARKnszCIBpEMEDxOMNIKPmMItQrmH/iJrL1z8Jt2nynY0bE1ug==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.48.tgz", - "integrity": "sha512-+VfSV7Akh1XUiDNXgqgY1cUP1i2vjI+BmlyXRfVz5AfV3jbpde8JTs5Q9sYgaoq5cWfuKfoZB/QkGOI+QcL1Tw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.48.tgz", - "integrity": "sha512-3CFsOlpoxlKPRevEHq8aAntgYGYkE1N9yRYAcPyng/p4Wyx0tPR5SBYsxLKcgPB9mR8chHEhtWYz6EZ+H199Zw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.48.tgz", - "integrity": "sha512-cs0uOiRlPp6ymknDnjajCgvDMSsLw5mST2UXh+ZIrXTj2Ifyf2aAP3Iw4DiqgnyYLV2O/v/yWBJx+WfmKEpNLA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.48.tgz", - "integrity": "sha512-+2F0vJMkuI0Wie/wcSPDCqXvSFEELH7Jubxb7mpWrA/4NpT+/byjxDz0gG6R1WJoeDefcrMfpBx4GFNN1JQorQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.48.tgz", - "integrity": "sha512-BmaK/GfEE+5F2/QDrIXteFGKnVHGxlnK9MjdVKMTfvtmudjY3k2t8NtlY4qemKSizc+QwyombGWTBDc76rxePA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.48.tgz", - "integrity": "sha512-tndw/0B9jiCL+KWKo0TSMaUm5UWBLsfCKVdbfMlb3d5LeV9WbijZ8Ordia8SAYv38VSJWOEt6eDCdOx8LqkC4g==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.48.tgz", - "integrity": "sha512-V9hgXfwf/T901Lr1wkOfoevtyNkrxmMcRHyticybBUHookznipMOHoF41Al68QBsqBxnITCEpjjd4yAos7z9Tw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.48.tgz", - "integrity": "sha512-+IHf4JcbnnBl4T52egorXMatil/za0awqzg2Vy6FBgPcBpisDWT2sVz/tNdrK9kAqj+GZG/jZdrOkj7wsrNTKA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-plugin-wasm": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/esbuild-plugin-wasm/-/esbuild-plugin-wasm-1.1.0.tgz", - "integrity": "sha512-0bQ6+1tUbySSnxzn5jnXHMDvYnT0cN/Wd4Syk8g/sqAIJUg7buTIi22svS3Qz6ssx895NT+TgLPb33xi1OkZig==", + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "individual", - "url": "https://ko-fi.com/tschrock" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.48.tgz", - "integrity": "sha512-77m8bsr5wOpOWbGi9KSqDphcq6dFeJyun8TA+12JW/GAjyfTwVtOnN8DOt6DSPUfEV+ltVMNqtXUeTeMAxl5KA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.48.tgz", - "integrity": "sha512-EPgRuTPP8vK9maxpTGDe5lSoIBHGKO/AuxDncg5O3NkrPeLNdvvK8oywB0zGaAZXxYWfNNSHskvvDgmfVTguhg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.48.tgz", - "integrity": "sha512-YmpXjdT1q0b8ictSdGwH3M8VCoqPpK1/UArze3X199w6u8hUx3V8BhAi1WjbsfDYRBanVVtduAhh2sirImtAvA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.48.tgz", - "integrity": "sha512-HHaOMCsCXp0rz5BT2crTka6MPWVno121NKApsGs/OIW5QC0ggC69YMGs1aJct9/9FSUF4A1xNE/cLvgB5svR4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "node": ">=6" } }, "node_modules/escape-string-regexp": { @@ -1423,6 +1506,15 @@ "node": ">=0.10.0" } }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -1478,6 +1570,15 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -1520,6 +1621,19 @@ "node": ">=8" } }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -1635,6 +1749,12 @@ "node": ">=10.13.0" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, "node_modules/globals": { "version": "13.16.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", @@ -1670,6 +1790,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -1779,6 +1905,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -1810,6 +1955,15 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -1822,6 +1976,18 @@ "is-ci": "bin.js" } }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1852,12 +2018,62 @@ "node": ">=0.12.0" } }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -1870,6 +2086,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -1893,6 +2115,15 @@ "prebuild-install": "^7.0.1" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -1924,6 +2155,27 @@ "uc.micro": "^1.0.1" } }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -1973,6 +2225,12 @@ "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", "dev": true }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -2007,6 +2265,27 @@ "node": ">=4" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", @@ -2067,6 +2346,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, "node_modules/node-abi": { "version": "3.22.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.22.0.tgz", @@ -2085,6 +2370,12 @@ "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", "dev": true }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -2152,6 +2443,42 @@ "node": ">= 14" } }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -2207,6 +2534,15 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -2225,6 +2561,12 @@ "node": ">=8" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -2240,6 +2582,12 @@ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -2252,6 +2600,18 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/prebuild-install": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", @@ -2356,6 +2716,15 @@ } ] }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -2406,6 +2775,18 @@ "node": ">= 6" } }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -2418,6 +2799,44 @@ "url": "https://github.com/sponsors/mysticatea" } }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -2501,6 +2920,24 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -2516,6 +2953,27 @@ "node": ">=10" } }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2605,6 +3063,25 @@ "node": ">=8" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -2650,6 +3127,27 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/tar-fs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", @@ -2678,6 +3176,64 @@ "node": ">=6" } }, + "node_modules/terser": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", + "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -2708,6 +3264,25 @@ "node": ">=8.0" } }, + "node_modules/ts-loader": { + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.4.tgz", + "integrity": "sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, "node_modules/tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", @@ -2816,6 +3391,36 @@ "integrity": "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==", "dev": true }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -2957,6 +3562,142 @@ "node": ">=4" } }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.88.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", + "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -2972,6 +3713,12 @@ "node": ">= 8" } }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -3043,6 +3790,12 @@ } }, "dependencies": { + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, "@eslint/eslintrc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", @@ -3077,6 +3830,55 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3103,6 +3905,32 @@ "fastq": "^1.6.0" } }, + "@types/eslint": { + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.0.tgz", + "integrity": "sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, "@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -3216,12 +4044,198 @@ "eslint-visitor-keys": "^3.3.0" } }, - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "dev": true }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "requires": {} + }, + "@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "requires": {} + }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -3241,6 +4255,13 @@ "uri-js": "^4.2.2" } }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -3326,6 +4347,18 @@ "fill-range": "^7.0.1" } }, + "browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + } + }, "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -3342,6 +4375,12 @@ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -3358,6 +4397,12 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, + "caniuse-lite": { + "version": "1.0.30001513", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001513.tgz", + "integrity": "sha512-pnjGJo7SOOjAGytZZ203Em95MRM8Cr6jhCXNF/FAXTpCTRTECnqQWLpiTRqrFtdYcth8hf4WECUpkezuYsMVww==", + "dev": true + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -3403,12 +4448,29 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -3424,6 +4486,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, "commander": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", @@ -3569,6 +4637,12 @@ "domhandler": "^5.0.1" } }, + "electron-to-chromium": { + "version": "1.4.454", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.454.tgz", + "integrity": "sha512-pmf1rbAStw8UEQ0sr2cdJtWl48ZMuPD9Sto8HVQOq9vx9j2WgDEN6lYoaqFvqEHYOmGA9oRGn7LqWI9ta0YugQ==", + "dev": true + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -3578,185 +4652,39 @@ "once": "^1.4.0" } }, + "enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, "entities": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz", "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==", "dev": true }, - "esbuild": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.48.tgz", - "integrity": "sha512-w6N1Yn5MtqK2U1/WZTX9ZqUVb8IOLZkZ5AdHkT6x3cHDMVsYWC7WPdiLmx19w3i4Rwzy5LqsEMtVihG3e4rFzA==", - "dev": true, - "requires": { - "esbuild-android-64": "0.14.48", - "esbuild-android-arm64": "0.14.48", - "esbuild-darwin-64": "0.14.48", - "esbuild-darwin-arm64": "0.14.48", - "esbuild-freebsd-64": "0.14.48", - "esbuild-freebsd-arm64": "0.14.48", - "esbuild-linux-32": "0.14.48", - "esbuild-linux-64": "0.14.48", - "esbuild-linux-arm": "0.14.48", - "esbuild-linux-arm64": "0.14.48", - "esbuild-linux-mips64le": "0.14.48", - "esbuild-linux-ppc64le": "0.14.48", - "esbuild-linux-riscv64": "0.14.48", - "esbuild-linux-s390x": "0.14.48", - "esbuild-netbsd-64": "0.14.48", - "esbuild-openbsd-64": "0.14.48", - "esbuild-sunos-64": "0.14.48", - "esbuild-windows-32": "0.14.48", - "esbuild-windows-64": "0.14.48", - "esbuild-windows-arm64": "0.14.48" - } - }, - "esbuild-android-64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.48.tgz", - "integrity": "sha512-3aMjboap/kqwCUpGWIjsk20TtxVoKck8/4Tu19rubh7t5Ra0Yrpg30Mt1QXXlipOazrEceGeWurXKeFJgkPOUg==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.48.tgz", - "integrity": "sha512-vptI3K0wGALiDq+EvRuZotZrJqkYkN5282iAfcffjI5lmGG9G1ta/CIVauhY42MBXwEgDJkweiDcDMRLzBZC4g==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.48.tgz", - "integrity": "sha512-gGQZa4+hab2Va/Zww94YbshLuWteyKGD3+EsVon8EWTWhnHFRm5N9NbALNbwi/7hQ/hM1Zm4FuHg+k6BLsl5UA==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.48.tgz", - "integrity": "sha512-bFjnNEXjhZT+IZ8RvRGNJthLWNHV5JkCtuOFOnjvo5pC0sk2/QVk0Qc06g2PV3J0TcU6kaPC3RN9yy9w2PSLEA==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.48.tgz", - "integrity": "sha512-1NOlwRxmOsnPcWOGTB10JKAkYSb2nue0oM1AfHWunW/mv3wERfJmnYlGzL3UAOIUXZqW8GeA2mv+QGwq7DToqA==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.48.tgz", - "integrity": "sha512-gXqKdO8wabVcYtluAbikDH2jhXp+Klq5oCD5qbVyUG6tFiGhrC9oczKq3vIrrtwcxDQqK6+HDYK8Zrd4bCA9Gw==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.48.tgz", - "integrity": "sha512-ghGyDfS289z/LReZQUuuKq9KlTiTspxL8SITBFQFAFRA/IkIvDpnZnCAKTCjGXAmUqroMQfKJXMxyjJA69c/nQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.48.tgz", - "integrity": "sha512-vni3p/gppLMVZLghI7oMqbOZdGmLbbKR23XFARKnszCIBpEMEDxOMNIKPmMItQrmH/iJrL1z8Jt2nynY0bE1ug==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.48.tgz", - "integrity": "sha512-+VfSV7Akh1XUiDNXgqgY1cUP1i2vjI+BmlyXRfVz5AfV3jbpde8JTs5Q9sYgaoq5cWfuKfoZB/QkGOI+QcL1Tw==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.48.tgz", - "integrity": "sha512-3CFsOlpoxlKPRevEHq8aAntgYGYkE1N9yRYAcPyng/p4Wyx0tPR5SBYsxLKcgPB9mR8chHEhtWYz6EZ+H199Zw==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.48.tgz", - "integrity": "sha512-cs0uOiRlPp6ymknDnjajCgvDMSsLw5mST2UXh+ZIrXTj2Ifyf2aAP3Iw4DiqgnyYLV2O/v/yWBJx+WfmKEpNLA==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.48.tgz", - "integrity": "sha512-+2F0vJMkuI0Wie/wcSPDCqXvSFEELH7Jubxb7mpWrA/4NpT+/byjxDz0gG6R1WJoeDefcrMfpBx4GFNN1JQorQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.48.tgz", - "integrity": "sha512-BmaK/GfEE+5F2/QDrIXteFGKnVHGxlnK9MjdVKMTfvtmudjY3k2t8NtlY4qemKSizc+QwyombGWTBDc76rxePA==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.48.tgz", - "integrity": "sha512-tndw/0B9jiCL+KWKo0TSMaUm5UWBLsfCKVdbfMlb3d5LeV9WbijZ8Ordia8SAYv38VSJWOEt6eDCdOx8LqkC4g==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.48.tgz", - "integrity": "sha512-V9hgXfwf/T901Lr1wkOfoevtyNkrxmMcRHyticybBUHookznipMOHoF41Al68QBsqBxnITCEpjjd4yAos7z9Tw==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.48.tgz", - "integrity": "sha512-+IHf4JcbnnBl4T52egorXMatil/za0awqzg2Vy6FBgPcBpisDWT2sVz/tNdrK9kAqj+GZG/jZdrOkj7wsrNTKA==", - "dev": true, - "optional": true - }, - "esbuild-plugin-wasm": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/esbuild-plugin-wasm/-/esbuild-plugin-wasm-1.1.0.tgz", - "integrity": "sha512-0bQ6+1tUbySSnxzn5jnXHMDvYnT0cN/Wd4Syk8g/sqAIJUg7buTIi22svS3Qz6ssx895NT+TgLPb33xi1OkZig==", + "envinfo": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", + "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", "dev": true }, - "esbuild-sunos-64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.48.tgz", - "integrity": "sha512-77m8bsr5wOpOWbGi9KSqDphcq6dFeJyun8TA+12JW/GAjyfTwVtOnN8DOt6DSPUfEV+ltVMNqtXUeTeMAxl5KA==", - "dev": true, - "optional": true + "es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true }, - "esbuild-windows-32": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.48.tgz", - "integrity": "sha512-EPgRuTPP8vK9maxpTGDe5lSoIBHGKO/AuxDncg5O3NkrPeLNdvvK8oywB0zGaAZXxYWfNNSHskvvDgmfVTguhg==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.48.tgz", - "integrity": "sha512-YmpXjdT1q0b8ictSdGwH3M8VCoqPpK1/UArze3X199w6u8hUx3V8BhAi1WjbsfDYRBanVVtduAhh2sirImtAvA==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.14.48", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.48.tgz", - "integrity": "sha512-HHaOMCsCXp0rz5BT2crTka6MPWVno121NKApsGs/OIW5QC0ggC69YMGs1aJct9/9FSUF4A1xNE/cLvgB5svR4g==", - "dev": true, - "optional": true + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true }, "escape-string-regexp": { "version": "4.0.0", @@ -3922,6 +4850,12 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, "expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -3970,6 +4904,12 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, "fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -4006,6 +4946,16 @@ "to-regex-range": "^5.0.1" } }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -4092,6 +5042,12 @@ "is-glob": "^4.0.3" } }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, "globals": { "version": "13.16.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", @@ -4115,6 +5071,12 @@ "slash": "^3.0.0" } }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -4179,6 +5141,16 @@ "resolve-from": "^4.0.0" } }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -4207,6 +5179,12 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true + }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -4216,6 +5194,15 @@ "ci-info": "^2.0.0" } }, + "is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4237,12 +5224,49 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -4252,6 +5276,12 @@ "argparse": "^2.0.1" } }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -4274,6 +5304,12 @@ "prebuild-install": "^7.0.1" } }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -4299,6 +5335,21 @@ "uc.micro": "^1.0.1" } }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -4341,6 +5392,12 @@ "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", "dev": true }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -4363,6 +5420,21 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, "mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", @@ -4414,6 +5486,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, "node-abi": { "version": "3.22.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.22.0.tgz", @@ -4429,6 +5507,12 @@ "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", "dev": true }, + "node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, "nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -4481,6 +5565,30 @@ "vsce": "^2.6.3" } }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -4526,6 +5634,12 @@ "parse5": "^7.0.0" } }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -4538,6 +5652,12 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -4550,12 +5670,27 @@ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, "prebuild-install": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", @@ -4619,6 +5754,15 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -4659,12 +5803,49 @@ "util-deprecate": "^1.0.1" } }, + "rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "requires": { + "resolve": "^1.20.0" + } + }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, + "resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "requires": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -4707,6 +5888,17 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, "semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -4716,6 +5908,24 @@ "lru-cache": "^6.0.0" } }, + "serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4765,6 +5975,22 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -4798,6 +6024,18 @@ "has-flag": "^4.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, "tar-fs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", @@ -4823,6 +6061,39 @@ "readable-stream": "^3.1.1" } }, + "terser": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", + "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4847,6 +6118,18 @@ "is-number": "^7.0.0" } }, + "ts-loader": { + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.4.tgz", + "integrity": "sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + } + }, "tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", @@ -4929,6 +6212,16 @@ "integrity": "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==", "dev": true }, + "update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -5048,6 +6341,93 @@ } } }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "webpack": { + "version": "5.88.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", + "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + } + }, + "webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true + } + } + }, + "webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -5057,6 +6437,12 @@ "isexe": "^2.0.0" } }, + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", diff --git a/packages/extension/package.json b/packages/extension/package.json index 4f4293465..ccf2b0893 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -18,12 +18,13 @@ "Programming Languages" ], "activationEvents": [ + "*", "onCommand:extension.htmlToDioxusRsx", "onCommand:extension.htmlToDioxusComponent", "onCommand:extension.formatRsx", "onCommand:extension.formatRsxDocument" ], - "main": "./out/main", + "main": "./out/main.js", "extensionKind": [ "ui", "workspace" @@ -76,10 +77,17 @@ }, "scripts": { "vscode:prepublish": "npm run build-base -- --minify", - "package": "vsce package -o rust-analyzer.vsix", - "build-base": "node src/build.js", - "build": "npm run build-base -- --sourcemap", - "watch": "npm run build-base -- --sourcemap --watch", + "// package": "vsce package -o rust-analyzer.vsix", + "// build-base": "node src/build.js", + "build-wasm": "cargo build --target wasm32-unknown-unknown --release && cp ../../target/wasm32-unknown-unknown/release/dioxus_ext.wasm pkg/", + "bind-wasm": "wasm-bindgen --out-dir=pkg --target=web --omit-default-module-path --omit-imports pkg/dioxus_ext.wasm", + "build-base": "npm run build-wasm && npm run bind-wasm && webpack", + "webpack": "webpack --mode development", + "webpack-dev": "webpack --mode development --watch", + "package": "webpack --mode production --devtool hidden-source-map", + "test-compile": "tsc -p ./", + "build": "npm run build-base -- --devtool hidden-source-map", + "watch": "npm run build-base -- --devtool hidden-source-map --watch", "lint": "prettier --check . && eslint -c .eslintrc.js --ext ts ./src ./tests", "fix": "prettier --write . && eslint -c .eslintrc.js --ext ts ./src ./tests --fix", "pretest": "tsc && npm run build", @@ -91,15 +99,16 @@ "@typescript-eslint/eslint-plugin": "^5.30.5", "@typescript-eslint/parser": "^5.30.5", "cross-env": "^7.0.3", - "esbuild": "^0.14.27", - "esbuild-plugin-wasm": "^1.1.0", "eslint": "^8.19.0", "eslint-config-prettier": "^8.5.0", "ovsx": "^0.5.1", "prettier": "^2.6.2", + "ts-loader": "^9.4.4", "tslib": "^2.3.0", "typescript": "^4.7.4", - "vsce": "^2.7.0" + "vsce": "^2.7.0", + "webpack": "^5.88.1", + "webpack-cli": "^5.1.4" }, "dependencies": { "dioxus-ext": "./pkg", diff --git a/packages/extension/pkg/package.json b/packages/extension/pkg/package.json new file mode 100644 index 000000000..b4ba7d2a5 --- /dev/null +++ b/packages/extension/pkg/package.json @@ -0,0 +1,14 @@ +{ + "name": "dioxus-ext", + "version": "0.1.0", + "files": [ + "dioxus_ext_bg.wasm", + "dioxus_ext.js", + "dioxus_ext.d.ts", + "dioxus_ext_bg.js", + "dioxus_ext_bg.d.ts", + "dioxus_ext_bg.wasm.d.ts" + ], + "main": "dioxus_ext.js", + "types": "dioxus_ext.d.ts" +} diff --git a/packages/extension/src/build.js b/packages/extension/src/build.js deleted file mode 100644 index de0dffdb9..000000000 --- a/packages/extension/src/build.js +++ /dev/null @@ -1,23 +0,0 @@ -// build.ts -import('esbuild').then((esbuild) => { - import('esbuild-plugin-wasm').then((wasmLoader) => { - // "build-base": "esbuild ./src/main.ts --bundle --outfile=out/main.js --external:vscode --format=cjs --platform=node --target=node16", - esbuild.build({ - entryPoints: ['src/main.ts'], - outfile: 'out/main.js', - bundle: true, - platform: 'node', - target: 'node16', - format: 'esm', - external: ['vscode'], - plugins: [ - wasmLoader.wasmLoader({ - mode: 'embedded' - }) - ] - }); - }); -}); - - - diff --git a/packages/extension/src/lib.rs b/packages/extension/src/lib.rs index 2dc069aa3..a5a55a3ae 100644 --- a/packages/extension/src/lib.rs +++ b/packages/extension/src/lib.rs @@ -25,10 +25,3 @@ pub fn translate_rsx(contents: String, component: bool) -> String { out } - -// rsx! { -// div {} -// div {} -// div {} -// div {} div {} -// } diff --git a/packages/extension/src/main.ts b/packages/extension/src/main.ts index ac2255268..2005612fd 100644 --- a/packages/extension/src/main.ts +++ b/packages/extension/src/main.ts @@ -1,9 +1,9 @@ import * as vscode from 'vscode'; -import { translate_rsx } from 'dioxus-ext'; - +import init, { translate_rsx } from 'dioxus-ext'; export async function activate(context: vscode.ExtensionContext) { - + const wasmSourceCode = await vscode.workspace.fs.readFile(vscode.Uri.joinPath(context.extensionUri, "./pkg/dioxus_ext_bg.wasm")); + const wasmPromise = await init(wasmSourceCode); context.subscriptions.push( vscode.commands.registerCommand('extension.htmlToDioxusRsx', () => translate(false)), @@ -15,6 +15,7 @@ export async function activate(context: vscode.ExtensionContext) { } function translate(component: boolean) { + const editor = vscode.window.activeTextEditor; if (!editor) return; @@ -32,23 +33,6 @@ function translate(component: boolean) { } else { vscode.window.showWarningMessage(`Errors occurred while translating, make sure this block of HTML is valid`); } - - // const params = ["translate"]; - // if (component) params.push("--component"); - // params.push("--raw", html); - - // const child_proc = spawn(serverPath, params); - - // let result = ''; - // child_proc.stdout?.on('data', data => result += data); - - // child_proc.on('close', () => { - // if (result.length > 0) editor.edit(editBuilder => editBuilder.replace(editor.selection, result)); - // }); - - // child_proc.on('error', (err) => { - // vscode.window.showWarningMessage(`Errors occurred while translating. Make sure you have the most recent Dioxus-CLI installed! \n${err}`); - // }); } diff --git a/packages/extension/tsconfig.json b/packages/extension/tsconfig.json index e6e715d85..b492faa7b 100644 --- a/packages/extension/tsconfig.json +++ b/packages/extension/tsconfig.json @@ -12,7 +12,7 @@ }, "exclude": [ "node_modules", - ".vscode-test" - // "src/pkg" + ".vscode-test", + "out" ] } diff --git a/packages/extension/webpack.config.js b/packages/extension/webpack.config.js new file mode 100644 index 000000000..f61d87f14 --- /dev/null +++ b/packages/extension/webpack.config.js @@ -0,0 +1,66 @@ +//@ts-check + +'use strict'; + +const path = require('path'); +const webpack = require('webpack'); + +/**@type {import('webpack').Configuration}*/ +const config = { + target: 'webworker', // vscode extensions run in webworker context for VS Code web 📖 -> https://webpack.js.org/configuration/target/#target + experiments: { + + asyncWebAssembly: true, + layers: true, + + + // asyncWebAssembly: true, + // syncWebAssembly: true, + }, + entry: './src/main.ts', // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ + output: { + // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ + path: path.resolve(__dirname, 'out'), + filename: 'main.js', + libraryTarget: 'commonjs2', + devtoolModuleFilenameTemplate: '../[resource-path]', + publicPath: '', + }, + devtool: 'source-map', + externals: { + vscode: 'commonjs vscode' // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ + }, + resolve: { + // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader + mainFields: ['browser', 'module', 'main'], // look for `browser` entry point in imported node modules + extensions: ['.ts', '.js'], + alias: { + // provides alternate implementation for node module and source files + }, + fallback: { + // Webpack 5 no longer polyfills Node.js core modules automatically. + // see https://webpack.js.org/configuration/resolve/#resolvefallback + // for the list of Node.js core module polyfills. + // "util": require.resolve("util/") + } + }, + module: { + rules: [ + { + test: /\.ts$/, + exclude: /node_modules/, + use: [ + { + loader: 'ts-loader' + } + ] + } + // { + // test: /\.wasm$/, + // type: "asset/inline", + // } + ] + }, + +}; +module.exports = config; From e96fd1ce574586767d55b17bee36b0957db18bd7 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Sat, 8 Jul 2023 19:27:25 -0700 Subject: [PATCH 436/459] Add a little bit of docs and change activation event --- packages/autofmt/Cargo.toml | 1 + packages/autofmt/src/lib.rs | 2 + packages/extension/package.json | 6 +- packages/extension/src/lib.rs | 35 +++- packages/extension/src/main.ts | 280 ++++++--------------------- packages/extension/webpack.config.js | 10 - 6 files changed, 93 insertions(+), 241 deletions(-) diff --git a/packages/autofmt/Cargo.toml b/packages/autofmt/Cargo.toml index 1c947dc21..5c67a814a 100644 --- a/packages/autofmt/Cargo.toml +++ b/packages/autofmt/Cargo.toml @@ -20,6 +20,7 @@ serde = { version = "1.0.136", features = ["derive"] } prettyplease = { package = "prettier-please", version = "0.1.16", features = [ "verbatim", ] } +wasm-bindgen.workspace = true [dev-dependencies] pretty_assertions = "1.2.1" diff --git a/packages/autofmt/src/lib.rs b/packages/autofmt/src/lib.rs index 0d2426a0b..c81a50459 100644 --- a/packages/autofmt/src/lib.rs +++ b/packages/autofmt/src/lib.rs @@ -14,6 +14,8 @@ mod element; mod expr; mod writer; +use wasm_bindgen::prelude::*; + /// A modification to the original file to be applied by an IDE /// /// Right now this re-writes entire rsx! blocks at a time, instead of precise line-by-line changes. diff --git a/packages/extension/package.json b/packages/extension/package.json index ccf2b0893..5cb7e60f1 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -18,11 +18,7 @@ "Programming Languages" ], "activationEvents": [ - "*", - "onCommand:extension.htmlToDioxusRsx", - "onCommand:extension.htmlToDioxusComponent", - "onCommand:extension.formatRsx", - "onCommand:extension.formatRsxDocument" + "onLanguage:rust" ], "main": "./out/main.js", "extensionKind": [ diff --git a/packages/extension/src/lib.rs b/packages/extension/src/lib.rs index a5a55a3ae..7061f6217 100644 --- a/packages/extension/src/lib.rs +++ b/packages/extension/src/lib.rs @@ -1,12 +1,8 @@ //! This file exports functions into the vscode extension +use dioxus_autofmt::FormattedBlock; use wasm_bindgen::prelude::*; -#[wasm_bindgen] -pub fn greeet() { - // -} - #[wasm_bindgen] pub fn format_rsx(raw: String) -> String { let block = dioxus_autofmt::fmt_block(&raw, 0); @@ -14,7 +10,34 @@ pub fn format_rsx(raw: String) -> String { } #[wasm_bindgen] -pub fn translate_rsx(contents: String, component: bool) -> String { +pub fn format_selection(raw: String) -> String { + let block = dioxus_autofmt::fmt_block(&raw, 0); + block.unwrap() +} + +#[wasm_bindgen] +pub struct FormatBlockInstance { + new: String, + _edits: Vec, +} + +#[wasm_bindgen] +impl FormatBlockInstance { + #[wasm_bindgen] + pub fn formatted(&self) -> String { + self.new.clone() + } +} + +#[wasm_bindgen] +pub fn format_file(contents: String) -> FormatBlockInstance { + let _edits = dioxus_autofmt::fmt_file(&contents); + let out = dioxus_autofmt::apply_formats(&contents, _edits.clone()); + FormatBlockInstance { new: out, _edits } +} + +#[wasm_bindgen] +pub fn translate_rsx(contents: String, _component: bool) -> String { // Ensure we're loading valid HTML let dom = html_parser::Dom::parse(&contents).unwrap(); diff --git a/packages/extension/src/main.ts b/packages/extension/src/main.ts index 2005612fd..1937c067a 100644 --- a/packages/extension/src/main.ts +++ b/packages/extension/src/main.ts @@ -1,16 +1,26 @@ import * as vscode from 'vscode'; -import init, { translate_rsx } from 'dioxus-ext'; +import init, { translate_rsx, format_file } from 'dioxus-ext'; export async function activate(context: vscode.ExtensionContext) { + // Load the wasm from the file system const wasmSourceCode = await vscode.workspace.fs.readFile(vscode.Uri.joinPath(context.extensionUri, "./pkg/dioxus_ext_bg.wasm")); - const wasmPromise = await init(wasmSourceCode); + // Wait for the initialization to finish + // This is using the byte buffer directly which won't go through the "fetch" machinery + // + // For whatever reason, wasm-bindgen generates `fetch` when we don't want it to + // VSCode doesn't have a `fetch` implementation, but we don't really care about polyfilling it + await init(wasmSourceCode); + + // Todo: + // I want a paste-handler that translates HTML to RSX whenever HTML is pasted into an Rsx block + // Or, a little tooltip that pops up and asks if you want to translate the HTML to RSX context.subscriptions.push( vscode.commands.registerCommand('extension.htmlToDioxusRsx', () => translate(false)), vscode.commands.registerCommand('extension.htmlToDioxusComponent', () => translate(true)), - // vscode.commands.registerCommand('extension.formatRsx', fmtSelection), - // vscode.commands.registerCommand('extension.formatRsxDocument', formatRsxDocument), - // vscode.workspace.onWillSaveTextDocument(fmtDocumentOnSave) + vscode.commands.registerCommand('extension.formatRsx', fmtSelection), + vscode.commands.registerCommand('extension.formatRsxDocument', formatRsxDocument), + vscode.workspace.onWillSaveTextDocument(fmtDocumentOnSave) ); } @@ -36,226 +46,56 @@ function translate(component: boolean) { } +function formatRsxDocument() { + const editor = vscode.window.activeTextEditor; + if (!editor) return; -// function formatRsxDocument() { -// const editor = vscode.window.activeTextEditor; -// if (!editor) return; -// fmtDocument(editor.document); -// } + fmtDocument(editor.document); +} -// function fmtSelection() { -// const editor = vscode.window.activeTextEditor; -// if (!editor) return; +function fmtSelection() { + const editor = vscode.window.activeTextEditor; + if (!editor) return; -// const unformatted = editor.document.getText(editor.selection); + const unformatted = editor.document.getText(editor.selection); -// if (unformatted.length == 0) { -// vscode.window.showWarningMessage("Please select rsx invoking this command!"); -// return; -// } - -// const fileDir = editor.document.fileName.slice(0, editor.document.fileName.lastIndexOf('\\')); - -// const child_proc = spawn(serverPath, ["fmt", "--raw", unformatted.toString()], { -// cwd: fileDir ? fileDir : undefined, -// }); -// let result = ''; - -// child_proc.stdout?.on('data', data => result += data); - -// child_proc.on('close', () => { -// if (result.length > 0) editor.edit(editBuilder => editBuilder.replace(editor.selection, result)); -// }); - -// child_proc.on('error', (err) => { -// vscode.window.showWarningMessage(`Errors occurred while translating. Make sure you have the most recent Dioxus-CLI installed! \n${err}`); -// }); -// } - -// function fmtDocumentOnSave(e: vscode.TextDocumentWillSaveEvent) { -// // check the settings to make sure format on save is configured -// const dioxusConfig = vscode.workspace.getConfiguration('dioxus', e.document).get('formatOnSave'); -// const globalConfig = vscode.workspace.getConfiguration('editor', e.document).get('formatOnSave'); -// if ( -// (dioxusConfig === 'enabled') || -// (dioxusConfig !== 'disabled' && globalConfig) -// ) { -// fmtDocument(e.document); -// } -// } - -// function fmtDocument(document: vscode.TextDocument) { -// try { -// if (document.languageId !== "rust" || document.uri.scheme !== "file") { -// return; -// } - -// const [editor,] = vscode.window.visibleTextEditors.filter(editor => editor.document.fileName === document.fileName); -// if (!editor) return; // Need an editor to apply text edits. - -// const fileDir = document.fileName.slice(0, document.fileName.lastIndexOf('\\')); -// const child_proc = spawn(serverPath, ["fmt", "--file", document.fileName], { -// cwd: fileDir ? fileDir : undefined, -// }); - -// let result = ''; -// child_proc.stdout?.on('data', data => result += data); - -// /*type RsxEdit = { -// formatted: string, -// start: number, -// end: number -// }*/ - -// child_proc.on('close', () => { -// if (child_proc.exitCode !== 0) { -// vscode.window.showWarningMessage(`Errors occurred while formatting. Make sure you have the most recent Dioxus-CLI installed!\nDioxus-CLI exited with exit code ${child_proc.exitCode}\n\nData from Dioxus-CLI:\n${result}`); -// return; -// } - -// }); - -// child_proc.on('error', (err) => { -// vscode.window.showWarningMessage(`Errors occurred while formatting. Make sure you have the most recent Dioxus-CLI installed! \n${err}`); -// }); -// } catch (error) { -// vscode.window.showWarningMessage(`Errors occurred while formatting. Make sure you have the most recent Dioxus-CLI installed! \n${error}`); -// } -// } - - - -// // I'm using the approach defined in rust-analyzer here -// // -// // We ship the server as part of the extension, but we need to handle external paths and such -// // -// // https://github.com/rust-lang/rust-analyzer/blob/fee5555cfabed4b8abbd40983fc4442df4007e49/editors/code/src/main.ts#L270 -// async function bootstrap(context: vscode.ExtensionContext): Promise { - -// const ext = process.platform === "win32" ? ".exe" : ""; -// const bundled = vscode.Uri.joinPath(context.extensionUri, "server", `dioxus${ext}`); -// const bundledExists = await vscode.workspace.fs.stat(bundled).then( -// () => true, -// () => false -// ); - -// // if bunddled doesn't exist, try using a locally-installed version -// if (!bundledExists) { -// return "dioxus"; -// } - -// return bundled.fsPath; -// } - - -// function onPasteHandler() { -// // check settings to see if we should convert HTML to Rsx -// if (vscode.workspace.getConfiguration('dioxus').get('convertOnPaste')) { -// convertHtmlToRsxOnPaste(); -// } -// } - -// function convertHtmlToRsxOnPaste() { -// const editor = vscode.window.activeTextEditor; -// if (!editor) return; - -// // get the cursor location -// const cursor = editor.selection.active; - -// // try to parse the HTML at the cursor location -// const html = editor.document.getText(new vscode.Range(cursor, cursor)); -// } - -/*if (result.length === 0) return; - -// Used for error message: -const originalResult = result; -try { - // Only parse the last non empty line, to skip log warning messages: - const lines = result.replaceAll('\r\n', '\n').split('\n'); - const nonEmptyLines = lines.filter(line => line.trim().length !== 0); - result = nonEmptyLines[nonEmptyLines.length - 1] ?? ''; - - if (result.length === 0) return; - - const decoded: RsxEdit[] = JSON.parse(result); - if (decoded.length === 0) return; - - // Preform edits at the end of the file - // first (to not change previous text file - // offsets): - decoded.sort((a, b) => b.start - a.start); - - - // Convert from utf8 offsets to utf16 offsets used by VS Code: - - const utf8Text = new TextEncoder().encode(text); - const utf8ToUtf16Pos = (posUtf8: number) => { - // Find the line of the position as well as the utf8 and - // utf16 indexes for the start of that line: - let startOfLineUtf8 = 0; - let lineIndex = 0; - const newLineUtf8 = '\n'.charCodeAt(0); - // eslint-disable-next-line no-constant-condition - while (true) { - const nextLineAt = utf8Text.indexOf(newLineUtf8, startOfLineUtf8); - if (nextLineAt < 0 || posUtf8 <= nextLineAt) break; - startOfLineUtf8 = nextLineAt + 1; - lineIndex++; - } - const lineUtf16 = document.lineAt(lineIndex); - - // Move forward from a synced position in the text until the - // target pos is found: - let currentUtf8 = startOfLineUtf8; - let currentUtf16 = document.offsetAt(lineUtf16.range.start); - - const decodeBuffer = new Uint8Array(10); - const utf8Encoder = new TextEncoder(); - while (currentUtf8 < posUtf8) { - const { written } = utf8Encoder.encodeInto(text.charAt(currentUtf16), decodeBuffer); - currentUtf8 += written; - currentUtf16++; - } - return currentUtf16; - }; - - - type FixedEdit = { - range: vscode.Range, - formatted: string, - }; - - const edits: FixedEdit[] = []; - for (const edit of decoded) { - // Convert from utf8 to utf16: - const range = new vscode.Range( - document.positionAt(utf8ToUtf16Pos(edit.start)), - document.positionAt(utf8ToUtf16Pos(edit.end)) - ); - - if (editor.document.getText(range) !== document.getText(range)) { - // The text that was formatted has changed while we were working. - vscode.window.showWarningMessage(`Dioxus formatting was ignored since the source file changed before the change could be applied.`); - continue; - } - - edits.push({ - range, - formatted: edit.formatted, - }); + if (unformatted.length == 0) { + vscode.window.showWarningMessage("Please select rsx invoking this command!"); + return; } + const fileDir = editor.document.fileName.slice(0, editor.document.fileName.lastIndexOf('\\')); - // Apply edits: - editor.edit(editBuilder => { - edits.forEach((edit) => editBuilder.replace(edit.range, edit.formatted)); - }, { - undoStopAfter: false, - undoStopBefore: false - }); +} -} catch (err) { - vscode.window.showWarningMessage(`Errors occurred while formatting. Make sure you have the most recent Dioxus-CLI installed!\n${err}\n\nData from Dioxus-CLI:\n${originalResult}`); -}*/ -// import { TextEncoder } from 'util'; +function fmtDocumentOnSave(e: vscode.TextDocumentWillSaveEvent) { + // check the settings to make sure format on save is configured + const dioxusConfig = vscode.workspace.getConfiguration('dioxus', e.document).get('formatOnSave'); + const globalConfig = vscode.workspace.getConfiguration('editor', e.document).get('formatOnSave'); + if ( + (dioxusConfig === 'enabled') || + (dioxusConfig !== 'disabled' && globalConfig) + ) { + fmtDocument(e.document); + } +} + +function fmtDocument(document: vscode.TextDocument) { + try { + if (document.languageId !== "rust" || document.uri.scheme !== "file") { + return; + } + + const [editor,] = vscode.window.visibleTextEditors.filter(editor => editor.document.fileName === document.fileName); + if (!editor) return; // Need an editor to apply text edits. + + const contents = editor.document.getText(); + const formatted = format_file(contents); + + if (formatted.length() > 0) { + editor.edit(editBuilder => editBuilder.replace(new vscode.Range(0, 0, document.lineCount, 0), formatted.formatted())); + } + } catch (error) { + vscode.window.showWarningMessage(`Errors occurred while formatting. Make sure you have the most recent Dioxus-CLI installed! \n${error}`); + } +} diff --git a/packages/extension/webpack.config.js b/packages/extension/webpack.config.js index f61d87f14..021d5af4e 100644 --- a/packages/extension/webpack.config.js +++ b/packages/extension/webpack.config.js @@ -1,5 +1,4 @@ //@ts-check - 'use strict'; const path = require('path'); @@ -9,13 +8,8 @@ const webpack = require('webpack'); const config = { target: 'webworker', // vscode extensions run in webworker context for VS Code web 📖 -> https://webpack.js.org/configuration/target/#target experiments: { - asyncWebAssembly: true, layers: true, - - - // asyncWebAssembly: true, - // syncWebAssembly: true, }, entry: './src/main.ts', // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ output: { @@ -55,10 +49,6 @@ const config = { } ] } - // { - // test: /\.wasm$/, - // type: "asset/inline", - // } ] }, From 8d27bb62362db21ff138dddab43f743b23dbf5c9 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Sat, 8 Jul 2023 19:28:39 -0700 Subject: [PATCH 437/459] don't add wasmbindgen --- packages/autofmt/src/lib.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/autofmt/src/lib.rs b/packages/autofmt/src/lib.rs index c81a50459..0d2426a0b 100644 --- a/packages/autofmt/src/lib.rs +++ b/packages/autofmt/src/lib.rs @@ -14,8 +14,6 @@ mod element; mod expr; mod writer; -use wasm_bindgen::prelude::*; - /// A modification to the original file to be applied by an IDE /// /// Right now this re-writes entire rsx! blocks at a time, instead of precise line-by-line changes. From f9267fb71f64cb6115935dc4646e8be8819fda02 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Sat, 8 Jul 2023 19:28:47 -0700 Subject: [PATCH 438/459] dont add wasm bindgen to cargo --- packages/autofmt/Cargo.toml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/autofmt/Cargo.toml b/packages/autofmt/Cargo.toml index 5c67a814a..e333a1898 100644 --- a/packages/autofmt/Cargo.toml +++ b/packages/autofmt/Cargo.toml @@ -17,10 +17,9 @@ proc-macro2 = { version = "1.0.6", features = ["span-locations"] } quote = "1.0" syn = { version = "1.0.11", features = ["full", "extra-traits"] } serde = { version = "1.0.136", features = ["derive"] } -prettyplease = { package = "prettier-please", version = "0.1.16", features = [ +prettyplease = { package = "prettier-please", version = "0.1.16", features = [ "verbatim", ] } -wasm-bindgen.workspace = true [dev-dependencies] pretty_assertions = "1.2.1" From d1697642bc079d404bb6a25dd789f472d4501dce Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Sat, 8 Jul 2023 19:36:02 -0700 Subject: [PATCH 439/459] Update docs on extension --- packages/extension/src/lib.rs | 5 +++++ packages/extension/src/main.ts | 19 ++++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/packages/extension/src/lib.rs b/packages/extension/src/lib.rs index 7061f6217..d2112c601 100644 --- a/packages/extension/src/lib.rs +++ b/packages/extension/src/lib.rs @@ -27,6 +27,11 @@ impl FormatBlockInstance { pub fn formatted(&self) -> String { self.new.clone() } + + #[wasm_bindgen] + pub fn length(&self) -> usize { + self._edits.len() + } } #[wasm_bindgen] diff --git a/packages/extension/src/main.ts b/packages/extension/src/main.ts index 1937c067a..fc12457ad 100644 --- a/packages/extension/src/main.ts +++ b/packages/extension/src/main.ts @@ -1,5 +1,5 @@ import * as vscode from 'vscode'; -import init, { translate_rsx, format_file } from 'dioxus-ext'; +import init, * as dioxus from 'dioxus-ext'; export async function activate(context: vscode.ExtensionContext) { // Load the wasm from the file system @@ -25,19 +25,19 @@ export async function activate(context: vscode.ExtensionContext) { } function translate(component: boolean) { - + // Load the activate editor const editor = vscode.window.activeTextEditor; - if (!editor) return; + // Get the selected text const html = editor.document.getText(editor.selection); if (html.length == 0) { vscode.window.showWarningMessage("Please select HTML fragment before invoking this command!"); return; } - const out = translate_rsx(html, component); - + // Translate the HTML to RSX + const out = dioxus.translate_rsx(html, component); if (out.length > 0) { editor.edit(editBuilder => editBuilder.replace(editor.selection, out)); } else { @@ -90,10 +90,15 @@ function fmtDocument(document: vscode.TextDocument) { if (!editor) return; // Need an editor to apply text edits. const contents = editor.document.getText(); - const formatted = format_file(contents); + const formatted = dioxus.format_file(contents); + // Replace the entire text document + // Yes, this is a bit heavy handed, but the dioxus side doesn't know the line/col scheme that vscode is using if (formatted.length() > 0) { - editor.edit(editBuilder => editBuilder.replace(new vscode.Range(0, 0, document.lineCount, 0), formatted.formatted())); + editor.edit(editBuilder => { + const range = new vscode.Range(0, 0, document.lineCount, 0); + editBuilder.replace(range, formatted.formatted()); + }); } } catch (error) { vscode.window.showWarningMessage(`Errors occurred while formatting. Make sure you have the most recent Dioxus-CLI installed! \n${error}`); From c6a506161540df9b06fb701a3790161d5fc39193 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Sat, 8 Jul 2023 19:36:54 -0700 Subject: [PATCH 440/459] bump version --- packages/extension/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/extension/package.json b/packages/extension/package.json index 5cb7e60f1..6a50879b0 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -2,7 +2,7 @@ "name": "dioxus", "displayName": "Dioxus", "description": "Useful tools for working with Dioxus", - "version": "0.0.1", + "version": "0.0.2", "publisher": "DioxusLabs", "private": true, "license": "MIT", From e235683242f566950b44b805af98df687a04b798 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Sat, 8 Jul 2023 19:44:33 -0700 Subject: [PATCH 441/459] Bump version and make clippy happy --- packages/extension/package.json | 2 +- packages/extension/src/lib.rs | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/extension/package.json b/packages/extension/package.json index 6a50879b0..a60c4d799 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -72,7 +72,7 @@ } }, "scripts": { - "vscode:prepublish": "npm run build-base -- --minify", + "vscode:prepublish": "npm run build-base", "// package": "vsce package -o rust-analyzer.vsix", "// build-base": "node src/build.js", "build-wasm": "cargo build --target wasm32-unknown-unknown --release && cp ../../target/wasm32-unknown-unknown/release/dioxus_ext.wasm pkg/", diff --git a/packages/extension/src/lib.rs b/packages/extension/src/lib.rs index d2112c601..abcdaf598 100644 --- a/packages/extension/src/lib.rs +++ b/packages/extension/src/lib.rs @@ -49,7 +49,5 @@ pub fn translate_rsx(contents: String, _component: bool) -> String { let callbody = rsx_rosetta::rsx_from_html(&dom); // Convert the HTML to RSX - let out = dioxus_autofmt::write_block_out(callbody).unwrap(); - - out + dioxus_autofmt::write_block_out(callbody).unwrap() } From 44c0eb66c5fcd8410f6d2b62ad54be90958300ef Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Mon, 10 Jul 2023 10:26:21 -0700 Subject: [PATCH 442/459] Update dependabot.yml --- .github/dependabot.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 6fddca0d6..2b9f8833a 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,5 +1,6 @@ version: 2 updates: + # Maintain dependencies for GitHub Actions - package-ecosystem: "github-actions" directory: "/" From db93252faf2530d76cf62658d9251987cfaa1b61 Mon Sep 17 00:00:00 2001 From: Miles Murgaw Date: Tue, 11 Jul 2023 00:25:16 -0400 Subject: [PATCH 443/459] feat: cli use local certificate --- packages/cli/Cargo.toml | 1 + packages/cli/src/config.rs | 15 ++++++ packages/cli/src/server/mod.rs | 92 ++++++++++++++++++++++++++++------ 3 files changed, 93 insertions(+), 15 deletions(-) diff --git a/packages/cli/Cargo.toml b/packages/cli/Cargo.toml index 7e5e60eed..c947baa63 100644 --- a/packages/cli/Cargo.toml +++ b/packages/cli/Cargo.toml @@ -39,6 +39,7 @@ indicatif = "0.17.0-rc.11" subprocess = "0.2.9" axum = { version = "0.5.1", features = ["ws", "headers"] } +axum-server = { version = "0.5.1", features = ["tls-rustls"] } tower-http = { version = "0.2.2", features = ["full"] } headers = "0.3.7" diff --git a/packages/cli/src/config.rs b/packages/cli/src/config.rs index 6324f725f..4d3da9b65 100644 --- a/packages/cli/src/config.rs +++ b/packages/cli/src/config.rs @@ -77,6 +77,12 @@ impl Default for DioxusConfig { style: Some(vec![]), script: Some(vec![]), }, + https: WebHttpsConfig { + enabled: None, + mkcert: None, + key_path: None, + cert_path: None, + }, }, plugin: toml::Value::Table(toml::map::Map::new()), } @@ -101,6 +107,7 @@ pub struct WebConfig { pub proxy: Option>, pub watcher: WebWatcherConfig, pub resource: WebResourceConfig, + pub https: WebHttpsConfig, } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -134,6 +141,14 @@ pub struct WebDevResourceConfig { pub script: Option>, } +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct WebHttpsConfig { + pub enabled: Option, + pub mkcert: Option, + pub key_path: Option, + pub cert_path: Option, +} + #[derive(Debug, Clone)] pub struct CrateConfig { pub out_dir: PathBuf, diff --git a/packages/cli/src/server/mod.rs b/packages/cli/src/server/mod.rs index 6575875f7..28d38ed04 100644 --- a/packages/cli/src/server/mod.rs +++ b/packages/cli/src/server/mod.rs @@ -10,6 +10,7 @@ use axum::{ routing::{get, get_service}, Router, }; +use axum_server::tls_rustls::RustlsConfig; use cargo_metadata::diagnostic::Diagnostic; use colored::Colorize; use dioxus_core::Template; @@ -84,6 +85,34 @@ pub async fn startup(port: u16, config: CrateConfig, start_browser: bool) -> Res Ok(()) } +/// Returns an enum of rustls config and a bool if mkcert isn't installed +async fn get_rustls(config: &CrateConfig) -> (Option, bool) { + let config = &config.dioxus_config.web.https; + if config.enabled != Some(true) { + return (None, false); + } + + match config.mkcert { + // mkcert, use it + Some(true) => { + todo!() + } + // not mkcert + Some(false) => { + // get paths to cert & key + if let (Some(key), Some(cert)) = (config.key_path.clone(), config.cert_path.clone()) { + let rustls = RustlsConfig::from_pem_file(cert, key).await.unwrap(); + return (Some(rustls), false); + } else { + // missing cert or key + return (None, false); + } + } + // other + _ => return (None, false), + } +} + pub struct HotReloadState { pub messages: broadcast::Sender>, pub build_manager: Arc, @@ -274,6 +303,9 @@ pub async fn startup_hot_reload( } } + // HTTPS + let rustls_config = get_rustls(&config).await; + // start serve dev-server at 0.0.0.0:8080 print_console_info( &ip, @@ -368,13 +400,19 @@ pub async fn startup_hot_reload( let addr = format!("0.0.0.0:{}", port).parse().unwrap(); - let server = axum::Server::bind(&addr).serve(router.into_make_service()); - if start_browser { - let _ = open::that(format!("http://{}", addr)); + if config.dioxus_config.web.https.enabled == Some(true) { + let _ = open::that(format!("https://{}", addr)); + } else { + let _ = open::that(format!("http://{}", addr)); + } } - server.await?; + if let (Some(rustls), _) = rustls_config { + axum_server::bind_rustls(addr, rustls).serve(router.into_make_service()).await?; + } else { + axum::Server::bind(&addr).serve(router.into_make_service()).await?; + } Ok(()) } @@ -457,6 +495,9 @@ pub async fn startup_default( .unwrap(); } + // HTTPS + let rustls_config = get_rustls(&config).await; + // start serve dev-server at 0.0.0.0 print_console_info( &ip, @@ -550,13 +591,20 @@ pub async fn startup_default( .layer(Extension(ws_reload_state)); let addr = format!("0.0.0.0:{}", port).parse().unwrap(); - let server = axum::Server::bind(&addr).serve(router.into_make_service()); if start_browser { - let _ = open::that(format!("http://{}", addr)); + if config.dioxus_config.web.https.enabled == Some(true) { + let _ = open::that(format!("https://{}", addr)); + } else { + let _ = open::that(format!("http://{}", addr)); + } } - server.await?; + if let (Some(rustls), _) = rustls_config { + axum_server::bind_rustls(addr, rustls).serve(router.into_make_service()).await?; + } else { + axum::Server::bind(&addr).serve(router.into_make_service()).await?; + } Ok(()) } @@ -634,14 +682,28 @@ fn print_console_info(ip: &String, port: u16, config: &CrateConfig, options: Pre .bold() ); } - println!( - "\t> Local : {}", - format!("http://localhost:{}/", port).blue() - ); - println!( - "\t> Network : {}", - format!("http://{}:{}/", ip, port).blue() - ); + + if config.dioxus_config.web.https.enabled == Some(true) { + println!( + "\t> Local : {}", + format!("https://localhost:{}/", port).blue() + ); + println!( + "\t> Network : {}", + format!("https://{}:{}/", ip, port).blue() + ); + println!("\t> HTTPS : {}", format!("Enabled").green()); + } else { + println!( + "\t> Local : {}", + format!("http://localhost:{}/", port).blue() + ); + println!( + "\t> Network : {}", + format!("http://{}:{}/", ip, port).blue() + ); + println!("\t> HTTPS : {}", format!("Disabled").red()); + } println!(); println!("\t> Profile : {}", profile.green()); println!("\t> Hot Reload : {}", hot_reload.cyan()); From 49a6a66ab65dd5d89f917ffcc8ff6404b18ecb43 Mon Sep 17 00:00:00 2001 From: Lablack Mourad Date: Tue, 11 Jul 2023 15:25:32 +0800 Subject: [PATCH 444/459] Update web.md Updated the link to dioxus-cli from the depricated repo to the new location. --- docs/guide/src/en/getting_started/web.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide/src/en/getting_started/web.md b/docs/guide/src/en/getting_started/web.md index b29b8d691..7f3d04848 100644 --- a/docs/guide/src/en/getting_started/web.md +++ b/docs/guide/src/en/getting_started/web.md @@ -22,7 +22,7 @@ The Web is the best-supported target platform for Dioxus. ## Tooling -To develop your Dioxus app for the web, you'll need a tool to build and serve your assets. We recommend using [dioxus-cli](https://github.com/DioxusLabs/cli) which includes a build system, Wasm optimization, a dev server, and support hot reloading: +To develop your Dioxus app for the web, you'll need a tool to build and serve your assets. We recommend using [dioxus-cli](https://github.com/DioxusLabs/dioxus/tree/master/packages/cli) which includes a build system, Wasm optimization, a dev server, and support hot reloading: ```shell cargo install dioxus-cli From ffb056798ac0d3df650580005135b064e5f08b7b Mon Sep 17 00:00:00 2001 From: Miles Murgaw Date: Tue, 11 Jul 2023 15:51:56 -0400 Subject: [PATCH 445/459] revision: organize --- packages/cli/src/server/hot_reload.rs | 70 ++ packages/cli/src/server/mod.rs | 915 ++++++++++---------------- packages/cli/src/server/output.rs | 127 ++++ 3 files changed, 540 insertions(+), 572 deletions(-) create mode 100644 packages/cli/src/server/hot_reload.rs create mode 100644 packages/cli/src/server/output.rs diff --git a/packages/cli/src/server/hot_reload.rs b/packages/cli/src/server/hot_reload.rs new file mode 100644 index 000000000..167e712af --- /dev/null +++ b/packages/cli/src/server/hot_reload.rs @@ -0,0 +1,70 @@ +use std::sync::{Arc, Mutex}; + +use axum::{ + extract::{ws::Message, WebSocketUpgrade}, + response::IntoResponse, + Extension, TypedHeader, +}; +use dioxus_core::Template; +use dioxus_html::HtmlCtx; +use dioxus_rsx::hot_reload::FileMap; +use tokio::sync::broadcast; + +use super::BuildManager; +use crate::CrateConfig; + +pub struct HotReloadState { + pub messages: broadcast::Sender>, + pub build_manager: Arc, + pub file_map: Arc>>, + pub watcher_config: CrateConfig, +} + +pub async fn hot_reload_handler( + ws: WebSocketUpgrade, + _: Option>, + Extension(state): Extension>, +) -> impl IntoResponse { + ws.on_upgrade(|mut socket| async move { + log::info!("🔥 Hot Reload WebSocket connected"); + { + // update any rsx calls that changed before the websocket connected. + { + log::info!("🔮 Finding updates since last compile..."); + let templates: Vec<_> = { + state + .file_map + .lock() + .unwrap() + .map + .values() + .filter_map(|(_, template_slot)| *template_slot) + .collect() + }; + for template in templates { + if socket + .send(Message::Text(serde_json::to_string(&template).unwrap())) + .await + .is_err() + { + return; + } + } + } + log::info!("finished"); + } + + let mut rx = state.messages.subscribe(); + loop { + if let Ok(rsx) = rx.recv().await { + if socket + .send(Message::Text(serde_json::to_string(&rsx).unwrap())) + .await + .is_err() + { + break; + }; + } + } + }) +} diff --git a/packages/cli/src/server/mod.rs b/packages/cli/src/server/mod.rs index 28d38ed04..6e50510ea 100644 --- a/packages/cli/src/server/mod.rs +++ b/packages/cli/src/server/mod.rs @@ -12,7 +12,6 @@ use axum::{ }; use axum_server::tls_rustls::RustlsConfig; use cargo_metadata::diagnostic::Diagnostic; -use colored::Colorize; use dioxus_core::Template; use dioxus_html::HtmlCtx; use dioxus_rsx::hot_reload::*; @@ -20,10 +19,9 @@ use notify::{RecommendedWatcher, Watcher}; use std::{ net::UdpSocket, path::PathBuf, - process::Command, sync::{Arc, Mutex}, }; -use tokio::sync::broadcast; +use tokio::sync::broadcast::{self, Sender}; use tower::ServiceBuilder; use tower_http::services::fs::{ServeDir, ServeFileSystemResponseBody}; use tower_http::{ @@ -36,6 +34,12 @@ use plugin::PluginManager; mod proxy; +mod hot_reload; +use hot_reload::*; + +mod output; +use output::*; + pub struct BuildManager { config: CrateConfig, reload_tx: broadcast::Sender<()>, @@ -77,11 +81,128 @@ pub async fn startup(port: u16, config: CrateConfig, start_browser: bool) -> Res let ip = get_ip().unwrap_or(String::from("0.0.0.0")); - if config.hot_reload { - startup_hot_reload(ip, port, config, start_browser).await? - } else { - startup_default(ip, port, config, start_browser).await? + match config.hot_reload { + true => serve_hot_reload(ip, port, config, start_browser).await?, + false => serve_default(ip, port, config, start_browser).await?, } + + Ok(()) +} + +/// Start the server without hot reload +pub async fn serve_default( + ip: String, + port: u16, + config: CrateConfig, + start_browser: bool, +) -> Result<()> { + let first_build_result = crate::builder::build(&config, false)?; + + log::info!("🚀 Starting development server..."); + + // WS Reload Watching + let (reload_tx, _) = broadcast::channel(100); + setup_file_watcher(&config, port, ip.clone(), reload_tx.clone()).await?; + let ws_reload_state = Arc::new(WsReloadState { + update: reload_tx.clone(), + }); + + // start serve dev-server at 0.0.0.0 + print_console_info( + &ip, + port, + &config, + PrettierOptions { + changed: vec![], + warnings: first_build_result.warnings, + elapsed_time: first_build_result.elapsed_time, + }, + ); + + // HTTPS + let rustls_config = get_rustls(&config).await; + + // Router + let router = setup_router(config, ws_reload_state, None).await?; + + // Start server + start_server(port, router, start_browser, rustls_config.0).await?; + + Ok(()) +} + +/// Start dx serve with hot reload +pub async fn serve_hot_reload( + ip: String, + port: u16, + config: CrateConfig, + start_browser: bool, +) -> Result<()> { + let first_build_result = crate::builder::build(&config, false)?; + + log::info!("🚀 Starting development server..."); + + // Setup hot reload + let (reload_tx, _) = broadcast::channel(100); + let FileMapBuildResult { map, errors } = + FileMap::::create(config.crate_dir.clone()).unwrap(); + + for err in errors { + log::error!("{}", err); + } + + let file_map = Arc::new(Mutex::new(map)); + let build_manager = Arc::new(BuildManager { + config: config.clone(), + reload_tx: reload_tx.clone(), + }); + + let hot_reload_tx = broadcast::channel(100).0; + + // States + let hot_reload_state = Arc::new(HotReloadState { + messages: hot_reload_tx.clone(), + build_manager: build_manager.clone(), + file_map: file_map.clone(), + watcher_config: config.clone(), + }); + + let ws_reload_state = Arc::new(WsReloadState { + update: reload_tx.clone(), + }); + + // Setup file watcher + setup_file_watcher_hot_reload( + &config, + port, + ip.clone(), + hot_reload_tx, + file_map, + build_manager, + ) + .await?; + + // Print serve info + print_console_info( + &ip, + port, + &config, + PrettierOptions { + changed: vec![], + warnings: first_build_result.warnings, + elapsed_time: first_build_result.elapsed_time, + }, + ); + + // HTTPS + let rustls_config = get_rustls(&config).await; + + // Router + let router = setup_router(config, ws_reload_state, Some(hot_reload_state)).await?; + + // Start server + start_server(port, router, start_browser, rustls_config.0).await?; + Ok(()) } @@ -102,111 +223,169 @@ async fn get_rustls(config: &CrateConfig) -> (Option, bool) { // get paths to cert & key if let (Some(key), Some(cert)) = (config.key_path.clone(), config.cert_path.clone()) { let rustls = RustlsConfig::from_pem_file(cert, key).await.unwrap(); - return (Some(rustls), false); + (Some(rustls), false) } else { // missing cert or key - return (None, false); + (None, false) } } // other - _ => return (None, false), + _ => (None, false), } } -pub struct HotReloadState { - pub messages: broadcast::Sender>, - pub build_manager: Arc, - pub file_map: Arc>>, - pub watcher_config: CrateConfig, -} - -pub async fn hot_reload_handler( - ws: WebSocketUpgrade, - _: Option>, - Extension(state): Extension>, -) -> impl IntoResponse { - ws.on_upgrade(|mut socket| async move { - log::info!("🔥 Hot Reload WebSocket connected"); - { - // update any rsx calls that changed before the websocket connected. - { - log::info!("🔮 Finding updates since last compile..."); - let templates: Vec<_> = { - state - .file_map - .lock() - .unwrap() - .map - .values() - .filter_map(|(_, template_slot)| *template_slot) - .collect() - }; - for template in templates { - if socket - .send(Message::Text(serde_json::to_string(&template).unwrap())) - .await - .is_err() - { - return; - } - } - } - log::info!("finished"); - } - - let mut rx = state.messages.subscribe(); - loop { - if let Ok(rsx) = rx.recv().await { - if socket - .send(Message::Text(serde_json::to_string(&rsx).unwrap())) - .await - .is_err() - { - break; - }; - } - } - }) -} - -#[allow(unused_assignments)] -pub async fn startup_hot_reload( - ip: String, - port: u16, +/// Sets up and returns a router +async fn setup_router( config: CrateConfig, + ws_reload: Arc, + hot_reload: Option>, +) -> Result { + // Setup cors + let cors = CorsLayer::new() + // allow `GET` and `POST` when accessing the resource + .allow_methods([Method::GET, Method::POST]) + // allow requests from any origin + .allow_origin(Any) + .allow_headers(Any); + + let (coep, coop) = if config.cross_origin_policy { + ( + HeaderValue::from_static("require-corp"), + HeaderValue::from_static("same-origin"), + ) + } else { + ( + HeaderValue::from_static("unsafe-none"), + HeaderValue::from_static("unsafe-none"), + ) + }; + + // Create file service + let file_service_config = config.clone(); + let file_service = ServiceBuilder::new() + .override_response_header( + HeaderName::from_static("cross-origin-embedder-policy"), + coep, + ) + .override_response_header(HeaderName::from_static("cross-origin-opener-policy"), coop) + .and_then( + move |response: Response| async move { + let response = if file_service_config + .dioxus_config + .web + .watcher + .index_on_404 + .unwrap_or(false) + && response.status() == StatusCode::NOT_FOUND + { + let body = Full::from( + // TODO: Cache/memoize this. + std::fs::read_to_string( + file_service_config + .crate_dir + .join(file_service_config.out_dir) + .join("index.html"), + ) + .ok() + .unwrap(), + ) + .map_err(|err| match err {}) + .boxed(); + Response::builder() + .status(StatusCode::OK) + .body(body) + .unwrap() + } else { + response.map(|body| body.boxed()) + }; + Ok(response) + }, + ) + .service(ServeDir::new(config.crate_dir.join(&config.out_dir))); + + // Setup websocket + let mut router = Router::new().route("/_dioxus/ws", get(ws_handler)); + + // Setup proxy + for proxy_config in config.dioxus_config.web.proxy.unwrap_or_default() { + router = proxy::add_proxy(router, &proxy_config)?; + } + + // Route file service + router = router.fallback(get_service(file_service).handle_error( + |error: std::io::Error| async move { + ( + StatusCode::INTERNAL_SERVER_ERROR, + format!("Unhandled internal error: {}", error), + ) + }, + )); + + // Setup routes + router = router + .route("/_dioxus/hot_reload", get(hot_reload_handler)) + .layer(cors) + .layer(Extension(ws_reload)); + + if let Some(hot_reload) = hot_reload { + router = router.layer(Extension(hot_reload)) + } + + Ok(router) +} + +/// Starts dx serve with no hot reload +async fn start_server( + port: u16, + router: Router, start_browser: bool, + rustls: Option, ) -> Result<()> { - let first_build_result = crate::builder::build(&config, false)?; - - log::info!("🚀 Starting development server..."); - + // If plugins, call on_serve_start event #[cfg(feature = "plugin")] PluginManager::on_serve_start(&config)?; - let dist_path = config.out_dir.clone(); - let (reload_tx, _) = broadcast::channel(100); - let FileMapBuildResult { map, errors } = - FileMap::::create(config.crate_dir.clone()).unwrap(); - for err in errors { - log::error!("{}", err); - } - let file_map = Arc::new(Mutex::new(map)); - let build_manager = Arc::new(BuildManager { - config: config.clone(), - reload_tx: reload_tx.clone(), - }); - let hot_reload_tx = broadcast::channel(100).0; - let hot_reload_state = Arc::new(HotReloadState { - messages: hot_reload_tx.clone(), - build_manager: build_manager.clone(), - file_map: file_map.clone(), - watcher_config: config.clone(), - }); + // Parse address + let addr = format!("0.0.0.0:{}", port).parse().unwrap(); - let crate_dir = config.crate_dir.clone(); - let ws_reload_state = Arc::new(WsReloadState { - update: reload_tx.clone(), - }); + // Open the browser + if start_browser { + match rustls { + Some(_) => _ = open::that(format!("https://{}", addr)), + None => _ = open::that(format!("http://{}", addr)), + } + } + + // Start the server with or without rustls + match rustls { + Some(rustls) => { + axum_server::bind_rustls(addr, rustls) + .serve(router.into_make_service()) + .await? + } + None => { + axum::Server::bind(&addr) + .serve(router.into_make_service()) + .await? + } + } + + Ok(()) +} + +/// Sets up a file watcher +async fn setup_file_watcher( + config: &CrateConfig, + port: u16, + watcher_ip: String, + reload_tx: Sender<()>, +) -> Result<()> { + let build_manager = BuildManager { + config: config.clone(), + reload_tx, + }; + + let mut last_update_time = chrono::Local::now().timestamp(); // file watcher: check file change let allow_watch_path = config @@ -218,7 +397,70 @@ pub async fn startup_hot_reload( .unwrap_or_else(|| vec![PathBuf::from("src")]); let watcher_config = config.clone(); - let watcher_ip = ip.clone(); + let mut watcher = notify::recommended_watcher(move |info: notify::Result| { + let config = watcher_config.clone(); + if let Ok(e) = info { + if chrono::Local::now().timestamp() > last_update_time { + match build_manager.rebuild() { + Ok(res) => { + last_update_time = chrono::Local::now().timestamp(); + + #[allow(clippy::redundant_clone)] + print_console_info( + &watcher_ip, + port, + &config, + PrettierOptions { + changed: e.paths.clone(), + warnings: res.warnings, + elapsed_time: res.elapsed_time, + }, + ); + + #[cfg(feature = "plugin")] + let _ = PluginManager::on_serve_rebuild( + chrono::Local::now().timestamp(), + e.paths, + ); + } + Err(e) => log::error!("{}", e), + } + } + } + }) + .unwrap(); + + for sub_path in allow_watch_path { + watcher + .watch( + &config.crate_dir.join(sub_path), + notify::RecursiveMode::Recursive, + ) + .unwrap(); + } + Ok(()) +} + +// Todo: reduce duplication and merge with setup_file_watcher() +/// Sets up a file watcher with hot reload +async fn setup_file_watcher_hot_reload( + config: &CrateConfig, + port: u16, + watcher_ip: String, + hot_reload_tx: Sender>, + file_map: Arc>>, + build_manager: Arc, +) -> Result<()> { + // file watcher: check file change + let allow_watch_path = config + .dioxus_config + .web + .watcher + .watch_path + .clone() + .unwrap_or_else(|| vec![PathBuf::from("src")]); + + let watcher_config = config.clone(); let mut last_update_time = chrono::Local::now().timestamp(); let mut watcher = RecommendedWatcher::new( @@ -254,7 +496,7 @@ pub async fn startup_hot_reload( // find changes to the rsx in the file let mut map = file_map.lock().unwrap(); - match map.update_rsx(&path, &crate_dir) { + match map.update_rsx(&path, &config.crate_dir) { Ok(UpdateResult::UpdatedRsx(msgs)) => { messages.extend(msgs); } @@ -303,482 +545,10 @@ pub async fn startup_hot_reload( } } - // HTTPS - let rustls_config = get_rustls(&config).await; - - // start serve dev-server at 0.0.0.0:8080 - print_console_info( - &ip, - port, - &config, - PrettierOptions { - changed: vec![], - warnings: first_build_result.warnings, - elapsed_time: first_build_result.elapsed_time, - }, - ); - - let cors = CorsLayer::new() - // allow `GET` and `POST` when accessing the resource - .allow_methods([Method::GET, Method::POST]) - // allow requests from any origin - .allow_origin(Any) - .allow_headers(Any); - - let (coep, coop) = if config.cross_origin_policy { - ( - HeaderValue::from_static("require-corp"), - HeaderValue::from_static("same-origin"), - ) - } else { - ( - HeaderValue::from_static("unsafe-none"), - HeaderValue::from_static("unsafe-none"), - ) - }; - - let file_service_config = config.clone(); - let file_service = ServiceBuilder::new() - .override_response_header( - HeaderName::from_static("cross-origin-embedder-policy"), - coep, - ) - .override_response_header(HeaderName::from_static("cross-origin-opener-policy"), coop) - .and_then( - move |response: Response| async move { - let response = if file_service_config - .dioxus_config - .web - .watcher - .index_on_404 - .unwrap_or(false) - && response.status() == StatusCode::NOT_FOUND - { - let body = Full::from( - // TODO: Cache/memoize this. - std::fs::read_to_string( - file_service_config - .crate_dir - .join(file_service_config.out_dir) - .join("index.html"), - ) - .ok() - .unwrap(), - ) - .map_err(|err| match err {}) - .boxed(); - Response::builder() - .status(StatusCode::OK) - .body(body) - .unwrap() - } else { - response.map(|body| body.boxed()) - }; - Ok(response) - }, - ) - .service(ServeDir::new(config.crate_dir.join(&dist_path))); - - let mut router = Router::new().route("/_dioxus/ws", get(ws_handler)); - for proxy_config in config.dioxus_config.web.proxy.unwrap_or_default() { - router = proxy::add_proxy(router, &proxy_config)?; - } - router = router.fallback(get_service(file_service).handle_error( - |error: std::io::Error| async move { - ( - StatusCode::INTERNAL_SERVER_ERROR, - format!("Unhandled internal error: {}", error), - ) - }, - )); - - let router = router - .route("/_dioxus/hot_reload", get(hot_reload_handler)) - .layer(cors) - .layer(Extension(ws_reload_state)) - .layer(Extension(hot_reload_state)); - - let addr = format!("0.0.0.0:{}", port).parse().unwrap(); - - if start_browser { - if config.dioxus_config.web.https.enabled == Some(true) { - let _ = open::that(format!("https://{}", addr)); - } else { - let _ = open::that(format!("http://{}", addr)); - } - } - - if let (Some(rustls), _) = rustls_config { - axum_server::bind_rustls(addr, rustls).serve(router.into_make_service()).await?; - } else { - axum::Server::bind(&addr).serve(router.into_make_service()).await?; - } - Ok(()) } -pub async fn startup_default( - ip: String, - port: u16, - config: CrateConfig, - start_browser: bool, -) -> Result<()> { - let first_build_result = crate::builder::build(&config, false)?; - - log::info!("🚀 Starting development server..."); - - let dist_path = config.out_dir.clone(); - - let (reload_tx, _) = broadcast::channel(100); - - let build_manager = BuildManager { - config: config.clone(), - reload_tx: reload_tx.clone(), - }; - - let ws_reload_state = Arc::new(WsReloadState { - update: reload_tx.clone(), - }); - - let mut last_update_time = chrono::Local::now().timestamp(); - - // file watcher: check file change - let allow_watch_path = config - .dioxus_config - .web - .watcher - .watch_path - .clone() - .unwrap_or_else(|| vec![PathBuf::from("src")]); - - let watcher_config = config.clone(); - let watcher_ip = ip.clone(); - let mut watcher = notify::recommended_watcher(move |info: notify::Result| { - let config = watcher_config.clone(); - if let Ok(e) = info { - if chrono::Local::now().timestamp() > last_update_time { - match build_manager.rebuild() { - Ok(res) => { - last_update_time = chrono::Local::now().timestamp(); - - #[allow(clippy::redundant_clone)] - print_console_info( - &watcher_ip, - port, - &config, - PrettierOptions { - changed: e.paths.clone(), - warnings: res.warnings, - elapsed_time: res.elapsed_time, - }, - ); - - #[cfg(feature = "plugin")] - let _ = PluginManager::on_serve_rebuild( - chrono::Local::now().timestamp(), - e.paths, - ); - } - Err(e) => log::error!("{}", e), - } - } - } - }) - .unwrap(); - - for sub_path in allow_watch_path { - watcher - .watch( - &config.crate_dir.join(sub_path), - notify::RecursiveMode::Recursive, - ) - .unwrap(); - } - - // HTTPS - let rustls_config = get_rustls(&config).await; - - // start serve dev-server at 0.0.0.0 - print_console_info( - &ip, - port, - &config, - PrettierOptions { - changed: vec![], - warnings: first_build_result.warnings, - elapsed_time: first_build_result.elapsed_time, - }, - ); - - #[cfg(feature = "plugin")] - PluginManager::on_serve_start(&config)?; - - let cors = CorsLayer::new() - // allow `GET` and `POST` when accessing the resource - .allow_methods([Method::GET, Method::POST]) - // allow requests from any origin - .allow_origin(Any) - .allow_headers(Any); - - let (coep, coop) = if config.cross_origin_policy { - ( - HeaderValue::from_static("require-corp"), - HeaderValue::from_static("same-origin"), - ) - } else { - ( - HeaderValue::from_static("unsafe-none"), - HeaderValue::from_static("unsafe-none"), - ) - }; - - let file_service_config = config.clone(); - let file_service = ServiceBuilder::new() - .override_response_header( - HeaderName::from_static("cross-origin-embedder-policy"), - coep, - ) - .override_response_header(HeaderName::from_static("cross-origin-opener-policy"), coop) - .and_then( - move |response: Response| async move { - let response = if file_service_config - .dioxus_config - .web - .watcher - .index_on_404 - .unwrap_or(false) - && response.status() == StatusCode::NOT_FOUND - { - let body = Full::from( - // TODO: Cache/memoize this. - std::fs::read_to_string( - file_service_config - .crate_dir - .join(file_service_config.out_dir) - .join("index.html"), - ) - .ok() - .unwrap(), - ) - .map_err(|err| match err {}) - .boxed(); - Response::builder() - .status(StatusCode::OK) - .body(body) - .unwrap() - } else { - response.map(|body| body.boxed()) - }; - Ok(response) - }, - ) - .service(ServeDir::new(config.crate_dir.join(&dist_path))); - - let mut router = Router::new().route("/_dioxus/ws", get(ws_handler)); - for proxy_config in config.dioxus_config.web.proxy.unwrap_or_default() { - router = proxy::add_proxy(router, &proxy_config)?; - } - router = router - .fallback( - get_service(file_service).handle_error(|error: std::io::Error| async move { - ( - StatusCode::INTERNAL_SERVER_ERROR, - format!("Unhandled internal error: {}", error), - ) - }), - ) - .layer(cors) - .layer(Extension(ws_reload_state)); - - let addr = format!("0.0.0.0:{}", port).parse().unwrap(); - - if start_browser { - if config.dioxus_config.web.https.enabled == Some(true) { - let _ = open::that(format!("https://{}", addr)); - } else { - let _ = open::that(format!("http://{}", addr)); - } - } - - if let (Some(rustls), _) = rustls_config { - axum_server::bind_rustls(addr, rustls).serve(router.into_make_service()).await?; - } else { - axum::Server::bind(&addr).serve(router.into_make_service()).await?; - } - - Ok(()) -} - -#[derive(Debug, Default)] -pub struct PrettierOptions { - changed: Vec, - warnings: Vec, - elapsed_time: u128, -} - -fn print_console_info(ip: &String, port: u16, config: &CrateConfig, options: PrettierOptions) { - if let Ok(native_clearseq) = Command::new(if cfg!(target_os = "windows") { - "cls" - } else { - "clear" - }) - .output() - { - print!("{}", String::from_utf8_lossy(&native_clearseq.stdout)); - } else { - // Try ANSI-Escape characters - print!("\x1b[2J\x1b[H"); - } - - // for path in &changed { - // let path = path - // .strip_prefix(crate::crate_root().unwrap()) - // .unwrap() - // .to_path_buf(); - // log::info!("Updated {}", format!("{}", path.to_str().unwrap()).green()); - // } - - let mut profile = if config.release { "Release" } else { "Debug" }.to_string(); - if config.custom_profile.is_some() { - profile = config.custom_profile.as_ref().unwrap().to_string(); - } - let hot_reload = if config.hot_reload { "RSX" } else { "Normal" }; - let crate_root = crate::cargo::crate_root().unwrap(); - let custom_html_file = if crate_root.join("index.html").is_file() { - "Custom [index.html]" - } else { - "Default" - }; - let url_rewrite = if config - .dioxus_config - .web - .watcher - .index_on_404 - .unwrap_or(false) - { - "True" - } else { - "False" - }; - - let proxies = config.dioxus_config.web.proxy.as_ref(); - - if options.changed.is_empty() { - println!( - "{} @ v{} [{}] \n", - "Dioxus".bold().green(), - crate::DIOXUS_CLI_VERSION, - chrono::Local::now().format("%H:%M:%S").to_string().dimmed() - ); - } else { - println!( - "Project Reloaded: {}\n", - format!( - "Changed {} files. [{}]", - options.changed.len(), - chrono::Local::now().format("%H:%M:%S").to_string().dimmed() - ) - .purple() - .bold() - ); - } - - if config.dioxus_config.web.https.enabled == Some(true) { - println!( - "\t> Local : {}", - format!("https://localhost:{}/", port).blue() - ); - println!( - "\t> Network : {}", - format!("https://{}:{}/", ip, port).blue() - ); - println!("\t> HTTPS : {}", format!("Enabled").green()); - } else { - println!( - "\t> Local : {}", - format!("http://localhost:{}/", port).blue() - ); - println!( - "\t> Network : {}", - format!("http://{}:{}/", ip, port).blue() - ); - println!("\t> HTTPS : {}", format!("Disabled").red()); - } - println!(); - println!("\t> Profile : {}", profile.green()); - println!("\t> Hot Reload : {}", hot_reload.cyan()); - if let Some(proxies) = proxies { - if !proxies.is_empty() { - println!("\t> Proxies :"); - for proxy in proxies { - println!("\t\t- {}", proxy.backend.blue()); - } - } - } - println!("\t> Index Template : {}", custom_html_file.green()); - println!("\t> URL Rewrite [index_on_404] : {}", url_rewrite.purple()); - println!(); - println!( - "\t> Build Time Use : {} millis", - options.elapsed_time.to_string().green().bold() - ); - println!(); - - if options.warnings.is_empty() { - log::info!("{}\n", "A perfect compilation!".green().bold()); - } else { - log::warn!( - "{}", - format!( - "There were {} warning messages during the build.", - options.warnings.len() - 1 - ) - .yellow() - .bold() - ); - // for info in &options.warnings { - // let message = info.message.clone(); - // if message == format!("{} warnings emitted", options.warnings.len() - 1) { - // continue; - // } - // let mut console = String::new(); - // for span in &info.spans { - // let file = &span.file_name; - // let line = (span.line_start, span.line_end); - // let line_str = if line.0 == line.1 { - // line.0.to_string() - // } else { - // format!("{}~{}", line.0, line.1) - // }; - // let code = span.text.clone(); - // let span_info = if code.len() == 1 { - // let code = code.get(0).unwrap().text.trim().blue().bold().to_string(); - // format!( - // "[{}: {}]: '{}' --> {}", - // file, - // line_str, - // code, - // message.yellow().bold() - // ) - // } else { - // let code = code - // .iter() - // .enumerate() - // .map(|(_i, s)| format!("\t{}\n", s.text).blue().bold().to_string()) - // .collect::(); - // format!("[{}: {}]:\n{}\n#:{}", file, line_str, code, message) - // }; - // console = format!("{console}\n\t{span_info}"); - // } - // println!("{console}"); - // } - // println!( - // "\n{}\n", - // "Resolving all warnings will help your code run better!".yellow() - // ); - } -} - +/// Get the network ip fn get_ip() -> Option { let socket = match UdpSocket::bind("0.0.0.0:0") { Ok(s) => s, @@ -796,6 +566,7 @@ fn get_ip() -> Option { } } +/// Handle websockets async fn ws_handler( ws: WebSocketUpgrade, _: Option>, diff --git a/packages/cli/src/server/output.rs b/packages/cli/src/server/output.rs new file mode 100644 index 000000000..4c6e1f3b2 --- /dev/null +++ b/packages/cli/src/server/output.rs @@ -0,0 +1,127 @@ +use crate::server::Diagnostic; +use crate::CrateConfig; +use colored::Colorize; +use std::path::PathBuf; +use std::process::Command; + +#[derive(Debug, Default)] +pub struct PrettierOptions { + pub changed: Vec, + pub warnings: Vec, + pub elapsed_time: u128, +} + +pub fn print_console_info(ip: &String, port: u16, config: &CrateConfig, options: PrettierOptions) { + if let Ok(native_clearseq) = Command::new(if cfg!(target_os = "windows") { + "cls" + } else { + "clear" + }) + .output() + { + print!("{}", String::from_utf8_lossy(&native_clearseq.stdout)); + } else { + // Try ANSI-Escape characters + print!("\x1b[2J\x1b[H"); + } + + let mut profile = if config.release { "Release" } else { "Debug" }.to_string(); + if config.custom_profile.is_some() { + profile = config.custom_profile.as_ref().unwrap().to_string(); + } + let hot_reload = if config.hot_reload { "RSX" } else { "Normal" }; + let crate_root = crate::cargo::crate_root().unwrap(); + let custom_html_file = if crate_root.join("index.html").is_file() { + "Custom [index.html]" + } else { + "Default" + }; + let url_rewrite = if config + .dioxus_config + .web + .watcher + .index_on_404 + .unwrap_or(false) + { + "True" + } else { + "False" + }; + + let proxies = config.dioxus_config.web.proxy.as_ref(); + + if options.changed.is_empty() { + println!( + "{} @ v{} [{}] \n", + "Dioxus".bold().green(), + crate::DIOXUS_CLI_VERSION, + chrono::Local::now().format("%H:%M:%S").to_string().dimmed() + ); + } else { + println!( + "Project Reloaded: {}\n", + format!( + "Changed {} files. [{}]", + options.changed.len(), + chrono::Local::now().format("%H:%M:%S").to_string().dimmed() + ) + .purple() + .bold() + ); + } + + if config.dioxus_config.web.https.enabled == Some(true) { + println!( + "\t> Local : {}", + format!("https://localhost:{}/", port).blue() + ); + println!( + "\t> Network : {}", + format!("https://{}:{}/", ip, port).blue() + ); + println!("\t> HTTPS : {}", "Enabled".to_string().green()); + } else { + println!( + "\t> Local : {}", + format!("http://localhost:{}/", port).blue() + ); + println!( + "\t> Network : {}", + format!("http://{}:{}/", ip, port).blue() + ); + println!("\t> HTTPS : {}", "Disabled".to_string().red()); + } + println!(); + println!("\t> Profile : {}", profile.green()); + println!("\t> Hot Reload : {}", hot_reload.cyan()); + if let Some(proxies) = proxies { + if !proxies.is_empty() { + println!("\t> Proxies :"); + for proxy in proxies { + println!("\t\t- {}", proxy.backend.blue()); + } + } + } + println!("\t> Index Template : {}", custom_html_file.green()); + println!("\t> URL Rewrite [index_on_404] : {}", url_rewrite.purple()); + println!(); + println!( + "\t> Build Time Use : {} millis", + options.elapsed_time.to_string().green().bold() + ); + println!(); + + if options.warnings.is_empty() { + log::info!("{}\n", "A perfect compilation!".green().bold()); + } else { + log::warn!( + "{}", + format!( + "There were {} warning messages during the build.", + options.warnings.len() - 1 + ) + .yellow() + .bold() + ); + } +} From d83b00ff0f4a51e27e4fab33fd1c6d25a7caac0f Mon Sep 17 00:00:00 2001 From: Miles Murgaw Date: Tue, 11 Jul 2023 16:38:34 -0400 Subject: [PATCH 446/459] feat: mkcert --- packages/cli/src/server/mod.rs | 77 ++++++++++++++++++++++++---------- 1 file changed, 56 insertions(+), 21 deletions(-) diff --git a/packages/cli/src/server/mod.rs b/packages/cli/src/server/mod.rs index 6e50510ea..a732db1f3 100644 --- a/packages/cli/src/server/mod.rs +++ b/packages/cli/src/server/mod.rs @@ -19,6 +19,7 @@ use notify::{RecommendedWatcher, Watcher}; use std::{ net::UdpSocket, path::PathBuf, + process::Command, sync::{Arc, Mutex}, }; use tokio::sync::broadcast::{self, Sender}; @@ -107,7 +108,11 @@ pub async fn serve_default( update: reload_tx.clone(), }); - // start serve dev-server at 0.0.0.0 + // HTTPS + // Before console info so it can stop if mkcert isn't installed or fails + let rustls_config = get_rustls(&config).await?; + + // Print serve info print_console_info( &ip, port, @@ -119,14 +124,11 @@ pub async fn serve_default( }, ); - // HTTPS - let rustls_config = get_rustls(&config).await; - // Router let router = setup_router(config, ws_reload_state, None).await?; // Start server - start_server(port, router, start_browser, rustls_config.0).await?; + start_server(port, router, start_browser, rustls_config).await?; Ok(()) } @@ -182,6 +184,10 @@ pub async fn serve_hot_reload( ) .await?; + // HTTPS + // Before console info so it can stop if mkcert isn't installed or fails + let rustls_config = get_rustls(&config).await?; + // Print serve info print_console_info( &ip, @@ -194,44 +200,73 @@ pub async fn serve_hot_reload( }, ); - // HTTPS - let rustls_config = get_rustls(&config).await; - // Router let router = setup_router(config, ws_reload_state, Some(hot_reload_state)).await?; // Start server - start_server(port, router, start_browser, rustls_config.0).await?; + start_server(port, router, start_browser, rustls_config).await?; Ok(()) } /// Returns an enum of rustls config and a bool if mkcert isn't installed -async fn get_rustls(config: &CrateConfig) -> (Option, bool) { - let config = &config.dioxus_config.web.https; - if config.enabled != Some(true) { - return (None, false); +async fn get_rustls(config: &CrateConfig) -> Result> { + let web_config = &config.dioxus_config.web.https; + if web_config.enabled != Some(true) { + return Ok(None); } - match config.mkcert { + let (cert_path, key_path) = match web_config.mkcert { // mkcert, use it Some(true) => { - todo!() + _ = fs::create_dir("ssl"); + let cmd = Command::new("mkcert") + .args([ + "-install", + "-key-file", + "ssl/key.pem", + "-cert-file", + "ssl/cert.pem", + "localhost", + "::1", + "127.0.0.1", + ]) + .spawn(); + + match cmd { + Err(e) => { + match e.kind() { + io::ErrorKind::NotFound => log::error!("mkcert is not installed. See https://github.com/FiloSottile/mkcert#installation for installation instructions."), + e => log::error!("an error occured while generating mkcert certificates: {}", e.to_string()), + }; + return Err("failed to generate mkcert certificates".into()); + } + Ok(mut cmd) => { + cmd.wait()?; + } + } + + (PathBuf::from("ssl/cert.pem"), PathBuf::from("ssl/key.pem")) } // not mkcert Some(false) => { // get paths to cert & key - if let (Some(key), Some(cert)) = (config.key_path.clone(), config.cert_path.clone()) { - let rustls = RustlsConfig::from_pem_file(cert, key).await.unwrap(); - (Some(rustls), false) + if let (Some(key), Some(cert)) = + (web_config.key_path.clone(), web_config.cert_path.clone()) + { + (cert, key) } else { // missing cert or key - (None, false) + return Err("https is enabled but cert or key path is missing".into()); } } // other - _ => (None, false), - } + _ => return Ok(None), + }; + + Ok(Some( + RustlsConfig::from_pem_file(cert_path, key_path).await?, + )) } /// Sets up and returns a router From b47e4fedccc3cd402bcf276390d17bca3c245c72 Mon Sep 17 00:00:00 2001 From: Miles Murgaw Date: Tue, 11 Jul 2023 19:49:41 -0400 Subject: [PATCH 447/459] feat: default web.https config --- packages/cli/src/config.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/config.rs b/packages/cli/src/config.rs index 4d3da9b65..19cc3c7b5 100644 --- a/packages/cli/src/config.rs +++ b/packages/cli/src/config.rs @@ -107,6 +107,7 @@ pub struct WebConfig { pub proxy: Option>, pub watcher: WebWatcherConfig, pub resource: WebResourceConfig, + #[serde(default)] pub https: WebHttpsConfig, } @@ -141,7 +142,7 @@ pub struct WebDevResourceConfig { pub script: Option>, } -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Debug, Default, Clone, Serialize, Deserialize)] pub struct WebHttpsConfig { pub enabled: Option, pub mkcert: Option, From 5bc9e4556b7e02b67c1347c39739d3f2c5af4ded Mon Sep 17 00:00:00 2001 From: Miles Murgaw Date: Tue, 11 Jul 2023 23:01:37 -0400 Subject: [PATCH 448/459] feat: custom mkcert paths --- packages/cli/src/config.rs | 4 ++-- packages/cli/src/server/mod.rs | 26 ++++++++++++++++++++++---- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/packages/cli/src/config.rs b/packages/cli/src/config.rs index 19cc3c7b5..f9117f6e5 100644 --- a/packages/cli/src/config.rs +++ b/packages/cli/src/config.rs @@ -146,8 +146,8 @@ pub struct WebDevResourceConfig { pub struct WebHttpsConfig { pub enabled: Option, pub mkcert: Option, - pub key_path: Option, - pub cert_path: Option, + pub key_path: Option, + pub cert_path: Option, } #[derive(Debug, Clone)] diff --git a/packages/cli/src/server/mod.rs b/packages/cli/src/server/mod.rs index a732db1f3..c5b6fb57a 100644 --- a/packages/cli/src/server/mod.rs +++ b/packages/cli/src/server/mod.rs @@ -209,6 +209,9 @@ pub async fn serve_hot_reload( Ok(()) } +const DEFAULT_KEY_PATH: &str = "ssl/key.pem"; +const DEFAULT_CERT_PATH: &str = "ssl/cert.pem"; + /// Returns an enum of rustls config and a bool if mkcert isn't installed async fn get_rustls(config: &CrateConfig) -> Result> { let web_config = &config.dioxus_config.web.https; @@ -219,14 +222,29 @@ async fn get_rustls(config: &CrateConfig) -> Result> { let (cert_path, key_path) = match web_config.mkcert { // mkcert, use it Some(true) => { - _ = fs::create_dir("ssl"); + // Get paths to store certs, otherwise use ssl/item.pem + let key_path = web_config + .key_path + .clone() + .unwrap_or(DEFAULT_KEY_PATH.to_string()); + + let cert_path = web_config + .cert_path + .clone() + .unwrap_or(DEFAULT_CERT_PATH.to_string()); + + // Create ssl directory if using defaults + if key_path == DEFAULT_KEY_PATH && cert_path == DEFAULT_CERT_PATH { + fs::create_dir("ssl")?; + } + let cmd = Command::new("mkcert") .args([ "-install", "-key-file", - "ssl/key.pem", + &key_path, "-cert-file", - "ssl/cert.pem", + &cert_path, "localhost", "::1", "127.0.0.1", @@ -246,7 +264,7 @@ async fn get_rustls(config: &CrateConfig) -> Result> { } } - (PathBuf::from("ssl/cert.pem"), PathBuf::from("ssl/key.pem")) + (cert_path, key_path) } // not mkcert Some(false) => { From 120fccc53da92a3ba28d02737e3d2d8965fd394e Mon Sep 17 00:00:00 2001 From: Miles Murgaw Date: Wed, 12 Jul 2023 02:09:13 -0400 Subject: [PATCH 449/459] fix: full & hot reload --- packages/cli/src/server/mod.rs | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/packages/cli/src/server/mod.rs b/packages/cli/src/server/mod.rs index c5b6fb57a..3bd434005 100644 --- a/packages/cli/src/server/mod.rs +++ b/packages/cli/src/server/mod.rs @@ -103,7 +103,11 @@ pub async fn serve_default( // WS Reload Watching let (reload_tx, _) = broadcast::channel(100); - setup_file_watcher(&config, port, ip.clone(), reload_tx.clone()).await?; + + // We got to own watcher so that it exists for the duration of serve + // Otherwise full reload won't work. + let _watcher = setup_file_watcher(&config, port, ip.clone(), reload_tx.clone()).await?; + let ws_reload_state = Arc::new(WsReloadState { update: reload_tx.clone(), }); @@ -174,7 +178,9 @@ pub async fn serve_hot_reload( }); // Setup file watcher - setup_file_watcher_hot_reload( + // We got to own watcher so that it exists for the duration of serve + // Otherwise hot reload won't work. + let _watcher = setup_file_watcher_hot_reload( &config, port, ip.clone(), @@ -235,7 +241,7 @@ async fn get_rustls(config: &CrateConfig) -> Result> { // Create ssl directory if using defaults if key_path == DEFAULT_KEY_PATH && cert_path == DEFAULT_CERT_PATH { - fs::create_dir("ssl")?; + _ = fs::create_dir("ssl"); } let cmd = Command::new("mkcert") @@ -432,7 +438,7 @@ async fn setup_file_watcher( port: u16, watcher_ip: String, reload_tx: Sender<()>, -) -> Result<()> { +) -> Result { let build_manager = BuildManager { config: config.clone(), reload_tx, @@ -491,7 +497,7 @@ async fn setup_file_watcher( ) .unwrap(); } - Ok(()) + Ok(watcher) } // Todo: reduce duplication and merge with setup_file_watcher() @@ -503,7 +509,7 @@ async fn setup_file_watcher_hot_reload( hot_reload_tx: Sender>, file_map: Arc>>, build_manager: Arc, -) -> Result<()> { +) -> Result { // file watcher: check file change let allow_watch_path = config .dioxus_config @@ -598,7 +604,7 @@ async fn setup_file_watcher_hot_reload( } } - Ok(()) + Ok(watcher) } /// Get the network ip From 17f2de81d6444789b4a3fe868f62e822c5a92dce Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Wed, 12 Jul 2023 14:22:47 -0700 Subject: [PATCH 450/459] Remove indexmap from core --- packages/core/Cargo.toml | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/core/Cargo.toml b/packages/core/Cargo.toml index 48391456d..0b668f43d 100644 --- a/packages/core/Cargo.toml +++ b/packages/core/Cargo.toml @@ -27,8 +27,6 @@ slab = { workspace = true } futures-channel = { workspace = true } -indexmap = "1.7" - smallbox = "0.8.1" log = { workspace = true } From 39bce476aedc99f431114e667aa430bd0938d605 Mon Sep 17 00:00:00 2001 From: marc2332 Date: Thu, 13 Jul 2023 19:06:43 +0200 Subject: [PATCH 451/459] tweaks --- docs/guide/src/en/async/use_effect.md | 2 +- examples/test.rs | 63 +++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 examples/test.rs diff --git a/docs/guide/src/en/async/use_effect.md b/docs/guide/src/en/async/use_effect.md index f509921fc..9dc5a8739 100644 --- a/docs/guide/src/en/async/use_effect.md +++ b/docs/guide/src/en/async/use_effect.md @@ -1,6 +1,6 @@ # UseEffect -[`use_effect`](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_effect.html) let's you run a callback that returns a future, only it's [dependencies](#dependencies) change. This is useful to syncrhonize with external events. +[`use_effect`](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_effect.html) lets you run a callback that returns a future, which will be re-run when it's [dependencies](#dependencies) change. This is useful to syncrhonize with external events. ## Dependencies diff --git a/examples/test.rs b/examples/test.rs new file mode 100644 index 000000000..546934481 --- /dev/null +++ b/examples/test.rs @@ -0,0 +1,63 @@ +use dioxus::prelude::*; +use dioxus_router::*; + +fn main() { + // init debug tool for WebAssembly + wasm_logger::init(wasm_logger::Config::default()); + console_error_panic_hook::set_once(); + + dioxus_web::launch(app); +} + +fn Works1(cx: Scope) -> Element { + render!( + p { + "this is 1" + } + a { + href: "#section", + "section" + } + Link { + to: "/2", + p { + "go to 2" + } + } + p { + "{\"AAAA\n\".repeat(999)}" + } + h2 { + id: "section", + "section" + } + ) +} + +fn Works2(cx: Scope) -> Element { + render!( + p { + "this is 2" + Link { + to: "/", + p { + "go to 1" + } + } + ) +} + +fn app(cx: Scope) -> Element { + cx.render(rsx! ( + Router { + Route { + to: "/", + Works1 {} + } + Route { + to: "/2", + Works2 {} + } + } + )) +} \ No newline at end of file From f7dd4190438c3f25fc00502037a1d21d62368002 Mon Sep 17 00:00:00 2001 From: marc2332 Date: Thu, 13 Jul 2023 22:37:05 +0200 Subject: [PATCH 452/459] update --- docs/guide/src/en/interactivity/memoization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide/src/en/interactivity/memoization.md b/docs/guide/src/en/interactivity/memoization.md index 72a709bcc..32ec37ce5 100644 --- a/docs/guide/src/en/interactivity/memoization.md +++ b/docs/guide/src/en/interactivity/memoization.md @@ -1,6 +1,6 @@ # Memoization -[`use_memo`](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_memo.html) let's you memorize values and therefore save computation time. This is useful for expensive calculations. +[`use_memo`](https://docs.rs/dioxus-hooks/latest/dioxus_hooks/fn.use_memo.html) let's you memorize values and thus save computation time. This is useful for expensive calculations. ```rust, no_run #[inline_props] From c07006e9a21d2dd60bd0f0e44fbd7090a2a9ce0c Mon Sep 17 00:00:00 2001 From: marc2332 Date: Thu, 13 Jul 2023 22:43:46 +0200 Subject: [PATCH 453/459] :bowtie: --- examples/test.rs | 63 ------------------------------------------------ 1 file changed, 63 deletions(-) delete mode 100644 examples/test.rs diff --git a/examples/test.rs b/examples/test.rs deleted file mode 100644 index 546934481..000000000 --- a/examples/test.rs +++ /dev/null @@ -1,63 +0,0 @@ -use dioxus::prelude::*; -use dioxus_router::*; - -fn main() { - // init debug tool for WebAssembly - wasm_logger::init(wasm_logger::Config::default()); - console_error_panic_hook::set_once(); - - dioxus_web::launch(app); -} - -fn Works1(cx: Scope) -> Element { - render!( - p { - "this is 1" - } - a { - href: "#section", - "section" - } - Link { - to: "/2", - p { - "go to 2" - } - } - p { - "{\"AAAA\n\".repeat(999)}" - } - h2 { - id: "section", - "section" - } - ) -} - -fn Works2(cx: Scope) -> Element { - render!( - p { - "this is 2" - Link { - to: "/", - p { - "go to 1" - } - } - ) -} - -fn app(cx: Scope) -> Element { - cx.render(rsx! ( - Router { - Route { - to: "/", - Works1 {} - } - Route { - to: "/2", - Works2 {} - } - } - )) -} \ No newline at end of file From 2d8841cf70eaaf5990507c889d74e650c43ad585 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Fri, 14 Jul 2023 12:52:49 -0700 Subject: [PATCH 454/459] Add lazy contexts to signals --- examples/signals.rs | 5 +---- packages/core/src/scopes.rs | 19 +++++++++++++++++++ packages/hooks/src/lib.rs | 3 +++ packages/hooks/src/userootcontext.rs | 9 +++++++++ packages/signals/src/lib.rs | 10 ++++++++-- 5 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 packages/hooks/src/userootcontext.rs diff --git a/examples/signals.rs b/examples/signals.rs index 988b9af41..725577206 100644 --- a/examples/signals.rs +++ b/examples/signals.rs @@ -1,5 +1,4 @@ use dioxus::prelude::*; -use dioxus_signals::{use_init_signal_rt, use_signal}; use std::time::Duration; fn main() { @@ -7,9 +6,7 @@ fn main() { } fn app(cx: Scope) -> Element { - use_init_signal_rt(cx); - - let mut count = use_signal(cx, || 0); + let mut count = dioxus_signals::use_signal(cx, || 0); use_future!(cx, || async move { loop { diff --git a/packages/core/src/scopes.rs b/packages/core/src/scopes.rs index 2b9f32f8d..ff94c456d 100644 --- a/packages/core/src/scopes.rs +++ b/packages/core/src/scopes.rs @@ -418,6 +418,25 @@ impl<'src> ScopeState { value } + /// Provide a context to the root and then consume it + /// + /// This is intended for "global" state management solutions that would rather be implicit for the entire app. + /// Things like signal runtimes and routers are examples of "singletons" that would benefit from lazy initialization. + /// + /// Note that you should be checking if the context existed before trying to provide a new one. Providing a context + /// when a context already exists will swap the context out for the new one, which may not be what you want. + pub fn provide_root_context(&self, context: T) -> T { + let mut parent = self; + + // Walk upwards until there is no more parent - and tada we have the root + while let Some(next_parent) = parent.parent { + parent = unsafe { &*next_parent }; + debug_assert_eq!(parent.scope_id(), ScopeId(0)); + } + + parent.provide_context(context) + } + /// Pushes the future onto the poll queue to be polled after the component renders. pub fn push_future(&self, fut: impl Future + 'static) -> TaskId { let id = self.tasks.spawn(self.id, fut); diff --git a/packages/hooks/src/lib.rs b/packages/hooks/src/lib.rs index 58b6c82f5..a2fb23ed1 100644 --- a/packages/hooks/src/lib.rs +++ b/packages/hooks/src/lib.rs @@ -79,3 +79,6 @@ pub use usecallback::*; mod usememo; pub use usememo::*; + +mod userootcontext; +pub use userootcontext::*; diff --git a/packages/hooks/src/userootcontext.rs b/packages/hooks/src/userootcontext.rs new file mode 100644 index 000000000..9b2fab719 --- /dev/null +++ b/packages/hooks/src/userootcontext.rs @@ -0,0 +1,9 @@ +use dioxus_core::ScopeState; + +/// +pub fn use_root_context(cx: &ScopeState, new: impl FnOnce() -> T) -> &T { + cx.use_hook(|| { + cx.consume_context::() + .unwrap_or_else(|| cx.provide_root_context(new())) + }) +} diff --git a/packages/signals/src/lib.rs b/packages/signals/src/lib.rs index e4b499ed8..4e950e0dc 100644 --- a/packages/signals/src/lib.rs +++ b/packages/signals/src/lib.rs @@ -10,16 +10,22 @@ mod rt; use dioxus_core::ScopeState; pub use rt::*; +use crate::rt::claim_rt; + pub fn use_init_signal_rt(cx: &ScopeState) { cx.use_hook(|| { - let rt = crate::rt::claim_rt(cx.schedule_update_any()); + let rt = claim_rt(cx.schedule_update_any()); cx.provide_context(rt); }); } pub fn use_signal(cx: &ScopeState, f: impl FnOnce() -> T) -> Signal { cx.use_hook(|| { - let rt: &'static SignalRt = cx.consume_context().unwrap(); + let rt: &'static SignalRt = match cx.consume_context() { + Some(rt) => rt, + None => cx.provide_context(claim_rt(cx.schedule_update_any())), + }; + let id = rt.init(f()); rt.subscribe(id, cx.scope_id()); From 3b3020edd2cf2dc3ca226973e858694485935f30 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Fri, 14 Jul 2023 13:13:33 -0700 Subject: [PATCH 455/459] Make clippy ignore dumb lint --- packages/core-macro/tests/ifmt.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/core-macro/tests/ifmt.rs b/packages/core-macro/tests/ifmt.rs index 3e03d37a9..195a8651c 100644 --- a/packages/core-macro/tests/ifmt.rs +++ b/packages/core-macro/tests/ifmt.rs @@ -1,3 +1,5 @@ +#![allow(clippy::all)] + use std::borrow::Borrow; use dioxus_core_macro::*; From f62af4057fe3b01f164e35d2dd160ac2b12f2643 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Fri, 14 Jul 2023 13:22:08 -0700 Subject: [PATCH 456/459] Fix clippy lint --- packages/core-macro/tests/ifmt.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/core-macro/tests/ifmt.rs b/packages/core-macro/tests/ifmt.rs index 195a8651c..2883b8fd6 100644 --- a/packages/core-macro/tests/ifmt.rs +++ b/packages/core-macro/tests/ifmt.rs @@ -1,7 +1,3 @@ -#![allow(clippy::all)] - -use std::borrow::Borrow; - use dioxus_core_macro::*; #[test] @@ -22,8 +18,8 @@ fn formatting_compiles() { // function calls in formatings work assert_eq!( - format_args_f!("{x.borrow():?}").to_string(), - format!("{:?}", x.borrow()) + format_args_f!("{blah(&x):?}").to_string(), + format!("{:?}", blah(&x)) ); // allows duplicate format args @@ -32,3 +28,7 @@ fn formatting_compiles() { format!("{x:?} {x:?}") ); } + +fn blah(hi: &(i32, i32)) -> String { + format_args_f!("{hi.0} {hi.1}").to_string() +} From 8a9bf294b44e123927dc9a19ad2d4238aea6ccb9 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Fri, 14 Jul 2023 13:24:28 -0700 Subject: [PATCH 457/459] Use local CLI for playright --- .github/workflows/playwright.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index c43c1dc33..604562f6a 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -33,7 +33,7 @@ jobs: uses: actions-rs/cargo@v1 with: command: install - args: --git https://github.com/DioxusLabs/cli + args: --path packages/cli - name: Run Playwright tests run: npx playwright test - uses: actions/upload-artifact@v3 From 17ae835f9e03936033dce0bc9a545a3fbe817ed1 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Fri, 14 Jul 2023 14:14:51 -0700 Subject: [PATCH 458/459] Try pinning ubuntu version to fix CI --- .github/workflows/playwright.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 604562f6a..84891f403 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -8,7 +8,7 @@ jobs: test: if: github.event.pull_request.draft == false timeout-minutes: 60 - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 From f2cd6b8af65fc4c8f1e9f109884a2e8696986f15 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Fri, 14 Jul 2023 14:54:21 -0700 Subject: [PATCH 459/459] Disable LTO on CLI --- Cargo.toml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index d69a74828..b7a6e96e9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -115,8 +115,3 @@ fern = { version = "0.6.0", features = ["colored"] } thiserror = "1.0.30" env_logger = "0.10.0" simple_logger = "4.0.0" - -[profile.release] -opt-level = 3 -lto = true -debug = true