Hello friends! I wanted to share/solicit comments on my bindings for loading a paint worklet:
type s
@send external hasOwnProperty: (s, string) => bool = "hasOwnProperty"
@val external css: s = "CSS"
type pw = {addModule: (. ~moduleURL: string) => Js.Promise.t<unit>}
@val @scope("CSS")
external paintWorklet: pw = "paintWorklet"
switch hasOwnProperty(css, "paintWorklet") {
| true => paintWorklet.addModule(. ~moduleURL="paint.js")->Js.Promise.catch(err => {
Js.log2("Error loading worklet:", err)
Js.Promise.resolve()
}, _)->ignore
| false => Js.log("I am Firefox or Safari")
}
compiles to
if (CSS.hasOwnProperty("paintWorklet")) {
var __x = CSS.paintWorklet.addModule("paint.js");
__x.catch(function (err) {
console.log("Error loading worklet:", err);
return Promise.resolve(undefined);
});
} else {
console.log("I am Firefox or Safari");
}
and is loading my worklet in a Chromium-based browser (Iridium) as expected. When I put a bogus worklet name, the error is caught and console-logged.