{"version":3,"file":"v3.mjs","names":[],"sources":["../src/v3.ts"],"sourcesContent":["import type { NormalizedBlock, ResolvedLink } from \"@notion-headless-cms/cms\";\nimport type { NotionBlock, PageLinkMap } from \"./types.js\";\n\n/**\n * v3 の正規化 block(`NormalizedBlock`)を、既存の react-renderer が期待する\n * `NotionBlock`(Notion API の `BlockObjectResponse` 形状)へ変換する。\n *\n * v3 の同期パイプライン(`normalizeBlock`)は `block[block.type]` のサブオブジェクトを\n * そのまま `data` に保持しているため、既存のブロックコンポーネント約 30 種を\n * 一切変更せずに再利用できる。`created_time` 等のブロックコンポーネントが参照しない\n * フィールドはダミー値で埋める(型適合のための境界変換であり、実データではない)。\n *\n * @example\n * ```tsx\n * const post = await cms.posts.find(slug);\n * return (\n *   <NotionRenderer\n *     blocks={denormalizeBlocks(post.blocks)}\n *     pageLinks={toPageLinkMap(post.links)}\n *   />\n * );\n * ```\n */\nexport function denormalizeBlocks(\n  blocks: readonly NormalizedBlock[],\n): NotionBlock[] {\n  return blocks.map(denormalizeBlock);\n}\n\nconst DUMMY_USER = { object: \"user\", id: \"\" } as const;\n\nfunction denormalizeBlock(block: NormalizedBlock): NotionBlock {\n  const children = block.children\n    ? denormalizeBlocks(block.children)\n    : undefined;\n  const reconstructed = {\n    object: \"block\",\n    id: block.id,\n    type: block.type,\n    [block.type]: block.data,\n    has_children: Boolean(block.children?.length),\n    archived: false,\n    in_trash: false,\n    created_time: \"\",\n    created_by: DUMMY_USER,\n    last_edited_time: \"\",\n    last_edited_by: DUMMY_USER,\n    parent: { type: \"page_id\", page_id: \"\" },\n    ...(children ? { children } : {}),\n  };\n  return reconstructed as unknown as NotionBlock;\n}\n\n/**\n * v3 の `EntrySnapshot.links`(正規化 pageId → 解決済みリンク)を、\n * 既存の `NotionRenderer` `pageLinks` プロップにそのまま渡せる形へ変換する。\n * `buildPageLinkMap(cms)` の手動呼び出しが不要になる(#437 の摩擦点解消)。\n */\nexport function toPageLinkMap(\n  links: Readonly<Record<string, ResolvedLink>>,\n): PageLinkMap {\n  const result: PageLinkMap = {};\n  for (const [pageId, link] of Object.entries(links)) {\n    result[pageId] = { href: link.href, title: link.title ?? undefined };\n  }\n  return result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAuBA,SAAgB,kBACd,QACe;CACf,OAAO,OAAO,IAAI,gBAAgB;AACpC;AAEA,MAAM,aAAa;CAAE,QAAQ;CAAQ,IAAI;AAAG;AAE5C,SAAS,iBAAiB,OAAqC;CAC7D,MAAM,WAAW,MAAM,WACnB,kBAAkB,MAAM,QAAQ,IAChC,KAAA;CAgBJ,OAAO;EAdL,QAAQ;EACR,IAAI,MAAM;EACV,MAAM,MAAM;GACX,MAAM,OAAO,MAAM;EACpB,cAAc,QAAQ,MAAM,UAAU,MAAM;EAC5C,UAAU;EACV,UAAU;EACV,cAAc;EACd,YAAY;EACZ,kBAAkB;EAClB,gBAAgB;EAChB,QAAQ;GAAE,MAAM;GAAW,SAAS;EAAG;EACvC,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;CAEd;AACrB;;;;;;AAOA,SAAgB,cACd,OACa;CACb,MAAM,SAAsB,CAAC;CAC7B,KAAK,MAAM,CAAC,QAAQ,SAAS,OAAO,QAAQ,KAAK,GAC/C,OAAO,UAAU;EAAE,MAAM,KAAK;EAAM,OAAO,KAAK,SAAS,KAAA;CAAU;CAErE,OAAO;AACT"}