import type { NumberLiteral } from "../../../../dev/utils/src/main.js" import type { Comparator, InvertedComparators, MinComparator } from "../../../nodes/primitive/range.js" import { invertedComparators } from "../../../nodes/primitive/range.js" export type StringifiablePrefixOperator = "keyof" export const writeUnmatchedGroupCloseMessage = ( unscanned: unscanned ): writeUnmatchedGroupCloseMessage => `Unmatched )${(unscanned === "" ? "" : ` before ${unscanned}`) as any}` export type writeUnmatchedGroupCloseMessage = `Unmatched )${unscanned extends "" ? "" : ` before ${unscanned}`}` export const writeUnclosedGroupMessage = ( missingChar: missingChar ): writeUnclosedGroupMessage => `Missing ${missingChar}` export type writeUnclosedGroupMessage = `Missing ${missingChar}` export const writeOpenRangeMessage = < min extends NumberLiteral, comparator extends MinComparator >( min: min, comparator: comparator ): writeOpenRangeMessage => `Left bounds are only valid when paired with right bounds (try ...${comparator}${min})` export type writeOpenRangeMessage< min extends NumberLiteral, comparator extends MinComparator > = `Left bounds are only valid when paired with right bounds (try ...${comparator}${min})` export type writeUnpairableComparatorMessage = `Left-bounded expressions must specify their limits using < or <= (was ${comparator})` export const writeUnpairableComparatorMessage = ( comparator: comparator ): writeUnpairableComparatorMessage => `Left-bounded expressions must specify their limits using < or <= (was ${comparator})` export const writeMultipleLeftBoundsMessage = < openLimit extends NumberLiteral, openComparator extends MinComparator, limit extends NumberLiteral, comparator extends MinComparator >( openLimit: openLimit, openComparator: openComparator, limit: limit, comparator: comparator ): writeMultipleLeftBoundsMessage< openLimit, openComparator, limit, comparator > => `An expression may have at most one left bound (parsed ${openLimit}${invertedComparators[openComparator]}, ${limit}${invertedComparators[comparator]})` export type writeMultipleLeftBoundsMessage< openLimit extends NumberLiteral, openComparator extends MinComparator, limit extends NumberLiteral, comparator extends MinComparator > = `An expression may have at most one left bound (parsed ${openLimit}${InvertedComparators[openComparator]}, ${limit}${InvertedComparators[comparator]})`