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.

55 lines (54 loc) 2.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = installExecutor; exports.installAndUpdatePackageJson = installAndUpdatePackageJson; const devkit_1 = require("@nx/devkit"); const fileutils_1 = require("nx/src/utils/fileutils"); const path_1 = require("path"); const sync_deps_impl_1 = require("../sync-deps/sync-deps.impl"); let childProcess; async function* installExecutor(options, context) { try { await installAndUpdatePackageJson(context, options); yield { success: true, }; } finally { if (childProcess) { childProcess.kill(); } } } async function installAndUpdatePackageJson(context, options) { const { installAsync } = require('@expo/cli/build/src/install/installAsync'); const packages = typeof options.packages === 'string' ? options.packages.split(',') : options.packages ?? []; await installAsync(packages, { fix: options.fix, check: options.check, }, createInstallOptions({ force: options.force })); const projectRoot = context.projectsConfigurations.projects[context.projectName].root; const workspacePackageJsonPath = (0, path_1.join)(context.root, 'package.json'); const projectPackageJsonPath = (0, path_1.join)(context.root, projectRoot, 'package.json'); const workspacePackageJson = (0, fileutils_1.readJsonFile)(workspacePackageJsonPath); const projectPackageJson = (0, fileutils_1.readJsonFile)(projectPackageJsonPath); (0, sync_deps_impl_1.displayNewlyAddedDepsMessage)(context.projectName, await (0, sync_deps_impl_1.syncDeps)(context.projectName, projectPackageJson, projectPackageJsonPath, workspacePackageJson, context.projectGraph, packages)); } // options from https://github.com/expo/expo/blob/main/packages/%40expo/cli/src/install/index.ts function createInstallOptions(options) { return Object.keys(options).reduce((acc, k) => { const v = options[k]; if (typeof v === 'boolean') { if (v === true) { // when true, does not need to pass the value true, just need to pass the flag in kebob case acc.push(`--${(0, devkit_1.names)(k).fileName}`); } } else if (v !== undefined) { acc.push(`--${(0, devkit_1.names)(k).fileName}`, v); } return acc; }, []); }