updated the dependencies - maintaining compatibility and tests (#4363)
* Update dependencies in Cargo.lock * added in the missing bevy example which was included in recent merge * undo unneccessary library installation in gh actions * cleaned up further * Update dependencies in Cargo.toml and Cargo.lock askana_escape to 0.13 * updated code to make tests work * updated the wgpu texture example * replaced all direct reference with use * fixed wgpu and jsframework errors in benches and examples * Fix: Import black_box from std::hint * grand finale upgrade * updated cargo.lock * Bump hyper-util to 0.1.15 and plist to 1.7.4 * remove some unused swc dependencies and add a command to update them in the future --------- Co-authored-by: Evan Almloff <evanalmloff@gmail.com> Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
This commit is contained in:
27 files changed
+773
-962
No files matched your search
@@ -61,7 +61,6 @@ jobs:
|
|||||||
repository-name: dioxuslabs/docsite
|
repository-name: dioxuslabs/docsite
|
||||||
clean: false
|
clean: false
|
||||||
token: ${{ secrets.DEPLOY_KEY }}
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
# Attempt to backport a merged pull request to the latest stable release
|
# Attempt to backport a merged pull request to the latest stable release
|
||||||
#
|
#
|
||||||
# If the backported PR is succesfully merged
|
# If the backported PR is succesfully merged
|
||||||
@@ -87,5 +86,3 @@ jobs:
|
|||||||
# uses: codecov/codecov-action@v2
|
# uses: codecov/codecov-action@v2
|
||||||
# with:
|
# with:
|
||||||
# fail_ci_if_error: false
|
# fail_ci_if_error: false
|
||||||
|
|
||||||
|
|
||||||
Generated
+543
-768
File diff suppressed because it is too large.
Load diff
+50
-50
@@ -203,17 +203,17 @@ warnings = { version = "0.2.1" }
|
|||||||
|
|
||||||
# a fork of pretty please for tests - let's get off of this if we can!
|
# a fork of pretty please for tests - let's get off of this if we can!
|
||||||
prettier-please = { version = "0.3.0", features = ["verbatim"] }
|
prettier-please = { version = "0.3.0", features = ["verbatim"] }
|
||||||
anyhow = "1.0.97"
|
anyhow = "1.0.98"
|
||||||
clap = { version = "4.5.31" }
|
clap = { version = "4.5.40" }
|
||||||
askama_escape = "0.13.0"
|
askama_escape = "0.13.0"
|
||||||
tracing = "0.1.41"
|
tracing = "0.1.41"
|
||||||
tracing-futures = "0.2.5"
|
tracing-futures = "0.2.5"
|
||||||
tracing-subscriber = { version = "0.3.19", default-features = false }
|
tracing-subscriber = { version = "0.3.19", default-features = false }
|
||||||
toml = "0.8"
|
toml = "0.8"
|
||||||
tokio = "1.43"
|
tokio = "1.46"
|
||||||
tokio-util = { version = "0.7.13" }
|
tokio-util = { version = "0.7.15" }
|
||||||
tokio-stream = { version = "0.1.17" }
|
tokio-stream = { version = "0.1.17" }
|
||||||
slab = "0.4.9"
|
slab = "0.4.10"
|
||||||
slotmap = { version = "1.0.7", features = ["serde"] }
|
slotmap = { version = "1.0.7", features = ["serde"] }
|
||||||
futures = "0.3.31"
|
futures = "0.3.31"
|
||||||
futures-channel = "0.3.31"
|
futures-channel = "0.3.31"
|
||||||
@@ -225,23 +225,23 @@ js-sys = "0.3.77"
|
|||||||
web-sys = { version = "0.3.77", default-features = false }
|
web-sys = { version = "0.3.77", default-features = false }
|
||||||
html_parser = "0.7.0"
|
html_parser = "0.7.0"
|
||||||
thiserror = "2.0.12"
|
thiserror = "2.0.12"
|
||||||
prettyplease = { version = "0.2.30", features = ["verbatim"] }
|
prettyplease = { version = "0.2.35", features = ["verbatim"] }
|
||||||
const_format = "0.2.34"
|
const_format = "0.2.34"
|
||||||
cargo_toml = { version = "0.22.1" }
|
cargo_toml = { version = "0.22.1" }
|
||||||
tauri-utils = { version = "=2.5.0" }
|
tauri-utils = { version = "=2.5.0" }
|
||||||
tauri-bundler = { version = "=2.5.0" }
|
tauri-bundler = { version = "=2.5.0" }
|
||||||
lru = "0.14.0"
|
lru = "0.16.0"
|
||||||
async-trait = "0.1.87"
|
async-trait = "0.1.88"
|
||||||
axum = { version = "0.8.1", default-features = false }
|
axum = { version = "0.8.4", default-features = false }
|
||||||
axum-server = { version = "0.7.1", default-features = false }
|
axum-server = { version = "0.7.2", default-features = false }
|
||||||
server_fn = { version = "0.8.2", default-features = false }
|
server_fn = { version = "0.8.2", default-features = false }
|
||||||
server_fn_macro = { version = "0.8.2" }
|
server_fn_macro = { version = "0.8.2" }
|
||||||
tower = "0.5.2"
|
tower = "0.5.2"
|
||||||
http = "1.2.0"
|
http = "1.3.1"
|
||||||
notify = { version = "8.0.0" }
|
notify = { version = "8.1.0" }
|
||||||
tower-http = "0.6.2"
|
tower-http = "0.6.6"
|
||||||
hyper = "1.6.0"
|
hyper = "1.6.0"
|
||||||
hyper-rustls = { version = "0.27.5", default-features = false, features = [
|
hyper-rustls = { version = "0.27.7", default-features = false, features = [
|
||||||
"native-tokio",
|
"native-tokio",
|
||||||
"http1",
|
"http1",
|
||||||
"http2",
|
"http2",
|
||||||
@@ -249,21 +249,21 @@ hyper-rustls = { version = "0.27.5", default-features = false, features = [
|
|||||||
"logging",
|
"logging",
|
||||||
"ring",
|
"ring",
|
||||||
] }
|
] }
|
||||||
rustls = { version = "0.23.23", default-features = false, features = ["logging", "std", "tls12", "ring"] }
|
rustls = { version = "0.23.28", default-features = false, features = ["logging", "std", "tls12", "ring"] }
|
||||||
serde_json = "1.0.140"
|
serde_json = "1.0.140"
|
||||||
serde = "1.0.218"
|
serde = "1.0.219"
|
||||||
syn = "2.0"
|
syn = "2.0"
|
||||||
quote = "1.0"
|
quote = "1.0"
|
||||||
proc-macro2 = "1.0"
|
proc-macro2 = "1.0"
|
||||||
axum_session = "0.16.0"
|
axum_session = "0.16.0"
|
||||||
axum_session_auth = "0.16.0"
|
axum_session_auth = "0.16.0"
|
||||||
axum_session_sqlx = "0.5.0"
|
axum_session_sqlx = "0.5.0"
|
||||||
axum-extra = "0.10.0"
|
axum-extra = "0.10.1"
|
||||||
reqwest = "0.12.12"
|
reqwest = "0.12.22"
|
||||||
owo-colors = "4.2.0"
|
owo-colors = "4.2.2"
|
||||||
ciborium = "0.2.2"
|
ciborium = "0.2.2"
|
||||||
base64 = "0.22.1"
|
base64 = "0.22.1"
|
||||||
uuid = "1.15.1"
|
uuid = "1.17.0"
|
||||||
convert_case = "0.8.0"
|
convert_case = "0.8.0"
|
||||||
tungstenite = { version = "0.27.0" }
|
tungstenite = { version = "0.27.0" }
|
||||||
tokio-tungstenite = { version = "0.27.0" }
|
tokio-tungstenite = { version = "0.27.0" }
|
||||||
@@ -271,45 +271,45 @@ gloo-timers = "0.3.0"
|
|||||||
fluent-uri = { version = "0.3.2", features = ["serde"] }
|
fluent-uri = { version = "0.3.2", features = ["serde"] }
|
||||||
internment = { version = "0.8.6" }
|
internment = { version = "0.8.6" }
|
||||||
proc-macro2-diagnostics = { version = "0.10", default-features = false }
|
proc-macro2-diagnostics = { version = "0.10", default-features = false }
|
||||||
env_logger = "0.11.6"
|
env_logger = "0.11.8"
|
||||||
chrono = { version = "0.4.40" }
|
chrono = { version = "0.4.41" }
|
||||||
gloo = { version = "0.11.0" }
|
gloo = { version = "0.11.0" }
|
||||||
gloo-utils = { version = "0.2.0" }
|
gloo-utils = { version = "0.2.0" }
|
||||||
rustversion = "1.0.20"
|
rustversion = "1.0.21"
|
||||||
rand = "0.8"
|
rand = "0.9"
|
||||||
longest-increasing-subsequence = "0.1.0"
|
longest-increasing-subsequence = "0.1.0"
|
||||||
trybuild = "1.0"
|
trybuild = "1.0"
|
||||||
dirs = "6.0.0"
|
dirs = "6.0.0"
|
||||||
cargo-config2 = "0.1.32"
|
cargo-config2 = "0.1.34"
|
||||||
criterion = { version = "0.5" }
|
criterion = { version = "0.6" }
|
||||||
cargo_metadata = "0.19.2"
|
cargo_metadata = "0.19.2"
|
||||||
parking_lot = "0.12.3"
|
parking_lot = "0.12.4"
|
||||||
tracing-wasm = "0.2.1"
|
tracing-wasm = "0.2.1"
|
||||||
console_error_panic_hook = "0.1.7"
|
console_error_panic_hook = "0.1.7"
|
||||||
base16 = "0.2.1"
|
base16 = "0.2.1"
|
||||||
digest = "0.10.7"
|
digest = "0.10.7"
|
||||||
sha2 = "0.10.8"
|
sha2 = "0.10.9"
|
||||||
walrus = { version = "0.23.3", features = ["parallel"] }
|
walrus = { version = "0.23.3", features = ["parallel"] }
|
||||||
id-arena = "2.2.1"
|
id-arena = "2.2.1"
|
||||||
async-compression = { version = "0.4.20", features = ["futures-io", "gzip", "brotli"] }
|
async-compression = { version = "0.4.25", features = ["futures-io", "gzip", "brotli"] }
|
||||||
getrandom = { version = "0.2.0" }
|
getrandom = { version = "0.3.3" }
|
||||||
async-once-cell = { version = "0.5.4" }
|
async-once-cell = { version = "0.5.4" }
|
||||||
rayon = "1.10.0"
|
rayon = "1.10.0"
|
||||||
wasmparser = "0.226.0"
|
wasmparser = "0.235.0"
|
||||||
itertools = "0.14.0"
|
itertools = "0.14.0"
|
||||||
object = { version = "0.36.0" }
|
object = { version = "0.37.1" }
|
||||||
bincode = "1.3.3"
|
bincode = "1.3.3"
|
||||||
inventory = { version = "0.3.5" }
|
inventory = { version = "0.3.20" }
|
||||||
macro-string = "0.1.4"
|
macro-string = "0.1.4"
|
||||||
walkdir = "2.5.0"
|
walkdir = "2.5.0"
|
||||||
url = "2.3.1"
|
url = "2.5.4"
|
||||||
separator = "0.4.1"
|
separator = "0.4.1"
|
||||||
pretty_assertions = "1.4.0"
|
pretty_assertions = "1.4.1"
|
||||||
serde_repr = "0.1"
|
serde_repr = "0.1"
|
||||||
hyper-util = "0.1.10"
|
hyper-util = "0.1.15"
|
||||||
krates = { version = "0.19.0" }
|
krates = { version = "0.17.5" }
|
||||||
libloading = "0.8.6"
|
libloading = "0.8.8"
|
||||||
libc = "0.2.170"
|
libc = "0.2.174"
|
||||||
memmap2 = "0.9.5"
|
memmap2 = "0.9.5"
|
||||||
memfd = "0.6.4"
|
memfd = "0.6.4"
|
||||||
|
|
||||||
@@ -320,30 +320,30 @@ infer = "0.19.0"
|
|||||||
dunce = "1.0.5"
|
dunce = "1.0.5"
|
||||||
percent-encoding = "2.3.1"
|
percent-encoding = "2.3.1"
|
||||||
global-hotkey = "0.7.0"
|
global-hotkey = "0.7.0"
|
||||||
rfd = { version = "0.15.2", default-features = false }
|
rfd = { version = "0.15.3", default-features = false }
|
||||||
muda = "0.17.0"
|
muda = "0.17.0"
|
||||||
cocoa = "0.26"
|
cocoa = "0.26"
|
||||||
core-foundation = "0.10.1"
|
core-foundation = "0.10.1"
|
||||||
objc = { version = "0.2.7", features = ["exception"] }
|
objc = { version = "0.2.7", features = ["exception"] }
|
||||||
objc_id = "0.1.1"
|
objc_id = "0.1.1"
|
||||||
tray-icon = "0.21.0"
|
tray-icon = "0.21.0"
|
||||||
open = "5.1.2"
|
open = "5.3.2"
|
||||||
|
|
||||||
# web
|
# web
|
||||||
gloo-dialogs = "0.2.0"
|
gloo-dialogs = "0.2.0"
|
||||||
|
|
||||||
# tui stuff
|
# tui stuff
|
||||||
ansi-to-tui = "7.0"
|
ansi-to-tui = "7.0"
|
||||||
ansi-to-html = "0.2.1"
|
ansi-to-html = "0.2.2"
|
||||||
path-absolutize = "3.1"
|
path-absolutize = "3.1"
|
||||||
crossterm = { version = "0.29.0" }
|
crossterm = { version = "0.29.0" }
|
||||||
ratatui = { version = "0.29.0" }
|
ratatui = { version = "0.29.0" }
|
||||||
shell-words = "1.1.0"
|
shell-words = "1.1.0"
|
||||||
color-eyre = "0.6.3"
|
color-eyre = "0.6.5"
|
||||||
|
|
||||||
# native
|
# native
|
||||||
keyboard-types = { version = "0.7", default-features = false }
|
keyboard-types = { version = "0.7", default-features = false }
|
||||||
winit = { version = "0.30.2", features = ["rwh_06"] }
|
winit = { version = "0.30.11", features = ["rwh_06"] }
|
||||||
|
|
||||||
[profile.dev]
|
[profile.dev]
|
||||||
|
|
||||||
@@ -412,7 +412,7 @@ reqwest = { workspace = true, features = ["json"], optional = true }
|
|||||||
ciborium = { workspace = true, optional = true }
|
ciborium = { workspace = true, optional = true }
|
||||||
base64 = { workspace = true, optional = true }
|
base64 = { workspace = true, optional = true }
|
||||||
http-range = { version = "0.1.5", optional = true }
|
http-range = { version = "0.1.5", optional = true }
|
||||||
wgpu = { version = "0.19", optional = true }
|
wgpu = { version = "24.0", optional = true }
|
||||||
ouroboros = { version = "*", optional = true }
|
ouroboros = { version = "*", optional = true }
|
||||||
wasm-splitter = { workspace = true, package = "wasm-split" }
|
wasm-splitter = { workspace = true, package = "wasm-split" }
|
||||||
|
|
||||||
@@ -424,16 +424,16 @@ separator = { workspace = true }
|
|||||||
serde = { workspace = true, features = ["derive"] }
|
serde = { workspace = true, features = ["derive"] }
|
||||||
serde_json = { workspace = true }
|
serde_json = { workspace = true }
|
||||||
rand = { workspace = true, features = ["small_rng"] }
|
rand = { workspace = true, features = ["small_rng"] }
|
||||||
form_urlencoded = "1.2.0"
|
form_urlencoded = "1.2.1"
|
||||||
async-std = "1.12.0"
|
async-std = "1.13.1"
|
||||||
web-time = "1.1.0"
|
web-time = "1.1.0"
|
||||||
|
|
||||||
[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
|
[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
|
||||||
getrandom = { workspace = true, features = ["js"] }
|
getrandom = { workspace = true, features = ["wasm_js"] }
|
||||||
tokio = { version = "1.43", default-features = false, features = ["sync", "macros", "io-util", "rt", "time"] }
|
tokio = { version = "1.46", default-features = false, features = ["sync", "macros", "io-util", "rt", "time"] }
|
||||||
|
|
||||||
[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
|
[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
|
||||||
tokio = { version = "1.43", features = ["full"] }
|
tokio = { version = "1.46", features = ["full"] }
|
||||||
|
|
||||||
# force vendored openssl on android
|
# force vendored openssl on android
|
||||||
[target.'cfg(target_os = "android")'.dev-dependencies]
|
[target.'cfg(target_os = "android")'.dev-dependencies]
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ dioxus-cli-config = { workspace = true, optional = true }
|
|||||||
axum = { workspace = true, optional = true }
|
axum = { workspace = true, optional = true }
|
||||||
tokio = { workspace = true, features = ["full"], optional = true }
|
tokio = { workspace = true, features = ["full"], optional = true }
|
||||||
tower-http = { workspace = true, features = ["auth"], optional = true }
|
tower-http = { workspace = true, features = ["auth"], optional = true }
|
||||||
async-trait = { version = "0.1.71", optional = true }
|
async-trait = { version = "0.1.88", optional = true }
|
||||||
sqlx = { version = "0.8.2", features = [
|
sqlx = { version = "0.8.6", features = [
|
||||||
"macros",
|
"macros",
|
||||||
"migrate",
|
"migrate",
|
||||||
"postgres",
|
"postgres",
|
||||||
|
|||||||
+2
-2
@@ -7,7 +7,7 @@
|
|||||||
//! If you `go-to-definition` on the `svg` element, you'll see its custom namespace.
|
//! If you `go-to-definition` on the `svg` element, you'll see its custom namespace.
|
||||||
|
|
||||||
use dioxus::prelude::*;
|
use dioxus::prelude::*;
|
||||||
use rand::{thread_rng, Rng};
|
use rand::{rng, Rng};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
dioxus::launch(|| {
|
dioxus::launch(|| {
|
||||||
@@ -42,7 +42,7 @@ fn Dice() -> Element {
|
|||||||
view_box: "-1000 -1000 2000 2000",
|
view_box: "-1000 -1000 2000 2000",
|
||||||
onclick: move |event| {
|
onclick: move |event| {
|
||||||
event.prevent_default();
|
event.prevent_default();
|
||||||
value.set(thread_rng().gen_range(1..=6))
|
value.set(rng().random_range(1..=6))
|
||||||
},
|
},
|
||||||
rect { x: -1000, y: -1000, width: 2000, height: 2000, rx: 200, fill: "#aaa" }
|
rect { x: -1000, y: -1000, width: 2000, height: 2000, rx: 200, fill: "#aaa" }
|
||||||
for ((x, y), _) in DOTS.iter().zip(active_dots.read().iter()).filter(|(_, &active)| active) {
|
for ((x, y), _) in DOTS.iter().zip(active_dots.read().iter()).filter(|(_, &active)| active) {
|
||||||
|
|||||||
@@ -4,7 +4,13 @@ use crate::Color;
|
|||||||
use dioxus_native::{CustomPaintCtx, CustomPaintSource, DeviceHandle, TextureHandle};
|
use dioxus_native::{CustomPaintCtx, CustomPaintSource, DeviceHandle, TextureHandle};
|
||||||
use std::sync::mpsc::{channel, Receiver, Sender};
|
use std::sync::mpsc::{channel, Receiver, Sender};
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
use wgpu::Instance;
|
use wgpu::{
|
||||||
|
CommandEncoderDescriptor, Device, Extent3d, FragmentState, Instance, LoadOp, MultisampleState,
|
||||||
|
Operations, PipelineLayoutDescriptor, PrimitiveState, PushConstantRange, Queue,
|
||||||
|
RenderPassColorAttachment, RenderPassDescriptor, RenderPipeline, RenderPipelineDescriptor,
|
||||||
|
ShaderModuleDescriptor, ShaderSource, ShaderStages, StoreOp, Texture, TextureDescriptor,
|
||||||
|
TextureDimension, TextureFormat, TextureUsages, TextureViewDescriptor, VertexState,
|
||||||
|
};
|
||||||
|
|
||||||
pub struct DemoPaintSource {
|
pub struct DemoPaintSource {
|
||||||
state: DemoRendererState,
|
state: DemoRendererState,
|
||||||
@@ -16,8 +22,10 @@ pub struct DemoPaintSource {
|
|||||||
|
|
||||||
impl CustomPaintSource for DemoPaintSource {
|
impl CustomPaintSource for DemoPaintSource {
|
||||||
fn resume(&mut self, _instance: &Instance, device_handle: &DeviceHandle) {
|
fn resume(&mut self, _instance: &Instance, device_handle: &DeviceHandle) {
|
||||||
// TODO: work out what to do about width/height
|
// Extract device and queue from device_handle
|
||||||
let active_state = ActiveDemoRenderer::new(device_handle);
|
let device = &device_handle.device;
|
||||||
|
let queue = &device_handle.queue;
|
||||||
|
let active_state = ActiveDemoRenderer::new(device, queue);
|
||||||
self.state = DemoRendererState::Active(Box::new(active_state));
|
self.state = DemoRendererState::Active(Box::new(active_state));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,14 +57,14 @@ enum DemoRendererState {
|
|||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
struct TextureAndHandle {
|
struct TextureAndHandle {
|
||||||
texture: wgpu::Texture,
|
texture: Texture,
|
||||||
handle: TextureHandle,
|
handle: TextureHandle,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ActiveDemoRenderer {
|
struct ActiveDemoRenderer {
|
||||||
device: wgpu::Device,
|
device: Device,
|
||||||
queue: wgpu::Queue,
|
queue: Queue,
|
||||||
pipeline: wgpu::RenderPipeline,
|
pipeline: RenderPipeline,
|
||||||
displayed_texture: Option<TextureAndHandle>,
|
displayed_texture: Option<TextureAndHandle>,
|
||||||
next_texture: Option<TextureAndHandle>,
|
next_texture: Option<TextureAndHandle>,
|
||||||
}
|
}
|
||||||
@@ -110,44 +118,39 @@ impl DemoPaintSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl ActiveDemoRenderer {
|
impl ActiveDemoRenderer {
|
||||||
pub(crate) fn new(device_handle: &DeviceHandle) -> Self {
|
pub(crate) fn new(device: &Device, queue: &Queue) -> Self {
|
||||||
let device = &device_handle.device;
|
let shader = device.create_shader_module(ShaderModuleDescriptor {
|
||||||
let queue = &device_handle.queue;
|
|
||||||
|
|
||||||
let shader = device.create_shader_module(wgpu::ShaderModuleDescriptor {
|
|
||||||
label: None,
|
label: None,
|
||||||
source: wgpu::ShaderSource::Wgsl(std::borrow::Cow::Borrowed(include_str!(
|
source: ShaderSource::Wgsl(std::borrow::Cow::Borrowed(include_str!("shader.wgsl"))),
|
||||||
"shader.wgsl"
|
|
||||||
))),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor {
|
let pipeline_layout = device.create_pipeline_layout(&PipelineLayoutDescriptor {
|
||||||
label: None,
|
label: None,
|
||||||
bind_group_layouts: &[],
|
bind_group_layouts: &[],
|
||||||
push_constant_ranges: &[wgpu::PushConstantRange {
|
push_constant_ranges: &[PushConstantRange {
|
||||||
stages: wgpu::ShaderStages::FRAGMENT,
|
stages: ShaderStages::FRAGMENT,
|
||||||
range: 0..16, // full size in bytes, aligned
|
range: 0..16, // full size in bytes, aligned
|
||||||
}],
|
}],
|
||||||
});
|
});
|
||||||
|
|
||||||
let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
|
let pipeline = device.create_render_pipeline(&RenderPipelineDescriptor {
|
||||||
label: None,
|
label: None,
|
||||||
layout: Some(&pipeline_layout),
|
layout: Some(&pipeline_layout),
|
||||||
vertex: wgpu::VertexState {
|
vertex: VertexState {
|
||||||
module: &shader,
|
module: &shader,
|
||||||
entry_point: Some("vs_main"),
|
entry_point: Some("vs_main"),
|
||||||
buffers: &[],
|
buffers: &[],
|
||||||
compilation_options: Default::default(),
|
compilation_options: Default::default(),
|
||||||
},
|
},
|
||||||
fragment: Some(wgpu::FragmentState {
|
fragment: Some(FragmentState {
|
||||||
module: &shader,
|
module: &shader,
|
||||||
entry_point: Some("fs_main"),
|
entry_point: Some("fs_main"),
|
||||||
compilation_options: Default::default(),
|
compilation_options: Default::default(),
|
||||||
targets: &[Some(wgpu::TextureFormat::Rgba8Unorm.into())],
|
targets: &[Some(TextureFormat::Rgba8Unorm.into())],
|
||||||
}),
|
}),
|
||||||
primitive: wgpu::PrimitiveState::default(),
|
primitive: PrimitiveState::default(),
|
||||||
depth_stencil: None,
|
depth_stencil: None,
|
||||||
multisample: wgpu::MultisampleState::default(),
|
multisample: MultisampleState::default(),
|
||||||
multiview: None,
|
multiview: None,
|
||||||
cache: None,
|
cache: None,
|
||||||
});
|
});
|
||||||
@@ -199,16 +202,16 @@ impl ActiveDemoRenderer {
|
|||||||
|
|
||||||
let mut encoder = self
|
let mut encoder = self
|
||||||
.device
|
.device
|
||||||
.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: None });
|
.create_command_encoder(&CommandEncoderDescriptor { label: None });
|
||||||
{
|
{
|
||||||
let mut rpass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
|
let mut rpass = encoder.begin_render_pass(&RenderPassDescriptor {
|
||||||
label: None,
|
label: None,
|
||||||
color_attachments: &[Some(wgpu::RenderPassColorAttachment {
|
color_attachments: &[Some(RenderPassColorAttachment {
|
||||||
view: &next_texture.create_view(&wgpu::TextureViewDescriptor::default()),
|
view: &next_texture.create_view(&TextureViewDescriptor::default()),
|
||||||
resolve_target: None,
|
resolve_target: None,
|
||||||
ops: wgpu::Operations {
|
ops: Operations {
|
||||||
load: wgpu::LoadOp::Clear(wgpu::Color::GREEN),
|
load: LoadOp::Clear(wgpu::Color::GREEN),
|
||||||
store: wgpu::StoreOp::Store,
|
store: StoreOp::Store,
|
||||||
},
|
},
|
||||||
})],
|
})],
|
||||||
depth_stencil_attachment: None,
|
depth_stencil_attachment: None,
|
||||||
@@ -217,7 +220,7 @@ impl ActiveDemoRenderer {
|
|||||||
});
|
});
|
||||||
rpass.set_pipeline(&self.pipeline);
|
rpass.set_pipeline(&self.pipeline);
|
||||||
rpass.set_push_constants(
|
rpass.set_push_constants(
|
||||||
wgpu::ShaderStages::FRAGMENT, // Stage (your constants are for fragment shader)
|
ShaderStages::FRAGMENT, // Stage (your constants are for fragment shader)
|
||||||
0, // Offset in bytes (start at 0)
|
0, // Offset in bytes (start at 0)
|
||||||
bytemuck::bytes_of(&push_constants),
|
bytemuck::bytes_of(&push_constants),
|
||||||
);
|
);
|
||||||
@@ -237,21 +240,21 @@ struct PushConstants {
|
|||||||
light_color_and_time: [f32; 4],
|
light_color_and_time: [f32; 4],
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_texture(device: &wgpu::Device, width: u32, height: u32) -> wgpu::Texture {
|
fn create_texture(device: &Device, width: u32, height: u32) -> Texture {
|
||||||
device.create_texture(&wgpu::TextureDescriptor {
|
device.create_texture(&TextureDescriptor {
|
||||||
label: None,
|
label: None,
|
||||||
size: wgpu::Extent3d {
|
size: Extent3d {
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
depth_or_array_layers: 1,
|
depth_or_array_layers: 1,
|
||||||
},
|
},
|
||||||
mip_level_count: 1,
|
mip_level_count: 1,
|
||||||
sample_count: 1,
|
sample_count: 1,
|
||||||
dimension: wgpu::TextureDimension::D2,
|
dimension: TextureDimension::D2,
|
||||||
format: wgpu::TextureFormat::Rgba8Unorm,
|
format: TextureFormat::Rgba8Unorm,
|
||||||
usage: wgpu::TextureUsages::RENDER_ATTACHMENT
|
usage: TextureUsages::RENDER_ATTACHMENT
|
||||||
| wgpu::TextureUsages::TEXTURE_BINDING
|
| TextureUsages::TEXTURE_BINDING
|
||||||
| wgpu::TextureUsages::COPY_SRC,
|
| TextureUsages::COPY_SRC,
|
||||||
view_formats: &[],
|
view_formats: &[],
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -124,6 +124,7 @@ impl<'a> GraphicsResources<'a> {
|
|||||||
// Make sure we use the texture resolution limits from the adapter, so we can support images the size of the swapchain.
|
// Make sure we use the texture resolution limits from the adapter, so we can support images the size of the swapchain.
|
||||||
required_limits: wgpu::Limits::downlevel_webgl2_defaults()
|
required_limits: wgpu::Limits::downlevel_webgl2_defaults()
|
||||||
.using_resolution(adapter.limits()),
|
.using_resolution(adapter.limits()),
|
||||||
|
memory_hints: wgpu::MemoryHints::default(),
|
||||||
},
|
},
|
||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
@@ -165,18 +166,21 @@ fn fs_main() -> @location(0) vec4<f32> {
|
|||||||
layout: Some(&pipeline_layout),
|
layout: Some(&pipeline_layout),
|
||||||
vertex: wgpu::VertexState {
|
vertex: wgpu::VertexState {
|
||||||
module: &shader,
|
module: &shader,
|
||||||
entry_point: "vs_main",
|
entry_point: Some("vs_main"),
|
||||||
buffers: &[],
|
buffers: &[],
|
||||||
|
compilation_options: wgpu::PipelineCompilationOptions::default(),
|
||||||
},
|
},
|
||||||
fragment: Some(wgpu::FragmentState {
|
fragment: Some(wgpu::FragmentState {
|
||||||
module: &shader,
|
module: &shader,
|
||||||
entry_point: "fs_main",
|
entry_point: Some("fs_main"),
|
||||||
targets: &[Some(swapchain_format.into())],
|
targets: &[Some(swapchain_format.into())],
|
||||||
|
compilation_options: wgpu::PipelineCompilationOptions::default(),
|
||||||
}),
|
}),
|
||||||
primitive: wgpu::PrimitiveState::default(),
|
primitive: wgpu::PrimitiveState::default(),
|
||||||
depth_stencil: None,
|
depth_stencil: None,
|
||||||
multisample: wgpu::MultisampleState::default(),
|
multisample: wgpu::MultisampleState::default(),
|
||||||
multiview: None,
|
multiview: None,
|
||||||
|
cache: None,
|
||||||
});
|
});
|
||||||
|
|
||||||
let config = wgpu::SurfaceConfiguration {
|
let config = wgpu::SurfaceConfiguration {
|
||||||
|
|||||||
+39
-30
@@ -26,47 +26,56 @@ mozjpeg = { version = "0.10.13", default-features = false, features = [
|
|||||||
"parallel",
|
"parallel",
|
||||||
] }
|
] }
|
||||||
# - PNG
|
# - PNG
|
||||||
imagequant = "4.3.4"
|
imagequant = "4.4.0"
|
||||||
png = "0.17.16"
|
png = "0.17.16"
|
||||||
|
|
||||||
# Image format/conversion
|
# Image format/conversion
|
||||||
image = { version = "0.25", features = ["avif"] }
|
image = { version = "0.25", features = ["avif"] }
|
||||||
|
|
||||||
# CSS Minification
|
# CSS Minification
|
||||||
lightningcss = { version = "1.0.0-alpha.63", features = ["browserslist", "into_owned"] }
|
lightningcss = { version = "1.0.0-alpha.67", features = [
|
||||||
|
"browserslist",
|
||||||
|
"into_owned",
|
||||||
|
] }
|
||||||
|
|
||||||
# SCSS Processing
|
# SCSS Processing
|
||||||
grass = "0.13.4"
|
grass = "0.13.4"
|
||||||
codemap = "0.1.3"
|
codemap = "0.1.3"
|
||||||
|
|
||||||
# Js minification - swc has introduces minor versions with breaking changes in the past so we pin all of their crates
|
# Js minification - swc has introduces minor versions with breaking changes in the past so we pin all of their crates
|
||||||
swc_allocator = { version = "=2.0.0", default-features = false }
|
# Root dependencies
|
||||||
swc_atoms = { version = "=3.0.2", default-features = false }
|
swc_bundler = { version = "=24.0.0", default-features = false }
|
||||||
swc_bundler = { version = "=7.0.0", default-features = false }
|
swc_common = { version = "=13.0.4", features = [
|
||||||
swc_cached = { version = "=1.0.0", default-features = false }
|
"tty-emitter",
|
||||||
swc_common = { version = "=5.0.0", features = ["tty-emitter"], default-features = false }
|
], default-features = false }
|
||||||
swc_config = { version = "=1.0.0", default-features = false }
|
swc_ecma_ast = { version = "=13.0.1", default-features = false }
|
||||||
swc_config_macro = { version = "=1.0.0", default-features = false }
|
swc_ecma_codegen = { version = "=15.0.2", default-features = false }
|
||||||
swc_ecma_ast = { version = "=5.0.1", default-features = false }
|
swc_ecma_loader = { version = "=13.0.0", features = [
|
||||||
swc_ecma_codegen = { version = "=5.0.1", default-features = false }
|
"cache",
|
||||||
swc_ecma_codegen_macros = { version = "=1.0.0", default-features = false }
|
"node",
|
||||||
swc_ecma_loader = { version = "=5.0.0", features = ["cache", "node"], default-features = false }
|
], default-features = false }
|
||||||
swc_ecma_minifier = { version = "=7.0.1", default-features = false }
|
swc_ecma_minifier = { version = "=25.0.0", default-features = false }
|
||||||
swc_ecma_parser = { version = "=6.0.2", default-features = false }
|
swc_ecma_parser = { version = "=19.0.0", default-features = false }
|
||||||
swc_ecma_transforms_base = { version = "=7.0.0", default-features = false }
|
swc_ecma_transforms_base = { version = "=20.0.0", default-features = false }
|
||||||
swc_ecma_transforms_macros = { version = "=1.0.0", default-features = false }
|
swc_ecma_visit = { version = "=13.0.0", default-features = false }
|
||||||
swc_ecma_transforms_optimization = { version = "=7.0.1", default-features = false }
|
|
||||||
swc_ecma_usage_analyzer = { version = "=7.0.0", default-features = false }
|
# Pinned from cargo tree --prefix none | grep -Eo 'swc[^ ]+ [^ ]+' | sort -u
|
||||||
swc_ecma_utils = { version = "=7.0.0", default-features = false }
|
swc_allocator = { version = "4.0.1" }
|
||||||
swc_ecma_visit = { version = "=5.0.0", default-features = false }
|
swc_atoms = { version = "6.0.1" }
|
||||||
swc_eq_ignore_macros = { version = "=1.0.0", default-features = false }
|
swc_config = { version = "3.1.1" }
|
||||||
swc_fast_graph = { version = "=6.0.0", default-features = false }
|
swc_config_macro = { version = "1.0.1" }
|
||||||
swc_graph_analyzer = { version = "=5.0.0", default-features = false }
|
swc_ecma_codegen_macros = { version = "2.0.2" }
|
||||||
swc_macros_common = { version = "=1.0.0", default-features = false }
|
swc_ecma_lexer = { version = "19.0.1" }
|
||||||
swc_parallel = { version = "=1.0.1", default-features = false }
|
swc_ecma_transforms_optimization = { version = "21.0.0" }
|
||||||
swc_timer = { version = "=1.0.0", default-features = false }
|
swc_ecma_usage_analyzer = { version = "19.0.2" }
|
||||||
swc_visit = { version = "=2.0.0", default-features = false }
|
swc_ecma_utils = { version = "18.1.0" }
|
||||||
browserslist-rs = { version = "=0.16.0" }
|
swc_eq_ignore_macros = { version = "1.0.1" }
|
||||||
|
swc_graph_analyzer = { version = "14.0.1" }
|
||||||
|
swc_macros_common = { version = "1.0.1" }
|
||||||
|
swc_sourcemap = { version = "9.3.2" }
|
||||||
|
swc_timer = { version = "1.0.0" }
|
||||||
|
swc_visit = { version = "2.0.1" }
|
||||||
|
browserslist-rs = { version = "=0.19.0" }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
built = { version = "0.7.5", features = ["git2"] }
|
built = { version = "0.8.0", features = ["git2"] }
|
||||||
@@ -30,7 +30,7 @@ use crate::hash::hash_file_contents;
|
|||||||
struct TracingEmitter;
|
struct TracingEmitter;
|
||||||
|
|
||||||
impl Emitter for TracingEmitter {
|
impl Emitter for TracingEmitter {
|
||||||
fn emit(&mut self, db: &swc_common::errors::DiagnosticBuilder<'_>) {
|
fn emit(&mut self, db: &mut swc_common::errors::DiagnosticBuilder<'_>) {
|
||||||
match db.level {
|
match db.level {
|
||||||
swc_common::errors::Level::Bug
|
swc_common::errors::Level::Bug
|
||||||
| swc_common::errors::Level::Fatal
|
| swc_common::errors::Level::Fatal
|
||||||
|
|||||||
+27
-16
@@ -52,8 +52,8 @@ rayon = { workspace = true }
|
|||||||
futures-channel = { workspace = true }
|
futures-channel = { workspace = true }
|
||||||
krates = { workspace = true }
|
krates = { workspace = true }
|
||||||
regex = "1.11.1"
|
regex = "1.11.1"
|
||||||
console = "0.15.11"
|
console = "0.16.0"
|
||||||
ctrlc = "3.4.5"
|
ctrlc = "3.4.7"
|
||||||
|
|
||||||
axum = { workspace = true, default-features = true, features = ["ws"] }
|
axum = { workspace = true, default-features = true, features = ["ws"] }
|
||||||
axum-server = { workspace = true, features = ["tls-rustls"] }
|
axum-server = { workspace = true, features = ["tls-rustls"] }
|
||||||
@@ -67,7 +67,7 @@ syn = { workspace = true, features = [
|
|||||||
"visit-mut",
|
"visit-mut",
|
||||||
] }
|
] }
|
||||||
|
|
||||||
headers = "0.4.0"
|
headers = "0.4.1"
|
||||||
walkdir = "2"
|
walkdir = "2"
|
||||||
dunce = { workspace = true }
|
dunce = { workspace = true }
|
||||||
|
|
||||||
@@ -77,24 +77,30 @@ reqwest = { workspace = true, features = ["rustls-tls", "trust-dns", "json"] }
|
|||||||
tower = { workspace = true }
|
tower = { workspace = true }
|
||||||
|
|
||||||
# path lookup
|
# path lookup
|
||||||
which = { version = "7.0.2" }
|
which = { version = "8.0.0" }
|
||||||
|
|
||||||
# plugin packages
|
# plugin packages
|
||||||
open = { workspace = true }
|
open = { workspace = true }
|
||||||
cargo-generate = "0.23.3"
|
cargo-generate = "0.23.3"
|
||||||
toml_edit = "0.22.24"
|
toml_edit = "0.22.27"
|
||||||
|
|
||||||
# formatting
|
# formatting
|
||||||
# syn = { workspace = true }
|
# syn = { workspace = true }
|
||||||
prettyplease = { workspace = true }
|
prettyplease = { workspace = true }
|
||||||
|
|
||||||
# Assets
|
# Assets
|
||||||
brotli = "7.0.0"
|
brotli = "8.0.1"
|
||||||
ignore = "0.4.23"
|
ignore = "0.4.23"
|
||||||
env_logger = { workspace = true }
|
env_logger = { workspace = true }
|
||||||
const-serialize = { workspace = true, features = ["serde"] }
|
const-serialize = { workspace = true, features = ["serde"] }
|
||||||
|
|
||||||
tracing-subscriber = { version = "0.3.19", features = ["std", "env-filter", "json", "registry", "fmt"] }
|
tracing-subscriber = { version = "0.3.19", features = [
|
||||||
|
"std",
|
||||||
|
"env-filter",
|
||||||
|
"json",
|
||||||
|
"registry",
|
||||||
|
"fmt",
|
||||||
|
] }
|
||||||
console-subscriber = { version = "0.4.1", optional = true }
|
console-subscriber = { version = "0.4.1", optional = true }
|
||||||
tracing = { workspace = true }
|
tracing = { workspace = true }
|
||||||
wasm-opt = { version = "0.116.1", optional = true }
|
wasm-opt = { version = "0.116.1", optional = true }
|
||||||
@@ -109,11 +115,11 @@ shell-words = { workspace = true }
|
|||||||
log = { version = "0.4", features = ["max_level_off", "release_max_level_off"] }
|
log = { version = "0.4", features = ["max_level_off", "release_max_level_off"] }
|
||||||
|
|
||||||
# link intercept
|
# link intercept
|
||||||
tempfile = "3.13"
|
tempfile = "3.19.1"
|
||||||
manganis = { workspace = true }
|
manganis = { workspace = true }
|
||||||
manganis-core = { workspace = true }
|
manganis-core = { workspace = true }
|
||||||
target-lexicon = { version = "0.13.2", features = ["serde", "serde_support"] }
|
target-lexicon = { version = "0.13.2", features = ["serde", "serde_support"] }
|
||||||
wasm-encoder = "0.229.0"
|
wasm-encoder = "0.235.0"
|
||||||
|
|
||||||
# Extracting data from an executable
|
# Extracting data from an executable
|
||||||
object = { workspace = true, features = ["all"] }
|
object = { workspace = true, features = ["all"] }
|
||||||
@@ -121,31 +127,36 @@ tokio-util = { workspace = true, features = ["full"] }
|
|||||||
itertools = { workspace = true }
|
itertools = { workspace = true }
|
||||||
throbber-widgets-tui = "0.8.0"
|
throbber-widgets-tui = "0.8.0"
|
||||||
unicode-segmentation = "1.12.0"
|
unicode-segmentation = "1.12.0"
|
||||||
handlebars = "6.3.1"
|
handlebars = "6.3.2"
|
||||||
strum = { version = "0.27.1", features = ["derive"] }
|
strum = { version = "0.27.1", features = ["derive"] }
|
||||||
memmap = "0.7.0"
|
memmap = "0.7.0"
|
||||||
walrus = { workspace = true, features = ["parallel"]}
|
walrus = { workspace = true, features = ["parallel"] }
|
||||||
wasmparser = { workspace = true }
|
wasmparser = { workspace = true }
|
||||||
|
|
||||||
tauri-utils = { workspace = true }
|
tauri-utils = { workspace = true }
|
||||||
tauri-bundler = { workspace = true }
|
tauri-bundler = { workspace = true }
|
||||||
include_dir = "0.7.4"
|
include_dir = "0.7.4"
|
||||||
flate2 = "1.1.0"
|
flate2 = "1.1.2"
|
||||||
tar = "0.4.44"
|
tar = "0.4.44"
|
||||||
local-ip-address = "0.6.3"
|
local-ip-address = "0.6.5"
|
||||||
dircpy = "0.3.19"
|
dircpy = "0.3.19"
|
||||||
plist = "1.7.0"
|
plist = "1.7.4"
|
||||||
memoize = "0.5.1"
|
memoize = "0.5.1"
|
||||||
backtrace = "0.3.74"
|
backtrace = "0.3.74"
|
||||||
ar = "0.9.0"
|
ar = "0.9.0"
|
||||||
wasm-bindgen-externref-xform = "0.2.100"
|
wasm-bindgen-externref-xform = "0.2.100"
|
||||||
pdb = "0.8.0"
|
pdb = "0.8.0"
|
||||||
self_update = { version = "0.42.0", features = ["archive-tar", "archive-zip", "compression-flate2", "compression-zip-deflate"] }
|
self_update = { version = "0.42.0", features = [
|
||||||
|
"archive-tar",
|
||||||
|
"archive-zip",
|
||||||
|
"compression-flate2",
|
||||||
|
"compression-zip-deflate",
|
||||||
|
] }
|
||||||
self-replace = "1.5.0"
|
self-replace = "1.5.0"
|
||||||
cargo-config2 = { workspace = true }
|
cargo-config2 = { workspace = true }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
built = { version = "0.7.5", features = ["git2"] }
|
built = { version = "0.8.0", features = ["git2"] }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
|
|||||||
@@ -3087,7 +3087,7 @@ impl BuildRequest {
|
|||||||
|
|
||||||
/// Get the type of executable we are compiling
|
/// Get the type of executable we are compiling
|
||||||
pub(crate) fn executable_type(&self) -> TargetKind {
|
pub(crate) fn executable_type(&self) -> TargetKind {
|
||||||
self.crate_target.kind[0]
|
self.crate_target.kind[0].clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the features required to build for the given platform
|
/// Get the features required to build for the given platform
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ reqwest = { workspace = true }
|
|||||||
tracing-subscriber = { workspace = true, default-features = true }
|
tracing-subscriber = { workspace = true, default-features = true }
|
||||||
tracing-fluent-assertions = "0.3.0"
|
tracing-fluent-assertions = "0.3.0"
|
||||||
pretty_assertions = { workspace = true }
|
pretty_assertions = { workspace = true }
|
||||||
sysinfo = "0.33.1"
|
sysinfo = "0.35.2"
|
||||||
|
|
||||||
[dev-dependencies.web-sys]
|
[dev-dependencies.web-sys]
|
||||||
version = "0.3.77"
|
version = "0.3.77"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ fn random_ns() -> Option<&'static str> {
|
|||||||
match namespace {
|
match namespace {
|
||||||
0 => None,
|
0 => None,
|
||||||
1 => Some(Box::leak(
|
1 => Some(Box::leak(
|
||||||
format!("ns{}", rand::random::<usize>()).into_boxed_str(),
|
format!("ns{}", rand::random::<u8>()).into_boxed_str(),
|
||||||
)),
|
)),
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
}
|
}
|
||||||
@@ -18,8 +18,8 @@ fn random_ns() -> Option<&'static str> {
|
|||||||
fn create_random_attribute(attr_idx: &mut usize) -> TemplateAttribute {
|
fn create_random_attribute(attr_idx: &mut usize) -> TemplateAttribute {
|
||||||
match rand::random::<u8>() % 2 {
|
match rand::random::<u8>() % 2 {
|
||||||
0 => TemplateAttribute::Static {
|
0 => TemplateAttribute::Static {
|
||||||
name: Box::leak(format!("attr{}", rand::random::<usize>()).into_boxed_str()),
|
name: Box::leak(format!("attr{}", rand::random::<u8>()).into_boxed_str()),
|
||||||
value: Box::leak(format!("value{}", rand::random::<usize>()).into_boxed_str()),
|
value: Box::leak(format!("value{}", rand::random::<u8>()).into_boxed_str()),
|
||||||
namespace: random_ns(),
|
namespace: random_ns(),
|
||||||
},
|
},
|
||||||
1 => TemplateAttribute::Dynamic {
|
1 => TemplateAttribute::Dynamic {
|
||||||
@@ -42,20 +42,20 @@ fn create_random_template_node(
|
|||||||
match rand::random::<u8>() % 4 {
|
match rand::random::<u8>() % 4 {
|
||||||
0 => {
|
0 => {
|
||||||
let attrs = {
|
let attrs = {
|
||||||
let attrs: Vec<_> = (0..(rand::random::<usize>() % 10))
|
let attrs: Vec<_> = (0..(rand::random::<u8>() % 10))
|
||||||
.map(|_| create_random_attribute(attr_idx))
|
.map(|_| create_random_attribute(attr_idx))
|
||||||
.collect();
|
.collect();
|
||||||
Box::leak(attrs.into_boxed_slice())
|
Box::leak(attrs.into_boxed_slice())
|
||||||
};
|
};
|
||||||
TemplateNode::Element {
|
TemplateNode::Element {
|
||||||
tag: Box::leak(format!("tag{}", rand::random::<usize>()).into_boxed_str()),
|
tag: Box::leak(format!("tag{}", rand::random::<u8>()).into_boxed_str()),
|
||||||
namespace: random_ns(),
|
namespace: random_ns(),
|
||||||
attrs,
|
attrs,
|
||||||
children: {
|
children: {
|
||||||
if depth > 4 {
|
if depth > 4 {
|
||||||
&[]
|
&[]
|
||||||
} else {
|
} else {
|
||||||
let children: Vec<_> = (0..(rand::random::<usize>() % 3))
|
let children: Vec<_> = (0..(rand::random::<u8>() % 3))
|
||||||
.map(|_| {
|
.map(|_| {
|
||||||
create_random_template_node(
|
create_random_template_node(
|
||||||
dynamic_node_types,
|
dynamic_node_types,
|
||||||
@@ -71,7 +71,7 @@ fn create_random_template_node(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
1 => TemplateNode::Text {
|
1 => TemplateNode::Text {
|
||||||
text: Box::leak(format!("{}", rand::random::<usize>()).into_boxed_str()),
|
text: Box::leak(format!("{}", rand::random::<u8>()).into_boxed_str()),
|
||||||
},
|
},
|
||||||
2 => TemplateNode::Dynamic {
|
2 => TemplateNode::Dynamic {
|
||||||
id: {
|
id: {
|
||||||
@@ -127,11 +127,11 @@ enum DynamicNodeType {
|
|||||||
Other,
|
Other,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_random_template(depth: usize) -> (Template, Box<[DynamicNode]>) {
|
fn create_random_template(depth: u8) -> (Template, Box<[DynamicNode]>) {
|
||||||
let mut dynamic_node_types = Vec::new();
|
let mut dynamic_node_types = Vec::new();
|
||||||
let mut template_idx = 0;
|
let mut template_idx = 0;
|
||||||
let mut attr_idx = 0;
|
let mut attr_idx = 0;
|
||||||
let roots = (0..(1 + rand::random::<usize>() % 5))
|
let roots = (0..(1 + rand::random::<u8>() % 5))
|
||||||
.map(|_| {
|
.map(|_| {
|
||||||
create_random_template_node(
|
create_random_template_node(
|
||||||
&mut dynamic_node_types,
|
&mut dynamic_node_types,
|
||||||
@@ -166,7 +166,7 @@ fn create_random_template(depth: usize) -> (Template, Box<[DynamicNode]>) {
|
|||||||
.iter()
|
.iter()
|
||||||
.map(|ty| match ty {
|
.map(|ty| match ty {
|
||||||
DynamicNodeType::Text => {
|
DynamicNodeType::Text => {
|
||||||
DynamicNode::Text(VText::new(format!("{}", rand::random::<usize>())))
|
DynamicNode::Text(VText::new(format!("{}", rand::random::<u8>())))
|
||||||
}
|
}
|
||||||
DynamicNodeType::Other => create_random_dynamic_node(depth + 1),
|
DynamicNodeType::Other => create_random_dynamic_node(depth + 1),
|
||||||
})
|
})
|
||||||
@@ -174,7 +174,7 @@ fn create_random_template(depth: usize) -> (Template, Box<[DynamicNode]>) {
|
|||||||
(Template { roots, node_paths, attr_paths }, dynamic_nodes)
|
(Template { roots, node_paths, attr_paths }, dynamic_nodes)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_random_dynamic_node(depth: usize) -> DynamicNode {
|
fn create_random_dynamic_node(depth: u8) -> DynamicNode {
|
||||||
let range = if depth > 5 { 1 } else { 3 };
|
let range = if depth > 5 { 1 } else { 3 };
|
||||||
match rand::random::<u8>() % range {
|
match rand::random::<u8>() % range {
|
||||||
0 => DynamicNode::Placeholder(Default::default()),
|
0 => DynamicNode::Placeholder(Default::default()),
|
||||||
@@ -207,11 +207,11 @@ fn create_random_dynamic_node(depth: usize) -> DynamicNode {
|
|||||||
|
|
||||||
fn create_random_dynamic_attr() -> Attribute {
|
fn create_random_dynamic_attr() -> Attribute {
|
||||||
let value = match rand::random::<u8>() % 7 {
|
let value = match rand::random::<u8>() % 7 {
|
||||||
0 => AttributeValue::Text(format!("{}", rand::random::<usize>())),
|
0 => AttributeValue::Text(format!("{}", rand::random::<u8>())),
|
||||||
1 => AttributeValue::Float(rand::random()),
|
1 => AttributeValue::Float(rand::random()),
|
||||||
2 => AttributeValue::Int(rand::random()),
|
2 => AttributeValue::Int(rand::random()),
|
||||||
3 => AttributeValue::Bool(rand::random()),
|
3 => AttributeValue::Bool(rand::random()),
|
||||||
4 => AttributeValue::any_value(rand::random::<usize>()),
|
4 => AttributeValue::any_value(rand::random::<u8>()),
|
||||||
5 => AttributeValue::None,
|
5 => AttributeValue::None,
|
||||||
6 => {
|
6 => {
|
||||||
let value = AttributeValue::listener(|e: Event<String>| println!("{:?}", e));
|
let value = AttributeValue::listener(|e: Event<String>| println!("{:?}", e));
|
||||||
@@ -220,7 +220,7 @@ fn create_random_dynamic_attr() -> Attribute {
|
|||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
};
|
};
|
||||||
Attribute::new(
|
Attribute::new(
|
||||||
Box::leak(format!("attr{}", rand::random::<usize>()).into_boxed_str()),
|
Box::leak(format!("attr{}", rand::random::<u8>()).into_boxed_str()),
|
||||||
value,
|
value,
|
||||||
random_ns(),
|
random_ns(),
|
||||||
rand::random(),
|
rand::random(),
|
||||||
@@ -229,17 +229,17 @@ fn create_random_dynamic_attr() -> Attribute {
|
|||||||
|
|
||||||
#[derive(PartialEq, Props, Clone)]
|
#[derive(PartialEq, Props, Clone)]
|
||||||
struct DepthProps {
|
struct DepthProps {
|
||||||
depth: usize,
|
depth: u8,
|
||||||
root: bool,
|
root: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_random_element(cx: DepthProps) -> Element {
|
fn create_random_element(cx: DepthProps) -> Element {
|
||||||
let last_template = use_hook(|| Rc::new(RefCell::new(None)));
|
let last_template = use_hook(|| Rc::new(RefCell::new(None)));
|
||||||
if rand::random::<usize>() % 10 == 0 {
|
if rand::random::<u8>() % 10 == 0 {
|
||||||
needs_update();
|
needs_update();
|
||||||
}
|
}
|
||||||
let range = if cx.root { 2 } else { 3 };
|
let range = if cx.root { 2 } else { 3 };
|
||||||
let node = match rand::random::<usize>() % range {
|
let node = match rand::random::<u8>() % range {
|
||||||
// Change both the template and the dynamic nodes
|
// Change both the template and the dynamic nodes
|
||||||
0 => {
|
0 => {
|
||||||
let (template, dynamic_nodes) = create_random_template(cx.depth + 1);
|
let (template, dynamic_nodes) = create_random_template(cx.depth + 1);
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ dioxus-asset-resolver = { workspace = true }
|
|||||||
generational-box = { workspace = true }
|
generational-box = { workspace = true }
|
||||||
dioxus-devtools = { workspace = true, optional = true }
|
dioxus-devtools = { workspace = true, optional = true }
|
||||||
|
|
||||||
serde = "1.0.218"
|
serde = "1.0.219"
|
||||||
serde_json = "1.0.140"
|
serde_json = "1.0.140"
|
||||||
thiserror = { workspace = true }
|
thiserror = { workspace = true }
|
||||||
tracing = { workspace = true }
|
tracing = { workspace = true }
|
||||||
@@ -48,20 +48,20 @@ tao = { workspace = true, features = ["rwh_05"] }
|
|||||||
dioxus-history = { workspace = true }
|
dioxus-history = { workspace = true }
|
||||||
base64 = { workspace = true }
|
base64 = { workspace = true }
|
||||||
open = { workspace = true }
|
open = { workspace = true }
|
||||||
libc = "0.2.170"
|
libc = "0.2.174"
|
||||||
pollster = "0.4.0"
|
pollster = "0.4.0"
|
||||||
rand = { workspace = true, features = ["std_rng"] }
|
rand = { workspace = true, features = ["std_rng"] }
|
||||||
subtle = { version = "2.6", features = ["const-generics"] }
|
subtle = { version = "2.6", features = ["const-generics"] }
|
||||||
|
|
||||||
[target.'cfg(unix)'.dependencies]
|
[target.'cfg(unix)'.dependencies]
|
||||||
signal-hook = "0.3.17"
|
signal-hook = "0.3.18"
|
||||||
|
|
||||||
[target.'cfg(target_os = "linux")'.dependencies]
|
[target.'cfg(target_os = "linux")'.dependencies]
|
||||||
wry = { workspace = true, features = ["os-webview", "protocol", "drag-drop", "linux-body"] }
|
wry = { workspace = true, features = ["os-webview", "protocol", "drag-drop", "linux-body"] }
|
||||||
|
|
||||||
[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]
|
[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]
|
||||||
global-hotkey = "0.7.0"
|
global-hotkey = "0.7.0"
|
||||||
rfd = { version = "0.15.2", default-features = false, features = ["xdg-portal", "tokio"] }
|
rfd = { version = "0.15.3", default-features = false, features = ["xdg-portal", "tokio"] }
|
||||||
muda = { workspace = true }
|
muda = { workspace = true }
|
||||||
|
|
||||||
[target.'cfg(any(target_os = "windows",target_os = "macos",target_os = "linux"))'.dependencies]
|
[target.'cfg(any(target_os = "windows",target_os = "macos",target_os = "linux"))'.dependencies]
|
||||||
@@ -89,8 +89,8 @@ openssl = { version = "0.10", features = ["vendored"], optional = true }
|
|||||||
tungstenite = { workspace = true, features = ["native-tls"] }
|
tungstenite = { workspace = true, features = ["native-tls"] }
|
||||||
|
|
||||||
[target.'cfg(target_os = "macos")'.dependencies]
|
[target.'cfg(target_os = "macos")'.dependencies]
|
||||||
cocoa = "0.26.0"
|
cocoa = "0.26.1"
|
||||||
core-foundation = "0.10.0"
|
core-foundation = "0.10.1"
|
||||||
objc = "0.2.7"
|
objc = "0.2.7"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
|
|||||||
@@ -345,7 +345,7 @@ fn create_secure_key() -> EncodedKey {
|
|||||||
val
|
val
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut secure_rng = assert_crypto_random(rand::rngs::StdRng::from_entropy());
|
let mut secure_rng = assert_crypto_random(rand::rngs::StdRng::from_os_rng());
|
||||||
let mut expected_key: EncodedKey = [0u8; KEY_SIZE];
|
let mut expected_key: EncodedKey = [0u8; KEY_SIZE];
|
||||||
secure_rng.fill_bytes(&mut expected_key);
|
secure_rng.fill_bytes(&mut expected_key);
|
||||||
expected_key
|
expected_key
|
||||||
@@ -353,7 +353,7 @@ fn create_secure_key() -> EncodedKey {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_key_encoding_length() {
|
fn test_key_encoding_length() {
|
||||||
let mut rand = rand::rngs::StdRng::from_entropy();
|
let mut rand = rand::rngs::StdRng::from_os_rng();
|
||||||
for _ in 0..100 {
|
for _ in 0..100 {
|
||||||
let mut key: EncodedKey = [0u8; KEY_SIZE];
|
let mut key: EncodedKey = [0u8; KEY_SIZE];
|
||||||
rand.fill_bytes(&mut key);
|
rand.fill_bytes(&mut key);
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ fn create_rows(c: &mut Criterion) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn app() -> Element {
|
fn app() -> Element {
|
||||||
let mut rng = SmallRng::from_entropy();
|
let mut rng = SmallRng::from_os_rng();
|
||||||
|
|
||||||
rsx! (
|
rsx! (
|
||||||
table {
|
table {
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ hyper-rustls = { workspace = true, optional = true }
|
|||||||
|
|
||||||
pin-project = { version = "1.1.10", optional = true }
|
pin-project = { version = "1.1.10", optional = true }
|
||||||
thiserror = { workspace = true, optional = true }
|
thiserror = { workspace = true, optional = true }
|
||||||
bytes = "1.10.0"
|
bytes = "1.10.1"
|
||||||
tower = { workspace = true, features = ["util"], optional = true }
|
tower = { workspace = true, features = ["util"], optional = true }
|
||||||
tower-layer = { version = "0.3.3", optional = true }
|
tower-layer = { version = "0.3.3", optional = true }
|
||||||
parking_lot = { workspace = true, features = ["send_guard"], optional = true }
|
parking_lot = { workspace = true, features = ["send_guard"], optional = true }
|
||||||
@@ -68,7 +68,7 @@ web-sys = { version = "0.3.77", optional = true, features = [
|
|||||||
dioxus-cli-config = { workspace = true, optional = true }
|
dioxus-cli-config = { workspace = true, optional = true }
|
||||||
|
|
||||||
dioxus-devtools = { workspace = true, optional = true }
|
dioxus-devtools = { workspace = true, optional = true }
|
||||||
aws-lc-rs = { version = "1.12.5", optional = true }
|
aws-lc-rs = { version = "1.13.1", optional = true }
|
||||||
dioxus-history = { workspace = true }
|
dioxus-history = { workspace = true }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
#![allow(unused)]
|
#![allow(unused)]
|
||||||
use generational_box::*;
|
use generational_box::*;
|
||||||
|
|
||||||
use criterion::{black_box, criterion_group, criterion_main, Criterion};
|
use criterion::{criterion_group, criterion_main, Criterion};
|
||||||
|
use std::hint::black_box;
|
||||||
|
|
||||||
fn create<S: Storage<u32>>(owner: &Owner<S>) -> GenerationalBox<u32, S> {
|
fn create<S: Storage<u32>>(owner: &Owner<S>) -> GenerationalBox<u32, S> {
|
||||||
owner.insert(0)
|
owner.insert(0)
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ serde_json = { workspace = true, optional = true }
|
|||||||
tracing = { workspace = true }
|
tracing = { workspace = true }
|
||||||
rustversion = { workspace = true }
|
rustversion = { workspace = true }
|
||||||
euclid = "0.22.11"
|
euclid = "0.22.11"
|
||||||
enumset = "1.1.5"
|
enumset = "1.1.6"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
lazy-js-bundle = { workspace = true }
|
lazy-js-bundle = { workspace = true }
|
||||||
|
|||||||
@@ -11,5 +11,5 @@ dioxus = { workspace = true, features = ["web"] }
|
|||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
reqwest = { workspace = true, features = ["blocking"] }
|
reqwest = { workspace = true, features = ["blocking"] }
|
||||||
flate2 = "1.1.0"
|
flate2 = "1.1.2"
|
||||||
tar = "0.4.44"
|
tar = "0.4.44"
|
||||||
@@ -8,7 +8,7 @@ publish = false
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
dioxus = { workspace = true, features = ["fullstack"] }
|
dioxus = { workspace = true, features = ["fullstack"] }
|
||||||
serde = "1.0.218"
|
serde = "1.0.219"
|
||||||
tokio = { workspace = true, features = ["full"], optional = true }
|
tokio = { workspace = true, features = ["full"], optional = true }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ publish = false
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
dioxus = { workspace = true, features = ["fullstack", "router"] }
|
dioxus = { workspace = true, features = ["fullstack", "router"] }
|
||||||
serde = "1.0.159"
|
serde = "1.0.219"
|
||||||
tokio = { workspace = true, features = ["full"], optional = true }
|
tokio = { workspace = true, features = ["full"], optional = true }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ publish = false
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
dioxus = { workspace = true, features = ["fullstack"] }
|
dioxus = { workspace = true, features = ["fullstack"] }
|
||||||
futures.workspace = true
|
futures.workspace = true
|
||||||
serde = "1.0.218"
|
serde = "1.0.219"
|
||||||
tokio = { workspace = true, features = ["full"], optional = true }
|
tokio = { workspace = true, features = ["full"], optional = true }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ publish = false
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
dioxus = { workspace = true, features = ["fullstack"] }
|
dioxus = { workspace = true, features = ["fullstack"] }
|
||||||
serde = "1.0.218"
|
serde = "1.0.219"
|
||||||
tokio = { workspace = true, features = ["full"], optional = true }
|
tokio = { workspace = true, features = ["full"], optional = true }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ publish = false
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
dioxus = { workspace = true, features = ["fullstack"] }
|
dioxus = { workspace = true, features = ["fullstack"] }
|
||||||
async-std = "1.13.0"
|
async-std = "1.13.1"
|
||||||
serde = "1.0.218"
|
serde = "1.0.219"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
|
|||||||
@@ -9,11 +9,22 @@ authors = ["Jonathan Kelley"]
|
|||||||
dioxus = { workspace = true, features = ["web", "router", "wasm-split"] }
|
dioxus = { workspace = true, features = ["web", "router", "wasm-split"] }
|
||||||
dioxus-router = { workspace = true, features = ["wasm-split"] }
|
dioxus-router = { workspace = true, features = ["wasm-split"] }
|
||||||
anyhow = { workspace = true }
|
anyhow = { workspace = true }
|
||||||
async-compression = { workspace = true, features = ["futures-io", "gzip", "brotli"] }
|
async-compression = { workspace = true, features = [
|
||||||
|
"futures-io",
|
||||||
|
"gzip",
|
||||||
|
"brotli",
|
||||||
|
] }
|
||||||
futures = { workspace = true }
|
futures = { workspace = true }
|
||||||
js-sys = { workspace = true }
|
js-sys = { workspace = true }
|
||||||
wasm-bindgen = { workspace = true }
|
wasm-bindgen = { workspace = true }
|
||||||
wasm-bindgen-futures = { workspace = true }
|
wasm-bindgen-futures = { workspace = true }
|
||||||
web-sys = { workspace = true, features = ["Document", "Window", "HtmlElement", "Text", "DomRectReadOnly", "console"] }
|
web-sys = { workspace = true, features = [
|
||||||
getrandom = { workspace = true, features = ["js"] }
|
"Document",
|
||||||
|
"Window",
|
||||||
|
"HtmlElement",
|
||||||
|
"Text",
|
||||||
|
"DomRectReadOnly",
|
||||||
|
"console",
|
||||||
|
] }
|
||||||
|
getrandom = { workspace = true, features = ["wasm_js"] }
|
||||||
reqwest = { workspace = true, features = ["json"] }
|
reqwest = { workspace = true, features = ["json"] }
|
||||||
@@ -24,7 +24,7 @@ tower-http = { workspace = true, features = ["fs"], optional = true }
|
|||||||
tokio-util = { workspace = true, features = ["rt"], optional = true }
|
tokio-util = { workspace = true, features = ["rt"], optional = true }
|
||||||
tokio-stream = { workspace = true, features = ["sync"], optional = true }
|
tokio-stream = { workspace = true, features = ["sync"], optional = true }
|
||||||
tower = { workspace = true, features = ["util"], optional = true}
|
tower = { workspace = true, features = ["util"], optional = true}
|
||||||
tower-layer = { version = "0.3.2", optional = true}
|
tower-layer = { version = "0.3.3", optional = true}
|
||||||
hyper-util = { workspace = true, features = ["full"], optional = true }
|
hyper-util = { workspace = true, features = ["full"], optional = true }
|
||||||
hyper = { workspace = true, optional = true }
|
hyper = { workspace = true, optional = true }
|
||||||
http = { workspace = true }
|
http = { workspace = true }
|
||||||
@@ -41,7 +41,7 @@ tracing = { workspace = true }
|
|||||||
tracing-futures = { workspace = true }
|
tracing-futures = { workspace = true }
|
||||||
async-trait = { workspace = true }
|
async-trait = { workspace = true }
|
||||||
serde = { workspace = true }
|
serde = { workspace = true }
|
||||||
enumset = "1.1.5"
|
enumset = "1.1.6"
|
||||||
|
|
||||||
futures-util = { workspace = true }
|
futures-util = { workspace = true }
|
||||||
futures-channel = { workspace = true }
|
futures-channel = { workspace = true }
|
||||||
@@ -50,11 +50,11 @@ base64 = { workspace = true }
|
|||||||
rustls = { workspace = true, optional = true }
|
rustls = { workspace = true, optional = true }
|
||||||
hyper-rustls = { workspace = true, optional = true }
|
hyper-rustls = { workspace = true, optional = true }
|
||||||
|
|
||||||
pin-project = { version = "1.1.2" }
|
pin-project = { version = "1.1.10" }
|
||||||
thiserror = { workspace = true }
|
thiserror = { workspace = true }
|
||||||
bytes = "1.4.0"
|
bytes = "1.10.1"
|
||||||
parking_lot = { workspace = true, features = ["send_guard"] }
|
parking_lot = { workspace = true, features = ["send_guard"] }
|
||||||
web-sys = { version = "0.3.61", features = [
|
web-sys = { version = "0.3.77", features = [
|
||||||
"Window",
|
"Window",
|
||||||
"Document",
|
"Document",
|
||||||
"Element",
|
"Element",
|
||||||
@@ -65,7 +65,7 @@ web-sys = { version = "0.3.61", features = [
|
|||||||
|
|
||||||
dioxus-cli-config = { workspace = true }
|
dioxus-cli-config = { workspace = true }
|
||||||
dioxus-devtools = { workspace = true, optional = true }
|
dioxus-devtools = { workspace = true, optional = true }
|
||||||
aws-lc-rs = { version = "1.8.1", optional = true }
|
aws-lc-rs = { version = "1.13.1", optional = true }
|
||||||
dioxus-history = { workspace = true }
|
dioxus-history = { workspace = true }
|
||||||
subsecond.workspace = true
|
subsecond.workspace = true
|
||||||
inventory = { workspace = true }
|
inventory = { workspace = true }
|
||||||
|
|||||||
Reference in new issue
Block a user