| import markdownlint from 'markdownlint' | |
| import type { Configuration, Options } from 'markdownlint' | |
| import { defaultConfig } from '@/content-linter/lib/default-markdownlint-options' | |
| import type { Rule } from '@/content-linter/types' | |
| interface RunRuleOptions { | |
| strings?: { [key: string]: string } | |
| files?: string[] | |
| ruleConfig?: boolean | object | |
| markdownlintOptions?: Partial<Options> | |
| } | |
| export async function runRule( | |
| module: Rule, | |
| { strings, files, ruleConfig, markdownlintOptions = {} }: RunRuleOptions, | |
| ) { | |
| if ((!strings && !files) || (strings && files)) | |
| throw new Error('Must provide either Markdown strings or files to run a rule') | |
| const testConfig: Configuration = { | |
| [module.names[0]]: ruleConfig || true, | |
| } | |
| const testOptions: Partial<Options> = { | |
| customRules: [module as any], | |
| config: { ...defaultConfig, ...testConfig }, | |
| } | |
| if (strings) testOptions.strings = strings | |
| if (files) testOptions.files = files | |
| const options: Options = { ...markdownlintOptions, ...testOptions } | |
| return await markdownlint.promises.markdownlint(options) | |
| } | |