UNPKG

@nx/remix

Version:

The Remix plugin for Nx contains executors and generators for managing Remix applications and libraries within an Nx workspace. It provides: - Integration with libraries such as Vitest, Jest, Playwright, Cypress, and Storybook. - Generators for applica

118 lines (117 loc) 5.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.addE2E = addE2E; const devkit_1 = require("@nx/devkit"); const versions_1 = require("../../../utils/versions"); const e2e_web_server_info_utils_1 = require("@nx/devkit/src/generators/e2e-web-server-info-utils"); async function addE2E(tree, options) { const hasRemixPlugin = (0, devkit_1.readNxJson)(tree).plugins?.find((p) => typeof p === 'string' ? p === '@nx/remix/plugin' : p.plugin === '@nx/remix/plugin'); let e2eWebsServerInfo = await getRemixE2EWebServerInfo(tree, options.projectName, (0, devkit_1.joinPathFragments)(options.projectRoot, 'remix.config.js'), options.addPlugin ?? Boolean(hasRemixPlugin)); if (options.e2eTestRunner === 'cypress') { const { configurationGenerator } = (0, devkit_1.ensurePackage)('@nx/cypress', (0, versions_1.getPackageVersion)(tree, 'nx')); const packageJson = { name: options.e2eProjectName, version: '0.0.1', private: true, }; if (!options.useProjectJson) { packageJson.nx = { implicitDependencies: [options.projectName], }; } else { (0, devkit_1.addProjectConfiguration)(tree, options.e2eProjectName, { projectType: 'application', root: options.e2eProjectRoot, sourceRoot: (0, devkit_1.joinPathFragments)(options.e2eProjectRoot, 'src'), targets: {}, tags: [], implicitDependencies: [options.projectName], }); } if (!options.useProjectJson || options.isUsingTsSolutionConfig) { (0, devkit_1.writeJson)(tree, (0, devkit_1.joinPathFragments)(options.e2eProjectRoot, 'package.json'), packageJson); } const e2eTask = await configurationGenerator(tree, { project: options.e2eProjectName, directory: 'src', skipFormat: true, devServerTarget: e2eWebsServerInfo.e2eDevServerTarget, baseUrl: e2eWebsServerInfo.e2eWebServerAddress, webServerCommands: { default: e2eWebsServerInfo.e2eWebServerCommand, production: e2eWebsServerInfo.e2eCiWebServerCommand, }, ciWebServerCommand: e2eWebsServerInfo.e2eCiWebServerCommand, ciBaseUrl: e2eWebsServerInfo.e2eCiBaseUrl, addPlugin: options.addPlugin, }); return e2eTask; } else if (options.e2eTestRunner === 'playwright') { const { configurationGenerator } = (0, devkit_1.ensurePackage)('@nx/playwright', (0, versions_1.getPackageVersion)(tree, 'nx')); const packageJson = { name: options.e2eProjectName, version: '0.0.1', private: true, }; if (!options.useProjectJson) { packageJson.nx = { implicitDependencies: [options.projectName], }; } else { (0, devkit_1.addProjectConfiguration)(tree, options.e2eProjectName, { projectType: 'application', root: options.e2eProjectRoot, sourceRoot: (0, devkit_1.joinPathFragments)(options.e2eProjectRoot, 'src'), targets: {}, tags: [], implicitDependencies: [options.projectName], }); } if (!options.useProjectJson || options.isUsingTsSolutionConfig) { (0, devkit_1.writeJson)(tree, (0, devkit_1.joinPathFragments)(options.e2eProjectRoot, 'package.json'), packageJson); } const e2eTask = await configurationGenerator(tree, { project: options.e2eProjectName, skipFormat: true, skipPackageJson: false, directory: 'src', js: false, linter: options.linter, setParserOptionsProject: false, webServerCommand: e2eWebsServerInfo.e2eCiWebServerCommand, webServerAddress: e2eWebsServerInfo.e2eCiBaseUrl, rootProject: options.rootProject, addPlugin: options.addPlugin, }); return e2eTask; } else { return () => { }; } } async function getRemixE2EWebServerInfo(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/remix/plugin', serveTargetName: 'serveTargetName', serveStaticTargetName: 'serveStaticTargetName', configFilePath, }, { defaultServeTargetName: defaultServeTarget, defaultServeStaticTargetName: 'serve-static', defaultE2EWebServerAddress: `http://localhost:${e2ePort}`, defaultE2ECiBaseUrl: 'http://localhost:3000', defaultE2EPort: e2ePort, }, isPluginBeingAdded); }