Skip to content

Commit e8aa9a7

Browse files
committed
refactor: accept object as input for wasm generate
1 parent 8ddc8a6 commit e8aa9a7

File tree

6 files changed

+106
-8
lines changed

6 files changed

+106
-8
lines changed

Cargo.lock

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

src/core/generate/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,10 @@ export async function generate(options: GenerateOptions) {
9999
await ensureDir(outDir);
100100
await ensureDir(resolve(outDir, 'declarations'));
101101

102-
const result = wasmGenerate(didFilePath, outputFileName);
102+
const result = wasmGenerate({
103+
did_file_path: didFilePath,
104+
service_name: outputFileName,
105+
});
103106

104107
await writeBindings({
105108
bindings: result,

src/core/generate/rs.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { GenerateResult } from './rs/dist/icp-js-bindgen.d.ts';
1+
import type { GenerateOptions, GenerateResult } from './rs/dist/icp-js-bindgen.d.ts';
22
import init, { generate, start } from './rs/dist/icp-js-bindgen.js';
33

44
let initialized = false;
@@ -14,4 +14,5 @@ export async function wasmInit(...args: Parameters<typeof init>) {
1414

1515
export const wasmStart = start;
1616
export const wasmGenerate = generate;
17+
export type WasmGenerateOptions = GenerateOptions;
1718
export type WasmGenerateResult = GenerateResult;

src/core/generate/rs/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,7 @@ console_error_panic_hook = "0.1"
2424
wasm-bindgen-console-logger = "0.1"
2525
log = "0.4"
2626
pretty = "0.12"
27+
serde = { version = "1.0", features = ["derive"] }
28+
serde-wasm-bindgen = "0.6"
29+
tsify = { version = "0.5", features = ["js"] }
2730
swc_core = { version = "44.0.0", features = ["common", "ecma_ast", "ecma_codegen"] }

src/core/generate/rs/src/lib.rs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ mod parser;
44

55
use std::path::PathBuf;
66

7+
use serde::Deserialize;
8+
use tsify::Tsify;
79
use wasm_bindgen::prelude::*;
810

911
use crate::bindings::{javascript, typescript, typescript_native};
@@ -18,6 +20,13 @@ fn start() {
1820
log::set_max_level(log::LevelFilter::Trace);
1921
}
2022

23+
#[derive(Tsify, Deserialize)]
24+
#[tsify(from_wasm_abi)]
25+
pub struct GenerateOptions {
26+
pub did_file_path: String,
27+
pub service_name: String,
28+
}
29+
2130
#[wasm_bindgen(getter_with_clone)]
2231
pub struct GenerateResult {
2332
pub declarations_js: String,
@@ -27,18 +36,23 @@ pub struct GenerateResult {
2736
}
2837

2938
#[wasm_bindgen]
30-
pub fn generate(declarations: String, service_name: String) -> Result<GenerateResult, JsError> {
31-
let input_path = PathBuf::from(declarations);
39+
pub fn generate(options: GenerateOptions) -> Result<GenerateResult, JsError> {
40+
let input_path = PathBuf::from(options.did_file_path);
3241
let (env, actor, prog) = parser::check_file(input_path.as_path()).map_err(JsError::from)?;
3342

3443
let declarations_js = javascript::compile(&env, &actor);
3544
let declarations_ts = typescript::compile(&env, &actor, &prog);
3645

37-
let interface_ts =
38-
typescript_native::compile::compile(&env, &actor, &service_name, "interface", &prog);
46+
let interface_ts = typescript_native::compile::compile(
47+
&env,
48+
&actor,
49+
&options.service_name,
50+
"interface",
51+
&prog,
52+
);
3953

4054
let service_ts =
41-
typescript_native::compile::compile(&env, &actor, &service_name, "wrapper", &prog);
55+
typescript_native::compile::compile(&env, &actor, &options.service_name, "wrapper", &prog);
4256

4357
Ok(GenerateResult {
4458
declarations_js,

tests/wasm-generate.test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ describe('wasmGenerate', () => {
1313
it.each(['hello_world', 'example'])('should generate a bindgen', async (serviceName) => {
1414
const didFile = `${TESTS_ASSETS_DIR}/${serviceName}.did`;
1515

16-
const result = wasmGenerate(didFile, serviceName);
16+
const result = wasmGenerate({
17+
did_file_path: didFile,
18+
service_name: serviceName,
19+
});
1720
await expect(result.declarations_js).toMatchFileSnapshot(
1821
`${SNAPSHOTS_DIR}/${serviceName}/declarations/${serviceName}.did.js.snapshot`,
1922
);

0 commit comments

Comments
 (0)