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:
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() {