docs(runtime): finish the useWindowSize rename in docs; tidy contract guards (#164)
Follow-up cleanup for the 7 confirmed findings from a review of #163. The dominant theme: #163 hard-renamed the public composable useTerminalSize -> useWindowSize (no alias) but left stale references to the dead name in user-facing docs. - README.md + packages/runtime/README.md: the composable tables named the removed `useTerminalSize()` (root README even framed the sole real export `useWindowSize` as an "Ink-compat alias" — now inverted). Point both at `useWindowSize()`. - .agents/docs/ink-divergences.md: two vue-tui-side references to `useTerminalSize` (the shallowRef "object of refs" example and the "composables throw outside a render tree" list) -> `useWindowSize`. The Ink-side `useWindowSize -> WindowSize` naming example is left unchanged. - .agents/docs/accessibility-api.md: the intro cited three "blessed entries" but only aria-camelCase is one; `renderToString` layout-only and the `useWindowSize` name are now Ink parity, not divergences. Reword. - .agents/docs/api-contract.md: tighten the `/internal` wording — the test does assert one tripwire on `/internal`, so "not covered by public-api.test.ts" was imprecise. - public-api.test.ts / render-to-string.test.tsx: the public renderToString dropped the `isScreenReaderEnabled` option but (unlike the sibling `ScreenReaderOptions` type) had no compile-time guard. Replace an obscure, fmt-fragile type-indexing guard with a readable call-site `@ts-expect-error` in render-to-string.test.tsx; re-adding the option to the public RenderToStringOptions makes the directive unused and fails `tsc --noEmit`. - Rename terminal-size.test.tsx / .sequential.test.tsx -> window-size.test.tsx / .sequential.test.tsx to match the migrated symbol. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -71,3 +71,6 @@ test("does not expose the screen-reader linearizer publicly (Ink keeps it intern
|
||||
// It DOES type-check from `/internal`, which the runtime guard above already proves is the home.
|
||||
// @ts-expect-error - ScreenReaderOptions is exported only from @vue-tui/runtime/internal
|
||||
export type _ScreenReaderOptionsIsInternalOnly = import("@vue-tui/runtime").ScreenReaderOptions;
|
||||
|
||||
// The parallel guard for the public `renderToString`'s dropped `isScreenReaderEnabled` OPTION lives
|
||||
// in render-to-string.test.tsx (a call-site `@ts-expect-error`), next to the renderToString tests.
|
||||
|
||||
@@ -42,6 +42,18 @@ describe("renderToString", () => {
|
||||
expect(output).toBe("test");
|
||||
});
|
||||
|
||||
// Contract guard: `isScreenReaderEnabled` is INTERNAL-only — the public `renderToString` must
|
||||
// reject it at the type level (SR rendering goes through `renderToStringWithScreenReader` in
|
||||
// `@vue-tui/runtime/internal`). If the option is ever re-added to the public `RenderToStringOptions`,
|
||||
// the `@ts-expect-error` below goes unused and `tsc --noEmit` fails. (At runtime the unknown option
|
||||
// is harmlessly ignored — only `columns` is read — so the frame still renders.)
|
||||
test("public renderToString rejects the internal isScreenReaderEnabled option (type-level)", () => {
|
||||
const App = defineComponent(() => () => <Text>x</Text>);
|
||||
// @ts-expect-error - isScreenReaderEnabled is internal-only (use renderToStringWithScreenReader from /internal)
|
||||
const output = renderToString(App, { isScreenReaderEnabled: true });
|
||||
expect(output).toBe("x");
|
||||
});
|
||||
|
||||
test("rethrows component errors after cleanup", () => {
|
||||
const App = defineComponent(() => {
|
||||
throw new Error("boom");
|
||||
|
||||
Reference in New Issue
Block a user