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.

142 lines (141 loc) 6.5 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 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) { const { webStaticServeGenerator } = (0, devkit_1.ensurePackage)('@nx/web', versions_1.nxVersion); await 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, }); 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, }); 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); }