1pub mod lowering;
4pub mod naming;
5pub mod printer;
6pub mod runtime;
7
8use std::path::PathBuf;
9
10use zynk_codegen::{GeneratedFile, GenerationContext, GenerationResult, Generator};
11use zynk_schema::ApiGraph;
12
13pub fn generate(graph: &ApiGraph) -> GenerationResult {
15 let api = printer::print_api(graph);
16 GenerationResult::new(vec![
17 GeneratedFile::new(PathBuf::from("api.ts"), api),
18 GeneratedFile::new(PathBuf::from("_internal.ts"), runtime::internal_ts()),
19 ])
20}
21
22#[derive(Debug, Default, Clone, Copy)]
24pub struct TypeScriptGenerator;
25
26impl TypeScriptGenerator {
27 pub fn new() -> Self {
29 Self
30 }
31}
32
33impl Generator for TypeScriptGenerator {
34 fn generate(&self, ctx: &GenerationContext) -> GenerationResult {
35 generate(ctx.graph)
36 }
37}
38
39#[cfg(test)]
40mod tests {
41 use std::path::PathBuf;
42
43 use zynk_schema::ApiGraph;
44
45 #[test]
46 fn generate_returns_api_and_embedded_runtime_files() {
47 let result = super::generate(&ApiGraph::new());
48
49 assert_eq!(result.files.len(), 2);
50 assert_eq!(result.files[0].path, PathBuf::from("api.ts"));
51 assert_eq!(result.files[1].path, PathBuf::from("_internal.ts"));
52 assert!(result.files[0]
53 .contents
54 .contains("Generated by zynk-gen-ts"));
55 assert!(result.files[1]
56 .contents
57 .contains("export function initBridge"));
58 }
59}