Продвинутое
Кастомные правила и пресеты
Свои чеки на defineCheck и их поставка пресетами и пакетами правил.
import { defineCheck } from '@ranklint/checks'
customChecks: [
defineCheck({
id: 'myteam:no-lorem', // коллизия со встроенным id — ошибка с подсказкой
category: 'meta',
severity: 'warn',
scope: 'page', // 'page' | 'site'
docs: 'https://wiki.myteam.dev/seo/no-lorem',
optionsSchema: z.object({...}), // опционально — валидация опций
async run(ctx) {
// ctx: page, pages, document (linkedom DOM), config, site, fetcher
return [{ checkId: 'myteam:no-lorem', severity: 'warn', message: '...', url: ctx.page!.url }]
},
}),
]
Кастомные правила равноправны: настраиваются через rules, отключаются 'off' и useRanklintIgnore. Контракт CheckContext стабилен в рамках мажорной версии. Пресеты — через extends (npm-пакет или локальный файл); @ranklint/preset-default фиксирует встроенные правила на дефолтных severity — «живой» снапшот от установленной версии checks.
Пакеты правил. Пресет в extends (npm-пакет или локальный файл) может нести customChecks вместе с rules — так команда поставляет свой набор: extends: ['@myteam/ranklint-rules']. Слои мержатся; сам конфиг побеждает.