import type { NamedType, NodeDocument, NodeType, NodeTypeMap, NodeWithConstEnum, PrimitiveType, Types } from './types.js'; export declare function uniq(arr: Array): Array; export declare function ensureArray(t: T | Array | undefined | null): Array; export declare const isPrimitiveType: (node: NodeType) => node is PrimitiveType; export declare const constEnumTypes: Set<"string" | "number" | "boolean" | "object" | "integer" | "and" | "or" | "ref" | "any" | "null" | "array" | "tuple">; export declare const hasConstEnum: (node: NodeType) => node is NodeWithConstEnum; export type ComparablePrimitives = undefined | null | boolean | string | number; export type ComparableArray = Array; export type ComparableObject = { [key: string]: Comparable; }; export type Comparable = ComparablePrimitives | ComparableArray | ComparableObject; export declare function isEqual(a: T, b: T): boolean; export declare function isEqual(a: T, b: U): false; export declare function intersection(a: Array, b: Array): Array; export declare function union(a: Array, b: Array): Array; export interface NodeWithOrder { node: T; order: number; } type SplitTypes = { [T in Types]: Array>; }; export declare function splitTypes(nodes: Array): SplitTypes; export declare function flattenSplitTypeValues(splitTypes: SplitTypes): NodeType[]; export declare function firstSplitTypeIndex(nodes: Array>): number; export declare function copyName(from: NamedType, to: NamedType): typeof to; export declare function isNonNullable(t: T): t is NonNullable; export declare function isNodeDocument(t: NodeDocument | NodeType | Array): t is NodeDocument; export {};