UNPKG

@nx/react-native

Version:

The Nx Plugin for React Native contains generators for managing React Native applications and libraries within an Nx workspace. It provides: -Integration with libraries such as Jest, Detox, and Storybook. -Scaffolding for creating buildable libraries th

78 lines (77 loc) 3.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = syncDepsExecutor; exports.syncDeps = syncDeps; exports.displayNewlyAddedDepsMessage = displayNewlyAddedDepsMessage; const path_1 = require("path"); const pc = require("picocolors"); const devkit_1 = require("@nx/devkit"); const find_all_npm_dependencies_1 = require("../../utils/find-all-npm-dependencies"); async function* syncDepsExecutor(options, context) { 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, devkit_1.readJsonFile)(workspacePackageJsonPath); const projectPackageJson = (0, devkit_1.readJsonFile)(projectPackageJsonPath); displayNewlyAddedDepsMessage(context.projectName, await syncDeps(context.projectName, projectPackageJson, projectPackageJsonPath, workspacePackageJson, context.projectGraph, typeof options.include === 'string' ? options.include.split(',') : options.include, typeof options.exclude === 'string' ? options.exclude.split(',') : options.exclude, options.all)); yield { success: true }; } async function syncDeps(projectName, projectPackageJson, projectPackageJsonPath, workspacePackageJson, projectGraph = (0, devkit_1.readCachedProjectGraph)(), include = [], exclude = [], all = false) { let npmDeps = all ? Object.keys(workspacePackageJson.dependencies || {}) : (0, find_all_npm_dependencies_1.findAllNpmDependencies)(projectGraph, projectName); let npmDevdeps = all ? Object.keys(workspacePackageJson.devDependencies || {}) : []; const newDeps = []; let updated = false; if (!projectPackageJson.dependencies) { projectPackageJson.dependencies = {}; updated = true; } if (include && include.length) { npmDeps.push(...include); } if (exclude && exclude.length) { npmDeps = npmDeps.filter((dep) => !exclude.includes(dep)); } if (!projectPackageJson.devDependencies) { projectPackageJson.devDependencies = {}; } if (!projectPackageJson.dependencies) { projectPackageJson.dependencies = {}; } npmDeps.forEach((dep) => { if (!projectPackageJson.dependencies[dep] && !projectPackageJson.devDependencies[dep]) { projectPackageJson.dependencies[dep] = '*'; newDeps.push(dep); updated = true; } }); npmDevdeps.forEach((dep) => { if (!projectPackageJson.dependencies[dep] && !projectPackageJson.devDependencies[dep]) { projectPackageJson.devDependencies[dep] = '*'; newDeps.push(dep); updated = true; } }); if (updated) { (0, devkit_1.writeJsonFile)(projectPackageJsonPath, projectPackageJson); } return newDeps; } function displayNewlyAddedDepsMessage(projectName, deps) { if (deps.length > 0) { devkit_1.logger.info(`${pc.bold(pc.cyan('info'))} Added entries to 'package.json' for '${projectName}' (for autolink): ${deps.map((d) => pc.bold(pc.cyan(`"${d}": "*"`))).join('\n ')}`); } else { devkit_1.logger.info(`${pc.bold(pc.cyan('info'))} Dependencies for '${projectName}' are up to date! No changes made.`); } }