hyogen-md

0.10.0

診断とログ

hyogen-md はレンダリング中に 警告(処理続行)と エラー(中断)を区別します。ライブラリは console に自動出力しません。呼び出し側がログを整形・出力します。

診断オブジェクト

type HyogenDiagnostic = {
  code: string
  message: string
  path?: string
  details?: Record<string, unknown>
}

type HyogenWarning = HyogenDiagnostic
type HyogenError = Error & HyogenDiagnostic

formatDiagnosticLog

診断を複数行テキストに整形するユーティリティです。@b4moss/hyogen-md@b4moss/hyogen-md/client の両方から export されます。

import { formatDiagnosticLog } from '@b4moss/hyogen-md'

const text = formatDiagnosticLog('warning', diagnostic)
console.error(text)

出力形式

1 行目: [hyogen:{kind}] {code}

以降: details の各キーを {key}: {value}(インデント 2 スペース)で出力。undefined のキーは省略します。

例:

[hyogen:error] file_not_found
  path: ./missing.md
  from: ./page.md
  via: include

diagnostic.pathpath 行として含まれます。details.path がある場合はそちらを優先します。

警告の扱い

警告は RenderResult.warnings または BuildResult.warnings に入ります。レンダリング自体は 続行されます。

代表的な警告:

code状況
circular_include循環参照を検出し、当該取り込みをスキップ
nest_limit_exceededif / each の構造ネストが 20 を超え、ブロックをスキップ
extend_in_componentcomponent 内の extend をスキップ
prop_type_mismatchprops の型不一致(値は undefined
prop_missing必須 props の欠落(値は undefined
prop_unknown未知の props キーを無視
suspicious_context_valuecontext に危険そうな値(改変はしない)

エラーの扱い

エラーは 例外として投げられ、レンダリングが中断します。

import { createHyogenError } from '@b4moss/hyogen-md'

try {
  await renderServer(source, context)
} catch (error) {
  if (error instanceof Error && 'code' in error) {
    console.error(formatDiagnosticLog('error', error as HyogenDiagnostic))
  }
}

formatMessage

メッセージテンプレートに値を埋め込むユーティリティです。カスタム loader やツール連携で使えます。

関連