vite.config.ts 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. import { configDefaults } from 'vitest/config'
  2. import { defineConfig } from 'vite-plus'
  3. import { entries } from './scripts/aliases.js'
  4. export default defineConfig({
  5. define: {
  6. __DEV__: process.env.MODE !== 'benchmark',
  7. __TEST__: true,
  8. __E2E_TEST__: false,
  9. __VERSION__: '"test"',
  10. __BROWSER__: false,
  11. __GLOBAL__: false,
  12. __ESM_BUNDLER__: true,
  13. __ESM_BROWSER__: false,
  14. __CJS__: true,
  15. __SSR__: true,
  16. __BENCHMARK__: false,
  17. __FEATURE_OPTIONS_API__: true,
  18. __FEATURE_SUSPENSE__: true,
  19. __FEATURE_PROD_DEVTOOLS__: false,
  20. __FEATURE_PROD_HYDRATION_MISMATCH_DETAILS__: false,
  21. __COMPAT__: true,
  22. },
  23. resolve: {
  24. alias: entries,
  25. },
  26. test: {
  27. globals: true,
  28. pool: 'threads',
  29. setupFiles: 'scripts/setup-vitest.ts',
  30. sequence: {
  31. hooks: 'list',
  32. },
  33. coverage: {
  34. provider: 'v8',
  35. reporter: ['text', 'html'],
  36. include: ['packages/*/src/**'],
  37. exclude: [
  38. 'packages/vue-compat/**',
  39. 'packages/vue/src/dev.ts',
  40. 'packages/vue/src/runtime.ts',
  41. 'packages/vue/src/runtime-with-vapor.ts',
  42. 'packages/vue/src/index-with-vapor.ts',
  43. 'packages/runtime-core/src/profiling.ts',
  44. 'packages/runtime-core/src/featureFlags.ts',
  45. 'packages/runtime-core/src/customFormatter.ts',
  46. 'packages/runtime-core/src/hydrationStrategies.ts',
  47. 'packages/runtime-dom/src/components/Transition*',
  48. 'packages/runtime-vapor/src/components/Transition*',
  49. ],
  50. },
  51. projects: [
  52. {
  53. extends: true,
  54. test: {
  55. name: 'unit-gc',
  56. pool: 'forks',
  57. execArgv: ['--expose-gc'],
  58. include: ['packages/reactivity/__tests__/gc.spec.ts'],
  59. },
  60. },
  61. {
  62. extends: true,
  63. test: {
  64. name: 'unit',
  65. exclude: [
  66. ...configDefaults.exclude,
  67. 'packages/reactivity/__tests__/gc.spec.ts',
  68. '**/e2e/**',
  69. '**/vapor-e2e-test/**',
  70. 'packages/{vue,vue-compat,runtime-dom,runtime-vapor}/**',
  71. ],
  72. },
  73. },
  74. {
  75. extends: true,
  76. test: {
  77. name: 'unit-jsdom',
  78. environment: 'jsdom',
  79. include: [
  80. 'packages/{vue,vue-compat,runtime-dom,runtime-vapor}/**/*.spec.ts',
  81. ],
  82. exclude: [...configDefaults.exclude, '**/e2e/**'],
  83. },
  84. },
  85. {
  86. extends: true,
  87. test: {
  88. name: 'e2e',
  89. environment: 'jsdom',
  90. isolate: true,
  91. include: ['packages/vue/__tests__/e2e/*.spec.ts'],
  92. },
  93. },
  94. {
  95. extends: true,
  96. test: {
  97. name: 'e2e-vapor',
  98. isolate: true,
  99. include: ['packages-private/vapor-e2e-test/__tests__/*.spec.ts'],
  100. },
  101. },
  102. ],
  103. },
  104. staged: {
  105. '*.{js,json}': ['vp fmt --no-error-on-unmatched-pattern'],
  106. '*.ts?(x)': ['vp lint --fix', 'vp fmt --no-error-on-unmatched-pattern'],
  107. },
  108. lint: {
  109. categories: {
  110. correctness: 'off',
  111. },
  112. env: {
  113. builtin: true,
  114. },
  115. ignorePatterns: [
  116. '**/dist/',
  117. '**/temp/',
  118. '**/coverage/',
  119. 'dts-build/packages',
  120. ],
  121. overrides: [
  122. {
  123. files: ['**/*.js', '**/*.ts', '**/*.tsx'],
  124. rules: {
  125. 'no-debugger': 'error',
  126. 'no-console': [
  127. 'error',
  128. {
  129. allow: ['warn', 'error', 'info'],
  130. },
  131. ],
  132. 'no-restricted-globals': [
  133. 'error',
  134. 'window',
  135. 'document',
  136. 'module',
  137. 'require',
  138. ],
  139. 'sort-imports': [
  140. 'error',
  141. {
  142. ignoreDeclarationSort: true,
  143. },
  144. ],
  145. '@typescript-eslint/prefer-ts-expect-error': 'error',
  146. '@typescript-eslint/consistent-type-imports': [
  147. 'error',
  148. {
  149. fixStyle: 'inline-type-imports',
  150. disallowTypeAnnotations: false,
  151. },
  152. ],
  153. '@typescript-eslint/no-import-type-side-effects': 'error',
  154. },
  155. },
  156. {
  157. files: ['packages/shared/**'],
  158. rules: {
  159. 'no-restricted-globals': 'off',
  160. },
  161. },
  162. {
  163. files: ['packages/{vue,vue-compat,runtime-*}/**'],
  164. rules: {
  165. 'no-restricted-globals': ['error', 'module', 'require'],
  166. 'oxc/no-optional-chaining': 'error',
  167. },
  168. },
  169. {
  170. files: ['packages/{compiler-*,server-renderer}/**'],
  171. rules: {
  172. 'no-restricted-globals': ['error', 'window', 'document'],
  173. 'oxc/no-const-enum': 'error',
  174. },
  175. },
  176. {
  177. files: [
  178. 'packages-private/template-explorer/**',
  179. 'packages-private/sfc-playground/**',
  180. ],
  181. rules: {
  182. 'no-restricted-globals': ['error', 'module', 'require'],
  183. 'oxc/no-const-enum': 'error',
  184. 'no-console': 'off',
  185. },
  186. },
  187. {
  188. files: ['*.js'],
  189. rules: {
  190. 'no-unused-vars': [
  191. 'error',
  192. {
  193. vars: 'all',
  194. args: 'none',
  195. },
  196. ],
  197. },
  198. },
  199. {
  200. files: [
  201. '**/__tests__/**',
  202. 'packages-private/dts-test/**',
  203. 'packages-private/dts-build-test/**',
  204. ],
  205. rules: {
  206. 'no-console': 'off',
  207. 'no-restricted-globals': 'off',
  208. 'no-unused-vars': 'off',
  209. 'oxc/no-optional-chaining': 'off',
  210. 'no-restricted-syntax': 'off',
  211. },
  212. globals: {
  213. suite: 'writable',
  214. test: 'writable',
  215. describe: 'writable',
  216. it: 'writable',
  217. expectTypeOf: 'writable',
  218. assertType: 'writable',
  219. expect: 'writable',
  220. assert: 'writable',
  221. chai: 'writable',
  222. vitest: 'writable',
  223. vi: 'writable',
  224. beforeAll: 'writable',
  225. afterAll: 'writable',
  226. beforeEach: 'writable',
  227. afterEach: 'writable',
  228. onTestFailed: 'writable',
  229. onTestFinished: 'writable',
  230. },
  231. },
  232. {
  233. files: [
  234. 'scripts/**',
  235. './*.{js,ts}',
  236. 'packages/*/*.js',
  237. 'packages/vue/*/*.js',
  238. 'packages-private/benchmark/*',
  239. 'packages-private/e2e-utils/*',
  240. ],
  241. rules: {
  242. 'no-restricted-globals': 'off',
  243. 'oxc/no-const-enum': 'error',
  244. 'no-console': 'off',
  245. },
  246. },
  247. ],
  248. },
  249. fmt: {
  250. semi: false,
  251. singleQuote: true,
  252. arrowParens: 'avoid',
  253. printWidth: 80,
  254. experimentalSortPackageJson: false,
  255. ignorePatterns: ['dist', 'CHANGELOG*.md', '*.toml'],
  256. },
  257. })