Nicholas Cunningham 32f60f11f4
fix(vite): update nx.json for vitest (#13606)
Co-authored-by: Nicholas Cunningham <ndcunningham>
2022-12-02 17:35:01 -05:00

99 lines
2.9 KiB
TypeScript

import {
addDependenciesToPackageJson,
convertNxGenerator,
readJson,
readWorkspaceConfiguration,
Tree,
updateJson,
updateWorkspaceConfiguration,
} from '@nrwl/devkit';
import {
jsdomVersion,
nxVersion,
vitePluginDtsVersion,
vitePluginEslintVersion,
vitePluginReactVersion,
vitestUiVersion,
vitestVersion,
viteTsConfigPathsVersion,
viteVersion,
} from '../../utils/versions';
import { Schema } from './schema';
function checkDependenciesInstalled(host: Tree, schema: Schema) {
const packageJson = readJson(host, 'package.json');
const devDependencies = {};
const dependencies = {};
packageJson.dependencies = packageJson.dependencies || {};
packageJson.devDependencies = packageJson.devDependencies || {};
// base deps
devDependencies['@nrwl/vite'] = nxVersion;
devDependencies['vite'] = viteVersion;
devDependencies['vite-plugin-eslint'] = vitePluginEslintVersion;
devDependencies['vite-tsconfig-paths'] = viteTsConfigPathsVersion;
devDependencies['vitest'] = vitestVersion;
devDependencies['@vitest/ui'] = vitestUiVersion;
devDependencies['jsdom'] = jsdomVersion;
if (schema.uiFramework === 'react') {
devDependencies['@vitejs/plugin-react'] = vitePluginReactVersion;
}
if (schema.includeLib) {
devDependencies['vite-plugin-dts'] = vitePluginDtsVersion;
}
return addDependenciesToPackageJson(host, dependencies, devDependencies);
}
function moveToDevDependencies(tree: Tree) {
updateJson(tree, 'package.json', (packageJson) => {
packageJson.dependencies = packageJson.dependencies || {};
packageJson.devDependencies = packageJson.devDependencies || {};
if (packageJson.dependencies['@nrwl/vite']) {
packageJson.devDependencies['@nrwl/vite'] =
packageJson.dependencies['@nrwl/vite'];
delete packageJson.dependencies['@nrwl/vite'];
}
return packageJson;
});
}
export function createVitestConfig(tree: Tree) {
const workspaceConfiguration = readWorkspaceConfiguration(tree);
const productionFileSet = workspaceConfiguration.namedInputs?.production;
if (productionFileSet) {
productionFileSet.push(
'!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)',
'!{projectRoot}/tsconfig.spec.json'
);
workspaceConfiguration.namedInputs.production = Array.from(
new Set(productionFileSet)
);
}
workspaceConfiguration.targetDefaults ??= {};
workspaceConfiguration.targetDefaults.test ??= {};
workspaceConfiguration.targetDefaults.test.inputs ??= [
'default',
productionFileSet ? '^production' : '^default',
];
updateWorkspaceConfiguration(tree, workspaceConfiguration);
}
export function initGenerator(tree: Tree, schema: Schema) {
moveToDevDependencies(tree);
createVitestConfig(tree);
const installTask = checkDependenciesInstalled(tree, schema);
return installTask;
}
export default initGenerator;
export const initSchematic = convertNxGenerator(initGenerator);