77 lines
1.9 KiB
TypeScript
77 lines
1.9 KiB
TypeScript
import init from '../init/init';
|
|
import { checkForTestTarget } from './lib/check-for-test-target';
|
|
import { createFiles } from './lib/create-files';
|
|
import { updateTsConfig } from './lib/update-tsconfig';
|
|
import { updateWorkspace } from './lib/update-workspace';
|
|
import { JestProjectSchema, NormalizedJestProjectSchema } from './schema';
|
|
import {
|
|
formatFiles,
|
|
Tree,
|
|
GeneratorCallback,
|
|
readProjectConfiguration,
|
|
} from '@nx/devkit';
|
|
|
|
const schemaDefaults = {
|
|
setupFile: 'none',
|
|
babelJest: false,
|
|
supportTsx: false,
|
|
skipSetupFile: false,
|
|
skipSerializers: false,
|
|
testEnvironment: 'jsdom',
|
|
} as const;
|
|
|
|
function normalizeOptions(
|
|
tree: Tree,
|
|
options: JestProjectSchema
|
|
): NormalizedJestProjectSchema {
|
|
if (!options.testEnvironment) {
|
|
options.testEnvironment = 'jsdom';
|
|
}
|
|
|
|
if (!options.hasOwnProperty('supportTsx')) {
|
|
options.supportTsx = false;
|
|
}
|
|
|
|
// if we support TSX or compiler is not tsc, then we don't support angular(html templates)
|
|
if (
|
|
options.supportTsx ||
|
|
options.babelJest ||
|
|
['swc', 'babel'].includes(options.compiler)
|
|
) {
|
|
options.skipSerializers = true;
|
|
}
|
|
|
|
if (options.skipSetupFile) {
|
|
// setupFile is always 'none'
|
|
options.setupFile = schemaDefaults.setupFile;
|
|
}
|
|
|
|
const project = readProjectConfiguration(tree, options.project);
|
|
|
|
return {
|
|
...schemaDefaults,
|
|
...options,
|
|
rootProject: project.root === '.' || project.root === '',
|
|
};
|
|
}
|
|
|
|
export async function configurationGenerator(
|
|
tree: Tree,
|
|
schema: JestProjectSchema
|
|
): Promise<GeneratorCallback> {
|
|
const options = normalizeOptions(tree, schema);
|
|
const installTask = await init(tree, options);
|
|
|
|
checkForTestTarget(tree, options);
|
|
createFiles(tree, options);
|
|
updateTsConfig(tree, options);
|
|
updateWorkspace(tree, options);
|
|
|
|
if (!schema.skipFormat) {
|
|
await formatFiles(tree);
|
|
}
|
|
return installTask;
|
|
}
|
|
|
|
export default configurationGenerator;
|