vite.config.ts
import "vite-plus/test/config";
import { defineConfig } from "vite-plus";
import * as NodeURL from "node:url";
export default defineConfig({
resolve: {
alias: {
"~": NodeURL.fileURLToPath(new URL("./apps/web/src", import.meta.url)),
},
},
test: {
environment: "node",
exclude: [
"**/.repos/**",
"**/node_modules/**",
"**/dist/**",
"**/dist-electron/**",
"**/.{idea,git,cache,output,temp}/**",
],
hookTimeout: 60_000,
testTimeout: 60_000,
},
staged: {
// Formatter only for now — no lint or typecheck on commit.
"*": "vp fmt --no-error-on-unmatched-pattern",
},
fmt: {
ignorePatterns: [
".reference",
".repos/**",
".alchemy",
"dist",
"dist-electron",
"node_modules",
"pnpm-lock.yaml",
"*.tsbuildinfo",
"**/routeTree.gen.ts",
"apps/mobile/android/**",
"apps/mobile/ios/**",
"apps/web/src/lib/vendor/qrcodegen.ts",
"apps/mobile/uniwind-types.d.ts",
"*.icon/**",
],
sortPackageJson: {},
overrides: [
{
files: [".devcontainer/devcontainer.json"],
options: {
trailingComma: "none",
},
},
],
},
lint: {
ignorePatterns: [
".repos",
".repos/**",
"dist",
"dist-electron",
"node_modules",
"pnpm-lock.yaml",
"*.tsbuildinfo",
"**/routeTree.gen.ts",
"apps/mobile/android/**",
"apps/mobile/ios/**",
"apps/mobile/uniwind-types.d.ts",
],
plugins: ["eslint", "oxc", "react", "unicorn", "typescript"],
jsPlugins: ["./oxlint-plugin-t3code/index.ts"],
categories: {
correctness: "warn",
suspicious: "warn",
perf: "warn",
},
rules: {
"unicorn/no-array-sort": "off",
"unicorn/consistent-function-scoping": "off",
"oxc/no-map-spread": "off",
"react-in-jsx-scope": "off",
"react-hooks/exhaustive-deps": "off",
"eslint/no-shadow": "off",
"eslint/no-await-in-loop": "off",
"eslint/no-underscore-dangle": "off",
"typescript/consistent-return": "off",
"typescript/no-base-to-string": "off",
"typescript/no-duplicate-type-constituents": "off",
"typescript/no-floating-promises": "off",
"typescript/no-implied-eval": "off",
"typescript/no-meaningless-void-operator": "off",
"typescript/no-redundant-type-constituents": "off",
"typescript/no-unnecessary-boolean-literal-compare": "off",
"typescript/no-unnecessary-type-conversion": "off",
"typescript/no-unnecessary-type-arguments": "off",
"typescript/no-unnecessary-type-assertion": "off",
"typescript/no-unnecessary-type-parameters": "off",
"typescript/no-unsafe-type-assertion": "off",
"typescript/await-thenable": "off",
"typescript/require-array-sort-compare": "off",
"typescript/restrict-template-expressions": "off",
"typescript/unbound-method": "off",
"eslint/no-restricted-imports": [
"error",
{
paths: [
{
name: "@t3tools/client-runtime",
message:
"Import from an explicit @t3tools/client-runtime/* subpath. The package has no root export.",
},
{
name: "@pierre/diffs/react",
importNames: ["CodeView"],
message:
"Use StyledDiffCodeView so web diff surfaces share styling and virtualized geometry.",
},
],
},
],
"t3code/no-global-process-runtime": "error",
"t3code/no-inline-schema-compile": "warn",
"t3code/no-manual-effect-runtime-in-tests": "error",
"t3code/no-mobile-uniwind-theme-escape-hatches": "error",
"t3code/no-native-title-tooltip": "error",
"t3code/namespace-node-imports": "error",
},
options: {
// Revisit once Oxlint's tsgolint path can integrate with @effect/tsgo diagnostics.
typeAware: false,
typeCheck: false,
},
},
});