import type { SourceCodeInfo } from '../../../../tokenizer/token'; import type { BuiltinNormalExpression, BuiltinNormalExpressions } from '../../../../builtin/interface'; type SeqKey = `${T}Seq`; type TakeWhileKey = `${T}TakeWhile`; type NthKey = `${T}Nth`; type PredKey = `is${Capitalize}`; type SeqFunction = (length: number, sourceCodeInfo: SourceCodeInfo | undefined) => Type[]; type PredFunction = (n: Type, sourceCodeInfo: SourceCodeInfo | undefined) => boolean; export type SequenceKeys = SeqKey | TakeWhileKey | NthKey | PredKey; export type SequenceDefinition = { [key in Exclude, NthKey | TakeWhileKey>]: key extends SeqKey ? SeqFunction : PredFunction; } & { maxLength?: number; noTakeWhile?: true; } & (Type extends string ? { string: true; } : { string?: never; }) & { noNth?: true; }; export type SequenceNormalExpressions = { [key in SequenceKeys]: key extends SeqKey ? BuiltinNormalExpression : key extends TakeWhileKey ? BuiltinNormalExpression : key extends NthKey ? BuiltinNormalExpression : BuiltinNormalExpression; }; export declare const sequenceNormalExpressions: BuiltinNormalExpressions; export {};