Closed omochi closed 8 months ago
なんかできてきた
JavaScriptKitMock
: JavaScriptKit
とソース互換なモジュール
JavaScriptKitShim
: importの切り替え点
WebMock
: JavaScriptKitMock
上に構築されたDOM APIもどき
SRTDOM
(旧 DOMModule
) を全て JavaScriptKitShim
上で動かすように差し替えて、テストが通った。
まだ試してないけど、これが本物のブラウザ+ JavaScriptKit
でも動くはず・・・
wasm on browserターゲットにおいて使うライブラリにしたいが、 xcode on mac環境でもテストなどは実行したい
JavaScriptKitはmacでコンパイルできるが実行できない https://discord.com/channels/291054398077927425/383442648012423179/1223317659693744289
このあたりの設計の検討
参考: Tokamakは
VStack
などのシンボルがターゲットによって 全く異なる同名のシンボルに切り替わる。 if canImportでそれを切り替えている。 例えばApple環境ではSwiftUI.VStack
になる。このように、同名の別物で切り替える方法と、 抽象化層を陽に実装する方法がある
実際、ワンビルドでクロスターゲットに動かすことはないので、 wasm向けに使いやすいシンプルな構造にしつつクロス対応にしたいので、 そうすると同様な方針がいいだろう。
DOMインターフェースが露出するのはrefやイベントハンドラだが、 ここの型をどうするかの問題はある DOMレイヤーはデカすぎて型付けしきれないし、 構造としてはReact層より下でまず対応するべきだろう
とすると、いったんそこはこのライブラリでは面倒を見ないことにして、
JSValue
として通すのが便利そう つまりこのライブラリのインターフェースは JSValue になるさてmacでは問題が起きるので、 つまるところ必要なのはmac向けのJSKitのshimだ
React層自体も JSValue に見えるDOMインターフェースに対して実装するべきで、 shimは最低限それを対応すれば良い
・・・やっぱりJSValueをラップするDOM層は内部では持っておくか。 で、ユーザー界面でそれを剥がすのがよさそう。
また、実装の作業上は、 JSKitをmacでも使いたい。 shimの実装が正しいか型チェックを両方通したいため。 これは SwiftPM に手を入れてdefineなどをしてスイッチ化しておいて、 開発中に制御できるようにするのがいいだろう。