// Generated by dts-bundle-generator v9.5.1

declare const NullProtoObj: {
	new (): any;
};
export declare class Node<Data, Path extends string, Endpoint extends boolean> {
	name: string;
	store: Endpoint extends true ? Data : unknown;
	endpoint: Endpoint;
	type: NodeType;
	paramName: string;
	static: NullProtoObj<Node<Data, any, any>>;
	dynamic: Node<Data, any, any> | null;
	catchAll: Node<Data, any, any> | null;
	optionalCatchAll: Node<Data, any, any> | null;
	wildcard: Node<Data, any, any> | null;
	childCount: number;
	nonStaticChildCount: number;
	constructor(params: NodeParams<Data, Endpoint, Path>);
	addChild(node: Node<Data, string, boolean>): void;
	removeChild(node: Node<Data, any, any>): void;
}
export declare class Reminist<const Paths extends readonly string[] = readonly string[], const Context extends {
	[Path in Paths[number]]: unknown;
} = {
	[Path in Paths[number]]: unknown;
}, const Keys extends readonly string[] = readonly string[]> {
	private keys;
	private routers;
	private staticRouter;
	constructor(options?: ReministOptions<Keys>);
	getRoot(key: Keys[number]): Node<Context[Paths[number]], string, boolean>;
	add<P extends Paths[number]>(key: Keys[number], path: P, store: Context[P]): void;
	find<P extends Paths[number]>(key: Keys[number], path: P): {
		node: Node<Context[P], string, boolean> | null;
		params: Record<string, string>;
	};
	has<P extends Paths[number]>(key: Keys[number], path: P): boolean;
	delete<P extends Paths[number]>(key: Keys[number], path: P): boolean;
	static create<const T extends readonly string[]>(options: {
		keys: T;
	}): {
		withData: <const Paths extends readonly string[], Context extends {
			[Path in Paths[number]]: any;
		} = {
			[Path in Paths[number]]: any;
		}>() => Reminist<Paths, Context, T>;
	};
}
export declare enum NodeType {
	Static = 0,
	Dynamic = 1,
	CatchAll = 2,
	OptionalCatchAll = 3,
	Wildcard = 4
}
export type NodeParams<Data, Endpoint extends boolean, Path extends string> = {
	name: Path;
} & (Endpoint extends true ? {
	endpoint: true;
	store: Data;
} : {
	endpoint: false;
	store?: never;
});
export type ReministOptions<Keys extends readonly string[]> = {
	keys: Keys;
};
type NullProtoObj<T = unknown> = InstanceType<new () => Record<PropertyKey, T>>;

export {};
