Check uniqueness of server function names at registration time (#388)

* Check uniqueness of server function names at registration time, and stop leaking src file path in release mode

* Fix missing dev-dependency
This commit is contained in:
Greg Johnston 2023-01-27 06:57:32 -05:00 committed by GitHub
parent b861f84e40
commit 1563d237d0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 4 deletions

View file

@ -20,7 +20,6 @@ prettyplease = "0.1"
proc-macro-error = "1"
proc-macro2 = "1"
quote = "1"
serde = "1"
syn = { version = "1", features = ["full"] }
syn-rsx = "0.9"
uuid = { version = "1", features = ["v4"] }
@ -33,6 +32,7 @@ convert_case = "0.6.0"
[dev-dependencies]
log = "0.4"
typed-builder = "0.11"
leptos = { path = "../leptos" }
[features]
default = ["ssr"]

View file

@ -43,7 +43,7 @@ pub fn server_macro_impl(args: proc_macro::TokenStream, s: TokenStream2) -> Resu
let block = body.block;
cfg_if! {
if #[cfg(not(feature = "stable"))] {
if #[cfg(all(not(feature = "stable"), debug_assertions))] {
use proc_macro::Span;
let span = Span::call_site();
#[cfg(not(target_os = "windows"))]

View file

@ -326,9 +326,19 @@ where
let mut write = REGISTERED_SERVER_FUNCTIONS
.write()
.map_err(|e| ServerFnError::Registration(e.to_string()))?;
write.insert(Self::url(), run_server_fn);
let prev = write.insert(Self::url(), run_server_fn);
Ok(())
// if there was already a server function with this key,
// return Err
match prev {
Some(_) => Err(ServerFnError::Registration(format!(
"There was already a server function registered at {:?}. \
This can happen if you use the same server function name in two different modules
on `stable` or in `release` mode.",
Self::url()
))),
None => Ok(()),
}
}
}