Skip to main content

Crate fandhe_frontend_app

Crate fandhe_frontend_app 

Source
Expand description

fandhe-frontend-app: SSR / SSG / CSR 三モード共通のモード非依存コンポーネントライブラリ。

fandhe-frontend-coreNode / 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.tomlallowed_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§

DemoItemDetailLoader
詳細画面(detail_page)向けの参照 loader 実装。
DemoItemsLoader
一覧画面(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 束縛で OutputOption<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 で実際のエントリポイントが接続される)。