{"version":3,"file":"router.mjs","names":[],"sources":["../src/router.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback } from \"react\";\nimport { useRevalidator } from \"react-router\";\nimport {\n  type UseNotionRevalidateOptions,\n  useRevalidateEffect,\n} from \"./internal/revalidate.js\";\n\nexport type {\n  NotionPollOptions,\n  NotionRealtimeOptions,\n  NotionRevalidateTrigger,\n  UseNotionRevalidateOptions,\n} from \"./internal/revalidate.js\";\n\n/**\n * React Router v7 (Framework モード) で SWR 再検証を loader 経由で発火させるフック。\n * 別 API への fetch を発生させず、loader を再走させてサーバ側 SWR の最新データへ\n * 静かに切り替える。\n *\n * @example\n *   useNotionRevalidate(); // マウント時 1 度\n *   useNotionRevalidate({ on: [\"mount\", \"visibility\"] });\n */\nexport function useNotionRevalidate(\n  opts: UseNotionRevalidateOptions = {},\n): void {\n  const { revalidate } = useRevalidator();\n  // useRevalidator が返す revalidate は再描画ごとに別インスタンス。\n  // useCallback で安定化しないと useRevalidateEffect の deps が毎回変わる。\n  const stable = useCallback(() => {\n    revalidate();\n  }, [revalidate]);\n  useRevalidateEffect(stable, opts);\n}\n\n/**\n * マウント後に loader を 1 度再走させ、サーバー側 SWR で差し替わった最新データを\n * 別 fetch なしで取り込むレンダー無しコンポーネント。\n * `poll` を指定すると KV ポーリングで更新完了を検出してから revalidate する。\n */\nexport function NotionRevalidator(props: UseNotionRevalidateOptions): null {\n  useNotionRevalidate(props);\n  return null;\n}\n"],"mappings":";;;;;;;;;;;;;;AAyBA,SAAgB,oBACd,OAAmC,CAAC,GAC9B;CACN,MAAM,EAAE,eAAe,eAAe;CAMtC,oBAHe,kBAAkB;EAC/B,WAAW;CACb,GAAG,CAAC,UAAU,CACW,GAAG,IAAI;AAClC;;;;;;AAOA,SAAgB,kBAAkB,OAAyC;CACzE,oBAAoB,KAAK;CACzB,OAAO;AACT"}