86 lines
2.2 KiB
TypeScript

import {
addDependenciesToPackageJson,
removeDependenciesFromPackageJson,
runTasksInSerial,
type GeneratorCallback,
type Tree,
readNxJson,
createProjectGraphAsync,
} from '@nx/devkit';
import { addPlugin } from '@nx/devkit/src/utils/add-plugin';
import { reactDomVersion, reactVersion } from '@nx/react/src/utils/versions';
import { addGitIgnoreEntry } from '../../utils/add-gitignore-entry';
import { nextVersion, nxVersion } from '../../utils/versions';
import type { InitSchema } from './schema';
function updateDependencies(host: Tree, schema: InitSchema) {
const tasks: GeneratorCallback[] = [];
tasks.push(removeDependenciesFromPackageJson(host, ['@nx/next'], []));
tasks.push(
addDependenciesToPackageJson(
host,
{
next: nextVersion,
react: reactVersion,
'react-dom': reactDomVersion,
},
{
'@nx/next': nxVersion,
},
undefined,
schema.keepExistingVersions
)
);
return runTasksInSerial(...tasks);
}
export function nextInitGenerator(tree: Tree, schema: InitSchema) {
return nextInitGeneratorInternal(tree, { addPlugin: false, ...schema });
}
export async function nextInitGeneratorInternal(
host: Tree,
schema: InitSchema
) {
const nxJson = readNxJson(host);
const addPluginDefault =
process.env.NX_ADD_PLUGINS !== 'false' &&
nxJson.useInferencePlugins !== false;
schema.addPlugin ??= addPluginDefault;
if (schema.addPlugin) {
const { createNodes } = await import('../../plugins/plugin');
await addPlugin(
host,
await createProjectGraphAsync(),
'@nx/next/plugin',
createNodes,
{
startTargetName: ['start', 'next:start', 'next-start'],
buildTargetName: ['build', 'next:build', 'next-build'],
devTargetName: ['dev', 'next:dev', 'next-dev'],
serveStaticTargetName: [
'serve-static',
'next:serve-static',
'next-serve-static',
],
},
schema.updatePackageScripts
);
}
addGitIgnoreEntry(host);
let installTask: GeneratorCallback = () => {};
if (!schema.skipPackageJson) {
installTask = updateDependencies(host, schema);
}
return installTask;
}
export default nextInitGenerator;