9d1e4d7805
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>
26 lines
575 B
TypeScript
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);
|
|
}
|