mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-07 02:59:05 +00:00
DataTable accepted any mix of its 40-odd props and rejected the incoherent combinations at runtime, from a validator that threw during the first render. A caller only found out it had wired server sorting without a `sorting` prop when the page blew up in front of them. Split the public prop type into mode-keyed unions instead, so the compiler rejects those combinations at the call site. `validateDataTableConfig` and `DataTableConfigError` go away; the component body reads an unchanged flat `DataTableResolvedProps`, which every union member is assignable to, so there is no narrowing inside it. All 44 existing call sites typecheck against the new union unchanged, which `next build` covers. That build only typechecks the app module graph, so the prop type itself needed a gate of its own: `npm run test:types` runs vitest's typecheck mode over `*.test-d.tsx`, and the unit workflow now runs it. The four guards deleted from `DataTable.test.tsx` come back there as compile-time assertions, and loosening the union back to the flat shape fails all five.
68 lines
1.8 KiB
TypeScript
68 lines
1.8 KiB
TypeScript
import { defineConfig, type Plugin, type ViteUserConfig } from "vitest/config";
|
|
import { resolve } from "path";
|
|
|
|
const staticImageData: Plugin = {
|
|
name: "next-static-image-data",
|
|
enforce: "pre",
|
|
load(id: string) {
|
|
const path = id.split("?")[0];
|
|
if (!/\.(svg|png|jpe?g|gif|webp|avif|ico|bmp)$/i.test(path)) return undefined;
|
|
const name = path.slice(path.lastIndexOf("/") + 1);
|
|
return `export default { src: ${JSON.stringify(`/_next/static/media/${name}`)}, height: 24, width: 24 };`;
|
|
},
|
|
};
|
|
|
|
const config: ViteUserConfig = {
|
|
plugins: [staticImageData],
|
|
test: {
|
|
environment: "./tests/jsdomFetchEnv.ts",
|
|
setupFiles: ["tests/setupTests.ts"],
|
|
globals: true,
|
|
css: true, // lets you import CSS/modules without extra mocks
|
|
testTimeout: 30000,
|
|
silent: process.env.CI ? "passed-only" : false,
|
|
teardownTimeout: 60000,
|
|
coverage: {
|
|
provider: "v8",
|
|
reporter: ["text", "lcov"],
|
|
include: ["src/**/*.{ts,tsx}"],
|
|
exclude: [
|
|
"**/*.d.ts",
|
|
"**/*.test.*",
|
|
"**/*.test-d.*",
|
|
"**/*.spec.*",
|
|
|
|
"tests/**",
|
|
|
|
"node_modules/**",
|
|
".next/**",
|
|
"out/**",
|
|
|
|
"**/*.config.*",
|
|
"postcss.config.*",
|
|
"tailwind.config.*",
|
|
"next.config.*",
|
|
],
|
|
},
|
|
exclude: ["node_modules/**"],
|
|
include: ["src/**/*.test.ts", "src/**/*.test.tsx", "tests/**/*.test.ts", "tests/**/*.test.tsx"],
|
|
typecheck: {
|
|
include: ["src/**/*.test-d.ts", "src/**/*.test-d.tsx"],
|
|
ignoreSourceErrors: true,
|
|
},
|
|
},
|
|
resolve: {
|
|
alias: {
|
|
"@": resolve(__dirname, "src"),
|
|
},
|
|
},
|
|
define: {
|
|
"import.meta.vitest": "undefined",
|
|
},
|
|
esbuild: {
|
|
jsx: "automatic",
|
|
jsxImportSource: "react",
|
|
},
|
|
};
|
|
|
|
export default defineConfig(config);
|