どうやってZennは本文中のURLを動的にOGP画像つきのCardにしているのか

Zennの記事では、本文中のURLがカードとして表示される。 https://zenn.dev/meijin/articles/linaria-class-name-config これは初期ロード時はPlaceholderが掛かっているため、フロントエンドで動的に表示できていると推測できる。 この仕組みを少しだけ調査したのでメモ。 Zenn本体のソースは公開されていないはずだが、CLIのソースは公開されているため、ほぼ同様の技術とみなして調査できる。 markdownをHTMLにパースするときに、URLを見つけたらiframeに変換している。 https://github.dev/zenn-dev/zenn-editor/blob/43d8da8b77456c72f3b820f6e5df4ccf69d14ea9/packages/zenn-markdown-html/src/utils/md-linkify-to-card.ts // 以下の2つをどちらも満たした場合にリンク化 // 1. パラグラフ先頭 もしくは リンクの前が br // 2. パラグラフの末尾 もしくは リンクの後が br const shouldConvertToCard = (isStartOfLine || isPrevBr) && (isEndOfLine || isNextBr); if (!shouldConvertToCard) { newTokens.push(token); // 変換は行わずに出力結果に含める return; } // 埋め込み用のHTMLを生成 const embedToken = new Token('html_inline', '', 0); if (isTweetUrl(url)) { embedToken.content = generateTweetHtml(url); } else if (isYoutubeUrl(url)) { embedToken.content = generateYoutubeHtmlFromUrl(url); } else { embedToken....

September 16, 2021 · 1 min

react-hook-formで入力内容の変更を追跡する

useFormの返り値でwatchが手に入るのでそれを使う https://react-hook-form.com/api/useform/watch/

September 14, 2021 · 1 min

jestで各テストケースの前にかならずモックをクリアする

https://jestjs.io/ja/docs/configuration#clearmocks-boolean jest.config.jsに clearMocks: true を書き足す

September 14, 2021 · 1 min

Dayjsのコンストラクタに渡せる、Date型とか文字列型のUnion型はDayjs側で提供されている

ConfigTypeという型がエクスポートされています。 https://kossy-web-engineer.hatenablog.com/entry/2020/09/01/223101

September 14, 2021 · 1 min