Skip to main content

usage/sdk/typescript/
mod.rs

1use std::path::PathBuf;
2
3use crate::sdk::{SdkFile, SdkOptions, SdkOutput};
4use crate::Spec;
5
6mod runtime;
7mod types;
8mod wrappers;
9
10pub fn generate(spec: &Spec, opts: &SdkOptions) -> SdkOutput {
11    let package_name = opts
12        .package_name
13        .clone()
14        .unwrap_or_else(|| spec.bin.clone());
15
16    SdkOutput {
17        files: vec![
18            SdkFile {
19                path: PathBuf::from("types.ts"),
20                content: types::render(spec, &package_name, &opts.source_file),
21            },
22            SdkFile {
23                path: PathBuf::from("client.ts"),
24                content: wrappers::render(spec, &package_name, &opts.source_file),
25            },
26            SdkFile {
27                path: PathBuf::from("runtime.ts"),
28                content: runtime::RUNTIME_TS.to_string(),
29            },
30            SdkFile {
31                path: PathBuf::from("index.ts"),
32                content: render_index(&package_name),
33            },
34        ],
35    }
36}
37
38fn render_index(package_name: &str) -> String {
39    let class_name = heck::AsPascalCase(package_name).to_string();
40    format!("export {{ {class_name} }} from \"./client\";\nexport {{ CliResult, CliError }} from \"./runtime\";\nexport * from \"./types\";\n")
41}