commit d4e910c321e256c8cc035243eaf312eebc047bfd
parent 2709a7ae5e8a2f19e0d1b7c5f4bcdb4711e5bdd0
Author: triesap <tyson@radroots.org>
Date: Wed, 24 Jun 2026 06:32:26 +0000
dto: render core bindings from source roots
Diffstat:
5 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/tools/sdk_xtask_import/Cargo.toml b/tools/sdk_xtask_import/Cargo.toml
@@ -17,7 +17,6 @@ path = "src/main.rs"
dto_bindgen_core = { workspace = true }
radroots_sdk_binding_model = { path = "../../crates/binding_model" }
radroots_core = { workspace = true, features = ["dto-bindgen"] }
-radroots_core_bindings = { path = "../../crates/core_bindings" }
radroots_events = { workspace = true, features = ["dto-bindgen"] }
radroots_events_bindings = { path = "../../crates/events_bindings" }
radroots_events_indexed_bindings = { path = "../../crates/events_indexed_bindings" }
diff --git a/tools/sdk_xtask_import/src/check.rs b/tools/sdk_xtask_import/src/check.rs
@@ -28,7 +28,7 @@ pub fn check() -> Result<(), String> {
for spec in wasm_package_specs() {
check_wasm_package_surface(&root, *spec)?;
}
- for output in package_outputs() {
+ for output in package_outputs()? {
for expected in output.files() {
let path = root
.join(output.spec.package_dir)
diff --git a/tools/sdk_xtask_import/src/dto_roots.rs b/tools/sdk_xtask_import/src/dto_roots.rs
@@ -1,5 +1,7 @@
use dto_bindgen_core::{Registry, RootDescriptor, build_registry};
+use crate::dto_render::{DtoRegistryRenderOptions, DtoTypesModule, render_registry_types};
+
#[derive(Clone, Copy, Debug)]
pub struct DtoPackageRootSet {
pub package_key: &'static str,
@@ -103,6 +105,19 @@ pub fn package_root_set(package_key: &str) -> Option<&'static DtoPackageRootSet>
.find(|root_set| root_set.package_key == package_key)
}
+pub fn core_types_module() -> Result<DtoTypesModule, String> {
+ let root_set = package_root_set("core").ok_or_else(|| "missing core DTO roots".to_owned())?;
+ let rendered =
+ render_registry_types(&root_set.registry(), &DtoRegistryRenderOptions::default())?;
+ Ok(DtoTypesModule::new(
+ rendered.imports_ts().unwrap_or_default(),
+ format!(
+ "export type RadrootsCoreCurrency = string;\n\nexport type RadrootsCoreDecimal = string;\n\n{}",
+ rendered.body_ts()
+ ),
+ ))
+}
+
fn core_roots() -> Vec<RootDescriptor> {
radroots_core::dto::dto_roots().into_iter().collect()
}
diff --git a/tools/sdk_xtask_import/src/generate.rs b/tools/sdk_xtask_import/src/generate.rs
@@ -3,7 +3,7 @@ use crate::{fs::workspace_root, output::package_outputs, package_matrix::validat
pub fn generate_ts() -> Result<(), String> {
validate_package_matrix()?;
let root = workspace_root()?;
- for output in package_outputs() {
+ for output in package_outputs()? {
for generated_file in output.files() {
let path = root
.join(output.spec.package_dir)
diff --git a/tools/sdk_xtask_import/src/output.rs b/tools/sdk_xtask_import/src/output.rs
@@ -1,5 +1,6 @@
use crate::{
dto_render::DtoTypesModule,
+ dto_roots,
manifest::manifest_file_name,
manifest::package_manifest,
package_matrix::{PackageSpec, package_specs},
@@ -76,11 +77,11 @@ impl PackageOutput {
}
}
-pub fn package_outputs() -> Vec<PackageOutput> {
- vec![
+pub fn package_outputs() -> Result<Vec<PackageOutput>, String> {
+ Ok(vec![
PackageOutput {
spec: spec_by_key("core"),
- types_ts: Some(TsSource::Module(radroots_core_bindings::types_module())),
+ types_ts: Some(TsSource::DtoRegistry(dto_roots::core_types_module()?)),
types_imports_ts: None,
constants_ts: None,
kinds_ts: None,
@@ -135,7 +136,7 @@ pub fn package_outputs() -> Vec<PackageOutput> {
constants_ts: None,
kinds_ts: None,
},
- ]
+ ])
}
fn spec_by_key(key: &str) -> PackageSpec {
@@ -277,6 +278,7 @@ mod tests {
#[test]
fn includes_core_and_types_outputs() {
let package_names = package_outputs()
+ .expect("package outputs")
.into_iter()
.map(|output| output.spec.package_name)
.collect::<Vec<_>>();