lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README | LICENSE

commit eab0a4156d209ff55e150c89c85ea322e06408a9
parent d49581c87bcec5c2fad750a01c774dbf07e48db3
Author: triesap <tyson@radroots.org>
Date:   Fri, 20 Feb 2026 14:07:37 +0000

build: make ts-rs export paths resilient for crates layout

Diffstat:
M.gitignore | 7+++++--
Mevents/build.rs | 22++++++++++++++++++++--
Midentity/build.rs | 22++++++++++++++++++++--
Mtangle-db-schema/build.rs | 22++++++++++++++++++++--
Mtrade/build.rs | 22++++++++++++++++++++--
Mtypes/build.rs | 22++++++++++++++++++++--
6 files changed, 105 insertions(+), 12 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -43,4 +43,8 @@ diff*.txt prompt*.txt # Dev -.local -\ No newline at end of file +.local + +# temporary guard: test-generated ts artifacts +**/bindings/constants.ts +**/bindings/kinds.ts diff --git a/events/build.rs b/events/build.rs @@ -1,10 +1,28 @@ -use std::{env, fs, path::PathBuf}; +use std::{ + env, fs, + path::{Path, PathBuf}, +}; + +fn workspace_root(manifest_dir: &Path) -> PathBuf { + let parent = manifest_dir.parent().unwrap_or(manifest_dir); + if parent.file_name().and_then(|name| name.to_str()) == Some("crates") { + parent.parent().unwrap_or(parent).to_path_buf() + } else { + parent.to_path_buf() + } +} fn export_dir(crate_name: &str) -> PathBuf { if let Some(export_dir) = env::var_os("RADROOTS_TS_RS_EXPORT_DIR") { return PathBuf::from(export_dir); } - PathBuf::from(format!("../target/ts-rs/{crate_name}")) + let manifest_dir = PathBuf::from( + env::var("CARGO_MANIFEST_DIR").expect("missing required env var CARGO_MANIFEST_DIR"), + ); + workspace_root(&manifest_dir) + .join("target") + .join("ts-rs") + .join(crate_name) } fn main() { diff --git a/identity/build.rs b/identity/build.rs @@ -1,10 +1,28 @@ -use std::{env, fs, path::PathBuf}; +use std::{ + env, fs, + path::{Path, PathBuf}, +}; + +fn workspace_root(manifest_dir: &Path) -> PathBuf { + let parent = manifest_dir.parent().unwrap_or(manifest_dir); + if parent.file_name().and_then(|name| name.to_str()) == Some("crates") { + parent.parent().unwrap_or(parent).to_path_buf() + } else { + parent.to_path_buf() + } +} fn export_dir(crate_name: &str) -> PathBuf { if let Some(export_dir) = env::var_os("RADROOTS_TS_RS_EXPORT_DIR") { return PathBuf::from(export_dir); } - PathBuf::from(format!("../target/ts-rs/{crate_name}")) + let manifest_dir = PathBuf::from( + env::var("CARGO_MANIFEST_DIR").expect("missing required env var CARGO_MANIFEST_DIR"), + ); + workspace_root(&manifest_dir) + .join("target") + .join("ts-rs") + .join(crate_name) } fn main() { diff --git a/tangle-db-schema/build.rs b/tangle-db-schema/build.rs @@ -1,10 +1,28 @@ -use std::{env, fs, path::PathBuf}; +use std::{ + env, fs, + path::{Path, PathBuf}, +}; + +fn workspace_root(manifest_dir: &Path) -> PathBuf { + let parent = manifest_dir.parent().unwrap_or(manifest_dir); + if parent.file_name().and_then(|name| name.to_str()) == Some("crates") { + parent.parent().unwrap_or(parent).to_path_buf() + } else { + parent.to_path_buf() + } +} fn export_dir(crate_name: &str) -> PathBuf { if let Some(export_dir) = env::var_os("RADROOTS_TS_RS_EXPORT_DIR") { return PathBuf::from(export_dir); } - PathBuf::from(format!("../target/ts-rs/{crate_name}")) + let manifest_dir = PathBuf::from( + env::var("CARGO_MANIFEST_DIR").expect("missing required env var CARGO_MANIFEST_DIR"), + ); + workspace_root(&manifest_dir) + .join("target") + .join("ts-rs") + .join(crate_name) } fn main() { diff --git a/trade/build.rs b/trade/build.rs @@ -1,10 +1,28 @@ -use std::{env, fs, path::PathBuf}; +use std::{ + env, fs, + path::{Path, PathBuf}, +}; + +fn workspace_root(manifest_dir: &Path) -> PathBuf { + let parent = manifest_dir.parent().unwrap_or(manifest_dir); + if parent.file_name().and_then(|name| name.to_str()) == Some("crates") { + parent.parent().unwrap_or(parent).to_path_buf() + } else { + parent.to_path_buf() + } +} fn export_dir(crate_name: &str) -> PathBuf { if let Some(export_dir) = env::var_os("RADROOTS_TS_RS_EXPORT_DIR") { return PathBuf::from(export_dir); } - PathBuf::from(format!("../target/ts-rs/{crate_name}")) + let manifest_dir = PathBuf::from( + env::var("CARGO_MANIFEST_DIR").expect("missing required env var CARGO_MANIFEST_DIR"), + ); + workspace_root(&manifest_dir) + .join("target") + .join("ts-rs") + .join(crate_name) } fn main() { diff --git a/types/build.rs b/types/build.rs @@ -1,10 +1,28 @@ -use std::{env, fs, path::PathBuf}; +use std::{ + env, fs, + path::{Path, PathBuf}, +}; + +fn workspace_root(manifest_dir: &Path) -> PathBuf { + let parent = manifest_dir.parent().unwrap_or(manifest_dir); + if parent.file_name().and_then(|name| name.to_str()) == Some("crates") { + parent.parent().unwrap_or(parent).to_path_buf() + } else { + parent.to_path_buf() + } +} fn export_dir(crate_name: &str) -> PathBuf { if let Some(export_dir) = env::var_os("RADROOTS_TS_RS_EXPORT_DIR") { return PathBuf::from(export_dir); } - PathBuf::from(format!("../target/ts-rs/{crate_name}")) + let manifest_dir = PathBuf::from( + env::var("CARGO_MANIFEST_DIR").expect("missing required env var CARGO_MANIFEST_DIR"), + ); + workspace_root(&manifest_dir) + .join("target") + .join("ts-rs") + .join(crate_name) } fn main() {