/** * ruleset 由来の不正を「無言の素通り」でなく診断付きの失敗にするための共通ヘルパ。 * * 背景(Phase 2 実測): engine は第三者の ruleset を読めるようになる一方、 * 壊れた ruleset に対する防御がランタイムに一切なかった。 * 未知 detector / 未知 check kind / 不正 severity はいずれも例外にならず、 * 「検査されなかった」のに `passed: true` が返るという最悪の形で表面化していた。 * * ここで扱うのは engine が **構造的に評価不能** な入力だけ。 * 「ルールに違反している」ことの報告は LintViolation の役目で、こちらは対象外。 * * ※ S0 時点では「engine が実際に読むフィールド」に絞った narrow な検査。 * ruleset 全体の schema 検証(ajv)は S3 で resolver の合成後に入る。 * そのとき **形の検査(assertValidRules 系)は ajv へ移し**、 * 到達不能防御(assertViolationSeverity / qualifies の未知述語)だけがここに残る。 */ import type { DetectorCapability } from "./detectors.js"; import type { RuleEntry } from "./types.js"; export { KNOWN_SEVERITIES, isKnownSeverity } from "./detectors.js"; export type { KnownSeverity } from "./detectors.js"; /** * ruleset 不正の共通エラー。 * 「どのルールの・どのフィールドが・なぜ評価不能か」と「engine が解釈できる値」を必ず添える。 */ export declare function rulesetError(params: { ruleId: string; field: string; problem: string; supported?: readonly string[]; source?: string; }): Error; /** * rules 配列の最小構造検査。 * 不正 severity は「error 件数 0 に丸められて passed: true」を生むため、 * ruleset を読んだ時点で落とす(S3 の schema 検証が入るまでの前哨)。 */ /** * bundle の互換性宣言を検査する(S2 W7)。 * * - `schemaVersion`: bundle の構造バージョン。engine の実装と食い違ったら fail-fast。 * 宣言が無ければ初版(1)とみなす(既存 melta の rules.json は宣言を持たない) * - `engineCompat`: bundle が要求する engine の名前とバージョン範囲。 * ここでは「宣言があれば形が正しいこと」までを見る(実際の範囲照合は S4 の resolver で行う) */ export declare function assertBundleCompat(file: unknown, source: string): void; export declare function assertValidRules(rules: unknown, source: string): asserts rules is RuleEntry[]; /** * pattern 系フィールドの形を検証する。 * 「宣言はあるが engine から見ると無意味 / 危険」な値を弾く。 */ export declare function assertMatchSourceShape(rule: Record, ruleId: string, source?: string): void; /** * check spec(htmlAttrCheck / compositionCheck)の kind ごとの形を検証する。 * * kind の whitelist だけでは足りない。実装は spec のフィールドを直接埋め込むため、 * 欠落すると `, ruleId: string, source?: string): void; /** * capability 表が spec を必須と宣言している detector に spec があるかを検証する。 * 現状はどの detector も specRequired=false(宣言のみのルールを許容する既存イディオムのため)だが、 * capability 表を SSOT と呼ぶ以上、true にしたら実際に効く実装を持たせておく。 */ export declare function assertSpecRequirement(rule: Record, capability: Pick, ruleId: string, source?: string): void; /** * check spec の kind が engine 未対応だったときのエラー。 * 従来は分岐にフォールスルーして誤った検査を無言で走らせるか、静かに 0 件を返していた。 */ export declare function unsupportedCheckKind(params: { ruleId: string; specName: string; kind: unknown; supported: readonly string[]; source?: string; }): Error; /** * ruleset 由来の文字列から RegExp を組む。 * 壊れた正規表現は素の SyntaxError で lint 全体を落としていたため、 * どのルールのどのフィールドが原因かを添えて投げ直す。 */ export declare function compileRuleRegExp(params: { pattern: string; flags?: string; ruleId: string; field: string; }): RegExp; /** * 到達不能防御。ruleset は読み込み時に検証済みなので、ここに来るのは engine 側のバグ。 */ export declare function assertViolationSeverity(severity: unknown, ruleId: string): void;