import type { TranslationsFile } from "./types"; /** 翻訳待ちの 1 エントリ。status の一覧表示に使う */ export interface PendingEntry { symbol: string; original: string; } export interface StatusCounts { total: number; translated: number; untranslated: number; /** 翻訳待ちエントリ(symbol → original 順)。translated が空のものだけ */ pending: PendingEntry[]; } /** * translations.json の内容から進捗を集計する(純粋関数・ファイル I/O なし)。 * * extract と違いソースの再走査は行わないため stale は数えない。 * 訳文が空、または訳文の言語が targetLang と異なるエントリを * 「翻訳待ち」として集計・列挙する(言語を切り替えた場合、旧言語の訳は * 完了扱いにならない)。 */ export declare function computeStatus(translations: TranslationsFile, targetLang?: string): StatusCounts; /** * status の終了コードを決める(純粋関数)。 * --fail-on-pending 指定時に翻訳待ちが残っていれば 1(CI の失敗ゲート用)。 * それ以外は 0。 */ export declare function statusExitCode(counts: Pick, options: { failOnPending: boolean; }): number; export interface StatusOptions { /** プロジェクトルート。出力パスの基準 */ projectDir: string; /** translations.json のパス(既定: .yakudoc/translations.json) */ outPath?: string; } /** 翻訳パック 1 つ分の進捗 */ export interface PackStatus { name: string; version: string; filePath: string; total: number; translated: number; untranslated: number; } /** * プロジェクト全体の進捗。total / translated / untranslated / pending は * translations.json と全パックを合算した値(pending は原文ハッシュで * 重複排除済み)。project / packs に内訳を持つ。 */ export interface StatusSummary extends StatusCounts { outPath: string; /** 集計に使った翻訳先言語(config.json から解決) */ targetLang: string; /** translations.json の内訳(ファイルが無ければ undefined) */ project?: StatusCounts; /** 依存パッケージの翻訳パックの内訳(name 順) */ packs: PackStatus[]; } /** * translations.json と .yakudoc/packs/ 以下の翻訳パックを読み込んで * 進捗を集計する。翻訳先言語は .yakudoc/config.json から解決する。 * どのファイルも存在しなければ undefined(CLI 側で導入手順を案内する)。 */ export declare function statusProject(options: StatusOptions): StatusSummary | undefined;