commit 40ebaac9095e506c9453b2936ed2771353d2c90d
parent 76053de71d5fec5076b864e2ff79a26b17fc71d1
Author: triesap <tyson@radroots.org>
Date: Thu, 11 Jun 2026 06:19:44 -0700
feat(bindings): generate identity and indexed packages
Diffstat:
11 files changed, 88 insertions(+), 2 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
@@ -681,6 +681,8 @@ name = "radroots_sdk_xtask"
version = "0.1.0"
dependencies = [
"radroots_core_bindings",
+ "radroots_events_indexed_bindings",
+ "radroots_identity_bindings",
"radroots_types_bindings",
"serde_json",
]
diff --git a/crates/events_indexed_bindings/src/lib.rs b/crates/events_indexed_bindings/src/lib.rs
@@ -1 +1,26 @@
pub use radroots_events_indexed as upstream;
+
+pub const TYPES_TS: &str = r#"export type RadrootsEventsIndexedShardId = string;
+
+export type RadrootsEventsIndexedIdRange = { start: string, end: string, };
+
+export type RadrootsEventsIndexedShardMetadata = { file: string, count: number, first_id: string, last_id: string, first_published_at: number, last_published_at: number, sha256: string, };
+
+export type RadrootsEventsIndexedManifest = { country: string, total: number, shard_size: number, first_published_at: number, last_published_at: number, shards: Array<RadrootsEventsIndexedShardMetadata>, };
+
+export type RadrootsEventsIndexedShardCheckpoint = { shard_id: RadrootsEventsIndexedShardId, last_created_at: number, last_event_id: string | null, cursor: string | null, };
+
+export type RadrootsEventsIndexedIndexCheckpoint = { generated_at: number, shards: Array<RadrootsEventsIndexedShardCheckpoint>, };
+"#;
+
+#[cfg(test)]
+mod tests {
+ use super::TYPES_TS;
+
+ #[test]
+ fn exports_indexed_manifest_and_checkpoint_types() {
+ assert!(TYPES_TS.contains("export type RadrootsEventsIndexedManifest"));
+ assert!(TYPES_TS.contains("export type RadrootsEventsIndexedIndexCheckpoint"));
+ assert!(TYPES_TS.contains("export type RadrootsEventsIndexedShardId = string"));
+ }
+}
diff --git a/crates/identity_bindings/src/lib.rs b/crates/identity_bindings/src/lib.rs
@@ -1 +1,16 @@
pub use radroots_identity as upstream;
+
+pub const CONSTANTS_TS: &str =
+ include_str!("../../../testdata/baseline/current-radroots-generated/identity/constants.ts");
+
+#[cfg(test)]
+mod tests {
+ use super::CONSTANTS_TS;
+
+ #[test]
+ fn preserves_username_constant_exports() {
+ assert!(CONSTANTS_TS.contains("RADROOTS_USERNAME_MIN_LEN"));
+ assert!(CONSTANTS_TS.contains("RADROOTS_USERNAME_MAX_LEN"));
+ assert!(CONSTANTS_TS.contains("RADROOTS_USERNAME_REGEX"));
+ }
+}
diff --git a/crates/xtask/Cargo.toml b/crates/xtask/Cargo.toml
@@ -14,5 +14,7 @@ path = "src/main.rs"
[dependencies]
radroots_core_bindings = { path = "../core_bindings" }
+radroots_events_indexed_bindings = { path = "../events_indexed_bindings" }
+radroots_identity_bindings = { path = "../identity_bindings" }
radroots_types_bindings = { path = "../types_bindings" }
serde_json = "1"
diff --git a/crates/xtask/src/output.rs b/crates/xtask/src/output.rs
@@ -54,6 +54,16 @@ pub fn package_outputs() -> Vec<PackageOutput> {
constants_ts: None,
},
PackageOutput {
+ spec: spec_by_key("events_indexed"),
+ types_ts: Some(radroots_events_indexed_bindings::TYPES_TS),
+ constants_ts: None,
+ },
+ PackageOutput {
+ spec: spec_by_key("identity"),
+ types_ts: None,
+ constants_ts: Some(radroots_identity_bindings::CONSTANTS_TS),
+ },
+ PackageOutput {
spec: spec_by_key("types"),
types_ts: Some(radroots_types_bindings::TYPES_TS),
constants_ts: None,
@@ -115,6 +125,8 @@ mod tests {
.map(|output| output.spec.package_name)
.collect::<Vec<_>>();
assert!(package_names.contains(&"@radroots/core-bindings"));
+ assert!(package_names.contains(&"@radroots/events-indexed-bindings"));
+ assert!(package_names.contains(&"@radroots/identity-bindings"));
assert!(package_names.contains(&"@radroots/types-bindings"));
}
}
diff --git a/packages/events-indexed-bindings/src/generated/sdk-manifest.json b/packages/events-indexed-bindings/src/generated/sdk-manifest.json
@@ -0,0 +1,6 @@
+{
+ "crate": "radroots_events_indexed_bindings",
+ "generated": true,
+ "generator": "radroots_sdk_xtask",
+ "package": "@radroots/events-indexed-bindings"
+}
diff --git a/packages/events-indexed-bindings/src/generated/types.ts b/packages/events-indexed-bindings/src/generated/types.ts
@@ -0,0 +1,13 @@
+// @generated by cargo xtask generate ts
+// Do not edit by hand.
+export type RadrootsEventsIndexedShardId = string;
+
+export type RadrootsEventsIndexedIdRange = { start: string, end: string, };
+
+export type RadrootsEventsIndexedShardMetadata = { file: string, count: number, first_id: string, last_id: string, first_published_at: number, last_published_at: number, sha256: string, };
+
+export type RadrootsEventsIndexedManifest = { country: string, total: number, shard_size: number, first_published_at: number, last_published_at: number, shards: Array<RadrootsEventsIndexedShardMetadata>, };
+
+export type RadrootsEventsIndexedShardCheckpoint = { shard_id: RadrootsEventsIndexedShardId, last_created_at: number, last_event_id: string | null, cursor: string | null, };
+
+export type RadrootsEventsIndexedIndexCheckpoint = { generated_at: number, shards: Array<RadrootsEventsIndexedShardCheckpoint>, };
diff --git a/packages/events-indexed-bindings/src/index.ts b/packages/events-indexed-bindings/src/index.ts
@@ -1 +1 @@
-export {};
+export * from "./generated/types.js";
diff --git a/packages/identity-bindings/src/generated/constants.ts b/packages/identity-bindings/src/generated/constants.ts
@@ -0,0 +1,5 @@
+// @generated by cargo xtask generate ts
+// Do not edit by hand.
+export const RADROOTS_USERNAME_MIN_LEN = 3;
+export const RADROOTS_USERNAME_MAX_LEN = 30;
+export const RADROOTS_USERNAME_REGEX = "^(?!.*\.\.)(?!\.)(?!.*\.$)[a-z0-9._-]{3,30}$";
diff --git a/packages/identity-bindings/src/generated/sdk-manifest.json b/packages/identity-bindings/src/generated/sdk-manifest.json
@@ -0,0 +1,6 @@
+{
+ "crate": "radroots_identity_bindings",
+ "generated": true,
+ "generator": "radroots_sdk_xtask",
+ "package": "@radroots/identity-bindings"
+}
diff --git a/packages/identity-bindings/src/index.ts b/packages/identity-bindings/src/index.ts
@@ -1 +1 @@
-export {};
+export * from "./generated/constants.js";