Files
vue-tui/packages/runtime-tests/integration/pty/fixtures/exit-on-exit-with-error-value-property.tsx
T
Yunfei He 9d1e4d7805 feat(runtime)!: replace useExit() with Ink-aligned useAppContext() (#69)
Ink's `useApp()` returns `{ exit, waitUntilRenderFlush }`. vue-tui previously
exposed only `exit()` via `useExit()` and kept `waitUntilRenderFlush` on the
`TuiApp` handle alone. Align the public surface with Ink: add `useAppContext()`
returning the same pair, and remove `useExit()`.

- thread `waitUntilRenderFlush` into the injected `AppContext` via a hoisted
  impl shared by the `TuiApp` handle and the composable, so both resolve
  identically
- add `useAppContext()`; delete `useExit()`; migrate all call sites, PTY
  fixtures, examples, READMEs and the public-API surface test
- port Ink's two "useApp waitUntilRenderFlush" tests; Ink's third relies on
  React concurrent mode (N/A in Vue)
- rewrite the ink-divergences entry: this is now a *naming* divergence
  (`useAppContext` vs `useApp`, mirroring `createApp` vs `render`), not a
  surface one — and fix the prior wrong claim that Ink's `useApp` returns
  stdin/stdout/stderr

The name is qualified (`useAppContext`, not `useApp`) so it doesn't read as the
Vue application instance (`createApp`/`app.mount`) — the same Vue-native naming
choice vue-tui already makes with `createApp()` vs Ink's `render()`.

BREAKING CHANGE: `useExit()` is removed. Replace `const exit = useExit()` with
`const { exit } = useAppContext()`.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 19:57:52 +08:00

26 lines
575 B
TypeScript

import { createApp, Text, useAppContext } from "@vue-tui/runtime";
import { defineComponent, onMounted } from "vue";
const App = defineComponent(() => {
const { exit } = useAppContext();
onMounted(() => {
setTimeout(() => {
const error = new Error("errored");
(error as Error & { value: string }).value = "hello from error";
exit(error);
}, 500);
});
return () => <Text>Testing</Text>;
});
const app = createApp(App);
app.mount();
try {
await app.waitUntilExit();
} catch (error: unknown) {
console.log((error as Error).message);
}