nx/packages/react/src/generators/host/lib/setup-ssr-for-host.ts

57 lines
1.5 KiB
TypeScript

import type { GeneratorCallback, Tree } from '@nx/devkit';
import {
addDependenciesToPackageJson,
generateFiles,
joinPathFragments,
names,
readProjectConfiguration,
runTasksInSerial,
updateProjectConfiguration,
} from '@nx/devkit';
import type { Schema } from '../schema';
import { moduleFederationNodeVersion } from '../../../utils/versions';
import { normalizeProjectName } from '../../application/lib/normalize-options';
export async function setupSsrForHost(
tree: Tree,
options: Schema,
appName: string,
defaultRemoteManifest: { name: string; port: number }[]
) {
const tasks: GeneratorCallback[] = [];
let project = readProjectConfiguration(tree, appName);
project.targets.serve.executor = '@nx/react:module-federation-ssr-dev-server';
updateProjectConfiguration(tree, appName, project);
generateFiles(
tree,
joinPathFragments(__dirname, '../files/module-federation-ssr'),
project.root,
{
...options,
remotes: defaultRemoteManifest.map(({ name, port }) => {
const remote = normalizeProjectName({ ...options, name });
return {
...names(remote),
port,
};
}),
appName,
tmpl: '',
browserBuildOutputPath: project.targets.build.options.outputPath,
}
);
const installTask = addDependenciesToPackageJson(
tree,
{
'@module-federation/node': moduleFederationNodeVersion,
},
{}
);
tasks.push(installTask);
return runTasksInSerial(...tasks);
}