Files
wehub-resource-sync e30e75b5d4
Changesets / Create Version PR (push) Waiting to run
Code Quality / Oxlint + Oxfmt (push) Waiting to run
Code Quality / Template Sync (push) Waiting to run
Code Quality / Build Changed Packages (push) Waiting to run
Code Quality / Test Changed Packages (push) Waiting to run
Deploy Expo Example / Deploy Production (push) Waiting to run
Deploy Ink Example / Deploy Production (push) Waiting to run
Python Tests / pytest (assistant-stream, 3.10) (push) Waiting to run
Python Tests / pytest (assistant-stream, 3.12) (push) Waiting to run
Python Tests / pytest (assistant-ui-sync-server-api, 3.10) (push) Waiting to run
Python Tests / pytest (assistant-ui-sync-server-api, 3.12) (push) Waiting to run
Deploy Shadcn Registry / Deploy Production (push) Waiting to run
Template Metrics / LOC + Bundle Size (push) Waiting to run
chore: import upstream snapshot with attribution
2026-07-13 13:40:13 +08:00

255 lines
8.8 KiB
TypeScript

import React, { FC, PropsWithChildren, ReactNode } from "react";
type AncestorsOf<K extends ClientNames, Seen extends ClientNames = never> = K extends Seen ? never : ParentOf<K> extends never ? never : ParentOf<K> | AncestorsOf<ParentOf<K>, Seen | K>;
type AssistantClient = {
[K in ClientNames]: AssistantClientAccessor<K>;
} & {
subscribe(listener: () => void): Unsubscribe;
on<TEvent extends AssistantEventName>(selector: AssistantEventSelector<TEvent>, callback: AssistantEventCallback<TEvent>): Unsubscribe;
};
type AssistantClientAccessor<K extends ClientNames> = (() => ClientSchemas[K]["methods"]) & (ClientMeta<K> | {
source: "root";
query: Record<string, never>;
} | {
source: null;
query: null;
}) & {
name: K;
};
type AssistantEventCallback<TEvent extends AssistantEventName> = (payload: AssistantEventPayload[TEvent]) => void;
type AssistantEventName = keyof AssistantEventPayload;
type AssistantEventPayload = ClientEventMap & {
"*": WildcardPayload;
};
type AssistantEventScope<TEvent extends AssistantEventName> = "*" | EventSource<TEvent> | (EventSource<TEvent> extends ClientNames ? AncestorsOf<EventSource<TEvent>> : never);
type AssistantEventSelector<TEvent extends AssistantEventName> = TEvent | {
scope: AssistantEventScope<TEvent>;
event: TEvent;
};
type AssistantState = {
[K in ClientNames]: ClientSchemas[K]["methods"] extends {
getState: () => infer S;
} ? S : never;
};
declare namespace AuiIf {
type Props = PropsWithChildren<{
condition: AuiIf.Condition;
}>;
type Condition = (state: AssistantState) => boolean;
}
declare const AuiIf: FC<AuiIf.Props>;
declare const AuiProvider: (_param0: {
value: AssistantClient;
children: React.ReactNode;
}) => React.ReactElement;
type ClientElement<K extends ClientNames> = ResourceElement<ClientOutput<K>>;
type ClientError<E extends string> = {
methods: Record<E, () => E>;
meta: {
source: ClientNames;
query: Record<E, E>;
};
events: Record<`${E}.`, E>;
};
type ClientEventMap = UnionToIntersection<{
[K in ClientNames]: ClientEvents<K>;
}[ClientNames]>;
type ClientEvents<K extends ClientNames> = "events" extends keyof ClientSchemas[K] ? ClientSchemas[K]["events"] extends ClientEventsType<K> ? ClientSchemas[K]["events"] : never : never;
type ClientEventsType<K extends ClientNames> = Record<`${K}.${string}`, unknown>;
type ClientMeta<K extends ClientNames> = "meta" extends keyof ClientSchemas[K] ? Pick<ClientSchemas[K]["meta"] extends ClientMetaType ? ClientSchemas[K]["meta"] : never, "query" | "source"> : never;
type ClientMetaType = {
source: ClientNames;
query: Record<string, unknown>;
};
interface ClientMethods {
[key: string | symbol]: (...args: any[]) => any;
}
type ClientNames = keyof ClientSchemas extends (infer U) ? U : never;
type ClientOutput<K extends ClientNames> = ClientSchemas[K]["methods"] & ClientMethods;
type ClientSchema<TMethods extends ClientMethods = ClientMethods, TMeta extends ClientMetaType = never, TEvents extends Record<string, unknown> = never> = {
methods: TMethods;
meta?: TMeta;
events?: TEvents;
};
type ClientSchemas = keyof ScopeRegistry extends never ? {
"ERROR: No clients were defined": ClientError<"ERROR: No clients were defined">;
} : {
[K in keyof ScopeRegistry]: ValidateClient<K>;
};
type ContravariantResource<R, A extends readonly unknown[] = any[]> = (...args: A) => ResourceElement<R>;
declare const Derived: <K extends ClientNames>(_config: Derived.Props<K>) => ResourceElement<null, [
_config: Derived.Props<K>
]>;
declare namespace Derived {
type Props<K extends ClientNames> = {
get: (client: AssistantClient) => ReturnType<AssistantClientAccessor<K>>;
} & ClientMeta<K>;
}
type DerivedElement<K extends ClientNames> = ResourceElement<null, [
Derived.Props<K>
]>;
type EventSource<T extends AssistantEventName> = T extends `${infer Source}.${string}` ? Source : never;
type Hook = (...args: any[]) => any;
type InferClientState<TMethods> = TMethods extends {
getState: () => infer S;
} ? S : unknown;
type InferClientState$1<TMethods> = TMethods extends {
getState: () => infer S;
} ? S : unknown;
type InferClientState$2<TMethods> = TMethods extends {
getState: () => infer S;
} ? S : undefined;
type ParentOf<K extends ClientNames> = AssistantClientAccessor<K> extends {
source: infer S;
} ? S extends ClientNames ? S : never : never;
declare function RenderChildrenWithAccessor<T>(_param1: {
getItemState: (aui: AssistantClient) => T;
children: (getItem: () => T) => ReactNode;
}): ReactNode;
type ResourceElement<R, A extends readonly unknown[] = any[]> = {
readonly hook: (...args: A) => R;
readonly args: Readonly<A>;
readonly key?: string | number;
readonly deps?: readonly unknown[];
};
interface ScopeRegistry {
[key: string]: { methods: any; meta?: any; events?: any };
}
type ScopesConfig = {
[K in ClientNames]?: ClientElement<K> | DerivedElement<K>;
};
type TransformScopesFn = (scopes: ScopesConfig, parent: AssistantClient) => void;
type UnionToIntersection<U> = (U extends unknown ? (x: U) => void : never) extends ((x: infer I) => void) ? I : never;
type Unsubscribe = () => void;
type ValidateClient<K extends keyof ScopeRegistry> = ScopeRegistry[K] extends {
methods: ClientMethods;
} ? "meta" extends keyof ScopeRegistry[K] ? ScopeRegistry[K]["meta"] extends ClientMetaType ? "events" extends keyof ScopeRegistry[K] ? ScopeRegistry[K]["events"] extends ClientEventsType<K> ? ScopeRegistry[K] : ClientError<`ERROR: ${K & string} has invalid events type`> : ScopeRegistry[K] : ClientError<`ERROR: ${K & string} has invalid meta type`> : "events" extends keyof ScopeRegistry[K] ? ScopeRegistry[K]["events"] extends ClientEventsType<K> ? ScopeRegistry[K] : ClientError<`ERROR: ${K & string} has invalid events type`> : ScopeRegistry[K] : ClientError<`ERROR: ${K & string} has invalid methods type`>;
type WildcardPayload = {
[K in keyof ClientEventMap]: {
event: K;
payload: ClientEventMap[K];
};
}[Extract<keyof ClientEventMap, string>];
declare function attachTransformScopes(hook: Hook, transform: TransformScopesFn): void;
declare function forwardTransformScopes(target: Hook, source: Hook): void;
declare namespace entry_root_exports {
export { AssistantClient, AssistantClientAccessor, AssistantEventCallback, AssistantEventName, AssistantEventPayload, AssistantEventScope, AssistantEventSelector, AssistantState, AuiIf, AuiProvider, ClientElement, ClientEvents, ClientMeta, ClientMethods, ClientNames, ClientOutput, ClientSchema, Derived, RenderChildrenWithAccessor, ScopeRegistry, ScopesConfig, Unsubscribe, attachTransformScopes, forwardTransformScopes, normalizeEventSelector, useAssistantClientRef, useAssistantEmit, useAui, useAuiEvent, useAuiState, useClientList, useClientLookup, useClientResource };
}
declare const normalizeEventSelector: <TEvent extends AssistantEventName>(selector: AssistantEventSelector<TEvent>) => {
scope: AssistantEventScope<TEvent>;
event: TEvent;
};
declare const useAssistantClientRef: () => {
parent: AssistantClient;
current: AssistantClient | null;
};
declare const useAssistantEmit: () => <TEvent extends Exclude<AssistantEventName, "*">>(event: TEvent, payload: AssistantEventPayload[TEvent]) => void;
declare namespace useAui {
type Props = {
[K in ClientNames]?: ClientElement<K> | DerivedElement<K>;
};
}
declare function useAui(): AssistantClient;
declare function useAui(clients: useAui.Props): AssistantClient;
declare function useAui(clients: useAui.Props, config: {
parent: null | AssistantClient;
}): AssistantClient;
declare const useAuiEvent: <TEvent extends AssistantEventName>(selector: AssistantEventSelector<TEvent>, callback: AssistantEventCallback<TEvent>) => void;
declare const useAuiState: <T>(selector: (state: AssistantState) => T) => T;
declare const useClientList: <TData, TMethods extends ClientMethods>(props: useClientList.Props<TData, TMethods>) => {
state: InferClientState<TMethods>[];
get: (lookup: {
index: number;
} | {
key: string;
}) => TMethods;
add: (initialData: TData) => void;
};
declare namespace useClientList {
type ResourceProps<TData> = {
key: string;
getInitialData: () => TData;
remove: () => void;
};
type Props<TData, TMethods extends ClientMethods> = {
initialValues: TData[];
getKey: (data: TData) => string;
resource: ContravariantResource<TMethods, [
ResourceProps<TData>
]>;
};
}
declare function useClientLookup<TMethods extends ClientMethods>(elements: readonly ResourceElement<TMethods>[]): {
state: InferClientState$1<TMethods>[];
get: (lookup: {
index: number;
} | {
key: string;
}) => TMethods;
};
declare const useClientResource: <TMethods extends ClientMethods>(element: ResourceElement<TMethods>) => {
state: InferClientState$2<TMethods>;
methods: TMethods;
key: string | number | undefined;
};
export { entry_root_exports as entry_root };