Building Golem Components in TypeScript
Building Golem components having an application manifest is straightforward, just use the golem command line interface:
golem app buildIf the project was created using golem app new as recommended, the golem app build command will always work as expected.
The result of the golem app build command is a WebAssembly component file ready to be uploaded to Golem. It does not have to be specified explicitly, as the golem tool will automatically find the correct file when doing for example:
golem component addUnder the hood
Building Golem components written in TypeScript requires a series of steps.
If the project was created with golem new, it already has a package.json that incorporates all the necessary steps as npm scripts to build the component, so it is enough to run:
$ npm run componentizeIn details, building the component requires the following steps:
Generate the TypeScript bindings
For generating the binding we use the Golem fork of jco and componentize-js. When using the golem examples, these dependencies are included in package.json, and an npm script called stub is also defined:
$ npm run stubThe generated binding will placed in the src/generated directory.
The above run command will execute the following commands:
$ jco stubgen wit -o src/generatedAnd requires the following dev dependencies:
{
"devDependencies": {
"@golemcloud/componentize-js": "0.10.2-golem.1",
"@golemcloud/jco": "1.4.0-golem.1"
}
}Compile the TypeScript code to JavaScript
The examples use rollup through an npm script to compile TypeScript to JavaScript:
$ npm run buildThis will compile all the TypeScript sources into a single JavaScript file at out/main.js.
Componentizing the JavaScript code
The final step is componentizing, which involves:
- embedding our JavaScript code into the StarlingMonkey JS engine
- running Wizer pre-initialization, which pre-loads and parses our Javascript source in the JS engine
- creating the wasm output file for our component with it's interface exposed as a WebAssembly component usable by Golem.
The example projects includes an npm script called componentize, which also includes the previous stub and build steps.
$ npm run componentizeThe output wasm file with be created with the built component name, eg.: out/example.wasm.
The above npm script will execute the following commands:
$ npm run stub && npm run build && jco componentize -w wit -o out/example.wasm out/main.js