import { type BaseParseContext, type BaseRoot, type Morph, type NodeSelector, type Predicate, type TypeMeta, type unwrapDefault } from "@ark/schema"; import { type array, type BuiltinObjectKind, type Constructor, type Domain, type show } from "@ark/util"; import type { defaultFor, distill, inferIntersection, inferMorphOut, inferPipe, inferPredicate, Out, withDefault } from "../attributes.ts"; import type { type } from "../keywords/keywords.ts"; import type { inferDefinition, validateDefinition } from "./definition.ts"; import { writeMissingRightOperandMessage } from "./shift/operand/unenclosed.ts"; import type { InfixToken } from "./shift/tokens.ts"; import type { BaseCompletions } from "./string.ts"; export declare const maybeParseTupleExpression: (def: array, ctx: BaseParseContext) => BaseRoot | null; export type maybeValidateTupleExpression = def extends IndexZeroExpression ? validatePrefixExpression : def extends IndexOneExpression ? validateIndexOneExpression : def extends (readonly ["", ...unknown[]] | readonly [unknown, "", ...unknown[]]) ? readonly [ def[0] extends "" ? BaseCompletions<$, args, IndexZeroOperator | "..."> : def[0], def[1] extends "" ? BaseCompletions<$, args, IndexOneOperator | "..."> : def[1] ] : null; export type inferTupleExpression = def[1] extends "[]" ? inferDefinition[] : def[1] extends "?" ? inferDefinition : def[1] extends "&" ? inferIntersection, inferDefinition> : def[1] extends "|" ? inferDefinition | inferDefinition : def[1] extends ":" ? inferPredicate, def[2]> : def[1] extends "=>" ? parseMorph : def[1] extends "|>" ? parseTo : def[1] extends "=" ? withDefault, unwrapDefault> : def[1] extends "@" ? inferDefinition : def extends readonly ["===", ...infer values] ? values[number] : def extends (readonly ["instanceof", ...infer constructors extends Constructor[]]) ? InstanceType : def[0] extends "keyof" ? inferKeyOfExpression : never; export type validatePrefixExpression = def["length"] extends 1 ? readonly [writeMissingRightOperandMessage] : def[0] extends "keyof" ? readonly [def[0], validateDefinition] : def[0] extends "===" ? readonly [def[0], ...unknown[]] : def[0] extends "instanceof" ? readonly [def[0], ...Constructor[]] : never; export type validateIndexOneExpression = def[1] extends TuplePostfixOperator ? readonly [validateDefinition, def[1]] : readonly [ validateDefinition, def["length"] extends 2 ? writeMissingRightOperandMessage : def[1], def[1] extends "|" ? validateDefinition : def[1] extends "&" ? validateDefinition : def[1] extends ":" ? Predicate> : def[1] extends "=>" ? Morph> : def[1] extends "|>" ? validateDefinition : def[1] extends "=" ? defaultFor> : def[1] extends "@" ? TypeMeta.MappableInput : validateDefinition, ...(def[1] extends "@" ? [NodeSelector?] : []) ]; export type UnparsedTupleExpressionInput = { instanceof: Constructor; "===": unknown; }; export type UnparsedTupleOperator = show; export declare const parseKeyOfTuple: IndexZeroParser<"keyof">; export type inferKeyOfExpression = show>; export type TupleExpression = IndexZeroExpression | IndexOneExpression; export type TupleExpressionOperator = IndexZeroOperator | IndexOneOperator; export type ArgTwoOperator = Exclude">; export declare const writeMalformedFunctionalExpressionMessage: (operator: ":" | "=>", value: unknown) => string; export type parseTo = inferPipe, inferDefinition>; export type parseMorph = morph extends Morph ? inferMorphOut extends infer out ? (In: distill.In>) => Out : never : never; export declare const parseNarrowTuple: IndexOneParser<":">; export type IndexOneExpression = readonly [unknown, token, ...unknown[]]; type IndexOneParser = (def: IndexOneExpression, ctx: BaseParseContext) => BaseRoot; declare const postfixParsers: { "?": IndexOneParser<"?">; "[]": IndexOneParser<"[]">; }; export type TuplePostfixOperator = keyof typeof postfixParsers; declare const infixParsers: { "&": IndexOneParser<"&">; "|": IndexOneParser<"|">; "|>": IndexOneParser<"|>">; "=": IndexOneParser<"=">; ":": IndexOneParser<":">; "=>": IndexOneParser<"=>">; "@": IndexOneParser<"@">; }; export type TupleInfixOperator = keyof typeof infixParsers; declare const indexOneParsers: { "&": IndexOneParser<"&">; "|": IndexOneParser<"|">; "|>": IndexOneParser<"|>">; "=": IndexOneParser<"=">; ":": IndexOneParser<":">; "=>": IndexOneParser<"=>">; "@": IndexOneParser<"@">; "?": IndexOneParser<"?">; "[]": IndexOneParser<"[]">; }; export type IndexOneOperator = keyof typeof indexOneParsers; export type InfixExpression = readonly [unknown, InfixToken, ...unknown[]]; type IndexZeroParser = (def: IndexZeroExpression, ctx: BaseParseContext) => BaseRoot; type IndexZeroExpression = readonly [ token, ...unknown[] ]; declare const indexZeroParsers: { keyof: IndexZeroParser<"keyof">; instanceof: IndexZeroParser<"instanceof">; "===": IndexZeroParser<"===">; }; export type IndexZeroOperator = keyof typeof indexZeroParsers; export declare const writeInvalidConstructorMessage: (actual: actual) => string; export {};