import { Assertion } from './assertion.js'; export declare const operatorComparisons: { readonly equals: "EQUALS"; readonly notEquals: "NOT_EQUALS"; readonly greaterThan: "GREATER_THAN"; readonly lessThan: "LESS_THAN"; readonly contains: "CONTAINS"; readonly notContains: "NOT_CONTAINS"; }; export type OperatorName = keyof typeof operatorComparisons; export type TargetValueType = 'number' | 'boolean' | 'string'; declare const targetType: unique symbol; export interface AnyTargetSpec { readonly kind: TargetValueType; } export interface TargetSpec extends AnyTargetSpec { readonly [targetType]?: T; } export declare function numberTarget(): TargetSpec; export declare function booleanTarget(): TargetSpec; export declare function stringTarget(): TargetSpec; export interface PropertyGrammar { readonly operators: readonly OperatorName[]; readonly target: AnyTargetSpec; } export declare function defineGrammar>(grammar: G): G; type TargetOf = Spec extends TargetSpec ? T : never; export type PropertyOperators = Decl extends PropertyGrammar ? { [Op in Decl['operators'][number]]: (target: TargetOf) => Assertion; } : never; export declare function operatorsForProperty, Property extends keyof Grammar & string>(grammar: Grammar, source: Source, property: Property): PropertyOperators; export declare function operatorsForSource(source: Source, decl: Decl): PropertyOperators; export declare function comparisonsForGrammar(decl: PropertyGrammar): Record; export declare function valueTypeForGrammar(decl: PropertyGrammar): TargetValueType; export {};