import { addDependenciesToPackageJson, formatFiles, GeneratorCallback, removeDependenciesFromPackageJson, runTasksInSerial, Tree, } from '@nx/devkit'; import { jestInitGenerator } from '@nx/jest'; import { initGenerator as jsInitGenerator } from '@nx/js'; import { nxVersion, tslibVersion, typesNodeVersion, } from '../../utils/versions'; import { Schema } from './schema'; function updateDependencies(tree: Tree) { removeDependenciesFromPackageJson(tree, ['@nx/node'], []); return addDependenciesToPackageJson( tree, { tslib: tslibVersion, }, { '@nx/node': nxVersion, '@types/node': typesNodeVersion } ); } function normalizeOptions(schema: Schema) { return { ...schema, unitTestRunner: schema.unitTestRunner ?? 'jest', }; } export async function initGenerator(tree: Tree, schema: Schema) { const options = normalizeOptions(schema); const tasks: GeneratorCallback[] = []; tasks.push( await jsInitGenerator(tree, { ...schema, tsConfigName: schema.rootProject ? 'tsconfig.json' : 'tsconfig.base.json', skipFormat: true, }) ); if (options.unitTestRunner === 'jest') { tasks.push( await jestInitGenerator(tree, { ...schema, testEnvironment: 'node' }) ); } tasks.push(updateDependencies(tree)); if (!options.skipFormat) { await formatFiles(tree); } return runTasksInSerial(...tasks); } export default initGenerator;