UNPKG

@nx/next

Version:

The Next.js plugin for Nx contains executors and generators for managing Next.js applications and libraries within an Nx workspace. It provides: - Scaffolding for creating, building, serving, linting, and testing Next.js applications. - Integration wit

127 lines (126 loc) 5.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.addE2e = addE2e; const devkit_1 = require("@nx/devkit"); const e2e_web_server_info_utils_1 = require("@nx/devkit/src/generators/e2e-web-server-info-utils"); const web_1 = require("@nx/web"); const versions_1 = require("../../../utils/versions"); async function addE2e(host, options) { const nxJson = (0, devkit_1.readNxJson)(host); const hasPlugin = nxJson.plugins?.some((p) => typeof p === 'string' ? p === '@nx/next/plugin' : p.plugin === '@nx/next/plugin'); const e2eWebServerInfo = await getNextE2EWebServerInfo(host, options.projectName, (0, devkit_1.joinPathFragments)(options.appProjectRoot, 'next.config.js'), options.addPlugin); if (options.e2eTestRunner === 'cypress') { const { configurationGenerator } = (0, devkit_1.ensurePackage)('@nx/cypress', versions_1.nxVersion); if (!hasPlugin) { await (0, web_1.webStaticServeGenerator)(host, { buildTarget: `${options.projectName}:build`, outputPath: `${options.outputPath}/out`, targetName: 'serve-static', spa: true, }); } const packageJson = { name: options.e2eProjectName, version: '0.0.1', private: true, }; if (!options.useProjectJson) { packageJson.nx = { implicitDependencies: [options.projectName], }; } else { (0, devkit_1.addProjectConfiguration)(host, options.e2eProjectName, { root: options.e2eProjectRoot, projectType: 'application', sourceRoot: (0, devkit_1.joinPathFragments)(options.e2eProjectRoot, 'src'), targets: {}, tags: [], implicitDependencies: [options.projectName], }); } if (!options.useProjectJson || options.isTsSolutionSetup) { (0, devkit_1.writeJson)(host, (0, devkit_1.joinPathFragments)(options.e2eProjectRoot, 'package.json'), packageJson); } const e2eTask = await configurationGenerator(host, { ...options, linter: 'eslint', project: options.e2eProjectName, directory: 'src', skipFormat: true, devServerTarget: e2eWebServerInfo.e2eDevServerTarget, baseUrl: e2eWebServerInfo.e2eWebServerAddress, jsx: true, webServerCommands: { default: e2eWebServerInfo.e2eWebServerCommand, }, ciWebServerCommand: e2eWebServerInfo.e2eCiWebServerCommand, ciBaseUrl: e2eWebServerInfo.e2eCiBaseUrl, }); return e2eTask; } else if (options.e2eTestRunner === 'playwright') { const { configurationGenerator } = (0, devkit_1.ensurePackage)('@nx/playwright', versions_1.nxVersion); const packageJson = { name: options.e2eProjectName, version: '0.0.1', private: true, }; if (!options.useProjectJson) { packageJson.nx = { implicitDependencies: [options.projectName], }; } else { (0, devkit_1.addProjectConfiguration)(host, options.e2eProjectName, { root: options.e2eProjectRoot, projectType: 'application', sourceRoot: (0, devkit_1.joinPathFragments)(options.e2eProjectRoot, 'src'), targets: {}, tags: [], implicitDependencies: [options.projectName], }); } if (!options.useProjectJson || options.isTsSolutionSetup) { (0, devkit_1.writeJson)(host, (0, devkit_1.joinPathFragments)(options.e2eProjectRoot, 'package.json'), packageJson); } const e2eTask = await configurationGenerator(host, { rootProject: options.rootProject, project: options.e2eProjectName, skipFormat: true, skipPackageJson: options.skipPackageJson, directory: 'src', js: false, linter: options.linter, setParserOptionsProject: options.setParserOptionsProject, webServerAddress: e2eWebServerInfo.e2eCiBaseUrl, webServerCommand: e2eWebServerInfo.e2eCiWebServerCommand, addPlugin: options.addPlugin, }); return e2eTask; } return () => { }; } async function getNextE2EWebServerInfo(tree, projectName, configFilePath, isPluginBeingAdded) { const nxJson = (0, devkit_1.readNxJson)(tree); let e2ePort = isPluginBeingAdded ? 3000 : 4200; const defaultServeTarget = isPluginBeingAdded ? 'dev' : 'serve'; if (nxJson.targetDefaults?.[defaultServeTarget] && nxJson.targetDefaults?.[defaultServeTarget].options?.port) { e2ePort = nxJson.targetDefaults?.[defaultServeTarget].options?.port; } return (0, e2e_web_server_info_utils_1.getE2EWebServerInfo)(tree, projectName, { plugin: '@nx/next/plugin', serveTargetName: 'devTargetName', serveStaticTargetName: 'startTargetName', configFilePath, }, { defaultServeTargetName: defaultServeTarget, defaultServeStaticTargetName: 'start', defaultE2EWebServerAddress: `http://127.0.0.1:${e2ePort}`, defaultE2ECiBaseUrl: `http://localhost:${e2ePort}`, defaultE2EPort: e2ePort, }, isPluginBeingAdded); }