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.

131 lines (130 loc) 5.16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getExpoDependenciesVersionsToInstall = getExpoDependenciesVersionsToInstall; exports.isExpoV53 = isExpoV53; exports.isExpoV54 = isExpoV54; exports.getInstalledExpoVersion = getInstalledExpoVersion; exports.getInstalledExpoMajorVersion = getInstalledExpoMajorVersion; exports.getInstalledExpoVersionFromGraph = getInstalledExpoVersionFromGraph; const devkit_1 = require("@nx/devkit"); const semver_1 = require("semver"); const versions_1 = require("./versions"); /** * Get the appropriate dependency versions based on the installed Expo version. * Returns v53 versions if v53 is detected, otherwise returns v54 (latest). */ async function getExpoDependenciesVersionsToInstall(tree) { const sharedVersions = { reactNativeSvgTransformer: versions_1.reactNativeSvgTransformerVersion, reactNativeSvg: versions_1.reactNativeSvgVersion, testingLibraryReactNative: versions_1.testingLibraryReactNativeVersion, babelRuntime: versions_1.babelRuntimeVersion, }; if (await isExpoV53(tree)) { return { expo: versions_1.expoV53Version, expoSplashScreen: versions_1.expoV53SplashScreenVersion, expoStatusBar: versions_1.expoV53StatusBarVersion, expoSystemUi: versions_1.expoV53SystemUiVersion, expoCli: versions_1.expoV53CliVersion, babelPresetExpo: versions_1.babelPresetExpoV53Version, expoMetroConfig: versions_1.expoV53MetroConfigVersion, expoMetroRuntime: versions_1.expoV53MetroRuntimeVersion, jestExpo: versions_1.jestExpoV53Version, react: versions_1.reactV53Version, reactDom: versions_1.reactDomV53Version, typesReact: versions_1.typesReactV53Version, reactNative: versions_1.reactNativeV53Version, metro: versions_1.metroV53Version, reactNativeWeb: versions_1.reactNativeWebV53Version, ...sharedVersions, }; } // Default to v54 (latest) return { expo: versions_1.expoV54Version, expoSplashScreen: versions_1.expoV54SplashScreenVersion, expoStatusBar: versions_1.expoV54StatusBarVersion, expoSystemUi: versions_1.expoV54SystemUiVersion, expoCli: versions_1.expoV54CliVersion, babelPresetExpo: versions_1.babelPresetExpoV54Version, expoMetroConfig: versions_1.expoV54MetroConfigVersion, expoMetroRuntime: versions_1.expoV54MetroRuntimeVersion, jestExpo: versions_1.jestExpoV54Version, react: versions_1.reactV54Version, reactDom: versions_1.reactDomV54Version, typesReact: versions_1.typesReactV54Version, reactNative: versions_1.reactNativeV54Version, metro: versions_1.metroV54Version, reactNativeWeb: versions_1.reactNativeWebV54Version, ...sharedVersions, }; } /** * Check if the workspace is using Expo v53. */ async function isExpoV53(tree) { let installedExpoVersion = await getInstalledExpoVersionFromGraph(); if (!installedExpoVersion) { installedExpoVersion = getInstalledExpoVersion(tree); } if (!installedExpoVersion) { return false; // No Expo installed, default to latest } return (0, semver_1.major)(installedExpoVersion) === 53; } /** * Check if the workspace is using Expo v54. */ async function isExpoV54(tree) { let installedExpoVersion = await getInstalledExpoVersionFromGraph(); if (!installedExpoVersion) { installedExpoVersion = getInstalledExpoVersion(tree); } if (!installedExpoVersion) { return true; // No Expo installed, default to latest (v54) } return (0, semver_1.major)(installedExpoVersion) === 54; } /** * Get the installed Expo version from package.json. */ function getInstalledExpoVersion(tree) { const installedExpoVersion = (0, devkit_1.getDependencyVersionFromPackageJson)(tree, 'expo'); if (!installedExpoVersion || installedExpoVersion === 'latest' || installedExpoVersion === 'beta') { return null; } return ((0, semver_1.clean)(installedExpoVersion) ?? (0, semver_1.coerce)(installedExpoVersion)?.version ?? null); } /** * Get the installed Expo major version. */ function getInstalledExpoMajorVersion(tree) { const installedExpoVersion = getInstalledExpoVersion(tree); if (!installedExpoVersion) { return undefined; } const installedMajor = (0, semver_1.major)(installedExpoVersion); if (installedMajor !== 53 && installedMajor !== 54) { return undefined; } return installedMajor; } /** * Get the installed Expo version from the project graph. */ async function getInstalledExpoVersionFromGraph() { try { const graph = await (0, devkit_1.createProjectGraphAsync)(); const expoDep = graph.externalNodes?.['npm:expo']; if (!expoDep) { return undefined; } return (0, semver_1.clean)(expoDep.data.version) ?? (0, semver_1.coerce)(expoDep.data.version)?.version; } catch { return undefined; } }