Some zip files do not list directories separately from files. For example, a zip might contain `dir/file.txt` without a corresponding entry for just `dir/`. This should be okay, so we just create the leading paths for the files we extract as necessary.
Also adds tests for the expected and dangerous path cases of `extract_zip`.
I believe that technically this function is part of the public API via `dioxus_cli::cli::cfg::parse_public_url`. However, I don't see any evidence that this function is actually used inside or outside this crate. The last use within the crate was removed in January 2022 (9bb10c65a3).
I'm not totally sure how the sentence was supposed to read, but removing "state" from "It state" seemed to work. Also, "it's" is "it is" and not possessive, so I fixed that.
* fix(serve): provide a clear error with pathless proxy URLs
Without this, `dx serve` panics with this message:
```
Paths must start with a `/`. Use "/" for
root routes
```
That's not very clear. Instead, we can detect this situation and provide a better error message:
```
Error: 🚫 Serving project failed: Failed to establish proxy: Proxy backend URL must have a non-empty path, e.g. http://localhost:8080/api instead of http://localhost:8080
```
* docs(config): correct format for `web.proxy`
`cargo build` would print this warning:
```
warning: dioxus/packages/web/Cargo.toml: `default-features` is ignored for dioxus-html, since `default-features` was not specified for `workspace.dependencies.dioxus-html`, this could become a hard error in the future
```
Since it's being ignored anyway and that doesn't seem to be causing problems, I figured I'd remove it and get rid of the warning.
Previously an invalid `Dioxus.toml` file would yield this error when running e.g. `dx serve`:
```
Error: Failed to load `Dioxus.toml` because: Dioxus.toml parse failed
```
This doesn't give any indication why it failed to parse. This commit updates it to include why the parsing failed, e.g.:
```
Error: Failed to load Dioxus config because: Dioxus.toml missing field `name` for key `application` at line 38 column 1
```
I initially had it format the message to include `Dioxus.toml:38:1` to be clickable in some terminals, but the location specified didn't always seem particularly relevant to the actual problem so I left it as-is.
This also fixes what I believe would be an issue on case-sensitive file systems where if `dioxus.toml` existed it would try to read `Dioxus.toml`.
I'm still fairly new to Rust, so the `.as_path()` calls may not be the best way to deal with the fact that the borrow checker wouldn't let me re-use `crate_dir` and `dioxus_conf_file`. I'm open to suggestions!