import { ComputedRef, MaybeRef, MaybeRefOrGetter, Ref } from "vue"; //#region src/types.d.ts type StateMode = 'optimistic' | 'source'; interface Register {} type Registered = K extends keyof Register ? Register[K] : TFallback; type Missing = Registered<'missing', null>; type MaybeRefOrComputed = MaybeRef | ComputedRef; type ReactiveFields = { [K in keyof T]: K extends TRaw ? T[K] : K extends 'parser' ? MaybeRefOrComputed : MaybeRefOrGetter; }; type ReactiveOptions = MaybeRefOrGetter>; //#endregion //#region src/parser/parsers.d.ts type ParserOptions = { parse: (raw: string) => T | null; serialize?: (value: T) => string; }; type DefaultValue = T | (() => T); type Parser = { parse: (raw: string) => T | null; serialize: (value: T) => string; withDefault: (value: DefaultValue) => ParserWithDefault; }; type ParserWithDefault = Parser & { readonly defaultValue: DefaultValue; }; declare function tryParse(fn: (input: I) => R, input: I): R | null; declare function defineParser(options: ParserOptions): Parser; declare function unwrapDefault(value: DefaultValue): T; declare const parseAsString: Parser; declare const parseAsInteger: Parser; declare const parseAsFloat: Parser; declare const parseAsIndex: Parser; declare const parseAsBoolean: Parser; declare function parseAsStringLiteral(values: T): Parser; declare function parseAsNumberLiteral(values: T): Parser; declare function parseAsStringEnum(values: T[]): Parser; declare const parseAsDate: Parser & { iso: () => Parser; timestamp: () => Parser; }; declare function parseAsArrayOf(itemParser: Parser, separator?: string): Parser; declare function parseAsJson(): Parser; //#endregion //#region src/parser/types.d.ts type BuiltinParsers = { parseAsString: Parser; parseAsInteger: Parser; parseAsFloat: Parser; parseAsIndex: Parser; parseAsBoolean: Parser; parseAsDate: Parser; }; interface CustomParsers {} type KnownParsers = BuiltinParsers & Omit; type InferParserValue

= P extends Parser ? T : never; type NamedParserRef = { [K in keyof KnownParsers]: { name: K; defaultValue?: DefaultValue>; }; }[keyof KnownParsers]; type ParserInput = (Parser & { name?: never; }) | NamedParserRef; type UnwrapOption = T extends Ref ? U : T extends (() => infer U) ? U : T; type WithParser = Omit & { parser?: P; missing?: M; }; type InferInputValue = ResolveInputValue, M>; type ResolveInputValue = [P] extends [undefined] ? string | M : P extends ParserWithDefault ? T : P extends Parser ? T | M : P extends { name: infer K; defaultValue: any; } ? K extends keyof KnownParsers ? InferParserValue : string : P extends { name: infer K; } ? K extends keyof KnownParsers ? InferParserValue | M : string | M : string | M; type ResolveInputWritable = ResolveInputValue extends (infer V) ? V | M | null | undefined : never; type InferInputWritable = ResolveInputWritable, M>; //#endregion export { ReactiveOptions as A, parseAsString as C, unwrapDefault as D, tryParse as E, StateMode as M, Missing as O, parseAsNumberLiteral as S, parseAsStringLiteral as T, parseAsDate as _, InferParserValue as a, parseAsInteger as b, UnwrapOption as c, Parser as d, ParserOptions as f, parseAsBoolean as g, parseAsArrayOf as h, InferInputWritable as i, Register as j, ReactiveFields as k, WithParser as l, defineParser as m, CustomParsers as n, KnownParsers as o, ParserWithDefault as p, InferInputValue as r, ParserInput as s, BuiltinParsers as t, DefaultValue as u, parseAsFloat as v, parseAsStringEnum as w, parseAsJson as x, parseAsIndex as y };