import type * as FunctionSpec from "./FunctionSpec"; import type * as RuntimeAndFunctionType from "./RuntimeAndFunctionType"; export declare const TypeId = "@confect/core/GroupSpec"; export type TypeId = typeof TypeId; export declare const isGroupSpec: (u: unknown) => u is AnyWithProps; export interface GroupSpec = never, Groups_ extends AnyWithProps = never> { readonly [TypeId]: TypeId; readonly runtime: Runtime; readonly name: Name_; readonly functions: { [FunctionName in FunctionSpec.Name>]: FunctionSpec.WithName; }; readonly groups: { [GroupName in Name]: WithName; }; addFunction>(function_: Function): GroupSpec; addGroup(group: Group): GroupSpec; addGroupAt(name: AtName, group: Group): GroupSpec>; } export interface Any { readonly [TypeId]: TypeId; } export interface AnyWithProps extends GroupSpec { } export interface AnyWithPropsWithRuntime extends GroupSpec, AnyWithPropsWithRuntime> { } export type Name = Group["name"]; export type Functions = Group["functions"][keyof Group["functions"]]; export type Groups = Group["groups"][keyof Group["groups"]]; export type GroupNames = [Groups] extends [ never ] ? never : Name>; export type WithName> = Extract; /** Assigns a segment name to a leaf group created with {@link make} for typing and refs. */ export type NamedAt = Omit & { readonly name: Name_; }; export type AddGroups = Group extends GroupSpec ? GroupSpec : never; export declare const make: () => GroupSpec<"Convex", "">; export declare const makeAt: (name: Name_) => GroupSpec<"Convex", Name_>; export declare const makeNode: () => GroupSpec<"Node", "">; export declare const makeNodeAt: (name: Name_) => GroupSpec<"Node", Name_>; export declare const withName: (name: Name_, group: Any) => AnyWithProps; //# sourceMappingURL=GroupSpec.d.ts.map