From 1d8643da6b8f287692f07eae43dfeb54a4fa38f0 Mon Sep 17 00:00:00 2001
From: Matt Dziuban
Date: Fri, 17 Oct 2025 11:27:04 -0400
Subject: [PATCH 1/8] feat: Add option to minify CSS.
---
bindings/c/src/lib.rs | 4 +
.../java/org/cssinline/CssInlineConfig.java | 26 ++++-
bindings/java/src/main/rust/lib.rs | 2 +
bindings/javascript/index.d.ts | 2 +
bindings/javascript/js-binding.d.ts | 3 +
bindings/javascript/src/lib.rs | 1 +
bindings/javascript/src/options.rs | 3 +
bindings/javascript/wasm/index.d.ts | 1 +
bindings/python/css_inline.pyi | 6 ++
bindings/python/src/lib.rs | 33 ++++--
bindings/ruby/ext/css_inline/src/lib.rs | 101 +++++++++++-------
css-inline/src/html/document.rs | 4 +
css-inline/src/html/serializer.rs | 64 ++++++++---
css-inline/src/lib.rs | 11 ++
css-inline/src/main.rs | 7 ++
css-inline/tests/test_cli.rs | 21 ++++
css-inline/tests/test_inlining.rs | 22 ++++
17 files changed, 242 insertions(+), 69 deletions(-)
diff --git a/bindings/c/src/lib.rs b/bindings/c/src/lib.rs
index 7f48a1dc..08920313 100644
--- a/bindings/c/src/lib.rs
+++ b/bindings/c/src/lib.rs
@@ -95,6 +95,8 @@ pub struct CssInlinerOptions {
/// Pre-allocate capacity for HTML nodes during parsing.
/// It can improve performance when you have an estimate of the number of nodes in your HTML document.
pub preallocate_node_capacity: size_t,
+ /// Remove trailing semicolons and spaces between properties and values.
+ pub minify_css: bool,
}
macro_rules! inliner {
@@ -186,6 +188,7 @@ pub extern "C" fn css_inliner_default_options() -> CssInlinerOptions {
keep_style_tags: false,
keep_link_tags: false,
keep_at_rules: false,
+ minify_css: false,
base_url: ptr::null(),
load_remote_stylesheets: true,
cache: std::ptr::null(),
@@ -229,6 +232,7 @@ impl TryFrom<&CssInlinerOptions> for InlineOptions<'_> {
keep_style_tags: value.keep_style_tags,
keep_link_tags: value.keep_link_tags,
keep_at_rules: value.keep_at_rules,
+ minify_css: value.minify_css,
base_url: match base_url {
Some(url) => Some(Url::parse(url).map_err(|_| InlineOptionsError::InvalidUrl)?),
None => None,
diff --git a/bindings/java/src/main/java/org/cssinline/CssInlineConfig.java b/bindings/java/src/main/java/org/cssinline/CssInlineConfig.java
index 043da02a..2c1bba66 100644
--- a/bindings/java/src/main/java/org/cssinline/CssInlineConfig.java
+++ b/bindings/java/src/main/java/org/cssinline/CssInlineConfig.java
@@ -14,6 +14,9 @@ public class CssInlineConfig {
/** Keep "at-rules" after inlining. */
public final boolean keepAtRules;
+ /** Remove trailing semicolons and spaces between properties and values. */
+ public final boolean minifyCss;
+
/** Whether remote stylesheets should be loaded or not. */
public final boolean loadRemoteStylesheets;
@@ -30,12 +33,13 @@ public class CssInlineConfig {
public final int preallocateNodeCapacity;
private CssInlineConfig(boolean inlineStyleTags, boolean keepStyleTags, boolean keepLinkTags,
- boolean keepAtRules, boolean loadRemoteStylesheets, String baseUrl, String extraCss, int cacheSize,
- int preallocateNodeCapacity) {
+ boolean keepAtRules, boolean minifyCss, boolean loadRemoteStylesheets, String baseUrl, String extraCss,
+ int cacheSize, int preallocateNodeCapacity) {
this.inlineStyleTags = inlineStyleTags;
this.keepStyleTags = keepStyleTags;
this.keepLinkTags = keepLinkTags;
this.keepAtRules = keepAtRules;
+ this.minifyCss = minifyCss;
this.loadRemoteStylesheets = loadRemoteStylesheets;
this.baseUrl = baseUrl;
this.extraCss = extraCss;
@@ -51,6 +55,7 @@ public static class Builder {
private boolean keepStyleTags = false;
private boolean keepLinkTags = false;
private boolean keepAtRules = false;
+ private boolean minifyCss = false;
private boolean loadRemoteStylesheets = true;
private String baseUrl = null;
private String extraCss = null;
@@ -110,6 +115,17 @@ public Builder setKeepAtRules(boolean b) {
return this;
}
+ /**
+ * Remove trailing semicolons and spaces between properties and values.
+ *
+ * @param b true to remove, false to keep them
+ * @return this builder instance for method chaining
+ */
+ public Builder setMinifyCss(boolean b) {
+ this.minifyCss = b;
+ return this;
+ }
+
/**
* Whether remote stylesheets should be loaded or not.
*
@@ -148,7 +164,7 @@ public Builder setExtraCss(String css) {
*
* @param size
* cache size, must be non-negative
- * @return this builder instance for method chaining
+ * @return this builder instance for method chaining
* @throws IllegalArgumentException
* if size is negative
*/
@@ -166,7 +182,7 @@ public Builder setCacheSize(int size) {
*
* @param cap
* initial node capacity, must be positive
- * @return this builder instance for method chaining
+ * @return this builder instance for method chaining
* @throws IllegalArgumentException
* if cap is zero or negative
*/
@@ -184,7 +200,7 @@ public Builder setPreallocateNodeCapacity(int cap) {
* @return a new immutable configuration instance
*/
public CssInlineConfig build() {
- return new CssInlineConfig(inlineStyleTags, keepStyleTags, keepLinkTags, keepAtRules, loadRemoteStylesheets, baseUrl,
+ return new CssInlineConfig(inlineStyleTags, keepStyleTags, keepLinkTags, keepAtRules, minifyCss, loadRemoteStylesheets, baseUrl,
extraCss, cacheSize, preallocateNodeCapacity);
}
}
diff --git a/bindings/java/src/main/rust/lib.rs b/bindings/java/src/main/rust/lib.rs
index 6be63a69..680c8c0c 100644
--- a/bindings/java/src/main/rust/lib.rs
+++ b/bindings/java/src/main/rust/lib.rs
@@ -75,6 +75,7 @@ fn build_inliner(
let keep_style_tags = env.get_bool_field(&cfg, "keepStyleTags")?;
let keep_link_tags = env.get_bool_field(&cfg, "keepLinkTags")?;
let keep_at_rules = env.get_bool_field(&cfg, "keepAtRules")?;
+ let minify_css = env.get_bool_field(&cfg, "minifyCss")?;
let load_remote_stylesheets = env.get_bool_field(&cfg, "loadRemoteStylesheets")?;
let cache_size = env.get_int_field(&cfg, "cacheSize")?;
let preallocate_node_capacity = env.get_int_field(&cfg, "preallocateNodeCapacity")?;
@@ -86,6 +87,7 @@ fn build_inliner(
.keep_style_tags(keep_style_tags)
.keep_link_tags(keep_link_tags)
.keep_at_rules(keep_at_rules)
+ .minify_css(minify_css)
.load_remote_stylesheets(load_remote_stylesheets)
.extra_css(extra_css.map(Cow::Owned))
.preallocate_node_capacity(preallocate_node_capacity as usize);
diff --git a/bindings/javascript/index.d.ts b/bindings/javascript/index.d.ts
index feb181c5..91598f33 100644
--- a/bindings/javascript/index.d.ts
+++ b/bindings/javascript/index.d.ts
@@ -20,6 +20,8 @@ export interface Options {
keepLinkTags?: boolean
/** Keep "at-rules" after inlining. */
keepAtRules?: boolean
+ /** Remove trailing semicolons and spaces between properties and values. */
+ minifyCss?: boolean
/** Used for loading external stylesheets via relative URLs. */
baseUrl?: string
/** Whether remote stylesheets should be loaded or not. */
diff --git a/bindings/javascript/js-binding.d.ts b/bindings/javascript/js-binding.d.ts
index 19aac708..541bb38a 100644
--- a/bindings/javascript/js-binding.d.ts
+++ b/bindings/javascript/js-binding.d.ts
@@ -19,6 +19,9 @@ export interface Options {
keepStyleTags?: boolean
/** Keep "link" tags after inlining. */
keepLinkTags?: boolean
+ /** Remove trailing semicolons and spaces between properties and values. */
+ // TODO - is it correct that `keepAtRules` isn't here?
+ minifyCss?: boolean
/** Used for loading external stylesheets via relative URLs. */
baseUrl?: string
/** Whether remote stylesheets should be loaded or not. */
diff --git a/bindings/javascript/src/lib.rs b/bindings/javascript/src/lib.rs
index abea8da2..367e648b 100644
--- a/bindings/javascript/src/lib.rs
+++ b/bindings/javascript/src/lib.rs
@@ -75,6 +75,7 @@ const INLINE: &'static str = r#"export interface InlineOptions {
keepStyleTags?: boolean,
keepLinkTags?: boolean,
keepAtRules?: boolean,
+ minifyCss?: boolean,
baseUrl?: string,
loadRemoteStylesheets?: boolean,
extraCss?: string,
diff --git a/bindings/javascript/src/options.rs b/bindings/javascript/src/options.rs
index 37cd60c7..fec4093e 100644
--- a/bindings/javascript/src/options.rs
+++ b/bindings/javascript/src/options.rs
@@ -42,6 +42,8 @@ pub struct Options {
pub keep_link_tags: Option,
/// Keep "at-rules" after inlining.
pub keep_at_rules: Option,
+ /// Remove trailing semicolons and spaces between properties and values.
+ pub minify_css: Option,
/// Used for loading external stylesheets via relative URLs.
pub base_url: Option,
/// Whether remote stylesheets should be loaded or not.
@@ -65,6 +67,7 @@ impl TryFrom for css_inline::InlineOptions<'_> {
keep_style_tags: value.keep_style_tags.unwrap_or(false),
keep_link_tags: value.keep_link_tags.unwrap_or(false),
keep_at_rules: value.keep_at_rules.unwrap_or(false),
+ minify_css: value.minify_css.unwrap_or(false),
base_url: parse_url(value.base_url)?,
load_remote_stylesheets: value.load_remote_stylesheets.unwrap_or(true),
extra_css: value.extra_css.map(Cow::Owned),
diff --git a/bindings/javascript/wasm/index.d.ts b/bindings/javascript/wasm/index.d.ts
index 82705066..574e8623 100644
--- a/bindings/javascript/wasm/index.d.ts
+++ b/bindings/javascript/wasm/index.d.ts
@@ -7,6 +7,7 @@ export interface InlineOptions {
keepStyleTags?: boolean;
keepLinkTags?: boolean;
keepAtRules?: boolean;
+ minifyCss?: boolean;
baseUrl?: string;
loadRemoteStylesheets?: boolean;
extraCss?: string;
diff --git a/bindings/python/css_inline.pyi b/bindings/python/css_inline.pyi
index da01bc9a..86427172 100644
--- a/bindings/python/css_inline.pyi
+++ b/bindings/python/css_inline.pyi
@@ -7,6 +7,8 @@ class CSSInliner:
inline_style_tags: bool = True,
keep_style_tags: bool = False,
keep_link_tags: bool = False,
+ # TODO - is it correct that `keep_at_rules` isn't here?
+ minify_css: bool = False,
base_url: str | None = None,
load_remote_stylesheets: bool = True,
cache: StylesheetCache | None = None,
@@ -23,6 +25,7 @@ def inline(
inline_style_tags: bool = True,
keep_style_tags: bool = False,
keep_link_tags: bool = False,
+ minify_css: bool = False,
base_url: str | None = None,
load_remote_stylesheets: bool = True,
cache: StylesheetCache | None = None,
@@ -35,6 +38,7 @@ def inline_fragment(
inline_style_tags: bool = True,
keep_style_tags: bool = False,
keep_link_tags: bool = False,
+ minify_css: bool = False,
base_url: str | None = None,
load_remote_stylesheets: bool = True,
cache: StylesheetCache | None = None,
@@ -46,6 +50,7 @@ def inline_many(
inline_style_tags: bool = True,
keep_style_tags: bool = False,
keep_link_tags: bool = False,
+ minify_css: bool = False,
base_url: str | None = None,
load_remote_stylesheets: bool = True,
cache: StylesheetCache | None = None,
@@ -58,6 +63,7 @@ def inline_many_fragments(
inline_style_tags: bool = True,
keep_style_tags: bool = False,
keep_link_tags: bool = False,
+ minify_css: bool = False,
base_url: str | None = None,
load_remote_stylesheets: bool = True,
cache: StylesheetCache | None = None,
diff --git a/bindings/python/src/lib.rs b/bindings/python/src/lib.rs
index f958411d..9f5019e2 100644
--- a/bindings/python/src/lib.rs
+++ b/bindings/python/src/lib.rs
@@ -99,7 +99,7 @@ impl StylesheetCache {
}
}
-/// CSSInliner(inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)
+/// CSSInliner(inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, minify_css=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)
///
/// Customizable CSS inliner.
#[pyclass]
@@ -108,12 +108,13 @@ struct CSSInliner {
}
macro_rules! inliner {
- ($inline_style_tags:expr, $keep_style_tags:expr, $keep_link_tags:expr, $keep_at_rules:expr, $base_url:expr, $load_remote_stylesheets:expr, $cache:expr, $extra_css:expr, $preallocate_node_capacity:expr) => {{
+ ($inline_style_tags:expr, $keep_style_tags:expr, $keep_link_tags:expr, $keep_at_rules:expr, $minify_css:expr, $base_url:expr, $load_remote_stylesheets:expr, $cache:expr, $extra_css:expr, $preallocate_node_capacity:expr) => {{
let options = rust_inline::InlineOptions {
inline_style_tags: $inline_style_tags.unwrap_or(true),
keep_style_tags: $keep_style_tags.unwrap_or(false),
keep_link_tags: $keep_link_tags.unwrap_or(false),
keep_at_rules: $keep_at_rules.unwrap_or(false),
+ minify_css: $minify_css.unwrap_or(false),
base_url: $crate::parse_url($base_url)?,
load_remote_stylesheets: $load_remote_stylesheets.unwrap_or(true),
cache: {
@@ -137,7 +138,7 @@ macro_rules! inliner {
impl CSSInliner {
#[new]
#[pyo3(
- signature = (inline_style_tags=true, keep_style_tags=false, keep_link_tags=false, keep_at_rules=false, base_url=None, load_remote_stylesheets=true, cache=None, extra_css=None, preallocate_node_capacity=32)
+ signature = (inline_style_tags=true, keep_style_tags=false, keep_link_tags=false, keep_at_rules=false, minify_css=false, base_url=None, load_remote_stylesheets=true, cache=None, extra_css=None, preallocate_node_capacity=32)
)]
#[allow(clippy::too_many_arguments)]
fn new(
@@ -145,6 +146,7 @@ impl CSSInliner {
keep_style_tags: Option,
keep_link_tags: Option,
keep_at_rules: Option,
+ minify_css: Option,
base_url: Option,
load_remote_stylesheets: Option,
cache: Option,
@@ -156,6 +158,7 @@ impl CSSInliner {
keep_style_tags,
keep_link_tags,
keep_at_rules,
+ minify_css,
base_url,
load_remote_stylesheets,
cache,
@@ -205,12 +208,12 @@ impl CSSInliner {
}
}
-/// inline(html, inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)
+/// inline(html, inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, minify_css=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)
///
/// Inline CSS in the given HTML document
#[pyfunction]
#[pyo3(
- signature = (html, inline_style_tags=true, keep_style_tags=false, keep_link_tags=false, keep_at_rules=false, base_url=None, load_remote_stylesheets=true, cache=None, extra_css=None, preallocate_node_capacity=32)
+ signature = (html, inline_style_tags=true, keep_style_tags=false, keep_link_tags=false, keep_at_rules=false, minify_css=false, base_url=None, load_remote_stylesheets=true, cache=None, extra_css=None, preallocate_node_capacity=32)
)]
#[allow(clippy::too_many_arguments)]
fn inline(
@@ -219,6 +222,7 @@ fn inline(
keep_style_tags: Option,
keep_link_tags: Option,
keep_at_rules: Option,
+ minify_css: Option,
base_url: Option,
load_remote_stylesheets: Option,
cache: Option,
@@ -230,6 +234,7 @@ fn inline(
keep_style_tags,
keep_link_tags,
keep_at_rules,
+ minify_css,
base_url,
load_remote_stylesheets,
cache,
@@ -239,12 +244,12 @@ fn inline(
Ok(inliner.inline(html).map_err(InlineErrorWrapper)?)
}
-/// inline_fragment(html, css, inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)
+/// inline_fragment(html, css, inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, minify_css=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)
///
/// Inline CSS in the given HTML fragment
#[pyfunction]
#[pyo3(
- signature = (html, css, inline_style_tags=true, keep_style_tags=false, keep_link_tags=false, keep_at_rules=false, base_url=None, load_remote_stylesheets=true, cache=None, extra_css=None, preallocate_node_capacity=32)
+ signature = (html, css, inline_style_tags=true, keep_style_tags=false, keep_link_tags=false, keep_at_rules=false, minify_css=false, base_url=None, load_remote_stylesheets=true, cache=None, extra_css=None, preallocate_node_capacity=32)
)]
#[allow(clippy::too_many_arguments)]
fn inline_fragment(
@@ -254,6 +259,7 @@ fn inline_fragment(
keep_style_tags: Option,
keep_link_tags: Option,
keep_at_rules: Option,
+ minify_css: Option,
base_url: Option,
load_remote_stylesheets: Option,
cache: Option,
@@ -265,6 +271,7 @@ fn inline_fragment(
keep_style_tags,
keep_link_tags,
keep_at_rules,
+ minify_css,
base_url,
load_remote_stylesheets,
cache,
@@ -276,12 +283,12 @@ fn inline_fragment(
.map_err(InlineErrorWrapper)?)
}
-/// inline_many(htmls, inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)
+/// inline_many(htmls, inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, minify_css=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)
///
/// Inline CSS in multiple HTML documents
#[pyfunction]
#[pyo3(
- signature = (htmls, inline_style_tags=true, keep_style_tags=false, keep_link_tags=false, keep_at_rules=false, base_url=None, load_remote_stylesheets=true, cache=None, extra_css=None, preallocate_node_capacity=32)
+ signature = (htmls, inline_style_tags=true, keep_style_tags=false, keep_link_tags=false, keep_at_rules=false, minify_css=false, base_url=None, load_remote_stylesheets=true, cache=None, extra_css=None, preallocate_node_capacity=32)
)]
#[allow(clippy::too_many_arguments)]
fn inline_many(
@@ -290,6 +297,7 @@ fn inline_many(
keep_style_tags: Option,
keep_link_tags: Option,
keep_at_rules: Option,
+ minify_css: Option,
base_url: Option,
load_remote_stylesheets: Option,
cache: Option,
@@ -301,6 +309,7 @@ fn inline_many(
keep_style_tags,
keep_link_tags,
keep_at_rules,
+ minify_css,
base_url,
load_remote_stylesheets,
cache,
@@ -323,12 +332,12 @@ fn inline_many_impl(
Ok(output.map_err(InlineErrorWrapper)?)
}
-/// inline_many_fragments(htmls, css, inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)
+/// inline_many_fragments(htmls, css, inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, minify_css=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)
///
/// Inline CSS in multiple HTML fragments
#[pyfunction]
#[pyo3(
- signature = (htmls, css, inline_style_tags=true, keep_style_tags=false, keep_link_tags=false, keep_at_rules=false, base_url=None, load_remote_stylesheets=true, cache=None, extra_css=None, preallocate_node_capacity=32)
+ signature = (htmls, css, inline_style_tags=true, keep_style_tags=false, keep_link_tags=false, keep_at_rules=false, minify_css=false, base_url=None, load_remote_stylesheets=true, cache=None, extra_css=None, preallocate_node_capacity=32)
)]
#[allow(clippy::too_many_arguments)]
fn inline_many_fragments(
@@ -338,6 +347,7 @@ fn inline_many_fragments(
keep_style_tags: Option,
keep_link_tags: Option,
keep_at_rules: Option,
+ minify_css: Option,
base_url: Option,
load_remote_stylesheets: Option,
cache: Option,
@@ -349,6 +359,7 @@ fn inline_many_fragments(
keep_style_tags,
keep_link_tags,
keep_at_rules,
+ minify_css,
base_url,
load_remote_stylesheets,
cache,
diff --git a/bindings/ruby/ext/css_inline/src/lib.rs b/bindings/ruby/ext/css_inline/src/lib.rs
index 734cf2f1..cbdd61da 100644
--- a/bindings/ruby/ext/css_inline/src/lib.rs
+++ b/bindings/ruby/ext/css_inline/src/lib.rs
@@ -31,7 +31,7 @@ use magnus::{
prelude::*,
scan_args::{get_kwargs, scan_args, Args},
typed_data::Obj,
- DataTypeFunctions, RHash, TypedData, Value,
+ DataTypeFunctions, RHash, Symbol, TryConvert, TypedData, Value,
};
use rayon::prelude::*;
use std::{
@@ -42,52 +42,71 @@ use std::{
type RubyResult = Result;
+#[allow(clippy::struct_excessive_bools)]
+struct Options {
+ /// Whether to inline CSS from "style" tags.
+ ///
+ /// Sometimes HTML may include a lot of boilerplate styles, that are not applicable in every
+ /// scenario, and it is useful to ignore them and use `extra_css` instead.
+ inline_style_tags: Option,
+ /// Keep "style" tags after inlining.
+ keep_style_tags: Option,
+ /// Keep "link" tags after inlining.
+ keep_link_tags: Option,
+ /// Keep "at-rules" after inlining.
+ keep_at_rules: Option,
+ /// Remove trailing semicolons and spaces between properties and values.
+ minify_css: Option,
+ /// Used for loading external stylesheets via relative URLs.
+ base_url: Option,
+ /// Whether remote stylesheets should be loaded or not.
+ load_remote_stylesheets: Option,
+ /// An LRU Cache for external stylesheets.
+ cache: Option>,
+ /// Additional CSS to inline.
+ extra_css: Option,
+ /// Pre-allocate capacity for HTML nodes during parsing.
+ /// It can improve performance when you have an estimate of the number of nodes in your HTML document.
+ preallocate_node_capacity: Option,
+}
+
+impl TryConvert for Options {
+ fn try_convert(v: Value) -> Result {
+ let h = RHash::try_convert(v)?;
+ Ok(Self {
+ inline_style_tags: h.aref::<_, Option>(Symbol::new("inline_style_tags"))?,
+ keep_style_tags: h.aref::<_, Option>(Symbol::new("keep_style_tags"))?,
+ keep_link_tags: h.aref::<_, Option>(Symbol::new("keep_link_tags"))?,
+ keep_at_rules: h.aref::<_, Option>(Symbol::new("keep_at_rules"))?,
+ minify_css: h.aref::<_, Option>(Symbol::new("minify_css"))?,
+ base_url: h.aref::<_, Option>(Symbol::new("base_url"))?,
+ load_remote_stylesheets: h
+ .aref::<_, Option>(Symbol::new("load_remote_stylesheets"))?,
+ cache: h.aref::<_, Option>>(Symbol::new("cache"))?,
+ extra_css: h.aref::<_, Option>(Symbol::new("extra_css"))?,
+ preallocate_node_capacity: h
+ .aref::<_, Option>(Symbol::new("preallocate_node_capacity"))?,
+ })
+ }
+}
+
fn parse_options(
args: &Args,
) -> RubyResult> {
- let kwargs = get_kwargs::<
- _,
- (),
- (
- Option,
- Option,
- Option,
- Option,
- Option,
- Option,
- Option>,
- Option,
- Option,
- ),
- (),
- >(
- args.keywords,
- &[],
- &[
- "inline_style_tags",
- "keep_style_tags",
- "keep_link_tags",
- "keep_at_rules",
- "base_url",
- "load_remote_stylesheets",
- "cache",
- "extra_css",
- "preallocate_node_capacity",
- ],
- )?;
- let kwargs = kwargs.optional;
+ let kwargs: Options = Options::try_convert(args.keywords.as_value())?;
Ok(rust_inline::InlineOptions {
- inline_style_tags: kwargs.0.unwrap_or(true),
- keep_style_tags: kwargs.1.unwrap_or(false),
- keep_link_tags: kwargs.2.unwrap_or(false),
- keep_at_rules: kwargs.3.unwrap_or(false),
- base_url: parse_url(kwargs.4)?,
- load_remote_stylesheets: kwargs.5.unwrap_or(true),
+ inline_style_tags: kwargs.inline_style_tags.unwrap_or(true),
+ keep_style_tags: kwargs.keep_style_tags.unwrap_or(false),
+ keep_link_tags: kwargs.keep_link_tags.unwrap_or(false),
+ keep_at_rules: kwargs.keep_at_rules.unwrap_or(false),
+ minify_css: kwargs.minify_css.unwrap_or(false),
+ base_url: parse_url(kwargs.base_url)?,
+ load_remote_stylesheets: kwargs.load_remote_stylesheets.unwrap_or(true),
cache: kwargs
- .6
+ .cache
.map(|cache| Mutex::new(rust_inline::StylesheetCache::new(cache.size))),
- extra_css: kwargs.7.map(Cow::Owned),
- preallocate_node_capacity: kwargs.8.unwrap_or(32),
+ extra_css: kwargs.extra_css.map(Cow::Owned),
+ preallocate_node_capacity: kwargs.preallocate_node_capacity.unwrap_or(32),
resolver: Arc::new(rust_inline::DefaultStylesheetResolver),
})
}
diff --git a/css-inline/src/html/document.rs b/css-inline/src/html/document.rs
index 717b9595..31331fc3 100644
--- a/css-inline/src/html/document.rs
+++ b/css-inline/src/html/document.rs
@@ -282,12 +282,14 @@ impl Document {
}
/// Serialize the document to HTML string.
+ #[allow(clippy::too_many_arguments)]
pub(crate) fn serialize(
&self,
writer: &mut W,
styles: DocumentStyleMap<'_>,
keep_style_tags: bool,
keep_link_tags: bool,
+ minify_css: bool,
at_rules: Option<&String>,
mode: InliningMode,
) -> Result<(), InlineError> {
@@ -297,6 +299,7 @@ impl Document {
styles,
keep_style_tags,
keep_link_tags,
+ minify_css,
at_rules,
mode,
)
@@ -350,6 +353,7 @@ mod tests {
IndexMap::default(),
false,
false,
+ false,
None,
InliningMode::Document,
)
diff --git a/css-inline/src/html/serializer.rs b/css-inline/src/html/serializer.rs
index c2cf4d37..6463a4c4 100644
--- a/css-inline/src/html/serializer.rs
+++ b/css-inline/src/html/serializer.rs
@@ -9,12 +9,14 @@ use html5ever::{local_name, ns, tendril::StrTendril, LocalName, QualName};
use smallvec::{smallvec, SmallVec};
use std::io::Write;
+#[allow(clippy::too_many_arguments)]
pub(crate) fn serialize_to(
document: &Document,
writer: &mut W,
styles: DocumentStyleMap<'_>,
keep_style_tags: bool,
keep_link_tags: bool,
+ minify_css: bool,
at_rules: Option<&String>,
mode: InliningMode,
) -> Result<(), InlineError> {
@@ -23,6 +25,7 @@ pub(crate) fn serialize_to(
NodeId::document_id(),
keep_style_tags,
keep_link_tags,
+ minify_css,
at_rules,
mode,
);
@@ -36,6 +39,7 @@ struct Sink<'a> {
node: NodeId,
keep_style_tags: bool,
keep_link_tags: bool,
+ minify_css: bool,
at_rules: Option<&'a String>,
inlining_mode: InliningMode,
}
@@ -46,6 +50,7 @@ impl<'a> Sink<'a> {
node: NodeId,
keep_style_tags: bool,
keep_link_tags: bool,
+ minify_css: bool,
at_rules: Option<&'a String>,
inlining_mode: InliningMode,
) -> Sink<'a> {
@@ -54,6 +59,7 @@ impl<'a> Sink<'a> {
node,
keep_style_tags,
keep_link_tags,
+ minify_css,
at_rules,
inlining_mode,
}
@@ -65,6 +71,7 @@ impl<'a> Sink<'a> {
node,
self.keep_style_tags,
self.keep_link_tags,
+ self.minify_css,
self.at_rules,
self.inlining_mode,
)
@@ -117,7 +124,12 @@ impl<'a> Sink<'a> {
Some(self.node)
};
- serializer.start_elem(&element.name, &element.attributes, style_node_id)?;
+ serializer.start_elem(
+ &element.name,
+ &element.attributes,
+ style_node_id,
+ self.minify_css,
+ )?;
if element.name.local == local_name!("head") {
if let Some(at_rules) = &self.at_rules {
@@ -227,11 +239,13 @@ impl<'a, W: Write> HtmlSerializer<'a, W> {
Ok(())
}
+ #[allow(clippy::too_many_lines)]
fn start_elem(
&mut self,
name: &QualName,
attrs: &Attributes,
style_node_id: Option,
+ minify_css: bool,
) -> Result<(), InlineError> {
let html_name = match name.ns {
ns!(html) => Some(name.local.clone()),
@@ -292,6 +306,7 @@ impl<'a, W: Write> HtmlSerializer<'a, W> {
&attr.value,
new_styles,
&mut self.style_buffer,
+ minify_css,
)?;
styles = None;
} else {
@@ -304,9 +319,19 @@ impl<'a, W: Write> HtmlSerializer<'a, W> {
}
if let Some(styles) = styles {
self.writer.write_all(b" style=\"")?;
- for (property, (_, value)) in styles {
- write_declaration(&mut self.writer, property, value)?;
- self.writer.write_all(b";")?;
+ if minify_css {
+ let mut it = styles.iter().peekable();
+ while let Some((property, (_, value))) = it.next() {
+ write_declaration(&mut self.writer, property, value, minify_css)?;
+ if !minify_css || it.peek().is_some() {
+ self.writer.write_all(b";")?;
+ }
+ }
+ } else {
+ for (property, (_, value)) in styles {
+ write_declaration(&mut self.writer, property, value, minify_css)?;
+ self.writer.write_all(b";")?;
+ }
}
self.writer.write_all(b"\"")?;
}
@@ -416,15 +441,21 @@ impl<'a, W: Write> HtmlSerializer<'a, W> {
}
const STYLE_SEPARATOR: &[u8] = b": ";
+const STYLE_SEPARATOR_MIN: &[u8] = b":";
#[inline]
fn write_declaration(
writer: &mut Wr,
name: &str,
value: &str,
+ minify_css: bool,
) -> Result<(), InlineError> {
writer.write_all(name.as_bytes())?;
- writer.write_all(STYLE_SEPARATOR)?;
+ if minify_css {
+ writer.write_all(STYLE_SEPARATOR_MIN)?;
+ } else {
+ writer.write_all(STYLE_SEPARATOR)?;
+ }
write_declaration_value(writer, value)
}
@@ -453,10 +484,10 @@ fn write_declaration_value(writer: &mut Wr, value: &str) -> Result<()
}
macro_rules! push_or_update {
- ($style_buffer:expr, $length:expr, $name: expr, $value:expr) => {{
+ ($style_buffer:expr, $length:expr, $name: expr, $value:expr, $minify_css:expr) => {{
if let Some(style) = $style_buffer.get_mut($length) {
style.clear();
- write_declaration(style, &$name, $value)?;
+ write_declaration(style, &$name, $value, $minify_css)?;
} else {
let value = $value.trim();
let mut style = Vec::with_capacity(
@@ -465,7 +496,7 @@ macro_rules! push_or_update {
.saturating_add(STYLE_SEPARATOR.len())
.saturating_add(value.len()),
);
- write_declaration(&mut style, &$name, $value)?;
+ write_declaration(&mut style, &$name, $value, $minify_css)?;
$style_buffer.push(style);
};
$length = $length.saturating_add(1);
@@ -480,6 +511,7 @@ fn merge_styles(
current_style: &StrTendril,
new_styles: &ElementStyleMap<'_>,
declarations_buffer: &mut SmallVec<[Vec; 8]>,
+ minify_css: bool,
) -> Result<(), InlineError> {
// This function is designed with a focus on reusing existing allocations where possible
// We start by parsing the current declarations in the "style" attribute
@@ -502,10 +534,10 @@ fn merge_styles(
if let Some(buffer) = declarations_buffer.get_mut(idx) {
buffer.clear();
buffer.reserve(estimated_declaration_size);
- write_declaration(buffer, &property, value)?;
+ write_declaration(buffer, &property, value, minify_css)?;
} else {
let mut buffer = Vec::with_capacity(estimated_declaration_size);
- write_declaration(&mut buffer, &property, value)?;
+ write_declaration(&mut buffer, &property, value, minify_css)?;
declarations_buffer.push(buffer);
}
}
@@ -539,7 +571,8 @@ fn merge_styles(
declarations_buffer,
parsed_declarations_count,
property,
- value
+ value,
+ minify_css
);
}
// There's no existing rule with the same name, and the new rule is not `!important`
@@ -548,7 +581,8 @@ fn merge_styles(
declarations_buffer,
parsed_declarations_count,
property,
- value
+ value,
+ minify_css
),
// Rule exists and the new one is not `!important` - leave the existing rule as-is and
// ignore the new one.
@@ -595,6 +629,7 @@ mod tests {
IndexMap::default(),
true,
false,
+ false,
None,
InliningMode::Document,
)
@@ -615,6 +650,7 @@ mod tests {
IndexMap::default(),
false,
false,
+ false,
None,
InliningMode::Document,
)
@@ -635,6 +671,7 @@ mod tests {
IndexMap::default(),
false,
false,
+ false,
None,
InliningMode::Document,
)
@@ -655,6 +692,7 @@ mod tests {
IndexMap::default(),
false,
false,
+ false,
None,
InliningMode::Document,
)
@@ -678,6 +716,7 @@ mod tests {
IndexMap::default(),
false,
false,
+ false,
None,
InliningMode::Document,
)
@@ -698,6 +737,7 @@ mod tests {
IndexMap::default(),
false,
false,
+ false,
Some(&String::from(
"@media (max-width: 600px) { h1 { font-size: 18px; } }",
)),
diff --git a/css-inline/src/lib.rs b/css-inline/src/lib.rs
index b8520abc..ef9e5155 100644
--- a/css-inline/src/lib.rs
+++ b/css-inline/src/lib.rs
@@ -64,6 +64,8 @@ pub struct InlineOptions<'a> {
pub keep_link_tags: bool,
/// Keep "at-rules" after inlining.
pub keep_at_rules: bool,
+ /// Remove trailing semicolons and spaces between properties and values.
+ pub minify_css: bool,
/// Used for loading external stylesheets via relative URLs.
pub base_url: Option,
/// Whether remote stylesheets should be loaded or not.
@@ -132,6 +134,13 @@ impl<'a> InlineOptions<'a> {
self
}
+ /// Override whether trailing semicolons and spaces between properties and values should be removed.
+ #[must_use]
+ pub fn minify_css(mut self, minify_css: bool) -> Self {
+ self.minify_css = minify_css;
+ self
+ }
+
/// Set base URL that will be used for loading external stylesheets via relative URLs.
#[must_use]
pub fn base_url(mut self, base_url: Option) -> Self {
@@ -194,6 +203,7 @@ impl Default for InlineOptions<'_> {
keep_style_tags: false,
keep_link_tags: false,
keep_at_rules: false,
+ minify_css: false,
base_url: None,
load_remote_stylesheets: true,
#[cfg(feature = "stylesheet-cache")]
@@ -528,6 +538,7 @@ impl<'a> CSSInliner<'a> {
styles,
self.options.keep_style_tags,
self.options.keep_link_tags,
+ self.options.minify_css,
at_rules.as_ref(),
mode,
)?;
diff --git a/css-inline/src/main.rs b/css-inline/src/main.rs
index f0888f75..b9e4784a 100644
--- a/css-inline/src/main.rs
+++ b/css-inline/src/main.rs
@@ -61,6 +61,7 @@ fn main() -> Result<(), Box> {
load_remote_stylesheets: bool,
#[cfg(feature = "stylesheet-cache")]
cache_size: Option,
+ minify_css: bool,
}
impl Default for ParsedArgs {
@@ -80,6 +81,7 @@ fn main() -> Result<(), Box> {
load_remote_stylesheets: false,
#[cfg(feature = "stylesheet-cache")]
cache_size: None,
+ minify_css: false,
}
}
}
@@ -153,6 +155,7 @@ fn main() -> Result<(), Box> {
"keep-style-tags" => parsed.keep_style_tags = true,
"keep-link-tags" => parsed.keep_link_tags = true,
"keep-at-rules" => parsed.keep_at_rules = true,
+ "minify-css" => parsed.minify_css = true,
_ => {
return Err(ParseError {
message: format!("Unknown flag: {flag}"),
@@ -236,6 +239,9 @@ OPTIONS:
--keep-at-rules
Keep "at-rules" after inlining.
+ --minify-css
+ Minify CSS by removing trailing semicolons and spaces between properties and values.
+
--base-url
Used for loading external stylesheets via relative URLs.
@@ -344,6 +350,7 @@ OPTIONS:
keep_style_tags: args.keep_style_tags,
keep_link_tags: args.keep_link_tags,
keep_at_rules: args.keep_at_rules,
+ minify_css: args.minify_css,
base_url,
load_remote_stylesheets: args.load_remote_stylesheets,
#[cfg(feature = "stylesheet-cache")]
diff --git a/css-inline/tests/test_cli.rs b/css-inline/tests/test_cli.rs
index 3505dca1..3d48a85f 100644
--- a/css-inline/tests/test_cli.rs
+++ b/css-inline/tests/test_cli.rs
@@ -77,6 +77,27 @@ pub mod tests {
)
}
+ #[test]
+ fn minify_css() {
+ css_inline()
+ .arg("tests/example.html")
+ .arg("--minify-css")
+ .arg("--output-filename-prefix=inlined.minify-css.")
+ .assert()
+ .success()
+ .stdout("tests/example.html: SUCCESS\n");
+ let content = fs::read_to_string("tests/inlined.minify-css.example.html").unwrap();
+ assert_eq!(
+ content,
+ "\n \n \n \n\
+ \n\
+ \n\
+ Test\n\
+ Test
\n\n\n\
+ "
+ )
+ }
+
#[test]
fn dont_inline_styles() {
css_inline()
diff --git a/css-inline/tests/test_inlining.rs b/css-inline/tests/test_inlining.rs
index e0c27eb3..b767f571 100644
--- a/css-inline/tests/test_inlining.rs
+++ b/css-inline/tests/test_inlining.rs
@@ -1031,6 +1031,28 @@ p { margin: 10px; }
assert_eq!(inlined, expected);
}
+#[test]
+fn minify_css() {
+ let inliner = CSSInliner::options().minify_css(true).build();
+ let html = r#"
+
+
+
+
+
+Hello
+
+"#;
+ let inlined = inliner.inline(html).unwrap();
+ let expected = "\n\n\n\nHello
\n\n";
+ assert_eq!(inlined, expected);
+}
+
#[test]
fn nth_child_selector() {
let html = r#"
From 0e8f72b88309c23eaceee954d71d9f313b75083c Mon Sep 17 00:00:00 2001
From: Matt Dziuban
Date: Fri, 17 Oct 2025 11:42:32 -0400
Subject: [PATCH 2/8] chore: Add junit-platform-launcher.
---
bindings/java/build.gradle | 1 +
1 file changed, 1 insertion(+)
diff --git a/bindings/java/build.gradle b/bindings/java/build.gradle
index 1e6cfa84..029cc59a 100644
--- a/bindings/java/build.gradle
+++ b/bindings/java/build.gradle
@@ -18,6 +18,7 @@ repositories {
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0'
+ testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
jmh 'org.openjdk.jmh:jmh-core:1.37'
jmh 'org.openjdk.jmh:jmh-generator-annprocess:1.37'
From 08598048d150ae1fca1e4054459294d491b8fa5b Mon Sep 17 00:00:00 2001
From: Matt Dziuban
Date: Fri, 17 Oct 2025 12:09:50 -0400
Subject: [PATCH 3/8] chore: Run `fmt` and `clippy` on java bindings.
---
.github/workflows/build.yml | 7 +++++++
bindings/java/src/main/rust/lib.rs | 2 +-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 3778721f..2fa5fa1e 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -107,6 +107,9 @@ jobs:
- run: cargo fmt --all -- --check
working-directory: ./bindings/c
+ - run: cargo fmt --all -- --check
+ working-directory: ./bindings/java
+
- run: cargo fmt --all -- --check
working-directory: ./bindings/javascript
@@ -148,6 +151,10 @@ jobs:
run: cargo clippy -- -D warnings
working-directory: ./bindings/python
+ - name: Java
+ run: cargo clippy -- -D warnings
+ working-directory: ./bindings/java
+
- name: JavaScript
run: cargo clippy -- -D warnings
working-directory: ./bindings/javascript
diff --git a/bindings/java/src/main/rust/lib.rs b/bindings/java/src/main/rust/lib.rs
index 680c8c0c..47502eff 100644
--- a/bindings/java/src/main/rust/lib.rs
+++ b/bindings/java/src/main/rust/lib.rs
@@ -18,7 +18,7 @@ trait JNIExt {
impl<'a> JNIExt for JNIEnv<'a> {
fn get_rust_string(&mut self, obj: &JString) -> String {
- self.get_string(&obj)
+ self.get_string(obj)
.expect("Failed to get Java String")
.into()
}
From 86d6ab31d70b5640c67b8c02a3729dc64c1b1b3f Mon Sep 17 00:00:00 2001
From: Matt Dziuban
Date: Fri, 17 Oct 2025 14:13:59 -0400
Subject: [PATCH 4/8] chore: Update docs.
---
CHANGELOG.md | 4 ++++
README.md | 14 ++++++++++++++
bindings/c/CHANGELOG.md | 4 ++++
bindings/c/README.md | 14 ++++++++++++++
bindings/java/CHANGELOG.md | 4 ++++
bindings/java/README.md | 16 +++++++++++++++-
bindings/javascript/CHANGELOG.md | 4 ++++
bindings/javascript/README.md | 14 ++++++++++++++
bindings/python/CHANGELOG.md | 4 ++++
bindings/python/README.md | 14 ++++++++++++++
bindings/ruby/CHANGELOG.md | 4 ++++
bindings/ruby/README.md | 14 ++++++++++++++
12 files changed, 109 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 789ac41c..0d0173d1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
## [Unreleased]
+### Added
+
+- `minify_css` option [#12](https://github.com/Stranger6667/css-inline/issues/12)
+
## [0.17.0] - 2025-07-26
### Added
diff --git a/README.md b/README.md
index f7860cc7..633c5863 100644
--- a/README.md
+++ b/README.md
@@ -127,6 +127,7 @@ fn main() -> css_inline::Result<()> {
- `keep_style_tags`. Specifies whether to keep "style" tags after inlining. Default: `false`
- `keep_link_tags`. Specifies whether to keep "link" tags after inlining. Default: `false`
- `keep_at_rules`. Specifies whether to keep "at-rules" (starting with `@`) after inlining. Default: `false`
+- `minify_css`. Specifies whether to remove trailing semicolons and spaces between properties and values. Default: `false`
- `base_url`. The base URL used to resolve relative URLs. If you'd like to load stylesheets from your filesystem, use the `file://` scheme. Default: `None`
- `load_remote_stylesheets`. Specifies whether remote stylesheets should be loaded. Default: `true`
- `cache`. Specifies cache for external stylesheets. Default: `None`
@@ -186,6 +187,19 @@ Such tags will be kept in the resulting HTML even if the `keep_style_tags` optio
+ Big Text
+
+ Big Text
+
+ Big Text
+
+ Big Text
+
+ Big Text
+
+ Big Text
+
```
+If you set the the `minify_css` option to `true`, the inlined styles will be minified by removing trailing semicolons
+and spaces between properties and values.
+
+```html
+
+
+
+
+
+```
+
If you'd like to load stylesheets from your filesystem, use the `file://` scheme:
```rust
diff --git a/bindings/c/CHANGELOG.md b/bindings/c/CHANGELOG.md
index af010f1c..0cf75d92 100644
--- a/bindings/c/CHANGELOG.md
+++ b/bindings/c/CHANGELOG.md
@@ -2,6 +2,10 @@
## [Unreleased]
+### Added
+
+- `minify_css` option [#12](https://github.com/Stranger6667/css-inline/issues/12)
+
## [0.17.0] - 2025-07-26
### Added
diff --git a/bindings/c/README.md b/bindings/c/README.md
index 924deb35..481098e7 100644
--- a/bindings/c/README.md
+++ b/bindings/c/README.md
@@ -154,6 +154,7 @@ Possible configurations:
- `keep_style_tags`. Specifies whether to keep "style" tags after inlining. Default: `false`
- `keep_link_tags`. Specifies whether to keep "link" tags after inlining. Default: `false`
- `keep_at_rules`. Specifies whether to keep "at-rules" (starting with `@`) after inlining. Default: `false`
+- `minify_css`. Specifies whether to remove trailing semicolons and spaces between properties and values.
- `base_url`. The base URL used to resolve relative URLs. If you'd like to load stylesheets from your filesystem, use the `file://` scheme. Default: `NULL`
- `load_remote_stylesheets`. Specifies whether remote stylesheets should be loaded. Default: `true`
- `cache`. Specifies caching options for external stylesheets. Default: `NULL`
@@ -215,6 +216,19 @@ Such tags will be kept in the resulting HTML even if the `keep_style_tags` optio
```
+If you set the the `minify_css` option to `true`, the inlined styles will be minified by removing trailing semicolons
+and spaces between properties and values.
+
+```html
+
+
+
+
+
+```
+
You can also cache external stylesheets to avoid excessive network requests:
```c
diff --git a/bindings/java/CHANGELOG.md b/bindings/java/CHANGELOG.md
index 7136cc08..37ab6a9e 100644
--- a/bindings/java/CHANGELOG.md
+++ b/bindings/java/CHANGELOG.md
@@ -2,6 +2,10 @@
## [Unreleased]
+### Added
+
+- `minify_css` option [#12](https://github.com/Stranger6667/css-inline/issues/12)
+
## [0.17.0] - 2025-07-26
### Added
diff --git a/bindings/java/README.md b/bindings/java/README.md
index 0e0df17e..c7b90d4e 100644
--- a/bindings/java/README.md
+++ b/bindings/java/README.md
@@ -146,7 +146,8 @@ public class ConfigExample {
- **`setInlineStyleTags(boolean)`** - Inline CSS from `
+
+
+```
+
## Performance
`css-inline` is powered by efficient tooling from Mozilla's Servo project to provide high-performance CSS inlining for Java applications.
diff --git a/bindings/javascript/CHANGELOG.md b/bindings/javascript/CHANGELOG.md
index b670a373..821cc2f1 100644
--- a/bindings/javascript/CHANGELOG.md
+++ b/bindings/javascript/CHANGELOG.md
@@ -2,6 +2,10 @@
## [Unreleased]
+### Added
+
+- `minify_css` option [#12](https://github.com/Stranger6667/css-inline/issues/12)
+
## [0.17.0] - 2025-07-26
### Added
diff --git a/bindings/javascript/README.md b/bindings/javascript/README.md
index 77a692c2..7a698427 100644
--- a/bindings/javascript/README.md
+++ b/bindings/javascript/README.md
@@ -117,6 +117,7 @@ var inlined = inlineFragment(
- `keepStyleTags`. Specifies whether to keep "style" tags after inlining. Default: `false`
- `keepLinkTags`. Specifies whether to keep "link" tags after inlining. Default: `false`
- `keepAtRules`. Specifies whether to keep "at-rules" (starting with `@`) after inlining. Default: `false`
+- `minifyCss`. Specifies whether to remove trailing semicolons and spaces between properties and values. Default: `false`
- `baseUrl`. The base URL used to resolve relative URLs. If you'd like to load stylesheets from your filesystem, use the `file://` scheme. Default: `null`
- `loadRemoteStylesheets`. Specifies whether remote stylesheets should be loaded. Default: `true`
- `cache`. Specifies caching options for external stylesheets (for example, `{size: 5}`). Default: `null`
@@ -177,6 +178,19 @@ Such tags will be kept in the resulting HTML even if the `keep_style_tags` optio
```
+If you set the the `minify_css` option to `true`, the inlined styles will be minified by removing trailing semicolons
+and spaces between properties and values.
+
+```html
+
+
+
+
+
+```
+
You can also cache external stylesheets to avoid excessive network requests:
```typescript
diff --git a/bindings/python/CHANGELOG.md b/bindings/python/CHANGELOG.md
index fe9fb7bb..460bfee8 100644
--- a/bindings/python/CHANGELOG.md
+++ b/bindings/python/CHANGELOG.md
@@ -2,6 +2,10 @@
## [Unreleased]
+### Added
+
+- `minify_css` option [#12](https://github.com/Stranger6667/css-inline/issues/12)
+
## [0.17.0] - 2025-07-26
### Added
diff --git a/bindings/python/README.md b/bindings/python/README.md
index ba0da2d3..aba7b6a4 100644
--- a/bindings/python/README.md
+++ b/bindings/python/README.md
@@ -149,6 +149,7 @@ inliner.inline("...")
- `keep_style_tags`. Specifies whether to keep "style" tags after inlining. Default: `False`
- `keep_link_tags`. Specifies whether to keep "link" tags after inlining. Default: `False`
- `keep_at_rules`. Specifies whether to keep "at-rules" (starting with `@`) after inlining. Default: `False`
+- `minify_css`. Specifies whether to remove trailing semicolons and spaces between properties and values. Default: `False`
- `base_url`. The base URL used to resolve relative URLs. If you'd like to load stylesheets from your filesystem, use the `file://` scheme. Default: `None`
- `load_remote_stylesheets`. Specifies whether remote stylesheets should be loaded. Default: `True`
- `cache`. Specifies caching options for external stylesheets (for example, `StylesheetCache(size=5)`). Default: `None`
@@ -208,6 +209,19 @@ Such tags will be kept in the resulting HTML even if the `keep_style_tags` optio
```
+If you set the the `minify_css` option to `true`, the inlined styles will be minified by removing trailing semicolons
+and spaces between properties and values.
+
+```html
+
+
+
+
+
+```
+
If you'd like to load stylesheets from your filesystem, use the `file://` scheme:
```python
diff --git a/bindings/ruby/CHANGELOG.md b/bindings/ruby/CHANGELOG.md
index 1d93326b..3ceffc71 100644
--- a/bindings/ruby/CHANGELOG.md
+++ b/bindings/ruby/CHANGELOG.md
@@ -2,6 +2,10 @@
## [Unreleased]
+### Added
+
+- `minify_css` option [#12](https://github.com/Stranger6667/css-inline/issues/12)
+
## [0.17.0] - 2025-07-26
### Added
diff --git a/bindings/ruby/README.md b/bindings/ruby/README.md
index 2aa9b690..fcaac931 100644
--- a/bindings/ruby/README.md
+++ b/bindings/ruby/README.md
@@ -136,6 +136,7 @@ inliner.inline("...")
- `keep_style_tags`. Specifies whether to keep "style" tags after inlining. Default: `false`
- `keep_link_tags`. Specifies whether to keep "link" tags after inlining. Default: `false`
- `keep_at_rules`. Specifies whether to keep "at-rules" (starting with `@`) after inlining. Default: `false`
+- `minify_css`. Specifies whether to remove trailing semicolons and spaces between properties and values. Default: `false`
- `base_url`. The base URL used to resolve relative URLs. If you'd like to load stylesheets from your filesystem, use the `file://` scheme. Default: `nil`
- `load_remote_stylesheets`. Specifies whether remote stylesheets should be loaded. Default: `true`
- `cache`. Specifies caching options for external stylesheets (for example, `StylesheetCache(size: 5)`). Default: `nil`
@@ -195,6 +196,19 @@ Such tags will be kept in the resulting HTML even if the `keep_style_tags` optio
```
+If you set the the `minify_css` option to `true`, the inlined styles will be minified by removing trailing semicolons
+and spaces between properties and values.
+
+```html
+
+
+
+
+
+```
+
If you'd like to load stylesheets from your filesystem, use the `file://` scheme:
```ruby
From 92f90514d02b8db6021ea90150139e22a5370575 Mon Sep 17 00:00:00 2001
From: Matt Dziuban
Date: Fri, 17 Oct 2025 14:18:53 -0400
Subject: [PATCH 5/8] chore: Update ruby build to use local css-inline.
---
bindings/ruby/Cargo.lock | 528 +++++++++++-------------
bindings/ruby/ext/css_inline/Cargo.lock | 504 ++++++++++------------
bindings/ruby/ext/css_inline/Cargo.toml | 5 +-
3 files changed, 468 insertions(+), 569 deletions(-)
diff --git a/bindings/ruby/Cargo.lock b/bindings/ruby/Cargo.lock
index eef8e9f9..4036076d 100644
--- a/bindings/ruby/Cargo.lock
+++ b/bindings/ruby/Cargo.lock
@@ -2,21 +2,6 @@
# It is not intended for manual editing.
version = 3
-[[package]]
-name = "addr2line"
-version = "0.24.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
-dependencies = [
- "gimli",
-]
-
-[[package]]
-name = "adler2"
-version = "2.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
-
[[package]]
name = "aho-corasick"
version = "1.1.3"
@@ -33,25 +18,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
[[package]]
-name = "autocfg"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
-
-[[package]]
-name = "backtrace"
-version = "0.3.75"
+name = "atomic-waker"
+version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
-dependencies = [
- "addr2line",
- "cfg-if",
- "libc",
- "miniz_oxide",
- "object",
- "rustc-demangle",
- "windows-targets 0.52.6",
-]
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
[[package]]
name = "base64"
@@ -81,9 +51,9 @@ dependencies = [
[[package]]
name = "bitflags"
-version = "2.9.1"
+version = "2.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
+checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
[[package]]
name = "bumpalo"
@@ -105,10 +75,11 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
[[package]]
name = "cc"
-version = "1.2.30"
+version = "1.2.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7"
+checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7"
dependencies = [
+ "find-msvc-tools",
"shlex",
]
@@ -123,9 +94,9 @@ dependencies = [
[[package]]
name = "cfg-if"
-version = "1.0.1"
+version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
+checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]]
name = "cfg_aliases"
@@ -172,17 +143,6 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
name = "css-inline"
version = "0.17.0"
-dependencies = [
- "css-inline 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "magnus",
- "rayon",
-]
-
-[[package]]
-name = "css-inline"
-version = "0.17.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30983955a71311b6268dca9ea211b75136367ab3ed7d27d78617587d7d9beebf"
dependencies = [
"cssparser",
"html5ever",
@@ -196,6 +156,15 @@ dependencies = [
"url",
]
+[[package]]
+name = "css-inline-ruby"
+version = "0.17.0"
+dependencies = [
+ "css-inline",
+ "magnus",
+ "rayon",
+]
+
[[package]]
name = "cssparser"
version = "0.35.0"
@@ -277,6 +246,12 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+[[package]]
+name = "find-msvc-tools"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127"
+
[[package]]
name = "fnv"
version = "1.0.7"
@@ -285,15 +260,15 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "foldhash"
-version = "0.1.5"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
+checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
[[package]]
name = "form_urlencoded"
-version = "1.2.1"
+version = "1.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
dependencies = [
"percent-encoding",
]
@@ -376,41 +351,35 @@ dependencies = [
"cfg-if",
"js-sys",
"libc",
- "wasi 0.11.1+wasi-snapshot-preview1",
+ "wasi",
"wasm-bindgen",
]
[[package]]
name = "getrandom"
-version = "0.3.3"
+version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
+checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
dependencies = [
"cfg-if",
"js-sys",
"libc",
"r-efi",
- "wasi 0.14.2+wasi-0.2.4",
+ "wasip2",
"wasm-bindgen",
]
-[[package]]
-name = "gimli"
-version = "0.31.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
-
[[package]]
name = "glob"
-version = "0.3.2"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
+checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
[[package]]
name = "hashbrown"
-version = "0.15.4"
+version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
+checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d"
dependencies = [
"allocator-api2",
"equivalent",
@@ -470,18 +439,20 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
[[package]]
name = "hyper"
-version = "1.6.0"
+version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80"
+checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e"
dependencies = [
+ "atomic-waker",
"bytes",
"futures-channel",
- "futures-util",
+ "futures-core",
"http",
"http-body",
"httparse",
"itoa",
"pin-project-lite",
+ "pin-utils",
"smallvec",
"tokio",
"want",
@@ -506,9 +477,9 @@ dependencies = [
[[package]]
name = "hyper-util"
-version = "0.1.16"
+version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e"
+checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8"
dependencies = [
"base64",
"bytes",
@@ -522,7 +493,7 @@ dependencies = [
"libc",
"percent-encoding",
"pin-project-lite",
- "socket2 0.6.0",
+ "socket2",
"tokio",
"tower-service",
"tracing",
@@ -616,9 +587,9 @@ dependencies = [
[[package]]
name = "idna"
-version = "1.0.3"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
+checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
dependencies = [
"idna_adapter",
"smallvec",
@@ -637,25 +608,14 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "2.10.0"
+version = "2.11.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661"
+checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5"
dependencies = [
"equivalent",
"hashbrown",
]
-[[package]]
-name = "io-uring"
-version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4"
-dependencies = [
- "bitflags",
- "cfg-if",
- "libc",
-]
-
[[package]]
name = "ipnet"
version = "2.11.0"
@@ -689,9 +649,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
[[package]]
name = "js-sys"
-version = "0.3.77"
+version = "0.3.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
+checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305"
dependencies = [
"once_cell",
"wasm-bindgen",
@@ -711,18 +671,18 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
[[package]]
name = "libc"
-version = "0.2.174"
+version = "0.2.177"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
+checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976"
[[package]]
name = "libloading"
-version = "0.8.8"
+version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667"
+checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
dependencies = [
"cfg-if",
- "windows-targets 0.53.2",
+ "windows-link",
]
[[package]]
@@ -733,25 +693,24 @@ checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
[[package]]
name = "lock_api"
-version = "0.4.13"
+version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765"
+checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
dependencies = [
- "autocfg",
"scopeguard",
]
[[package]]
name = "log"
-version = "0.4.27"
+version = "0.4.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
+checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
[[package]]
name = "lru"
-version = "0.16.0"
+version = "0.16.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86ea4e65087ff52f3862caff188d489f1fab49a0cb09e01b2e3f1a617b10aaed"
+checksum = "96051b46fc183dc9cd4a223960ef37b9af631b55191852a8274bfef064cda20f"
dependencies = [
"hashbrown",
]
@@ -815,9 +774,9 @@ dependencies = [
[[package]]
name = "memchr"
-version = "2.7.5"
+version = "2.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
+checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
[[package]]
name = "minimal-lexical"
@@ -825,24 +784,15 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
-[[package]]
-name = "miniz_oxide"
-version = "0.8.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
-dependencies = [
- "adler2",
-]
-
[[package]]
name = "mio"
-version = "1.0.4"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
+checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873"
dependencies = [
"libc",
- "wasi 0.11.1+wasi-snapshot-preview1",
- "windows-sys 0.59.0",
+ "wasi",
+ "windows-sys 0.61.2",
]
[[package]]
@@ -861,15 +811,6 @@ dependencies = [
"minimal-lexical",
]
-[[package]]
-name = "object"
-version = "0.36.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
-dependencies = [
- "memchr",
-]
-
[[package]]
name = "once_cell"
version = "1.21.3"
@@ -878,9 +819,9 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]]
name = "parking_lot"
-version = "0.12.4"
+version = "0.12.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13"
+checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
dependencies = [
"lock_api",
"parking_lot_core",
@@ -888,22 +829,22 @@ dependencies = [
[[package]]
name = "parking_lot_core"
-version = "0.9.11"
+version = "0.9.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5"
+checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
dependencies = [
"cfg-if",
"libc",
"redox_syscall",
"smallvec",
- "windows-targets 0.52.6",
+ "windows-link",
]
[[package]]
name = "percent-encoding"
-version = "2.3.1"
+version = "2.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
[[package]]
name = "phf"
@@ -971,9 +912,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "potential_utf"
-version = "0.1.2"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585"
+checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a"
dependencies = [
"zerovec",
]
@@ -995,18 +936,18 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
[[package]]
name = "proc-macro2"
-version = "1.0.95"
+version = "1.0.101"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
+checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quinn"
-version = "0.11.8"
+version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8"
+checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20"
dependencies = [
"bytes",
"cfg_aliases",
@@ -1015,7 +956,7 @@ dependencies = [
"quinn-udp",
"rustc-hash 2.1.1",
"rustls",
- "socket2 0.5.10",
+ "socket2",
"thiserror",
"tokio",
"tracing",
@@ -1024,12 +965,12 @@ dependencies = [
[[package]]
name = "quinn-proto"
-version = "0.11.12"
+version = "0.11.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e"
+checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31"
dependencies = [
"bytes",
- "getrandom 0.3.3",
+ "getrandom 0.3.4",
"lru-slab",
"rand 0.9.2",
"ring",
@@ -1045,23 +986,23 @@ dependencies = [
[[package]]
name = "quinn-udp"
-version = "0.5.13"
+version = "0.5.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970"
+checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd"
dependencies = [
"cfg_aliases",
"libc",
"once_cell",
- "socket2 0.5.10",
+ "socket2",
"tracing",
- "windows-sys 0.59.0",
+ "windows-sys 0.60.2",
]
[[package]]
name = "quote"
-version = "1.0.40"
+version = "1.0.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
+checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1"
dependencies = [
"proc-macro2",
]
@@ -1113,14 +1054,14 @@ version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
dependencies = [
- "getrandom 0.3.3",
+ "getrandom 0.3.4",
]
[[package]]
name = "rayon"
-version = "1.10.0"
+version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
+checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f"
dependencies = [
"either",
"rayon-core",
@@ -1128,9 +1069,9 @@ dependencies = [
[[package]]
name = "rayon-core"
-version = "1.12.1"
+version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
+checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
dependencies = [
"crossbeam-deque",
"crossbeam-utils",
@@ -1138,18 +1079,18 @@ dependencies = [
[[package]]
name = "rb-sys"
-version = "0.9.116"
+version = "0.9.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7059846f68396df83155779c75336ca24567741cb95256e6308c9fcc370e8dad"
+checksum = "f900d1ce4629a2ebffaf5de74bd8f9c1188d4c5ed406df02f97e22f77a006f44"
dependencies = [
"rb-sys-build",
]
[[package]]
name = "rb-sys-build"
-version = "0.9.116"
+version = "0.9.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac217510df41b9ffc041573e68d7a02aaff770c49943c7494441c4b224b0ecd0"
+checksum = "ef1e9c857028f631056bcd6d88cec390c751e343ce2223ddb26d23eb4a151d59"
dependencies = [
"bindgen",
"lazy_static",
@@ -1168,18 +1109,18 @@ checksum = "a35802679f07360454b418a5d1735c89716bde01d35b1560fc953c1415a0b3bb"
[[package]]
name = "redox_syscall"
-version = "0.5.16"
+version = "0.5.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7251471db004e509f4e75a62cca9435365b5ec7bcdff530d612ac7c87c44a792"
+checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
dependencies = [
"bitflags",
]
[[package]]
name = "regex"
-version = "1.11.1"
+version = "1.12.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
+checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4"
dependencies = [
"aho-corasick",
"memchr",
@@ -1189,9 +1130,9 @@ dependencies = [
[[package]]
name = "regex-automata"
-version = "0.4.9"
+version = "0.4.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
+checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
dependencies = [
"aho-corasick",
"memchr",
@@ -1200,15 +1141,15 @@ dependencies = [
[[package]]
name = "regex-syntax"
-version = "0.8.5"
+version = "0.8.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
+checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
[[package]]
name = "reqwest"
-version = "0.12.22"
+version = "0.12.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531"
+checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f"
dependencies = [
"base64",
"bytes",
@@ -1258,12 +1199,6 @@ dependencies = [
"windows-sys 0.52.0",
]
-[[package]]
-name = "rustc-demangle"
-version = "0.1.25"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f"
-
[[package]]
name = "rustc-hash"
version = "1.1.0"
@@ -1278,9 +1213,9 @@ checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
[[package]]
name = "rustls"
-version = "0.23.29"
+version = "0.23.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1"
+checksum = "751e04a496ca00bb97a5e043158d23d66b5aabf2e1d5aa2a0aaebb1aafe6f82c"
dependencies = [
"once_cell",
"ring",
@@ -1302,9 +1237,9 @@ dependencies = [
[[package]]
name = "rustls-webpki"
-version = "0.103.4"
+version = "0.103.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc"
+checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf"
dependencies = [
"ring",
"rustls-pki-types",
@@ -1313,9 +1248,9 @@ dependencies = [
[[package]]
name = "rustversion"
-version = "1.0.21"
+version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d"
+checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
[[package]]
name = "ryu"
@@ -1331,9 +1266,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "selectors"
-version = "0.30.0"
+version = "0.31.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3df44ba8a7ca7a4d28c589e04f526266ed76b6cc556e33fe69fa25de31939a65"
+checksum = "5685b6ae43bfcf7d2e7dfcfb5d8e8f61b46442c902531e41a32a9a8bf0ee0fb6"
dependencies = [
"bitflags",
"cssparser",
@@ -1356,18 +1291,28 @@ checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc"
[[package]]
name = "serde"
-version = "1.0.219"
+version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
+checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
+dependencies = [
+ "serde_core",
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_core"
+version = "1.0.228"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.219"
+version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
+checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
dependencies = [
"proc-macro2",
"quote",
@@ -1376,14 +1321,15 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.141"
+version = "1.0.145"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3"
+checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
dependencies = [
"itoa",
"memchr",
"ryu",
"serde",
+ "serde_core",
]
[[package]]
@@ -1427,9 +1373,9 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
[[package]]
name = "slab"
-version = "0.4.10"
+version = "0.4.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d"
+checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
[[package]]
name = "smallvec"
@@ -1439,29 +1385,19 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
[[package]]
name = "socket2"
-version = "0.5.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678"
-dependencies = [
- "libc",
- "windows-sys 0.52.0",
-]
-
-[[package]]
-name = "socket2"
-version = "0.6.0"
+version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807"
+checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881"
dependencies = [
"libc",
- "windows-sys 0.59.0",
+ "windows-sys 0.60.2",
]
[[package]]
name = "stable_deref_trait"
-version = "1.2.0"
+version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
[[package]]
name = "string_cache"
@@ -1496,9 +1432,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
[[package]]
name = "syn"
-version = "2.0.104"
+version = "2.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40"
+checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
dependencies = [
"proc-macro2",
"quote",
@@ -1538,18 +1474,18 @@ dependencies = [
[[package]]
name = "thiserror"
-version = "2.0.12"
+version = "2.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
+checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "2.0.12"
+version = "2.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
+checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
dependencies = [
"proc-macro2",
"quote",
@@ -1568,9 +1504,9 @@ dependencies = [
[[package]]
name = "tinyvec"
-version = "1.9.0"
+version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71"
+checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa"
dependencies = [
"tinyvec_macros",
]
@@ -1583,26 +1519,23 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
-version = "1.47.0"
+version = "1.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43864ed400b6043a4757a25c7a64a8efde741aed79a056a2fb348a406701bb35"
+checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408"
dependencies = [
- "backtrace",
"bytes",
- "io-uring",
"libc",
"mio",
"pin-project-lite",
- "slab",
- "socket2 0.6.0",
- "windows-sys 0.59.0",
+ "socket2",
+ "windows-sys 0.61.2",
]
[[package]]
name = "tokio-rustls"
-version = "0.26.2"
+version = "0.26.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b"
+checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
dependencies = [
"rustls",
"tokio",
@@ -1680,9 +1613,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]]
name = "unicode-ident"
-version = "1.0.18"
+version = "1.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
+checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"
[[package]]
name = "untrusted"
@@ -1692,13 +1625,14 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
[[package]]
name = "url"
-version = "2.5.4"
+version = "2.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
+checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
dependencies = [
"form_urlencoded",
"idna",
"percent-encoding",
+ "serde",
]
[[package]]
@@ -1729,31 +1663,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
-name = "wasi"
-version = "0.14.2+wasi-0.2.4"
+name = "wasip2"
+version = "1.0.1+wasi-0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
+checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
dependencies = [
- "wit-bindgen-rt",
+ "wit-bindgen",
]
[[package]]
name = "wasm-bindgen"
-version = "0.2.100"
+version = "0.2.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
+checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d"
dependencies = [
"cfg-if",
"once_cell",
"rustversion",
"wasm-bindgen-macro",
+ "wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.100"
+version = "0.2.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
+checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19"
dependencies = [
"bumpalo",
"log",
@@ -1765,9 +1700,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-futures"
-version = "0.4.50"
+version = "0.4.54"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61"
+checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c"
dependencies = [
"cfg-if",
"js-sys",
@@ -1778,9 +1713,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.100"
+version = "0.2.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
+checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -1788,9 +1723,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.100"
+version = "0.2.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
+checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7"
dependencies = [
"proc-macro2",
"quote",
@@ -1801,18 +1736,18 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.100"
+version = "0.2.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
+checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1"
dependencies = [
"unicode-ident",
]
[[package]]
name = "web-sys"
-version = "0.3.77"
+version = "0.3.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
+checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -1842,13 +1777,19 @@ dependencies = [
[[package]]
name = "webpki-roots"
-version = "1.0.2"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2"
+checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8"
dependencies = [
"rustls-pki-types",
]
+[[package]]
+name = "windows-link"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
+
[[package]]
name = "windows-sys"
version = "0.52.0"
@@ -1860,11 +1801,20 @@ dependencies = [
[[package]]
name = "windows-sys"
-version = "0.59.0"
+version = "0.60.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
+checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
dependencies = [
- "windows-targets 0.52.6",
+ "windows-targets 0.53.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.61.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
+dependencies = [
+ "windows-link",
]
[[package]]
@@ -1885,18 +1835,19 @@ dependencies = [
[[package]]
name = "windows-targets"
-version = "0.53.2"
+version = "0.53.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef"
+checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
dependencies = [
- "windows_aarch64_gnullvm 0.53.0",
- "windows_aarch64_msvc 0.53.0",
- "windows_i686_gnu 0.53.0",
- "windows_i686_gnullvm 0.53.0",
- "windows_i686_msvc 0.53.0",
- "windows_x86_64_gnu 0.53.0",
- "windows_x86_64_gnullvm 0.53.0",
- "windows_x86_64_msvc 0.53.0",
+ "windows-link",
+ "windows_aarch64_gnullvm 0.53.1",
+ "windows_aarch64_msvc 0.53.1",
+ "windows_i686_gnu 0.53.1",
+ "windows_i686_gnullvm 0.53.1",
+ "windows_i686_msvc 0.53.1",
+ "windows_x86_64_gnu 0.53.1",
+ "windows_x86_64_gnullvm 0.53.1",
+ "windows_x86_64_msvc 0.53.1",
]
[[package]]
@@ -1907,9 +1858,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
[[package]]
name = "windows_aarch64_gnullvm"
-version = "0.53.0"
+version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
+checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
[[package]]
name = "windows_aarch64_msvc"
@@ -1919,9 +1870,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
[[package]]
name = "windows_aarch64_msvc"
-version = "0.53.0"
+version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
+checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
[[package]]
name = "windows_i686_gnu"
@@ -1931,9 +1882,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
[[package]]
name = "windows_i686_gnu"
-version = "0.53.0"
+version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
+checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
[[package]]
name = "windows_i686_gnullvm"
@@ -1943,9 +1894,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
[[package]]
name = "windows_i686_gnullvm"
-version = "0.53.0"
+version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
+checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
[[package]]
name = "windows_i686_msvc"
@@ -1955,9 +1906,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
[[package]]
name = "windows_i686_msvc"
-version = "0.53.0"
+version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
+checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
[[package]]
name = "windows_x86_64_gnu"
@@ -1967,9 +1918,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
[[package]]
name = "windows_x86_64_gnu"
-version = "0.53.0"
+version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
+checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
[[package]]
name = "windows_x86_64_gnullvm"
@@ -1979,9 +1930,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
[[package]]
name = "windows_x86_64_gnullvm"
-version = "0.53.0"
+version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
+checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
[[package]]
name = "windows_x86_64_msvc"
@@ -1991,18 +1942,15 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]]
name = "windows_x86_64_msvc"
-version = "0.53.0"
+version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
+checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
[[package]]
-name = "wit-bindgen-rt"
-version = "0.39.0"
+name = "wit-bindgen"
+version = "0.46.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
-dependencies = [
- "bitflags",
-]
+checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
[[package]]
name = "writeable"
@@ -2036,18 +1984,18 @@ dependencies = [
[[package]]
name = "zerocopy"
-version = "0.8.26"
+version = "0.8.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f"
+checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
-version = "0.8.26"
+version = "0.8.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181"
+checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
dependencies = [
"proc-macro2",
"quote",
@@ -2077,9 +2025,9 @@ dependencies = [
[[package]]
name = "zeroize"
-version = "1.8.1"
+version = "1.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
+checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
[[package]]
name = "zerotrie"
@@ -2094,9 +2042,9 @@ dependencies = [
[[package]]
name = "zerovec"
-version = "0.11.2"
+version = "0.11.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428"
+checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b"
dependencies = [
"yoke",
"zerofrom",
diff --git a/bindings/ruby/ext/css_inline/Cargo.lock b/bindings/ruby/ext/css_inline/Cargo.lock
index eef8e9f9..46804f79 100644
--- a/bindings/ruby/ext/css_inline/Cargo.lock
+++ b/bindings/ruby/ext/css_inline/Cargo.lock
@@ -2,21 +2,6 @@
# It is not intended for manual editing.
version = 3
-[[package]]
-name = "addr2line"
-version = "0.24.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
-dependencies = [
- "gimli",
-]
-
-[[package]]
-name = "adler2"
-version = "2.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
-
[[package]]
name = "aho-corasick"
version = "1.1.3"
@@ -33,25 +18,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
[[package]]
-name = "autocfg"
-version = "1.5.0"
+name = "atomic-waker"
+version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
-
-[[package]]
-name = "backtrace"
-version = "0.3.75"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
-dependencies = [
- "addr2line",
- "cfg-if",
- "libc",
- "miniz_oxide",
- "object",
- "rustc-demangle",
- "windows-targets 0.52.6",
-]
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
[[package]]
name = "base64"
@@ -81,9 +51,9 @@ dependencies = [
[[package]]
name = "bitflags"
-version = "2.9.1"
+version = "2.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
+checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
[[package]]
name = "bumpalo"
@@ -105,10 +75,11 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
[[package]]
name = "cc"
-version = "1.2.30"
+version = "1.2.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7"
+checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7"
dependencies = [
+ "find-msvc-tools",
"shlex",
]
@@ -123,9 +94,9 @@ dependencies = [
[[package]]
name = "cfg-if"
-version = "1.0.1"
+version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
+checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]]
name = "cfg_aliases"
@@ -277,6 +248,12 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+[[package]]
+name = "find-msvc-tools"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127"
+
[[package]]
name = "fnv"
version = "1.0.7"
@@ -285,15 +262,15 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "foldhash"
-version = "0.1.5"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
+checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
[[package]]
name = "form_urlencoded"
-version = "1.2.1"
+version = "1.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
dependencies = [
"percent-encoding",
]
@@ -376,41 +353,35 @@ dependencies = [
"cfg-if",
"js-sys",
"libc",
- "wasi 0.11.1+wasi-snapshot-preview1",
+ "wasi",
"wasm-bindgen",
]
[[package]]
name = "getrandom"
-version = "0.3.3"
+version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
+checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
dependencies = [
"cfg-if",
"js-sys",
"libc",
"r-efi",
- "wasi 0.14.2+wasi-0.2.4",
+ "wasip2",
"wasm-bindgen",
]
-[[package]]
-name = "gimli"
-version = "0.31.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
-
[[package]]
name = "glob"
-version = "0.3.2"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
+checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
[[package]]
name = "hashbrown"
-version = "0.15.4"
+version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
+checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d"
dependencies = [
"allocator-api2",
"equivalent",
@@ -470,18 +441,20 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
[[package]]
name = "hyper"
-version = "1.6.0"
+version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80"
+checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e"
dependencies = [
+ "atomic-waker",
"bytes",
"futures-channel",
- "futures-util",
+ "futures-core",
"http",
"http-body",
"httparse",
"itoa",
"pin-project-lite",
+ "pin-utils",
"smallvec",
"tokio",
"want",
@@ -506,9 +479,9 @@ dependencies = [
[[package]]
name = "hyper-util"
-version = "0.1.16"
+version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e"
+checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8"
dependencies = [
"base64",
"bytes",
@@ -522,7 +495,7 @@ dependencies = [
"libc",
"percent-encoding",
"pin-project-lite",
- "socket2 0.6.0",
+ "socket2",
"tokio",
"tower-service",
"tracing",
@@ -616,9 +589,9 @@ dependencies = [
[[package]]
name = "idna"
-version = "1.0.3"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
+checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
dependencies = [
"idna_adapter",
"smallvec",
@@ -637,25 +610,14 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "2.10.0"
+version = "2.11.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661"
+checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5"
dependencies = [
"equivalent",
"hashbrown",
]
-[[package]]
-name = "io-uring"
-version = "0.7.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4"
-dependencies = [
- "bitflags",
- "cfg-if",
- "libc",
-]
-
[[package]]
name = "ipnet"
version = "2.11.0"
@@ -689,9 +651,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
[[package]]
name = "js-sys"
-version = "0.3.77"
+version = "0.3.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
+checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305"
dependencies = [
"once_cell",
"wasm-bindgen",
@@ -711,18 +673,18 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
[[package]]
name = "libc"
-version = "0.2.174"
+version = "0.2.177"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
+checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976"
[[package]]
name = "libloading"
-version = "0.8.8"
+version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667"
+checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
dependencies = [
"cfg-if",
- "windows-targets 0.53.2",
+ "windows-link",
]
[[package]]
@@ -733,25 +695,24 @@ checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
[[package]]
name = "lock_api"
-version = "0.4.13"
+version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765"
+checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
dependencies = [
- "autocfg",
"scopeguard",
]
[[package]]
name = "log"
-version = "0.4.27"
+version = "0.4.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
+checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
[[package]]
name = "lru"
-version = "0.16.0"
+version = "0.16.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86ea4e65087ff52f3862caff188d489f1fab49a0cb09e01b2e3f1a617b10aaed"
+checksum = "96051b46fc183dc9cd4a223960ef37b9af631b55191852a8274bfef064cda20f"
dependencies = [
"hashbrown",
]
@@ -815,9 +776,9 @@ dependencies = [
[[package]]
name = "memchr"
-version = "2.7.5"
+version = "2.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
+checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
[[package]]
name = "minimal-lexical"
@@ -825,24 +786,15 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
-[[package]]
-name = "miniz_oxide"
-version = "0.8.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
-dependencies = [
- "adler2",
-]
-
[[package]]
name = "mio"
-version = "1.0.4"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
+checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873"
dependencies = [
"libc",
- "wasi 0.11.1+wasi-snapshot-preview1",
- "windows-sys 0.59.0",
+ "wasi",
+ "windows-sys 0.61.2",
]
[[package]]
@@ -861,15 +813,6 @@ dependencies = [
"minimal-lexical",
]
-[[package]]
-name = "object"
-version = "0.36.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
-dependencies = [
- "memchr",
-]
-
[[package]]
name = "once_cell"
version = "1.21.3"
@@ -878,9 +821,9 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]]
name = "parking_lot"
-version = "0.12.4"
+version = "0.12.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13"
+checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
dependencies = [
"lock_api",
"parking_lot_core",
@@ -888,22 +831,22 @@ dependencies = [
[[package]]
name = "parking_lot_core"
-version = "0.9.11"
+version = "0.9.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5"
+checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
dependencies = [
"cfg-if",
"libc",
"redox_syscall",
"smallvec",
- "windows-targets 0.52.6",
+ "windows-link",
]
[[package]]
name = "percent-encoding"
-version = "2.3.1"
+version = "2.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
[[package]]
name = "phf"
@@ -971,9 +914,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "potential_utf"
-version = "0.1.2"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585"
+checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a"
dependencies = [
"zerovec",
]
@@ -995,18 +938,18 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
[[package]]
name = "proc-macro2"
-version = "1.0.95"
+version = "1.0.101"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
+checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quinn"
-version = "0.11.8"
+version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8"
+checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20"
dependencies = [
"bytes",
"cfg_aliases",
@@ -1015,7 +958,7 @@ dependencies = [
"quinn-udp",
"rustc-hash 2.1.1",
"rustls",
- "socket2 0.5.10",
+ "socket2",
"thiserror",
"tokio",
"tracing",
@@ -1024,12 +967,12 @@ dependencies = [
[[package]]
name = "quinn-proto"
-version = "0.11.12"
+version = "0.11.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e"
+checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31"
dependencies = [
"bytes",
- "getrandom 0.3.3",
+ "getrandom 0.3.4",
"lru-slab",
"rand 0.9.2",
"ring",
@@ -1045,23 +988,23 @@ dependencies = [
[[package]]
name = "quinn-udp"
-version = "0.5.13"
+version = "0.5.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970"
+checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd"
dependencies = [
"cfg_aliases",
"libc",
"once_cell",
- "socket2 0.5.10",
+ "socket2",
"tracing",
- "windows-sys 0.59.0",
+ "windows-sys 0.60.2",
]
[[package]]
name = "quote"
-version = "1.0.40"
+version = "1.0.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
+checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1"
dependencies = [
"proc-macro2",
]
@@ -1113,14 +1056,14 @@ version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
dependencies = [
- "getrandom 0.3.3",
+ "getrandom 0.3.4",
]
[[package]]
name = "rayon"
-version = "1.10.0"
+version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
+checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f"
dependencies = [
"either",
"rayon-core",
@@ -1128,9 +1071,9 @@ dependencies = [
[[package]]
name = "rayon-core"
-version = "1.12.1"
+version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
+checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
dependencies = [
"crossbeam-deque",
"crossbeam-utils",
@@ -1138,18 +1081,18 @@ dependencies = [
[[package]]
name = "rb-sys"
-version = "0.9.116"
+version = "0.9.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7059846f68396df83155779c75336ca24567741cb95256e6308c9fcc370e8dad"
+checksum = "f900d1ce4629a2ebffaf5de74bd8f9c1188d4c5ed406df02f97e22f77a006f44"
dependencies = [
"rb-sys-build",
]
[[package]]
name = "rb-sys-build"
-version = "0.9.116"
+version = "0.9.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac217510df41b9ffc041573e68d7a02aaff770c49943c7494441c4b224b0ecd0"
+checksum = "ef1e9c857028f631056bcd6d88cec390c751e343ce2223ddb26d23eb4a151d59"
dependencies = [
"bindgen",
"lazy_static",
@@ -1168,18 +1111,18 @@ checksum = "a35802679f07360454b418a5d1735c89716bde01d35b1560fc953c1415a0b3bb"
[[package]]
name = "redox_syscall"
-version = "0.5.16"
+version = "0.5.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7251471db004e509f4e75a62cca9435365b5ec7bcdff530d612ac7c87c44a792"
+checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
dependencies = [
"bitflags",
]
[[package]]
name = "regex"
-version = "1.11.1"
+version = "1.12.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
+checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4"
dependencies = [
"aho-corasick",
"memchr",
@@ -1189,9 +1132,9 @@ dependencies = [
[[package]]
name = "regex-automata"
-version = "0.4.9"
+version = "0.4.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
+checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
dependencies = [
"aho-corasick",
"memchr",
@@ -1200,15 +1143,15 @@ dependencies = [
[[package]]
name = "regex-syntax"
-version = "0.8.5"
+version = "0.8.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
+checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
[[package]]
name = "reqwest"
-version = "0.12.22"
+version = "0.12.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531"
+checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f"
dependencies = [
"base64",
"bytes",
@@ -1258,12 +1201,6 @@ dependencies = [
"windows-sys 0.52.0",
]
-[[package]]
-name = "rustc-demangle"
-version = "0.1.25"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f"
-
[[package]]
name = "rustc-hash"
version = "1.1.0"
@@ -1278,9 +1215,9 @@ checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
[[package]]
name = "rustls"
-version = "0.23.29"
+version = "0.23.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1"
+checksum = "751e04a496ca00bb97a5e043158d23d66b5aabf2e1d5aa2a0aaebb1aafe6f82c"
dependencies = [
"once_cell",
"ring",
@@ -1302,9 +1239,9 @@ dependencies = [
[[package]]
name = "rustls-webpki"
-version = "0.103.4"
+version = "0.103.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc"
+checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf"
dependencies = [
"ring",
"rustls-pki-types",
@@ -1313,9 +1250,9 @@ dependencies = [
[[package]]
name = "rustversion"
-version = "1.0.21"
+version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d"
+checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
[[package]]
name = "ryu"
@@ -1356,18 +1293,28 @@ checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc"
[[package]]
name = "serde"
-version = "1.0.219"
+version = "1.0.228"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
+dependencies = [
+ "serde_core",
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_core"
+version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
+checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.219"
+version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
+checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
dependencies = [
"proc-macro2",
"quote",
@@ -1376,14 +1323,15 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.141"
+version = "1.0.145"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3"
+checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
dependencies = [
"itoa",
"memchr",
"ryu",
"serde",
+ "serde_core",
]
[[package]]
@@ -1427,9 +1375,9 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
[[package]]
name = "slab"
-version = "0.4.10"
+version = "0.4.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d"
+checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
[[package]]
name = "smallvec"
@@ -1439,29 +1387,19 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
[[package]]
name = "socket2"
-version = "0.5.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678"
-dependencies = [
- "libc",
- "windows-sys 0.52.0",
-]
-
-[[package]]
-name = "socket2"
-version = "0.6.0"
+version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807"
+checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881"
dependencies = [
"libc",
- "windows-sys 0.59.0",
+ "windows-sys 0.60.2",
]
[[package]]
name = "stable_deref_trait"
-version = "1.2.0"
+version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
[[package]]
name = "string_cache"
@@ -1496,9 +1434,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
[[package]]
name = "syn"
-version = "2.0.104"
+version = "2.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40"
+checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
dependencies = [
"proc-macro2",
"quote",
@@ -1538,18 +1476,18 @@ dependencies = [
[[package]]
name = "thiserror"
-version = "2.0.12"
+version = "2.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
+checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "2.0.12"
+version = "2.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
+checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
dependencies = [
"proc-macro2",
"quote",
@@ -1568,9 +1506,9 @@ dependencies = [
[[package]]
name = "tinyvec"
-version = "1.9.0"
+version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71"
+checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa"
dependencies = [
"tinyvec_macros",
]
@@ -1583,26 +1521,23 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
-version = "1.47.0"
+version = "1.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43864ed400b6043a4757a25c7a64a8efde741aed79a056a2fb348a406701bb35"
+checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408"
dependencies = [
- "backtrace",
"bytes",
- "io-uring",
"libc",
"mio",
"pin-project-lite",
- "slab",
- "socket2 0.6.0",
- "windows-sys 0.59.0",
+ "socket2",
+ "windows-sys 0.61.2",
]
[[package]]
name = "tokio-rustls"
-version = "0.26.2"
+version = "0.26.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b"
+checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
dependencies = [
"rustls",
"tokio",
@@ -1680,9 +1615,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]]
name = "unicode-ident"
-version = "1.0.18"
+version = "1.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
+checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"
[[package]]
name = "untrusted"
@@ -1692,13 +1627,14 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
[[package]]
name = "url"
-version = "2.5.4"
+version = "2.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
+checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
dependencies = [
"form_urlencoded",
"idna",
"percent-encoding",
+ "serde",
]
[[package]]
@@ -1729,31 +1665,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
-name = "wasi"
-version = "0.14.2+wasi-0.2.4"
+name = "wasip2"
+version = "1.0.1+wasi-0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
+checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
dependencies = [
- "wit-bindgen-rt",
+ "wit-bindgen",
]
[[package]]
name = "wasm-bindgen"
-version = "0.2.100"
+version = "0.2.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
+checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d"
dependencies = [
"cfg-if",
"once_cell",
"rustversion",
"wasm-bindgen-macro",
+ "wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.100"
+version = "0.2.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
+checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19"
dependencies = [
"bumpalo",
"log",
@@ -1765,9 +1702,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-futures"
-version = "0.4.50"
+version = "0.4.54"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61"
+checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c"
dependencies = [
"cfg-if",
"js-sys",
@@ -1778,9 +1715,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.100"
+version = "0.2.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
+checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -1788,9 +1725,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.100"
+version = "0.2.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
+checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7"
dependencies = [
"proc-macro2",
"quote",
@@ -1801,18 +1738,18 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.100"
+version = "0.2.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
+checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1"
dependencies = [
"unicode-ident",
]
[[package]]
name = "web-sys"
-version = "0.3.77"
+version = "0.3.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
+checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -1842,13 +1779,19 @@ dependencies = [
[[package]]
name = "webpki-roots"
-version = "1.0.2"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2"
+checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8"
dependencies = [
"rustls-pki-types",
]
+[[package]]
+name = "windows-link"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
+
[[package]]
name = "windows-sys"
version = "0.52.0"
@@ -1860,11 +1803,20 @@ dependencies = [
[[package]]
name = "windows-sys"
-version = "0.59.0"
+version = "0.60.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
+checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
dependencies = [
- "windows-targets 0.52.6",
+ "windows-targets 0.53.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.61.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
+dependencies = [
+ "windows-link",
]
[[package]]
@@ -1885,18 +1837,19 @@ dependencies = [
[[package]]
name = "windows-targets"
-version = "0.53.2"
+version = "0.53.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef"
+checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
dependencies = [
- "windows_aarch64_gnullvm 0.53.0",
- "windows_aarch64_msvc 0.53.0",
- "windows_i686_gnu 0.53.0",
- "windows_i686_gnullvm 0.53.0",
- "windows_i686_msvc 0.53.0",
- "windows_x86_64_gnu 0.53.0",
- "windows_x86_64_gnullvm 0.53.0",
- "windows_x86_64_msvc 0.53.0",
+ "windows-link",
+ "windows_aarch64_gnullvm 0.53.1",
+ "windows_aarch64_msvc 0.53.1",
+ "windows_i686_gnu 0.53.1",
+ "windows_i686_gnullvm 0.53.1",
+ "windows_i686_msvc 0.53.1",
+ "windows_x86_64_gnu 0.53.1",
+ "windows_x86_64_gnullvm 0.53.1",
+ "windows_x86_64_msvc 0.53.1",
]
[[package]]
@@ -1907,9 +1860,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
[[package]]
name = "windows_aarch64_gnullvm"
-version = "0.53.0"
+version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
+checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
[[package]]
name = "windows_aarch64_msvc"
@@ -1919,9 +1872,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
[[package]]
name = "windows_aarch64_msvc"
-version = "0.53.0"
+version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
+checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
[[package]]
name = "windows_i686_gnu"
@@ -1931,9 +1884,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
[[package]]
name = "windows_i686_gnu"
-version = "0.53.0"
+version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
+checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
[[package]]
name = "windows_i686_gnullvm"
@@ -1943,9 +1896,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
[[package]]
name = "windows_i686_gnullvm"
-version = "0.53.0"
+version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
+checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
[[package]]
name = "windows_i686_msvc"
@@ -1955,9 +1908,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
[[package]]
name = "windows_i686_msvc"
-version = "0.53.0"
+version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
+checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
[[package]]
name = "windows_x86_64_gnu"
@@ -1967,9 +1920,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
[[package]]
name = "windows_x86_64_gnu"
-version = "0.53.0"
+version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
+checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
[[package]]
name = "windows_x86_64_gnullvm"
@@ -1979,9 +1932,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
[[package]]
name = "windows_x86_64_gnullvm"
-version = "0.53.0"
+version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
+checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
[[package]]
name = "windows_x86_64_msvc"
@@ -1991,18 +1944,15 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]]
name = "windows_x86_64_msvc"
-version = "0.53.0"
+version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
+checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
[[package]]
-name = "wit-bindgen-rt"
-version = "0.39.0"
+name = "wit-bindgen"
+version = "0.46.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
-dependencies = [
- "bitflags",
-]
+checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
[[package]]
name = "writeable"
@@ -2036,18 +1986,18 @@ dependencies = [
[[package]]
name = "zerocopy"
-version = "0.8.26"
+version = "0.8.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f"
+checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
-version = "0.8.26"
+version = "0.8.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181"
+checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
dependencies = [
"proc-macro2",
"quote",
@@ -2077,9 +2027,9 @@ dependencies = [
[[package]]
name = "zeroize"
-version = "1.8.1"
+version = "1.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
+checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
[[package]]
name = "zerotrie"
@@ -2094,9 +2044,9 @@ dependencies = [
[[package]]
name = "zerovec"
-version = "0.11.2"
+version = "0.11.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428"
+checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b"
dependencies = [
"yoke",
"zerofrom",
diff --git a/bindings/ruby/ext/css_inline/Cargo.toml b/bindings/ruby/ext/css_inline/Cargo.toml
index 9d9c02cf..9c1f0d19 100644
--- a/bindings/ruby/ext/css_inline/Cargo.toml
+++ b/bindings/ruby/ext/css_inline/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "css-inline"
+name = "css-inline-ruby"
version = "0.17.0"
authors = ["Dmitry Dygalo "]
edition = "2021"
@@ -20,6 +20,7 @@ magnus = "0.7"
rayon = "1"
[dependencies.css-inline]
-version = "0.17"
+path = "../../../../css-inline"
+version = "*"
default-features = false
features = ["http", "file", "stylesheet-cache"]
From 8d82c9a2acc9076c66edb491f762f68dc301b6f1 Mon Sep 17 00:00:00 2001
From: Matt Dziuban
Date: Fri, 17 Oct 2025 14:38:24 -0400
Subject: [PATCH 6/8] chore: Fix python clippy doc warnings.
---
bindings/python/src/lib.rs | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/bindings/python/src/lib.rs b/bindings/python/src/lib.rs
index 9f5019e2..047a8a3d 100644
--- a/bindings/python/src/lib.rs
+++ b/bindings/python/src/lib.rs
@@ -99,7 +99,7 @@ impl StylesheetCache {
}
}
-/// CSSInliner(inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, minify_css=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)
+/// `CSSInliner(inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, minify_css=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)`
///
/// Customizable CSS inliner.
#[pyclass]
@@ -176,7 +176,7 @@ impl CSSInliner {
Ok(self.inner.inline(html).map_err(InlineErrorWrapper)?)
}
- /// inline_fragment(html, css)
+ /// `inline_fragment(html, css)`
///
/// Inline CSS into the given HTML fragment
#[pyo3(text_signature = "(html, css)")]
@@ -187,7 +187,7 @@ impl CSSInliner {
.map_err(InlineErrorWrapper)?)
}
- /// inline_many(htmls)
+ /// `inline_many(htmls)`
///
/// Inline CSS in multiple HTML documents
#[pyo3(text_signature = "(htmls)")]
@@ -195,7 +195,7 @@ impl CSSInliner {
inline_many_impl(&self.inner, htmls)
}
- /// inline_many_fragments(htmls, css)
+ /// `inline_many_fragments(htmls, css)`
///
/// Inline CSS in multiple HTML documents
#[pyo3(text_signature = "(htmls, fragments)")]
@@ -208,7 +208,7 @@ impl CSSInliner {
}
}
-/// inline(html, inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, minify_css=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)
+/// `inline(html, inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, minify_css=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)`
///
/// Inline CSS in the given HTML document
#[pyfunction]
@@ -244,7 +244,7 @@ fn inline(
Ok(inliner.inline(html).map_err(InlineErrorWrapper)?)
}
-/// inline_fragment(html, css, inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, minify_css=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)
+/// `inline_fragment(html, css, inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, minify_css=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)`
///
/// Inline CSS in the given HTML fragment
#[pyfunction]
@@ -283,7 +283,7 @@ fn inline_fragment(
.map_err(InlineErrorWrapper)?)
}
-/// inline_many(htmls, inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, minify_css=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)
+/// `inline_many(htmls, inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, minify_css=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)`
///
/// Inline CSS in multiple HTML documents
#[pyfunction]
@@ -332,7 +332,7 @@ fn inline_many_impl(
Ok(output.map_err(InlineErrorWrapper)?)
}
-/// inline_many_fragments(htmls, css, inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, minify_css=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)
+/// `inline_many_fragments(htmls, css, inline_style_tags=True, keep_style_tags=False, keep_link_tags=False, keep_at_rules=False, minify_css=False, base_url=None, load_remote_stylesheets=True, cache=None, extra_css=None, preallocate_node_capacity=32)`
///
/// Inline CSS in multiple HTML fragments
#[pyfunction]
@@ -385,7 +385,7 @@ fn inline_many_fragments_impl(
Ok(output.map_err(InlineErrorWrapper)?)
}
-#[allow(dead_code, clippy::needless_raw_string_hashes)]
+#[allow(dead_code, clippy::doc_markdown, clippy::needless_raw_string_hashes)]
mod build {
include!(concat!(env!("OUT_DIR"), "/built.rs"));
}
From da0e3c914755b6ddc08b4921465317b78a2484ea Mon Sep 17 00:00:00 2001
From: Matt Dziuban
Date: Fri, 17 Oct 2025 15:03:52 -0400
Subject: [PATCH 7/8] feat: Add keep_at_rules option to python and javascript
bindings.
---
bindings/javascript/js-binding.d.ts | 3 ++-
bindings/python/css_inline.pyi | 6 +++++-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/bindings/javascript/js-binding.d.ts b/bindings/javascript/js-binding.d.ts
index 541bb38a..279ed1c0 100644
--- a/bindings/javascript/js-binding.d.ts
+++ b/bindings/javascript/js-binding.d.ts
@@ -19,8 +19,9 @@ export interface Options {
keepStyleTags?: boolean
/** Keep "link" tags after inlining. */
keepLinkTags?: boolean
+ /** Keep "at-rules" after inlining. */
+ keepAtRules?: boolean
/** Remove trailing semicolons and spaces between properties and values. */
- // TODO - is it correct that `keepAtRules` isn't here?
minifyCss?: boolean
/** Used for loading external stylesheets via relative URLs. */
baseUrl?: string
diff --git a/bindings/python/css_inline.pyi b/bindings/python/css_inline.pyi
index 86427172..65f3f91c 100644
--- a/bindings/python/css_inline.pyi
+++ b/bindings/python/css_inline.pyi
@@ -7,7 +7,7 @@ class CSSInliner:
inline_style_tags: bool = True,
keep_style_tags: bool = False,
keep_link_tags: bool = False,
- # TODO - is it correct that `keep_at_rules` isn't here?
+ keep_at_rules: bool = False,
minify_css: bool = False,
base_url: str | None = None,
load_remote_stylesheets: bool = True,
@@ -25,6 +25,7 @@ def inline(
inline_style_tags: bool = True,
keep_style_tags: bool = False,
keep_link_tags: bool = False,
+ keep_at_rules: bool = False,
minify_css: bool = False,
base_url: str | None = None,
load_remote_stylesheets: bool = True,
@@ -38,6 +39,7 @@ def inline_fragment(
inline_style_tags: bool = True,
keep_style_tags: bool = False,
keep_link_tags: bool = False,
+ keep_at_rules: bool = False,
minify_css: bool = False,
base_url: str | None = None,
load_remote_stylesheets: bool = True,
@@ -50,6 +52,7 @@ def inline_many(
inline_style_tags: bool = True,
keep_style_tags: bool = False,
keep_link_tags: bool = False,
+ keep_at_rules: bool = False,
minify_css: bool = False,
base_url: str | None = None,
load_remote_stylesheets: bool = True,
@@ -63,6 +66,7 @@ def inline_many_fragments(
inline_style_tags: bool = True,
keep_style_tags: bool = False,
keep_link_tags: bool = False,
+ keep_at_rules: bool = False,
minify_css: bool = False,
base_url: str | None = None,
load_remote_stylesheets: bool = True,
From 6f5b6d9236ea0eb521f64d6b1bd1a5e9a01e6b74 Mon Sep 17 00:00:00 2001
From: Matt Dziuban
Date: Sat, 18 Oct 2025 08:30:40 -0400
Subject: [PATCH 8/8] chore: Bump MSRV to 1.80.
---
CHANGELOG.md | 4 ++++
bindings/javascript/CHANGELOG.md | 4 ++++
bindings/javascript/Cargo.toml | 2 +-
bindings/python/CHANGELOG.md | 4 ++++
bindings/python/Cargo.toml | 2 +-
css-inline/Cargo.toml | 2 +-
6 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0d0173d1..e73338d1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,10 @@
- `minify_css` option [#12](https://github.com/Stranger6667/css-inline/issues/12)
+### Changed
+
+- Bump MSRV to `1.80`
+
## [0.17.0] - 2025-07-26
### Added
diff --git a/bindings/javascript/CHANGELOG.md b/bindings/javascript/CHANGELOG.md
index 821cc2f1..8fdab55e 100644
--- a/bindings/javascript/CHANGELOG.md
+++ b/bindings/javascript/CHANGELOG.md
@@ -6,6 +6,10 @@
- `minify_css` option [#12](https://github.com/Stranger6667/css-inline/issues/12)
+### Changed
+
+- Bump MSRV to `1.80`
+
## [0.17.0] - 2025-07-26
### Added
diff --git a/bindings/javascript/Cargo.toml b/bindings/javascript/Cargo.toml
index 6203b640..ecf6ff78 100644
--- a/bindings/javascript/Cargo.toml
+++ b/bindings/javascript/Cargo.toml
@@ -9,7 +9,7 @@ repository = "https://github.com/Stranger6667/css-inline"
keywords = ["css", "html", "email", "stylesheet", "inlining"]
categories = ["web-programming"]
license = "MIT"
-rust-version = "1.77"
+rust-version = "1.80"
include = ["src/*.rs", "LICENSE", "README.md", "CHANGELOG.md"]
[lib]
diff --git a/bindings/python/CHANGELOG.md b/bindings/python/CHANGELOG.md
index 460bfee8..a4815613 100644
--- a/bindings/python/CHANGELOG.md
+++ b/bindings/python/CHANGELOG.md
@@ -6,6 +6,10 @@
- `minify_css` option [#12](https://github.com/Stranger6667/css-inline/issues/12)
+### Changed
+
+- Bump MSRV to `1.80`
+
## [0.17.0] - 2025-07-26
### Added
diff --git a/bindings/python/Cargo.toml b/bindings/python/Cargo.toml
index 66208aaa..beb881de 100644
--- a/bindings/python/Cargo.toml
+++ b/bindings/python/Cargo.toml
@@ -3,7 +3,7 @@ name = "css-inline-python"
version = "0.17.0"
authors = ["Dmitry Dygalo "]
edition = "2021"
-rust-version = "1.75"
+rust-version = "1.80"
include = ["src/lib.rs", "README.md", "CHANGELOG.md", "build.rs"]
[lib]
diff --git a/css-inline/Cargo.toml b/css-inline/Cargo.toml
index ff03d5df..d6255ce4 100644
--- a/css-inline/Cargo.toml
+++ b/css-inline/Cargo.toml
@@ -16,7 +16,7 @@ exclude = [
"tests",
]
categories = ["web-programming"]
-rust-version = "1.75"
+rust-version = "1.80"
[[bin]]
name = "css-inline"