5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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っていうライブラリを使っている。

mizchi/sabizan

今はまだunsafeな状態だが、これのラッパー関数を書けば型で守れそう。

問題

closure libraryに依存しないよう、毎度 sbt fullOtpJS する必要があって、ビルド時間かかる…

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?