UNPKG

@nx/express

Version:

The Nx Plugin for Express contains executors and generators for allowing your workspace to create powerful Express Node applications and APIs.

98 lines (92 loc) 3.65 kB
"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 }); }