Download packages/tui/src/context/route.tsx from SaylorTwift/opencode: direct link, hf CLI and curl.
- Browser
- Download file 1.67 kB
-
https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/tui/src/context/route.tsx
- Command line
-
hf download hf://SaylorTwift/opencode/packages/tui/src/context/route.tsx
-
curl -L -o route.tsx https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/tui/src/context/route.tsx
1.67 kB
| 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 }> | |
| } | |