@azamiharu/marked-rel-external
v1.0.1
Published
外部リンクに安全な rel 属性と rel="me" を付与する marked 拡張機能
Maintainers
Readme
@azamiharu/marked-rel-external
marked のリンクレンダラーを拡張し、外部リンクに対して自動的に target="_blank" や適切な rel 属性(external, me, noopener, noreferrer)を付与する拡張機能です。
特徴
- 自動環境判定: ブラウザ環境では
location.hostを自動的に内部ホストとして認識します。 - 分散型SNS対応: Mastodon や Misskey などのプロフィールリンク(
rel="me")をidentityURLsとして登録することで、自動的にrel="me"を付与します。 - セキュリティ: 外部リンクには一律で
noopener noreferrerを付与し、タブジャッキング攻撃を防ぎます。 - インラインパース対応: リンクテキスト内の太字やコードスパンなどのインライン要素も正しく処理します。
インストール
pnpm add @azamiharu/marked-rel-external使い方
基本的な使用例
import { markedRelExternal } from "@azamiharu/marked-rel-external";
import { Marked } from "marked";
const html = new Marked()
.use(markedRelExternal({
internalHosts: ["my-site.com"],
identityURLs: ["https://mastodon.social/@username"],
}))
.parse("[GitHub](https://github.com/)");
// 出力結果:
// <a href="https://github.com/" rel="external noopener noreferrer" target="_blank">GitHub</a>ブラウザでの自動認識
ブラウザ環境(window オブジェクトが存在する環境)で使用する場合、オプションを空にすると現在のドメインを自動的に internalHosts に追加します。また、HTML 内に <link rel="me" href="..."> が存在すれば、それらを自動的に identityURLs として読み込みます。
const marked = new Marked().use(markedRelExternal());オプション
| プロパティ | 型 | 説明 |
| --------------- | ---------- | --------------------------------------------------------------------------------------------------- |
| internalHosts | string[] | 内部リンクとして扱うホスト名のリスト。これに含まれるドメインには target="_blank" を付与しません。 |
| identityURLs | string[] | 自身のアイデンティティを示す URL のリスト。これに一致するリンクには rel="me" が付与されます。 |
開発
ビルド
pnpm buildライセンス
MIT
