sourcegraph/client
Quinn Slack ae5325e432
switch from jest to vitest for faster, simpler tests (#57886)
Replaces our usage of jest with vitest. Also removes the babel transpiler. This simplifies our test configuration by a lot, makes tests run 10% faster, and makes further modernizations to our build/test stuff possible (such as using vite for frontend builds).

This removes some of the junit exporting for Buildkite, and the vitest bazel defs don't really cleanly implement bazel testing guidelines (like sharding). But vitest is only used for unit tests (all integration/e2e/regression tests have always run in mocha), so none of them are very slow anyway.

## Codemods for vitest imports

fastmod -e js,ts,tsx @jest/globals vitest client/ dev/release/
fastmod -e js,ts,tsx 'jest\.(\w+)\(' 'vi.$1(' client/ dev/release/
fastmod -e js,ts,tsx 'jest,' 'vi,' client/ dev/release/
fastmod -e js,ts,tsx 'jest }' 'vi }' client/ dev/release/
git diff --diff-filter=M --name-only | xargs pnpm exec prettier --write
2023-11-05 21:57:04 -10:00
..
app-shell switch from jest to vitest for faster, simpler tests (#57886) 2023-11-05 21:57:04 -10:00
branded switch from jest to vitest for faster, simpler tests (#57886) 2023-11-05 21:57:04 -10:00
browser switch from jest to vitest for faster, simpler tests (#57886) 2023-11-05 21:57:04 -10:00
build-config switch from jest to vitest for faster, simpler tests (#57886) 2023-11-05 21:57:04 -10:00
client-api switch from jest to vitest for faster, simpler tests (#57886) 2023-11-05 21:57:04 -10:00
codeintellify switch from jest to vitest for faster, simpler tests (#57886) 2023-11-05 21:57:04 -10:00
common switch from jest to vitest for faster, simpler tests (#57886) 2023-11-05 21:57:04 -10:00
eslint-plugin-wildcard chore: upgrade to Aspect CLI 5.8.5 (#57961) 2023-10-30 17:01:58 +02:00
extension-api use @typescript-eslint projectService for faster eslint (#57851) 2023-10-24 01:40:40 +00:00
extension-api-types use @typescript-eslint projectService for faster eslint (#57851) 2023-10-24 01:40:40 +00:00
http-client switch from jest to vitest for faster, simpler tests (#57886) 2023-11-05 21:57:04 -10:00
jetbrains switch from jest to vitest for faster, simpler tests (#57886) 2023-11-05 21:57:04 -10:00
observability-client switch from jest to vitest for faster, simpler tests (#57886) 2023-11-05 21:57:04 -10:00
observability-server switch from jest to vitest for faster, simpler tests (#57886) 2023-11-05 21:57:04 -10:00
shared switch from jest to vitest for faster, simpler tests (#57886) 2023-11-05 21:57:04 -10:00
storybook switch from jest to vitest for faster, simpler tests (#57886) 2023-11-05 21:57:04 -10:00
template-parser switch from jest to vitest for faster, simpler tests (#57886) 2023-11-05 21:57:04 -10:00
testing switch from jest to vitest for faster, simpler tests (#57886) 2023-11-05 21:57:04 -10:00
web switch from jest to vitest for faster, simpler tests (#57886) 2023-11-05 21:57:04 -10:00
web-sveltekit svelte: Fix build process (#58086) 2023-11-02 19:11:10 +00:00
wildcard switch from jest to vitest for faster, simpler tests (#57886) 2023-11-05 21:57:04 -10:00
BUILD.bazel switch from jest to vitest for faster, simpler tests (#57886) 2023-11-05 21:57:04 -10:00
README.md use esbuild for client/web builds (#57365) 2023-10-23 10:59:06 -07:00

Frontend packages

List

  • web: The web application deployed to http://sourcegraph.com/
  • browser: The Sourcegraph browser extension adds tooltips to code on different code hosts.
  • vscode: The Sourcegraph VS Code extension.
  • extension-api: The Sourcegraph extension API types for the Sourcegraph extensions. Published as sourcegraph.
  • extension-api-types: The Sourcegraph extension API types for client applications that embed Sourcegraph extensions and need to communicate with them. Published as @sourcegraph/extension-api-types.
  • sandboxes: All demos-mvp (minimum viable product) for the Sourcegraph web application.
  • shared: Contains common TypeScript/React/SCSS client code shared between the browser extension and the web app. Everything in this package is code-host agnostic.
  • branded: Contains React components and implements the visual design language we use across our web app and e.g. in the options menu of the browser extension. Over time, components from shared and branded packages should be moved into the wildcard package.
  • wildcard: Package that encapsulates storybook configuration and contains our Wildcard design system components. If we're using a component in two or more different areas (e.g. web-app and browser-extension) then it should live in the wildcard package. Otherwise the components should be better colocated with the code where they're actually used.
  • search: Search-related code that may be shared between all clients, both branded (e.g. web, VS Code extension) and unbranded (e.g. browser extension)
  • storybook: Storybook configuration.

Further migration plan

  1. Fix circular dependency in TS project-references graph wildcard package should not rely on web and probably shared, branded too. Ideally it should be an independent self-contained package.

  2. Decide on package naming and update existing package names. Especially it should be done for a shared package because we have multiple shared folders inside of other packages. It's hard to understand from where dependency is coming from and it's not possible to refactor import paths using find-and-replace.

  3. Investigate if we can painlessly switch to npm workspaces.

  4. Content of packages shared and branded should be moved to wildcard and refactored using the latest FE rules and conventions. Having different packages clearly communicates the migration plan. Developers first should look for components in the wildcard package and then fall-back to legacy packages if wildcard doesn't have the solution to their problem yet.

  5. shared contains utility functions, types, polyfills, etc which is not a part of the Wildcard component library. These modules should be moved into utils package and other new packages: e.g. api for GraphQL client and type generators, etc.

  6. Packages should use package name (e.g. @sourcegraph/wildcard) for imports instead of the relative paths (e.g. ../../../../wildcard/src/components/Markdown) to avoid long relative-paths and make dependency graph between packages clear. (Typescript will warn if packages have circular dependencies). It's easy to refactor such isolated packages, extract functionality into new ones, or even into new repositories.