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.

78 lines (77 loc) 3.55 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, options.excludeImplicit)); yield { success: true }; } async function syncDeps(projectName, projectPackageJson, projectPackageJsonPath, workspacePackageJson, projectGraph = (0, devkit_1.readCachedProjectGraph)(), include = [], exclude = [], all = false, excludeImplicit = false) { let npmDeps = all ? Object.keys(workspacePackageJson.dependencies || {}) : (0, find_all_npm_dependencies_1.findAllNpmDependencies)(projectGraph, projectName, { excludeImplicit }); 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.`); } }