nx/packages/angular/src/utils/get-mf-projects.ts

46 lines
1.3 KiB
TypeScript

import type { Tree } from '@nrwl/devkit';
import { tsquery } from '@phenomnomnominal/tsquery';
import { forEachExecutorOptions } from '@nrwl/workspace/src/utilities/executor-options-utils';
export function getMFProjects(
tree: Tree,
{ legacy }: { legacy: boolean } = { legacy: false }
) {
const NRWL_WEBPACK_BROWSER_BUILDER = '@nrwl/angular:webpack-browser';
const CUSTOM_WEBPACK_OPTION = 'customWebpackConfig';
const MODULE_FEDERATION_IDENTIFIER = legacy
? 'Identifier[name=ModuleFederationPlugin]'
: 'Identifier[name=withModuleFederation]';
const projects: string[] = [];
forEachExecutorOptions(
tree,
NRWL_WEBPACK_BROWSER_BUILDER,
(opts, projectName) => {
const webpackPath = opts[CUSTOM_WEBPACK_OPTION]?.path;
if (!webpackPath || !tree.exists(webpackPath)) {
return;
}
const webpackConfig = tree.read(webpackPath, 'utf-8');
const ast = tsquery.ast(webpackConfig);
const moduleFederationWebpackConfig = tsquery(
ast,
MODULE_FEDERATION_IDENTIFIER,
{
visitAllChildren: true,
}
);
if (
!moduleFederationWebpackConfig ||
moduleFederationWebpackConfig.length === 0
) {
return;
}
projects.push(projectName);
}
);
return projects;
}