Buckets:
| 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 }> | |
| } | |
Xet Storage Details
- Size:
- 1.67 kB
- Xet hash:
- baded694c25f2b8221c8b9d08fb5a6b9560027727a21afb2f1da600e9bd9ea38
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.