@nx/express
Version:
98 lines (92 loc) • 3.65 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.applicationGenerator = applicationGenerator;
exports.applicationGeneratorInternal = applicationGeneratorInternal;
const devkit_1 = require("@nx/devkit");
const project_name_and_root_utils_1 = require("@nx/devkit/src/generators/project-name-and-root-utils");
const ts_solution_setup_1 = require("@nx/js/src/utils/typescript/ts-solution-setup");
const node_1 = require("@nx/node");
const versions_1 = require("@nx/node/src/utils/versions");
const path_1 = require("path");
const versions_2 = require("../../utils/versions");
const init_1 = require("../init/init");
function addTypes(tree, options) {
(0, devkit_1.updateJson)(tree, (0, path_1.join)(options.appProjectRoot, 'tsconfig.app.json'), (json) => {
json.compilerOptions.types = [...json.compilerOptions.types, 'express'];
return json;
});
}
function addMainFile(tree, options) {
tree.write((0, path_1.join)(options.appProjectRoot, `src/main.${options.js ? 'js' : 'ts'}`), `/**
* This is not a production server yet!
* This is only a minimal backend to get started.
*/
import express from 'express';
import * as path from 'path';
const app = express();
app.use('/assets', express.static(path.join(__dirname, 'assets')));
app.get('/api', (req, res) => {
res.send({ message: 'Welcome to ${options.appProjectName}!' });
});
const port = process.env.PORT || 3333;
const server = app.listen(port, () => {
console.log(\`Listening at http://localhost:\${port}/api\`);
});
server.on('error', console.error);
`);
if (options.js) {
(0, devkit_1.toJS)(tree);
}
}
async function applicationGenerator(tree, schema) {
return await applicationGeneratorInternal(tree, {
addPlugin: false,
useProjectJson: true,
...schema,
});
}
async function applicationGeneratorInternal(tree, schema) {
const options = await normalizeOptions(tree, schema);
const tasks = [];
const initTask = await (0, init_1.initGenerator)(tree, { ...options, skipFormat: true });
tasks.push(initTask);
const applicationTask = await (0, node_1.applicationGenerator)(tree, {
...options,
bundler: 'webpack',
framework: 'express',
skipFormat: true,
});
tasks.push(applicationTask);
addMainFile(tree, options);
addTypes(tree, options);
if (!options.skipPackageJson) {
tasks.push(ensureDependencies(tree));
}
if (!options.skipFormat) {
await (0, devkit_1.formatFiles)(tree);
}
return (0, devkit_1.runTasksInSerial)(...tasks);
}
exports.default = applicationGenerator;
async function normalizeOptions(host, options) {
await (0, project_name_and_root_utils_1.ensureRootProjectName)(options, 'application');
const { projectName: appProjectName, projectRoot: appProjectRoot } = await (0, project_name_and_root_utils_1.determineProjectNameAndRootOptions)(host, {
name: options.name,
projectType: 'application',
directory: options.directory,
});
const nxJson = (0, devkit_1.readNxJson)(host);
const addPlugin = process.env.NX_ADD_PLUGINS !== 'false' &&
nxJson.useInferencePlugins !== false;
options.addPlugin ??= addPlugin;
const useProjectJson = options.useProjectJson ?? !(0, ts_solution_setup_1.isUsingTsSolutionSetup)(host);
return {
...options,
appProjectName,
appProjectRoot,
useProjectJson,
};
}
function ensureDependencies(tree) {
return (0, devkit_1.addDependenciesToPackageJson)(tree, { tslib: versions_1.tslibVersion }, { '@nx/express': versions_2.nxVersion });
}