Help needed to import `biowasm`

Hello,

I’m trying to run biowasm inside an Observable notebook.

I can successfully import the module via

a = require("@biowasm/aioli@3.1.0/dist/aioli.js")

but when I call the class constructor, as suggested in the docs, with

cli = await new a(["samtools/1.10", "seqtk/1.3"])

I get the error
cli = TypeError: undefined is not an object (evaluating 'f.apply')

Any help would be appreciated!

PS If this requires developer input rather than a general query here, let me know!

This error seems specific to the bundle. I would recommend to create an issue in their GitHub repo.

For reference you might also want to try a standalone example in a plain HTML file.

Hi,

Thanks, will file an issue on their repo.

PS I can run their examples in a plain HTML file locally.

I took another stab at it. Turns out the problem is that CLI exposes a property .then, which causes it to get treated as a Thenable when passed through Promise.resolve(). Example:

Promise.resolve({
  then(resolve) { resolve("Hello there!") }
})

Observable’s Runtime resolves all top-level promises automatically, so with the above in mind returning CLI from a cell will break. However, you should be able to make biowasm work as long as you don’t return CLI directly:

Aioli = require("https://biowasm.com/cdn/v3/aioli.js")
cli = ({cli: await new Aioli(["samtools/1.10"])})
cli.cli.exec("samtools view /samtools/examples/toy.sam")
3 Likes

This works as expected, many thanks!!