Expand description
fandhe-frontend-app: SSR / SSG / CSR 三モード共通のモード非依存コンポーネントライブラリ。
fandhe-frontend-core(Node / el / text / render 等)のみに依存する。マクロ DSL
には依存せず、Node を返す通常の Rust 関数としてコンポーネントを記述する
(docs/api/component-api.md の「コンポーネント記述の標準規約」に従う)。
§三モード契約(REQ-6)
list_page / detail_page / page_shell は、SSR(fandhe-frontend-server の
axum ハンドラ想定・TASK-6.1c)・SSG(同クレートの静的書き出しバイナリ想定)・
CSR(fandhe-frontend-wasm-client 想定・TASK-6.2 系)のいずれのモードからも同一関数が
そのまま呼ばれることを前提とする。モード別の分岐・モード別の出力差異を
本クレートに持ち込まない(同一入力に対し常に同一の fandhe_frontend_core::render
出力を返すことをテストで固定する)。
§既定エスケープの引き継ぎ(REQ-1)
本クレートはテキスト・属性値をすべて fandhe_frontend_core::text / fandhe_frontend_core::el の
attrs 経由で組み立て、独自のエスケープ処理・独自の raw 出力経路を持たない。
format! によるタグ文字列の直接組み立ては行わない(coding-rust.md
「HTML 文字列の直接組み立て禁止」)。page_shell が前置する
<!DOCTYPE html> のみ、ユーザー入力を一切含まない固定リテラルとして
文字列結合する(fandhe_frontend_core::render 済みの既定エスケープ済み HTML の前に
付与するのみであり、新たな迂回経路ではない)。
§スコープ外
ハイドレーション支援 API(find_attr_values/find_nav_targets 相当)は
fandhe-frontend-core 側の TASK-6.2 系で追加予定であり、本クレートでは使用しない。
server/src/main.rs(SSR/SSG エントリ)は TASK-6.1c、三モード統合テストは
TASK-6.1d のスコープであり本クレートには含めない。
§ルーティング(router / routes、イシュー #407)
server(SSR/SSG)・wasm-full(CSR)双方から依存可能な唯一の層
(structure.toml の allowed_dependents 参照)として、パスマッチング
エンジン(router)とルート表の単一定義(routes)を本クレートへ
集約する。詳細は各モジュールの doc コメントと
docs/design/route-definition-sharing.md を参照。
Modules§
- router
- v1 共通コアのパスマッチングルーター(TASK-7.2b、イシュー #407 で
fandhe-frontend-serverからfandhe-frontend-appへ移設)。 - routes
- server / client 単一定義からのルート生成(共有機構、イシュー #407)。
Structs§
- Demo
Item Detail Loader - 詳細画面(
detail_page)向けの参照 loader 実装。 - Demo
Items Loader - 一覧画面(
list_page)向けの参照 loader 実装。 - Item
- 一覧・詳細画面の最小データモデル。
Constants§
- LIKE_
BUTTON_ ID - ハイドレーション後にクライアント側の
clickイベントで参照されるid属性値。fandhe-frontend-wasm-client(TASK-6.2 系)がこの定数で DOM 要素を 検索する前提の契約であり、値を変更する場合はクライアント側と合わせて 更新する必要がある。
Traits§
- Loader
- SSR・SSG・CSR の三モードから同一実装が呼ばれるデータ取得契約
(イシュー #346 設計確定書
docs/design/loader-trait-design.md§3.2 の 凍結シグネチャに一字一句準拠する。実装が本 trait と乖離した場合は 同設計書を正とする)。
Functions§
- assemble_
detail_ page - loader の解決結果を詳細ページへ型接続する。
assemble_list_pageと 同様にwhere束縛でOutputをOption<Item>に固定し、型不整合を コンパイルエラーにする。 - assemble_
list_ page - loader の解決結果を一覧ページへ型接続する。
- demo_
items - デモ・テスト用の固定データ(TASK-6.1c 以降が実データ接続するまでの暫定値)。
- detail_
page - 画面 2: 詳細画面。呼び出し元が対象
Itemの解決(ID 引き当て)を 済ませた結果をOption<&Item>として受け取る(本クレートは検索・ データストアの責務を持たない)。Noneの場合は 404 相当のノードを返し、 ライブラリコードでpanic!しない(coding-rust.mdのエラー処理規約)。 - layout
- 共通レイアウト(ヘッダー相当)。
list_page/detail_pageの両方から 呼ばれる、モード非依存の骨格コンポーネント。 - list_
page - 画面 1: 一覧画面。各項目へのリンクに
data-nav属性を付与する (fandhe-frontend-core側 TASK-6.2 系のハイドレーション支援 API がこの属性を 実 DOM なしに機械的検出する前提の契約。本クレートでは検出処理自体は 実装しない=スコープ外)。 - page_
shell - ページ全体(
<!DOCTYPE html>を含む完全文書)を組み立てる。 SSR(axum ハンドラ想定)・SSG(静的書き出しバイナリ想定)の両方から 呼ばれる共通関数(TASK-6.1c で実際のエントリポイントが接続される)。