@nx/angular
Version:
76 lines (75 loc) • 3.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.updateSsrSetup = updateSsrSetup;
const devkit_1 = require("@nx/devkit");
const ts_solution_setup_1 = require("@nx/js/src/utils/typescript/ts-solution-setup");
const path_1 = require("path");
const versions_1 = require("../../../utils/versions");
const artifact_types_1 = require("../../utils/artifact-types");
const version_utils_1 = require("../../utils/version-utils");
async function updateSsrSetup(tree, { appName, port, standalone, typescriptConfiguration, skipPackageJson, }) {
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
let project = (0, devkit_1.readProjectConfiguration)(tree, appName);
const sourceRoot = (0, ts_solution_setup_1.getProjectSourceRoot)(project, tree);
tree.rename((0, devkit_1.joinPathFragments)(sourceRoot, 'main.server.ts'), (0, devkit_1.joinPathFragments)(sourceRoot, 'bootstrap.server.ts'));
const pathToServerEntry = (0, devkit_1.joinPathFragments)(angularMajorVersion >= 19 ? sourceRoot : project.root, 'server.ts');
tree.write(pathToServerEntry, `import('./${angularMajorVersion >= 19 ? '' : 'src/'}main.server');`);
const browserBundleOutput = project.targets.build.options.outputPath;
const serverBundleOutput = project.targets.build.options.outputPath.replace(/\/browser$/, '/server');
(0, devkit_1.generateFiles)(tree, (0, path_1.join)(__dirname, '../files/common'), project.root, {
appName,
browserBundleOutput,
serverBundleOutput,
standalone,
commonEngineEntryPoint: angularMajorVersion >= 19 ? '@angular/ssr/node' : '@angular/ssr',
tmpl: '',
});
const pathToTemplateFiles = typescriptConfiguration ? 'base-ts' : 'base';
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, `../files/${pathToTemplateFiles}`), project.root, {
tmpl: '',
});
if (standalone) {
const componentType = (0, artifact_types_1.getComponentType)(tree);
const componentFileSuffix = componentType ? `.${componentType}` : '';
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, '../files/standalone'), project.root, {
appName,
standalone,
componentType: componentType ? (0, devkit_1.names)(componentType).className : '',
componentFileSuffix,
tmpl: '',
});
}
// update project.json
project = (0, devkit_1.readProjectConfiguration)(tree, appName);
project.targets.server.executor = '@nx/angular:webpack-server';
project.targets.server.options.customWebpackConfig = {
path: (0, devkit_1.joinPathFragments)(project.root, `webpack.server.config.${typescriptConfiguration ? 'ts' : 'js'}`),
};
if (project.targets.server.configurations &&
project.targets.server.configurations.development) {
if ('vendorChunk' in project.targets.server.configurations.development) {
delete project.targets.server.configurations.development.vendorChunk;
}
}
project.targets['serve-ssr'].options = {
...(project.targets['serve-ssr'].options ?? {}),
port,
};
project.targets['static-server'] = {
dependsOn: ['build', 'server'],
executor: 'nx:run-commands',
options: {
command: `PORT=${port} node ${(0, devkit_1.joinPathFragments)(project.targets.server.options.outputPath, 'main.js')}`,
},
};
(0, devkit_1.updateProjectConfiguration)(tree, appName, project);
if (!skipPackageJson) {
return (0, devkit_1.addDependenciesToPackageJson)(tree, {
cors: versions_1.corsVersion,
'@module-federation/node': versions_1.moduleFederationNodeVersion,
}, {
'@types/cors': versions_1.typesCorsVersion,
});
}
return () => { };
}