Open6

Read Qwik

nakasyounakasyou

https://github.com/QwikDev/qwik/blob/563ddc512a9dec38194f10914ad5988f523bd71d/packages/qwik/src/optimizer/src/plugins/plugin.ts#L734

ここ(Viteのloadフックで呼び出される)でQwikのoptimizerを呼び出してコードをコンパイルしているらしい

OptimizerのTypeScript APIはここで定義されてる、createOptimizerという関数
https://github.com/QwikDev/qwik/blob/563ddc512a9dec38194f10914ad5988f523bd71d/packages/qwik/src/optimizer/src/optimizer.ts

そこではPlatformBindingというものを渡しているらしい。これはloadPlatformBindingという関数によってデフォルトは作成される。この関数の引数はOptimizerSystemというものをとっている。

OptimizerSystemcreateOptimizer内でgetSystemという関数の結果をデフォルトとしているらしい。
開発環境(または本番環境)によってビルド方法を選択する形式なのかな?

loadPlatformBindingによってSWCによって作られたoptimizerのWASMビルドを環境に合った形で読み込んでいるのか?

nakasyounakasyou

bindingsというフォルダの中を読み込んでるけど、これはwasm_bindgenによって作られたファイルだと思われる
このwasmをコンパイルするにあたってのエントリーはこれ:
https://github.com/QwikDev/qwik/blob/563ddc512a9dec38194f10914ad5988f523bd71d/packages/qwik/src/wasm/src/lib.rs

このqwik-coreっていうクレートはpackages/qwik/src/optimizer/coreを指してるってさ[1]

脚注
  1. https://github.com/QwikDev/qwik/blob/563ddc512a9dec38194f10914ad5988f523bd71d/packages/qwik/src/wasm/Cargo.toml#L17 ↩︎

nakasyounakasyou

このクレートの中を今読む必要はないが、何をしているのか、どんな出力をするのかは知りたい

nakasyounakasyou

テストのスナップショット発見、めっちゃ面白い
https://github.com/QwikDev/qwik/tree/563ddc512a9dec38194f10914ad5988f523bd71d/packages/qwik/src/optimizer/core/src/snapshots

どうやら、one to oneでコードをトランスフォームしているのではなく、one to manyでやってるらしい。TypeScript APIを読んでる時に気になった、トランスフォームの結果が配列という意味がよくわかった。
超面白い

JSX は Optimizerでトランスパイルせず、Viteに任せる感じなのかな?
QRLはQRLごとにモジュールにしてDynamic Importで処理する感じなのか

状態はDynamic Import先に渡してるのか、超面白い

気になったこと:

  • 外部モジュールはどのように処理されるのか、やはりDynamic Import??
  • export { _hW } from "@builder.io/qwik";が気になる