import type { error, NumberLiteral } from "../../../dev/utils/src/main.js" import type { Comparator, SizedData } from "../../nodes/primitive/range.js" import type { inferAst, validateAst } from "./ast.js" import type { astToString } from "./utils.js" /** * N number literal * S sized data (a number, string or array) * < Comparator (one of <, <=, ==, >=, >) * Bound operators allow data to be bounded in the format "S = l extends NumberLiteral ? validateAst : l extends [infer leftAst, Comparator, unknown] ? error>> : isBoundable> extends true ? validateAst : error>> export const writeDoubleRightBoundMessage = ( root: root ): writeDoubleRightBoundMessage => `Expression ${root} must have at most one right bound` type writeDoubleRightBoundMessage = `Expression ${root} must have at most one right bound` type isBoundable = [data] extends [SizedData] ? true : false export const writeUnboundableMessage = ( root: root ): writeUnboundableMessage => `Bounded expression ${root} must be a number, string, Array, or Date` type writeUnboundableMessage = `Bounded expression ${root} must be a number, string, Array, or Date`