UNPKG

@nx/expo

Version:

The Expo Plugin for Nx contains executors and generators for managing and developing an expo application within your workspace. For example, you can directly build for different target platforms as well as generate projects and publish your code.

170 lines (169 loc) • 8.58 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 target_defaults_utils_1 = require("@nx/devkit/src/generators/target-defaults-utils"); const find_plugin_for_config_file_1 = require("@nx/devkit/src/utils/find-plugin-for-config-file"); const web_1 = require("@nx/web"); const has_expo_plugin_1 = require("../../../utils/has-expo-plugin"); const versions_1 = require("../../../utils/versions"); async function addE2e(tree, options) { const hasPlugin = (0, has_expo_plugin_1.hasExpoPlugin)(tree); if (!hasPlugin) { await (0, web_1.webStaticServeGenerator)(tree, { buildTarget: `${options.projectName}:export`, targetName: 'serve-static', }); } const e2eWebServerInfo = await getExpoE2EWebServerInfo(tree, options.projectName, (0, devkit_1.joinPathFragments)(options.appProjectRoot, 'app.json'), options.addPlugin); switch (options.e2eTestRunner) { case 'cypress': { const { configurationGenerator } = (0, devkit_1.ensurePackage)('@nx/cypress', 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)(tree, options.e2eProjectName, { projectType: 'application', root: options.e2eProjectRoot, sourceRoot: (0, devkit_1.joinPathFragments)(options.e2eProjectRoot, 'src'), targets: {}, implicitDependencies: [options.projectName], tags: [], }); } if (!options.useProjectJson || options.isTsSolutionSetup) { (0, devkit_1.writeJson)(tree, (0, devkit_1.joinPathFragments)(options.e2eProjectRoot, 'package.json'), packageJson); } const e2eTask = await configurationGenerator(tree, { ...options, project: options.e2eProjectName, directory: 'src', // the name and root are already normalized, instruct the generator to use them as is bundler: 'none', skipFormat: true, devServerTarget: e2eWebServerInfo.e2eDevServerTarget, baseUrl: e2eWebServerInfo.e2eWebServerAddress, ciWebServerCommand: e2eWebServerInfo.e2eCiWebServerCommand, webServerCommands: { default: e2eWebServerInfo.e2eWebServerCommand, production: e2eWebServerInfo.e2eCiWebServerCommand, }, ciBaseUrl: e2eWebServerInfo.e2eCiBaseUrl, jsx: true, rootProject: options.rootProject, }); if (options.addPlugin || (0, devkit_1.readNxJson)(tree).plugins?.find((p) => typeof p === 'string' ? p === '@nx/cypress/plugin' : p.plugin === '@nx/cypress/plugin')) { let buildTarget = '^export'; if (hasPlugin) { const matchingExpoPlugin = await (0, find_plugin_for_config_file_1.findPluginForConfigFile)(tree, '@nx/expo/plugin', (0, devkit_1.joinPathFragments)(options.appProjectRoot, 'app.json')); if (matchingExpoPlugin && typeof matchingExpoPlugin !== 'string') { buildTarget = `^${matchingExpoPlugin.options?.exportTargetName ?? 'export'}`; } } await (0, target_defaults_utils_1.addE2eCiTargetDefaults)(tree, '@nx/cypress/plugin', buildTarget, (0, devkit_1.joinPathFragments)(options.e2eProjectRoot, `cypress.config.${options.js ? 'js' : 'ts'}`)); } return e2eTask; } case '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)(tree, options.e2eProjectName, { projectType: 'application', root: options.e2eProjectRoot, sourceRoot: (0, devkit_1.joinPathFragments)(options.e2eProjectRoot, 'src'), targets: {}, implicitDependencies: [options.projectName], tags: [], }); } if (!options.useProjectJson || options.isTsSolutionSetup) { (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: options.skipPackageJson, directory: 'src', js: false, linter: options.linter, setParserOptionsProject: options.setParserOptionsProject, webServerCommand: e2eWebServerInfo.e2eCiWebServerCommand, webServerAddress: e2eWebServerInfo.e2eCiBaseUrl, rootProject: options.rootProject, addPlugin: options.addPlugin, }); if (options.addPlugin || (0, devkit_1.readNxJson)(tree).plugins?.find((p) => typeof p === 'string' ? p === '@nx/playwright/plugin' : p.plugin === '@nx/playwright/plugin')) { let buildTarget = '^export'; if (hasPlugin) { const matchingExpoPlugin = await (0, find_plugin_for_config_file_1.findPluginForConfigFile)(tree, '@nx/expo/plugin', (0, devkit_1.joinPathFragments)(options.appProjectRoot, 'app.json')); if (matchingExpoPlugin && typeof matchingExpoPlugin !== 'string') { buildTarget = `^${matchingExpoPlugin.options?.exportTargetName ?? 'export'}`; } } await (0, target_defaults_utils_1.addE2eCiTargetDefaults)(tree, '@nx/playwright/plugin', buildTarget, (0, devkit_1.joinPathFragments)(options.e2eProjectRoot, `playwright.config.ts`)); } return e2eTask; } case 'detox': const { detoxApplicationGenerator } = (0, devkit_1.ensurePackage)('@nx/detox', versions_1.nxVersion); return detoxApplicationGenerator(tree, { ...options, e2eName: options.e2eProjectName, e2eDirectory: options.e2eProjectRoot, appProject: options.projectName, appDisplayName: options.displayName, appName: options.simpleName, framework: 'expo', setParserOptionsProject: options.setParserOptionsProject, skipFormat: true, }); case 'none': default: return () => { }; } } async function getExpoE2EWebServerInfo(tree, projectName, configFilePath, isPluginBeingAdded) { const nxJson = (0, devkit_1.readNxJson)(tree); let e2ePort = isPluginBeingAdded ? 8081 : 4200; if (nxJson.targetDefaults?.['serve'] && nxJson.targetDefaults?.['serve'].options?.port) { e2ePort = nxJson.targetDefaults?.['serve'].options?.port; } return (0, e2e_web_server_info_utils_1.getE2EWebServerInfo)(tree, projectName, { plugin: '@nx/expo/plugin', serveTargetName: 'serveTargetName', serveStaticTargetName: 'serveTargetName', configFilePath, }, { defaultServeTargetName: 'serve', defaultServeStaticTargetName: 'serve-static', defaultE2EWebServerAddress: `http://localhost:${e2ePort}`, defaultE2ECiBaseUrl: 'http://localhost:4200', defaultE2EPort: e2ePort, }, isPluginBeingAdded); }