1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/packages/infrastructure/jest/monorepo-root-config.js
Janne Savolainen dfc9b2b981
Add package for shared jest configurations for Lens applications, Features and libraries.
Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
2023-02-06 11:35:34 +02:00

74 lines
1.6 KiB
JavaScript

const path = require("path");
const glob = require("glob");
const { omit } = require("lodash/fp");
const getProjectColor = (projectNumber) => {
const colors = [
"red",
"green",
"yellow",
"magenta",
"cyan",
"white",
"redBright",
"greenBright",
"yellowBright",
"blueBright",
"magentaBright",
"cyanBright",
"whiteBright",
];
return colors[projectNumber % colors.length];
};
const nonMultiProjectConfigs = [
"coverageDirectory",
"coverageProvider",
"coverageReporters",
"collectCoverage",
"collectCoverageFrom",
"coveragePathIgnorePatterns",
"coverageThreshold",
];
const toJestMultiProjectConfig = (
{ packageJson, jestConfig, packagePath },
projectNumber
) => ({
rootDir: packagePath,
displayName: {
name: packageJson.name,
color: getProjectColor(projectNumber),
},
...omit(nonMultiProjectConfigs, jestConfig),
});
const getJestConfigsAndPackageJsons = (rootDir) => {
const packageJsonPaths = glob
.sync(`${rootDir}/packages/**/jest.config.js`, {
ignore: "./**/node_modules/**/*",
})
.map((filePath) => path.dirname(filePath));
return packageJsonPaths.map((packagePath) => ({
packagePath,
packageJson: require(`${packagePath}/package.json`),
jestConfig: require(`${packagePath}/jest.config.js`),
}));
};
module.exports = (rootDir) => ({
projects: getJestConfigsAndPackageJsons(rootDir).map(
toJestMultiProjectConfig
),
watchPlugins: [
"jest-watch-typeahead/filename",
"jest-watch-typeahead/testname",
"jest-watch-select-projects",
],
});