All files / repo-tools/src/build-utils vite.ts

0% Statements 0/7
0% Branches 0/7
0% Functions 0/5
0% Lines 0/7

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66                                                                                                                                   
import path from 'node:path';
 
export type Defines = {
  'process.env.RESET_STORAGE': 'true' | 'false';
};
 
/**
 * Gets the Vite / esbuild defines config object for one of our Vite builds.
 *
 * @see https://vite.dev/config/shared-options.html#define
 * @param isDev - Whether it's a development build.
 * @returns The Vite / esbuild defines.
 */
export function getDefines(isDev: boolean): Defines {
  const rawVars = [
    ['RESET_STORAGE', process.env.RESET_STORAGE ?? (isDev ? 'true' : 'false')],
  ];
 
  return Object.fromEntries(
    rawVars.map(([key, value]) => [
      `process.env.${key}`,
      JSON.stringify(value),
    ]),
  ) as Defines;
}
 
/**
 * Generates Vite aliases for workspace packages to enable proper sourcemap handling in development.
 *
 * By default, Vite resolves workspace packages to their `dist` folders, which breaks the
 * sourcemap chain. These aliases force Vite to use the original TypeScript source from the
 * `src` directories instead, ensuring a complete and accurate sourcemap for debugging.
 *
 * A special alias for `@metamask/kernel-ui/styles.css` is included to resolve the
 * built stylesheet correctly from its `dist` folder.
 *
 * @param rootDir - The monorepo root directory.
 * @param deps - The dependencies object from the `package.json` file.
 * @returns An array of Vite alias objects for development mode.
 */
export function getPackageDevAliases(
  rootDir: string,
  deps: Record<string, string> = {},
): { find: string; replacement: string }[] {
  const workspacePackages = Object.keys(deps)
    .filter(
      (name) => name.startsWith('@metamask/') && deps[name] === 'workspace:^',
    )
    .map((pkgName) => ({
      find: pkgName,
      replacement: path.resolve(
        rootDir,
        `packages/${pkgName.replace('@metamask/', '')}/src`,
      ),
    }));
 
  return [
    // Special alias for kernel-ui styles, which are in dist
    {
      find: '@metamask/kernel-ui/styles.css',
      replacement: path.resolve(rootDir, 'packages/kernel-ui/dist/styles.css'),
    },
    ...workspacePackages,
  ];
}