This repository contains an example of a WASM-based NetsBlox extension and code for the two crates used to make this possible.
The index.js file for the extension is generated by a build script. For example, to add a custom block, in the source lib.rs you could use:
#[wasm_bindgen]
#[netsblox_extension_block(name = "logHelloWorld", category = "Hello World", spec = "Log Hello World!", target = netsblox_extension_util::TargetObject::Both)]
pub fn hello_world() {
console::log_1(&"Hello World!".to_owned().into());
}
And in the extension file, the following will be generated:
new Extension.Block(
'logHelloWorld',
'command',
'Hello World',
'Log Hello World!',
[],
function () { return ExampleExtension_fns.hello_world(); }
).for(SpriteMorph, StageMorph),
The other sections of the file will be generated to match, allowing the block to be used when the extension is loaded. The ExampleExtension_fns
object contains the functions used by the extension (in this case, named 'ExampleExtension')