Files
tech-interview-handbook/vite.config.ts
2026-03-20 15:59:43 +08:00

190 lines
4.4 KiB
TypeScript

import { defineConfig } from 'vite-plus';
export default defineConfig({
staged: {
'*': 'vp check --fix',
},
test: {
passWithNoTests: true,
},
fmt: {
bracketSameLine: true,
printWidth: 80,
proseWrap: 'never',
singleQuote: true,
trailingComma: 'all',
sortPackageJson: false,
overrides: [
{
files: ['apps/portal/**/*.{js,jsx,ts,tsx}'],
options: {
sortTailwindcss: {
config: 'apps/portal/tailwind.config.cjs',
functions: ['clsx'],
},
},
},
],
ignorePatterns: [
'node_modules',
'.vscode',
'.next',
'build',
'dist',
'*.tsbuildinfo',
'*.gitignore',
'*.svg',
'*.lock',
'*.npmignore',
'*.sql',
'*.png',
'*.jpg',
'*.jpeg',
'*.gif',
'*.ico',
'*.sh',
'Dockerfile',
'Dockerfile.*',
'.env',
'.env.*',
'LICENSE',
'*.log',
'.DS_Store',
'.dockerignore',
'*.patch',
'*.toml',
'*.prisma',
'apps/website/experimental/domain/**/*.html',
],
},
lint: {
plugins: ['typescript', 'react'],
categories: {
correctness: 'error',
},
settings: {
next: {
rootDir: ['apps/portal/'],
},
},
ignorePatterns: [
'.next/**',
'.turbo/**',
'.cache/**',
'dist/**',
'dist-ssr/**',
'coverage/**',
'public/dist/**',
'server/dist/**',
'apps/portal/build/**',
'apps/portal/out/**',
'apps/portal/prisma/**',
'apps/website/.docusaurus/**',
'apps/website/.cache-loader/**',
'apps/website/experimental/**',
],
rules: {
camelcase: [
'error',
{
properties: 'never',
ignoreDestructuring: true,
},
],
'capitalized-comments': [
'error',
'always',
{
ignoreConsecutiveComments: true,
},
],
curly: 'error',
eqeqeq: ['error', 'smart'],
'func-names': ['error', 'as-needed'],
'func-style': [
'error',
'declaration',
{
allowArrowFunctions: true,
},
],
'guard-for-in': 'error',
'init-declarations': 'error',
'no-console': [
'error',
{
allow: ['warn', 'error', 'info'],
},
],
'no-else-return': [
'error',
{
allowElseIf: false,
},
],
'no-lonely-if': 'error',
'no-shadow': 'off',
'no-unused-vars': [
'error',
{
argsIgnorePattern: '^_',
},
],
'operator-assignment': 'error',
'prefer-const': 'error',
'prefer-destructuring': [
'error',
{
object: true,
},
],
radix: 'error',
'react/button-has-type': 'error',
'react/display-name': 'off',
'react/exhaustive-deps': 'off',
'react/jsx-boolean-value': ['error', 'always'],
'react/jsx-curly-brace-presence': [
'error',
{
props: 'never',
children: 'never',
},
],
'react/jsx-no-useless-fragment': 'error',
'react/no-array-index-key': 'error',
'react/no-unescaped-entities': 'off',
'react/react-in-jsx-scope': 'off',
'react/void-dom-elements-no-children': 'error',
'typescript/array-type': [
'error',
{
default: 'generic',
readonly: 'generic',
},
],
'typescript/ban-ts-comment': 'off',
'typescript/consistent-generic-constructors': ['error', 'constructor'],
'typescript/consistent-indexed-object-style': ['error', 'record'],
'typescript/consistent-type-definitions': ['error', 'type'],
'typescript/consistent-type-imports': 'error',
'typescript/dot-notation': 'error',
'typescript/no-duplicate-enum-values': 'error',
'typescript/no-explicit-any': 'off',
'typescript/no-for-in-array': 'error',
'typescript/prefer-optional-chain': 'error',
'typescript/require-array-sort-compare': 'error',
'typescript/restrict-plus-operands': 'error',
},
overrides: [
{
files: ['apps/portal/**/*.{js,jsx,ts,tsx}'],
plugins: ['typescript', 'react', 'nextjs'],
rules: {
'nextjs/no-html-link-for-pages': 'off',
'nextjs/no-img-element': 'off',
},
},
],
},
});