Signal-Desktop/build/intl-linter/utils/rule.ts

34 lines
833 B
TypeScript

// Copyright 2022 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import type { MessageFormatElement } from '@formatjs/icu-messageformat-parser';
import { Location } from '@formatjs/icu-messageformat-parser';
import type { Visitor } from './traverse';
import { traverse } from './traverse';
export type Element = MessageFormatElement;
export { Location };
export type Context = {
messageId: string;
report(message: string, location: Location | void): void;
};
export type RuleFactory = {
(context: Context): Visitor;
};
export type Rule = {
id: string;
run(elements: Array<MessageFormatElement>, context: Context): void;
};
export function rule(id: string, ruleFactory: RuleFactory): Rule {
return {
id,
run(elements, context) {
traverse(elements, ruleFactory(context));
},
};
}