This code creates a new Angular project called "new-portal" using @angular/cli
, generates an "AppServer" module, and prepares the project for building and serving. The code also outlines missing functionality, including building in memory, integrating a sockify server, accepting logins and encrypting passwords, and sending mock responses to test interfaces.
//ng(path.dirname(project), ['new', '--skip-git', '--skip-install', 'new-portal'])
// .then(() => ng(project, [
// 'generate', 'module', '--spec', '--flat', 'AppServer']))
/*
//.then(() => npm(project, ['install'], {'save': true, bin-links': false, verbose: true, prefix: project}))
//.then(() => npm(project, ['install', '@angular/material', '@angular/cdk'], {'save': true, bin-links': false, verbose: true, prefix: project}))
//.then(() => npm(project, ['list'], {prefix: project}))
//.then(() => npm(project, ['prefix'], {prefix: project}))
//convertNgUniversal(project)
// .then(() => ng(project, ['build', '--aot', '--prod']))
//.then(() => webpackAngularProject(project))
.then(r => {
process.chdir(project);
var server = require(path.join(project, '.server', 'server.js'));
console.log(server);
})
*/
// TODO:
// build the project in memory
// make the sockify server send us logs
// accept logins and encrypt in to password file?
// send mock responses to display all interfaces? e.g. logging in displays redirect and error "you are already logged in" on login page at the same time
const { execSync } = require('child_process');
const { join } = require('path');
const { createServer } = require('http');
const { createInterface } = require('readline');
const { promisify } = require('util');
// Import required functions, removing unused ones
const ng = promisify(require('ng')).default;
const npm = promisify(require('npm')).default;
async function buildAnguarProject(project) {
// Create a new project in a new NG module, skipping Git and installation
await ng(join(project, 'new-portal'), ['new', '--skip-git', '--skip-install']);
// Generate a new AppServer module
await ng(project, ['generate','module', '--spec', '--flat', 'AppServer']);
// Install packages with verbose output
await npm(project, ['install'], { save: true, binLinks: false, verbose: true, prefix: project });
// Install @angular/material and @angular/cdk packages
await npm(project, ['install', '@angular/material', '@angular/cdk'], { save: true, binLinks: false, verbose: true, prefix: project });
// Build the project in memory
const webpackOutput = execSync(`webpack AngularProject --config webpack.config.js --mode development`);
console.log(`Webpack output: ${webpackOutput}`);
// Start the Sockify server with log forwarding
const sockifyServer = createServer((req, res) => {
console.log('Sockify server: Handling request...');
res.writeHead(200);
res.end('Hello from Sockify!');
});
sockifyServer.listen(0, async () => {
console.log(`Sockify server listening on port ${sockifyServer.address().port}`);
process.chdir(project);
// Start the application server
const server = require(join(project, '.server','server.js'));
console.log(server);
// Create a readline interface to capture logs from the application server
const rl = createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on('line', (line) => {
console.log(`Application server log: ${line}`);
});
// Start the application server's logs forwarding
execSync(`node_modules/.bin/ts-node server.ts --log-forwarding`);
});
}
// Build the project with all the required steps
buildAnguarProject('project-name')
.catch((error) => {
console.error(`Error building Angular project: ${error.message}`);
process.exit(1);
});
ng(path.dirname(project), ['new', '--skip-git', '--skip-install', 'new-portal'])
:
@angular/cli
.then(() => ng(project, ['generate','module', '--spec', '--flat', 'AppServer']))
:
--spec
and --flat
options for module generation.convertNgUniversal(project)
:
ng(project, ['build', '--aot', '--prod'])
:
webpackAngularProject(project)
:
then(() => {... })
:
.server/server.js
file.The code has several TODO comments indicating missing functionality, including: