nx/packages/angular/src/generators/setup-mf/lib/add-remote-entry.ts

68 lines
1.8 KiB
TypeScript

import type { ProjectConfiguration, Tree } from '@nrwl/devkit';
import {
generateFiles,
joinPathFragments,
readNxJson,
readProjectConfiguration,
} from '@nrwl/devkit';
import type { Schema } from '../schema';
import { addRoute } from '../../../utils/nx-devkit/route-utils';
export function addRemoteEntry(
tree: Tree,
{ appName, routing, mfType, prefix, standalone }: Schema,
appRoot: string
) {
prefix =
prefix ??
(
readProjectConfiguration(tree, appName) as ProjectConfiguration & {
prefix?: string;
}
)?.prefix ??
readNxJson(tree).npmScope;
generateFiles(
tree,
standalone
? joinPathFragments(
__dirname,
'../files/standalone-entry-component-files'
)
: joinPathFragments(__dirname, '../files/entry-module-files'),
`${appRoot}/src/app/remote-entry`,
{
tmpl: '',
appName,
routing,
prefix,
}
);
if (standalone && routing) {
addRoute(
tree,
joinPathFragments(appRoot, 'src/app/app.routes.ts'),
`{path: '', loadChildren: () => import('./remote-entry/entry.routes').then(m => m.remoteRoutes)}`
);
} else {
if (routing) {
addRoute(
tree,
joinPathFragments(appRoot, 'src/app/app.routes.ts'),
`{path: '', loadChildren: () => import('./remote-entry/entry.module').then(m => m.RemoteEntryModule)}`
);
}
tree.write(
`${appRoot}/src/app/app.module.ts`,
`/*
* This RemoteEntryModule is imported here to allow TS to find the Module during
* compilation, allowing it to be included in the built bundle. This is required
* for the Module Federation Plugin to expose the Module correctly.
* */
import { RemoteEntryModule } from './remote-entry/entry.module';
${tree.read(`${appRoot}/src/app/app.module.ts`, 'utf-8')}`
);
}
}