rolldown_plugin_utils 0.1.0

Shared utilities for Rolldown plugins
Documentation
use rolldown_utils::{pattern_filter::normalize_path, url::clean_url};

pub fn inject_query(url: &str, query: &str) -> String {
  let mut out = String::with_capacity(url.len() + query.len() + 1);
  let normalized = normalize_path(clean_url(url));

  out.push_str(&normalized);
  out.push('?');
  out.push_str(query);

  if url.len() != normalized.len() {
    let postfix = &url[normalized.len()..];
    if let Some(postfix) = postfix.strip_prefix('?') {
      out.push('&');
      out.push_str(postfix);
    } else {
      out.push_str(postfix);
    }
  }

  out
}

#[test]
fn test() {
  assert_eq!(inject_query("a/b", "url"), "a/b?url");
  assert_eq!(inject_query("a/b?c", "url"), "a/b?url&c");
  assert_eq!(inject_query("a/b?c&d=e", "url"), "a/b?url&c&d=e");
}