15 min/d

ぼうずやのにっき

cyclejs/cycle-dom を TypeScript ですこしつくった

bouzuya/my-cyclecyclejs/cycle-dom を TypeScript で部分的に再実装したことを書く。

bouzuya/my-cycle は Cycle.js (core / dom / http) を TypeScript で再実装しようというもの。昨日 (2016-01-29) は cyclejs/cycle-core をつくり、今日は cyclejs/cycle-dom を部分的につくった。

今回は cycle-dom の v9.0.2 を対象にした。実装したのは makeDOMDriver だ。再実装と書きつつもかなり簡素化しているのでほとんど別物である。cycle-dom では virtual-hyperscript.jsObservableVTree に含めたり、 transposition.jsVTreeObservable<VTree> に変換したりするのだけど、理由がわからなかったので削除した。ほかにも useCapture option を削除したし、各種 validation も削除している。ただ、ぼくの実装でも selectevents を使うだけであればほとんど期待通りに動くはずだ。

昨日・今日の Cycle.js を再実装して分かったのは Cycle.js を使う上で型情報はほとんど役に立たないということだ。必要な箇所で <DOMSource> などの形で個別に付与すれば十分な気がする。

未実装の機能としては makeHTMLDriverisolateSource / isolateSinkobservable 要素を取る機能などがある。細かい実装に手を抜いているので挙動は随分と違うはずなのだけど、大差がないように見えるのはなぜだろう……。

今後の予定として Cycle.js で Server Side Rendering を試してみたい。