js_of_ocamlで触るService Workier - Qiita
というのを見て、Scala.jsで似たような実験プロジェクトをやってたのを思い出したので紹介しておく。
mizchi-sandbox/scala-js-in-service-worker
ServiceWorkerの中で、こんなコードが動く。
package mz
import scala.scalajs.js
import js.annotation.JSExport
import js.Dynamic.global
object Main extends js.JSApp {
def main(): Unit = {
global.proxy.get("/users/:id", (m: js.Dynamic) => {
js.Dynamic.literal(`id` = m.id)
})
}
}
クライアントから次のようなコードをJSを実行するとちゃんとproxyされる。
require('whatwg-fetch');
fetch('api/users/mizchi')
.then(function(d){return d.json()})
.then(console.log.bind(console));
// > Object {id: "mizchi"}
(これはfetchポリフィルを使っているが実際にやることはXHR相当)
globalを経由しているので型は効かないのだが、proxyでルーティングを行っている。自作のsabizanっていうライブラリを使っている。
今はまだunsafeな状態だが、これのラッパー関数を書けば型で守れそう。
問題
closure libraryに依存しないよう、毎度 sbt fullOtpJS する必要があって、ビルド時間かかる…