rollup-plugin-rust icon indicating copy to clipboard operation
rollup-plugin-rust copied to clipboard

transpileToJS feature

Open BaderBC opened this issue 1 year ago • 6 comments

Adds option to transpile wasm to JS using wasm2js tool. This feature would be great for old browser support as well as e.g. writing chrome extensions (which is why I am doing this pr), because chrome doesn't allow usage of wasm in their extensions.

BaderBC avatar Jul 07 '24 22:07 BaderBC

I also create Chrome extensions with Rust, have you seen this section of the README?

https://github.com/wasm-tool/rollup-plugin-rust?tab=readme-ov-file#chrome--firefox-extensions

Pauan avatar Jul 08 '24 00:07 Pauan

Yes I saw it. It works perfectly fine with firefox and chrome with manifest version 2, but in the third version of manifest google forbidden usage of inline wasm.

image

When using inlineWasm option, we basically store wasm output in variable, which chrome treets as a remote wasm execution.

BaderBC avatar Jul 08 '24 06:07 BaderBC

I made a few changes. I think I'm done with this pr. Let me know, @Pauan, whether you decide to merge or close this pr.

Thanks for your time!

BaderBC avatar Jul 08 '24 18:07 BaderBC

Sorry for the delay on this, I've been quite busy, but I plan to look at this soon.

Pauan avatar Jul 15 '24 00:07 Pauan

Sorry for the delay on this, I've been quite busy, but I plan to look at this soon.

Let me give you a friendly reminder @Pauan 😅

BaderBC avatar Jul 30 '24 15:07 BaderBC

@BaderBC Thanks for the reminder!

So I checked, and this plugin works completely fine with Chrome extensions (including manifest 3).

I created a simple example, which you can build with yarn install && yarn build:

https://github.com/Pauan/rust-dominator/tree/c53b2d8a0ab3c134a62a33d19b1cceec4634b09b/examples/extension

Then you just load the dist folder as an unpacked extension.


You do need to specify wasm-unsafe-eval in your manifest's content_security_policy. This is normal and expected:

https://developer.chrome.com/docs/extensions/reference/manifest/content-security-policy

The policy you mentioned before is only for remote code (such as loaded with HTTP), it doesn't apply to files which are bundled with the extension. So it's completely fine to use Wasm with Chrome extensions.

Pauan avatar Aug 04 '24 02:08 Pauan