Skip to content

Commit 4de3214

Browse files
committed
Add TypeScript compile checks
1 parent d91cd1b commit 4de3214

File tree

6 files changed

+77
-18
lines changed

6 files changed

+77
-18
lines changed

Cargo.lock

Lines changed: 12 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/cw-schema-codegen/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,6 @@ simple_logger = { version = "5.0.0", features = ["stderr"] }
2222

2323
[dev-dependencies]
2424
insta = "1.40.0"
25+
serde = { workspace = true, features = ["derive"] }
26+
serde_json = "1.0.128"
27+
tempfile = "3.14.0"

packages/cw-schema-codegen/src/typescript/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use self::template::{
22
EnumTemplate, EnumVariantTemplate, FieldTemplate, StructTemplate, TypeTemplate,
33
};
4-
use heck::ToPascalCase;
54
use std::{borrow::Cow, io};
65

76
pub mod template;

packages/cw-schema-codegen/tests/typescript.rs

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
use cw_schema::Schemaifier;
2+
use serde::Serialize;
3+
use std::io::Write;
24

3-
#[derive(Schemaifier)]
5+
#[derive(Schemaifier, Serialize)]
46
struct Owo {
57
field_1: u32,
68
field_2: String,
79
}
810

9-
#[derive(Schemaifier)]
11+
#[derive(Schemaifier, Serialize)]
1012
struct Uwu(String, u32);
1113

12-
#[derive(Schemaifier)]
14+
#[derive(Schemaifier, Serialize)]
1315
struct Òwó;
1416

15-
#[derive(Schemaifier)]
17+
#[derive(Schemaifier, Serialize)]
1618
enum Empty {}
1719

18-
#[derive(Schemaifier)]
20+
#[derive(Schemaifier, Serialize)]
1921
enum Hehehe {
2022
A,
2123
B(u32),
@@ -52,3 +54,49 @@ fn codegen_snap() {
5254
insta::assert_snapshot!(output);
5355
}
5456
}
57+
58+
#[test]
59+
fn assert_validity() {
60+
let schemas = [
61+
cw_schema::schema_of::<Owo>(),
62+
cw_schema::schema_of::<Uwu>(),
63+
cw_schema::schema_of::<Òwó>(),
64+
cw_schema::schema_of::<Empty>(),
65+
cw_schema::schema_of::<Hehehe>(),
66+
];
67+
68+
for schema in schemas {
69+
let cw_schema::Schema::V1(schema) = schema else {
70+
unreachable!();
71+
};
72+
73+
let output = schema
74+
.definitions
75+
.iter()
76+
.map(|node| {
77+
let mut buf = Vec::new();
78+
cw_schema_codegen::typescript::process_node(&mut buf, &schema, node).unwrap();
79+
String::from_utf8(buf).unwrap()
80+
})
81+
.collect::<String>();
82+
83+
let mut file = tempfile::NamedTempFile::with_suffix(".ts").unwrap();
84+
file.write_all(output.as_bytes()).unwrap();
85+
file.flush().unwrap();
86+
87+
let output = std::process::Command::new("npx")
88+
.arg("--package=typescript")
89+
.arg("--")
90+
.arg("tsc")
91+
.arg(file.path())
92+
.output()
93+
.unwrap();
94+
95+
assert!(
96+
output.status.success(),
97+
"stdout: {stdout}, stderr: {stderr}",
98+
stdout = String::from_utf8_lossy(&output.stdout),
99+
stderr = String::from_utf8_lossy(&output.stderr)
100+
);
101+
}
102+
}

packages/cw-schema-derive/src/expand.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,7 @@ fn expand_enum(mut meta: ContainerMeta, input: DataEnum) -> syn::Result<TokenStr
375375
let (impl_generics, ty_generics, where_clause) = meta.generics.split_for_impl();
376376

377377
Ok(quote! {
378+
#[automatically_derived]
378379
impl #impl_generics #crate_path::Schemaifier for #name #ty_generics #where_clause {
379380
fn visit_schema(visitor: &mut #crate_path::SchemaVisitor) -> #crate_path::DefinitionReference {
380381
let node = #crate_path::Node {
@@ -461,6 +462,7 @@ fn expand_struct(mut meta: ContainerMeta, input: DataStruct) -> syn::Result<Toke
461462
let (impl_generics, ty_generics, where_clause) = meta.generics.split_for_impl();
462463

463464
Ok(quote! {
465+
#[automatically_derived]
464466
impl #impl_generics #crate_path::Schemaifier for #name #ty_generics #where_clause {
465467
fn visit_schema(visitor: &mut #crate_path::SchemaVisitor) -> #crate_path::DefinitionReference {
466468
let node = {

packages/cw-schema/src/lib.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,16 @@ impl Identifier {
153153
//
154154
// Seems more robust than the previous implementation.
155155
trait NonStaticAny {
156-
fn get_type_id(&self) -> TypeId where Self: 'static;
156+
fn get_type_id(&self) -> TypeId
157+
where
158+
Self: 'static;
157159
}
158160

159161
impl<T: ?Sized> NonStaticAny for PhantomData<T> {
160-
fn get_type_id(&self) -> TypeId where Self: 'static {
162+
fn get_type_id(&self) -> TypeId
163+
where
164+
Self: 'static,
165+
{
161166
TypeId::of::<T>()
162167
}
163168
}
@@ -198,7 +203,6 @@ impl SchemaVisitor {
198203
}
199204

200205
pub trait Schemaifier {
201-
#[doc(hidden)]
202206
fn id() -> Identifier {
203207
Identifier::of::<Self>()
204208
}

0 commit comments

Comments
 (0)