refactor(tui): extract standalone package (#31193)

This commit is contained in:
Dax 2026-06-07 01:24:27 -04:00 committed by GitHub
commit 106f8e94d6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
84 changed files with 1147 additions and 1918 deletions

View file

@ -2,13 +2,12 @@
import { testRender } from "@opentui/solid"
import { onMount } from "solid-js"
import { ArgsProvider } from "../../../../src/context/args"
import { createExit, ExitProvider } from "../../../../src/context/exit"
import { KVProvider, useKV } from "../../../../src/context/kv"
import { ProjectProvider, useProject } from "../../../../src/context/project"
import { SDKProvider } from "../../../../src/context/sdk"
import { SyncProvider, useSync } from "../../../../src/context/sync"
import { createEventSource, createFetch, type FetchHandler, directory } from "../../../fixture/tui-sdk"
import { TestTuiEnvironmentProvider } from "../../../fixture/tui-environment"
import { TestTuiContexts } from "../../../fixture/tui-environment"
export { createEventSource, createFetch, directory, eventSource, json, worktree } from "../../../fixture/tui-sdk"
export async function wait(fn: () => boolean, timeout = 2000) {
@ -44,32 +43,22 @@ export async function mount(override?: FetchHandler, state?: string) {
}
const app = await testRender(() => (
<TestTuiEnvironmentProvider paths={state ? { state } : undefined}>
<TestTuiContexts paths={state ? { state } : undefined}>
<ArgsProvider>
<ExitProvider exit={createExit(async () => {})}>
<KVProvider>
<SDKProvider url="http://test" directory={directory} fetch={calls.fetch} events={events.source}>
<ProjectProvider>
<SyncFixtureProvider>
<SyncProvider>
<Probe />
</SyncFixtureProvider>
</SyncProvider>
</ProjectProvider>
</SDKProvider>
</KVProvider>
</ExitProvider>
</ArgsProvider>
</TestTuiEnvironmentProvider>
</TestTuiContexts>
))
await ready
await wait(() => sync.status === "complete")
return { app, emit: events.emit, kv, project, sync, session: calls.session }
}
function SyncFixtureProvider(props: { children: import("solid-js").JSX.Element }) {
return (
<SyncProvider kv={useKV()} logger={{ error() {} }}>
{props.children}
</SyncProvider>
)
}

View file

@ -9,7 +9,7 @@ import { onCleanup } from "solid-js"
import { tmpdir } from "../../fixture/fixture"
import { createTuiResolvedConfig } from "../../fixture/tui-runtime"
import type { TuiKeybind } from "../../../src/config/keybind"
import { TestTuiEnvironmentProvider } from "../../fixture/tui-environment"
import { TestTuiContexts } from "../../fixture/tui-environment"
async function wait(fn: () => boolean, timeout = 2000) {
const start = Date.now()
@ -57,7 +57,7 @@ async function mountPrompt(input: {
onCleanup(off)
return (
<TestTuiEnvironmentProvider
<TestTuiContexts
directory={input.root}
paths={{
home: input.root,
@ -78,7 +78,7 @@ async function mountPrompt(input: {
</KVProvider>
</TuiConfigProvider>
</OpencodeKeymapProvider>
</TestTuiEnvironmentProvider>
</TestTuiContexts>
)
}

View file

@ -8,7 +8,7 @@ import { KVProvider } from "../../../src/context/kv"
import { ThemeProvider } from "../../../src/context/theme"
import { TuiConfigProvider } from "../../../src/config"
import { DiffViewerFileTree } from "../../../src/feature-plugins/system/diff-viewer-file-tree"
import { TestTuiEnvironmentProvider } from "../../fixture/tui-environment"
import { TestTuiContexts } from "../../fixture/tui-environment"
import {
allExpandedFileTreeDirectories,
buildFileTree,
@ -180,13 +180,13 @@ async function captureSettledFrame(app: Awaited<ReturnType<typeof testRender>>)
function withTheme(component: () => JSX.Element) {
return (
<TestTuiEnvironmentProvider>
<TestTuiContexts>
<TuiConfigProvider config={createTuiResolvedConfig()}>
<KVProvider>
<ThemeProvider mode="dark">{component()}</ThemeProvider>
</KVProvider>
</TuiConfigProvider>
</TestTuiEnvironmentProvider>
</TestTuiContexts>
)
}

View file

@ -13,7 +13,7 @@ import { OpencodeKeymapProvider } from "../../../src/keymap"
import diffViewerPlugin from "../../../src/feature-plugins/system/diff-viewer"
import { createTuiPluginApi } from "../../fixture/tui-plugin"
import { createTuiResolvedConfig } from "../../fixture/tui-runtime"
import { TestTuiEnvironmentProvider } from "../../fixture/tui-environment"
import { TestTuiContexts } from "../../fixture/tui-environment"
test("closing the diff viewer returns to the route it opened from", async () => {
const viewer = await renderDiffViewer([])
@ -152,7 +152,7 @@ async function renderDiffViewer(vcsDiff: unknown[], height = 20) {
commands.get("diff.open")?.run?.({} as never)
return (
<TestTuiEnvironmentProvider>
<TestTuiContexts>
<OpencodeKeymapProvider keymap={keymap}>
<TuiConfigProvider config={config}>
<KVProvider>
@ -162,7 +162,7 @@ async function renderDiffViewer(vcsDiff: unknown[], height = 20) {
</KVProvider>
</TuiConfigProvider>
</OpencodeKeymapProvider>
</TestTuiEnvironmentProvider>
</TestTuiContexts>
)
}

View file

@ -7,7 +7,7 @@ import { ProjectProvider } from "../../../src/context/project"
import { SDKProvider } from "../../../src/context/sdk"
import { SyncProviderV2, useSyncV2 } from "../../../src/context/sync-v2"
import { createEventSource, createFetch, directory, json } from "../../fixture/tui-sdk"
import { TestTuiEnvironmentProvider } from "../../fixture/tui-environment"
import { TestTuiContexts } from "../../fixture/tui-environment"
async function wait(fn: () => boolean, timeout = 2000) {
const start = Date.now()
@ -43,7 +43,7 @@ test("sync v2 settles pending tools when a live failure arrives", async () => {
}
const app = await testRender(() => (
<TestTuiEnvironmentProvider>
<TestTuiContexts>
<SDKProvider url="http://test" directory={directory} events={events.source} fetch={calls.fetch}>
<ProjectProvider>
<SyncProviderV2>
@ -51,7 +51,7 @@ test("sync v2 settles pending tools when a live failure arrives", async () => {
</SyncProviderV2>
</ProjectProvider>
</SDKProvider>
</TestTuiEnvironmentProvider>
</TestTuiContexts>
))
try {
@ -172,7 +172,7 @@ test("sync v2 renders admitted prompts only after promotion", async () => {
}
const app = await testRender(() => (
<TestTuiEnvironmentProvider>
<TestTuiContexts>
<SDKProvider url="http://test" directory={directory} events={events.source} fetch={calls.fetch}>
<ProjectProvider>
<SyncProviderV2>
@ -180,7 +180,7 @@ test("sync v2 renders admitted prompts only after promotion", async () => {
</SyncProviderV2>
</ProjectProvider>
</SDKProvider>
</TestTuiEnvironmentProvider>
</TestTuiContexts>
))
try {
@ -236,7 +236,7 @@ test("sync v2 renders a promoted prompt when admission was missed", async () =>
}
const app = await testRender(() => (
<TestTuiEnvironmentProvider>
<TestTuiContexts>
<SDKProvider url="http://test" directory={directory} events={events.source} fetch={calls.fetch}>
<ProjectProvider>
<SyncProviderV2>
@ -244,7 +244,7 @@ test("sync v2 renders a promoted prompt when admission was missed", async () =>
</SyncProviderV2>
</ProjectProvider>
</SDKProvider>
</TestTuiEnvironmentProvider>
</TestTuiContexts>
))
try {
@ -284,7 +284,7 @@ test("sync v2 projects live context updates with their message ID", async () =>
}
const app = await testRender(() => (
<TestTuiEnvironmentProvider>
<TestTuiContexts>
<SDKProvider url="http://test" directory={directory} events={events.source} fetch={calls.fetch}>
<ProjectProvider>
<SyncProviderV2>
@ -292,7 +292,7 @@ test("sync v2 projects live context updates with their message ID", async () =>
</SyncProviderV2>
</ProjectProvider>
</SDKProvider>
</TestTuiEnvironmentProvider>
</TestTuiContexts>
))
try {
@ -339,7 +339,7 @@ test("sync v2 preserves live events while snapshot hydration is in flight", asyn
}
const app = await testRender(() => (
<TestTuiEnvironmentProvider>
<TestTuiContexts>
<SDKProvider url="http://test" directory={directory} events={events.source} fetch={calls.fetch}>
<ProjectProvider>
<SyncProviderV2>
@ -347,7 +347,7 @@ test("sync v2 preserves live events while snapshot hydration is in flight", asyn
</SyncProviderV2>
</ProjectProvider>
</SDKProvider>
</TestTuiEnvironmentProvider>
</TestTuiContexts>
))
try {
@ -389,7 +389,7 @@ test("sync v2 replaces stale cached rows while preserving in-flight live rows",
}
const app = await testRender(() => (
<TestTuiEnvironmentProvider>
<TestTuiContexts>
<SDKProvider url="http://test" directory={directory} events={events.source} fetch={calls.fetch}>
<ProjectProvider>
<SyncProviderV2>
@ -397,7 +397,7 @@ test("sync v2 replaces stale cached rows while preserving in-flight live rows",
</SyncProviderV2>
</ProjectProvider>
</SDKProvider>
</TestTuiEnvironmentProvider>
</TestTuiContexts>
))
try {
@ -458,7 +458,7 @@ test("sync v2 preserves snapshot order and metadata for in-flight updates", asyn
}
const app = await testRender(() => (
<TestTuiEnvironmentProvider>
<TestTuiContexts>
<SDKProvider url="http://test" directory={directory} events={events.source} fetch={calls.fetch}>
<ProjectProvider>
<SyncProviderV2>
@ -466,7 +466,7 @@ test("sync v2 preserves snapshot order and metadata for in-flight updates", asyn
</SyncProviderV2>
</ProjectProvider>
</SDKProvider>
</TestTuiEnvironmentProvider>
</TestTuiContexts>
))
try {

View file

@ -7,7 +7,7 @@ import { ProjectProvider, useProject } from "../../../src/context/project"
import { SDKProvider } from "../../../src/context/sdk"
import { useEvent } from "../../../src/context/event"
import { createEventSource, createFetch, directory } from "../../fixture/tui-sdk"
import { TestTuiEnvironmentProvider } from "../../fixture/tui-environment"
import { TestTuiContexts } from "../../fixture/tui-environment"
const projectID = "proj_test"
@ -60,7 +60,7 @@ async function mount() {
})
const app = await testRender(() => (
<TestTuiEnvironmentProvider>
<TestTuiContexts>
<SDKProvider url="http://test" directory={directory} events={events.source} fetch={calls.fetch}>
<ProjectProvider>
<Probe
@ -74,7 +74,7 @@ async function mount() {
/>
</ProjectProvider>
</SDKProvider>
</TestTuiEnvironmentProvider>
</TestTuiContexts>
))
await ready