Skip to content

Commit f93e41e

Browse files
committed
Add TypeScript compile checks
1 parent d91cd1b commit f93e41e

File tree

6 files changed

+71
-16
lines changed

6 files changed

+71
-16
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: 54 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,24 @@
1+
use std::io::Write;
2+
13
use cw_schema::Schemaifier;
4+
use serde::Serialize;
25

3-
#[derive(Schemaifier)]
6+
#[derive(Schemaifier, Serialize)]
47
struct Owo {
58
field_1: u32,
69
field_2: String,
710
}
811

9-
#[derive(Schemaifier)]
12+
#[derive(Schemaifier, Serialize)]
1013
struct Uwu(String, u32);
1114

12-
#[derive(Schemaifier)]
15+
#[derive(Schemaifier, Serialize)]
1316
struct Òwó;
1417

15-
#[derive(Schemaifier)]
18+
#[derive(Schemaifier, Serialize)]
1619
enum Empty {}
1720

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

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: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,6 @@ impl SchemaVisitor {
198198
}
199199

200200
pub trait Schemaifier {
201-
#[doc(hidden)]
202201
fn id() -> Identifier {
203202
Identifier::of::<Self>()
204203
}

0 commit comments

Comments
 (0)