import { postfixAfterOptionalOrDefaultableMessage, type BaseParseContext, type BaseRoot, type Sequence } from "@ark/schema"; import { type array, type conform, type ErrorMessage, type satisfy } from "@ark/util"; import type { inferDefinition, validateInnerDefinition } from "./definition.ts"; import { type DefaultablePropertyTuple, type isDefaultable, type OptionalPropertyDefinition } from "./property.ts"; export declare const parseTupleLiteral: (def: array, ctx: BaseParseContext) => BaseRoot; export type validateTupleLiteral = parseSequence extends infer s extends SequenceParseState ? Readonly : never; export type inferTupleLiteral = parseSequence extends infer s extends SequenceParseState ? s["inferred"] : never; type SequencePhase = satisfy; declare namespace SequencePhase { type prefix = "prefix"; type optionals = "optionals"; type defaultables = "defaultables"; type postfix = "postfix"; } type SequenceParseState = { unscanned: array; inferred: array; validated: array; phase: SequencePhase; }; type parseSequence = parseNextElement<{ unscanned: def; inferred: []; validated: []; phase: SequencePhase.prefix; }, $, args>; type PreparsedElementKind = "required" | SequencePhase.optionals | SequencePhase.defaultables; type PreparsedElement = { head: unknown; tail: array; inferred: unknown; validated: unknown; kind: PreparsedElementKind; spread: boolean; }; declare namespace PreparsedElement { type from = result; type required = "required"; type optionals = "optionals"; type defaultables = "defaultables"; } type preparseNextState = s["unscanned"] extends readonly ["...", infer head, ...infer tail] ? preparseNextElement : s["unscanned"] extends readonly [infer head, ...infer tail] ? preparseNextElement : null; type preparseNextElement = PreparsedElement.from<{ head: head; tail: tail; inferred: inferDefinition; validated: validateInnerDefinition; kind: head extends OptionalPropertyDefinition ? PreparsedElement.optionals : head extends DefaultablePropertyTuple ? PreparsedElement.defaultables : isDefaultable extends true ? PreparsedElement.defaultables : PreparsedElement.required; spread: spread; }>; type parseNextElement = preparseNextState extends infer next extends PreparsedElement ? parseNextElement<{ unscanned: next["tail"]; inferred: nextInferred; validated: nextValidated; phase: next["kind"] extends (SequencePhase.optionals | SequencePhase.defaultables) ? next["kind"] : number extends nextInferred["length"] ? s["phase"] : SequencePhase.prefix; }, $, args> : s; type nextInferred = next["spread"] extends true ? [ ...s["inferred"], ...conform ] : next["kind"] extends SequencePhase.optionals ? [ ...s["inferred"], next["inferred"]? ] : [...s["inferred"], next["inferred"]]; type nextValidated = [ ...s["validated"], ...nextValidatedSpreadOperatorIfPresent, nextValidatedElement ]; type nextValidatedSpreadOperatorIfPresent = next["spread"] extends true ? [ next["inferred"] extends infer spreadOperand extends array ? [ number, number ] extends ([ s["inferred"]["length"], spreadOperand["length"] ]) ? ErrorMessage : "..." : ErrorMessage> ] : []; type nextValidatedElement = next["kind"] extends SequencePhase.optionals ? next["spread"] extends true ? ErrorMessage : s["phase"] extends SequencePhase.postfix ? ErrorMessage : next["validated"] : next["kind"] extends SequencePhase.defaultables ? next["spread"] extends true ? ErrorMessage : s["phase"] extends SequencePhase.optionals ? ErrorMessage : s["phase"] extends SequencePhase.postfix ? ErrorMessage : next["validated"] : [s["phase"], next["spread"]] extends ([ SequencePhase.optionals | SequencePhase.defaultables, false ]) ? ErrorMessage : next["validated"]; export declare const writeNonArraySpreadMessage: (operand: operand) => writeNonArraySpreadMessage; type writeNonArraySpreadMessage = `Spread element must be an array${operand extends string ? ` (was ${operand})` : ""}`; export declare const multipleVariadicMesage = "A tuple may have at most one variadic element"; type multipleVariadicMessage = typeof multipleVariadicMesage; export declare const requiredPostOptionalMessage = "A required element may not follow an optional element"; export declare const optionalOrDefaultableAfterVariadicMessage = "An optional element may not follow a variadic element"; type optionalOrDefaultableAfterVariadicMessage = typeof optionalOrDefaultableAfterVariadicMessage; export declare const spreadOptionalMessage = "A spread element cannot be optional"; type spreadOptionalMessage = typeof spreadOptionalMessage; export declare const spreadDefaultableMessage = "A spread element cannot have a default"; type spreadDefaultableMessage = typeof spreadDefaultableMessage; export declare const defaultablePostOptionalMessage = "A defaultable element may not follow an optional element without a default"; type defaultablePostOptionalMessage = typeof defaultablePostOptionalMessage; export {};