/
Alex_Ural
/
opencode
Обзор
Документация
Войти
/
Alex_Ural
/
opencode
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
packages/tui/src/context/route.tsx
60 строк
2 KB
Dax
refactor(tui): extract standalone package (#31193)
07 июн 2026, 08:24
Не верифицирован
07 июн 2026, 08:24
106f8e9
Код
Авторство
О чём код?
import { createStore, reconcile } from "solid-js/store" import { createSimpleContext } from "./helper" import type { PromptInfo } from "../prompt/history" import { useTuiStartup } from "./runtime" export type HomeRoute = { type: "home" prompt?: PromptInfo } export type SessionRoute = { type: "session" sessionID: string prompt?: PromptInfo } export type PluginRoute = { type: "plugin" id: string data?: Record<string, unknown> } export type Route = HomeRoute | SessionRoute | PluginRoute export const { use: useRoute, provider: RouteProvider } = createSimpleContext({ name: "Route", init: (props: { initialRoute?: Route }) => { const startup = useTuiStartup() const [store, setStore] = createStore<Route>( props.initialRoute ?? initialRoute(startup.initialRoute) ?? { type: "home" }, ) return { get data() { return store }, navigate(route: Route) { setStore(reconcile(route)) }, } }, }) function initialRoute(value: unknown): Route | undefined { if (!value || typeof value !== "object" || !("type" in value)) return if (value.type === "home") return { type: "home" } if (value.type === "session" && "sessionID" in value && typeof value.sessionID === "string") { return { type: "session", sessionID: value.sessionID } } if (value.type === "plugin" && "id" in value && typeof value.id === "string") { return { type: "plugin", id: value.id } } } export type RouteContext = ReturnType<typeof useRoute> export function useRouteData<T extends Route["type"]>(type: T) { const route = useRoute() return route.data as Extract<Route, { type: typeof type }> }